youker-assistant/0000775000175000017500000000000013265005454013031 5ustar fengfengyouker-assistant/.bzr-builddeb/0000775000175000017500000000000013265005754015457 5ustar fengfengyouker-assistant/.bzr-builddeb/default.conf0000664000175000017500000000003013260315532017734 0ustar fengfeng[BUILDDEB] split = True youker-assistant/cleaner/0000775000175000017500000000000013260315532014436 5ustar fengfengyouker-assistant/cleaner/cleanlistwidget.ui0000664000175000017500000000214113260315532020155 0ustar fengfeng CleanListWidget 0 0 560 398 Dialog 0 65 560 331 true 0 0 558 329 0 32 560 33 youker-assistant/cleaner/cleanermainwidget.cpp0000664000175000017500000003457113260315532020636 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanermainwidget.h" #include #include "../src/mainwindow.h" #include "../component/selectcategorywidget.h" #include "../component/cleangroup.h" CleanerMainWidget::CleanerMainWidget(QWidget *parent, MainWindow *window, Toolkits *kits, QString skin) : QWidget(parent), parentWindow(window), toolKits(kits) { this->setFixedSize(900, 403); this->setObjectName("transparentWidget"); // this->setAutoFillBackground(true); // QPalette palette; // palette.setBrush(QPalette::Window, QBrush(Qt::white)); // this->setPalette(palette); tip_label = new QLabel(this); tip_label->setGeometry(QRect(30, 10, 800, 30)); tip_label->setObjectName("tipLabel"); // QStringList cache_list, status_list; // cache_list << tr("Cleanup Package Cache") << tr("Cleanup Software Center Cache") << tr("Cleanup Thumbnails Cache") << tr("Cleanup FireFox Cache") << tr("Cleanup Chromium Cache"); // status_list << "apt" << "software-center" << "thumbnails" << "firefox" << "chromium"; // cache_items = new CleanerItems(cache_list, status_list, skin, 280, tr("Cache Items")); // cache_btn = new KylinCheckBox(0, "://res/cache.png"); cache_btn = new CleanGroup(this, "://res/cache"); cache_btn->setFocusPolicy(Qt::NoFocus); // cache_btn->setGeometry(QRect(10, 50, 260, 150)); cache_btn->setGeometry(QRect(10, 150, 260, 150)); // cache_btn->setFixedSize(260, 130); cache_btn->setStatusTip("cache"); cache_btn->setLabelText(tr("System Cache"), tr("Cleanup cache of system, software-center, thumbnails and browser"));//系统缓存垃圾 清除包、软件中心、缩略图和浏览器缓存 //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(cache_items, SIGNAL(notifyMainCheckBox(int)), cache_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(cache_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); //20160711 /*QStringList package_list; package_list << tr("Uninstall unnecessary procedures") << tr("Uninstall old kernel packages") << tr("Cleanup software configfile"); status_list.clear(); status_list << "unneed" << "oldkernel" << "configfile"; package_items = new CleanerItems(package_list, status_list, skin, 200, tr("Package Items")); // package_btn = new KylinCheckBox(0, "://res/package.png"); package_btn = new CleanGroup(this, "://res/package"); package_btn->setFocusPolicy(Qt::NoFocus); package_btn->setGeometry(QRect(320, 50, 260, 150)); // package_btn->setFixedSize(260, 130); package_btn->setLabelText(tr("Packages and configfile"), tr("Cleaning up the software that installed by other software bundled, old kernel packages and configfile, to improve system performance"));//包垃圾 清除不必要的程序、旧内核包、配置文件 package_btn->setStatusTip("package"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(package_items, SIGNAL(notifyMainCheckBox(int)), package_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(package_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked()));*/ // QStringList cookies_list; // cookies_list << tr("Cleanup the Cookies saving in Firefox") << tr("Cleanup the Cookies saving in Chromium"); // status_list.clear(); // status_list << "firefox" << "chromium"; // cookies_items = new CleanerItems(cookies_list, status_list, skin, 170, tr("Cookies Items")); // cookies_btn = new KylinCheckBox(0, "://res/cookie.png"); cookies_btn = new CleanGroup(this, "://res/cookie"); cookies_btn->setFocusPolicy(Qt::NoFocus); cookies_btn->setGeometry(QRect(320, 150, 260, 150)); // cookies_btn->setGeometry(QRect(630, 50, 260, 150)); // cookies_btn->setFixedSize(260, 130); cookies_btn->setLabelText(tr("Cookies"), tr("Clean up user login information, support Firefox and Chromium browser"));//清除上网、游戏、购物等记录 cookies_btn->setStatusTip("cookies"); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(cookies_items, SIGNAL(notifyMainCheckBox(int)), cookies_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(cookies_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); // QStringList trace_list; // trace_list << tr("Clean up the Firefox Internet records") << tr("Clean up the Chromium Internet records") << tr("Clean up the recently opened documents records") << tr("Delete the command history") << tr("Delete the debug logs"); // status_list.clear(); // status_list << "firefox" << "chromium" << "system" << "bash" << "X11"; // trace_items = new CleanerItems(trace_list, status_list, skin, 280, tr("Trace Items")); // trace_btn = new KylinCheckBox(0, "://res/trace.png"); trace_btn = new CleanGroup(this, "://res/trace"); trace_btn->setFocusPolicy(Qt::NoFocus); // trace_btn->setGeometry(QRect(10, 240, 260, 150)); trace_btn->setGeometry(QRect(630, 150, 260, 150)); // trace_btn->setFixedSize(260, 130); trace_btn->setLabelText(tr("History trace"), tr("Cleaning the internet and opened documents recently records"));//使用痕迹 清除浏览器和系统使用痕迹 trace_btn->setStatusTip("trace"); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(trace_items, SIGNAL(notifyMainCheckBox(int)), trace_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(trace_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); this->setLanguage(); cache_list << tr("Cleanup Package Cache") << tr("Cleanup Software Center Cache") << tr("Cleanup Thumbnails Cache") << tr("Cleanup FireFox Cache") << tr("Cleanup Chromium Cache"); cache_status_list << "apt" << "software-center" << "thumbnails" << "firefox" << "chromium"; cookies_list << tr("Cleanup the Cookies saving in Firefox") << tr("Cleanup the Cookies saving in Chromium"); cookies_status_list << "firefox" << "chromium"; trace_list << tr("Clean up the Firefox Internet records") << tr("Clean up the Chromium Internet records") << tr("Clean up the recently opened documents records") << tr("Delete the command history") << tr("Delete the debug logs"); trace_status_list << "firefox" << "chromium" << "system" << "bash" << "X11"; m_selectedCache = cache_status_list; m_selectedCookie = cookies_status_list; m_selectedTrace = trace_status_list; } CleanerMainWidget::~CleanerMainWidget() { argsMap.clear(); // if(cache_items != NULL) { // delete cache_items; // cache_items = NULL; // } // if(package_items != NULL) { // delete package_items; // package_items = NULL; // } // if(cookies_items != NULL) { // delete cookies_items; // cookies_items = NULL; // } // if(trace_items != NULL) { // delete trace_items; // trace_items = NULL; // } } void CleanerMainWidget::setLanguage() { tip_label->setText(tr("Please select the items you want to clean")); } void CleanerMainWidget::resetCurrentSkin(QString skin) { // if(cache_items != NULL) // cache_items->resetTitleSkin(skin); // if(trace_items != NULL) // trace_items->resetTitleSkin(skin); // if(package_items != NULL) // package_items->resetTitleSkin(skin); // if(cookies_items != NULL) // cookies_items->resetTitleSkin(skin); } void CleanerMainWidget::receiveScanSignal() { this->getAllScanSelectedItems(); if (argsMap.empty()) { toolKits->alertMSG(parentWindow->geometry().topLeft().x(), parentWindow->geometry().topLeft().y(), tr("Scan args is empty!")); } else { emit this->showActionAnimaiton(); emit this->startScanSystem(argsMap); } } void CleanerMainWidget::getAllScanSelectedItems() { argsMap.clear(); if (!m_selectedCache.isEmpty()) argsMap.insert("Cache", m_selectedCache); if (!m_selectedCookie.isEmpty()) argsMap.insert("Cookies", m_selectedCookie); if (!m_selectedTrace.isEmpty()) argsMap.insert("History", m_selectedTrace); // QStringList cacheTmp; //// QStringList packageTmp; // QStringList cookieTmp; // QStringList historyTmp; // if(cache_btn != NULL && cache_btn->getCheckBoxStatus() != 0) // { // QStringList tmp = cache_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = package_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cookies_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = trace_items->getSelectedItems(); // for(int i = 0; i 0) // argsMap.insert("Cache", cacheTmp); //// if(packageTmp.length() > 0) //// argsMap.insert("Packages", packageTmp); // if(cookieTmp.length() > 0) // argsMap.insert("Cookies", cookieTmp); // if(historyTmp.length() > 0) // argsMap.insert("History", historyTmp); } void CleanerMainWidget::onRefreshSelectedItems(CleanerCategoryID id, const QStringList &infos) { qDebug() << "AAAA" << id; qDebug() << infos; switch (id) { case CleanerCategoryID::CacheCategory: m_selectedCache.clear(); m_selectedCache = infos; break; case CleanerCategoryID::CookieCategory: m_selectedCookie.clear(); m_selectedCookie = infos; break; case CleanerCategoryID::TraceCategory: m_selectedTrace.clear(); m_selectedTrace = infos; break; default: break; } } void CleanerMainWidget::resetDefaultStatus() { cache_btn->resetMainStatus(2); cookies_btn->resetMainStatus(2); trace_btn->resetMainStatus(2); m_selectedCache = cache_status_list; m_selectedCookie = cookies_status_list; m_selectedTrace = trace_status_list; } void CleanerMainWidget::onButtonClicked() { QObject *object = QObject::sender(); // KylinCheckBox *checkbox = qobject_cast(object); CleanGroup *checkbox = qobject_cast(object); QString object_name = checkbox->statusTip(); if (object_name == "cache") { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); // cache_items->move(w_x, w_y); // cache_items->exec(); m_selectedCache.clear(); m_selectedCache = cache_status_list; SelectCategoryWidget *w = new SelectCategoryWidget(CleanerCategoryID::CacheCategory, tr("Cache Items")); w->loadData(cache_list, cache_status_list); connect(w, SIGNAL(notifyMainCheckBox(int)), cache_btn, SLOT(resetMainStatus(int))); connect(w, SIGNAL(refreshSelectedItems(CleanerCategoryID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerCategoryID,QStringList))); w->exec(); delete w; } // if(object_name == "package") // { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (200 / 2); // package_items->move(w_x, w_y); // package_items->exec(); // } if (object_name == "cookies") { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (170 / 2); // cookies_items->move(w_x, w_y); // cookies_items->exec(); m_selectedCookie.clear(); m_selectedCookie = cookies_status_list; SelectCategoryWidget *w = new SelectCategoryWidget(CleanerCategoryID::CookieCategory, tr("Cookies Items")); w->loadData(cookies_list, cookies_status_list); connect(w, SIGNAL(notifyMainCheckBox(int)), cookies_btn, SLOT(resetMainStatus(int))); connect(w, SIGNAL(refreshSelectedItems(CleanerCategoryID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerCategoryID,QStringList))); w->exec(); delete w; } if (object_name == "trace") { // m_selectedTrace.clear(); // m_selectedTrace = status_list; // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); // trace_items->move(w_x, w_y); // trace_items->exec(); m_selectedCookie.clear(); m_selectedCookie = trace_status_list; SelectCategoryWidget *w = new SelectCategoryWidget(CleanerCategoryID::TraceCategory, tr("Trace Items")); w->loadData(trace_list, trace_status_list); connect(w, SIGNAL(notifyMainCheckBox(int)), trace_btn, SLOT(resetMainStatus(int))); connect(w, SIGNAL(refreshSelectedItems(CleanerCategoryID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerCategoryID,QStringList))); w->exec(); delete w; } } youker-assistant/cleaner/cleaneritems.h0000664000175000017500000000420113260315532017257 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERITEMS_H #define CLEANERITEMS_H #include #include #include #include #include "../component/kylintitlebar.h" class MainWindow; class QCheckBox; class QGroupBox; //class CleanerItems : public QWidget class CleanerItems : public QDialog { Q_OBJECT public: // explicit CleanerItems(QStringList &arglist, QStringList &statuslist, int height = 0, const QString title_text = "UbuntuKylin", QWidget *parent = 0); explicit CleanerItems(QStringList &arglist, QStringList &statuslist, QString skin = ":/background/res/skin/1.png", int height = 0, const QString title_text = "UbuntuKylin", QDialog *parent = 0); ~CleanerItems(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setLanguage(); void initConnect(); int getItemCount(); QStringList getSelectedItems(); void resetTitleSkin(QString skin); public slots: void resetSubCheckbox(int status); void scanAllSubCheckbox(); void onCloseButtonClicked(); private: void initTitleBar(QString skin); signals: void notifyMainCheckBox(int status); private: QList checkbox_list; MainWindow *p_mainwindow; KylinTitleBar *title_bar; QString titleName; QPushButton *okBtn; QGroupBox *group_box; }; #endif // CLEANERITEMS_H youker-assistant/cleaner/cleanermainwidget-new.cpp0000664000175000017500000003731113260315532021420 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanermainwidget.h" #include #include "../mainui/mainwindow.h" #include "../component/cleangroup.h" #include #include CleanerMainWidget::CleanerMainWidget(QWidget *parent, SessionDispatcher *seroxy, MainWindow *window, Toolkits *kits, QString skin) : QWidget(parent), sessionproxy(seroxy), parentWindow(window), toolKits(kits) { this->setFixedSize(900, 403); this->setObjectName("transparentWidget"); scanWidgets = new QStackedWidget(this); // scanWidgets->setGeometry(rect()); // scanWidgets->lower(); scanWidgets->setGeometry(QRect(900, 0, 900, 403)); // this->setAutoFillBackground(true); // QPalette palette; // palette.setBrush(QPalette::Window, QBrush(Qt::white)); // this->setPalette(palette); baseWidget = new QWidget(this); baseWidget->setGeometry(rect()); // baseWidget->setAutoFillBackground(true); // QPalette palette; // palette.setBrush(QPalette::Window, QBrush(Qt::blue)); // baseWidget->setPalette(palette); tip_label = new QLabel(baseWidget); tip_label->setObjectName("tipLabel"); tip_label->setGeometry(QRect(30, 10, 800, 30)); QStringList cache_list, status_list; cache_list << tr("Cleanup Package Cache") << tr("Cleanup Software Center Cache") << tr("Cleanup Thumbnails Cache") << tr("Cleanup FireFox Cache") << tr("Cleanup Chromium Cache"); status_list << "apt" << "software-center" << "thumbnails" << "firefox" << "chromium"; cache_items = new CleanerItems(cache_list, status_list, skin, 280, tr("Cache Items")); connect(cache_items, SIGNAL(sendoksignal()), this, SLOT(showCleanMainPage())); cache_btn = new CleanGroup(baseWidget, "://res/cache"); cache_btn->setGeometry(QRect(10, 50, 260, 150)); cache_btn->setStatusTip("cache"); cache_btn->setLabelText(tr("System Cache"), tr("Cleanup cache of system, software-center, thumbnails and browser"));//系统缓存垃圾 清除包、软件中心、缩略图和浏览器缓存 //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_items, SIGNAL(notifyMainCheckBox(int)), cache_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(cache_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); QStringList package_list; package_list << tr("Uninstall unnecessary procedures") << tr("Uninstall old kernel packages") << tr("Cleanup software configfile"); status_list.clear(); status_list << "unneed" << "oldkernel" << "configfile"; package_items = new CleanerItems(package_list, status_list, skin, 200, tr("Package Items")); connect(package_items, SIGNAL(sendoksignal()), this, SLOT(showCleanMainPage())); package_btn = new CleanGroup(baseWidget, "://res/cache"); package_btn->setGeometry(QRect(310, 50, 260, 150)); package_btn->setLabelText(tr("Packages and configfile"), tr("Cleaning up the software that installed by other software bundled, old kernel packages and configfile, to improve system performance"));//包垃圾 清除不必要的程序、旧内核包、配置文件 package_btn->setStatusTip("package"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(package_items, SIGNAL(notifyMainCheckBox(int)), package_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(package_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); QStringList cookies_list; cookies_list << tr("Cleanup the Cookies saving in Firefox") << tr("Cleanup the Cookies saving in Chromium"); status_list.clear(); status_list << "firefox" << "chromium"; cookies_items = new CleanerItems(cookies_list, status_list, skin, 170, tr("Cookies Items")); connect(cookies_items, SIGNAL(sendoksignal()), this, SLOT(showCleanMainPage())); cookies_btn = new CleanGroup(baseWidget, "://res/cache"); cookies_btn->setGeometry(QRect(610, 50, 260, 150)); cookies_btn->setLabelText(tr("Cookies"), tr("Clean up user login information, support Firefox and Chromium browser"));//清除上网、游戏、购物等记录 cookies_btn->setStatusTip("cookies"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cookies_items, SIGNAL(notifyMainCheckBox(int)), cookies_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(cookies_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); QStringList trace_list; trace_list << tr("Clean up the Firefox Internet records") << tr("Clean up the Chromium Internet records") << tr("Clean up the recently opened documents records") << tr("Delete the command history") << tr("Delete the debug logs"); status_list.clear(); status_list << "firefox" << "chromium" << "system" << "bash" << "X11"; trace_items = new CleanerItems(trace_list, status_list, skin, 280, tr("Trace Items")); connect(trace_items, SIGNAL(sendoksignal()), this, SLOT(showCleanMainPage())); trace_btn = new CleanGroup(baseWidget, "://res/cache"); trace_btn->setGeometry(QRect(10, 240, 260, 150)); trace_btn->setLabelText(tr("History trace"), tr("Cleaning the internet and opened documents recently records"));//使用痕迹 清除浏览器和系统使用痕迹 trace_btn->setStatusTip("trace"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(trace_items, SIGNAL(notifyMainCheckBox(int)), trace_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(trace_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); // QHBoxLayout *tip_layout = new QHBoxLayout(); // tip_layout->addWidget(tip_label); // tip_layout->addStretch(); // tip_layout->setMargin(0); // tip_layout->setContentsMargins(38,20,72,0); // QHBoxLayout *layout1 = new QHBoxLayout; // layout1->addWidget(cache_btn); // layout1->addWidget(package_btn); // layout1->addWidget(cookies_btn); // layout1->setMargin(0); // layout1->setContentsMargins(0,0,0,0); // QHBoxLayout *layout2 = new QHBoxLayout; // layout2->addWidget(trace_btn); // layout2->addStretch(); // layout1->setMargin(0); // layout2->setContentsMargins(20,0,0,0); // QVBoxLayout *layoutbox = new QVBoxLayout; // layoutbox->addLayout(layout1); // layoutbox->addLayout(layout2); // layoutbox->setSpacing(20); // layoutbox->setMargin(0); // layoutbox->setContentsMargins(0,0,0,0); // QVBoxLayout *main_layout = new QVBoxLayout; // main_layout->addLayout(tip_layout); // main_layout->addLayout(layoutbox); // main_layout->addStretch(); // main_layout->setSpacing(30); // main_layout->setMargin(0); // main_layout->setContentsMargins(0,0,0,0); // setLayout(main_layout); this->setLanguage(); scanWidgets->addWidget(cache_items); scanWidgets->addWidget(package_items); scanWidgets->addWidget(cookies_items); scanWidgets->addWidget(trace_items); this->initAnimation(); } CleanerMainWidget::~CleanerMainWidget() { } void CleanerMainWidget::initAnimation() { QPropertyAnimation *m_upMainAnimation = new QPropertyAnimation(baseWidget, "pos"); m_upMainAnimation->setDuration(200); m_upMainAnimation->setStartValue(QPoint(0, 0)); m_upMainAnimation->setEndValue(QPoint(-900, 0)); QPropertyAnimation *m_downMainAnimation = new QPropertyAnimation(scanWidgets, "pos"); m_downMainAnimation->setDuration(200); m_downMainAnimation->setStartValue(QPoint(900, 0)); m_downMainAnimation->setEndValue(QPoint(0, 0)); // QPropertyAnimation *m_toTrans = new QPropertyAnimation(m_grayWidget, "opacity"); // m_toTrans->setDuration(200); // m_toTrans->setStartValue(1); // m_toTrans->setEndValue(0); m_upGroup = new QParallelAnimationGroup; m_upGroup->addAnimation(m_upMainAnimation); m_upGroup->addAnimation(m_downMainAnimation); // m_upGroup->addAnimation(m_toTrans); QPropertyAnimation *m_upGarAnimation = new QPropertyAnimation(baseWidget, "pos"); m_upGarAnimation->setDuration(200); m_upGarAnimation->setStartValue(QPoint(-900, 0)); m_upGarAnimation->setEndValue(QPoint(0, 0)); QPropertyAnimation *m_downGarAnimation = new QPropertyAnimation(scanWidgets, "pos"); m_downGarAnimation->setDuration(200); m_downGarAnimation->setStartValue(QPoint(0, 0)); m_downGarAnimation->setEndValue(QPoint(900, 0)); // QPropertyAnimation *m_toGray = new QPropertyAnimation(m_grayWidget, "opacity"); // m_toGray->setDuration(200); // m_toGray->setStartValue(0); // m_toGray->setEndValue(1); m_downGroup = new QParallelAnimationGroup; m_downGroup->addAnimation(m_upGarAnimation); m_downGroup->addAnimation(m_downGarAnimation); // m_downGroup->addAnimation(m_toGray); connect(m_upGroup, SIGNAL(finished()), SLOT(onUpGroupFinished())); } void CleanerMainWidget::setLanguage() { tip_label->setText(tr("Please select the items you want to clean")); } void CleanerMainWidget::resetCurrentSkin(QString skin) { // if(cache_items != NULL) // cache_items->resetTitleSkin(skin); // if(trace_items != NULL) // trace_items->resetTitleSkin(skin); // if(package_items != NULL) // package_items->resetTitleSkin(skin); // if(cookies_items != NULL) // cookies_items->resetTitleSkin(skin); } void CleanerMainWidget::showCleanMainPage() { m_downGroup->start(); qDebug() << "back to main....."; } void CleanerMainWidget::onUpGroupFinished() { scanWidgets->currentWidget()->show(); } void CleanerMainWidget::receiveScanSignal() { this->getAllScanSelectedItems(); if(argsMap.empty()) { toolKits->alertMSG(parentWindow->geometry().topLeft().x(), parentWindow->geometry().topLeft().y(), tr("Scan args is empty!")); } else { qDebug() << "args is.........." << argsMap; // emit this->showActionAnimaiton(); // sessionproxy->scanSystemCleanerItems(argsMap); } } void CleanerMainWidget::getAllScanSelectedItems() { argsMap.clear(); QStringList cacheTmp; QStringList packageTmp; QStringList cookieTmp; QStringList historyTmp; if(cache_btn != NULL && cache_btn->getCheckBoxStatus() != 0) { QStringList tmp = cache_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = package_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = cookies_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = trace_items->getSelectedItems(); for(int i = 0; i 0) argsMap.insert("Cache", cacheTmp); if(packageTmp.length() > 0) argsMap.insert("Packages", packageTmp); if(cookieTmp.length() > 0) argsMap.insert("Cookies", cookieTmp); if(historyTmp.length() > 0) argsMap.insert("History", historyTmp); } void CleanerMainWidget::onButtonClicked() { QObject *object = QObject::sender(); // KylinCheckBox *checkbox = qobject_cast(object); CleanGroup *checkbox = qobject_cast(object); QString object_name = checkbox->statusTip(); if(object_name == "cache") { scanWidgets->setCurrentWidget(cache_items); m_upGroup->start(); // if(cache_items->isHidden()) { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); // cache_items->move(w_x, w_y); // cache_items->show(); // } // else // { // cache_items->hide(); // } // if(!package_items->isHidden()) { // package_items->hide(); // } // if(!cookies_items->isHidden()) { // cookies_items->hide(); // } // if(!trace_items->isHidden()) { // trace_items->hide(); // } } else if(object_name == "package") { scanWidgets->setCurrentWidget(package_items); m_upGroup->start(); // if(package_items->isHidden()) { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (200 / 2); // package_items->move(w_x, w_y); // package_items->show(); // } // else // { // package_items->hide(); // } // if(!cache_items->isHidden()) { // cache_items->hide(); // } // if(!cookies_items->isHidden()) { // cookies_items->hide(); // } // if(!trace_items->isHidden()) { // trace_items->hide(); // } } if(object_name == "cookies") { scanWidgets->setCurrentWidget(cookies_items); m_upGroup->start(); // if(cookies_items->isHidden()) { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (170 / 2); // cookies_items->move(w_x, w_y); // cookies_items->show(); // } // else // { // cookies_items->hide(); // } // if(!cache_items->isHidden()) { // cache_items->hide(); // } // if(!package_items->isHidden()) { // package_items->hide(); // } // if(!trace_items->isHidden()) { // trace_items->hide(); // } } if(object_name == "trace") { scanWidgets->setCurrentWidget(trace_items); m_upGroup->start(); // if(trace_items->isHidden()) { // int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); // int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (200 / 2); // trace_items->move(w_x, w_y); // trace_items->show(); // } // else // { // trace_items->hide(); // } // if(!cache_items->isHidden()) { // cache_items->hide(); // } // if(!package_items->isHidden()) { // package_items->hide(); // } // if(!cookies_items->isHidden()) { // cookies_items->hide(); // } } } youker-assistant/cleaner/cleanerdetailwidget.h0000664000175000017500000000651213260315532020613 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERDETAILWIDGET_H #define CLEANERDETAILWIDGET_H #include #include #include #include #include "../component/utils.h" class QLabel; class QBoxLayout; class QHBoxLayout; class QVBoxLayout; class QGridLayout; class Toolkits; class MainWindow; class CleanSubGroup; class CleanerDetailWidget : public QWidget { Q_OBJECT public: explicit CleanerDetailWidget(QWidget *parent = 0, MainWindow *window = 0, Toolkits *kits = 0, QString skin = ":/background/res/skin/1.png"); ~CleanerDetailWidget(); void setUIData(); void setLanguage(); void initConnect(); void getAllSelectedItems(); void resetCurrentSkin(QString skin); void addItem(CleanSubGroup *item); public slots: void showCustomPage(); void showReciveData(const QStringList &data); void receiveCleanSignal(); void showReciveStatus(const QString &status); void CleanUIAndData(); // void receivePolicyKitSignal(bool status); void onRefreshSelectedItems(CleanerModuleID id, const QStringList &infos); void clearItems(); signals: // void notifyMainCheckBox(int status); // void showActionAnimaiton(); void sendScanOverStatus(bool status); void startCleanSystem(QMap itemsMap); private: MainWindow *parentWindow; Toolkits *toolKits; QMap argsData; QStringList cache_apt_list; QStringList cache_software_list; QStringList cache_thumbnails_list; QStringList cache_firefox_list; QStringList cache_chromium_list; /*QStringList package_unneed_list; QStringList package_oldkernel_list; QStringList package_configfile_list;*/ QStringList cookies_firefox_list; QStringList cookies_chromium_list; QString trace_firefox_count; QString trace_chromium_count; QString trace_system_count; QString trace_bash_size; QString trace_bash_path; QStringList trace_x11_list; QStringList m_selectedAptList; QStringList m_selectedSoftwareList; QStringList m_selectedThumbnailsList; QStringList m_selectedFirefoxCacheList; QStringList m_selectedChromiumCacheList; QStringList m_selectedFirefoxCookieList; QStringList m_selectedChromiumCookieList; QStringList m_selectedTraceX11List; bool scanResult; QString cur_skin; QVBoxLayout *mainLayout = nullptr; QLabel *m_emptyLabel = nullptr; QScrollArea *m_scrollArea = nullptr; QWidget *areaWidget = nullptr; QGridLayout *areaWidgetLayout = nullptr; QList m_cardlist; int m_row; int m_column; }; #endif // CLEANERDETAILWIDGET_H youker-assistant/cleaner/cacheactionwidget.h0000664000175000017500000000244313260315532020257 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CACHEACTIONWIDGET_H #define CACHEACTIONWIDGET_H #include class MainWindow; class QLabel; class CacheActionWidget : public QWidget { Q_OBJECT public: explicit CacheActionWidget(QWidget *parent = 0); ~CacheActionWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setLanguage(); private: QLabel *img_label; QLabel *title_label; QLabel *description_label; MainWindow *p_mainwindow; }; #endif // CACHEACTIONWIDGET_H youker-assistant/cleaner/cleanerdetailwidget.cpp0000664000175000017500000021156713260315532021156 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanerdetailwidget.h" #include "../src/mainwindow.h" #include "../component/cleansubgroup.h" #include "../component/selectwidget.h" #include #include const int defaultColumn = 4;//5 items for one line CleanerDetailWidget::CleanerDetailWidget(QWidget *parent, MainWindow *window, Toolkits *kits, QString skin) : QWidget(parent), parentWindow(window), toolKits(kits),cur_skin(skin) { // this->setStyleSheet("QWidget{border: none}"); this->setFixedSize(900, 403); this->setObjectName("transparentWidget"); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); mainLayout = new QVBoxLayout(this); m_emptyLabel = new QLabel(this); m_emptyLabel->setText(tr("No garbage")); m_emptyLabel->setVisible(false); /*this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette);*/ // this->setObjectName("transparentWidget"); // this->setAutoFillBackground(true); // QPalette palette; // palette.setBrush(QPalette::Window, QBrush(Qt::white)); // this->setPalette(palette); // this->number_per_row = -1; // this->itemwidth = 160; // this->itemheight = 110; // this->cardspace = 10; // subCount = 0; scanResult = false; m_row = 0; m_column = 0; m_scrollArea = new QScrollArea(this); m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_scrollArea->setWidgetResizable(true); m_scrollArea->setStyleSheet("QScrollArea{border: none;background-color: #ffffff;}"); areaWidget = new QWidget(/*this*/); areaWidget->setObjectName("transparentWidget"); m_scrollArea->setWidget(areaWidget); areaWidgetLayout = new QGridLayout(areaWidget); areaWidgetLayout->setAlignment(Qt::AlignTop); mainLayout->addWidget(m_emptyLabel);//QStackedLayout mainLayout->addWidget(m_scrollArea); /*ui->scrollAreaWidgetContents->setGeometry(0, 0, this->width(), this->height()); ui->scrollArea->setFixedSize(900, 403); ui->scrollArea->setAutoFillBackground(true); ui->scrollArea->setBackgroundRole(QPalette::Light); ui->label->hide();*/ // grid_layout = new QGridLayout(); // rowIndex = columnIndex = 0; // cache_apt_items = NULL; // cache_apt_btn = NULL; //// cache_software_items = NULL; // cache_software_btn = NULL; //// cache_thumbnails_items = NULL; // cache_thumbnails_btn = NULL; //// cache_firefox_items = NULL; // cache_firefox_btn = NULL; //// cache_chromium_items = NULL; // cache_chromium_btn = NULL; // package_unneed_items = NULL; // package_unneed_btn = NULL; // package_oldkernel_items = NULL; // package_oldkernel_btn = NULL; // package_configfile_items = NULL; // package_configfile_btn = NULL; // cookies_firefox_items = NULL; // cookies_firefox_btn = NULL; //// cookies_chromium_items = NULL; // cookies_chromium_btn = NULL; // trace_firefox_btn = NULL; // trace_chromium_btn = NULL; // trace_system_btn = NULL; // trace_bash_btn = NULL; // trace_x11_btn = NULL; // trace_x11_items = NULL; // ui->scrollAreaWidgetContents->setLayout(grid_layout); // this->number_per_row = (this->width() + this->cardspace - 60) / (this->itemwidth + this->cardspace); this->setLanguage(); /* //test for adding a title QLabel *titleLabel = new QLabel(tr("List")); areaWidgetLayout->addWidget(titleLabel, m_row, m_column, 1, 4); m_row ++; */ /* //test for another module append to this page m_column = 0; m_row ++; */ } CleanerDetailWidget::~CleanerDetailWidget() { this->CleanUIAndData(); // if(cache_apt_items != NULL) // { // delete cache_apt_items; // cache_apt_items = NULL; // } // if(cache_software_items != NULL) // { // delete cache_software_items; // cache_software_items = NULL; // } // if(cache_thumbnails_items != NULL) // { // delete cache_thumbnails_items; // cache_thumbnails_items = NULL; // } // if(cache_firefox_items != NULL) // { // delete cache_firefox_items; // cache_firefox_items = NULL; // } // if(cache_chromium_items != NULL) // { // delete cache_chromium_items; // cache_chromium_items = NULL; // } /*if(package_unneed_items != NULL) { delete package_unneed_items; package_unneed_items = NULL; } if(package_oldkernel_items != NULL) { delete package_oldkernel_items; package_oldkernel_items = NULL; } if(package_configfile_items != NULL) { delete package_configfile_items; package_configfile_items = NULL; }*/ // if(cookies_firefox_items != NULL) // { // delete cookies_firefox_items; // cookies_firefox_items = NULL; // } // if(cookies_chromium_items != NULL) // { // delete cookies_chromium_items; // cookies_chromium_items = NULL; // } // if(trace_x11_items != NULL) // { // delete trace_x11_items; // trace_x11_items = NULL; // } // if(grid_layout != NULL) // { // delete grid_layout; // grid_layout = NULL; // } // delete ui; } void CleanerDetailWidget::onRefreshSelectedItems(CleanerModuleID id, const QStringList &infos) { switch (id) { case CleanerModuleID::CacheApt: m_selectedAptList.clear(); m_selectedAptList = infos; break; case CleanerModuleID::CacheSoftware: m_selectedSoftwareList.clear(); m_selectedSoftwareList = infos; break; case CleanerModuleID::CacheThumbnail: m_selectedThumbnailsList.clear(); m_selectedThumbnailsList = infos; break; case CleanerModuleID::CacheFirefox: m_selectedFirefoxCacheList.clear(); m_selectedFirefoxCacheList = infos; break; case CleanerModuleID::CacheChromium: m_selectedChromiumCacheList.clear(); m_selectedChromiumCacheList = infos; break; case CleanerModuleID::CookieFirefox: m_selectedFirefoxCookieList.clear(); m_selectedFirefoxCookieList = infos; break; case CleanerModuleID::CookieChromium: m_selectedChromiumCookieList.clear(); m_selectedChromiumCookieList = infos; break; case CleanerModuleID::TraceX11: m_selectedTraceX11List.clear(); m_selectedTraceX11List = infos; break; default: break; } } void CleanerDetailWidget::CleanUIAndData() { this->m_emptyLabel->setVisible(false); // if(!ui->label->isHidden()) // ui->label->hide(); scanResult = false; // subCount = 0; // rowIndex = columnIndex = 0; cache_apt_list.clear(); cache_software_list.clear(); cache_thumbnails_list.clear(); cache_firefox_list.clear(); cache_chromium_list.clear(); /*package_unneed_list.clear(); package_oldkernel_list.clear(); package_configfile_list.clear();*/ cookies_firefox_list.clear(); cookies_chromium_list.clear(); trace_firefox_count.clear(); trace_chromium_count.clear(); trace_system_count.clear(); trace_bash_size.clear(); trace_bash_path.clear(); trace_x11_list.clear(); m_selectedAptList.clear(); m_selectedSoftwareList.clear(); m_selectedThumbnailsList.clear(); m_selectedFirefoxCacheList.clear(); m_selectedChromiumCacheList.clear(); m_selectedFirefoxCookieList.clear(); m_selectedChromiumCookieList.clear(); m_selectedTraceX11List.clear(); //clear ui // foreach (QObject *child, ui->scrollAreaWidgetContents->children()) { // QWidget *widget = static_cast(child); // widget->deleteLater(); // } /*for(int i=0; iclearItems(); // ui->scrollAreaWidgetContents->setGeometry(0, 0, this->width(), this->height()); // this->subCount = 0; // while(grid_layout != NULL && grid_layout->count() > 0) // { // QWidget* widget = grid_layout->itemAt(0)->widget(); // grid_layout->removeWidget(widget); // delete widget; // } } void CleanerDetailWidget::addItem(CleanSubGroup *item) { this->m_cardlist.append(item); areaWidgetLayout->addWidget(item, m_row, m_column, 1, 1); if(m_column == defaultColumn) { m_column = 0; m_row++; } else { m_column++; } } void CleanerDetailWidget::showReciveData(const QStringList &data) { //----------------------------------------------------------------Cache--------------------------- if(data.at(0) == "Belong:Cache.apt" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; cache_apt_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Cache.software-center" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; cache_software_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Cache.thumbnails" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; cache_thumbnails_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Cache.firefox" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; cache_firefox_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Cache.chromium" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; cache_chromium_list.append(data.at(1).split(":").at(1)); } } //----------------------------------------------------------------Package--------------------------- /*else if(data.at(0) == "Belong:Packages.unneed" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; package_unneed_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Packages.oldkernel" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; package_oldkernel_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Packages.configfile" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; package_configfile_list.append(data.at(1).split(":").at(1)); } }*/ //----------------------------------------------------------------Cookies--------------------------- else if(data.at(0) == "Belong:Cookies.firefox" && !data.at(1).isEmpty()) { if(data.at(1).contains(":") && !data.at(1).split(":").at(1).isEmpty()) { if (scanResult == false) scanResult = true; cookies_firefox_list.append(data.at(1).split(":").at(1)); } } else if(data.at(0) == "Belong:Cookies.chromium" && !data.at(1).isEmpty()) { if(data.at(1).contains(":") && !data.at(1).split(":").at(1).isEmpty()) { if (scanResult == false) scanResult = true; cookies_chromium_list.append(data.at(1).split(":").at(1)); } } //----------------------------------------------------------------History Trace--------------------------- else if(data.at(0) == "Belong:History.firefox" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if(data.at(1).split(":").at(1).toInt() != 0) { if (scanResult == false) scanResult = true; trace_firefox_count = data.at(1).split(":").at(1); } } } else if(data.at(0) == "Belong:History.chromium" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if(data.at(1).split(":").at(1).toInt() != 0) { if (scanResult == false) scanResult = true; trace_chromium_count = data.at(1).split(":").at(1); } } } else if(data.at(0) == "Belong:History.system" && !data.at(1).isEmpty()) { if(data.at(1).contains(":")) { if(data.at(1).split(":").at(1).toInt() != 0) { if (scanResult == false) scanResult = true; trace_system_count = data.at(1).split(":").at(1); } } } else if(data.at(0) == "Belong:History.bash" && !data.at(1).isEmpty() && !data.at(2).isEmpty()) { if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; trace_bash_size= data.at(1).split(":").at(1); trace_bash_path= data.at(2).split(":").at(1); } // qDebug() << "bash------------"; // qDebug() << data.at(1);//"Size:55.67 KB" // qDebug() << data.at(2);/"Path:/home/kobe/.bash_history" } else if(data.at(0) == "Belong:History.X11")// && !data.at(1).isEmpty() && !data.at(2).isEmpty() { // qDebug() << "x11------------"; // qDebug() << data.at(1);//Path:/home/kobe/.xsession-errors // qDebug() << data.at(2);//Type:file // qDebug() << data.at(3);//Size:0.98 KB if(data.at(1).contains(":")) { if (scanResult == false) scanResult = true; trace_x11_list.append(data.at(1).split(":").at(1)); } } } void CleanerDetailWidget::showReciveStatus(const QString &status) { if(status == "Complete:Cache") { if(cache_apt_list.length() > 0) { m_selectedAptList.clear(); m_selectedAptList = cache_apt_list; // cache_apt_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *cache_apt_btn = new CleanSubGroup(this, "://res/janitor/apt"); cache_apt_btn->setFocusPolicy(Qt::NoFocus); // cache_apt_btn->setFixedSize(160, 130); // cache_apt_btn->setFixedSize(160, 200); cache_apt_btn->setStatusTip("cache-apt"); cache_apt_btn->setLabelText(tr("Apt Cache count:"), cache_apt_list.length()); //点击自定义按钮后,显示自定义页面 connect(cache_apt_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cache_apt_btn); /*cache_apt_items = new CleanListWidget(cache_apt_list, this->cur_skin, tr("Apt Cache Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_apt_items, SIGNAL(notifyMainCheckBox(int)), cache_apt_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_apt_btn, SIGNAL(spreadStatus(int)), cache_apt_items, SLOT(resetSubCheckbox(int)));*/ // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cache_apt_btn, subCount/5, subCount%5); /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cache_apt_btn->move(x, y); cache_apt_btn->show();*/ // m_cardlist.append(cache_apt_btn); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cache_apt_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cache_apt_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(cache_software_list.length() > 0) { m_selectedSoftwareList.clear(); m_selectedSoftwareList = cache_software_list; // cache_software_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *cache_software_btn = new CleanSubGroup(this, "://res/janitor/software"); cache_software_btn->setFocusPolicy(Qt::NoFocus); // cache_software_btn->setFixedSize(160, 130); // cache_software_btn->setFixedSize(160, 200); cache_software_btn->setStatusTip("cache-software"); cache_software_btn->setLabelText(tr("Software Cache count:"), cache_software_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_software_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cache_software_btn); /*cache_software_items = new CleanListWidget(cache_software_list, this->cur_skin, tr("Software Cache Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_software_items, SIGNAL(notifyMainCheckBox(int)), cache_software_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_software_btn, SIGNAL(spreadStatus(int)), cache_software_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cache_software_btn->move(x, y); cache_software_btn->show();*/ // m_cardlist.append(cache_software_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cache_software_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cache_software_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cache_software_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if (cache_thumbnails_list.length() > 0) { m_selectedThumbnailsList.clear(); m_selectedThumbnailsList = cache_thumbnails_list; // cache_thumbnails_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *cache_thumbnails_btn = new CleanSubGroup(this, "://res/janitor/thumbnails"); cache_thumbnails_btn->setFocusPolicy(Qt::NoFocus); // cache_thumbnails_btn->setFixedSize(160, 130); // cache_thumbnails_btn->setFixedSize(160, 200); cache_thumbnails_btn->setStatusTip("cache-thumbnails"); cache_thumbnails_btn->setLabelText(tr("Thumbnails Cache Count:"), cache_thumbnails_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_thumbnails_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cache_thumbnails_btn); /*cache_thumbnails_items = new CleanListWidget(cache_thumbnails_list, this->cur_skin, tr("Thumbnails Cache Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_thumbnails_items, SIGNAL(notifyMainCheckBox(int)), cache_thumbnails_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_thumbnails_btn, SIGNAL(spreadStatus(int)), cache_thumbnails_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cache_thumbnails_btn->move(x, y); cache_thumbnails_btn->show();*/ // m_cardlist.append(cache_thumbnails_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cache_thumbnails_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cache_thumbnails_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cache_thumbnails_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(cache_firefox_list.length() > 0) { m_selectedFirefoxCacheList.clear(); m_selectedFirefoxCacheList = cache_firefox_list; // cache_firefox_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *cache_firefox_btn = new CleanSubGroup(this, "://res/janitor/firefox"); cache_firefox_btn->setFocusPolicy(Qt::NoFocus); // cache_firefox_btn->setFixedSize(160, 130); cache_firefox_btn->setStatusTip("cache-firefox"); cache_firefox_btn->setLabelText(tr("Firefox Cache Count:"), cache_firefox_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_firefox_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cache_firefox_btn); /*cache_firefox_items = new CleanListWidget(cache_firefox_list, this->cur_skin, tr("Firefox Cache Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_firefox_items, SIGNAL(notifyMainCheckBox(int)), cache_firefox_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_firefox_btn, SIGNAL(spreadStatus(int)), cache_firefox_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cache_firefox_btn->move(x, y); cache_firefox_btn->show();*/ // m_cardlist.append(cache_firefox_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cache_firefox_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cache_firefox_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cache_firefox_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(cache_chromium_list.length() > 0) { m_selectedChromiumCacheList.clear(); m_selectedChromiumCacheList = cache_chromium_list; // cache_chromium_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *cache_chromium_btn = new CleanSubGroup(this, "://res/janitor/chromium"); cache_chromium_btn->setFocusPolicy(Qt::NoFocus); // cache_chromium_btn->setFixedSize(160, 130); cache_chromium_btn->setStatusTip("cache-chromium"); cache_chromium_btn->setLabelText(tr("Chromium Cache Count:"), cache_chromium_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_chromium_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cache_chromium_btn); /*cache_chromium_items = new CleanListWidget(cache_chromium_list, this->cur_skin, tr("Thumbnails Cache Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_chromium_items, SIGNAL(notifyMainCheckBox(int)), cache_chromium_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cache_chromium_btn, SIGNAL(spreadStatus(int)), cache_chromium_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cache_chromium_btn->move(x, y); cache_chromium_btn->show();*/ // m_cardlist.append(cache_chromium_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cache_chromium_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cache_chromium_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cache_chromium_btn, rowIndex, columnIndex); // columnIndex += 1; // } } } else if(status == "Complete:Cookies") { // doing_label->setText(tr("Cookies Scan OK......")); if(cookies_firefox_list.length() > 0) { m_selectedFirefoxCookieList.clear(); m_selectedFirefoxCookieList = cookies_firefox_list; // cookies_firefox_btn = new CommonCheckBox(0, "://res/cookie"); CleanSubGroup *cookies_firefox_btn = new CleanSubGroup(this, "://res/janitor/firefox"); cookies_firefox_btn->setFocusPolicy(Qt::NoFocus); // cookies_firefox_btn->setFixedSize(160, 130); cookies_firefox_btn->setStatusTip("cookes-firefox"); cookies_firefox_btn->setLabelText(tr("Firefox Cookies Count:"), cookies_firefox_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cookies_firefox_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cookies_firefox_btn); /*cookies_firefox_items = new CleanListWidget(cookies_firefox_list, this->cur_skin, tr("Firefox Cookies Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cookies_firefox_items, SIGNAL(notifyMainCheckBox(int)), cookies_firefox_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cookies_firefox_btn, SIGNAL(spreadStatus(int)), cookies_firefox_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cookies_firefox_btn->move(x, y); cookies_firefox_btn->show();*/ // m_cardlist.append(cookies_firefox_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cookies_firefox_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cookies_firefox_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cookies_firefox_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(cookies_chromium_list.length() > 0) { m_selectedChromiumCookieList.clear(); m_selectedChromiumCookieList = cookies_chromium_list; // cookies_chromium_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *cookies_chromium_btn = new CleanSubGroup(this, "://res/janitor/chromium"); cookies_chromium_btn->setFocusPolicy(Qt::NoFocus); // cookies_chromium_btn->setFixedSize(160, 130); cookies_chromium_btn->setStatusTip("cookes-chromium"); cookies_chromium_btn->setLabelText(tr("Chromium Cookies Count:"), cookies_chromium_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cookies_chromium_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(cookies_chromium_btn); /*cookies_chromium_items = new CleanListWidget(cookies_chromium_list, this->cur_skin, tr("Chromium Cookies Clean Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cookies_chromium_items, SIGNAL(notifyMainCheckBox(int)), cookies_chromium_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(cookies_chromium_btn, SIGNAL(spreadStatus(int)), cookies_chromium_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); cookies_chromium_btn->move(x, y); cookies_chromium_btn->show();*/ // m_cardlist.append(cookies_chromium_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(cookies_chromium_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(cookies_chromium_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(cookies_chromium_btn, rowIndex, columnIndex); // columnIndex += 1; // } } } else if(status == "Complete:History") { // doing_label->setText(tr("History Scan OK")); if(trace_firefox_count.length() > 0) { // trace_firefox_btn = new CommonCheckBox(0, "://res/cache"); CleanSubGroup *trace_firefox_btn = new CleanSubGroup(this, "://res/janitor/firefox"); trace_firefox_btn->setFocusPolicy(Qt::NoFocus); // trace_firefox_btn->setFixedSize(160, 130); trace_firefox_btn->hideCustomButton(); trace_firefox_btn->setStatusTip("history-firefox"); trace_firefox_btn->setLabelText(tr("Firefox History Count:"), trace_firefox_count.toInt()); this->addItem(trace_firefox_btn); /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); trace_firefox_btn->move(x, y); trace_firefox_btn->show();*/ // m_cardlist.append(trace_firefox_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(trace_firefox_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(trace_firefox_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(trace_firefox_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(trace_chromium_count.length() > 0) { CleanSubGroup *trace_chromium_btn = new CleanSubGroup(this, "://res/janitor/chromium"); trace_chromium_btn->setFocusPolicy(Qt::NoFocus); trace_chromium_btn->hideCustomButton(); trace_chromium_btn->setStatusTip("history-chromium"); trace_chromium_btn->setLabelText(tr("Chromium History Count:"), trace_chromium_count.toInt()); this->addItem(trace_chromium_btn); /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); trace_chromium_btn->move(x, y); trace_chromium_btn->show();*/ // m_cardlist.append(trace_chromium_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(trace_chromium_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(trace_chromium_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(trace_chromium_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(trace_system_count.length() > 0) { CleanSubGroup *trace_system_btn = new CleanSubGroup(this, "://res/janitor/trace"); trace_system_btn->setFocusPolicy(Qt::NoFocus); trace_system_btn->hideCustomButton(); trace_system_btn->setStatusTip("history-system"); trace_system_btn->setLabelText(tr("System History Count:"), trace_system_count.toInt()); this->addItem(trace_system_btn); /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); trace_system_btn->move(x, y); trace_system_btn->show();*/ // m_cardlist.append(trace_system_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(trace_system_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(trace_system_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(trace_system_btn, rowIndex, columnIndex); // columnIndex += 1; // } } //kobe if(!trace_bash_path.isEmpty()) { CleanSubGroup *trace_bash_btn = new CleanSubGroup(this, "://res/janitor/trace"); trace_bash_btn->setFocusPolicy(Qt::NoFocus); trace_bash_btn->hideCustomButton(); trace_bash_btn->setStatusTip("history-bash"); trace_bash_btn->setLabelStringText(tr("Command history size:"), trace_bash_size); this->addItem(trace_bash_btn); /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); trace_bash_btn->move(x, y); trace_bash_btn->show();*/ // m_cardlist.append(trace_bash_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(trace_bash_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(trace_bash_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(trace_bash_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(trace_x11_list.length() > 0) { m_selectedTraceX11List.clear(); m_selectedTraceX11List = trace_x11_list; CleanSubGroup *trace_x11_btn = new CleanSubGroup(this, "://res/janitor/debug"); trace_x11_btn->setFocusPolicy(Qt::NoFocus); trace_x11_btn->setStatusTip("x11-history"); trace_x11_btn->setLabelText(tr("Debug log:"), trace_x11_list.length()); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(trace_x11_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); this->addItem(trace_x11_btn); /*trace_x11_items = new CleanListWidget(trace_x11_list, this->cur_skin, tr("Debug log Items")); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(trace_x11_items, SIGNAL(notifyMainCheckBox(int)), trace_x11_btn, SLOT(resetMainStatus(int))); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(trace_x11_btn, SIGNAL(spreadStatus(int)), trace_x11_items, SLOT(resetSubCheckbox(int)));*/ /*int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); trace_x11_btn->move(x, y); trace_x11_btn->show();*/ // m_cardlist.append(trace_x11_btn); // subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(trace_x11_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(trace_x11_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(trace_x11_btn, rowIndex, columnIndex); // columnIndex += 1; // } } } /*else if(status == "Complete:Packages") { // doing_label->setText(tr("Packages Scan OK")); if(package_unneed_list.length() > 0) { package_unneed_items = new CleanListWidget(package_unneed_list, this->cur_skin, tr("Thumbnails Cache Clean Items")); // package_unneed_btn = new CommonCheckBox(0, "://res/cache"); package_unneed_btn = new CleanSubGroup(this, "://res/janitor/package"); package_unneed_btn->setFocusPolicy(Qt::NoFocus); // package_unneed_btn->setFixedSize(160, 130); package_unneed_btn->setStatusTip("package-unneed"); package_unneed_btn->setLabelText(tr("Package Unneed Count:"),package_unneed_list.length()); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(package_unneed_items, SIGNAL(notifyMainCheckBox(int)), package_unneed_btn, SLOT(resetMainStatus(int))); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(package_unneed_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(package_unneed_btn, SIGNAL(spreadStatus(int)), package_unneed_items, SLOT(resetSubCheckbox(int))); int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); package_unneed_btn->move(x, y); package_unneed_btn->show(); m_cardlist.append(package_unneed_btn); subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(package_unneed_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(package_unneed_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(package_unneed_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(package_oldkernel_list.length() > 0) { package_oldkernel_items = new CleanListWidget(package_oldkernel_list, this->cur_skin, tr("Thumbnails Cache Clean Items")); // package_oldkernel_btn = new CommonCheckBox(0, "://res/cache"); package_oldkernel_btn = new CleanSubGroup(this, "://res/janitor/package"); package_oldkernel_btn->setFocusPolicy(Qt::NoFocus); // package_oldkernel_btn->setFixedSize(160, 130); package_oldkernel_btn->setStatusTip("package-oldkernel"); package_oldkernel_btn->setLabelText(tr("Package oldkernel Count:"), package_oldkernel_list.length()); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(package_oldkernel_items, SIGNAL(notifyMainCheckBox(int)), package_oldkernel_btn, SLOT(resetMainStatus(int))); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(package_oldkernel_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(package_oldkernel_btn, SIGNAL(spreadStatus(int)), package_oldkernel_items, SLOT(resetSubCheckbox(int))); int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); package_oldkernel_btn->move(x, y); package_oldkernel_btn->show(); m_cardlist.append(package_oldkernel_btn); subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(package_oldkernel_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(package_oldkernel_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(package_oldkernel_btn, rowIndex, columnIndex); // columnIndex += 1; // } } if(package_configfile_list.length() > 0) { package_configfile_items = new CleanListWidget(package_configfile_list, this->cur_skin, tr("Thumbnails Cache Clean Items")); // package_configfile_btn = new CommonCheckBox(0, "://res/cache"); package_configfile_btn = new CleanSubGroup(this, "://res/janitor/package"); package_configfile_btn->setFocusPolicy(Qt::NoFocus); // package_configfile_btn->setFixedSize(160, 130); package_configfile_btn->setStatusTip("package-configfile"); package_configfile_btn->setLabelText(tr("Package configfile Count:"),package_configfile_list.length()); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(package_configfile_items, SIGNAL(notifyMainCheckBox(int)), package_configfile_btn, SLOT(resetMainStatus(int))); //点击自定义按钮后,根据总按钮的状态去改变子checkbox的状态 connect(package_configfile_btn, SIGNAL(customButtonClicked()), this, SLOT(showCustomPage())); //点击总按钮后,根据总按钮的状态去改变子checkbox的状态 connect(package_configfile_btn, SIGNAL(spreadStatus(int)), package_configfile_items, SLOT(resetSubCheckbox(int))); int x = int(this->subCount % this->number_per_row) * (this->itemwidth + this->cardspace) + 30; int y = int(this->subCount / this->number_per_row) * (this->itemheight + this->cardspace) + 30; int nowHeight = y + this->itemheight; if(nowHeight >= ui->scrollAreaWidgetContents->height()) ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->width(), nowHeight); package_configfile_btn->move(x, y); package_configfile_btn->show(); m_cardlist.append(package_configfile_btn); subCount += 1; // if(grid_layout == NULL) // { // grid_layout = new QGridLayout(); // } // grid_layout->addWidget(package_configfile_btn, subCount/5, subCount%5); // subCount += 1; // if(columnIndex < 5) // { // grid_layout->addWidget(package_configfile_btn, rowIndex, columnIndex); // columnIndex += 1; // } // else { // rowIndex += 1; // columnIndex = 0; // grid_layout->addWidget(package_configfile_btn, rowIndex, columnIndex); // columnIndex += 1; // } } }*/ else if(status == "Complete:All") { if(!scanResult) { this->m_emptyLabel->setVisible(true); // ui->label->show(); } emit this->sendScanOverStatus(scanResult); } } void CleanerDetailWidget::showCustomPage() { QObject *object = QObject::sender(); // CommonCheckBox *checkbox = qobject_cast(object); CleanSubGroup *checkbox = qobject_cast(object); QString object_name = checkbox->statusTip(); if(object_name == "cache-apt") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cache_apt_items->move(w_x, w_y); cache_apt_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CacheApt, tr("Apt Cache Clean Items")); w->loadData(tr("Apt Cache Clean Items"), cache_apt_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cache_apt_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cache-apt") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } else if(object_name == "cache-software") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cache_software_items->move(w_x, w_y); cache_software_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CacheSoftware, tr("Software Cache Clean Items")); w->loadData(tr("Software Cache Clean Items"), cache_software_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cache_software_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cache-software") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } else if(object_name == "cache-thumbnails") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cache_thumbnails_items->move(w_x, w_y); cache_thumbnails_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CacheThumbnail, tr("Thumbnails Cache Clean Items")); w->loadData(tr("Thumbnails Cache Clean Items"), cache_thumbnails_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cache_thumbnails_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cache-thumbnails") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } else if(object_name == "cache-firefox") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cache_firefox_items->move(w_x, w_y); cache_firefox_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CacheFirefox, tr("Firefox Cache Clean Items")); w->loadData(tr("Firefox Cache Clean Items"), cache_firefox_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cache_firefox_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cache-firefox") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } else if(object_name == "cache-chromium") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cache_chromium_items->move(w_x, w_y); cache_chromium_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CacheChromium, tr("Chromium Cache Clean Items")); w->loadData(tr("Chromium Cache Clean Items"), cache_chromium_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cache_chromium_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cache-chromium") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } else if(object_name == "cookes-firefox") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cookies_firefox_items->move(w_x, w_y); cookies_firefox_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CookieFirefox, tr("Firefox Cookies Clean Items")); w->loadData(tr("Firefox Cookies Clean Items"), cookies_firefox_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cookies_firefox_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cookes-firefox") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } else if(object_name == "cookes-chromium") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cookies_chromium_items->move(w_x, w_y); cookies_chromium_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::CookieChromium, tr("Chromium Cookies Clean Items")); w->loadData(tr("Chromium Cookies Clean Items"), cookies_chromium_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), cookies_chromium_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "cookes-chromium") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } /*else if(object_name == "package-unneed") { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); package_unneed_items->move(w_x, w_y); package_unneed_items->exec(); } else if(object_name == "package-oldkernel") { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); package_oldkernel_items->move(w_x, w_y); package_oldkernel_items->exec(); } else if(object_name == "package-configfile") { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); package_configfile_items->move(w_x, w_y); package_configfile_items->exec(); }*/ else if(object_name == "x11-history") { /*int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); trace_x11_items->move(w_x, w_y); trace_x11_items->exec();*/ SelectWidget *w = new SelectWidget(CleanerModuleID::TraceX11, tr("Debug log Items")); w->loadData(tr("Debug log Items"), trace_x11_list); //子checkbox的状态被改变时,重新设置总按钮的状态 // connect(w, SIGNAL(notifyMainCheckBox(int)), trace_x11_btn, SLOT(resetMainStatus(int))); connect(w, &SelectWidget::notifyMainCheckBox, [=] (int status) { foreach (CleanSubGroup *item, m_cardlist) { if (item->statusTip() == "x11-history") { item->resetMainStatus(status); break; } } }); connect(w, SIGNAL(refreshSelectedItems(CleanerModuleID,QStringList)), this, SLOT(onRefreshSelectedItems(CleanerModuleID,QStringList))); w->exec(); delete w; } // else if(object_name == "history-firefox" || object_name == "history-chromium" || object_name == "history-system"|| object_name == "history-bash" ) { // } } void CleanerDetailWidget::setLanguage() { // ui->label->setText(tr("No garbage ")); // title_label->setText(tr("Cleaning up the system cache")); // description_label->setText(tr("Deep cleaning up the system cache, to save disk space")); } void CleanerDetailWidget::resetCurrentSkin(QString skin) { this->cur_skin = skin; //can remove this code // if(cache_apt_items != NULL) // cache_apt_items->resetTitleSkin(skin); // if(cache_software_items != NULL) // cache_software_items->resetTitleSkin(skin); // if(cache_thumbnails_items != NULL) // cache_thumbnails_items->resetTitleSkin(skin); // if(cache_firefox_items != NULL) // cache_firefox_items->resetTitleSkin(skin); // if(cache_chromium_items != NULL) // cache_chromium_items->resetTitleSkin(skin); // if(cookies_firefox_items != NULL) // cookies_firefox_items->resetTitleSkin(skin); // if(cookies_chromium_items != NULL) // cookies_chromium_items->resetTitleSkin(skin); /*if(package_unneed_items != NULL) package_unneed_items->resetTitleSkin(skin); if(package_oldkernel_items != NULL) package_oldkernel_items->resetTitleSkin(skin); if(package_configfile_items != NULL) package_configfile_items->resetTitleSkin(skin);*/ // if(trace_x11_items != NULL) // trace_x11_items->resetTitleSkin(skin); } void CleanerDetailWidget::receiveCleanSignal() { this->getAllSelectedItems(); if(argsData.empty()) { toolKits->alertMSG(parentWindow->geometry().topLeft().x(), parentWindow->geometry().topLeft().y(), tr("Clean args is empty!")); } else { emit this->startCleanSystem(argsData); } } void CleanerDetailWidget::clearItems() { while(areaWidgetLayout->count() > 0) { QWidget* widget = areaWidgetLayout->itemAt(0)->widget(); areaWidgetLayout->removeWidget(widget); delete widget; } this->m_cardlist.clear(); m_row = 0; m_column = 0; } //void CleanerDetailWidget::receivePolicyKitSignal(bool status) //{ // //status = true:ok // //status = false:cacel // if(status)//ok // { // emit this->showActionAnimaiton(); // } //} void CleanerDetailWidget::getAllSelectedItems() { argsData.clear(); QStringList fileTmp; // QStringList packageTmp; // QStringList firefoxcookieTmp; // QStringList chromiumcookieTmp; // QStringList traceTmp; foreach (QString info, m_selectedAptList) { fileTmp.append(info); } foreach (QString info, m_selectedSoftwareList) { fileTmp.append(info); } foreach (QString info, m_selectedThumbnailsList) { fileTmp.append(info); } foreach (QString info, m_selectedFirefoxCacheList) { fileTmp.append(info); } foreach (QString info, m_selectedChromiumCacheList) { fileTmp.append(info); } foreach (CleanSubGroup *item, m_cardlist) { if (item->getCheckBoxStatus() != 0) { if (item->statusTip() == "history-firefox") { argsData.insert("firefox-history", QStringList() << trace_firefox_count); } else if (item->statusTip() == "history-chromium") { argsData.insert("chromium-history", QStringList() << trace_chromium_count); } else if (item->statusTip() == "history-system") { argsData.insert("system-history", QStringList() << trace_system_count); } else if (item->statusTip() == "history-bash") { argsData.insert("bash-history", QStringList() << trace_bash_path); } } } if(fileTmp.length() > 0) argsData.insert("file", fileTmp); if(m_selectedFirefoxCookieList.length() > 0) argsData.insert("firefox-cookie", m_selectedFirefoxCookieList); if(m_selectedChromiumCookieList.length() > 0) argsData.insert("chromium-cookie", m_selectedChromiumCookieList); if(m_selectedTraceX11List.length() > 0) argsData.insert("x11-history", m_selectedTraceX11List); // if(cache_apt_btn != NULL && cache_apt_btn->getCheckBoxStatus() != 0) // { // QStringList tmp = cache_apt_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cache_software_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cache_thumbnails_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cache_firefox_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cache_chromium_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = package_unneed_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = package_oldkernel_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = package_configfile_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cookies_firefox_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // QStringList tmp = cookies_chromium_items->getSelectedItems(); // for(int i = 0; igetCheckBoxStatus() != 0) // { // argsData.insert("firefox-history", QStringList() << trace_firefox_count); // } // if(trace_chromium_btn != NULL && trace_chromium_btn->getCheckBoxStatus() != 0) // { // argsData.insert("chromium-history", QStringList() << trace_chromium_count); // } // if(trace_system_btn != NULL && trace_system_btn->getCheckBoxStatus() != 0) // { // argsData.insert("system-history", QStringList() << trace_system_count); // } // //kobe // if(trace_bash_btn != NULL && trace_bash_btn->getCheckBoxStatus() != 0) // { // argsData.insert("bash-history", QStringList() << trace_bash_path); // } //// if(trace_x11_btn != NULL && trace_x11_btn->getCheckBoxStatus() != 0) //// { //// QStringList tmp = trace_x11_items->getSelectedItems(); //// for(int i = 0; i 0) // argsData.insert("file", fileTmp); //// if(packageTmp.length() > 0) //// argsData.insert("package", packageTmp); // if(firefoxcookieTmp.length() > 0) // argsData.insert("firefox-cookie", firefoxcookieTmp); // if(chromiumcookieTmp.length() > 0) // argsData.insert("chromium-cookie", chromiumcookieTmp); // if(traceTmp.length() > 0) // argsData.insert("x11-history", traceTmp); } youker-assistant/cleaner/cleanlistwidget.h0000664000175000017500000000364513260315532020001 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANLISTWIDGET_H #define CLEANLISTWIDGET_H #include #include #include "../component/kylintitlebar.h" class SessionDispatcher; class QCheckBox; namespace Ui { class CleanListWidget; } class CleanListWidget : public QDialog { Q_OBJECT public: // explicit CleanListWidget(QStringList &arglist, const QString title_text = "UbuntuKylin", QWidget *parent = 0/*, SessionDispatcher *proxy = 0*/); explicit CleanListWidget(QStringList &arglist, QString skin = ":/background/res/skin/1.png", const QString title_text = "UbuntuKylin", QDialog *parent = 0/*, SessionDispatcher *proxy = 0*/); ~CleanListWidget(); void setLanguage(); void initConnect(); QStringList getSelectedItems(); void resetTitleSkin(QString skin); public slots: void resetSubCheckbox(int status); void scanAllSubCheckbox(); void onCloseButtonClicked(); signals: void notifyMainCheckBox(int status); private: void initTitleBar(QString skin); private: Ui::CleanListWidget *ui; QList checkbox_list; KylinTitleBar *title_bar; QString titleName; QLabel *tip_label; QLabel *num_label; }; #endif // CLEANLISTWIDGET_H youker-assistant/cleaner/cacheactionwidget.cpp0000664000175000017500000000523713260315532020616 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cacheactionwidget.h" #include "mainwindow.h" #include CacheActionWidget::CacheActionWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(900, 150); this->setAutoFillBackground(true); this->setObjectName("transparentWidget"); img_label = new QLabel(); title_label = new QLabel(); description_label = new QLabel(); img_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 QPixmap label_pixmap("://res/cache.png"); img_label->setPixmap(label_pixmap); img_label->setFixedSize(label_pixmap.size()); title_label->setObjectName("whiteLabel"); description_label->setWordWrap(true);//QLabel自动换行 description_label->setObjectName("tipLabel"); QVBoxLayout *layout1 = new QVBoxLayout(); layout1->addStretch(); layout1->addWidget(title_label); layout1->addWidget(description_label); layout1->addStretch(); layout1->setSpacing(15); layout1->setMargin(0); layout1->setContentsMargins(0, 0, 0, 0); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addWidget(img_label, 0, Qt::AlignVCenter); layout2->addLayout(layout1); layout2->setSpacing(20); layout2->setMargin(0); layout2->setContentsMargins(20, 20, 0, 0); setLayout(layout2); this->setLanguage(); } CacheActionWidget::~CacheActionWidget() { if(img_label != NULL) { delete img_label; img_label = NULL; } if(title_label != NULL) { delete title_label; title_label = NULL; } if(description_label != NULL) { delete description_label; description_label = NULL; } } void CacheActionWidget::setLanguage() { title_label->setText(tr("Cleaning up the system cache")); description_label->setText(tr("Deep cleaning up the system cache, to save disk space")); } youker-assistant/cleaner/cleanermainwidget-new.h0000664000175000017500000000432613260315532021065 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERMAINWIDGET_H #define CLEANERMAINWIDGET_H #include #include #include #include #include "cleaneritems.h" class MainWindow; class CleanGroup; class SessionDispatcher; class Toolkits; class QParallelAnimationGroup; class CleanerMainWidget : public QWidget { Q_OBJECT public: explicit CleanerMainWidget(QWidget *parent = 0, SessionDispatcher *seroxy = 0, MainWindow *window = 0, Toolkits *kits = 0, QString skin = ":/background/res/skin/1.png"); ~CleanerMainWidget(); void setLanguage(); void getAllScanSelectedItems(); void resetCurrentSkin(QString skin); void initAnimation(); public slots: void onButtonClicked(); void receiveScanSignal(); void showCleanMainPage(); void onUpGroupFinished(); signals: void showActionAnimaiton(); private: MainWindow *parentWindow; QLabel *tip_label; QWidget *baseWidget; CleanGroup *cache_btn; CleanerItems *cache_items; CleanGroup *package_btn; CleanerItems *package_items; CleanGroup *cookies_btn; CleanerItems *cookies_items; CleanGroup *trace_btn; CleanerItems *trace_items; QMap argsMap; SessionDispatcher *sessionproxy; Toolkits *toolKits; QStackedWidget *scanWidgets; QParallelAnimationGroup *m_upGroup; QParallelAnimationGroup *m_downGroup; }; #endif // CLEANERMAINWIDGET_H youker-assistant/cleaner/cleanermainwidget.h0000664000175000017500000000456413260315532020302 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERMAINWIDGET_H #define CLEANERMAINWIDGET_H #include #include #include #include #include "../component/utils.h" class QLabel; class MainWindow; class CleanGroup; class Toolkits; class CleanerMainWidget : public QWidget { Q_OBJECT public: explicit CleanerMainWidget(QWidget *parent = 0, MainWindow *window = 0, Toolkits *kits = 0, QString skin = ":/background/res/skin/1.png"); ~CleanerMainWidget(); void setLanguage(); void getAllScanSelectedItems(); void resetCurrentSkin(QString skin); public slots: void onButtonClicked(); void receiveScanSignal(); void onRefreshSelectedItems(CleanerCategoryID id, const QStringList &infos); void resetDefaultStatus(); signals: void showActionAnimaiton(); void startScanSystem(QMap itemsMap); private: MainWindow *parentWindow; QLabel *tip_label; CleanGroup *cache_btn; // CleanerItems *cache_items; // CleanGroup *package_btn; // CleanerItems *package_items; CleanGroup *cookies_btn; // CleanerItems *cookies_items; CleanGroup *trace_btn; // CleanerItems *trace_items; QMap argsMap; Toolkits *toolKits; QStringList cache_list; QStringList cache_status_list; QStringList cookies_list; QStringList cookies_status_list; QStringList trace_list; QStringList trace_status_list; QStringList m_selectedCache; QStringList m_selectedCookie; QStringList m_selectedTrace; }; #endif // CLEANERMAINWIDGET_H youker-assistant/cleaner/cleanermainwidget-org.h0000664000175000017500000000371713260315532021066 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERMAINWIDGET_H #define CLEANERMAINWIDGET_H #include #include #include "cleaneritems.h" class MainWindow; class CleanGroup; class SessionDispatcher; class Toolkits; class CleanerMainWidget : public QWidget { Q_OBJECT public: explicit CleanerMainWidget(QWidget *parent = 0, SessionDispatcher *seroxy = 0, MainWindow *window = 0, Toolkits *kits = 0, QString skin = ":/background/res/skin/1.png"); ~CleanerMainWidget(); void setLanguage(); void getAllScanSelectedItems(); void resetCurrentSkin(QString skin); public slots: void onButtonClicked(); void receiveScanSignal(); signals: void showActionAnimaiton(); private: MainWindow *parentWindow; QLabel *tip_label; CleanGroup *cache_btn; CleanerItems *cache_items; CleanGroup *package_btn; CleanerItems *package_items; CleanGroup *cookies_btn; CleanerItems *cookies_items; CleanGroup *trace_btn; CleanerItems *trace_items; QMap argsMap; SessionDispatcher *sessionproxy; Toolkits *toolKits; // QStackedWidget *scanWidgets; }; #endif // CLEANERMAINWIDGET_H youker-assistant/cleaner/cleaneritems.cpp0000664000175000017500000001546313260315532017626 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleaneritems.h" #include "mainwindow.h" #include //CleanerItems::CleanerItems(QStringList &arglist, QStringList &statuslist, int height, const QString title_text, QWidget *parent) // : QWidget(parent),titleName(title_text)/*, widgetHeight(height)*/ CleanerItems::CleanerItems(QStringList &arglist, QStringList &statuslist, QString skin, int height, const QString title_text, QDialog *parent) :QDialog(parent),titleName(title_text) { setWindowFlags(Qt::FramelessWindowHint); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); this->setFixedSize(410, height); // this->setObjectName("transparentWidget"); // this->setWindowFlags(Qt::FramelessWindowHint); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); title_bar = new KylinTitleBar(); initTitleBar(skin); QVBoxLayout *button_layout = new QVBoxLayout; int count = arglist.count(); // QSignalMapper *signal_mapper = new QSignalMapper(this); for(int i=0; isetFocusPolicy(Qt::NoFocus); checkbox->setCheckState(Qt::Checked); checkbox->setStatusTip(statuslist.at(i)); checkbox_list.append(checkbox); // connect(checkbox, SIGNAL(clicked()), signal_mapper, SLOT(map())); connect(checkbox, SIGNAL(clicked()), this, SLOT(scanAllSubCheckbox())); // signal_mapper->setMapping(checkbox, QString::number(i, 10)); button_layout->addWidget(checkbox); } button_layout->setSpacing(15); button_layout->setMargin(0); button_layout->setContentsMargins(0, 10, 0, 0); // connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchPageIndex(QString))); // setLayout(button_layout); okBtn = new QPushButton(); okBtn->setFixedSize(91, 25); okBtn->setObjectName("blackButton"); okBtn->setFocusPolicy(Qt::NoFocus); QHBoxLayout *btn_layout = new QHBoxLayout(); btn_layout->addStretch(); btn_layout->addWidget(okBtn); btn_layout->setMargin(0); btn_layout->setContentsMargins(0, 0, 15, 10); group_box = new QGroupBox(); group_box->setStyleSheet("QGroupBox{border: 1px solid #e0e0e0;border-radius: 2px;margin-top: 15px;font-size:14px;}QGroupBox:title{subcontrol-origin: margin;subcontrol-position: top left;padding: 6px 3px;color: #00609a;font-family: 方正黑体_GBK;font-weight:bold;}"); group_box->setTitle(titleName); QFont group_box_font = group_box->font(); group_box_font.setBold(true); group_box->setFont(group_box_font); group_box->setFixedWidth(380); group_box->setLayout(button_layout); group_box->setContentsMargins(10, 10, 10, 10); QHBoxLayout *group_layout = new QHBoxLayout(); group_layout->addWidget(group_box); group_layout->setMargin(0); group_layout->setContentsMargins(10, 10, 10, 0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(title_bar); main_layout->addLayout(group_layout); // main_layout->addWidget(group_box); main_layout->addStretch(); main_layout->addLayout(btn_layout); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->initConnect(); this->setLanguage(); } CleanerItems::~CleanerItems() { for(int i=0; iclose(); } void CleanerItems::initTitleBar(QString skin) { title_bar->setTitleWidth(410); title_bar->setTitleName(titleName); // title_bar->setTitleBackgound(":/background/res/skin/1.png"); title_bar->setTitleBackgound(skin); } void CleanerItems::resetTitleSkin(QString skin) { title_bar->resetBackground(skin); } int CleanerItems::getItemCount() { return checkbox_list.count(); } QStringList CleanerItems::getSelectedItems() { QStringList text_list; int count = checkbox_list.count(); for(int i=0; iisChecked()) { // text_list.append(checkbox->text()); text_list.append(checkbox->statusTip()); } } return text_list; } void CleanerItems::setLanguage() { okBtn->setText(tr("OK")); } void CleanerItems::scanAllSubCheckbox() { int count = checkbox_list.count(); int m = 0; for(int i=0; iisChecked()) { m +=1; } } if (m == 0) { emit this->notifyMainCheckBox(0); } else if (m == count) { emit this->notifyMainCheckBox(2); } else { emit this->notifyMainCheckBox(1); } } void CleanerItems::resetSubCheckbox(int status) { if(status == 0) { for(int i=0; isetChecked(false); } } else if(status == 2) { for(int i=0; isetChecked(true); } } } youker-assistant/cleaner/cleanermainwidget-org.cpp0000664000175000017500000003225713260315532021422 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanermainwidget.h" #include #include "../mainui/mainwindow.h" #include "../component/cleangroup.h" CleanerMainWidget::CleanerMainWidget(QWidget *parent, SessionDispatcher *seroxy, MainWindow *window, Toolkits *kits, QString skin) : QWidget(parent), sessionproxy(seroxy), parentWindow(window), toolKits(kits) { this->setFixedSize(900, 403); this->setObjectName("transparentWidget"); // this->setAutoFillBackground(true); // QPalette palette; // palette.setBrush(QPalette::Window, QBrush(Qt::white)); // this->setPalette(palette); tip_label = new QLabel(); tip_label->setObjectName("tipLabel"); QStringList cache_list, status_list; cache_list << tr("Cleanup Package Cache") << tr("Cleanup Software Center Cache") << tr("Cleanup Thumbnails Cache") << tr("Cleanup FireFox Cache") << tr("Cleanup Chromium Cache"); status_list << "apt" << "software-center" << "thumbnails" << "firefox" << "chromium"; cache_items = new CleanerItems(cache_list, status_list, skin, 280, tr("Cache Items")); // cache_btn = new KylinCheckBox(0, "://res/cache.png"); cache_btn = new CleanGroup(0, "://res/cache"); // cache_btn->setFixedSize(260, 130); cache_btn->setStatusTip("cache"); cache_btn->setLabelText(tr("System Cache"), tr("Cleanup cache of system, software-center, thumbnails and browser"));//系统缓存垃圾 清除包、软件中心、缩略图和浏览器缓存 //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cache_items, SIGNAL(notifyMainCheckBox(int)), cache_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(cache_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); QStringList package_list; package_list << tr("Uninstall unnecessary procedures") << tr("Uninstall old kernel packages") << tr("Cleanup software configfile"); status_list.clear(); status_list << "unneed" << "oldkernel" << "configfile"; package_items = new CleanerItems(package_list, status_list, skin, 200, tr("Package Items")); // package_btn = new KylinCheckBox(0, "://res/package.png"); package_btn = new CleanGroup(0, "://res/cache"); // package_btn->setFixedSize(260, 130); package_btn->setLabelText(tr("Packages and configfile"), tr("Cleaning up the software that installed by other software bundled, old kernel packages and configfile, to improve system performance"));//包垃圾 清除不必要的程序、旧内核包、配置文件 package_btn->setStatusTip("package"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(package_items, SIGNAL(notifyMainCheckBox(int)), package_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(package_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); QStringList cookies_list; cookies_list << tr("Cleanup the Cookies saving in Firefox") << tr("Cleanup the Cookies saving in Chromium"); status_list.clear(); status_list << "firefox" << "chromium"; cookies_items = new CleanerItems(cookies_list, status_list, skin, 170, tr("Cookies Items")); // cookies_btn = new KylinCheckBox(0, "://res/cookie.png"); cookies_btn = new CleanGroup(0, "://res/cache"); // cookies_btn->setFixedSize(260, 130); cookies_btn->setLabelText(tr("Cookies"), tr("Clean up user login information, support Firefox and Chromium browser"));//清除上网、游戏、购物等记录 cookies_btn->setStatusTip("cookies"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(cookies_items, SIGNAL(notifyMainCheckBox(int)), cookies_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(cookies_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); ////Debug logs调试日志 command history 命令历史记录 QStringList trace_list; trace_list << tr("Clean up the Firefox Internet records") << tr("Clean up the Chromium Internet records") << tr("Clean up the recently opened documents records") << tr("Delete the command history") << tr("Delete the debug logs"); status_list.clear(); status_list << "firefox" << "chromium" << "system" << "bash" << "X11"; trace_items = new CleanerItems(trace_list, status_list, skin, 280, tr("Trace Items")); // trace_btn = new KylinCheckBox(0, "://res/trace.png"); trace_btn = new CleanGroup(0, "://res/cache"); // trace_btn->setFixedSize(260, 130); trace_btn->setLabelText(tr("History trace"), tr("Cleaning the internet and opened documents recently records"));//使用痕迹 清除浏览器和系统使用痕迹 trace_btn->setStatusTip("trace"); //子checkbox的状态被改变时,重新设置总按钮的状态 connect(trace_items, SIGNAL(notifyMainCheckBox(int)), trace_btn, SLOT(resetMainStatus(int))); //点击按钮后,显示子页面 connect(trace_btn, SIGNAL(clicked()), this, SLOT(onButtonClicked())); // main_checkbox = new QCheckBox("main");//三态复选框 // main_checkbox->setObjectName("mainCheckBox"); // main_checkbox->setTristate(true); // main_checkbox->setEnabled(true); // main_checkbox->setCheckState(Qt::Unchecked); // connect(main_checkbox, SIGNAL(clicked()), this, SLOT(reset_sub_checkboxes())); QHBoxLayout *tip_layout = new QHBoxLayout(); tip_layout->addWidget(tip_label); tip_layout->addStretch(); // tip_layout->addWidget(main_checkbox); // tip_layout->setSpacing(50); tip_layout->setMargin(0); tip_layout->setContentsMargins(38,20,72,0); QHBoxLayout *layout1 = new QHBoxLayout; layout1->addWidget(cache_btn); layout1->addWidget(package_btn); layout1->addWidget(cookies_btn); layout1->setMargin(0); layout1->setContentsMargins(0,0,0,0); QHBoxLayout *layout2 = new QHBoxLayout; // layout2->addWidget(browser_btn); layout2->addWidget(trace_btn); layout2->addStretch(); layout1->setMargin(0); layout2->setContentsMargins(20,0,0,0); QVBoxLayout *layoutbox = new QVBoxLayout; layoutbox->addLayout(layout1); layoutbox->addLayout(layout2); layoutbox->setSpacing(20); layoutbox->setMargin(0); layoutbox->setContentsMargins(0,0,0,0); QVBoxLayout *main_layout = new QVBoxLayout; main_layout->addLayout(tip_layout); main_layout->addLayout(layoutbox); main_layout->addStretch(); main_layout->setSpacing(30); main_layout->setMargin(0); main_layout->setContentsMargins(0,0,0,0); setLayout(main_layout); this->setLanguage(); // main_checkbox = new QCheckBox(); // main_checkbox->setFocusPolicy(Qt::NoFocus); // main_checkbox->setObjectName("mainCheckBox"); // main_checkbox->setTristate(true); // main_checkbox->setEnabled(true); // main_checkbox->setCheckState(Qt::Checked); // cache_items = NULL; // scanWidgets = new QStackedWidget(this); // scanWidgets->setGeometry(rect()); // scanWidgets->lower(); } CleanerMainWidget::~CleanerMainWidget() { } void CleanerMainWidget::setLanguage() { tip_label->setText(tr("Please select the items you want to clean")); // main_checkbox->setText(tr("All")); } void CleanerMainWidget::resetCurrentSkin(QString skin) { if(cache_items != NULL) cache_items->resetTitleSkin(skin); if(trace_items != NULL) trace_items->resetTitleSkin(skin); if(package_items != NULL) package_items->resetTitleSkin(skin); if(cookies_items != NULL) cookies_items->resetTitleSkin(skin); } void CleanerMainWidget::receiveScanSignal() { this->getAllScanSelectedItems(); if(argsMap.empty()) { toolKits->alertMSG(parentWindow->geometry().topLeft().x(), parentWindow->geometry().topLeft().y(), tr("Scan args is empty!")); } else { // qDebug() << "args is.........." << argsMap; emit this->showActionAnimaiton(); sessionproxy->scanSystemCleanerItems(argsMap); } } void CleanerMainWidget::getAllScanSelectedItems() { argsMap.clear(); QStringList cacheTmp; QStringList packageTmp; QStringList cookieTmp; QStringList historyTmp; if(cache_btn != NULL && cache_btn->getCheckBoxStatus() != 0) { QStringList tmp = cache_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = package_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = cookies_items->getSelectedItems(); for(int i = 0; igetCheckBoxStatus() != 0) { QStringList tmp = trace_items->getSelectedItems(); for(int i = 0; i 0) argsMap.insert("Cache", cacheTmp); if(packageTmp.length() > 0) argsMap.insert("Packages", packageTmp); if(cookieTmp.length() > 0) argsMap.insert("Cookies", cookieTmp); if(historyTmp.length() > 0) argsMap.insert("History", historyTmp); } void CleanerMainWidget::onButtonClicked() { QObject *object = QObject::sender(); // KylinCheckBox *checkbox = qobject_cast(object); CleanGroup *checkbox = qobject_cast(object); QString object_name = checkbox->statusTip(); if(object_name == "cache") { if(cache_items->isHidden()) { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (280 / 2); cache_items->move(w_x, w_y); cache_items->show(); } else { cache_items->hide(); } if(!package_items->isHidden()) { package_items->hide(); } if(!cookies_items->isHidden()) { cookies_items->hide(); } if(!trace_items->isHidden()) { trace_items->hide(); } } else if(object_name == "package") { if(package_items->isHidden()) { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (200 / 2); package_items->move(w_x, w_y); package_items->show(); } else { package_items->hide(); } if(!cache_items->isHidden()) { cache_items->hide(); } if(!cookies_items->isHidden()) { cookies_items->hide(); } if(!trace_items->isHidden()) { trace_items->hide(); } } if(object_name == "cookies") { if(cookies_items->isHidden()) { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (170 / 2); cookies_items->move(w_x, w_y); cookies_items->show(); } else { cookies_items->hide(); } if(!cache_items->isHidden()) { cache_items->hide(); } if(!package_items->isHidden()) { package_items->hide(); } if(!trace_items->isHidden()) { trace_items->hide(); } } if(object_name == "trace") { if(trace_items->isHidden()) { int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (200 / 2); trace_items->move(w_x, w_y); trace_items->show(); } else { trace_items->hide(); } if(!cache_items->isHidden()) { cache_items->hide(); } if(!package_items->isHidden()) { package_items->hide(); } if(!cookies_items->isHidden()) { cookies_items->hide(); } } } youker-assistant/cleaner/cleanlistwidget.cpp0000664000175000017500000001373413260315532020334 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanlistwidget.h" #include "ui_cleanlistwidget.h" #include #include #include "../component/utils.h" #include //CleanListWidget::CleanListWidget(QStringList &arglist, const QString title_text, QWidget *parent) : // QWidget(parent),titleName(title_text), CleanListWidget::CleanListWidget(QStringList &arglist, QString skin, const QString title_text, QDialog *parent) : QDialog(parent),titleName(title_text), ui(new Ui::CleanListWidget) { ui->setupUi(this); this->setFixedSize(560, 398); setWindowFlags(Qt::FramelessWindowHint); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); tip_label = new QLabel(); num_label = new QLabel(); ui->widget_1->setAutoFillBackground(true); QPalette palette; palette.setColor(QPalette::Background, QColor(233,238,241));//#e9eef1 ui->widget_1->setPalette(palette); ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->scrollArea->setStyleSheet("QScrollArea{border: none}"); ui->scrollArea->setAutoFillBackground(true); ui->scrollArea->setBackgroundRole(QPalette::Light);//QPalette::Dark // palette.setBrush(QPalette::Window, QBrush(Qt::white)); // ui->scrollArea->setPalette(palette); tip_label->setText(tr("Clean Items:")); QHBoxLayout *tip_layout = new QHBoxLayout(); tip_layout->addWidget(tip_label); tip_layout->addWidget(num_label); tip_layout->addStretch(); tip_layout->setSpacing(0); tip_layout->setMargin(0); tip_layout->setContentsMargins(10, 0, 0, 0); ui->widget_1->setLayout(tip_layout); title_bar = new KylinTitleBar(this); title_bar->move(0,0); title_bar->show(); initTitleBar(skin); ui->scrollArea->setFixedSize(556,331); QVBoxLayout *button_layout = new QVBoxLayout; int count = arglist.count(); num_label->setText(QString::number(count)); for(int i=0; isetFocusPolicy(Qt::NoFocus); checkbox->setCheckState(Qt::Checked); checkbox_list.append(checkbox); connect(checkbox, SIGNAL(clicked()), this, SLOT(scanAllSubCheckbox())); button_layout->addWidget(checkbox); } button_layout->setSpacing(5); button_layout->setMargin(0); button_layout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(button_layout); layout->addStretch(); layout->setSpacing(0); layout->setMargin(0); layout->setContentsMargins(10, 0, 10, 10); ui->scrollAreaWidgetContents->setLayout(layout); ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); this->setLanguage(); this->initConnect(); } CleanListWidget::~CleanListWidget() { if(tip_label != NULL) { delete tip_label; tip_label = NULL; } if(num_label != NULL) { delete num_label; num_label = NULL; } if(title_bar != NULL) { delete title_bar; title_bar = NULL; } for(int i=0; iisChecked()) { text_list.append(checkbox->text()); } } return text_list; } void CleanListWidget::scanAllSubCheckbox() { int count = checkbox_list.count(); int m = 0; for(int i=0; iisChecked()) { m +=1; } } num_label->setText(QString::number(m)); if (m == 0) { emit this->notifyMainCheckBox(0); } else if (m == count) { emit this->notifyMainCheckBox(2); } else { emit this->notifyMainCheckBox(1); } } void CleanListWidget::resetSubCheckbox(int status) { if(status == 0) { for(int i=0; isetChecked(false); } num_label->setText("0"); } else if(status == 2) { for(int i=0; isetChecked(true); } int count = checkbox_list.count(); num_label->setText(QString::number(count)); } } void CleanListWidget::setLanguage() { } void CleanListWidget::initConnect() { connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); } void CleanListWidget::initTitleBar(QString skin) { title_bar->setTitleWidth(560); title_bar->setTitleName(titleName); // title_bar->setTitleBackgound(":/background/res/skin/1.png"); title_bar->setTitleBackgound(skin); } void CleanListWidget::resetTitleSkin(QString skin) { title_bar->resetBackground(skin); } void CleanListWidget::onCloseButtonClicked() { this->close(); } youker-assistant/src/0000775000175000017500000000000013265005454013620 5ustar fengfengyouker-assistant/src/qtsingleapplication/0000775000175000017500000000000013260315533017667 5ustar fengfengyouker-assistant/src/qtsingleapplication/qtlockedfile_win.cpp0000664000175000017500000001466113260315532023725 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtlockedfile.h" #include #include #define MUTEX_PREFIX "QtLockedFile mutex " // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS #define MAX_READERS MAXIMUM_WAIT_OBJECTS #if QT_VERSION >= 0x050000 #define QT_WA(unicode, ansi) unicode #endif Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) { if (mutexname.isEmpty()) { QFileInfo fi(*this); mutexname = QString::fromLatin1(MUTEX_PREFIX) + fi.absoluteFilePath().toLower(); } QString mname(mutexname); if (idx >= 0) mname += QString::number(idx); Qt::HANDLE mutex; if (doCreate) { QT_WA( { mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); }, { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { qErrnoWarning("QtLockedFile::lock(): CreateMutex failed"); return 0; } } else { QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); }, { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { if (GetLastError() != ERROR_FILE_NOT_FOUND) qErrnoWarning("QtLockedFile::lock(): OpenMutex failed"); return 0; } } return mutex; } bool QtLockedFile::waitMutex(Qt::HANDLE mutex, bool doBlock) { Q_ASSERT(mutex); DWORD res = WaitForSingleObject(mutex, doBlock ? INFINITE : 0); switch (res) { case WAIT_OBJECT_0: case WAIT_ABANDONED: return true; break; case WAIT_TIMEOUT: break; default: qErrnoWarning("QtLockedFile::lock(): WaitForSingleObject failed"); } return false; } bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); if (!wmutex && !(wmutex = getMutexHandle(-1, true))) return false; if (!waitMutex(wmutex, block)) return false; if (mode == ReadLock) { int idx = 0; for (; idx < MAX_READERS; idx++) { rmutex = getMutexHandle(idx, false); if (!rmutex || waitMutex(rmutex, false)) break; CloseHandle(rmutex); } bool ok = true; if (idx >= MAX_READERS) { qWarning("QtLockedFile::lock(): too many readers"); rmutex = 0; ok = false; } else if (!rmutex) { rmutex = getMutexHandle(idx, true); if (!rmutex || !waitMutex(rmutex, false)) ok = false; } if (!ok && rmutex) { CloseHandle(rmutex); rmutex = 0; } ReleaseMutex(wmutex); if (!ok) return false; } else { Q_ASSERT(rmutexes.isEmpty()); for (int i = 0; i < MAX_READERS; i++) { Qt::HANDLE mutex = getMutexHandle(i, false); if (mutex) rmutexes.append(mutex); } if (rmutexes.size()) { DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(), TRUE, block ? INFINITE : 0); if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) { if (res != WAIT_TIMEOUT) qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed"); m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky unlock(); return false; } } } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; if (m_lock_mode == ReadLock) { ReleaseMutex(rmutex); CloseHandle(rmutex); rmutex = 0; } else { foreach(Qt::HANDLE mutex, rmutexes) { ReleaseMutex(mutex); CloseHandle(mutex); } rmutexes.clear(); ReleaseMutex(wmutex); } m_lock_mode = QtLockedFile::NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); if (wmutex) CloseHandle(wmutex); } youker-assistant/src/qtsingleapplication/qtlocalpeer.h0000664000175000017500000000520513260315532022354 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTLOCALPEER_H #define QTLOCALPEER_H #include #include #include #include "qtlockedfile.h" class QtLocalPeer : public QObject { Q_OBJECT public: QtLocalPeer(QObject *parent = 0, const QString &appId = QString()); bool isClient(); bool sendMessage(const QString &message, int timeout); QString applicationId() const { return id; } Q_SIGNALS: void messageReceived(const QString &message); protected Q_SLOTS: void receiveConnection(); protected: QString id; QString socketName; QLocalServer* server; QtLP_Private::QtLockedFile lockFile; private: static const char* ack; }; #endif // QTLOCALPEER_H youker-assistant/src/qtsingleapplication/qtlockedfile.cpp0000664000175000017500000001374213260315532023047 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtlockedfile.h" /*! \class QtLockedFile \brief The QtLockedFile class extends QFile with advisory locking functions. A file may be locked in read or write mode. Multiple instances of \e QtLockedFile, created in multiple processes running on the same machine, may have a file locked in read mode. Exactly one instance may have it locked in write mode. A read and a write lock cannot exist simultaneously on the same file. The file locks are advisory. This means that nothing prevents another process from manipulating a locked file using QFile or file system functions offered by the OS. Serialization is only guaranteed if all processes that access the file use QLockedFile. Also, while holding a lock on a file, a process must not open the same file again (through any API), or locks can be unexpectedly lost. The lock provided by an instance of \e QtLockedFile is released whenever the program terminates. This is true even when the program crashes and no destructors are called. */ /*! \enum QtLockedFile::LockMode This enum describes the available lock modes. \value ReadLock A read lock. \value WriteLock A write lock. \value NoLock Neither a read lock nor a write lock. */ /*! Constructs an unlocked \e QtLockedFile object. This constructor behaves in the same way as \e QFile::QFile(). \sa QFile::QFile() */ QtLockedFile::QtLockedFile() : QFile() { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Constructs an unlocked QtLockedFile object with file \a name. This constructor behaves in the same way as \e QFile::QFile(const QString&). \sa QFile::QFile() */ QtLockedFile::QtLockedFile(const QString &name) : QFile(name) { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Opens the file in OpenMode \a mode. This is identical to QFile::open(), with the one exception that the Truncate mode flag is disallowed. Truncation would conflict with the advisory file locking, since the file would be modified before the write lock is obtained. If truncation is required, use resize(0) after obtaining the write lock. Returns true if successful; otherwise false. \sa QFile::open(), QFile::resize() */ bool QtLockedFile::open(OpenMode mode) { if (mode & QIODevice::Truncate) { qWarning("QtLockedFile::open(): Truncate mode not allowed."); return false; } return QFile::open(mode); } /*! Returns \e true if this object has a in read or write lock; otherwise returns \e false. \sa lockMode() */ bool QtLockedFile::isLocked() const { return m_lock_mode != NoLock; } /*! Returns the type of lock currently held by this object, or \e QtLockedFile::NoLock. \sa isLocked() */ QtLockedFile::LockMode QtLockedFile::lockMode() const { return m_lock_mode; } /*! \fn bool QtLockedFile::lock(LockMode mode, bool block = true) Obtains a lock of type \a mode. The file must be opened before it can be locked. If \a block is true, this function will block until the lock is aquired. If \a block is false, this function returns \e false immediately if the lock cannot be aquired. If this object already has a lock of type \a mode, this function returns \e true immediately. If this object has a lock of a different type than \a mode, the lock is first released and then a new lock is obtained. This function returns \e true if, after it executes, the file is locked by this object, and \e false otherwise. \sa unlock(), isLocked(), lockMode() */ /*! \fn bool QtLockedFile::unlock() Releases a lock. If the object has no lock, this function returns immediately. This function returns \e true if, after it executes, the file is not locked by this object, and \e false otherwise. \sa lock(), isLocked(), lockMode() */ /*! \fn QtLockedFile::~QtLockedFile() Destroys the \e QtLockedFile object. If any locks were held, they are released. */ youker-assistant/src/qtsingleapplication/qtlocalpeer.cpp0000664000175000017500000001507013260315532022710 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtlocalpeer.h" #include #include #include #if defined(Q_OS_WIN) #include #include typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif #if defined(Q_OS_UNIX) #include #include #include #endif namespace QtLP_Private { #include "qtlockedfile.cpp" #if defined(Q_OS_WIN) #include "qtlockedfile_win.cpp" #else #include "qtlockedfile_unix.cpp" #endif } const char* QtLocalPeer::ack = "ack"; QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId) : QObject(parent), id(appId) { QString prefix = id; if (id.isEmpty()) { id = QCoreApplication::applicationFilePath(); #if defined(Q_OS_WIN) id = id.toLower(); #endif prefix = id.section(QLatin1Char('/'), -1); } prefix.remove(QRegExp("[^a-zA-Z]")); prefix.truncate(6); QByteArray idc = id.toUtf8(); quint16 idNum = qChecksum(idc.constData(), idc.size()); socketName = QLatin1String("qtsingleapp-") + prefix + QLatin1Char('-') + QString::number(idNum, 16); #if defined(Q_OS_WIN) if (!pProcessIdToSessionId) { QLibrary lib("kernel32"); pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); } if (pProcessIdToSessionId) { DWORD sessionId = 0; pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); socketName += QLatin1Char('-') + QString::number(sessionId, 16); } #else socketName += QLatin1Char('-') + QString::number(::getuid(), 16); #endif server = new QLocalServer(this); QString lockName = QDir(QDir::tempPath()).absolutePath() + QLatin1Char('/') + socketName + QLatin1String("-lockfile"); lockFile.setFileName(lockName); lockFile.open(QIODevice::ReadWrite); } bool QtLocalPeer::isClient() { if (lockFile.isLocked()) return false; if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) return true; bool res = server->listen(socketName); #if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) // ### Workaround if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); res = server->listen(socketName); } #endif if (!res) qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); return false; } bool QtLocalPeer::sendMessage(const QString &message, int timeout) { if (!isClient()) return false; QLocalSocket socket; bool connOk = false; for(int i = 0; i < 2; i++) { // Try twice, in case the other instance is just starting up socket.connectToServer(socketName); connOk = socket.waitForConnected(timeout/2); if (connOk || i) break; int ms = 250; #if defined(Q_OS_WIN) Sleep(DWORD(ms)); #else struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; nanosleep(&ts, NULL); #endif } if (!connOk) return false; QByteArray uMsg(message.toUtf8()); QDataStream ds(&socket); ds.writeBytes(uMsg.constData(), uMsg.size()); bool res = socket.waitForBytesWritten(timeout); if (res) { res &= socket.waitForReadyRead(timeout); // wait for ack if (res) res &= (socket.read(qstrlen(ack)) == ack); } return res; } void QtLocalPeer::receiveConnection() { QLocalSocket* socket = server->nextPendingConnection(); if (!socket) return; while (socket->bytesAvailable() < (int)sizeof(quint32)) socket->waitForReadyRead(); QDataStream ds(socket); QByteArray uMsg; quint32 remaining; ds >> remaining; uMsg.resize(remaining); int got = 0; char* uMsgBuf = uMsg.data(); do { got = ds.readRawData(uMsgBuf, remaining); remaining -= got; uMsgBuf += got; } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); if (got < 0) { qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); delete socket; return; } QString message(QString::fromUtf8(uMsg)); socket->write(ack, qstrlen(ack)); socket->waitForBytesWritten(1000); socket->waitForDisconnected(1000); // make sure client reads ack delete socket; emit messageReceived(message); //### (might take a long time to return) } youker-assistant/src/qtsingleapplication/QtSingleApplication0000664000175000017500000000004113260315532023516 0ustar fengfeng#include "qtsingleapplication.h" youker-assistant/src/qtsingleapplication/qtsinglecoreapplication.pri0000664000175000017500000000050413260315532025324 0ustar fengfengINCLUDEPATH += $$PWD DEPENDPATH += $$PWD HEADERS += $$PWD/qtsinglecoreapplication.h $$PWD/qtlocalpeer.h SOURCES += $$PWD/qtsinglecoreapplication.cpp $$PWD/qtlocalpeer.cpp QT *= network win32:contains(TEMPLATE, lib):contains(CONFIG, shared) { DEFINES += QT_QTSINGLECOREAPPLICATION_EXPORT=__declspec(dllexport) } youker-assistant/src/qtsingleapplication/qtsingleapplication.pri0000664000175000017500000000111013260315532024445 0ustar fengfenginclude(../common.pri) INCLUDEPATH += $$PWD DEPENDPATH += $$PWD QT *= network greaterThan(QT_MAJOR_VERSION, 4): QT *= widgets qtsingleapplication-uselib:!qtsingleapplication-buildlib { LIBS += -L$$QTSINGLEAPPLICATION_LIBDIR -l$$QTSINGLEAPPLICATION_LIBNAME } else { SOURCES += $$PWD/qtsingleapplication.cpp $$PWD/qtlocalpeer.cpp HEADERS += $$PWD/qtsingleapplication.h $$PWD/qtlocalpeer.h } win32 { contains(TEMPLATE, lib):contains(CONFIG, shared):DEFINES += QT_QTSINGLEAPPLICATION_EXPORT else:qtsingleapplication-uselib:DEFINES += QT_QTSINGLEAPPLICATION_IMPORT } youker-assistant/src/qtsingleapplication/qtsingleapplication.h0000664000175000017500000000761713260315532024124 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTSINGLEAPPLICATION_H #define QTSINGLEAPPLICATION_H #include class QtLocalPeer; #if defined(Q_OS_WIN) # if !defined(QT_QTSINGLEAPPLICATION_EXPORT) && !defined(QT_QTSINGLEAPPLICATION_IMPORT) # define QT_QTSINGLEAPPLICATION_EXPORT # elif defined(QT_QTSINGLEAPPLICATION_IMPORT) # if defined(QT_QTSINGLEAPPLICATION_EXPORT) # undef QT_QTSINGLEAPPLICATION_EXPORT # endif # define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllimport) # elif defined(QT_QTSINGLEAPPLICATION_EXPORT) # undef QT_QTSINGLEAPPLICATION_EXPORT # define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllexport) # endif #else # define QT_QTSINGLEAPPLICATION_EXPORT #endif class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication { Q_OBJECT public: QtSingleApplication(int &argc, char **argv, bool GUIenabled = true); QtSingleApplication(const QString &id, int &argc, char **argv); #if QT_VERSION < 0x050000 QtSingleApplication(int &argc, char **argv, Type type); # if defined(Q_WS_X11) QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0); QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); # endif // Q_WS_X11 #endif // QT_VERSION < 0x050000 bool isRunning(); QString id() const; void setActivationWindow(QWidget* aw, bool activateOnMessage = true); QWidget* activationWindow() const; // Obsolete: void initialize(bool dummy = true) { isRunning(); Q_UNUSED(dummy) } public Q_SLOTS: bool sendMessage(const QString &message, int timeout = 5000); void activateWindow(); Q_SIGNALS: void messageReceived(const QString &message); private: void sysInit(const QString &appId = QString()); QtLocalPeer *peer; QWidget *actWin; }; #endif // QTSINGLEAPPLICATION_H youker-assistant/src/qtsingleapplication/qtsingleapplication.cpp0000664000175000017500000002701013260315532024444 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtsingleapplication.h" #include "qtlocalpeer.h" #include /*! \class QtSingleApplication qtsingleapplication.h \brief The QtSingleApplication class provides an API to detect and communicate with running instances of an application. This class allows you to create applications where only one instance should be running at a time. I.e., if the user tries to launch another instance, the already running instance will be activated instead. Another usecase is a client-server system, where the first started instance will assume the role of server, and the later instances will act as clients of that server. By default, the full path of the executable file is used to determine whether two processes are instances of the same application. You can also provide an explicit identifier string that will be compared instead. The application should create the QtSingleApplication object early in the startup phase, and call isRunning() to find out if another instance of this application is already running. If isRunning() returns false, it means that no other instance is running, and this instance has assumed the role as the running instance. In this case, the application should continue with the initialization of the application user interface before entering the event loop with exec(), as normal. The messageReceived() signal will be emitted when the running application receives messages from another instance of the same application. When a message is received it might be helpful to the user to raise the application so that it becomes visible. To facilitate this, QtSingleApplication provides the setActivationWindow() function and the activateWindow() slot. If isRunning() returns true, another instance is already running. It may be alerted to the fact that another instance has started by using the sendMessage() function. Also data such as startup parameters (e.g. the name of the file the user wanted this new instance to open) can be passed to the running instance with this function. Then, the application should terminate (or enter client mode). If isRunning() returns true, but sendMessage() fails, that is an indication that the running instance is frozen. Here's an example that shows how to convert an existing application to use QtSingleApplication. It is very simple and does not make use of all QtSingleApplication's functionality (see the examples for that). \code // Original int main(int argc, char **argv) { QApplication app(argc, argv); MyMainWidget mmw; mmw.show(); return app.exec(); } // Single instance int main(int argc, char **argv) { QtSingleApplication app(argc, argv); if (app.isRunning()) return !app.sendMessage(someDataString); MyMainWidget mmw; app.setActivationWindow(&mmw); mmw.show(); return app.exec(); } \endcode Once this QtSingleApplication instance is destroyed (normally when the process exits or crashes), when the user next attempts to run the application this instance will not, of course, be encountered. The next instance to call isRunning() or sendMessage() will assume the role as the new running instance. For console (non-GUI) applications, QtSingleCoreApplication may be used instead of this class, to avoid the dependency on the QtGui library. \sa QtSingleCoreApplication */ void QtSingleApplication::sysInit(const QString &appId) { actWin = 0; peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a argv, and \a GUIenabled are passed on to the QAppliation constructor. If you are creating a console application (i.e. setting \a GUIenabled to false), you may consider using QtSingleCoreApplication instead. */ QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled) : QApplication(argc, argv, GUIenabled) { sysInit(); } /*! Creates a QtSingleApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QAppliation constructor. */ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) : QApplication(argc, argv) { sysInit(appId); } #if QT_VERSION < 0x050000 /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a argv, and \a type are passed on to the QAppliation constructor. */ QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) : QApplication(argc, argv, type) { sysInit(); } # if defined(Q_WS_X11) /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be QCoreApplication::applicationFilePath(). \a dpy, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, visual, cmap) { sysInit(); } /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be QCoreApplication::applicationFilePath(). \a dpy, \a argc, \a argv, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, argc, argv, visual, cmap) { sysInit(); } /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be \a appId. \a dpy, \a argc, \a argv, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, argc, argv, visual, cmap) { sysInit(appId); } # endif // Q_WS_X11 #endif // QT_VERSION < 0x050000 /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleApplication::sendMessage(const QString &message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleApplication::id() const { return peer->applicationId(); } /*! Sets the activation window of this application to \a aw. The activation window is the widget that will be activated by activateWindow(). This is typically the application's main window. If \a activateOnMessage is true (the default), the window will be activated automatically every time a message is received, just prior to the messageReceived() signal being emitted. \sa activateWindow(), messageReceived() */ void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessage) { actWin = aw; if (activateOnMessage) connect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); else disconnect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); } /*! Returns the applications activation window if one has been set by calling setActivationWindow(), otherwise returns 0. \sa setActivationWindow() */ QWidget* QtSingleApplication::activationWindow() const { return actWin; } /*! De-minimizes, raises, and activates this application's activation window. This function does nothing if no activation window has been set. This is a convenience function to show the user that this application instance has been activated when he has tried to start another instance. This function should typically be called in response to the messageReceived() signal. By default, that will happen automatically, if an activation window has been set. \sa setActivationWindow(), messageReceived(), initialize() */ void QtSingleApplication::activateWindow() { if (actWin) { actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized); actWin->raise(); actWin->activateWindow(); } } /*! \fn void QtSingleApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage(), setActivationWindow(), activateWindow() */ /*! \fn void QtSingleApplication::initialize(bool dummy = true) \obsolete */ youker-assistant/src/qtsingleapplication/qtsinglecoreapplication.h0000664000175000017500000000502513260315532024764 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTSINGLECOREAPPLICATION_H #define QTSINGLECOREAPPLICATION_H #include class QtLocalPeer; class QtSingleCoreApplication : public QCoreApplication { Q_OBJECT public: QtSingleCoreApplication(int &argc, char **argv); QtSingleCoreApplication(const QString &id, int &argc, char **argv); bool isRunning(); QString id() const; public Q_SLOTS: bool sendMessage(const QString &message, int timeout = 5000); Q_SIGNALS: void messageReceived(const QString &message); private: QtLocalPeer* peer; }; #endif // QTSINGLECOREAPPLICATION_H youker-assistant/src/qtsingleapplication/QtLockedFile0000664000175000017500000000003213260315532022112 0ustar fengfeng#include "qtlockedfile.h" youker-assistant/src/qtsingleapplication/qtsinglecoreapplication.cpp0000664000175000017500000001235513260315532025323 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtsinglecoreapplication.h" #include "qtlocalpeer.h" /*! \class QtSingleCoreApplication qtsinglecoreapplication.h \brief A variant of the QtSingleApplication class for non-GUI applications. This class is a variant of QtSingleApplication suited for use in console (non-GUI) applications. It is an extension of QCoreApplication (instead of QApplication). It does not require the QtGui library. The API and usage is identical to QtSingleApplication, except that functions relating to the "activation window" are not present, for obvious reasons. Please refer to the QtSingleApplication documentation for explanation of the usage. A QtSingleCoreApplication instance can communicate to a QtSingleApplication instance if they share the same application id. Hence, this class can be used to create a light-weight command-line tool that sends commands to a GUI application. \sa QtSingleApplication */ /*! Creates a QtSingleCoreApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc and \a argv are passed on to the QCoreAppliation constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Creates a QtSingleCoreApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QCoreAppliation constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(const QString &appId, int &argc, char **argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleCoreApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleCoreApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleCoreApplication::sendMessage(const QString &message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleCoreApplication::id() const { return peer->applicationId(); } /*! \fn void QtSingleCoreApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage() */ youker-assistant/src/qtsingleapplication/qtlockedfile.h0000664000175000017500000000630713260315532022513 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTLOCKEDFILE_H #define QTLOCKEDFILE_H #include #ifdef Q_OS_WIN #include #endif #if defined(Q_OS_WIN) # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) # define QT_QTLOCKEDFILE_EXPORT # elif defined(QT_QTLOCKEDFILE_IMPORT) # if defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # endif # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) # elif defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) # endif #else # define QT_QTLOCKEDFILE_EXPORT #endif namespace QtLP_Private { class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile { public: enum LockMode { NoLock = 0, ReadLock, WriteLock }; QtLockedFile(); QtLockedFile(const QString &name); ~QtLockedFile(); bool open(OpenMode mode); bool lock(LockMode mode, bool block = true); bool unlock(); bool isLocked() const; LockMode lockMode() const; private: #ifdef Q_OS_WIN Qt::HANDLE wmutex; Qt::HANDLE rmutex; QVector rmutexes; QString mutexname; Qt::HANDLE getMutexHandle(int idx, bool doCreate); bool waitMutex(Qt::HANDLE mutex, bool doBlock); #endif LockMode m_lock_mode; }; } #endif youker-assistant/src/qtsingleapplication/qtlockedfile_unix.cpp0000664000175000017500000000661413260315532024112 0ustar fengfeng/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include "qtlockedfile.h" bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = (mode == ReadLock) ? F_RDLCK : F_WRLCK; int cmd = block ? F_SETLKW : F_SETLK; int ret = fcntl(handle(), cmd, &fl); if (ret == -1) { if (errno != EINTR && errno != EAGAIN) qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = F_UNLCK; int ret = fcntl(handle(), F_SETLKW, &fl); if (ret == -1) { qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); } youker-assistant/src/middlewidget.cpp0000664000175000017500000000713013260315532016763 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "middlewidget.h" #include "../component/kylintoolbutton.h" #include "mainwindow.h" #include MiddleWidget::MiddleWidget(QWidget *parent, QString arch, QString os) : QWidget(parent), cur_arch(arch), osname(os) { this->setFixedSize(900, 47); this->setAutoFillBackground(true); QPalette palette; palette.setColor(QPalette::Background, QColor(233,238,241));//#e9eef1 this->setPalette(palette); QStringList icon_list; QStringList text_list; // if(this->cur_arch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") // { // icon_list<<":/tool/res/menu/home"<<":/tool/res/menu/cleanup"<<":/tool/res/menu/sysinfo"<<":/tool/res/menu/toolkits"; // text_list<< tr("KylinHome") << tr("Cleanup") << tr("Sysinfo") << tr("Toolkits"); // } // else { icon_list<<":/tool/res/menu/home"<<":/tool/res/menu/cleanup"<<":/tool/res/menu/sysinfo"<<":/tool/res/menu/feature"<<":/tool/res/menu/toolkits"; text_list<< tr("Home") << tr("Cleanup") << tr("Sysinfo") << tr("Feature") << tr("Toolkits"); // } QHBoxLayout *button_layout = new QHBoxLayout(); QSignalMapper *signal_mapper = new QSignalMapper(this); for(int i=0; isetFixedSize(180, 47); button_list.append(tool_button); connect(tool_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); signal_mapper->setMapping(tool_button, QString::number(i, 10)); button_layout->addWidget(tool_button, 0, Qt::AlignBottom); } this->switchSelectedPageIndex("0"); connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchSelectedPageIndex(QString))); button_layout->addStretch(); button_layout->setSpacing(8); button_layout->setMargin(0); button_layout->setContentsMargins(15, 0, 15, 0); setLayout(button_layout); is_move = false; } MiddleWidget::~MiddleWidget() { for(int i=0; isetMousePress(true); } else { tool_button->setMousePress(false); } } emit turnCurrentPage(current_index); } void MiddleWidget::showBoxTool() { // if(this->cur_arch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") { // this->switchSelectedPageIndex("3"); // } // else { this->switchSelectedPageIndex("4"); // } } youker-assistant/src/toolkits.cpp0000664000175000017500000000456113260315532016176 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "toolkits.h" extern QPoint widgetPosition; Toolkits::Toolkits(QObject *parent) : QObject(parent) { this->mainwindow_width = 850; this->mainwindow_height = 600; this->alert_width = 200; this->alert_height = 75; alertBG = new AlertDialog(); this->alertTimer = new QTimer(this); // connect(alertTimer, SIGNAL(timeout()), this, SLOT(updateAlert())); // this->alertDelayTimer = new QTimer(this); // connect(alertDelayTimer, SIGNAL(timeout()), this, SLOT(hideAlert())); this->alertGOE = new QGraphicsOpacityEffect(); this->alertBG->setGraphicsEffect(alertGOE); this->ao = 0.0; this->alertBG->hide(); } //启动alert提示 void Toolkits::alertMSG(const QString &alertText) { this->alert_x = widgetPosition.x() + (mainwindow_width / 2) - (this->alert_width / 2); this->alert_y = widgetPosition.y() + (mainwindow_height /2) - (this->alert_height / 2); this->ay = this->alert_y; this->ao = 0.0; this->alertBG->move(this->alert_x, this->alert_y); this->alertGOE->setOpacity(this->ao); this->alertBG->setMSG(alertText); this->alertBG->show(); // this->alertTimer->start(15); } //alert提示框的步处理 void Toolkits::updateAlert() { // if(this->ao < 0.90){ // this->ao += 0.02; // this->alertGOE->setOpacity(this->ao); // } // if(this->ay <= (this->alert_y - 150)){ // this->alertTimer->stop(); // //5秒后自动关闭alert提示框 // this->alertDelayTimer->start(1000); // }else{ // this->ay -= 3; // this->alertBG->move(this->alert_x,this->ay); // } } //隐藏alert提示框 void Toolkits::hideAlert() { this->alertBG->hide(); // this->alertDelayTimer->stop(); } youker-assistant/src/kylinthread.cpp0000664000175000017500000000163213260315532016640 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinthread.h" #include "cleanerwidget.h" KylinThread::KylinThread() { } KylinThread::~KylinThread() { } void KylinThread::run () { return; } youker-assistant/src/mainwindow.h0000664000175000017500000001011213260315532016134 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "bottomcontentwidget.h" #include "infowidget.h" #include "settingwidget.h" #include "cleanerwidget.h" #include "boxwidget.h" #include "../component/kylinmenu.h" #include "../component/utils.h" #include "../component/toolkits.h" #include "aboutdialog.h" class DataWorker; class SystemDbusProxy; class SessionDbusProxy; class MainTopWidget; class MiddleWidget; class MainBottomWidget; class TopBaseWidget; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QString cur_arch = "", int d_count = 0, QWidget* parent = 0/*, Qt::WindowFlags flags = 0*/); ~MainWindow(); void setTranslator(QTranslator* translator); void initConnect(); void reViewThePointSkin(QString pciture); void reViewTheOrgSkin(); void changeSkin(QString pciture); void restoreSkin(); int getCurrentBackgroundIndex(); QString getCurrentBackgroundName(); QString getCurrentBackgroundAbsName(); QStringList filterSkin(); bool deleteFile(QString filename); bool CopyFile(QString filename); QString accessOSName(); void createAboutDialog(); void initWidgets(); void moveCenter(); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void closeEvent(QCloseEvent *); // virtual void paintEvent(QPaintEvent *event); public slots: void openSkinCenter(); void openUpgradePage(/*QStringList version_list*/); // void openUpgradePageAgain(); void showMainMenu(); void closeYoukerAssistant(); void setCurrentPageIndex(int index); void changeLanguage(LANGUAGE language); void newFeatures(); void setupConfigure(); void aboutUs(); void startDbusDaemon(); void onInitDataFinished(); void onPluginModuleError(const QString &info); private: QStackedWidget *m_topStack = nullptr; QStackedWidget *m_bottomStack = nullptr; MainTopWidget *m_mainTopWidget = nullptr; MiddleWidget *m_middleWidget = nullptr; MainBottomWidget *m_mainBottomWidget = nullptr; MainTopWidget *cleaner_action_widget; TopBaseWidget *info_action_widget = nullptr; TopBaseWidget *setting_action_widget = nullptr; TopBaseWidget *box_action_widget = nullptr; InfoWidget *info_widget = nullptr; CleanerWidget *cleaner_widget = nullptr; SettingWidget *setting_widget = nullptr; BoxWidget *box_widget = nullptr; KylinMenu *main_menu = nullptr; QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 QTranslator* translator = nullptr; //翻译器 LANGUAGE current_language; //当前语言 QPixmap main_skin_pixmap; QString last_skin_path; QPixmap review_skin_pixmap; Toolkits *toolKits = nullptr; AboutDialog *aboutDlg; QSettings *mSettings; QString desktop; QString osName; QString arch; bool battery; bool sensor; int display_count; QStringList m_cpulist; QString m_currentCpuMode; PAGESTATUS status; DataWorker *m_dataWorker = nullptr; QWidget *centralWidget = nullptr; }; class GlobalData // define by hebing,just for transmit var { public: static QString globalarch; }; #endif // MAINWINDOW_H youker-assistant/src/skincenter.h0000664000175000017500000000651313260315532016137 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SKINCENTER_H #define SKINCENTER_H #include #include //#include #include "../component/kylinlistwidget.h" #include "../component/kylintitlebar.h" #include "../component/kylinlistwidgetitem.h" #include "../component/cardwidget.h" #include "../component/itemcard.h" class MainWindow; class QParallelAnimationGroup; //class SystemDispatcher; //#include "../dbusproxy/youkersystemdbus.h" class SkinCenter :public QDialog { Q_OBJECT public: SkinCenter(QWidget *parent = 0, QString skin = ":/background/res/skin/1.png", QString arch = "", QString os = "");//20161228 ~SkinCenter(); void setParentWindow(MainWindow *From) { mainwindow = From;} // void setSystemDbusProxy(SystemDispatcher* dispatcher) { systemProxy = dispatcher;} void initSysBackgroundList(); void reloadBackgroundList(); // void setLanguage(); void initConnect(); void initTitleBar(const QString &path); // void initUsingLogo(QListWidgetItem *init_item); // void setLogo(); void initAnimation(); public slots: void onCloseButtonClicked(); void changeSkinCenterBackground(QString pciture); void changeEnterBackground(QString pciture); void changeLeaveBackground(); void deleteBackground(QString picture); void switchUsingLogo(QString index); void switchCusteomUsingLogo(QString index); void showSystem(); void showCustom(); void addCustomBackground(); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); //// virtual void enterEvent (QEvent *); //// virtual void leaveEvent (QEvent *); void closeEvent(QCloseEvent *event); // void paintEvent(QPaintEvent *event); // void enterEvent(QEvent *event); // void leaveEvent(QEvent *event); private: MainWindow *mainwindow; QPoint m_dragPosition; //移动的距离 // bool mouse_enter; bool m_mousePressed; //按下鼠标左键 QWidget *baseWidget; SystemButton *close_btn; QLabel *indicator; QLabel *label; // KylinTitleBar *title_bar; QWidget *skin_widget; // KylinListWidget *list_widget; QString last_skin_path; // QLabel *using_label; // QTimer *delayTimer; // QString titlebar_pic; QPushButton *sysBtn; QPushButton *customBtn; CardWidget *list_widget; // SystemDispatcher *systemProxy; QList card_list; CardWidget *custom_list_widget; QList custom_card_list; QParallelAnimationGroup *aboutGroup; QParallelAnimationGroup *contributorGroup; }; #endif // SKINCENTER_H youker-assistant/src/autostartwidget.ui0000664000175000017500000000247013260315532017410 0ustar fengfeng AutoStartWidget 0 0 560 398 Dialog 0 32 560 33 0 65 560 31 0 96 560 300 true 0 0 558 298 youker-assistant/src/cameramanager.cpp0000664000175000017500000002503113260315532017104 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cameramanager.h" #include "mainwindow.h" #include #include #include "../dbusproxy/youkersessiondbus.h" #include "../component/toolbutton.h" //#include #include #include CameraManager::CameraManager(QWidget *parent, SessionDispatcher *proxy, QString skin) :QDialog(parent),sessionproxy(proxy) { this->setStyleSheet("QDialog{border: 1px solid white;border-radius:2px}"); this->setFixedSize(622, 480); this->setWindowFlags(Qt::FramelessWindowHint); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); timer = NULL; imag = NULL; cam = NULL; frame = NULL; title_bar = new KylinTitleBar(this); initTitleBar(skin); camera_label = new QLabel(this); camera_label->setGeometry(QRect(0,32,622,340)); camera_label->hide(); baseWidget = new QWidget(this); baseWidget->setStyleSheet("QWidget{border: none;background-color: #a6b6c1;}");//background:transparent; baseWidget->setGeometry(QRect(0,372,622,108)); catch_label = new QLabel(baseWidget); catch_label->setStyleSheet("QLabel{border: 1px solid white;}"); catch_label->setGeometry(QRect(10,11,145,86)); QImage image("://res/camera-default.png"); if (!image.isNull()) { catch_label->setPixmap(QPixmap::fromImage(image).scaled(145, 86, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } disable_icon = new QLabel(baseWidget); disable_icon->setGeometry(QRect(263,7,93,93)); disable_icon->setStyleSheet("QLabel{background-image:url(':/res/catch-disable.png')}"); disable_icon->hide(); okBtn = new QPushButton(baseWidget); okBtn->setGeometry(QRect(263,7,93,93)); okBtn->hide(); okBtn->setCursor(Qt::PointingHandCursor); okBtn->setFocusPolicy(Qt::NoFocus); okBtn->setIconSize(QSize(93, 93)); okBtn->setFlat(true); okBtn->setStyleSheet("QPushButton{background:transparent;background-image:url('://res/catch.png');}QPushButton:hover{background:url('://res/catch-hover.png');}"); viewBtn = new ToolButton(baseWidget, true); viewBtn->setFocusPolicy(Qt::NoFocus); viewBtn->setCursor(Qt::PointingHandCursor); viewBtn->setIcon("://res/view.png"); viewBtn->setText(tr("View Photos")); viewBtn->setGeometry(QRect(500,16,50,60)); error_icon = new QLabel(this); error_icon->setGeometry(QRect(0,32,622,340)); error_icon->setStyleSheet("QLabel{background-image:url('://res/camera-error.png')}"); error_label = new QLabel(this); error_label->setGeometry(QRect(10, 280, 600, 20)); error_label->setWordWrap(true); error_label->setStyleSheet("QLabel{color:#90a5b1;font-family: 方正黑体_GBK;font-size: 14px;text-align: center;}"); error_label->setAlignment(Qt::AlignCenter); error_label->setText(tr("The camera is out of question, Refresh to call it out ~")); this->initCamera(); this->initConnect(); } //CameraManager::~CameraManager() //{ // if (timer != NULL) { // disconnect(timer,SIGNAL(timeout()),this,SLOT(readFarme())); // if(timer->isActive()) // timer->stop(); // delete timer; // timer = NULL; // } // if (imag != NULL) { // delete imag; // imag = NULL; // } // if (cam != NULL) { // delete cam; // cam = NULL; // } //} void CameraManager::initCamera() { timer = new QTimer(this); imag = new QImage(); int number = this->countCamaras();//获取摄像头的个数 // qDebug() << "camara number:" << number; // if (cam != NULL) // return; if(number < 1) { this->setOKButtonEnable(false); return; } else { this->setOKButtonEnable(true); } //0表示内置摄像头 1表示外界摄像头 cam = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频 // assert(NULL != cam); if(cam == NULL) { this->setOKButtonEnable(false); return; } cvSetCaptureProperty(cam, CV_CAP_PROP_FPS, 30);//帧率(只对摄像头有效) //default :640*480 // cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH, 1280);//视频流的帧宽度(只对摄像头有效) // cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT, 720);//视频流的帧高度(只对摄像头有效) timer->start(33);// 开始计时,超时则发出timeout()信号 } QString CameraManager::getCurrentDateTime() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 return str; } QString CameraManager::getHomePath() { QString homepath = QDir::homePath(); return homepath; } int CameraManager::countCamaras() { cv::VideoCapture temp_camera; int maxTested = 10; for (int i = 0; i < maxTested; i++) { // try { // cv::VideoCapture temp_camera(i); // } // catch(cv::Exception& e) { // qDebug() << e.what(); // } cv::VideoCapture temp_camera(i); bool res = (!temp_camera.isOpened()); temp_camera.release(); if (res) { return i; } } return maxTested; } void CameraManager::setOKButtonEnable(bool enable) { if(enable) { error_icon->hide(); error_label->hide(); disable_icon->hide(); camera_label->show(); okBtn->show(); // okBtn->setEnabled(true); } else { camera_label->hide(); // okBtn->setEnabled(false); okBtn->hide(); error_icon->show(); error_label->show(); disable_icon->show(); } } void CameraManager::onOKButtonClicked() { frame = cvQueryFrame(cam); // QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped(); QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped(); catch_label->setPixmap(QPixmap::fromImage(image).scaled(145, 86, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); IplImage* outImage = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels); cvCopy(frame,outImage,NULL); // outImage = this->DoPyrDown(outImage);//图片缩放 QString outImageName = this->getHomePath() + "/" + this->getCurrentDateTime() + ".jpg"; char* ch; QByteArray ba = outImageName.toUtf8(); ch=ba.data(); cvSaveImage(ch,outImage); cvReleaseImage(&outImage); } void CameraManager::readFarme() { frame = cvQueryFrame(cam); if(!frame) return; QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped(); camera_label->setPixmap(QPixmap::fromImage(image)); } // 实现将拍下来的图片缩放一倍 IplImage* CameraManager::DoPyrDown(IplImage* image, int filter = IPL_GAUSSIAN_5x5) //IplImage* CameraManager::DoPyrDown(IplImage* image, int filter = CV_GAUSSIAN_5x5) { CvSize size = cvSize(image->width / 2,image->height / 2); IplImage* outImage = cvCreateImage(size,image->depth,image->nChannels); cvPyrDown(image,outImage); cvReleaseImage(&image); return outImage; } void CameraManager::onViewButtonClicked() { // sessionproxy->open_folder_qt(sessionproxy->getHomePath()); QDesktopServices::openUrl(QUrl(QString("file:%1").arg(this->getHomePath()), QUrl::TolerantMode)); } void CameraManager::initConnect() { connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); connect(okBtn,SIGNAL(clicked()), this, SLOT(onOKButtonClicked())); connect(viewBtn, SIGNAL(clicked()), this, SLOT(onViewButtonClicked())); connect(error_label,SIGNAL(linkActivated(QString)),this,SLOT(refreshCamera())); connect(timer, SIGNAL(timeout()), this, SLOT(readFarme())); // 时间到,读取当前摄像头信息 } void CameraManager::refreshCamera() { int number = this->countCamaras();//获取摄像头的个数 if(number < 1) { this->setOKButtonEnable(false); return; } else { this->setOKButtonEnable(true); } //0表示内置摄像头 1表示外界摄像头 cam = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频 if(cam == NULL) { this->setOKButtonEnable(false); return; } cvSetCaptureProperty(cam, CV_CAP_PROP_FPS, 30);//帧率(只对摄像头有效) if(timer != NULL) { if(timer->isActive()) timer->stop(); timer->start(33);// 开始计时,超时则发出timeout()信号 } } void CameraManager::onCloseButtonClicked() { cvReleaseCapture(&cam); if (timer != NULL) { disconnect(timer,SIGNAL(timeout()),this,SLOT(readFarme())); if(timer->isActive()) timer->stop(); delete timer; timer = NULL; } if (imag != NULL) { delete imag; imag = NULL; } if (cam != NULL) { delete cam; cam = NULL; } this->close(); } void CameraManager::initTitleBar(QString skin) { title_bar->setTitleWidth(622); title_bar->setTitleName(tr("Camera")); title_bar->setTitleBackgound(skin); } void CameraManager::resetTitleSkin(QString skin) { title_bar->resetBackground(skin); } //void CameraManager::keyPressEvent(QKeyEvent *k) //{ // if (k->key() == Qt::Key_Escape) { // qDebug() << "prssss. esc....."; // if (cam != NULL) { // qDebug() << "cam not null"; // this->onCloseButtonClicked(); // } // else // qDebug() << "cam null"; // } // else if (k->key() == Qt::Key_Enter || k->key() == Qt::Key_Return) // { // qDebug() << "prssss. enter....."; // if (cam != NULL) // this->onPicButtonClicked(); // } //} youker-assistant/src/upgradedialog.h0000664000175000017500000000644113260315532016601 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 UPGRADEDIALOG_H #define UPGRADEDIALOG_H #include #include "../component/kylintitlebar.h" #include #include #include "../dbusproxy/youkersystemdbus.h" #include "../dbusproxy/youkersessiondbus.h" //class QMovie; //class QTimer; class LoadingLabel; class UpgradeDialog : public QDialog { Q_OBJECT public: explicit UpgradeDialog(QWidget *parent = 0, /*const QString &version="", */QString skin = ":/background/res/skin/1.png", QString arch = "", QString os = "");//20161228 ~UpgradeDialog(); void initConnect(); void resetTitleSkin(QString skin); void switchPage(bool flag); void setSystemDbusProxy(SystemDispatcher *dispatcher) { systemProxy = dispatcher;} void setSessionDbusProxy(SessionDispatcher *dispatcher) { sessionProxy = dispatcher;} void resetVersionNumber(QStringList version_list); void startAccessData(); void showErrorComponents(); void showUpdateSourceComponents(); public slots: void onCloseBtnClicked(); void onUpgradeBtnClicked(); void receiveFetchSignal(QString msg_type, QStringList msg); void receiveAptSignal(QString msg_type, QStringList msg); void checkLastestVersion(); void receiveCheckResultSignal(bool result); void onRetryBtnClicked(); // void slotDisappearTip(); void openUrl(QString url); signals: void close_signal(); void showBackendBtnSignal(bool flag); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 QWidget *baseWidget; SystemButton *close_btn; QProgressBar *progressbar; QLabel *visit_label; QLabel *net_icon_label; QLabel *normal_icon_label; QLabel *ok_icon_label; LoadingLabel *work_loading_label; LoadingLabel *upgrade_loading_label; QLabel *m_appNameLabel; QLabel *doing_label; QLabel *error_label; QLabel *tip_label; QLabel *splitlabel; QLabel *version_label; QWidget *new_widget; QLabel *hook_label; QLabel *official_label; QLabel *vline; QLabel *new_label; QLabel *new_num_label; QPushButton *retryBtn; QPushButton *upgradeBtn; QPushButton *okBtn; SystemDispatcher *systemProxy; SessionDispatcher *sessionProxy; bool isBusy; bool upgradeOver; // QMovie *movie; // QLabel *movie_label; // QTimer *timer; // QLabel *msg_label; QString cur_version; }; #endif // UPGRADEDIALOG_H youker-assistant/src/cleanerwidget.cpp0000664000175000017500000000636413260315532017146 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanerwidget.h" #include #include #include "../component/utils.h" CleanerWidget::CleanerWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(900, 403); this->setWindowFlags(Qt::FramelessWindowHint | Qt::Widget); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); statked_widget = new QStackedWidget(this); p_mainwindow = NULL; main_widget = NULL; detail_widget = NULL; } CleanerWidget::~CleanerWidget() { } void CleanerWidget::initUI(QString skin) { //20180101 main_widget = new CleanerMainWidget(this, p_mainwindow, toolKits, skin); detail_widget = new CleanerDetailWidget(this, p_mainwindow, toolKits ,skin); connect(this, SIGNAL(transCleanSignal()), detail_widget, SLOT(receiveCleanSignal())); connect(this, SIGNAL(transScanSignal()), main_widget, SLOT(receiveScanSignal())); connect(main_widget, SIGNAL(showActionAnimaiton()), this, SIGNAL(tranActionAnimaitonSignal())); // connect(detail_widget, SIGNAL(showActionAnimaiton()), this, SIGNAL(tranCleanActionAnimaitonSignal())); connect(detail_widget, SIGNAL(sendScanOverStatus(bool)), this, SIGNAL(tranScanOverSignal(bool))); statked_widget->addWidget(main_widget); statked_widget->addWidget(detail_widget); QVBoxLayout *layout1 = new QVBoxLayout(); layout1->addWidget(statked_widget); layout1->setSpacing(0); layout1->setMargin(0); layout1->setContentsMargins(0, 0, 0, 0); setLayout(layout1); connect(main_widget, SIGNAL(startScanSystem(QMap)), this, SIGNAL(startScanSystem(QMap))); connect(detail_widget, SIGNAL(startCleanSystem(QMap)), this, SIGNAL(startCleanSystem(QMap))); connect(this, SIGNAL(tellCleanerDetailData(QStringList)), detail_widget, SLOT(showReciveData(QStringList))); connect(this, SIGNAL(tellCleanerDetailStatus(QString)), detail_widget, SLOT(showReciveStatus(QString))); } void CleanerWidget::resetSkin(QString skin) { if(main_widget != NULL) main_widget->resetCurrentSkin(skin); if(detail_widget != NULL) detail_widget->resetCurrentSkin(skin); } void CleanerWidget::displayDetailPage() { statked_widget->setCurrentIndex(1); } void CleanerWidget::displayMainPage() { statked_widget->setCurrentIndex(0); main_widget->resetDefaultStatus(); detail_widget->CleanUIAndData(); } youker-assistant/src/homepage.h0000664000175000017500000000474213260315532015561 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 HOMEPAGE_H #define HOMEPAGE_H #include #include #include #include #include class MainWindow; class SessionDispatcher; class SystemDispatcher; class ToolButton; //#include "autostartwidget.h" //#include "cameramanager.h" class HomePage : public QWidget { Q_OBJECT public: explicit HomePage(QWidget *parent = 0, QString arch = "", QString os = ""/*, const QString &version = ""*/); ~HomePage(); void setLanguage(); void initBoxTool(); void initConnect(); void setSessionDbusProxy(SessionDispatcher *dispatcher) { sessionProxy = dispatcher;} void setSystemDbusProxy(SystemDispatcher *dispatcher) { systemProxy = dispatcher;} void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initUI(); //protected: // bool eventFilter(QObject *obj, QEvent *event); public slots: void switchPageIndex(QString index); // void checkLastestVersion(); void displayBackedBtn(bool flag); void onCheckBtnClicked(); void hideBackedBtn(); signals: void sendSubIndex(int index); void sendSignal(); void moreSignal(); void sendOpenUpgrade(); private: QLabel *version_logo; QLabel *version_title; QLabel *version_tip; QPushButton *check_btn; // QLabel *version_label; QLabel *box_logo; QPushButton *box_title; QLabel *box_tip; // QPushButton *more_text_btn; // QPushButton *more_btn; SessionDispatcher *sessionProxy; SystemDispatcher *systemProxy; MainWindow *p_mainwindow; // AutoStartWidget *auto_start; // CameraManager *camera_manager; QString current_version; QString osname; QString osarch; // QList item_list; }; #endif // HOMEPAGE_H youker-assistant/src/kylinthread.h0000664000175000017500000000213513260315532016304 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINTHREAD_H #define KYLINTHREAD_H #include class CleanerWidget; class KylinThread : public QThread { Q_OBJECT public: KylinThread(); ~KylinThread(); virtual void run(); void setCleanerWidget(CleanerWidget* widget) { parent_widget = widget; } private: CleanerWidget *parent_widget; }; #endif // KYLINTHREAD_H youker-assistant/src/cleanerwidget.h0000664000175000017500000000373313260315532016610 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERWIDGET_H #define CLEANERWIDGET_H #include #include "../cleaner/cleanermainwidget.h" #include "../cleaner/cleanerdetailwidget.h" #include class Toolkits; class MainWindow; class CleanerWidget : public QWidget { Q_OBJECT public: explicit CleanerWidget(QWidget *parent = 0); ~CleanerWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setToolKits(Toolkits* kits) { toolKits = kits;} void initUI(QString skin); void resetSkin(QString skin); public slots: void displayDetailPage(); void displayMainPage(); signals: void transCleanSignal(); void transScanSignal(); void tranActionAnimaitonSignal(); // void tranCleanActionAnimaitonSignal(); void tranScanOverSignal(bool status); void tellCleanerDetailData(const QStringList &data); void tellCleanerDetailStatus(const QString &status); void startScanSystem(QMap itemsMap); void startCleanSystem(QMap itemsMap); private: QStackedWidget *statked_widget; CleanerMainWidget *main_widget; CleanerDetailWidget *detail_widget; MainWindow *p_mainwindow; Toolkits *toolKits; }; #endif // CLEANERWIDGET_H youker-assistant/src/autostart.h0000664000175000017500000000237313260315532016020 0ustar fengfeng#ifndef AUTOSTART_H #define AUTOSTART_H #include #include "../component/kylinlistwidget.h" #include "../component/kylintitlebar.h" #include "../component/autogroup.h" //class KylinTitleBar; //#include //#include "../component/kylinscrollarea.h" #include "../component/testscrollwidget.h" class MainWindow; class SessionDispatcher; class AutoStart :public QDialog { Q_OBJECT public: AutoStart(QWidget *parent = 0, SessionDispatcher *proxy = 0); ~AutoStart(); // void setParentWindow(MainWindow *From) { mainwindow = From;} void setLanguage(); void initConnect(); void initData(); public slots: void onCloseButtonClicked(); void onMinButtonClicked(); void setCurrentItemAutoStatus(QString dekstopName); void readyReciveData(const QStringList &data); void readyShowUI(); private: void initTitleBar(); private: SessionDispatcher *sessionproxy; // MainWindow *mainwindow; KylinTitleBar *title_bar; // QWidget *bottom_widget; // KylinListWidget *list_widget; // QList auto_list; QList data_list; // QScrollArea *scrollArea; // QWidget *panel; // KylinScrollArea *scroll_widget; TestScrollWidget *scroll_widget; }; #endif // AUTOSTART_H youker-assistant/src/actionwidget.cpp0000664000175000017500000000201613260315532017000 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "actionwidget.h" ActionWidget::ActionWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(900, 227); // this->setGeometry(0, 0, 900, 227); this->setAutoFillBackground(true); } ActionWidget::~ActionWidget() { } youker-assistant/src/settingwidget.h0000664000175000017500000002537013260315532016655 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGWIDGET_H #define SETTINGWIDGET_H #include #include #include #include #include #include #include #include #include #include #include "../setting/themewidget.h" #include "../setting/iconwidget.h" #include "../setting/mousewidget.h" #include "../setting/soundwidget.h" //#include "../setting/animationwidget.h" #include "../setting/menuwidget.h" #include "../setting/panelwidget.h" #include "../setting/windowwidget.h" #include "../setting/fontwidget.h" #include "../setting/touchpadwidget.h" //#include "../setting/deadpixelwidget.h" #include "../setting/energywidget.h" #include "../setting/filemanagerwidget.h" #include "../component/quibo.h" //#include "../component/settingaction.h" class MainWindow; class SettingListView; class SettingModel; class SettingWidget : public QWidget { Q_OBJECT public: explicit SettingWidget(/*QStringList cpulist, QString cpu, */QString cur_desktop, /*bool has_battery = false, */QWidget *parent = 0); ~SettingWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initSettingsUI(QStringList cpulist, QString cpu, bool has_battery = false /*QString skin*/); void resetSkin(QString skin); signals: void changeActionPage(const QString &moduleName);//void changeActionPage(SettingAction::SettingModuleID moduleId); void string_value_notify(QString key, QString value); void bool_value_notify(QString key, bool value); void int_value_notify(QString key, int value); void double_value_notify(QString key, double value); //theme void changeSystemTheme(const QString &name); void requestThemeData(); void sendThemeList(const QString ¤tTheme, const QStringList &themeList); //icon void requestIconData(); void resetIconTheme(const QString &name); void sendIconThemeList(const QString ¤tTheme, const QStringList &themeList); void sendDisplayIconValue(bool computer, bool folder, bool network, bool recycle, bool disk); void displayComputerIcon(bool b); void displayFolderIcon(bool b); void displayNetworkIcon(bool b); void displayRecycleBinIcon(bool b); void displayDiskIcon(bool b); //mouse void requestMouseData(); void sendMouseThemeAndCusorSize(const QString ¤tTheme, const QStringList &themeList, int cusorSize); void resetMouseCursorTheme(const QString &name); void resetMouseCursorSize(int cursorSize); //voice void requestSoundData(); void sendSoundList(const QString ¤tSound, const QStringList &soundList); void sendEnableSoundValue(bool login_music, bool sound_event, bool input_sound); void resetVoiceTheme(QString selectTheme); void resetLoginTipVoice(bool b); void resetEventVoice(bool b); void resetInputFeedbackVoice(bool b); //panel void requestMateOrUnityPanelData(bool isMate); void sendMatePanelValue(bool app, bool desktop, bool icon, bool places); void sendUnityBlurAndTransparencyValue(int blur, double transparent); void sendUnityTimeValue(const QString &time_format, const QStringList &timelist, bool showSecond, bool showWeek, bool showDate); void sendUnityPanelPowerValue(const QString &cur_power, const QStringList &powerlist, bool showPower, bool showBatteryTime); void resetPanelTransparencyValue(double value); void resetDateFormat(const QString &selected); void resetShowBatteryIcon(const QString &selected); void resetDashBlurExperimental(int value); void resetDisplaySeconds(bool b); void resetDisplayWeek(bool b); void resetDisplayDate(bool b); void resetDisplayBatteryPercentage(bool b); void resetDisplayBatteryTime(bool b); void resetShowApplications(bool b); void resetShowDesktop(bool b); void resetShowIcon(bool b); void resetShowPlaces(bool b); //launcher menu void requestMateOrUnityMenuData(bool isMate); void sendMatePanelIconValue(int topIconSize, int bottomIconSize, bool topIconHide, bool bottomIconHide); void sendUnityIconValue(int iconSize, bool iconHide, bool desktopIconShowed, double launcherTransparency, int iconColourIndex, const QStringList &colourlist); void sendUnityLauncherPosition(const QString ¤t_position, const QStringList &positionlist); void resetIconSizeValue(int value); void resetTransparencyValue(int value); void resetIconColouring(int value); void resetAutoHide(bool b); void resetDisplayDesktopIcon(bool b); void resetTopIconSizeValue(int value); void resetBottomIconSizeValue(int value); void resetTopAutoHide(bool b); void resetBottomAutoHide(bool b); void resetLauncherPosition(const QString &position); //window void requesetWindowButtonAlign(); void requesetMenusHaveIcons(); void requesetWindowTitileTags(); void sendWindowButtonAlign(const QString ¤t_value); void sendMenusHaveIcons(bool menuHaveIcons); void sendWindowTitileTags(const QString ¤t_wheel_type, const QStringList &wheellist, const QStringList &titlebarOptions, const QString ¤t_double_type, const QString ¤t_middle_type, const QString ¤t_right_type); void resetMenusHaveIcon(bool); void resetTitlebarWheel(const QString &selected); void resetTitlebarDoubleClick(const QString &selected); void resetMouseMiddleClick(const QString &selected); void resetMouseRightClick(const QString &selected); void resetWindowButtonLeftOrRightAlign(bool isLeft); //font void requestFontData(); void sendFontValue(const QString &curFont); void sendDesktopFontValue(const QString &curFont); void sendMonospaceFontValue(const QString &curFont); void sendDocumentFontValue(const QString &curFont); void sendTitlebarFontValue(const QString &curFont); void sendFontSmoothAndAntialiasingValue(double fontZoom, const QString ¤t_smooth, const QStringList &smoothlist, const QString ¤t_antialiasing, const QStringList &antialiasinglist); void setDefaultFontByName(const QString &cur_font); void setDesktopFontByName(const QString &cur_font); void setMonospaceFontByName(const QString &cur_font); void setDocumentFontByName(const QString &cur_font); void setTitlebarFontByName(const QString &cur_font); void resetFontZoomScalingValue(double value); void resetFontHinting(const QString &selected); void resetFontAntialiasing(const QString &selected); void restoreDefaultFont(bool isMate); void restoreDesktopDefaultFont(bool isMate); void restoreMonospaceDefaultFont(bool isMate); void restoreDocumentDefaultFont(bool isMate); void restoreTitlebarDefaultFont(bool isMate); //touchpad void requestMateOrUnityTouchpadData(bool isMate); void sendTouchPadValue(bool touchpadEnable, bool touchscrollingHorizontal, const QString &mode_value, int scroll_int_value, const QString &scroll_string_value); void resetTouchpad(bool b); void resetHorizontalScrolling(bool b); void setScrollbarOverlayOrLegacyMode(bool b); void setMateTouchscrollingMode(int flag); void setUnityTouchscrollingMode(int flag); //ac and battery void requestPowerAndBatteryData(); void sendIdleAndGammaData(double gamma, const QStringList &aclist, int brightnessValue, const QString &sleepTimeoutDisplayBattery, const QString &sleepTimeoutFisplayAC, const QString &idle_delay, const QStringList &idledelaylist); void sendLockAndSleepData(bool lockEnabled, const QString &lock_delay, const QStringList &lockdelaylist, const QString &critical_low, const QString &laptop_battery, const QString &laptop_ac, const QString &sleepTimeoutBattery, const QStringList &batterylist, const QString &sleepTimeoutAc); void resetScreenGammaValue(double value); void resetBrightnessValue(int value); void resetIdleDelay(int index, int curValue); void resetLockEnabled(bool b); void resetLockDelay(int index, int curValue); void setCurrentCriticalLow(const QString &value); void setCurrentLidBattery(const QString &value); void setCurrentLidAC(const QString &value); void resetSleepTimeoutBattery(int index, int value); void resetSleepTimeoutAC(int index, int value); void resetSleepTimeoutDisplayBattery(int index, int value); void resetSleepTimeoutDisplayAC(int index, int value); void setCurrentCpuMode(const QString &mode); //file manager void requestFileManagerData(); void sendFileManagerData(bool locationReplacePathbar, bool autoMountMedia, bool autoOpenFolder, bool promptAutorunPrograms, int thumbnailIconSize, int thumbnailCacheTime, int thumbnailCacheSize); void resetLocationReplacePathbar(bool b); void resetAutoMountMedia(bool b); void resetAutoOpenFolder(bool b); void resetPromptAutorunPrograms(bool b); void resetThumbnailIconSize(int value); void resetThumbnailCacheTime(int value); void resetThumbnailCacheSize(int value); public slots: void displaySettingHomePage(); //void startMonitorCheck(); void onSettingItemClicked(const QModelIndex &index); void onSettingItemEntered(const QModelIndex &index); void on_string_value_notify(QString key, QString value); void on_bool_value_notify(QString key, bool value); void on_int_value_notify(QString key, int value); void on_double_value_notify(QString key, double value); private: SettingListView *m_settingListView; SettingModel *m_settingModel; int itemSpace; MainWindow *p_mainwindow; QString desktop; bool battery; QStringList m_cpuList; QString m_currentCpu; QStackedWidget *stacked_widget; ThemeWidget *theme_widget; IconWidget *icon_widget; MouseWidget *mouse_widget; SoundWidget *sound_widget; // AnimationWidget *animation_widget; MenuWidget *launcher_widget; PanelWidget *panel_widget; WindowWidget *window_widget; FontWidget *font_widget; TouchpadWidget *touchpad_widget; // DeadpixelWidget *deadpixel_widget; EnergyWidget *conserve_widget; FileManagerWidget *nautilus_widget; //QUIBO *qtui; }; #endif // SETTINGWIDGET_H youker-assistant/src/cameramanager-org.h0000664000175000017500000000340413260315532017336 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CAMERAMANAGER_H #define CAMERAMANAGER_H #include #include "../component/kylinlistwidget.h" #include "../component/kylintitlebar.h" class SessionDispatcher; class MainWindow; class CameraManager :public QDialog { Q_OBJECT public: CameraManager(QWidget *parent = 0, SessionDispatcher *proxy = 0, QString skin = ":/background/res/skin/1.png"); ~CameraManager(); void setParentWindow(MainWindow *From) { mainwindow = From;} // void initBackgroundList(); void setLanguage(); void initConnect(); void setOKButtonEnable(bool enable); void resetTitleSkin(QString skin); public slots: void onCloseButtonClicked(); void onOKButtonClicked(); void onViewButtonClicked(); private: void initTitleBar(QString skin); private: MainWindow *mainwindow; SessionDispatcher *sessionproxy; KylinTitleBar *title_bar; QLabel *msg_label; QLabel *tip_label; QLabel *description_label; QPushButton *okBtn; QPushButton *viewBtn; }; #endif // CAMERAMANAGER_H youker-assistant/src/loginwidget.cpp0000664000175000017500000001071613260315532016641 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "loginwidget.h" #include "mainwindow.h" #include #include LoginWidget::LoginWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(300, 72); logo_label = new QPushButton(); logo_label->setObjectName("whiteButton"); logo_label->setCursor(Qt::PointingHandCursor); // logo_label->setCursor(Qt::ArrowCursor); // logo_label->setCursor(Qt::SizeHorCursor); logo_label->setFocusPolicy(Qt::NoFocus); login_button = new QPushButton(); login_button->setObjectName("loginButton"); login_button->setCursor(Qt::PointingHandCursor); login_button->setFocusPolicy(Qt::NoFocus); login_button->setFixedSize(44, 44); // login_button->setIcon(QIcon("://res/logo.png")); login_button->setIconSize(QSize(44, 44)); login_button->setFlat(true); user_label = new QLabel(); user_label->hide(); user_label->setStyleSheet("QLabel{color:#ffffff;font-family: 方正黑体_GBK;font-size: 12px;text-align: right;}"); user_label->adjustSize(); logout_btn = new QPushButton(); logout_btn->setObjectName("whiteButton"); logout_btn->setCursor(Qt::PointingHandCursor); logout_btn->setFocusPolicy(Qt::NoFocus); logout_btn->hide(); QHBoxLayout *layout = new QHBoxLayout(); layout->addStretch(); layout->addWidget(logo_label, 0, Qt::AlignVCenter); layout->addWidget(login_button, 0, Qt::AlignVCenter); layout->addWidget(user_label, 0, Qt::AlignVCenter); layout->addWidget(logout_btn, 0, Qt::AlignVCenter); layout->setSpacing(11); layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); is_move = false; this->initConnect(); this->setLauguage(); } LoginWidget::~LoginWidget() { if(login_button != NULL) { delete login_button; login_button = NULL; } if(logo_label != NULL) { delete logo_label; logo_label = NULL; } if(user_label != NULL) { delete user_label; user_label = NULL; } if(logout_btn != NULL) { delete logout_btn; logout_btn = NULL; } } void LoginWidget::initConnect() { connect(logo_label, SIGNAL(clicked()), this, SLOT(onLoginButtonClicked())); connect(login_button, SIGNAL(clicked()), this, SLOT(onLoginButtonClicked())); connect(logout_btn, SIGNAL(clicked()), this, SLOT(onLogoutButtonClicked())); } void LoginWidget::showLoginInfo(QString name, QString email) { logo_label->hide(); login_button->hide(); user_label->show(); // user_label->setText(name + "<" + email + ">"); QString alltext= QString("%1 <%2>").arg(name).arg(email); QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(alltext, Qt::ElideRight, 260); user_label->setText(elided_text); if(elided_text.endsWith("…")) user_label->setToolTip(alltext); logout_btn->show(); } void LoginWidget::showLoginAndLogoutStatus(bool status) { if(status) {//logout success logo_label->show(); login_button->show(); logout_btn->hide(); user_label->setText(""); user_label->hide(); } else {//login failed qDebug() << "login failed"; } } void LoginWidget::setLauguage() { // logo_label->setText(tr("Login Youker Account")); // logout_btn->setText(tr("Logout")); logo_label->setText(tr("Login Kylin Account")); logout_btn->setText(tr("Logout")); } void LoginWidget::onLoginButtonClicked() { sessionProxy->popup_login_dialog(); } void LoginWidget::onLogoutButtonClicked() { sessionProxy->logout_ubuntukylin_account(); } youker-assistant/src/infoactionwidget.h0000664000175000017500000000231613260315532017324 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 INFOACTIONWIDGET_H #define INFOACTIONWIDGET_H #include #include #include #include class InfoActionWidget : public QWidget { Q_OBJECT public: explicit InfoActionWidget(QWidget *parent = 0); ~InfoActionWidget(); void setLanguage(); private: QLabel *img_label; QLabel *suggest_label; // QLabel *result_label; }; #endif // INFOACTIONWIDGET_H youker-assistant/src/cameramanager-org.cpp0000664000175000017500000001206513260315532017674 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cameramanager.h" #include "mainwindow.h" #include #include #include "../dbusproxy/youkersessiondbus.h" CameraManager::CameraManager(QWidget *parent, SessionDispatcher *proxy, QString skin) :QDialog(parent),sessionproxy(proxy) { this->setStyleSheet("QDialog{border: 1px solid gray;border-radius:2px}"); this->setFixedSize(500, 271); this->setWindowFlags(Qt::FramelessWindowHint); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); title_bar = new KylinTitleBar(); initTitleBar(skin); msg_label = new QLabel(); msg_label->setWordWrap(true);//QLabel自动换行 msg_label->setFixedWidth(480); palette.setColor(QPalette::WindowText,Qt::red); msg_label->setPalette(palette); msg_label->hide(); tip_label = new QLabel(); tip_label->setWordWrap(true);//QLabel自动换行 tip_label->setFixedWidth(480); description_label = new QLabel(); description_label->setWordWrap(true);//QLabel自动换行 description_label->setFixedWidth(480); okBtn = new QPushButton(); viewBtn = new QPushButton(); okBtn->setFixedSize(91, 25); okBtn->setObjectName("blackButton"); okBtn->setFocusPolicy(Qt::NoFocus); viewBtn->setFixedSize(91, 25); viewBtn->setObjectName("blackButton"); viewBtn->setFocusPolicy(Qt::NoFocus); QHBoxLayout *h_layout = new QHBoxLayout(); h_layout->addStretch(); h_layout->addWidget(okBtn); h_layout->addWidget(viewBtn); h_layout->addStretch(); h_layout->setSpacing(50); h_layout->setMargin(0); h_layout->setContentsMargins(0,0,0,0); QVBoxLayout *v_layout = new QVBoxLayout(); v_layout->addWidget(msg_label); v_layout->addWidget(tip_label); v_layout->addWidget(description_label); v_layout->addLayout(h_layout); v_layout->setSpacing(30); v_layout->setMargin(0); v_layout->setContentsMargins(10, 40, 10, 0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(title_bar); main_layout->addLayout(v_layout); main_layout->addStretch(); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->setLanguage(); this->initConnect(); } CameraManager::~CameraManager() { if(title_bar != NULL) { delete title_bar; title_bar = NULL; } if(msg_label != NULL) { delete msg_label; msg_label = NULL; } if(tip_label != NULL) { delete tip_label; tip_label = NULL; } if(description_label != NULL) { delete description_label; description_label = NULL; } if(okBtn != NULL) { delete okBtn; okBtn = NULL; } if(viewBtn != NULL) { delete viewBtn; viewBtn = NULL; } } void CameraManager::setLanguage() { msg_label->setText(tr("NO found camara")); tip_label->setText(tr("An application to take pictures with the device camera.")); description_label->setText(tr("Press the [ESC] button to take picture and turn the camera off , the photo saved in home directory by default.")); okBtn->setText(tr("Open camera")); viewBtn->setText(tr("View Photos")); } void CameraManager::setOKButtonEnable(bool enable) { if(enable) { msg_label->hide(); okBtn->setEnabled(true); } else { msg_label->show(); okBtn->setEnabled(false); } } void CameraManager::onOKButtonClicked() { sessionproxy->call_camera_qt(); } void CameraManager::onViewButtonClicked() { sessionproxy->open_folder_qt(sessionproxy->getHomePath()); } void CameraManager::initConnect() { connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); connect(okBtn,SIGNAL(clicked()), this, SLOT(onOKButtonClicked())); connect(viewBtn,SIGNAL(clicked()), this, SLOT(onViewButtonClicked())); } void CameraManager::onCloseButtonClicked() { this->close(); } void CameraManager::initTitleBar(QString skin) { title_bar->setTitleWidth(500); title_bar->setTitleName(tr("Camera Manager")); // title_bar->setTitleBackgound(":/background/res/skin/1.png"); title_bar->setTitleBackgound(skin); } void CameraManager::resetTitleSkin(QString skin) { title_bar->resetBackground(skin); } youker-assistant/src/aboutdialog.cpp0000664000175000017500000002704213260315532016617 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "QDesktopWidget" #include "aboutdialog.h" #include #include #include #include "../component/utils.h" AboutDialog::AboutDialog(QWidget *parent, /*const QString &version, */QString skin, QString arch, QString os): QDialog(parent) { this->setWindowFlags(Qt::FramelessWindowHint); // this->setWindowFlags(Qt::WindowStaysOnTopHint); this->setFixedSize(442, 326); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowTitle(tr("About us")); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); aboutGroup = NULL; contributorGroup = NULL; baseWidget = new QWidget(this); baseWidget->setGeometry(QRect(0, 0, 442, 82)); // baseWidget->setStyleSheet("QWidget{background:transparent url(://res/menu-big-hover.png);}"); baseWidget->setAutoFillBackground(true); // QPixmap label_pixmap(skin); // logo_label->setPixmap(label_pixmap); // logo_label->setFixedSize(label_pixmap.size()); // QPixmap label_pixmap(skin); // qDebug() << label_pixmap.size(); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(skin))); baseWidget->setPalette(palette); close_btn = new SystemButton(baseWidget); close_btn->setFocusPolicy(Qt::NoFocus); close_btn->loadPixmap(":/sys/res/sysBtn/close_button.png"); iconLabel = new QLabel(baseWidget); //iconLabel->setGeometry(QRect(380, 20, 44, 44)); iconLabel->setGeometry(QRect(360, 36, 44, 44));//20161228 m_appNameLabel = new QLabel(baseWidget); m_appNameLabel->setGeometry(QRect(71, 0, 300, 30)); // linkLabel = new QLabel(); // iconLabel->setStyleSheet("QLabel{background-image:url(':/res/kylin-assistant.png')}"); QImage image(":/res/kylin-assistant.png"); image = image.scaled(QSize(44, 44), Qt::KeepAspectRatio, Qt::SmoothTransformation); iconLabel->setPixmap(QPixmap::fromImage(image)); m_appNameLabel->setStyleSheet("QLabel{color:#ffffff;font-family: 方正黑体_GBK;font-size: 12px;text-align: center;font-weight:bold;}"); m_appNameLabel->setAlignment(Qt::AlignCenter); // if (arch == "aarch64" || os == "Kylin" || os == "YHKylin") {//20161228 // close_btn->move(442-36, 0); // m_appNameLabel->setText(tr("Kylin Assisant") + " " + VERSION); // } // else { // close_btn->move(0, 0); // m_appNameLabel->setText(tr("Youker Assisant") + " " + VERSION); // } close_btn->move(442-36, 0); m_appNameLabel->setText(tr("Kylin Assistant") + " " + qApp->applicationVersion()); // linkLabel->setAlignment(Qt::AlignRight); // linkLabel->setText(QString::fromLocal8Bit(" home page")); aboutBtn = new QPushButton(baseWidget); aboutBtn->setText(tr("About")); aboutBtn->setGeometry(QRect(10, 50, 60, 24)); contributorBtn = new QPushButton(baseWidget); contributorBtn->setText(tr("Contributor")); contributorBtn->setGeometry(QRect(75, 50, 60, 24)); indicator = new QLabel(baseWidget); indicator->setStyleSheet("QLabel{background-image:url('://res/underline.png');background-position:center;}"); indicator->setGeometry(QRect(10, 75, 60, 2)); // aboutIndicator = new QLabel(baseWidget); // aboutIndicator->setGeometry(QRect(10, 75, 60, 2)); // contributorIndicator = new QLabel(baseWidget); // contributorIndicator->setGeometry(QRect(75, 75, 60, 2)); // aboutIndicator->setStyleSheet("QLabel{background-image:url('://res/underline.png');background-position:center;}"); // contributorIndicator->setStyleSheet("QLabel{background-image:url('://res/underline.png');background-position:center;}"); // contributorIndicator->hide(); // aboutEdit = new QTextEdit(this); aboutEdit = new QTextBrowser(this); aboutEdit->setOpenLinks(true); aboutEdit->setOpenExternalLinks(true); contributorEdit = new QTextEdit(this); aboutEdit->setGeometry(QRect(17, 92, 408, 200)); contributorEdit->setGeometry(QRect(17, 92, 408, 200)); aboutEdit->setReadOnly(true); contributorEdit->setReadOnly(true); // if (arch == "aarch64" || os == "Kylin" || os == "YHKylin") { // contributorEdit->setText(tr("Maintainer:\nKylin Team ")); // aboutEdit->append(tr(" Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions.")); // aboutEdit->append(tr(" The software is still under development. Please visit ") + QString::fromLocal8Bit("www.ubuntukylin.com") + tr(" for more information. Welcome everyone to join with us. kylin-assistant Homepage: ")); // } // else { // contributorEdit->setText(tr("Maintainer:\nUbuntu Kylin Team ")); // aboutEdit->append(tr(" Youker Assistant is a powerful system supporting software which is developed by Ubuntu Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, system customization, task manager, and some other functions.")); // aboutEdit->append(tr(" The software is still under development. Please visit ") + QString::fromLocal8Bit("www.ubuntukylin.com") + tr(" for more information. Welcome everyone to join with us. youker-assistant Homepage: ")); // } contributorEdit->setText(tr("Maintainer:\nKylin Team ")); aboutEdit->append(tr(" Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions.")); aboutEdit->append(tr(" The software is still under development. Please visit ") + QString::fromLocal8Bit("www.ubuntukylin.com") + tr(" for more information. Welcome everyone to join with us. kylin-assistant Homepage: ")); aboutEdit->append(QString::fromLocal8Bit("https://github.com/KylinAppCenter/youker-assistant")); aboutEdit->append(QString::fromLocal8Bit("https://launchpad.net/youker-assistant")); contributorEdit->hide(); aboutBtn->setFocusPolicy(Qt::NoFocus); aboutBtn->setObjectName("transparentButton"); contributorBtn->setFocusPolicy(Qt::NoFocus); contributorBtn->setObjectName("transparentButton"); aboutBtn->setStyleSheet("QPushButton{border:none;text-align:center;font-family: 方正黑体_GBK;font-size:14px;color:#ffffff;}");//QPushButton:hover{color:#666666;}//background:transparent; contributorBtn->setStyleSheet("QPushButton{border:none;text-align:center;font-family: 方正黑体_GBK;font-size:14px;color:#ffffff;}");//QPushButton:hover{color:#666666;}//background:transparent; // aboutEdit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); // contributorEdit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); aboutEdit->setStyleSheet("QTextBrowser{border:none;font-family: 方正黑体_GBK;font-size:14px;}"); contributorEdit->setStyleSheet("QTextEdit{border:none;font-family: 方正黑体_GBK;font-size:14px;}"); okBtn = new QPushButton(this); okBtn->setGeometry(QRect(334, 295, 90, 25)); okBtn->setObjectName("blackButton"); okBtn->setFocusPolicy(Qt::NoFocus); okBtn->setText(tr("Close")); this->initAnimation(); this->initConnect(); } AboutDialog::~AboutDialog() { if(aboutGroup != NULL) { delete aboutGroup; aboutGroup = NULL; } if(contributorGroup != NULL) { delete contributorGroup; contributorGroup = NULL; } } void AboutDialog::initAnimation() { QRect mainAcitonRect(10, 75, 60, 2); QRect origAcitonRect(75, 75, 60, 2); QPropertyAnimation *aboutAnimation = new QPropertyAnimation(indicator, "geometry"); aboutAnimation->setDuration(300); aboutAnimation->setStartValue(origAcitonRect); aboutAnimation->setEndValue(mainAcitonRect); aboutGroup = new QParallelAnimationGroup(this); aboutGroup->addAnimation(aboutAnimation); QPropertyAnimation *contributorAnimation = new QPropertyAnimation(indicator, "geometry"); contributorAnimation->setDuration(300); contributorAnimation->setStartValue(mainAcitonRect); contributorAnimation->setEndValue(origAcitonRect); contributorGroup = new QParallelAnimationGroup(this); contributorGroup->addAnimation(contributorAnimation); } void AboutDialog::initConnect() { connect(aboutBtn, SIGNAL(clicked()), this, SLOT(onAboutBtnClicked())); connect(contributorBtn, SIGNAL(clicked()), this, SLOT(onContributorBtnClicked())); connect(close_btn, SIGNAL(clicked()), this, SLOT(onCloseBtnClicked())); connect(okBtn, SIGNAL(clicked()), this, SLOT(onCloseBtnClicked())); // connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseBtnClicked())); // connect(linkLabel,SIGNAL(linkActivated(QString)),this,SLOT(openUrl(QString))); } void AboutDialog::onAboutBtnClicked() { aboutGroup->start(); aboutEdit->show(); // aboutIndicator->show(); contributorEdit->hide(); // contributorIndicator->hide(); } void AboutDialog::onContributorBtnClicked() { contributorGroup->start(); contributorEdit->show(); // contributorIndicator->show(); aboutEdit->hide(); // aboutIndicator->hide(); } void AboutDialog::resetTitleSkin(QString skin) { // title_bar->resetBackground(skin); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(skin))); baseWidget->setPalette(palette); } void AboutDialog::onCloseBtnClicked() { this->close(); } void AboutDialog::openUrl(QString url) { QDesktopServices::openUrl(QUrl(url)); } void AboutDialog::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; m_dragPosition = event->globalPos() - this->frameGeometry().topLeft(); event->accept(); } } void AboutDialog::mouseReleaseEvent(QMouseEvent *) { m_mousePressed = false; } void AboutDialog::mouseMoveEvent(QMouseEvent *event) { if(m_mousePressed) { QPoint move_pos = event->globalPos(); move(move_pos - m_dragPosition); event->accept(); } } youker-assistant/src/settingactionwidget.cpp0000664000175000017500000002372413260315532020407 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "settingactionwidget.h" #include "mainwindow.h" SettingActionWidget::SettingActionWidget(QString cur_desktop, QWidget *parent) : QWidget(parent), desktop(cur_desktop) { this->setFixedSize(900, 150); this->setAutoFillBackground(true); this->setObjectName("transparentWidget"); img_label = new QLabel(); title_label = new QLabel(); // description_label = new QLabel(); main_action = new QWidget(); img_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 QPixmap label_pixmap("://res/systemset.png"); img_label->setPixmap(label_pixmap); img_label->setFixedSize(label_pixmap.size()); title_label->setObjectName("whiteLabel"); // description_label->setWordWrap(true);//QLabel自动换行 // description_label->setObjectName("tipLabel"); // QVBoxLayout *layout1 = new QVBoxLayout(); // layout1->addStretch(); // layout1->addWidget(title_label); // layout1->addWidget(description_label); // layout1->addStretch(); // layout1->setSpacing(15); // layout1->setMargin(0); // layout1->setContentsMargins(0, 0, 0, 0); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addWidget(img_label, 0, Qt::AlignVCenter); layout2->addWidget(title_label, 0, Qt::AlignVCenter); // layout2->addLayout(layout1); layout2->setSpacing(20); layout2->setMargin(0); layout2->setContentsMargins(20, 20, 0, 0); main_action->setLayout(layout2); stacked_widget = new QStackedWidget(this);//stacked_widget will delete when SettingWidget delete // main_action = new SettingAction(desktop); // main_action->setModuleName("MainPage"); theme_action = new SettingAction(desktop); theme_action->setModuleName("ThemePage"); // theme_action->setModuleNameID(SettingAction::ThemePage); // enum SettingModuleID{ // ThemePage = 0, // IconPage, // MousePage, // SoundPage, // PanelPage, // MenuPage, // WindowPage, // FontPage, // TouchPadPage, // EnergyPage, // FMPage // }; // theme_action->setLanguage(1); icon_action = new SettingAction(desktop); icon_action->setModuleName("IconPage"); // icon_action->setLanguage(2); mouse_action = new SettingAction(desktop); mouse_action->setModuleName("MousePage"); // mouse_action->setLanguage(3); voice_action = new SettingAction(desktop); voice_action->setModuleName("SoundPage"); // voice_action->setLanguage(4); // animation_action = new SettingAction(desktop); // animation_action->setLanguage(5); launcher_action = new SettingAction(desktop); launcher_action->setModuleName("MenuPage"); // launcher_action->setLanguage(5); panel_action = new SettingAction(desktop); panel_action->setModuleName("PanelPage"); // panel_action->setLanguage(6); window_action = new SettingAction(desktop); window_action->setModuleName("WindowPage"); // window_action->setLanguage(7); font_action = new SettingAction(desktop); font_action->setModuleName("FontPage"); // font_action->setLanguage(8); touchpad_action = new SettingAction(desktop); touchpad_action->setModuleName("TouchPadPage"); // touchpad_action->setLanguage(9); // deadpixel_action = new SettingAction(desktop); // deadpixel_action->setModuleName("MonitorPage"); // deadpixel_action->setLanguage(10); conserve_aciton = new SettingAction(desktop); conserve_aciton->setModuleName("EnergyPage"); // conserve_aciton->setLanguage(11); nautilus_action = new SettingAction(desktop); nautilus_action->setModuleName("FMPage"); // nautilus_action->setLanguage(12); stacked_widget->addWidget(main_action); stacked_widget->addWidget(theme_action); stacked_widget->addWidget(icon_action); stacked_widget->addWidget(mouse_action); stacked_widget->addWidget(voice_action); // stacked_widget->addWidget(animation_action); stacked_widget->addWidget(launcher_action); stacked_widget->addWidget(panel_action); stacked_widget->addWidget(window_action); stacked_widget->addWidget(font_action); stacked_widget->addWidget(touchpad_action); // stacked_widget->addWidget(deadpixel_action); stacked_widget->addWidget(conserve_aciton); stacked_widget->addWidget(nautilus_action); QHBoxLayout *main_layout = new QHBoxLayout(); main_layout->addWidget(stacked_widget); main_layout->setSpacing(0); main_layout->setContentsMargins(0, 0, 0, 0); this->setLayout(main_layout); this->initConnect(); this->setLanguage(); } SettingActionWidget::~SettingActionWidget() { if(img_label != NULL) { delete img_label; img_label = NULL; } if(title_label != NULL) { delete title_label; title_label = NULL; } if(main_action != NULL) { delete main_action; main_action = NULL; } if(theme_action != NULL) { delete theme_action; theme_action = NULL; } if(icon_action != NULL) { delete icon_action; icon_action = NULL; } if(mouse_action != NULL) { delete mouse_action; mouse_action = NULL; } if(voice_action != NULL) { delete voice_action; voice_action = NULL; } if(launcher_action != NULL) { delete launcher_action; launcher_action = NULL; } if(panel_action != NULL) { delete panel_action; panel_action = NULL; } if(window_action != NULL) { delete window_action; window_action = NULL; } if(font_action != NULL) { delete font_action; font_action = NULL; } if(touchpad_action != NULL) { delete touchpad_action; touchpad_action = NULL; } // if(deadpixel_action != NULL) // { // delete deadpixel_action; // deadpixel_action = NULL; // } if(conserve_aciton != NULL) { delete conserve_aciton; conserve_aciton = NULL; } if(nautilus_action != NULL) { delete nautilus_action; nautilus_action = NULL; } } void SettingActionWidget::initConnect() { connect(theme_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(icon_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(mouse_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(voice_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); // connect(animation_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(launcher_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(panel_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(window_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(font_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(touchpad_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); // connect(deadpixel_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(conserve_aciton, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); connect(nautilus_action, SIGNAL(showSettingMainWidget()), this, SLOT(displayActionMainPage())); } void SettingActionWidget::setLanguage() { title_label->setText(tr("You can perform a full range of customized systems based on personal preferences"));//您可以根据个人喜好对系统进行全方位的定制 // description_label->setText(tr("您可以根据个人喜好对系统进行全方位的定制")); } //void SettingActionWidget::displayActionSubPage(SettingAction::SettingModuleID moduleId) void SettingActionWidget::displayActionSubPage(QString moduleName) { for (int i = 0; i < stacked_widget->count(); i++) { if (QWidget *widget = static_cast(stacked_widget->widget(i))) { if (widget->inherits("SettingAction")) { if (SettingAction *action = static_cast(stacked_widget->widget(i))) { QPointer panel(action); if (panel.isNull()) { continue; } if (action->getModuleName() == moduleName) { stacked_widget->setCurrentWidget(action); break; } // if (action->getModuleNameID() == moduleId) { // stacked_widget->setCurrentWidget(action); // } } } } } } void SettingActionWidget::displayActionMainPage() { stacked_widget->setCurrentWidget(main_action); emit this->notifyContentPageToMain(); // QObject *object = QObject::sender(); // QAction *action = qobject_cast(object); // QString object_name = action->objectName(); } youker-assistant/src/cameramanager.h0000664000175000017500000000522513260315532016554 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CAMERAMANAGER_H #define CAMERAMANAGER_H //sudo apt-get install libcv-dev libopencv-highgui-dev libopencv-dev libhighgui-dev #include #include "../component/kylintitlebar.h" #include #include // 设置采集数据的间隔时间 #include //包含opencv库头文件 #include //#include //1710opencv库 //#include //#include #include #include #include #include #include class SessionDispatcher; class MainWindow; class ToolButton; class CameraManager :public QDialog { Q_OBJECT public: CameraManager(QWidget *parent = 0, SessionDispatcher *proxy = 0, QString skin = ":/background/res/skin/1.png"); // ~CameraManager(); void setParentWindow(MainWindow *From) { mainwindow = From;} void initConnect(); void setOKButtonEnable(bool enable); void resetTitleSkin(QString skin); void initCamera(); IplImage* DoPyrDown(IplImage* image, int filter); QString getCurrentDateTime(); QString getHomePath(); int countCamaras(); public slots: void readFarme();//读取当前帧信息 void onCloseButtonClicked(); void onOKButtonClicked(); void onViewButtonClicked(); void refreshCamera(); //protected: // void keyPressEvent( QKeyEvent *k ); private: void initTitleBar(QString skin); private: MainWindow *mainwindow; SessionDispatcher *sessionproxy; QTimer *timer; QImage *imag; CvCapture *cam;// 视频获取结构, 用来作为视频获取函数的一个参数 IplImage *frame;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像 KylinTitleBar *title_bar; QLabel *camera_label; QWidget *baseWidget; QLabel *catch_label; QLabel *disable_icon; QPushButton *okBtn; ToolButton *viewBtn; QLabel *error_icon; QLabel *error_label; }; #endif // CAMERAMANAGER_H youker-assistant/src/signalmanager.h0000664000175000017500000000054513260315532016601 0ustar fengfeng#ifndef SIGNALMANAGER_H #define SIGNALMANAGER_H #include class SignalManager : public QObject { Q_OBJECT public: static SignalManager *Instance(); signals: void showTip(const QString &msg); private: explicit SignalManager(QObject *parent = 0); private: static SignalManager *m_signalManager; }; #endif // SIGNALMANAGER_H youker-assistant/src/aboutdialog.ui0000664000175000017500000001605613260315532016455 0ustar fengfeng AboutDialog 0 0 400 320 400 320 400 320 About 2 0 396 271 1 About 10 1 64 64 :/res/youker-assistant.png 77 17 241 20 Youker Assistant Qt::AlignCenter 292 42 101 17 Qt::AlignCenter 18 76 361 151 true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:11pt;"> Youker Assistant is a powerful system supporting software which is developed by Ubuntu Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information , system customization, task manager, monitoring ball, and some other functions. </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:11pt;"> The software is still under development. Please visit www.ubuntukylin.com for more information. Welcome everyone to join with us. youker-assistant Homepage: https://launchpad.net/youker-assistant.</span></p></body></html> Contributor 18 76 361 151 true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell'; font-size:11pt;">Maintainer</span><span style=" font-family:'Droid Sans Fallback'; font-size:11pt;">:</span></p> <p style=" margin-top:11px; margin-bottom:11px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell'; font-size:11pt;">Ubuntu Kylin Team &lt;ubuntukylin-members@list.launchpad.net&gt;</span></p></body></html> 10 1 64 64 :/res/youker-assistant.png 77 17 241 20 Youker Assistant Qt::AlignCenter 292 42 101 17 <a href=https://launchpad.net/youker-assistant>home page</a> Qt::AlignCenter 291 281 81 30 Close youker-assistant/src/actionwidget.h0000664000175000017500000000177513260315532016460 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 ACTIONWIDGET_H #define ACTIONWIDGET_H #include class ActionWidget : public QWidget { Q_OBJECT public: explicit ActionWidget(QWidget *parent = 0); ~ActionWidget(); }; #endif // ACTIONWIDGET_H youker-assistant/src/autostartwidget.cpp0000664000175000017500000002034113260315532017552 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "autostartwidget.h" #include "ui_autostartwidget.h" #include #include #include #include "../dbusproxy/youkersessiondbus.h" #include "../component/utils.h" //AutoStartWidget::AutoStartWidget(QWidget *parent, SessionDispatcher *proxy) : // QWidget(parent),sessionproxy(proxy), AutoStartWidget::AutoStartWidget(QDialog *parent, SessionDispatcher *proxy, QString skin) : QDialog(parent),sessionproxy(proxy), ui(new Ui::AutoStartWidget) { ui->setupUi(this); this->setFixedSize(560, 398); setWindowFlags(Qt::FramelessWindowHint); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); this->setWindowTitle(tr("Boot Manager")); tip_label = new QLabel(); num_label = new QLabel(); on_label = new QLabel(); on_num_label = new QLabel(); off_label = new QLabel(); off_num_label = new QLabel(); name_label = new QLabel(); status_label = new QLabel(); ui->widget_1->setAutoFillBackground(true); ui->widget_2->setAutoFillBackground(true); QPalette palette; palette.setColor(QPalette::Background, QColor(233,238,241));//#e9eef1 ui->widget_1->setPalette(palette); palette.setColor(QPalette::Background, QColor(255,255,255));//#ffffff ui->widget_2->setPalette(palette); tip_label->setText(tr("AutoStart Items:")); name_label->setText(tr("App")); status_label->setText(tr("Status")); on_label->setText(tr("ON Items:")); off_label->setText(tr("OFF Items:")); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->addWidget(tip_label); layout1->addWidget(num_label); layout1->setSpacing(0); layout1->setMargin(0); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addWidget(on_label); layout2->addWidget(on_num_label); layout2->setSpacing(0); layout2->setMargin(0); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->addWidget(off_label); layout3->addWidget(off_num_label); layout3->setSpacing(0); layout3->setMargin(0); QHBoxLayout *tip_layout = new QHBoxLayout(); tip_layout->addLayout(layout1); tip_layout->addStretch(); tip_layout->addLayout(layout2); tip_layout->addStretch(); tip_layout->addLayout(layout3); tip_layout->setSpacing(0); tip_layout->setMargin(0); tip_layout->setContentsMargins(10, 0, 10, 1); ui->widget_1->setLayout(tip_layout); // QHBoxLayout *tip_layout = new QHBoxLayout(); // tip_layout->addWidget(tip_label); // tip_layout->addWidget(num_label); // tip_layout->addStretch(); // tip_layout->setSpacing(0); // tip_layout->setMargin(0); // tip_layout->setContentsMargins(20, 0, 0, 0); // ui->widget_1->setLayout(tip_layout); QHBoxLayout *status_layout = new QHBoxLayout(); status_layout->addWidget(name_label); status_layout->addStretch(); status_layout->addWidget(status_label); status_layout->setSpacing(0); status_layout->setMargin(0); status_layout->setContentsMargins(10, 0, 10, 0); ui->widget_2->setLayout(status_layout); title_bar = new KylinTitleBar(this); title_bar->move(0,0); title_bar->show(); initTitleBar(skin); ui->scrollArea->setStyleSheet("QScrollArea{border: none}"); ui->scrollArea->setFixedSize(556,300); ui->scrollArea->setAutoFillBackground(true); ui->scrollArea->setBackgroundRole(QPalette::Light); this->initConnect(); } AutoStartWidget::~AutoStartWidget() { // KylinTitleBar *title_bar; if(tip_label != NULL) { delete tip_label; tip_label = NULL; } if(num_label != NULL) { delete num_label; num_label = NULL; } if(on_label != NULL) { delete on_label; on_label = NULL; } if(on_num_label != NULL) { delete on_num_label; on_num_label = NULL; } if(off_label != NULL) { delete off_label; off_label = NULL; } if(off_num_label != NULL) { delete off_num_label; off_num_label = NULL; } if(name_label != NULL) { delete name_label; name_label = NULL; } if(status_label != NULL) { delete status_label; status_label = NULL; } for(int i=0; igetAutoStartAppStatus(); } void AutoStartWidget::readyReciveData(const QStringList &data) { data_list.append(data); } void AutoStartWidget::readyShowUI() { int rowIndex = 0; QVBoxLayout *v_layout = new QVBoxLayout(); // QGridLayout *v_layout = new QGridLayout(); QSignalMapper *signal_mapper = new QSignalMapper(this); onNum = offNum = 0; num_label->setText(QString::number(data_list.length())); for(int i =0; i tmpMap; QStringList tmp_list = data_list.at(i); for(int j=0;jsetFixedHeight(50); auto_group->initData(tmpMap); if(tmpMap.value("Status") == "true") onNum += 1; else if(tmpMap.value("Status") == "false") offNum += 1; connect(auto_group, SIGNAL(autoStatusChange()), signal_mapper, SLOT(map())); signal_mapper->setMapping(auto_group, tmpMap.value("Path")); v_layout->addWidget(auto_group, 0, Qt::AlignBottom); // v_layout->addWidget(auto_group, rowIndex, 0); rowIndex += 1; switcher_list.append(auto_group); } v_layout->addStretch(); connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(setCurrentItemAutoStatus(QString))); on_num_label->setText(QString::number(onNum)); off_num_label->setText(QString::number(offNum)); // QVBoxLayout *layout = new QVBoxLayout(); // layout->addLayout(v_layout); // layout->setSpacing(0); // layout->setMargin(0); // layout->setContentsMargins(10, 0, 10, 10); ui->scrollAreaWidgetContents->setLayout(v_layout); } void AutoStartWidget::scanAllSwitcher() { int count = switcher_list.count(); onNum = offNum = 0; for(int i=0; igetSwitcherStatus()) { onNum +=1; } else { offNum += 1; } } on_num_label->setText(QString::number(onNum)); off_num_label->setText(QString::number(offNum)); } void AutoStartWidget::setCurrentItemAutoStatus(QString dekstopName) { int start_pos = dekstopName.lastIndexOf("/") + 1; int end_pos = dekstopName.length(); QString name = dekstopName.mid(start_pos, end_pos-start_pos); sessionproxy->changeAutoStartAppStatus(name); this->scanAllSwitcher(); } void AutoStartWidget::initConnect() { connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); } void AutoStartWidget::initTitleBar(QString skin) { title_bar->setTitleWidth(560); title_bar->setTitleName(tr("Boot Manager")); // title_bar->setTitleBackgound(":/background/res/skin/1.png"); title_bar->setTitleBackgound(skin); } void AutoStartWidget::resetTitleSkin(QString skin) { title_bar->resetBackground(skin); } void AutoStartWidget::onCloseButtonClicked() { this->close(); } youker-assistant/src/topbasewidget.cpp0000664000175000017500000002530613260315532017167 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "topbasewidget.h" #include "mainwindow.h" #include #include #include #include #include #include #include // enum SettingModuleID{ // ThemePage = 0, // IconPage, // MousePage, // SoundPage, // PanelPage, // MenuPage, // WindowPage, // FontPage, // TouchPadPage, // EnergyPage, // FMPage // }; namespace { //const QMap titleMap() //{ // QMap m; // m.insert(SettingAction::ThemePage, "a"); // m.insert(SettingAction::IconPage, "b"); // m.insert(SettingAction::MousePage, "c"); // m.insert(SettingAction::SoundPage, "d"); // return m; //} //int filterTitleAccordModuleName(SettingAction::SettingModuleID id) //{ // return titleMap().value(id); //} const QMap titleMap() { QMap tMap; tMap.insert("ThemePage", QObject::tr("Choose the theme what you want")); tMap.insert("IconPage", QObject::tr("Set the desktop icon theme and the visibility of desktop icons")); tMap.insert("MousePage", QObject::tr("Replace the theme and size of the mouse pointer, and theme change need to restart system")); tMap.insert("SoundPage", QObject::tr("Set the sound theme you want")); tMap.insert("PanelPage", QObject::tr("Setting the panel mode of auto hide and icon size")); tMap.insert("MenuPage", QObject::tr("Manage display of the start menu")); tMap.insert("WindowPage", QObject::tr("Window Manager settings")); tMap.insert("FontPage", QObject::tr("According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings")); tMap.insert("TouchPadPage", QObject::tr("Setting the relevant properties of your touchpad,make the operation more convenient")); tMap.insert("EnergyPage", QObject::tr("Save energy to let the computer longer standby time")); tMap.insert("FMPage", QObject::tr("Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked")); return tMap; } QString filterTitleAccordModuleName(QString moduleName) { return titleMap().value(moduleName); } } TopBaseWidget::TopBaseWidget(QWidget *parent) : QWidget(parent) { m_titileMessage = ""; this->setFixedSize(900, 150); this->setAutoFillBackground(true); // this->setObjectName("transparentWidget"); this->initWidgets(); } TopBaseWidget::~TopBaseWidget() { if(img_label != NULL) { delete img_label; img_label = NULL; } if(suggest_label != NULL) { delete suggest_label; suggest_label = NULL; } delete back_button; //Segmentation fault QLayoutItem *child; while ((child = m_titleLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_titleRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_toolLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_toolRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_topLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_bottomLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_layout; } void TopBaseWidget::setTipMessage(const QString &message) { this->m_titileMessage = message; suggest_label->setText(message); } void TopBaseWidget::setImage(const QString &pic) { QPixmap label_pixmap(pic); img_label->setPixmap(label_pixmap); img_label->setFixedSize(label_pixmap.size()); } //QString TopBaseWidget::getModuleName() /*const*/ //{ // return this->m_moduleName; //} //void SettingAction::setModuleName(const QString &name) //void TopBaseWidget::setModuleName(QString name) //{ //// this->m_moduleName = name; //// back_button->setVisible(true); //// const QString title = filterTitleAccordModuleName(name); //// if (title.isEmpty() || title.isNull()) { //// suggest_label->setText(tr("There may be a mistake.")); //// } //// else { //// suggest_label->setText(title); //// } //} //void TopBaseWidget::displayActionSubPage(SettingAction::SettingModuleID moduleId) void TopBaseWidget::displayActionSubPage(QString moduleName) { // this->m_moduleName = moduleName; back_button->setVisible(true); const QString title = filterTitleAccordModuleName(moduleName); if (title.isEmpty() || title.isNull()) { suggest_label->setText(tr("There may be a mistake.")); } else { suggest_label->setText(title); } } void TopBaseWidget::initTitlebarLeftContent() { QWidget *w = new QWidget; m_titleLeftLayout = new QHBoxLayout(w); m_titleLeftLayout->setContentsMargins(6, 0, 0, 0); m_titleLeftLayout->setSpacing(0); QLabel *appLabel = new QLabel; appLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;}"); appLabel->setText(tr("Kylin Assistant")); m_titleLeftLayout->addWidget(appLabel); m_topLayout->addWidget(w, 1, Qt::AlignLeft); } void TopBaseWidget::initTitlebarRightContent() { QWidget *w = new QWidget; m_titleRightLayout = new QHBoxLayout(w); m_titleRightLayout->setContentsMargins(0, 0, 1, 0); m_titleRightLayout->setSpacing(0); m_topLayout->addWidget(w, 1, Qt::AlignRight); SystemButton *min_button = new SystemButton(); SystemButton *close_button = new SystemButton(); // SystemButton *skin_button = new SystemButton(); SystemButton *main_menu_button = new SystemButton(); min_button->loadPixmap(":/sys/res/sysBtn/min_button.png"); close_button->loadPixmap(":/sys/res/sysBtn/close_button.png"); // skin_button->loadPixmap(":/sys/res/sysBtn/skin_button.png"); main_menu_button->loadPixmap(":/sys/res/sysBtn/main_menu.png"); min_button->setFocusPolicy(Qt::NoFocus); close_button->setFocusPolicy(Qt::NoFocus); // skin_button->setFocusPolicy(Qt::NoFocus); main_menu_button->setFocusPolicy(Qt::NoFocus); m_titleRightLayout->addWidget(main_menu_button); // m_titleRightLayout->addWidget(skin_button); m_titleRightLayout->addWidget(min_button); m_titleRightLayout->addWidget(close_button); connect(main_menu_button, &SystemButton::clicked, this, [=] { emit this->showMenu(); }); // connect(skin_button, &SystemButton::clicked, this, [=] { // emit this->showSkinCenter(); // }); connect(min_button, &SystemButton::clicked, this, [=] { emit this->showMin(); }); connect(close_button, &SystemButton::clicked, this, [=] { emit this->closeApp();//window()->close(); }); } void TopBaseWidget::initContentLeftContent() { QWidget *w = new QWidget; w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_toolLeftLayout = new QHBoxLayout(w); m_toolLeftLayout->setContentsMargins(0, 0, 0, 0); img_label = new QLabel(); suggest_label = new QLabel(); img_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 suggest_label->setObjectName("whiteLabel"); suggest_label->setWordWrap(true);//QLabel自动换行 suggest_label->setFixedWidth(650); m_toolLeftLayout->setSpacing(10); m_toolLeftLayout->addStretch(); m_toolLeftLayout->addWidget(img_label, 0, Qt::AlignHCenter); m_toolLeftLayout->addWidget(suggest_label, 0, Qt::AlignHCenter); m_toolLeftLayout->addStretch(); // m_bottomLayout->addWidget(w); m_bottomLayout->addWidget(w, 1, Qt::AlignLeft); } void TopBaseWidget::initActionRightContent() { QWidget *w = new QWidget; m_toolRightLayout = new QHBoxLayout(w); m_toolRightLayout->setContentsMargins(0, 3, 0, 10); m_toolRightLayout->setSpacing(0); back_button = new QPushButton(); back_button->setCursor(Qt::PointingHandCursor); back_button->setFixedSize(91,39); back_button->setFocusPolicy(Qt::NoFocus); QPixmap pixmap("://res/back-arrow.png"); back_button->setIcon(pixmap); back_button->setIconSize(pixmap.size()); back_button->setObjectName("backgroundButton"); back_button->setText(tr("Back")); back_button->setVisible(false); connect(back_button, &QPushButton::clicked, this, [=] { suggest_label->setText(this->m_titileMessage); back_button->setVisible(false); emit this->notifyContentPageToMain(); }); m_toolRightLayout->addWidget(back_button); m_bottomLayout->addWidget(w, 1, Qt::AlignRight); } void TopBaseWidget::initWidgets() { m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); QWidget *topWidget = new QWidget; m_topLayout = new QHBoxLayout(topWidget); m_topLayout->setContentsMargins(0, 0, 0, 0); m_topLayout->setSpacing(0); m_layout->addWidget(topWidget, 0, Qt::AlignTop); QWidget *bottomWidget = new QWidget; m_bottomLayout = new QHBoxLayout(bottomWidget); m_bottomLayout->setContentsMargins(19, 0, 0, 26); m_bottomLayout->setSpacing(0); m_layout->addWidget(bottomWidget, 0, Qt::AlignBottom); this->setLayout(m_layout); initTitlebarLeftContent(); initTitlebarRightContent(); initContentLeftContent(); initActionRightContent(); } youker-assistant/src/cleaneractionwidget.cpp0000664000175000017500000003023413260315532020335 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleaneractionwidget.h" #include #include "../dbusproxy/youkersessiondbus.h" #include "../dbusproxy/youkersystemdbus.h" CleanerActionWidget::CleanerActionWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(900, 150); this->setAutoFillBackground(true); // this->setObjectName("transparentWidget"); // cache_page = new CacheActionWidget(this); // statked_widget = new QStackedWidget(this); //// QPalette palette; //// palette.setBrush(QPalette::Window, QBrush(Qt::white)); //// statked_widget->setPalette(palette); //// statked_widget->setAutoFillBackground(true); // statked_widget->addWidget(cache_page); // QVBoxLayout *layout1 = new QVBoxLayout(); // layout1->addWidget(statked_widget); // layout1->setMargin(0); // layout1->setContentsMargins(0, 0, 0, 0); // setLayout(layout1); suggest_label = new QLabel(); // result_label = new QLabel(); doing_label = new QLabel(); scan_button = new QPushButton(this); clean_button = new QPushButton(this); back_button = new QPushButton(this); back_button->setObjectName("backButton"); back_button->hide(); loading_label = new LoadingLabel(this, "clean"); loading_label->show(); suggest_label->setObjectName("whiteLabel"); suggest_label->setWordWrap(true);//QLabel自动换行 suggest_label->setFixedWidth(550); // result_label->setWordWrap(true);//QLabel自动换行 // result_label->setObjectName("tipLabel"); doing_label->setFixedWidth(550); doing_label->setWordWrap(true);//QLabel自动换行 doing_label->setObjectName("whiteLabel"); doing_label->hide(); // scan_button->setFixedSize(182, 58); scan_button->setGeometry(QRect(680, 50, 182, 58)); scan_button->setFocusPolicy(Qt::NoFocus); scan_button->setObjectName("greenButton"); scan_button->show(); // clean_button->setFixedSize(182, 58); clean_button->setGeometry(QRect(680, 50, 182, 58)); clean_button->setFocusPolicy(Qt::NoFocus); clean_button->setObjectName("greenButton"); clean_button->hide(); back_button->setFocusPolicy(Qt::NoFocus); // back_button->setFixedSize(50, 30); back_button->setGeometry(QRect(820, 110, 50, 30)); back_button->setObjectName("underlineButton"); back_button->hide(); //set underline // QFont font = back_button->font(); // font.setUnderline(true); // back_button->setFont(font); //set scan button text color // QPalette palette; // palette.setColor(QPalette::ButtonText, QColor(255,17,135)); // scan_button->setPalette(palette); QVBoxLayout *layout1 = new QVBoxLayout(); layout1->addStretch(); layout1->addWidget(suggest_label, 0 , Qt::AlignVCenter); // layout1->addWidget(result_label); layout1->addWidget(doing_label, 0 , Qt::AlignVCenter); layout1->addStretch(); layout1->setSpacing(0); layout1->setContentsMargins(0, 0, 0, 0); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addWidget(loading_label, 0, Qt::AlignVCenter); layout2->addLayout(layout1); layout2->setSpacing(20); layout2->setMargin(0); layout2->setContentsMargins(0, 0, 0, 0); // QVBoxLayout *layout3 = new QVBoxLayout(); // layout3->addStretch(); // layout3->addWidget(scan_button, 0, Qt::AlignRight); // layout3->addWidget(clean_button, 0, Qt::AlignRight); // layout3->addWidget(back_button, 0, Qt::AlignRight); // layout3->addStretch(); // layout3->setSpacing(10); // layout3->setContentsMargins(0, 20, 0, 0); QHBoxLayout *main_layout = new QHBoxLayout(); main_layout->addLayout(layout2); main_layout->addStretch(); // main_layout->addLayout(layout3); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(13, 20, 44, 0); setLayout(main_layout); this->initConnect(); this->setLanguage(); } CleanerActionWidget::~CleanerActionWidget() { if(suggest_label != NULL) { delete suggest_label; suggest_label = NULL; } if(doing_label != NULL) { delete doing_label; doing_label = NULL; } } void CleanerActionWidget::initConnect() { connect(scan_button, SIGNAL(clicked()), this, SLOT(onStartButtonClicked())); connect(clean_button, SIGNAL(clicked()), this, SLOT(onCleanButtonClicked())); connect(back_button, SIGNAL(clicked()), this, SLOT(onBackButtonClicked())); } void CleanerActionWidget::setLanguage() { suggest_label->setText(tr("Regular cleaning, let your computer remains the relaxed state"));//经常清理,让电脑保持最轻松的状态 // result_label->setText(tr("上次检测时间为2014-07-07 16:40:35 星期一,清理了4.84KB垃圾。")); scan_button->setText(tr("Start Scan"));//开始扫描 clean_button->setText(tr("Start Cleanup"));//开始清理 back_button->setText(tr("Back")); doing_label->setText(tr("Scanning......"));//正在扫描...... } void CleanerActionWidget::showCleanOverStatus() { loading_label->stopLoading(); scan_button->show(); scan_button->setEnabled(true); clean_button->hide(); clean_button->setEnabled(true); back_button->hide(); doing_label->setText(tr("Clean OK")); } void CleanerActionWidget::showCleanerData(const QStringList &data) { if(data.length() == 2) { doing_label->setText(tr("Cleaning: ") + data.at(0).split(":").at(1)); } else if(data.length() == 3) { doing_label->setText(data.at(0).split(":").at(1) + tr(", Percent is: ") + data.at(1).split(":").at(1) + tr("%, Status is: ") + data.at(2).split(":").at(1)); } } void CleanerActionWidget::showCleanerStatus(const QString &status, const QString &domain) { if(status == "Complete:History.firefox" && domain == "history") { doing_label->setText(tr("Clean Firefox history......")); } else if(status == "Complete:History.chromium" && domain == "history") { doing_label->setText(tr("Clean Chromium history......")); } else if(status == "Complete:History.system" && domain == "history") { doing_label->setText(tr("Clean system history......")); } else if(status == "Complete:" && domain == "apt") { doing_label->setText(tr("Clean apt......")); } else if(status == "Start:" && domain == "apt") { doing_label->setText(tr("Start clean apt......")); } else if(status == "Complete:Cookies.firefox") { doing_label->setText(tr("Clean Firefox Cookie:") + domain); } else if(status == "Complete:Cookies.chromium") { doing_label->setText(tr("Clean Chromium Cookie:") + domain); } } void CleanerActionWidget::showCleanerError(const QString &status) { if(status.contains("Non-existent:")) { if(status.split(":").at(1).length() > 0) doing_label->setText(status.split(":").at(1) + tr(" does not exist")); } else if(status.contains("Working:Chromium")) { doing_label->setText(tr("Chromium Browser is running......")); } } void CleanerActionWidget::showCleanReciveStatus(const QString &status) { if(status == "Complete:Cache") { doing_label->setText(tr("Cache Scan OK")); } else if(status == "Complete:Cookies") { doing_label->setText(tr("Cookies Scan OK")); } else if(status == "Complete:") { doing_label->setText(tr("History Scan OK")); } else if(status == "Complete:Packages") { doing_label->setText(tr("Packages Scan OK")); } else if(status == "Complete:All") { // doing_label->setText(tr("Scanning......")); // doing_label->hide(); // loading_label->stopLoading(); // scan_button->hide(); // scan_button->setEnabled(true); // clean_button->show(); // clean_button->setEnabled(true); // suggest_label->show(); // back_button->show(); } } void CleanerActionWidget::accordScanOverStatusToChange(bool status) { if (status) { doing_label->setText(tr("Scanning......")); doing_label->hide(); loading_label->stopLoading(); scan_button->hide(); scan_button->setEnabled(true); clean_button->show(); clean_button->setEnabled(true); suggest_label->show(); back_button->show(); } else { doing_label->setText(tr("Scanning......")); doing_label->hide(); loading_label->stopLoading(); scan_button->hide(); scan_button->setEnabled(true); clean_button->hide(); clean_button->setEnabled(true); suggest_label->show(); back_button->show(); } } void CleanerActionWidget::showCleanReciveError(const QString &status) { doing_label->setText(tr("Error: ") + status); if(status == "Uninstalled:Firefox") { doing_label->setText(tr("Firefox Browser does not be installed")); } else if(status == "Uninstalled:Chromium") { doing_label->setText(tr("Chromium Browser does not be installed")); } else if(status == "Working:Chromium") { doing_label->setText(tr("Chromium Browser is running")); } else { if(status.contains("Non-existent:")) doing_label->setText(status.split(":").at(1) + tr(" does not exist")); } } void CleanerActionWidget::displayAnimation() { scan_button->setEnabled(false); loading_label->startLoading(); suggest_label->hide(); doing_label->show(); emit this->showDetailData(); } //void CleanerActionWidget::displayCleanAnimation() //{ // clean_button->show(); // clean_button->setEnabled(false); // loading_label->startLoading(); // suggest_label->hide(); // doing_label->setText(tr("Ready to Cleanup......"));//准备清理...... // doing_label->show(); //} void CleanerActionWidget::receivePolicyKitSignal(bool status) { /*display Clean Animation status = true:ok status = false:cacel */ if(status)//ok { clean_button->show(); clean_button->setEnabled(false); back_button->hide();//0713 scan_button->hide(); loading_label->startLoading(); suggest_label->hide(); doing_label->setText(tr("Ready to Cleanup......"));//准备清理...... doing_label->show(); } else { clean_button->show(); back_button->show(); } } void CleanerActionWidget::onStartButtonClicked() { doing_label->setText(tr("Scanning......")); emit this->sendScanSignal(); } void CleanerActionWidget::onCleanButtonClicked() { clean_button->hide(); back_button->hide(); emit this->sendCleanSignal(); } void CleanerActionWidget::displayOrgPage() { doing_label->hide(); back_button->hide(); // loading_label->stopLoading(); scan_button->show(); scan_button->setEnabled(true); clean_button->hide(); suggest_label->show(); } void CleanerActionWidget::onBackButtonClicked() { doing_label->hide(); back_button->hide(); loading_label->stopLoading(); scan_button->show(); scan_button->setEnabled(true); clean_button->hide(); // back_button->hide(); suggest_label->show(); // result_label->show(); emit this->showMainData(); } youker-assistant/src/homeactionwidget.h0000664000175000017500000000560513260315532017325 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 HOMEACTIONWIDGET_H #define HOMEACTIONWIDGET_H #include #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" #include "../component/loadinglabel.h" class MainWindow; class SessionDispatcher; class SystemDispatcher; class HomeActionWidget : public QWidget { Q_OBJECT public: explicit HomeActionWidget(QWidget *parent = 0, QSettings *mSettings = 0); ~HomeActionWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setSessionDbusProxy(SessionDispatcher* dispatcher) { sessionProxy = dispatcher;} void setSystemDbusProxy(SystemDispatcher* dispatcher) { systemProxy = dispatcher;} void initConnect(); void setLanguage(); void writeFixCleanDate(); QString getFixCleanDate(); QString getCurrentDateTime(); void writeSafeScanDate(); QString getSafeScanDate(); QString getOneKeyFlag(); void enableSanButton(); public slots: void onStartButtonClicked(); void onCleanButtonClicked(); void onEndButtonClicked(); void getScanResult(QString msg); void finishScanResult(QString msg); void getScanAllResult(QString flag, QString msg); void getCleanResult(QString msg/*, QString flag*/); void finishCleanError(QString msg); void getCleaningMessage(QString type, QString status); private: QPoint press_point;//鼠标按下去的点 bool is_move; LoadingLabel *loading_label; QLabel *suggest_label; QLabel *scan_result_label; QLabel *result_label; QLabel *doing_label; QPushButton *scan_button; QPushButton *clean_button; QPushButton *back_button; MainWindow *p_mainwindow; SystemDispatcher *systemProxy; SessionDispatcher *sessionProxy; QString trace; QString cookies; QString garbage; QSettings *pSettings; QString dateStr; QString workFlag; QString scanFinishTime; }; #endif // HOMEACTIONWIDGET_H youker-assistant/src/mainbottomwidget.cpp0000664000175000017500000001647513260315532017712 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "mainbottomwidget.h" #include "../component/toolbutton.h" #include "../component/utils.h" #include #include #include MainBottomWidget::MainBottomWidget(QWidget *parent, QString arch, QString os/*, const QString &version*/) : QWidget(parent), osarch(arch), osname(os) { this->setFixedSize(900, 326); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); //// QPixmap label_pixmap(""); //// movie_label->setPixmap(label_pixmap); //// movie_label->setFixedSize(label_pixmap.size()); // scan_button->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/scan.png"); // scan_button->setIcon(pixmap); // scan_button->setIconSize(pixmap.size()); current_version = qApp->applicationVersion(); version_logo = new QLabel(); version_title = new QLabel(); version_tip = new QLabel(); check_btn = new QPushButton(); check_btn->hide(); // version_label = new QLabel(); box_logo = new QLabel(); box_title = new QPushButton(); box_title->setFixedWidth(240); box_title->setCursor(Qt::PointingHandCursor); box_title->setFocusPolicy(Qt::NoFocus); box_title->setStyleSheet("QPushButton{background-color:transparent;border:none;text-align:left;font-family: 方正黑体_GBK;font-size:24px;color:#000000;}QPushButton:hover{color:#3f96e4;}");//background:transparent; // box_title->installEventFilter(this); box_tip = new QLabel(); // more_text_btn = new QPushButton(); // more_btn = new QPushButton(); // auto_start = NULL; // camera_manager = NULL; // more_text_btn->setObjectName("checkButton"); // more_text_btn->setCursor(Qt::PointingHandCursor); // more_text_btn->setCursor(Qt::OpenHandCursor); // more_text_btn->setFocusPolicy(Qt::NoFocus); // QFont font = more_text_btn->font(); // font.setUnderline(true); // more_text_btn->setFont(font); check_btn->setObjectName("checkButton"); check_btn->setCursor(Qt::PointingHandCursor); check_btn->setFocusPolicy(Qt::NoFocus); // version_label->setObjectName("smallgrayLabel"); version_title->setObjectName("bigblackLabel"); // box_title->setObjectName("bigblackLabel"); version_tip->setAlignment(Qt::AlignLeft); version_tip->setObjectName("smallgrayLabel"); version_tip->setFixedWidth(380); box_tip->setAlignment(Qt::AlignLeft); box_tip->setObjectName("smallgrayLabel"); version_tip->setWordWrap(true);//QLabel自动换行 box_tip->setWordWrap(true);//QLabel自动换行 box_tip->setFixedWidth(380); // more_btn->setObjectName("transparentButton"); // more_btn->setCursor(Qt::PointingHandCursor); version_logo->setFixedSize(65, 65); version_logo->setPixmap(QPixmap("://res/version.png")); box_logo->setFixedSize(65, 65); box_logo->setPixmap(QPixmap("://res/box.png")); this->initUI(); this->initConnect(); this->setLanguage(); } MainBottomWidget::~MainBottomWidget() { if(version_logo != NULL) { delete version_logo; version_logo = NULL; } if(version_title != NULL) { delete version_title; version_title = NULL; } if(version_tip != NULL) { delete version_tip; version_tip = NULL; } if(check_btn != NULL) { delete check_btn; check_btn = NULL; } if(box_logo != NULL) { delete box_logo; box_logo = NULL; } if(box_title != NULL) { delete box_title; box_title = NULL; } if(box_tip != NULL) { delete box_tip; box_tip = NULL; } // for(int i=0; iaddWidget(version_title); layout1->addWidget(check_btn); // layout1->addWidget(version_label); layout1->addStretch(); layout1->setMargin(0); layout1->setSpacing(5); layout1->setContentsMargins(0,0,0,0); QVBoxLayout *layout2 = new QVBoxLayout(); layout2->addStretch(); layout2->addLayout(layout1); layout2->addWidget(version_tip); layout2->addStretch(); layout2->setMargin(0); layout2->setSpacing(5); layout2->setContentsMargins(0,0,0,0); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->addWidget(version_logo/* ,0, Qt::AlignVCenter*/); layout3->addLayout(layout2); layout3->addStretch(); layout3->setMargin(0); layout3->setSpacing(5); layout3->setContentsMargins(0,0,0,0); QVBoxLayout *layout4 = new QVBoxLayout(); layout4->addStretch(); layout4->addWidget(box_title); layout4->addWidget(box_tip); layout4->addStretch(); layout4->setMargin(0); layout4->setSpacing(5); layout4->setContentsMargins(0,0,0,0); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->addWidget(box_logo); layout5->addLayout(layout4); layout5->addStretch(); // layout5->addLayout(button_layout); layout5->setMargin(0); layout5->setSpacing(5); layout5->setContentsMargins(0,0,0,0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addLayout(layout3); main_layout->addLayout(layout5); main_layout->setMargin(0); main_layout->setSpacing(50); main_layout->setContentsMargins(60,50,60,80); this->setLayout(main_layout); } void MainBottomWidget::initConnect() { connect(check_btn, SIGNAL(clicked()), this, SLOT(onCheckBtnClicked())); connect(box_title, SIGNAL(clicked()), this, SIGNAL(sendSignal())); } void MainBottomWidget::setLanguage() { version_title->setText(tr("Current Version Number") + " " + current_version); version_tip->setText(tr("Update to the lastest version, make it work better")); check_btn->setText(tr("updating on the backend")); box_title->setText(tr("Common toolbox")); box_tip->setText(tr("Fast and practical, making the system more personalized")); // more_text_btn->setText(tr("More")); // more_btn->setToolTip(tr("More")); } void MainBottomWidget::initBoxTool() { } void MainBottomWidget::onCheckBtnClicked() { emit this->sendOpenUpgrade(); check_btn->hide(); } void MainBottomWidget::displayBackedBtn(bool flag) { if(flag) check_btn->setText(tr("Upgrade is complete")); else check_btn->setText(tr("Updating on the backend")); check_btn->show(); } void MainBottomWidget::hideBackedBtn() { check_btn->hide(); } void MainBottomWidget::switchPageIndex(QString index) { } youker-assistant/src/homepage.cpp0000664000175000017500000003375513260315532016122 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "homepage.h" #include #include #include "mainwindow.h" #include "../component/toolbutton.h" #include "../component/utils.h" HomePage::HomePage(QWidget *parent, QString arch, QString os/*, const QString &version*/) : QWidget(parent), osarch(arch), osname(os) { this->setFixedSize(900, 326); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); //// QPixmap label_pixmap(""); //// movie_label->setPixmap(label_pixmap); //// movie_label->setFixedSize(label_pixmap.size()); // scan_button->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/scan.png"); // scan_button->setIcon(pixmap); // scan_button->setIconSize(pixmap.size()); current_version = qApp->applicationVersion(); version_logo = new QLabel(); version_title = new QLabel(); version_tip = new QLabel(); check_btn = new QPushButton(); check_btn->hide(); // version_label = new QLabel(); box_logo = new QLabel(); box_title = new QPushButton(); box_title->setFixedWidth(240); box_title->setCursor(Qt::PointingHandCursor); box_title->setFocusPolicy(Qt::NoFocus); box_title->setStyleSheet("QPushButton{background:#ffffff;border:none;text-align:left;font-family: 方正黑体_GBK;font-size:24px;color:#000000;}QPushButton:hover{color:#3f96e4;}");//background:transparent; // box_title->installEventFilter(this); box_tip = new QLabel(); // more_text_btn = new QPushButton(); // more_btn = new QPushButton(); // auto_start = NULL; // camera_manager = NULL; // more_text_btn->setObjectName("checkButton"); // more_text_btn->setCursor(Qt::PointingHandCursor); // more_text_btn->setCursor(Qt::OpenHandCursor); // more_text_btn->setFocusPolicy(Qt::NoFocus); // QFont font = more_text_btn->font(); // font.setUnderline(true); // more_text_btn->setFont(font); check_btn->setObjectName("checkButton"); check_btn->setCursor(Qt::PointingHandCursor); check_btn->setFocusPolicy(Qt::NoFocus); // version_label->setObjectName("smallgrayLabel"); version_title->setObjectName("bigblackLabel"); // box_title->setObjectName("bigblackLabel"); version_tip->setAlignment(Qt::AlignLeft); version_tip->setObjectName("smallgrayLabel"); version_tip->setFixedWidth(380); box_tip->setAlignment(Qt::AlignLeft); box_tip->setObjectName("smallgrayLabel"); version_tip->setWordWrap(true);//QLabel自动换行 box_tip->setWordWrap(true);//QLabel自动换行 box_tip->setFixedWidth(380); // more_btn->setObjectName("transparentButton"); // more_btn->setCursor(Qt::PointingHandCursor); version_logo->setFixedSize(65, 65); version_logo->setPixmap(QPixmap("://res/version.png")); box_logo->setFixedSize(65, 65); box_logo->setPixmap(QPixmap("://res/box.png")); this->setLanguage(); } HomePage::~HomePage() { if(version_logo != NULL) { delete version_logo; version_logo = NULL; } if(version_title != NULL) { delete version_title; version_title = NULL; } if(version_tip != NULL) { delete version_tip; version_tip = NULL; } if(check_btn != NULL) { delete check_btn; check_btn = NULL; } if(box_logo != NULL) { delete box_logo; box_logo = NULL; } if(box_title != NULL) { delete box_title; box_title = NULL; } if(box_tip != NULL) { delete box_tip; box_tip = NULL; } // for(int i=0; iaddWidget(version_title); layout1->addWidget(check_btn); // layout1->addWidget(version_label); layout1->addStretch(); layout1->setMargin(0); layout1->setSpacing(5); layout1->setContentsMargins(0,0,0,0); QVBoxLayout *layout2 = new QVBoxLayout(); layout2->addStretch(); layout2->addLayout(layout1); layout2->addWidget(version_tip); layout2->addStretch(); layout2->setMargin(0); layout2->setSpacing(5); layout2->setContentsMargins(0,0,0,0); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->addWidget(version_logo/* ,0, Qt::AlignVCenter*/); layout3->addLayout(layout2); layout3->addStretch(); layout3->setMargin(0); layout3->setSpacing(5); layout3->setContentsMargins(0,0,0,0); QVBoxLayout *layout4 = new QVBoxLayout(); layout4->addStretch(); layout4->addWidget(box_title); layout4->addWidget(box_tip); layout4->addStretch(); layout4->setMargin(0); layout4->setSpacing(5); layout4->setContentsMargins(0,0,0,0); /*QStringList icon_list; // icon_list<<"://res/ubuntukylin-software-center"<<"://res/boot"<<"://res/camera"; icon_list<<"://res/boot" << "://res/more.png"; QStringList text_list; // text_list<< tr("Youker Softeware Center") << tr("Boot Manager") << tr("Camera"); text_list << tr("Boot Manager") << tr("More"); QHBoxLayout *button_layout = new QHBoxLayout(); QSignalMapper *signal_mapper = new QSignalMapper(this); for(int i=0; isetFocusPolicy(Qt::NoFocus); tool_button->setIcon(icon_list.at(i)); tool_button->setText(text_list.at(i)); connect(tool_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); signal_mapper->setMapping(tool_button, QString::number(i, 10)); button_layout->addWidget(tool_button); item_list.append(tool_button); } connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchPageIndex(QString))); */ // more_btn->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/more.png"); // more_btn->setIcon(pixmap); // more_btn->setIconSize(pixmap.size()); // QVBoxLayout *more_layout = new QVBoxLayout(); //// more_layout->addStretch(); // more_layout->addWidget(more_btn); // more_layout->addWidget(more_text_btn); //// more_layout->addStretch(); // more_layout->setSpacing(0); // more_layout->setMargin(0); // more_layout->setContentsMargins(0, 8, 0, 0); // button_layout->addStretch(); // button_layout->addLayout(more_layout); //// button_layout->addWidget(more_btn, 0, Qt::AlignTop); // button_layout->setSpacing(20); // button_layout->setMargin(0); // button_layout->setContentsMargins(0, 0, 0, 0); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->addWidget(box_logo); layout5->addLayout(layout4); layout5->addStretch(); // layout5->addLayout(button_layout); layout5->setMargin(0); layout5->setSpacing(5); layout5->setContentsMargins(0,0,0,0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addLayout(layout3); main_layout->addLayout(layout5); main_layout->setMargin(0); main_layout->setSpacing(50); main_layout->setContentsMargins(60,50,60,80); this->setLayout(main_layout); } void HomePage::initConnect() { connect(this, SIGNAL(moreSignal()), p_mainwindow, SIGNAL(chanegBoxToolStatus())); // connect(more_btn, SIGNAL(clicked()), p_mainwindow, SLOT(showBoxWidget())); // connect(more_btn, SIGNAL(clicked()), p_mainwindow, SIGNAL(chanegBoxToolStatus())); // connect(more_text_btn, SIGNAL(clicked()), p_mainwindow, SLOT(showBoxWidget())); // connect(more_text_btn, SIGNAL(clicked()), p_mainwindow, SIGNAL(chanegBoxToolStatus())); // connect(check_btn, SIGNAL(clicked()), this, SLOT(checkLastestVersion())); connect(check_btn, SIGNAL(clicked()), this, SLOT(onCheckBtnClicked())); connect(this, SIGNAL(sendSignal()), p_mainwindow, SIGNAL(chanegBoxToolStatus())); connect(box_title, SIGNAL(clicked()), this, SIGNAL(sendSignal())); } void HomePage::setLanguage() { version_title->setText(tr("Current Version Number") + " " + current_version); version_tip->setText(tr("Update to the lastest version, make it work better")); check_btn->setText(tr("updating on the backend")); box_title->setText(tr("Common toolbox")); box_tip->setText(tr("Fast and practical, making the system more personalized")); // more_text_btn->setText(tr("More")); // more_btn->setToolTip(tr("More")); } void HomePage::initBoxTool() { } void HomePage::onCheckBtnClicked() { emit this->sendOpenUpgrade(); check_btn->hide(); } void HomePage::displayBackedBtn(bool flag) { if(flag) check_btn->setText(tr("Upgrade is complete")); else check_btn->setText(tr("Updating on the backend")); check_btn->show(); } void HomePage::hideBackedBtn() { check_btn->hide(); } //void HomePage::checkLastestVersion() //{ // QStringList version_list = sessionProxy->checkNewVersion(); // if(version_list.length() == 1) { // version_label->setText(version_list.at(0)); // } // if(version_list.length() == 4) { // version_label->setText(version_list.at(2)); // if(version_list.at(3) == "1") { // qDebug() << "Neet to UPdate......"; // p_mainwindow->openUpgradePage(version_list); //// systemProxy->update_myself(); // } // else { // qDebug() << "Unneccesary to UPdate......"; // p_mainwindow->openUpgradePage(version_list); // } // } // else { // version_label->setText(""); // } //} void HomePage::switchPageIndex(QString index) { // bool ok; // int current_index = index.toInt(&ok, 10); if(index == "0") emit this->sendSubIndex(0); // else if(index == "-1") // if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") // sessionProxy->runApp("cheese"); // else // emit this->sendSubIndex(1); // else if(index == "1") { //// p_mainwindow->showBoxWidget(); // emit this->moreSignal(); // } // if(index == "0") // { // if(auto_start == NULL) { // auto_start = new AutoStartWidget(0, sessionProxy); // connect(sessionProxy, SIGNAL(tellAutoModel(QStringList)), auto_start, SLOT(readyReciveData(QStringList))); // connect(sessionProxy, SIGNAL(showAutoModel()), auto_start, SLOT(readyShowUI())); // auto_start->initData(); // int w_x = p_mainwindow->frameGeometry().topLeft().x() + (900 / 2) - (560 / 2); // int w_y = p_mainwindow->frameGeometry().topLeft().y() + (600 /2) - (398 / 2); // auto_start->move(w_x, w_y); // auto_start->show(); // auto_start->raise(); // } // else { // int w_x = p_mainwindow->frameGeometry().topLeft().x() + (900 / 2) - (560 / 2); // int w_y = p_mainwindow->frameGeometry().topLeft().y() + (600 /2) - (398 / 2); // auto_start->move(w_x, w_y); // auto_start->show(); // auto_start->raise(); // } // } // else if(index == "1") // { // if(camera_manager == NULL) { // camera_manager = new CameraManager(0, sessionProxy); // if(sessionProxy->judge_camera_qt()) // { // camera_manager->setOKButtonEnable(true); // } // else{ // camera_manager->setOKButtonEnable(false); // } // int w_x = p_mainwindow->frameGeometry().topLeft().x() + (900 / 2) - (524 / 2); // int w_y = p_mainwindow->frameGeometry().topLeft().y() + (600 /2) - (277 / 2); // camera_manager->move(w_x, w_y); // camera_manager->exec(); //// camera_manager->show(); //// camera_manager->raise(); // } // else { // int w_x = p_mainwindow->frameGeometry().topLeft().x() + (900 / 2) - (524 / 2); // int w_y = p_mainwindow->frameGeometry().topLeft().y() + (600 /2) - (277 / 2); // camera_manager->move(w_x, w_y); // camera_manager->show(); // camera_manager->raise(); // } // } } //bool HomePage::eventFilter(QObject *obj, QEvent *event) //{ // if(obj == box_title){ // if(event->type() == QEvent::MouseButtonRelease){ // emit this->sendSignal(); //// p_mainwindow->showBoxWidget(); // } //// if(event->type() == QEvent::Enter){ //// ui->btn_close->setPixmap(QPixmap(":/pixmap/image/closeBtn_hover.png")); //// }else if(event->type() == QEvent::Leave){ //// ui->btn_close->setPixmap(QPixmap(":/pixmap/image/closeBtn.png")); //// }else if(event->type() == QEvent::MouseButtonPress){ //// ui->btn_close->setPixmap(QPixmap(":/pixmap/image/closeBtn_hover.png")); //// }else if(event->type() == QEvent::MouseButtonRelease){ //// QMouseEvent *me = (QMouseEvent *)event; //// QLabel *lb = (QLabel *)obj; //// if(me->x() > 0 && me->x() < lb->width() && me->y() > 0 && me->y() < lb->height()){ //// this->close(); //// this->destroy(); //// }else{ //// ui->btn_close->setPixmap(QPixmap(":/pixmap/image/closeBtn.png")); //// } //// } else { //// return QObject::eventFilter(obj, event); //// } // } // return QObject::eventFilter(obj, event); //} youker-assistant/src/mainbottomwidget.h0000664000175000017500000000346213260315532017347 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MAINBOTTOMWIDGET_H #define MAINBOTTOMWIDGET_H #include #include #include #include #include class ToolButton; class MainBottomWidget : public QWidget { Q_OBJECT public: explicit MainBottomWidget(QWidget *parent = 0, QString arch = "", QString os = ""/*, const QString &version = ""*/); ~MainBottomWidget(); void setLanguage(); void initBoxTool(); void initConnect(); void initUI(); public slots: void switchPageIndex(QString index); void displayBackedBtn(bool flag); void onCheckBtnClicked(); void hideBackedBtn(); signals: void sendSubIndex(int index); void sendSignal(); void sendOpenUpgrade(); private: QLabel *version_logo; QLabel *version_title; QLabel *version_tip; QPushButton *check_btn; // QLabel *version_label; QLabel *box_logo; QPushButton *box_title; QLabel *box_tip; QString current_version; QString osname; QString osarch; // QList item_list; }; #endif // MAINBOTTOMWIDGET_H youker-assistant/src/bottomcontentwidget.cpp0000664000175000017500000000204213260315532020421 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "bottomcontentwidget.h" #include BottomContentWidget::BottomContentWidget(QWidget *parent) : QWidget(parent) { // this->resize(900, 326); this->setFixedSize(900, 326); // this->setGeometry(0, 274, 900, 326); } BottomContentWidget::~BottomContentWidget() { } youker-assistant/src/titlewidget.h0000664000175000017500000000331013260315532016307 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 TITLEWIDGET_H #define TITLEWIDGET_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" class MainWindow; class TitleWidget : public QWidget { Q_OBJECT public: explicit TitleWidget(QWidget *parent = 0, QString arch = "", QString os = ""); ~TitleWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initConnect(); //protected: // virtual void paintEvent(QPaintEvent *event); signals: void closeApp(); private: QPoint press_point;//鼠标按下去的点 bool is_move; SystemButton *min_button; SystemButton *close_button; SystemButton *skin_button; SystemButton *main_menu_button; MainWindow *p_mainwindow; }; #endif // TITLEWIDGET_H youker-assistant/src/bottomcontentwidget.h0000664000175000017500000000240013260315532020064 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 BOTTOMCONTENTWIDGET_H #define BOTTOMCONTENTWIDGET_H #include #include #include #include #include #include #include #include #include class BottomContentWidget : public QWidget { Q_OBJECT public: explicit BottomContentWidget(QWidget *parent = 0); ~BottomContentWidget(); void setLanguage(); private: protected: public slots: signals: private: }; #endif // BOTTOMCONTENTWIDGET_H youker-assistant/src/cleaneractionwidget.h0000664000175000017500000000513413260315532020003 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANERACTIONWIDGET_H #define CLEANERACTIONWIDGET_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" #include "../component/loadinglabel.h" class SessionDispatcher; class SystemDispatcher; class CleanerActionWidget : public QWidget { Q_OBJECT public: explicit CleanerActionWidget(QWidget *parent = 0); ~CleanerActionWidget(); void setSessionDbusProxy(SessionDispatcher* dispatcher) { sessionProxy = dispatcher;} void setSystemDbusProxy(SystemDispatcher* dispatcher) { systemProxy = dispatcher;} void initConnect(); void setLanguage(); public slots: void onStartButtonClicked(); void onCleanButtonClicked(); void onBackButtonClicked(); void showCleanReciveStatus(const QString &status); void showCleanReciveError(const QString &status); void showCleanOverStatus(); void showCleanerData(const QStringList &data); void showCleanerStatus(const QString &status, const QString &domain); void showCleanerError(const QString &status); void displayOrgPage(); void displayAnimation(); // void displayCleanAnimation(); void receivePolicyKitSignal(bool status); void accordScanOverStatusToChange(bool status); signals: void showDetailData(); void showMainData(); void sendCleanSignal(); void sendScanSignal(); private: bool is_move; LoadingLabel *loading_label; QLabel *suggest_label; QLabel *doing_label; QPushButton *scan_button; QPushButton *clean_button; QPushButton *back_button; SystemDispatcher *systemProxy; SessionDispatcher *sessionProxy; }; #endif // CLEANERACTIONWIDGET_H youker-assistant/src/maintopwidget.cpp0000664000175000017500000007056413260315532017207 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "maintopwidget.h" #include "mainwindow.h" #include #include #include "../plugins/widgets/mytristatebutton.h" #include #include #include #include #include #include #include #include MainTopWidget::MainTopWidget(bool isMain, QSettings *mSettings, QWidget *parent) : QWidget(parent) , pSettings(mSettings) , m_isMain(isMain) // , p_mainwindow(parent) { // p_mainwindow = static_cast(parent); if (m_isMain) this->setFixedSize(900, 227); else this->setFixedSize(900, 150); this->setAutoFillBackground(true); // this->setObjectName("transparentWidget"); scanFinishTime = ""; this->initWidgets(); this->initConnect(); this->setLanguage(); if (m_isMain) { workFlag = this->getOneKeyFlag(); if(workFlag.length() > 0) { if(workFlag == "1") { //clean dateStr = this->getFixCleanDate(); result_label->setText(tr("The lastest cleanup time is ") + dateStr); } else if(workFlag == "0") { //scan dateStr = this->getSafeScanDate(); result_label->setText(tr("The lastest scan time is ") + dateStr); } } else { result_label->setText(tr("You have not implemented the one key scan and clean-up operation.")); } } } MainTopWidget::~MainTopWidget() { if(loading_label) { delete loading_label; loading_label = nullptr; } if(suggest_label) { delete suggest_label; suggest_label = nullptr; } if(scan_result_label) { delete scan_result_label; scan_result_label = nullptr; } if(result_label) { delete result_label; result_label = nullptr; } if(doing_label) { delete doing_label; doing_label = nullptr; } delete scan_button; delete clean_button; delete back_button; //Segmentation fault QLayoutItem *child; while ((child = m_titleLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_titleRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_toolLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_toolRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_topLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_bottomLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_layout; } void MainTopWidget::initTitlebarLeftContent() { QWidget *w = new QWidget; m_titleLeftLayout = new QHBoxLayout(w); m_titleLeftLayout->setContentsMargins(6, 0, 0, 0); m_titleLeftLayout->setSpacing(0); QLabel *appLabel = new QLabel; appLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;}"); appLabel->setText(tr("Kylin Assistant")); m_titleLeftLayout->addWidget(appLabel); m_topLayout->addWidget(w, 1, Qt::AlignLeft); } void MainTopWidget::initTitlebarRightContent() { QWidget *w = new QWidget; m_titleRightLayout = new QHBoxLayout(w); m_titleRightLayout->setContentsMargins(0, 0, 1, 0); m_titleRightLayout->setSpacing(0); m_topLayout->addWidget(w, 1, Qt::AlignRight); SystemButton *min_button = new SystemButton(); SystemButton *close_button = new SystemButton(); // SystemButton *skin_button = new SystemButton(); SystemButton *main_menu_button = new SystemButton(); min_button->loadPixmap(":/sys/res/sysBtn/min_button.png"); close_button->loadPixmap(":/sys/res/sysBtn/close_button.png"); // skin_button->loadPixmap(":/sys/res/sysBtn/skin_button.png"); main_menu_button->loadPixmap(":/sys/res/sysBtn/main_menu.png"); min_button->setFocusPolicy(Qt::NoFocus); close_button->setFocusPolicy(Qt::NoFocus); // skin_button->setFocusPolicy(Qt::NoFocus); main_menu_button->setFocusPolicy(Qt::NoFocus); m_titleRightLayout->addWidget(main_menu_button); // m_titleRightLayout->addWidget(skin_button); m_titleRightLayout->addWidget(min_button); m_titleRightLayout->addWidget(close_button); connect(main_menu_button, &SystemButton::clicked, this, [=] { emit this->showMenu(); /*if (parentWidget()) { parentWidget()->showMainMenu(); }*/ }); // connect(skin_button, &SystemButton::clicked, this, [=] { // if (parentWidget() && parentWidget()->parentWidget()) { // //openSkinCenter() // } // }); connect(min_button, &SystemButton::clicked, [=] (const bool b) { emit this->showMin(); // if (p_mainwindow) // p_mainwindow->showMinimized(); // if (parentWidget()) { // parentWidget()->showMinimized(); // } }); connect(close_button, &SystemButton::clicked, this, [=] { emit this->closeApp(); // window()->close(); }); } void MainTopWidget::initContentLeftContent() { QWidget *w = new QWidget; w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_toolLeftLayout = new QHBoxLayout(w); m_toolLeftLayout->setContentsMargins(0, 0, 0, 0); m_toolLeftLayout->setSpacing(10); suggest_label = new QLabel(); doing_label = new QLabel(); if (m_isMain) { scan_result_label = new QLabel(); result_label = new QLabel(); loading_label = new LoadingLabel(this, "firstkey"); scan_result_label->setObjectName("whiteLabel"); scan_result_label->setWordWrap(true);//QLabel自动换行 scan_result_label->setFixedWidth(460); scan_result_label->hide(); result_label->setWordWrap(true);//QLabel自动换行 result_label->setObjectName("smallWhiteLabel"); result_label->setFixedWidth(460); suggest_label->setFixedWidth(460); doing_label->setFixedWidth(700);//460 } else { loading_label = new LoadingLabel(this, "clean"); suggest_label->setFixedWidth(550); doing_label->setFixedWidth(700);//550 } loading_label->show(); suggest_label->setObjectName("whiteLabel"); suggest_label->setWordWrap(true);//QLabel自动换行 // doing_label->setWordWrap(true);//QLabel自动换行 doing_label->setObjectName("whiteLabel"); doing_label->hide(); QVBoxLayout *layout1 = new QVBoxLayout(); layout1->addStretch(); if (m_isMain) { layout1->addWidget(suggest_label, 0, Qt::AlignVCenter); layout1->addWidget(scan_result_label, 0, Qt::AlignVCenter); layout1->addWidget(doing_label, 0, Qt::AlignVCenter); layout1->addWidget(result_label, 0, Qt::AlignVCenter); } else { layout1->addWidget(suggest_label, 0, Qt::AlignVCenter); layout1->addWidget(doing_label, 0, Qt::AlignVCenter); } layout1->addStretch(); layout1->setSpacing(15); layout1->setContentsMargins(0, 0, 0, 0); m_toolLeftLayout->addStretch(); m_toolLeftLayout->addWidget(loading_label, 0, Qt::AlignHCenter); m_toolLeftLayout->addLayout(layout1); m_toolLeftLayout->addStretch(); // m_bottomLayout->addWidget(w); m_bottomLayout->addWidget(w, 1, Qt::AlignLeft); } void MainTopWidget::initActionRightContent() { QWidget *w = new QWidget; m_toolRightLayout = new QHBoxLayout(w); m_toolRightLayout->setContentsMargins(0, 3, 30, 10); m_toolRightLayout->setSpacing(5); scan_button = new QPushButton(this); clean_button = new QPushButton(this); back_button = new QPushButton(this); scan_button->setObjectName("greenButton"); scan_button->setFocusPolicy(Qt::NoFocus); if (m_isMain) { scan_button->setFixedSize(204, 65); clean_button->setFixedSize(204, 65); QPixmap pixmap("://res/scan.png"); scan_button->setIcon(pixmap); scan_button->setIconSize(pixmap.size()); } else { scan_button->setFixedSize(182, 58); clean_button->setFixedSize(182, 58); } scan_button->setVisible(true); clean_button->setFocusPolicy(Qt::NoFocus); clean_button->setObjectName("greenButton"); clean_button->setVisible(false); back_button->setFocusPolicy(Qt::NoFocus); back_button->setFixedSize(50, 30); // back_button->setObjectName("backButton"); back_button->setObjectName("underlineButton"); back_button->setVisible(false); m_toolRightLayout->addWidget(scan_button); m_toolRightLayout->addWidget(clean_button); m_toolRightLayout->addWidget(back_button); m_bottomLayout->addWidget(w, 1, Qt::AlignRight); } void MainTopWidget::initWidgets() { m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); QWidget *topWidget = new QWidget; m_topLayout = new QHBoxLayout(topWidget); m_topLayout->setContentsMargins(0, 0, 0, 0); m_topLayout->setSpacing(0); m_layout->addWidget(topWidget, 0, Qt::AlignTop); QWidget *bottomWidget = new QWidget; m_bottomLayout = new QHBoxLayout(bottomWidget); m_bottomLayout->setContentsMargins(13, 0, 0, 20); m_bottomLayout->setSpacing(0); m_layout->addWidget(bottomWidget, 0, Qt::AlignBottom); this->setLayout(m_layout); initTitlebarLeftContent(); initTitlebarRightContent(); initContentLeftContent(); initActionRightContent(); } void MainTopWidget::initConnect() { connect(scan_button, SIGNAL(clicked()), this, SLOT(onStartButtonClicked())); connect(clean_button, SIGNAL(clicked()), this, SLOT(onCleanButtonClicked())); connect(back_button, SIGNAL(clicked()), this, SLOT(onEndButtonClicked())); } void MainTopWidget::setLanguage() { scan_button->setText(tr("Start Scan"));//开始扫描 clean_button->setText(tr("Start Cleanup"));//开始清理 back_button->setText(tr("Back")); doing_label->setText(tr("Scanning......"));//正在扫描...... if (m_isMain) { suggest_label->setText(tr("Quick clean up system trash, saving disk space and improving the system efficiency!"));//一键清理系统垃圾,帮您节省磁盘空间,让系统运行更加有效率! scan_result_label->setText(tr("Scan Over")); } else { suggest_label->setText(tr("Regular cleaning, let your computer remains the relaxed state"));//经常清理,让电脑保持最轻松的状态 } } //void MainTopWidget::enableSanButton() //{ // scan_button->setEnabled(true); //} void MainTopWidget::showCleanOverStatus() { loading_label->stopLoading(); scan_button->setVisible(true); scan_button->setEnabled(true); clean_button->setVisible(false); clean_button->setEnabled(true); back_button->setVisible(false); doing_label->setText(tr("Clean OK")); } void MainTopWidget::showCleanerData(const QStringList &data) { if(data.length() == 2) { this->setDoingLabelText(tr("Cleaning: ") + data.at(0).split(":").at(1)); // doing_label->setText(tr("Cleaning: ") + data.at(0).split(":").at(1)); } else if(data.length() == 3) { this->setDoingLabelText(data.at(0).split(":").at(1) + tr(", Percent is: ") + data.at(1).split(":").at(1) + tr("%, Status is: ") + data.at(2).split(":").at(1)); // doing_label->setText(data.at(0).split(":").at(1) + tr(", Percent is: ") + data.at(1).split(":").at(1) + tr("%, Status is: ") + data.at(2).split(":").at(1)); } } void MainTopWidget::showCleanerStatus(const QString &status, const QString &domain) { if(status == "Complete:History.firefox" && domain == "history") { doing_label->setText(tr("Clean Firefox history......")); } else if(status == "Complete:History.chromium" && domain == "history") { doing_label->setText(tr("Clean Chromium history......")); } else if(status == "Complete:History.system" && domain == "history") { doing_label->setText(tr("Clean system history......")); } else if(status == "Complete:" && domain == "apt") { doing_label->setText(tr("Clean apt......")); } else if(status == "Start:" && domain == "apt") { doing_label->setText(tr("Start clean apt......")); } else if(status == "Complete:Cookies.firefox") { doing_label->setText(tr("Clean Firefox Cookie:") + domain); } else if(status == "Complete:Cookies.chromium") { doing_label->setText(tr("Clean Chromium Cookie:") + domain); } } void MainTopWidget::showCleanerError(const QString &status) { if(status.contains("Non-existent:")) { if(status.split(":").at(1).length() > 0) { this->setDoingLabelText(status.split(":").at(1) + tr(" does not exist")); // doing_label->setText(status.split(":").at(1) + tr(" does not exist")); } } else if(status.contains("Working:Chromium")) { doing_label->setText(tr("Chromium Browser is running......")); } } void MainTopWidget::showCleanReciveStatus(const QString &status) { if(status == "Complete:Cache") { doing_label->setText(tr("Cache Scan OK")); } else if(status == "Complete:Cookies") { doing_label->setText(tr("Cookies Scan OK")); } else if(status == "Complete:") { doing_label->setText(tr("History Scan OK")); } else if(status == "Complete:Packages") { doing_label->setText(tr("Packages Scan OK")); } else if(status == "Complete:All") { // doing_label->setText(tr("Scanning......")); // doing_label->hide(); // loading_label->stopLoading(); // scan_button->hide(); // scan_button->setEnabled(true); // clean_button->show(); // clean_button->setEnabled(true); // suggest_label->show(); // back_button->show(); } } void MainTopWidget::accordScanOverStatusToChange(bool status) { if (status) { doing_label->setText(tr("Scanning......")); doing_label->setVisible(false); loading_label->stopLoading(); scan_button->setVisible(false); scan_button->setEnabled(true); clean_button->setVisible(true); clean_button->setEnabled(true); suggest_label->setVisible(true); back_button->setVisible(true); } else { doing_label->setText(tr("Scanning......")); doing_label->setVisible(false); loading_label->stopLoading(); scan_button->setVisible(false); scan_button->setEnabled(true); clean_button->setVisible(false); clean_button->setEnabled(true); suggest_label->setVisible(true); back_button->setVisible(true); } } void MainTopWidget::showCleanReciveError(const QString &status) { doing_label->setText(tr("Error: ") + status); if(status == "Uninstalled:Firefox") { doing_label->setText(tr("Firefox Browser does not be installed")); } else if(status == "Uninstalled:Chromium") { doing_label->setText(tr("Chromium Browser does not be installed")); } else if(status == "Working:Chromium") { doing_label->setText(tr("Chromium Browser is running")); } else { if(status.contains("Non-existent:")) { this->setDoingLabelText(status.split(":").at(1) + tr(" does not exist")); // doing_label->setText(status.split(":").at(1) + tr(" does not exist")); } } } void MainTopWidget::displayAnimation() { // scan_button->setEnabled(false); loading_label->startLoading(); suggest_label->setVisible(false); doing_label->setVisible(true); emit this->showDetailData(); } void MainTopWidget::getScanResult(QString msg) { this->setDoingLabelText(tr("Scanning:") + msg); // doing_label->setText(tr("Scanning:") + msg);//正在扫描: } void MainTopWidget::finishScanResult(QString msg) { if(msg == "onekey") { // doing_label->setText(tr("Scan Over"));//扫描完成 doing_label->hide(); scan_result_label->show(); result_label->show(); QString msg; if (trace.toInt() > 0) { if (cookies.toInt() > 0) { if (garbage == "0.00 B") { msg = trace + tr(" history trace; ") + cookies + tr(" browser cookies.") ; } else { msg = trace + tr(" history trace; ") + cookies + tr(" browser cookies; ") + garbage + tr(" garbage.") ; } } else { if (garbage == "0.00 B") { msg = trace + tr(" history trace.") ; } else { msg = trace + tr(" history trace; ") + garbage + tr(" garbage.") ; } } } else { if (cookies.toInt() > 0) { if (garbage == "0.00 B") { msg = cookies + tr(" browser cookies.") ; } else { msg = cookies + tr(" browser cookies; ") + garbage + tr(" garbage.") ; } } else { if (garbage == "0.00 B") { msg = ""; } else { msg = garbage + tr(" garbage.") ; } } } if (msg.isEmpty()) { result_label->setText(tr("No garbage.")); scan_button->setEnabled(true); clean_button->setVisible(false); } else { result_label->setText(msg); clean_button->setVisible(true); clean_button->setEnabled(true); } scanFinishTime = this->getCurrentDateTime(); // result_label->setText(tr("The lastest scan time is ") + this->getCurrentDateTime()); this->writeSafeScanDate(); scan_button->setVisible(false); back_button->setVisible(true); loading_label->stopLoading(); } } void MainTopWidget::getScanAllResult(QString flag, QString msg){ if(flag == "h") { trace = msg; } else if(flag == "k") { cookies = msg; } else if(flag == "c") { garbage = msg; } } void MainTopWidget::getCleanResult(QString msg/*, QString flag*/) { // if(flag == "onekey") { if (msg == "yes") {//在弹出输入密码验证时,点击了取消按钮 loading_label->stopLoading(); clean_button->setVisible(true); clean_button->setEnabled(true); back_button->setVisible(true); } else if (msg == "no") {//在弹出输入密码验证时,输入密码,验证通过,此时让动态图片开始显示 //show dynamic image clean_button->setVisible(true); clean_button->setEnabled(false); back_button->setVisible(false); doing_label->setText(tr("Cleaning......"));//正在清理...... loading_label->startLoading(); } else if (msg == "c") { doing_label->setText(tr("Garbage Cleanup OK......")); } else if (msg == "h") { doing_label->setText(tr("History Cleanup OK......")); } else if (msg == "k") { doing_label->setText(tr("Cookies Cleanup OK......")); } else if (msg == "o") { this->writeFixCleanDate(); //清理完毕后显示清理总数 result_label->setText(tr("The lastest cleanup time is ") + this->getCurrentDateTime()); this->setDoingLabelText(tr("Cleanup Cookies:") +cookies + tr("; Garbage:") + garbage + tr("; Historical records:")+trace, 460); // doing_label->setText(tr("Cleanup Cookies:") +cookies + tr("; Garbage:") + garbage + tr("; Historical records:") +trace); trace.clear(); cookies.clear(); garbage.clear(); loading_label->stopLoading(); scan_button->setVisible(true); scan_button->setEnabled(true); clean_button->setVisible(false); clean_button->setEnabled(true); back_button->setVisible(false); } // } } void MainTopWidget::finishCleanError(QString msg) { if (msg == "ce") { qDebug() << "GarbageException---------"; } else if (msg == "he") { qDebug() << "HistoryException---------"; } else if (msg == "ke") { qDebug() << "CookiesException---------"; } } void MainTopWidget::getCleaningMessage(QString type, QString status) { if(type == "firefoxhistory") { if(status == "start") { doing_label->setText(tr("Cleaning up history trace of Firefox..."));//正在清理Firefox的历史痕迹... } else if(status == "end") { doing_label->setText(tr("Firefox history trace had been cleared!"));//Firefox的历史痕迹已清理完毕! } } else if(type == "chromiumhistory") { if(status == "start") { doing_label->setText(tr("Cleaning up history trace of Chromium..."));//正在清理Chromium的历史痕迹... } else if(status == "end") { doing_label->setText(tr("Chromium history trace had been cleared!"));//Chromium的历史痕迹已清理完毕! } } else if(type == "firefoxcookies") { if(status == "start") { doing_label->setText(tr("Cleaning up Cookies of Firefox..."));//正在清理Firefox的Cookies... } else if(status == "end") { doing_label->setText(tr("Firefox Cookies had been cleared!"));//Firefox的Cookies已清理完毕! } } else if(type == "chromiumcookies") { if(status == "start") { doing_label->setText(tr("Cleaning up Cookies of Chromium..."));//正在清理Chromium的Cookies... } else if(status == "end") { doing_label->setText(tr("Chromium Cookies had been cleared!"));//Chromium的Cookies已清理完毕! } } else if(type == "apt") { if(status == "end") { doing_label->setText(tr("Apt cache had been cleared!"));//Apt缓存已清理完毕! } else { doing_label->setText(tr("Cleaning up Apt cache: ") + status);//正在清理Apt缓存: } } else if(type == "software_center") { if(status == "end") { doing_label->setText(tr("Software Center cache had been cleared!"));//软件中心缓存已清理完毕! } else { doing_label->setText(tr("Cleaning up Software Center cache: ") + status);//正在清理软件中心缓存: } } } void MainTopWidget::displayOrgPage() { doing_label->setVisible(false); back_button->setVisible(false); // loading_label->stopLoading(); scan_button->setVisible(true); scan_button->setEnabled(true); clean_button->setVisible(false); suggest_label->setVisible(true); } void MainTopWidget::onStartButtonClicked() { doing_label->setText(tr("Scanning......"));//正在扫描...... if (m_isMain) { scan_button->setVisible(false); // scan_button->setEnabled(false); loading_label->startLoading(); suggest_label->setVisible(false); scan_result_label->setVisible(false); result_label->setVisible(false); doing_label->setVisible(true); QStringList args; args << "cache" << "history" << "cookies"; emit this->startOneKeyScan(args); } else { scan_button->setVisible(false); emit this->sendScanSignal(); } } void MainTopWidget::onCleanButtonClicked() { if (m_isMain) { clean_button->setVisible(false); back_button->setVisible(false); loading_label->startLoading(); suggest_label->setVisible(false); scan_result_label->setVisible(false); result_label->setVisible(false); doing_label->setText(tr("Ready to Cleanup......"));//准备清理...... doing_label->setVisible(true); emit this->startOneKeyClean(); } else { clean_button->setVisible(false); back_button->setVisible(false); emit this->sendCleanSignal(); } } void MainTopWidget::onEndButtonClicked() { if (m_isMain) { result_label->setText(tr("The lastest scan time is ") + scanFinishTime); loading_label->stopLoading(); scan_button->setVisible(true); scan_button->setEnabled(true); clean_button->setVisible(false); back_button->setVisible(false); suggest_label->setVisible(true); scan_result_label->setVisible(false); result_label->setVisible(true); doing_label->setVisible(false); } else { doing_label->setVisible(false); back_button->setVisible(false); loading_label->stopLoading(); scan_button->setVisible(true); scan_button->setEnabled(true); clean_button->setVisible(false); // back_button->hide(); suggest_label->setVisible(true); // result_label->show(); emit this->showMainData(); } } void MainTopWidget::receivePolicyKitSignal(bool status) { /*display Clean Animation status = true:ok status = false:cacel */ if(status)//ok { clean_button->setVisible(true); clean_button->setEnabled(false); back_button->setVisible(false); scan_button->setVisible(false); loading_label->startLoading(); suggest_label->setVisible(false); doing_label->setText(tr("Ready to Cleanup......"));//准备清理...... doing_label->setVisible(true); } else { clean_button->setVisible(true); back_button->setVisible(true); } } void MainTopWidget::writeFixCleanDate() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 pSettings->beginGroup("OneKeyClean"); pSettings->setValue("CleanDate", str); pSettings->setValue("Flag", "1"); pSettings->endGroup(); pSettings->sync(); } QString MainTopWidget::getFixCleanDate() { pSettings->beginGroup("OneKeyClean"); QString value = pSettings->value("CleanDate").toString(); pSettings->endGroup(); pSettings->sync(); return value; } QString MainTopWidget::getCurrentDateTime() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 return str; } void MainTopWidget::writeSafeScanDate() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 pSettings->beginGroup("OneKeyClean"); pSettings->setValue("ScanDate", str); pSettings->setValue("Flag", "0"); pSettings->endGroup(); pSettings->sync(); } QString MainTopWidget::getSafeScanDate() { pSettings->beginGroup("OneKeyClean"); QString value = pSettings->value("ScanDate").toString(); pSettings->endGroup(); pSettings->sync(); return value; } QString MainTopWidget::getOneKeyFlag() { pSettings->beginGroup("OneKeyClean"); QString value = pSettings->value("Flag").toString(); pSettings->endGroup(); pSettings->sync(); return value; } void MainTopWidget::setDoingLabelText(const QString &description, int defaultWidth) { QFont font; font.setPixelSize(20); const QFontMetrics fm(font); QString elided_text = fm.elidedText(description, Qt::ElideRight, defaultWidth); doing_label->setText(elided_text); } youker-assistant/src/settingwidget.cpp0000664000175000017500000005521313260315532017207 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "settingwidget.h" #include #include #include "../setting/settinglistview.h" #include "../setting/settingmodel.h" #include "../setting/settingdelegate.h" SettingWidget::SettingWidget(/*QStringList cpulist, QString cpu, */QString cur_desktop, /*bool has_battery, */QWidget *parent) : QWidget(parent) // ,m_cpuList(cpulist) // ,m_currentCpu(cpu) ,desktop(cur_desktop) // ,battery(has_battery) { this->setFixedSize(900, 403); // setStyleSheet("background-color: rgba(155, 255, 255, .238);"); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); itemSpace = 20; m_settingModel = new SettingModel; m_settingListView = new SettingListView; m_settingListView->setItemDelegate(new SettingDelegate); m_settingListView->setModel(m_settingModel); m_settingListView->setFixedSize(120 * 6 + (6+1)*itemSpace + 2, 400);//每行放6个item,间隔为20,每个item的宽度为120 QVBoxLayout *navLayout = new QVBoxLayout(this); navLayout->addWidget(m_settingListView); navLayout->setSpacing(0); navLayout->setMargin(0); navLayout->setContentsMargins(20, 1, 20, 1); connect(m_settingListView, SIGNAL(entered(QModelIndex)), this, SLOT(onSettingItemEntered(QModelIndex))); connect(m_settingListView, SIGNAL(entered(QModelIndex)), m_settingModel, SLOT(setCurrentItem(QModelIndex))); connect(m_settingListView, SIGNAL(clicked(QModelIndex)), this, SLOT(onSettingItemClicked(QModelIndex)), Qt::QueuedConnection); m_settingModel->addItem("ThemePage"); m_settingModel->addItem("IconPage"); m_settingModel->addItem("MousePage"); m_settingModel->addItem("SoundPage"); m_settingModel->addItem("PanelPage"); m_settingModel->addItem("MenuPage"); m_settingModel->addItem("WindowPage"); m_settingModel->addItem("FontPage"); m_settingModel->addItem("TouchPadPage"); m_settingModel->addItem("EnergyPage"); m_settingModel->addItem("FMPage"); stacked_widget = new QStackedWidget(this); stacked_widget->setFixedSize(900, 403); // stacked_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); stacked_widget->setVisible(false); //this->qtui = NULL; } SettingWidget::~SettingWidget() { /*if(qtui != NULL) { delete qtui; qtui = NULL; }*/ } void SettingWidget::onSettingItemClicked(const QModelIndex &index) { if (!index.isValid()) return; QString m_currentModuleName = index.data().toString(); if (m_currentModuleName.isEmpty() || m_currentModuleName.isNull()) return; //qDebug() << "onSettingItemClicked:" << m_currentModuleName; for (int i = 0; i < stacked_widget->count(); i++) { if (SettingModulePage *page = static_cast(stacked_widget->widget(i))) { if (page->settingModuleName() == m_currentModuleName) { QPointer panel(page); if (panel.isNull()) { continue; } page->initSettingData(); if (m_settingListView->isVisible()) m_settingListView->setVisible(false); if (!stacked_widget->isVisible()) stacked_widget->setVisible(true); emit changeActionPage(m_currentModuleName); stacked_widget->setCurrentWidget(page); break; } } } } void SettingWidget::onSettingItemEntered(const QModelIndex &index) { /*if (!index.isValid()) return; qDebug() << "onSettingItemEntered:" << index.data().toString();*/ } void SettingWidget::initSettingsUI(QStringList cpulist, QString cpu, bool has_battery/*, QString skin*/) { m_cpuList = cpulist; m_currentCpu = cpu; battery = has_battery; theme_widget = new ThemeWidget(this); icon_widget = new IconWidget(this, desktop); mouse_widget = new MouseWidget(this, desktop); sound_widget = new SoundWidget(this, desktop); // animation_widget = new AnimationWidget(this, systemProxy, p_mainwindow); launcher_widget = new MenuWidget(this, desktop); panel_widget = new PanelWidget(this, desktop, battery); window_widget = new WindowWidget(this, desktop); font_widget = new FontWidget(this, p_mainwindow, desktop, "");//TODO:read skin from ini file touchpad_widget = new TouchpadWidget(this, desktop); // deadpixel_widget = new DeadpixelWidget(this); conserve_widget = new EnergyWidget(m_cpuList, m_currentCpu, desktop, battery, this); nautilus_widget = new FileManagerWidget(this); stacked_widget->addWidget(theme_widget); stacked_widget->addWidget(icon_widget); stacked_widget->addWidget(mouse_widget); stacked_widget->addWidget(sound_widget); // stacked_widget->addWidget(animation_widget); stacked_widget->addWidget(launcher_widget); stacked_widget->addWidget(panel_widget); stacked_widget->addWidget(window_widget); stacked_widget->addWidget(font_widget); stacked_widget->addWidget(touchpad_widget); stacked_widget->addWidget(conserve_widget); stacked_widget->addWidget(nautilus_widget); //theme // connect(this, SIGNAL(string_value_notify(QString,QString)), theme_widget, SLOT(themewidget_notify_string(QString,QString))); connect(this, SIGNAL(sendThemeList(QString,QStringList)), theme_widget, SLOT(onReceiveThemeList(QString,QStringList))); connect(theme_widget, SIGNAL(changeSystemTheme(QString)), this, SIGNAL(changeSystemTheme(QString))); connect(theme_widget, SIGNAL(requestThemeData()), this, SIGNAL(requestThemeData())); //icon // connect(this, SIGNAL(string_value_notify(QString,QString)), icon_widget, SLOT(iconwidget_notify_string(QString,QString))); // connect(this, SIGNAL(bool_value_notify(QString,bool)), icon_widget, SLOT(iconwidget_notify_bool(QString,bool))); connect(this, SIGNAL(sendIconThemeList(QString,QStringList)), icon_widget, SLOT(onReceiveIconThemeList(QString,QStringList))); connect(this, SIGNAL(sendDisplayIconValue(bool,bool,bool,bool,bool)), icon_widget, SLOT(onReceiveDisplayIconValue(bool,bool,bool,bool,bool))); connect(icon_widget, SIGNAL(resetIconTheme(QString)), this, SIGNAL(resetIconTheme(QString))); connect(icon_widget, SIGNAL(displayComputerIcon(bool)), this, SIGNAL(displayComputerIcon(bool))); connect(icon_widget, SIGNAL(displayFolderIcon(bool)), this, SIGNAL(displayFolderIcon(bool))); connect(icon_widget, SIGNAL(displayNetworkIcon(bool)), this, SIGNAL(displayNetworkIcon(bool))); connect(icon_widget, SIGNAL(displayRecycleBinIcon(bool)), this, SIGNAL(displayRecycleBinIcon(bool))); connect(icon_widget, SIGNAL(displayDiskIcon(bool)), this, SIGNAL(displayDiskIcon(bool))); connect(icon_widget, SIGNAL(requestIconData()), this, SIGNAL(requestIconData())); //mouse // connect(this, SIGNAL(string_value_notify(QString,QString)), mouse_widget, SLOT(mousewidget_notify_string(QString,QString))); // connect(this, SIGNAL(int_value_notify(QString,int)), mouse_widget, SLOT(mousewidget_notify_int(QString,int))); connect(mouse_widget, SIGNAL(requestMouseData()), this, SIGNAL(requestMouseData())); connect(this, SIGNAL(sendMouseThemeAndCusorSize(QString,QStringList,int)), mouse_widget, SLOT(onReceiveMouseThemeAndCusorSize(QString,QStringList,int))); connect(mouse_widget, SIGNAL(resetMouseCursorTheme(QString)), this, SIGNAL(resetMouseCursorTheme(QString))); connect(mouse_widget, SIGNAL(resetMouseCursorSize(int)), this, SIGNAL(resetMouseCursorSize(int))); //voice // connect(this, SIGNAL(string_value_notify(QString,QString)), sound_widget, SLOT(voicewidget_notify_string(QString,QString))); // connect(this, SIGNAL(bool_value_notify(QString,bool)), sound_widget, SLOT(voicewidget_notify_bool(QString,bool))); connect(sound_widget, SIGNAL(requestSoundData()), this, SIGNAL(requestSoundData())); connect(this, SIGNAL(sendSoundList(QString,QStringList)), sound_widget, SLOT(onSendSoundList(QString,QStringList))); connect(this, SIGNAL(sendEnableSoundValue(bool,bool,bool)), sound_widget, SLOT(onSendEnableSoundValue(bool,bool,bool))); connect(sound_widget, SIGNAL(resetVoiceTheme(QString)), this, SIGNAL(resetVoiceTheme(QString))); connect(sound_widget, SIGNAL(resetLoginTipVoice(bool)), this, SIGNAL(resetLoginTipVoice(bool))); connect(sound_widget, SIGNAL(resetEventVoice(bool)), this, SIGNAL(resetEventVoice(bool))); connect(sound_widget, SIGNAL(resetInputFeedbackVoice(bool)), this, SIGNAL(resetInputFeedbackVoice(bool))); //panel // connect(this, SIGNAL(string_value_notify(QString,QString)), panel_widget, SLOT(panelwidget_notify_string(QString,QString))); // connect(this, SIGNAL(bool_value_notify(QString,bool)), panel_widget, SLOT(panelwidget_notify_bool(QString,bool))); connect(panel_widget, SIGNAL(requestMateOrUnityPanelData(bool)), this, SIGNAL(requestMateOrUnityPanelData(bool))); connect(this, SIGNAL(sendMatePanelValue(bool,bool,bool,bool)), panel_widget, SLOT(onSendMatePanelValue(bool,bool,bool,bool))); connect(this, SIGNAL(sendUnityBlurAndTransparencyValue(int,double)), panel_widget, SLOT(onSendUnityBlurAndTransparencyValue(int,double))); connect(this, SIGNAL(sendUnityTimeValue(QString,QStringList,bool,bool,bool)), panel_widget, SLOT(onSendUnityTimeValue(QString,QStringList,bool,bool,bool))); connect(this, SIGNAL(sendUnityPanelPowerValue(QString,QStringList,bool,bool)), panel_widget, SLOT(onSendUnityPanelPowerValue(QString,QStringList,bool,bool))); connect(panel_widget, SIGNAL(resetPanelTransparencyValue(double)), this, SIGNAL(resetPanelTransparencyValue(double))); connect(panel_widget, SIGNAL(resetDateFormat(QString)), this, SIGNAL(resetDateFormat(QString))); connect(panel_widget, SIGNAL(resetShowBatteryIcon(QString)), this, SIGNAL(resetShowBatteryIcon(QString))); connect(panel_widget, SIGNAL(resetDashBlurExperimental(int)), this, SIGNAL(resetDashBlurExperimental(int))); connect(panel_widget, SIGNAL(resetDisplaySeconds(bool)), this, SIGNAL(resetDisplaySeconds(bool))); connect(panel_widget, SIGNAL(resetDisplayWeek(bool)), this, SIGNAL(resetDisplayWeek(bool))); connect(panel_widget, SIGNAL(resetDisplayDate(bool)), this, SIGNAL(resetDisplayDate(bool))); connect(panel_widget, SIGNAL(resetDisplayBatteryPercentage(bool)), this, SIGNAL(resetDisplayBatteryPercentage(bool))); connect(panel_widget, SIGNAL(resetDisplayBatteryTime(bool)), this, SIGNAL(resetDisplayBatteryTime(bool))); connect(panel_widget, SIGNAL(resetShowApplications(bool)), this, SIGNAL(resetShowApplications(bool))); connect(panel_widget, SIGNAL(resetShowDesktop(bool)), this, SIGNAL(resetShowDesktop(bool))); connect(panel_widget, SIGNAL(resetShowIcon(bool)), this, SIGNAL(resetShowIcon(bool))); connect(panel_widget, SIGNAL(resetShowPlaces(bool)), this, SIGNAL(resetShowPlaces(bool))); //launcher menu // connect(this, SIGNAL(string_value_notify(QString,QString)), launcher_widget, SLOT(launcherwidget_notify_string(QString,QString))); // connect(this, SIGNAL(bool_value_notify(QString,bool)), launcher_widget, SLOT(launcherwidget_notify_bool(QString,bool))); // connect(this, SIGNAL(int_value_notify(QString,int)), launcher_widget, SLOT(launcherwidget_notify_int(QString,int))); // connect(this, SIGNAL(double_value_notify(QString,double)), launcher_widget, SLOT(launcherwidget_notify_double(QString,double))); connect(launcher_widget, SIGNAL(requestMateOrUnityMenuData(bool)), this, SIGNAL(requestMateOrUnityMenuData(bool))); connect(this, SIGNAL(sendMatePanelIconValue(int,int,bool,bool)), launcher_widget, SLOT(onSendMatePanelIconValue(int,int,bool,bool))); connect(this, SIGNAL(sendUnityIconValue(int,bool,bool,double,int,QStringList)), launcher_widget, SLOT(onSendUnityIconValue(int,bool,bool,double,int,QStringList))); connect(this, SIGNAL(sendUnityLauncherPosition(QString,QStringList)), launcher_widget, SLOT(onSendUnityLauncherPosition(QString,QStringList))); connect(launcher_widget, SIGNAL(resetIconSizeValue(int)), this, SIGNAL(resetIconSizeValue(int))); connect(launcher_widget, SIGNAL(resetTransparencyValue(int)), this, SIGNAL(resetTransparencyValue(int))); connect(launcher_widget, SIGNAL(resetIconColouring(int)), this, SIGNAL(resetIconColouring(int))); connect(launcher_widget, SIGNAL(resetAutoHide(bool)), this, SIGNAL(resetAutoHide(bool))); connect(launcher_widget, SIGNAL(resetDisplayDesktopIcon(bool)), this, SIGNAL(resetDisplayDesktopIcon(bool))); connect(launcher_widget, SIGNAL(resetTopIconSizeValue(int)), this, SIGNAL(resetTopIconSizeValue(int))); connect(launcher_widget, SIGNAL(resetBottomIconSizeValue(int)), this, SIGNAL(resetBottomIconSizeValue(int))); connect(launcher_widget, SIGNAL(resetTopAutoHide(bool)), this, SIGNAL(resetTopAutoHide(bool))); connect(launcher_widget, SIGNAL(resetBottomAutoHide(bool)), this, SIGNAL(resetBottomAutoHide(bool))); connect(launcher_widget, SIGNAL(resetLauncherPosition(QString)), this, SIGNAL(resetLauncherPosition(QString))); //window connect(window_widget, SIGNAL(requesetWindowButtonAlign()), this, SIGNAL(requesetWindowButtonAlign())); connect(window_widget, SIGNAL(requesetMenusHaveIcons()), this, SIGNAL(requesetMenusHaveIcons())); connect(window_widget, SIGNAL(requesetWindowTitileTags()), this, SIGNAL(requesetWindowTitileTags())); connect(this, SIGNAL(sendWindowButtonAlign(QString)), window_widget, SLOT(onSendWindowButtonAlign(QString))); connect(this, SIGNAL(sendMenusHaveIcons(bool)), window_widget, SLOT(onSendMenusHaveIcons(bool))); connect(this, SIGNAL(sendWindowTitileTags(QString,QStringList,QStringList,QString,QString,QString)), window_widget, SLOT(onSendWindowTitileTags(QString,QStringList,QStringList,QString,QString,QString))); connect(window_widget, SIGNAL(resetMenusHaveIcon(bool)), this, SIGNAL(resetMenusHaveIcon(bool))); connect(window_widget, SIGNAL(resetTitlebarWheel(QString)), this, SIGNAL(resetTitlebarWheel(QString))); connect(window_widget, SIGNAL(resetTitlebarDoubleClick(QString)), this, SIGNAL(resetTitlebarDoubleClick(QString))); connect(window_widget, SIGNAL(resetMouseMiddleClick(QString)), this, SIGNAL(resetMouseMiddleClick(QString))); connect(window_widget, SIGNAL(resetMouseRightClick(QString)), this, SIGNAL(resetMouseRightClick(QString))); connect(window_widget, SIGNAL(resetWindowButtonLeftOrRightAlign(bool)), this, SIGNAL(resetWindowButtonLeftOrRightAlign(bool))); //font connect(font_widget, SIGNAL(requestFontData()), this, SIGNAL(requestFontData())); connect(this, SIGNAL(sendFontValue(QString)), font_widget, SLOT(onSendFontValue(QString))); connect(this, SIGNAL(sendDesktopFontValue(QString)), font_widget, SLOT(onSendDesktopFontValue(QString))); connect(this, SIGNAL(sendMonospaceFontValue(QString)), font_widget, SLOT(onSendMonospaceFontValue(QString))); connect(this, SIGNAL(sendDocumentFontValue(QString)), font_widget, SLOT(onSendDocumentFontValue(QString))); connect(this, SIGNAL(sendTitlebarFontValue(QString)), font_widget, SLOT(onSendTitlebarFontValue(QString))); connect(this, SIGNAL(sendFontSmoothAndAntialiasingValue(double,QString,QStringList,QString,QStringList)), font_widget, SLOT(onSendFontSmoothAndAntialiasingValue(double,QString,QStringList,QString,QStringList))); connect(font_widget, SIGNAL(setDefaultFontByName(QString)), this, SIGNAL(setDefaultFontByName(QString))); connect(font_widget, SIGNAL(setDesktopFontByName(QString)), this, SIGNAL(setDesktopFontByName(QString))); connect(font_widget, SIGNAL(setMonospaceFontByName(QString)), this, SIGNAL(setMonospaceFontByName(QString))); connect(font_widget, SIGNAL(setDocumentFontByName(QString)), this, SIGNAL(setDocumentFontByName(QString))); connect(font_widget, SIGNAL(setTitlebarFontByName(QString)), this, SIGNAL(setTitlebarFontByName(QString))); connect(font_widget, SIGNAL(resetFontZoomScalingValue(double)), this, SIGNAL(resetFontZoomScalingValue(double))); connect(font_widget, SIGNAL(resetFontHinting(QString)), this, SIGNAL(resetFontHinting(QString))); connect(font_widget, SIGNAL(resetFontAntialiasing(QString)), this, SIGNAL(resetFontAntialiasing(QString))); connect(font_widget, SIGNAL(restoreDefaultFont(bool)), this, SIGNAL(restoreDefaultFont(bool))); connect(font_widget, SIGNAL(restoreDesktopDefaultFont(bool)), this, SIGNAL(restoreDesktopDefaultFont(bool))); connect(font_widget, SIGNAL(restoreMonospaceDefaultFont(bool)), this, SIGNAL(restoreMonospaceDefaultFont(bool))); connect(font_widget, SIGNAL(restoreDocumentDefaultFont(bool)), this, SIGNAL(restoreDocumentDefaultFont(bool))); connect(font_widget, SIGNAL(restoreTitlebarDefaultFont(bool)), this, SIGNAL(restoreTitlebarDefaultFont(bool))); //touchpad connect(touchpad_widget, SIGNAL(requestMateOrUnityTouchpadData(bool)), this, SIGNAL(requestMateOrUnityTouchpadData(bool))); connect(this, SIGNAL(sendTouchPadValue(bool,bool,QString,int,QString)), touchpad_widget, SLOT(onSendTouchPadValue(bool,bool,QString,int,QString))); connect(touchpad_widget, SIGNAL(resetTouchpad(bool)), this, SIGNAL(resetTouchpad(bool))); connect(touchpad_widget, SIGNAL(resetHorizontalScrolling(bool)), this, SIGNAL(resetHorizontalScrolling(bool))); connect(touchpad_widget, SIGNAL(setScrollbarOverlayOrLegacyMode(bool)), this, SIGNAL(setScrollbarOverlayOrLegacyMode(bool))); connect(touchpad_widget, SIGNAL(setMateTouchscrollingMode(int)), this, SIGNAL(setMateTouchscrollingMode(int))); connect(touchpad_widget, SIGNAL(setUnityTouchscrollingMode(int)), this, SIGNAL(setUnityTouchscrollingMode(int))); //ac and battery connect(conserve_widget, SIGNAL(requestPowerAndBatteryData()), this, SIGNAL(requestPowerAndBatteryData())); connect(this, SIGNAL(sendIdleAndGammaData(double,QStringList,int,QString,QString,QString,QStringList)), conserve_widget, SLOT(onSendIdleAndGammaData(double,QStringList,int,QString,QString,QString,QStringList))); connect(this, SIGNAL(sendLockAndSleepData(bool,QString,QStringList,QString,QString,QString,QString,QStringList,QString)), conserve_widget, SLOT(onSendLockAndSleepData(bool,QString,QStringList,QString,QString,QString,QString,QStringList,QString))); connect(conserve_widget, SIGNAL(resetScreenGammaValue(double)), this, SIGNAL(resetScreenGammaValue(double))); connect(conserve_widget, SIGNAL(resetBrightnessValue(int)), this, SIGNAL(resetBrightnessValue(int))); connect(conserve_widget, SIGNAL(resetIdleDelay(int,int)), this, SIGNAL(resetIdleDelay(int,int))); connect(conserve_widget, SIGNAL(resetLockEnabled(bool)), this, SIGNAL(resetLockEnabled(bool))); connect(conserve_widget, SIGNAL(resetLockDelay(int,int)), this, SIGNAL(resetLockDelay(int,int))); connect(conserve_widget, SIGNAL(setCurrentCriticalLow(QString)), this, SIGNAL(setCurrentCriticalLow(QString))); connect(conserve_widget, SIGNAL(setCurrentLidBattery(QString)), this, SIGNAL(setCurrentLidBattery(QString))); connect(conserve_widget, SIGNAL(setCurrentLidAC(QString)), this, SIGNAL(setCurrentLidAC(QString))); connect(conserve_widget, SIGNAL(resetSleepTimeoutBattery(int,int)), this, SIGNAL(resetSleepTimeoutBattery(int,int))); connect(conserve_widget, SIGNAL(resetSleepTimeoutAC(int,int)), this, SIGNAL(resetSleepTimeoutAC(int,int))); connect(conserve_widget, SIGNAL(resetSleepTimeoutDisplayBattery(int,int)), this, SIGNAL(resetSleepTimeoutDisplayBattery(int,int))); connect(conserve_widget, SIGNAL(resetSleepTimeoutDisplayAC(int,int)), this, SIGNAL(resetSleepTimeoutDisplayAC(int,int))); connect(conserve_widget, SIGNAL(setCurrentCpuMode(QString)), this, SIGNAL(setCurrentCpuMode(QString))); //file manager connect(nautilus_widget, SIGNAL(requestFileManagerData()), this, SIGNAL(requestFileManagerData())); connect(this, SIGNAL(sendFileManagerData(bool,bool,bool,bool,int,int,int)), nautilus_widget, SLOT(onSendFileManagerData(bool,bool,bool,bool,int,int,int))); connect(nautilus_widget, SIGNAL(resetLocationReplacePathbar(bool)), this, SIGNAL(resetLocationReplacePathbar(bool))); connect(nautilus_widget, SIGNAL(resetAutoMountMedia(bool)), this, SIGNAL(resetAutoMountMedia(bool))); connect(nautilus_widget, SIGNAL(resetAutoOpenFolder(bool)), this, SIGNAL(resetAutoOpenFolder(bool))); connect(nautilus_widget, SIGNAL(resetPromptAutorunPrograms(bool)), this, SIGNAL(resetPromptAutorunPrograms(bool))); connect(nautilus_widget, SIGNAL(resetThumbnailIconSize(int)), this, SIGNAL(resetThumbnailIconSize(int))); connect(nautilus_widget, SIGNAL(resetThumbnailCacheTime(int)), this, SIGNAL(resetThumbnailCacheTime(int))); connect(nautilus_widget, SIGNAL(resetThumbnailCacheSize(int)), this, SIGNAL(resetThumbnailCacheSize(int))); } void SettingWidget::on_string_value_notify(QString key, QString value) { if (key == "launcher-position" && launcher_widget) { launcher_widget->launcherwidget_notify_string(key, value); } } void SettingWidget::on_bool_value_notify(QString key, bool value) { if (key == "auto-hide-top" || key == "auto-hide-bottom") { if (launcher_widget) launcher_widget->launcherwidget_notify_bool(key, value); } } void SettingWidget::on_int_value_notify(QString key, int value) { if (key == "icon-size" || key == "launcher-hide-mode" || key == "backlight-mode" || key == "size-top" || key == "size-bottom") { if (launcher_widget) { launcher_widget->launcherwidget_notify_int(key, value); } } } void SettingWidget::on_double_value_notify(QString key, double value) { if (key == "launcher-opacity" && launcher_widget) { launcher_widget->launcherwidget_notify_double(key, value); } } void SettingWidget::resetSkin(QString skin) { // if(font_widget != NULL) // font_widget->resetCurrentSkin(skin); } /*void SettingWidget::startMonitorCheck() { if (this->qtui) { delete this->qtui; this->qtui = NULL; } this->qtui = new QUIBO(); }*/ void SettingWidget::displaySettingHomePage() { m_settingListView->setVisible(true); stacked_widget->setVisible(false); } youker-assistant/src/titlewidget.cpp0000664000175000017500000000767113260315532016660 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "titlewidget.h" #include "mainwindow.h" TitleWidget::TitleWidget(QWidget *parent, QString arch, QString os) : QWidget(parent) { this->setFixedSize(900, 36); min_button = new SystemButton(); close_button = new SystemButton(); skin_button = new SystemButton(); main_menu_button = new SystemButton(); min_button->loadPixmap(":/sys/res/sysBtn/min_button.png"); close_button->loadPixmap(":/sys/res/sysBtn/close_button.png"); skin_button->loadPixmap(":/sys/res/sysBtn/skin_button.png"); main_menu_button->loadPixmap(":/sys/res/sysBtn/main_menu.png"); min_button->setFocusPolicy(Qt::NoFocus); close_button->setFocusPolicy(Qt::NoFocus); skin_button->setFocusPolicy(Qt::NoFocus); main_menu_button->setFocusPolicy(Qt::NoFocus); QHBoxLayout *title_layout = new QHBoxLayout(); // if(arch == "aarch64" || os == "Kylin" || os == "YHKylin") // { title_layout->addWidget(main_menu_button, 0, Qt::AlignTop); title_layout->addWidget(skin_button, 0, Qt::AlignTop); title_layout->addWidget(min_button, 0, Qt::AlignTop); title_layout->addWidget(close_button, 0, Qt::AlignTop); // } // else // { // title_layout->addWidget(close_button, 0, Qt::AlignTop); // title_layout->addWidget(min_button, 0, Qt::AlignTop); // title_layout->addWidget(skin_button, 0, Qt::AlignTop); // title_layout->addWidget(main_menu_button, 0, Qt::AlignTop); // } title_layout->addStretch(); title_layout->setSpacing(0); title_layout->setContentsMargins(0, 0, 5, 0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addLayout(title_layout); main_layout->setSpacing(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); is_move = false; } TitleWidget::~TitleWidget() { if(min_button != NULL) { delete min_button; min_button = NULL; } if(close_button != NULL) { delete close_button; close_button = NULL; } if(skin_button != NULL) { delete skin_button; skin_button = NULL; } if(main_menu_button != NULL) { delete main_menu_button; main_menu_button = NULL; } } void TitleWidget::initConnect() { connect(min_button, SIGNAL(clicked()), p_mainwindow, SLOT(showMinimized())); connect(close_button, SIGNAL(clicked()), this, SIGNAL(closeApp())); connect(skin_button, SIGNAL(clicked()), p_mainwindow, SLOT(openSkinCenter())); connect(main_menu_button, SIGNAL(clicked()), p_mainwindow, SLOT(showMainMenu())); } /*void TitleWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(0.05); int penWidth = 1; QPainterPath framePath; framePath.addRoundedRect(QRect(rect().x() + penWidth, rect().y() + penWidth, rect().width() - penWidth * 2, rect().height() - penWidth * 2), 4, 4);//背景弧度 painter.setClipPath(framePath); QPen framePen; framePen.setColor(QColor("#F5F5F5")); painter.setOpacity(0.2); painter.drawPath(framePath); }*/ youker-assistant/src/toolkits.h0000664000175000017500000000314013260315532015633 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 TOOLKITS_H #define TOOLKITS_H #include #include #include #include "alertdialog.h" class Toolkits : public QObject { Q_OBJECT public: explicit Toolkits(QObject *parent = 0); //启动alert提示 Q_INVOKABLE void alertMSG(const QString &alertText); private: int mainwindow_width; int mainwindow_height; int alert_width; int alert_height; //本次alert的x坐标 int alert_x; //保额次alert的y坐标 int alert_y; //alert message提示框 AlertDialog *alertBG; //alert提示框timer QTimer *alertTimer; //alert提示框隐藏timer QTimer *alertDelayTimer; //alert提示框GOE QGraphicsOpacityEffect *alertGOE; //alert提示框透明度 float ao; //alert提示框y坐标 int ay; private slots: //alert提示步处理 void updateAlert(); //隐藏alert提示框 void hideAlert(); }; #endif // TOOLKITS_H youker-assistant/src/translation/0000775000175000017500000000000013263553572016165 5ustar fengfengyouker-assistant/src/translation/kylin-assistant_de.ts0000664000175000017500000036016713263553572022357 0ustar fengfeng AboutDialog About The software is still under development. Please visit About us Kylin Assistant Maintainer: Kylin Team <ubuntukylin-members@list.launchpad.net> Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions. for more information. Welcome everyone to join with us. kylin-assistant Homepage: Contributor Close AlertDialog Form BoxWidget Kylin Software Center No software center was found! CleanSubGroup Custom CleanerDetailWidget Apt Cache Clean Items Apt Cache count: Software Cache Clean Items Software Cache count: Thumbnails Cache Clean Items Thumbnails Cache Count: Firefox Cache Count: Chromium Cache Count: Firefox Cookies Clean Items Firefox Cookies Count: Chromium Cookies Clean Items Chromium Cookies Count: No garbage Firefox History Count: Chromium History Count: System History Count: Command history size: Firefox Cache Clean Items Chromium Cache Clean Items Debug log Items Debug log: Clean args is empty! CleanerMainWidget Cleanup Package Cache Cleanup Software Center Cache Cleanup Thumbnails Cache Cleanup FireFox Cache Cleanup Chromium Cache Cache Items System Cache Cleanup cache of system, software-center, thumbnails and browser Cleanup the Cookies saving in Firefox Cleanup the Cookies saving in Chromium Cookies Items Cookies Clean up user login information, support Firefox and Chromium browser Clean up the Firefox Internet records Clean up the Chromium Internet records Clean up the recently opened documents records Delete the command history Delete the debug logs Trace Items History trace Cleaning the internet and opened documents recently records Please select the items you want to clean Scan args is empty! CpuRateWidget CPU Occupancy rate Idle rate The running time of system The idle time of system EnergyWidget CPU FM mode: Ondemand Powersave Performance Adjust gamma Adjust brightness Time before session is considered idle Lock screen Lock delay Battery critical low action Laptop lid close action on battery Laptop lid close action on AC Sleep timeout PC when on battery Sleep timeout PC when on AC Sleep timeout display when on battery Sleep timeout display when on AC suspend shutdown nothing 5 minutes 10 minutes 20 minutes Half an hour 1 hour 2 hours never 1 minute 2 minutes 3 minutes 30 seconds Turn off the screen FileManagerWidget Display entry location Automatically mount media Automatically open a folder Prompt autorun programs Thumbnail icon size (pixels) Thumbnail cache time (days) Maximum thumbnail cache size (MB) FileSystemDialog Refresh FileSystemListWidget Device Directory Type Total Free Available Used No File System Info FontWidget Click here to change font Default Font Desktop Font Monospace Font Document Font Titlebar Font Global Font Scaling Hinting Antialiasing Restore IconWidget Icon theme Computer Home Folder Network Trash Mounted Volumes InfoWidget Computer Desktop CPU Memory Motherboard HD NIC VGA Audio Computer Info Desktop Info CPU Info Memory Info Memory Info %1 Board Info HardWare Info HardWare Info %1 NIC Info NIC Info %1 Monitor Info Monitor Info %1 Audio Info Audio Info %1 Battery Info Driver Info Battery Device Driver Sensor KylinFontDialog Current Font Font Style Size View OK Cancel Tips You haven't change the font, please choose the font! Font Dialog KylinMenu Check and update Forum Help Feedback About us KylinSwitcher ON OFF MainBottomWidget Current Version Number Update to the lastest version, make it work better updating on the backend Common toolbox Fast and practical, making the system more personalized Upgrade is complete Updating on the backend MainTopWidget The lastest cleanup time is The lastest scan time is You have not implemented the one key scan and clean-up operation. Kylin Assistant Start Scan Start Cleanup Back Scanning...... Quick clean up system trash, saving disk space and improving the system efficiency! Scan Over Regular cleaning, let your computer remains the relaxed state Clean OK Cleaning: , Percent is: %, Status is: Clean Firefox history...... Clean Chromium history...... Clean system history...... Clean apt...... Start clean apt...... Clean Firefox Cookie: Clean Chromium Cookie: does not exist Chromium Browser is running...... Cache Scan OK Cookies Scan OK History Scan OK Packages Scan OK Error: Firefox Browser does not be installed Chromium Browser does not be installed Chromium Browser is running Scanning: history trace; browser cookies. browser cookies; garbage. history trace. No garbage. Cleaning...... Garbage Cleanup OK...... History Cleanup OK...... Cookies Cleanup OK...... Cleanup Cookies: ; Garbage: ; Historical records: Cleaning up history trace of Firefox... Firefox history trace had been cleared! Cleaning up history trace of Chromium... Chromium history trace had been cleared! Cleaning up Cookies of Firefox... Firefox Cookies had been cleared! Cleaning up Cookies of Chromium... Chromium Cookies had been cleared! Apt cache had been cleared! Cleaning up Apt cache: Software Center cache had been cleared! Cleaning up Software Center cache: Ready to Cleanup...... MainWindow Kylin Assistant Understand hardware information, provide more convenient channel to obtain hardware information You can perform a full range of customized systems based on personal preferences Provide a practical and lightweight tool, create fast and convenient experience for you MemoryCircle Memory Swap Used(Percent) Total %1(%2%) MemoryWidget Memory MenuWidget Launcher icon size Launcher hide mode Display desktop icon Launcher Transparency Icon Background Top panel icon size Top panel auto hide Bottom panel icon size Bottom panel auto hide Launcher position MiddleWidget Home Cleanup Sysinfo Feature Toolkits MonitorTitleWidget Kylin System Monitor Processes Resources File Systems Cancel Enter the relevant info of process MouseWidget Mouse Pointer Theme Cursor Pointer Size Small Size Big Size NetworkFlow Receiving Total Received Sending Receive Send Total Sent NetworkWidget Network PanelWidget Dash background blur type Panel Transparency Date & time format Display seconds Display week Display the date Display battery icon Display battery percentage Display battery remaining time Smart blur Static blur Clear Show applications Show system Show places Show icon ProcessCategory Active Processes My Processes All Processes ProcessDialog End process Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended. Are you sure to continue? Cancel Kill process Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed. Are you sure to continue? Stop process Continue process Very High High Normal Low Very Low Custom Change Priority Properties Change Priority of Process %1 (PID: %2) ProcessListItem Stopped Suspend Zombie No response Uninterruptible ProcessListWidget Process Name User Status CPU ID Command Line Memory Priority No search result ProcessManager System Monitor Help user to kill process PropertiesDialog OK QObject Running Stopped Zombie Uninterruptible Sleeping Very High High Normal Low Very Low Very High Priority High Priority Normal Priority Low Priority Very Low Priority Choose the theme what you want Set the desktop icon theme and the visibility of desktop icons Replace the theme and size of the mouse pointer, and theme change need to restart system Set the sound theme you want Setting the panel mode of auto hide and icon size Manage display of the start menu Window Manager settings According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings Setting the relevant properties of your touchpad,make the operation more convenient Save energy to let the computer longer standby time Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked Audio Model Vendor Bus Address Audio Driver Device Name Manufacturer Model Technology Voltage Energy Designed Energy Full Energy Now Serial Number Motherboard Model Motherboard Vendor BIOS Vendor BIOS Version Release Date CD-ROM Model Firmware Version CPU Socket/Slot Maximum Frequency Current Frequency FSB Core Number Thread L1 Cache L2 Cache phytium 4 cores 4 thread/core Desktop Environment Host Name Memery Capacity Terminal Distribution Language User Home Folder Host bridge VGA Model USB Model Communication Model Ethernet Model PCI bridge ISA bridge SATA Model SMBus System peripheral Driver in use existing drivers IDE interface SP controller Network controller Multimedia audio controller HDD Model HDD Vendor HDD Capacity Slot Number Memory Model Memory Size Data Width Memory Info Graphics Card Model Current Graphics Card Graphics Card Vendor Graphics Driver Gamma Screen Size(inch) Max Resolution Current Interface Monitor Model Visual Area Support Interface Monitor Manufacturers Date of production/Week Date of production/Year NIC Model NIC Driver IP Address Mac Address Connection Status Max Bandwidth WLan NIC Driver WLan NIC Model Device Name: VNIC NetType Ethernet interface Wireless interface Version Hostname Running Time OS Types OS Version Kernel Bit Kernel Version Kernel Arch 32bit 64bit YHKylin community Memory reference voltage SATA controller voltage Memory voltage CPU pin voltage Bridge voltage CPU core voltage CPU temperature Motherboard temperature CPU fan speed ThemeSetting IconSetting MousePointer SoundEffect Panel StartMenu Window FontSetting Touchpad Energy saving File manager byte byte/s bytes bytes/s KiB KiB/s MiB MiB/s GiB GiB/s TiB TiB/s %1hours %1hour %1minutes %1minute %1seconds %1second %1day %1days User name: Process name: Command line: CPU Time: Started Time: QUIBO Form ReniceDialog Nice value: Note: The priority of a process is given by its nice value. A lower nice value corresponds to a higher priority. Cancel Change Priority ResourcesCategory CPU Memory Network SelectListWidget Clean Items: ShredDialog Kylin Shred Manager Shred Manager No select any file which need to be shredded Shred File Deselect Select file! Shred successfully! Shred failed! ShredManager Shred Manager Delete files makes it unable to recover SoundWidget Sound theme Login tone Event sounds Input feedback sounds StartupManager Startup Manager Help user to manager application startup items StartupTitleWidget Kylin Startup Manager StartupWidget Kylin Startup Manager StartupWorker No name No description SystemMonitor Kylin System Monitor ThemeWidget Please choose theme which you need TopBaseWidget There may be a mistake. Kylin Assistant Back TouchpadWidget Enable touchpad Enable horizontal scrolling Scrollbar type Touchpad scrolling mode Features Type Standard Type Disabled Edge Scrolling Two-finger Scrolling WindowWidget Arrangement of buttons on the titlebar Menu with icons Titlebar mouse wheel action Titlebar double-click action Titlebar middle-click action Titlebar right-click action Left Right youker-assistant/src/translation/kylin-assistant_es.qm0000664000175000017500000000002713260315532022334 0ustar fengfeng-HU,HU&<HUWHU^HUKrdBMe%QhR)SgUSgiS-dSmaZ*XZxuS2T*֍I֍}ص Tf5I+DLH+sEys+ye!ɴ!YOyS+| 1%EVWօ?wWZVZ~f'&x"$_kd#/Ւ p?QeuTC6/ kvl їu]4jDK |{zq1("k=6KE>9I}iAO#SjT yW,<rYSapj#|CsWt0T.7s=̤NΉz3bK@ =CZwB ("bn  +N.8_I}imTxolq1EqJywA%I*~IIIQI}I$0If.3$I]]Rϕ qUh!oc5o$M GC\%߶Jc߶_(7+ޢ RvEbYP`He0I A0ӣ n);7<)=Y+-+7k@_zGnKSPOgZ^n'KtY5st}A(~ZngZdi{D7\FUC9n"h { 1nRe.LI^!羃PB/FjC r1 ;*Be5R@ \-PBɞdg3}mn{&51-_38:YE&@^%ZLp:tNiO~T:@\Y`qO& g)kkvlZy[0Z1%bv[(uU]>K  aaʶ#Dk>)+v؅;cy>f%v܄" 2g2 X ,Dj  <[ ?bS Gy> ZN `3A\ c0BPu lc lc, pS3 uy  wh7 d  ˒ VQ zU 3[R >! F L İLp Pr: ,4t eel @( @l_ Ty ;i9 }O $M 'm +H bPer e Ug( f f$ lJ md oNt 1 hnF E vV vw0 CUd + & lW l4 ݸBz  U 2a I= O = C  M  Q *2 )Mc ,b 6tu E}^P H"), [E5 aQi yr5 : l, s Ahf [- ®Lw Bc ۚHn 0UFz >-4 _ .* RtK 2) ^ NwY |O1  t' ܊_ nWG ny .> 2m 5o_G Ntvr cl emx wa . w Ra e; XV Xz /` )f H }{s ʼc ƾ T"ICJ*`iZ%u'],l3^6rt'k: |9n:N;cJ#@ ;bPQ3G"wd#j&Ro*ץjC.X6>enG@ā4IQywTb3OYq4Y/hgJ yG4G ;N`3XKpM0=ʱNe * -7ڍJ(LG"7 =i RbKf/u1V_SvNk>R_:Y'v|~ߏRoN0N;bTR~u(b7 Y^.Ru(b7[|~ߏۈL{t0vRM]QwYN|~WW>bkcNnt0|~ߏoxlNO`ogw 0|~QheOM[R60NR{tVh{IR09 Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions. AboutDialogb TyRW(N e[U fYRN_\F~_S elQsl Ubuntu Kylin [Q < The software is still under development. Please visit  AboutDialogL NoNvge\U^vS͙ k"^Y'u(b7Tr1Y}NwSN0RbKN;uS for more information. Welcome everyone to join with us. kylin-assistant Homepage:  AboutDialogQsNAbout AboutDialogQsNbNAbout us AboutDialogQsClose AboutDialog!s. Contributor AboutDialogRbKKylin Assistant AboutDialogd~b V <ubuntukylin-members@list.launchpad.net>?Maintainer: Kylin Team  AboutDialogForm AlertDialog oNN-_Kylin Software Center BoxWidgetlg b~R0oNN-_ No software center was found! BoxWidget[NICustom CleanSubGroupApt[XntyApt Cache Clean ItemsCleanerDetailWidgetApt[X`;epApt Cache count:CleanerDetailWidgetChromium [XntyChromium Cache Clean ItemsCleanerDetailWidget ChromiummOVh[X`;epChromium Cache Count:CleanerDetailWidget(Chromium Cookies ntyChromium Cookies Clean ItemsCleanerDetailWidget&Chromium Cookies`;epChromium Cookies Count:CleanerDetailWidgetChromiumSS_U`;epChromium History Count:CleanerDetailWidgetntSepN:zzClean args is empty!CleanerDetailWidgetT}NSS_UY'\Command history size:CleanerDetailWidget e_טyDebug log ItemsCleanerDetailWidget e_ Debug log:CleanerDetailWidgetFirefox [XntyFirefox Cache Clean ItemsCleanerDetailWidgetFirefoxmOVh[X`;epFirefox Cache Count:CleanerDetailWidget&Firefox Cookies ntyFirefox Cookies Clean ItemsCleanerDetailWidget$Firefox Cookies`;epFirefox Cookies Count:CleanerDetailWidgetFirefox SS_U`;epFirefox History Count:CleanerDetailWidgetlg bkcR0WW> No garbageCleanerDetailWidgetoNN-_[XntySoftware Cache Clean ItemsCleanerDetailWidgetoNN-_[X`;epSoftware Cache count:CleanerDetailWidget|~SSuՏ`;epSystem History Count:CleanerDetailWidget)ueV[XntyThumbnails Cache Clean ItemsCleanerDetailWidget)ueV[X`;epThumbnails Cache Count:CleanerDetailWidget[X y Cache ItemsCleanerMainWidgetntChromium_U&Clean up the Chromium Internet recordsCleanerMainWidgetntpkrЋ_U%Clean up the Firefox Internet recordsCleanerMainWidgetntgbS_veN_U.Clean up the recently opened documents recordsCleanerMainWidgetndN Q0n8b0-ri{I_UEClean up user login information, support Firefox and Chromium browserCleanerMainWidgetndmOVhT|~Ou(uՏ;Cleaning the internet and opened documents recently recordsCleanerMainWidgetndS0)ueVTmOVh[X{IACleanup cache of system, software-center, thumbnails and browserCleanerMainWidgetntchromium[XCleanup Chromium CacheCleanerMainWidgetntpkrmOVh[XCleanup FireFox CacheCleanerMainWidget ntS[XCleanup Package CacheCleanerMainWidgetntoNN-_[XCleanup Software Center CacheCleanerMainWidgetnt)ueV[XCleanup Thumbnails CacheCleanerMainWidget*ntChromiummOVhvCookies&Cleanup the Cookies saving in ChromiumCleanerMainWidgetntpkrmOVhvCookies%Cleanup the Cookies saving in FirefoxCleanerMainWidgetCookiesCookiesCleanerMainWidgetCookies y Cookies ItemsCleanerMainWidgetR dT}NSS_UDelete the command historyCleanerMainWidget R de_Delete the debug logsCleanerMainWidgetSSuՏ History traceCleanerMainWidget b``ntv y)Please select the items you want to cleanCleanerMainWidgetbkcSepN:zzScan args is empty!CleanerMainWidget|~[X System CacheCleanerMainWidget uՏ y Trace ItemsCleanerMainWidgetYtVhCPU CpuRateWidgetzzs Idle rate CpuRateWidgetS`u(sOccupancy rate CpuRateWidget |~zzeThe idle time of system CpuRateWidget |~ߏЈLeThe running time of system CpuRateWidget1 \e1 hour EnergyWidget1 R1 minute EnergyWidget 10 R 10 minutes EnergyWidget2 \e2 hours EnergyWidget2 R 2 minutes EnergyWidget 20 R 20 minutes EnergyWidget3 R 3 minutes EnergyWidget30 y 30 seconds EnergyWidget5 R 5 minutes EnergyWidget et\O^UN^Adjust brightness EnergyWidget etO=lP< Adjust gamma EnergyWidgetu5l`N%N eBattery critical low action EnergyWidgetCPUj!_ CPU FM mode: EnergyWidgetSJ\e Half an hour EnergyWidgetOu(u5nTN v[PeLaptop lid close action on AC EnergyWidgetOu(u5l`TN v[Pe"Laptop lid close action on battery EnergyWidget[^e Lock delay EnergyWidget[\O^U Lock screen EnergyWidgetROndemand EnergyWidget`'j!_ Performance EnergyWidgetwu5j!_ Powersave EnergyWidget"Ou(u5n zzkdeTu5lQewaw Sleep timeout PC when on AC EnergyWidget"Ou(u5l` zzkdeTu5lQewaw  Sleep timeout PC when on battery EnergyWidget"Ou(u5n zzkdeT\O^UlQewaw  Sleep timeout display when on AC EnergyWidget"Ou(u5l` zzkdeT\O^UlQewaw %Sleep timeout display when on battery EnergyWidgetW(kdeVQedO\RQs\O^U&Time before session is considered idle EnergyWidgetQs\O^UTurn off the screen EnergyWidgetNN never EnergyWidgetN Ytnothing EnergyWidgetu5nQsshutdown EnergyWidgetcwsuspend EnergyWidget Rc}ZOSAutomatically mount mediaFileManagerWidgetRbS_eNY9Automatically open a folderFileManagerWidget_QehFSN_hDisplay entry locationFileManagerWidgetgY')ueV[X\:[MB !Maximum thumbnail cache size (MB)FileManagerWidgetcy:RЈLvz ^Prompt autorun programsFileManagerWidget)ueV[XeY)ep Thumbnail cache time (days)FileManagerWidget)ueVVh\:[P} Thumbnail icon size (pixels)FileManagerWidgetR7eRefreshFileSystemDialogSu( AvailableFileSystemListWidgetYDeviceFileSystemListWidgetv_U DirectoryFileSystemListWidgetzzFreeFileSystemListWidgetlg SseN|~O`oNo File System InfoFileSystemListWidget`;epTotalFileSystemListWidget|{WTypeFileSystemListWidget]u(UsedFileSystemListWidgetS͕/ Antialiasing FontWidgetpQkdYfcb[WOSClick here to change font FontWidget؋[WOS Default Font FontWidgethLb[WOS Desktop Font FontWidgetehc[WOS Document Font FontWidget Qh\@[WOS)e>Global Font Scaling FontWidget^snHinting FontWidget{I[[WOSMonospace Font FontWidget`bY ؋Restore FontWidget hh[WOS Titlebar Font FontWidget{g:Computer IconWidget u(b7N;v_U Home Folder IconWidgetVhN; Icon theme IconWidgetc}SwMounted Volumes IconWidgetQ~Network IconWidgetVe6zTrash IconWidgetXSaAudio InfoWidgetXSaO`o Audio Info InfoWidget XSaO`o%1 Audio Info %1 InfoWidgetu5l`Battery InfoWidgetu5l`O`o Battery Info InfoWidgetN;gO`o Board Info InfoWidgetYtVhCPU InfoWidget YtVhO`oCPU Info InfoWidgetu5iComputer InfoWidgetu5i Computer Info InfoWidgethLbsXDesktop InfoWidget hLbsXO`o Desktop Info InfoWidgetYqR Device Driver InfoWidgetqRO`o Driver Info InfoWidgetxlvHD InfoWidgetxlvO`o HardWare Info InfoWidgetxlvO`o %1HardWare Info %1 InfoWidgetQ[XMemory InfoWidget Q[XgaO`o Memory Info InfoWidgetQ[XO`o %1Memory Info %1 InfoWidgetf>y:VhTf>SaO`o Monitor Info InfoWidgetf>y:VhTf>SaO`o %1Monitor Info %1 InfoWidgetN;g Motherboard InfoWidgetQSaNIC InfoWidgetQSaO`oNIC Info InfoWidgetQSaO`o %1 NIC Info %1 InfoWidgetxlNO aSensor InfoWidgetf>SaVGA InfoWidgetSmCancelKylinFontDialog_SRM[WOS Current FontKylinFontDialog[WOSFontKylinFontDialog [WOS[hF Font DialogKylinFontDialogxn[OKKylinFontDialogY'\SizeKylinFontDialogh<StyleKylinFontDialogcy:TipsKylinFontDialogVViewKylinFontDialog&`lg fe9[WOS bfe9v[WOS4You haven't change the font, please choose the font!KylinFontDialogQsNbNAbout us KylinMenuhgfeCheck and update KylinMenuS͙Feedback KylinMenuW[lBR Forum Help KylinMenu]QsOFF KylinSwitcher]_T/ON KylinSwitcher]Qw{Common toolboxMainBottomWidget _SRMrHg,SCurrent Version NumberMainBottomWidgetf_fY} |~fQwN*`'S7Fast and practical, making the system more personalizedMainBottomWidgetfegerHg, OoNfY}u(2Update to the lastest version, make it work betterMainBottomWidget kcW(TSSG~Updating on the backendMainBottomWidgetSG~[bUpgrade is completeMainBottomWidget kcW(TSSG~updating on the backendMainBottomWidget gamOVhCookies0 browser cookies. MainTopWidget gamOVhCookies browser cookies;  MainTopWidgetN [XW( does not exist MainTopWidget WW>0 garbage. MainTopWidget gaSSuՏ0 history trace. MainTopWidget gaSSuՏ history trace;  MainTopWidget % r`N:%, Status is:  MainTopWidget ^N:, Percent is:  MainTopWidgetWW> ; Garbage: MainTopWidget SS_U; Historical records: MainTopWidgetApt[Xnt[bApt cache had been cleared! MainTopWidgetVBack MainTopWidget [Xbkc[b Cache Scan OK MainTopWidgetlg [ChromiummOVh&Chromium Browser does not be installed MainTopWidget ChromiummOVhkcW(ЈLN-Chromium Browser is running MainTopWidget,ChromiummOVhkcW(ЈLN-......!Chromium Browser is running...... MainTopWidget0ChromiummOVhvCookiesnt[b"Chromium Cookies had been cleared! MainTopWidget*ChromiummOVhvSSuՏnt[b(Chromium history trace had been cleared! MainTopWidget(ntChromiummOVhCookieClean Chromium Cookie: MainTopWidget.ntChromiummOVhSS_U......Clean Chromium history...... MainTopWidget&ntFirefoxmOVhCookieClean Firefox Cookie: MainTopWidget,ntFirefoxmOVhSS_U......Clean Firefox history...... MainTopWidgetnt[kClean OK MainTopWidgetntApt......Clean apt...... MainTopWidgetnt|~SSuՏ......Clean system history...... MainTopWidgetkcW(ntApt[XCleaning up Apt cache:  MainTopWidget:kcW(ntChromiummOVhvCookies......"Cleaning up Cookies of Chromium... MainTopWidget8kcW(ntFirefoxmOVhvCookies......!Cleaning up Cookies of Firefox... MainTopWidgetkcW(ntoNN-_[X#Cleaning up Software Center cache:  MainTopWidget4kcW(ntChromiummOVhvSSuՏ......(Cleaning up history trace of Chromium... MainTopWidget2kcW(ntFirefoxmOVhvSSuՏ......'Cleaning up history trace of Firefox... MainTopWidgetkcW(nt.......Cleaning...... MainTopWidget kcW(nt Cleaning:  MainTopWidgetntNCookiesCleanup Cookies: MainTopWidget"Cookiesnt[b......Cookies Cleanup OK...... MainTopWidgetCookiesbkc[bCookies Scan OK MainTopWidgetError:  MainTopWidgetlg [FirefoxmOVh%Firefox Browser does not be installed MainTopWidget.FirefoxmOVhvCookiesnt[b!Firefox Cookies had been cleared! MainTopWidget&FirefoxmOVhSSuՏnt[b'Firefox history trace had been cleared! MainTopWidgetWW>nt[b......Garbage Cleanup OK...... MainTopWidgetSS_Unt[b......History Cleanup OK...... MainTopWidgetSS_Ubkc[bHistory Scan OK MainTopWidgetRbKKylin Assistant MainTopWidgetlg bkcR0WW>0 No garbage. MainTopWidget Sbkc[bPackages Scan OK MainTopWidget:N.nt|~WW> ^.`wxvzz |~ߏЈLfRg eHsSQuick clean up system trash, saving disk space and improving the system efficiency! MainTopWidgetQYnt......Ready to Cleanup...... MainTopWidget ~^8nt u5Ocg{g~vr`=Regular cleaning, let your computer remains the relaxed state MainTopWidgetbkc[b Scan Over MainTopWidgetkcW(bkc.....Scanning...... MainTopWidget kcW(bkc Scanning: MainTopWidgetoNN-_[Xnt[b'Software Center cache had been cleared! MainTopWidget_Ynt Start Cleanup MainTopWidget_Ybkc Start Scan MainTopWidget_YntApt......Start clean apt...... MainTopWidgetN Nk!ntef/The lastest cleanup time is  MainTopWidgetN Nk!bkcef/The lastest scan time is  MainTopWidget&`lg bgLN.bkcTN.ntdO\0AYou have not implemented the one key scan and clean-up operation. MainTopWidgetRbKKylin Assistant MainWindow(cO{]Ou(]Qw N:`bS _cweOvOSWProvide a practical and lightweight tool, create fast and convenient experience for you MainWindow:Nu5xlN~O`o N:u(b7cOfReOvSxlNO`on S_Understand hardware information, provide more convenient channel to obtain hardware information MainWindow(`SNh9cnN*NUY}[|~ߏۈLQheOMv[R6PYou can perform a full range of customized systems based on personal preferences MainWindow%1(%2%) MemoryCircleQ[XMemory MemoryCircleNcbSwap MemoryCircle`;Total MemoryCircle]Ou((v~Rk) Used(Percent) MemoryCircleQ[XMemory MemoryWidget^bgRBottom panel auto hide MenuWidget^bgVhY'\Bottom panel icon size MenuWidget f>y:hLbVhDisplay desktop icon MenuWidgetVhfoIcon Background MenuWidget T/RVhf^Launcher Transparency MenuWidgetT/RVhRLauncher hide mode MenuWidgetT/RVhVh\:[Launcher icon size MenuWidget T/RVhOMnLauncher position MenuWidgetvbgRTop panel auto hide MenuWidgetvbgVhY'\Top panel icon size MenuWidget|~ntCleanup MiddleWidget|~SFeature MiddleWidgetuHome MiddleWidget|~O`oSysinfo MiddleWidgetRY'QhToolkits MiddleWidgetSmCancelMonitorTitleWidgetQez vQsO`o"Enter the relevant info of processMonitorTitleWidgeteN|~ File SystemsMonitorTitleWidget|~vщVhKylin System MonitorMonitorTitleWidgetz  ProcessesMonitorTitleWidgetDn ResourcesMonitorTitleWidgetY'SBig Size MouseWidget QIhcY'\Cursor Pointer Size MouseWidget hcN;Mouse Pointer Theme MouseWidget\S Small Size MouseWidgetce6Receive NetworkFlowkcW(ce6 Receiving NetworkFlowSѐSend NetworkFlowkcW(SѐSending NetworkFlow `;]ce6Total Received NetworkFlow `;]Sѐ Total Sent NetworkFlowQ~Network NetworkWidget^j!|Clear PanelWidgetd}"hFfoj!||{WDash background blur type PanelWidget egeh<_Date & time format PanelWidget f>y:u5l`VhDisplay battery icon PanelWidgetf>y:u5l`v~RkDisplay battery percentage PanelWidgetf>y:u5l`u5eDisplay battery remaining time PanelWidgetf>y:yepDisplay seconds PanelWidgetf>y:egDisplay the date PanelWidgetf>y:fg Display week PanelWidget bgf^Panel Transparency PanelWidget f>y:^u(z ^Show applications PanelWidgetf>y:Vh Show icon PanelWidgetf>y:OMn Show places PanelWidgetf>y:|~ Show system PanelWidgetm;Rj!| Smart blur PanelWidgetY`j!| Static blur PanelWidget m;Rvz Active ProcessesProcessCategoryQhz  All ProcessesProcessCategorybvz  My ProcessesProcessCategorySmCancel ProcessDialog e9SOQH~Change Priority ProcessDialog(fe9z %1 (PID%2)vOQH~'Change Priority of Process %1 (PID: %2) ProcessDialog~~z Continue process ProcessDialog[NICustom ProcessDialog~g_z  End process ProcessDialogb~g_z S[epcnc_WO N-eOb^&ge[QhΖi0`^S~g_eT^vz 0 `xn[~~dO\Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended. Are you sure to continue? ProcessDialogHigh ProcessDialogg@k{z  Kill process ProcessDialogbg@k{z S[epcnc_WO N-eOb^&ge[QhΖi0`^Sg@k{eT^vz 0 `xn[~~dO\Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed. Are you sure to continue? ProcessDialogONLow ProcessDialogfnNormal ProcessDialog\^`' Properties ProcessDialogP\kbz  Stop process ProcessDialog^^8 Very High ProcessDialog^^8ONVery Low ProcessDialogeS^ No responseProcessListItem]P\kbStoppedProcessListItemP\kbSuspendProcessListItemN SN-eUninterruptibleProcessListItemPk{ZombieProcessListItemYtVhCPUProcessListWidgetT}NL Command LineProcessListWidgetIDIDProcessListWidgetQ[XMemoryProcessListWidget ed}"~gNo search resultProcessListWidgetOQH~PriorityProcessListWidgetz T  Process NameProcessListWidgetr`StatusProcessListWidgetu(b7UserProcessListWidget^.Ru(b7{tz Help user to kill processProcessManager |~vщVhSystem MonitorProcessManagerxn[OKPropertiesDialog%1Y)%1dayQObject%1Y)%1daysQObject%1\e%1hourQObject%1\e%1hoursQObject%1R%1minuteQObject%1R %1minutesQObject%1y%1secondQObject%1y %1secondsQObject32OM32bitQObject4h84 coresQObject 4~z /h8 4 thread/coreQObject64OM64bitQObjectTh9cnN*NUY}n|~ߞ؋[WOS SUQ`bY ؋c SN\[^v[WOS`bY R0nRMr`According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settingsQObjectXSaqR Audio DriverQObjectXSaWS Audio ModelQObject BIOSNUF BIOS VendorQObject BIOSrHg, BIOS VersionQObjectherGu5SBridge voltageQObject`;~W0W@ Bus AddressQObjectQIqWS CD-ROM ModelQObjectYtVhCPUQObjectCPU e CPU Time:QObject CPUh8u5SCPU core voltageQObjectCPUbGl CPU fan speedQObjectCPU{u5SCPU pin voltageQObject CPUn)^CPU temperatureQObject b`vN;Choose the theme what you wantQObjectT}NL Command line:QObject OcR6VhCommunication ModelQObjectcr`Connection StatusQObjecth8_epv Core NumberQObject_SRMN;Current FrequencyQObject_SRMf>SaCurrent Graphics CardQObject_SRMcSCurrent InterfaceQObjectepcn[^ Data WidthQObject uNeg/ThDate of production/WeekQObject uNeg/^tDate of production/YearQObjecthLbsXDesktop EnvironmentQObjectYT  Device NameQObject YT y Device Name:QObjectSшLrH DistributionQObject Ou(vqR Driver in useQObject  Energy DesignedQObjectne Energy FullQObject Energy NowQObjectwu5n Energy savingQObject NY*QcR6VhEthernet ModelQObject NY*QcSEthernet interfaceQObjectRMz`;~FSBQObject eN{tVh File managerQObjectVNrHg,Firmware VersionQObject[WOSn FontSettingQObjectO=lP<GammaQObjectGiBGiBQObject GiB/yGiB/sQObjectf>SaWSGraphics Card ModelQObject f>SaR6 UFGraphics Card VendorQObjectf>SaqRGraphics DriverQObjectxlv[ HDD CapacityQObjectxlvWS HDD ModelQObjectxlvSUF HDD VendorQObjectHighQObjectOQH~ High PriorityQObject u(b7N;v_U Home FolderQObjectN;g:T  Host NameQObjectN;he Host bridgeQObjectN;g:T HostnameQObject IDEcS IDE interfaceQObjectIPW0W@ IP AddressQObjectISAhe ISA bridgeQObjectVhn IconSettingQObjectQh8gg Kernel ArchQObject|~OMep Kernel BitQObjectQh8rHg,Kernel VersionQObjectKBKiBQObjectKB/yKiB/sQObject~[XL1 CacheQObject~[XL2 CacheQObjectLanguageQObjectONLowQObjectONOQH~ Low PriorityQObject MACW0W@ Mac AddressQObject{tT/RSUvf>y: Manage display of the start menuQObjectN{teN{tVh0laYg)ueV[Xeb\:[nN:-1 )ueV\N OntiManage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checkedQObjectSшLUF ManufacturerQObjectgY'^&[ Max BandwidthQObject gY'RsMax ResolutionQObjectgY'N;Maximum FrequencyQObjectQ[X[Memery CapacityQObject Q[XgaO`o Memory InfoQObjectQ[XWS Memory ModelQObjectQ[XY'\ Memory SizeQObject Q[XS€u5SMemory reference voltageQObjectQ[Xu5SMemory voltageQObjectMiBMiBQObject MiB/yMiB/sQObjectWSModelQObject f>y:VhR6 UFMonitor ManufacturersQObject f>y:VhWS Monitor ModelQObjectN;gWSMotherboard ModelQObjectN;gNUFMotherboard VendorQObjectN;gn)^Motherboard temperatureQObject hn MousePointerQObjectYZOScR6VhMultimedia audio controllerQObjectQSaqR NIC DriverQObjectQSaWS NIC ModelQObjectQSa|{WNetTypeQObject Q~cR6VhNetwork controllerQObjectfnNormalQObject fnOQH~Normal PriorityQObject dO\|~|{WOS TypesQObject dO\|~rHg, OS VersionQObjectPCIhe PCI bridgeQObjectbgPanelQObjectz T  Process name:QObjectS^eg Release DateQObject4fcb hcN;TY'\ N;fe9T/|~bMueHXReplace the theme and size of the mouse pointer, and theme change need to restart systemQObjectЈLN-RunningQObject c~ЈLe Running TimeQObjectSATAcR6Vh SATA ModelQObjectSATAcR6Vhu5SSATA controller voltageQObject |~{t`;~SMBusQObjectOSYtcR6Vh SP controllerQObjectwu5 u5_g:ef3Save energy to let the computer longer standby timeQObject\O^U\:[[ Screen Size(inch)QObject^RS Serial NumberQObject"nhLbVhN;ThLbVhvS`'>Set the desktop icon theme and the visibility of desktop iconsQObjectn`vXN;Set the sound theme you wantQObject"nbgRj!_TbgVhY'\1Setting the panel mode of auto hide and icon sizeQObject*njet`dxgvvQsn OdO\fROcwSSetting the relevant properties of your touchpad,make the operation more convenientQObjectwaw N-SleepingQObjectciS Slot NumberQObject c^ci Socket/SlotQObjectXeHg SoundEffectQObjectT/RSU StartMenuQObject_YN Started Time:QObject]P\kbStoppedQObjecte/ccSSupport InterfaceQObject|~YVSystem peripheralQObjectbg/ TechnologyQObjectu(b7T}NVhTerminalQObjectN;n ThemeSettingQObject~z ThreadQObjectTiBTiBQObject TiB/yTiB/sQObjectdxgTouchpadQObject USBcR6Vh USB ModelQObjectN SN-eUninterruptibleQObjectu(b7UserQObjectu(b7T  User name:QObjectVGAQ|[cR6Vh VGA ModelQObjectZbQSaVNICQObjectR6 UFVendorQObjectu5rHg,VersionQObject^^8 Very HighQObject ^^8OQH~Very High PriorityQObject^^8ONVery LowQObject ^^8ONOQH~Very Low PriorityQObjectSƗby Visual AreaQObjectu5SVoltageQObject e~QSaqRWLan NIC DriverQObjectQSaWSWLan NIC ModelQObjectzSWindowQObjectzS{tVhnWindow Manager settingsQObject e~QcSWireless interfaceQObjectly>S:rHYHKylin communityQObjectPk{ZombieQObject[WbyteQObject[W/ybyte/sQObject[WbytesQObject[W/ybytes/sQObject S vqRexisting driversQObjectށ~phytiumQObjectFormQUIBOSmCancel ReniceDialog e9SOQH~Change Priority ReniceDialogNice P< Nice value: ReniceDialogY_Note: ReniceDialogLz vOQH~u1[v nice Py:VhMenu with icons WindowWidgetSRight WindowWidgethhSQRO\Titlebar double-click action WindowWidgethhN-.RO\Titlebar middle-click action WindowWidgethh hnڏnRO\Titlebar mouse wheel action WindowWidgethhS.RO\Titlebar right-click action WindowWidgetyouker-assistant/src/translation/kylin-assistant_fr.qm0000664000175000017500000000002713260315532022334 0ustar fengfeng AboutDialog About The software is still under development. Please visit About us Kylin Assistant Maintainer: Kylin Team <ubuntukylin-members@list.launchpad.net> Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions. for more information. Welcome everyone to join with us. kylin-assistant Homepage: Contributor Close AlertDialog Form BoxWidget Kylin Software Center No software center was found! CleanSubGroup Custom CleanerDetailWidget Apt Cache Clean Items Apt Cache count: Software Cache Clean Items Software Cache count: Thumbnails Cache Clean Items Thumbnails Cache Count: Firefox Cache Count: Chromium Cache Count: Firefox Cookies Clean Items Firefox Cookies Count: Chromium Cookies Clean Items Chromium Cookies Count: No garbage Firefox History Count: Chromium History Count: System History Count: Command history size: Firefox Cache Clean Items Chromium Cache Clean Items Debug log Items Debug log: Clean args is empty! CleanerMainWidget Cleanup Package Cache Cleanup Software Center Cache Cleanup Thumbnails Cache Cleanup FireFox Cache Cleanup Chromium Cache Cache Items System Cache Cleanup cache of system, software-center, thumbnails and browser Cleanup the Cookies saving in Firefox Cleanup the Cookies saving in Chromium Cookies Items Cookies Clean up user login information, support Firefox and Chromium browser Clean up the Firefox Internet records Clean up the Chromium Internet records Clean up the recently opened documents records Delete the command history Delete the debug logs Trace Items History trace Cleaning the internet and opened documents recently records Please select the items you want to clean Scan args is empty! CpuRateWidget CPU Occupancy rate Idle rate The running time of system The idle time of system EnergyWidget CPU FM mode: Ondemand Powersave Performance Adjust gamma Adjust brightness Time before session is considered idle Lock screen Lock delay Battery critical low action Laptop lid close action on battery Laptop lid close action on AC Sleep timeout PC when on battery Sleep timeout PC when on AC Sleep timeout display when on battery Sleep timeout display when on AC suspend shutdown nothing 5 minutes 10 minutes 20 minutes Half an hour 1 hour 2 hours never 1 minute 2 minutes 3 minutes 30 seconds Turn off the screen FileManagerWidget Display entry location Automatically mount media Automatically open a folder Prompt autorun programs Thumbnail icon size (pixels) Thumbnail cache time (days) Maximum thumbnail cache size (MB) FileSystemDialog Refresh FileSystemListWidget Device Directory Type Total Free Available Used No File System Info FontWidget Click here to change font Default Font Desktop Font Monospace Font Document Font Titlebar Font Global Font Scaling Hinting Antialiasing Restore IconWidget Icon theme Computer Home Folder Network Trash Mounted Volumes InfoWidget Computer Desktop CPU Memory Motherboard HD NIC VGA Audio Computer Info Desktop Info CPU Info Memory Info Memory Info %1 Board Info HardWare Info HardWare Info %1 NIC Info NIC Info %1 Monitor Info Monitor Info %1 Audio Info Audio Info %1 Battery Info Driver Info Battery Device Driver Sensor KylinFontDialog Current Font Font Style Size View OK Cancel Tips You haven't change the font, please choose the font! Font Dialog KylinMenu Check and update Forum Help Feedback About us KylinSwitcher ON OFF MainBottomWidget Current Version Number Update to the lastest version, make it work better updating on the backend Common toolbox Fast and practical, making the system more personalized Upgrade is complete Updating on the backend MainTopWidget The lastest cleanup time is The lastest scan time is You have not implemented the one key scan and clean-up operation. Kylin Assistant Start Scan Start Cleanup Back Scanning...... Quick clean up system trash, saving disk space and improving the system efficiency! Scan Over Regular cleaning, let your computer remains the relaxed state Clean OK Cleaning: , Percent is: %, Status is: Clean Firefox history...... Clean Chromium history...... Clean system history...... Clean apt...... Start clean apt...... Clean Firefox Cookie: Clean Chromium Cookie: does not exist Chromium Browser is running...... Cache Scan OK Cookies Scan OK History Scan OK Packages Scan OK Error: Firefox Browser does not be installed Chromium Browser does not be installed Chromium Browser is running Scanning: history trace; browser cookies. browser cookies; garbage. history trace. No garbage. Cleaning...... Garbage Cleanup OK...... History Cleanup OK...... Cookies Cleanup OK...... Cleanup Cookies: ; Garbage: ; Historical records: Cleaning up history trace of Firefox... Firefox history trace had been cleared! Cleaning up history trace of Chromium... Chromium history trace had been cleared! Cleaning up Cookies of Firefox... Firefox Cookies had been cleared! Cleaning up Cookies of Chromium... Chromium Cookies had been cleared! Apt cache had been cleared! Cleaning up Apt cache: Software Center cache had been cleared! Cleaning up Software Center cache: Ready to Cleanup...... MainWindow Kylin Assistant Understand hardware information, provide more convenient channel to obtain hardware information You can perform a full range of customized systems based on personal preferences Provide a practical and lightweight tool, create fast and convenient experience for you MemoryCircle Memory Swap Used(Percent) Total %1(%2%) MemoryWidget Memory MenuWidget Launcher icon size Launcher hide mode Display desktop icon Launcher Transparency Icon Background Top panel icon size Top panel auto hide Bottom panel icon size Bottom panel auto hide Launcher position MiddleWidget Home Cleanup Sysinfo Feature Toolkits MonitorTitleWidget Kylin System Monitor Processes Resources File Systems Cancel Enter the relevant info of process MouseWidget Mouse Pointer Theme Cursor Pointer Size Small Size Big Size NetworkFlow Receiving Total Received Sending Receive Send Total Sent NetworkWidget Network PanelWidget Dash background blur type Panel Transparency Date & time format Display seconds Display week Display the date Display battery icon Display battery percentage Display battery remaining time Smart blur Static blur Clear Show applications Show system Show places Show icon ProcessCategory Active Processes My Processes All Processes ProcessDialog End process Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended. Are you sure to continue? Cancel Kill process Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed. Are you sure to continue? Stop process Continue process Very High High Normal Low Very Low Custom Change Priority Properties Change Priority of Process %1 (PID: %2) ProcessListItem Stopped Suspend Zombie No response Uninterruptible ProcessListWidget Process Name User Status CPU ID Command Line Memory Priority No search result ProcessManager System Monitor Help user to kill process PropertiesDialog OK QObject Running Stopped Zombie Uninterruptible Sleeping Very High High Normal Low Very Low Very High Priority High Priority Normal Priority Low Priority Very Low Priority Choose the theme what you want Set the desktop icon theme and the visibility of desktop icons Replace the theme and size of the mouse pointer, and theme change need to restart system Set the sound theme you want Setting the panel mode of auto hide and icon size Manage display of the start menu Window Manager settings According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings Setting the relevant properties of your touchpad,make the operation more convenient Save energy to let the computer longer standby time Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked Audio Model Vendor Bus Address Audio Driver Device Name Manufacturer Model Technology Voltage Energy Designed Energy Full Energy Now Serial Number Motherboard Model Motherboard Vendor BIOS Vendor BIOS Version Release Date CD-ROM Model Firmware Version CPU Socket/Slot Maximum Frequency Current Frequency FSB Core Number Thread L1 Cache L2 Cache phytium 4 cores 4 thread/core Desktop Environment Host Name Memery Capacity Terminal Distribution Language User Home Folder Host bridge VGA Model USB Model Communication Model Ethernet Model PCI bridge ISA bridge SATA Model SMBus System peripheral Driver in use existing drivers IDE interface SP controller Network controller Multimedia audio controller HDD Model HDD Vendor HDD Capacity Slot Number Memory Model Memory Size Data Width Memory Info Graphics Card Model Current Graphics Card Graphics Card Vendor Graphics Driver Gamma Screen Size(inch) Max Resolution Current Interface Monitor Model Visual Area Support Interface Monitor Manufacturers Date of production/Week Date of production/Year NIC Model NIC Driver IP Address Mac Address Connection Status Max Bandwidth WLan NIC Driver WLan NIC Model Device Name: VNIC NetType Ethernet interface Wireless interface Version Hostname Running Time OS Types OS Version Kernel Bit Kernel Version Kernel Arch 32bit 64bit YHKylin community Memory reference voltage SATA controller voltage Memory voltage CPU pin voltage Bridge voltage CPU core voltage CPU temperature Motherboard temperature CPU fan speed ThemeSetting IconSetting MousePointer SoundEffect Panel StartMenu Window FontSetting Touchpad Energy saving File manager byte byte/s bytes bytes/s KiB KiB/s MiB MiB/s GiB GiB/s TiB TiB/s %1hours %1hour %1minutes %1minute %1seconds %1second %1day %1days User name: Process name: Command line: CPU Time: Started Time: QUIBO Form ReniceDialog Nice value: Note: The priority of a process is given by its nice value. A lower nice value corresponds to a higher priority. Cancel Change Priority ResourcesCategory CPU Memory Network SelectListWidget Clean Items: ShredDialog Kylin Shred Manager Shred Manager No select any file which need to be shredded Shred File Deselect Select file! Shred successfully! Shred failed! ShredManager Shred Manager Delete files makes it unable to recover SoundWidget Sound theme Login tone Event sounds Input feedback sounds StartupManager Startup Manager Help user to manager application startup items StartupTitleWidget Kylin Startup Manager StartupWidget Kylin Startup Manager StartupWorker No name No description SystemMonitor Kylin System Monitor ThemeWidget Please choose theme which you need TopBaseWidget There may be a mistake. Kylin Assistant Back TouchpadWidget Enable touchpad Enable horizontal scrolling Scrollbar type Touchpad scrolling mode Features Type Standard Type Disabled Edge Scrolling Two-finger Scrolling WindowWidget Arrangement of buttons on the titlebar Menu with icons Titlebar mouse wheel action Titlebar double-click action Titlebar middle-click action Titlebar right-click action Left Right youker-assistant/src/translation/kylin-assistant_zh_CN.ts0000664000175000017500000036053613263553572022770 0ustar fengfeng AboutDialog About us 关于我们 Kylin Assistant 麒麟助手 About 关于本软件 关于 Maintainer: Kylin Team <ubuntukylin-members@list.launchpad.net> 维护者: 麒麟团队 <ubuntukylin-members@list.launchpad.net> Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions. 麒麟助手是由麒麟团队开发的一款功能强大的系统辅助软件。主要面向初级用户,能够帮助用户对系统进行管理。目前已具备了系统垃圾扫描与清理、系统软硬件信息查看、系统全方位定制、任务管理器等功能。 for more information. Welcome everyone to join with us. kylin-assistant Homepage: 了解软件的最新进展并反馈问题,欢迎广大用户和爱好者一起参与。麒麟助手主页: The software is still under development. Please visit 各项功能还在不断完善,更多功能也将陆续开发,敬请关注 Ubuntu Kylin 官网 Contributor 贡献者 Close 关闭 关闭 AlertDialog Form BoxWidget Kylin Software Center 麒麟软件中心 No software center was found! 没有找到软件中心 ! CleanSubGroup Custom 自定义 CleanerDetailWidget Apt Cache Clean Items Apt缓存清理项 Apt Cache count: Apt缓存总数: Software Cache Clean Items 软件中心缓存清理项 Software Cache count: 软件中心缓存总数: Thumbnails Cache Clean Items 缩略图缓存清理项 Thumbnails Cache Count: 缩略图缓存总数: Firefox Cache Count: Firefox浏览器缓存总数: Chromium Cache Count: Chromium浏览器缓存总数: Firefox Cookies Clean Items Firefox Cookies 清理项 Firefox Cookies Count: Firefox Cookies总数: Chromium Cookies Clean Items Chromium Cookies 清理项 Chromium Cookies Count: Chromium Cookies总数: No garbage 没有扫描到垃圾 Firefox History Count: Firefox 历史记录总数: Chromium History Count: Chromium历史记录总数: System History Count: 系统历史痕迹总数: Command history size: 命令历史记录大小: Firefox Cache Clean Items Firefox 缓存清理项 Chromium Cache Clean Items Chromium 缓存清理项 Debug log Items 调试日志项 Debug log: 调试日志: Clean args is empty! 清理参数为空! CleanerMainWidget Cleanup Package Cache 清理包缓存 Cleanup Software Center Cache 清理软件中心缓存 Cleanup Thumbnails Cache 清理缩略图缓存 Cleanup FireFox Cache 清理火狐浏览器缓存 Cleanup Chromium Cache 清理chromium缓存 Cache Items 缓存选项 System Cache 系统缓存 Cleanup cache of system, software-center, thumbnails and browser 清除包、缩略图和浏览器缓存等 Cleanup the Cookies saving in Firefox 清理火狐浏览器的Cookies Cleanup the Cookies saving in Chromium 清理Chromium浏览器的Cookies Cookies Items Cookies选项 Cookies Cookies Clean up user login information, support Firefox and Chromium browser 清除上网、游戏、购物等记录 Clean up the Firefox Internet records 清理火狐访问记录 Clean up the Chromium Internet records 清理Chromium访问记录 Clean up the recently opened documents records 清理最近打开的文件记录 Delete the command history 删除命令历史记录 Delete the debug logs 删除调试日志 Trace Items 访问痕迹选项 History trace 历史痕迹 Cleaning the internet and opened documents recently records 清除浏览器和系统使用痕迹 Please select the items you want to clean 请选择您想清理的选项 Scan args is empty! 扫描参数为空! CpuRateWidget CPU 处理器 Occupancy rate 占用率 Idle rate 空闲率 The running time of system 系统运行时间 The idle time of system 系统空闲时间 EnergyWidget CPU FM mode: CPU调频模式: Ondemand 自动调频 Powersave 省电模式 Performance 性能模式 Adjust gamma 调整伽马值 Adjust brightness 调整屏幕亮度 Time before session is considered idle 在此时间范围内无操作则关闭屏幕 Lock screen 锁定屏幕 Lock delay 锁定延时 Battery critical low action 电池严重不足时 Laptop lid close action on battery 使用电池合上盖子时 Laptop lid close action on AC 使用电源合上盖子时 Sleep timeout PC when on battery 使用电池,空闲此时间后电脑转入睡眠 Sleep timeout PC when on AC 使用电源,空闲此时间后电脑转入睡眠 Sleep timeout display when on battery 使用电池,空闲此时间后屏幕转入睡眠 Sleep timeout display when on AC 使用电源,空闲此时间后屏幕转入睡眠 suspend 挂起 shutdown 电源关闭 nothing 不处理 5 minutes 5 分钟 10 minutes 10 分钟 20 minutes 20 分钟 Half an hour 半小时 1 hour 1 小时 2 hours 2 小时 never 从不 1 minute 1 分钟 2 minutes 2 分钟 3 minutes 3 分钟 30 seconds 30 秒 Turn off the screen 关闭屏幕 FileManagerWidget Display entry location 路径输入框取代路径栏 Automatically mount media 自动挂载媒体 Automatically open a folder 自动打开文件夹 Prompt autorun programs 提示自动运行的程序 Thumbnail icon size (pixels) 缩略图图标尺寸(像素) Thumbnail cache time (days) 缩略图缓存时间(天数) Maximum thumbnail cache size (MB) 最大缩略图缓存尺寸(MB) FileSystemDialog Refresh 刷新 FileSystemListWidget Device 设备 Directory 目录 Type 类型 Total 总数 Free 空闲 Available 可用 Used 已用 No File System Info 没有发现文件系统信息 FontWidget Click here to change font 点击此处更换字体 Default Font 默认字体 Desktop Font 桌面字体 Monospace Font 等宽字体 Document Font 文档字体 Titlebar Font 标题栏字体 Global Font Scaling 全局字体缩放 Hinting 平滑 Antialiasing 反锯齿 Restore 恢复默认 IconWidget Icon theme 图标主题 Computer 计算机 Home Folder 用户主目录 Network 网络 Trash 回收站 Mounted Volumes 挂载卷 InfoWidget Computer 电脑概述 Desktop 桌面环境 CPU 处理器 Memory 内存 Motherboard 主板 HD 硬盘 NIC 网卡 VGA 显卡 Audio 声卡 Computer Info 电脑概述 Desktop Info 桌面环境信息 CPU Info 处理器信息 Memory Info 内存条信息 Memory Info %1 内存信息 %1 Board Info 主板信息 HardWare Info 硬盘信息 HardWare Info %1 硬盘信息 %1 NIC Info 网卡信息 NIC Info %1 网卡信息 %1 Monitor Info 显示器和显卡信息 Monitor Info %1 显示器和显卡信息 %1 Audio Info 声卡信息 Audio Info %1 声卡信息%1 Battery Info 电池信息 Driver Info 驱动信息 Battery 电池 Device Driver 设备驱动 Sensor 硬件传感 KylinFontDialog Current Font 当前字体 Font 字体 Style 风格 Size 大小 View 视图 OK 确定 Cancel 取消 Tips 提示 You haven't change the font, please choose the font! 您没有更改字体,请选择需要更改的字体! Font Dialog 字体对话框 KylinMenu Check and update 检查更新 Forum Help 论坛求助 Feedback 问题反馈 About us 关于我们 KylinSwitcher ON 已开启 OFF 已关闭 MainBottomWidget Current Version Number 当前版本号 Update to the lastest version, make it work better 更新至最新版本,使软件更好用 updating on the backend 正在后台升级 Common toolbox 工具箱 Fast and practical, making the system more personalized 更快更好,让系统更具个性化 Upgrade is complete 升级完成 Updating on the backend 正在后台升级 MainTopWidget The lastest cleanup time is 上一次清理时间是 The lastest scan time is 上一次扫描时间是 You have not implemented the one key scan and clean-up operation. 您还没有执行过一键扫描和一键清理操作。 Kylin Assistant 麒麟助手 Start Scan 开始扫描 Start Cleanup 开始清理 Back 返回 Scanning...... 正在扫描..... Quick clean up system trash, saving disk space and improving the system efficiency! 一键清理系统垃圾,帮您节省磁盘空间,让系统运行更加有效率! Scan Over 扫描完成 Regular cleaning, let your computer remains the relaxed state 经常清理,让电脑保持最轻松的状态 Clean OK 清理完毕 Cleaning: 正在清理: , Percent is: ,进度为: %, Status is: %,状态为: Clean Firefox history...... 清理Firefox浏览器历史记录...... Clean Chromium history...... 清理Chromium浏览器历史记录...... Clean system history...... 清理系统历史痕迹...... Clean apt...... 清理Apt...... Start clean apt...... 开始清理Apt...... Clean Firefox Cookie: 清理Firefox浏览器Cookie: Clean Chromium Cookie: 清理Chromium浏览器Cookie: does not exist 不存在 Chromium Browser is running...... Chromium浏览器正在运行中...... Cache Scan OK 缓存扫描完成 Cookies Scan OK Cookies扫描完成 History Scan OK 历史记录扫描完成 Packages Scan OK 包扫描完成 Error: 错误: Firefox Browser does not be installed 没有安装Firefox浏览器 Chromium Browser does not be installed 没有安装Chromium浏览器 Chromium Browser is running Chromium浏览器正在运行中 Scanning: 正在扫描: history trace; 条历史痕迹; browser cookies. 条浏览器Cookies。 browser cookies; 条浏览器Cookies; garbage. 垃圾。 history trace. 条历史痕迹。 No garbage. 没有扫描到垃圾。 Cleaning...... 正在清理....... Garbage Cleanup OK...... 垃圾清理完成...... History Cleanup OK...... 历史记录清理完成...... Cookies Cleanup OK...... Cookies清理完成...... Cleanup Cookies: 清理了Cookies: ; Garbage: ;垃圾: ; Historical records: ;历史记录: Cleaning up history trace of Firefox... 正在清理Firefox浏览器的历史痕迹...... Firefox history trace had been cleared! Firefox浏览器历史痕迹清理完成! Cleaning up history trace of Chromium... 正在清理Chromium浏览器的历史痕迹...... Chromium history trace had been cleared! Chromium浏览器的历史痕迹清理完成! Cleaning up Cookies of Firefox... 正在清理Firefox浏览器的Cookies...... Firefox Cookies had been cleared! Firefox浏览器的Cookies清理完成! Cleaning up Cookies of Chromium... 正在清理Chromium浏览器的Cookies...... Chromium Cookies had been cleared! Chromium浏览器的Cookies清理完成! Apt cache had been cleared! Apt缓存清理完成! Cleaning up Apt cache: 正在清理Apt缓存: Software Center cache had been cleared! 软件中心缓存清理完成! Cleaning up Software Center cache: 正在清理软件中心缓存: Ready to Cleanup...... 准备清理...... MainWindow Kylin Assistant 麒麟助手 Understand hardware information, provide more convenient channel to obtain hardware information 了解电脑硬件详细信息,为用户提供更加方便的获取硬件信息渠道 You can perform a full range of customized systems based on personal preferences 您可以根据个人喜好对系统进行全方位的定制 Provide a practical and lightweight tool, create fast and convenient experience for you 提供轻巧使用工具,为您打造快捷方便的体验 MemoryCircle Memory 内存 Swap 交换 Used(Percent) 已使用(百分比) Total 总量 %1(%2%) %1(%2%) MemoryWidget Memory 内存 MenuWidget Launcher icon size 启动器图标尺寸 Launcher hide mode 启动器自动隐藏 Display desktop icon 显示桌面图标 Launcher Transparency 启动器透明度 Icon Background 图标背景 Top panel icon size 顶部面板图标大小 Top panel auto hide 顶部面板自动隐藏 Bottom panel icon size 底部面板图标大小 Bottom panel auto hide 底部面板自动隐藏 Launcher position 启动器位置 MiddleWidget Home 麒麟首页 Cleanup 系统清理 Sysinfo 系统信息 Feature 系统美化 Toolkits 功能大全 MonitorTitleWidget Kylin System Monitor 麒麟系统监视器 Processes 进程 Resources 资源 File Systems 文件系统 Cancel 取消 Enter the relevant info of process 输入进程相关信息 MouseWidget Mouse Pointer Theme 鼠标指针主题 Cursor Pointer Size 光标指针大小 Small Size 小号 Big Size 大号 NetworkFlow Receiving 正在接收 Total Received 总计已接收 Sending 正在发送 Receive 接收 Send 发送 Total Sent 总计已发送 NetworkWidget Network 网络 PanelWidget Dash background blur type 搜索框背景模糊类型 Panel Transparency 面板透明度 Date & time format 日期时间格式 Display seconds 显示秒数 Display week 显示星期 Display the date 显示日期 Display battery icon 显示电池图标 Display battery percentage 显示电池百分比 Display battery remaining time 显示电池电量时间 Smart blur 活动模糊 Static blur 静态模糊 Clear 非模糊 Show applications 显示应用程序 Show system 显示系统 Show places 显示位置 Show icon 显示图标 ProcessCategory Active Processes 活动的进程 My Processes 我的进程 All Processes 全部进程 ProcessDialog End process 结束进程 Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended. Are you sure to continue? 结束进程可能导致数据损坏,中断会话或带来安全风险。您应该只结束无响应的进程。 您确定要继续该操作? Cancel 取消 Kill process 杀死进程 Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed. Are you sure to continue? 杀死进程可能导致数据损坏,中断会话或带来安全风险。您应该只杀死无响应的进程。 您确定要继续该操作? Stop process 停止进程 Continue process 继续进程 Very High 非常高 High Normal 普通 Low Very Low 非常低 Custom 自定义 Change Priority 改变优先级 Properties 属性 Change Priority of Process %1 (PID: %2) 更改进程“%1”(PID:%2)的优先级 ProcessListItem Stopped 已停止 Suspend 停止 Zombie 僵死 No response 无反应 Uninterruptible 不可中断 ProcessListWidget Process Name 进程名 User 用户 Status 状态 CPU 处理器 ID ID Command Line 命令行 Memory 内存 Priority 优先级 No search result 无搜索结果 ProcessManager System Monitor 系统监视器 Help user to kill process 帮助用户管理进程 PropertiesDialog OK 确定 QObject Running 运行中 Stopped 已停止 Zombie 僵死 Uninterruptible 不可中断 Sleeping 睡眠中 Very High 非常高 High Normal 普通 Low Very Low 非常低 Very High Priority 非常高优先级 High Priority 高优先级 Normal Priority 普通优先级 Low Priority 低优先级 Very Low Priority 非常低优先级 Choose the theme what you want 选择您需要的主题 Set the desktop icon theme and the visibility of desktop icons 设置桌面图标主题和桌面图标的可见性 Replace the theme and size of the mouse pointer, and theme change need to restart system 更换鼠标指针主题和大小,主题更改需要重启系统才能生效 Set the sound theme you want 设置您需要的声音主题 Setting the panel mode of auto hide and icon size 设置面板自动隐藏模式和面板图标大小 Manage display of the start menu 管理启动菜单的显示 Window Manager settings 窗口管理器设置 According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings 根据个人喜好设置系统默认字体,单击"恢复默认"按钮,可以将对应的字体恢复到设置前状态 Setting the relevant properties of your touchpad,make the operation more convenient 通过调整您触摸板的相关设置,使操作更加便捷 Save energy to let the computer longer standby time 节省电量,让电脑待机时间更长 Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked 管理文件管理器。注意:如果缩略图缓存时间或尺寸被设置为-1,缩略图将不会被清理 Audio Model 声卡型号 Vendor 制造商 Bus Address 总线地址 Audio Driver 声卡驱动 Device Name 设备名 Manufacturer 发行商 Model 型号 Technology 技术 Voltage 电压 Energy Designed 能量(设计) Energy Full 满时能量 Energy Now 能量 Serial Number 序列号 Motherboard Model 主板型号 Motherboard Vendor 主板产商 BIOS Vendor BIOS产商 BIOS Version BIOS版本 Release Date 发布日期 CD-ROM Model 光驱型号 Firmware Version 固件版本 CPU 处理器 Socket/Slot 插座/插槽 Maximum Frequency 最大主频 Current Frequency 当前主频 FSB 前端总线 Core Number 核心数目 Thread 线程 L1 Cache 1级缓存 L2 Cache 2级缓存 phytium 飞腾 4 cores 4核 4 thread/core 4线程/核 Desktop Environment 桌面环境 Host Name 主机名 Memery Capacity 内存容量 Terminal 用户命令解释器 Distribution 发行版 Language 语言 User 用户 Home Folder 用户主目录 Host bridge 主桥 VGA Model VGA兼容控制器 USB Model USB控制器 Communication Model 通信控制器 Ethernet Model 以太网控制器 PCI bridge PCI桥 ISA bridge ISA桥 SATA Model SATA控制器 SMBus 系统管理总线 System peripheral 系统外围 Driver in use 使用的驱动 existing drivers 可选的驱动 IDE interface IDE接口 SP controller 信号处理控制器 Network controller 网络控制器 Multimedia audio controller 多媒体音频控制器 HDD Model 硬盘型号 HDD Vendor 硬盘厂商 HDD Capacity 硬盘容量 Slot Number 插槽号 Memory Model 内存型号 Memory Size 内存大小 Data Width 数据宽度 Memory Info 内存条信息 Graphics Card Model 显卡型号 Current Graphics Card 当前显卡 Graphics Card Vendor 显卡制造商 Graphics Driver 显卡驱动 Gamma 伽马值 Screen Size(inch) 屏幕尺寸(英寸) Max Resolution 最大分辨率 Current Interface 当前接口 Monitor Model 显示器型号 Visual Area 可视面积 Support Interface 支持接口 Monitor Manufacturers 显示器制造商 Date of production/Week 生产日期/周 Date of production/Year 生产日期/年 NIC Model 网卡型号 NIC Driver 网卡驱动 IP Address IP地址 Mac Address MAC地址 Connection Status 连接状态 Max Bandwidth 最大带宽 WLan NIC Driver 无线网卡驱动 WLan NIC Model 网卡型号 Device Name: 设备名称: VNIC 虚拟网卡 NetType 网卡类型 Ethernet interface 以太网接口 Wireless interface 无线网接口 Version 电脑版本 Hostname 主机名 Running Time 持续运行时间 OS Types 操作系统类型 OS Version 操作系统版本 Kernel Bit 系统位数 Kernel Version 内核版本 Kernel Arch 内核架构 32bit 32位 64bit 64位 YHKylin community 银河麒麟社区版 Memory reference voltage 内存参考电压 SATA controller voltage SATA控制器电压 Memory voltage 内存电压 CPU pin voltage CPU管脚电压 Bridge voltage 桥片电压 CPU core voltage CPU核电压 CPU temperature CPU温度 Motherboard temperature 主板温度 CPU fan speed CPU风扇转速 ThemeSetting 主题设置 IconSetting 图标设置 MousePointer 鼠标设置 SoundEffect 声音效果 Panel 面板 StartMenu 启动菜单 Window 窗口 FontSetting 字体设置 Touchpad 触摸板 Energy saving 省电设置 File manager 文件管理器 byte 字节 byte/s 字节/秒 bytes 字节 bytes/s 字节/秒 KiB KB KiB/s KB/秒 MiB MiB MiB/s MiB/秒 GiB GiB GiB/s GiB/秒 TiB TiB TiB/s TiB/秒 %1hours %1小时 %1hour %1小时 %1minutes %1分 %1minute %1分 %1seconds %1秒 %1second %1秒 %1day %1天 %1days %1天 User name: 用户名: Process name: 进程名: Command line: 命令行: CPU Time: CPU 时间: Started Time: 开始于: QUIBO Form ReniceDialog Nice value: Nice 值: Note: 备忘: The priority of a process is given by its nice value. A lower nice value corresponds to a higher priority. 进程的优先级由它的 nice 值指定。较低的 nice 值对应较高的优先级。 Cancel 取消 Change Priority 改变优先级 ResourcesCategory CPU 处理器 Memory 内存 Network 网络 SelectListWidget Clean Items: 清理项: ShredDialog Kylin Shred Manager 麒麟文件粉碎机 Shred Manager 文件粉碎机 No select any file which need to be shredded 没有选择需要粉碎的文件 Shred File 粉碎文件 Deselect 取消粉碎 Select file! 选择文件! Shred successfully! 粉碎成功! Shred failed! 粉碎失败! ShredManager Shred Manager 文件粉碎机 Delete files makes it unable to recover 彻底删除文件使其无法恢复 SoundWidget Sound theme 声音主题 Login tone 登录提示音 Event sounds 事件声音 Input feedback sounds 输入反馈声音 StartupManager Startup Manager 启动项管理器 Help user to manager application startup items 帮助用户管理应用程序开机启动项 StartupTitleWidget Kylin Startup Manager 麒麟启动项管理器 StartupWidget Kylin Startup Manager 麒麟启动项管理器 StartupWorker No name 无名称 No description 无描述 SystemMonitor Kylin System Monitor 麒麟系统监视器 ThemeWidget Please choose theme which you need 选择您需要的主题 TopBaseWidget There may be a mistake. 可能发生了错误。 Kylin Assistant 麒麟助手 Back 返回 TouchpadWidget Enable touchpad 启用/禁用触摸板 Enable horizontal scrolling 触摸板横向滚动 Scrollbar type 滚动条类型 Touchpad scrolling mode 触摸板滚动模式 Features Type 特色类型 Standard Type 标准类型 Disabled 禁用 Edge Scrolling 边界滚动 Two-finger Scrolling 双指滚动 WindowWidget Arrangement of buttons on the titlebar 标题栏按钮布局 Menu with icons 菜单项旁显示图标 Titlebar mouse wheel action 标题栏鼠标滚轮动作 Titlebar double-click action 标题栏双击动作 Titlebar middle-click action 标题栏中键动作 Titlebar right-click action 标题栏右键动作 Left 左边 Right 右边 youker-assistant/src/translation/kylin-assistant_es.ts0000664000175000017500000036016713263553572022376 0ustar fengfeng AboutDialog About The software is still under development. Please visit About us Kylin Assistant Maintainer: Kylin Team <ubuntukylin-members@list.launchpad.net> Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions. for more information. Welcome everyone to join with us. kylin-assistant Homepage: Contributor Close AlertDialog Form BoxWidget Kylin Software Center No software center was found! CleanSubGroup Custom CleanerDetailWidget Apt Cache Clean Items Apt Cache count: Software Cache Clean Items Software Cache count: Thumbnails Cache Clean Items Thumbnails Cache Count: Firefox Cache Count: Chromium Cache Count: Firefox Cookies Clean Items Firefox Cookies Count: Chromium Cookies Clean Items Chromium Cookies Count: No garbage Firefox History Count: Chromium History Count: System History Count: Command history size: Firefox Cache Clean Items Chromium Cache Clean Items Debug log Items Debug log: Clean args is empty! CleanerMainWidget Cleanup Package Cache Cleanup Software Center Cache Cleanup Thumbnails Cache Cleanup FireFox Cache Cleanup Chromium Cache Cache Items System Cache Cleanup cache of system, software-center, thumbnails and browser Cleanup the Cookies saving in Firefox Cleanup the Cookies saving in Chromium Cookies Items Cookies Clean up user login information, support Firefox and Chromium browser Clean up the Firefox Internet records Clean up the Chromium Internet records Clean up the recently opened documents records Delete the command history Delete the debug logs Trace Items History trace Cleaning the internet and opened documents recently records Please select the items you want to clean Scan args is empty! CpuRateWidget CPU Occupancy rate Idle rate The running time of system The idle time of system EnergyWidget CPU FM mode: Ondemand Powersave Performance Adjust gamma Adjust brightness Time before session is considered idle Lock screen Lock delay Battery critical low action Laptop lid close action on battery Laptop lid close action on AC Sleep timeout PC when on battery Sleep timeout PC when on AC Sleep timeout display when on battery Sleep timeout display when on AC suspend shutdown nothing 5 minutes 10 minutes 20 minutes Half an hour 1 hour 2 hours never 1 minute 2 minutes 3 minutes 30 seconds Turn off the screen FileManagerWidget Display entry location Automatically mount media Automatically open a folder Prompt autorun programs Thumbnail icon size (pixels) Thumbnail cache time (days) Maximum thumbnail cache size (MB) FileSystemDialog Refresh FileSystemListWidget Device Directory Type Total Free Available Used No File System Info FontWidget Click here to change font Default Font Desktop Font Monospace Font Document Font Titlebar Font Global Font Scaling Hinting Antialiasing Restore IconWidget Icon theme Computer Home Folder Network Trash Mounted Volumes InfoWidget Computer Desktop CPU Memory Motherboard HD NIC VGA Audio Computer Info Desktop Info CPU Info Memory Info Memory Info %1 Board Info HardWare Info HardWare Info %1 NIC Info NIC Info %1 Monitor Info Monitor Info %1 Audio Info Audio Info %1 Battery Info Driver Info Battery Device Driver Sensor KylinFontDialog Current Font Font Style Size View OK Cancel Tips You haven't change the font, please choose the font! Font Dialog KylinMenu Check and update Forum Help Feedback About us KylinSwitcher ON OFF MainBottomWidget Current Version Number Update to the lastest version, make it work better updating on the backend Common toolbox Fast and practical, making the system more personalized Upgrade is complete Updating on the backend MainTopWidget The lastest cleanup time is The lastest scan time is You have not implemented the one key scan and clean-up operation. Kylin Assistant Start Scan Start Cleanup Back Scanning...... Quick clean up system trash, saving disk space and improving the system efficiency! Scan Over Regular cleaning, let your computer remains the relaxed state Clean OK Cleaning: , Percent is: %, Status is: Clean Firefox history...... Clean Chromium history...... Clean system history...... Clean apt...... Start clean apt...... Clean Firefox Cookie: Clean Chromium Cookie: does not exist Chromium Browser is running...... Cache Scan OK Cookies Scan OK History Scan OK Packages Scan OK Error: Firefox Browser does not be installed Chromium Browser does not be installed Chromium Browser is running Scanning: history trace; browser cookies. browser cookies; garbage. history trace. No garbage. Cleaning...... Garbage Cleanup OK...... History Cleanup OK...... Cookies Cleanup OK...... Cleanup Cookies: ; Garbage: ; Historical records: Cleaning up history trace of Firefox... Firefox history trace had been cleared! Cleaning up history trace of Chromium... Chromium history trace had been cleared! Cleaning up Cookies of Firefox... Firefox Cookies had been cleared! Cleaning up Cookies of Chromium... Chromium Cookies had been cleared! Apt cache had been cleared! Cleaning up Apt cache: Software Center cache had been cleared! Cleaning up Software Center cache: Ready to Cleanup...... MainWindow Kylin Assistant Understand hardware information, provide more convenient channel to obtain hardware information You can perform a full range of customized systems based on personal preferences Provide a practical and lightweight tool, create fast and convenient experience for you MemoryCircle Memory Swap Used(Percent) Total %1(%2%) MemoryWidget Memory MenuWidget Launcher icon size Launcher hide mode Display desktop icon Launcher Transparency Icon Background Top panel icon size Top panel auto hide Bottom panel icon size Bottom panel auto hide Launcher position MiddleWidget Home Cleanup Sysinfo Feature Toolkits MonitorTitleWidget Kylin System Monitor Processes Resources File Systems Cancel Enter the relevant info of process MouseWidget Mouse Pointer Theme Cursor Pointer Size Small Size Big Size NetworkFlow Receiving Total Received Sending Receive Send Total Sent NetworkWidget Network PanelWidget Dash background blur type Panel Transparency Date & time format Display seconds Display week Display the date Display battery icon Display battery percentage Display battery remaining time Smart blur Static blur Clear Show applications Show system Show places Show icon ProcessCategory Active Processes My Processes All Processes ProcessDialog End process Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended. Are you sure to continue? Cancel Kill process Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed. Are you sure to continue? Stop process Continue process Very High High Normal Low Very Low Custom Change Priority Properties Change Priority of Process %1 (PID: %2) ProcessListItem Stopped Suspend Zombie No response Uninterruptible ProcessListWidget Process Name User Status CPU ID Command Line Memory Priority No search result ProcessManager System Monitor Help user to kill process PropertiesDialog OK QObject Running Stopped Zombie Uninterruptible Sleeping Very High High Normal Low Very Low Very High Priority High Priority Normal Priority Low Priority Very Low Priority Choose the theme what you want Set the desktop icon theme and the visibility of desktop icons Replace the theme and size of the mouse pointer, and theme change need to restart system Set the sound theme you want Setting the panel mode of auto hide and icon size Manage display of the start menu Window Manager settings According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings Setting the relevant properties of your touchpad,make the operation more convenient Save energy to let the computer longer standby time Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked Audio Model Vendor Bus Address Audio Driver Device Name Manufacturer Model Technology Voltage Energy Designed Energy Full Energy Now Serial Number Motherboard Model Motherboard Vendor BIOS Vendor BIOS Version Release Date CD-ROM Model Firmware Version CPU Socket/Slot Maximum Frequency Current Frequency FSB Core Number Thread L1 Cache L2 Cache phytium 4 cores 4 thread/core Desktop Environment Host Name Memery Capacity Terminal Distribution Language User Home Folder Host bridge VGA Model USB Model Communication Model Ethernet Model PCI bridge ISA bridge SATA Model SMBus System peripheral Driver in use existing drivers IDE interface SP controller Network controller Multimedia audio controller HDD Model HDD Vendor HDD Capacity Slot Number Memory Model Memory Size Data Width Memory Info Graphics Card Model Current Graphics Card Graphics Card Vendor Graphics Driver Gamma Screen Size(inch) Max Resolution Current Interface Monitor Model Visual Area Support Interface Monitor Manufacturers Date of production/Week Date of production/Year NIC Model NIC Driver IP Address Mac Address Connection Status Max Bandwidth WLan NIC Driver WLan NIC Model Device Name: VNIC NetType Ethernet interface Wireless interface Version Hostname Running Time OS Types OS Version Kernel Bit Kernel Version Kernel Arch 32bit 64bit YHKylin community Memory reference voltage SATA controller voltage Memory voltage CPU pin voltage Bridge voltage CPU core voltage CPU temperature Motherboard temperature CPU fan speed ThemeSetting IconSetting MousePointer SoundEffect Panel StartMenu Window FontSetting Touchpad Energy saving File manager byte byte/s bytes bytes/s KiB KiB/s MiB MiB/s GiB GiB/s TiB TiB/s %1hours %1hour %1minutes %1minute %1seconds %1second %1day %1days User name: Process name: Command line: CPU Time: Started Time: QUIBO Form ReniceDialog Nice value: Note: The priority of a process is given by its nice value. A lower nice value corresponds to a higher priority. Cancel Change Priority ResourcesCategory CPU Memory Network SelectListWidget Clean Items: ShredDialog Kylin Shred Manager Shred Manager No select any file which need to be shredded Shred File Deselect Select file! Shred successfully! Shred failed! ShredManager Shred Manager Delete files makes it unable to recover SoundWidget Sound theme Login tone Event sounds Input feedback sounds StartupManager Startup Manager Help user to manager application startup items StartupTitleWidget Kylin Startup Manager StartupWidget Kylin Startup Manager StartupWorker No name No description SystemMonitor Kylin System Monitor ThemeWidget Please choose theme which you need TopBaseWidget There may be a mistake. Kylin Assistant Back TouchpadWidget Enable touchpad Enable horizontal scrolling Scrollbar type Touchpad scrolling mode Features Type Standard Type Disabled Edge Scrolling Two-finger Scrolling WindowWidget Arrangement of buttons on the titlebar Menu with icons Titlebar mouse wheel action Titlebar double-click action Titlebar middle-click action Titlebar right-click action Left Right youker-assistant/src/translation/kylin-assistant_ru.qm0000664000175000017500000000004213260315532022350 0ustar fengfeng AboutDialog About The software is still under development. Please visit About us Kylin Assistant Maintainer: Kylin Team <ubuntukylin-members@list.launchpad.net> Kylin Assistant is a powerful system supporting software which is developed by Kylin team. Mainly for the naive user, it can help users manage the system. At present, It provides system junk scanning and cleaning, viewing the system hardware and software information, task manager, and some other functions. for more information. Welcome everyone to join with us. kylin-assistant Homepage: Contributor Close AlertDialog Form BoxWidget Kylin Software Center No software center was found! CleanSubGroup Custom CleanerDetailWidget Apt Cache Clean Items Apt Cache count: Software Cache Clean Items Software Cache count: Thumbnails Cache Clean Items Thumbnails Cache Count: Firefox Cache Count: Chromium Cache Count: Firefox Cookies Clean Items Firefox Cookies Count: Chromium Cookies Clean Items Chromium Cookies Count: No garbage Firefox History Count: Chromium History Count: System History Count: Command history size: Firefox Cache Clean Items Chromium Cache Clean Items Debug log Items Debug log: Clean args is empty! CleanerMainWidget Cleanup Package Cache Cleanup Software Center Cache Cleanup Thumbnails Cache Cleanup FireFox Cache Cleanup Chromium Cache Cache Items System Cache Cleanup cache of system, software-center, thumbnails and browser Cleanup the Cookies saving in Firefox Cleanup the Cookies saving in Chromium Cookies Items Cookies Clean up user login information, support Firefox and Chromium browser Clean up the Firefox Internet records Clean up the Chromium Internet records Clean up the recently opened documents records Delete the command history Delete the debug logs Trace Items History trace Cleaning the internet and opened documents recently records Please select the items you want to clean Scan args is empty! CpuRateWidget CPU Occupancy rate Idle rate The running time of system The idle time of system EnergyWidget CPU FM mode: Ondemand Powersave Performance Adjust gamma Adjust brightness Time before session is considered idle Lock screen Lock delay Battery critical low action Laptop lid close action on battery Laptop lid close action on AC Sleep timeout PC when on battery Sleep timeout PC when on AC Sleep timeout display when on battery Sleep timeout display when on AC suspend shutdown nothing 5 minutes 10 minutes 20 minutes Half an hour 1 hour 2 hours never 1 minute 2 minutes 3 minutes 30 seconds Turn off the screen FileManagerWidget Display entry location Automatically mount media Automatically open a folder Prompt autorun programs Thumbnail icon size (pixels) Thumbnail cache time (days) Maximum thumbnail cache size (MB) FileSystemDialog Refresh FileSystemListWidget Device Directory Type Total Free Available Used No File System Info FontWidget Click here to change font Default Font Desktop Font Monospace Font Document Font Titlebar Font Global Font Scaling Hinting Antialiasing Restore IconWidget Icon theme Computer Home Folder Network Trash Mounted Volumes InfoWidget Computer Desktop CPU Memory Motherboard HD NIC VGA Audio Computer Info Desktop Info CPU Info Memory Info Memory Info %1 Board Info HardWare Info HardWare Info %1 NIC Info NIC Info %1 Monitor Info Monitor Info %1 Audio Info Audio Info %1 Battery Info Driver Info Battery Device Driver Sensor KylinFontDialog Current Font Font Style Size View OK Cancel Tips You haven't change the font, please choose the font! Font Dialog KylinMenu Check and update Forum Help Feedback About us KylinSwitcher ON OFF MainBottomWidget Current Version Number Update to the lastest version, make it work better updating on the backend Common toolbox Fast and practical, making the system more personalized Upgrade is complete Updating on the backend MainTopWidget The lastest cleanup time is The lastest scan time is You have not implemented the one key scan and clean-up operation. Kylin Assistant Start Scan Start Cleanup Back Scanning...... Quick clean up system trash, saving disk space and improving the system efficiency! Scan Over Regular cleaning, let your computer remains the relaxed state Clean OK Cleaning: , Percent is: %, Status is: Clean Firefox history...... Clean Chromium history...... Clean system history...... Clean apt...... Start clean apt...... Clean Firefox Cookie: Clean Chromium Cookie: does not exist Chromium Browser is running...... Cache Scan OK Cookies Scan OK History Scan OK Packages Scan OK Error: Firefox Browser does not be installed Chromium Browser does not be installed Chromium Browser is running Scanning: history trace; browser cookies. browser cookies; garbage. history trace. No garbage. Cleaning...... Garbage Cleanup OK...... History Cleanup OK...... Cookies Cleanup OK...... Cleanup Cookies: ; Garbage: ; Historical records: Cleaning up history trace of Firefox... Firefox history trace had been cleared! Cleaning up history trace of Chromium... Chromium history trace had been cleared! Cleaning up Cookies of Firefox... Firefox Cookies had been cleared! Cleaning up Cookies of Chromium... Chromium Cookies had been cleared! Apt cache had been cleared! Cleaning up Apt cache: Software Center cache had been cleared! Cleaning up Software Center cache: Ready to Cleanup...... MainWindow Kylin Assistant Understand hardware information, provide more convenient channel to obtain hardware information You can perform a full range of customized systems based on personal preferences Provide a practical and lightweight tool, create fast and convenient experience for you MemoryCircle Memory Swap Used(Percent) Total %1(%2%) MemoryWidget Memory MenuWidget Launcher icon size Launcher hide mode Display desktop icon Launcher Transparency Icon Background Top panel icon size Top panel auto hide Bottom panel icon size Bottom panel auto hide Launcher position MiddleWidget Home Cleanup Sysinfo Feature Toolkits MonitorTitleWidget Kylin System Monitor Processes Resources File Systems Cancel Enter the relevant info of process MouseWidget Mouse Pointer Theme Cursor Pointer Size Small Size Big Size NetworkFlow Receiving Total Received Sending Receive Send Total Sent NetworkWidget Network PanelWidget Dash background blur type Panel Transparency Date & time format Display seconds Display week Display the date Display battery icon Display battery percentage Display battery remaining time Smart blur Static blur Clear Show applications Show system Show places Show icon ProcessCategory Active Processes My Processes All Processes ProcessDialog End process Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended. Are you sure to continue? Cancel Kill process Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed. Are you sure to continue? Stop process Continue process Very High High Normal Low Very Low Custom Change Priority Properties Change Priority of Process %1 (PID: %2) ProcessListItem Stopped Suspend Zombie No response Uninterruptible ProcessListWidget Process Name User Status CPU ID Command Line Memory Priority No search result ProcessManager System Monitor Help user to kill process PropertiesDialog OK QObject Running Stopped Zombie Uninterruptible Sleeping Very High High Normal Low Very Low Very High Priority High Priority Normal Priority Low Priority Very Low Priority Choose the theme what you want Set the desktop icon theme and the visibility of desktop icons Replace the theme and size of the mouse pointer, and theme change need to restart system Set the sound theme you want Setting the panel mode of auto hide and icon size Manage display of the start menu Window Manager settings According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings Setting the relevant properties of your touchpad,make the operation more convenient Save energy to let the computer longer standby time Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked Audio Model Vendor Bus Address Audio Driver Device Name Manufacturer Model Technology Voltage Energy Designed Energy Full Energy Now Serial Number Motherboard Model Motherboard Vendor BIOS Vendor BIOS Version Release Date CD-ROM Model Firmware Version CPU Socket/Slot Maximum Frequency Current Frequency FSB Core Number Thread L1 Cache L2 Cache phytium 4 cores 4 thread/core Desktop Environment Host Name Memery Capacity Terminal Distribution Language User Home Folder Host bridge VGA Model USB Model Communication Model Ethernet Model PCI bridge ISA bridge SATA Model SMBus System peripheral Driver in use existing drivers IDE interface SP controller Network controller Multimedia audio controller HDD Model HDD Vendor HDD Capacity Slot Number Memory Model Memory Size Data Width Memory Info Graphics Card Model Current Graphics Card Graphics Card Vendor Graphics Driver Gamma Screen Size(inch) Max Resolution Current Interface Monitor Model Visual Area Support Interface Monitor Manufacturers Date of production/Week Date of production/Year NIC Model NIC Driver IP Address Mac Address Connection Status Max Bandwidth WLan NIC Driver WLan NIC Model Device Name: VNIC NetType Ethernet interface Wireless interface Version Hostname Running Time OS Types OS Version Kernel Bit Kernel Version Kernel Arch 32bit 64bit YHKylin community Memory reference voltage SATA controller voltage Memory voltage CPU pin voltage Bridge voltage CPU core voltage CPU temperature Motherboard temperature CPU fan speed ThemeSetting IconSetting MousePointer SoundEffect Panel StartMenu Window FontSetting Touchpad Energy saving File manager byte byte/s bytes bytes/s KiB KiB/s MiB MiB/s GiB GiB/s TiB TiB/s %1hours %1hour %1minutes %1minute %1seconds %1second %1day %1days User name: Process name: Command line: CPU Time: Started Time: QUIBO Form ReniceDialog Nice value: Note: The priority of a process is given by its nice value. A lower nice value corresponds to a higher priority. Cancel Change Priority ResourcesCategory CPU Memory Network SelectListWidget Clean Items: ShredDialog Kylin Shred Manager Shred Manager No select any file which need to be shredded Shred File Deselect Select file! Shred successfully! Shred failed! ShredManager Shred Manager Delete files makes it unable to recover SoundWidget Sound theme Login tone Event sounds Input feedback sounds StartupManager Startup Manager Help user to manager application startup items StartupTitleWidget Kylin Startup Manager StartupWidget Kylin Startup Manager StartupWorker No name No description SystemMonitor Kylin System Monitor ThemeWidget Please choose theme which you need TopBaseWidget There may be a mistake. Kylin Assistant Back TouchpadWidget Enable touchpad Enable horizontal scrolling Scrollbar type Touchpad scrolling mode Features Type Standard Type Disabled Edge Scrolling Two-finger Scrolling WindowWidget Arrangement of buttons on the titlebar Menu with icons Titlebar mouse wheel action Titlebar double-click action Titlebar middle-click action Titlebar right-click action Left Right youker-assistant/src/translation/kylin-assistant_de.qm0000664000175000017500000000002713260315532022315 0ustar fengfeng. */ #ifndef BOXACTIONWIDGET_H #define BOXACTIONWIDGET_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" class MainWindow; class BoxActionWidget : public QWidget { Q_OBJECT public: explicit BoxActionWidget(QWidget *parent = 0); ~BoxActionWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setLanguage(); private: QLabel *img_label; QLabel *title_label; QPushButton *more_btn; MainWindow *p_mainwindow; }; #endif // BOXACTIONWIDGET_H youker-assistant/src/shadowwidget.h0000664000175000017500000000303013260315532016452 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SHADOWWIDGET_H #define SHADOWWIDGET_H #include #include class ShadowWidget : public QWidget { Q_OBJECT Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity) public: explicit ShadowWidget(QWidget *parent = 0); void setOpacity(qreal opacity); qreal opacity() { return widget_opacity; } void setColor(QColor color) { widget_color = color; } protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void paintEvent(QPaintEvent *); private: QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 qreal widget_opacity; QColor widget_color; }; #endif // SHADOWWIDGET_H youker-assistant/src/kpplication.h0000664000175000017500000000246013260315532016304 0ustar fengfeng/* * Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KPPLICATION_H #define KPPLICATION_H #include #include "QtSingleApplication" class Kpplication : public QtSingleApplication { Q_OBJECT public: Kpplication ( const QString & appId, int & argc, char ** argv ) : QtSingleApplication(appId, argc, argv) {}; // virtual void commitData ( QSessionManager & /*manager*/ ) { // // Nothing to do, let the application to close // } inline static Kpplication * instance() { return qobject_cast(QApplication::instance()); } }; #endif // KPPLICATION_H youker-assistant/src/settingactionwidget.h0000664000175000017500000000434613260315532020053 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGACTIONWIDGET_H #define SETTINGACTIONWIDGET_H #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" #include "../component/settingaction.h" class MainWindow; class QStackedWidget; class SettingActionWidget : public QWidget { Q_OBJECT public: explicit SettingActionWidget(QString cur_desktop = "", QWidget *parent = 0); ~SettingActionWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setLanguage(); void initConnect(); public slots: void displayActionMainPage(); void displayActionSubPage(QString moduleName);//void displayActionSubPage(SettingAction::SettingModuleID moduleId); signals: void notifyContentPageToMain(); private: QLabel *img_label; QLabel *title_label; QStackedWidget *stacked_widget; QWidget *main_action; // SettingAction *main_action; SettingAction *theme_action; SettingAction *icon_action; SettingAction *mouse_action; SettingAction *voice_action; // SettingAction *animation_action; SettingAction *launcher_action; SettingAction *panel_action; SettingAction *window_action; SettingAction *font_action; SettingAction *touchpad_action; // SettingAction *deadpixel_action; SettingAction *conserve_aciton; SettingAction *nautilus_action; MainWindow *p_mainwindow; QString desktop; }; #endif // SETTINGACTIONWIDGET_H youker-assistant/src/kthread.cpp0000664000175000017500000000477213260315532015754 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kthread.h" //Thread::Thread(QString message, QObject *parent) : // stopped(false) // , QThread(parent) // , message(message) //{ //} //Thread *thread = new Thread(name, this); KThread::KThread(QObject *parent):QThread(parent) { } void KThread::initValues(QMap data, QStringList &arglist, QDBusInterface *systemiface, QString method) { iface = systemiface; mapData = data; methodName = method; list = arglist; } KThread::~KThread() { stop(); } void KThread::run() { //清理 if(methodName == "onekey_clean_crufts_function") { iface->call("onekey_clean_crufts_function", list); } //扫描 else if(methodName == "onekey_scan_function") { iface->call("onekey_scan_function", list); } else if(methodName == "get_scan_result") { iface->call("get_scan_result", mapData); } else if(methodName == "remove_select_items") { iface->call("remove_select_items", mapData); } else if(methodName == "call_camera") { iface->call("call_camera"); } else if(methodName == "install") { iface->call("install", "kylin-assistant"); } else if(methodName == "update") { iface->call("update"); } else if(methodName == "start_check_source_useable") { iface->call("start_check_source_useable"); } //sso // else if(methodName == "slot_do_login_account") { // iface->call("slot_do_login_account"); // } // else if(methodName == "check_user") { // iface->call("check_user"); // } // else if(methodName == "shredFile") { // QDBusReply reply = iface->call("shredFile", fileFlag); // emit msgSignal(reply.value()); // } } void KThread::stop() { wait(); } youker-assistant/src/boxactionwidget.cpp0000664000175000017500000000521213260315532017512 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "boxactionwidget.h" #include "mainwindow.h" #include BoxActionWidget::BoxActionWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(900, 150); this->setAutoFillBackground(true); this->setObjectName("transparentWidget"); img_label = new QLabel(); title_label = new QLabel(); more_btn = new QPushButton(); img_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 QPixmap label_pixmap("://res/toolkits.png"); img_label->setPixmap(label_pixmap); img_label->setFixedSize(label_pixmap.size()); title_label->setObjectName("whiteLabel"); title_label->setWordWrap(true);//QLabel自动换行 more_btn->setFocusPolicy(Qt::NoFocus); // more_btn->setObjectName("transparentButton"); more_btn->setObjectName("whiteButton"); more_btn->hide(); // title_label->setFixedWidth(400); title_label->setMinimumWidth(500); title_label->setMaximumWidth(600); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->addWidget(img_label); layout1->addWidget(title_label); layout1->addWidget(more_btn); layout1->addStretch(); layout1->setSpacing(15); layout1->setContentsMargins(20, 20, 0, 0); setLayout(layout1); this->setLanguage(); } BoxActionWidget::~BoxActionWidget() { if(img_label != NULL) { delete img_label; img_label = NULL; } if(title_label != NULL) { delete title_label; title_label = NULL; } if(more_btn != NULL) { delete more_btn; more_btn = NULL; } } void BoxActionWidget::setLanguage() { title_label->setText(tr("Provide a practical and lightweight tool, create fast and convenient experience for you"));//提供轻巧实用工具,为您打造快捷方便的体验 more_btn->setText(tr("More App")); } youker-assistant/src/infowidget.cpp0000664000175000017500000012052713260315532016466 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "infowidget.h" #include "../info/infogui.h" #include "../info/devicemanager.h" #include #include InfoWidget::InfoWidget(QString machine, QWidget *parent) : QWidget(parent), arch(machine) { this->setFixedSize(900, 403); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); splitter = new QSplitter(this); splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); splitter->setOrientation(Qt::Horizontal); splitter->setHandleWidth(1); category_widget = new QListWidget(this); category_widget->setFixedSize(150, 403); category_widget->setFocusPolicy(Qt::NoFocus); category_widget->setObjectName("infoList"); category_widget->setIconSize(QSize(16, 16));//设置QListWidget中的单元项的图片大小 category_widget->setResizeMode(QListView::Adjust); category_widget->setViewMode(QListView::ListMode); //设置QListWidget的显示模式 category_widget->setMovement(QListView::Static);//设置QListWidget中的单元项不可被拖动 // category_widget->setSpacing(1);//设置QListWidget中的单元项的间距 stacked_widget = new QStackedWidget(this);//stacked_widget will delete when InfoWidget delete // stacked_widget->setStyleSheet("QStackedWidget{border: none;}"); stacked_widget->setFocusPolicy(Qt::NoFocus); stacked_widget->setAutoFillBackground(true); connect(category_widget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(changeInfoPage(QListWidgetItem*))); } InfoWidget::~InfoWidget() { if (stacked_widget) { foreach (QObject *child, stacked_widget->children()) { QWidget *widget = static_cast(child); widget->deleteLater(); } delete stacked_widget; } } void InfoWidget::initInfoUI(bool has_battery, bool has_sensor) { type_list.clear(); icon_list.clear(); type_list << tr("Computer"); icon_list << "computer"; InfoGui *system_widget = new InfoGui(this);//该页面永远存在,且在列表的第一个位置,为默认显示项 system_widget->setInfoGuiName("computer"); stacked_widget->addWidget(system_widget); stacked_widget->setCurrentWidget(system_widget); emit this->requestRefreshSystemInfo(); emit this->requestupdateSystemRunnedTime(); type_list << tr("Desktop"); icon_list << "unity"; InfoGui *desktop_widget = new InfoGui(this); desktop_widget->setInfoGuiName("unity"); stacked_widget->addWidget(desktop_widget); type_list << tr("CPU"); icon_list << "cpu"; InfoGui *cpu_widget = new InfoGui(this); cpu_widget->setInfoGuiName("cpu"); stacked_widget->addWidget(cpu_widget); type_list << tr("Memory"); icon_list << "memory"; InfoGui *memory_widget = new InfoGui(this); memory_widget->setInfoGuiName("memory"); stacked_widget->addWidget(memory_widget); type_list << tr("Motherboard"); icon_list << "board"; InfoGui *board_widget = new InfoGui(this); board_widget->setInfoGuiName("board"); stacked_widget->addWidget(board_widget); type_list << tr("HD"); icon_list << "harddisk"; InfoGui *hd_widget = new InfoGui(this); hd_widget->setInfoGuiName("harddisk"); stacked_widget->addWidget(hd_widget); type_list << tr("NIC"); icon_list << "network"; InfoGui *nic_widget = new InfoGui(this); nic_widget->setInfoGuiName("network"); stacked_widget->addWidget(nic_widget); type_list << tr("VGA"); icon_list << "monitor"; InfoGui *monitor_widget = new InfoGui(this); monitor_widget->setInfoGuiName("monitor"); stacked_widget->addWidget(monitor_widget); type_list << tr("Audio"); icon_list << "audio"; InfoGui *audio_widget = new InfoGui(this); audio_widget->setInfoGuiName("audio"); stacked_widget->addWidget(audio_widget); if (has_battery) { type_list << tr("Battery"); icon_list << "battery"; InfoGui *battery_widget = new InfoGui(this); battery_widget->setInfoGuiName("battery"); stacked_widget->addWidget(battery_widget); } if (has_sensor) { type_list << tr("Sensor"); icon_list << "sensor"; InfoGui *sensor_widget = new InfoGui(this); sensor_widget->setInfoGuiName("sensor"); stacked_widget->addWidget(sensor_widget); } type_list << tr("Device Driver"); icon_list << "drive"; InfoGui *driver_widget = new InfoGui(this); driver_widget->setInfoGuiName("drive"); stacked_widget->addWidget(driver_widget); for(int i = 0;i < type_list.length();i++) { // if (i == 1 && arch == "aarch64") // { // // FT arm can not access board // } // else if (i == 11 && arch == "aarch64" && serverOrDesktop.contains("server")) { // //arm server no sensor // } QIcon icon; icon.addFile(":/hd/res/hardware/" + icon_list.at(i), QSize(), QIcon::Normal, QIcon::Off); QListWidgetItem *item = new QListWidgetItem(type_list.at(i), category_widget); // item->setSizeHint(QSize(120,31)); //设置单元项的宽度和高度 item->setSizeHint(QSize(120,36)); //设置单元项的宽度和高度 item->setStatusTip(icon_list.at(i)); item->setIcon(icon); } category_widget->setCurrentRow(0); current_tip = category_widget->currentItem()->statusTip(); QVBoxLayout *center_layout = new QVBoxLayout(); center_layout->addWidget(stacked_widget); center_layout->setSpacing(0); center_layout->setMargin(0); center_layout->setContentsMargins(0, 0, 0, 0); splitter->addWidget(category_widget); splitter->addWidget(stacked_widget); for(int i = 0; icount();i++) { QSplitterHandle *handle = splitter->handle(i); handle->setEnabled(false); } QHBoxLayout *main_layout = new QHBoxLayout(); main_layout->addWidget(splitter); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); this->setLayout(main_layout); // m_testWidget->loadOnePage(0, "AAA1", QMap()); // m_testWidget->loadOnePage(1, "AAA2", QMap()); } void InfoWidget::onSendSystemInfo(QMap tmpMap) { // qDebug() << "--------------------system tmpMap="< sys_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.key() != "uptime" && it.value().toString().length() > 0) { sys_info_map.insert(it.key(), it.value()); } } if(sys_info_map.isEmpty() || sys_info_map.count() <= 0) { return; } else { for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "computer") { page->clearWidget(); page->loadOnePage(0, tr("Computer Info"), sys_info_map); break; } } } sys_info_map.clear(); // if (system_widget) { // system_widget->clearWidget(); // system_widget->loadOnePage(0, "Computer Info", sys_info_map); // } } } } //void InfoWidget::onSendSystemRunnedTime(int time_value) //{ // QString result; // int hour_value = time_value/60; // int minutes_value = time_value%60; // if(hour_value < 1) // { // result = QString::number(minutes_value) + tr(" Minutes");//分钟 // } // else // { // result = QString::number(hour_value) + tr(" Hours ") + QString::number(minutes_value) + tr(" Minutes");//小时 分钟 // } //// if (system_widget) { //// system_widget->updateRunningTime(result); //// } //} void InfoWidget::onSendDesktopInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap desktop_info_map; QMap::iterator it; for ( it = tmpMap.begin(); it != tmpMap.end(); ++it ) { if (it.value().toString().length() > 0) { desktop_info_map.insert(it.key(), it.value()); } } if(desktop_info_map.isEmpty() || desktop_info_map.count() <= 0) { return; } else { for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "unity") { page->clearWidget(); page->loadOnePage(0, tr("Desktop Info"), desktop_info_map); break; } } } desktop_info_map.clear(); // if (desktop_widget) { // desktop_widget->clearWidget(); // desktop_widget->loadOnePage(0, "Desktop Info", desktop_info_map); // } } } } void InfoWidget::onSendCpuInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap cpu_info_map; QMap::iterator it; for ( it = tmpMap.begin(); it != tmpMap.end(); ++it ) { if (it.value().toString().length() > 0) { cpu_info_map.insert(it.key(), it.value()); } } if(cpu_info_map.isEmpty() || cpu_info_map.count() <= 0) { return; } else { for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "cpu") { page->clearWidget(); page->loadOnePage(0, tr("CPU Info"), cpu_info_map); break; } } } cpu_info_map.clear(); } } } void InfoWidget::onSendMemoryInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap::iterator iter = tmpMap.find("Memnum"); int memoryNum = 0; if (iter == tmpMap.end()) { memoryNum = 0; } else{ memoryNum = iter.value().toInt(); } if(memoryNum > 0) { if(memoryNum == 1) { tmpMap.remove("Memnum"); QMap memory_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { memory_info_map.insert(it.key(), it.value()); } } if (memory_info_map.isEmpty()) { return; } for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "memory") { page->clearWidget(); page->loadOnePage(0, tr("Memory Info"), memory_info_map); break; } } } memory_info_map.clear(); } else if(memoryNum > 1) { bool hadRetUI = false; for (int i=0;i memory_info_map; QMap::iterator itbegin = tmpMap.begin(); QMap::iterator itend = tmpMap.end(); for (;itbegin != itend; ++itbegin) { if(itbegin.key() != "Memnum" && itbegin.value().toString().contains("<1_1>")) { QStringList tmplist = itbegin.value().toString().split("<1_1>"); if (tmplist.length() >= i) { QString result = tmplist.at(i); if (result.length() > 0) { memory_info_map.insert(itbegin.key(), result); } } // QString result = itbegin.value().toString().split("<1_1>").at(i); // if (result.length() > 0) { // memory_info_map.insert(itbegin.key(), result); // } } } if (memory_info_map.isEmpty()) return; for (int j = 0; j < stacked_widget->count(); j++) { if (InfoGui *page = static_cast(stacked_widget->widget(j))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "memory") { if (!hadRetUI) {//只加载第一个内存时清空原来的界面 page->clearWidget(); hadRetUI = true; } page->loadOnePage(0, tr("Memory Info %1").arg(i+1), memory_info_map); break; } } } memory_info_map.clear(); } } } } } void InfoWidget::onSendBoardInfo(QMap tmpMap) { //board_info_map.value("BoaVendor").toString().toUpper() if (!tmpMap.isEmpty()) { QMap board_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { board_info_map.insert(it.key(), it.value()); } } if(board_info_map.isEmpty() || board_info_map.count() <= 0) { return; } else { for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "board") { page->clearWidget(); page->loadOnePage(0, tr("Board Info"), board_info_map); break; } } } board_info_map.clear(); } } } void InfoWidget::onSendHDInfo(QMap tmpMap) { //hd_info_map.value("DiskVendor").toString().toUpper() // qDebug() << "onSendHDInfo===="<::iterator iter = tmpMap.find("DiskNum"); int diskNum = 0; if (iter == tmpMap.end()) { diskNum = 0; } else{ diskNum = iter.value().toInt(); } if(diskNum > 0) { if(diskNum == 1) { tmpMap.remove("DiskNum"); QMap hd_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { if (QString::compare(it.value().toString(), "$", Qt::CaseInsensitive) != 0) hd_info_map.insert(it.key(), it.value()); } } if (hd_info_map.isEmpty()) { return; } for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "harddisk") { page->clearWidget(); page->loadOnePage(0, tr("HardWare Info"), hd_info_map); break; } } } hd_info_map.clear(); } else if(diskNum > 1) { bool hadRetUI = false; for (int i=0;i hd_info_map; QMap::iterator itbegin = tmpMap.begin(); QMap::iterator itend = tmpMap.end(); for (;itbegin != itend; ++itbegin) { if(itbegin.key() != "DiskNum" && itbegin.value().toString().contains("<1_1>")) { QStringList tmplist = itbegin.value().toString().split("<1_1>"); if (tmplist.length() >= i) { QString result = tmplist.at(i); if (result.length() > 0) { if (QString::compare(result, "$", Qt::CaseInsensitive) != 0) hd_info_map.insert(itbegin.key(), result); } } // QString result = itbegin.value().toString().split("<1_1>").at(i); // if (result.length() > 0) { // if (QString::compare(result, "$", Qt::CaseInsensitive) != 0) // hd_info_map.insert(itbegin.key(), result); // } } } if (hd_info_map.isEmpty()) return; for (int j = 0; j < stacked_widget->count(); j++) { if (InfoGui *page = static_cast(stacked_widget->widget(j))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "harddisk") { if (!hadRetUI) {//只加载第一个硬盘时清空原来的界面 page->clearWidget(); hadRetUI = true; } page->loadOnePage(0, tr("HardWare Info %1").arg(i+1), hd_info_map); break; } } } hd_info_map.clear(); } } } } } void InfoWidget::onSendNicInfo(QMap tmpMap) { // qDebug() << "onSendNicInfo="< 1) {//may be wire_info_map only contains NetNum QMap::iterator iter = tmpMap.find("NetNum"); int netNum = 0; if (iter == tmpMap.end()) { netNum = 0; } else{ netNum = iter.value().toInt(); } if(netNum > 0) { if(netNum == 1) { //vendor:wire_info_map.value("NetVendor").toString().toUpper().contains("INTEL") :"INTEL" // wire_info_map.value("NetVendor").toString().toUpper().contains("REALTEK") : "REALTEK") tmpMap.remove("NetNum"); if (tmpMap.contains("NetLogicalname")) { QMap::iterator iter = tmpMap.find("NetLogicalname"); QString netcard = iter.value().toString(); if (netcard.startsWith("veth") || netcard.startsWith("virbr")) { tmpMap["NetType"] = "VNIC"; } } QMap wire_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { wire_info_map.insert(it.key(), it.value()); } } if (wire_info_map.isEmpty()) { return; } for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "network") { page->clearWidget(); page->loadOnePage(0, tr("NIC Info"), wire_info_map); break; } } } wire_info_map.clear(); } else if(netNum > 1) { bool hadRetUI = false; for (int i=0;i wire_info_map; QMap::iterator itbegin = tmpMap.begin(); QMap::iterator itend = tmpMap.end(); for (;itbegin != itend; ++itbegin) { if(itbegin.key() != "NetNum" && itbegin.value().toString().contains("<1_1>")) { QStringList tmplist = itbegin.value().toString().split("<1_1>"); if (tmplist.length() >= i) { QString result = tmplist.at(i); if (result.length() > 0) { wire_info_map.insert(itbegin.key(), result); } } // QString result = itbegin.value().toString().split("<1_1>").at(i); // if (result.length() > 0) { // wire_info_map.insert(itbegin.key(), result); // } } } if (wire_info_map.isEmpty()) return; if (wire_info_map.contains("NetLogicalname")) { if (wire_info_map.value("NetLogicalname").toString().startsWith("veth") || wire_info_map.value("NetLogicalname").toString().startsWith("virbr")) { wire_info_map["NetType"] = QVariant("VNIC"); } } for (int j = 0; j < stacked_widget->count(); j++) { if (InfoGui *page = static_cast(stacked_widget->widget(j))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "network") { if (!hadRetUI) {//只加载第一个网卡时清空原来的界面 page->clearWidget(); hadRetUI = true; } page->loadOnePage(0, tr("NIC Info %1").arg(i+1), wire_info_map); break; } } } wire_info_map.clear(); } } } } } void InfoWidget::onSendMonitorInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap::iterator iter = tmpMap.find("Vga_num"); int vgaNum = 0; if (iter == tmpMap.end()) { vgaNum = 0; } else{ vgaNum = iter.value().toInt(); } if(vgaNum > 0) { if(vgaNum == 1) { //vendor:monitor_info_map.value("Vga_vendor").toString().toUpper() tmpMap.remove("Vga_num"); QMap monitor_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { monitor_info_map.insert(it.key(), it.value()); } } if (monitor_info_map.isEmpty()) { return; } for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "monitor") { page->clearWidget(); page->loadOnePage(0, tr("Monitor Info"), monitor_info_map); break; } } } monitor_info_map.clear(); } else if(vgaNum > 1) { bool hadRetUI = false; for (int i=0;i monitor_info_map; QMap::iterator itbegin = tmpMap.begin(); QMap::iterator itend = tmpMap.end(); for (;itbegin != itend; ++itbegin) { if(itbegin.key() != "Vga_num" && itbegin.value().toString().contains("<1_1>")) { QStringList tmplist = itbegin.value().toString().split("<1_1>"); if (tmplist.length() >= i) { QString result = tmplist.at(i); if (result.length() > 0) { monitor_info_map.insert(itbegin.key(), result); } } // QString result = itbegin.value().toString().split("<1_1>").at(i); // if (result.length() > 0) { // monitor_info_map.insert(itbegin.key(), result); // } } } if (monitor_info_map.isEmpty()) return; for (int j = 0; j < stacked_widget->count(); j++) { if (InfoGui *page = static_cast(stacked_widget->widget(j))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "monitor") { if (!hadRetUI) {//只加载第一个显卡时清空原来的界面 page->clearWidget(); hadRetUI = true; } page->loadOnePage(0, tr("Monitor Info %1").arg(i+1), monitor_info_map); break; } } } monitor_info_map.clear(); } } } } } void InfoWidget::onSendAudioInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap::iterator iter = tmpMap.find("MulNum"); int mulNum = 0; if (iter == tmpMap.end()) { mulNum = 0; } else{ mulNum = iter.value().toInt(); } if(mulNum > 0) { if(mulNum == 1) { //vendor: audio_info_map.value("MulVendor").toString().toUpper() tmpMap.remove("MulNum"); QMap audio_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { audio_info_map.insert(it.key(), it.value()); } } if (audio_info_map.isEmpty()) { return; } for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "audio") { page->clearWidget(); page->loadOnePage(0, tr("Audio Info"), audio_info_map); break; } } } audio_info_map.clear(); } else if(mulNum > 1) { bool hadRetUI = false; for (int i=0;i audio_info_map; QMap::iterator itbegin = tmpMap.begin(); QMap::iterator itend = tmpMap.end(); for (;itbegin != itend; ++itbegin) { if(itbegin.key() != "MulNum" && itbegin.value().toString().contains("<1_1>")) { QStringList tmplist = itbegin.value().toString().split("<1_1>"); if (tmplist.length() >= i) { QString result = tmplist.at(i); if (result.length() > 0) { audio_info_map.insert(itbegin.key(), result); } } // QString result = itbegin.value().toString().split("<1_1>").at(i); // if (result.length() > 0) { // audio_info_map.insert(itbegin.key(), result); // } } } if (audio_info_map.isEmpty()) return; for (int j = 0; j < stacked_widget->count(); j++) { if (InfoGui *page = static_cast(stacked_widget->widget(j))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "audio") { if (!hadRetUI) {//只加载第一个声卡时清空原来的界面 page->clearWidget(); hadRetUI = true; } page->loadOnePage(0, tr("Audio Info %1").arg(i+1), audio_info_map); break; } } } audio_info_map.clear(); } } } } } void InfoWidget::onSendBatteryInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap battery_info_map; QMap::iterator it; //遍历map QStringList powerlist; powerlist << "POWER_SUPPLY_NAME" << "POWER_SUPPLY_MANUFACTURER" << "POWER_SUPPLY_MODEL_NAME" << "POWER_SUPPLY_TECHNOLOGY" << "POWER_SUPPLY_VOLTAGE_NOW" << "POWER_SUPPLY_ENERGY_FULL_DESIGN" << "POWER_SUPPLY_ENERGY_FULL" << "POWER_SUPPLY_ENERGY_NOW" << "POWER_SUPPLY_SERIAL_NUMBER"; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { QList::Iterator itstart = powerlist.begin(), itend = powerlist.end(); for(;itstart !=itend;itstart++) { if(*itstart == it.key()) { if (it.key() == "POWER_SUPPLY_SERIAL_NUMBER") { if (it.value().toString().replace(" " ,"").length() > 0) battery_info_map.insert(it.key(), it.value()); } else { if (it.value().toString().length() > 0) battery_info_map.insert(it.key(), it.value()); } break; } } } if(battery_info_map.isEmpty() || battery_info_map.count() <= 0) { return; } //vendor:battery_info_map.value("POWER_SUPPLY_MANUFACTURER").toString().toUpper() for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "battery") { page->clearWidget(); page->loadOnePage(0, tr("Battery Info"), battery_info_map); break; } } } battery_info_map.clear(); } } void InfoWidget::onSendSensorInfo(QMap tmpMap) { if (!tmpMap.isEmpty()) { QMap sensor_info_map; QMap::iterator it; for (it = tmpMap.begin(); it != tmpMap.end(); ++it) { if (it.value().toString().length() > 0) { sensor_info_map.insert(it.key(), it.value()); } } if (sensor_info_map.isEmpty() || sensor_info_map.count() <= 0) { return; } for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "sensor") { page->updatePageData("Hardware sensor information", sensor_info_map);//该页面数据需要动态刷新,所以不销毁页面 break; } } } sensor_info_map.clear(); } } //void InfoWidget::updateTimeValue() //{ //} void InfoWidget::changeInfoPage(QListWidgetItem *item) { //20180101 if (!item) return; QString m_currentGuiName = item->statusTip(); if (m_currentGuiName.isEmpty() || m_currentGuiName.isNull()) return; // qDebug() << "InfoWidget changeInfoPage" << m_currentGuiName; for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == m_currentGuiName) { QPointer panel(page); if (panel.isNull()) { continue; } stacked_widget->setCurrentWidget(page); if (m_currentGuiName == "computer") {//system emit this->requestRefreshSystemInfo(); // emit this->requestupdateSystemRunnedTime(); } else if (m_currentGuiName == "unity") {//desktop emit this->requestDesktopInfo(); } else if (m_currentGuiName == "cpu") { emit this->requestCpuInfo(); } else if (m_currentGuiName == "memory") { emit this->requestMemoryInfo(); } else if (m_currentGuiName == "board") { emit this->requestBoardInfo(); } else if (m_currentGuiName == "harddisk") { emit this->requestHDInfo(); } else if (m_currentGuiName == "network") { emit this->requestNicInfo(); } else if (m_currentGuiName == "monitor") { emit this->requestMonitorInfo(); } else if (m_currentGuiName == "audio") { emit this->requestAudioInfo(); } else if (m_currentGuiName == "battery") { emit this->requestBatteryInfo(); } else if (m_currentGuiName == "sensor") { emit this->requestSensorInfo(); } else if (m_currentGuiName == "drive") { QMap driver_info_map; DeviceManager manager; QStringList list = manager.getDeviceMsg(); for (int i=0 ; i < list.length() ; i++) { QStringList splitlist = list.at(i).split(";"); if(splitlist.length() == 1) { QStringList name = splitlist.at(0).split(":"); driver_info_map.insert(name.at(0).trimmed(), name.at(1)); } else if(splitlist.length() == 2) { QStringList name1 = splitlist.at(0).split(":"); QStringList name2 = splitlist.at(1).split(":"); driver_info_map.insert(name1.at(0).trimmed(), name1.at(1)); driver_info_map.insert(name2.at(0).trimmed(), name2.at(1)); } else if(splitlist.length() == 3) { QStringList name3 = splitlist[0].split(":"); QStringList name4 = splitlist[1].split(":"); QStringList name5 = splitlist[2].split(":"); driver_info_map.insert(name3.at(0).trimmed(), name3.at(1)); driver_info_map.insert(name4.at(0).trimmed(), name4.at(1)); driver_info_map.insert(name5.at(0).trimmed(), name5.at(1)); } } if (!driver_info_map.isEmpty()) { for (int i = 0; i < stacked_widget->count(); i++) { if (InfoGui *page = static_cast(stacked_widget->widget(i))) { if (page->infoGuiName().isEmpty() || page->infoGuiName().isNull()) continue; if (page->infoGuiName() == "drive") { page->clearWidget(); page->loadOnePage(0, tr("Driver Info"), driver_info_map); break; } } } } } break; } } } } youker-assistant/src/infoactionwidget.cpp0000664000175000017500000000437413260315532017665 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "infoactionwidget.h" #include "mainwindow.h" InfoActionWidget::InfoActionWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(900, 150); this->setAutoFillBackground(true); this->setObjectName("transparentWidget"); img_label = new QLabel(); suggest_label = new QLabel(); img_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 QPixmap label_pixmap("://res/systeminfo.png"); img_label->setPixmap(label_pixmap); img_label->setFixedSize(label_pixmap.size()); suggest_label->setObjectName("whiteLabel"); suggest_label->setWordWrap(true);//QLabel自动换行 QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addWidget(img_label, 0, Qt::AlignVCenter); layout2->addWidget(suggest_label, 0, Qt::AlignVCenter); layout2->setSpacing(20); layout2->setMargin(0); layout2->setContentsMargins(20, 20, 0, 0); setLayout(layout2); this->setLanguage(); } InfoActionWidget::~InfoActionWidget() { if(img_label != NULL) { delete img_label; img_label = NULL; } if(suggest_label != NULL) { delete suggest_label; suggest_label = NULL; } } void InfoActionWidget::setLanguage() { suggest_label->setText(tr("Understand hardware information, provide more convenient channel to obtain hardware information"));//了解电脑硬件详细信息,为用户提供更加方便的获取硬件信息渠道 } youker-assistant/src/shadowwidget.cpp0000664000175000017500000000514113260315532017012 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "shadowwidget.h" #include #include #include ShadowWidget::ShadowWidget(QWidget *parent) : QWidget(parent) ,widget_color(QColor("#fca71d")) { widget_opacity = 1; } void ShadowWidget::setOpacity(qreal opacity) { widget_opacity = opacity; update(); } void ShadowWidget::mousePressEvent(QMouseEvent *event) { // if(event->button() == Qt::LeftButton) // { // m_mousePressed = true; // m_dragPosition = event->globalPos() - this->frameGeometry().topLeft(); // event->accept(); // } if(event->button() == Qt::LeftButton) { m_mousePressed = true; m_dragPosition = event->globalPos() - pos(); } } void ShadowWidget::mouseReleaseEvent(QMouseEvent *) { m_mousePressed = false; setWindowOpacity(1); } void ShadowWidget::mouseMoveEvent(QMouseEvent *event) { if(m_mousePressed) { QPoint move_pos = event->globalPos(); move(move_pos - m_dragPosition); setWindowOpacity(0.9); // event->accept(); } } void ShadowWidget::paintEvent(QPaintEvent *) { // QPainter painter(this); // painter.setOpacity(widget_opacity); // painter.setBrush(widget_color); // painter.setPen(Qt::NoPen); // painter.drawRect(rect()); QPainterPath path; path.setFillRule(Qt::WindingFill); path.addRect(10,10,this->width()-20,this->height()-20); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing,true); painter.fillPath(path,QBrush(Qt::white)); // QColor color(0,0,0,50); QColor color(widget_color); for(int i = 0 ; i < 10 ; ++i) { QPainterPath path; path.setFillRule(Qt::WindingFill); path.addRect(10-i,10-i,this->width()-(10-i)*2,this->height()-(10-i)*2); color.setAlpha(150 - qSqrt(i)*50); painter.setPen(color); painter.drawPath(path); } } youker-assistant/src/maintopwidget.h0000664000175000017500000000752713260315532016653 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MAINTOPWIDGET_H #define MAINTOPWIDGET_H #include #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" #include "../component/loadinglabel.h" class MainWindow; class MainTopWidget : public QWidget { Q_OBJECT public: explicit MainTopWidget(bool isMain = false, QSettings *mSettings = 0, QWidget *parent = 0); ~MainTopWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initConnect(); void setLanguage(); void writeFixCleanDate(); QString getFixCleanDate(); QString getCurrentDateTime(); void writeSafeScanDate(); QString getSafeScanDate(); QString getOneKeyFlag(); void setDoingLabelText(const QString &description, int defaultWidth = 700); void initTitlebarLeftContent(); void initTitlebarRightContent(); void initContentLeftContent(); void initActionRightContent(); void initWidgets(); public slots: void onStartButtonClicked(); void onCleanButtonClicked(); void onEndButtonClicked(); void getScanResult(QString msg); void finishScanResult(QString msg); void getScanAllResult(QString flag, QString msg); void getCleanResult(QString msg/*, QString flag*/); void finishCleanError(QString msg); void getCleaningMessage(QString type, QString status); //clean page void showCleanReciveStatus(const QString &status); void showCleanReciveError(const QString &status); void showCleanOverStatus(); void showCleanerData(const QStringList &data); void showCleanerStatus(const QString &status, const QString &domain); void showCleanerError(const QString &status); void displayOrgPage(); void displayAnimation(); void receivePolicyKitSignal(bool status); void accordScanOverStatusToChange(bool status); signals: void startOneKeyScan(const QStringList &categorys); void startOneKeyClean(); //clean page void showDetailData(); void showMainData(); void sendCleanSignal(); void sendScanSignal(); void showMenu(); void showSkinCenter(); void showMin(); void closeApp(); private: LoadingLabel *loading_label = nullptr; QLabel *suggest_label = nullptr; QLabel *scan_result_label = nullptr; QLabel *result_label = nullptr; QLabel *doing_label = nullptr; QPushButton *scan_button = nullptr; QPushButton *clean_button = nullptr; QPushButton *back_button = nullptr; QString trace; QString cookies; QString garbage; QSettings *pSettings; QString dateStr; QString workFlag; QString scanFinishTime; QVBoxLayout *m_layout = nullptr; QHBoxLayout *m_topLayout = nullptr; QHBoxLayout *m_titleRightLayout = nullptr; QHBoxLayout *m_bottomLayout = nullptr; QHBoxLayout *m_titleLeftLayout = nullptr; QHBoxLayout *m_toolLeftLayout = nullptr; QHBoxLayout *m_toolRightLayout = nullptr; MainWindow *p_mainwindow = nullptr; bool m_isMain; }; #endif // MAINTOPWIDGET_H youker-assistant/src/loginwidget.h0000664000175000017500000000324713260315532016307 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 LOGINWIDGET_H #define LOGINWIDGET_H #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" class SessionDispatcher; class QLabel; class LoginWidget : public QWidget { Q_OBJECT public: explicit LoginWidget(QWidget *parent = 0); ~LoginWidget(); void setSessionDbusProxy(SessionDispatcher* dispatcher) { sessionProxy = dispatcher;} void setLauguage(); void initConnect(); public slots: void onLoginButtonClicked(); void onLogoutButtonClicked(); void showLoginInfo(QString name, QString email); void showLoginAndLogoutStatus(bool status); private: QPoint press_point;//鼠标按下去的点 bool is_move; QPushButton *login_button; QPushButton *logo_label; QLabel *user_label; QPushButton *logout_btn; SessionDispatcher *sessionProxy; }; #endif // LOGINWIDGET_H youker-assistant/src/mainwindow.ui0000664000175000017500000000120013260315532016320 0ustar fengfeng MainWindow 0 0 900 600 false MainWindow false youker-assistant/src/autostartwidget.h0000664000175000017500000000414613260315532017224 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 AUTOSTARTWIDGET_H #define AUTOSTARTWIDGET_H #include #include #include "../component/kylinlistwidget.h" #include "../component/kylintitlebar.h" #include "../component/autogroup.h" class SessionDispatcher; namespace Ui { class AutoStartWidget; } class AutoStartWidget : public QDialog//QWidget { Q_OBJECT public: // explicit AutoStartWidget(QWidget *parent = 0, SessionDispatcher *proxy = 0); explicit AutoStartWidget(QDialog *parent = 0, SessionDispatcher *proxy = 0, QString skin = ":/background/res/skin/1.png"); ~AutoStartWidget(); void initConnect(); void initData(); void scanAllSwitcher(); void resetTitleSkin(QString skin); public slots: void onCloseButtonClicked(); // void onMinButtonClicked(); void setCurrentItemAutoStatus(QString dekstopName); void readyReciveData(const QStringList &data); void readyShowUI(); private: void initTitleBar(QString skin); private: Ui::AutoStartWidget *ui; SessionDispatcher *sessionproxy; QList data_list; QList switcher_list; KylinTitleBar *title_bar; QLabel *tip_label; QLabel *num_label; QLabel *on_label; QLabel *on_num_label; QLabel *off_label; QLabel *off_num_label; QLabel *name_label; QLabel *status_label; int onNum; int offNum; }; #endif // AUTOSTARTWIDGET_H youker-assistant/src/kthread.h0000664000175000017500000000316313260315532015412 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KTHREAD_H #define KTHREAD_H #include #include #include #include #include #include #include #include class KThread : public QThread { Q_OBJECT public: explicit KThread(QObject *parent); // explicit KThread(QStringList &arglist, QDBusInterface *systemiface=0,/* QObject *parent = 0, */QString method="", QString flag="", int size=0); ~KThread(); void stop(); void initValues(QMap data, QStringList &arglist, QDBusInterface *systemiface=0,QString method=""); //signals: // void msgSignal(const int result);//用于向主线程传递 protected: void run(); private: //Dbus接口 QDBusInterface *iface; QMap mapData; QStringList list; QString methodName; // QString fileFlag; }; #endif // KTHREAD_H youker-assistant/src/middlewidget.h0000664000175000017500000000277213260315532016437 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MIDDLEWIDGET_H #define MIDDLEWIDGET_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/kylintoolbutton.h" class MiddleWidget : public QWidget { Q_OBJECT public: explicit MiddleWidget(QWidget *parent = 0, QString arch = "", QString os = ""); ~MiddleWidget(); signals: void turnCurrentPage(int index); public slots: void switchSelectedPageIndex(QString index); void showBoxTool(); private: QPoint press_point;//鼠标按下去的点 bool is_move; QList button_list; QString cur_arch; QString osname; }; #endif // MIDDLEWIDGET_H youker-assistant/src/pluginmanager.cpp0000664000175000017500000000473213260315532017157 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "pluginmanager.h" #include "../component/plugininterface.h" #include #include PluginManager::PluginManager(void) { } PluginManager::~PluginManager(void) { } PluginManager* PluginManager::Instance() { static PluginManager PluginMgr; return &PluginMgr; } bool PluginManager::loadPlugin(QString plugin_path) { // qDebug() << "plugin_path="<instance(); if (plugin) {//测试插件是否有效:使用 qobject_cast()测试插件是否给出了相应接口并进行类型转换,转换成接口对象指针. PluginInterface* interface = qobject_cast(plugin); if (interface) { QString guid = interface->getGuid(); plugin_map.insert(guid, pluginLoader); qDebug() << "The plugin interface is: " << interface; } else { qWarning() << pluginLoader->errorString(); pluginLoader->unload(); pluginLoader->deleteLater(); } } else { qDebug() << "The plugin is invalid===" << pluginLoader->errorString(); delete pluginLoader; } } return true; } bool PluginManager::unloadPlugin(QString plugin_guid) { QMap::iterator iter = plugin_map.find(plugin_guid); if (iter == plugin_map.end()) { return false; } iter.value()->unload(); plugin_map.erase(iter); return true; } youker-assistant/src/res/0000775000175000017500000000000013260315533014406 5ustar fengfengyouker-assistant/src/res/upgrade-normal.png0000664000175000017500000003755113260315532020043 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp K;IDATxb? 5bQ S@}I s/6yF.4Tbcf/\?>KE!y6׵耇?`~j ՆpL H 8Z v`3ïY"&,(]0-Ȇ9rZ 02!s|8\PP€`TPD cd + ?p|zvr8 [:fT2,>Mr-6 1X H)Dcbr*$g#$BTJ>#)ÃLt#Q.FN0JHa5VnJ'QD KA5c-ρEe-LϴUde[krQ u1#15Ȃ}~@bPd-{hb(vRp): F"@lՀ7aSxs!>cuO?+Yeo"g Τ_Ea.Fz$`n` op|i[ /Ɋ lw xeQםBPC~"oHj@*w`q7Pj ErI* *nEo\q$Æ!j>~n)Bo'MdGv$Jn+^PGgo'IzG9){geGT&L>'G Z&`VaҳO B\lx38RpsF`h"9"_|sOjG?v[Ԛv7`b#|?=e$+@1° b< ^ AR0f ـ{vuA] $%ek K3⋔8c#0SBRzRR`rj܏Q(y#95.s4<ڄ3C Dex1QK.aMZtj!Wȡo-!'ѰGѰ+rQhDbdL|^P,J:Zl`Aw PXC&=5qt?/z׃n xWDJ6%9p#7e-}dr!%i[ϋxIWc9v8WG Б#F`KbU犵]MJW`T@X@5}&&ǂ@lѠ4\r4z[C [x`7*°% bȣ kM 9ډObUˑ3%  Djtb m(eZ#ASjz>IΞ75;GRI~ f>OGg*ȣT7PBh]Ĥ=JP#{@ُPGTHdT Z YDP!HGUf{sΜ3wtÀz3k{Y(+PnG;'ypäǨiG\{!.iԿ2rpFb\Hۗg}Wd-ZO=ٌS3BVE1ΚG>Znhⷽ3?xs~;*V3{RWBOp2g^lf?TW;:}%4?4-gyʹ/x *T@?0Y\S6cډyIX kHNU-3e xNDfTtƯLQ-?%c!d ,MDnBk vE$L~NZ„=*_aU͑LΚBx!V@2rРnY5u \*#?pGZFuxVp奖&:W὜Cj~)g}hlU\ -g$<HI <gԴ4s[ePM%Wd'I `Ф/]&) hzu d]Fu M 8K>sUNe=;3-3CܴG,[Ƃ3[đacvإrYc##F?5:3IFd}ċDE c>S־{QHM|@_oT.?=YFp$rDc;/K9Vb@E7L%ɺk&gh}>.S|$:M ;+B[iՎM%m`la*4$ -9+En5>~u\jiڧ=cΏ:ŷ 7TͲ]5]>k³B黼R@ШTQh$hRj"!$PL0F1DQyGC@"PTR(nV two޹s]8ɤ{Μ;y|t fxg+mv,[&6P̞kV)6h"k-"''uiS `LHÉ6h!2ԃȏg}s;2l,quG[yp@Gǩ~oL=UZ ne3m'Nes,NM:p$%lYvL1*fSd*+sI38z7㞿Ą5ىoC#!"?W^8Ҵzq-He`6;R1 o'q_;Wjɑ;w9REQw$bvj& o< D+TI jZ |LU@ɘ``d/Fci 3 ߯'15s^92Ps8ŕiʓ07!ҙ%'s-/9|p*Цl1DedXnz)o`*ׂ)kiGFCcZl[hPkg.u ky:{N^Ɵ]Ff7٩_ǒ6K. An s/6E\vCju9^3 L >M'K~A^w{#ASލs)"8̍a<.Ҍbʫڍ5eeEcp/͇o [08}Ẅ́c(t]{B4 @>rQT>OQƣ \@W:bfRE- /PtPq^xtGzv:~٠l%O*!:xe<fTTA7tvuٽUʌ˘7|&";%}T sîTV;x1 &vI뀞N y] }t"ȭutXOy/ץn:e|Gx !х+[`OIbl!R>7WX}"c״ kQDhl(R \nEdwCuk_dѼ@ܦ"iQVžµڛLIF~MR~2 ⢯~ټOW|6^'ebAЉ!-d{; %H2X+=A6*3A k,S]}]G>{LJh˃e=뉖^4nϖ/y\Uq7 y'$!!A!AJBAA(>LNB˔б2`vD3TA By<=޳7's̅{sٳ=x'Pğv A GIi{#e٩6 VPktWUy*Fpߴ9BN5L/˧BQ#?^M|"k%KuN`d$al-ch{bˣ $ N92弄Z"`w'ݹ:dg"8&Kv~`Ԡ.NAGx]eEQc;>Q,fRq!'7[ј#op={4\DpQijl7[&WϾ,_wZnˋrO4q-O䏑tHD忏$c{ٳl$OòNH{5¢}>T t-wX7 l>@<~6C5d\] Сd>YVAJ)=/SCpKذ&"l)> M̾ŷVDU (^-N5(H:LcCjEp-` 4 uHs4&[2~U}shZ Ffsk1aώ.lZڀ;G*A ra>n t+1א6knWcƋNdVH#nr< .]_!W0qdş[>X1%Z RYQ2󔢥[OKNn8f氜4r,nuU@[;=?a"퇦iwH2{ ^(yr{UTFFNz2}XsdZV&Wx uZL Z `e`}C}8hÚycn2R)n;} }Rlj6}<rF hDސXCJ#\вޫ-fB{nj%P[1 9H1VsP "ouuȃkŦ> =7>RwI7=~8As*nJ ʿ8 ^?̵FV7uee+# g5x}O8ԃYn* 1 E>~fqqL^dV_ShNюV.s}MȤgV[M 65tEe]$j>SaO`AMu@kq7@3A{8;\咋W}tv,5ݗ O \5eF퓳})vLHG[ә+vѾF!=Xfjg2ٱjUǓ5e™7NcO{4[u<ɩ縚yꔳz(+DCt΃p&^`H:4JW=ʸ\-F<~ӫrfk|dٝ|lȒE+Ѕ" `1/5`AzzzwB9 lԑ! 47KF+ +(-Y Dx|JBok3#Աʃ( AT Ѵ*ICP[Je<2[+WG[pGgcRپ3:ӽ2YȁK֌a`CDn:MۘPrxWV -1!!& 8WĸEi~L١wBl7$dsPJDyug] D![ڥmS|J:1YBA(0")hQɦdA&]׮wU' \y8,l #wRE;Y2nHቀGlP3^XQ]bS$yPe%PSs/&-H8c=/h6Dn}#pA.J4v }.N "Rm'r#Ⱥ_aβ.3q=[ ap:g߷tDeVr3nqPg<2oh`|&@CJ 6!G/ ^DZdfCYo!MXIJ u,^v8,H/#D%i]u1$IG⋠&q#(@6 # 03 utVT7==u޾=N^`n׭_b;bڎ~ hQGJ@yI~-H;…$Pt1\5*bai~+B&a#na}dϹ:E9#G7TQBÀrWS #zv"&_D2.J$A!:s`[},yg Sk ZB- Wo (i+2kt,$-8 xq!}v,x4jSAܹgXw2}xpi>G[ `;?l:J^e ء؛%HsB:-H>\K8=L:؆ZNv0!\F!?H[n.>|'U1sޢ2\X; {}n][|HbAC:^w,_-ogٷ`. tS& {L%+/<&74Uƺ4J2bx0$#Ӭq'*g|[i:Ck-sp["dRX-0 3כO[ɬ vg阝v+ 'xݦ#7JM l@4M v-hܲq`B kSۯ~5+nxys;Y΁ܤq#;(b}|}tc;%SK.`?94#t6#RUVVXn'H`QygT")ctR|X]"2TC33hʱTxאS~>:^V=Mz峈(^wI[q|`r`uH9W#By2qDd^]kCҼ6? PYNx9L4ip *tءNL<5>1R. NF'P=Փ~Kzث~t\: BZMF_mbqp+5]Ԛa>M^^#z鮫ɌGs,qmًo|Vq>ZX]*->a*G.;?$eQǩf}jcd9hz(+X5mfQSs8Āy3ߋz! JC"yC;}+jeBTchwR^1K妓Tl1*={r} UKH^Qg2“!*թBX "Ajt.Q5, web:wKL(1\i%¨jCw4Yi^Mͱ ÖKfs: 8wjz:T[Sѵy'_B81bT'!9AW%J2ƫ"F틋%GCC,f1u[O<@Sq>f~M磣SL󶐣Jjέ+91B( P/R ꢒ?j-5v% ԈFZVGۮDb~~+΍}~$,S*˕䯞 eɛ!'&d+) &Ǻ$N_L}sm##CF0=7k3R١0AᚭG PݳK#xnDHːӜ>amt.ہ`H0L`Ky70Nؓŷon=<<1־Li'Rı*|ʮ *ThG8gԔtv`ici),.I4սht˒ 쓽/\[NURĄx;|VnuT}qз]UivaޘMr7#i9$, Gg.Y85'4`oSTs\eb>r4mdG1OVhv7i9˶lX*;H!܇]ɥQ(L9Zo9/4˳:V 5+HG]ّCܓ} lOH#sEQWZo: *#ضSAKK>%k .v#~Ef`c6Yڰ)ԑla5KR*m1"F bFf\\.f.kdN֑cd,4 WiLVY(E;t*$am*~夥t(`~슫>|d,ksSuI c U( j=kr;q p>`Xj1a_`cI2HQ|izK^Ѳ.p#{Af6MN&Q V/cc"Rt@\. S&Q-`dC}Pw.˦Ъc0܇]bd,zKrU3GDb.Vw"I YY,X'չIfZ2If.ie1A7oWH 5HиǕ*Z"'MXjḿ6duv*v蓃9;@bGlb_PnY"cHV{4ihWd`# 5K麞Ji 3-,Ҿx@,$ c =^7a~]$JA`m?[Oû2ArQ3QhC]=4\"%5diڨ rL`^iw$9 CLiThy/F߾BէNpIJ$oڣ;NZLC5cu<!$ ;2;9Bx3j\4ryE;u./46(ٚHdZ;=.~Ux-;I` Rgn)1v~m3Tt ě/e=f](_ijҾN+b7r]D _}:SLN늠HY\Z/İ._0y R^4SaQAzϱ̐+A{`ȕ"⻤Tjrk|YWЭo?6SV8t6mT[1y$VR㨥$c@ݾӊL],&QEHVFݾL^AYrl=~>NG<:/8T117O JXXd8i :[j`CQ5 覐sͲ+U4s:t*.d!w0d5lXW=E`3J8>eo4zxTNMOQ.r*-CTԙZwq9uD)5ILVT FnN(k!"1ʱOag+*"E]Y!ܼP.҉ihUn n$z7aI^=#m=&%X+ x$U x:~7%ʱ 'yMr0~ 6et9'-!9.XsoXp PdPhn`*ho h9 YLu1qcu6,&љ6X:w.μ8Xe/zF0ϟKf^E4( 5^2y!VFfֶ@MurGЗhĥ9=>mxO\%N xSaC'\eaa2v _= xM< ]߫|Gë*#˶Gt m\<-K K? ݃Vq>n>=Xl"! l kcYlxA6l;VCjq0'P"Q؏E%f+ve+tEXtSoftwareAdobe ImageReadyqe<bIDATxA A wxRG3+agREI M))8S8S8q p pNN))‰S8S8p p 'Nԧnjz +VVIENDB`youker-assistant/src/res/trace_check.png0000664000175000017500000000666213260315532017360 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp & IDATx] S>[mXP"jUlM(]uq[Q"*I) !mf3V2QtײR)tn*65[Tw=߿3|罜sJ*--U^*SPN`\RI}&aSJ{"q&tA5AA*;(8$'(X/X'X%X)8t\#!NV0!i7DuA}Z0Xp`SNFO-T0O0Sp` r~ݹv It  V  DW#m,x1#=ɋl DKD!` ;;KSlOl uYC,)1\&Ń83";P1Uq S0 oAԹLQ`2SI=/G*D$kw+^n Ll1m\'I`wךaU a}ŷ Ԏ N^HЇ΂"^AN,7Am,W'}E` ˧BҳN(  $YMEu>M`KA~MPF:j|Mמ<@/j>r?/+1yDG0Di7eMOҒ W}e?:"kLTMS:1ϷMYs">TЗ%_(;@;ŰVn(`a6߁Ss5f-3t^ H~;( Y-'(l2# lJe׭A6xfutJs3fF P*#AZ*b!wK~$y?UN+eR(VASlAwJNH~`7QtPJ T&Mdzi?꘨giM#^L ,:ꈽqY`).ݦI @\uη{! )g0pnh+wIBwa_7ABw*,ڣ ׃N?΂ԏ߅eq!uɣn uV(;r'"%%S@ĵ')7s#dIwg"ewɠ.Z6ɳ(z6hmҹ>A':|FG8z2G(ðI*br!*A?_pIy m[@h7' B}pR?Ild$5zB먊it|2(TEr- 0-MWIENDB`youker-assistant/src/res/package_logo_gray.png0000664000175000017500000000312013260315532020544 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ouIDATxڴQ'f "!?AHh" ^$ ZX(/zx݉pW$ʙ4A4Il)&=w;{oofv:bm*q2~N,sf}%c2_l3 /[{ŇPA,1Zro]|y 05:/LU_ŀ?pjƢ)|qv8pxsnN{X>Z5 ]1`B#S*|Nj)}mkջ-P2nKv[E"rĬeEb% jZ4͎LJ!M&*jwDS9Y:VO #tT0jB6ʻ̎BzrD:cFiE!g=cvTRGNbq4r[2_L`0l6‡4? ,UF *&BH2vBA19W!{ܽ}<4Ce!?g`+;sWѢ3-4gz˽7ŗ)')K{'&:5;LA;@~cvu_ F?%IENDB`youker-assistant/src/res/bigfile.png0000664000175000017500000000505513260315532016521 0ustar fengfengPNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp q RIDATxylTUόDD vFb#51Fq#.q "D-q7 *P 1 j V${̛fy'{׻w97$34`<("v~߀ tUxPO` <3E` y ;𳛕ԃ2p$x_R|00 "ؙ jՠ+?.` PJvhRDE[n0vluUFZ[(!oxC958Y_V|#9(PDWXrNR`%tusXF`@3R h(s#z t>]$,[[6zљQ UeSc 9QmszA &XP ౔Xo1AraNM˶P CAd(#:cdpT@&E;*IK&akn ڐ@tɈhr JF;':V/zt0C 7GIGu}R FmcGS ]C&EPjCˠ̉.F->6=i m Zi/ :U=_)O@[ɪ ҠI5u>j(GsKDxH_˔r܍I>SY 7/&9bm1}j# :9Σ s%zDmܞ?a*0k4ܝAfp x=g9>يVQtZ'c!QmD+XHL4Z_p Y>m+ӶZ@>t<[ 9}{Le>Ksڶ0UkbQDFE)_;3yTB1ېٓy U~0Y1L1qx u"'PY_w"Fz(HL]fzFVjA7dk<%:TƛNnǂbPj;j]$;:uLs= ؚaa<-䙺ieN¥loɷZõzKέS1!1)ߋ J_{3y.wWiYkteuqޢT=zO̅n:J:xHiTkBioh0Q-=pmM^؜}-k ǀQbkK:?&{r;sorlHeM`.e:IENDB`youker-assistant/src/res/working/0000775000175000017500000000000013260315532016065 5ustar fengfengyouker-assistant/src/res/working/11.png0000664000175000017500000005214313260315532017021 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp U2PIDATxڬUkA~G6Z?hz TiыJE"xbAx/$"-UU&4vmvL6+0;7o !n|<| Y/wsLL+棋pntpɞx}T%5^]6>ߵZ 0=H:Ыݳ76݀hY  ۲3؝׉aचFbjنTe[.&T 1:}{s;Xwb"I2?= cÎ%=077uEsE7:zTRuwnd /ADWZy y SSH3Dr Q.6#n6o@A)v y0S0_9)[5+XU$kh2-矀)m9Hf .0(A`װdϮ~MW _$DBEf5@k,-oJ˩Cb3`b*xW' Xh˖8<)|OrM0-7tPq?4w÷fa1_fΌ _(v80<˭'& _@"X(h`h'ZDҤKc6M,,bᩅu'\u73cSI5`bұFXL.E fa#g2TT o c'8<_XWѻ6 ֤G:tVD~zP7)QvJ\݇I=o8Ρ445dp#wJINU / !׽Å1/6Eڶ V"8Q@պ"`Xmkb̂k?Ou첚/PnНF~58fmrD*N0wGi?[CџL>[SpuzM-m;|\i z1 Xqy$`bU{a\ Mc(^{o7L*#7} g׊R|H\޽w< K~Z/[iG߁usBvD/x%D5u]_'2^\~^/$J&M-/2w;ϒ{kſEWY9H.?$Ǧsy+Ÿ%C4%M$ WЋ=7KÌjƪŤ\\_Fn3r3:E:äyC9t􆬤0)ZAF?D6~ΟDeHZ!6W!-`ٔ-PhH9V.jfQ܂.XU@:w }|̺ Q8x@EDܜR_a|ZjUN&4 0N|DW@+MkzB-8 l&BFR,6|(vvld"JDN#*!d)YP,tnkR=m)LҥvV')ثw*lk twn ՆQṽ]p6I4ԏEhl?mJQU KJVbchA1EEG -iBbb{I.53;ݻ>;;gzBazDgy}3vȞU_'>,t"C)pw' #>axσ8o9B78zDbّ؎OYuTyG=E3h T{+]CN)]nVF]!]g9]pTp4G4{PG%\B'?+B+e,HɄkY&^q㚝-g+p|IlTv58(Xf9:FW5 lb_vľMk~yJe@םwL&np8OЉL}zI:s~x,4QP .Hz#YfC]N]WVWVx2_6]'F%TLܤ 0>n&6fs1k9RSscnw|iH[GOFS 3L!1H}6<7E>"U~|ݒsUK{F˵تGICM\",kgRo‚%\ y#ddg"sESRûZk x6•E٭1A{;:Dxs*(jR9Q 6hm3|zmw Unro<d$A!gzS\.B\ɪ rL+Z#:@&AV-ޣʯz =QbsTW&Lϳ.~|m:AXl\@1"@g7o(O%޸}~ֈgke _#F dCws;&OMH-#2eѩS/WUVWqx_^v ՜Կ:T@[Q+V1_G3zAW<,=0#7lw]xiR*IюHhF9. |"†dL2r3\5`=LqaC [G8ʌ]$D`sQ+5Qm`?B&;@2gfajL7Dl$j"mrpbb́އ;n8 #7ډ+"BQF8 Ώ;t#cV$$}8;NcO^s>6'r[&s h"yvԣm8Ԯ)&8!ZGT3豘 `NLhxgĦ/&ղr 9|@ベ~@g:c.),GMnk*ʢEܰbz dRK8"׍o`F>^ڶm?T]2m[4#IrMz8'}tHCp|d{:x@^dKnn;kv$lV̓?.n.NbwTFz_KWɊQP]>r\Mdg;X'-:\n,eF$q|j1 =y$kytZce(r[nN",GOǮ x pf\oU%+٫w_7KMSK.#P' E s˘jgC3Ap_QN@vs1XHRX9P{7+ Dr "g7>e~5LʲXOZ&c / ~}$#vt xY0f!68Z_vYr^c+Ftsݱsi=f΄I EO~7Ǥ[,4r1 ',4eqQ5 [wu'Ϝ'&hY.=,s'VjTo4\-&prR(H$*)gDbPva^ce>BK\9:X[\.^'芧i.v)|C\ɱ]ȥϲ8|6lzW3E<[ _0JUA9.vAk`c1epf^V/4_8E/[\XC4 ƍeo蔢KOrEk=PdoTi brS\y5˯(Ílq?e^Le(p_> $>G;y~ h⍣i-LВ5lqO<:kz}Ovz?t*4}-K0~hA+e3*2"H{#M#?@R px pFT*Vףkjo \f#*Gfy d{;<*{yfF^NÃ=gIm_o(by5pC_-] T}󻛁٘eQ0 c(`,r7,Ɗ Hň2E+$e5.%(bT20+y?/3ܪww} OXCd@&%@U>[Df b7a{[եQ1MJ!MZ5|g\)AS((OρMA^M$>L#/Wz?*T mvۙ,w1l T0y!r3}񋨂*Lκs%:i_e"&-[CVm>~C6BNAwԂMA/]C[ .}Q6-c#Tʓ؉YK:jlg梍ɭ kK>uV{~ 6|?Qd{"\slfRS!*>Ө +:hOTp*!QcŌl=} \%O u-$+.:%ҫiO?p뒜l16>ï}AR1͚u,zǴz}xF` ꁦcZ]v̡8YA~>wF hQqE-C:zY)_rPc)vu*gz:^Z;^ی͕P;9a2=] ?~Hc$Dn5@BoC` #7m|^΁'F nh3f3hUy`6?l 43Θi8o徬>-fch:ݐp+@hu!"<,}1F>#1)l tMa 86r)Gށ[ `}C9l#j&rB4k.H@."Ye<Wn}+vX@8?`h$uWdQ-Wx)” =Ա+vV.w)#lפ9t[ҔvrǍUdj pmHjj8&َoi"bCҧA1X;jvղw:$Y@b<S\ lDNa4 `nƢMWdm}ϔѫM0Rrv Fzh|Hj7!o(M_Cż˾$X mM&JL‚"mbNWKINQ)t-DgmTj##Ҵ;=t )@RWr"|7ɲ4\M?Q/7:+RRTڽSeC v /ؓs ;wZZ㤯AhTË47'8ضQwV 6=5ŝ쁤EQ߇@ "̍.FPIa1q#h=<.(`ReSl9iN8+CcF(a jϷj4q:̤Sx64DĢQ2φ쵍~h 6}^|Vg[w+dFμ Mm1K5\DhDiomck@QacOw61o;iw~ +,WόFZT=Otw jV'$(mhA\^(qإ8E%ޢrKA/ .},Xpt&qsPPMcZ,"نQӘ?8/Hrߊtwvw'Pj[1`F &b -q< i eKK$Նkzp]k8EMҴc)TjCN&uu6ĥWSyʗM&'*1R9ڋsɮ8S/|s[ozi <\jj5x:U}D .}AN4T[4:b)/H/I8bY4Ԫ/yA!Ip~Nj0%`ZȈ+[n8!< ,w3)lkAvP[ a;^?xSie4XF$ 6I5_#g/]L}!J"iS "'f%8ބ7wvĔ=3ر9lRghϮmsf+`ˆส.fE$#/;bJ4sRnH$M?utq1W|yL^Nmm"3v:&~84wl6Ck-6#Pgǻ"s ;56^j?G Z_s)lh:3;/I Toc E#R #g-or<3;MEW\g凴,UʚԀ:ꕈ],a`J9gi u+4~?7[>r<Mǐ-I:22^l7zzl/U!+O&MKަ+˟֐u ?E>FكR ~iNJ^pIMeyGl4b!:D7A7P/?#_Mv{V03Z~xfn6LGӌذP;S:ږSsU#n[p4R(}> Qh͛d܇rYV#`\} 4Z~+yR= ~[D jω>;e{Li-ŔQ~r*y_?ȤYb5vjY _/_] tcZTB{-8qfF(;  &J`k"3m&>ٟ\;IKJ\[dw#ƍHFRFIvݼM^:#/\ԨfbR2c~nnvlLB.4XM.zU}FR*]QUr#~^-%o}dUYFA1LT~T.tHgQ@$wsm:0o>MQvN5f 9)^}p΄!DUjkn,r{Eq\Ϫ'놽i]1Ŭ+a Ӳ`RqŻe]^*N˳TO,f*L;.+Wyw ,8N,a /e 7Г/dp TiaU\1Iq8MdbLUPvjTxpX }A=| tp$}1c;EO*`Jt, @P ؉\X`Ս`2Ugnj \-]a,J!%_ Ky@AE:vgrNꂊ_5{ҞC9v`_dJjyayK̟ؕ)H{)/$MpqH[:9O2zA0YX5;d*\>{P77߫׸EDͳ˞\| n2lnr1s-U.<\( G铬xGGQOF [G`6? }y߻?nRvFu߯.h{-_=[7y1Źp|/m(BZl1*``SK`J9o)Ӆ#o+rNeCmWj4UՃ h pB1"2=>o>+%vbWԡ' &VS\\Gsg|P-(0zSp||4U4=V( tU \z'QP ر%(0KR]pbmJ9BA>g[Ց rT"I$xal8]|GzTKaN q;wP 8czE^a`q`aӗޯRRN$3>t-az[|URKݛ>)fEzbu@/@'HNwUwRZ`zbu#ҽ{RCz'/?HMT7JD[_=?d!N)"&G?bVɘӈD2h_`[@o@.,|y>{(4lZǂl  qݴac/q^3~ixxn`?k-s+!fWf뙩̚00UC)&4(Y~6N,LyK7sB)Z3?r{ -}Xf,Ph e tNX@vZV[\9#s0"&f O6QYNrc*)ȏ<$S 䐻-3\?iQ 0e`$(ilsG8Hu<`obIsskκ_Q Y)] P2AgRQ qx z? 6(yꪓSΌ]x:(z~Fsgȿ63y7 l!XSp8)JҧId2IC}<AM4?KnO?&,?Ctl҂#횏_ڻ8)39730 ȍfjL6$!ѬaMvcF$hgQ5YAT "0p=su^뚞nկ^}&ɷd/>5σ#dmCɪ o(F=r{-d27`}A&$t?\UHF[h%;[íeqE򌤦7y NT\{`EFWQxU8JdCd@:2S?dDHm x.O ҷO¬!FZa`;fTGj)̆7>:oԪOOS r>ÈR8+(p ` 9iUDUX'$y6nLaȧIov`.7u`mi*7Ԋ@{ m je9\~bJX'T /:Û%+r}mLD_`3P؜QkSTj6#Pmà۬˼(9V^&)KMOoa` ƽdэn_#]"#/IHx c*pn. 0m`oPa:p$ANO~0!nr e,1 ԍw衍 $aEg/k.#B)&9K,ъ/zc&] +Dt܌7}|3ZDO_<6zТeʠňp̄ ŶZ&)pƓ˂E p5F'зu=Ш<~[F9ˊ0ǝ["C7Qʡ}f+_I"eӅ(M)P#+"A] ִ4UW_yliPyd:L :ŋpP@:_X :h9|"F%DR`WP SjDl)*")\ٵz|=m*(osV+ Fە_oJ:j-7|z$c7n`Mɟ'ޯ] 55v2hTid32R+?(moh:SÊ} !-0T_|5"A*m7G2(@É)_y^ϗ ĩ{anf7Pp~ ЃQh:$A< QXаz6*@[ -]z.+ VJBz!^B P^&S:&`YF C5ذ^#DB(&e9|Iae7P{SVJYQ}E KKn 6.1S߸H/wro˲l5aK!-J+1ԝKM„X#<JV ,Vj Zr2" ~ W۠V-%Lg*/ MwHVF1j8-zNUe <d=P+?J?{~W:h(7+Ǧ@m tA/u8}IlP=/@hRX dQ &-GLS(~ؗtRc-ʔbQ +RXVoo]d3<ׁ͠IiξomCe Y-`u DTeSTDmƨ7Oк@BWQ }̻TJ7/_d?[1y֭kDTv:Tۑ% dQ^B4 \Xz, OFPx++bx7zjMH*FU넊07ްH)| _6ПcҢX.K喳 ՚E}! ORRWB zW4lI2 m@k+ yͼ”4\W0g~V}/Yel dd}e;S͔M5Uc!j=v J.h[64* a7)+s/%ݏ|9A_]RZ[;>D7z]s&]6{:ܠj J>Td^ɿַ=y UV͊#T:WTP5GY10o;ӮV%ԓ ;;a7dS> PAaq]|7Sjw†LZ#TS/JEⷅE44H<ܖ7q#m3Ftl͠F2G([hm EVV^NUd`vRO6vvSg_ lk9 !=$]z~<BG鱗( Jk|闼OI %)QQQ. ͨ.kS:ͨsn- Wd5}" ĊZt8+{ZBfWg-%,΅gt#s ArXSPGd1jP$v mE6kDҀOUa~⿕JҧݯMNGۺ5>A I#ET5`o$c&'M6O.v@Cj`/G ZFyـ ߧH{D]&+SdNTkL\?O+ o-;f*(5-GPW^$EwV D&r@OF3yd3=:n%f|.@ <{ )+)U%B]?}Jp {Uq lJ@S!Z*I ‰ C! ϗ` 1(|Mo VĬwwjy%ֺCY&! GQ PU!Snp?ܷja@Ru H7XK8l &p颀Ӄ#SRܿ}=+R&'Q]3t@W NEGD]K;~_> CuU 1~?n5К$j8 %Mcu[Y:d`)ҹk?5%`ZU 5 ^IFВT_O BJbbnn\ 2%yoo5#GfǍ04 t@t$f(6|w`@kRЃߎqcҘ(6ŧ(`I}a޸Z/O%^SG߰#0YjojrbC`XHOm m/d;R&X%(5}XO븃2CU# ҇R9Me )؛ Ŧ{{Zp3`RG:ܫ6HZ4N7W W:{CjꋧG Z斪| DgV>Ay((&,56 #( %p`|C|*ow|Po<W0&Ey'L lU3gbOWgvn 8upZ 1 /To|n?T1H,*5t"YK*j DTFW(39kIs%l6- .@%g=0>ЂHLڎ5vmJ;j"e},,^97avC@&{TIq˳Ն9#W7i FRJbOm;Q-B=ҴZ-n6i'Yֺzުm-[DTj^D I_(Z dթnMDf^1Ax)d  k/ ) ' Ou𛂧վibTxe̛PAάUNNnaxmo4F*X?٨oc)zyL${wq8Fu$7ǁ^ ao)5ʔزi׋l1vzz❺b[m#Ƭ$32.9u4M)v ћmް2ۯ@X#A%%%XWv=UQ(_4P?-R锱é_uZf'YD` e-]x~x9ԎL- ~8%Ӛ*JG?1 : ;1);m%uLĹ-) *rVϴڑCdA| J\LA`EQQ`',pOZ?@C~v0ڍl'f9{#jUT׸cMa0HquÕXPb_wP#'l3F7 v!#|H3MYDvW]l4#qT3!\4MNV Jzœ/}&\T.*%UocGnգ5QHbRj|(mY*Kכ/)k{^еGY$,q:0+PZuASLms;kΠ *إ2W a#=t'Y"x^E+,L31xmN: ? 0H{oΘXa`]dR:.2R{9T@<7E:Yû;l[>414Ob@Uym`k}:F~Ɛf><:{(_|6D3&( ^ǀ^3xl 6U9|֧?7PpPr }$Cu܉ l A2Z>y"fK u`k 5,QIDATxڤUMhA~Yc?`Z(RăŢ *ު^ěEŃkŃD)Bx04 _ץ^)NݤG}jrmT| Zf0`A 7S*Iǯw. h#4R"2hƒɶ^wa,#+UD&'l9&d7:LoSDR"GZIҾK?4+1uC fySZ{mn7{euC=yӕ7{n?jKIPO1۴Z"ln 66-*.ތY˅\"e+u$dXDx䅸wW,0SA0o0 J< |@\X3:\]qap_ wj 0 p5-˳`?+3#ú xΗ;2"|=\"\_ 2ҬiZ,53ưs?8#< i\B`WgBy{g&Ǡ :X+@|XsdW#DfP_ $g%t8;07L(Cl_"`]żזܢEOlw5V5=7C&3wE/p;z@P逛%^Bj4~Vk}TˉP0]4T6ʯ8\4 SJ?n=Nx̀ ^]$aGSHvk4so[=PNɵ\Xno':t&0e @HP(gA02{  gWi船̙Mv P-:8fKO_f&Oq_V Q…{lkbǤPd+44V)|(>}t9!5{\NGjシW56JAk4 6ca~z=‘4'"D(QՁ#nj\DBRVC؞Kn>{O7u_gOP9\ٷXF^ZYjUk^B}λ+Z\C/CLLgŔ^Y7ڏGa"/Y ڥ5傀sOmADE[gsVtNTsN{nj xq.!Jg51B&4y IVc2ysNMJ=&+kDTU‚ rGIg HA++w 9%AשH\LLw*NF, 70juy 5|DU@}PDê*W`NdoYg6>\ 9;9=g"/x)TWl{2g3LDh H+L6IA:Cn( FUDill4hŀZM@1!&j􇚘&hbHj|cc!%C((Ґ45K"Eǖ>M;s}lLs>9s`f~Y@/>81z1wHt ~H€Z617OFAfY.L~lhQ**I7;.e2 $>fp~x:[f *fϠ_DMND;SPq@< P!ƇOl KyݖU um~l:tp ڤ5(sgplFXqD(9}4iE b-+"&&8Z#vTܺRxfiaaJ}d3t ÿ]bО-2_&='L+Q.x:ntߞx3PdБ?c[5jHYƔK'tgib*~lx%z U)$!^nu{7Im[̒IlfR5YKzKzvNϒ܄*K&jY5RUQΪ4U U;jpʒ`PaΠ ԤWAOyϸmITtzd-퉅FkdCd~dnu/#B -x g9 fr~Q(Dz:e1jc1*ËV(^Dz4#Y}1%6rëqfs%Z{AU{6A%+ aۙ2pˍ#ٽ׍syEŏFz&! uhUVP?tr_kdSF'83uE5%=h&]ߖ[vijA/zEd|, wye@T $9BGA"mƄx<GB-9}lz#eMK;(_n‰Vb.̝.Ap㨵(p Z|Ls}۽Ne; :,=kuZC+ EP!U*r&ڍ#<}R7ZWsF4^kK7"^\ѹ к&~9ۉ^jƽ9'sԉ1? ݵFUoRJky./w%QCԈ@5cոfQYmv#F *m1>]]*dQ*JE*2@_̙;瞞{gɴ3wνww} ,Gf骻$Ǧe9RvZ82L5C[rr~:>el.A<0W|'4Y\pv}pB8 g \g8IwZT(Q=g0`xGuDD^/}=D0Z-uc W̰ ?{ۊx|;w_琿SVRxX$N2`wo;G] )]VBxq <2@AW9i >8>* =j>b޳jS+nF"^Us !`3K/ih[\:8)i`Pz*caHٝ1ꮈfnQjjL]&H]F:H$6f360Ȋgn Sɩ `X"YCB ] 9JR Y\KffHSw~w5~ݿ@4l2r%6襁L4±g("/Pݱ>D9Ԍfx:]25fX7h6?$m 0q^Ek_0u.lzlQGZW|A{X(]c^M /FS3&1[VЈE&v'MW%  ݍ[r^Ltv/6$Y܋xJ )уKP_ޥGEE4yF=uwQg[vSю{_3?̀ڀ9Et,Ǧ*Bv`K0]8[w)}+h-쪙O"~3`@ 讎vgIfH8+)t%^kgW*N hn9%ObT=+w|t1M6#뻏;i;?a G}>ѝ# 8x !G5[ʜ !khPS=ᆃKQ;/̶fm>/>2uA"?)й|vU8M 91'PTE1T)a^))-ez-jx9iuF=ծܵ}N@?2byfj_~곧RBX2&0uańʸ]< m>VS511왏잞ocsȞS1")9l"⎶ЦϾTY/܍§X)~hpaΝ4J7n[[m TkP[h\ytٹUBg_@qY0mݭ~j!fzЗ 5|ݚum}-Lo3ɧ/W<$eB9KNpiQ0L|0SZlZ޼"ygy?WOq>%}Rk5&Cڪ^fc}ҁoycn>b*ĹP,)lښZ^>:{:n*; *<6[ vsz0}*.+/3[rZ3X[{ sѝ&`[X4nƧ#$ŵO'fL)ey3W 80v-V}lbl DaUXB6kՖ :lɞvSJp|<m-߻?E豎޷o,:AWi(<9CdGie\XAH_<EBNT1*̞Pߘ,pD![MyQG5F8ż;JbHu7Xl`r6POWo@?%xG*lmry]ӵe?UqSEeq|aX/MP3el &;<Q![*h1=h~APX4R8k#Wt$j" wW˘~1H' zࠂjn cPkj~& L PnibDfX aQq Ⱦ@Wx 8О IsɁgl>:6A3./U<7ʈ 8ۭ uu` `͈*G`Hi 1XwDЭ} Cu[LB>D܈q-XZ-.[ Rutf ua]?tL4}]+?ܳ%)HYmk|'|y`4ZćX%f|oJ߅Pe*MޛCGy̩={{k6jfCg Gx _NL2([l{{ /LEKͷZQYUmH#Ve(vP+Rϣ4 'BA2 r8Ij6<'e=h^ c=M$Ȫvҳ;~2e.+"R>a/<ZZ\YifbUBQ\ʍtcPEhE5|wK'=29x4udǥq]gRe-jڗ?YYplhAɢrx?֣R0)^3x.%›a{CK|U|9 ;xK7>/' WbMwO! -gGIFV()^= #ЮT9*NXWX Z,ڮmPt]Dv_ڝnF7Lƀ_'b~~e1 d[l.1!CE LfNbT6(qs,- !Dz DpdA)S=)nJykgG͏8k߃л-2J vЅV$J"8A|y&`<9cD!C?otPdX9Rh.A-{%.wJ?D TQZqphn$0 p]{ W"{Pe3:Hq q+Y"7+/JA1`BV1[zFޚ#ϞH2򑵦EETQQƸ܍'X1(yɄG+7z ox$k=FZMSʖ0O\14^dEEBюdXo@u鼪"X'4^.fd1،Q,Ȓ 4تk=?NPR6"j}߰[z^CG2F]Br"49¼42KKA/7/=,k9Fn0M(e} r۪ʦwyY{։0Є:S] .Q 'pDP2>kV`T0bm`&ƨdSqkfI?lQ>LMϐf2aIM?`W.Za)ٺ Q`T+QZÒjdd2/YqKp8_eesLھlnf˲_!(W>ĽղVk7ABr3$|ݐF\ Svi9]7#-fÀm2ߟ#A"xzg{XZn""m_PS};]VޥԬE&fw0bHs-"[ [ K?,T-{ )G-MCI4ꑾY/Ixgj Y&_L\IPtr!(hy*mnsЍUl ax="<Օ6ԕMAp}:V7㻙YyYjUxa/ڰ D95,Fd3@"]W} ˾Dnu^3*2r(ʓ0ٹ'}밭P:>{r@s{cGYT+L.>i5ZWJMeONLHSC3F𝐱_.?sF M}RgIoEl({GAcřZ5 >>))]u{V㬤Q=3ܺMBc!.\--.hG6X放>*Zbfĥ&-}QUԪRv;Tt٫̲P¢ )2NEul{}ɠvIu+;Z- F2~ρyjhdlYk_XǺ]x)| lj>X~n].}>m79e8Ѥh!LFSvR O!ZON;Bc^.>=dv]5̍5i!%X*BW{v9&iCIt,{XaϢN_ehe$LТd9qL+q3[TvFDL`5q¼6Cٻ(gf?a b \Oߧm a(L)׽#*!#lo=3Qo ޸XRRYo[f9tG!⸥%:&ɺ_Ӊg.E_y1mU|71;tQndV ~`ly՛x|<¾տ/,)ŞqcS]C-O8\ۖ]ȗQ !5e&ߛi(J Or ;veqeB%H ea} ʢ>~dW }x]g52z\ 5\ A &؛t\,զV]Wfza ͜2Bm%fW2&YI'V_ .6fseʾ˕TSw^ qN너T :msE|q_%(1a\E`]9:J[g Tc k2A2y6S+qM>6ۮJ|wcvyg *[.AOe ЩIAm5%?`̽2_FUI^("~.xJwDNnٶYbcM ut`Q?VR/ia(a*fɼ@#2q>"*xK'U6u& =pa .wDzCeU ^lUںE:MYPjxg ooIK)ќH4p\f}L2{UA" ;ӝI~33}qAEUaɑ>`4鷾OU,+cew3,lp¹S0aؿ"xȤ%?+ >ceaŌ)i+RzX9H`) ~#T.SW>c~ߧj %Dj%c`:A^z#V Au92IÝG[K? 4Kђ4+谁(k?ts˄75mn"]Y G?λHe&Y%BȷkTN7]`1y)nEy06R6?t3X%.8y\H'eIs|^0E+##4:eLވ74KiUt eume~-d<-~SzgY8>Z(X5 F*KSYJ`+U߄eEٸp*`[M(w,e׌Ǭܯ# *>a=lh*^v3SZ(R% *1agP~RZsa,hW8 ^xbxToC$y (( r x<M  @Nro{^}zjzgw{f{w~33Uw%iM=&pkdDRY&`K,w$_# d|d?B+v cƭ%8D< DL~ -_'U-kd|yG.lnΩH.r/tL-Bj;q .y<(_ PsmVģooTUVn ?a;t>qMҞ<U^` cyZm!kq+ks8vW``wN6RuKqCk|6Hz]lyn}xDW~0bHpR9O'h!ߏ;Q#8ܒPŇjCsBժ*a[Q`L{Eynx QUs|`p1S@P*߱VlQTM>,4LEÓe 7{1ۨT' @VDĜ2NEp^ҡgL. Z+0Ɲ3fT1o4x׸b].Q LQ7P݃a:Ұ \o\|VT0.čNa,XCniWU62 z3[cGw5)w&堽`С-m/If,g./ ("ެ}^㊅NԾx$:, j [H'`+ǜ{pxl6V.v X ; ߹VrwaW`ۛgZ4rɔq_ c l l_Y60yPe&9O'f@y a|#(:!_N[Oi5/7[ N49R*?I>Rws_~wޔ@*##&~] ?|,-}Ъ!Ǘ;,FvL9I̥Lń aST&Ip +?x,lw>PS3BaeFK>J}-)]-LWj W$Hܿh}ή} eZQz ϑYfIQ& %t5'⚲Tojqf/V!,BZRM G+VAkCrmJ?(瞱TX8؊R1z@ EZ=a(y ۩LK1^ߒ{R'ݶ0cJ`|Z%BkQ*8'FDk k>OV/Վ[OȦ6셗u=VE`#^֠؄Awۂn5k6J촩P$_ R0)PC8 s25QaR`Ɛ2wvExc% v?9a>K%&k4#u)OZ1)}~s'k}_OTۛb5O+ Qcر?gա20 %vnv[;?ǂcK+$Se4T)`Ja .Exjl)4$Ջ۰:16u宆Ec6v-նE!'OC9Ga MK. ڵ'}R><%z?9jOrM/grt, ^/]> lWs!αcMN#,hZ`V."f]u_œ۬G5ϳ >qrT6&@Vw\4A.WZ}CWYkTz 9]l ja+n^6nG@5&g?v S:Xm?7/Q=ؕՍ x6h9I鰲&73[:-ij,OI~Ed~;*iC6e (^ط~m^U7,uI ؚXwoLJ1ЙV ylG숗j 7AaұƱv@YX, ?HRuM5,c&}¶gR`@7X-DT;O;QCzque%d1t3ӎ15Boz]G OT;նS\TJ^lєT]6q&פ& *uٶ<0HW0B{azտ,*4X0y e9e(+!^p{=I'3uf\rL ) v!R{d.O=-(6,HrK[X 㢦Y@"1aQ<@V%ڊ Mh`QL`qzB5`X_&Θ0H|IE?/\ᷕOh/Wΰk _!-A)f^1OeDq APm/E-P;bs׎0hDZiOcԽہ~Ȅxw|-^N+Bl5OB1tܞtMZWjN.`^y449uX ň:q}";6g!cšrW;dl8P 2՝WZ!/:P8yy6 gӝF/AƸ+?\%v7):iK+y_;-j24h+`(y&TKJi)@;믋 !p PD 3}OtI} f l jKRJ{ ߕ/ wj&Z[ņUeʰ&SMPo6S,QFG~ F\[KJ'HX+)Ji{'a/>c`KPS-RU/&:Eu+^Lv_I2k؍Y?6Uo)>K.›`on 婂q nm~򣔏n3%Ӳ(dLO j0A `/1X4ŔUfthg:VU9=I\(j26#ɸQ, +`oy[u$e-|LPL |qx%vUfՙFَW~N)WO.S$ɶ1+J `40SXTZ}7Ql #|^FK}!cƺo[+Q%Dnҙw4j>°N*w?O4%8]ϗ63F"0ہZ1-^ӆ%8۶[62xihv@3yJtS /w@3}.26fcU8E[C{.Sѓe|ѯbzPS-*-w٥v|k@ͪ j4 M ^LXîsX"Mqv(P^iaTٴ>b7k3T珽/~5;,DӶ VJ$v RuUU翓c}GhH;-Ŗ^/bOWO5qo;N8V . JJøRŻm Y@#9b8RT-|;Sύ4;v>KGmT"=qZMPj.l_}8IJ-d?IwTEH[,KRc{Zlu|#'ZӧSP/*vW[}]b:\eu}d3%îEMU.41~P/ŗn&"_!<(LC]>%` 56vn9}zYQa9.D*&^Umז6x oWcKdNJBs  ..JtW{o?<"ya~ 6J|ڷ4*wjKLOh>Y7pCt;S< mkF_K)#4=ru ׬_nANSI)P`[X1Y{wSJ4';l͍ >7H_Ǻp%t$YF\v*y2 G˥_OAnn Vk&FL^ 1gM+>gR=čϮ <LQpǜ@ݔc~ fk0I;&yTlPS?7O-s{_:Gi0cZbIV_5d TgJ6Iin w y[@lMƜ2VxN b21sc!*NIA@z0xj6B"x|a͎<yxVBMArUy֖fI 5//Z6%hX0MEc\9N2L|~a&mʉCc%aG4j˸ίS0 "hn*g>C `H5Ƞf]C%j#6#G-DťeJsR=ʽal6ZIPؕK I||V[SZZll[D2I#CW Q0/O]L`,f5~;_]K|zrj[Cu2,o,_ZЧ0?2p@}qDIJ C6:k_:~7ؒtې|]*fw`EIF!1eDn~>GL*蠅mC6:j8H,æ47]}]tWmhwD~A(/pMBIO+Y'R%*cFu73KJ(1هi]|N |O-,&fB.Fn ?"UpGj _"v5$# tXر11`_غܼIv] %oV^dQ?xEg`F>܏r< fa,)?ң'ژN皴;!T^ۺiܖZN#"F? fȧU-DX q,/Q~ܷ 0\bv1.ߤ#$yxMj~7i[FeȨ1be"@x}uu&(ؐDCE3AQ;ԠmH氦 RLP$e_ET=JMdzrTZ<+:ji1󴩶RIS~6L<]gV(gx?bPQ1쪩NU\o^ϵE;HA_0f9Jen&UId7oJP܆NCj^_0cOqܾCQTٱFC `3lXT~2alPFޠ>\cyY۴C0P<$ 互6l ŏKAƶF&pSF?@C~vH>ՋfN̲a c+CCXxIKw71ԇd\ FXlilPX59u;_btA;NG?ćT?3|n_\FGگBT# AJ.g̼p e85nV{(,8^_T%n|]^5-=$Qɖ:YJtMxjiٔϦ֣/+^g_.Wz._̽е{j(mYƅH9ܖ?PԿ[ԷL^y*1Mw:lDs@чF&&,@N$:䏻3U[O=η/=RLQHbpoN&~PR|sq}6*s̓a C:pT9y^ Nטk朹˾ ᜐ /3oƳ+o<œf﷡Mh뛔 ) x':`9y^;Jy~0 =~!Vhm&ߏ؁P~}q g `ٙP x]S 1UVZILed,3mӔgn+A?'`kp!tu[^,_8S4Ç~ٿ]M lƪ .e}qpqߙxM K ?BK q #T@pPgDIq3̖`O#Ӱ*{_['.| K!iqwLs1"tMExR{Ksx̏tkNwӹ8xK7݁(mR7Œ5ژ̉U"!}/"DOJvуp9*ʚ.M ֝"_'L&ntP0Dlh`{@Ly?%/x]f*`|zq'Cӗbуw<6n5g RmI^V7UN6|1YY6m8oBOďs[`'tSu*p ̅K5J!"g']y ;qvi4K4R_VVFsx(EKTԿ@KTa,۳l}NYN$YOfDHAz#]kHM C?&d+{IENDB`youker-assistant/src/res/working/12.png0000664000175000017500000005221713260315532017024 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp PIDATxڬUkA~&jP\@S AA/**^<[PXŃ xxQ""Z&R6IYfYѷ,cg7e_ \?us͘O.C:{%d)oܥ`W]U8uWâuddK&o3P^-?};whO Xa, l&9}Wdum.KS1j ý)pO 0YpACP#N*ovNݳw0rXUjP780]Wadõcg=9<|: N,G,dm56yZI%3 ?]75f[J'PMaH&w2z+ R`Z| ]NûR)!K:svs/[׻9ռ|x#͍vLMsJ:TXQg\ޞ.ҋlՔd~z,l҆*1 WQK=lG +xj [k4m+b" R~(xiREƑ[*rfvFC/!YL:?kJ6rq;>. +"m爆`r'90׬[?*DW\φ" #c߅Rx4nIol|ޑ ^1f-!QEa#uIbBDId A!E-ZEmD)ZA +"j&ZD h !jaCR*Mrsw9pCh Rs~ϪW:c[fyk`s{^6ʩ,l78/ 6~ָ)Qm4^>e8X0p@+&`b3kE}6j@~V7#f 70_Rn^O}iNg5=C;N76,bR^Q)ʢCE{7|mq6H_BL戠0XgD;\?/@Zh Z+ ~<y> Ho33Ur3R%DV@i!caR9p<IDؒ&-h/!eq|Hui, #bs؈17 ۙJ ? >+ˆD_ bHmehelM8)6qUWVY_._}8u8ȣ${1n9ofjY9UrۛYYxE)&R&1Li[ٞ?G겍.nA&Qfiv~Lp83a@'ů-UG:aIU =/O) WH]ۏtu'>>&b ُEz L:=cP&칹VL鉋Ӑ;vr~ڵJň'35P"=#7KX)Vؔo'#TY |zq$*_]V޲(J#YtİX=FSi'd>K'V9pcAP`@uZ %̠L/~Tg6_hω|4Zyn Pt:JIK|.m& i3}Rb 4. bF}n^Z!mh*qm&X)Zt3PғőT_A|T}1 -do'?hnetOaz$ft]~B|^T(٧esķU&DZ=,Q@3x_Dv6 %;m_Uc/@pǁd"AB}Q0gcsҒ^ZzpI`B(s*N+Vn`,s53b>|끭BK) (ٴTQ&$YD3cLX؆ff&qq.fԸ8_Jk6(D"}o﻽W;{}ww;['Cu繫-=Wt[r)lld*75Φo]dgR勰lĠxmϴ${d2s/_:\g}/}ߪ XQ!8bm ?zDx2Sە"_]`71`u>UTw7ҋg_U`3 ԀD2Y ù- ;8RoQ I[ _} $DӉZYB e^{)z->z5`4`+Tl]; :B(BJy)Ӟ/ml=~w}WEƷV5a^t Wc]'F$nhGf"ڌʾ&dՎ.ژPI2`P L5j4TRp &2v.7,Iɡ l-Q/f3Ȩx (hg)>g0=$d* nrx lBeʗ{=sn:`w5H9!2 RMmM|5@)em:>. oGzQQSC~;~nOW`"hF3|~.w]zAwWߠ` $)qPRPojuV?[is>XM {#ՂF }z Fa53^&l ,vk zݿzzaϜcTMACPe2\TWY`"8ĩe&÷vZ6]ubM,# <\JO uR~4m?9؝ ٷ/ڃf7>vR#i LB\v_0,Xl Y1Nh&ť!# .p Vn'ޱeM+O e&#Th3T)ZY%Y"]/4֜x9 `@~VZ49RME:+;n4]Nj6Y 5ܾeoNd?{#XyB:f/?Wgt'^U`sIWN p!ۅ[ݍ &oʍ?wyv|BTfYC8LVUdn=tQ"댎dBrZӉPZ\jE-(Da"z/&] @#]֚_Ptc/ UKS>%-_j{_.۲=@,O}<5_{i(\iSz[nv'U#4"m@hTE\)$8X_v]&hjͬ'K3 ;}ф b9 ޕIU]43=̌,.VܷcR++[\24h\¢(",030Ky߯23ɭ}}wGK!Ȭ T9 A Tz#sxn._D5 ٰ F_ؘEňv%!4qCىuբ)Pǀ1)??6ySDP;MA:AőIn9mH;..?<]zB^;j_"`;£kEwB6 * b tL`:xCz 6~DԤ$ם8-<&. l4Z\'@ܶ(O4p2*[Z:X iG$:mMw콘4 Q?004>ċ0 TKiӏ ׂ5QM7 k(~U\q"7I A .hB>siٝsbVl]oGӨ[_ͻa&=¾Ckf%/nQ@@Q':^BzWQPQ> dԭm><Fyo?c_?eEwM>15+Dx6x#2Pݰ}degT\p!1-6b'kNeEq${ם*}69(C;9͆VI i+vRSO 5(_ &unwhGn`x,cۗݵM!U)'Ѕr@["*6Sԣh'`>ld'98cZ@ci,F淸<^\djn r̦ƈ])z!UhKySO@`sgwε"4lQ29F=hCw;px5}x|lkf98>l9 _ -+fGqza*h, zc|W~T_@Iϑh㎊PYck]bG]<^(]A_"ѰH<]f&1rIY;uRv#ǒ3k@a,P}|qMA8< le{X]$ d6]ҍd-2p Y2زǵv:AvH/]8ꡨfFw/}!Ca#3fԓw)84o8g_SÆ≄/ ۂdjuWAŠ밁806#x̪GղuNDc5g{^ҪֵII4*rv櫚_QR9\[mkتPbv5ɹFَ7Zv4Dڼ߇&јϪhGkR<=lDysͿ UxrkmjAt4 "Ъ j8Vc&Ǻ㯓/ EJˬvchnƉ^୆F؃~NPlmI .mxzp<hgIn͝ϯNll^;.Z[%96T^Htr0TMr :`@wDR$t yf?\|gk޹|*ܹB#}.ACzGnowKNQT*婡U[t| B5Ah|%m )6IUDkg¦++bP3&7W ȣ5l pB.Z}<:?3-|>٬QVO?#~ eelΡaB5өy9x%vH yccM8zϫ|MB\;OwB۹O<~lZyS\I?cHY' p2#>S[5ɤWԬ$d1Rtv$eJH.rn9Ȱ,z1 # Z J$x?vseSmsU*kǜD>/ _D 9L٭lȈ@8e4>$؆u&~L#Q2"g'TmX؎Nl"g_|Pq|Y씲Ӧ~7@޼0Ǜ:6n)A- c-UoK5S\5fưCe_nP;mqM]D0dEZr2!DvDp*NqL" 8.o"S#F5GWSθ⥤پ--HCr56ن~j?ψ(22p:#[\VP޵BA:|J`#d';PwvT<c9 S&|f?dlnޝoʪ@aR F #o<(P&fak(=nk}_{q4횧׈[ݓ͂HYd11 *۸e` @OH]$6@H#%nqylsOm`OqwEIavTV{!o*'8:Gd^`';o|oLTT*;*QƧ5nOoO.hlf]iJR&!}bq*rS03C[ngٞTHHH.w9L5)֟/\ѶFJnXdm |ⲿ++0]Κhc;DԚB$w>&ܦȏ2J53 W=Ա]TD"i7/`1`nr~gLebW]7ڻu+13%Pak^kqaߩ\ E"Z,+f"th Hya_Ȟҹɪ1qȋw 7 AA03ϽMOiIB kLٟ<{F-G5%)*9usEA4P ~2-ς݌Xls_& o?shTϫTQ(K[ŵ4{ k+lwgJ+*=Awzݰu ޿q¡Os;vtuzXa~lilOm/KfC@yOnٹ Yk|NƆ(9;J"AGԑfwCƎvϛ+ȋb;N^XL% A @E::QtmtZݒg^ ;ء4C[7;T^Um|X(Q~VDHE:3H' uťe6yu`F@ 7| ϒPz2\DgYK%tןe?|kz5#eY[Fd/k:d.l)+u bܱ*42eh\'TFML.f9clv?)8ڒ0Ӈ=ll! K>h4ʚ}}sd:=ȧalXK&.m(7mgm#kMn22\""B㧱J.otYy-T?& | Mٳ^u$vDmD܂WjJ6E@\"52l)+@yA$by(LH8b}$0DH*/ &QSx\Wsd;  OqNiJD{P9G9UyϚ}w[DA.a A;i6IA 63V4N['c]E^HD[% pcu UK2' Gy%mQX=81r)I}2Iiе O /У5[oC*_v,Ԇcu@3/@;v*WGlW@H$ՍF{~XVMTKdi.0@{[d7gGp"s#-,< f>r`+p; E\fCԞ? h`˓\<$tϥp SEcˑ(ӹN25/@`˓tm ٲXU7$Jl cfMsj & f}#:J֫/_I#J9@Cl㛿 !0.}XfLn(^?[$,ClU=L6uB{d2n4[b -1+eoTsH䅡85ɔiWB OAtT\A> ;{ީu잳1!pw'9~j'쪧lbCVID`grQq=Z }}{o`#ώ.?} xeS7Xg;{荏سogZ;g!@,nRes+QT\d>܂ &Z-Wh`TBz+@{W&GY>H29%$$'A0 8 &R DԣD1 7}m3ѻ09c%INM"߇zX}Xm՜B֒d}dEJӵ < E\'ZB=~EExk[="P"z/ru㏬)qH o31$e}dй>`{~K#=wF]tQ5t#c3j qG{d6Vۑ1W=9on=]pPfM}(sȧfޢts[Vx$;@@e')c9!A?Ul[Wm͉Z#p]4tjQq,V kՏJ]f̪>W*\K E!@VfN5ޮ U9Ш> |Ǩ//?9Clz N+S}/6OnJ(D[<q'7$޾'#F8Ư>e(:i+gkЗHG7> Qxcg3%L7Qec2(,(îIƂtͩv7;fX0&ӏn>7Ӳ!n1D|Y/C `%QKt$ _}XK놗VT H x#'',]VN?iz5=t|yǍs慒f@_*%$w/^S/nV."魣]|%Ma`Qy gT?C +ywz&趞]*2T 00%zrc>E7D ?͍r"OC />~4d/N(#rXDݣ]e )zh9y|R8ZtuȄ%x[z̻^L*H%.Bh6RxƯe:հ^{ .,zc F_" I ytleji_{{U倧 [2Ʊ%xE׿? Rf H*c..2lXT͝TuTU|Zvηm`V=ƣd}LIE%~iGuzJE)q Ν" ˼T]:u\_أx#yoi 3xgE=P=m IHlUU0G|c:̹렵+3zg 9H3Q4Fd=}nN9' ^nnސaKߥ z!VyJ '"q]YҸ ,8oY??1ЕF"2.oū[_؆g0/8C uk E88DA>NuW-{ Oׁ͠+gxMل$.4lqi2XPY4iV=8`A{F{O9px=1l9bQb,魞8HqeopZ 4~eG|k /؛lUd mwrˣ#XԼ/NO\A*f%UO'N1`q)/ . GYZt1h K MO i9.0=Ja/ ~#YJ:AK/WYx熦g}5= @K n~DQ棉][ޣI<@mVb 5t YyPr =XPD"g^ j5m=J_tt I&Ԗѹ:8_YOhā_D?5V8*ƘC͢j:94 x:{z\I_TS'Ӱ*!lhQ5"R|[c'5u0 pK+hbmO?{Z-ѓV2L6,,.#ƚAH7I18\Z  3M O&O_kwɮ(zRO^ni$G:JhRmhmWYwc`?;!ro^YP;U'Zlۚ6PCI!s3Rh MjD\ꢀ W5iψ)*_%yؼ2\SzZq^\VA2BX?yWV9W;Omr,>k'NعS8y C#<\] *0‘7bHfѕIwU2}ͼ>&Qd &UChx25:_7?GGo]-2Ɲ(6ṃZO A9.H\ g 78=" <ה9L* sq] l(pj@=@JO7Sf@{謒C0_N%((43煆NXsvc'֧@uj D:כ6PlzS/&X2)mC+4b&D Y=`++z|y,U ڋy17?˻_g>Bٻo EE~=sl]D]XDP ͐bk0DѠ$hEp(4@`3}w gN,mɻ*]IɗAE{ :֞M~y#دټ%p=&dhn)1lQnPP_uG2]_\zN 2oKrxqJYeű:Z]w^J$-ʁpl2kq tH{c@JYj!96vP1L6ӞoÚhᤊ犧yg{80 "I$J!g[B;8O/}8U*i1X2+0G9o][<~V$bbJuQs}(̞{e|ЙU /@9=]Kk$M8bn{Ѹ=p"Y])B`U)@/OʮGy!5Z;A0FEAAI|^* 0o^9ʁ(l0 AGOvFgJt FA!D٩Ҝk"ER^ 0EH(&JNWF8$$B֑}"Z H̫)PnKk4rE&M#yqNZI!:g%nS`=HpKa Ba`O)9=3pzxk×z]AlXv?4}X^zb޴:p=V͢E>!L=.ԓ b:Rkx&Vƽ$ kc:mn|E ݵZ`g Ԣ.onf\~.8.\0^F|;_pฎܰ{$E:*&S% D`#v~qK:cq‰F QOs.s !Y nc; }϶@gPOЇnxZozƌYq`qw-dYaϭ Y A sCS ӣ_=Nd&Z~;=̠O$Fby(תI!{i4;`Nאje~g3+f][#;@?_Tۼ\JӀ*i>\UD7vҟ'*)' iaʠ;.Z0ARQ{1K-=݋BM9 ~=`ٹʡ{=U*3iY=`dIpT] f7 TGߛ'{@*{ĖHx:MN?/uMn DF2 +\H~yJT4ֻ$`+aQj7*݌dҀ,5̘V|~cm8-Cy󩻣U0 ΄u7Aio;@8+6t%֥ggc>>J ;!^pwHbijQC/D88נ)j1Q/b.yG\Pc Wo!Kbh'L[{m,} V: DF5PZ3lhNH߬!pPN|m4`ZM8h@&Lo$sU "oaQ ncG/k'l5G017)mY2 nӒiՎAas z]ME`L]I>3VkHtߥqX³wO.=H#s՝څ:PxD = [C1-z{>-8P5,mxܖqi5ە*oNj֋'e_ۛ+]kALC4+GR ;'}~M6:xz㣤;W},BYq,N 2'udHQ"x. t?|~?RW[R;(Z8$$Ma-pr)m* 9.t"\̑ʪkL"E\Gz"hp#. 0P74u33:0h[vh t7]# GRʊqAqiuPߢ@=HbK 59{q[|l䏛:]ׅaV >TWY(z]x<׉ĆufrgnPB9 Let˖?(j/;4Q1~5^;ƕV3ʱJu3N˕ =eЎp<+AAA!*A9.d7<2Mwm«ь[(vC`6BCߡ\u81o?cUc ,v;gU =>59ltGHyX2eM(n.tʥ7;MV]ʱU'?̻So7F&;=U/'!CAU@\7_9t{{{£ 959O݄.:~,\i͕ȴ'{BABQElLbI$u̸N\/;H{HHK ?MT ~߉8RxŷvTD P8'b!X]}B t(*kOl'<>_KmYЪ`&:)?~J྘d[jLw(r?2Dnϡg\ϫ@|]* sN2ʼapn] &zލ SZ[=͛P_r`'d1Vvf=*/C *b7~, RmrqjRNp_p RWn[8ީ_ W"e;ё [e΀ @c%Z&c zf !6 !7- 5uf=B_ɪ5k;#{ԥ2AOWY,Jz-{p}R+sD<: 'k\st(Ʒз6 G}k芇HXRۆv`Jl%XDDrk'L;9FqӪP_dFwpF =)]@v=)XbH EL[8-SkZ$?HpHrL}OfDx s2*l nzU^+MFS?܀,PIP@5آmC?d@7+Ol[)oVn>:^?R.oE' 9lٶdآaϬ|@S3Dm̀~4t*?Ϯ}-PP齲y?2[ Yo4Ϟo oW2[rK9l ?Eن^*!8.>J+b5 ..?7ϳGf<98\I(f{#m1^(b6?`y ?E^vĹ2{ל6=V&b0?Ӗ\ xwo#?N;mU]rS}WxRW%LdZvTN.DO(`:2z`:sX=򺇪US>;+V&n`G4m Hi%<6=lP&U?>>22 :p{/`_J2>Е赝i6x1~~n=]R '{H{O`G]~aH@F Lçlg8m1ΣwHOM[tRC>܈dCV i2my[yݣwQ;Bbc>*#4"PިBc@Ykimѩw> f:5ؒIENDB`youker-assistant/src/res/working/34.png0000664000175000017500000005237013260315532017030 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp K 9YQ%IDATxڔUMhA~Y?ԃ/X+*E,z`K =X*"xbAzՃ^<P/zZԖ5ML&d{cfwv3I_;7{<A13;G &dvt4̣^Χ0[~Ri$"!ȗ*Ơbμu$#;X]H( o~>]w&xqûnr9Ôl3*9 0@PzPO  lgŠu{*٢ +=tPX.\L $䐔ȳxg~ðZ~|Mp[ þ۳isTCC߬v 9;\זk}s%V BnmUK &܄!n%|Ƥ , /O?"b|n4{&SiEV#ºOOT~MjF cXP,W-T:.6-;p,4'ZpeV/.M+0MgS HNMHNf[9uzX(YLL⪖L{4ԀT BaB~I73;4E.G Ęgج4T݁_“m}x >Z ͗_X&2``Ri fڇ_A5F//T8$M6$oA x+Y A~6_-Oaf_3Pψ#CWm D ?CzfP/=)>M8d .c24`@1|ZkgPS zG8 X0J5>iyp80Y0P 3K񭛨(PT`hb%!-,_ ?I0o L?(3z ,B>BᆃlYJ9 ,ar6Kpe{>G~/*hKW{JTkW=JL#`Ei7|vyF`B1rR|ЃHGԏbA}E~QOeGODO$VЇሥTҌN>&yw{9x7\:g}{u3Rq-$tOKRB[TjծdݔS]#`E䬲ܝCt)(ˀ-~QjsLè 79%cru*+P{Ġ;tUal ҵM"B4Ӗ`/AU)>e1,-uI8Dʇeefp.bQ7o [<}ŬmmlpuX0^d7Xxи(սu$[ٿ!΍[;^ߌqQz-Q-̀9 {,ЪӞ#frR2@8u,\@qV<2{X+enoN;В[ye%P ɒ̃II$v]pbH,եMWSڡs/?DfI'IReOî΢71n>A̲$K9#2U|)'26,R]10aLL uP*ÉVb!JOfKggf1 )L זb vYjصej9OFFHL1/ƅ,-^F¸(uA2>4wa\8XVGkH<&-f@:{׉kW8 Vt>:`fS}uZ'7Xc3t}d,69d $xtnSQDƍ'G?|vOڪl?0|3TnN0B\ӗ4C?;ΑS뻱,ے%t GEV7pUD#mMp'/w> VUCW( }Gt؍#%%9Y,NI?:WAyzGi[H^j}l_m: FG/wWEyƟ\B\`41P(DuPgp?`)T)0u?ja@-CD+f%\#w}yoowݽ>37wݼw=ϖP{ZP{*6)`8rL=7 7ϡ'Yj ]\K ݈?ϿGa:Uqr܁-E}?M/}P* Ä@Ț~jEgNx) 6h >#uj ʼeIzQ^JWlm 1Hd /r } T+mC/ly*&^ύ%]JQ=uAGFJlRe׷Qf#CPo3\6UwZ#˭F}w9>"^ݺv6b}(\ t8i2{mh,kų'S B0'iɔ ,aC=r35(-A[xGw詁 WhiŁY+㖪At>tϫTy4 &@F:F Jo^=M;^bP/ K990JqSU>ݶ.nG2VrE㬓@Nl-o p^{Y WD .UEĭi! z|J[(aJδ^ fZ9)`*Y4;\͹[Q_>K- tt+\Z.l4U h7x2^<ߪLU_lޘRZ-N25Tpܸ$s'"VB&"hzKIo_FCQ4Lhv0n䵸75 ''XwZfbړ{{Mn.>үʄ VKW/Xo䛜;f-]-}G@Y5rCᆏqa{ |~'WNj5'F/),Ө|6J-I_PJ,i`nWUxY+7lA \m+$al63Dcr۰O)ҋ8f/vF3(hr %O ΋/mDΝPn&g&[_--",;si˙s`0 ؆}4 .!x*E_N\k;,Ks_>ؗH(ll&1e S]GdMawmhfZ]b ignw93nzC11#/ʙ:9/fhIY!h^dRpocaL7k/,=m'h' Eh<ɴzs.o,cOwGG~gnRhgԝ݃r9UP#dBc3fH2kEn3`dS_* F\La ﺛz}#Z\~Ewdhfϱ݆`_v6dznhir*3 ͭqq q )m:*bV~+|^lZڶ^{-)ez86j l PeQ"Eա*3FY'*՘!XN]F[V1^gzB"muL_s ?DMaX``^ (_([1PM8y[ܺoqz=q۝FjPv08Wbcv&J R)УfDW~jEty+ѾO>ZNzaގh<ƼF/_fkin%zf_Ƭ":S8 ~Jl]&"Czi13GP^=ϱL9Gz.[GYmKadPȾ@7"*, cuY٪Kh6Qe(\]/N 3Z01VdRFl[U'^N|*QGl  c"zܚUao{L9(s`ߘO|LP jgWPRg+uo˿e]WlDPQC];SL5KW} O`~oxWmwm:ƻUð^@TK%ludޢlOc\8pAO*y1 (Vpl8F/ϮnMl~^䐃.c#As"gnn6raE[#~ b~@b't;n7å+ձY4ry^EXШ4[v ~Ǿ:f1":K#lx#]Q~vkC@]q lz8VZ'TVAߙ\Dw u桸 nZJЧT$|'MkaqBKɩ.Pf8?tQhGI-K0nៗc.k]JaANh(d#z杓zaWB$P'T&|G%x{ aP;kz*3Ȥf3QſLb}}ya?T3!"a"6Vf>{b0/:9i-5yRXP\gP9-@*X$U>NʓL [^>R絆a+~xx銆2S>)^_SinT9 ޕIQᷳr. "G$1XHL#$&^ ZZDbL JbCKJPĨ C9wYa9ywv1wgz}# `H˙aVbFaW&])y Tzj~.%"]/Dmlˆ7+ۻkҨ}SgI!M:f`76ap}Ir#99O_D0*51m6!"2w1 6x8~mEtN+Gs _z o V"&-0k6VAO@Op`sGJK$ CK^N)9л |k$*X-N>(O[iZWuӞ^*UyUXr}VIW4[h3sCP> Snhu֭ϻj0_J&=@ Z9E%hW@!T(#4rћ;8`+5oT&r Fˊv#ͲuNܬXVƳ ,XF*Ao7,7wެUnoBcFCX<{uFJiO|B[^s_h 24'Ni.?z !<2)ԃYc*_, E(HI8w/ t[ ,ے T&n?PS@S3X4t4Fgc]yk|&ޘ]Ckvw\xaҦb{4֘72sjʥTFgC`q'ZZǯt6c7*+nBQru0EfL#5UY%@dC1s ܇Z]͔*X(&E5ɞG4n[5ֹ VJ]9~anEBUN-_#Ii֕ەkHl[eHZ KI,tQpA6p"g7eEQX}'ZVq_ f2vP e'ꅦ՛ ;&yȦ^nÜ-'0p(vxA;L[v7N.u=5+Vx*eH+2W R҆]s?j!R JA{튭i/jS<5hf ڋb-ĺ:Z0Q^\~k/Q*7M*lu8HHa LIiq=R'7 /il_U~>|)]b)q ۄ坊`B I<z k ɬ Mg44Hp  hGq YqU$MA"UFʚ`:DGx 9jFba re޶/}e o 9a@:}aMvG[RW_ُؙhY>FR4:٤H{b6Wsu {'ƿ.oױR0Zv ZPřJo*;Ys$jDGc & >(kY(`R܃iconn}ݚk.7K.rn9&߮۝fqvLeH7K ZW': qG qLmtR 9"-̰hp`bAC2}+ pcO̶l47,~2|rx{>迻ZrBb@q:-CN|z$ ltFI d.[+qsIcK?رV쁵-}qq|[+m5LN\^nv#`CL5FfJ0cF$b>ordk\C]mOt|7ҡih# +om:bK#3CXRIGOma?tϠyQFq0J_*:66*O&1Yš} ZѫSЌLv˟&=p{1Il=w  VՄ`$MC}s4)"j1-͚?Ѝo}nypJr㖮rTc4}*W?Iw2Vlˑ ?z hE/EEO]wǀC4@ Kiq WεPm#;ɽj~RҜL/@۴x2z׌b?[*KnĩUp4rNS!aFvL5B 3GYXR]O3 2'f-\~|OErq2-p4Cݡ[,'`i%w0mM? C{Y{RND/=H# sm0j1!Jqa̦A9-[5!y ;aF*U+&"gDRnmqt1{t8ya,v;ȹuw7;m[qv{arFq5 ?]sݜDyϢV*A}8=R6du@öKznFrIך3nh\;kHDk$yUguǞ8hRK&%^"'Uք̒ԲGf$v^9Oh0wf"io>*QQ N[J~c֤6[Ӯ0wq%[݋TԹ' {#2w`ݱkIZԌ:{wHlbicd kqTRtG wxV1|n$a:u1$Z$գFbĤqS->NMpQ*}p`k`#2͔:l֤i8K_IQbrܓbu ]ւSTAݣO_}K.V.e wXB v[l!1/=/T"AiHG%"6ZrQz ư\IocR͝\YaL?275kZ㇠LN(kdU,)4`MJ"AWjTULg r* ^H|tIJg^{ʹսƹJ >[{FR'clzi)4~.\&N4A*8[NQ}3P2: L xhʦqD#@ ܯTIݠxǯ<ȁ];] ll+l[KF#v Mw1N E0jLE^8~R8vSe\HVp`\ɾ'QB \ Nvbék@NMd<}v- E5cqe$ 4U3N|/k>"^I[FP&M$/ JlDJċ]&RQ{^hCi$,hSn?NXIJ4*R(t]C+wN$?M 6D Q`d"ԇLRxh )胞59+(\)=M"Yi%STi-s'V-ТZ9=U CEn V"?ĩO Zi@tΗMעYh?' WPah7pcpc;it~nםgh|M7mdAǕߴbnZS`8M5n]!?2y ݒ$o+uNU^v |{,T1+P&Ii lew|@FǷu_F; Q$3=-#c]bp ڏ-GP8MMVʎ/1-kȖ9E-}z[i:}NMs.dnr=kS#l0yZ7,dٸ0QYZK9 e7Nr\g"\U`o@0/:OKqLh0bߚ5 t_@*-]]7.X!*F\BDoށ _hUL,?2>|+vC2e5 [(g>i' 0e$(󲅯6{E×c@W&t:onn~n>^FM &d-b0tN 7g堣@.dz z s`#ώ?'uo8 wig FqW[`-mlN* C>ʆUc=i0;K]6Mrq֎Rf-$;3tr l'Ae͌'Z՞ '_ڻ8)3u s1 ss͈rȩhh1J<d]*F5jSp ׀3=ݵ{կk_~_vgFS< ,K'Pl %wS>3 v?.?f pI! 5WBUT>,ͶGfw[OkN,HY$t-~' DWKGE7wᣖ6і"P3^,B-P) AS|<ǀ? MA:*jazTQ]4gd]8]02Vd'xQ7yv]I[3ر'e ?u;3hDG%+'~Ntњ Gzn`fu{TZ),B[_xUH7#+Z zY*ދG M?}[|}7s7v/o+Dx0e80V 8N;1~}>lLޔ j[7?99*lT;S-Ƞ6fnRH߹n;ͩog 0axL?yO#ֺAx=I$ę"c+%n.3$AMGG^~9|u6эFuKw7Q9%lw^|ۇȭ.>EyB\r~ܐgT3Wz}I-.76#rByp3R+EL47뺭"8:dhec9!XTtD{+S xPyc@bڰrf 0"(ܧ\^l㣳X 8=dK2¯:}~kx\yÃzak( Ѯ؀3 QhL ԉl5Ֆ'ijK'O%|R? }# "}@x9` ";=& (+M~uP`pih2 WYB8c^Q w]p@&JdUG ͢2I2 7:>(pB:F.dnN^TQ:QkقzTp u lJ@q/g ~|@)Ͷ Z`DfDg _Qr[ۺ$Y z0Q1^O0iF*,Ht)N,Px KoP=f`Q?h5m1"zZ}T>s= ѭv7ݘ3r1 {C.X{HѴ܈Z2WeS ZYN-3Tc\ f?m^"SX\4zgqiRZ0 D]l32~[q$x2 lv~nw}lٻSa V+6:76Q@?O(jֽH3eLgآ&]5&DJ"%B`Op`C;StyR`3?ǧ(gQ"WOuV #F8RIԹ]0Z,ͧӆ,(IL ;#eLbjVǣ\-fSTxd:Ju{͠B!.L G+2-O#*B_8\ZdO4ePTzD؞*FpuP+.IGw(Pӗ_w[熰@`RIe9ر~)|LdL_vm$^12'+ &^4F/-  }/єVj_4 r,"̪Srj=FkO?cp a`3QLx ^uq4]:T`E[?m]v!1v(MivIQ{w}kT&-Ix7vy")r'FRPS{r8&͠FHG`r\2VXM>@^M']#EbX=x67{zufw]3֑ J#%hغD} ep4FCi7mNƷ9Է8O}4UҾ0S'zÌjS[l(3y%2 l}H%Y{3&Z$\i} Dr(U߽Li]:/sW>Emb@7up93B?^'ы>1Nqh°X&먍W>&kn3dhD%\-u0u4 ]ېaZ;jۡ"4G(3Y#D ( p۲]w͎C| Yݼ]LDOTUvw젞A %s77}apaNPmm]AԈXm7@ qUC;H?3 4zeq tC[X䁂J=tJ^iChHYA¡sDDW C p,*eEG}(m` (=t;ب6YZiaq` ?B<%fjilPvc]f%;w^y9B@]Guk‘ fףډ̶2D/a1-ʥ޽p-LE{,R* |ؾ*[+*WYxpIzl~xfPO0%Hġr5u^pҏ4vֲC7WKB98i\Z|GnQn_ T(> SпN(\Pd(<m|?!gpb$\=>tUEy3`$ SQnQKS#lGBm~[3ƴLQ>*aX2~+[i4zP%JW`*kf]N1!ydvEM)|ȐH Rd0ݽx A%Rܾ T+ݳŘ7Tb؇-Q7\C9qU鲏tf {?߱mTNȠ6Dͭ~>Ɓ`\ܴD*y.[K|?^EF\Cghe $O?kp& K-[jnl&]a 5W!S22Y>5ҊAƲmkpB@t(K Œq=rZrX.{3ƅa1:Yys gKK"/G^sy?n//s64m!ʮ۠wF:P/dYRBPavBDokwܽ9)m0NN kN]WЫ jt왖a0AsrLVfq[ͼ7VCh! C/,j8f<[1 .o/ۍmD|vK0^,\>Y;nrV.7ϱfDe/!ȠԲPRT &nnn1 ROSe ` J5|:S5FH?,'& FqěD "6=4yiz`6[\.3s4]*t#x~Y.*!#11׭kHOax zZnHd#á+F<@0q)Nd*B]lo;m*ؑ !8@i_&==+:Hղ׃N2/ !{31g6 Q5 b]!O?=S^(QA~,Ҭ3p 3MjX]`CBly`Ơ] U_h\OBTu޶YJYs05B>SвB|p^TBHWג`KԵek(\D(P4?Uw#z:rM-mۣA$ yY>Gf!1HvJW\EqF%,MA,4{5HG#CS:Hv=lsX<"GV @56poOv9zPŇJ fPsT.BN îyʫ! (霈9 גFP\yzwOD9%jWD"pCEpIC nƍפ[ccZ(568s2Q}M\KyF}zEdl-d()L}ܞ0WSH{O8}cK -y\ DږXJbܻX *-)j}Gҹ|B?-`3F(V7'́%.xq{[1 JѳӺX2"quV]_peE-lHEqZ^ӻMƩƜ.R9VJˬG}κbD z:YL袾V"L؛M9* Edn JSl_j*ŠfAP; ؂7^7MPT'`\rL-馵-Ɩfjnlr>d->BšO'9ܿT),H[0dYW֑H#"+'(Ja^(ȋ\HD?}esHr%UT;%ݣ^w(gF" josmhZ?P6c+pꤢ,A 9Msc/8MH1KW ²us3nj=&Af QТ̵mcҁŽE\PRNR±탟*PfpNʫ)v5H*0DK>XA +D lJ#@p]\_ew-rD(v|QU[xnG߃j[7тCP4g5^ lԽB€:w/7-*ҞLAQB6{;2"p-& :T6Cu!!"W R uEeNUVU ەx*O g죐CWNE)G|1jᏮnx+ʪl=:1{|MPW ETͮp4+g5u8-vw/̧xSx`~ڃT*E(;{Óm'CݔW䱦507RskLP/z>VTRJ)x]B兝Xx$ Wok B6@ 0HgEzww̄6YnN|vl`)S<p񃲷:Kٛa00a^S JY [V@ݒndtt!"bH*g^?ݱ9m/+իOir-ĭÉyaSզoSOz'de/;'WN! v`dNk"Hq"y^#n-',{.~ VԵC}y"J<Iq8m`}|OsvT plC)&6 w?HؐOt%PyOS{30Ϣií083@s|#ln畎 U.w.O%!CA=}PFxx檶B, p\Oݸ.2>Y wJ{[6,$T$y'Iw`}~q70sh]fJ;Q;P*}&^]G>:NnIF X@$uLW  %3WۂnȈ,S |1>h:xːAh"e 1Wod2#sM ɔyÜalS<o[#e@ߞԂOܧU>cSo"II6&T(d5]5 Њl,+w^,re$Ü?yY 7~Vn[|Z_tmd;y^O,J0{|UleB]^[ek<4qP -[0U7$<Ā^rPc #xOV]EqLQ2ML#gugѬr$ˠ65_'KEIyOV@('2U'DuEsEwcnb@/Iؘ*`kOwhB~-PԶa vA.K0d$lv`z^d@1P=:=] |L*Ӝ܉l % KP=--.`kG°eywf|M=1-mV2`f%#y22Kl ? "lC[U0Hpݓl=eMwG=2Y`{)(b>f?lJYLq,vWS5)\H-=#Jc,SQo W-r\0_hN3t=W#?Gzw_Z^*\v{IҥPPDU :B,j@yQ]+] Q\"?Oթe2* cC_-sKWF ͿGKE/ne~i6DIKGESbA$x8n$g ӳ,_ʹ{ UYraڐR^7 ◎g\;؇J#yrGuQzv8 !g5 ,<mc O +4[e@siFPAE9EKEcx"k-f*cOQ0Y&H2"H#(*(~XPK´Ywm;YUX+cIENDB`youker-assistant/src/res/working/30.png0000664000175000017500000005237413260315532017030 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp Q)IDATxڬUMhPdnub[ kEh{AbQO^ċA"XēA{(⭗^,"- Ehm/yK^&%/||D:čE\6GOFEgbu\dAKAtAKI@M3 YӲSG$?¶O|&STVJ;ۚΆsdI]i-#ƥ6pزmv\JBMKmp~` #ʹ\e;|sDeqEQo:عb#{)X)n“ˣ [? #\^dϮX*U4T[Fd6ubF \?PW` x ltY̳Mm.Eyum8΅cn،1G8-0&ͅO4wCɣ#I(%CYt,s/m> Jxрa!;Y|kϕ ƑˣsPbl57~@%ɪGSmC$Z+AKW1u)Fm#_-P:^ĎԴ@Wcһg X'7X'jU\QA2g<}J{6e C0^6-maWVK4-A,("x("^ ě "(QB7 EYӸn3>N&32>3L$ƿx5Ӎ>{u(9ߝ|b`;Lg=ps6oQ [͞68-A P 톐Vفk HFS؟h(hK9y 0U(S  'bFoe-ԧU4GhΥ|4t22;~fMQd)K^SceuyZ`jP ^(MiY"{4+P=ia7.//??[W]Yr=3\So}o?;eq9$qru/TqBE@/XjHS1"TIM4>X@~W)peywR}>'L.fâ6wUIa"ֳes+]6J yk,/?7c2괷ztifqZx ~lߑY z̃/mE@ B BC&AARC E=PՊ^znd JIw7qϜ93ð2s/wm^{6?ETe6)U潞c>`GEdلk j/B@TZpAL \^*h[&n%PWn[L,;NNL NvJ /OV6m!o 5dreydF(pgی2_z:bҧD<\0Hz/&!yw;P]T vc؜1>kq|T_G|caFxCWU:H#rR*U҃+f7x^,7fu]7 G=lh0Fb`+`W[>[H4cu;@:Zٚ˚&FSxD[:}{oZQD-pݬGFԦo1vhlPN0R\Q]:7i#GinktަB߭ue GXp\C۪Ys;\k![47$OꮷtN롆cf+r<6(ђV٘6Y.UƂEY3{+-_mGjWl(RIb4ʩrq r7:?x>^Q>RZ4ȴˮҶ2V&@7ZJ~WK%tE_sΎ~ id%Yrc#5A#:Xө8ũ-8O`/{^a4v҅v/'VGol6KgM`F UևmPhQ`V,$jt!*@dOL<9{-F[Eand4OlCM%Ik]MZoXY O `G]t4܋|Wޠ)h~e=+y`c\xci[hKU>"k$\/r)5dHVKBдR j4ɷ" .j|7Ъ7ǺяmZcE~ kA;i A+$ Eez?c*ASů"q+/%-ٳ,ZN7-9ٗ^yW:)uL#LBXM) Jw: Iq-8 kH;v) zitըd[w {\EusLMJ~v>h'թ9ڴ*Я,m oc4Jmwo]lyOIm zy,Ffgq@|)Jx |~ws-б]2'#b*ચ}D|~&4!E2j˚*' _ @ :3@ 0cI׌t`_zvgxn~um2&M6~G˯~ (c`0ۈ_VQ-!5G+f.2ÏL~V;%:9Ǣa$\le.h9(]nnn%-tK Ryb~yB-sӨ4#j(vS&BU%a^E/V6.ЫU38o/e.Tܐ<0Ka<YlAx-9Y5ģkӒsxGkF$3F8pX} ٱoV;jփUk43b>b }Zc:ŏ`J M!8!*T ZTi*"EJjEDGCU(*ZMU>pZ ,cB 5`03}̎ggfgfgmxvg=) !ϑ$Suyj{}b)[R,ɶ"N:ڱa=mg} 6Ġez,ݿ  [%GVZ3.6VJǂ{(3XLj94St9@N{,ZAgo{c?O?TB91M/HaIEQAJ.Z!C E6jȬY4H֎ ;<[V{tO`7I/Bt~r6=\17l2Z^eT F=r!ȗDc f gow6t*~]%47Yo ftYW bM Wh_^ R0U`yi`-<~~ShȨim F  ՝%ZRQՠUo[.}L&t zɲ? PW8&?o >a͚=9W:xPQ.:=9ThD믮nmϠ 6 ^A}3Ibcx(g?s9j)c-$Ҫ:u >3H/AdX6nco{=8p{&݄a(B's9$e Y۰vximȕ!?&+Z{LjfچLʎ$q| ]$|2lt>uBQi۰5y2(<Y5whUV |zkkn)FFqwbӐi⹅{Ρ "AJ4XB?p{cewԃߥKXƇ-Zo5$i s-ݾbVUI{b)wo y ΂Jz<}g|yyQ3F0qzLS4r5; e/VNjyZ=4 --5[B>S蘢GYJ67(1z`J0h:챇ǂ ښe,"|U:sEx}"$f|.1=Kw,/5 w?=P߫J=MW^_m㒫UȫỈTFW؆/ > l\Fn??ӹ!ol^fOS:3E&]IژV`sLY&q\*٘iaX5ɿ$uڱ4ΪNLdŮmki#+iӋ|}M˴R<&Z{`^4#keʓTqn =3A+&'\WVȎָ.˟~kvlDV*)I\eW(3Lf3j^H .0 Wy8xX.-üoYa$oX/uۺE"艫:A^o?9CK-UW h4]WSD;,QfBQ̢ܵo ./p3+k̺UQ TLU+墈e s az i*e7U8][6*mH'ƭGQo65Zƃ~\2;!/DZcX|Pw2U!a*C%}O~"kvpOs'L[J-"LiӘp1ql R6_"~n$;cTL>L(oLNHDa98TnyoY-[QNk6HkD5ÐT[YXqH]G%(q*wǾ f#FC g+lb}% s_'QG(E̵]^ >62m%^A8?"onCAfmc\yCDN TeQ%ђ3[͈Y֔6A@mR۱ [csBi3V&1]:竚jr0oN0O. ;Kg me2SF&h~8qÕR ~ IQ2>9奡[u)QVwI/K<HIɔ:8NSHNZȂl!5"!'0@t՗hWͶh˞z:e'rPNb,ng/6*TsF^*F)0[Iz8Bu|!t'# ZeV x,- *2a:]"4tf[QKRѭ@zB z uf'<^5m Q*G&q]Wmp53jDxoX/`p@-w?l0dڵ_Yt3ҟrПj9oj]* ;jxN{|f#l 6^g l4'pjQiW/f}]oџq_HH@Wi >_W0"9\F2'UVE`fCV8NÚ7V$Ϡ{5+@ h8HYA_!`b:tTtϛ'{'{:Cnu_b>QX&f jneܬتunzPisJMcDcF %< x#3PQf?~1>|rApn$"EN?<hFڬ׺ ?mD([>/?' x8˩LF$ǹ1l=uOo lŷ t6A<?l~ a-Ɠc#t_Q7>vv1e:iS쥖8N uT63ByH!`!*tȑ*¢pU4B; вćr%= lYnxfh4bNy} fq&jwDu 7ؗ#ƲhŢ+7j ^-Y˟EWX̔Z]\F5Lu9a߻v?{C偈"M@XƲIp=~NPzڪvhuNax8L:j h\MCGRnbR?8i8G*060F?a oGNx=VXJy)lrS|-|B͝P(.x=NAl |I3s`" 6sl4[&J3ofمt;Ʉ,{ {a>[;s'?͙V]8SpR!n Q >v .Uu7=s[%͎P|ALWQhtDu7fqjeU@nW>掠#,~]n* YsCE-Y)6՟f0cvlTϝ]su-1{Я==z`l>D.vqE3'2Kav>J;(i-X ݎqTQ%o/<gu۾Pl/frAe-h!# f_H#q;i`RX5YOc4dt=^vآW>fם>RP*N&& X 6̪Er_#\Eg|"<$JZ5;Ed"1:+uk& i՘"Vo 6k8 l%~fa\2qNessRr8N6q 73a“dU"n^{Ɣmw 0)u+:8 K?؄ l*s_òEx!&~\8yHSu/+sRS٘g[.j_\ffEB{Y:YQ~u PZFߠ{H4zq"aT>͂k5.ڄxCu-cڋ`o%iK-߱ۼ ^޻]:벪:9aNu+rWFU9!GaUSs`MNx4ЉL6$85Oof.9NԚ++>vuM1cakӹO!T_۵]uL so ~'6,$?Ρs'qKLD21y OMɏ *>@>46JPyA܌b*z^~-͆{x=nR>4cvN E=3mMEAA σ=;la\a2m4#gDC#x;Ysq!BG [H~乥52V&KSCs&Ch?L~m2s5sisX,1Yi֘(LȱYMf~C 7ۡ~媄dbRÇX 37&Lup&߫'LOJPkӶGSl*HH'IMr6@F)ե`=W%hi̜O2ve`<׆vt風)2A ~|"=WkIpO3d]Ʌ69{B2΍_8~y5$%b8a |D"-"q.<7h0."wriƎle2s]Üg#Sv)8nyToa_!pYM-dL"FsPɍs^̊e"q~]SBP8NE{iy~|'@ˉF6'H';I]iպ.Tfv?znf+f3 ա}{ZO$|0+jYha -&@?V{^Ѕ$ uܶcSvXc_r3Ԙ_KiIhy#²vI4Aj=IG%$}i]ju~5X6͕t֦Mނcd~XOqD/9qf7:6Gf[y{*̞Pw@-?\hW44zR})Y#JK]$ܜ5:.bzYEj/is%@zGS^7d?|rJ˫녆,oE\ɱ{) DzǾ- xWJ.EHV)WnGd.l)>F$b1ܭ<3$/2lT cg\ ef㇒OwoWOqM;lK,RM4Xt(kvuJW0xIGWjkܣy'PIӠ :FAw!8>f~_\NiTC[ZP0Sڦmf,.I7XۚэjwM5&𛬏+H IEx]-rkU'"S v칎 5i1>-\;jX_0Fna׵ƍ EUhT6<[ӯ\NkͲJN}ŽVN G% `ieMqѮO~n@ Q`C )= `aV- ˯BM{o6[\-CN ժ7 XZ`H|xᅐ+lq4SФ1-Où k)7&~Ql&HH['"'63VE! k*Vص&0mM}{a:cuJ8|^gGH11Ͳw97lqtm&`lpZ !7|Q4cEhwnnrҜl<*e"~_  @K'WPxK'cv3"!~i0 @; <d d"ڬفfZ<A[]=K.^i(KdM5h_fd3>sl:0L]/iV^tɘPa,y{pI'}Xf Zz[O]СjJ(K-,7Ǭ䟋ٛ-=S {,'9o`+}.7I~$hV扄5|*9+. S7E2{~Fs1RPst:=A?q}Y 6r k s;0t$ȡa&}\Y/8M1$̬MqCܝz8h?=}۲?cne=omO϶@4no%O_ԨQ?c$DD 1hLܐ(" "p{o[}gW_/]ussYT#MH"lG|qU6O *Q|E$5\0?!pO$ 5 X!tتmu H a-qFQ#eM&+)65v> gڽ 5-ͼm"AؽP$"H5Á'h[J?bhܫiw&UWlz+d契޳hZzPΛ8}~beoiȿQ |/m=! Oۗ1]ݛ|mvi{sc`Is`b,YX}7w'p@v4A@gIQPe`{ǏA-Wǂ#WNۆZl \?~0o\Q%l/)hx5/=Y>7e`ҲGbvBd(_f4j/dDi>‰|f ߘv`\:n{q[Lg?- d*o. -Si,߸`<6[2Z2W _]c<NFΓQHO`@x kƥ{'N`73w~O0Ã(3э-||q{ d\G N-h2&C.&'Y/2|էh(V7V}v3{r]+Z%W y1>7x l3RoSlwNrڨ͈bʲ2D:W=G)r"jƸ(Gӛ\3G|0dG^eLDW"~s9DzF Y ,OԆ>ק jUy4G iG7d(?#+͚(Rm4?1av 2Hգ_=W M[Pwe[ٯ;ÅrҾ+] B xʡ ՁvBc{;Ґ= lwI=P cd6ц% yuaBRAObzyg58QZ}/jhiU P㢣{GrEk=%ݲ8ܬy|q^n Xpc},}Kpj6c ,A"dEtqu,(kۿkHEj0*1<1N/tk%Kp`R>b4+*. kJ&-;iGt| cHťlpXwVɡa QtU&&]v2؁N>x40S?1Ŕ;S8pr FLhL ΈP) qM= YyXqJKp|gj:|]聫wj")HH>CC3EH'㛌!u>2ZI}k#` ~-Tn6G?/{f S,@hޑb|1oFT͜Nfm>UWq'l>Iy3/5w.j DD ^Pq BL v3y!<ndT*dC R~lݟWPl5 llYm ]A `o~,M?o~n[듘KI`V J }y ~M|e+ŋI ,~L.p/IJs#i-Gc?bww| eUc32?s竪ګLUʖ\5KL_4t#6o?}{X}^&UhSSvzc tjj=Roh0ɽ 4boC{JVn-ǍNd汪1FLپ9v\MYJZ٢ ԗIP\N@nZ奶Ba" 7Łe\Isy΢>;͝{]!# fhwJZmM/\`x۸ydnޛ:B))Ͳw\JT:Yks+*)e>? Α؏?Q Y46{=L[ݲJv'SM(.ڟM>DZ-6JDfesVIÕi#K٩#J-}SM3[w="wp%^9φR^Z ndl :ٱ9iFYOSN?ڕF@́M3 ccJYcƧ\N A7AjIO:3uIR2#NdvgFm%^VOr(d;i,R'\xQ5kGM9.R`n9xvٿ5!dE=/Bwt t^05\ww,y[W+Q7l܊&W n/VGޟ@zy_?4}E?C݉v0*O@c8ǒnFkg7~ؐ y;T]5*H *5M-5;?Z|1Y`;o|*vٌ__"ExW{=\ejo$@%m+vZ9DC@^${KQXEA;hԸVn s $DWyO-. SPW'/_'}TvtFO>5N{: }.fSdiwCk`Cpj4 LOƞzm> \v56ZQ ~m4fR=_qIAMxy%7i$mw"͙,9":(wOSBJlU{ع0l$ کv@&[k:!> hh_a3uѨ=ҺVId? x?]ߛvҩR6Ժ}&˯ چ8˾ {a

Vu䦣%(RGaTVLZSG: /a pv^s Mb4*zYnh ~BxEz)h*wv&k4f3¾1s$y*q9ynݽ;B/6o=H' QQV.nt  iiEk+ݏ|:->àtk4P_ >i7vƂgw]7p^nv"7/aJIėv5L '9gH#4?Ca>0uC[ml]%j,JnD"'MJ:?%_ \ghla4<1.a-ῶk\{8 i(.X*W tkߕ>dԠ"77b]O{Лp^`O } O^ 9lg(G&52Q %Ь=ӝ /fs+7"dLs\o cO)F߷bo>Xrmff?QZ9Ed14-f&]J͝;BYؚ30V`M3ܪ7mo ?wP 5XEkI ,pp{V5MͬY76|?ӵq#+\"+xqOrnjq]Ǩ/1M{0G4c`G_j ǃ-N.K#`rjfjc ˛ Thݲoq6bϋ7׺겸է)Z d5jLJp#.xlyAR.& E˜0Cdyr~q"jD]z'pOqvgN0&Gʹ5*起rȴh;w[XCI qysn,(4#lD܂&U UG:HS4 Q4<1E' t,d`r@q(w͈x~~ (uB. 'kv&oݨ9gY4ْ5g-*f Eݴ,g_FxLڗyEnV$um3\PXA`R@>nhg46EP74:ЫhjH#4O_Y "ʑZjp .)eˎYC.e66T/^ųP3@zAQʺ6Cwߘ"ޙk"q12bEKІwa&+g<5S4Pnʂ>.VoFZ.@ ^}_0 ;PKTr [+C' E;{h;@{9DZ& DCEoczZpJIMm5,5J3¶wl(ăi]Ҡԣ샠,eÊ 3t/mB{?`~+g:Y[=@A!uc:9$nUG [$Y>Oں[17ĒH.݂ecC_2Slo.?vvz?Pcf شEO@MHjRᡅpIp1>.Qbi,]vƷ5f_!FuhGĐ|qoi:&n\!5+*$';U  fox+p!p=e芶%t1HI>Z7ed R5"4u'/Fީ#Ͷw6srsx7ds\:Dpk͎mfZW5מ#SӭxMJqk>5pLz1$C[K;< Oe9}J-NXs-|?@n'$k زnum?Dj34u=t 6Ú 7V2]>m %q 5cלN@Xc+,}5f-~];+7Yx0t1f-N"fO{C(,J$سyZ~u=M)7@ظYAn3 Źsy[?s[{=&Av؆&'xҼjZlTDj. xih6u&PIל `#vG=oYH.v yjrWKcbzXم3lgX2F[m$@ l~4ͬVmB#ZL dl"X +~PT@@Ht `Kܙ"0 8{򥓏aK5@"ߏ)bg J~Mib'x!6M `.v]k{Rx(9fVij/ځCZ98u;*=qàL% r<`g )\Xc[4Y*9q' lLކéLUjאb 6.s-RN?iq= {gD:AD2F6nlijO(M"dfNr~LXM\wj=]6d|E7s hBqEFh8_ nxf N:s4.eϏg->7xD d̨M+N5@6%`KAӇ˟{<2)%Ǎu4%!4;[46/ ͈IGEA^h#"qnȶn{s4nXꙣVW @_Es,cː"*!$t51]voF dbꟆD)G<7߾;?,GrjW+sp޺&ж/.%>1`;CBs’k KF!LMy0CBFgp_IƶXxڥ:XxP``2jޣ( jlix;e^2E}k⤺=NO?n\F*YBM8E-9}vOa:I;[.Pb>zX/ZM=%N]ͮW%R 4nfGVAc~>[,唓UZx% iIw`@xFԐR}<>{Zjާ.|n4m#Œ{LK8y*x!A=/?B`~m`e@; п d}n^=:e+xV';"64m m-ڦ7/Q]SlP;}DvzV,Y*hQ^~<&Bj4q߬ޫiNvO6QFkWe@zj`v>n;žX'П;!Kli݅^~#Ҷ݈q{RzX @2ٱ~mloCIύ BPQ-*MvE ZޕG3WQ[j*SQ@y#TH;Z,\k[p sTivIENDB`youker-assistant/src/res/working/13.png0000664000175000017500000005205213260315532017022 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp %PWIDATxڜUkAMMJ"Mk*"=xXDEHo-/^/< TbBm-졵h&N'meٙ y4_/u!d#uls4h- 0ԛ8^3s]DИ;o +U{UaPl>ߗ ?Q|5B/6ܕAa ,nGpxR1f ՔgkԨ%Np2ޥRŪ&a`h  ='4삍Dl: ~Whw '(`f}fK i,n=e$S'agS(KC NSkfWb>+ětdB,=m0> iT l38Ze1 PߟIp?RPm}W#uӣW[UffdNs{C\f0dN =<ksjD: <4 E-dz3sf=squ}{"ւ ӭ7ݖMk-"f`bV"eo[C% "˪ nae$]"Q GM-8 ", \V:|ڈ,lH8bLrʂ>I@ R]g]9EeBV ]3:&' ]R= 9 I}|A,{S|˸Di?&TpςFI$eњma^QΛ'c:@?aS?N1uzr/\{Զ=t!9WGש́`9f~@OyL*>[ӻ7{ Jt7|< z!_6titԍ0DN<.O[YKHTQ>fiXi9{@ha(i$Em@ZERj "hQDhS-2 #L4e/Ƙlw=33s3pQǍky!LI y6#ͥ+HotYk乮#KW^OH6$c^&T *#ಥ#> iJj.b`Uu(Ӑ탵XӦt[IqХn`1pffI?ز t^5XK$JlK5lE酭6ۺ}X9ʔ Oas2Qd[DyaI%*7H_d2dXL8P]`RdLtQݱ#IPIO%UqR ґ8<pK 61!g:ďܱ?]d$:1C$At6(qKpI!h::#-Qifbwiw2*rS6رr|2M[|*H"vx9d!v&+/A~rIJ|ZL{Jn:96bkE}d[۪Zr{5U(o>Mؽn;;%bqC_uǏQNQ/Y~! `g]z! E<+p}?md=oM#_~Vfv1C'U0f#TR{> ;{>4'".nR>d{eN1f9.JN2{NFCB !'VGNvm4m4mikE-j "1Q!mUB@Bm+UPD(*RTCZ)46n~Luߝ;N32I̹|;g-OhR3D-z5[1nߞct_AڸZl6_-M;?9M}䄋{(݊`݄5JiD)gh,RVEDG]vt ~`ޠ)ؽ_Ȝ+7頬C7Nwԓ/0)q2tjr/ J]Rrśh I׆Ն<٦%0=O[8/cZŋ5 ׎h >¸8"X`/qOw>+U2adԚo?$b?DXmv$a I 4U(b(X+O(H3%h 83R5Z` ͷ$WZ);nrKkvc.K˪^7!g1O256 +W ˃^oeJx!J1qP$7N+]K9/}7XsX~K2m`+O0* Euז+G:&U5&@"NCN.v; #c'=xo<}YRBOԯIˍêX6g:| c%J8 yx߁#!v|ڵJV iDQr\`{Xđɳ]⟯t?'6 X" UU~4nEf>WggɢXˑ_J0^v*up" fRSfm\֦)j4~k[q_W@CԲkZ[Ӭ` Pr#{Fxg& 8I'@w+R#w) ?.\HǡF^DLa܃x-@_ט-=5qIl\tҵ0DmuYz@oM=1>N25sNh4}PzZrhzA (ϩF\RKDQr#~W״G~oQ&䇝l^kuߐKdH  'nk~p$ k $@"`lћ)~d>/V&v膙\Zϖ( {<jstv|CL 8Qރ761F:oo!.M4ad}'Fie$K7w=Dv"7,$UMIe=^@^nR6 fdS~Jf"⸆.=^TfY3mX<* S/RHMBAcH0h'og 7nd91Gi"6,^kp ?<(:f2/$_nb]fiVF}_@7_U}EuW{uw<($ w~l_Uqc0\'E*ЍZbD`e%w%9+ U% [\{.o~jn` t?o=p~ᆷڄuu׬$̈Q('wW[UyƟ{-e-gن!~sDG2Ő@܆n6T$.3Dgf", 8l ,,R*mw={zz{-=moo=y}>~P Cu_.POa]rmlُcIxQoaOhx7ٙoMX 6 bP;wKzf"sȗk+|fp_i(nUyxTH[`ެL=k|05% 6hk?_k~mw nQXH»P w* dZjA"LgK=y;nTu 3 4xoQJL k#J첶r# "8,?.ۺ߃c(j.LXIWͩgup%`MTrH}5@L^&{||vԎ!g`7IΕ 7_sYj9/ȥO|fx-&B,5lL%n8Roƍt@)\Nn&V!șѨ:x MP`i@DxOLm֮h#{0je;cY 6s+}t@ҡ0R`Y R|0Ҳb&b1U%?tV-iu09}U!8I nGBՠؘy G2-9!Ih8U ( r%E,Vvij5|t>w@9-?'"Ӄl%#PrTIg2.o^g6pҮPخ1?+.txt^V/hPXƬ7xA.L>X83bMW$7+ 5S\Y3 t}[/'4֑}<+hPa1#Q3(JjC2R-&iJ{/s̾u9FBs}=O#d4?CSX8WM b( \A-M}$w<'"dDRCF=YiF>,Un W2 &fF HCઃ'g辐37{MUj{Yo:L!' Z4g: p,fۗҊ*{-޺o^IٺQ`)B9K z]*N9ivE,i=Mɋ^Tثq]ad|1ūt1juMĀUܘ ,=ʸ*i 5%biøx sqkq @S!8!1vH Dcmnn4/Ǿy%]ՒfDSKd1rn0 (=h#%W;F]p'yƥon],Qi_8gi+]KFWp0±- `Ud䁿8,!>-?ծõk Qk~XMDe/;تҤ8`4#+lQ6Om:X9{61{l 8 n[d lK~Nc/0Ԩܪk]yfYh8Q{ƾx~e&[k~yU`B@zޡG_Uaτ 1zTb{= kjG5|bEAure -Vz{<xaJH֩l%CKm콉<8ާ`mU D,\X|U΅{`*VTUCL vw^loo_jf䥼l|lFҳ~ԯ)r6>S*?Ȼ訪3|gK&Hª T* "D[.jVOQ,Gu*)zںA=nŢ keI–}Oޙ;3ܷ$?l2bu%GC奋@WaЛI~-"erK$T,f#*l5dIT(/hBHNއL+-fBїT!PҁMA^O$>9/x#ZHpSh=5OC_<{Ly|o[\肝(VJtț(蓾0`D.L[q1݂- d4DCA/`Sq%FZ [ FD ߡOQ`Sx{$4y$*bj$‹^A.RWd4͋eofND(5xv{qT'af^Ѧ~%|r2xcYC{މ>+v:,| K~` hKY hL*, ڙ5%ȵ`u{:U;*XO*wUWEL#Vô,\k  x M̭gY zz.F `h2+p:H#4nܵ`ӓnS6S&f uwR"֍td7&0Jy'#çŘ0 _bY#dR1#ėGtiAIlH3'*);CX2T@ ޾W4byGE֦ۙ^S2#aPg'{"ZݤAqL#X-nla*{ZY -H"]}L|+&  آ[lW-POGXr_n:huikRKwahֿOd|~,!Եc'汰Yr  " Tn!k)n@q8D*jW)40[H 9ހhN出K#tXa7xǓe\keb^ mb^iv,Y/E8vd[)MC$$҈p(@GTGH /7O(&n0oKfO^^ۀ$@[A&:;ۛlt0sœ-bp`T"5=l6[; p/DNO!nle  yqt c/hCB)Z`/o8/)!}"fV-^[&7/`N/Aaa#Dڦ?4TjuQ iijtD% *D-2_hT)@ ŷxvV;7jrAYGpRSW][%/DSg;ғ ^o%- $/&%sH ƋFuq!5ǎ:Ѐcm|`$3ₜAR~c?BH uPE"@ڍ}a87)sS1+f?fy{'89p9dS"hd7{n~>um_3)lMɁLnrj9H xM 販hѦn7AKM 9le"4{dҫ㴩0}txc8\x&Ahl{Ohɻ}By$lj|jˁ8=^lHUܺtr9*8x1.1v;!%Z?(|\t$@ t~uqq|ISaͶXe6 Xd~nR{*1HCOLR75ki]nfAbyE/ gKtȏ bHJ&ZAM=3{KS#Ɵc.3Ve*؄1-6=3Upu3{ڛ= -Wƺnc]uYusfzcCF4 >VhktB&>7 v8T,aډm=me:j<z*B|ۘ_}@k== u&pur3*$l4~ 7 yLX+dV͋@nr)cU 4nFzS II(_6\}F yIdov>yٜ2ԴtuFW}?B+gbf0~<-o ڔ l4?9m~y oJ9#+Ai\l|9;!98k,e4 g냍w:[_f7a} 9σZAӈ/k0: :(% rL^*wO)+winl'wZRӴ q~±%V:>ekx9>8@.EM} vf glIr>sw c.G3n`Z3㉎7Qh_R.DԘDP4oZBz㍶fFJ`$L09P@ͬ1` OD´ȁM0HGR >mȨe?lMY~rmSuUbؙc1G3c 4B*j9cb݀$UWn&Kj]"YTn5'RJU~,VQ b؅;:2@ jpaɢN\?J'; !I_>fxh'~ 0-?]iSWMH) kH"Z-66*ȥ`lWI[#RL( Ji{B5$mȴ @@Ǫ~DZay^+jQ ΛT"4`?=PF:I~A#_8a9=N& QO@ txRN#C,B6=$3>e|p\-l6t䪊r.EWo{L [*q%NfQ :0Qq٬eʏٹ}q6A:3=%[ؒ ^bwNvjB4rJ"|sq@Xu5l}K[YT91K^' {]6?vγ<gLCV[I,YK~{5fۓܤ u}6 P^HUV  Q@:q΁*01wQeꈾa(۪Z҇I!% j 6en~ZSeMYG`^'חh&K;9tU'ܯa?^4Nyƒ;?! g&.'Pa˷ d>jlY0jD7-YXXrUU۷)DyZyd#dձA׀.U$b>%]¡ت:Vs+,KRw";hW;to6\փXUK HwuOH8b}xvD+m݉o92F&(0:Sp|, X4[m)4ǟ(ЮL,3,C)X!S)n`ӝAͰi6 wAȌ 3%h?Dx;V7M)J BZfy _L[䔐e)%"?$&+A(M׺<3+uBa?T81# SìN%IƁ&Nh#C_~"[Z~tT@ .V|ڎԐ|)R^E4YA〆Tanv 6?i[- 3ǖBN?jz hO`tme) $ۥ>4]_[$/^L~?z٧9`"?Z7YN[:qca puFW yjf'h9\@SCh/qN4Xb߼q t_@*-g+/a.aUCyFdDo1QuVYvr*)ȋ};k)+W| Aj,*IA>. wJV5v;*%Mr4pgbѕN33[>#>Uu`&R (ȭ]A𥠣. 7]&`OgGcW( <ݩ F=?!5ͭqUGglh%'L5Ɨ@4Q5rL5/"(D@YE`Xg`n[}z˩]5MwUݯ{FH &0ɈA|qF(M<@bwm6mYvO{ IXT$"49\2VK5'᧐~k>H)JpLfE\'ZB=;gQ]Gv6쫣xD&^< ȁ>Z$=OM@l{`/C̶:WbVЫӿ}]n Zi x@^pg$^`y~m] !H*]j7=zOlvwtӆSwg¶_vvۢ˿Уlwpq.;@@_ɓc9!Am^`ZSĊ4YP+mGpe2|3^`;ft|BX)́w)u1jsإa@m8^ nui&Ld~< 1o>=p _ /U`<.k񖘉)ȖQOq''$Zvt<;.K?f;>9GߐRy]LAZ$Jt/GÎI+sfb0Â$~tc}f>!ol=M -id4t 5/=)*o3/?.S놗sw;"UmN䱢<Qaq+מz> `3@$$4$w?ی.T$㍲*{Z֞ ΀EQe=2Q·}[{=Iv" X)4( f<-}zԪQx'K/ GL7FWt]S!(]= "\lR2g"a_ d¡ r(yL(@\ %eqhwD z29PksԲtpvغàF5f$|zݐ`dupȑFmdKeã*l@Jx%>>Wv{8a>ᛨˀ^լ""@]<疃p}Ag\p(֮O̰7rMR^)eq +R\AapQ5NgED:- #_;fMu=M`)TAI5UrjW0j&b(Up|t EӱΠ4wxTD"|2t8(>_6A܊j }@ֺy [|RsJkתSqj϶2ljvЌ߭LJzy>fݐ0+!+ɚ*R&{R✰u瀒5jDZGKD V? 1+o,*oi49o˫Oj֦ ؂zEooO;pFOń-r Q 4 vȳ]@q<(EM#2o! @"I=Pl$ai @4es=ʐDZ[("v4V_7W@l^8I.'AnD3^n;]m0׀Bi,Oc2R=10cұ|3 ڙ^>G>sw8>1Q |F,JXA?fGz'g=j6M~ͤ$9gKcraJy6[Š,0͡ v'U@8" a*wyGmnB_=k@=B^_e{4`h=tI V Vl l)eAϰRh`]樂b c=V->TU743,5R,ztArwmW}@}lS~.(,#F>Njnhpn!R:[L}٪QފI2- O|iA`@fpwǭGn>d?uFE}p JQI1iTD2uh 4~%Cgޯ5GXb3P޻vQ){ݴ};*). X Tn%R+V ds҂wE*+2.GީN8w8ʻgРhYRVFE4uLY¶E8奔]7. l ,c*Cwnw 0'f5!8`nf#1πGs\> /"2K>&Uvjle[AB;~454a+ שIl˭xFk[lGvw'!xJ 8ת)i XґuQwE"'NuG9 ]N# A =o4֟!L96<4o93 J"Ø^_SM2!(.lmV'hk[ bLdALg5C}2q] ZBz>^qGL֍BK @CF_QVj}T S/ýP_O]P"AjEO6PJL_v],qu/ketksC zgآBx=JU>L7G3L{ٽ(|ҽL'[N7[]~J\<^Q6۷ԕrGR $7QzTUuMT߇C.vlhO :nl(pʣ0^SZ$1 S8JiLyY/ݪVsI`ϯKZIIӍTWKmt,K@0b e6huӕHw,-pCoA@WQ*%ɹ{S$Su-8vB-2V¼B:)doEE86=F+nP<_ߚ~P=։8ش!ASցy|p^#\GVGEBAD" DU =J sϐX>A70-c= asV/ߩ:>AzIj{jm݀~LC}S}E|5 tr@: e}<\Ҁ.TCJgP5dDW)*mR{~byy/E`\JksbPSm7P Q8ڎy|qNxg23LE~o$VD*c UFaP8  DuQJtڽڞU oԭMKk5u˓Kްsˌt|i yhWHXUrGW1#H*0"8K! Z <@X ASrg(lmrkhIcdUmqFnH^-)~=^/ 雗@SQ0=c'omwxƥɤ^3[P?lYV˾+\Ok#&0sHJ 6pJIZ24| ̙~=BLbWHl;ulSoguorgV <5/6S01fc-K_]Fל9`{1\\vY̫ۉ".sHԕL5 xɹ1vpҌk(/'6VeTQo}."ECPP)&f%*xR#>Aϰ9=p=N(xP('^؄,phB1$Ɨ%Ao^SCKQ(M6\(An3V_z<=:%<}Zxe4͗]ThI>hii|ƃzc6Cv*=Y`U"IpC[.N.\95:`FJ iy%. 2Z#.a"z6ru.poi2B"[|#u)}ǴW|K!c6]lxpMJ ~OHLH iGMcAze(UΔ.H>OZ@:ڭpTp lWN/ȸyUq ixpW7 УZ1tŰae_2~-Zݵ `aqaX^,r u(fhm!_[FVP\LJm֋t FW'ꦬJ680+γI cΌq)&umt}umHZ1G:^p}{#J TrB0꽵׵U iȬiMT7q޷ĖvuŰ *:>q0 (eX*JA% Aj$"tY q+soLZJ_ R nԱXFpf%vokoz"5|؍Vq?۞›E_cGj77S+y}ÈIyUvX4Gב^JL*J7ґ .+z㜛2I>\~yGinO  @Q,4V#`(k?tQX 5=L/271^8No$Hl!7xz':'gQڬIΦ"dSuE`#Ap+b=|D(,-ol9D;jl4E=TiƮx"/'LU5t?>᝜˪a6xwl݌"Ư $۷vlM.ihaNX?>Nµ+^91ppp=x}ec+)s ؐp*Рwx :V39S޴eTOϝ ۟9yUgH0fsV}6=rG&o:j /c.`CIFFuS[RliP-TC X T-x1K5U0D: 01a^ Zu l(Hc]b ǘ55T{kՉVшND"u!joъښOe4,p+z1pBLN|pxQfTWĀ:4I|(6|𲓨Ј_xen+Fžv#xVLV|4:g%a8ڒ{ MH,c2 Lo`/O=8̀vcy"'y>RR1\9C27nMS.w@=ۖk> LR!q.Cjt~4,{x~٦#]+CQ=P7=_O:)H 22urƍ, >{S<]t5 /%Ie@GϳM>{w#G 2؃esH-!q}N\/;6Jm?LPdA#mވ>쩥iLzw&e!pc!Sj<4ܐؼ*- |m4ԽOVBlb G`"uSuYIMR|Ќ{7uf W!b/c>x*^T{& d3LtSm$ǻkJ*'_s:hm !'- 5cM>'򭤭 RgE5'sΦO4s/0zV~%{1YI/Wvfy<[vK( \n[^]tK{]yBۆ9R<-K'MLxzE _sUr otF+ =`. )XbH Sr p$ ߮kF-;ZS4E.TVDǂ<GEBg a/}(p[DS?ހ--PIP@i8آ-C`YFVL[8bO^'TV^a$PtBiJ[yuQ7A;+Q:i`[@~'rO_`SP6"un:p_>i=ӭ6lRV[8OcWlC\Q0z@^=rnŊDFΝ{C^;LS1\_^ֻSѣSMoa8U$Y`kҨZ0B\d:7J)S}]Ğ_'N?c<$˾fRw&/B?lCgqvjrpPd~&uؤ!"u^ l$YXb d, `޻8U>GA(1[@F!T҂@Yim[o?#S"_eIENDB`youker-assistant/src/res/working/32.png0000664000175000017500000005223513260315532017026 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ]PIDATxڤUMhA~d֪(UQb{<D,DAEDERAA,#ŋCC4!igw;opl23;{{߼Q< 8rCҩn:dI/#p.$qV_EN@W h?[oZ|}tp,G _|'Q]"|r@pF(]סRk %fƩpap\˝W$:#[YFoY/N'U-7*O.__P&̭l3k'6ģ紼v en6()(d:\rzc<h)MMr&;=ܖ ]y>S?esJʂw>B_8[ 9I'&i7!B4E*V7<-/dr(%xTPlgJ &ED$>ǐB ;FblشZzu+:;8¦WyW%J :t#NNW(p@v)Pb"pOO|bQܠ:F3VrsJ^5Ib*AQb6j] 31:Je΁o1|&bmWf7: ^#n{z2L B937O@(چWMK[AD_DR[PQtQPPpW mTZE.] .uP.#hlK4ɛz!N9sͽ 6&?MK eOYg?=T rqg 2/px*Zj]]J_| ½(n뎄uW1M[HcWlYMJXZ2wT(h쿹byX@v&N']q]l;Tk ⨧3dsdnyo*--nӒgi5! :<&x&f7 Ѣ4R(J rOV2=^Q\u^tTY[{o\3|i/5یGH ~ -#k58NGѓ~w]Ti r*YN=L [p[)T€-vVُp7p`10w;Ki_EQ-{v-`lqE0jGr4 rҩZnUs{Gmpz=WzrRB݉uo?2lXQD`VnJ+i9-} & JsG<8\E)z/LNB0SYshCL{Hdoj_Frm72;Ϲ~C[h=*RGج!W|Zc Jrz2 |./'l+dYH,xlk V7k #OL4;6T#~h/deEm9ծYd6?:ƿ  kHP^B g/J-Ê"}f7>&5*fϾ ÁO(uğ^ؠ01]uǜ<덬㝧kG:2D6)*TLaᎷC@TtS_0Dϋn=o&|DŽbL"Yb /Gu9 q Dq"<>=Tal@6jY)u}Pő)X EO$|$d̤G݀da GEzFIu 2U(* [V+t 5NڬdD+U z[X x1U㑩hBS0ѫ;JzMs' m &MǪYW'~'iJ>3A#91>e, NFc-&+# 5+އ]مvC/"UO6պl- ܰ? T=$*J, P!Q)FJ->f'ujg;{s3wfzrgs绿;jzB4%ILkꉱ; mO/޹(6@m]_e4z I̶{$q@snByu S_VӁcGK/gܬ>;: 1 ~gՠ)h _Vt!~{;[6^n ~ )JAA*:"ɔnx[ 0jn^b0. 4}C}R- W#T5WU0Z5#o8}ھGCA1M8?kǽi&萴W)ԡcFBtJnjsePֶX2Cv$tW(-& VlDn"Z:.$/dLF|0ƶ-~;e.m.2E1WdjJ#X98bޭ$GG%n7KPӿuM2B',beM4 5*Uzբ yD"IcV{dNwM4XbrnS*J~\xS\_wCl_P=D+Dv3`K5@N?P)=#} ^qp8Xe+/M@ 9l?$W0zEk#+^Kk캹o,?'W}W@[to5xWXyВ~j L&eЈ:~ ω J)3Z[S9FΦI(k1Lۼ5&TC vS\RDHf+6^tp)<̡CZvA+ōW^{M2F Mi ^vIgQ-ǭ} qv07<VS##q.ULO֒a%inYid*ν@)*p$RJQ~14ӛ#:PD ?ڸM Fܽ4Cϳ#$<:[Mni%ٌt3RR POnjIw?XCȣؠM3i޴Os-=KuA,nn?G OCΐ,ō5wX HEQܐX`)LKc3'xnWW>| z N~QD>:ޞFl !˩M n!~G.%^th3~iLm,뛥A,?4ހ0GWCKWLs^o^$!yv]ergq\RJ( a>2Ouڂ/F^ʔ0yW0?5#wf?_W\ѹ '0!:~>{$.lSqs;C0##0y_=FݙewaE@֭U"ҖKMQLJ"1& T4Fے6(1Ī1R# H Zt߻ ~Ν;s{<ѓLqg;9(,mEKey8店T Wt|?ls[^@f9<, (jr`d d4ˉ$-ajSީ~T3.Hxv$`e]9Ѳ^zdG3zZ>ғw.Ax^n9/ifn"=Y>yxbÝm+2 ؑi=(/bxgIP[G6=g;zg˺FQG@$ƚ6!hČT~֝_P`,VX c5l{xgsma%6<0kvVZ LABb*7O3%C]L0ۺ#tswWoqD<Έ]nbg"c6g&WoٶXϋXWp &iE ±d0̈a~O?Oc @_TIt/nl}1na/@q2҅V,hlH,.OS6ͶifsB'fPA1 9-xdI^cˢUk'ʄ.d&0TU@'q+ܚ=)й/yG/\tVпK1,(9a-{OHMBrN't6'JbdO`4j~Zz$U+d!@NwyhF[\j^^R̃mz~ Ebgl+iWǨ&Nנ YB9«j-xia)>t{ z0MwՏCR,DW vx/|jcکdEpؾeb]?U%e#LU,dCZeX_qG6hi>Y^ %P6>+Ȭɧ'>le\`B!b1!j9vB3hD+3@L4[ph2PA(w@ Tkt8]S=x^Lnf'$*68Z$<c:}y(?CA$J>߆$y(N o~Va Ǵ#v"scܰ'.¯D3pZs ;}e& {~msҰR#4QǫOxyrR.б6ݕ5M祉j7Ζ!#pO' /gR%qtkW`A}odCwo>~NiB^ P$|'8-ZWuGSu?YsTmVO|ύ>evxYn ^J-Md:$қ=N{BAyo4!LULpٜףԬw/Ko^#΅] />?^D+nf2 [l{|cڶ `@3APJK-8ԻȐP#Hr nb}]FlȑQI._y@-1UwKQ# d ޞ73TM[FE^ ̸x1MhAп>%}لR ޵@GU]ћI& 4 ?BAA@jk,]`] %TPZEZ DBHBd23{ܙ}o^#y;s',a0 *o1#3.)9*H% <."6@j2n6LeC;]ITiBN8'<7v@_R|DAW>#l:YG{5lvY ?ab.~l 80y|]肝(*cչRƍ_e"LL.]Q5݂- d3\><_,5Y l!NLe> !KjIT"ʥ1IDtb$mƚfKdr7_h)ȗ{7'UT+4 F$q2g{l 4':HhČhh#pѝz#-]MZ@4`QfUݰ s([QL8xSڵM?db=$E _KD-VtHAS~fĬz>-:GЮL/014}<w.wr0McU"010cXKGT4n016qH/1. =Tw֑~dy!< k"s4b6fÍ)71"öp;D7 J0r*˲n[f 6OOPTZeJ=k~ Z 0Abz63@MƵOVΨx@/F[c?:>Xi-RR ؀F2#j֨6zt ~xq"*]H ?U- h JG?—~dm2i emMd#yM E=L]oů }-|J׍efqWǸh"f^$z.+?=B<`ޖt[', 3kdDiwds@3UýbE:q@-\VѸjQG`&r_)5ΩCp%Vwwj6Iȍr Ԟ?)~e鼱[ "|xc-Wo;:ntvAV}YMW$O\B,6ݩc#FeIݲiy3J:PIW9ܐu`jBHprvM+*/Ь3ɱ`uP߰|J^\%LSd8AQ(P7vۂMEx h)t@Pi l5ШPW~Bn2{s.px!/ M؜YFLerayvlj}ppiyJ"FLgT%q<Ǡ9w@uhrQF S[ݖ!s{XŪGM;jbFdNRGj?6{TJXaQhSvΗܤ쬸-;SN>fzΦo&\Ͳ mȇ$,@ }WGP^ߩhNO2|ٮ5'Hul_k+5F>厄cE7aX ׎fW.AŒ\<4.Z8uo-"A]+~B ѳX$bEN5 u&7i0[g \-| iI=UGBP#ŢLfƷYAWt*vUoZ %uB,L$c""3tKƉlaJDL[<"/[i9\s+gpǏ~\e,Bdwc\΍*kw$.j!X8య.|vZj$VnW&Ɗ}Fc4,%0m tӾ4XE 86y.#Y^׿ݿrSWsYZ3;,ﯪg&$Pjώ̅ሧ`ZctD5=b@9IG%r? aV78WHYm۷>l.MS5HnASKepe,KrqƏU.tTgr3]:5 i43b.b/ˌ6WIlE^_ث܏T\>yz_[wc|n1` `!; d Hg5(s* <l`⠤ a = dh l4a. m=s)1AT]M}=rr B۠8ϯTWn޲ؽˌ$z&,}aNnFSD #{*Isc\&EB(<h4>H%= |?;>vSXjSJ 63&9¤nBkP Ec7wWhvF,§$ѵjQȪrTq`Ȍ|wpucкf㾸W"VCWSvke=(U^zpZʳI9A'gH!>wgDuKċ7*&B\QZ>hkIu<;_MLO7UGA (0:RR2!|$OwkJqEItRp=nh @P`r/E tD!S.AW`j U.[EĴ,r01( 8^|( wIWX7.:_rJaĪ+q(y!2mSB. "/ĎlEZ-ep4 ׇBG4n.rEv '!։ʝ"A-8I7mdE?[& )Q¤ I7)0]^'N!3t4gxj*{A NVl~t(fLJm'YrdR ːЮ7n#V#;(4l5 T%t"p s3ǖcq좐GL7GHaRRU.a)d͍Tg}j & O]+&4i+Y~6,LdѕbBiLO~e=e@5+3 n(Xn$ОjJ(׫3,;\K9)l{DxV)U\>~@eI}욇`ʫb, Ϧ^N׿N'iofŕ:l AQT>]C×c@v$t.ݼ(~qr㊭9X`LAu×9ߐws㞂 $<ى.]ܝz`o?9L>=H ije64xbH _Ro W4ZQ]Lu<L7A-\m',?Bv-O/_ڻsO$A$JP@@+O˦VZ}*RѪjk֥uV쳸ZDYdG! fY{Ν37̝%8ޙ!s.Ͽ~V2Ho,S<$✠m,'@6j]N>mA_)1;^*IXaG}HMAՇ~dt5*n(QE򪔦+ Nt];# Zh64ҦM"Q"v/& ǰRIH i`; Ľ!txŖn?L/~^|Pۈw f\NH*:=`ߚv2"n㘪j@A߷֕c3ow0ПO;5|-$; ѯ~$2 $D\{pQ^@_vc#Ch R ցtNjeoH90#Ka4]DK 5q"ܓ)K22\ UUΙ{45i`H {u|jb;&&cHi>}(اKI;r0K]M9B~7^30iNV<1p.#u<!ZYm+AAji?o|aCT+4?;0oUo<[&{NIƄuf2w~wA0Ã(qtcSOZMy/2О `<E$dLH81ȗ}*̀Fiu#Jws0͢*blzD4w+"<ߛz";k4e)v9-SA)(<, %^HXul%e`pNXݼ)$ 0l|^UD1 lkHL,HykTL/:"8j/npm˒ Q=dL^%&g*A!D[} |gjz y/zRGy)'EW0*q:c1 LD F3'AB1A+($I6n7d[܀s Z}݋EUqve‘TٿPp[VCl3 t+o:C/ͦ\^Ώutɟ,P@K$*]D}R7S ;l5Bkp6F ):Y{ jBŨñJ,񅏢zmHx l}@EטItHӏ},9ޱ6 d B |̿vU,yYj ` mk%Ўh"/?N~4ɞIѐV VTJ}Fj+ܜvv%|z":uzB6 )@śN]8.=H/~]HEf*F=C)ͤN;Npl`|ɕ}sSR*R-(X.lϧÆ6\{R%QA 2Wwn↤ұtt{İuD,9˥#"gyUqž~?di ĥ\)hpI0hKiWga~ b`3-Rt䄪`;}٬q4}dYv`zJ`t \nIfg$6H}.c5e#i`G#OP:C64>w̠A%y *Dw~ iv@ |ЅЉF[ RR PkzjF|&FHDSڊƤ[iK#dJ}GG5;*gTPTh&f.. lx'z߷xȡ3t7ۍ"Rw[=U #Pu_ ZeWҮzZHeeC- QMp>k *p,ap!V>R F99^^:#{A=w7)#Kg@^]/p86g]'  W+86vXAyuW("nH ^(bPW|_1l]"У᥏̾+{HkgX&*{ WyxΙB*u*:.7O)a ς)dpkԼJ#y]W͝j]7g0'g-9&*y 2~ LI|Iw54,[T\_47 ~/?uPó,5fPc̚0 l46$fzE5qq[-"zE~xNZJ]=QHpL:G(`ˆ |حb Vš2R- rjV-tors?0 ; _ԇsY}jj9gn\dQoXG3? h8RӅoU`]Q݋A)~ITPI`ɠ$2iY.bĕќC랒0@C5=νCt7Ov_r%7GWJ磽[vSs!鮥,CtlW]Sm ԐvyOa fP2 MO14+nA 4* t!/0DHZB )w&\E0r0uv2;=.I3qZ𸩹p2xe=׼kpƣɓ;m4ȿ@YǠrA`n:3 c˔dno1yV-qXc @+y*Ϣ^,lS׃0;*~YQ$=` @s[*-+e~dߠ5k0ǒ4cPa,z N;{9 5e  A_ (}Яit4W[A{]boc94]t.ۀAR~nK-Gᢒ~l"D|Ğ>}n>`b#3ԏCFPrJI T ^¸oտ u@sQc6 )>+Ddj7M0 q8_w"'*qLi:+ Kl m|Et۽=u@*$V%6ȔW&f7^okv4kx60ahn?D*Yp[~tVƔԁ}{0W'UHnaAi7h涐2j¤f.Z|=J@az1j"i9֦/L" >JZ B Rhz.il#|PCs:.^HJ;'}eCZ7#r~`ht-hH*n[]e7P7D>]W# d 3Knx\TGI N??[)~DGt&qܬKyjTWcS;pz΀+ jG&*hT?`f⅓s]+4IFCwjP$pcp䠿^P.\'VZ[n:Tb o{0.+~~RmTئ~ޒwQP.</$]E`M0h:*/âD;bf#Al_~pN:9' C]GhC8 p\0yMv [`3m"ʱok M",L"Ѩ>w*jxZ!Ƨc84;jLP߿dP[Fu # xvRG<23\ϯy-@4 ^ᧀImԉb09* QtSxN qXO7\`~әcʯ;#z6SvJS5y|"xxz[]h@_0ݭtwH]\DNB΃[Ϭ:5U:Xr{~ f]ɍA`i&6 G`)+S3bgjzˊ^33KU VMܧvGʲBysQ TӐXBFVP}UB8YIp"[]}K;f{.{ҮvWD;T .|>8vY(Z<8G^cKD#C]S"; Q9vƈ [(2l{zX-P|Lm_?x}\~BJ ;jIR 3MNƜQbur ;F331X̞]i/cdf˲-C=^h xd,#:UUZ+J^w=Tn<f/QNv&Ia[Yzr-dZ-Y/r@ahؐ yNWN>!Z(.ǒoQ~%Mބ ObݨCZ`o L~Ҩ КRoz|Oc׏2R6I 4p8= , e'ՐB-dT 3͢e͉|&5TkHc^T;,Jk%;(u)U-t"Ŏ';=p~8OuΉ=v~eF{pQ$QK0Ngtj=GZ@ rrG`JH[ fѯd 2Ey 0;Lu}QǓ* v8:HZIoeAq1eew)'o4'z!E#spo %Xy|oJMtC%^$#DlL]1/t$9!Vw%8~y%aRaJ]j8h +Ǽi!zq%l`QZSoՕAم}LRIt3 rkpy.ᕡ p;tPENw{]>#ZGjpz ֭ZIfV91f起Q(,'-^.ևt>%AEFz~I(Y ȿ Wj L@,JJЈAN8wUE~7 HUF ؆'Ojkl}mWݤ i2@٨#*4?.,}{E\Ԅb G!Nw_ԵxpA"{XIHxv/O, 2X5O. ;pLP,RU (r̷ko3bԜ z0!_ K#6eF[?vJ<Θ}n^N+x`?7,.:0+אFw/F(;k+U#Ɩ0ōov 0>`O3c_oy :x#v SOFwVS&!Jm8\bCZړ!.no5@ {z6Y %xzDCDO<@w@-A { ٰ1& >vܺM6b-+$6A3 -j:) hXR{Q9ir<} =o t>} POlHstlo > F S} UPRJ}ˤ9n[Ф)-&80&ȥ=QDΒ3\iCJCPJƢC57˃i3FWttw "rHk57O+ Y>*7%TԿQ /; $e3+|rgc$#܉z?H#9h 09c@P\V&%jt0TEw{M6E@tMOJV!(LK7yCz7&Kz{2}%hz=ڊ2-F.Ƿ';  LP* Qkj8^na^J1s*7%= C?"j s頾nS3>n|ʹQTMMV䕹ۊ>RU re+:C*NN6h㇋ WO> D4/U+CQ=v.M>L18oFK]%uO~p`CH~͋Tӧ"[RJft/N&Fq})\N׋/gP/]qAWZ>oGhq7r$R#3dyw=%Xq(Ɍuzq݉х"S}Hk6;$0W{n :44|U.R37枭?Ȁr0>TG._1HT1g 5ܑfe90:: l _i͂k#^J^JNP5nQ7>;xwztQ+OZ?(bo,(J5cq l нW?jfm-כ u=ػcГr p 5Ҵ,(@ޝdw\o6D1x :A&RB'ƻ{n(? n@P|і?Jʪ,`kG+b΂1SɕҼ]4C$=~b\:JZ/$UJ6- !f٭/nNh2M{HsU=~,[Ug˴vvg:*c@7R '] ݎQuG")+ l!Ȕ9>W' Be0rp*;roϟY]M7c}r }b|a.3z8}c̬ z g'Ձmϑvs$Կ!Cf蜂sڼѼ !u5T^2+&TW "> H/?`~`W; QpW$,"P.=u&j?7bWr 뿣%-6[&-4,`C }鮋Goł>D % x8f'KO'RkϲǕƸKxz1XY8}]7yxwx{Ai`wJ vT;nmgT gDY[,:|,_(I,ug3xrޞr"9 9;O4ّ}EؔFo">Yt||ش8~Xbj$x2xM?E @)1Ä#4 k%`Z "}aZUvIENDB`youker-assistant/src/res/working/4.png0000664000175000017500000005244713260315532016752 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp IUQTIDATxڤUMhA~;dXXѴj."E(Ң+(xZL.DTj2قMFov3bhҼ3R'%MEwNcbNdD$fyr^EӹMFDT Mu&z]*@GuA*mZfzaXLA8~$!/m-,zu+"s.t^0ٶ]"%ˇk}R`Aہ\YOt|P\SnTLjѥDF\J-yׁĘґ+^ŀ"buZ\/Ho*kͷ0]7 &|n|0WFAhP^5MDAxv6!OSjmBW^x)J)z&x( (ADbHcmv.웙7}߳J 2—vlFiޤ~*+\Ia7t\ CZ(p?\,`9&Փ')Tf,0fO5#p1P|}[ty%[\>Uv˟}x̏9tOg(Tt53Y#1Hsk>i-ѳVc7,~T(kK$ IDc(0xycnW@=}W%XR 8"J'z*jn32:v~kD ^MҚ\zM#񪙪<Fq~z4gr87ݓgklac+TJ8SG]< }#N/ m>x5L$C_Xip?,w^#0֬pFNDf] T*\`\:hEkr$ K$}Y [~l:z]彾H%x9! k2~2@3 NnX}5>{;8-1M-H;lZ{(kD'ͶUkjZPVT|AR"I ^| Mb =ThmPmmM-MMmv63Id²eƵB1:=;=런[:vױ >~mdTٮ:r%5,HO rl\nUPi-H"ܶ& ip՗a1y|M]~:.+Пqb'BhI|Hv >R!$S=N $ qyΛ/C v[=;ڼM=eve0:FpX2g˼1&k.tJV#(=Up (R3]DuCDE >Yr80HstS ȯx<PX2f Ti_,"T,g#Zv, @n<-عwř%}M,`Eʱ$^ş}&e+VZ@s^ t^h ,'V4I'O?fOQ[8ft` LSgZ*L2}V׈|_?)XIs 6Y/ԯЮYHϒR;P~>gTx.M= ۬*W%R8:7ezy%똿x6.QYOYFjJoXTpt8-<mYXUODŶǜq|TSZNjj֊ (*KHv\ş,!H+?OaMB hZR%wo& {cCR"G&MUݬ (@Z tHD ZY_Y5c0TTuh9R^eaPU 0'k7-]=Fmp=݂;H6@F,`dVHq6YF/Lg\,s3qRK6kqyZFx 7d{nMUanZV!NpD11ubCDC "KDA hЄDCB8a"0M܇F׍zs{snϹ]I~l=yy l`XtکE/D>ͷ$)P_ܾ}x( \RKSm͟"?t{>{$q6I Ih.F&FI,R ȨV_"M*I^G[A~RAd/@^ͣXp[OS𭥰Ts6[\q^ACBh'I"eLLeـ5y(;g"&qޙ/`- 菁1r6$ ҹN";Ѿd߽F?WXlћ%cV LNg$.jly1k1+i C%;(Vs<;~^#(0P wLP- (x'4}gS֪g"_j@ŭŅZܔf̙-D[}le-hkZȂ B! GܗI`!#p觋̿㮦Vc;YF|@k3UWI"2m&c2K*_I@t$:%#Mf`tE71u]+%Ap.96\=‘#ut$iW8T%k?ቼ{j/miFLOOiE9ƧFq3 ˖q-M3/tc z4 \%,е|Ru z{k+[nb!؟.%iM5}U|uÉV(D'|n륩1Ϭ1b9m@pjP k  *O7"nT% 7ߐQo_W:2nC=7A[:| X>N+%а{J.,q ]8E+h(b3*qe`q7>E5tCLu=N_<.:#㬈:wb}c*O!|tQFl |G-{zﱵ0f#Ջ%1;ꗭ ή>&l(tGEf0+5pW4΁xF SHtx͗OhX:e@@ۅ/@K<Xx| RTC- di4I+V/.jsB.N,A>h |r$+ ڄq+c,u"裯J}c7;˺,vYPAWjA&6Fbڦ)-Pjc?ۨml, -"⒲'3;73ݽ谳v=9,,qܽ*TtzL>3zpq(7غ}\aŶ[ۊIX ĠCΝs쑕g׋=ZuNn„[SA;:.?{|X6׉)zA\98-8ƕ Em.Z/'ҢlJבO:ƌMbFM_?V>^Ǔ~S0(2n<%T`PL ~G'Qk*:Rqt&r/VwbIK[w?|I&ycrIk' L d2waKh=W 6; v*\gW5~STShf$lU@5wr$͚{Sa-|t7O/`ګtkbD΀fU*JipD9Ћ^sZ:'[ e0>-om%F+=)E|v;5RFЩ\1ċg7+j;|>RqLT%[rc=bnʝ4G_ھ>:eyyV4IDc&7ɳд2[Amc?=#1H|h>Jxk :b'x@_@?5-| L/&0%|AQ]nn_%(Fp䱣brCp4:у[ 3OBzvDyܳ@e(b@Gk81,ifܖאtZ̚@{|ax5_(i( BVvWX.uXZ8WX1ۅ{&C1eof8|߾u~΄2)(GGY\8XOXO[jAVi6s 'z3 MsJPXlb>QW w`,eM$;vφe+O~t~pavL{Mk-L#;/ E%YUP5P!7J^WR{G䟕S>XG|bwִ 59n_iju&` ؙAU뤷zu?+E;k'5x#jJC!`hfU >f(s3Œ؍k/@>:苙[nNnƧ;$vL'R1BDG\[bظkGT/8w/ c݌Pصe W-9sZL7%~c b'x/h9΁sa8x3u[5ywwɱ׹,:iA>2*=KxnE8QFP&&G% :B6NX׋3'Pߤ,D!aɒVaj*ߍKSbaڈXXRcf<r5fҢ/Y۾.}^U'Y ={A[@R7tȿK6.H*A_ Х2k|Z pdX c;蘣nZf A x0<8 Vmy3GoX݌ 5NHv]?"Pn[/kOa_$႖q-gM4.pM0 nmVJ[_ge*_"`֠n*M/aUV;E| +9kucvy ?z=ZL~9?إGΛ]<&o[ eD)<_=xaJ(n5m3>l7f1`Ld<  D*w6~irηGOT-eݱ N& $~^*3gA&W|@vg?ԯ7j„>3Q_ػ +ڳ3 0fH\ Q".,JRhB4ZX5Z&, 0 _wf4Uoo۷o{N < p0 :o1#- @GJ~S*z- .pn1]LoD+ ۈ <FںIu #dbI'ދ45T!Q??lDFW7W7TȤpfן6%k**x"K'9ዘ*;(3uJpk'}c-`brd#UٲNIJQ]Z!yQcn{%mC 12rCʋY"MtuS' .7U>|-K$"QAt"rr2o)*`ͣ t`Č+J(E}= o?F*ӿ [ Mrloj~:\3b +1D*gDEyڮ,WNa$-L@eC(b^@s!6%q nZ1|z,X>^.-`|,"ӹCX{;ți n/:G`Q t=Ŋ>e[>y<`쫨OleD|CքEicѧ^yà0<; Ic$_k)ҟ*ތ<$7f P2ض# Bo,~+B~?mt*[,6nG葴\@C1\؂qAȕ@[D=D&²e| ! %c{c^C`J:*(#~HA WcZa5>`l ؀'ēw{$|g}rJ-/o"܈!=vbU raʦnbb#' XJ:`/Ea Wi7+2YKPyX(}; dRYI`2qGQx'P%*w2lpB ?a@xIcxOW 'op^X_'EMPs.EFyL?Rh3USߺ?użdJOޡj'cCOQx8Nʮss)6'?q idVfQI*+#ق-Kl^,a L P0]d}a*A?K7fTڈowLK`#ZD+IDTwHF M䪈Pn#k^s;GR+Р 7E(9g]xB$!>&|֛?3Xi}\wXs -*h$I7(aC{ͅYs ")`2L-ڊPFkl5 !Eº m|\ں[±ᒰűaE&tUSS%/[Z* v nU~b?)XK-cP(a`kc ZQ!>6sBK ;88)[ #Հǧ#+ ˓³dE RP"䵿F:m1 }M#<piMӏO&kL qZa[]xں''1ſm*ojvrpcr؍Az?*Y^ ?l 9?Iל-޺t9fD4Xls|ܣ 򈔐?R~YZ]:RZ'ľ0Dz8s|K'xj,}q2EPr!H`h26bSA°g$zUD=y|~Dneya̔Mβ5OIt+VcGvmXkN>4r3Sfr_qj9a犑8(e={YaD!g+7S*Uo7:P̪!औ} |_Y[e\:cT׃\Np_PXjilun~|)Y)s~Wm4` u;j .hnq6F>Ɠ ]4J_2l~"%vI ?pöV9?Z+(-V=zq䴃uNg3и"ۄXP42zrBTEHՏ9YbF.sgUH>|| lj5Bd|7gUM苯ZH,I<9XA/N˯x~Y4;iqnuc27RMkr C\qKaF<4h6IIP43QQY$\ŠσuKSb1W l,cF9i11({{%_qIZ`?-F8Xl;ن}.ގ0+J(Az6uԐ:S6dOif+xW-E&I~kz=E|UF?)qXgWAdѨ,Y7lz=& I([V/~U׉ZwX s:AjdJ?W<\Mb<> f2o(m3).!ٯӲe1:nY`C=˭b(Ql{W?-|u!( qX|p\*+zW1ٱ<#.Rl-@P`#>~š* 4][xηvyVyTe,TnJP(u (etT"hV]kWfa$es>\4P;ѧ<,JtQ*?t2!8o%:AUd}ΕTmΧ(2] g, UٟM>E/&^$Mpϴu.a XJ@LE]eՌq?ݻ1f]dYʠmTLg3XTڎRW/9"roFт$/77ީDZTIӠɮ۶X_ |KPG϶EY𰸌0Q6̫ 49q,-ń{is%;P8fpan.U 7UGQȺrTuH44aYd8.҇,:>JcesY cU&-QN(6DGsBbcY 7W5CN,g YRxq *lM }fpCD\a`QY ]CL)1]ʦ?4릍R.[Ǽ ʑ27aa$(e4y' ]UBZs܈OKM0 ]B1@* +w@5b ŇQ,t0{,N=(|z}LpDU4"J,H*lx߼rC&]Ut\Ć X3t+죍}X֋n)p]^-(m᝭̐AT5h5JY @aUV6?\&fL8Gڸ ,FP#`Ql~f>r q!4;O+0Xt` )Y8 qìaiaHCB5/A-#)kG _VB(,] : V_=*wd&, ',]X-m+jL&;8DN(w,;`ܓYyX=$ơh<🙲x,PSXw*+$SΨe׾fR9r9 VލHrz)"f?=kxyTd<E!U8)Mgl*t,1+J|D&L E[]M칧"wOHEG2΢%u;ɜg?psU6j +yUr[G9|Q qxz=eRȳ`K ~G;<ga:RҖTx DbBSF16<@|U&<#]H :‚(itq]Maqo L }.w&pr=96 `$HEx* <@PDTDP**ЏpI lȝM̫ouUO̦gg7?NTW_X)H#dbj#gW "(&Ar}'7XQcZHbFѩ(c!h~'voMXKqEoMK'F#l ^:j^{po%#7cxIz[64l@:ȏK TaKvHKKb89A6adxEk{mO.D+W8nNIBǭBn^X!~-}عqƈ3eX$Km[%kο~zi"U3ĝV)>OJB@9Wlsbڥ+hq}-jņF@ vH sjՎjT RB`jRq 82z mhV/ۨ,b'#&9&r,iw{ϑ@} h+K]7TGH!TcUפ%+LhhWsga wrYHK;)32LqHe0+ӫGL~]NJ/l7>+8?iƱY$%٣jp=yh1q͘ mg@lJs -JZVjD#zj XjbT"Q;1 "$gi/+>^}ԐJw͡&|F3 ywwZ8宗?^m,x<8R{ځv7;}$-}Њ$wQo`@:S:<&eDڶnm7n \eh$8E,t`@lHI"Nd2ns5 L{np\Z[xn&߾e)6e+EZztW%}UHof0Ɉ'<_>+9/nd8Yρ1Dj~\åyl`+y"2Hɶe\{h,x#Ỳ6g4)! fjV0.cN(!'؏ի_LI}";v@#<ў/^|]SJ l j\5;;y) NeW5S:;s٧=DTH-\ o+bWzmЩ g`tq(8^z'R1+d1NxE u>0g ھiR9LOHp lIk_b*#ǤdRI(ԆȘ#9;R0%"^_D<;S&_X٬\7Ltw ^AĀ=0PjmHI.0V[:T8>ܒ[^*_;&~LA2|7X)PK[=3a⸽%,$Ez=Yא+aժ@:nWEwΥ jQ=A, ҫTrqT~#u~2u;+~7Z߸*+Gm)®-XiUz"u:ihoYڱl· f!^ZYu%C"ChQ 0b<?`  "=']]F24%m{d-xP e#=8@%yD<<NKân] Uټ)+Gדl`O7W\ޛU ^!blkkrJ_E$twEc9ًWmqƟtKihO`˫iDCAyB4o˵mk@i-C嵓Ui.}G4K9ݴTHr70N~*vRZNNbz{x]g 6`*EBC*D94r_sTBy_%ƒ[)`C{3,ZDWGuae@ռxGNv!ԉRA[Bjy9xBKSBQ6bE)=DJ[Z˳X*rWV @/d~du{O"xqˆqQvgVyGelww.5$vI΀' {^9[9lj!h đD2ikpDVm2̣ .M?%B S[ĺD=o&l(NW{N bEJi< Na5 no]rdbgSi_ If )l2MѸb"+آp8 \,8[xI|vĄTF<-5nlivX, c^jp.NjO*e˥#c&9 B5 +F-u=DՃ|4T܃8V]pPaVD 6zYW 5Ӌ K|\=bnּmWTWh dbUL$j+4:AR|`k!d,G` Mߣ~~szRz^}kjԠ<iT~+6llF8H,?lslM5 n":.+/CεItQ8pby}qN^.G;i;`H)S` <|73/tbmU+Ym$B׮I=pNwb.Dn /vď]jC²~drHM6vlLmo4`_ؚ~f^I޸vKhI_$iRQda?d᠄EJRdw=~ߧae3~?3e1옉6&y[V`?PM%K+2-(HrDMPEMK%RG짤 -5fGȑMfB Ko@樴DMHB.MV7Pq*_HEtR96+~G3AQR;"/Яo{)(V'y\*Oϡ7Ʉ;!\r,˖NG:bV M]G?J~ ",e]a+ji:Obt~/Cr ^#Ul!ԕL~?藰225yqq 1mw7{@yh%7WW#⭜ fmXh[N%lA|ks<7Ͽ&@:1֌9cU|%ƹ{jW$w]si? dyNS>{]4GJlT R 688$ ؠs#OB;%eޔRvNL2/u&3 ހ$⌨d7wSϔ]S s=~]KKP?_Xl >ټ?/ "Vӗe9O2Jjnz3H>qbClCƄ7jث؇͓y'p1(}M.Q09`1cOwC ^g}/ɓ͒Rjʮ>d~m* kPg*8 ]$}C bcPcyy_+^Zn P{2ni0r!_i_, Շpd{*=v‚f>mJDvv"`#.s[, i矟f$(8Uj`grzSm(C€c7-śf'<\ K>aQ3d7KJ@o XSNɕ866ŭ FX;݉`TPgDI;}Jfd&)hS"*H/b O!vɼW|q"DtMEx2{K-r\K0?ا-;} "OL:mUWCoGuܼv;ZcK%)bq'CvT"=6 /"<`_; уp:*⊒Vįﳓd Z8 s[Fv#!)$sY[2|sЮN^:Dk ;اiO:6[.^Y8wdecĹo<(AЎ:;4s};En-X6NP\9~hULޣZ,~nޒ P3IDATxڤUKQ?w>vf7 |(\ؾɠH !z$^7"zY^T,E qq'\vݙΙ;ޝ!;ss/;'4k 7c~[3Z0IxH5}p<{+ɘ#m=R![(c*|q?O1UM#` m6r[n>>3i*};E&˜\CU 60/<<*v!.ێS]%# :>|\՞J]op~`2EX`,ix5|#Gn] !ܬ&S07z#o߽fs- L{Oήh@cn+K=Ěj@YLͯOH7XfDLJz|$Ls'eq.~2"bw\|6SׁEzD)ģo~SpT'Z;58%)lح.x޳0+7S;-xm; 5a,KeD"ɗb(F(lH =! Ƌ."xD& J-+1xNG IFdzqƯSaVs##)^׽C}#\FMz w@(8/(7^h(QbLL`B4qÖĸ01p•B4? Kv;0QVFRжS|FTqQA#l;c?SciWMo*#r2찪8w>p~L楫Kf;Gׁ;]L-\$ꠃptG= EyVov"M)] "[^9D4mlny4(A_mߖ~D r[.<*Bm3O֬.$ VfF&[HfP)AAAo=EE=EFVC=ED/ZQR%`iBIj[wufvfρ.w̙smZ<;:Fnr7٤mEXu28ӓ0u %GfLעJ\eIL@O+qE"r?{ԪJ /򠡗0aΝ&w(X,K;/Ta$!g8 g.c.$ k{n4hSJpFp/!þI*h`1 i,"VSY&ZڕJm E肒ZЌ_$ u XH9"G7 B =/@@d"S#@ۃaE:> x)2pe ͷ_ we;s29wLP;}ֹb j'rVfLB'*9GprxXojšR8*;rv?@xNó=x)|D' T]L=f M4kRN.t?{1 RXcHO!7jc(MAҖBUS0jB1BD 1 DLLHCBC1Bʇ  X-%զ-hh9vfw2zmwwy?MOhv^3l*|@DOsɮ- +Bo)Vl˗lOD1NhIn%D(O@ VC5P[>JsGY +YZa:R^r7XpKjoQ@T(~LdNLk-}N,8Csz?QԵ䇭,v`/"M2 $^_gK ?Tt[H7[$%vP\AD˦p@Q4pEo7EmWc B:{lK}Њ;s* iRͨPYd!M"l\,r$Y7@Ti&er~!a "ʸ>ݚkCJйqW9DIv ?PU2?͟;ܷHHfȈ.آXjvus>~.U@MԲj={,_&Em88HjVeɸL+t+My?QmUO4blCnNݚg6__g׶GL1ٹ$5&Ko ]cy2)*aT/ëtI)kzw+W8s@N%ÑUf[6<4/n#.Glt\8t~d!&ȫjP S L&H_l2EKWBDd~`($U&]W kĸN)Kd|x5@jP#z_g6UI!mzq.!q3 Q/,a)?w6hs6cAkP qMo0ORΑ;=/p7{-M 4{+1N2 {Ӹf[-|WCD|ޝMp?hj[bTœ;$T@Ll/Ff/Kr(Eȵ.s RSVk$XYf.`<1h+ϛM<|ڣ⯖RsNnbDD?> ݕVQEа(Q FM0%cAEb%D%&.1-77K -y3N33o^d2[̹3ya!xnre=ɯ薡rnGlя#˥xn5s *@f~/n?Ml=2>}q 9_ws`spYMKoVߚTR1렼G }r eX老j=S%V %\('#k0(fDؗh@@]S I"΢(NuE-/ jIKoN .mAP3̔Ԕܙ#0 %U|1SaU@Rtc@[ eS:A\my`ssZʍCj R=1&^@}X u+:sZ7RuEvd" I#T^.$#cX@"!Du@;wNKwpщ@賋߯sD[NwO 6/t`DQqA; ~ѯN|/;-70 h.0sob/|w,ElM[qMa.TMGdv ,c {L].VN(%yq7 1>kNup }ҝL_(j$&rKb"Q'Cjq<Z~^z-sa%ÆX&lEXrS9?9;@C` 40L(#>KhbEl-d6Gel;趖fg&IУ׻Z(w' `_SY˜Ef7;:YۢųOfs,|Ԫxb'Шhok:&cblM6rePNǝIZR6bIm0'I?_v)@LqВ"&+.WkhiסDIDct}GmNۄ`҇YI(҆K9_ øR5/jqǼr_! q;'nl=bhLXR~{[Y )^NjD;w :d]'0؄C1`c֔iiQ↽5}HTZ"=bJf#NSkxĨQGSVc#t~hzFns*YEN=ӠٳHc)ѴmfgX0=FQOkeG$+ڝ!\ k/p/8QPubpIA0u׽ wϜPjEKfo<]f3uEJXNIsx`%0M=PR,4{ +UOl6- ]NivT DUsau1E6y }ʍbA'?O>Bo sNR.9ɚfIkSsۗ`얐|sBO-/yDRhZ 4oke<':zCf" c.u6B8зߵ=?E D^oZ6o2[x>r/l"#($[ǞYwo=q Qe*\9ȯ*`_w3BuLBPmr3@ 1Y#2wh;䟧j|^VԺ'&hkZ>3¿zhǤE~z1cSci9ȝ.]Ɂ,#.M{D.(U.fʓL Vma/o_&NN3B,<q7Ⴞ5TN_ػ誊3<%/ YH H !aJEE@RъuXV"(jwG+mmjQ{N.ՃD6k-TvBl$e|sgw{_l-w?;'[!l RE7% @o&U#Ft_ P S`Pki`mMMBtj 2- E]R5DE^Zid$a3Ʋ@eb/- `?*Vh:73KOҀ-``rdglY'sŔv<_,57Y> ػf&Rs (@hq u*8ȋ}l!Η]9*] 2.,1t_3i8l 28^(uDv |J {[%tM%vm4ƸS3Z&ZT`ɤ xV@3],x@5DS1tV 2.J^) \o;yu}9 !i$=N, xf/!+0sPjL!9kPF&A?k|IAAdWz klWwF0DjXt]&Z0 H%wֳNŹ r ӈB) 42m=g&C29DHl+q"I[ưKM ^`Ŷͤy ļ^ffEj("Ϩ#4mM!NG rK=U ux_|=n.}mkFh@@m-mB8f<;h!2V DL4y󛁄5'7)߯*%eEb_( ͥ-fx`f/څ415!b-Gd`l#Ke-̮ѧ82}hDH%͑XOt3_˾qYZ!K"||%J}/.Ven &-F -m]Ll#n>ʩPt;ľ8˒.SWu@ŠcEm=^Q/dAlX9^{S;j0SJ#L|QZL%nL–'U#*h#QJ/ki0\sNa4C>PQ(qE saPKA/ JѢ6hM7 qh#:Z-s|u4DÌZfqD1#wEcUY5{ )G&|CG-n=~<:mHJdMON#2x)l.9 /ƌc3o As V#1Çc?K9EԀ446/"$yjH7ۧȞ"$9ju5#FAz|qp\vt &q)7¸]<"3#8+Eh^o 6 dlN&~=URlR]v^FT7M9p_i.4ƴJ^ ɄJaajÌGbk{''H6\(4)h妓bW}fc*WlVE[rUBH<\Ag%'PX$#J>H΅B?:k LIĨXSgsSFVUѡͮ,&(r2{v-?$M$nN2`R[54ٖiW & 'W\¨Yr竟2{Օc[ 24#~!ݏ? LLO*#s1,kk.a,~T|T v^2xܛ`:jp6T[K R;_b[s]i޳W l/._u\EH+I ߬3ETuE<;FN\8L5{EϸSQNu!v,<㗞`?ztc5LC\Kf~#o `@㗝gNAa,ziۀiTsQ~bHNJ۾nTR+W\ָ _M'z>idf}^98aUw;nil:C>k XT"F~'U'=U &؂j%6y"ڍc]N_Eާbb՛oQCjL*w=J9rii 2{uiy`i%hA wNZV&H(9*[_icjdA A~ c8UȣM9,{C,TaJ, '8mmUAe&gsݾ5I`sٷxV0 ,,Rwi24vˠ$39I' y.aj}'Qjvnf>tW-p}g0ab9r @={daWO_$wU+'?WIW5x)j暓@2l.qHde^#3M@de@l9 2QH}0AU8QS՚|zh$[%ΰ A=0uC  zoΠfXhVnrϺ*J[D~J pcu_4U œ4N`4`%A[&qt \Xl B.a{LI4*v1^tQ (Р|יSH*7o K,yoKOnhS D?z۹ߢ@nR)0]=u"Ԑ6(<ԩD6k?NHV 6?B9GpA2V"L`7PkDžGB@=_ h`\|tr9ǖ# qfO(&u t 6A22ttq| kJ^ʝaM:5spsS -%gtr}XJm"&whmrǏgZ`@5?,3 n(XX%Сj^旵0, bex FDJ %qc>[)Q*KΛx~@e1}VC0eAZhC0(FbT<.e^ G1K {9 O/'k:} XfytR_q7|Y 6r1!+9z _ :2!W3*0F 3WRoKWM7=?}|4'!-C,.YNs> ruww~$cnA&ٟo`{ 2ˏA]p+:󯫏`nDQPh1MLjLVU1DI&F$Y53&M# "ȥ#=sOw^뚚+~_V`#b{xȈA|q&*Mg<@b(n:6ӱ`l) ;-$Pt*=\ I]oS[X%?[#%^H,bI&"]-^wQ#te(  $ \Sj AR:18MtA**/Ⱦߞ.VdJ|(vʾB #?N#C@t26ҷ'☫ |qY'eFg@^@/ёׯzug%@4'$A@_>lc=쁕rVI}X])TmOVZc>#\_LbߜjJkAy:>-:X>,On&*" rS1~[tʙ)@Bc7?MHAf$J (@ŵ'ı{g} f1 @JÖh+.ߋ{Âp;!G2O֝V;.2!`' #L{ޣlxkK7 #[Zmα;R:LزcyQ/~+c:Osw!7Ӯpt7!583%or V&@#Gк᥻w'uE@'3N2C蠄("kTέ6{)L_3!FܵLa"Dx0ývEU#Sמz3??!MQphNlto3"r 23Hodjm%%UNPzZ^8c)/V |Cez?zYCdApHU4V}׮q3E噯= ;K`o{p@7wx j+'I$9m_֔ \ZkT54S!br zњ(z[xNy7&@^+>8>[i5@ƢߤlM,2SkV)~h*" 4WBF"{Ju8mάR}n:!:ms^Ae?FZAD2qHlV ɱU`k68?U&u{Ț( '#.;$ǜH\9){}1zaGqǯDǯCY&ab kh֯@犨a[4_ڱUQD3[NƮpj3pAV.^⊸VB(D?9ވ1!^Gm+X0/-Mmm@V (u0x,!0Dd)EQU>7cpl Pk&+ Qereg2R4;^ZWҮl+%kSK8՜ ޶NE h1OTcx 9h45F' /߮E1`rlM]|?`"( X\ gj8^z vϜMu=W`)&P$]]d5{hZ"Gs耲sw{b =|t`[rjp0w$5"BA8wkyU9\r^fҍo @o&tj2 Ei"!",,`L?~y'<}jTtܚ5`c_'e⒟qiy<txpD^l-:x\|"e/9Oc{zz)AEe9I̜^UXTY|y(3FpQE^ fenJUSw7` cd}{Wv9AcD9dI_nr)H* Q 9DaHbDh"SXϬTPˈ@/?ͅ[R: ^a{~S:[rޙ˞w@ z=Pls}#f[Uk?F`T@*eS Zpj%) p{ x2%X8ky6OfA0rj)~Xڼh6"#Fr([^nZ<_mȰπBi3]Xme %yaGys{wt2hdd !氄?vj}b=0Uvũ@FP"lTI7 AmlΎ޵yjOu` )#*lBʖ, 1T&Yv}0;?"vK< l"TAݟ"R=oXO)\_0`ݶs O7nn Է1=$_+moۑH<㦏h`-ׄlUre#"wtI>"䛁ٷ 3nV4ը¤)償kP9D041nV\„ ^y}^y7kC1LRDP7kdk 6z#d&+KnTt/Hk76nc1#av̱lǎ 'Fel</|`ϘC#ǍgyE1!x'v[dˢ=?E8_-ٛ p4)py<✬;SpOٸ/)5!\V,ep#jfYZGN-E1͞T-$ ;X1CjsYU?ضi9T[W@ 9eQnC}LG ``zk\ 9wXQN./N>{ra^E}[uĄ) ͫTJ/j #[ƐTD ƒ`#A:$ڲ*-+3L6M{qiS!r B %a58ƃqa|g &plB%́OBTR)3$J@O79G5pϧ^5IqP~ eh!ҰF 乶.CxNp")XR16*V؆Cjڶ_p;e {Ţrc/ko9/y+Q+# H+ fRa;{vIwĘqD Nn@ B"$% CmzQ<;o5 &Rq?/&i`1@dҶZhInwؘO<ȼF7{`z}ٝ1Θ?2Icw} ׵Fm:7K hx >oT~ )Q]xxNҒ HnJ۾LWY(.^˂~^E_j~WN>y(6>e?{zĭH5c\^(1TQhUL)#샏`XvW7 a]g ^x~<>=A2d׵)䊔 @v?+lsn%/::xl@:L:<*DNMڰA[zf̞TfB1?Zuty_j/A Wxo'B3XF 9O&YS%#_j=vQ&!@A".xqc~@|ܬ Kr١+Z)SK-B%Ċ@@$3Va^k M1DŐ3Ǩ1Mi "Λ0[eO^sg7!B =燴4Ƈq1Eʶ![L԰8IW96(h$[momc:,ZR:Fk_q^y68rv%0N2y๸iv!4-;h)oDamcxV7\9}%Rsf lrȴPCmKqc<'=yiO+Y댈Y>qLըp#1?,#SL/+˷#Y(~P2~ggJ,#X$;MRŸ@k=zoO#Ͽx<}@=moK5})3F4.&9ʓɖ qx"y50c7R -5f7ˮ?v\YOS&]r<yD]̫QTc]+v F=AFw!CĐ\gZ5vFu;kIy9+3ֳ*Vͫ+C umh0^r+=cAv}P[)z>{/tTixA,:cMrMys4GGtZіA=bI޿kXvѓ<߂ut?Bi`?DI >N/W=&;9aSLmiaz!Jf!/*W[<"=`_; 0xtK]% oxc΃xy'7zz0Rϔd@T5EߢBb\09_@:x@GԳ e@VZ}KS~+y]"ϯz κprvU F=ɪ@\y @wd'tIKfqou lna阆sÕ 皈2ج"^<,n]|䀹jW lCEIKvJ'GزpT|7x"6zlw=5eu|m\|0[2OH0{"{sՏ?>5CEӵܐd;x:X q=xdWr~[8 SλM좟v?8889;JX.BPbxKa:V%zyRC]a3}8t4 %d0X-?}ee#E:@zuǓ@l[W l0[u0`$?T>hUq*6;Xgw>'!an͛dl  &}/k7]Jǭ\RN[8OKe)obvbav\`ŽW">p;;߯;\(YD`K)l Qe1?}, `=:c0xq K@TX^̞VYEn"69mu`@~.Dhw3jքp\7&¥. %b{^OfPWUB4ŽH /?L``ʠБ4sPɵ{Z,">=m{YeB3#<(j`@tk$cV!|dpONenł>Dk<7s3Rk&4}jnMk`C.FU/3<*.g\O`G='N?#jf"gl!F]@\w!V:V1C^У V wleGZCZnjɃJ ,/d xc4 c}SN$Cf 2"H#(*$ V0m]340Q}IENDB`youker-assistant/src/res/working/22.png0000664000175000017500000005235113260315532017024 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp QIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)0 dY| ϰZ ÁatA\AdS t<9T Bw] *]} gH R^IT!$?Ï _$I%(>S`uÀ) |`C+@NV&Gd8`\%"̃6Z>~TEy12\ 5(c G U 2 t=l[ {D}Ői2gel(K1D+fal< 6Cd$Xa?A@*@Ar{_(DdI;lp7XC J`8/&( _jI"BcԸ1!1n?? ;btAظt0aa;W\h$qAZ-S3s;si{{y-h<HujEOeji=+xmm"](*2z 7e_xӷT =5fcCϏ}A6彌2)'p= \ T6ޙ;]o#U6hk#ww Qs xsB'/Lf(v8W'O_=l~/26l0Ej>qх=;踼:L^lWhX^pnzƍR#Q”+vqu }!tE~a;n"m}VVt9r0*kbxkG/f~]eΜQ BU^GY],_Aq@XoŇ8 zP?U7>81CX/gC>#,+nZdT5@=`a}q13WZyK @+މ <IB&/Md? ^/\R+0BZܙlVw5i4ϗjGe?kji!m6k * GK ${nZhEk#&BE2hfaEhUqQm*EEXVY\}sgnN?aw|w3CG.7BBcoFt<7pdGv~OZ0 ;qZ#RPs.~V4Q{%3p`tD=>5UNlcIts&d,ڵ7(pe t 37Pp~R7e C_MT=շےI֋y"dYyjwF<"IpKocE˖ߤ‹ E2>d#$7LbHׂ$[Ihd-)޺nmcFrHd^6Y#c1Q^rw3ꑗ}MRu^ej)c]Cuj,<4gʝ}OהyڑX+2V)`*mC˸\z^X.vtMtZF7uC6ʾ; 6^YQ@M{,qU鸪sfOzfV x$]udnӗv7)[hf]bFi`xϪd93S3rzq{99ސتgF!bt H#+G㳳ZRJE/)nf9hqj[9{Ѳ ;ې<5p CCјP&+ z [_YZV`Ͽ٧)=Ӕ=-PTU˨b^SViL*&8<ɾ[z7 tىpY9 26J^BhLw2p+LAF6pn~2~; {*ٱ8=J ˉ}h직vCWޭ56" >ibm(} 4"bTD&*U4bFP?h Ѡ E%hLPT֚D`?$R#7{gw{wLiqsϜo'4U6}MD>\"@{7v!eBEb54z9rXD1h6ׇP5z_obdŸ,.0qg#;еn3ߒ7h TskǕrb{$m٪K7uwRDJ1S˔.8be}d8"dB; 4= ^1+LL%l yMUҴl $ߒ1\7uJZIfo?>kA 'ז3M*8~t"?K}M_{M HH0ĊMDK'I]r`Ksa\Iy2_iлfz3BXĔz w:==-1oe@(H2N\HQ2zDcbUr:UTРd8qFs'p!ެAΠ}v !9=3* 0"TΠЌ^ք,}dTY46^'HQ${e>˲F@ A݆ Pʏo|bx*c:[XȝȦ'A2#$z|C# xq5StV5؈b#J;|lKcW'rHnŠ膙 TG]P +> Ӊv3וa40cHK|0&=m-R;Ei*VF444]R hӦ(X~~ʧh|U2OZ=Ŕ$HfݝQvnO):uEW' y% -bvB~-,O[37,sbxgͮ|va.$QӘȀ( Z>",ZSΛKBLO^ c7?f} 5fjh Miη0g)K2 %0\b7K k}w;K.|X|>A3IdL63z<W=YK#bڂU%U@b"Bʩ !<:nmQVeөw]~덑˓ kO $-&i8x_űwlj9(ZQ[F>zV6P{TO|R䧿IKgۚA[[韵NK6|n$Ϊ>ŇlYxJӽB~8x tx ݇.`%}E6a`͹%%}}}]/wEƧ6=J)}Z^Tj( D& 5DD BDQ1>05J AFQDKEޏǵfgvfo~ߴIBOnk,uy>GM՞>^YJ^2<>K) ג"mcƾdA4ρMEz6y<%.g3A<+81Q̪^ܒ0ZF(a!#m) #AdۧA6UthZyJqgKJA!2N+Geb> #RˮY ﬒ܗmb0_'RWz6Gz5r/B:Dx%R!eV#[jуͼ?&(~DMG|Kcj(=;YJ6~r 6\𢂸<`jPLJ#"ˋ2S  ,d)M7`Fdr A -=2J!xۓq@c-ґv/4``&/տ46ozLRC1.%GP";. {P&XVĬqSk$eeARdrl^q)eS2v| +/\B4ԓӧMhbN褠L(NjTY9~ I~>r7iX$l2:Π*{$Cʒ΁N2H_B30Ky@vdNGd(i;N9rt-,&>zC16K\j|)s,M1Zh|cՙ;oD µn "2EC-I7V1KGd^AiSpq 4D s_l\{?ۍș 4~}UL7jV.dS;+)^hĴƋFp~ >xw= TMg8g7PtF7v#P$(h?,a8¯'npx쮃mT9-WH?NiS_AC~:aѽ&joPbݙ"ʣDy8 (l psP;` +H%ϵXd:w4^+^,:iDYDO)4+FW|sH,{j<٩f;/(33jk6R#w\LPye2j6ꆾ:&^}>Ǵ&ȅzGsK.mhlszܻf .QT넜Z2s5c3F٭)[1p#恔#LC`d ̀G טshYq]kXc&xY:boSUY_ ľxKcXQO/Ěcv~Ȉdy}E1jӏM3NŕH\lG|64'hkD@_Nj$v/ l `̪zhdX6Jq;/dVo_\J,Fl5k9-QP$ѫ:Gwx\ ]CHwQ]G)wy +/95w:?rXv+ />g+{l-!ϟp<ifpb7`dʐ1 -t8&g'x?ɪmLq ۣ6+D(:j-l}6U#mο4oa1iaF;& XڷY@MNG ra:w)rY[gG1|N&l :>yClE.N=ޞn+}:2}^=5~Y*] ==XvECQQ(("hԍӘ QC$(3a$>x+OhDMrQaZ]w'UWMTTW.I񠙙>KBo)0 VbF alI*DPU8.+ԹǻvD% ڰU0w*{_Ĕb̤fc-NIqCzK٢PX2S 9)+^u8i[@~T Z)cڻOת/ vtt:Vy-}l{!x|/ZMVސ's"+ z 6xn~1Ϯ޷YDD-h\.\!}6>m1$yIZ \ЪVDM,IxnìgS_Hj)?WiOc1k/MPc<'F_fhMy쀏gO"xlZr6,nq$/TF€X~x( e)H4QT &ݒ+Z ub!8&(a&͙NTg(1#ӥ$,Ph<K 8T#叮rFT uAx:< HC;瑕jCǾM71pͺ9SOxո95 Gby9dC\1`̛+8Xr9@%u$ )gv7xqnӁl̔Tg|߳9C"H r? )Nqz݌&y` J)X*/'dih +54H*<}+?4@bޠ{j1b4uMJq[[p?pާPDʃ*@ Ip>ttY洤JElutH B|U3yjr{u>(ai99> i'&r6:i?LBD: z׵ymx\{RF*Mwc?7>CHjZbfn ^* o9чó揵QU$K:67y*%:lRg@9Q vˋsr{h:UšC$GgDr۪\=Z܉rjk<$Z4WGjQuPy񄩏 rc&iE*o9XU4ÉjB:5iSǼq`&`{ŒuR5M>q`ؘ~?I_&WwͰ#+U/Nu]d<rvEQO&e? hб&Э!T׃ ^]iQɑz-[).-@.V ĨTF p0AbW9V2 Z;GYNN*$?jkQ/~}NQq/t{?p߹*śeA3Oe=s<~}J5<:| zE6^js#t+UH5x8]-tN6E^ddx@AڰNyp>9H!W} ɾXѭgޞnKTjlwb OpO,ǘNMsefu :t"2てc{}5aJɭl[ T_ UJ -˪u!\)WCdՈTtht* {54fnځ*sR\TsEHVyt/ k5OYi=Cye!aʓ^'k(V(}? V'JlDuvo! 7h6'de'Ϫ=^G4UK`8mwF=S#κPѭ[ʪ :iN=me\ND'y`${h~΢J_%˜ aIhsuf|ĶOM*ߔNq=~c\$:fa[n6Yjwo>gD{5tm[+y(VZ~ |.%E?Q멢6Z٢/kEK*6P.yrmj:Vy|UF^zY8ѭ%%k5S~,*q>a` ˚uZyu'U';9}آ`5)q'*n9Kʂytrs|lyb՛ҾqLaRBH6k&8ڍ\bz9_P ~{1/97I]yLFx}Cuiy\+ ٽr/DЯW{AEOG/>DO'E Eq[]czȂds4L؂p=Tx0wi_W]xH#22, f\\~z.#k$2 ;` Pߨ{ffy=kr h'9yƽ4UrrO*'I::fa4(",2{ TIնmuWϥ@bi'dRfEtvύ0q5m>ƀM\?XWe3o@/U'c}teD Pb|A5H.kH8d ɴy[U>=l*m̟v4yJ+| 0D0F/r%.e6%on)ť3*( ˀ<&Ұ[È&;y@3>y,T6H gB*+ ;lб m*NWj'/gIJ߯4HNf6seʘdd^[,AP e)`2Jcf*!2*A8M9Qh=q汒MdAispYٓK?'7NlS/k[L,fCOGU WHw|< ]4{ѕFgrdmX M'35N xtfp^& K' e}ɉU+} 4$ׯaӬv-._K9E3Vz/OV^;TdGpZ6xVzy\a&2J+R)P &MhB%j*} טeiEÔfLlF˖f?]MO~:Sk9EA"P8@b95Չ̌gz6x t5l[|Zf礰}M/2H{R+#TAX2U7=&%ccInhtV/"W'txȹ.Kt7TO[QTaHm `NuauR~ߖ = S\dy1 :Wlz0l3'HQe:ldvكB=@ڃTs3R pDIw6: AZڸdR/G#-pl鐎kg! B\cfUŃ ܑ"|x,:^;YAfyd; \]Ts0昁q=X-:?W$K]J:@ZrYwE M,p AѮ`dIR1AZQ 7rGͶW<,sGQ{=G4'W1S@RL4DxGY|7S>pt7"5 !qÈW|':4̃D fԅd;®ݮfI 6=tsÄbΉ8(@S! ٱNjr_@kIMQ\"DI91œ*eKyu'1઱vp#&Ҝlg gҹ;>gXah?5mpLɳ歈xt<KDfP+1@aeb;#aRNޑfgH1lt :#IVo#k\Kޭ9>DAA\6]u ~5@aC[*3$/ Զ˜MǓḧݷ(:pdg{"=+Wjń@>`sƬ?r;dKZV=dA `uLdz~Q36όӔh|SC6V%s2nH73zz+f-K Q RV@Q8? g U6ƆJꈬZK6 DmcUroT wŃ05RDT{$@a v`uHNN[W"Y1 l(QP|.3DP8;?:F 0 duWbѝLSY;umY9Qt r[w`t$adr.Y|PB㄄dYE)nnz07&DK&uM9jh S;cR )/G trJ.*9 y1 liqu;Pv] |չ?$$'DjQQPDhkoW۫VUZE˭jj+?۪U{+VZE!"Ry;@LIcw~3̞&33 o̙s;|_$lP@#&KӼv E1ogtcXvz{^C)w{x_!JqEV֨nHYHʈ9Jɦ]$ ngG l/:Qz픮 cmscFɞi駣b25Zl2GEv@t=fQa0 7`̪<\hɐ,إQCF`#<8_ ϯma"9%X{o̎OdG 4\ݮnrMyZ:xzUAKo B_?]=WȏSi є&ʣdy>P'A gn^ʒlYW`F/J99fZI Ii"0 (\|HnO ĭ9U<9 f98Tom54rC1H#HCSx/̬syܡPm-s7m%i! pYل׻(F ,/z`w !E3Iy[_ "V" O$h \Ƥ8Mւn' .T Ȍ p Ʊf<*?G=#mBF)G-15jpo`ؐ;- \E-uxim gE}vh?k`퀓E~F{M0"9]"P̺) G$D;mRc 6}@~ְ֗3US[ǁvZWOĘ%eɯ{,`*Ĥ}'>Sa6# ֿP0] W5xHPcV85, mV^&JXy>C$±@rfg}e`3~hړ)΍qZ 45ѩ00[hws"m{hg+,.,+^SN(劾\@@NKpAda ݨ` 9T$t귘#%y_>,{@Iـ;ax4ɰn9 ,C=>]hڙroxiv!0-b!r>p.#<@KrP G}h'ڋv90.Ib;zC f/R]%.ڴߙU /E|gH^y~ע^Y88k>ihŁȱ&1/q![-׊{ `ȡ^NFh7?$ 8y )X*pjG"©ǂcg6kv 8w[s17Aл٠x@8y lK*ƺOC|E~BS(DӇ3R۹.6Y?_YZȳ˾~/{i^_xt:!),JxA*"E)[w mJ9gÑxn[A'^6r YSt٩GL#w<8Rkfa/㛸4 -1N^:Ѐ%cNEѬU̝G|0%Mcv6Uj5kER<gf9[L"C>Sd$ع%$(qThcN١DiQ.(pW7az*e6zA9r2l^<*:\D"W1my`:Y!SXy!\a@=GU{zI#=Yڏ*qT,9hcgуL`7H<;2Gknj2BQVX9:d:.黿1=vq\)wB; *$4e0,I0愪*W?.g/@rdu}"%E7+'Tf^MpY9 ^{G0.HbHVwtġgM`6R46 zyHPӄ"DŽ#{{7Nn_O_wImj)T^{kU `8s;U '̚>E5VKDrsYUNv#Ɍ2ƾ|GRAKV$3%'1lcS7Y)o4g) l] FKSj=T1gz T _|<9E<Xɕ C1D hb 2Ή2A!Ȯ6=p.{aӺcק qP7yހ\cUĔ-?LX`գM/?[ݬt V$1j:h'{嫧SFh?uvI%y:,TeqU]H"#_||p \_jp_ =ɝD?/@/ӏd䌣R4x`_,)o[{K58eP mTK˱.)S=bg507PR*]\c|GݱEی%_q P^!>Z!%w./b;{r^ hu@DB>\a cTR,1!S `q tzϩĄ;\~ 9W4qb[XP2|,,7d]po/O;3[z%!r@t9d!G@ Џ= %sTcm+N FnAF'5vu!!bH.37OwlhYҡ_md7y 2]1qTnV~klޕg,!Ja'C 2%(}ԠAaҜ;|RDw.%Sݟ95Nn.RXaGGb: .Op:~qAh=w5=wyZO8l6/XekZ\!;9|ys+w2ަ)ʤNfgi!Pvra1;%g:>$j j1AIr"M^=|;;v>9PUmpeB"ԈBザR.6'|Hy0+ [8o2ܦ8pnU^6ǵP; 羀^{hZe\8=pECi8Q~mwOe_܏n/{v.6fppZ[KtM=slJcˌdIQ.̸oOSSESLv{1Lt=KnT9nvS@;/LzWBgry:RscuP[bJ|RH< ^o▕+v%[Li畃7/`Ǜyie;;1Uҽ @A.  "|7GF4{:J}&qi .D8`15UDXw *5 jI\Kc¶:%>B-' .\<-'t1c K׉Ua]L :К}8g-5jTNҪ̬rnMdh/TM=v({SUE7`+G $_M#fc'8RL3Rc[a\>s{hRōַGB)筓!=+'ySn9/m34b.fm nhWe"έD/|BU.?20Y*{S NI ܗ3Q{#ﲷ79߼*\Mưh^F{qPŹaaEAeT*`b6INj!–Klr~DqImR28 59Eɥ+mN}U:t]9!PbK;]ozwoMkEN؊hȡ5 "T]N[UȱjLp)bd_Ksaye4;x6ʤ|FĜR4)ceM.=~#SS+5p>}H~쏫_>pWE,WLz pȷ` ϗͶRrb92rh]S,8@DTp;1]pn1Imp"E0dPPFhcCKNlre1of {Cy ln tψ%>E {!6BNo ]'b bZgJ%5D cI8Y太4V9?'.E1샨PrE0Bw3lnHi<5x lӋi֩rmǀMQSї}=?EPV æ)ax`YF}ey٬i5+hpK#h8]ȔaW&N$2׬ܲs68@Y 7z +p㌴Dcֶx_C`0}"3$86y\w|'I}xpa$`?]Z;=Cncj lGkOiWTZ@/cX; G c]}wރջ g< y]M!{1}7 xҋ,{//3u)[HAy3_Zw0µ v#3ӈ6(Xbxx͎I wD|dFDiE ]d eN˳]5Y}oIENDB`youker-assistant/src/res/working/29.png0000664000175000017500000005227413260315532017037 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp edq)PIDATxڬUKhQ345(RmJ,5qEEAŪ D[FYRt"nԅgK)B݄BF--ZbdO}&oΈ^{޹' \z|xI131 ɉ9.#h`JUz% 1ȇ:FمmT|&!-9 e%w* 8bl Ӵk+]!&pF`GU*ήDelS{عrLZ-Y Wu9Rg:xwy6P=UO)B=H9f|>Cf`ML?nb98G)#xZ3i')dN]۔ Yu\Dn_ŵ ;oݦbkpʑ$d)U]twD|mo YBd%+⪠ ݌Z ؒa<6 1pbOo obc׉8hBM}vKb lkK 2. IZ#t,/?5,ϪF Rձ*1uC \  c~cЮ5t՛tbbE<ύ::Cel0lt .M$pu/6( k0QU RE( Jѳxc=(ⱈA{+h\ZDMD$7YߎɾKvCg¢, #cX!bgf?bRif5Ub[Lx&%硒㏻濲^4"/Z19&Vרаⁿ{Vz4Ū} 5jl5h|Ggق+*ՆYq%W[bYgQ5Vq.I?W:%n[MZ= 0;_hؚi:=ISlic}u& Zq{R3ǬƖ¹_8xйؑs rz` >nQ<9}F9 i0q{?D ϋwʠ_[TDebW@{{퍆.4{~oc+@G\Pɱrn{^d!^rfC?8#v$TPǠa{$uAj@D_ ׿eu+8sEQWXyć& _]LE0p:PP=~ E|4 ZCxm]6$0=_ڬ.$( _h5]5M2z0S"Mħ(1 zҢz(z D(-LXΝ{gu:˰w=;7MBu?ϐS" a?i[B5Z{]Q}FuV3p%ŗ! "8*w ̤is+#ex6p 0.C+gB-n}e@&'abc}JZU{b-X8vx*re~xlpg FXna6<$}  :2C*0n4TI2EU]n~1F&JjY,B ?c2Cz$}⨷$iV?^?ޟ'O"#dA`!cƂz" Rzosg?i}eHtrN΍< ?MVyybQT@ ɕvh4h*ЪQef#; ?=Zl}id͜P:Uk[fyANRoSB#ckмkP.,zwƜ%s\+*h2✑WԮϦ-쏺.K[G>t8RShn{QTUü,e1h+BaTi.bٰtҮ$#Cm q!%bL' @&&,HxI:ۯHt(Ƒ54v1t0PjjK ik =3gfvϥL9=3'4/6=:D#|~( =1vß;4RtW_vWAF$KDƮ)NqoI㯃)ߏ"8o9t7j yTdt`46G;;y 1c4p/{UR+/6;*IKgV7tt_2l2U^Td`wہSMo){L", nl sMUiO֗'0Xtt7cתJ9S?-Zn'qR Ne1{o%h 8Ntx9$abbέ&;og sb\>yY<$-^Um/LLiN<<8 1{B*xy2zSVY LԊ̪y3~$a7~tښ$+2}vy 5L]M䫮ZTQ:芢%8@sJ[c[ό0-7Iox|N{)lMzfhߡP@ Q-X]MkkOz㷗ֳCϑqFyJɏ:Fؔ :jt!*AM`&`I"jo=29N3jN.oXgy0':n݌*8(;U{U]yXSR(;ο/9s6`|"dqCm_ϱrtCY ^z6s_kTgr@*K3פ)af 7-9T$jW"q]&><}Arz0"JҬu0ocM>[. "}Ϊ*`xEbѸ-Q/,ϖcsl:S.0?Ԗ&)-$, :E9{t0ez/:xf}xU#~Q} %i^Wh*ꥅ٣n59cYe&'ӯ%@jhg%:T6:^4BUtB_"zNhHnW\VݎvǖEN{}]&Q}$Ilr-p.w-,o9\:đEԔ틡(JS>RGSM=<=&gumb1YjɀD"Q/iO\4f\ӈ -ae+=GIq l3T/z j!Ω鵐r^|R0Łcρ[Jnܚ^cM`}7r`L[D t9aq;47qԦ]&;14v;I0p[#WMso4KsU#xMY01N/RAcCr룒.bgbI~<͒VR:/%9ǦB~?7L'fuMvu݇OMR0j)NnbD(=k7k8~`8&N0 IJPaTD*jEAAmPۊFBWH($*hH@cfqlu|w3;3;kiٙo{nIXE^*U"w=HWL9i[qO>'9]TZDg7/mnZL./%.Aw~W ֈt_xl}NB q+σ`hǞF!( \=DX ^GgJ@;Q.c:hsg2H- L1]{: 3 Wl ,kDJ$U,ڼxZ+Mx@Vrd0nK W@Ee\*9zEpa2[.tT5>fZHFkZu>\LC+B#QJJ uG`Ȩmҁ b?"Gug`N()5h;:弉WK eM^?0OpSv " `v?ݾ/ <:P#s,Ea%g0ZAi#4Z/GDϩf#BI4è*-$)cɉ I"kW-! }²lp=]Ps7D+1 d'+%yAAr|̫eFZQ>4'O*L7& {^.QNYK?Y6p¥UNrN9 gئX#A;wF̞_'bߞ} lzN"+k"FZ8|0ݩL?|m쪡a DFOS'?9)Zڗi?[9uta& ba dd4Lm;ܺ[?|6LKd@$iˣbo̤x1|0@Rj*M&NE Mm[cY9Ɂ2@ v q+:zs*{EaHI;@/Bw Cnmq5~m*Mz[se-xSdSgB` '.5-9O z];uHlo2cڂ]pC~.[go32nCkIm/傒Œ'Kl#pU$0"@@bM3w؄@g-6ytLW6~sdZ)=!y *djM5a[jYVqa8%j)e220mdY[L;xV i{r1omn%e".P< q9UwXtJbS9iNv'f+7$_Z '%4o aQeE;c iͱ=o %XK,=ߣ̔,j䥔ve/`Znn\euF{r #~h\-W0K \ U`چ¤~9 z鰆}2@*HOՖ- BjO˴"l֝R5VY Τ*uSI]wODy >0ۙ6Uɼkȃ|e(T[6z턤1+Ekme%[A>m9(qQxl }YFghwp=~QuMgBA#IDa:7Z6zSLҦiˮTK&P|.Γ qW?I1B1rwlȥP9@qLzR 'FؾKZGNDl1J_T+)bqG:a򪲄  Y5]L?*CcRˆ^k&.>qA"4OګQЉ ǢFY&KUE'i.%Ge-JFg. Ԛ1gXnzVL ]^/A\AoKŏ:M@9bo; %@{ryڗ$Pc)JQaP PM8]zUxO[*h ?lY1$al^P-(^I&V3cF>Fp KpoR3yNo.zzfco.RqUa 3euL !.]'/W/x-[d7r,^-kZdN_8AO׺ fbh[|\0~ ScX;G%ģ[1aYDw un'2M{w_n](2P4kVvR]zq#Vi"!Z4Zl0gE_qV-TxԬҌjXy tcGqio~+L'?c$9oֈG92,T5xpjv&ۼBl_/y" Em^e[Gt'n+\!׋81N-Ș .W LUnyOhB7{e5Bu'ʋr ׊M+TF$q}ŶӳxxL 331Ά xiV!G* *bh&G#D, I.-?~B.g Z=eM,u*|&l+=.)Q!X3ޥ>?]b@zCȨ rb+5308 ((*q$(xFĸD'xbr(AIFM$(x" "12lltw֯=ޫWu;' 1+o1#.ٔn*$j|/xĻވ5  وQ RoO)a)@t 22yh9[:Bw#~UD^JFF#:ک1II3)/m^ԑkw/ v\>Ε:4ڀ- 0h򋃮lYP'sj6 cl ~ҭ^` m`%1 ӏ))[hWhIT"K#IDEt9}v'{5\9[MA}{ u"ێ`ć4=FDqw^&<a,F=R{H$ԙWg#\O9Oy1/^`h\Ű_4L&`D+L屑k:瀲BUO*wUVIL&FCR<ʹiMV !aFzbV|.@Z`8u]-8 NGḥOpv?:[n׶L X!12^jVպѬMv6Eͅ'*4Fb(ĀgZnr_֑iO6P^?V ax9}6FaJ̦.Xei6E$BYV̤58 c^Ne2|99`||`;ZA7 ΀ Ů)>?lz f-6@IƱQOXr_o|zLñ\OqJJ+7 ۄlZ5Ш2@ VNv9 h!8/J&qzԪCg>N7Mj6F?^ ίҦ ';m'%t$_xV瑖['FgI/8iTPnO oiwĮk 1<2ma[(,RnzzĽU`?b|\@9Ha@;ޯ$Mfo?fޅd~̄s6}m̂)7|ic;y`?Tw0d+Vz#WlPwYl˄ {ХV ]a|oL?wpTbȹȩ f?ryNV`DTFAmߗ xhJ1),@ȸ[/$T&N񜊝@"_L]1'ˌ3ɄQ}uFq8C7bU>޺bv?}!c3DϮIQJh:VZ5Ar~{D lS*(wvvg>ҒÏ 3Na`Pza] [Uj}Q'T=g2=arA %l[I A}YH}ha n1 E).|ܱK gV'HM^Pc9eN-86ѵ `Ph ǘZQ0:!Ubs-\rQб~3$?oK}~1L @s;(з#?y2-hrO+Nf%oYc0B +1){`jL&QC?u\*)/ H BN.%br3}J}էjF+.N/|B\+eT`f[(h[x409o ZK1`qW*~wؘfZ&!nj@FeM>1hgfThÜHnth<=j$$i[2\D)fFsbD*G ط@/sf&Ch' 4鴬8'dcy],̉:i>KS(#gYY6s;a^ƴ[fSUA5G} U{HLauYFp|'|~LP˧mf|ƺ#B @e6nxJ5MɰvH(5R6d­f_^'D4lAE:NӜD!32u ڙB߄L˶8n&#$ۑF˲ePUZlD/'cLI81D&5H"FDwiau\"W_ڵ[c ]¯L%k S"TKe#F>isj ~ڬۉLͻD#2avq69#(4>JT{ @P (SH=.7}kѯ&GBjsݾU `s7gʰ/`5뾖v ЧFhkǽ# B07,qK(QE:^t+ xv-/CEl=U%fWo}j3t E(ONźJk5 ]XKڈ Tg^ fUK'uK K :5G~Hד"LwFV9 1M~whq Nrړ>ըk >i'䗬3cJbkޝ6wEvJQ& `ʃ]!(?tTVbÊUB'M7[&L9հť RTL;+)̍7e`Œ'tc}t5ѧaorםR%)Ob}lLj򍤹i**yFR[\V"O0\:v`  _m!!EYr6 U 7&j0H[̃s pf.EiԤu NVM}8la%Jv=sMּw2 c>5i[ZԳ]Q|Nyiݜ^}E3|J]:Q٪Uj " g:HE=3@eFs1K瑉A* 2h"鍶86)L]BK0q )i0)lpSvx,: ݈@EUwkSC>*eXz3\V* r/X6wF7R1Z 9A"(0܈CL)< R FN!&a+ ͧmׁ]@_g?y7j^z0I4Fs}dNv6d}3I#<¬0^:ȍWe0F' f5eNA_s @K3||y r(Q?HlF[ V?n\R$t7EP,(M1B鵩#+I\l{–YwFU>!4IaEL 2D:>v33YEg3ɧNa'h%XIU\(JrEk&LlrLs1pȂ>;0]KߞǿG?.[Hcl' :+D{X+'>L[H>MPoإ|v֎`pûl@VYfr񘾱*s(Ozekt0Wg}w ގG[(#2fβCxi:`:o(yX%#)3E6;ΤoKKא_ϺSQ Y)] l`e">Ce֒mu O3^sj_RvrSoKkRog+{?L: eJ xbHs(.hjEu!1);;r?NTH_}y]p39d $H@ ( Y |V\PP>•!@B5d}^뚞cS:^Y!P#xhQmr\ U(PVomd0"AZHbFљQpqdb1*vym=?i$o,<H% ~wI&]-komr.7 ; Fe2}jI;bXR;HJQ?! My@ ǽ@n$tйMXŞQ L;'.^RˏYwOiLK<k8~zD"ߎs3^gAQWs|[暨Ou+A0H-+_l׊}/DcL)j6DZc:F7 ˎW\.@z+o{`@5v?-ϪM|'/I{v ZuPX 36 u剳' ݯ~ 0cSx~to[]qR!"TXCw@\,2W'Ny҆$&&c/?]](Z7^\ZxDU*5"|;hb]=>Q/?{] /w `K@KshEt;^Iٌ(]9Bg $8:cX=HNQ¢SQO(Kk)@tf@:=PU$ӤeSU3g;%ϗ/wO"p׫ |eVlm_+\2<Kx+orFAD,=i ;:q`cY}87$;$* ]G@ TP5vV`Z1x&J'5X. [ ZY1i P3I~i33p YgaĊ?6]EDZusLH>?&E)Gdn ;Ѝ/%2yUX" 6C^MLM_8P,>:ђ{?Wp`KP 't/bP.o5+C2U)4KIx;tHΏl+ytZz1 V K l jaT5~RZǔXl↩=^l8k26'7k2] IٞyRU5xSހE7.%+O0cxP=ő '׺7S0J#b`!p=),:)%?#_jDånCKZ\NXhTmRi`APF{Re ,R$] jΐ}ά"Ɛ5է]XZKSӶJZ^hN}0Y >_;߭x\ ~ZbƬ-@1{(rvMφb48EWGnUeëyPyqbx`O.kj+k|xMt 1Ͽfvcx@jn524 a@g pobep0 OUX KEi>,1zl&B&4lO&SH<7 #'Ia#{qd<\'`Lʳ`%X-) Q-vXMOV1aEC RI11p"Qɸ29`l3~^*P"ޯ*{{lX/zsSkN3,wWƗqf&F M>]]"~ ǠOHޏGCN*O4nM[6d1Svӎ x:/)R~m`jI}ٍ{*R=n&q=ud}ߍ,u?[UQZ{g+~#2Z_KэOoW[,sm`˝taW`U'X7mM3gi'.P4YG_q:8/5P#1E%07?Tۯwcj̸e%j >1Z:s\xQMŨOLM~[us|ٜ O`Mqx8@*9,TD QLZ+V yMĦyʞcFչE5qXhuy>iHcٻ.-+e#Ӧ{pӫ eR }G)!^**/ 7KN;hc wq=?k#j싪. LL26~TR>FL`|uevpp[TX,$77G xAN1f<|`\l(ζ61#GmHE%%M Ǟe}s;=eJBqǏ5@P@e5eUtp9mI]rzEQZ4kacAxs}B$z9 3Q<qX #2l8fI\KgWN|T*z$8ev= `Z->s|ImQ@_]m\L U)5{Ԉ!1*}`]E!^]MɌA([Hɍ렺_Vl,ߘp R d[6N2 JP"QP%zrؾQ#U876R^AKwG+>:ufǞz"pjgz MCYߟ){~\z<'/G=N:ŋn1R#NW%JbkS%4vVR>><&[<7\t&0wh!V yWyH(?8TWdkW Uct (T:$ŰKG̞\#u~,qUS{tvg;~_qLM 9p2 \z5]32/r$݉qvo1|QEyUփ\co{Ad͝,>{d1s(e Me 9%D}S~̖_su $Oʐa˪-bѢK46 (},"F=s,nI$ b["#&2O4-sO pft.,!NH{jHckDZ^k(/qβ:™N;]22#ﵼƹ[Nj:0sQQ''S1"z):;aÆV)UW͂W>j ' e%`Mj;uPok(idYdGЪ qG{9EI#/dX bI>7ILg$c?*A6=ckNJQm3JTM$,!=^\m:4qTf! 4 ⺹|@+)-UU娭5iѾOc_On~/-oqUk ) JvFu6o{;N_{Xo5'4;(}Qy!d %zuy,J(u]y폿-Y7ir9&6{j XY0nmG$FhfXryo<1A G&քm5y/ޘ-4ל/2VGM$hoGm b,>ff(mU6UUw\)hKԤJe׶jإvW77x2*J(Z$, m K,Hdē/gGXz.w[ Z⫈ZYUS#ʽշCt?O>FV̿zbZ+Oؠⲹ %"~F(6m[Np.m,/ۊ&VLfCOup=\W}BlXN3X͛B[̛N/6()'t,f2@z"DQ5[ݪ^FyR٥N0#@pj!,H3?W׮,Q0qpZ|T߯[wڥ/P. $g="@HIxD ,40urmEsȦgjOqqB~U>w?.8I t377(+[Z&E!-Om’ڶm-I+cY]I'd$G9/̲Q7ģ8[Ֆ0&f!MF AZtT̛;,T6[XCDۥ#4r$s_o<5ƒx\IBA?؞ 9p;Z=a az̖ԣx[o\}Nrm^ pOZ?B~~12_u͞|[Z1BTT^IEJL}[hKIjw7G6vqq7!nb: (eE|)}gĘ\HpM+.Q&|[@Mb$F_w@Đ{f*6$, jDWU+H޸kYFl%Uc䎟c'ܽKy)kIDzAAV l+vy@T&eqS5iN)> jΛ(3q<:)#v:~X 7n`|v*V&o3WFFWJpˇ->H,BĦ N7yóR>tLZ/B/JP9轅m9-}|έjhwͭ V{}S&hgI rTv\)ADnW {J;2I*4:'5cMwEq!c>̘+%[xw>/ Wm9ڑhb5&J-ȡM!>Pȑ8v`2qL aZsWX|>^Z lXw{e*Ë(ˮ\d'U&S+_^auQoSjRf{- ^qFN9;9d[=b@9Gַ>g1pGsgl+'wski?C`pђ{U$'Jp5wwQ*moWnwYn?)JT"2D=˦1C)b\i]=kPӍmQ8@:#?~VR3x&d)b,g%\1`Aԩd@9| m+[ TnNK|ЏN;rm~Cw|Ę@uf?J{`&[#},'9h H+sŸj+r{ǟS%θK)6.JںE@y8TSRJ9}-.L+$XI+Ne7UXertܮ3~ieC4vT'J1q$:3r$ls֠TB`NWz(q4 }ekrjn ݮepEtz:7of$[bޚ1Jkۺ{I0\<IOrLDlAW+S?~^za^!6D°oyY Y2+D h1**=z((y%3rfɡ؆!8*64g|@M72q8N8zNd˝/M$`⥡J@_SU6D_:R8=@# năSU)kʶ(~ɰ:ui{\V j) ~orlaI|dMu: (<ܞ޸jt6+N*"#(pڜ)s WnH@7NEğ|_n''نg󅵑93x.pRϋNdDMڹSv'DfCb NjN$&{܎߿t,PRY<(1{S%N".< +N-|K%.jN;r!qg#v}^E .wܼZxuV!TщN@ͧI͏|߇ VS3αcb qk Z"_3Y9AK yH6 ϫ2PIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)Xf 7tʵq, {0}W7_~ _~.`)W>syA#ֻ.U:14lXvIM(xl6qSp_F3^AgDBLq~_] A%`(Ϡ. .a.FN$PʖMw|UC 4@ `3s‹\dr)5E.PlA *" @ 0K@eۯ'?Lr1(f* fYY,[s轷 R| @4,`[_s2CydȂ}~@!E+ہTfoZ}TP@yDaee5VkiJ+ zŋЃ@=U,E K=HoRzI'zTK"k{Nv;ׁ͒}3}m/Z$T=_!bcMkBдzx(U`㙪LӟvI^$߆n cp 3ٜ&Em}o災dG5cj`nx\'()T&{Y Tܟ7!{f Õ;/yVFK%q /ӯ[7_4dܺx49/RNh'efoڮΖY:Ә_"+EZ+S}WtN#cᫀAˠ!dNdW['KDk?^p,/ۛ`jd#]Q8DP >,`Uy)v|x%^Vm [o] 133ay{ j%Y9QW7T]p-?vu *daN\KΡ/s-*4, E{̵4UXA<D1kqGEL \0`q#/Ag4 InTsO0Oru2iU|%jh^e|Z-|miY\/ izBڬ%$( : >Z$ 7%IAEaD&\FM(z =DZDvT6|kfXwsϽwc? ? /] M̰w~/o@b;W53g҅G٩{EdL߁M*p#ꅀȴJf?BᨥI[0p`T&_}k{kء im^[&HKeL^ M/; NvC_=ib-)u]Z'^dr,*-$@*[F~(‰x5U*GHɍT1H2E^c Kď'~4?cJ9dd6X M+Υ<+-7^z#䠊 V˱Hcְ= ץ*T1ȏfEg܋fmWPq@;][O]}%gy,0V~lAMa/f>@VξahၖRKS;0ޫhmbC=Nq~gz9뉈חpivF.v~W Y\I}0P\e'4DIS.c#j1I2]~V_o=(0ԁh̬,6*W9ʫcRc=}ú*K\tC Nyt%XH *(= ͅ$+pIay\Y J>Q`+{S-;vx[[:|9f'&|H^5|PT_na˷ǩZ~bj6Nއx)_@ν3 얋odžn|Г3`hΛ ME5=qq:l4Q^|Pls-9t:s;ױ#0Y,:C;Qޛ[]lUK-v"" Dc(5^ $&<>hx0F, HL(j15< !`S ?!*JiMBj[[Ji];w{nf3|Mj4AM_Er@`>GgJv3 r9=EMi}d9b7l7j h"/~Լ,.{YS4m\KVmߞ5h #ZsD>u$̘\Lνdv),Rp.*7WIqZGr\0߯MM7)DX^ZFӶ[ 0n֩U\e\8?/WӴS~v}3? kHn|'%Ѹ:kqkEDV D{|/D򸰢tұS*w dĸ:)eZ|@?mk3jXĔ w:CZ'1uIy.Un:QFP8LnndUraOnα!/~qv_aIJI")>D @n'V& cWp+ѥaE y3m-,󒨖ހOzG0ikʷ&&HY$ψšH{S0% q- /dRm\֦琿2Õ%TW0@dj5ֵIoN :w?ffRsR謦wZ-%$%1_EI/`Pu̴῎H->|*^ |d.ԁ4z" e]oS}fglO_݀#q* 8ҫzҙ̪on#iL|?#Z&lcd€61`]=% XU֥9GɺRV $'ƹC(]bE(Ru@2ߗٮv1Һ޶t]*OuEA+}ɤה"|U7/uE7 YzX7x%nݜeL[D< -\PHݼ<5u&}Q"gӇg,gdOwDV!aD ޭ$Fw^: Ѫl7iJ}h>rvx=pǁ 'ޗ S5xNb1A!W:DCrk3"ИHfDj Mv6Qy(8n0DM#v,LnmGZ * " jP bcELTx;$("`P*[lKr~fwuClvo}}7:)RudUK2ҷ.[q ie7ތ"N%ϵ&6 _M4eSobAlԌM4&pYΗ?`}5w!n+ , E<02j%@N`A|ra]0!U9ZV1w"gN Q)o /6_|4Aw┚0Lk'i)ۿ_]O} qiI sA#N0Ry9g?^mgBkq܉l oSTO Vr\#&9ov&3\`YYΦ*2eI~,t"(Of>)W}O,'C2 ЙņĔEzs_l.`3Hox)|eڧ|cs_`ǁ QۑzVlFf L3sv-aI),|Qt fƟ+6X~oMi5Eʇ`y2T-(\[QϠhVSukMӞ:OՖYǵxz֫lZ*yު=vb[nRF{64pU2jHC{My?U)gٯ~pLBaY<&,L\Q Ֆx06Ff([^t;v4iz;j3ڢ#Ϣ|kݠx"ʦv7 lse׫_˚8~欤TI`-'Ҥ !efrfl+T+B1Y އBg`LYu>۱& vhmxpc[XcYWBfz^4 .ȗj~X E/X[6l34T;Um`ӁiS{kCf=fr-;TZ#wE*/^(` ֌tz/7`Ls. 9ؠ2oٝ[I`f{ե$nE3έ^,^cǝ:S0kAP c0{x ݶȾu(:b]E}*Ӧ>BqLZp9$?LV,5ahBfBBȋwL4qoR3жٲ=ȭְ=쉜 dw]4[*:VmӉ()3+Ep37} jY/ d#'b $v_g9yC ވtOFԛ.`(>6ET[SQǭ6iq'HВBrHJLT&z%Fq儱eYOO3uW gBTF#Y<$ixq)RnlWjҗl4eqxXFP3"HnqBq)tZztl\y!gLI@k9P7:dㆈ wG}r@}.U%f|3><*#/&z*ϤHԯdIq5a@?.WJaf``Q1QMEx1Aq=QsbFr5%Fp-@" ( ,lNw_տwNTuuխWvF6O )0 VbFaN*Xz|z#l$TfC`\l=@Q~(* RBi16JX ^RH_?6y%|ux3YYQuS8);2)׿`SGq/ &{y"`[%luy }l "f WeȀG)e-bc $:~wIq)#+)m 4ID,F]辔*cN"/UsWQ`SHW,ܰQɶYxv{yѴd̢Y#gO l 4'C nٍپ&=>[|v%4bUϭI|\7EkN/+Y'O*wUfӓO C;ci4lo]uMN;D~5yh f%S4*=N@#?"f`bi:x@~;lӷQeAeb`PnjHMl}{9 G:w#1fd:Āg -?' mgV{8j}: x^Or4ro m+͆D(oU o&ōfƉN0T&#)dO[?-`]8A? THE `1 ؎O2z:P9c}jd;cP(mvߧ(N $z }FE0Xշc[X66ؔU^N~ș! +5 U9˷*7⢂u&ehun=FsucRVzW(O` QJil 25iD^8~,ٹtW3m!b+z?w`}P6Ӳ |q-Uî mon~:ZEA/N$]'ȭi yO;Q l#({Ǿt?zjwL4޲Gd/kf?X*"I}Pf]Sgqo5Q戹 vͯsvN݁БҙeDtNҪ`ӻZ]܉vU\NWKjѡd@)ϯU*&iEJw5X4OЂ+viѓ69ME X 60׼FӕdNF''Wlޓ -lv΢'fێ W8M $W؅ڄh~\<u%`cD[Y*?g*W.KbntJe}0Q4<) hxg۱_ .!=o@מ9 V͞kgB yf}3S}7&G=76oc;yoUߜo}FYfueB=SѨu>ymt5ulzދZcl*FDe~bMp}Ǐv.;mMQgi?ddwVA۰qp<:HP>cf_&Fbۼ/xzxסs_YM͞l ^;F{.]@W.G"^r%v&2inhpevcqq|[GD3,Eu 8M ul[;i㻽,ͣҾ3{Kv/ts@tŒׇMEk Kg1oVm$bY;Qd٫L57TQ^],_[e%us]IɎ1"aՏ'O/1&¬TE{^U!}Ncp;Xá+ OyRZ6QJojIXѷI=9l1z +Obu{Jty/U7]m kߒzxZ+pxfQ8$P  3m5:(m7UFO75ݾ&/Dn+Xq#E<`F+>t [)R s7`9{n[9鶤XYHMޣn`a_z߿&1u^s4r-FUJtr2 9?(SVzbHu?x~y^jv[s& !7MvxzGg?~YY黺|EaF.fB;]'M]Y0@F*+ٚQz:|T5#{`aZM=QYRSUE.f7: &]9pSH[9`AFHA/776Eطz?9osrRML$U(0VFq,Ʀkq8EJ;v,{L%P6>J_tڛɽK>g] O*џ};a{V&DPe}k_u˸JaO {fa?g.Y:jmLX„$׸陼ڤc}l{–!a'X$5z+7U0mJM1Bߣ#,VbSjK==$A.5CKTlD: gEL 8k<4ɒyO8v$y#!2d6Np4Ґ^t)ׇ(5l(`mu{0q:֮ RԓY;@>E$xv>:G;x vB1K)DR,::@4m tfP@J'!%ǥBhL0#4X¤;!u3v*3)󂞰h/ZY(b%-!lFj`dXF0 [ u4H[aF[)Ckv# Ѣ)yC+X) peыc@hO,:t }{U|~un6g+0!+ѡs<#0p_ zw'VkGX(yS~Mtkv~ 86L*aٴ6ejM&Pd展||l040 `LC'$Pt> p"CBj~dv5Z,Kno  ^%ٽ-|oo㣞6݇DJ*^,@Z$>Dgxw؇q_H卻OߞN?Ι8ΚXS'hO8}ynxg'=fWtvOqt1=1e|N /a΂7kw#onpqv,B@u'!cdՠm %O>h~Vn'P+݀m'j>1i.׆Z̪pdJ3jyhQ6bD ` D72+U]_ ˔ d.(Uɧ{6QlZ uRVQƓomD[SAr)  ,. N;nVm ;{?nH퍝2db+,nCXyZadz;CasރaA~ v; fX0'ӏnu;钧ߥjSa:|q ##.%q$ɏ^~!| h(Dnxnxq==f+\%Wʼn<\,9>* ]y^ ]/f@_+9 t;S9\Ye,cQ:ZETme}9!XT~LxJ?o緶 @7%OHO0]lLq<` }ZsWՈBy쭄T" $?4~[+_%23\5Z%5W5O5πpB Usos_7!2`azNtu\G70 U/ =pdel)e(x ឰu3b%%o'ʫJXxo{$kC޺#z-q]#7ˬ0HpL[(k.JhbR<*ZaY7̠`xm(,'):S oJ@M3ʋW&K=YC EuaBR!ī3{z/Kܿ*"k Pz՝ :Ƥe\Z̡In7 3+{x^< E"1sO3dWޒyޏ<6_PQ8 5q4[:=*aыaBs ȂqYɱq!(2d-.JWEddr~đС:_a^`%]4`%XTXRBCGŠ۶PG>49?orZ6Ic3Rt!zsP D#ƍzm? 1d0M qxy)`1& ;_%v'0&O |{Z|Ӱ1* f&jo[A$շ<)c0^Cy܊=-=0`*ࢢSEFl"Eac>7 fc0@snK ,01~.Y)N}t2FOIcGf'!#FFZ"ک-FnV5G|p掁"n{"`&''ww}s맖9d7gο|}zuuxS8y]r'qb1n(*3n獑KSvs| ޟ 1WVQ`GP} 8xڻ &1QKJ˯,fiav3s!<fS/l )+Rv{!ګgS=g IR^?<*PcU85, ԝ힁V`V[LǞƞ]}رE  Ω$,AF.Xgd Kc.y1}'Q$|| ֕8XS Ԉ{@qL}\ѕO:dٛe;-~5:P[K}K7U2c.l>.œjݬ;-/@9hos#.9U4Qd{:~Ew{]}~RŹ1nܝ ,SN6nű#uաmmʓA~~XGrR_}~p_? p԰L*?_M[!%9]Dr]\RƠN2l'J!{ }0/$M 1.3@N.eEV[[DfHNpEۄ5'{c^0?nrȮl9u,@X`1/' !:ۮ57h[@@HkqB[Nt#7'< iXwjG"©%1'cOPg>HQ6Jcvp\Ap@C.fs 0?'WaIX_qؠI/OvJY6Ù2|\uڣ< G#J Duٿ~^ްǓp<'Nyʐ-E KYE)[w[˳YݮNwp3jQxC.1ٯ-c/K'YJϬ_<*W#[ (;cb̉8QB}P+wQAE܄m KF@7SM/w*^_j /qpzbhHR #հ8}aRB/9E˪xyh-* W7 uO԰ɢX؉SG =uEGD7:^v(b-vGC%vʩkWхFYt-Zn")#I#h\ z^ݞ[(3Q X1x,(pH&1;+&Y{u3qM:dUX1xcq߾[M'>\ʠ<?/93AfLYBBq%*ؼ7؛"X>رY9rk6̖u4#C7R\x[\J^<|]K:Ɯz5Y] sa3Vl ٗ~W u琅t ؊ Ec\6F1F=oIpVX `ܤ=Ȭ?fx{ӟ(uo5W*L2jnsG /K"fT2+- ӣo̅ktt㾡$[@251,)0U|MYE@!]Oüܲb -rJN]̺7863a$P>’RW .+Ғf"lp?:u*Wq#k"qt]E֋6"ا*P `Hǖ`qRa,Y $Cj 獣+]E[[)+; 1S\,ܶw闫g{(Ĝ(ů$kV'H8_3NP2nm`J#c rB \ ̵w@_u]LT6ziA ͛? (sPt;ww6І h`e d ӑY d?slq/b'pd};m])Srnvި(SڰN-}'g̱c>6.wµ k+VF ƂsCޑu" JsePNO!#LXd9a\v!G/J7a׵3}%|n3`FXrjgLAu7-F~7Rhb3/.JQMU!* ~jCC #!i3$Eb :i\)M̽=slX;l ^ -;CD7B3sJP+RFtU mPxUZP|=}4(/,_Xn%(\<5$-uP6.yQ%,D km`r4 Wl)[jD%==0SZ+F_Ev:dZ`/jX Z:agǿ^Gv laPYeY2))_M7QaP_MEvqޑtΤ~՟ѯ?8 &0t˦U ƁI:u;ի:w[2YwPn0Jj*(G7GVmɽ3|(m&BK3ܻ<F'ż^1MyꙎ#nq -~:Fep96w'A|& rѐnr/[VRɩۨfsP[ﴪH[?CaGΓ)?yݱ'sD粌e>P`^_(2> Mk&@(64Q .oDOgKkD+;/ mZv 7)].@%?Li5;/E UbPcĢ.QRoT+fWnwHA(i΢.!%ʌdZDW:&͛" nD'^EU! ~`20T66;;0|t~7S\r??N=:3Ŏm<ԙs_CqtkBpF-\93̌ Jڝ  l4[ E-$d|3hH2ڮV)Nc[i!` wKcHH|4.cthf :x-}ɋV'T'oLB2F\ @fT&t+@ ;bHQlDͬlUGYnPAњ J hk.Βa-E,*7!o/Dbۓ%wxt>_`]Ġ~)/%]}pt*Zp\U򶯂iBr1w7ҎV` ur/F9=?iE"j;]!UrzVYc@@PRfuB 4^pHz eq~"~ݮVp^es(!s:](gNM>U$uB~-}ɶs{pX48Y0Yl;fCex J7V@cqq 0afNnÑٰRc90Qx!vkT&4; ӕ&`HP[M\s\=R^1&@6 p&lءtǙGvtbf ũ\7VD]T.ot_0v1)& QG0C`79vP7|mjXttVvaѹUF ]dp_5k~j6E!7OWzGLY*0G*VUa9첯rzsJ(aؔX@E;<lpW}1P nMDL2V~xI&KʥE \]#鲸#9{w9 ؂踍lrXa=qu;[e Ё98Wd-5S\j89И\;[M#9`.=WWh Jz]ڸ'e=Ɨ p 0d&V66l+!=>ŮeuA{R@{|F0"J8N-#$ڙXN7;!O2[]$K;\nxi}B^Tlu |]!ؗڢjܷ'DVK]ػm}A9F~vL9cSSK{jn؊ {ߠ>ӕ~/s󏭠1%™"{Մ4#C+ke!袄aέc =b٬->Ŭȕo+'bG؊01|PS^p”QtҸ:zxSUPت5wy,دCҡĒvaSƖր6zYM^ fE0oM h_8t:[ɫPy:ĠĊBQ*-9 !'@yc9b6Ϊ+}mi#F0$ h-^tTXlR lE=+z3&h4Xt^+"*C[+VAOIn* 0V*)V],IVhJbc侯O6T:V~?EolIK!v\eRE,^V3,-n-By rR.$(+ d!t8+ ;6Z]QNj(^ZquVڹܠ&Wߞa/ 71( (݀'wq6ǁ;^ #i^NLpne? G-!]2.e4YY+Z5{# sEتʂE$S zn` fu@8ah۫f +|D5R[8!_B F8vTA@jU$`H#LY 'Cr^%] 3&jK6B> ?QSNgD i_>r4xԿx, )Ci[-2cPazh@ >L)/8c Wx!]$M0Wݶ#zvN_EGТldvsl.߯my@roKn!$mǴ})WN!{eP܉pg#3@9p,>dHgYAϹHjߜ^Iן|]i b|a >N)z[x~]H@F8r6,Ff{ WoO}J>v#yI+ @2^ʹlCYn`MAEŬx´8$_D0&Xz [Lr(m(G$Qf E @g25imꁡwNUxgo;IENDB`youker-assistant/src/res/working/27.png0000664000175000017500000005203113260315532017024 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp %PFIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)Xf ZoC( r-] W5ns䲳O}EQ~>?c/E 6n+W_u$~3Ȃ2e/;W;| 0@h?`,+`P}'+bx>+ ##E E(.ZwAX,֙4%xjFzuKhrg51`qv/h70.A `=0aA䬾pXWKd8aGž_e 3gЖe(%EK~^P_y)JAO۠ գ@Lz*#3Znx@@6D*M+IӇJ5hX*O! "T(Q" *"|?T&Lm̶f& .%s;wιc1ӵ|iqjY IұGv$$O/kd\K~"{>fE#ɘ7d^f5C@DZ%p$- 0XdEtcw59T_~&pLK-#Ǣ;[]I^6mZLbckƫjoSZ2Fx*reYOL`?ip ײ=?xب(raǽ8o9ع.B}a#O5/iG&O=,;F=|S )طF&닶*A]j~!-^Xҽ6r'2=ZGEm H&sBFM0UDXB^뚀Z{PW@$a0s݄]J_6<#^BM$n5ʍnلՂv58ȶM?bEW|M_́NNtX$$PabSMDIQxu,Xsa\씩2XXel -Lrm{!$`bJ5w:=㚱WǜLJjRY[$칎M+|w$[z)JML-.PLKMO|oli[M00^xUi8gx3] uU%Jj7/hgَEˈ(=VXS]^I0xpTʰxp =X]yq@>ZX5lNRfT?RjÆ TDJB*d~cnc\Ex(sFjrƢr2=%=L{<_]ʀ7, K޼$WjU@X\N:-@Cڛ^` R툪 w[dE~&YYeLjq1+|+uŶN[+ ~}qN:Q?h. P)k\Ev`Va2tY3ŊFY4tK$J5-azՍoXv<+=IY;6Nxϐ[%><0[@2)x_߶>#HXDZPj# Gd:H%Ls^i?T ~I^)jjI"6A|ߞH 0O\U(؊ éh G*ұ#\=h<!zcJ唴jAv5T Rs77}q $.O=R|gKmXMsr;O###DO+ӃBKZÖhl!0D%$T4&*FCz j0A0AF9 WRR]7;o߾}տi^v߾o߈YL; 6Ġ52}!+`^IX0VJ;\gR+dƿl_ ~B8 B䰗W8zNQŒn͟~vt(!ޠ:-$g8yRG. Ԓ df4Yl A0d;X摿)- x'C} $D#!DS VRGl2ZFЎ6R b!@" z`Sї{&G*j Cmm"]!jADi96ji0"nE< hKA$*,=# K)mMAFjei -0A\F{r:FuA[\ȢF]y`=R\O+c{şwQЃ@.`yx6ܴ;K6$Y߽FǰO:Ȥ!!'ASn]KϞHl g h ڄHIi{>ADZ9~| '2Alzp1}3?տ-MhC}IA6J% @tjAi470Vݰd1ٵM6hG $-33R0)k&&+ ddU:/g"RNH ʀE{8sԂ6[5Dk|wKۉ2\VKN]YKW)a Akq ԣ5=9bvD&w5I&= VDňTm!!4zU%bQO8 &4'q6kP>T 0mvwDe>{*-1 0_Q*׌'Vr~m6 @tQDmpl^uʂA)/1}4"y6+ټ+ą8R`s|04ySIK#0W@ew}֘i6ȯLR㠿`s/o-۴1"! f^{#iUYe㽓ذPṔFx]=$fU3x^e>Pu.?/# 2BW1?S0 @UM{Z0fhBv׭[OYN|SEY)=NJаFFanNc[X6«^~5g)\f jۍFQ4`XR4#}5ϭҷtΛG<] E#! {A@sr qe[9~5{t HI_3L(t?w`#Z6r |q-W# ؝hsA>^:J`>A^ũDEJ`PNR봡,+;bm fnNV/5zc83 ڇ#YUwIR쉤$(jCELen5w) o}ٞ0XtX: aUvWh`u#9!K3Ip^%P=jۧ>Vu%o5XvWц6w^ݼ[ x~:6[wLJp8_e%'my=;[o9i2;ߑOF̘82X<%"yQm7,^OJ\lvca9]7lPW 6a|CZAm*u}m7.TY5{ )G8ĥ)7ρcy|{A])^93~j\Kk̭_Ʉ {(V@Cg>%~Tb0"b~r6B,VQqh貨wuz~mr VSCqTׂ^R9|xh$J~aOO't6҆!8r:Tӱ\1){}9av(ԕqq׃\m YLrL֦&OΟi?p\߯V"sڐRtn{n!uK&IZ^''u3R?bIt He̓yL٫ӄf^\,[_D,uedpW?B kZ|$J٬D,(N4-eCl}>i$SzGf4cݥK@tǒ~xL5p:3;ڹ;T3Wȗ?M&l3 lwu~U")LI^ﵯD.RV#4BcD-5 /}ht3A3uU"S{9Yi4᏶꾃ud_;)GFQXZ"BW*jĠ7lgYA4|tEk+c}t5OmW{me"U47W=77f#/%)ȉ8ݣLӀN/*K'լ` լѦ, CT-y4/jԌ-Xvo*D1ir gB,h? Nf]@V@JeduYV\oвg/0^x(\tSG&E+aoO6vϰ]4{q"gKk;JqdB9gʄAoj}=OA|RKrfJTH@RĆ5h7#h%"D_v*Xv`>ۮ AylW7[;t̑BoKꘖp asΌ;|b }$g@28'L IE-wNDMq\"כljQ<`A0s;D*v6O I&ܜ(0@dQUv= e_>U)}Ó6`𮥛( tc縍Ѥu<ƚK x,żh,fX]#P2۔£>lP3|8krm=q{pF-e&M6c>2k1sH@ǽ\D[JB.Aʼn o)Gc'I!n~^l9D%m1+ j+h" [[$2.\<̏dp- C8P#sӕg#[j{8 C[ Ŧ,iuVd5ˀ Eƒ -BKO'nd-)(Q{N @#?^&/ 6|+noeKGdS{\7zCcrD6~|G I$cӺ hH% m,ixjVtvCK{`f臛lݜX#aZrq [`SIj9|^So3#dG8c֢@՚ K-`:kpҭ0/~輁1% y\7pMf%&:jbZYhNf*K'8fjKL8k LF8H, 6N\X: /!VduSR`L35BZZ f6D-ȸוH$}]D\\V4MK~>i;S#@4aͬ ثS;5a3H?\ɂ`J@~^ŦPk䱇`dp)$Pt*A_*VW#P֒`}d<'98C`3xփkik]mo{B-O,)}[#gO2 18|#ɠs`zuW=~==4àp˹S+iٴQt=uk>b2(6@O/JH7~·ULG"o T *«@,,ݙ#f*iOߔ <~(8إsRoo16*ɡEfD^@pelX$oVptIJ`9E^?\1WxF5Jyo™EYTgRm3Oϯisr70 U/ vu~q?RP=@=aw g3b=%U%SIxcʀ-EIcmӗwup=LT2;kB]GuA8ICln`*qQXN;StyT`3?/Vj_'Lءjh1  (\2.ʨ.$^ ˭.%%-gp.iVYcHE\\F2h5&(=/[vKW$۔NafEx/ϋNu%1sG3dy%㌽O pYل %8LwEKL6zt?&DѾ@" !,ma E1kE}E7[( zpyyy4rda?|ZKɀ" ,Ld",'V+ ++bҡ)EV7VI vN; iԤ)6}7ƥ !A" f 18*`0^S0{k~E߼I֫bL/` PLJUZ\Lc[0Ց\n9têdOyBd6RQ5 L&-?,<瞗=Ph1PP[M  A@' p߈$`HpXJ<7u2F$±,dzm-d[ÃD0bDMȌA" qMx,,U,N7. l"X=/~(b*bճ,P|n !0Wo~70l(f=v+WXZmT}'Qw럶{_u#u%HԈ{@I hO<8΋CTt-~7:Zw &ԫ`\ % sf޹Ȳ]?8v%kF0C~ENUẨscC&+:X/ҿ)Ƕ|eG}1@mo"Suc2HIw| p&o[w`*QV'6@/Vz{2ښ|wˆh{\4|`^s;b]D.9ro{ GeFҐ9S ,Rę}~qߩ\Xa$cb/zf{vGY)': 2Cr7U4tn{M_,\:kwۻ>iCQ`9D,B<+*6xۮ57hg@@HG0uq"|-Js?:Er7yuҰ4ԣTɘ]Hg rPs"07b6 =`RxVBSl)X(XL-7wxgrᐿV SjQxmW,pӥ&7_tk1^>S*l?ĘqDJ#AE<&lPP6.rt/׻X9 .U);+bר$dEe+g`cY0)~pȴSG 'UŢ%ԑ5j&yy[@4M)&^Xܻ>Y-* g:+E԰ɢNcKEEP +bQ_LozvUp%pq +Q0OFe%$ HnۻLcD,C[RݪQH33%XT4X8dH~_?`ź5n֋h(Q44џ'MBԘ-|~:Ѐ%c^9q;`"c1;v.k~& 2:fkOeBrYPGV(v$Y|^(o`0nVLYB"q%Ntؼw; jADV^u!CDuR8"&LRxdDԸ-4Щc_jj~<16dw^5ul`RݷB7DGb>8vpS\M5*b\p4n ҳeoeȚA L؅b &D\ Is*YB' )ߣ  CJy ƛOV{^9?Q~̒#AjYǻ, k Q[0lXP* ~KhȢw._lEk@t㾡Hl-ɼSl/(-GZzrEe=Ƈ(U" uҤb:`\55 wY<ȕ1,nJWjj+ߠ/x4'^D!m2*xL{#9! @(/jSX> *-)j}]-ދ~i*Ǭi 2g\>quY,vy=ޏ/+YZQoQaLh 3-.[ũIG-p,L_Λqo|Ouϩ"U oe{XY4i[-L԰8Ijf,?c[}͊'y:} rMD& "UbVѣ" O8sh&~ۃmawRJ (ho)'27:;V,^|,- 欈s|0= V袩}9J(n!xM) S tsp\}եANw j<|qlIWo4O'_ ɘ02'VXqŁc9K$fTr,=*fʎfێ|ve(\<5xx(Jp3/飊,. 07' 8h1Ѻ(aJ, ?CnR9Pľ4~;zZ lí]BBpb,6| f`b(EUc)o˵o&M.=s]71&!w;{2-;udBgޥ5-elr8U%"S5Am[G4+ҁP^F+N&J%&eMzAѪ-`FChoCF˜9f7O^>sq{b ܐ™/FCZMLac:65YJ9y-&4*1B Jۦ3/`=;J2BVjo.޵j?&.?g/`& :Qv7o<ۓ5Fۏt y\)>rt ѢM٩`Dw đ^@m/  bT-" U&0`:Q%#me1좺Ԛ3ZwN?D +xMg{#q i_ oNeB (NgHvrhb VRA&<$qS9URw /0TP2rXТ!/lX>$^^.9u' R͟Lᡰx?|ɓiٴ0YO P$ur[SG\ZC;LCA'9KݒVND6[:EBsLi,"4V㫯G.T>ki;kT5 'ѹd$B2~5A/Q2 jrYN:SNeSUw t"T2_>>5ES*ǟ0oh<SܐżВJ|8!õuEl ޡ.Z,R"huR${1Z0B!Bs=Q{ :h>dnsc*7~(|w Mf kl O _Goz+HA©Byk&>8*nKOvmDSD5d :ō{.oh9RW' ifN(-mJYD8Bz*;>lsW(LrR= 'ZL[Y!ot_wz>9.1ZVI-!,ם]"f#Q03@r+J*EH-B~/$/wwL} A<x32}D1s~FZkb'ϨE+8A l:ƚ.#mnU{'u4ER<ɱ @2qt9>ؖGa,S l\F-5vكK@"ޞ{n W છ$ݞm.PQ.KhDžum\=_vHog˝XۛHTU%!pO:pqbݷp'{1|6hM]G3 xΛ:.6RUhۧp`B(xKFenbE%#XE˚.˕rcv3 '!_Ma&KVGE PX}eb[KQ"{y37[ ض7åLC3']L2G%ѣ,.u ͩuivK]AE ZӴ<E mU9؋7*ZKL Xt*(f=~>[)q> xe;.>J(Vhb#eVÒb8oѼJW̸E^iu(nDD84Obg#9`1m_$[M4(|՛qs"d,LNW3l٧%N.K1i4]Xb7]>J\kI#f֥a@ߗLv@okb>/2H4LRxma. J@\ۤnAS=2ꊢ.D9nw5:H[ dLJaĬ-W.@?jI57؊VJ\:=]۷DVd)!)-\ϡa"#]vkoxq/3( 6cV"sgt=x %RCc@/J3؊0lrPjOd̰ABЧ*A.NRc1 qN;SN/%!$RƱDl*9t&[7`W\*4ΛP&JʊPvw;bk^OwFzT.~tP9QkE}[Zv4[bON-GKVկQx"9Q.4,nNco"@.lêF؈cuP&W B4)XHNե=S]&]*NeuWr[FۗG׮||!>ʎD-(ucαv7a"6sv }Q$CPI*TԯNM wqU|\πn L"ğmb5ȖŬ(7pÔ-T>~@y~<"6x&\/1|w\vP|&3nQV>_>~(@|dggD|aSsɑl4ʫTIQjs)]04̤Mo>ZT[rn`0?EL:!5$.׿DD5OGx.isdL`tS@rgQ Wn;+&>8P&Fo2_Bv֗4{({7FQֲ`nʤGޟ?m*\OVGy@6v< 7%gwZ߼z;pl0gN(\8>5)f=Fd<)|D H})ɐZ7=β^ݓ lD*f*®7 OԹ?'I#^o.bo/'П69"1c>s ^~AX#~8{iQ4bېwicmb,7*AECs)?'ƕ M銬: W ΢9"3fI2"B@y#:V+Z,Lk[%p7 w{!yIENDB`youker-assistant/src/res/working/21.png0000664000175000017500000005234113260315532017022 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp pdQIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)Xf G ^|ƪk1X.Fĕ/?pf䔂+=B9YX\ Bw] Ffw< `%I/Au؀(÷?p7Z3eX ET<xuTa0dcE$P: Nj .>cXq APF0 r.?R} 2U@BhbZ N*(A jZdݬYihR<(< R詐? "Rz" z(3<-`෨KU-v^vE+ UȏЄ*/U _ޙ@ہV] ̲R2w| b9`y`n1d(i(\~'Z^3[4k~|E2ť,T/PPg>.,볇{jw+(Q2y6:7oȏiܬ4@)-Dt.A>hL> q&JhCgӥ;AJW Н" 0g]sIVݧo-*R?p3mq~_3 W={#mREyM%n7{@@*Lۚ%Aj!E.hQ)"VhYhm*BEAM"J05{ʽggΜ3^ gfܙ})Z>~8V<yf ΃ɥ<Ȱ|7嗃y߷tA-pUґ?JG5kA|Z:Y{SuǶ-.ѷ<c HfWԙ0h_m~r`AFG6N L,B0evwS˂+Βq z跗 llA%l8\׀Ƨ<_XNUK͂)tL-HƗWȷ?sjNh"l2(0Ayt ZVT /7&XQA2 MN*ҮGq@s.Bzm ]wSSL;L`Te=Gw }j-![WVvl%[šꦐzH)u U2倫_: FW v0%MM/{@XB$!5 ILa>[kUIg \S׭f-?;{F%hYb`y NM9{7;)`ߞl.6Nc0DĪ&fI'tf.MyS0VvJyZРd2wf4+ !Sܩ tG!q}gy1JUL[$p::V)'jlqN~ެz<,Rh7Gf| -t`VohE=zLw#} /ܠ!EY^\v$uJdCo@'#$.9Q{PHҒrWE`Q b^.+sȝ{Nhߡhsɪ-`U3SkNlv"cg>oޠ=VNP^maߝgV7*Y(]ynZA_0YjT6d9e1F˪8 z:֐Y#$DR\R>7.tWHhGbCJҬ vVSH}y9Y8%'aºFB`n9>f;+Fm}ИenT ί 3U֧eU=9J> ]َ;w*a4 m{+< @OZWf8,JR5Sd+ƒ|ij&a ǶYкMQj>nqV_2?D*XM HMcYVZ;c !6 .I)n`'h!I/ SSד=V,"GxHLܺ*q8Əl|A{&kf]0觲Jnk7 ^{c %'m:uq0ˢa>_-+geayIg4$S~nW&wtE]b8`͛ Iq Әt kLEQp>8Ǯ?2r^Ob]Tvs 7wQ{q$@ǦYAL=t)1˓K-,)gG<1yaa&<ŝe EP?eOA 35rf>cy_r) CgEp6Jr*hе@h(f0&Еu܄X\]EhG]owV↗Ln 9D/}J`(ZmiV!U A1*#( &QF #xhg<@ƐGx/D9۷v}C׷ogg \N*#G7 2;ؽo-,3yӼ f/1h>ڴ-x+68R?}tlrr!s`sp?ҟ7V~,yBgb1 Β[%]\q 6e->_= @ySM$&$EsجcLɁ`sR '2IOA]B 6^zt/?_Ysr;1at~yy,J  ZA~$0%$hGKC-屃A_N9i:_ nKAbSVH$Q am]3p񱎃 P|^dͤjՆF[C(.4aGv2ENsaćIp 6X:-* =ݮ$uAɺ)G۱kҬ^k=]}ñ,\/Shkem%7E.Ɏ@%uBTASEJ8GCzާ ξG-=]}d2&&e |7.B0)k%&+w&)B&"zS7~bJsְݕR؞^*-+r-744_ zt)=F <5@D>$ɰGj￷$j7g ҇MI!DgD&FXb/Y(6N*g2KBqd~;q%F PI8R: Ȍʆ\ymY\e2V77!BA W&MSFnSк_Zq9"gP2zLq j.©O:m^WMk!Sj7c=!YP50OEI1++8&3S3)w̵u\򗿎]m*2nS+5l$oZ4)l_4 ݘ>^ UN aR"6WʬXɘJ㊩@KkE .m.XݡFmQLۄZ~Lt grv55^i>lA ՇJ dHKGS;8e:[,T`72woe/7#ga=/ߘPrm.ʊS`W nOx5z-ުk 0o' Ou떟 64j)L4 ן®]Xٌ&uNF`Ukߣ(l@&9֭)|ލ2| L͎*x!];&^(6I.(K:AXCm+5 D:oe],HR9()}Tpך /aQ6e`uy3"UT JG2o䮟唏c\ "As.n* Sh2#ñ;Q;VǺt xxM%L&80J:de~t'5I5!-j8/7&$wఄsL:&.?{; i PHPo dbNhꇰv*y8Q7-'L/"p g-njtPHzIž+3LX-a5qtS|Bÿʫ$gaXgOA*m?N`7/-U!ob~yuƲٖ?s 9qj{ұ`hg# [p?cqe 9K{s. h ཝ߼,p7=#*IqAWnN{, k]Yl9pnHPqMg}x X&8rjrWt_< (.GH=a M>ϡ W$E*-R94.-J>+6rTPM"{Do~ !zq2!7sDbXqs>2T .Jd]\ |ɵe4್I.J#l~} }{GP\<[r;FF5L6qD)}I Zt$^ΧOS=rVɵ#^O.MАF+S!@ ҷ=I^h?oT։8[.-6, )aDJ jgZ+F)~1Fn+BK+9ρA^̔~"wԲ|^:2)BD~sZ9å ]\\*.V*퐗rG~kV tּ%lїUlUP's2s 6ytD~]oVaH`\7}Nq8Î(9ЈaB{ޱ(OD=x@eS~*MM;T6PvKE@xŠ{Y;錽3Bdhi[GA[EBWQ~cˌiZd4֡Z0f4r|DUOtUflCn+Ej UIN+g80 4f-G hIZEMrR&&GhȽOp˂|$:t͝r:Mjt[1nVպ-6!&hameXsncDcF[l__#>Cu6?{j} r1ctdeK~s4|ݐ\NJQv,]oԓ}ٰPW 60ݪTAg>x];m*eAfzr[y'P*c>E3s €-߭(/p_Mf}nݒT;ɄGi5ĥ)+ o1o .)n 9^LL-dBB >O~>mt7Ml9g&9]i>0"* Go8AktYܹmmlHcuiz &߾[u{/>$ +^<}Z34\SDd >}-IpA]0MָDO-ߜd':W[|&ZNTղC!8_z+q7؞΁<:v1~8_m"=_vj$ v@&[{:^O^~vPSܙ္v?ts@{\ ҆Φg_KaM-w'X2y}L+>{[h[a@㧳W @hg?[CzHu@[$tq?{%fP\sG$?541U|"}N<0l .4|%nrQǺee<(ڼbN*a̸2Sk_L>Nm^f&ߨf C-2dFS[=Wt ѢAΫz pwDEiG;aGً:dz=G ?:cQSxy)YЏ~Yy^O8hИ JQI:lNj|"Y/ǖz>6k:pz S165tDYDLۭ9-ُI]Map[GruVqBDnvh\dCN6aMnBV3THp}m[ 'N <lSo_=WVS{8{]F!~a(C $&˹bOPV &N|-Pb'(*ʙ 5Xcf@G۬ W  ;kZN(٫=߹@;Mfc~XZ ,UI8G+ߡdOEw?-WMX|Ȳ0:5%H*9!_o9^DaP"cWPpC-`4> tXZ{;|WοT.%QS 0M-0Hn;ch`R :|gE %6/Z_#ڄƄ9I(#sMDReYTDI] AڝXzp.xc, (T>]jpUFi<}y(iac1ۊm9K1'bP͒\NoS3n`/5ieh$xs&jccUt/%7L@`gj݉sڌh5b%)441ЩX)awTn:zq./? [el 8 LBbIZ s*㜽jtpPQ ̊sD Z0`b` xMK+:K&:Snkk9Txۨ Y֣=Q^ȟXȶaDsL57`C x$0|%uM{e嶌%K̎Xk3h&Ort"5})"; wǚU"{y{ܷ%g~h \ǣCر9h+]Z[uAhW 6d%zG\ CD.N4IWSlv^Rvѿw6w﷭nzUb1x!'=R11:=fM7#Ҟb@Piwqq$& mhJ/p h, _< imnj;غVc/||+I[-|˨nM (YgS(Aȁ:X$y~f7g?ųl~U98/rX0y.f!L1`U)rr٩{IjL96/FUvCt4Nr|=;b5.* ̞ǃ[PّcEk*F@( _;8){^,Dz,\* E g4I^35&>%Fb>O5 #=`-$^)h 07]ُab Ia`~H^tg$ůkl(xRbɦjtδZL4F;rρ*~S[{{<~,ӹMhfY6S;0CI)cw'!y̐`_d,Ϸɣ"Njyҙ, mc?쒬޸)f8"Uxm Z 3/! ϕLjkNֻZ`'cpZRbO x7]E6`9WƷ'qGrkIqO 41 ]7V˞H

m6N7I|a5HΠf//~%)[g(;Cu)`kLH> Rt2Ɖ)뾀VIFpLsQow}WQi$>F|v[?5EqﮩڨƘ|l0|0ؠGK1çi[;7DobLbu՘َ!)߿X[~l ja;W( dh@'bk0Bي"*YXA866]ISPeB38XWՄ [N߿*{Rj\4Suk_ s(.tQ+Aa*Wp=wqRjȓLͻ@-A %#zӌd-vvE4t{'(^}#["݉B:CXn Q䋠Xە'T1`,@%enʨhZ{flCEsṫg5RDP0pPZ!"--yȌllT(ptB͔ 'C.1v=.OmE"lC!2#9QG~ B< `d+^7sl}<[~>G;X|nYb m@·C6$!O- { ay-s.|,O2Ηm׿g9x7-M$Aہ;!-֕L&F 5Jx]"Bk0N['稈q/4dQTĎ/Dmt8xT5-] i x8/R~,8Sᓂߋ`MȲ5|W6`[-b-'s.PԀYh@ 5V0:XîsD"-;ohַdžC]ceIL><զ VzK) N//7DڻE{qY7$Wb`8l3A9O r?ˢ}HZ<uڻ}icJ,Gw 6M2-/R]3XVEUgi/iIN~閝*vj"ɀb/G+!^nT歮\[fІZ@H}S"Y^7]h7#qa|'_W! K=TĝZSX8seZ@*~ski,+E.RWu()W`[X1-MGo>oeחsRsvaC@ )=ˊUv~E*hs`i&6UFmi@K6ƼRyߤ6$oHw c^{3?fr傚th;pcFVA_=;傜ę҄D2PJS^zspgNlyEcNɺ\{Sunރ/TQW-Di+Αsj?Ay梉}sƂ/i?+^Ƈql,yhYߐ8JLjX tښXamS]|sCeyJ'>PAr Pu |MY1/4ur^oڤƝ>xcyҺh_c!䘈l0b4^ڽG=q!ݲb!?-lɺ CPmFN:ldNXppӄq:Lwө+Kُh[i4m`"}`D7 %RAٶ1dc-BE}x8l mN։K RVyRft1X^?ڴCEtɑ#=N?Sz0jm><}  ".06S` M;fXX[2!Zm[&H]'^%D'n 껷LiϠ]~k?R y  "a]/!qJwFcc^>% wmkՉ-IZȕp-2,GDT0B2_9&Jӎ kQ!^k n |0ߩ[}WejY)6<)7_ 3\G" p/ńg&Tb~aQ 99\Zu(BbV_MýAj++y'=SH_?k8$|ʸ!8֭Itn `q bE'7X=g?݁K ժahcv66aܝ<4Aoݶ%i([3` liH:oN`g-֊-_-(d4*YO'=Հy]ph8Zqذ 9H1pސHhI 5Ql E0Q$$psF?@C~ȑ^lH׿lP>$np\9C\t/~Üժ +2Ma<яJHќ6' 'BV ID ,Ԩ595]&1?ćlXtuWѳ++e lL7̼2X;%뒀;lgTbpP\?:"sA'~po?lv}]Hp(Aʆz!Ԑ;~DMh^X~Ωx٪%:wqv~c^(W/0W3T9< tPbz G&U\m9f}(S=ykWš,#A}T}σBQzud9t•r#pɊ2. l @W 2+9pgJ檺B|rX&f^ѸDֺDQ~ R ^u׮wWzLjKp.<9zqȸ^wpڦܗwMEtw -7Y ئ;@楾l3&o,y3`GCZi&ڞ6?*CH |5^95~5E읈Vv} 5^3/79uR&:WKn+*Erw7g$FHf"OSqRgUW{Q0IekPR) J ѷ9Ud% :LEyYrgLh,em}D,8IaU/ƢѵSmHP?Xg l Jm.HĆ[gF2 ǪVů'7uK_%d9AȺJnnPY"%‶QqOw|?}[qR4O N7?j?s t=&1(IS /Mv>E1{g ׊Dc^cb`@oO:ǘ%* wjݔθiG Ҹ\rjSdW%dH%bCZ5W7y66)ÏMemy= ʙL1$;%5,5/v-&7dҮ~kGk+Ń֪phԀ/z>ʴ@liJIܳXaCgryߢd25=al.lm&cFFbex8v'[ %^ywZ% w+_oLўUȝ]v1*p 2>ֽu4O8dtNA@DE8o3{ XK1l1D&UROKZ")Ġ$n1AL\k hsgOܢ}cΆElj(} ^-S>,_Y1#u6oE8YkA  kNRQ&1oJU6Gvn[)0cIҞ4wda"H" WYLԐ-&RHj[Ukş)7Bp1ԋ}CmO\EGX +UnsA:~q ]/X+Jn.\LntZ Y-6H4YE%=168uT|L<-&m@^&c5' BWH@s #h>?8o쩏:lhA(@ك\1YY|}EܱO %܈. ñ V$Rݧam[m{J%dqǷĀوF-CIxh_)p"-%-#{_f>S鼿, 0%"}ԅ3q>De(A܈޴;)<\9J0ڎ6~{]LO s _"4`Vߑ) l?۶CuSph"&=-0W|ZL\Ў@2^-[ 'sVUW?&8Fp, [m&cn2k\h߉ڐasG?^-j{5^LpvH迏2,%v.l 碓7 <:9yWuta#T'KYk[*45/YIsYXʍs&A$ ZħpalV#8~! dNNl u]/ ".l \#vGڟJBiWF ,ˮ?^ Z( Ɵ-y92Q, L 3rcL@ IX9&}L 7|ӢݎL i t{v?,ӵ"yk/r4ܤꂛy~*gheӲ6ȷ4)*&CV} 8 T㺉/G|~gc Zv1eR9t1#Í#X:.400V!&)ıf['~t;QyΨDW?I''醞Y"f]\{%[K-Y\Ԉ8ZsεXbFfg`rh e2Q+7!ϋݵĄR)Nx㕎+ub_ (kc8zt8hxEC)2/+4K과gD!7 #"uy"ȋXBz/jT+ F<x[lK." g,] ǟy\`_gɿ?~ۨ$9hX6ށ$1Pnz[vPՠ~ s8-bmEZ)Y .ڍL|cHD3o¡Ӆz?Ъ,$!ж C3\uU+x!r}=v[mNGh&`?ǡ53חm4ylߣTrXԥXa] Ӏ}T]jDŁQAQgL..ga0yX]uwi`^w>h 6hlj|ybqgI-\y<⇏s/ϑנ' hƥWmkU+Ą"UF-*,14xgKE X, x |2#RGP tfEo*4`Q-Ô,IENDB`youker-assistant/src/res/working/33.png0000664000175000017500000005241113260315532017023 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp Q6IDATxڤUMhA~ h/"((WDb7/ zc"`jւ!"IIlIg2d#>Xvfw{|gA;ùt? 0'<=pr|:{گ#F|M0-t #FC.Iѻd`2x(d"vp %82|8MK-G* x^H*A~X[zWg +pe~[$ P~Yp>y1=>daf/0j!O,ԁ'kp`N=Y5W56 #,dv?`l vl[ao0YSҍ&kQqs$ bCv+Eڱ:ҿBBՂgb]jwO[ACYZ , :}!I"-{J&t-ٷ),͂:4$d&Y[rX*۸6$wy Dh:IBAhBT$P{b,S\8*19˗LWҩIkLqO?tcIRԕYA鴗@7bDyqHorkȌ{ޡy_w~ ?>W@(_(&(,) /.V^$}v cf' 0TP\`ws=)PMh=1v=dgT_v{+yUbJ=E4q g 4&+zAiNs2*XR3ZTm|򎦃{o+4暗J|:o7, ꦐ.J>Bw=)U2+? a9a&@f,TG%֐pzXw01.n\pvޜڹE&X/*3^jJYбhY|>f>;wnNJ"qGDBtRn9t}{X]US^9EcwX#W Cc"&"n5%[oj-$L|${6`"j\d,л۵Ϯ'#㤳ot`Δ3w*qH`\_;a;)=BcUff41{?&ز\*a%RѲi%aѳKW ?ܶFJ~"ۜOoAEdb$ɤ+Qnhp[ %*Jp*XaWw :s];/NMT ۧt.; x9.ˬXŐkSO;dtՔC'?9K2sr_ .3E(I;m|XZ~+LX!BGj8E_4~ه?!:|u8V L3EAbJ 2$2hmqqi*Q{V<9H鉄lt2ܤͿQw+y}SF"@S\uM5ryuH _'ˠo؇xQtsrGoi(Yבr]%胄$9Ӣe l j[0!l*:>7Vj9 bQǁߗ+jytBAæ0K;ߚbw$.CXDp/B#gj9902q̭rj vqJ؂)/K7zǺDxWj:0p#tS!*+TlXVCog3ݮVЋ*i/E [{n1pBi9>Jhn) xOW_H}=ӓ9%`3b3<|  )46F;l&iz)ꆨnu7 b[]ʑ^{ـVEWۙu?IdB<ƴ0sڷ֧W]OߌQpxDJ@-5B5r2Lְp!HϮS%i4K' U5}OOsq}6g??li\JFlXW5Hy['R(,  b'Й e\i2e-ϧu( .$q|׉>_70b1չQ!q>ƿ >Q]с;xH#´+8|@Za%`?[^.aU Y=fٹ_ky0l4h r`Ei0@(i-ԨY@ ]T|dؔɅӧ'[ҧJt7'l)8~ : .{al7c@y -7}anXfƼsu4֫5MH? ЌRq’4h}DJ;*(5>tZo4\Iet݃=յ2rrbaw_"gjJ ¥ h"[IK:nzT4rU`̓PfDZk= vՒ_w?]Q13rj ^ds=G |^T$tfKX{dѱJsOJ]B+dA&g_[G*ƽ" -eᨬQGn  ~}y]tukYV%0fi:r¹yY|9Thw4ZkbP݄/աHݪ"I@kzkB^; Sp01|QaU4$8zf\98zW=_}բB|lTTfxu -i@~G&:O'at*4SgY*fvpYi3Fl262[s84v r0nƙ'9H+fl@^޺3A_Rwizեt~ag=4S4[i&D+h8)Y6+}D Sľ+7L$lv$,*ʦօ+JŪUVmP( T Ha'$L&{ysߛI{>'o潙w96G`$&F#0rthIkcЛ@Us?Bz#l$T,fX6}l[yfbMBt]ɉ٢P%UUEs`SVA[|I|[:И_ĴٜӆDe>{*, `l?z*VJK)3`D.LY,߸9- d~:(r }a 6y$wX"j=}B;q y|c l f+&svUri![:v[M+bի`?"^^JA_ܦ Kw=Qd̲x^ief^DdFF*| ٳJ@6Y \sH$ԙ׸1#"ۇV]=U%N_]@{ڠЭy̭s4-mtɮҠny9#aqZsrː JK/-oY2 {cُnz)b Z d7U9PE9zcM[p/{>`>`3QOd}'xj_c,['V&ĹFgLPLM4h p>?yv qy[[=are@r%Lcޭ /ZUAm{7r 9[OMACxׁc^ٙDѸjw+&r^ 3WW3{)Z-Uc.N=Cj}c{Tr .G1Z`7}% [奫ih1hnf x01b Vbk4o2Ly 5Yu5Ad^.l 1=TUS^KadgS^Ⱥm`TGJ;@n׼Nyet$^cԱ&7n!HbZ=meu2pHxVZUlz7/4{4'H$b|SUoy1^ʓtɭ8"wW4K Z? H Oa4K-e (vd&|) (҆[?]ByW*-eϬI0ZE91ti$ 4VT7DͰ@+\79kxOrZpB{'(5=N_QU?4HiSSI.XMY@ZP>vH}6Ւ誹wS]|",thߎ#ua6 rua8E]=;j"b:E19[󍤒}Ā}}4*߷ES'er i:!XX[[XEfɭ3¤fӯ>jj4}~[M@QqiAE3s`@wq A١{ڻ0BuU3!+aI&1ub,ax&`+9% >2jyiјyb(W :)7oa=1psB)7rH:@ XuRBq`Ǜ# ݋l\s ,iF܄$k9 )Y`s0}c+Xa+`ƿ\Ԉ c:kc'.olp|l+C][ 1b ta:^f>jy~JP! 77mzfEkT:uF$Ҍݰ.Dyبٹ*| 0#gzU8i`f1G02C 8jy!|aAYn+wf sQʀK-Kٲ}QC֩0mjO}D"YkJO_%8ny^toRaζ@#/dAʸ]g :ue. Y8ݷO3;q$mȴ\ #&#HQ;bCUN~&5 W/澺(AqɆⰯ~'lyvZ>Uݛ>8ed*۶dv V^ EĊlD!FEHo x?>g5UWP,_k{ sYY]Sed|[%B%.mwm-grrgA f WPXȭFmaҕc#H4R|n$RLi^:\2imAXw7k%++ >ˇSFכﮬdwDߖbi&\ږhť+}J [/W($[AVicY[l@fBh<5ܦEV]MCTTcAH{F*OR+RQ!͉dJ5AK7Z`c͖{働57[Ht C k#$] ,=}P‰*hIJ6ϕlӴѶə ~ŞAh-R.=+Sص(drT;Gb'"PNN^ɶ+xjEl.@y 6Q# ჷtOHW"^Lعh"Ֆ>l!VS\%~Qx)(0)I5?~Jû5Te8~<\yK>gX w R#20L4]\_Y'f0S-5Aa6&n %'Z<~hJ࣪7d';@ZTQ6A-mEk-R'UZ,ZS^ uZ}jڊKQ("%3?;gnn;3w|]2ss;9F:1!gleq?bS(Q-b͖زA_Sct!$aS^E2VfC#槐~k8# R@?7]~' x׉kǷYTZYK{2LEAE<D<˖ U: ǽ-?&tbhg_VRbh駔Ќt^m8@F~-3 dxcK+Cj?>zn- ړ]5-3vŀil[BGww*\HJן;'9m +?8nCKV:D.&|=n`ft|LX)tB[^)u1ݓnͅ/ӛ2q(-Ì}{*/|mF /޼z"| x)g G>SO/;^V"` 5ehYBߊ[^'^4\CȴxFciCVj| @*?ֈk-rNeOv ZaOAa^fM2^/FMf~o7`q\8~c˝:"<kc "cKsnY6H>5$oלfFuKw˟s&"*ndWQb|b|ۧ I/\9V- l愾a3i3p@peLtUGA,tSd`QYqY3P)%Ts@׹"wQHRqmN YA q>~C6l#tɓF D9vpn`[ew]Z2<"`3ZtpqPy91m@'_lVU"XiӊpB&J 49 Єż%6==f:E낖L"dl^Lcvt͒ oC(,'IP)Vj}vZ(ABWMτZ]. ^ך20=&="64VEyKeUm@ N%+/fcD'Mr뢩jC C#}ge[!{u>p\$"I@O;U|1ǪP@>׷R674`y]]*4r's8/ņ՞‹v`3P!&;Ǘ靛|lgou3ma\$G6Gcn ^NKCunQ;\E)kRK;׎ Kol[ joo.I -%K^Q_|Sm^>iykڗ3rhI7C޴bk̃b7ĸNj[TDJuj.xtXnN6i@=D]/_~?g *{XlfjiibFPme3UωߔǤ&8w<+(,"kb͕4<:7KSlc[slj{۰#g%Me%\IqMm] +X>̬!à hm)+2P[c]&LVB_i9lIWf g!SЄ9iw:u:!֬Ki[73ν$l`3P[$CB`+}?@=WQs75rBnO5k&OڷlN 2gAZ/IJ(HRFn4N9TIu55o]ӹuMTݕyj!:X3LAȲH GG#Hwrm[ո­xm`m,D_9|^<,[|W*F z+ }Ґa:#C{zfԟwNSv=[}9 P/~@ͭ J4rC}=yj(0&pCmeҢ~F7Lm$и~p|^EY7J~kz~ 1(':ršflJ>d"=QzVc rPOanBgi} :YScS|LrPK@ Ueâ?#U+?Pć??^.|R9⟴H#y"嚳Nxpc |A-د*+#qУ`Xan_aOyKKYX^i.>8p@f33E+^6 %B._(8Yea7m1&2x c'72e0bR0 wKҁo}ŢVAI/+ɷ T# Ӂ_^vC} j|+]ǒF}S_\ZLl _T5PemIC618O9!T'8 Ē788ԺU΅65hWט(`cl>mT3 Z\ ӝ/1%iGL9Ԡ~DyJ}yxEw{ /'0@9[]P)Tܫ>NЭfʣ^'oٻ-Mjlihl=TX+ѧ` DZ6`*= r="Q*bU4-tyPpxfmq#<ۙ6[Kjַ [4ڢ߭٣D l$ۇx 2?yZ0S3S=^au`)g½9sl?3!DQiғ̮nfDH ː‚muj3ov^-MBTڽ㨥 +-rsbJ .>Eb@9> !v YEHd ]5{:aw"\/O.X&ι)V6w89SVsb fK@ӒN1sϡ¡&ZBqҹGY \ UYroSMSo+qeakF{ NqZ (Ty$WK?έ9/nZTvgMa ʾWI/.D;(BvZoI ^-^׈&!.^_@D` "{`3kRh'] =ensxhJz0nt; ࡴ8Eb*Iu3?Pvi znUWW!b KK1=^e;7@2N.9sKqx<8;k^ejT_x !4y8}v/fɵA`[i 0.C-pW\TUڪdpI]T^uѴįX1EOyx-Wf*o(9X#/ʧcVYEH [=) sp=!r#.JHrSuW[∱&v ?:zL@HtG>>9ȗxz Ғ!OPQ^CHz*h.c3-۱R@j .r"1z=?9 m ©uЮ@ZWAuI ΞJCcv {b'ԻRv0ǑhιjZޭ+S )4t-ЋuMV!SgcW>hՉ pxedi UQ/&#*ȣJFBq:Ԣe3`LqA07&4>d8l#\I;ݹpIC쓀PP;׍?'nY;+=dgdg떣kNCKݷ oھ1wqm 4gVnfcTTSA L15wHk>h>K,I+d&kzTAƜL۸@θ{TGq]sg`, ZQIE!&*g S>%3Vʊy~Yj¨8&a\/YBtPA [t0-ꎙIEs`g}{|o ,ϹJ~TY)ޱDAϢ# (w c;yǧh6XԴ&khXJPz %7_S(^R@f*GI╲1+AqտL=~=:cL9䋦Vnof.{ݶr+[J{hM tRp_-8 Y-uD;FLá)mΡYf3v慢0uKc1:VeMF"!V ?|2ۚs'3+rKm'㼹F{d8wMу P.Aij jy9FˍWe9nrkl,,Z_d{Pjvą9iLM?5w6Ή& (uǠV6&;9(!SLmi[ 9'=t/*.ż V=`-:&èog\h٪/g؆b hk͈xrGKrpx$dܳp_7*2YV+ba8ӽǰw8e?AʀvDJy\Ar3΁A̍L[}Su3J9/sZ1a`1cq MZ&NK}Q J M+| 1㉱nlsu&, \zFfk`+}G+ћ-"c`;с q=XGd¡0@O= 0r)G78889>`]`ZE5#y<. 6>XC 8ǛQr|~#3;lY˖gqv&@2i#T^g,r5UT(MvE6Jx~؁vh|TFDiE]9(`P֎ ´Uw][5i VjIENDB`youker-assistant/src/res/working/17.png0000664000175000017500000005252013260315532017026 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp nMQ}IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=F ûo^ +5:X!V!`IL[p.gÝ,?1e"ˠٲ Ya?qP9/_UY*@.XWIh * mZ-R6@76-*.ތY g|ZThe ( 2h(Aw !V֠g6%;C59 J9bET{X ǗP(|g`@"(oB7@*企R#םT""#Qqv ыf[^hDa7_~aMk ;IKE<%MzT$Ę~@4|&An.jag9.^ϡ@kXp^Yj@]|@Og8aca*r0Z&`Vajȥg |AT&r \  &X& xKd*~`n?ՠ:k03h> r .P3"n(X@(r1w~FHz7NIn'[Â%lErvF #΢M&Ђ`E<F d(;biZAG9!شqfv9X ʑjb< 6`;)/*hKW{J0cGiZ՚v3̛ 5§ mTRDjD?laXj) YPATIA/eCd>X/KDQD+RFC|g=gww[.;]BNz{Bt&GfR _Zr,hH0֘sGn3R:ׁF0e *'*J:! "I q".ޣi$Cazד ;t[)Vm| q'ToiJO}(]\z]( 4<[m6/K7e9XfFPgo$x5lcUr~Ss.` x_+`vGJ!k.]PG |iQi's?rHd6U wLZ] 9]Wz7J'јO v ֏,݅Gqa:"7)/ ?:$fdq*[⋋ 0At^LV-^⬁sU'!mZvX]a &yJIeWXZr8 (~pd v(H +7{ɴK5>v 2eTQ 0t/JS:CZAj4Vob*u$j 7R|Ԓo_A΋'=,~%6}q/, WԘVӟ3fxE<\$X??(R]?*8_J<3`g4c0FkozX-t!+](")XUCȣw0%fNc>gR̠Hs8Ȧns˜bfZydHbY:]##|?[{hE{_k<&A&J؇J+(}FbŶ?-@(* EE(5RZ!H66mlcr!lffwKe~ћ.+U c:5B*IG,L$TW$4CLCaz4=$x_\2O2eZu 9,`wȢI4SPY-6QZUpsPY^hc3#޲IYƨnl"c xh# ~{N8wәf9a*Y h\A՘,er<f&rf衁/( S: m}dYm99 2NrILH)@(ǵuS*BЭbF9a 8`%d1 廖-j\-0#:HFʱU4rTI?.~ѣuS^zudXy~`g&MtfʢtRB+E*5 7c秛n_i)f }@tE:!U|e0E=]̦tcu1I$}8\!2%9&aX ڮG#f8!+=?HbY)xy]iS׀i6ԕ0x0~i(3h l5B psd:Zk fQ+pui(g~WzY&gd!Cq>H*nSb2@EC̍sZmOtw3[Xb l/es;0=ֆ%^4(a`qC<Ȝx-Yo uZ ~S,w 7&;(؟ՉiD%:/wW#Uu0~1~]#U)E4U0hb mڤFjj 55j[Q[RKbQ $U?v.+1w߽oy}on{μyw;畅P❻[/qW+6*`~y.SoG7pei͢D{& bgynEw>c[:'w9 7PKQͥ{ũYpBs sDv`lFDEQ5GI[+n9m<'y_7&f ## d2 Z*HhGdb1[Z~ϢޕXhs+I-ASkX ,G[XSƒ|H?@_: mWg'22&",)ւ}Z|M+-F(`Cѭf_0)0ApѲ6#*HT:>f V5a\ <,X#J2Raՠ*Z3^ FO"_n:`ى `*Q;&z(ιp#hq, 8^l4Ư?N|W~Jd. 6 w(y, { e`xv9\pNŊdU˱5ijvd歃/A3,+]f_by>KݧN",5cI9p~:ID%|jw>Gk6~/~D G{Si_6XdMǹY6OPIߡ4#Ib0g\:_]DNH ʀ䴶 c]zb=E=Mۅvze|UkѢtUT"$wH=N)>wF 6h\`Ub]/I~hZ;.w}ja7 v>)? 4/ ~}H?"yABI,ޫ΃XiO+{It9}}XI 3iSߍ^r8Y$5Ys!Uy< 4am2luECo+niTT"{,,h@ۢMy-" \YS3<6Avt 4i]5Qk)2^Av|C cߺnmZpUmm_*pLfˮ.MtktsB;/0Lk1|@lYS|~d*0i٨{7omf.M遟a[Ok~ 2fl?Œ$K;5>uV`>SUV 4@@u^ jGD ՇNZM,:fA2^h>m&[nY4 ۀM/=m:bQQࠞr["+w=)BRҨ< <2 r BpUs=;eT~S?x( ,s_pNxoaF0ha0fv 6T#@ qhZ+GlFi`Zmw_q0K{IicQ̧E/.+Kgیٓ|eqVn{=` l_"~x.=ӥF[OԸ= ovAPf-Iq\OWK7lA|JSnΝY>Yf,d͡rq\ Ù* rjZզ#{ROƺHHZ`_y!5 ΒFZHHM'D~&X[K˕Uu]WC𢽸T_ :̪ݞONGEU 5ѣ'Or@N~D$-qVya-8:YY￴`7`{KFuٺog5[rvuid_H3qwd&IM iDSDo],MDge縹G %ngUQ_gf3`~H[g Ԭܦ0 8N$#*%(5XDET$$;K\>#FuCYثo^_%\sDv-hF4m }~;e> `kӫY`55>Oy1~V*$l8~ AO9KjNkVH,>%L!v[6ћ;E[ֲ eĞxXٟ̔~$.0=ԂhCA#s熃Ӡ091l◷M:ӓ=W`iYd/2kQT;4E)dv7,Yh&&Cu 'Kf$hRS ѱ,LPB÷l;m >f^*>5 sIѪCoW hjp3Mn+9igc3'0L& 1C775/RL PF|Զ#,G.js->Z] `9~@<_C1_/:<ğǤX[6d { b5;}zu%yAefPvijԄ5?7G~&UU=$!]d9Pӏvi*4 [ :5"N>u'%#z&ª+FN Ntt0t+GjL|9dT)@G"Z/o/mX̧-mx_A߁LQ@{Ԕ%qdQ,F>}Ԥ>jdV~Gޕmnjd;z,$~EݵjzZ  0a7l"2NQFxdgq޽co{rH H)6 a:n ?}f){= !v% la_',kIrԋ;cJ(˼42p=/CJ"uBX,<Bu @G" Inv E5kMZ}Ɍjjl`E?cW:ЩHGW~FE:pk#~*D $SѸÃ浳UHQ!>g>Im$]w:fqY,d"&SK8O( ܤW[od&S'qQ-K? R/~훿J=a i9^"zAil%HE DυVL ŹiܬLtӁ-4H梯ϖX{L ͍V%]g4WG#j)Ӫ'>>W!ԹXX![B}48ۿNjd R= 2^Q\:l8ј`I4ju6IQmT+D42%SS4qdm]3бAWؚEt4`;O';=NOĖF< F.5}{ˋI0TJ_3k8D^?bэN4 ͔=-uIZ,"UԄ Q'H>r s.HKH l-wiaD+Wظ׌Æ`͌Ƴ,=mh$rKDC Qf7cAjYDW\u_bOtK6}:K3BV*:/JS.|FLJhM-s`h Š<օ/1k 8YYH-gI*uȂg4L64d)EPG*..#ꈚ:` 0eɷƒ5;`MNDI"9E8UCA#߹W:;}kDH1pQ`KX|JQc EM:ׯXLwIkdG~o5kVԨ2#\ 2հ})-'>]8mrS?Jקt>niAH;,IT:s0z-J%бMuɶ!G5 plzśM-?՛b6#@캕ϝza  pPs5R <8G5bzN& ."|Ig}>*u~IM3^ l)?||hG!WPyX+QKɄAߢ͵cdC b k<~Jʎnx Aq΢3~G6o-o!;6#zֳ0٨bcV/ОOy19ZAsuܡDNd3f.., X9.-AEWGꑽ;)1 c0`'책|F0}-,)Wq uht"$$Ձ0e"65){. t %(]ḒQ3[sÛ6 ʝsb>u؜hHYlB_1^0zԙjA,K V5-)oص0rAW 6:;0]7/!,`ͪ0Aӭ1iBQC t?a~t0Bdh\DF?.tPE[kxDg{q3tfԢ=xIm $϶+}lsU[vHLd+!1Q}鋣zie` dD`[+GPF M㘮nK`\9n]{ku;=|{6KvVv/a.ψc "PeN)΀j7SgôxX}'V5P+݀md0ZۡF 蛻 0-RVUQ5Y.=]x `)f\u,PӢu<@?E;Etex˶>]+@9[7~)ݹp[LvBOmTPnV>* g#r8m_FgZn`kŊI!ld C#^6E|>Y2锺mqCt#~;v`%#nueg?lUmp΀ѣ9E N[l8e]\2gHNNԍ_>| lh(nDnzq-XSV@nrB/GCqn:= #'O`3@ 44tM8(<۲&w{E]@'j ]7GFIy>e*oaנQT 3S(dz\cVx;gGEg6ua|'銧>Hr.v6 &81C+;ˊ%D6㥳$a=⩫{ tD^n.lPy&x%pA Ze15W`ǚ1DZ(=ݟZpF .&F["c(v=)^2>bJ_7fݧ>-lj$畻ŏK(9MO;: 8pFvP╌fMQR DŽ-F7# ,2~LN*3+Slaz'G+}HVD:{>9Ѕ [*`thnP(Op 3)ȞwKٖ긴4agUk Qms'ABo5NIk&D/7Ϛ6d/qnqJ jPkQ\F_ptqA~LZD5M!ҏ$8O/;\8\x]o-i_`'f;F(g ?  ,7&FOPNy ɂq .nq[‹apdrBj`0H}]^cR$  ܀mI?6Lx mI&WǩAŽE=y _@'_M 3$ :'7n=? 5qD`|0N//\s\{8&rrϬUy0`Rf;޳l:8{󻴰z lܥ߹V#q5LLz7;1N/ y%5`0{L -?{ 6#HD8b<1^'0!gf oU ܹ><=p;x9w"} Ç<pᦪm 2ck9 2 9)sJB=M`**M={ P3h}_TT ?]HP47yjZٯ00î7L"l^ εGF:9-Wc:2lL!`ﱱw'?"O2E~^87]l\5Q=^Uĭ*a?,-~7'y1%5XH\]esa+`7х3^XOuE{&f x]U%575~ڑY4A<$G;Ut~~8Ogin\و(hqNB3aN)'wvo"6y,p補➖imI>;H>ǃy)> bCNz69rZDSlf_{՟EL.$|%f/Kr~u]أyuUax6aIrA:K ǃ8\.?/0yU}]} p/&}Ou8L5sx]ılYh\Ww_\F)(`.asXhwE!=LJ]ulj7P5-a"JrE$vzn'g[Cu"*D^`*w̙W ILc0\(@7U28׽h//.v&0,fDC(LLvxV^EAPcD ,brImKcYcf2_F<[stA@SGN&8n? |~ BaB41{;'#`5٭jziHb^3w@skk|ޗ=1Nb;[w$m۳Z jqkKe9Iv:]:݉sOU<srtR( LbAA⳺hg $[?`:9H 7_;完 BL?Jn´uw2AwwR-y?>9i99b0U\HZg GlfS>4Ux' >#tl ĮHQgӢwnEkM OQMo4RG7#觓6SvIOأQm`WrM }f"bwL9015.)cܬ^XjP^/ z W7=t$X4 Hy[$b'v".^4ȕi\X1}˧a=sy ݋ 4*s[Y+MOƕf!M s`;LP ;BIPmV'9؂џa;#jQ 8THY(gIV&gOJ C[捪|QD Ej}aC NF.E17N-!>S80GX*Ķ=?s)[,>DRU48usZYJn?݀?9yp)dD< M.Z4AB9JLʦ'E:bh#:niV*6ɝPSK9iXG'Frr]qe8~[0 Q'<kEfP@$EMH_x`kirDZS`&U Frtu>3'4 c#S74ǩRpxj5MfJ@QŴ&/̐79<0hjjdenU̠ܜlɴ%w "^js+`Guv2ٌzGn_jPmǩ0qfX^jl 9Nꩥ ʉʩ֮bS܄MyE<*U v:ǯ>&fB LJtvEu]b^<ӋG^~.eٙlxvi9d#]>ڼ::T0KFMWiN%TA?V^ipT~xn=_@vmP}u[hj:#$ "Ίf۞ưZd\ܣX4Iu%9q])}T g{.LkI*UIVCtPE*ˮHe4~PJ)GVq^מޯ{80|i Cx hFoQ.Dz7w~ ڿ ;\۷4RZ:@[H1l"NsD1N#U-MM|: ͩtd8ymw ҝWDxŌF s4u] T!Kƞ3e+b_8PNRa6̰}^n~H{>=,sGJXg^36 -93AAX-WC~7޹f5xP7Ljް&eD#è~ ~#-ڴw8lT?Y!=S;Z6s|grHR63 F0;'E!Y_]"+;paJL'MpBdƪh} _攏>G}YRLϓc5zh "x¤@I-*uU2k5^R$GAS}yS} H^AtsԶǭX_d9{(/8.=EPE521VEMKuǠcv[>D~~pMh۾F(T[Ĭc,E\*{O꒼ PNv_,jVVvHA*r~L}O^v eRH='va`wv"Wrk2gf*%? S(صu@V9ƳHʖyj0FӤۏLl7 dTϧ\/iރֶCVMyj4zS-q}ї tm8&f9cU[سxrqqn^S-.{}|OMxfškcfO2/S˒%9 Ǟy)l /bȢ  /d|#pAG.580M_ƶ{o&{ hͱozK`V\xԙJUTm˧~LӽqE\^OE#zqC&K[گT- @XiIfyԖVmln4Ӗ tƀe) 2MIi9-X{:tw}i;<k?8uΔhDV䋛cՏ&vx:8`a)&rc(@QU/FDT1eĭ lŹֲ/OW<(A;.sjd>C8m9}{'5 ܀N+ɱ1ʕRI>yPv"هsCpPq77P8\v[bO&SǶ#1_kkp"ox.Mnj3PHK{:{x:p@]לEýZgwi`hp%۴ԘV@F  =RCkS+Q:O\o>琊Xx8kO2KH5!q[u]`zZVIհXot׺`ޙ'E%$/ ܳߴ3RD:EԻmwI9v7,}<Ogg;]{7j`@33fhUUl3pƫ%]r-y]MDލ֋AFr bF&Da<0[)?o#\t`+G95ϭXN:܉fUv}nPQ6U6>W{}pUnIJU=[NFpvA')0qp1-9I営>ߩndhF뙿]Djt3Q:Ve"Z<)woZ3cmj>rE.!v]} ԡFV:ppOo{ldMtq/Ȥ]JEf:rWN.A[ʫ*O:,MA ~MRRQH0|LD%Ums -('W$"xvV&yn}Bv ۬}lh^ozDdQc "yૣxMζ<.l%rSxczxnX~ yKXO `# i۝:R̓V71eQNn:ȁ W']yui`+G=l74wE`4H]4xx/SNq8vPA#Aj.1Ndۛ^cv SeۦoX%P%WXvҊۧPH^iñ m&v++錛 gĵFGR߶tsDͶ".Eex]O ̞GW5i]+] 1-2\ՏiuT`~}ut_z H9sl.ߥmOhmխC,`ÄbˣحXP% dvTadAVSG<^v1XY=n8yh{<@zk`a(?"ux#uIW'l.ΡsֽV`۳ īO|_. S4}uJd$#[ndЁM$s@w(z('c>H@ m ,֎µYwU;C,s.IENDB`youker-assistant/src/res/working/20.png0000664000175000017500000005311213260315532017016 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp NRwIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)Xf G r-F\˅肸q Vq^`.7F惛RpIVfFalzW/2PbF(35mTTc-DEE*`V`9Z'pb]dg#'] pMjWfan6'+ +l ARםBPC~"Xv2zP!  E`[^6 EG"gy-JP*Le@w 3HyUA[r}S1S9AӏcԣR-jM 1§ mEJ^51/QXՋ(A! z ) VУDQAE>E^j3]B]w3Ξsfv's3q9ZX|/?49Îcݳh1Vv-kZ{.N>HfZp%/uB@DZ1߫A3p`$Mc)obZv2 ณV`PJ8V,Z|JVNs9\㥉[sOjM[pjx] Vŕ26@ĝў$x c%_DR蜇+5<ܸ=W0JDJ %sq\ؒqEe^ꩉq22w^obS53#y; VZzUm0cLŊ;.iX|B|TxhST6S>;3-G3W+du'QSuɔy[S, ͅ KYMョ6[W-x9jqۥtSA51k*_UP~PK|QB Arxoⵦ"`ϣ@4ET/yoU5l#~j5%DYs"F?}(ef!% ě ٲ(5Y+;!uW*L4 qg17WV,8 'L| G46[qZС1>=%Z~ q>9m(8D,#Jט;"`~/" i7p3lDkm}c&t,$Tr'>֎Zwޛ[0|9<]= ٤* |AÂ({֗ 1W Ь{c{R"=ER)˜b%v~jvu8e0mhCrC_Wޭ56"ξJۥVҮX@b M !&j(j4FILPK" 1%!H?[B F0bBlmiWZڮs޹;swfۭC]s8,q%msZt-@Ì|)o9S7_.5BWKSG- ~?ȅ%q@snB{y IDⶃ Nx=Nˋ')`NMֽԩL뺤 3Tomf)#R*4K2+/.B2W\&74}x _I%\!=1Efc>\5vkzD0ߝqjWY.KUiZ-?]?7hA֋3MSpbE~^ڧM-^S'ÿX$$.PƊMDKO>gi?li>2M^k̗z63"x!,`bJ;}QKXĸraFȓ9~IjzT'l%U/b9J@scwt"s삢QrO6FZU! ի3APhl_QpEgђKG/*tj׮op^T(fd$rEB`iKs=9a s@&َnzXu~um^ĖRcxYY pܔM F] y $?6fZDb{oHXCIsT{6 t(c?P@cͳ(.3iFB;qSi8q/uaGfϖkbpJ0,J*P/m]>̤qw7塦zv81'lWX8i)`0n0´s!=Щߊaӫ$S;>"u!4- %7Id`N=r ^߸,PrrRA"aTǪP~7[F ;0f4ϟ1P.&&-WcvE wXt57:Yמ2P{Q)'wW#Uul{X[%#6mj?ԤƖ`hLi4ԨihM&ZZ?1R0-VaeewYcfz~;s}}ofg3y޼;s缲rwP5EYzGolUcKCEE䆎x+",1h1w4aݢDJu9` 4D2bW̷G,֭$M8ؚ'0RrtJ5W^uSH"זl 2ZA ~2 ?u!x Oo*9[M;Ŀ_A B란/!վ` ,):~,݄a$;  mӉ+ }v^; _衁~E(@m4meJ!5'Ibm xSb"s@Qi pͺh!A~1E=~ۛr`?z픚ZktMi+hx ?j^)>>f^ƟRm ?6&f[]l ^35W0@ώ"k&C1i힓m{np4+)iS}i܂|ckßI:`&_.B)F(vṖS.nq57.K9$]'}c2tN3z'#NGCksv߾i.{59R*.WWpc0*.ҡj-voX!޼oK[>UX)냕6@ޓ44 qزRsm:tg w ffnU:)f(3ImZU__YB5  s 7,7 5qR2mT]Wƅr:N \KP7"5S|)J|-˙j35{DښKfZ5(~-F}(sO[y/fECEhbst$ʜ ڲZ= >%7PD) |ϟV'>9kùpN$EtnzQ:^C<]fM\\#YtdA>i({o/diGt/ƩQx&:d x q,&0.c9C%-X9҅A+{J(ΜFb\ 9pQ5~7I"ך9|LmwsW;zţ >6!:'am{…s^c7klb}`O{멣ErlvmA'o _iQ$YWŵ+y( W)ftwB{G]z<Z {8[eּ pܦh9Qpk"Xȼr p:-H(ϟ^ˁ]j4ӯ7ӽVlza戲bH&(rC5 g32^-ty h<`:Hy{(4G lciIaf^ŷrJdAcOBǿi ^[!Cʏ琉A$'f p+i6g{}Hx!yq,F39뮛+bc Rӄ LgZ_S!ΞTڗ5ahrƸ@cMQ&<)7 x#Qa$0h2!k^ˣZq`j$j$mr*ppca_PwӔ@+$RCT,p?Po.U] j+VU 4Xc׏B* 8UÚ5WƔ? ;mj!$-(PLk% EkUի5?;a (?F\H\T+>24Yfc|ց:͉EN>%?{=duhvj9Hs^uV߳]xTœejARjm?G8-44rT+EFDH(XF\Ȏ{|D"#r$#ܿBBGe'u &PuR8i s(/}cO^7'We'~U \ J o V".Zni:k'[(#Y)#~.9 KN` LSO>@#I0<$2RNcI>{gM=gQe45Sĥ4NSxvmQtVs/no;1= \M’Jxc_;LΨ̹3MmWu\wи˞\4L%Azh k:rYI2O*wUfӓ8mIޜ7SVվ ÜG|*ɯf Ĭ>Ƭ8 &C}QWȉGB5}/x.?3%A75 2lfŲZnA` #'mMJ 45?).zw$F!;4%X덊%# bMLJߒyʹ|Z6Ӳ |DZ ȭ]ok0Z-Py*xB{P)Mepc_RBU"Hɢ837G+qq|7 gV]pD֫j6+VVîHA Rp^H Sg`y /v EX,$Aw6Oa}KK2p(fieUG`O-w@Cq-U G4\N0h}vs] #'h HLWhuٺT*9il1}~f/&6kU_f̻ `{WIuC|zP"mroԕG}٠l,AZ.|}ջ -/Ory#lzI2`ϭ۵(uUD 0bxt6Dn  ~̻Pؙb6]UE1 RCxCy=|#8L-~s7riʄ ϧVioSQ\V'ݚ恞*r.rj9Ύ-_0P>0"*X~h負w3),@&3۸[Mgl2^/`^u uɐ>Sf_$FD/tuH_zL@/jZ7t!ջlL[rپ o0 wOET-6iF[[]:ov::~`ؿWۭ"=[B~zg$sU]Nm!דD#nhSwPşb.3h^oIwͱlD9 vl'h4JzrQ^ 䦗ב^.p{!}/U7i1)ȴ5b%a(#x|։l+kqnq(m Y6Kdk$7 01BQ d/6^W˱`+.ͮ8yy;8={SJFVqSY(CT:if,*z~qLXt%],Q?hOk FR8ܜO2j׭MǢ bͮEnF:F(Ɩ͖]c:8萘sƖ% 'QZY29ɢ.ۍ`*ϚS^{$٤:1c` ªk&'}qUnTvdv˃k(4[\G'|,=jIظ}C1_*4#m|VNrbd 0N#6 p`7f>4 CߵG.<>>Qőg3;,:h .LA~ɡ "Xtj\ A6$h߰1 ,(=2IW)n߲8̝^)Ctb hwYƕ tkNbHKF!T8I6nbv^/+f;CvnRbD6|>̫:Eɚ0 9bupYK/^?QCI`7W`'&YWgx23m2nPF(6zY?|UZ{ǀօ;Muv}NׇT\>y\<w1Dk`W߄ jvԱX3oI w’|`t Sm KAS1%?hD̽ev߉axhG0 5s0E#7V$=-B"՟,Ud$TKOz{F wHEYtSfGakxnl`]Ny6RWq 1 WʘdE/r;J<õ֏>] :Kn05aݰxdOڊ9 +7%xvZOHt-[fd #i?$wLn74ϻ {󂜐FhӉ9Ztl2(5h"V!>?b5̴5'^gf ЂC%b?2Yβtc Ē3B,p˜NњR74xtlHcf䋚&ݚ~Ɠ}C,\%(0fD,e5Aذ?x]cj6Bhm5)h<qP*#8s y L)mCr&A*B{?-1"=M$/ P9!+s39' (BHt '>z,BJ3454]R6E*|ʗ]k|H8(їn|r< ~$+km9H?F7+>k?H8 !ݜI1 x8A ;.JHQVL>j[Gh`sgͣ?8elp~ & sbfĴ>B{,6>e@2~Ps+ذm:2hO`soy)p-J݉'qnO|bȇN*/d.ïN~О怃\B$,wVE4M#1Chu|VNpk17~YKOk^nҌ1NQ|Gwm?~RţG,}0*e"anBFxc&^ lݰx*=?&+78R-s:9Oc>nz}jY,NlnJ7u" I'G;;s_s0a8'KݩJߦ<4Rj3oN |(WSMx ټ j:f̅-'xLY#堊i0w#iF\uS2TU~d[G]eZܶpy[9֓sD^4[hvZ u0,̥T6b,-_}\²7$Ӡ:jU7yd;$Y=>Gl 蠨_(^; Z>s$:F  ؾĢ7;΢V&7Su`&t1:O w× v.CO$[ 6Ld |I|'e9ݩqjjg ?J^]WCC#Ȧ8yl+Mwd[Qo:xp xg}N8"էhit,\hJनCEE% ⅂17kL1e7#ꪛ5$jDh4DLj"(aELuOUwΛ_U}B# Hy9\ېm(FfmS֑^0? pO$ 5T~ .*VJn#nkp*$-8XE򚔦KfH~ME\'ZB=X}ձlU` "ˏ#RЋ.D  `oh0^.5f:ڧ4pY&;mvcˡ/AASsӁ;ٝY͗y~#̊Fx?/$($c"Ϋ~:㷜{46G:w%?v׀ZjVCϛGeo &  %v ME߯kL2n;o~'>``I&bZ.f 8W8;qQ8EC r_|\ºq˿L 3 l4(XZ7t7=VOJDÁ`{*8t&1;K RԱiOV(^ۀ$kK{zV8H_I^lPytXyË*h֥@q;ٌ tbItyOcPTrO5|Ar]~(Pi ]dK BOBJ襄rNbEx յ_G:e)i 7^^Oè(a>@Թn[\]YfNIu=@_9F )PtLrͰ|!qw늊;_PQ82ia1{:Hn얳t#l5ax_P\<q8 `mY==?! >av0H%=xzU|ƀ-LJL&ܕonH 84m!)50Pp( C`@@R#$@ռ oz ٧5 )IHlU@)AP꺐[iq& =IUgrSybn.'p71Az-%PCJ#lhG"*S@S7ݸ_Yދc`SއUz]/IaG W(OM81R m rs4CK@Fw 6R>&D\. rP܇>Rʹb/e0S*BN|G 34Ho`P ݕFfZ R߀kv5ڵqqm,'y p@x/ z6`Qjv@|jխ(MщptK@h?q7ma,R̃X=l]ph0S5r Ӣp3d ^P!=n\.lGUB(X.8~^5 D=jEO.Psp|~y>fAl\֍. kEmxF۲LVdyz n`p Kݛph i3*bջ㯫?u{wGR`c j= G + j!WUqq|0-- vZgmOX=8ol& v ;7gvݬҵbC,cjG\ri #:4U;<ڙyp>9'[5n'4֋T` r?4?:ޭ$'ﱅ]VXZ0xeP&\ΆXTs:lǗ~n׶z ;T"6~;d lZ]mbYhj ãæl@t(K }A?5K;7 ) lE4 t]b_{\X`{~/ ΙI`B'@DL>X~o)I(_Ձ=U]]-lC|ikmr_q7o~^kx_X4sRj57[>i`]c ȗ39'Eeɦk = %8zt.Js5!ލq`<4,t#RԲU@bR{nr H-\i3" n߻٠H(#`<%cݵU6>!m iD,ʼnTFVúݧmG첯^Yӗp\k4ɐ%Eh:B. ; XzC{>kXV 3jx1gNregYήT=?LSxxxRubڀ RظO Y0("3jz[@^ic,Yļ*Eԉ z0[ZH ,҉yݾ=#Ω!o>(9#*LLxx3bPu$vi1 aɅB,a5fd( y5XjO!RaZ[iz)W4]!/,|w0C=#ЪDb_uxUm]IgPtcɭG+G]K^DjYGW:XScG M+3o.i^J*{S8z.F>|%e9\+jWtkRrk"C,Bq83X4Q+Vj3NAa~o{ctRz-1NEX![ݵ/lXI7iRW_^F0Vj*J,Gn 7TA?T%!-ꙄF?ڇ[8:: )y3QҶ?1 II*"-%88S=7Y[7_<ƝnnfC!ֿ{JQdp6",RRwc;JP:.fU8?Gx-4@TRUS ֑@Q,0eAѥw@H4i-d!)7GxscR`?Pko%'$i=;6^7Xe1|J3:J O[c"jEW|<<ȶAj(  BFDL,NIpr|IsRl_;(hwݒ& 漅7<snO'TWSͳgr<_Iȱ[}@{|?jq) %"3AիgV&0^A!E1?gLeDe9&bmM@GP6K AoЧvְb^KB9% ^{C>6we'jlh`SÆ&fLr ̎x\3}zܖ#%KIHUe XCX$8~Sf\ю,Zi\<,× >qdMu8«N.8=0woxdt'QkkYT.Aڪҁ|d A.'km,f!DwTE t ෡oۤH|P0q)n9ZF(׏AU6:RĜ@آLXvq͜Ovsk{U 6O.3­!Ay* ؂*\Bl(e0lȵC,`JK -[Y-v 'nO XQO:1K ]t},L[7Oޙ N<"^ [ :xOPE\#bS@vZ=t?Ȃb8,]ZQԛ7q P#gl7Ftj @CĐ| !?,׾֓v!6xB8LJY4p|"I: Ö؏/G b;yUfM{iAѝ:XP,A]1h0Lmݰ{4T?*qa]*.!x~tKD/-k|=?<Ӷc&c,@*_3\v\*kP℥CgZ|ްoZ;i찎1 DYJHР]4Gs9UW&Po\mG,? %C)j<*:a@i.jh\IsXS@})_,APOA37̎& l&?v0uš+2¤e8?kCUxnwJvxHF U% QvgqAaR3( Rm qieӶaۖ:a6I&BKIw9J8~!Yqnu9͎WN|톊8hɹ;[lV )!:SK4xd$Ϡm<䮟Lz&ݓyI R̆ (`6Y5PLiK'V3@.9^9LQS3jl01 @f8iE1`Y:<чPHi,}tzNJc*%˻М?_y{eX\`;8PmkjUwuupjԌ a=@1f' MP{/+pcF,$ٻb th_6{I)7D:r_8b'}hvqTn B'wGJKRzl&0͐[2dU1l3qpL\z/3?;7 ר:r:vCA% 5JT1(:{H!}c, kZvvHLƅM{TĊC(ˡU -)Y_34K*-ݲr.%] VM¢_bVI/fi)a:qH3_j޵>{7O##@٣)? zE nn*#j7b):Ed8c]SI("3[II(-gӼ Ԝ!1^VI{Gf_LzRE<֠7|vpE/DHP{0!j) M ,֧SN#Lc$5HG&l?`p 4 sR/ -ZAb/L($%$OeeQRZB@ v3$ {*0Z `$E/tp$({tR7i3$N\ٙW`K78q#Jټv~3T$ 5X~BaA ,H VEq6LǻA_CcU0;nnLgC,u_\/St"'#)|$rMj $IJ""|V)0>7؏$vxtRKK]i#tyzy^ƞwntW<,eK KP"2 /+GWsPν@CEMW+*"RA @Di_fk=[UH21[IN(JK|%㍵yަhڂ/K9l+_yR?,)h=憴x4ӢMxS{6uQb#Ǖ&*"fҐ DƱ4.=ޫ][oy|fB aS*k-\ys@醦L{h|mO+ؓ7{ʣZtؕ@8DSS?/ O:h☨cE̙mp(J s@ydZ@tËj6;$g  CA˶qtZPV`Bz2%!NG[#1;~0`tq!4;zm|G=F@nb }2Q<ےmf^q?9j}?#׿ {ڷȊBP"UQ(,(Ue p[]3ÄWd~ڲӖVk/&!JA`2?$@ C&$?V4G;r~yLa&#zӒ tKIDATxڤUkA~3hj[!BE@S+ЊX^EVi)xb( B@T EDmň$EפImG黼d :ROḏ&ۚl|z ;dTJ9ҠPMC`~m7d`P9F`t syWk#k ]B\,p?ѩNùsnp/#u8#:vht5O]o\V]`Aw6rYtETЉۥʺF$a–*5Z*Iܪ%s Dy=Aj^Ed"7#H-LeR\ RL H#PM)~ L@M8{c ,f A:*@9 y4 Di4DZ "("MU< =E\AozSE\.i&}B̛7o/6.M9#JY!+zejl~F2~'}fSUʂ⤢cOi1#BqkEUɠcJi/Ck 떴`{ÂG.*rmYp{6zcNS3l9~~P7o&/d~lQ-OASpc9U |&"dBZ`KŒ:Y*q :wX9aM2D_c֔) #7`Ʋ׍G=LؚgQVu;oMIN1ӨY!2.5Û*5,H0k"$h<*hE,&U/o=T퐰?2IT+quJ.=>wQ_KY+ ,&Y$i/v. Q"IV(k=%x edr]!D1u"XrI/j:a}/n3BԗuQ?҂gKDVWW3"Mp[֬/(nS,K0f&: $ "2!==TT4M+2צL'[R}g;s=^;~~7ωkx;ܦL:zФ;uе+{5ӏ6es])KgÐJg7M7TVxQg8 @/'t̴0p SeU 4u{NzesDH i5לimFFj>sF iΩƚRV{W TZo,3e 4PQ*fvB+|(<$s$5zi=3{ZS ǤJb!vPwƽ^ ꪠsi|_[zEj%h/ I$ʭQPtތL@_6CƇu?rC*2 :al_" 01co' >eQr[ş\Ӏyy0s?rHdNshTؠbb<b> 3}2rԇ\0)#OѭϦH?ĔCW<"W6ҋեK.|Z:a, ;;5ӈJ)! 5`{bV*N漢ckhz^vRdnKo8\_[mhEݽ^\)6&m iLPjZDm C'GB+S-*TBQ)bCiJR)B"1sjCЦ ɥ8y3~<;P x[6@%+e艱&i֓xbNd4z6uv~}=| c@`K]޻4҄9XOe*ԖJV9,s,^9zʞSwNh@Tg4oڐ"E}{]$(>NH]>5˳DL~au=ߢKJ #× U{A)sNO4|m i1h xqq*^q blO'@6m}$AL'iض XFŎK]:dmebA!1k|="8$:6x]T`^~0ݥD(A@T3>< ga?0ԿM̒婪rĥ+JASKG ht`&4>0!0;!Z:lԢLC#eKJJ~怚ɺ:v6S4)U6ӼMT,3D- ^zW=,0<,I*L5IiC˰ * ϑwJGM]#ut)'(k8n?`!7=1Ew@=ǀckZ)p(Xx~i³ϲ%&Y3}\Fg OЊs>s!RrQk 2K¤&%'_j 7~Qzc]$ALGcU⛪pv^2seRh/]9Ą$ZN]%Ʉ#M JxkF^UJ|HT>:WZ4s"E9$g)\9f'Mue qe@lucE&_<+ CwM2 ^ld()t9bYfLȏǡQԂS!:sT߮V܁-EVN ڑ(p ^5 \VڇE ~u L ?؃XӪʀ† 9jƈ(fI.gI}V-*S 6v?+%9,t_^_}t*ϲ?Lܠ]Ὼ=]3+Չ1?b ݵFQE;[J[ nD%P?DcP(A1>b +HEy!y6|!*0AHvar~_[qj ]n苬6kmoqg-ԶRzѩMKs 6댭d`xQqW6<\;11ƴfA3^?w9q pT]eTT.*.>`SJY=,zdv4T46 h=ud{6d|@y݇eO e%;g4r7EpVQ6kZ]ojmI22IcR&-M+f ee+w׵G@dE# .@y-g wUc|qeuch~ IqzuʠqAl2j+O_rErͿ.fEO3 ,.X#(9@\?~Gsxclly܆C?'A&EuC* c50D\9#./v'LP322Xw" ـzj=֣Fb8g[*h)QVĢxA6 -Ij6c͚j4]bulg,e;Vo a, >o/^K*$YuOGYs*JYQ [}ce~`gͮ୓pInMQr  EK99q7Y |#L2*6GF&o'psNٖM}~sZjM涸.lKF"X璏zNe%Jqܑɚݬۚn)S'q;*cp.z\2W۪>5rtQ7%oZ |- c O~{j]]{e,:jAΊ2V{icSZw[zt`Qe"ذYl`]qeDlPFyy<  (_)ݧkr8 QHmB A1Je,60BEnR| E7$𮯜.* RuPE zfV'L+uM֣*O&{d`iW'd* %K7:PSZ׫%hUdBY/ة {63!c#l3qYnkU20*d[a3(}gX91vШ@癁l?Ab *gOY/:vѕCv7GZ:%M߬J-#͝6 [t3E.ɸ,;6+;:tssCwg-bz zG}jpAָVdC/lЁ-0 sV@Wq=;ݢa-֠Nz;ycA$CǣdN\%4At p<U}ȫ& ;YzP7&'o a3cP'ҧozO;^<ͶZ6b3H-MWtFt:H <`Am҂ſ;-U|4;;TỘdyse'By}k@g R&\o;ʉ'{\Eu&@D+XX ժŪاuAQNm}icZjS yNwgw=7wܽw:'tو !lE ?@~Ώsw%}l$TfX6}u~\TiBH?̩`BїT!ߧ??6y D@J-GőNn8k2K;.R܂M&` Etvʅǰչ: e"&\KV?1Â- d.?K^}؂MA/WX>l!Wϙ@VgMA?%co]'Qx$!W@eW!Fs!q#%x|+hǐϞ,Dsœ Y";0: jO{hCقh$@Kw)il#NdA$xSX6b? zsiFGwժdHA˃`I5:nL_FIMk D- N7xrRD. @wַփ2xR xIAC̶%/dJAp tX&43o^?s S eQ 熳&L9k1 M^Q-ZT ~I$=PB:zHnF!ReN*c^[#4W6`S/`)[^66 HwR I,ö~ŠSFzYu5&0" Q t|O&SjKE%fD@/$衺3R(Y"2N |Q&a%i7]B4 $4馠CUyFhBNhZm:!Iua٫\4jZΤ0  ٤)蒝f J:I4kN'ܔbzܑlS`'tss`ڐ tq N{q HoƖ-F+LT}p1& hf-6@qlӡ3Vo![^h Vh6-FB!i`ֵ1{.ҹU2EH{i'՜_IA؟uRl.wֽo]Q5Mxwڦ..QA9|a ~l IjOmEIO;4)BMRʂ|EC7n4b?ۻB-GE@ [—Udjp.H2>d6!HˁFɺ[c]mI+3 a;l>5A.\~P 3cil኶rRT&[4,q $He!0 9q-U@`LڿnQP- 5J`p;4fhs tB\Lj2C|.3?(~iMaRv=#F'd2 Xۂlփ [ULHdVAxm)J#2r\Ț_f]މ]V ]t )B%$Б[z0bN°ibY{Ig[3{_V"'*Xs0vW>&=u'u6၃]d\#]p!mNg+(zI>K繩Uu;|w=V]ܙ_84|:h9se_N4p"ka#7ok4(%2ȲJEv~p$hTJ܍~ e;L(N[@uw<:H^yZg7lQ}Z]l'46ZW6jiZvZFNpqE㿼Q|K!kNb،yO/\lӽ}}&v;o!ڝGV(^*+ˋޞ`aHKA/ J0k>0/4NwP| @>dR4 l%7y_P@o|Ass @1c;F]=s,|p&2Y* =xtBuS{ ݩܩ1 RH"o~]gc;c&[~@);z;pSz#lPw:" AZd=Ӡ<|>%`ěv qKD 1!nJZ65j#(Z ި$߇W)`ϋ;73Kh7D)HML@8ǛZxgmB>P~6dn 6ϰ߼ݫ ۰fkߑi9T)g4$T} Gj$k:B$*+U!KNt=8oriUFQgeя`7 ]UOm"]tyk0Ϻ}/޿HPrCJXeh<,,;j'%>o c^Œ3u-pqZC @:Kڍ㆝xֽ2T4BY` ªET`։j7.*쨏vA:vSy/7pgZZh6>o,i˅#AXp(A`oY2F#xKJJQwu kMp% lhdq ¯tŘb( [ԁ~Q'quOߵ{ηWJvWc܃,TF(lOFVY\hi2L"0s;h?qN%H=\tKwiʃn{پ5/㼂.CA~mMQ\&͂yUeL1 6q>aV*{kJeJvbu,QNĆnadh2\4 Sz(WUjΆH,:E6P8_*xSm屪AKQ랐4a1 D!7k݉X^iNLgA (0)$0QU%|@ix>U2ۿ2UKgX wSp<ǏX!S/`ӝAͰfɼjU?΋) wqM"a?%bu_ dTKaNZxq;ci< 8.ZǁU"~2t ʖ燓ZoI*znj7bpO#ճx2K乖Lnh62/W͞XCA@l LW&V7Q9Od 5 T5h5>P'~Ua 67=maFM &dt1:PsA{RQ q z<``#ώ.=ѹrw Fmyz>-V|̆U]^?ӱAqo㟘p:Wb+vT?mYJG Fe*<+t@`dX"_v_Tvg U'Lvjy},#; ֯?Ǟ|e#58DvP! jЗ>œuܞ_=|gJopi]3sa6!F6`fT|^h)􆢋w=/0cGs*Ja襡@:Kq.R 4w(Y:v`4;וV9}k0lLCM r%XTEB"UbP(|K+& ٚfxISBơ/`e2J"KݰFRStdL XԵFk`M ;\K[@G. \{8đE{hA{XQ 9!b>&B+-LNjDžHUPhPI2j1"| 23HR(bGt$*-A-ZDg g`. ?Q(R禱 yR\F+YFݛ&q˨#nʔfE }JZ_&jZO(N0X:D"_K6nEIjϒO,M fu參OcsƇ||1lM#쒗xLLK lc%v- GkE*y;ޝĪ/?(Z{沱1Q ~ {ϯˉH.b<)M׆p`BCyC*V>pB@s1W@ >02'W8,ntwa5jC$I#]] $h0Tg~Jlrv-;UM Jڔ6S_]>X!ԑpdiEq~NG ^3_ܜRPzѱ А hGkP5s3y@Yҩa {dqO KP@P6T h%g>KQ&ۄ˅VTr:{j|(Xkkm@/ۧ*œ/)!@[~[|JKJJ;gnDN*aZ<5c4oi>r'O1/i&P>~vuL#@cRV' 4ǎJYnMsh >YAalOphPJ `m3{qnNZ/\y*O*,u]XmAj~d3{11f9$0I9.Q5}A /H 5DLvqz_;w0J Lyҝgsʝ 2zW1Bb9Lse;KM>>,Y4qQ,l̪lT%e*p)L ; В}̓@D3XQM.oؘzW.*uj${I ?7<9{>k ځXsLL8'\NAs PYY^/=PzXKm˚]Sja,ӛņb.kjԕc_w{h8?6qgz沼~Za`?@s;/j%tlToH FH$`9/nP|h$STZFYz:.{2O{e_F'gC(d-b} )8vk H&`ǒ_- ؂KY*h` %F(K:!;Pˎ7k RF&dtJH);0EIe۹kTP3`' i, ~հ\F⥡#ps+gTZD=tmþEAl'vw,ΛFy?ghaY4x}Ś5v@q5J6{m(zZ;NwMaTv"x>N-`ꫪ:maktPEGWM@HJ1nҳ5ezmQV}%t\4IGG1ɰpP9Saۇp+S2 }<4R"a=ʏSiFtn0mxs.v{b}>X߮vahsRޢ+׻_`^ԴA jXzXM^A'f 9xwV@=䥹1GTu46KsJ/\g#a(}!=n6qp.Aj.ݦfKw`ETaꌷ7K[PTD/ xC $> dp<[eW 1~E8X`K`ϭkH3Dh=&;Xjh1>,ĥH[ϓ]EڞeW3S~P<Z i*~?gECj PgU!#b*w.ho S PVV D $\Z6zӍ0x4,bኗ= ~A? =QP/rtRFґR,G]o蝮?˾b04bbϑW`GYP]m©97q_p?ꆨ%f: 9J?/aK\ 0],z na*v86t.gϽo8O =p~7"arkg<|#.NBJ F#m{ 34 VgVxl_vlXAU{A-e-5y,3 sկ=`dqqtkv{M *U EԬӊ#{yhe״)ڶ# CԂۀmEz*#Uddmv}(ȤoΣb5OQ*m S<lSzjmf>h(u;m #tx{<ܝAŒQ62#h[%IT^U"z]Ozi.ZxHM67ICg+ Fr uh~ KRsi3F_g/oʫF\ek fYR|ᢾ ^,#3%T?dSp>_eIp<`>Pb#,?2FOCNSh>KS8LunjnpQTG?^< 8aX用xs}D`Pz3gȉj D;Z^Fے_;=A#:|k;\wtÉYvKaŖLXx >&A]RMTjW+j),4sm5rvatu;N?‡j? ^tþvըY{'X6!Щ"W6̼pe8>n?U Qj;8Qw\5N]Tf*a2=<"1Ѥ oiPʎx< Y%Y}DMrM|UH=(X Tim1oqL 聯8~'jC4(6v #,M .df|<0.veŜglpݍׄ:t>fs9>p0(u.sʃ#U !ЁC@Ju=,0טs̽Q0 Ã^Wwc]TD JM6{Wn!{ ZLA̱y': 0=xo; ssn]lNo3AQJpO9 Tʘ;w,jEeZ87 g%̴e!d%X}[ܳT4&PeO3Q{kgS-C8P[ %Xń25D+x<}/><2n3 }e`M\;,S!} -D-; 䛈wPe;/e%D&V uhqd7nz.Q('$B`~  ϕV§~iClUd}TVdr3YiW`U`|vE0H,m_^ݱxc\6ݐwG`K΃&#,Lžlzi K!;*=] q| 6Jy5žv`]@t>} h"Pi]Va]vӫbP(8(9Oi!, b9(vD0Il;Kx_`pԏ7`K 4%Bb 0 пMʮ,`+EPi׿N8.tA͡ Nv%x@U BGv)SvU^y@(9NQIFʠ f ޺aBxt#@WR w{aS*`sv5WPskɻJ យ\_SNNE`G`Uqzͯ;ge>K) K!@Ӯ[ 1";MpnӴV={)义xSZhػߖ٪v(JB>t &uٰX&vKzf3;:')@~y'+ ǨסB7֖&5-X*kE~|L_ߏ ui nY\[; i@DŽ$K?Ni>Y !y G#bA<3g0RP@5{طk,V|1^9~}h!xKx@:4;0vD;Ov:`gxsp좡*:^3ǹ,zG؞(|ޙnrAiŔ 3؁@gbkuF(w xV X6 zaZ",IENDB`youker-assistant/src/res/working/18.png0000664000175000017500000005302713260315532017032 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp RDIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)"NE 9HY|#rQj8$\@ff<&`p]1t Hs0|ΑS tCUDy Bw]vQB @ DC]&/AB.+/mq@_[!.VmW_2@3$#՞?VmP&A(|P *ߙ'G; EߐԀT 9ou'zf(::HTdY@.8aۜ%F&{ kD#;Iq7^c+AIa ߾!EO>o 7|ֳ*=ƟCq+M8``aW(B|5>'gUnڄfvVPAY,ei mv_z XT rK9*,Z`N׿ޑ3(za`E03h> r .o5.5@r)O|.o Ҙ/` $S57aAˆZ@@#ggd .:vb`Y4 3h#FRY4D_~ .݀6XAn$͐<8sʁGk7HcU1Y'a;ZxDUЖ\<`WӴmQk Ozo:<4^Y[HQ>hPUh]2o=奂n FPA$҅2!Ѝ !+QRT`bitݴV1ZV̜̙sfwv=?/BqȾ=^W=euTePNp6:vt9x/-| {z\1WAR|"*G5DwҎÜT$@}0h}%]&-MZ%vNg;;\%{WckcWwkp}|x/Ђ%ӣR-Y9U]2p-c@AUt)#"vwA:vMzGHJTAfiJD4 7k6$+u. +r6c,)Ȃ, , !kƈפ2ҏf94:.-zd5OD!&?Sɤ[C4dӳ Ġ>)).<V+ YQ4b)JnL|&Upo99LK1I[ V\?o'ZytV#=ٺwo{\j$ZY'CF.mܬi\OwB9`&0ɤȟĐȅ'i!ԝN\NNkNOSߖA(k]_-W&Ua1gdvHFU$x m^>pWNDS?f$hls%iY6n1Xx1ª)g\m]ȥހב"EXH#%)/!`H($JH {AA>@Ц5ҒJ/mΜ9:ɶ=,< x|i@oCZ:S}ٱP BWIS'˺OΒS}OD1.hvP5^D ٞ{2:MP9 o̒rHh"+rvYs\g 'cn*K&jY5 lU x} 6kf'.^4,eěsAYkóWD2O@@aS8)@כ_GUgyfw&1/5aY=&1YzpsaDM]?^×{c.n\[*2PY(bt@: j2b 9R>~O=؜ͦr@ 첐Iغ,P(;п4 $W.8lS3laԃ^eWޡ gz5꥓cʉ}9;܃j)]OGq|A8<|kWZcн;d*M@n_L2:F=]I&-N: nDfC}A$|k?yo q(;S33[|I;|G~5pl.jR2L&:׵~*ed,|I7}eKVqz #Tk96/|!zrP!N XM2sdQ)/:13X;Β$(%9xʦ o}O~,u3`z:ZgXo'nxMwQ?;bD"=pwqTWGڋc9!!MEQ~ "?h B*ѸR*JE(AE-ie@$4/'&nl'XV39s9LI|޹ꩺ|衙rmWlGK;lǞ۪Q${DA +/&pQ]؆Xu¼:ֽUA79 \tɸkKyW$/ !Č xA"zJzSGNu3lb/ֿw{\TE@)E2ѽ J_͋yIF 6PLAוּ_A2vB<;okH8T:b˛Vu`I}K RtX j/蝁M K/Թ/9&"()F?@u|N3-Z `CѭfEO }5yx$1TJ t^c&x .A?'J99J8GsAܶW8%L=]onr: i p3dv":^ 8ehX~q X@/( ;s@c.~AAFm4wKsp0l8¯?L|/- ~UO8=~)YPS6CLYp8S1Qғ|:vV}]g)]%e-6Z,r:5<Ćuޕ݄aIN & TGxkw^dsW4c` Q&c 8W|㬾;P0([}1_t@dPiőJ9cV5-].926KEe%ٵp^Fi 4<Y_ CV)a[ x"A>fMm-5+H[7@xb"ՁSLbeoޗݒj2pOۋ`&%ȀF O~7A\KCc'iciV{ Q*gEBo+V˚`5> [(dS_Dŭv.U2<6@Sm%,iсQ'w=,g/hѴzˣ)Vې_Y\n鄪mjc2p fwwȻ{e{v5{,h."KI_U둦LiZ >-6ޓ~SC\;_\L6reҶqYA{In4[Xp%ktLhև D &t"^i۳9Ͽ&u[G+UsS)ţeJ0 urvjp\8ǀZ!VQ0^2V@름ߠjڞ߲D}aBi͓+txl2`q/bO|sroXdy×<lRdW-\[yu=!lMusN 4ĉ/UOMcJ^RBy--`y%]s:ir֫y?L ;gٮyQ7%vܢKB"#>DZ TABHj@5fg$/FblLx4ΙMȅv'Ȃ4]Q2 "tEv.f|[M6vsskY)w#`-qNq`G~[JCnT̶N3,90)kXZ 7y(L (2ncxU(0'Pst$%\TPݭ-7s+OT]$y,: tc}c [[XG Rȣ;Iljb}W[Plj殠jԌ{A飳Mk$[U_q#<@N OQ$x6͟)ۇ n0^}81A8?ϚY$ue1;G˝Qn3J^ 1X| [X_x7!$P'DucF fyy# -|<,@_rEh*/a2 &ςIXD"Og Dj"F 0}w?y%FDOd6|M S<J6@c{ù[Cȱr4#&-^8ˊ( .iCy?Ӑ07xlUDH%@KtGE1Lha2&2r0b?rѓGZ~"Äcq7~Nm_lWy!?r3f >XKm4xa5U,IWiY;zIIki➓g th+0+UqAZ `<ܻG]m~>Mۋ~#ȳXxX6}bjgFsfh2Q&Z #! J]/危`Xq{~A0>asn(E_h/rJA<3#%[NTCg2Ͷ.s緖Y-]Nsctn ' 4"P^\{/o}ZrR Y4(_WOFbП]>͡ihLOdfFlNNbہOc'6'N7"Wr$Ldr?K!#R o2l}=l]>c}ZeвS8i[% s8/~kO^wdW=]L|XkC^A?[װUx:[:ZJ/wrˎY9%QYinIn:=4C=c l4#CZ̓Z.P픹7[Ļ$[%#Yo! (q&*Mu䶳EW(#/z[@4P- ҫHvtQK(KV]'ȹ_jj6Lk{r羞rr x -d(Y zZ`44 E JGh·OpO;y :xr_b>YT&f uV۹Y16fL@adY'wјeA!ڎY CCuAV臦h8^+*sx!,Elo{IL-ns3)N4{ .ufAXS`#l/'7 6[߰7^XizhI9G<*vA!ݮx8.7 t<37X%V'/+Ӏ$o-h؏ '=EEQ,b, q^ ÙQ@e>Yjh>J.(b-MHH |X:ܐSg uLj&Er.E59aǹ&8Anܰn%n^'ר;AyPCqM*t؅QW'zbR8l8Gk0bmߍ~\_CNPDW6#@ 6tlxjV+[ jJp^`KN~&ݘWlL_f&3_ebČy۱D{G'G!`J\pIXbW:r/wԕ`@[ UP?G睝^,ܔ{J& ' GTc>rE3s €-^}||q 4fOʏe5~3RO;tJ>,Hyct7˛}|?Ep5ZP͙ҧJodf!u\G& v,hڜɾv7s$Do)40y|"i8NjMEk=~Җ~9JS3rϽ=fkv0Νt $Ѻ9!٫aBx;l4nXE3׿QlyZ ʮ,i?Jvu( Km\$ i-=BvO'`<(IN)ɀI0H0A|멋0Ǫe<(<:::l]ۋ#W:X'~XF|l#bH6*fSl2E:fBLǵ;!iCALȄHmt=y2N> MUWOJ#:mUÜJISpY g[;`dT"E A3:y+5ZۨR[E-d޴2S96Hd cqLF 7.oɤ辶qs7U 4ђΎv-oN E‰L6LJ(h0#1MG"##Ckqc>8.7} I1*(C0a:)jA@(>e^p$N#0bq i:\bAһOZ>|q|+.jw%2.Ov)"w`J4z^& "DybmnHuX0 `"MVŘC0mU2n87m:bkoc@2TSNb٫؅E:NvիFZ-:@l`)ACgT`03%2t_K2./\Dcap<m{ʐOP ?VK@&GefzFWW*k!O_}26I ޾?_:^y{ξޱ1 ^Wؚɓk*4 ^K _ ǁgt Nrܜ-Y UILF#"C]mKN f)- Q6D6b&4iu0UڹgJ ̕~ru,,]`(4.>az]Ȑ@YD}sny`,o W K[%)ItqŪUjb*n=݌ pҠT S'B\kސRs*Dfr)ޯ&>%xr06 (B)BH>'[6S[E rFp7|>ؕO&{D+Cӌ|[xW8przBP?_!aq^F(!YJ`\9R`M蕣wK 62\773aR0E7*l $hbi9Ņk>Gh\/cmakT#Hj9[vڭfGO#|1(yr C YAvD|FK;f<-u ȡ;|N!1 3`֣{a@UI\iPNwh⽁y"AfXB4@voUL0l I3id ɐ/Jc=k% %ãexLR۔{++%"gZz9[mX=ʌ$27)]`vCi肾\20HviB7v4HpRρωT=姱|줏}jt`"л)IOƉub1ѺIo! "ۗm\t Jf'>&< -mݰ![_ZWS5_7+6Ŭ[=*-d߼`NvTOŴF)ٗ.fyѫyP[~ %[?x;긮$(w6sv[p:H9}+N#^*q 6j1!kHs*;0tTc4zz.Yvl(y |[woz;PV٢v߼yQv5CAȆUSsVYW_9YJw:ixp `gG6c_6#-N ;z, ޕIQ3 J(l6c4Q1xƨ7I~E 03s_LO_U险y>W`2`\ڎ<S6TOp6}ʷ-\ ]A> pO$ 5XWFeX~:,՜~eDY$oi?2t%C`s"]-מga,^o lCuT5 7AS,Ho 9k}su*tk{gdo׆ֳhJ[NΟTW8s|{}y9zB]w'lqLU`5@w=m4.@>?<7Stb*p{.L6qiGRR`4'$ʁhcPGp{jvȒʔmjhxJ|9pos`F˧Bhxr)/++j(a/\g5 w)4H^j/O {Dl/G$rqY?v`\zϮx3*]-Cg `s@_-$4 t7EUD7eA'j ?<<(!upAIveqUᷗ.frC׋R:x' ǿ>]ew3c ^tpgʸk .%Ǚ +sqߠpD9L:lWTU,TPvGDffeS!frv8ԸU~כ1'k]~(P2(֪TXhk|ph99ltP:SfHPm>Rل`~0O/7i 9v}|>d6ȗrL>PLo>/g3z]ZPhE#0ںuv+#q:JL!<ǩ4/ 5p`xt9Ϗ J [Dh_Dȿ9lz׶)0V8Rk +{K8#$X671.rp`X pMX;|0x$0S( _bjH; #Og Q) ){p8=`BVV߬ǖw8sl @"[(ڮ%F$j0m]CEHO+7 Lr3Ze_Xx"ο}f[|_߳)^k<.!b~1o n SVs|,23Faǚ\ph0SvR ejmmE ^PFrZ"ffqpsJBx*̦nTVRk fk UXWA (A.at p"'v`ݮQ"l{Vhv`džeM$;pDtLuXI K-MMͽoc[({㾨mוu%ꪪܑb'Ԉ{@Ś T5Q<b`Z=nvz iy+UQ4xjUy\06]ɜG{TJRڄ55΃8v%'kF0Cߴh{AwQǁIupsws̴6iѩ0egx-$^'},piYqzd~/\ցX :dǗq8ᴭI0峩H>l그] Ҁ_4zm/H?&ǝ09l,VNQHPq<8. \\'0$&ewy "Ub_,}i}_`pF'^ .q/krEnb pbrY!_RMW;"N-F $H ΖmeH5)i~r\x1 .fy:HbTBnPXT(+=rh\Œ&1+[>aeuu:zR~2a]Rķ#gSuٿo^۰וp'r@X#& ^-E!A, 2WhX ڤ"P6o|4bwCZ- 5^[6rzr e3sQ. [{D'$ q蠀 #@c;1;tD%"y]ƚ"ǝX n²톂%';[Y cy|[9997;~ F="l?52h#O*u7%΀]>{0Ї6N6쑥  Nn=qΘ+ f= #CLHt>{AGX cE{{0 ^CvbqBJKp&^Q"5l('Ծ鬣hPKl3T"ݔRmt]wX%9- $`=fUMspOlAv0`{T+7\Ӑ0s_Nqє# >][(3Q4$OSQ@ag%A6]*'@zvKL>IplY}) cZ ګ4N*sl8nS!%G09ZwNBt]vJ࿗Ea3ṬKԗi/^~b@eWG!ZȌ7?R :qr{bYA}Ur|RCİ;.$3,@lv|}O{Y(ߘ:J}'\t# L4}l=d9 nEj ۔Qyu} yV/;t/ScB,$M6z8jAċu늣%‹ 5η[ &jX$d8_W%6#ɼ3ۚv}P4C*RsFKcbW7Ņi. Ob~ b>Džq:]4\.-D*(gRt j^~LOci.j˲3olQXoxcJиV.+j:D=nԶc-A u;)_<~ǁqUb;Jdޫqځ7ܘRiT_~h .,.&P:0P ql1O~Iv{;;(v d%S~ރY "Q] KߑY} <\kVI)ǃB*U0Ŗ0#'qkNA24>>Z>Vx ֨@DȹԶF5A[6lԈpzn4$ YdEԈsKNmc//3zn͗+0cT[#WJL `+DQ!YB|V` An?B}f;( Oy6sFNjz&q1TUk a]1 :~TޓHX|@XHG,Wֱgc?W땠PWdGI'SH@na>OiapGl9!+:?aٮv[7KFP6^)!<,H\467:1ڕ lHJ[sЩAUMԟg6P 5xuUAdxybCp1hPa|ak6*«Gluq4-)vmUGKΛc7U/vgL`s's$ֲ.ڃUe#\(_qjͦ}ٌ`F0Vs:!X1K!4xJA@ XNN6'U˶յ >E?HeUggS哅WΰwN{ XAI+T`k'ՓK&Nh֑7G_\j­*u£X&A+ib(j1۠GF\猛N5PFʌz̕.K*?g|E6ua%&_{1;uXtɪ>i}ǖw7ﳈ% h'W,qzѼwp*yk2fW#;i0J@X^9p"ؔ{U h"#% "&P%6AXMVT>9kFQē!i57T6(=7mWsp1ɀj9qD4OS[weV5R_ "g5R-Q!ݳ9(b_6B=PNlǸbn\E瓥|wf<ocj@⺟! q >`{CE,l c Y䳷;hcZ<;{sD* 'K6 6|:NGΤ&5%UQ8D{[n2))9$bN ꘲\4b 4Qv@hwE&:qEqp1Xvq#l. "F'$NJ 0X2Q7kslNE1V>U)LR]7SC'fp[O<nHLo-U&)ͫI^ɏ5a6|ZZ:`(%Q<=3sz qK)|[>8bƧOח?غxܾòخbT ΟXFTeEW`TE1VK%c{f 4a&2qD.YT5K(VUwFy!{{L5/7#@lnܺxF, , Bu9 H6E*_@Lb/Gq0ܯu@EC| ?UBF6wW8}K=Oag' 9`6 "Q30f/^m `n dz="rr!},W؄t0!탊D~F1 Y7ޗqi. Оc{]{JZUbS6 Srm5:-H+vk_=Pۑ(/O#/o%/a$*MK$RDGe$i_eu$)e\5s{SԷ1 ppkh͗?6nE # f9[.hKzʧVRvkX0 P\ha+^j}Ue(1"EB#3kVL 5^ՔL9-'3#Ep)p22^tLJPUJJj]!AGH拓,VF|V*?w" hJp=|g*&"_| 1}IrYSmFb%`n|dVRsd#w5 A Tq */8ɐP:rśkUh%^g|!-c <x^ĞK7ΦAZ\`M̖HUSQE!ͥ#c HMA>$4Ԋ7cdG Lj_ݢ 36ʦhC uQ1~I>h_+ɜI>\=5p'F@4oZ*Jl:<(la3SgfWT-e<>ُv5hEDq"EǏd/^q5tЍ. l=|;dIe;( \o%<4bU\Vnpo;I owP3ooz~`[@r;￰f/M.o'5-"=0*+!]?NTȩ`7mf[{No="Zf%'kv>9׾ Ҿmnl7)RWMwP{țKC= є[+ QMa:<^}[m$ʘUb9@rod`0#<(j`[@ d;ܺh{_OA8IXЇhrաC}};0Vys߮>tw(.iٵ",& ~P4xvgaK~=[f'l?զ}dSԽwF'6 s:a@)8[T4}Woc;h&-7ZHe)hc9S-顫(Df!1UGAh4On"i ´Aw)ۯTG IENDB`youker-assistant/src/res/working/25.png0000664000175000017500000005206613260315532017032 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 0PcIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)Xf š[r-F\˅ұ݄x 8?rJhSY#(߭wŐȴUd7QHy% ^* PCiM ^2|3Z.=i0(b Kŕa zt R:l;S9A >+8YldA%$P-v ~/7_@boA4ge pIy'2( 3 931HdYs+JIi@7 }~@!E+ہTfoZ}TP Fb@KD f$M7cmV2>c Ee*he ,=Z'pb]LLfx  cBhET{J4 s8YQ_(|g`@"/!% R *企R#gPYPtX."#Qqv ыf[H os"?+ѓ&2ّL*z[ J,rRQ6 rsW`{Gs(6`&/P&J#S&P׃P-لCfa-O)9P͍2<ėđj 9X0J5 E%+ 7d^~F4ߺa&()hdqWgZL !8څA 6w~# ϿE],lπ\ɊXh0!Gi?22Xnz!b#H @9ɰpl5)>w[%emWY-8C * ֊N.(3J@f`# P#Ё^D5-SzWӴmQk ?txh>h0#~m Sch>OҢd #J ?ꄀJd?\ᨁE. J:>L{K5Xi'-`L9J U=&+[ZUC+7]nZ+^f5ƹVʼx Xg8:A<تJ2.C/茇."-%#U$΁q !YӀFz,0yl>Y+zIK?qNc9M(0$Ak J͉$s nwHM>XHMy/as6vy3gP4F° z8 . F濰۶Xfhj\ڿl {۱XN\X`!#W'i\j)ƒ7RA m!i բB">E1FK`/5QMsOdoΞ3sf7'9d7{?3/͢ j K,CM^:y` D! W z~Ia_vܺro,W _gzS?~ܾ$qɌfzОMMtؼX,{Mw{#TRz|߽h&:"*A]k {Z:<}xS7ށsMU> `;`0?鍧e4lsG$U{ekk2\%Mkؙ` 3EV᪙#RQo+4ռL Ek7! }DiPCNhjp3NKwE@v`"LVнn"|W`If}]ELZ-4zal 1&4p3|xhP;v~ח{$ ٌ:W?A=%% 1Nry~dXGs~t1HBgُEx WN 'ᮃ}X,u#VE \pͪlm-'Kz>iS@ikqoOHDa+) 3!6YXR&ɚ*.emzʒѢZv X(_88ljL X-5C܌B4uFuE"\F_]gz¨&d#IBcJ٩ƶje/b853Mkn&WUYk"Puûޔz/("?^͝% rD0H]vYHE"YQsF|L8YՊb#(=֣{˗N+O}:Rsmb%A$ ,@ )N 6`VUiO|.@E( wq8ζ&e8>6uUyXkkLg44YbH+m|w$5.GׯE'q&-s˹짝 -W<.6q@outb:Qn&ZO"N39,5*RZHqM+*dMm &LJop>)-K\dMd4W&/_[͊&.:>:DS_Pqₐycs8f?\fbڨeāp%O!2FIY]g~M[[1GFcSw4Hƺzى[;I cc4Ĩ"/hg-j7N`"F[s :vC]4&T `yH׷,llZFZkJ&D0*lT"e P=4['o,f q:_p6]L U-N y`{pm˜P3ZV@[I3rp ONOӋp8~>c9Q#|48F6s^"5YA$$+psޚ7: ݇ȮwvF#l?((|[AK,OP| $CM`E@h|[|D !A >Ċj }.vg;{wvfzgvd3;3~s{ιBHfHRo׋

P;el2l~r?t{skoOr\P}*)hچ6z$p'h [λ8YcOzɔ98YVxd!H l$/1Yd(e**my$f:iecѤe"<h%J/!l?>Nf2J M~>(,-=W_Jľ=fIyЍe bLU>u46c|1dZ^1m =~D;`%0M5d-?T4[;yLkWc~Y;v! k,Up>p8sj!&؛eNSPܰAa!KI3DdwK-RtUAN8֢R ׊s;g @XgءM։TkI&@Mϒĉ,BL N? Tv$_@/S6|-osZDBX63 OQysB!>,VA^ ުoCZ5.d&Kz;yg4 @_٫8UBbiH6ʑ^nJ FX3%릌IUf׺T!r!d}r D!ȃ 6_ԗ;ZTF3f}xݬߣ%j#+ xFT1ucoR1B0gT+Ѧ"J>}:‰H- Nr'x翱w4W1rIv xQ@v5<4v)|j}~!  x$8 HK5q߄Z5\7OspWf(v2-g$S[+/l\ӗT}:!,kČф@ؿw%PRgfO`wa/C`Y]"/("фbDTKbG^'ŝJ6v &'m!I`X2Öl *b'#dۛۛGԑNp1 ÛF{ 6x4}T\KWV2}FA?{= ,)W[j<X0RrNA|̂MA/f y[Э bAB>:@op.K'QX.p$[PQ^CBrzcy G1bBy<x*F_ل ^٢ы%w)ЈR)f1Ӎ#1#Sc@gQw{/_//$S^-! ,sjGfr- ,D7GM0[3݄ت^G'F K'E$y:HOp`p2+/}hD:BHl{;lz;%d9NJ~5K@a)Ey+պVM/6naFNܜDH)1٠ d(CFhZ*GLzlF  A:AYes#7\ lz J>^Bsfe㺸I3;!|8,kXu9N IksQ.A^I7ɺDB#H0o~MKì)ө;8J~ HQHd[Ul,/V˃;㛃q-U`XZd3HNW:+SET9$FVW=H[㑫 9Lx6mXݦe^QuBX Vc{DaY^7vО[2y.R>cgTı= }v2a6hAhoX/w9tݱkwFJ>TwmurЮ[Qy+QүE}0 F#YNNgwXn$od6dR77si^7}nYYNGjuff}͜;VyRqJPV=)٭#ӕyYej#UUYu{x,Jv8)`PӠ1IPVlkTRJJvPC-F\~z׸Ih[JZ3pBOӮ`z/+ H'Xl?5vֵ`0MŽ9^U#-o ¾.0 ݺʢ8P_ hq[JEX2/v*sy ơ43TYT85u >GԥRnLn m>W1viZOIK'-MMZ7 >t*/һai1&U.Dyq++bu"Gj^TewPyyȊmM>7ϓ)@ *{(7rW2QBdhm'O *iEK3%7B DQ9T7:WyAD\<,؋U*Nc})aoILªci0jEt';O튞>od  ;܁uCq"(x%bQLd@_7 ^2B{n޴Uɸ-+wsJ9rcݏ D퇳_L˘Ў琺9Q+}2Kw$;7ܻGp A;7T^FH.Cb9^h!q6Sl4:!r9 V}K|$*Υy!gLut0( ڿKɀ&Nf'\['.Bz6#-%f^/tMTOŊ[`L88ڿ xt鸒mSG lf!f >3xrB@ 9nd&7ֶ;qPE̦z=X6&Bſ`١QkiR˸ 9 FHⶑ(3Xl1pZ_N G$*D|GjZhYc2bʒr; p6T@K)~T;I,c ןSNr22O&Ȱu*# Ƴ?~0$E$^ ]Cv>躦vO`7:WkzQ'hKQLoće(Qp9~f_|߃!R`x!QLRxd`Ї]MOFjU8c/3-1\kڹIE$8{Vh(T&Cf#ʡ4nTY𼢞Nք8B?qt?m\)\ y`DrF46=\teJdx-܌,]~Vjمb5tk@%LVX,uʨsX^< npɽ.\qe;HRKa (kRH'ZbhτBPbo`s1ҝ%-vB2~H))UH0G9;<U+ Heuxp`Dj `FK7-WXp˟'}v]+&I/{cqZ]Y.VW|eui졍?C7_8B(ʣ`F%N,"d]v[у XD݊J$&P`9EAlN:^XLX*OoZYnw<cDڄF7AzUUh`n9^X]I>39e'ad{sbV ^_ P`GE|^!ept;D, à ND0&Ήf1:v(e@9ljC,W=PSs'_~L2\'Xa:zq^5r !N' JJ@F2ط{hcAmGE;mc;A9gDZ:*.vfk|,t]+\<qq8){q5}0!Zܥkw]glCLfES5@ v`RW=:o̪p27Y#Z08 {{& 0|FLD$H$/ 7}kpqYw$;y0HY2I?nKR9>#02dMER9[qcT s>U_;~Ƈƛ @/Iyj{c%p[d" cmQmφg NIƂitקY?g4 (ax ?jKY/0"wH^zLGFTd!q$ɏ|@`/?AK l4rL^K@'D/c'Οz/I-7mFdWW6#E8:bY9Ev?_0WxF5<(tzƎ/[RwQF2u&LNlS#˸tv~UZ<;%izCo D5Npa`e9.:w +T?oSx# "l{x_jUpFi*+cqH[:T!Y/CE_oSQ:Qeto;y~AV jj$|U]bҠ2p_s`rlzUf&-2@5,HaK=}d, Ѝ+׻< w9'.uU,Zȃ>覆pZ0Bޯ :JSxNo-)%#KYSRLJ(a ''Mwr3 geU'S ݫNmw3/4`3#b_~8ǃ# dzQ,MgMW6)?({ fJ@ud>x$xo Rxd6tHI]\JpL[(7h.41<*P-Uf -垹047T;W͠&D4Tג'l@KG<">Q-<(;P`'L^nv/i1 ׬"Ɛ=Ty I\}U1N(߱zzi::$-͠^@q}+}6.1Mj? 1d0MA rSLc LX˘--`PLaJUZRBc+"ޑpjmNwHLRSQ)2q ]Js\-=0N)LF&l"E>װ1ϹfR5h *ڭ)CCAeq)W  a & إ]흌Sf2L6S:n)OAB(>ѫ 2#oXH_D1: _O`BUV%M/3G6}|,Uj"Eu$j0=EH$'& ELnna%{?FemY^uz7{)^k<.a¸b|1o FWU3 m2ϑX8Z}G@2ZTwvbb%>jiG {]ph0Su3 ӎdL,<cc=nxL|.lFҲr*3P0Z^{+ȡObl~x?Qƪ jX@{{]5\DE aD8$Vhv`eϊuv3 mD$KSV ;9yyCRk 0xl~'SUݿ$E~eUW+XS&Փ *~XO:Cw s1-~1W[Km/mի-c\! suJ\|~cO@0C߼U*3X˘i ѩ0e\Mg8Y'W?/pԘmiʗA^~X q9_}~p_y|8mh|6_١-} `-^mvۋ.=ڼN2l2VN(e L~p_?g⤝"tαO|Ͼ\X\@KCXhw3=⾽\XyΊ$mMq5=~ fсH}}yog;̐l&*v/ +Gy'{c^0?Nrs:mV@Xȗϊʺk <]qp]9܍y`݅4,t#RԒO>mh (wp[ 1/^<Eyٞ(5,6G 8LC]ֶ`Og"{BK xԏ>ݸǕp<'vy˖"NlcwmJ-Yv4v7nf@- /갍j|k9]:n:onxE(U򙼰7.#a}.5qm.WMP6ʿY:䆕|KF|<߹y%`>.vJS|W҆I ]D5qyy[@ Xic,]Ăq$a{H ,ʉ9ESƎ=]O>+O*+A;#ʡS7;)rz$(:Q`ۗi¡ s\) eSkQ xuMCf[3hl1x{7MEό8c8:m8Vraɤ1'[6U=kEc`!ttZ|Qļ6EW$B}ɠOX'//93yAFL瀝YBBI%.yoY^dtBbÅ#F: AeOg@Zt޽'߯Yܝa'yuO;c.!WuzTUXɣi} 58:h;,8IO?cp"?vRUx/$&Ff&[@2'<h4Td ɟhn{O*F{VT.%GOD8Rr". t5֢/;uLf Kr١EoW)1>DѿsfO)7ve>69WI"@ju!GfVGlORPȰA." -;)"-t֬ 'L`33i|@ 쑣8 luyQShZfsW>' b3' t&"ExzYSl(0cD c9c ).;a2^z:)'sr:ZZ{P`92# (D Gu" M5xHs"H6Զ N&%2N0'ED`J#c زCNmJzڟIJLT6@4(amGvા[Gmk%=@09vc~Cxq3<;\o bqc%c(Y V ב@GgV[WnޜQQ`VE煭L0;谆gzJDB$3 P=y;plɵ7i^xZ|`m/Vg8UP@FŠoއ5-B?@*A:^Wd 9F"3(EM+z""EO*o@_}CPg1/ Aќ5xȳ7Gp#Muz+VVN~pD婇5^۶y#My"$''ĪQ[ u?>p4z%( -M ,P'8ǫ"*A9 jQ2Z >wtPؒk itqԊ iOdrU%PgrnT5H+z{;("I+LMU@MX_o{=~{Α[ y}LV nZ%eM2]05Ia5+AXqpe]meo!y|xD:J QhT89P{:iϮm}Gמ'2TјTO-+$6]qXff 7p@?t{ b^b ˀ(! ` iP~6\әhljh®WQI!PS,*PY jĦ頞rlɵ.lWSvL5Z!8.FHPT9q`3 p̾smޒccT#aS:V`Af"JsloPZ[K*-1馚7]4p) 1QL.w7'4Yԇ[E*.\YF 3ԥ Gb8-6#&0#n&lXJmSDyaT`cM Y@#JJ$.k3l5򙷼l]h5}$ iɪrj;X\R{`/7/+U8T؉괝 `)AF%/Ri5yB3출fp_x $̀vc_LOh{;z7lZ^SX:uNX<DQ%TZPȢd*Ɓp=]Biuʢ$!6d*`֜xQld[XZ0uz{J[6^ y@f0l@~bណDXjno:CbrF"12x_!v䋞/+WW d@@"H% lu}Cdcxsul^6leD!*{گÈ}N̘kԷd-5>Tл㻇3"qwIq%E29ɮхCq8Y托Q.^ @d#M*ͧ]]>oXy9hOWU[tq zG1u7ߋW:aW6nf\}SI-d-=OobwL7~"{D?y c0+pyR7lıv($hyRqŠ+n+PBE,  `9yתk 'eb"p4]"1#QZ$]gO(*B:ɤ}+%G-bPNSppk {j~8;P)P)6 /#ޫ, e,'pt1XAsdpV(6C'$ܘtDAkh7sl! hOm̕S k`c1ƈ?٦? f0Sm1ا>޷K3'MY%H8>ojēMjUs8 c1 ^#8ڵAװjVFq]+rdAߍim2% H?OkHؚh[dM]EBoNN &(Xli{yvc{ok "#_Ñ2Uss]QL_Z%YܣW4w>apm(Y~PXEaNnsNLE ":&},d-H}$-7IiBN[8ާޟ$:$2K6dΎv"yCJ+ @29^v> degѤi2]5S+YD"ã͒GO|WhwtR+Z,Lk%p };Z[IENDB`youker-assistant/src/res/working/36.png0000664000175000017500000005317613260315532017037 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp P]/RIDATxڤUMhA~I?T-c!APD,jQ"^DTBKA楇͋! ^h+XlҒ6Mv]83IV|ae{_3ѱpkyV_,ι9mf|}Cg1}1G umfBWľ% {7,ph2J$Vw+?,$~̙Ha=pK$$y)%xy3,.E#Hs x)Ƞ& n!֎N9 9YpмëL6w/vǥ :%v'Ļ_yX¯K{̕%;Q9{.KOŶ`ֲɚ =kqkdTvZ1A\5oR2޷c1HJlqr"xK3\y?C j'n*@#Kձ0,WCBזΩP|]S_./=/|ɖwxWCM+HFj\B`QD$*׵hP8JyLFXR[jE9$TrY7H6_f1*wE="YO'MRr@MlqZ7?iؓ XΔMR' i#M %"@hb ozX\X/>P nd7fPkރ:.KXTQ}aۮ`X lakN-039a@k'|Sc5f03?~r ZdEֻy^cJ [6)4wan!0XuǂT BAO=| +O>0>,f$^V`[ 4(јܥ +3:a"eu=e K#56ᐁ"Y@X_zA EL/Tqia8J8zCo_"եoD 0`(A.V/hb`O|gD~l8,`\&" 9;+"# n86a *;f,aWs"幧Dfqգ4-?v[Ԛv7`jO/@֬-$ gWpu)JB-F!$؅ ) >УD t"]!U;I궥;9잽 ?3}dZH^~.}x ŧ%](-&GܤN<Xc.8F$GPn~^Ae ,c|VQkGBi4d2 L0\n&n|b?Ok":wvI/yنmw`3{@X*Q$Cv޴:2}K'ki:oyeX5D' `f(h m1} ,"TB~ac0aG LN#[ xU -zeδN.,=2y_xkiUG>>RIw$ @SM~4RN' Xt}}@r5L-2>%CS dGXpV5-c3c"U^ Y^2P_,HqI`jXj'bVXMɮ&6tލb >f_zW2hE'dk*wĈJ)jظb'6fEV;h3u0WA%9P~tMhYԣeSG3M #xelReOy [LI1z4 cvŚ*GZ&ֹ\}sF6q.7REʟTt(F6o*+Un #NdgAFN (@E)S5!h2zaX8q^uhJ@e)Q%̄/>lƣ$&R_z Ύ(4FQJug"僅,pPZ=g lm5Bv=`gpyh!11FԠDbBcR xx<u?n愐]ϩG$7MFd[:ذ7;өt!"`[nx[ Ed6cu5Tf`U\GɻQKg)Q.;;ܮ!Y>9ڮ5,;}i,.Q5WH&mŕɾѭ&բ4D;=:do$U`Ib5Be kLP["S vGjxEEe:'ɔF>)**`R_No=oļy/ c=qMcW՛T_KΞeytF37?JiE!NEx!hCĸ} W '`K$3Fݝ/QO#c٭et fdc$XV (tÞ*UQ$aK zs?$4SUdCk(d8ӁpZ)UԗA+:0sVbc)/Z!$su&D<8wo5vׅs9RHz} 7g$TbZgc$KhTTB.\dჩfd6fTʃu#0JwKeK)G63'D x}Mmj#_qKcAQ6[VH ฒL2;kB=:߻#2$qf0=4Gmx _̾ʿGpU0܈b#JO, N]ꋁ.q.IWA(>/[r [r,-ʿ%wa̓cTp>Uw>|󁓬ķ:+JķVQ'.nghb|ok:gfw]X݅,h-R)؈`5IcPl %iK[ZMS&ij,VD5y h-k( ºOf_{Ν3ssmd2{g?Ya!yizhh9[Hp)z|ϩ"NrIU G$,1O@/ꚝG0{d6iz ۻ~|N#v "? ;y7 MxmUADΆ[cL W)Ç_H>˜}xqӇ{gS~A52]AFyհZwեǾdUڈn1(.~h,2@&sM۫3LŒn l< hTM{;dq=1D^͑0#WV/u*OM$Ս,']}ũY!JSQM]UR`TfZ¢2UhElS}ph6-d48**Nζf4@3݌wBf7\(dMP94@Bz8W~ %E|^n$зeCcmGN_\Nt&Nٚ%[FEOmR|sY`T#0Pi12{Zl*@F$R'ֆME(vKeW*: +ؒxV81|_1ɦ |~:f;@)gKfK^8hh(U-&W @ !@] ,c9}59NpJ$Hɧ2;,-k ĠN&< @ַXjaEKB@\z>NKĩ XGi')GA[Zֿ"ܮe7@o2#4w眀jY}pê69,ZV1RL]')(w6nS\MμMZm`8dW}y!^o,Z>g ưٽaqd6>Gc[AQ[œkl{2Q^ΰXe7%,y3e,3&^ !RMa_,hu[TӤ~<x _ H=ֳ\/l{m,68Ȫk9ьݪfsӧ>SnU,_.lDi+ۖ 2&0'z-C,! Qw\8fm۽Ͻ/{V`HAo-]I>[J A31-8͓ xG/ضNZo@$r|GL &Nxݱ 󤂪]uc vGZ[[$Zh -ܵ~d 1|HFjE{tCMiw^'.M'C~E}cm(4iP8EWf8+/d6?D憭]4%^vn<1kԖuL8@2e=S!Uc|8MC[/6x(_J!m Ϳ&8[A6vw=A99Զmۚػ]mVo7+WP 7D5' "ݦ1oq^#Ò ;zQeAQ;k̠',_Nk\ii sye[<28Xb#mdtn G- fj 2$-c~`5**kqrp&0ݪǢȣQsjZ 4nɞV6v|tkM%>v h9}aA$bZ6fϷ-ɂ46{/fmr3/f<HfY(Fnx/|X]q 稨u\v5 D9pkڳ[NekNrBSi:b%\1;`6"]PluE~vS+%sJn>-zM]APkAPXmϔ@id\3Oslp0:0ASsowT Gu:ʞ7ENMtVO ɥ 2:/د鋎8Uy]v7(e7pyRޏs 4\ՂgXȲ1b 4(N@(*.IU _8;>9i t՗4SP0<(8hݬKP2bDSץ ss{ FGI ZB ,_o=Gs>2IG!0.hjqwt]P6Z #~?lh45U`pϋyiw.>yo&H7͞9p-`޺I1#]o/^2-F׸w.Ɂ@ԉ^"~#⟥kel3&A ӿ79Ȋ#,_/+ՁErO&qz$XЛ5%S=29#-1@*ݚՈu:|71N&uձ׮ :0K97>?cgOǐpB4Zw-QUgd<@lZW;EZ jVS:vj}UH;VU>S*Oh-C$<!w;w{{`3;Kw< 0Ùa*o1#On*YT].#bƻ߈5 K0 FcITi&?RQ*BQ[9OρAFGKOړl>LnYG\/bKG@~L_X9c 흵;m/Dvfi> +m,W<DW`sϓDxM׹]6S'2 ?䠏r}@v0hq'0^ٗ͛:M_輜a >QoTLS5{4A-z&AFfSnh0V/VZ3z4C>56DYd*?Y|_ާ@V\0XS$(BZ2sWp7έB.Q`@l zm:n _A-I OR&o9-i ^uʨ6J?>P/* Jh)n>iPXu]  !ÀQI{=Nyv'>sX>~>ӳֺ[LwfKen^K(þ1cۂ[iB'}6 UF̌ixb7kR mh5!]((qFX%H|$":ii$h:nZ VΨBFc;2vI94E>ŋ9)Sh77v(3B0%46g~u wTxDPq3,TVVi7YH% T lK/grST=h -(?f2:(ʧb bԘaF,:iY`(5 &nڎcD8D=ѩҷϢ~+|ppcѭ!.j41#V A`2/dJCn4M;7X%]K\Lrww1~1Q@ FL*,7 |XU~לNSYkovD|KT8]-Ytf=Է8RA>E:oٕaf->Kf蓬v-ZqXjy)("v'v_0 A沑eu ;{ٙmҞ޷EV}sBkԘc"Wz3h4󺔝!Ϭb7Ă ^NPؔ[8E{v}rrуb)R^ܔWHQia@jW@SҔM\E3EUՠ(_hDh/9XffEq{lU*!#nد>mZ,^Qz5iMߺpЮ0#[]p( zI= ٩Hvc^^OAI/m7XJ'>QgnTv~*vuIv .of Y8o,vhtsWh#oC-Oň cNZ}+Hh~ `_.^4jC)G͓A v#N~dslO3.ץ}מ~D^e>0#1u*0%֞^y X$"%*kCDWTmMjs%ݾRp휊zw5ӸR$$KL?&!8otFYR4]Uvf>9uwGb!;11,HwvyXY} @y,$-c/R:n;TI?_+zc =T2BXu~u`"SICP{SVsZ ۬_7j)$[Fg%X0L +]AGp~G4B!VwrA^sr'wngvоX.lɚ]L'Hl1WP՗;x,aTaTS-c%Unl:\Xnbé5*7RѦkQ(rT;"PکjƉ^!m;`K\" LZl C70{TrmH{l9&yE`7{H?N(CRCidYC܈r>WX`7e]Qn.܅(0!SN gAie+Z Z8̘`z0SD[CIůd4ƅ_%RR-ɜ4*w0zFŊ uK!N-o?b7RNQQP>-`4^Ο} uݤBN#&;M]-JN7>iXo[/ҝtN4HץwRC%,Rՠ[?~O;䘵hmA}o`1NhGl ~<؏"iₓOugPF; ?=- rС;p {t[0DO㴼6|o}-ԵJeN)dTi: * /^+LeU=kN-l0]W7,]D]?1qLvp^u߁iv9@r{ |xaa?xLn( ̛dgP@*-]y iTtp1{,E֟^y^?3Bi욇`* ~F`S $mmlV|v&L]a&|I/`\aZɁ>N,L^b'a`#' p1:p;.AG\iryz` lّ0̍$n%.g7-~3jAx7Oxb+عs W{Qu^Όu<~`gNvd_QpN ] |չ?yHB!`(yTZ-Vj[QҪEj{[z}Tڪk[lOA* TB @ yl59gfnB>~NvgϜwN6ӈn2bj@ʆe)2PxmŶ}Hl0wz$$Pt>\ IBSnk)a-) '}w6qj >+#lKm#{oєRa@9ȓHE:!D`^KULؚ칭?}]#]tysUt1&dxJ[Cj?cOR8f*;#;LfW:336~H@ؙhwmQY~O/U;! 3IqҜ-Uк];Rw?VKQsīnk [z5 `^,V CgRY) (XH#(k'VMᕀ"V(rfZlAekIx`A`,d{b"LǬVm/z`q.@؉SoP諻٭oK(3wp Mgn-kokBh&w%Rˆ1M^sw*7FsP $I+|>g(16#‚<\w$[װ%go%l`x~tc[]N#3?]0D S l /!XAGDf&-W>[ZdeFY6t9$ 5?)*ov:S`j]wؓq%Tl؀㧬ǹfp=b`EWGa_d%ط}X4y0}W=,SIיM)o(v NʝI+l"-&a⤧+ѩcX+EQ}7^KvwLŒ+Q$r|F \?J 'd*esDE޸i>t0<UY6,ť6ӢZlFiѲ4rh]~y!K:8ga9BkU}o<7]VUxuzc Cwۋܥ0X "4m*.-e%Fh+[ݮ,+ Wɷeo.3ԗ3QW$.|jK'Uqqju58F;27a}aq8o 焉 Ei`֓&8ˤXi1 lH,hpa iB7?ipe F!p =07)0vd{w|HQj@ߟ+eOVFHP&n y/mLcѦc4\zXtay؁j)](<b] ̌(n~v+16=qCVv'塀!3$k +,-&$Dh)iAe3m_{6.vpUء8qaS& Lj(R &?lrb'΂07A ej 2 C9Uİpމ ΃8?-LcNplmΕEĘt6D![U ZɃ*`Zkjjb~7OZ{N:Qehfڇ;7 ƒbd覣p40 oN e)Fw{]#Ɓp~hDB-mgv8Y' XWRZFq m1$NXwHK~:?D+۲;T()~x0.k}@Ӷƃׅ%eQ]/R>A zINN80l,ĕ;ze<6#_DQ F f=:v"!M'9@{(d,/lr' qތqa|g' \U(s MKS46ԞE y{<7V7আF7#29OsC)ҘahwXQuLK5>NƇqbWrV+{zsf/Q=״vxXis b-| " &ŵC79Ud qG!r2xxIBNp{ 2I D!1'v{k+ܠ|NF99}$ L.0覆u".p--EuəHUC>V !?긲RNKz(͉Пު7C]/឵c*b1v$~ ZP9az8v<v8 /7 g ID^tGeKQdO5t+<#K[~W”R7,+ؑS6ᕣ#9*kRA= ؠ1;[!,tPK񷛑w\;aTRrgMErxTa]R8Gu#Me,<܈0"uxe-N^K(`9gm"S pmJMmB9q!_(@Q{T *~D=r`|O[e,nbK&*o( /ҖJchբQ"(ya(ޯd/iFmiNBFޢ]9vphFH͔7TŠzyj0>,8!঄b2dTq\` Ɯ)=ۗ`9Jġ pG"\XT8Օֺ9j4C`<΀+ʉ9MW.̎++\ycKEbb!\Ok)@ v| 4 Hnm_C ۬Ev8Tidg5ʡh0hjU;ırCܿL]-seQn6/< 53_vvRyqyg13 P6 YVlXHB1z g5%]S@wPP tUi91P)͋d^\&/H:v>٥ˣl`ȶYe!{g)6k+7.Bq B 91͉Fz"%鉘sp~AqtQb;BXBj~le.~ _6wLCHaw8:]NƏhnvIaQIRb+Bf9#LoK򨒑%47 ]^a!e9a:YLF.iUiu0nGI00,Ic0f_]%,G/b?U_Xv9:brDږXIʺ)^Kk bHVw`rTXM`Fon~*ӆ:F+̰Cdҡ|^m"cC o 8l0N9fHpZV1b+' *em-,7DvN+l#0$*-Ɓ`\^Y?b9$eU쨘n@ lA?/~z8{\<ʝIx_n a ԽjߑY}.j3Y1,Svhsn lZCrv+_KRdN^㓊:yGLKR؏7WX=_p^_fw9\ Hf KvbsjC7o@Y<wǪn$BKӑ}z&b^Ui3 yV۩Eb(ar o(b8""j,!ZE \6!Sׄ4=̿DH"6=_:Y5*\CL9qcp͘i.k[][?VVY-W]sx7D=4E"Q7z+(2+-GY}=Z~y$vw/Kx}Ѷa`ڃTvey{:Zqx,yv50c7R3㎿sL/p?DR6•(“N FZXflH3To bM_|vMmfݵ<6lX^ G Kٛ{a0ǼU ,He1hXK5jv 0C%.?ٶc7NOag_VʆW~/k(} MP3>ZV5c~w}P?{t6y=5lTGiEQPA.>H[Wڞ<ʦJ >\d=rzeOǕxXzf^卂ШkAE}"J[<@NWA}gthw1^ݾsUyKB686^ #-}aC>֕~|m73{8.f1èo! h۪Ol.7gnϦH+w*O%!-׉u\5yh` 9JD~7K?Μ!e@VZx&%Eu=Vx?$Tih=^I̸N\/K}=NE? 5߷bǘ6mē~:.gi2v:Ed 9k& 9`MGWW 3YZ /R ey,;_ZҺƒk؏z;{]w~'s m/jgqEI1  ]ՇptoLdm.u`C\@v,Aq8ZLO+`+G°iyko#uI'V2`FKiEx˓yά:V=)CgƔo&b%d0X-:&~vҲ Ϣ_h3!Or)\(:ynJ r`>H~q<}0."@9T)Wܻ< vSexōWܜR/_Ş|'h[Ln,e#6΍ i {xnG.#Vl` P\AvTszu:wOxq p&;9oa7;$,>8̢ l^jD0/#.kA5"7u#ٌd:c@>vvzmm[ڷ}UnΙ>W{[mpKEcbmՂAC|h9/DSQ!C{ Vz=0W\"?On8e2*>?>^&>fx==1 7mScKVV mt"%Nߊ}@k g e"6"YWw46bTejvJ[Aۯ {߫ G #Ԯ>mQԦ=`CPM(d]HEg7mh{܉>`\_JQ4V wlah9,/; /-M,l%Vw Ά(z,$FQ}Fhwͬ(k0m]7Z%VT#IENDB`youker-assistant/src/res/working/14.png0000664000175000017500000005220513260315532017023 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp R?PIDATxڜMhAL6]AZiLSEQ"=("=؂fDx1xC[DDA z) -BB)i&Y8ٯ>7y AT"v[ 2_9m2^;W_@g3d{O$f[q%dz]O3;{DTT0 ,,oҢkx»2pv6WF%\w,W;H;esd»gهNatD)j_M׸hFcS1(WC% g!-?(e f=5?`~rL:VTxѻ(lnٶ ӡ) \ÿTI(8maQ8ReD[jci´K'T{\͔;H1Nf`ψ$"^!dI`e麬Tx"QOuztJO./$|uLe._T/.OzN]sl}-x$& s\ڊF &9 <}&+2KrRMu~Fz{U N}+XYc1y>n@~ Fb@KD ަTś6+`>c C2Af0+Z J Z'pb] ~5 dx GDX@>՞?VNaD(F/Dy9PjTx!X@?cbEPPjTVC3RaU8 P)J1 ;TY@8A PTYp &r("?/ `APG Hx\%Mz $Ys`5ҳO B\DfvZ TPTzP @ r?4h@g׾af(|6b#A*/Q* PقB,_fB.Ajt l ,\>B7pP؃,լX:T/?Xz8s%Yߋ ڒ k|(1M&Znx@C@ՅDEỻJdRiH?D ٖ(VЃ$Bb/QCeCCVKP=QPQDDj(J?v4sgfggw;0.w9ĵxx }4xw|߸3U  \KS:Y"l.n3SPq-CVI q"bn"1Ħv*͹D hpo; ohJwwdv9hr R"vJ,/SQ C^(MBJFebdjV.`3&.hɦ-_kΈg$ p XņL? (tе9R'|O7  ӑ|T ,],XT03Rޡ>Ie *_M~7CV `U:`ڌichrn98ZL [:7B6cTA2Fyt 8GN!Xo';5W3 l)BsArE/T]sa<zvekiZD0*m}z% .Ji!S+#dz(IiUS 0qqphC98D+45AQiQNVpT[PA*ZП,q-^y5yi|Tj54DT4?$`bDM(>b+&1j Dj%"?DHME-컵3wNɦ|s3'OQ"Z] BS7_lk?}PSA^{(,7Z?V7}vxĄshrs uV5$ 'ScG%>B+r`GU]RM?<Ѵ6iX%8A7}c7ͮo ־Au ~*UNRT=哓u0?Ej0(XFfvei >PJQȄ3s&@}%MyĽv DU(C H<Nƕn"Zz J/\yQ4f[N*+h4s.N.yћ)]V/D)&n\W?άN?MVmĦa.bdBvl}za2,9=:HL3KLceޞءI*aj9C**eǿTBޏEz nD`Es& ju1?=x ^q;tn%]7'bխXcc̀VMWzb|&PwtA~wl/(VGd K]Nk"IXɼ|/V2<'XcJg$pH6`\0\Z6ڡe]uW-fCK)L#\"yxlq:?Jo6P97'"!ݟCW#by'oVeѓ ,Ŕ.Iަ-s"FBp DFU sh_A11h]oKLJujE.q0kpXk*`4ja#^])l;s,Z= _Gh!ӔeeX<|C9 "Xb^U^Dƍ8^c!4QU4$~:O{$ 4!|ɝovXSL(X- 7EP1d>Ҙ.]0թt[WFq N{KYYWӲWeMWQUؽ-q(jKYnxSIN22ǝD* ir^IauWzHQ d!7x>v[W˜mR/ssR.밿>&#-k]YrV HuV33~ﲳBB!VAR mBTML%6&FjVŚZC6JMI[LتE"u viaqدv<}1{̝m̽s{y9s[BwnNXۣ|GOOku?,boyzYWh C_XnM# 6 bP;^?Z/ݶoTb& =|Zso:\gT5ݾv [e$aUh@7uz~pi') 6h;ןs1$!7I(?%av5U_7%fAji d2/`l$cG==Df`jsDt"X<E6s m2f9gwlL\e|$r过A8 ˼{?{W2L}fZҁ mF6 |a 2 P USU ^. l0AF>sk '0@yX (e"ܸYUk vɪ.S^n8G0pS%2; lh,Ѝ4G vx1~څ-+с99W1ٸ5A6\t1Y_i4O04C{~yY.k fR lDc Ar=t%Ao9<L@IࡌJ~6kٛSTP 0c R8I4U.&hc%UƲl][ ĥ8]z/ thz 8) b"yM"nX_S(-6p;?HQ9孶.]劉\}8=28@|d vn? YW<6#Ҥ-'E ڈ( Mu$M Vx 2wRs|t>wQ}g^hã Njj$Hc37^4c&۱ RYUv. 8 xz叉=jbP_7וZ=I0Ry'2 l~録/5W4o%z@n@ \ 0?b8^Yz9ĶX@5oU^E]:;f;'^6},yС1d@#iӭߍU;K!LHh%L{hjR9\i4v{8sڏR:pysk-Bc<542I\Z?tBÊmc[N\QS3<ΏrwgXKְ7}N(9xPQL~F"uH2S4m>:6O6IՇnz EW ⠧uAXF̫} DZ['AOPԃ:bpxr,Qo2'_%$xhvaNYu[]yN:: (e&p13HDW |vu5Uu7M-Rj3[=jؚs<.~y-Nlɠ?:sgUctRJUrd)d+$P^ɴ񊵶Y2m.UV::6;֠}w.Ǹ&G3oh{GLobbѪCuKX]򳏿gK=c rAPT;~g$.Ucod!Y0.!۠fvMoH*ɀЁ pWSMEŦeE@c`A2jݣt- ,.}sAs076T(ks~P0>U2dQ55Kk:y309\ߣXb[y^7}LQͳS YY&U,=bp?ܤs PAT xIllr&[ۣ)x?$UKL ;9M<xyUy-%M#PT1ӄ۩ra+apa(*IL E5.h R%ZLD HBcMJKBRaQHD."0l0+'}u~[f]5<}{8'0 *o1#O I,[xKZ)H,jl5wwI c"$E&8L.cE#v?/ҁMA^K$>]O~B^q8g-k3(/`S'p+&FO"`[5XuT%>lK֓[ڧW<4c'<_,5U,xl1n2,$.S l 4*B['Q QW<,ʞf(%SS B{iLRFMA6,FfԋlwNq/#FҪѳe9 l 4 j!PZ+nԈPSQ7  J 0 4buOoEx+sJk!9Zx 8xRڳMOb 1^Odվ E#>*LHА`H2+pM:IGqK~lzПͳ`ԩowU2bư\甌ZE714qx/9#ρ0 v 5=T&ӟ\g=CXM!P"v4b/! mkՆ6SDSk»7'?ITSpV=@|s`;Xz@NgF2 xXϭMwĔ3v7xoӡ3*ѐ˪>>g` uh'/whKkߧz"LDa]Fh@#o87&ƶl8V=.B/g8-(@72aмAO v)${.۔⢂7Xn-F|4給GTnČj)w߇=>;J xp!.U][_RꊅxԖ &7Lб _!8݊ʐ-|7!3)*,Pz|0SX,{k\R=<-lJuҤxNH'K|2 I+)+#S]ηJ;Rַ׋~}LXC}&x{>~v焷BIx򉲭U )K?RZ#Uw),rBp|J5xԷhswD: IR[f60 O4槲zn\Ts\Y>P?1##+؏qZMk2ײ-pJI tٌus>~#o<Mg l*^/H7ԁqu_$C|pRXdLGKub> b`PP%G(5Ieͥe4 蝪߸7IgOН+V|eǡ@+́Ꚉpld]#3F":>SĹW`;&ԼijҾ0zdEAu~TnD$ѡ)77'ey:1I@;-Mul{I0x\YI(t"P$;7 7W0pjjZ/^ 2 mUIRrۙ;' ",Zaf`Jv{Uަg3-fYo~k@.^Ct\̩H%Ӥo'QptEPNl33vb k:4^ݘ1[mb[OeECIc#f?"2_In!U_ilAZ<cM/|]ݳ11B'Z;I= _dS47&nrqTǪ=J zeĞ(x䶗>$=-=, '8eH[i-bƏR-asNuLHCPD#߅#䌳v/Gq`[Vt\>s^d`F& F-LU+SbZ(fN*rl qzfifbB4,*Dzm#}*4 DB5ق8s JP(Ͽl QH3m DŽs+ X:)Ւ뫄HNmbcSo<=E9}hS68pۣ`dβ> NFYm36/"_l +'A dB^G!FDEM.r.IIJl-o6%;붪D%[6^O[K֓9?6~.sFQiDVZ(b:)UU]:")VUeiM]]hǔ_I7",|I݅rl D ZHj|AjNU3: Ǐy"\]o]ubJ l6",\j <b.yliNc^-$9Smm> @#6aґ8h|`gG-pɇcX"* eDJg%A {A]^Ө̅_t6Ux5ak/vy=7PC ~>9[DR|LYP^lE;Ղ1jŀkc JBQX!/>ClFһ~wjjޣW}%hwŒ5}dwܘ${P%X[&<&I:!'_8?_B]MB(=!6$yGOSkvf$?gz"w$Ee@dntJ?tt:.A)#!1iq"UQ)oDT" {(aRܜb_Ki T`_iJjkj_h0l"Zϼ Q^81O) !9rGX S!9,e? uC ˏ'^$_gX2"z=1oR0 IKGޯ$:3ʨL Pgn;ѻ6  G&KՐ_?o$LRӿˡH,]*׎<l!3Fo4(euƒ|a.+б<ǮZYSc* IaNhC$3&eATqʓڷS-/FTfeyVne{yVD(5<ѐ)f@;O+*+3j\yv90e8 ehy噕zH:]0it{w}Mhi汒=a$1B !:\4v8>{j5#_}[/CnDOID>[Uj<~(:Ds8~"?88A NO uS}Sl>ւX },S*薳 W7Yeo2ı6J%D!>ha9GLU'~p@ (0r -BYy$J|"#nMt|\<6v (\a%!]~,Ǖ!M|~r* VSz$ڢz'J炬`i0쨙S!]ִb)ԉ],05ɴEn &hhL b7MNkz}8ƛuyb4^@aۼoM*( 񈯺}C, acu@7@;76yh FyrI7=5ұ|ڮĐ D$a?HU{jdEصAW]2ndklԷ'q -@$g_TMƪ Wgfx0 `g,..v,C F3j*PĂv_>wdHBBŽ*V+V ZOJնnVZmťb] . $@IȾ;sϹsf3sr]dwd&Jyp9J9m8G )Y.[ B/'& 5=\ KCCbWn $eK}3y~j ԞWƪn=Y{ Eߩ8$(;^aĠױH8 ZkV[˺ߎ5]t1 ݹ8G~O2ov2,"v[_^1[]s٤at)#Sclb] ;;|;=Ȏ(,X^XQA~ͱŽ ر":sBm >l> nO,Aߖ5wNM?>6V.x_ǀ,Z !S"2nLZU5'kShCDp|:5Ka(D)_ir|GVK]8L }N̹WQƜtzJP@: v ۊ[SjL\}47o=gOhfJg>` 諅n4$;?֧Td(,6VD~\\"w:2XPea1>vg/WL1W`3@_+(4oYz?U>T/I6eVc=NLʫל-JK?e:ob9&oɄ;vxH%vs"͘e=a9zjS˒x;K킩dH~tvH)K c;k'&D$^ 7R6`D8#C2-ӗweW[TI"&R>{!JbB"}oa5W`1dNLzwijTPO͠FUw01x2k02;H>c7CeD/cؙu[8/ĂM?%^8j m\Fss{X7so}dsi=/3r]ŒNI{ [Lkb9kP%uϝ-}="F^#,0&AP}4'fMwlj8p珶й/I|yl0` 6vCdHPT(k<62'n0@axQ;ܮ~`5pJO^zO*,u]X =I*ů:o=~A$UPO&:Tv7㥎LL;oڥUooE..]F؂bM+/΀plyqᑁkNKT$ߚTJ /=0(T㍛ʌ@g Z:kEjkn;0?$|6>ho2G-r x;ӧUҨ :(ZÇIl7ޣQdf{/޳U\RѕFYg=4Q .j X|E_:l0Yل#ՀՆ/ޜ!`{Fa#C/@y] xUCBk,D겈KL FAKiAPA֢0V-d'Zp>F1{L* X٠mɴƭT- x^!6~8 ,PB*XjʩVpS袉Y$%@}g:GF5@oAGTb]6\r mdBrq{C;,-nW$MeSYeQ:Bzj+w* 2j ,G|㶐$gVмU lH,%N~C˃ٯJ>&| 8KGԵ-z&p_N$ CP(0gPnyl-ǎJv&xV6+Ma^t0*P@#,Y/n'[4q`?D3$\Fꏭg^8PoJNf! :& ;BQ5"1@K\UC5(zSsEiYr-;/4Q V(ُDU!ѳF2L4؏<*4DHad1(LAAt#ob? k8 jdBXנJEtMtr|llUU ..+|[W5"Hwe`/?N>`+*( i\W:A[ꉣZ3LuL.ճQ8Hl uU.[v ]zy7o;d|<ʸ]A$ PPߑT 虥pF4+UՁn̚H!v w kF)Bݳ} H>OG[ieÆ?;ѡTWߑ NAmYemD:/afW#&W:Sy 2^"-Rw֙Ϭ4fLSTC sh\K3TӊuqǡwϽ穼G1XVAIPw9j@a0 ?h*y CmXF6&a]'-*:[;cS-C֑bUpþsQ~^Q1=m{o_w?1zc),䕨ٳJ& ?5y _k}tU퉃;BoB{-#IMmaQ!?\),D$6=vFH'Xԟ Q:4pɴ ~?D[hJ#+JXyeN% ,\Ahl =Z-ڡ,D $'iUE(0 nxM. af(T.H 6Ld.mb@#@h9UviQ>*&{G؉p-F~tLY~\6vqECvJgȻ/#, 5>sXA(DzlDO{`j=+  ,bL~[GfwWi6p dxQLtC۽5O>ԭMSkDL6(?Z4v7 {El#Tж Cl8 V7>w:ARHIW:  cTqg׆=>f5斡 \u#b>-/ i@JƳ4ʻ}pC`xU,VGx֐Xg]H{j0Ӎ'^dG:rztibgO#[).];(E=QQ눫D ڰi(wvO]VWXW3㸽nsyn _SźpYs$aJsm'99ornz~~]?O>v#<~Qa/nű ^fvã$R붣HUky,&v&+˄ҤibEd^a<[Q5f'i6'z1(1QبD!ˊhNFO`.;KZ,l=.vx+=aw՜վqPs#OضEM,/>Q02n0~[D- !Ьp >lu;לҴ+'LVzt1D7F&zs>ߙ6zdo? )W>U٧WǥZ|2؋v sX,*`i-N@An7/"xrF,AZނ/F$LFW5qimf (CNV?V#V!?+&Ѧ;Zzf΄d jiOA?e 3eT6Fت}{=\էallWڸhC{"O|Jcjil xaӡo t6Ph(kK,eaz{ UA vQj7<萦 )\9n*5}aM`kťnJA>jFª1'gDu2uT`G U;HG\{2.Ѕq{ 6`LI`C 2)Ϥ2ظU/@]R&%Y[<|q)3azߓwWb饛 m/ab>M67Ic+h2 F$(_]ޛ9Zg8.E;] { -&L\ͧ .7}H"*hUg0X6xmވeozlm <.i"PRDFd[o95g9r8~4J}.X` Ta)ZP[=Mp+Ẫk%>YXD~Z}vN4DlF`24Gb" (}2jYq #:_x4hֿY-ԅ x.4k`Cڂ!UC—")O@MP}ύ3 AUe"IBaub͖f945SG<^/j# >*q`De찫?Țz 8ś_̩.;!{1ed!E(5/5eE\hC =Dia>ƒ)ⵙgQ/6v5–kBk%K58JWvv}v7i8TuP{N% lAvԳq8ix!|_/yf9DHD7ut1O 2 ^> dYwMàT,sbе,Vzz/_}Mu(vb#?kTZxd, HP;i"Ad/MzvD eAAKRiѪ5duoTP.?\Ie ت+'6dUm4`Uj܃1Iv8zXt쬦rUh1P/+1p#32jmơcjjzc5X!eslyX= l䙁S{ 0AAHFPih0K~+_\mI@^r4ƈv%z1p#\)Lw2Q#USщ cAmsvV`(4d, a̍'h~O4ֺZzBx8?׸x8sT7Ɲ/T=2CL`ydk?Ϩx޳L6I>>l4' Ru7V~xJ4>ZHR2p9. ŕ{h,͏IԸfװ|Ej@؊p}ug9n"!cx  :jm qTq?zIOvYzG[[,-Z྘^|3`z>iXР`Kͤi`# wI5a._Vk %IdlPj@޴?n꟞8זwD-إwH%=>e=!%^t6o^{][NfRF!QxKMTn;wQUlK$Fқ ?sW'k讻}\~ + u>> 9WզG=Lf@Z4$6 Ҡέ9V3JCï,* _awox/WNVoA3>69lគp9QxY]H`S9D@/Ģs<+-s0g2=ItC躗ZogwɉC% %nI+$Q{KlI :HcXr_KG(%+gX26  .^1[ cOo9CԻ|VX\'_cOD젤}e|82\9qȺOvuwOpއ]!C qzSFNe8干 Q1y}şWK3xpV&ڥEmDa.k)ܹ({{$deݙ~3@deD\Zy¯OX ")x(Yg7ˑ`qtF@ `^ej7  RzxnE[+;D<-+ '+kAnfNs KrD*F`KAaW<o8*9 loרtşW%WZ2 ?\ v=(7,B/bwH#`PSOg=ز;c[ST+#b>;:V]vz^^Cg'~[j,kE+Ah2@ߙ]'SVߓèTJ?I$+ LkW2 lP[0 $}57Qv*6gX_0@}=?-=@]7W_j99v] X*`+8/J7r['At}:D>f'Lhw@߹5 񐈋4% xf20up6;2g~{9UYVO7 ka8]$Q`kR&E?C/SjOٖLm;na`gVkv&ß:v\އG/WTUR|]Z$|6ÅI]6,0absoh&HQ\/?NoJv _Bpz*$dse&دODkY{eq^ l5Aͯbd:m6һg4)`QEt+(Wx8l ا # 4w^dSKizǩ_ K' 맍)#7pok' #'H))fNVX .z@xRWIENDB`youker-assistant/src/res/working/8.png0000664000175000017500000005232613260315532016752 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp /KQIDATxڤUkA~;eT` փ`EA*z/E/x?{@R z 5$XA4ؚtc6{uvw ٝ߼yz8bRqwʹ2X̎8r>pۏs*r$G҄ `#lmC~%7ؕÚbg MU f͂*Kep6:os%4M=iGt б1˩9>B:#!~"@. 6t$ G "A9gy]bĜv)W2? /б(^7P\ :tg8$Hf^29o_h0s)cӑpwgH|OͱB`LWR-@^k}m0=}7=Ece Wvieg0VXw7/us:ޙtRp6BD.wE"F "hv .4OMSGQzz3;Μ{ny{ߏyN,M2tK碦*-VGQV)Eoݣ|[jCB H:,he=$CtYa\a"vr*XrŽ% ){.{ϲ[-WDx0yubA;rYb~yS]&N1vރG cwEؿN 4I7؟ҡ$ ;cq_9zn7 (t3Gxm[:M :6~JP͋z͂hL(j <#Z[Ezcƍ&#Oc+ j VG& ;ι*$|r)V_wn *\IiBQ^X;H'x%)E^w+hPq]AjՐ|qȿc3 gu]CL'6٤ :Y*S~ 2Bk L{&Bΰk68@Xzh 4 + 9n&?zTv+A3~+h&X#Bi!é?uƿH[@0 .U4) Fb ) Bn]= feR-m+pk(;.lEbn3 &p />k}{-V02m'Go8񶡓[ rCG/-0sYIxVXZ%du"}aEJb.>s/ZѾݠ͜g^ fJK1V`pj>$B^>LM@:GSLaVTUR n9ݯx?,PF"DnhZ.e kHXeUZё2Q+MH2VS &QXg6#59!C^)hK،Dxlu2e$fURHǘeTEj9qraYIIu._Gagh4Y 78d,Tr(i[kՒAtJ1qf3໰FH:DbЌ܌QЙe9hE/ˮݿj9wE`¢һ| x}e-8 :¶~JH ?QcݮV RHz{Kaxr%yXI:G>3?tՕ@o /? `͗k^:9$_7j^c AÝ38*JQw:4%)eFmx0BYd(AZ7uud񂂌l#e}gI6`ubZd[wIRwQ'.nfDDg޼eww #h!hM)4h5AR hCI6ښZcFR-QQ jDa\Vz;λoޝٙy'yy͹{w䄅啻]rSO rnlя#ͥxdQǡ":*zy@", b Lhto{dZƻT&vf;_JLw},8/a%` }F}[+GUd&o%)j Fԍ=J'c5!KN럜 r/}73x<jn1 $)PTd~oUtӾSq8)y%EexHq dZA"̏ܦ"6S]360U'=G]ïXVίˇc] cȩ'XՖ IiMJh2m C\ Ȍ!p0.Ě+?3I[A\׳Ǧf aO_r.jj fSjSpC43b(ėLpբQ;A%mF$y*8ϼMcʴ$#ڌ s5 | 2*[a7$5̺lfs=LYFi84]57qedHOф8-s{3tǖ&Mgr~IhȨx\m DQ`8㩚kZ㊉t]sL!wL-aPZ`X}뾶*LHMuDw\f@.q 7 rR6TEш$5gAcq@ފHe࣯q3uRnrεv?dv1X0~ew[sn@# ZKQh(LxFBDI9.ӃMwPkRAA>Ētxc$U.RB{cA3< F@sa- hJ;xG]G9MVjgBN'ƅ+ȚN59ATeiCl|:˜F~}ܦ;x|K@3M8Wྂ<"<S8L[-?NA5xp$q| )u.v:;G! e@o¤N',2{3s%+2>:{>;Lsk߼<Йpk[(wKlW${3>SXHUN ;B!B- B{Ui| 0. Y^^ƣP)ai K(NbV+c841i&ALDWK_CXn5 pj9m!#3lI&>}gȤx1.V PfOoxM^B&AQ\*kkg8Eng4· jyRrz{"H`Nms*V|*ZzQ%Op@~Qqaro5U3k4˿[V-^ ̶6ڹ"='=NvX9J'30/~ V OO/٢λx+uNqtٷt6'g#9MJ#O`B۸_'XAJ6ٹW dqV͓'`䶁>/. >Tq^-Üf 0_T$\5MNuu:ť=}Cdl G{N&KfJ1S24{Ȳ5_kX-FIذqxBMl;L7VE]][n`׹'id-BKGm ~ũﶯXt̂e(8VvL3r27 #(b XFkƉ2H(oLv²?<M |z2xV9pѕX)f ys#t73ww+%҅X%ZunkuTIGmὀ|G%P6LV46.yU懺 2ul>E"2^džc j[]WϪf\r %0CsмCF 㲺ja}n*eakt.3 g`5)(p󂘋DhT_ K@jaO/{g;͖3glY/A2lbΛ#Ҽq9O8@dDSЖ͠Aj } ɶ]-k/{ukfm| j2i-\М5:с̂6^&0̰6BGw򳑷*h{o{AGXV@&#ïy*C:}Z@;Ùǃ*S@~*|Uiw:ovq,LNe Ƞ~hy;䟣j[ЮOLy1_,_>nJyTȒ2EkMloV=a.r]ɀ,\?1S |>=(Qş1p7tz*|7r'Ⱥm艽-+[}{-cH?,qN&\Э'{]EqgoryHB0HhEEQjmjE|GZ=m*mZkUڂ(iy V B7|3ݽy`;>Q˓CZALQy1aTze1PmF;[Ōw&HHXF! M#m uMR@a#iE(5 9)k'rxe4d$a ư@mbO,I `ɗ_Dl{(s%:>1`D.\l=YAm}[nȓRr'<_,57Y>h%pUG\7ᨉ4myq!r~ʐhy4dVDn4!kNo_60Ѡ΂GH#ހ%ƒ;?;F8> 6|/sUciB#ntvVTlQ3RE4X{6m tIaPۋ:O:N''*YaS5)wЕeQ x5Y3sʍ'8GKV!p**rb;g^(gli_&ʻ{3z$@v w "3'saК`g; -tO<&w{綻fŞu^5#iĔ=$2)jS /N]$؉' #ɤ10Q.ɘJ\,ejz/ Ҭ <'$x-2ТWce4CBB4',PosGts홥d:t&<6Vy%CZ]7B$U$dK^ +3bɄX<bEMUxyW0z{{(4oma{: ޮ]FryL!4Ci 7/oV&}w8%]gO3ۄDMA|qV F4nL . [īa:`*D}Lo|$s Wuj$ 0h|aqVH ZI0[~Na4C>VY*h7q??7OfM&o9L< 1(Xvs"HxPuEYʄ^? (~'kM7x싋ɠcHf4h ~[ Ui(@$,"C1~L/'oЧ%Negx<~3k~Y[u{vde.,&m-͌o+B%{Y=>,w`N\G"yJP,>N[v7_Ps IMSw b>'Wyj#8mv(geÈt ipl%]Rr785n"x3h$$N]O[;M^޺_t(L7RlݫiXCXc'=9fYTE{Qֳ_".3־ b'} 6c3C!XaTep.W\7ɱ,:q \ Rww;r#cau4DHf67 NcZUL(͊* ;r*'`ϭ] 0c A.{>"x|}Fʼn0`㉗]RLM F[^\XF$5#fa<Pemۢ+&#7;]6 *m`p ivEVfRԙFD&;7/>d:نd/,[H, tR""90gF(<æAI?37~ aR0L,|-*k@kiqAvtC /_~}\RdNjjܙZ}V n e(@[{,_.n߈Aׯ=3]|)']'z@߅Lw~,Fc=|' |a;`_U١~~N [*"}B<28&2ط 1%mU: 5O 8]CwK?m9,cW*aJ0V"HMx`-P.A$Qޫ}@Qm۷6oΨPOCd@asO!{ :@J?<,ȢuKXW=$M3U`_fJj]_[g~\D!۶43#L'm_n2IWYU3O xZnRhAsMx:?uV}fFg>("*ɋ@Niy)(d^UVԃi8 Up"ܖ6aj%Sc%~1W-h.lpB-H#hvV2§$u(Jڼ/_'MG--⥯3v`*bLZ,BքD EfH DxGz>?b9ŇjN,gA (0a8UAHe>iZw=???^!J!WX wIg_?l!S~0StM j f+pYxD ̘`0S;U5.vcu߸-l[IPX -^}|.OW WDyC @,TGZӡyhl_S[=7MQ~(4ݴJ-UQFtsх9I7`R t:!ctcߏ,Rՠl0~xo58VZ oAO;{1qcVɘD"ct nň@kₓDž.$:܂0M?Kݗ.ՐY) x /$ ] \UIHH F (2"BTQ`t8:A$( (!!ꮚW^WISKw_&p#b{d >8(MV <@bԬ-TlDb#0 ,BH~ E2CEh rd>,=GJ ~ FX/ d$Zxd&B`x׉kJo>66-M]qxftȋ.:{rppv,B@՟̓c9!A&`'CWԱ{WrVVsM !W^$3!*Ҕpe >'b 3թ`~gÅqeDqb::-:X>$ 6n'+:)k܂歚<TJkm٨ QC^ѥ٫[Mk"%Ъ|vgrI?}[|Ss/>nv [SJO`, +~GqN|74"> gVK5=~>o``}6xa r. g7a*g#N +nCj{c&, L`Oc<+mK0* &` 1)BPg}.!Qr~ta.++ixׄ\|t}kKgZq jG'/z}&@_%84'tL،ȪI"; l1@-?O 5.Jlk+5V,*6]3cĉ`HB )9-]B!gqE{T99,*~ Ut|D}#?Qw=ZV3TD ls(`{M#ҧy{Lʬjz找Opw4*#]q#;ӯ:^<=*cҙӢS6b~߽61t_E;9Ι=qElmA, `CQAj^D i>TEApZ^%2orݣs[Foljg}1F\8}+:d\^ !p?FZADr0fXs2 X-xVSEd c2#8*xbqviFգ9hBn.m*(ݛ 薻щl*eL>U%ThE 6[: M0bC򲡘*j2[2/<@}v5݇92͡[1w9bI;0LjzQP*fQ_KGm Dqh^Cx;`@??ı jdJT?qo4qcI?ߓ p7.ĻYaP> U}2l5axdzmJ#@ :@5d8=0L!DnQ1VF5Jㅅz6 x~DaTm<Ӣ?^Gp< Ã]Oo໑Xyus!@}=s yAY2aՓ3Mkfӄ-QUTΣ4ǡZ. ~R2saX\ %h zQBV^k(VMߣ_x$gkdX2a?r&P3lƝp.`Fk0 Z,l-f(^{u i`14r!)l4gAdRr+YOH:G$3D+-7E5TUD⒦78yH 1n\QLWPCo oU";UޤRV6Vo "P7nI`ـ{7s~:kj3R!.HLBFEt8SCpO#JL/ۼD[ZxrďH0nXu@Mn|p E =6A7I/0s_ZT^!pZ6󃰻]+vjI禺]7@ 7R*AY}d yTं8 YD$L,a*~o+bռ싧Wq 7|Oj%` ~-ØZfU1>]bi@,>GeR)27*E-AUa԰HPz5&+>D)U`^[p4Wh&c9YQ2]eMN)a >U `JZGxj+x5b;n\eCc>4v̟1,u%g/^~v+nLMn`ze~6gP5Є4tCSdc3ɩ%<Y=^~r>h8pƒlx~0klq.;ìRZyP Od#pOw6ƃ;?KkEqlW$Z_oUUZ5v/\J2]&aȺ7b'Z{)  g#N7줅ؚ>͚PŅ_޶-p*$tvJJ9PYWY1=ڇWEڮ8!`2G~ۄXb; X WRS r UEm2v,W~ι%:Oxg6p{4lE61ԡfTY]GIR4hW$OuwZ.)/7]m;apj/rrya¢27ĵ1} Y5|WTO_ʖ ca!nQ  K8փ8,$nYei.>n)(62YWkȕ>w㶡Cs-`/{("Dzgs!xmU_d{\0֔G<.|k3:ypZdSy`Tꁥ’c}vUbIAU G 5WIoq أlJhU. rff1aAM$Q[X26hmJom|9^[L/}mGCM,:`G6776 Y0dg؅Q"syZ֒$A*T%648p3p 9݅)cKr"raؑ%.NM<$Lni;cV*QXW".pV#\C "d7=rLw;1->[3FYv7ӄyv/c~TKjE~K9gynEyeO!켔$U3irRmD"/Dld}^A2_t?̄MSl=xЀҒTqHnۺL@C! XP8-'q1ư)7e49&nXc;fK<4`IŘUBXBp#"#ׁ'ΤD>ѳ 'jmh- ^F`K@ F yPh;гcUeNTrl7\5eH <[-:C<*)DNذAzf̙RnD1A C< -qZ5S3nb~0Ov%mT(5G@-魒%"hK'4܂^/NBMqItc 7߭(kk0,I0f_~\%><)8MBD*~}D,!fp]ؗ~q{ *2CT JF_5Nlbh۠7bPG[$'rTy!nYH@p_1;g3p"Y ne[ŐD5,N2T WY2tu`@>εHf41vzTqad vYfNk% q0lY%U?g,>F/9>*93kup=\;T0 !` A 哵W7b@Y7^:McEҋhk: xU_PLWBuL Z =`PփQ,"lP2V%z85*;e&Dj=C!."Ø _u.ݴ|UTWBQsJD%D9InԝP"vSe/*u>X/Dۋ:o$!e7i8*XH Uqdex4Mqb5!A X5 Sʳcs̒o^q=^=gTY9+rL@Ըˤ}$+׉ XI~{Ps S6EAr7犍%3Y.6屒Ѭڑ G$Kٛa0Yb8* RYXJ5j 06DCĐ\gZoo9vaNZU؄pHSa0Vϱsk:ѭuo>vxixER$M)| tZђA+$uXѓ%9ׂPW]3"90.C-,%P㚏jS3:rݎj򊼓 {blHD†|+x~Rk>yQ=`nYgQL޲U'/sܜc\^3 Z˽|պVep䕋\A=H s[cs*"HE_rݔg.@ʀ溹gox\=Vx 䢧!&8 X-7p㰘sSƱݷ- 5[Q(ឍhs6)%vB3MPj,Vw/ȫGDeZ(OWKiu1!;- 5lħre\$6%dL W`$ 9`][wWBz1YSJ\ٟ%J lI8]]sjՆuDlt J/Ϗͮ]AZ6ÐG`K2&c,ߚs {W ПwTr !{_+?x7{u٬'8x:\ q=x C&@up$ ؂פէNCYe3,%6WfY79tƁ ۆ<9t4 %dCa ([)~vO2d ȑߡe3RPtr7-8֕L;V6ɝMEs2 lv0a7M2{H̄WGK`X7N7>NulRV[8O~NyQn#_BީXx@x;ڼ;ߟ~92YB`S1D[X~;bD BfSER^zx`܋GTĽN=έ| ˲ڲ6tz+v3س7jքp\7 ¥. %̘b{^fǭ.hF J + 1\"?OۓѲ`lc}6=V&T <́ልa l=GK⛖oa/oۗ1| cǔ?=}aIimڑNm:IENDB`youker-assistant/src/res/working/2.png0000664000175000017500000005312613260315532016743 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp (RIDATxڤUMhA~ZU+bU9 (XP *<"xbۋŃ<EE b(J[d6;i|Pv{|͋r7h67#0>[of<8ƌ]g[~Ed`lEN6yw$ >oOEOwA*Х4Ü9s?6jA; x{@ 2v}<*>W{OXPM(a!ӟ0gFwBr-8L<)ЙٹA7-=!} IaX&_ ̦~*QT6Lʆ%t򇥬 xpCpFT'_>AJtεiGPwT/ >FTL)`6г3䍒7bpˮM-uГUۂ!9*:߰-6"iYL%AE]^D $ 1\>W פf+F$EE§*޻@L~$ VRJx1N6λ"2 N(\wOKe%2?I>z˥xP<3ݨfJi&\dA$SХ JGO XϷ, ӛtbb5HX[7 қ +"coh V䲿:uv0q3ЂYªM92 {s,]V-I+ R!wP YlV( *DEmVP{zKEBo* x5Y]Ys3榮lL T!d?r##"% /  $D97Hʴp͊T$Rpr.s͓:{8 A6E8%DGi/jEـ3*U?JfHcLْ͒ԟoo8/_M;ٖHޗ 5' Uyy^VIpxm0M˹8ذJ,9Ά`9Ÿ|~'g]w7?DXعDA:-[:ng }ac`Bٵ4/k+^(1P[$QSaKHOQc +zBDHXX%T$Z39sgם7ոwҟ]b' Zvі1`@]"PWEBBSJo@[-LOSP/ -+tD )~} J1Wx'|6`-U,4\Rd:8564\DOv$ hFieGNגܰ/Y9CT#57 *GZ'r~{V] ]mQ '*n+ 9P/TYA%CD<m{wAYdn] 28o*Ak셩68Rq˺NE\ ?maP'uy K5}&+ kKDȯҒ`Nr|4v92DN#/˘IAUdA# _؛O[,s3U xL 7VL37N:ӁvCoOޭ5&* _`BB_H)&mbjmAkQc &j6imQ4FMSj4h&Z*"y٥;eMegwg{93˦'$]2=.RNC)x0@ZP}y25<@/їڦ/zH/Ǟoc6qY= Q*Y/"H`U ACEHzVFz3L.DѨ!//PBU<9g,((&DVK:o>s@v7i'cKUmyiV$xf, !UH(i:8N3U#S 9-7zف_]S4)=[W>x,9Xf N/|ΓCl^%J@u⼕ݺIL  2Đ|RIYQC&37HA;ڻ걱ڡKUmL?Ckz1f+)^3?@T|QP`~3H /G&lY1 Z:#;A mƶ.Ww'>G6 e%=5h-*W\*|֜/CJ\*sS ^\=z{q)ŵ tG&(kb,2Ω1wK=;sŢJ6088̕Y[6E}==l}`^Uf$e]itƑ}ׅyDŏFiyEmo[]Rc[Y>pu #S!qCN3Y*emw>`2Ue q?:.E{ȆQ+"3.ࡻ١tiOHO^ ӓ4n $9BGM,fLhz%P ~NmOm0;<ΑW%PG~ue}BkO7$xpwY?RƗj:sHáD KόOhXӢ!*V7e ,AֽQ<ᙽ| ŅB[=,1v p'/ )Н#/|WlX ~HZꗅi12#&gv] *$Sl}emLd}6*XhW}*kk@_kds]КM@ē@vA4cI'aU>ņ,װߍI)M`6 ǰO(?p"!yDI99N]NnV!ߧn&jZ;@Jgʃ-ARX= +؀8|W0s %Sl_m떈_)^.Zffwo^RTP9CxK ~ $褕]0:^#ٱl1 hE F\/H'b((&GwGDWi'qиW)N e҆T&5)4i]ak?L pB-cVm^6H~Dqd3:c9zg"9[[9<ʬY 4g$"̨|dHaV#@wUuX :ZTLS?Y:Z 4[N涏6[o}^||pL~7a`ž gPO~RM On?y(~ղۼdӿ֜eٻ  5U7+GWo_߽ ^ݻ7ާwΩJL`sڻƳ7?iNiyu'XzmfwIX߾HE+ǫD+V`i.EFXCP#}.o j=q5`׆O|]B ɐ|sBO-/Y+Վ[VjekZj}!aZ:4ݪGH·kbjѡA1AߔxN$DY"r1pygBjb?=B  'U =!~r[^Wl"f #(䬔ڧ[}gq3!'dX75 }GH6΁4Mk5n = +FŜ+Jb(uY})@tڹlFKluS'u{=%-fWPGTzv 2xu([,|:{?%p *An%Ηң;V1{JOG֑!,-?k']?<]ZbI_+CEuҡq * Wm`>=~Vdwz^#7q4D jཟqXqOOV,XX;*j\shv6q{i_5w1cn]kT޾g7@$CSqi}mEDIwdP0s[e{:5ςG6 l/c63FiK3UP"J IJI^x3xɞV3l$Oe1uiwyF wxn #"(ϑe92U6=ѾO)ÛΤ9$U\F@40a6d^|e5 6@ʴ尺6>"ss)I=c6L*u#c-s蒼5w9v7ا3!+\kX / Sݢdv)@=ee{wHua55!ɐ .C0D OƲ_ Qy?$xń-u~z!PAk/b ;c)NGcCG,ęnUҡ1L" UC *NʶAUmtg xpdvAqYK(zGGLS+o?|w܌c)l{ }ŎisxΠ`uаᎋRhGzqcپ )iS\Kwj9#ݕn3q(ǡ\ 6MJJv.6I[$):%F)020/Ȁ4.Vox>:ZO0ZANdEڑeeڃ-rdGp(GZvHa 參TB 2ՇXV;-||fцZZ[4j1D64קp0ȶΐ#,$H!Pr#>hK1]l?I# "y ,-`UWV$S샑ېaI$x ,=lakW@m׍q-$u`ܥqŌ_܏LtC&[F=0 ]&MGcBūXqrmi^V1PbdT~UmŤcq:jXb :w?~M;0#iqAhqP*>vƀ晭XbwfمdɾIH斄bmak0WAmO&rAϱa`nA 9KHk\F؛[P((^=$efXxhr[8m{lK",ꁟWn*c@rsqN1q[ 1%$&TS=J/$ OVo[">DM⁃6"樋cyjjhH8]KDBU)(:65эqp<Ä\=_3$;4'w^pC0hT+ţ0Orn8ބRc1jjm+GcNA룦zXm@G)dMWc7aԈP-;ύmU `;R9`kij RL(9oTk>uD_{I7p\߯dy[Z:`rgjnjL{BQD\%7whƊN;P`2r6O6Sޓ_ضWI]lzQ&Қg߸qcN]10ZkWjm9& &Y Ѐ 6+ `ŕlksS'?x2\'TkE$O9^M" m>VK"jyO/S`@6@VPO`:)`7MOHi{gH[w 0y ^R5\ ϖyǗj\WO{m&twsqyw g}w]=dr4.rH~2sd%c]VM(z p233Y>󣋦PIӠwo/>Q{埰/wl7ؠ5p^̈|^Ύ4h*h/` g^@YԘgk{8?0"6.MZ2-2VR6YȁN 0f6ΉGN- EUcug_$=uW3N.~o>ĸ"` Q˛$dstuOH8]"ބ1ӹ/IA-uNDNqI,4)7dw=N ҿ2ݚ~T94xw7A+,Лlp… r߯~A}ȴ!;璀leP3_:LlEY!4#F5i@-"r*S7-&abIAי{'>-;ipH\(d"zWNsJ[pko{_I :D2pD6]a< 4x o=ܤDឆGkfj7RVɻzk*f&@<#/r50I79`M-M靍ĐA,Rݤl vxwl隵hc,/)ǐh"GBٯ @[ebh`q!䝧H7GA.p:tݤa^vC8nksb t #um<22L@.IGB Kg5gMݩb)FeejgBt>7^b)5PߡIv/4HH[=FTh@FɆ~J*r@]v>O I(:s= .)>X},ՏJ kɳ>Y$hnrN%赇]*U[[-uUD1^A%Zݵ^@BrW~ wqϒw: 6^ѮV:؅h?1Z;s1=8 #"%ؗ {`Bm_Xܱdu- q'ғ=TA`/W--: ן^^-}jyNwT`g#"*)0K jJ/-Axhq ϮW/^p(JOQJ&w ɤ5bUP.3oHx4u{FwМwk{  sϛ-9gI5l7h+K4](}g*W~A`N5ZVwU⒇)H |UE9]9l@ BsAl8qQ5ơ2X݌u.89Y iN飩r10tLj7pe3yQA`Nk%:1nsQJ6j2s "pTn0qZ;. 0;yh.b EIGbi qJn}rxt ձMtVhg3C\xL%;EX0nY>*N d]@|j41\XqW h6  ҍCᢸuDbevK$PT);w7_U +BnǠO $^iyO .fj9 %%>vϱ'ZF9 c$(dZIUx qSk 7- ]\w ~pqCuK 9/b| o/pn"R0bӮ6":[딃1-Ri/~35VD'^FRwBM-ą%HęQbܑrUշR$epd߄n[Ug.(jq$$:lobqgiڢ1.9R;E;.dE)/,ERY{xrl,ĭc@&rz3R-)ӛ.>D bmqC7$DR 7s\L",&敦Jqcu_)pޥ\I9|/~fa?7/ᥜ޹IkCZg5\smKDl\9Ojˁ EV A da3MMp+IsBYPLcf1gӵ#^+~U{ 9a˥b -8xU&SZFqoIiBl霖T&AG: S'RI*{Gg f2"Ò`="ࣨ [P̊u^O~H"EFT(z|ll*nRVipOuxm-T㻺j1kj2OShB3k 𒮥A?,EA %SZ= i+d,wP74wc5I.8&&"')\[3ґ=+^Z&KT25%U簒}+јذej5k"#U0k1^Ņ"MU<:˃2Z"1) zq{M 6f8SާT&yxM\EWΟk;F{Aр-AM }~nE8=o&\_LvHFءmS L@ۋllEU2>z6߶I#f +,!LoXw`bH5BtokDI>*7[bb];ǖz= ?$C M|YґcpiLYЖk!ë+ĶGcdp("iکBR \ L!\Xւ .caUĂWk">IsMl [ Ş|Z?Vn}&Ѳ͑%hbd@C ˌ'6 *Sܶ5o~I`1*Lv⥏&"``5V'V_/FV.Ѩ{N?Xx&@}je9\LrjϬ_ضYi(L6t[R& 94&fB預L}/GRq% -2J'^Ԯk[[3`N%1$ B:l! io߲ElhˈM.jX:0+ly{\㳮|`&i&MvJK`Y\tw(Fb1?XE 2&tK$zv#$ǖU)vnї5P\8 oTrJQW]Qsuvt.:sGM"_\|@bsA^?$`ƄsOz2#!U/Ǎל:!ʥ+Ȯn1yiG{ W1KN7 2L؀޸=[*~{UrW% ~PLbcӚ=fuGCу)O{?yv(]ڼyh߾])od5 U"LW־LvL|6_BД$a'JQ$ GF T|>oI}ߕbFpLm2hb[feb.=k[%*pgpӘ2uub05]eTF"ڣxu6v+1"evj~ ja(eIhxR:DžrDP%몕IeR8oYYtox|Y-YI#c,,Scj\󦍢f0QQ% ;97xg~ݹ=qlyp#ƦJ4]-'lFJLڲsQlL b jQ=mP7OsI,o 8r|q"vlm hsڬX` VU1uI [/]cUz1c.YD;#if:OX]iʡf-1djI0<$+怺P,0woWD}{cŏ.|q0bqntenV֖f)Ly5S^C{8['ﺧVxSɞِd;y]:dݙJl8qV1_xݽ(\"ʵ|ejޘo9?`<MuXS!Yi3u $T7WW{wжEҴmP&]bJD1W?ꆠQ{$)ːN=~{C a\qй %Jvn [^Wj9If_sȵ^= 6MO*k&):rߊ BTx,\茏q2^ua>[qZfV_tki=m:d>uQh.ݪ ͅ~"R.T^4a(}Ͽ^Gq3hLeɵ;Ulyu, ́b/QB+-ז4Җ??RZ2bmu,Uao4C^F'$ws߰R'Xj'RpjM%g±g=ljlYIq\Q&^K4XWB{2:&O u!’iAd{24r0+XOH8% k Tk~4c0R*2up=VLO82|KE)] J:gSS..AҟƤ=z٦n4={WsS5;B'vWVyG,:2̞dM_di i?=o7O|(<(1zN:!B JIr/c}QFIy Hp :.C& r=~W &T61/Ċrq2s|ܪpc8`cu)/gصVq󎜮LBɈ-GS4yp^JArK eD<&BE"lP0U!\Ӫ޵Ϫ8nq {SsV4AU<*c9 0FKS47r7czT*`WH5#S`<[4uj 4a)r g (Ace ):Sw0E'2qdq"&% <6lEZNxM¦T]6y >=DյC|4܃8V]pPs@>I6zI#_ K|% }Um BBQk*D@rIC/B(ĸuH`ѧ|-1yy?.R2{O<{YTԐזӖXr|yI~fϿs;-<PԷr1DbR psiba޼h5 {s9o˗}2]0G#h%OE F),=LⰀW #:^;HP3qRs}'U??\ApFKW7%%YPj+Z7(u pS|瓹D5o"K5#u^~~[TR3xc)bdu#+jL̇_GWW lFQrL1R7挱1\ o#._|%s7#3‘ 23kN!ΐG+Ž\jTR0'2uW~8O3Os' F8 p/7:J 7wRɩ>vvS'Bϟmǵ_#7&'5Qސ|&x\pRQU"G>3G&p~f)u/缔2V"J *%~5._.>Th`[G>|)wדd0F\ i㝿%( ~FzN -0r^_"93DI+a l$"r?n*g6H]t`[||Fښ~&7M}g@'Y%ְEgRҢ:pbO.7n7]n $KK%l ğ\&ϥنU.VP~ |bEr\cWPW'Zԃ2 ̏\"\,#wF,XL1 1`3)4qp!{R%KHTą2{ -r|$(iN;ɗv@a*w]">7݉$R7Tbw RLbfVh @|c+ YNFý(sǒZ"__{_Ζ N8sd bc@;!OA% sc\6"̧LqXV,!Wy펀=}?8ѐ IENDB`youker-assistant/src/res/working/16.png0000664000175000017500000005220113260315532017021 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp aPIDATxڬkAnv6RCA^xċx"Eo^<_=^ԋ-KآIk}oL' efv3oЭ}=ZR70Ǟ-=|~e.SKzM9B7h8۵5h?9 !}Mc2L-ޮ%stM:[; I2=prv\{CfXy`2PUr(i3d "Ir#{!KzpWLO 5ԡe+"ӎjQ D:6Z 2n>>=s6+u苅YE=?&4r2G *e?Ue (SvbGT-:3䑍Gmm5Dxذ6@A74r&{ {Ц‘*z K,\f`y/Dmd|ֳ\@A   TmtAK q#Ԁ֚9AsC+JrFS-Ois`5ҳO 9#g*guQ9`]u0$0Z TPTwP{6 nIq0T.?agA.V%/;n&ZDK[%ψI|1&X!nYX0mHB@\`!(P lx,0s1"6̊COp# "Md,z ގE5,Q,4DUЖ\<`WӴmQk 0o:@@C@ՅDEỺjcmZSً %TVOFTIB/Cя[=/AE?PThhFeej -уΌwY#\wgg{|!3]S`K9s}`' A2&5أ%1VLW6x|\bT4ѨlNQN>''Eӈ>g2i % \Wu Gb͵;y> pZW)y~ ӎlS8|2聾WF-!|2hs48E/~]mq6/Hz:%~)l*}b0A_d4%I}=|}wKめ`K1{=Iī}et`Ye86:7|O }5u<{\N췳pf/)E-[iʍU>"ƧI;@~:/%0Sb6T5Wݳ*'T˵j$2/rMSul}[ߤ4kpnQ-gэK#Jph{MHHzTQҹgYb1/'씩2֞2_wk3ҶB&ԯ0vF;jwG%Ʉ"Uy%NU&C˔#3RĪzu͞*UAly»5?~#KW% O,TRhQXɰBkqѐ}A+F@?4h>xs*kNjHQt†T 6H}Y&酤x  褗xlJs9&XD`fHgCnb*7<1usx2KaBdRC!&b&]ֺ?S`p^'$uhZV BmgU]ʪJ*E/PaԓM2V가n'ØVej:;32g#P{pЁ(8[ ״d\1Yz˰*Q=GrQ-B 5׀`ΈeMR}9&յuE74N,@s@N;_(`u5HM '|/w` \qiCoU$ xMnkDmwIY%i۷Ƥ+6C!  8 p/U@D-ךh%|#zҹ)'\}%6M6$Dѣm4*8YPxB,{AT49O8ҰC-"VfI]6Ar]g# e ͭ( Vm>0 *`πhnj$X)~.iQq6)jЈ,~ w,o!d֖Ku@C;vI),U'KԄbj U2!ka@GaɁ!,69#R}H܋b뷶fmy˥s8M='']nnPe`Q-H["%kZ9Zq0=_!t ,PrÐ2&Z%ʶzvE o< W9R5?@R_%[tܟ:$YS j~V26~!ɏZiWe%C&={?#= pw.t Xs~φ.RBXLtgIU$>+4-HI+N}=R4Lt>w^_}퇆Y$nxM7S_̅D1Nw+}Zc㨮هwlz8Gq^4H(!H AQH4*TP^Q"EjSP_(GRZTHHv$%qb6vm.sxv^;3ki;3ߜ{~LAX9޹{dnIMVke= bVzxqGhPGno7alĠEx̃] e/M7_jtN;\gT}5/cdŒ*iCJDxr!St IWf-ؠ^n۟-]c'bvS"$52Z<o{lHd y u`r Tb_uO]I)H(O'__Z:AtrIx`+r떹N,JXWpD!^.0[6 RKs_쯊0}$[ i+-鼀 mF6 |2-D &.Zqk-SUEߏ1 #W9ci ;0qhqX| (hs44ʇnl[FҔ9Updv" dC%n[:~vBg-t;4"3f9pAK;{]n‘\/]E:=Qk I'6SK)6&-5pH7Ϭ^dA'7x:QJA&`nҮkkt׀6i%aT lP'?Ȑكj>:gYꔟu'z7%AJB'#;B^l:ىrdWŌdnf@ro>EJC?;SMt)&*f} M/4TmwG<^9#fwЀ%ŘXn*<@j V8bNg40 x0iOD^yuTq{3 36Z#*|F#p'nWz=0+6l\N}hdZ.Aw0?xnF}Y74%֢y\bz X'å k첺Nv/覘F+O/m[(0i2-?#uBJ.FhYٗ2d|_~ѷc>8#>#`~tDr25,U3c7^Σgi[Yo|J S*Ke20[\v\XӺgM%c23F-v;:te4{NkF96iq^8Fwۼ5y :jӯ 6$d]+f{y[f6S*GC>;Y&o/ek``@"Z?M{{Qm=o4L_ur /s(Tj~ o}bG#Z=< %VHTK10~wFGܗO\ Li65e3߾}cCTG Bs2|7I&@{/y)u*>y7'rh#%{no˅}&yW$Eu5*@E0 QKEAv!fS͆%F[b:K1}qeE)d;3)| ؘ':o~NRR)B s0 Z)#doȏ_\k*2ixo֝ik)裾5`[`crɼdl' ml 0~@ԀM)8H:s1?ӏ+)Ј&88LD4e})ݨ:j =3/H;xx}Q|)=,ƿ~"flrIuVlP%'PMF+cT ˌhb֪]=G<00Bg+i@Rf(ܷUM b-X3 `AY&ղ"t~UXͦ_biI޴҆5EQAH1&Xe疓?LY{6j`h23/014&ۮ:c&f :bԬXu[ lacؘ`69Q:y].=̳< kD2_ɝꎣ\|_$ CX2 \j6EpB 7iL^/?'"x< -L[5'-`=wx)=SXpsj7 D8's%иqnӁhg;"p?6I_hKqJ;(0%N=a8[jٹX`l\ OEМ!H?z;CF? 4`gW~: q>cPپ棈Hy`Uרî*8΋wK-洤3jyqC!$P}+6%Hc8?>v>3?Oi#k6o`"G;dAٞ=5y|lnvGo|,|&5v;q__-tÂS>Б>;k>QxZ]؝44KHa;4* bRgq9QGV =I›^0qg!" (Q8֐̜4{uB e`rؖ'z\<ˆ?T 6ǰ @QN㓄5TakSIw\no =69‚#x+ qnMQklb\ AȤW/FPُ8^UoPnY:x8čqx>`b\-n$E1"Cf'o?(ڕɄ ?VcPmeu?!x=ާ:D=t=Q SD"eA]gSqf?|sLaˆ]YFy!x?^fi9 :{q!4~"Bg-o6E^ZNQj$iò&~cOD= )/;?++KjJ8??d\Z]=M&E=-\E2{9a`b3G2u;m6{#xlusWEdYu@cj$~>8c~Tc] ;5{m`wޘDHC]kwi3W}m`T% ,(E2?/s0E/]'m5olKi[M ŎҺc# #pJ Soj9OfoWweSU hC,j2zXJͲx궜YnᓙuK|f\Y?C[Jr3oVzd HDzs,HĘAWj44k8ss2v{}LqC9ڋQ4sh>,\4&^C8+-ƺUXkyBZ>fS76g+*$v2 0~s_ `m{l5Z"DŽ,k(-&dޤKy\=ܲh;XCs躓O$.`cdGUSV|AsQ3'nҺxFymvv&4KֶQ,.XUk|"T@G> Ϋx.Q>EodQ@bDHĞDI.]lu>&b`3JS^x^'n5v^6?^,L ^vq>U<m%߁@!f,i~i%ܾM{S1Ool&'9{(pi?c  `8ՔŦ#Ex"Ѧz?Z~TOʱ%/kVsWx(Q@/ܽXQdf8JuMMXj,XXZ=*(o)6 a:kAelo ӂ!BZA/ TZƻlC.<+˼EﰾHx0%O &:&Xtdb-Kgd]W lϣaktb鱈N虝 Nu04R2%~ϟ ɲkZ`c9WFThd rPa轧leZ"^Hi1`֐'VnnK~Nͼ@C<3+ݿCgM4F#ẘ\{0K䣝U)' j%*ӂc%;zCS>#tG;pTY%5N=J]zޭ+~uf޻ }w<Ȍ_8.4#|5 8ʑ=fO0ȕϬe[g4˰'P9p&wJidӡR)eFAi p+}ؔnr l#vDb޴緄-Ԕ>*u=GxGa{Lt4'~33!JRV7[{hɦk0+X+!N~BlMuU=x<0ֻx-1C w Sp1cȬdyt[1b!!Ѱr 3=Yqֹ+#7T1aմ eҴU+]Ղ_1\fJ-$bj:JȒ[GothO0.r -ڑTׯ5iAHœTϹX|1sRb[u RZdȬ񣶱%>v<*P) ǂxߒ/Rtt_۔l[pZˆ)s6`SR$&0#xVqkv!=酻jD4~ Re}.$K@rh`s9 SXزx]m!7.\O%EvXڏM~n_7!& M6<XP{2'(u5ڹ."znA!"13u=Ռ]/@{WUuY2,]E ( km_h}>Z=yV֪'=V~O[ *%, DBBBs$sgw$9η=Fz1Cڎf6?ͯ@7J@yl3>0{ }NH! 5d rX}X[9m(7FLqE+'yNt^{fw c_qU Սq}8{PDjC& A<>^a18|+ɠs`[|VMonU}]#'gJ-K Ut7|<`dx࣓!I/+mc+sġt]1Ҽ>`gl>b%.MGVQ")0N^@-4wqe66`[ `wn zUjm!}(cmQ1Yb9& LjF.}{tn*-C [Ѹe 9$ 5QXD#˿ _vTd S놗 t%[|G>F8!O3^t `3oZ.}fU͈ʁ~H1(";eEOOQ2O(Y|^$ВZV JNk ~Trb MG9zѦ}tٳSx'K2Gq2}?:͌%x6%ORJ\xH^ۀ? |8`Xi~sU'~5ҡ0Q2蜹K;SнE8RoSQ:Qk)zTp) aPUZ _#y3iPcT-aGAx8'Qcc_Kl&W3v:-bAkDd, pH[:jUpG 7yX;{Mhe'i11^fP#( :zǁDTLʚTP{8]{EZhQ_zFL^3f}>\0{VA@b[]ʤ8f!zB0+ "+ΚIseOJ [(A:%)$x豆dᯟ_O[geT:e*15Ҫ IQ1_,:q3(Ɠ-RXty*_)5>nHءjMj (u_譂c-X x;g dp51$@~#)PK55:ʺ#{$([vck"GHn*.3+{q_wkc,xtC[Ҿ++TB&|1J %p`-PȜ =qZBG Y+AlgcSRM(&zHtcpdd r@ @G#L^{QvwV `6X[Au`mI'V.Qi Df{%Ou&*V&iql iS4X5ow*fHPm>ل`~0O/7jOj]ph0Sj e`-5 fmÃ~80ឲT@y_ Gĕ##^qX꣔WPQY#P#-DD ]fw=ׯ[@j D5PՊl=ŹbE=fC$±kfW;6v"Xvpۅg5C$w'NT4Sh'`!#(GG:>*,*`qol_2Vw֕(blOHh]={{Ԉ{@ }\?sP?qʣsߛpZ@~)v(G6տ hĘv%Dk*dqhC}MYBd 7Uf2c.l~]؅9㥏vfhEyƄ7'[;{jF0cݰQT߇E ?q ZQyUCk}Qb#=0jrX)Xa+~΢?DZ:y-fS_P~i"H τJhu|E%~0>7FŹU}@Dy`G:z?JB$(ԵZ'gH1e(ٵHdkKnocyRIMD ^!.5~Leúۥ GQEu[VW$1NU$#DՖ*ЋfNӥOWO&_<1Bޓv (Ω{{Q$T~WDӑ"q߈e!H9p|Q3*"qDr"EW!L7avCA};~蝭;kB#>g27wNIq¯)~_Ժ!~L|WS ;9nbDa6Y 5*I=ި<0 (C6LtEd]PļQF- DöBŇt5'grǖˆ!w0]׵f)p{!c9DL7Cfqo=XqX bgD9Tbjsn@y=9EER^1 (҉&MF?^ cF$[iSMXxaqRa,sl\u1ѶnpS3\ŸCI˵MekNjɫTqa!3o峦ҷNR\ƅaNWE|7W9GWw5C(>oˋ6l?{Y iN8֙ӎL@]ڢ9&sM+A}my*j:`AKy䤵*֝)9{ǻ 2Qؼ80[0Prx8(QaQ!PmKxctLa|(.起^̵i]U,6 xlP2 >)–m{8$ϱ?sy?ASPAo<ŕōЕm |uB"[?H~13qpݛYC1*J)4y1(QnkԈOϧ<(<&[@ ++4]&6鼨,5ڬ=JQuU{\}fTE#MƎG ˟]-bcGJnaMPJ]ei *&^ชgg={Q̣@H׊vL֋eP[vx(8$c:Sq2 gj7sh}ى"V%(Zkh?;Uc DY<> ⤑sGL{!Rm- ni|[D\ h7\<o^z4y" yEp[3YV^ueɈѿc8a`[^hZB@J|D;[7ES5#NbPj%KM>k]3!!W-흡C'kAEZ66Z ܰGɠx~{87h>Ƃʪnrl43l[|>kԇч;Yԙ/mSs(ȓ-E'3љq$?0 :Xc,rXѤ3Gti , ")Z &D&t~ <K}Ãލx*:3!H:ΡnZul3g89[RmR+& yWOs؟V$ hv$bZHpRѺU0b魿~p_;y֙R̥p4>}Lw$ɑfz~KhgW LȦn2*Xjĉ.##0ak%+CW!Gemmf3q~(%?Cʀ_-N 8x(ٮ9xNVWPg7=f 5ç_(:8PgA_$᭄Dŗ:[Tߎ&z##^:ejd>#뀭5:=]5)ɖh+A[xo"UC*!ve5A]؟_9}b[hC#3kj*cZ`knMdTnIwC80\ް9lMV Ǽ rfн 5C8xPr kDP+lC[_{T Gآxi}|X{ 5#u~=tZjއiǓe,p؂{ں|IՁ#yD.g 'ǁmO*7S CM*{HʄWyN)ܗ4^i|y|b@g r/؆w8 FUK5t;ޭX{؅7 -Ӭ 7 CY 8ʝ|LG-qn5 FECZ-cL*Fcx2{_8FęX[fd=- G<|\^TgҾϙsյ9| .uE*@q ٭Y_5ADY { Vz[dc\"?/3h* hbd(0{$7.Yķ \=)`C9cd)qtVV,yEyϑ#]};0VyegA>:wwؐQ MSGuW2v`--j!6BϘn{:~QLW2x6𱜏ī|;# &+5ю/ARlD+"k䆗Ʀ)S%TSD"}MGeDFPJ̢쒟ҩeNu+>?LZIENDB`youker-assistant/src/res/working/28.png0000664000175000017500000004734713260315532017043 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ;-KIDATxڬUMhA~d7 mTbA ""X&7 ŋ՛^DK/"BA-k@,RkIf/Y޷aO&4S75{ 2|xfBg ~tA;}"ni亡*7ㄉg[2:u4G<Xd̾y? k-`$<;adGs4!k˻4E5mE3y?ܩ> h窥^,מzKۚ⳸Hkl)gtbk~QlիFmL!ى{bw^O?KRob+_8=6\/vOj i'ț^SP,.XpI|@1*%?n@Xծ8~rvy`0Ґ]ՙNezL^~< lL[1٥$&UT$7׋^bƉ҉(O7o;jX"kM2>G";zwqa?Bb V#8ZD/2eȅ _5]X ~D"~DøPWz&V_l7 c-h-Os~Ai[h0<^"r˦FEB%@At%$z2衋A/QKEPY=$)]LM3 ʶ{ov4g~x:?Ofq r^'y;yH ʔ<(8{>)z$ *iu:! 2ُ8$: 02a|\ZIԔ8⤾e-S_I+6{sXSS_|(0.-tQ2r]X,UʢDF'ƝYJ4V-!}E8Iy@\%F 鯠rÔ*Q 2wWA: >ꑟCJ9s2.tS؋9;KzJmqዡ V~Wl!{؞[*iQBh`$Gx^{mS^\ g_H{eEaPNg3#/xsfDke[ G@KuNWVbOI- !C|y5拱`Yf{Bcϔ94LE3].PfgcZYisN D X\!!ESA-;7Ϣq:\ꛟo$VP8Z!̴ b]hLpԴ4ǿʶ*VV}С1Fg3/:1&ȁdb*>\,+f2p|D!OQV&rӁ7*ecF(cl"k6oL"&Ћ[*Icm* y\Z+WN<]0IkhsTS }D4pgsmWj*僃ڸ)eN1eP٩`/9at>  [mlEһZRDl"51HkP?` HԄhc!!~PH4 TPVhmr޶3s;73;wufZ^i K܌r]Ģ  'Z!a8gh>'$M c`y &=]7 6pQM^W]maRx!,cJ w*ɾ^qa!X;!0uLy8KU262Q\=bV?26PR3t}\~TYK 5@69 @~7l/~=gɋџV0M[g!+yؖ/xl I=I[e=>:jT_ΈXLJ^:9Ą#0+ @@SUP9VXzKpe4?D-d*;4kb7޹ɲgrL)H>&M U#wק&i,gǦU+bgT#&ژ!:DnSAi&ǖmkɻvPk]"],,aHx-Z:/"4Χ'#gBkZ5-q#:<^%In8Lggrq~ks4G+ge !JOѾKO]i/=3̨.~jIҍeŠ<'zq +TF&]88?_0.>@ 3dP(O7t8˄dшLJ8+G*zRk2-LP{^QM0N~΄!b&t]/uuZ&7?j/UY8ϖ8ʊn_5Rw3OC[9G7x "!Sb#LϫS߯ФjEu>_jEQ:eՃg@r`=1=Z rNϤ:t@U'[{ t0=mWő@pT#fܲz>Zؙe +`?_p\(Úk\Zn"6i:zwޟ)%7FPFbi",DU5:ZWؖ!&PJCG%gLOL3lo9ֿō^:("E<ǮLut^lk5 ʼJҿ.<.s lHxuU$IN)afE{ Dll|(D6ݾEZϾb'm@ MaNF{q g1| 4/ [[˶O]/'4lcB/1p, ow0UkhV ʢ䪐0qlcv^1HdqOxsG8Qtlσ88OOf=`;bv~w=vQN^i3Fm$B_I11N#tfr g򋋂."?cFŌ3Jd/ݱ/&0uMGP C9ײL`YoM-ДoŎ3̻qύHǠ( ߀XFC$xKL+ɺTCj/نqFE4ϚIuy! PXс 瞎vd+>f@̫ӊ O AobSMƨYȮcCaE/V_s}Mv7?Ơn"$rrbnkTesŊ0޹0:喝`sA=gDXU R5AaEjݺs`XM3V@^Fh"p7fE߀(1A<oտFd@/5l`,Hxa%֛Eg t(|1@}O\H?;`1` x#l"cDA,@86aEX2o=-r%rv0MP}`i K۫vIbvkvAw}]l Cw?[毸`ћFVHY}&S&~N·hZԓƵwٷ~{eҏ- CkHD(`n͊ɤEd~V( m.ցų2xŬGQ Gi coV4rbD Xzv Y2DRq$?&*!g?wf4u7~3^Hʔ׎^ ovjzcK?eQ}^4` $BґBaX[_/ew(ex{Hg:|jE2"C=QÕ NӧeF9VO'QA X0Ab\4ԼCCNWʾ{*.'uE L`$x.C=W0V~{~lxysk-+ s-tk80`[\\`5[`c**>sٯĬB=@Z4UAabi:} ܵ`{ :Z]mL  kY2E` #/m.F9M{lfIx*̤8 ^Ne2b99`j1R㟞@g cÙB&u 科$3v5xqlӡ3Q+V#w|߱TcFTK9Niz"xk]+Bu=`~LۙJ`^ETrT֬j AShR)P-VXUXE9j,ۯLjc?juBZ0)^+}+@`R%xP$Mn"Ѩ$x8.߫$ynn!nlK:'fO\gIc ^Eq||aj\˕r]tF3T룐2 5QZ7Ii%jr.ìvY6 ' BJ'˪`!xў\.:'>ˀ&yUBM UnZ";0m8Gk0bm`ԍ~_6}^ܸ%|d.Z]l%;%6:|ZU+6Mwi*9 hxP4<) hxguzҺo4=Wn]vjn&BuW1 RIB#y=|wxT}sn}C7rծzune}~j_>|%5?]n* Q1  ȹf^=P?0"* ^ Kq07,?uzfMj STbܭfl*^ xAu uM{%L"N) "}t2hoT`:tӱGLEԽJd6wLrX[K/[Nf:Bd% ui,B-tl[:^O㍠Ɲ ts@ B8UMEG 4X߲B뺕%wLH\٫BXMPf`?.F ?V3Xj H5E*$/ y$gLPb)Ӕ=?V-{3.&e|ύu$Vꡅ'qKʣ?]36/. B nhf(f$]P 'PF9dF3N\Q PBTM dDtH07_ʳӼAz'&CYѦ}?YqۋZ91A[31}zct͂1kom3.;M"ۤ&>NPM #8_O|a~[ӶG{C,)vvdKx ]u+K2 vU֦HUG2`Cx, FRJXk(;T16h|>њRh_B9qЮ0#cKD@.SZ+B ,/0-%iZ▐]DhX :|D= ql"/n&c`d?N M0P3@W0~xAѪ7v"<BfOMe㶜ܼ$> VOtCkFWw!-8NEJ;4x=doʋ\s [<NH6hxp)^} ;aiպ .դv?z,};N}=LmV;m)9bu |ւ/1u\=z~D^e3=Uۅ\!&3b t0`񩭨AiHG%"|mZ_M~a!kkR+-eգr[' wi=BMO@@!HGU~f-҉BP~;EW$kkdU,͔|z`f4Jsi3رvGD`c`fa,JL?esr*^I]SvV(@,(*JN0r@';uZzl¼\IXU >[ʪ*w^Nsp0gj7Dsޣ!g,''F1P(B  6(2iP_SUXb,+k3c4lvyaӓ10k~-?߫יgTIӠ_1Vy{_ZϚ`niia."YZ_aې]Ԃ25),AE0j"7M6ԁiF x2r_'@t `ݦޝu.Y`\?_nm`wv dUBf?ȿt -X5(SΒ+&\Qu )\?Z g\N?aNM5&(-M77v'm H0@x2ņVr1f-B87ri κG{E$v:դxNAP{rk=7;X_|FRaFnj84x6J!{IʍeK¤i27Lv³ikShBұmkd>mqJ:o,؁HvHtҴHllNRQ ~:V7I-Oۯ|R#?ߡ!U;LN'A'me1fh80^UAp?8nsGbUӖD%ɘ[D2`Cn9逈T"д׊N; "B̆(4a\r1莫.FpPnF L9Q Ųkzm>顁 ȽHe^%d }zr}c@$]t[Dˮ_A>AFM &d-b0tN wt]×^&]Ʃ7]p Q)P0ug87|'b9ݩusv7g}~n밹@k?̭bqDvxp 49ee^O'Z>.w%PRi:ilP.CAsqp]/t]ʬǠGqgtF}:3⮂:" Ms}UuUn|YQݑUYUMUUvUfdDT#0M?8HMy $Bb$(/l鱓`(= IX){lpiTCCh~Wn vqEk(< Mj}JOУl)&k  Hyj?xwRW鱄 ؝w_w: Z1.|٩=FVxD|dr!#L(wt;5 hAnpW@dv[qq쉃Rclǣou;9|}O,XXݎ%.N%`G#8Dy,(0JQ/{1Dyܞ_,X;i j%w2;chQ}K3*X>ϵ|G7uUaIp3>wtL~rC" { g{$-@w3U\_E"7O\1Lӯ87v:| ֖n)_#P>'ۊ[ mpi&hy<8ȿvwoo썙msv9Et`n暭e1d8wpa '34/ݎu+ɬW66i/0p0]qi׻%SEhG⌈q˯ _uR1 ƮVL^[Ɂl@vͣ}B r7(xRΡ?k 0I(";ebTn;YF%rݟM/iy 5Mu0 :juv` )ɯU&E|@~W6m%|˘(:lU0^c!NF,*!WI.~mLNDX.' -ER rd^Q,(wOA,fnT5:+x,N'X>g6n2z;(ƬFנG? jtȧsygug!1J+ dԈ\S)veY<уHߙ5v;!+ `DPADu@w3OH8}K@`*1B̹?Fqñ%=m,4y1KJ_*S*=nxd|.BmDE$P`Ւ .;z2&6q}&PLBЀP͎V8$`ba7y 9\@zlV>'=kUcYFlLd릥6J6Nzf&T[]h\>BBڻ%zo+q!g85l p"A \WC.*Ẹ>$-HKس2wmtPT,uDO-!gCs^+`ӓol<(U;lp,KN2 a$YN~ZG-:}@{Ź1vj;XTOvɧƱjY3€Ȱb<_.`B<ݨ{\m̠MQ ~n9F$wc\0>'[W! Kيvx*SHpΣ@s54{ )R; ڏs~$c#6hzt ֪䓖"A,zZò˾0Y#x`Kİ?$@cxݳ|gVp^V]6E7eCCW#iW`[Yu9 Q撑Ids  phwwMjɃ՜OV: 8 Fs䠘 j1w'~d4WvՉr~<[8IY9-ڈvv!*NVtwt5+Gʥ,A Y _Ga[$MoInB~\X]4[SyHfN9S32V$]X,^YmWj b#/7+&. )7H8CIQB9""+Dh/ڽiؠ"ݲbH7ɣV=5cjn!6Ch'Mt(e=^Ar"ʥ#1CKP?|[up1_-/۴}hh[$RA۽+R[o 54Nj(ߕ96hx3g`~>ޤsmYw ,pieYv^vxLe5,"*n;T A> HhYho\ḰFXfW3uq1X2DQKh Nwav̥ $KE{4tm;gP"U0IN4*K-8$CXAUG*W#=9ZyJ_}9x15BOWТnHUt4Y蕙z)oE{DZ.-K9RHs丏RюD(o>O H74QٺA[?tp'iʜ2rm%6$6vES! d隦^U֙ 59&\01aQ@K'tvF@""mH` HcQ,BɀkBB2A {R_ | ѡ#DFW;̝1.f Gۏ0-GY](F?-S_  ZG\!gBlRLPI C! n} Qӆ,}"t#M))bRGO3OBdX+$/e!xIK@nd߉ F8GI\\d) z5h]3q+ϫ"[a #'lP31D<&P[h@ rIbQH _RPJC{K)3m|To> ?oz0ǖ䵒pC@oe1Q˲DHQ7g饓~-7azaCh'+6Kԃ肨ocś%QCm C޷3綒&Yڬ08|(ЖTRy{fr9F)Kxzuzas"o dZtWNL8` А_(_?M91˭/fevZz&*\ ǕKLXk:tcۅqpi@WmϢf1o&e{ Ԓn5m8]>$7rr4% ~y9SkSY*H?!|wʥ#)a dmȩt3-L?<5;Ow8crP?) 3 'S7C{AjcKQlgR,=j<ͧ忼4f%k i*>= jh TxQLFodvB pW59ǎ≦E8FL hl(Fi,M/(TKNSpF_f9T$q| "w7D"(R>@SjGgx@L@嵺Q,Gߘ' : ;e̓Σr*}tydPw)MZ+)/o=:d7d17iXAB4k9=_+.ErxN1 3FƢz?)!B2t$1]mDZ lY„u3/fc/3#)|O+ྈ|,@1e*aZBJq!@^Cdg$y8.$ `tZmS4r=&oI",-p蟰VFn \ pMsRX|a6?8C.zdc:.LɓP=˖y MR!}s,L:ҲR\Z`>\_jQq4I5O4)tt8M h6F3ŷO͠^a/ក7T{v{ϙ:FD:ASLE ꟗMfOȲC|=WэGjK$\?._WKkJzfq/6!mJ7ŬM<-I,t *{=Ap\`pd>uJ D'-Q\\@PKf..HNNXYGˀ `8=LE8$h/DYd,k)"j0ѬN2o8P>5z]+M6AX$>FM֪OB&p" ]z _hKG:mf#.aa쯄N ɫN* bMA`9esml6G|K׳~² {.:[w8HQ e?0*K\Z> $Iph ޻ckpBpT M=ahk֫_Y^Jzz"#@&A;T)Lpc $9..;G2[УҚRr1-{睚ϢPQBQsqo;LV6@ɧg#ZJ}F-hͯoiq i՜C"9\JnON&V"Axm Ğ, ^E=ŕgp؂0lr9TM?ڒSLJ;.U!,k|L> -Nqis2YwPŚAjWi,uC'% <_0T &N=2uno> -<s,\=@'+NX tѦ\S@?U'ߓaTG_w  ]pHk*[M*\Z_Qj+a/?ӑ̹DWQ@Pq* -/1.J~j{d1ݫ%HЕˠ@Bfz XA&E$ȼ[k'4-X2kE {ttGG1^NsJOi`@Vz7%-Fp$aʉ6DHr^R,Y|3 O`AKޠkK7Nr1^7nkʩ%\J?S/cߩs#b{~ @}Fx#ly>zeBNmXMWqvFAz ֓l!47A9!s Z,2)x_El-Lc9:O8E ]$V f8,Tk[8ptu:?}PIENDB`youker-assistant/src/res/working/19.png0000664000175000017500000005127613260315532017037 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp /NIDATxڬ=hA]L8b`r$-" Zh`lD0"66;m,b/XhuVARZ 4BD]73~ fvvw~{Cg?CV[Z:Cxi!F ,bnOO:{ZOT#tE>/X:[kMW:3mpAX/Kb!E\L-iY8UT'x(lug[*,ξXnϳq*ᲔKl榝ո*EhR4N{uX%e)V`*hpӰ/ENc & ,Ɣ֊'9S- Kw9:]WCޤp OWDW6!W]65]:pwSDI%W٦#}0yȁ^`P@(=JO'cH կVo=-ic:r )Hw755&HMDBQ9n-VakM(KpmU9[ #6 &oypvv^d Tg>`J<qr^Z9Wc%mKƫ祍 n6?6&*PEJb A"snEQ/{ CHO9%o$inLlͬ3d2fZ i?-U8~7Q g$ͰʀMklȚ#!o.qlmiт%X8u'~لv_<,Rlo[O9Ov6Aքr*7^@a?EѷŎY#9Jvv\l-+:ȏ⿚4{~kY|JYT`zOͅup~vcJeB38zPcoF:atqJ$n[zkG=kaܠDhAj/bMP99q}~dt!8h[ƒ/y.*= ?JзSiJvG}G3J=9e7S̷3?*.2[Y&@K)"Mz%` _m0meS}"v qZ_ xC_=m]9?.:6NGX 猎-YO?I/u6k m"Ó55>Bm֪"B[,A*"œ( j|A=E<m)`hmI&3l ,?|?.'U )p!+M%s_5;X<=i1u ^;՗=5~ wԢ()>ꄀiLjGeeAb,\wk$:ojP~K{ghr \Ɠ{kbMB`Mکevw|WqeY"o#X3k/CF+XF?/"@<\L)FBILȚyTblv1oOy(VOJSZoۨ"'a+*/,Qk^2G9<1 LX(fL9vEъNVچP,Z OZqZ9g梺ZNW\xʧoH|_Ko}h /JxkØmBF X. tOf5\!Ul@W'' qUSPZq,Ð_&(b/+M)X*,tԜ3fn.wDigҙ<8O[<}v>􇥜V_!YY?c I$Ʀ%@jK7D&bpaϠ-ѲW< ;PmpfH(yaL$źE;m51o3.ܚ Av`S&zuFIL3{*fǧ84skO.u8| WZ-'Y˜bfr kWleZ*1ت}(>PMA-b"B X⥈Q"jhm.h7&MSr٬ΜsƁdwg?)0rtQΗD $zȫZXn2J^dt00mU(E- ucͤ! >H5XIJG-GӴTFOPE`N^hz6tirRM}ꦐ&/)u T2;"u%@fv(%Taz6EckkM2 %,Dwv:IR%GC+ ״u~N6#hYRy{HR:4~g_hASg^[%~X&$Paa嚛[MdI˾Xqƛ--quSXc|eA9ͬXfl/lLiPsg>:tN;*= i*k9'.+$KiMry<~Uk=b8#ul_NSU聓9x_4RhL_)fSu݇^UWAS0H|n7T2d-hd.v{M_2ք z"$ъ|4m5tuHMFtx()@ǫKo@:Z$> K#AFIyU%im `_qYƄ f`ztKg.ko< ǀjuu1ǩY1%M\E%$Hyf s@t0Sֺ!Io:^mL%At U#*BʰѸBYUK4/+i{<%v( Rsoh[F:8Io ù6߫]ujW@CrKoqH|ZVcjչ,P^;U`nɂR<"Ⅾf6w-q-|]s`-(z)$ S%ZFd*Fx}uE^?*2^f=}^ ӃSe!b~N&>L}YZ˲OOZ3{V8Ԇ@I=5hd3Cox4zAh v>&],5|TE]pkj#~upFtf&<$'6~? 9|pй}9[ X]NRŵ&[z۸jϱ,pa* QIRea,/։83׻N) *Czh=%LtI^(`I8Sʒ$(%9xt~  "D?(RA "R5ZQ*DU!Z$hCJU -!ip(8Η^.{{{{{{ۑN{wy37[*"2UwMz_?+\9ǑR& rAl /rMǩ\lԂ}3V*t4Y 2Muyj6Igi6Ae`"~?ʀ 6 S@^`qrqbVg~HqVNhfQ0 jtS nfNBPIP+^- zA9ȦpҙY/4!hOFBc2Y_ & 0lRt҇='AJ:3n1XpL3d2}႘mJN>=S1cY 6ɋUA@FiPvZ&s:)8&8 /Wŀw{oZLim > e1MtNYF>󨩹`=%+ni벘C>/.f rH(@qW4|u&2s> S`Ukƌt\$T}-4>(LauQ " fM/|ƃ4-s KSv1(Fn S_P~v9g2-[[Fhg|o̤Ш&sYX; DKu4iVG Q>ECo+:vPOQЁ cq*/nAUm*2 9:8+{4˿igE GWn` E!Bm*"ton^H]bg1niAFJa[@Eviԯ:LnAdh!I;>]AOZ$:vgHS+Vͳ}mx(* qA-܂MsQ}t0Ҹ GJא ejk}yjk3T YӚ'\Trx3`37YR-$9$Aq43p2ed>;~c'/ekj((~mZ izPBZg $Y ɑoS`2OPE֠8) O$VD48Z~H=N3g[4/YB R#wUE丢r7Z_MhPc[0-qRs`F#QM\@ÃA(cٜtx+nM5nbEh#bnb*Ef. tM{dkTr#GR`-]K3- ۿxXzz~J.mnԌ Pŗ.Ġ`e̦!7e%rae ԾC |P8ǸAtЋ<9>AN.Jᘝ6Jm/5H Jg>%YIp;chS^ϑMr90૏ݽj_잱K8, Pe=O 4LTXZEdoDŽ)?ZMC1,nxvчg<ݥb1|cϿ@u5A)ΖmrK>k],k[l׃ӿz1T72I9^o t'/8>' "aB ɸHZk֦;;wU@O󐗋Q[7(@`3KҼrch#Fju!l܂  .^hW壟Njq$0exS29` 3-퍶oxP9lڮm2ÞI b/eiqhѰUn{x[4ŰLudWwN=u-ݷIDү#z|z đ=aOMp_7={y/e2';tÁɯg";Ş뾾uϋAx`Њjr@x { x#g~[vQ--W*Gmbc>͡+dx,Ɂ!A^{QzoL@qd) 7NWr${1Z_=lo}cGV0J 9dA;'bҿJ{F^!~'fKE/F~/דE#+&\ϕ] Tff]v9dQ@P1Pby$FcEX1Q@t>=ʒa8xRyzl-d^X)Vrv;B~3mX(n4f-Xа`X23<yS&KШߔ/0g뾂 [A] ܊[Vwf| L@afͅ'*޹iDQBZA=}ꖽdj?Dtrpn$!CxehSvu~$Xܪngs)^,{ NuNxS ҋ9 -`]p3vA"Q¦j`]GR|~ @9C-Ɠc5xX(l5rV9 ^T,|(SE @Y1lQQR:+Tةy,¨/6jUE/'?Uih+5ҴXh]g!/*a ,Xeq^#F cM\s)A_` QJx]y `$dAx8.߭(y7˒k|a +ƒx88߁wS5 u!\K' A맃0ZY^Sw~fО?J)~#;BN{w' %ќ_' f1!<~Ln ɇcd/ke3YH$+;9쉤K6c~9)"\^7ڵϬF\bfXbWz h,JСbޱhHDh]*GS~<7C~(q`A HC>>A5$˰d/Lt[/Ȧ)`)%7͵`{Hw}3msMM%)uDj3S{`ow+X/,2TsM p|ӰOX, bebt"ٵOXtV]l6 8ϩnE.Aژ>^6E5W b{>(r֚zf6\L)@*o LJDYuUufK6KjYd,Y7k:Ki,^˟vn kƜ[VpFUڎ;u"VÜA.H_p:uڹ D@Zgo8ʩ壔'zٹeDoAH{^UdrtdNAJh+K&Κ$*S\v l0P$kQc8~z9P̖5#JḕBFq6qMf-DMFydWepr9>3tGpkK{38Ő4 M<єV]V#.̵[.Hd$J(lUJ ŞafCy! &,NX4ȃ4$x CF e73v=?VOX}㸪3UO1xQMț&Kڐĕ+u1<1#\YQKx> c\׾II7^^)4; 2ЂkN̲ a1aƱ܊bߋ$H tnđL2&+ׁTk {Õ MP`rO`G=*[Wa4Eʔ jճ VN[ =HփPqx6 7N82/6"ph*bj ٿIMZfx)c 4p qU8hXO~ZE:B.4 8P .+AnEY<^X4Aʉ%< +9MN_YCevj6~#FԿfL"~ U[l8,9XƹQ;^ɸZaZD'RrbQPo /'E6=vM<_dϹjYt"1*sb V]&.15]M,:Rt:,InY/ب Ą.Cd r[G`tTc.r-ٺ1TS`NK! ݤ۱VêI-xs" >4%E(ɹ D3RHsEx9j\RTgaAcEg[CeWɇ`I/@{&EuoU03 "N F FEAPceR՘]Qvc|DmLtcL|&$Yj"nLv5AQA@(yü]{[Vߪ׏鮾u_RFbOj;sr du?h_HPU.XG NM:߇-RlJ_}~zُ:ߡoa~D<+*1:C`x׉kOHYlOG+[6N{q3 䧈";Ɓ^?XL3 ĐL8 V7bϽ,~ּ%jb:v |;8Ct<@`8 d?f$`'jpCyP`0'l)_G@_2 1]pvy[P+߀lpܩ@ę`yRX Ey]R1\K\jV+4HytjjN;/C?*hnC?}]Q`b[ٍϼ06q4a@b̋/$U#Q3«~:6Ư9pv-t&kvj@_,4vUOϪ썳LVHDNF~S{Hp;idP]wz~#Q` G7׺켇ײY/0fqpl v8g"n;IaJ+K``iإu׶{"U=Ey Ƴ.zC7 `/7T;kR#r!q]f4϶,*O~83)Woї5&$PQ`mt,) p1c3rzRanJ5HVtUOl~9&P)|M:խQL f f &Ybcc$|/ѭ|3qXb3 r$͘!O~7ʜ@ GG-_JK(%fq|2i"& ` CW65[ # Io$ [$A6)!sRp@.^t(fP'][8=}-杯&PWR4{wWGZR0@tBE`NP%ܙ($$] &싢GoVc)'lZF]phչ5&i=R$J!74uaf{/׋RJ0TC䛞S?N/c+'B&pY$3<HaQ/0!:AY0cz}0%6K+.nY?[΃E0S*B'X[eX[qVU bE1؞-?]<'mm&P_$ANvA]RZ&Lfz϶-?nNQ#Mh +HS0{s~4R_gK[O$LޞH0%-gl&6b1ָi#WZGbZ{LL('W%ϯYٸqi{K(^+E6}"1ϾEfqrY8PoE#-yP`ht`!&]u$_vɗwFg"(dBqE?hpŧp!QF,( ΈR) q < %{VܥMȽ[EKlHI 0a!Fz0Wo6df ݕF1o?rW hl~?y| i- ﺺx^F$5M6&8rTOo+Nc;Վ*΃8?~[Rٵc1gm_ScB, n_Q s`ӛS5Lnoc}_8v%j0C߰ʃ"Jrc܃v;X4w>I}DʓwK5VRYm[VncS[ΆX-t9/0m v)ͥ"[}D $g]|˫tw{ ýæl@t(K }A?3I⥝ܮ"Ub'}Md\yy> X(wC?_; 2[J֚[õo0u ?*PXEc<20̷yjS*]`7V}`m:xI<)*[mоn(ށ@n[9O wc^0?'OW!K.wjj!;v tZZs@A4l@pNf:ʊ),mH'+[mae {zqf*=uXvkA/qhu .vwdM`tQRċb)쒊Bv ;zY=ݍ zk6sPF~~g:]vaM_W<8^\SvO b QZ ֑꠸WZta?(&,~(_r)-珷/3s?DC `Bb 16\*2zMs8aR"Qo"=j|z܌1ׂ! VY5-UW}f -Rt@N^fk=@jdN/95էNㇳ8|r4ͣ|Zk9܂\W&>&Y@r{9M,!P(P<``ʏi,]ɯYGN`ߘmreOB6o̖8)ADMmUFMޥU;ȓ]:bmkS4q{XGԕ0ZJ 馧ʹ 5c}⤘%l~7P:5y3ªqIrS4N)<$V䢑zmDQg{a})_rxW'겴a@7-is EC/]JK0rq \,0;SRk,9 ¬z]{59W/~^&e@D_p`@I2~opԌ $/WԆm ST&SPP2,A[n-_yIt# 9iJW'l|PziBďcAOޘnCOgI0/]$xtMKJUlR<UqΊޮ6[7,N2gTv|𔩮 R"\PJHYVjgt1x]SG^q_ C?`;ȴ$-U|tEL^JTTEV! bį{]Y;L}ye6ODbm^&5ﱞˌ*h-XK'~hݹ}A|p) tƐʁT-(n@5P)ٝ wR"[sٹo+_!6`1آX>I'v(fk$$En\^)#*YAwԟnIA)p ODU|BZ@q{NMLM]>۠bN] M@8!'LKn"`a6rDxݐ9LA%_FcrJx!IR# ~yq~у+i>hǡե|ETk8xHQA*U9xL/pb43Է]S i <[Gblj3r6g:ZpA\gL y?)AzP3AD`^"- eeB^=5bn"W bk]~, 볚aJlMLݤIL5~ͬn3U¥$c)MXiwc 9G떼7uutVZY)Il<nq>`,n\7° P8>v;fsL$Ô|;ձΚ[\U3SrJKEUϿwa#I={؀Aڪʺ L `YkeסA(BA/ Ǘųo4IU(*UO+.~H_/k=A*7ns̔O_|k۷H32A]<\.yHjb5W/HD>SkThE#e 4+ظrӤd{]Q/(/InƒiݗSkNqif4rR *j|(,w7JH|7C Kg\Z') 78T;<ܹο3FGyU5+']ࣃqv^M[+RT'/‡|aNM',_vE"!7 YO`$p0QCҡ{ 2C+6cGbHco@awRdш2&,_#}Z;4T;taq[>iڣɝ٘8|u~gDyRȨ򴼞0Sc憊8hiwͽ{[}BJHnDQ_ qE?7褓)+unRk(|3p# YLi]V/)\Uj D {{a*_Ǥ-:N3QaCjjlW/Pr]@*zqZs.ggo]'t1wrŁ%!IJ"p80*,vnhtG X, bg(MxxMYwgEvo? Cyp'}1%{l7Y40e[4fX@ʝ!T%dd8%qb#>\2񒓪IdQ s.c>hfo7+ٲsTvD\8b|GtyVHph(~(?|fR k|mSm"F\'S8SYUb " n Ò|Oތ;0߁rS:J_.= + }o&؎`fLEVȤS$GJJ )CJL܆Yrr<=pJI,9s22h)h-]kwԂhgJͷX+zsgLdw\]x`` 6Z ؟GNtBtCi6I;8*RJN 𡾪S&u0Wʁ޲gKwd!/PZBǹs")(}p|JO>fF<%"zsh ϔTb$)聆#(r9}h_\q8דL_FEw9lv/nΈGśOf M]8a_~"㏺Cv8sh&i3:aL@wzGwrP蘯ڝ{ζ5]+A!*.b_nN/:*k0 ̝[{8/~q>v[4 <ےmOL*⒪, ?et\|4l\;ɷU!ǧ,vc';hl _^sHG0m+x@4;` 4zPt~yo7)|!-7kyn'Z]ib{,1M/xEl0FG!6SQGN(S"LeEF}j,*ӽIENDB`youker-assistant/src/res/working/6.png0000664000175000017500000005232013260315532016742 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp Y6O?PIDATxڤUMhA~l6ڈVTCE"XbE -B=`O^졠CЃT(`Blbf&;&~f{~[<4 ' ٯ Q]"#p/~&Od)*%7}1i*`{D\y, hbz$y! e >TG߈:;Gkܤ 2.EFʺ &JoDJ`, oթmFrČB`Wb'`۞}XȀS㥧 &cRU/r'o-0=+`rʺf0>E nL/}i޾[tsgn 9F=Wy;Q]՟vLz0gǡoAk:+ BT  ?Ү0\ kO7#hTç5LSQ(U)՚ Zh/Q'h Y.܊a$;0̀m]N25v\J,+'Fq%rȳ'fZnca2V|^D<(M(Rg* Ttx D:[%`_Dڊ ps+ߘ+nmx;ݣz|])2{`d< @yEqfTM$QQQAA )t+Ľ.Qqe !A( m!M|$Q'z grx6;{j-`z Buj-N;yp*nk+Uo[X o]yoG]EZ#6.A0ZX*Ǔ>,4<`_& {R5 VUg~jy2xn-~>,G}l P;"7'WM8CDfsWn|=<n#ő/17cͳ,@1_@" ~5E< 7DX05$0_P(P9r I3cPbՄA-+Ea^Z+E&a)+]5K){[W^3cÂۅZY橂n_mm4%RYegrD^|WЙETc792YcJbS㜏4[s-{(&?̋tޝfCe`^Qz#zr @6F.tsNەCa|e?:qԋI[–nE HU֬.$( _wuMmlu3AP!S@+1Ç%𡠈ˠ+z0^"z"A *M(WW57;3ޙw039|j!x0<zO3nkOs*i A DԬnCVnAKXKPs j 7\ʥ4(|uq`EZ5'ES5𞔁#dJb%as8帵=M5T!\jl\*V.e;_ց:XI8e,A~ =K`sܱ0e@#Z877z![tWs"XXi"cDF"Q6N/B%&i1yB Zχ KzVhT8% #bdfu%*8i7lzO.7h *5U P edmom =<cAuаF"Ei-cl:@hϳc:SFg07 +4h҃ >jߤ1Do^L}M9_{V++L^h2zx*mk"* :±=UY}UTk"x5ࣙ`18gBsa6!jHZ뒥Ey,[Y Q5:_$0g|2{Ё@{h̲kV"vb<Z##DS0N5A FiwQg ,A &`|D*r'gc-A`UE2N%s Qa!U0Էvol\&< MOp- V 0 S"#>9aY% Oq%_!}6`N|H$/1r8T p]E%*NpqTɨ`h ,4$ ߝ;Mz^[_'@jf `!wv0.QWaȥu(yx|*9AO1c UT`[UNBJobb{}a:nL#LWTx6Ytԏ_"&}Mz|*4Fƽ)go V^\EBo;D+ lR\x;@]4v=TlC;r5@joDyYA tw \cxU{aءn1A3SmLV?0/U?-iO~Mal%J eڡkxWԬ.%es.}U}Yyf*QͶ)A}lu'd__GpU+QL@quS҉aϨmdPt ZʞK-( 6猨bEC<$L9$ôY0dxMa$\0}X*~b1vƲx;dv ) D2YȚdR)s񀮯4tBޞ@\7?DU7ۆϑ&#^ؠ-3HϾ,CǢ ;?떠y꥛>@k$(}'9^:{`4Ya?KxIYnb4YL8ay4ֆ{qiס:Fw҃r* K/"yz,0t☽~~ݵ{lv6pp#3+@^ Ѕ<Ĭ*q @8 ˰[Aú_1f_ǮkyhIWdt"WoOtA Tq.dw8ntޟL @N O}ɶFLrep~zRqG]3ŕ o<94RhpJ7z MANt@F7Mm9ިcȵenEY[woul#X/+b:_J"OLfHV^zx=}s^s'M_;VbجGJ*eE-9aɥ ɜ^n9Ǹ[dWIbkJi )_9IF< ӆqh}Ko^2rr4МF5̩CQJFNFL'ESi',e᱒lž%Z;{[b+q*Md`ض+ BF̙׮-ؽ%N֒\}UTo KKc釣?ͪuu1\aP rHc oūSEtK9#G20~<=86 {o#>'d5'#1!*t xŏnUaM35nz"w@j=Jb(uWc]80T@4%Lcx K' lUXXV&ť)3Dz02d [ؘhh?3T/֡c\@JrAͽnl2Q 0Rgm$:pl8F/OF@ W^Ğy3J=9 AﮊT1}LG3Xe݌e~LVZ]էxjTxN!RI8@?g{zY#z0 h??@#՗|;Ў-IK6';M'ڳ d_N&…9QϿ%@#o]!I' CUM`ǔ5T)*yqበi͘u]G:CX6HV]̦l < `gZ*+vWSO( ūEU['s!/+ZeS%+D;1.[SOuPK 5CTGx i?ɟlLqU#`CoKN"RfpϠ b'Bg^\ץXY70t0QTPULV}UHtj!u<̑W/ʦJ>_SU;x@. /ǿFLy4(P8t|yklel:çNFѳC=RThDd1wSZ$/vr w=1,rև(~):a %7@a3Wu1/f~e7,yF?(<@Ѩ!,EGW6Ɋn%D.+%qBGJ<"xv铝 ̽p2?IC,kRL,{\TNh+!{l@ē\?$I(`aG<3Ft=MMhҪl1%.$uq&?$'ncP|E IY/2MG* A\ #Ks}ZMĜF"BHk,p{׊: ς,@vދ$ɋ'1B N%לN]{Ν&*}cѰ'lVn`<7q[M:]E{}qV{9híқB\1 ~F1<=-7gx O/[0{-G)?Waan+B C IA-KLZȞV" 7!%0yx%>$FF6yzN%q ,Ӓ.Ӂ$ T!Fyޘ)fV(Bl[[)XUZHoڵ};EfTk2l(;:3Uf.@E"ޘ~l{_"-^0zѶlJ?m=Y Iq#@?6BeWNn΃̿3ErʡtL߹~0z)YϞTcM?b7앾eeﰑ F>hbt}^b~e;QQ il;̬<;;T8[(;#ؖ"HYܾ yeQp#` Y%|(s<br|vu/XSG0 yIŮlLVR }taX/ASB E*׮:Ig*-E{jpuoqwev jh!6!B?yx_hgECPΓr~²/3qR)w T!tț ){RyfӅyv0^|2 rx柅ึTZJoޗ$Dښ|.3&w"qq|LSG{X~ALP1~)ukř,e[@Dn1pO^8'v_hm ݨP4XVq|Y=q)m?vbfn\놕Ld HŴjs{cz5YJXD3E6 h!^X/h!}edNt sLo :lJK@^Dmr ,?꽞 lik}hȊnF*lOKSr:of({hk5B߲ɺXS\p.q#g.O(D"B4TdrȒŢNnvY~ եNWW9}"֍}Ńt g˖'vi}hoh_f f2oF2nC4ʹjXm˻߭Sh.6w2 mպ5QI [E\ctAx 7`>ʢ<tׯ_=tvy֖yǬ~Yi1(- @КnґI!Zu_ ښ}+eϼ4)*) ۸R)]4M:\mhnqqΔ)|+ٱh]6 gMYMP?K?|6 ΒF7{؞,>}$yzb[R2dȮm[o>og*e &I[C Q6KeXd^p뱁,EZ*xKMl^+BLmYÍ!>\eϊW *B+GX팬Mb(2"yq~[>ԸUmh4E䱬oIK՜H4p^f},2* _9Ъ7XOf)I,\47s:7q*1&~j4׾OU㟄,wWX71w8"xȤ%f ZˀfX1wFt L)}$BʌM m|F  ]TBJsOK%@j!qH:ЅJ]X,^;0{~`a`ޯ2(QI:`:8*zjT8ܩx߹qM I]-Pݸ fA?/7LQaG:y*+H7w62CzGÈ]IݬAL?kV'C_CEƤ6Hd(ml~@`闸q#ݔ,m)Z1~V0s|9oymrRl~r̯ '0GBJ^ʪt&@"`_Ό1ppdU Ne{# z3+k {Hï t XCa:MS܊Oj2+g-oa!X&GD$CgHq/Rcg*l"y&{޸*L{ ߉y(.&[L[*t}*Mގg[봄 QHx -ݮ9Uωт:*3uѕL"׾ފgV Ă\ iTɇB]K93ЫwNQgG̓W}^]^wfvc f)}%yyF^B=ۍ]3w*n-rEQ҃l!,nYts=M~r0 Z>p; i<nw&`R^fg`AD qqIԧf1&b|j^h,~FIԧF?h$$(+n(Ȯ#3۫_ݪwgnw߾3s龷nտNs,d#$c?Gl9ނR|>=y,lcpXQtFd{\\S}2X<ُTmg[Ӆ HK]#[NZwHMWVn ֋mq뵆2Hj ;p0Rۋ ^?! v@ =W)ӹMX.N~[Yw!pZFQ.s"uE1g VM$M$'C-7iHw0"D{m]Y\+sbLf!~whnHBNH^>'Z7v{_[UGfUhXʼn 1Ú zK~4c*,_"" fI|/yҘlhf+%IF?05gǤfμ 34\w~v7{ܷo>GshET;^_9A5 QE"\gWw0%=qf{5h?8-DH&luos0{q_8:wY1z pſ XAd"">ΨES%|<ڼyg Лߢ6v( FٕNq*`\cͧccG=?d1qXV/1>,z]^<-0q>b־I?oYtẏ/jֶX [D,ڀ32͍+{~-O" PDsO?lT&dm$ v;u?1krpPJ܍P)`e1+; Rkų3 ɸ=wC权3b]\M[_ʉ.tpO:N' FiK;)t2y:`Gݞ(| E»j7`*(reLhK X,-͌{uj7~#B ps{*h֣i @gk[X$##I.t9ű#mk5&|']+DD+5cl>L aL1'bgC1NlM,Z5~iĀ5UJ7[qS[6 +WI2dTWKDZ7HMeq,rVD,"1B&QxU\i)bE`!v ǻ$WsԦ,L# !v$8hbpT+[6˷QٳQ[f>PT)8 HQ2˱ˋt4T=!dNƍbZeW뿴\ׇKs`KP{gKy Օ9="I Ma"|M{rtMI ܇('-IP B:dZ]-^–en+FI7eӲ$#$7T+pMfN]1c¼q ~}l jakѿ})#NɎh c-IGŇ5lT*%3wu[Rٲ}>Hٱ]q&͍YIEK1c7RD2Wl>+iAjʋDſ\\2۾J$B=LPhBelFKl(lO3(Q'YFz&XmcƑxI33,Y#ZN:mo:w &%-򳆖v׍)y'K25Lb9Lͻ[Xy=i:&YbG&x6lPMQO0МNɀ o> XmyNAcݩ' 0?o|@XcΛכ'}0)Vy4ޝ6+&&Lva>Vk#bf3ar\pL , v!R~3 \^T nebmpDDbǮInP6-( > spR 2j]DڻM#&鲳{m}NI%3WKp$p`KP[^iϟ?9hY/8$*DR;Ƶ3L # #Jە`h&|u1=_FCe` {[jj? ~$VTUQcSzّ?ŪB. l[Ǚ2BL_Id??Ne.t榶|(*(ضGZhDk)='S`S]Yo{Y?HcxWZtq@ ^V$[.m"fmldr ;k&fOZD>$4IޕX/{/1Dۏi@}, jEjhTjL8g=;)c'>*vIODB`lLaRKp}oG'spVϟ>NKLRdǢi떼Y;X86}Eı߾wx5].NdH1v{XtDڤjFd[K f|d٪1RTTW[$# Ij5_}|v3r_Pc1nkmِ?%J+Xbh4~T/=(ב,uR#Y&;v7|yqauO.W냜VSm `]PT0;7?M6a!~J-~XWOD]+֖`Sc.P],%@[\Lwp^ݤrG$ރgJ<<4)-Dz d/з`us#\>cKPˀ}zH uy5K;;a}jJ*]PaN5TgT{ubI3ފKRV!U K`vc>Y*:s#"kq}oDDe%h2P^z#"Ev9D mɛm/q6l7~enjn̺PlQy+l} ]'|C-}[ś3W6as};\$HGY26}٥Z)K 7 v^<+.xug*J^52 l]EK=EfO|ӿ)4 uuw ~Ȕar(pA'΅PH⇓hJimM@:Jn(Ә[uLo'NuMV?b=|:g85 bw57[9@ņ-͡>JVɅ2* hR#ڋ N]dKc>%` n$iQa9.TC/V%%C_C@(S-"~|IU7G(SJ=X*t1Y&$ wjBFHLOcO2_X"~@ mLc&;( wQCwG#%G!,% P,Hl,UmF' ][ ~)na&yX6X?Vi Yy`'ŻR6׹ lx9ߏyr^Lsg&l,}8L9y'lWܜyۂZu0Hǖ9{*dP*@xZC6dL_0nK1?E#0۝_Kz$TZkog:tW?ο|{.|(vs(FJ!ջpxuyںp̖v@'a/(OR47r7!'Xl, 25EےA#@55$q 2]Ee (2bг!9eWX\8L0hm}r X&@WKmxNIذI/M=d3?{,NS=CrAAfn 9re| ƒmrLqAbzan`]X֭v_TZ"vU9$Q[mCC΃nK^ 4#Kr]GoQo3~#MԲ%WfybѾ(BaDoDv 1Pq!Eb![צdVm5 Tz-aՁw6Bc1;Mv6E&tʶ![=&j,N2ˏrE]0cg_mjhmҊ6epelؘm$`_ ؚ~f^\w\Q4ky#IەYX^H,dL܇q_O;hO_U/S03` L+dcג9oM lJC/T^ϴtrYtI̔D_K>"bSr4v.>܏6a>>B XCaW|aѥT,9xٔk&riڴn6Ʊ7^Y?]_"gW_g" ?p4;y:5ES$rXS] U&Ւ#stfH+:czl9)'0eLA.RseYuM(tU/]f0w_8"HOW35l֧~Gq76o_>J^`.kqTٰV&F֌Kg,8i ܞ~|lPFߠElטf^EB__ߖ<$ BX3qH?߇ػK&ܖR|]Lt9XepQ5&/O6 woFH5^`(- +~ Pu/]qz!>$T8÷ƚeKltբzyleQ.Aʭz nk5z2oL>e]1ù ROUGO_QVѦp*RzˠgټƗ++a! [+ypj֠]_tn0@ SmA}Sxv; -yG"Ô,SL6LX~HlۻV[|H=08Rlt%:4P^!y:ZqLj;V- ڰm:*sQqR^Ps<7Ͽ!2t*bsޯ/ sb"_drߌGWiy )Y S{~ ha+y[M)H-s0tby+IܱFyy0 U^qsƈWc; 5Q{P*ޏ?4/NޔdŁ-PUV.#J:DԷxj"F`w sBZceTjNMjGUu]L3kj-p5W`W%QQ,ph/F6ڔI?%۞zJ@_ӄByJJ}Sqx&&픰ySƮPsgy9t N"ΈJvS : ^\gсԯYu Qh>s*\"ͱuM`l@H;q W$Sq9ޯ?<AHpr1]Do6pe82L"(ߙ7GJ@,+`[jy|16V FX;||E9xڮvC^(3{=3O;?;rŀĀN!pw 2^E2vݽ%k*/'I<7D~m|<+3h;w_^};ݭs>7ݎ8n%k6;M9iJD3[ O  (`:=ڟc"ϽӴ`*uQ⦯NM N8 s@ƀͿ#S?g[}lD4T\sqPR,!zHyͶmi~L]jtxyx{u}޹{\LV֯;Vw؄BfďncM; w`'hq*p E%qyRq亳$xqޗ ;A`\П*OGiГ4R >i+?kP+ܠJR9UxL8D62=KZ ޹ vWW`/dF4ɌHi"HoD6dKZ XLk 4p_z;+8HdIENDB`youker-assistant/src/res/working/3.png0000664000175000017500000005251313260315532016743 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp dQxIDATxڤUkA;tՊU,-zPPD zPQ=Y=hC JxS=A( IĘM6lv!}o~ W㧰L<_]g}IqdƏ!8>ުdƻEsF0h  8xmucsʑQ-?!f4"a[dsp9Sc{LӶj9PSo$ǽʦ%ɖݟs}w +A`jmSj-oJyN: v\n%ӐLXɕӴ^rQ#۬ _%0c]9Q-?.>H*U h߉.nKZc#3pLAgZHl1%Fo<0F7H :}.k,YA ->93ȕ 8cd nY{Ю-]ieQTZOн('ф,oWJf,$_|e:%yd7J/[2}ȑhDV:jXԔ tKa͡թwMқtbm~?QKY>c5ɑPc]u,mܱ H .+ C~g}Z~ݐ޽'8[6g< n#Zd@\`G>N!3:5;khe {#B `c8;Hw@Zk!*a7+vб+HIR9tI0~,fK[q8ǬK4`-:H~g$ΟԱ Y34R)& 0ʳkgTSW1G'k Iߧe VVc)4EK?>€䐰@yENy]ި=\s>VeEhE,|?β.KRs " d\$ZּFG  `9!yM4?[x.S].q=0~Aw^Ճ[Oj֎GH -;zZ<Nc`JBKg֦t߄b-.m/Pp*xQ$nE+(^DD JZuHtmbk7y$mCd|,ĵ\|7<49cMP8&>¸ p%e1P#YAR,L3 71z=6U糹<@UKԯLoDelMQ.s0~IrBḦoBvm룕I];m~ 4X@^*P B #,Q{'otrpм $,%Kxw*Bqy9 EMʜቱy`J 0QL_mQmHdi9+o1]TQI}}1o>*P`ƺd@W4PO?hǚ9p E$WT\Ri藐Y2KG1L+ݴX1D, $PKK58~11 Wք{278[߹ia 悟T4'W}nQa|ѫ^ A"` jj"J!1FP (4ؘh4D h0jh5T$7-*fongfq\ҽ>~7}{b5% ܦV* 43voȞdT_TC޵Z$D.)P76}A=^ـOٳF1% zmBj8tKdp2(!] |0d`htԺZ|G#Oq'@y0cR^{V! 9GsɦGl&+ˋg+YL cP9ps"h4xMu su/~kkJw{JKmo֮[9bmM#| G! cQ Fn ΢F6pL=cCn@O0q*F O'I/j^Coa!0Nc8f1tLh?bbWB5߲l> >4eJQ7X-ũc-EWhSse?eA`GnMO:c" 6uLhSÃ`PSǚEϮ +Vp?}Jj2԰ @)@,&Dk lӷ{7*A;%qrF\̗?%x*Yu.=ί6_ɲ2 ϥ?~褵443QxH0u~VttΝ=d9%kq|ޟwĪ# l!針K"p*:)+"uLON++0)$!^*~e/׋X jmh͸P1fV$76b8 ִtz5bt0}58$t< K ĝI߬~F/#vq)+&쒞W*'^ʱj;QrYAz nu/"3 vx‚K LHݖ9$#(鶫$Q:/^8haيEQzGf^:]b3(an(.By8 %:sZZ{tErq?/q-J4#]lYcq1;o_ټGeri-M&i=m@;:BJ;ljUVZn i?FǺ82uE5e{2WyQ C@EQo>CwwEg/鞗7 $9BGьp8t׫ }uO~9Rv}n_uWwW$N+1N #+Q,r \Vz.<|}mL_sst|Ri.-A "KL5ݐ:ډ#<>ۺϭ'KJr?n~w,+炍U0p}4xہ,w7&rY'sԉ1?bXo]ilTU>I7W Y"JTP# P DC1hcQ 1*.a)3w޽7fi&37oy{wBWn JsSϋ*6(`~I.kM{ %e⩩oE[ bt|> Gfly9\\w.Lf_Q{cUQ@ӴTkNzdz8"ffGX}['B?묷mrLa9Eu/4n¡ E.~r}qt%4<+eLyP(w^jz;ʙf \8uX( _'of)v|~&g`HD2p_kq$qa;t85vts ~*Y 0? */zۑ_,q 7T7[b/?`Qc<Nh΄:UL⌔Q׆1Kp`eV DxFv;<3.kCqS5.CK=8_|}+ɱP 4QM+޾~{^/@_1fANej՘#XsT#:(Ni`@jmX1LfάP@[_4 n&cr=2пJ6` w fJ׵䴑FA'6AG"^(~{d߻/-%]s+ _pkA>H?iglh3'0!n j&aV`6Be&`'A &ީWKMwsw @5ls":;?H tKv [Zgͭ 3I jM1ބL@0?*.-*Mj)⟱jmqrr] Fʬ8"VfKx*^cPZh>09v|~YtC+9k8yŢQdl >2kv촱=yR#h Y5= ;L :|UMwXKWϏ]NLbʒgV=>7*5د}C 4pxytۻ[|a[ئNEGJ+]^jG&񓧎JqY'mኟASW[(@ۺ o3b]ഁmO*JcܜfZqNɠlO7O8w=u4{޺/( hvX-#GuhX$6G˰z$~>SV^K'c_Pu$ӁsfN(A~ħ'ESI.j;hòV6lMɨZ;ǯŨ?ݭ_6m?^E;S[kזe JjΖ&7%N} &DXpM?m;U77[paA2.`?jFDf*GP&Ćb?}6NT1ykWXH^&d~R 83N+Fٚ~7n=+FRgpPn.w71I@t=(Zx-R~fbӶV|SA*dWPGTz0DU~&f-I*'?~,c\vA4soj pd6K@йUI! 2x]/ث Fȃ`5f:f)+:)$l<[.; Wkrp1\hpF0hG6in!&`Ӥ/-Cs\s)'|FR@weDyRۭ ss.Ny( $-hf ? >.uW$CA)9pAqX4Ёm ~EWae蛴tV_|𒩴r.Ϥy6(dW3枫?zT _=eZL~x{?}F78&G=G y󺙴xZy"Z_/ou[y"fϱ^^ Vfs ޷ !T{bc,bΌNRXP\ڧM{`*#]ӯ3ALO2xk=cHEa6x9o >4/ԯy7Ⴞ1TN_ػ誊+:$CIH | @ BVPUj몫_~,.j[k)]Pu*P! B7ケ^m~39g~Gq'@!NQy1ad3P$@Uwo!Jz!l$$Tjh6{MycGc#v[¤SF"3X5/*j #s`SO˟O?95wG3J:.㯥m-UؠQ3V%_pGƒ4/}<F%T?-?9\$N[{IN"4v˴y]Ƈr#0s L~'Uڽ q?P)'zSGPkdy[(lDI,Qnn#Ix-Q#oGOlBm9w gORYa2LC}=OȜ+K<'X *zdqdld[QKtӒ;ku,[Gt?jlW g3HC:wXdbMcztM1 L8`I F> tNcbcPx tZDon27@xph +@4bjDNG-M~"N w&Bedfx7֔-`GC;xpRX2&PM7+Lc& ZX;t8INf"A~dxDwS6 z<[J@ZV63m*, @-Y b,i`"HU qzɕdÁc, +(NP` LOSn{i2#N f#ke$K"FWsusynQvuBnnuva`NghS@/'Te ;c{Mbv>$C@ ʽeŚudWGyJ"lb1WI8r@0 %z}'"W+;B}y0>"B1/&BҤ'l`ꤐUF5[jl%{+&&pLX'ﱁ渂pc2 Oޖty@pyUtnvAdv4,A*8eз\?yT*GI^By!+Wxbsj m^h\ oCcW=ycLG"nu1 m;ّ8i!d Z0t+{yT\AVyO`nrQB6"Z>Vz**Glv"L*؊-mATBH$:LE "Vm0⭪ڪ;w?xB~i9iok#]]]nϒ\n1-aCےD\ ߬ {k9nQ{^vإ>&:rv.v; 8LrA'g `R%O{s2 \rn/j0/ Nanj g ز\nK@Caܚ}WSk?;bWYj-x^ y%PM߅BIfꋳweXRI^@ QW>D[go9\kUu6D0sSq~MQgq?oLtd8Wb$†4Ƌ!IG|41/Ջ0c : Wk82HGk "aP/K'/v[G{vf1I|[G\Pe{y=/M$~cڶ| |ǩ;CĞ6=)vd%6]ЂߦljL)jV]z0ٙE1mcQ(d?zu++ d#o;&-S[س |*2|'Tgo [  5r@sĉVhJ\gD:M {>%ޡhQ` ªEMNaN&j&دl/hTfPY+F6e3=bVN W978dZƂ.F9c>W/U%jWֶzHaq-qk[>Z7%"}yR8ܝ`$с. l-E`">~g55^puOߵksYZms;,B%a  rJ>>[8.lT-ju;u1`s]6s &K{4d$UaA]y,R*zݻ뮟K4.i1>,0q}[_ΫTqGo~ēƺn<GJr/E5\S $SQgsY?J叛`ܘn2N2+qxuehG*\&W<lA:i#6pY=$roZFۂ3 $M)?Y$nP|חNRnddm'6]2E|ҢHCP.tfμ2YFD?qP+=/G,9$rЛ9xanM?l xw\8A!:EB@obKm ABD2eHblcP3[:Zl%;RДqp0)L~A"] TJOCo\URKN*s03dػbiI(d"z#xC;;5qWM.bWj N6(Y^c=~0==Cͭ_ğM*Lqz4凢*,UޖdMC9Ĥ62tOM]i t'ݤS`-Zi C/a?ȳHU&Y}%0P1엵hcNЧ|i" ,Fxbć:|gߧO @K?#<&~j`\`:r9G,~kWC t(Α6^2@𣏕.mI+ 6,=ZTTIewjf``}ЊeJ&`jgB8;8hL(TQ+Ԫb6!p^t6 LՈ61K eStJGjYK@ qH%Ȟ6L&o*`QXœTQK pS^dŏ^J+JwI{%POL AQB}+{y䮋1RPS҉Eov:]@ܼ,~jK>AFN dp1:gPz^KAGLƙ=]F4JgG̣W(7zܥSO⍏XML+&- l XQjfK!Po mۤYǃYD'{~cq*;i8 ޙQyuOϝdL& `™)ʱ"Ȳ BT.*( ! , B$΄#r!L23}_W{z&_Tz{Ee#$S-& @]j 2JRo}Oa-$_(oS~ӥ[D0~kZC.Om8 :yEg+]sMtq.l@B@M%fHs"Ar Z>Vu{wdqV[%äfKMrL=DۜhJb -i_pVn NV5rG !mئ'4m3&#Sr/@_:M۴%.^[R ֬jrL;T6~^Pa3: j\䘣@8rnˍ?,!NHQD,NuknwS[\~x~fU6VcrIˣAxعSgN^X-lg5UQuj[4ȸ\T?pl@ׅkp[ާ).r^ |7 'X≱QYq0h1Gz dSV!\EWVF,v jOZ8H/W8MqIH7R7F`h~a\ 58/"p |H*|VX\EM1 a(=I2{o[vo8DQF>./~ǧiNrecj*DɩvQ-U1I %:^ۀQUeh${e[ōyapZ>/6.Wzk^68k)J%[yJLr;㟾qZz gM_O|+:d9x!3 >*4o{! "#2kDČy9ii-SbAWpٲx&$/V?LlnHؼIؼwLOED]7})H"N!]^cd> ?K8T&#nX]CdJՉd9bD3V ۖt.mPd7*g#c{ŎguQV=qtԱ=ԉ|FT(@=. .r55@o_[*ao)JSՎm ,kI8rw6] rwԫ <"E7VuPELّW=wڳ1;+]n o)`,H>?FOR΅ r^bi_Pt`KPtql}s 9id,Ue1\6iӜ`Uce0w\5öPL]#>vO=aI^Gڂm)fL̃rN t9،\F%}r|DvW/ioྸh^=*[$뙴(*\r5BLyQ"h8t-d݉&x*J78w,1 :1 *HKGFYBw^w$w[U~G\Ll0dp%%ʫjSЀE% ]&~ Xp Ƙ7x,^.,ֳ(p`b-Ԣұ &YA4hk~\h1Rک`5C U~~@u/槹̉/*)Bʠ"CpoƓ-rޙMϻ[F@#'|ү٨4&W6+dI+4FpAcQ:&zR]xO'>`{sςg@&=G&° Re;] C4{7̱% x_o :uBzEgg)5W6"\dqv2\VI^KreI#]S2Lt8ɡY}$^'[*2+T e`L@njUXKGXj>^/1zT>LxƸ]Ǎn=I޼=yI h0MI ":9!p> hCgݷ8^(l*xy`ůXfH]òH=-]7r $ڗSV&F~^/n$#0g 6x݅`ɤ˽KcQi'bq%Qq{!RzmmQ|Hpo06 2?7>55{nj+ ?^̢vH fu *w\݄& TڢIBwkާE/!?9a/U;xca>ؠ 0bh ARQkStʣHޛGܰPeD ǘm'bǛ|+.)QtT*Lr\҈ج9fBavN[[ܝ)aGKuq#U?^bLM QekhH1vzִ]lU?;v17fU56ߠNq14^9 zIu|')\J{g<P5j-cö GY"@y?#)Y]ЀdR7 nR)SZ^076wrn~Ļ?OۜBlSu%6O.J[v2&͖\NQ("G8 \Xۨꟴȴ)Eu*u=O~߭*bfΊ>Y6#zkz6OΖ I+sfnvH:ܸU}IIϖ;q9L'PQ "{{vUG;`{#/;˂fXeF':,)x~r2qlNϮ)GDհڴm%(jRۼKu-:j.M@.I BWB;|o^0.6GhaLE|*;}`ojK>]3|;m$qi M t!@At%,C2yƁbJqŢ[r73.8t.(E)$JvgTΎ`cxcd /ʣ7Izr\xq1U ˆqQͦvGFG,clO.5$N*DpͶ]O/?*ɓڧ+b8*F#^/c=.v- ,5 k4YE nH2Wփ1/GkN$R a*lY<yk' \ңPE{KrƟY!.׏׋j]aGln]*&6aP.B("nvq ܰYlO>`>$A}h;/~_f.NRʁ<~TA&If[)D+<`À5 -:"TsDg3xpQS7 (@hS }ye~ Q7l@`ǥ"w?g{K&ܑ`!?ZY;e3}fYjw8XM1 'l?Rjk!jQm +~ PS[EY=tkH ה,W0enkW,ѱcv)J-gܼr9u85oXBAwQXp8uX?;uփ|˻c{U -}X_TMS% "R$?d#zeЫ㛼's+C7j$M];4 t9garIm/mPoS3yiN5yKu!Ia ؆I˧bkMi&y`>0aP=0ηR|uo^}6 Qu%/  l n0jgb 5YE )rlXw8z/7!#% l _/6KI3}%ȕ}D4tW׸IvQ  "6 ,_2ZZ\Лy]Bk؟G`WI1oMUSs%O->Th`[G|ٿ[gMq_l{xM zP!,`['a5弾Qr 'g ٝwg6 PyT3&.:-%_3Q.q𼶦GSX7Lkآ=C?QQvb8'}nZgjIPt57\lJ|`l|H9yJЗ$.8Ul`{@r.S AHpr%ym2pdDP )| oXzk_RpO~"lC^*nnu`js]O}p|л-l 9/;r<{`1ŀĀ΄]oa2]$W`G\eDf,SB=MI>ץ̏iN_ɗ q} BoGuܼw'ZK%)bq'Cv3YT!$ /&dJvуp_<*ֹeU}GyLPS0Glk`{@8$|w75_,`#|vag_,܊>Di ; gh:KHYV4Te괱uWv<~+Awj`gD vl.XF%NПZ{lʘF8Lr3$x ޖs'`_П)_Ѡ hέW|,VoiV;ܠJRTX?R56ͳ=[:  T%p.RaIDATxڤUKhQ3Iu!~PĢR7juNDlY4tBJ\-ֶ҄&iIMޝws?v<to.'V{(vBw$b9]g+}(U5G@ n-c;~(AI%x Yeʃӷ+b|Reu-**'[41;e'>i(TT(xH 1Z{{Y_<@*_ @UӛU-'r }E@|()x61;#aA!9Txu]8q\^{vœfDn[߸n,UO:1m]F4/cEL"1G9&~/ \\]$̃PFRM5 /ÞٳE:8Pbِ ,a:(j4把J~'LjM30s뿀6ak{M_)?+Z1RD>g!(Qc C2A f0+Z KϠ V XB# M! 5. kN-0wX3,֝N=b h07|3xI R`{To2s&Ɋ`y9Pj 5!|;P  R++ύאA9ÂL` ?@a 8j1 -Š::=a"* w`7_~aM|ʂEq7$) .@E*3?2rXAP{֬C~' mw_E#jV0B]vUTo ?Cz@,?~0Q'G ᭲Z&`RȻr'!.Tđj h-LRMBQ gUoWTK񭛨(PThb%`&pX4B 9" 9;+"# n86̊C WPG@q0 `9O ]ߋ ڒ՚UӴmQk ?txh>X(1J! D4#" $ˆ@ A> ! " $SRԡD5Gog{Ǚs7\23pwZדk!YxiVs}Ժ-VʺIGntg=Fd jYceXAǻ#i2 72/7>ZS5Pg(keoaLHX'%T&d7Uqq[\HUi=̓w)INv Z֜L:gUG^l#u'..Eį;—6PqBm4=K' |N o}|1wą LN &BV&tR8O0 AXCa\蜫L hlę,bl1E܂=c.?vZ4 anC9pꯌεWʃJU4zy'i#'l v卤x_O?{ug#:겣vP-@k7ǧ/~myH2k_;ieǧ׹Z=noxg$4;so@9,{{߄SFTٳqBOq?'j/Y\gJlwcI"#7\lS^Ao;YBlB$N\NU\ޯ'f|Tj $m[cwNx>'8X;1l3B(Q'nܽJt7gv/p슐mf WH`9{Y' ^nDn"G3Ʒo#2#RZbo8jҿtr; L*//g3f8&2~euU-"51?G}mVJ'TpND#k?Ṵ{#%V.^b6 (Fx~ |1iܒ%#'9aFցčKTsCk -$z w3ZjEpk ×X8rTY=0µ{9kws$ՒC6OJQ䂃.\w>Dv%xyH1j yR"G ۧZ`㨮۵WĎۡq-H)4nS&FDUJMRKU"UJSDiA%EZP EPҊ&$ TLHClرݵ^yo<;3~3k^e|ܹνSBw6[箞CtGO̕kE?K^v߁SyE3 7/NA7l`!ml=Zw x6:>Yv3[<M5IYb".)&#3 N n|;3(1k46I&(.g%bWa1Fϟ+`D6K--+CF\' HDen;OĿީ2áαXT͚YClί"6l,>JppnlQٶ]\+.iVFþ1nEfpCQvcG[C"| cURw~w"I#~CMFyk| I:y[1r>A7_ܺbtiDTyi \m !lgUY`K$l #3pY*ORTAaIN6j%[TՓ]pЎyRfMlΣZG,ןΟsr%꘍]?{#&`uc՜HQ_`ԤR%ʚ^'he;|D1]}Ю@R(aN>:vi(L z/2i"74#8zz/7_!J7H{{r}u;F+pizm]+Hd#^Rj(IWX% %'g?^:y6G^0;7l@CU2!.-+gWk||gm?x(ǘ,g#:UAhXr߹j1_QLȤ/cCi0':H@ju`jRh-gV&%f3FtƸKVjoc7Ӌ<>{ͫg~c*7aI!zgufX} =4$ |rR+781ucZ㡲' /C["pU^eR$knnSxϨٽv䊎,hBkK"hFghN҄r#X'Hi*c]mJog{(jw932gݖ_&{jst)NuzFH)Rp%V̤ ,uO~7پ;űO'i?Xn]H:YHiRu~vZ# RK2hVAn`heTH(h"ZAomxZUEڜsУA1_"K2 ?D&|דCJ<6c#J}g(1WtiXhW5+[jr 3=P,'j؄|զJPZ_:DS7ᶧ{7ǒ\*jZ|<{]MI&㍠!r,U(Դ!7q>l -~y:[v{,75ڞYm~mh,ƪpȂȌ),ΈQ%cZ9! GũQ0EЩEdr䦫/_NICA JZYfГ^"%>bDJ4S~ãdBd(*!e'e='h"1A^Ea7)&7A%߀}q*g&Ô~<8 eAǮ-%-vՒG'lfZ#8/#"Y|iO/\^u0]D-EG}Y‹cHUC79fΌH(M 7xl>Y ViW\=e#mA#hJDa:u٭S'yS*@ slMGR,ɀ+Rwrwl&j^Uv:dHn/f?Rnϲ-Oj,Rཀ|i,/@dXi|?ߜux RN?UH<6Js{ TvVxF9>.67`4'9HXL?!m6#٦ޙ D;uXI ;  + `{Y4bynE .Ш@fm "}qb^Y4_>>Oz`e!"P0;=7 O,Q^h\`)jR{ZbA߹"7Qxm.Н=_ \A·㍣i-\Т5w=o;i93z1e؝?l(4CͷK0HNi'Z$opm" Pɑ׷٣8n?: V'ApyB ?y<*T") Lh.5ᙯuW,ST-f:z`D3tmZ4J=lND&*nm팥$ ]Iq./|Ll |{=0dD)j:Kw3ÛL ;=K~ <"ͶABB%ld+ ؆,:bL}z{6]71#t>K9ovXTF"ֻS>\;DkGD)7wtU$Ь݌ٛjZV5v(Oƕ6;MƥF>@)GPϲL=?V Z?xw-粂IGUR.sur-y4/z2nx:_{/V=Z9 v |?oO(HOX&:d|tRuc 4xPMQxՐnIR\!RXA+6Ŷƌ<"j/J pSe衺(ծy. Poq{ul|ӯI#r-o |T ;폢&4Zba#iJ@$ekjykb7sóK Ma-`'M5؁]d5u@ :i׈\/+̨, Xe1άej B2,qFXmّ1wypb,1fAe;nRZ Jw22OVj+:η;M㝢hi<']1{VmF(V1aJ10xIТKEQL5)؂#Dm[ٷ+b`wDu;s) -Cb:/+鿵邽m7Ѿz/^ ^RxԍLz 4@RMnl`A3O0p; {W侀%hP(g{ꚳرZG{Su4rljÙ֔W׉Y%lC>%?=qB\`ٖtVP[[ (_Y!\;5eG,~n/[(oO}tk{ܝXOǼsPZnjLR\]R*IЕ0Q./04ڬġ倓j S 6̇A+X^{a{1@aP(Q.ܽh6j);v%ִϾ)AO{I&s [C p!Wߩ,??r-I[5Dř(laa^FkMUFSAȺٶUlo9头=eDu&_>r*DXDLǢ>bEEh_u>N4x̆!31p.D :Q'j^gפ&wmM,E""V5X 6%q6x3ǫꂍlm2>SЅf^r֓'L|fj$p"Q"lB0ǹG2& bSV{oxB7~fa) >^V&l4C*N*YhVyk)6b2TE*X<2zRN: 2-/hۖgv*LæM[hIU]y՟>&$01bvMܵ |#kJY6)-ٚ%GwR&'4),ߑGˡ[b|2L0bxI5`%4iǮB5"Ys3!(55B; SVZ@GaYF8Pn:=8>+C5 ^Džctt3݂TqY\4[hj4^b K`?heMiZ'NÇ}1_P[nŀXnHF0  Tn6׬ tZ07[Q|q7 6{8"FDu\Td)1%ѽK0ؼv;ElEMWMF:Q k)3J4p]Tp\?l!Eތ$ w5L"|^k _VNVYz|%P[(0apDdg¿O(D^M%:&o :b? }k= Ђ0\8CDc^WU׈S\Өr~Q/ m4x&iVf[M`s<'CغIG [SԥhMfExQL,3$&.NJLr9-;\ڤ)VaZ"k\u`w[:@;.(Ғյ {.Ai_-B{Q_fY`s![# ovw~ H@d &ߓ07;Zp%FΡǭkAl@v>^0)`?v&uy3h~)걆k:l)'*;t@6r8ɼ鷛6[Lѯڝx+M =SP^f/wc {2_AT첲X}% SJTJgTzW'mao51VfJp^|V}=+ݵES]L4 b2k"HievNvӳNfh|6̤odA?曩tr)篩X.x/^@StS~#57=WfMئ7 @ WjP_2o=h#8Y &j|:@[~]|3 43A@!^fC?Ё_ rС+p [5[0Qy-:-#um 22K3ЛJPEw S75av6?W4˴ S g*DŽjf'i9ZKW4niuϰ4ڣ -F@tr1߳ȸp[Ⱥ$97-&8[w >/*h&`.39Ogk)hšMÜ擴m326aj~C~/jr_W!IA @LbјN'؝lg=( Ă.CE{rБ q \k^+ 6Hys=F4qw|~T{s>n$.!j*<dw%}`}~9Ӛ4X3^ǃ[t/ǯӏkn`{ 2䏮̮so8Үd+ַzefE@D@4("BMD_Q_(yb4&| DQ#$f$b41 n Aaf^O[}gW_U7UnuOvgFS< 6,K<@❴'mm`Scw^C)PpU"o6WnB֒XH^t ?$! DWKgHo:&6VՊUM/A# g/H {}FSȠs`{cQܦ_[)T Zirqb؊B #?NR`w |?m ! w$mqT`Ew.首zP1ĞM]"萡 ̵ggTS hvg57eE"@TVzR4Hz0 Y py3G2w+)BfOn wU+N&G9|Ex=>aqo' pɢibnTC"8Jhdy1yC+-mf{K'oFWL9O%;9} f"!?E0iڕ3+n-A*8:Z#}jC..$%bd 8*CY!a{N_F{ bҹae,ܙO5}[*z$X=FdzHꥈno E"M=c*Ͳ'h]+O˦M#Fg`^w0a1ϛao {s;,DL@qyՐ}ԡ/mc4u $;26$#tr/R"T %k Ga9Y̒RUϻ@9CiiQ,={ۋ Fv涭;a38/yqx@҉╭d# U:ݗPHg'` t^n\8Ko0Ǹ]ojp~efbgG$K+[dĪGzN:V}j>lD}Vwoi#6Y<ʨPɥr^L#& ](Ihu}k /i53=i?\^2QNeoc1IOT=u.?Գd}ksl5\1j6M+Bb 7z9t\{.Ru >M«[\l^}AuWeN8 ucnH/ȕooNe7M66arAI KUSI 5&zY`o-ɬAK6c\4sǖ )"xa!,B6.R\`. +HRQR1@r8st5IRj!J~LKih0uGSWRofv4 E#1fZ֜&bT.Bbmܙ 4@$m+u祑l W#bmHQH(DD1b V3}%s]4jnQܷNqI{ 2P%-g7K I,Y0&P 8k|N4,_6R XnFvL6Tj 0AmӶehKK*RMi;Lw)R(6J{$l[v2wi4ShҾ0S'ƅ:D O GۑÇDu-b4 bWɧPزoB!Y]zߩ,퐖h e/Бu X3.XX^l[/~,q  _S# ۄ! (-P:1a C( Bn+?cG K~Y^n;,62BB[ф'"'e;#~\gaA;ꙴ0GCI!43kE ɺкQr `ř% #Ǒ{lJf0aZ;X}! @[=Q17|AO޻\1tpDGN|4E/ccp<}*wb|)9isChc.fEŰOjZFT/,*bEձ<^1W=4_ʁ~ HS9 s$OACW*l-q ,L~4W2oꝎz  >jF,c5>Ĥ<{%TBa3w~*.}qMKP9AN Ge(p1W| ٿW^VN]5Ѹܫ ( {fI6#!OZ:bZ"d%X>c At!St9r&lq#BA1CsHǑx,,FnX 콨Q=@ A/o儊9c* gO?q^sẅ-S Hվ'?XU7O'ܧKtadn~/{ל(٫aeA4y[XM/[84/eűǃ㥲*B )ԲQ\4N9\㖸x:8˟m d G~rwcqlNޒם@y~} ܺVxLQDq[ \zjѦ?!~6I*E$cL pG 7LM5802bMA@2w!븰,QrN=cd>d>>e'4NMCChDK0bnSapxs_&=6ưmnˠ9P ,CN;9mQ^>1f 8\2劣;ƺZPЧ*bKHԷ~o-+ͥ[#d(t&6\@zsBE'C1DoH!Cmʔ 81^;] ґY䪨SwOo:gYmG!DNn{`nhldܱ`VjfqߐXQA,4X6pD&PU>/~)L0ǟ6y9-MM̹ږi'Fe!ȠlkvufGۋFLR -֣"(Z鄁h(GM]s xN1:Q;"(W,[7qc$w9?lWWS)pj?`z%ǂcVߠ^8kN?*pTȽMlLoņPSۭ mME,wVT4U[6tT_?`LZ>r=fvmEyW"8Y}BBy#;W([}1T9zP-raVGK)8A\ܴ~MA-P$}򐾬A}a)%$Z6.3=kydK7(8gsqGhےұ;Z@#*=9'klYD->:i:pdC2i 9$q‹ջ?ʃf1mAK[;Ŭ%o pPyOq4mX#z'; hTu>)N($Y2G߱=Ȳ7ŐpX3iAMiTrg)Xvrm(BncWfՈ+EIV9.]<,Bs~^oUA!z3IDbl `p$PװRGBbJ2jsŰ5z7.CjIUH'q,JiQC#>-B*oЖV"I4(x] J$c9t{jwH׾ ۥ❞)`/t| JW%ɵ`8?,){8x\.&zvh x>4\%J|XrnCKMz&+i̇V OHQVSV87녧؆דas<_pg2 /vt/rHpVPÀTX6D˰&}D%E%R5%(XEOA,4󖎜G܇tY8=`h߹nTy{+V?+cK%3677[,JBRTxjPĂ2顬\ egH]Vq{Kn/S.霈9 QUM#C<QN am~d;,qOg'͍f.;*֮Ջ*%Ӳv#W[/ĥt2 ܹGUwV8[>ҕSct #WBG( $LoQ+[-#]'Bx"qc^Ϟ@Z=@[[4tȁ a4qk0s3 -i֨rJ>7s: Ž*N)`m<14J*Ɏ |G oJZ(1D T&&DZqAS L脏+85y]B:SLmi9 aCJfԥ$yq=`'iQ0xcN<?M,7gO#o!6]h]GJ8B`{nL 읊I a'\7K@GS!e@VZ;%n,G<,BABXŲ#ˊ&d}ʧfQs%{CO~}2GJB)I[j=cL9,EK Zr51a *P14>N&I[{^7#So"II2r+;7Y-nP2 読^&NM2 񫧞u&ƧK~^a]p2NLj QBY&XJKt{Un%!4|]1nHXL^rP>m<>#xO^&dݙ"G"/ן);JHAr {n[YݸR%W2DV5P'VViwؚ]?L\Rʮ =N䤉7 ]:Aj9Cp7toKd)0uw`C\@v$,A18*9it[8-SZ LcPF+a l0 3@I$"y,I3N5=>Cgڤ&7M[Y,kE~DSVimVytZrٺKBɓζt61l|ű>hKTqm}͜P솄N)~(NN`Lxpe-1ŞoLRF[8Omnmջ\#X;Fjv`[>Tqﯞbxq p&;O+nˇ))HX~zpB ay/ .޾;1gtMsF`~6-;lȧFڮѿGDM@<~UZ*\">WD6DUpXivcFs!!/?L`~`K;Бx{PwvwjYL@bʄ/+bKrCro6hI|Ċ4|g"g}~8+v+!zZym YB$?vxomʹ{ UY:y-7g\ `Gvˁz{9qQ+0>`CSM(gםGEgmi{`w]_I%Q4's@qQnp?a)yYnl`a{,1Uox P;IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)Xf G r-F\˅1.O9 ّd%GP [SA eJTA^UJ#<,5s`f7Hʥ ǁH1\W@a~?] ~NV@ Lb@Nt,$r1(f* fYYmKN8е68HlUQ| `sלx9`ry V>PUY*4[0 ,P줂@1۴Z"ln 6#mZ\OU]kk!r(R?(S fE+k`'Z?Q+>Vg"0KvHk8`DRF(§U*ǥY /\Tw  BN!oB7_#ƗӠ|8Dv'!֛`,.(.YDԓcu֖M~6:<픓]M.+dҞj`: Y`v-\~b7UT"WpQHR;Z4iH؄{q$-\ NboG8Pt@Q${ѶsW=m,(۹mU:L//a7,FU鲻-eE [ZIiAQVї&"׎IQe#6ޔ/D%Ϋ5W=^O,,0X|d`Ӫ9/9^hĚ*wkY ڭ`l|-gF~t4}{ 2,^&Paa[LęN~hX}>^ʋquSF-iXբ-/ RN|$>({~lH+꒲ [bisլ FXUS%*9>:"+_uc7-BI2," >g6ݟC 9{2?¹k (0uu8[fU߀LzGPikqlLNhToD"*W$DΔBU",cV/ksğyN!hZ TY-떳ͫVQ)⩎9E͎M3Ae:9?3#g{G+YCS#~Zk]D==q]amR D׶حsC zbl/ɵL3z_Yl$} &RNP݆ L=zlErguED0HeQoK7ZX@ΪVQ\DyݝN41uCٸa@K,E6̋2e8!Bx:V:3q.h@`UP0&#_l1 Fm\s?Nh5 bHTHŌ2|7v@g.Y廧2/֔k D:Y9~!:@c<"u ɸVZ1*k# |M.a`S9שS6LZ_ ~'mhh$#m'X*!Ժasohbf Χ#aK{* + ) ]5),:=aj4`0pʌ<}A,mEY { QQg:dc^pfFY63%nrA൒Gm0$܂*1C-uGk-x5[]-]L#k}N5#jd_/|9K7-~TF{I_Fɦ'lng)e,ZɛLx@ y|]z`e >;v=PFAM@ gx;+Υ،Gh=zʖQ?lLSe1P$ )9@ +8@g3'tEv,:rn↧ڄ{&v*0BopwqW|`;؎N$& $P5DJ4Q" T(m)@Ţ h+*%DT|BWd81؇-{;W۳ݾto޼yߔ% ĖGn*R/ӲE?+6+`+>C}%E+Sd#l[):|O»`sArĥ+0 oHyVPf-cs @B@N*=v%ȇ7Cm"]. xӚ,VZX6#*pO> |se`Pwq'*/q]0SX;OH /qaP!\=zrrVvSeMA?l*XN ?J!P rw;c("Ȧem'Z;_n H e1M6tܫIG!iѢcȟ $?bB7JUޯa]@(?4 pNR~ITŸv0`,㩷WtbZ.],*hx _ CzSSp |7jE9gbI*o K[u^Ae4(4D _|`?;LNLbzev_=Xg]7%(8'465Mnx ν'00ekupuKm`*hk nyDz$l]68uoܷ(ye#}Y-O;|7qoL{,lN'j>R_5xJlUPԐq $zqFRq-v*?D3%`c&x 4[DNc<a&2Z~k[N a+l%IXVU~CkGEUy/r I`:T[h]^Q$7x1*@BXɢ @Q0]@E#棘>8tiU7F}]fO:F?i>b9ʠ ״mK³Q(e k vZrܔ pK([ mrQZ{@0e 7/sFudI Pqǿ[9.nk %-d1AZ$L\L`]\{BGHM}: E(,_ECqtWzyܵI2fhq~h#b%\1$#\L`JY u#欬IF_g~W]z{DjI+Se7A#mt9{AL?.ECvO'?-:m\P2"V N xAD0;-.I8/( uv?* (ka/ hf"0ĸ)iV#2?|:tgp%Qx3R5CHH_ 08ojc$Ll UUQ\V]z .k%4v:RO/?zLo?X'RS3GY%%f)L aҁSctLI]vG=δTwa7nD4Aaκ6oT\e$$/IP@z555ڶ& yvʿ3F!8:1#D _QC~㲆<")AAeuݽuT(yp`gm{ \ i-\вjq_jkxFi]cXop{4wʤ^Zt 6̶h%{Cgc_<%2~mru3Qxgk YK?LHY`dL޻)-QbGe\`vA " ?9@`HWiIdM,FT?uT5GťEi1g?OA[MA>n^Kؼ{GYlS$yv;`mS0^=۫`S<1EC Rw.ЎAA)o?Sy>^`h<$C ՀTQ2IaZD@i Vj#s7VML&!əτlUuɼNLxr0OԊWh`C CE`X7I$mܵ`ӋΥgQQϝפF^1%Yd˖SbZ2pLPJ3xP{1cFEI X6r&pN_Mn],9OzV5H!" ~@#"Ц?Rm8oKÛaʞLؑq#S5 cy9~JSE%qtcLQ@%u$:O'bl] 4dtr|V-|^_$$T )N ''z<݌ʄqFFnz ZٹcX99+ ƚX^HM3 s#KVK4ªa $e96v-Fp ![`L䦿mQi7͐/VteuuT oʵGotGP>|q}Q1$8YTͱrY~x g[*pxJvdT֖f[EDs[ˆpR@TON95BhKt.yq.Q*Sw il%ݩ~ (QP,-7m 6 V Rq`󚴽lo`Da;~Wi 1o?"+(*FٍB d`.V([!bQ[k`@֋BPAO6JGVN{(rzn@nF}0f# :VybDHE&J*R33;m<۫(&c?4wJFYPy[Uj̮ueR!p)ըTUbqN FTMVa^jstwc #27R}b/Epqs t&W}& c[vnDdp:m Т|{;ϡ=bU?(=S ^=ݗlF]<]i8SQy+QTc#&[Ι4wu())~qO$ V.uK9&IRv'-3籆SSڢo~!݉=\f"Мv'%`yL)}QVmz6(_au:X:ND=ö+zj l"!Mnea'&F̵¶f;$\$n0GArMSaf imOeXO_~6D| Z~X\h4ttrne&SA <7Sz&׿<>drMX)N{רc`祫u zhn 4idzO*2z.׉$P Z؃ 3:*}@S$LET$;Yhs-3>g`1C vjnJ|hժLa(jT9;rk*a%-#SUMSBv ]+]5/YxV'4RvJA58 `*8FuGe@z7k>1aN"ƭJXSVz?Ocp\1b3AwvGͰߡm"5QP0Gx's;a*h`_2wlgTǨspϪH HV S\sL:A/C4pS'1d%*Gt2G05A<)~=P 1| szBWY)~+Kp,u}y߹(9oT1yB삙$87fGGT-GYQ'},֘*S٘p]-۪$ 1`fX;Z4ύjh9i"KͅM G:ĐrJ2/|bkVt,,j-Ao3TO]sk\ttPǘȢi<X%|EN uR9cf= yDfԈGfݙux|  )ˡߡSDPJӰ|oF"5bUE -Qg'kuG6S0fENO猣Π$F4si2TD){0 +7=Xݟ>F H* l@T&J|ArS1k`C6 ؃ vbIX vQu-R#}Dm6mIM7CEo{>iC{_&} %H(LHl'}UulN*8wΏ}\1=rO;3#m/@9D6g2itЫt܆5/$>?b4.baqa9ؾ&u6IwHee!wլSqyt[D!z7}+s29@߼4r}8RfE&qȬ&b1PF_*+n6ZmHl~f!b Tuגl :@.'r)6#OH[8ji*A"SM蛅 ۏ(Yd݋KL-DS]L><ʜ Aݍ]1VŁ#A=Ј iN ޓ{_յHICXd#.=uÑoU2}X/5\l8IW'\< ~^$[Qg3Tö <9qlPq}Am:dDs@$c A.\L)#>G5Q*݄fZqN:vR X@Z"( y(>p\ x\;QkR(fJ;bB; l6Y!|m3i0'dqHTJ[T$R(~lyY;s&1@NČtx̺U[P/%Tc 4"| p lP()ٝ!*$Psv{Hm (y=kYP_m,6 -o}š\tx$i@qEYiL߽S Qq{$uL/( YJϊ:}3JKf{Ư5g) Ą)\ )m]AsRБ wջl{ScvXS ̪I!j}{I}-5bTΛZjxx9^TT31 y0"|cwzUCf[;ہ#(ꏇ xŕK%m`s$͆+pm,x 6  @l ,G# 1`s6|[% YaslzjZ#gg42zLOwտ^&k$N| Ai(@T>VAZHbFI* FLg6_TL#))EWMIGgsl ^R}j^{XwXƆ^nmkL0b R%ﰉ*_~'%w{1bA6a[NF~}K׫P+׀%:w?5 Gb tO[)\ϬJ]v̪{ TP>N␎!XN$g4ir 7YbI0ѝ&":de#1zZ*n45v`.ղe60|}ɟ?N*@+A:2Ѩ·6BZHG|u^1~SU)gk%iܖK'}2tF""ӎL"8= $9~*豻D~`~ѝnS8ŖLLC{@+2{.ѮCP IOY*As l h%\/ݥO)RD-c ySGΙ-q `K@_9":ɝotیȯW6oV8:cX֮34!,*O]pZxlF _.0dݭ:L~Nl3xhNkv|`q8%/+-}|z/VHf. 8  .ty*ADKSH>׀m?ty&/JY8g.IM#\]Cn@WD؉vLIݙ̱˦Hu jZ%Ԭj_bҠfL=-{b.LuSJ1bǦD)`ql1EInYpÑhߍ7wl*MHS}^ˊSUołj]%^5AIV{cY*PȑMYX/>*LfHn1dE|ם*j($P1ӝCO}Ѷ . { ¨>ݻ,)Σ(o` Nd֎JJ+c~Rʨ&vP1#^ΖO?HWՄK໲l-z+tM?I EsŴ5HuA( 0BMk('̠NpLϻ[#zPlնIq8ao)^SA*.woOՙ^vL ɘUDRKt5NsGJtk=7Dt/>_̬r/>b1bj%^ݒ{7dĸBU,j64gDtǥl!MɺÄ}h#0 z I5fQWT%*^!BU~9\qq8ɭ\_]4N&*^sڒ+D,X[҉K**İQzG׉v)|?Kr>pmǖ>׀;uYyd;68)d3TU6!1 81^Ssޙ<徿ogWn3KLޖ (Ut1bS;kW=VȑLRS=5L)bXF/X2ūth_[_xymF+OpklځFw p֨ýT' 0brxM'UnYGO~$ӢJy1ƌ%Up]S쪭Ȁcjj  Zx:/ҽL0i^ٍ{"<i&l Y)(MbnWZ$|LR]? Y~AĀ-cJO. Dp]\E炌i;`0Lw,$)6>ӼĻeCb2خ] Ȝ.P )O\r\Xˠ`E] =^fϰ=߼ʚ%dZ[2C 7[4nXL ^,<,{7ɵZZ]luڼ&΁/"_TBTT][n@ȞǁޯҜkusdIf^)]ROW;Sk)1= =ռ7JJc!hnƢ|P]} } ,)1?Sdc'(lh:#p9"/ZD-ЛsJg-s– %p/ԏ|L^⹕3}p?VC[A6 }"Sߩەw/bwCZ-p3g Ԫ|4l#g--+4\}X(akwJh쎄#X4}d=(`ǃ" nb΄wvA׊?'pB|KN|l2eKa <_$!z"\ MY@ˏ}50H,mLJ(E] /Z'Hu Ĉ3_56ƒӂXQ2R.p|ܘHMrbAӝ:h]qd'8QJLH8$ 4 $7Ā_C+kYPDlY**H4)! pO1J|m(ri]x2&nQfzWv̖S4dc/hp7`'Ƃ"ER{ 28dӦJg ^TH\ڏeiU0ay,G6/p枲AN]dYBI%yثVm!"9YbOSc`7:-lXGZX 'wT5/;wI7,u[yTT rK6a}?)UW͜euʲ܃8V7g'Ow,^0 1ŽjVx/<I6zɬ߿鏍@|ŋKVonjrb))+&6DՠY+KX \҉ptڼbLsсfIV}ti`X2#0k2>\Υ3[jk@'DF,¬"&cS-C|^T^BN7e|B C6zSm 5u]}d:IҬq|;66ԋbU /[W,QiIrO sdr\EĩR/Z9>M)蚦`C)-?]`k"RUS]p~{I4=h@(,*eݻQ eF (5g|?LDշd|B l2&b=hR̈́`+ʇ ќUTwK^M7JPgzvx־x}z8.0 D:xu"oܥaQemuQh4p$ֆ=bmmRJ3.)`LNvO51۵`E 5|KوZH?-N8-T=ߖȧyM/f@Ϡ;Jqijfu^qu?^fd&9m1G> ~.i6A@I сѨÙˡ 5P̠-Vubql#/$5FR>U>=֐.]3nNg93_V,F9 wg]^'KϚ;d.ឦ^]plEe' }`ۢ*-D: D"",6"G* s*I$%Ankmh(u#˓L#w85!fk' BSq9vW`EE/x͂uxϙqxpI7;(b: HH)xVQwfv)`[^>`\A\䊔4mϛ2BnchßU;SݲUqr]ʺHO13 03\;GMxk,1~gp J=9ߞ%fFBpdK1ݻ)| IcgM!WN6ܶ[mX1 ftBzֆgض-+tDZv>/v:mxnHYDzn65`['a5弿AҔ&dx|bj%DSGkpSK6y^`wVD dHlN̙Uq׃ӆk@G8+A2˶8os 8?Q*, G^Wgs}\3Vvt3'OS^ϸӽ\}rkP%%w'N#sXP򴻾MohۡA h;XgEDDDU҄e**@4t"M'qsN89g9i~ekǞGi疬`A"l>7\z5`"F816X\V *qu{yDD:\(lkJ Suc}:&UrZ'N1BbXYvJtw Hԩq(} El/MobϣomjzVAxPN>pZ2 ޮ':\ y9{+y>ZxU QM'nBȓ[<5s5ةR3[23 lbl#.;ѫ|Vuj`w4Ig7BE)'HYtdt%eHip1?K[a=e@=f3}c-'hHir(UMS,lSXY |*#A.]tZ P4`1]?SU\IENDB`youker-assistant/src/res/working/31.png0000664000175000017500000005242213260315532017023 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp |;Q?IDATxڤkQmhkAUcEhzP*ED=X^<ؿ@υKT/zM(Ln3[ҁmv?3|gwٱ5Vd/ch| MzԸ)6?ިgbߙAci lg3<-^ 8/y} 2hECͰ$fq.kȕiɐ1 )mT\l> jXڄ/0q> XK=)=:dy;y󿠆Q-yz:M[J,zaK;[x+3Klj8Vdŵ а{*Áam'qA%+Wt* K:$Nm }aQTNp3lj,â\3 ?|K-86q$RoLDIzׇGmxƆ 7&lt֠R0Or ].i2UU,!|i~P=oXX5bI;RHkQǂQ{vi Be.DqGқ7P g<8t ~oLsr@6-) 6M7cmVr!>c C2Af0+Z KϠ Z'pb](5o:ƇY3D?^Ñ8(w &POp|GdEPP<D(?zDjۯPAE285 UBPPjMi(e;4CPE.G ĸTn80|Z m}xRC?Ws_ui`I%͗_X&2``Qi f\Zlh.Ò&k!'՟߾!EO>|s.<iV- a0jl/~3d>_a| %± +;;3 &o"IO`+˜L> ? K đj A ,Z`o.ApNŒp ᄀwL.}|&j& 3f00-F(Beg!.pX-6w~UO/>6/d8,`\*t J-9T` r dO?@)=5T`_p;fŬxzm@}@^DUЖ\<,zG35ןo:<4^Y[HTQ6C̙5L((+A"QEQ`H0*VQ #0H(TFN83u3{;^glÝ{3Yg}Yk4'f|z:I ȫnO(I 6tp %GN#[\9G["1_9-"3VJ*>bRagG$9Y !Kxf|_ޝOZ,Ki}[tz\2{Td!tχ|ݐ VU\s`9 YrXak*@gFDdZ~~p,6-d޲mto璘9{Ϲ{1\{o}~~ߓ7=y"G/h/@dO| i?GFe]KɛŎn5+*i =݉JGdAb3lFZ#%gt`ԗ#6廓F{4Llk=z0 8ci%9M!;Fz'3Bp U$)\bSYn$P ڊTVK%T!KXuM{赃%aBJߴ?#Ո^vЙqVwʼ{~f-h[Cp8)i N z2MWt*ASEb{P-tN6|^}Mk\W;;4yYxI 5X' !NF Ktqٶ.H{"u_?d-n ;GH˪ZaUU ש)GuJѾV2XnlYS(J)ݰJUT9=G}zS69V??yZ fYvX仁&h2}xRG>¹k(7csc!y$<en >ԅ[HC'#ӳWv8"U55xs- Gyp/c$jH:&U&]*٘9j[{M d}CߡҒyJӃq AO|O>c*%UT%t,2ivpfR`a}v aJ-H0Õbu14\ݭqvS\G{sŢrY? g"nH<O0׷*sW4nYD7D9)v&9gq @jшT-ͣCDEܸ u> >KX^)b *Iޭf:] CUmsΪ:`؈b#JObKOg8x=>Sywa6D4as-JywrUbP| 0k4b7ۄ0D5H8 -^Pݎ%s# }1ult_JNYW/f [{R$x!oRFwt;sMn ӣoVD8k ,jVckN`ϞVcW?^ț. nEYTIؗgPl1 d,qD2 ¹@1yt,NVn`8`K@_?$E!!W<xA^f4|>/`K-aC`/(`/%9п8r[]0|WAHpVZH5[͹ YЏb"Dlnx^TU傥:-yf C+5 ( :,Tw4DŽ'ImA{1Y;^eUȔs+7y}߁u: !UZf),g7:&bphF=1t 6|w|:/M&@ؼPP`7KU@aϴq*k`sTo/ׇJҙ;o|mfXv.*J'@=nE+vq9(=1oŠԤ s9$2'8}(IFԁW>yt+Eive?Sk.\u^иxh-376 zT)^>G +_^C/3t*EgMT3?+ Iֱ/9wA馷7s&-Y7mòShj鴲g 2.RqH8ZIӁ}yℛuO0}gMEޣB2< x KifY|:Z8*KFДEx(@cƋZGK\[=/c҅nT8y- k`XX,S[\j(14] @@bh'Caa&k~:ilW-" b"]PhF Ƅgh|xd7P,.__GԙFLutoeIo2u}`-5:bQC4`"@,Q ?B}y#YzW5]6&^u onH~aeD?]*@y.>@K"|ՒZBDLpҲ1["v/n٪y5䠖^x<*ot컥x rzżw$vб%_#A{ sD1/ |Ff/,,*r7\t~s|>ʕf=i2Atfr?;hnQBվ|Yr3&wTǛZ Oe #1"E*i(fkǝtBe}Sxgז1n?"-~ Pi>ՄfR>Kɞ[N)e78f w2-mF5;3Xt̃2g5Zbŕ sqiMnd:%o fAиCq7Lksp33.@MVMebdn"F+5o\] RT҆,w@ w!KaƝKte[,VgU?ՊpϨWf9ˬ>c`_>g8ףx8<4`x1J '!An8וnmm]&e%VR \D:tOl t'{bg+>ɏus~Qや_ {pq@/WEPŢhdǬ D@R.0_ɹPX=^lLС2s~4JY@8@y^vz˟=?5$_(pP 7CjjnfOO ;=:FiR'_rW5]?eYʈ$ϑZl.{zq͞F D6 g43Td1ޕP#{sx(+= #$*:H<`6si\`cXc4c$cd%yn7\.6W=<9~=ُchnPb ޕ@IQ]= 2`@1QШw%Dcf# "&ŕ9C Iܓ@D#%F#Y`faUZf3y议[pD6O )CO*T5xf b4 l5z@R1'iұ*{EWEs`sW1Ȏ lW?ܯulxo;I8 r7FW㋠N0vFz9s֟@; 8n<zQt<;7X%U.X6 1ep"Vq~\vGFxZv5Jzr/m+c-[: ;kZLkSKR;)ds¼0C_a&H x[>|YDTRT\o$}4m.M8 KsCFթqf#v ӂR#Yp9Am&09"KD*pDeHQ5Z==00R^vkmc[ ]R}*7n<+iF,M=|#\XK eG:Bw+n KJv fx[~2lpxv*t[fnU\K_<7hQ#MuelT^c`5LSOPIӈƄa߷rfDž=ѼK -yfs~>˪uC¨]<{5HDZ[3ZHGrpb4l7u@Qlʙ n8q@5[o|)AVޫ$Dne#/llI{8qY-BX&w`ß.( pS7EԘPMQGdCHg)^?ZtuirI: }/2mnk 3ⶆ}aW&"4'"AI+GfFV0W'#l4=WII.Jp4 EsB¿Pү6s>xj,ll&Co/ 4ڤߤ}c Ja܋1ceM!م 2@bQlͼ\oL5RD&F3 lRD6W[}3' д2Z8,#-M܍,x3 O bU~ Lw KѮٻ'c)Ƙ ;SdQ. ?XIm6i9-;QU~(yXo@z1df\+8#l2<1/MOJsǕ*8ў O= J6OP"1R ;4pRT Ӄ?N0&5t_kѫt`W׎O <lSo6[˚9+\I 7 : #&W2SHծa_kn4̟C{8"U4(>WRdMzddhqS/vP'5kӵ(7=0sh nĢQv*vHi*;Yl̫(oJr“?89ufS 2ᡰ4_{{ea5D[Yݿ^ Du$Ha'R1ӊ|$㉔Bݼ^:KS>%]BQX ShtÌV$K5rC7 D6+X}}]l)@yr@ H!MI4R]7- N1P{{% E!7ܢquGĬ;u24Y`DFyPV$D~_ШHe>;nM?s|L䇧PEpd^EAO^N&2 э]"w! ?B}Ȕ)I6V3R9mA&QOxL2AV0Jr0hp<]ڙYb_s82o S5Pcy1*BX(?,{ĮY=Mrx%8)lf0IxD͇Bd+sC8={{(C[?H8d K-r̕Xݪ̇v77`~4~pO[9֫c5ln"-'RLm e}Néj+n5.2o~EF2bR -mhT'AM4Оof#D_O_5;(4)O3  NZ7өiSwE!73qx9;d@[^kɖ9L}z{i:]_Lrw=kS#|0V4mm1$j$yF,1"6Pz) 2|S;{gNY:;̭?_:Hg$S<$m!@6]NӶ`)t1{T^a"4'AHt1lH i-q-)MWͮ'y:*t]{Z{#U.$D^LA@J- Nڋz!yt1$uIWlJrtA;iMYRGac)m+:3-"ov2"n?^doLv[%NҖcm vfy&<@[Dv_t/{\Ȕ.`GHnP^^, /vc#]wdlCL} ]'Sj#{`F'h8', {E*B9- UM BZl?ȱƫڿL1)P*g~{ qO%?v`ΗOu`5Qc<N0E{T$;0lUo<[&x6P3-8{~.` "&bs}3^@u?E [{dJUDpq/"xTFWֲ46GJ ')z%OIQlRBNrߪ͈b#&I&eW.v7GWOQm<2Y!~*CԪ2R.`GE"t,XIl&@_M/Om9.|㸁nҥ VDǣϮdLOfV3A9ʸT" ӫʁH7)T=V3nY;bTS 3S!.Zz00pPThW nPOpI35U= lR=i6&InCj ,&0w$(u] 4؉Bҡj3!zR^CԠV|[1R 㰪j/c!apf&j 9!t@'SbrX`uUU)H0--8zbv0y ߟ:]0z @}<7c'}'p lYì'_ݻtkҼ 8V~ä.eiG~ǚƜ{jGhI7[6dzool#zDZOaƔƀhNZ@ZX]Ulz$ULࡐ;k؀aÙ+T!֥NS7jt9!]OS8Gx@KlP|ʰV.˷p]DёLDmS i6:wWVW;> fG3 ltWmg/ZM9طNO.!%>5kWeC*~Yp6#>;i?v%MI\wng>_cgI7 -IYGTXՒt9SvNnc_~L95Ea ԐqHn[̓т_'<-s#J^/`gR ́(+4%50B!VN$ACXNk{I0\ܥ$%6z:̝lzd(bt0$`[Գ Ā ̽>񘞜7.{nf~UݩV=z I~Bg` ۷}^@R;6xF3Ww4硋'5 d(@^W^6qJHF"Q kH]'TgDцƦ440@P\f 7c1QK sY9)XFU2rRpDkcndlSʊz[؁}{VU^}>@%N@݉Dz%Ak?z ::F|)Ij˟cϮgӡgݳG/Ͽʚ7%+C`X±Ua{R-IWMj"-i&au39U CeZX\jj:8~1k* `gC6+i(;'N K3>f_5;T/$m4`f$ېL$d]aVw9܉mԕah1G'@w0wW5%r!|T<6ۻuc7e}s7$kQK$c։CX>CR:uEmKwH҅MHF! =(?u^DM24/at̷I\Ʒ&s~؞{ϛu _$븮uG;Ut8B`<J/.[Zn a/y2:CEty+M^&Zƽsn=-z775aFs/9j3pT^D%]c%^Éx\I7vߜ1V |& l`K֕BvqGyzpO 7GIVO+noTXطu3sҌ ȡg ^^+IPRqP 0?+Bz$؄B$M a$m#Y ^=k,v I-28Y]NO?2^)O0-ZMXP9y݋tIcJe^;ܷ%oԻ熳u+*|q^* 6g!W*2W}NX5G/"pi 4uCl~jyU?D?.ЗqI# &WYE6$APY>?/ @haĪV&t\wU갳%Wd#cKX?W\w6X0fn. ̰z5~91,9ys\Ŏ!U풓WdwP.3nQѷ0\F&&GeNN"h EBŸtc ~ @~Z > !n;]f{oʖa;*8 [3u?S-lʘ JOF{ V,u V0y-yk9BbT;}Xn/ 1B"a1x!$U_|W+14/d 5yY8o{7ݳt -!qOpS\c^56XFǫw.ܟIF]sPAa86Y˨q( GSEL)ȈI;@j%&[ޏ}%)@ )i~ǹ{HqHs= hޘ76TU$%ׁI֑Et1qv(zGؖ^l#!:H Hqæ;D"mPm҇mwt(x.܊qEvsهΰψ2ͨL&x#W")vnvX`y}َd8muT'WBM0ѭmC@?F"vg~pRR .{,x.Y^349ou #d5*!N"pKѻg-'w^ޑ+'ۣ6l4[\`kt0 l4T wq i  K-^)'4E=#V2;~m q-0y ыkN 7*bџu`?oTw4`H ۙN#_#.{w!B4<#-ȯDGTW]0e˹au~l~lXnz=R=f裿}pK"ߴ9 YZN› WeZIY\`XJsT1Io"% \am`-ޓBaqS e9ڼۗ-`FonE+s)9yy$$=tF%!R$7,54WF{Ԥ{"Cl1e9UCQAmlm]W, .jx%,Kl .39鎲*^t,fԆ$eq8Lٔ`sAE:cdj5zL<^r(2Sp:p>8/3udsq[YPT|hnbM ~wXO!y#43t4ep.nIAшa!ME{EEPzN Ƀ48ugxP$~X8>%M=XMWl8^9M-/}{3]~}JH_ڝ/@`CQE" zpXz噘&7HdHW"-Kd887SvcҫiF69%}xqnLZvH='!QM^{BNRM]{^6wg7n蒘!ܺ6paoӇ@42iW~$Ɋ%_Ucuҫ7TzKqUN鸯S/r` O(s;a;Rh&ZrHsx.&2^ihfM8,k<V4 aG& /p/O?Th7[⫪FMaә@V0C.h l3 M1AMY[:xpy3FLݧ%èl[ ĵ4NƔqCل̏զfV[)'vjb[$9̷hh٢WD #*jrOo6xŅJVyn}7aO^rz1VwF/O<WͶT2Y(,,BrԀyVUnHZKgfKGz&?]~n،J=,[ ld4* 'ٷjccP@?HmهӺI2>*hs E|)\w2CYq?R (P>=Ld.BExǮӇ @ԅ=lia{rs࿦ޯ$1~Yo3adb;X,\݊X.Inn:Y 𐭲ƪʱQpă-wt ZE CӅVq<C!}ѧe,-lƷf:xE+N{;"g:Û+ױF~srh)۪ôM5zpt\} )Gl;/2eZXArv)u #APԻlNFޓPoa&qqFd&IVhjh aUjaHF9^v*s8q]\/°^1.$3Up4w S#VK9{ETzJ6#\wt2m LeAuփL$%iIc%|pMAu-RQ*yCA=A$T* Py8OAP;3} 45}kEiZ@%P=NlZ$9fP*GPͱ7|xe@'#z5M@cYK&`㾤yc\Ylp+V͎D%3*L}CNkt \R]vN"|߭Kk]xGl-ԾBtUD l{lTʑ傱DMau^\}&SF_UX]&쾷g78B:1 *FLԝhzͥ]VR$ˣ~<"9_tnNy1Ⱦ+&1V"LM#Kay\zHɩֽk8aqӎ % $cr d[} ƕ5kn >gʁ=7apV?bXɛ:`eRշ(GKZF73vhW쀊nMCK0|,OPi i)=1`95ʆN ser!L{ w$4jz77_mO+TݥԌ>;Û61b]oeUC!A\>m= GQ_e?hXm2WNWziU d.[h{L?9쐠#I) M fT0+ilgrMǃFGzd4Sݤy}XXvVƤ Ęh>8Yk=5e`3~I8A.z? ;$7< #ތI۵FY(F^KuR5HOн_򔘂<KbS6tQOQM֟xgdMA}mP-c .oX6}ft%2XCh">o5e~oIu7&:8tWǥ[feŦ) nN_ABk-1>$@OM5 Q0lr_ævy} !!Ʌh#,0vY<ɼf6:~W͍R?ڀ-]qK015mCL˪.`kGpi?KV{pӬظÆoq~@7m;迦UJ7m \ }]PP솆IE꬙R%VٲlN5rcKWNSN?O<tu&`)'wvM-ZU0BeK26d$AׁkPnNh+&ډ K3D`GQUnmc?ڤ$ ,LVox2V lB GTF1lKz ̯fg'Ӂm9*s K/RP:gۺLgшpT 5iR&TgÉhJ [@_~NgJvqpWO,"PhPL<͝6{4GKK6wL[r dNފU"% x8bاJ`2>^"]j.ݓ l`ex vԡ1.YkG?؇I>^8LDO}vIݹ^~v06Ҷqv2S4ٱ=8wW5ܨ|q$qj6_;W>ol+m`)]F]%ͮX`FDb:"@ovW>w`Xkm[| wf: 7IENDB`youker-assistant/src/res/working/7.png0000664000175000017500000005215613260315532016752 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 3UPIDATxڤUMhA~ImE{)(bQAAAZZzbEA^tu^3HGͼcz4`[ 7u .o+~Q74ۍf-}$Q ZGN_;,CzlI=^2vx̲8q4dryAL bB%cs'CEF2hw-)8kǼy.F.K!rPĔC:QIV,&vr^tH녈۽"D!ݕ"+R7LgDLak(n n„,Ī-ɸ$| J,6(8pEC4@Ƒ$KT2͛Kd1%>H*>6PM.zXBހ&HpohƁ;/av9ee2i"tP5*j8pI=hbUhb4Db'B "'"< ;Hgd/i-&zfWڍM ;*8("-S*z[.KCTUEK׿1p[;S " T]|' & Ə$ hJ$ÞHx8vPrkf>͟bQq!OnFbǙDA:-ZXJUiu+-:6Y[HQ>3V޶mAS+$(`BCDOQcI$DW+zz" ) Jz K/kͼbf̙s8w9;T\ p?AQ9~<~rZtue>ָ tGrр\..1yb1 J{t j@{3SI8klx⢖dɡvAqrlRYUWKqZד!܃VmyYDL,9v RRnAVP[RImՒC .T- `E p qɡq0yq r`SP ˽ W ]JcwosQuK֌@s$RZF‘0-l >ld}`\u/a+ɷh(&?KOT!1, ;B~ 5GHO % !h/M wb U=;6Ni|B윞I$2܅} ǎ!bۍz#Fl:<@@Fޛ/Z=DA4߂S*ɥ]&/_N(Mp %tpQ*G慔8z?-SeR@G'm&(3vVsiN֔t\mIťd<2f7AOm'B9I/;sp@@n~q\UDxhh6RF%`I2u& *DoYs=GM r#+6"mJ#ӓD% m<")xb4-W} >>dYG0Has40eWjt-g'\:^h"L, u=*!R#Hm`! ٙ_XgBm&ǚQ{-7(MmpBߏ4h7djc(l{kkZ b#EmĄҪD@&?cT1!&Q ~1 BԐPLQVڏ~y733{ǕI>;>{n`bY#D:K@Ì|d%GVrHM4z#'\D1hmXIhLF&h9-<:^@X>R|D XT;X#@ X7iA[BSɄ 2>5@@4cq, ayR;n CqE~&<Q3o֘ . d$ 7(4.jLv (qWÈ^1cX+[?>&6'>߾w:顚:evLll*E|n 7Tj7S|[Nbi*M*IC"ϥBtw}(vװvT˸ffLV?;\ jx7C}Ö*G(/:NWNPT8mWطq9 j["lS19HB3VT ISMI~Y&6^qGR﹭3*]$U+e̕kV콗.ZO~zKTcAȸ'sEe(t Yw9m]+s_ cV N5tfN<)H+%w~ +㲎-* ΉTlu 3Lx*PE(]C*ﺅTЄe >;#JBu {8MeliZ#Ni Ǽ DR]0$[:6&d#EfkɠHvpN} HGی6:"|{¥U 6 rvb?#]Kj񵋒bU 867ZXuG (=GV_:*tSƀn(E7]3*A{ˉ[ K4{y(>tG?ܶAYĩ>O] ;GɲZP  1 ҘbJiDT 1FBCTlcRm-mjY7]ۅe,.x;{̰[f23;o޼{9s^UXe:TwS+ߗ#zdۄq)?UVXO>,m7`Kp!Q`RAW#+͈_^vN\39Şzܔ$j)0tp* ,E"9;2aZoS>n^PeRUB>=5?|Qi9*v@= SCL' Su 聚@aS@^*oB$aR-A 29)s3)^%vf`)H8)y8Y|:sbW1V=s T.<\+  #ڧt !cHC⢀}P--..an\h`̭dq5ڗ| eڴX?Ajͨ,\EFVs߀ Q#l؀n<1"soĐH:;DȉqkV1W@:Yp“ۛ{4PƟÞ0T7$[Lwk L9uF[)M&qδ|k؈R5>RZ"01k5+ Z@{JֵzԵA&R,lrj`rMy5@+chK"ʲM3}NTk>Yl6 M !]@#A۸sA@̍˹~?pHo@3?^#5u4+isaJOܸqs%؇Zš-,92 al t:7h4 CKbdž& GBjL*)֌k.)_Gߋr:5{D%oxEbYí0N'kll%!V,F!p68SaHP(xYŋŋWZTdý`nngwTt'/ϘHM7dЦy™N?}'.u'JKwܪ̣:GlX,G=AhW˛*Oi7 XW"ʱl΂m0[Oڴo^6-2-e p_ x| qѰ0&dC(rYq춼iFFGE}T Hy=ADh;_W0 4q96 9\ؗLpID `]LF1B5Vi/-pg}o>ѡ|4qֈs{">z.扞d鍩X?{tOccZf.3"@k^z 2ڻj4\*뷥v[(@hGc)Ѵ䍾ؼR|&:D lωGfϞv~]Q邪y3~v G&3[]7Jp;tkUjuQ~pNis`e0V":o.;kL59n_iX9eWoƑ(j?gKZ$gOE:ťL%+Y)؞=d\J97F?t}f_rlZ bOʯP\a;Ĺ)9ڵe- w)qU)ch)9K>]-g}h}iS5zv`y˔"w/O:>V3r!#b GmY.r=1'g2̻mIY^3J@y::KKP⊉C{Ǹb- r =| FJ"|WW9ۦ\A9Ja12J -$ >v3nBB:Gn4sTj2bAm+HGConüYdrgu2yT!AZjn(Wq\֠Z-7CtBI};ɍVwOf{FYn^s`ɾM::P]~|>~?ZnOg>#rZ7r+O~r|-*7=Nqa6s#b4I.ɽE,T<^="pNxOgJ>İHB4ZZb':R\ne"c.G۬ wKﳾjg_(8ĦQ_`MgӓfW'Ƞ6k'Bܶtv>QɿJb/x}o!wi&9][M9rqԇiέe,yjAJ<ťf_&gߞ$۪b N&'޶bJ6Sn[o2Z7~r?!ԯ7q}51,'?;({g<30Z$$`<Hh"ht"*(E[)Ea T[+J,\˴yT y,($d2!d2Lo=};l?V83=ηS( M.^SyL a{.)S TVTLfk@"b6yA /^>PBHit/ DtقP,rs`K oKGp>YG.C,]*XX-೴moD"`CUչ>:$gр'rabBا~?1d>~<+EoZ%ȧhKN*xDLgVR:[נIb.>w,63]$`<\ h_|)Nb̦2h!%s4!+mSIX\#RGĎ*jaxSݥNi%q<ϗܽIQd;&`i&Zt_k*/pyCEA[ EٷaGj\4ϝ'س3Sl 4,ZJ4Qǎx=Qe͝r`Ums^W&<(Lݥ!oغWʲ:ͯ~8e61&UIc5p!WH[ֆ `^k;gn0+V4WjFf[kZ,+vENAΟL*sP4_hٰfu2D.^C12P`g]L)4ffuʮ|&;FifL,zլ;'y6GܐɁ482m9(8/)1EA4|F1ӳ8:2! \">]r B CۆxmdL^Yp'JvT x05<v5<v&&GisrMUKHME>IF :xթ}ǔbNx6&PXթ K 63֚CrYPf|?,%l ^F^O҂ l 41IC[uH1b]gJ4<߆0#Jzyni̢ 69ts٘o94]h6@_0NIe7DG+s\@gd&Qdrм%.0AP*dUly e[I xI0;lk̩,TAW3F~V+r%Z)?Čk?fpXLU.u9Nj>nS.]n M+6Ip.9$0UnA!`](yL*iABӅb~[BSh-Ci5{=͏oĵTZÇ 긖ΏQS6(<ʰkͅj̈́߂Kb1>qrPY$3nQΛmG>PP-Gq=yhr&6A -P-QZS{s7WY Lb8OlڳBp=H!f/[ IFTy{fob1aQZὸ琢.bϚɫ]LՁBD/u8HNh9:94AWR5ѠVkHDf7cf,8QTrf&WYZ|%8H6R/3I-Ցh{QHf:W#G*y;KZ_WlbhH,.#m!J\8, &Moo2U}L5bDoɉz{kc0(`Z:IП&L@3I[Uc'Z|x^Z;V=Bl=J7X8 =r"T3Xd+cl.9!ҍ\- }7ƠSUp;+sz5,R§P4ؗJf!mo4'}鴥A!@6mu"ϰw|TJPݯ{Zs)A/9"J ȳ:_ ξʘZo4C EQw>g?D (@ L!j30}}A秜tn 3!hx 7p<#ghsX2ؙQoT(QW~t"S=O K{{E%9k8A"Wg炅:dA[rc?ϡezi=T h#-ok>\kzzY}n~MûOա5nKV|V.}d\~*7taB?@>1ɈXdvzZZ9+KoЖ=IC.b-䷛wuAr)@%]&^ ^rǽFq/t2U7L/.~q'tmX hI~rʹ5L|fT'6M 5tm NryRUz@Q,aq\,&S(t4}e"ToŽq{#}/ѭHk}8I[BXWo^|sU |6q͊TY]Sl%kV. ["Z9h!|A>:"4[-'|?65 DLq^~p|Ư,cȂ26i[@f^cտnvo+5*KKLgꭴmi!5c29&Z_ J}ֲwiQˁؔwr#ǖ~O uδih~]eLIΝzKA?"bK?&6Gy׽%`7'*Iv. ymbSF5 Y=?[o?twyVqfShu9'x&2EV`˝*yo/9@O$?űn{lT/N>l6+nTVlITfT~Sٽw[c 6Ʃ 8 ~׫D%-T7- ]Vy[eY)H" hS p'IaNDRF",DGYud\boE\.a;vp-h+}O!g% kQrl'&I2g6Y89/OO;,-⡿V$~8eǶ &-iN$.9=!hpޤ,2Ei"uV!rI 3'ih* 5s|Ciu*.mݚV9ozRNJr)WX 6\ps]e]pd֐WV)1P3n"']U])3f*9>J\GI9Zsң{lo˨`(k>dXEc;ߌ!|W3N@tӵ h?XiQgŏM*w?֝/$7N-X4"N7gdA+WGGG=f<UʹH'2ʃ)7_SgMY%5UTjRcOr|B!=c ,fŐ')@'[jX ,&.\bbzD {~{:O tr\ƚc C4DUKfN t*I][blYT وìdi9M`T)^ʮJ4Md`D춟;Eߌfťg&xd*ĄRf'is[G%#SƮJ 4ظU+@7T jM(#K@ {Ҡ#:c"n4}DwEQƟB[d Vq~Ly 3Wr9I{0+&A>i&L;a% 5/_}>tL  b";^,7q&@d}b:ϕ OWN.Jzc$I֥gww~Ep{oᢴ0xd.&jR\cccb {[f ;gM5G o@y3 ޙU{dMڴM[Zʎ .>TD'Ol>Ax>JJS}Kw&Ms$w&wLJ̒̽;\Fv >@}jս(@J},X"`{ScP-$_ M(dbT?*A~ &%8dCs9'1/qtD= M:o]X1A,L~B $3fJ!1C~c?q/7: e`xv&)`N?T1a8}°B}7yt2PW1_!}(qteX(%Tr<~5^8 $z~R  [1"\;NJ+K|=`yRDū@5X я6&V".z&"nz:vN{|1R%hcшnQ g/ عfD:f9 ۝LR*EJºҡQroˣAV?sg JqS JbYU uCkŨDfT\EjPs}Vr^*օD9QPX$fD EN-#Tk7uUO94vPk.QʿU/ w*pFD0/am|$\W)Bp iFN/+t81)\Yp&\шD ;1}J٤mܜv/ڤzT.9^{jZ:y`'?׭&yMQ"fmȬmQk`N¡so֞|Έ(GW(m/{Zq (˔ W,O Yl Ꞝ],$IS;LDIO'xc l i^sW܆xT]؄PD,1Ŗ1 H (q%Z,"{#G= #\/STZu(pb_RܾᮊSOo]vuC'Imycl 5VD'nl,?&p[ wh6Ǥk~Gv7Z3ߩRR],4 b@ 7Ag*ē +sbaĻu ݶIE\/<&kH`K@_!_4_]Uz{S.jZI*NW]Զ8ay2l1+dX8{$YlOd1 y0EUInN]c9Vk!Iſߞ{8$/yʗHo>\Y|gD- %V#:D*3}5 "c @6RP;6pE `{Ő$1Ou[q̝E[4I=uՓWxS]& yi(&VmۥrhS\?p^'5 ? `kBädw]Cn@[:ɢ-_bHW#ߍ;5gMmNqx`*' H4?K˾D }1P1_|;&/dMMUόCK4L  *1@h9jqЈ[cWE6=J ΀a"~g+vш-QLq. '. 4&̯3`qv $W/ `M7%UjN%_wgwi ;b`|-jqYRƭ^:Y||ǸMac3^X , i'v((3]+ʗyrޙLϻ[F뷧%0)vtj&L*Gr,ZQ8 4Q\ONI] h`/TX!:t Ҙ.+ Fnplqo"LFy`q "~ʅ:3|͘Y5,LSÌRV#>h!w%_ccvKG%wl#eԞO.7q@aGI;zOl/kU'=oq+S[_HAr!K dɂAdl!:AYhy$Zr5Pra 4"Kx]*=_ԒݍHs^YQNf.|c#ox W 'P$;Y9UQQ m6FID}^DtgOaD&voW.--l[dHGmNqo 5*zA\|U9W{qޕX9qяڞ N?u_P1soP(PCW,F:~ `xYY*k8|i^ǝd)7D~0FC0#&b f6,_&ZZzHp#s}cKP$ʝbѦ[_>G[LV6׭w4f cSX)6)M)+fp׎ ?@<3C`/ &.mqQvek'`Sm<e1j+Iؾ#QySV[gv4pc8mmMISĆ]eĀb<%2z"=0 Roj1#P??flT٪:L 7KFQ2D_ڛNC1m@M_Pc1nI@I iSV,1cC~To= 'J"]$+;2Պ :>I|i Ԙ n.,.VK =N OoBݔ[{p*1?XO=@D*߰bhin !(^(LlۙDaCކ#s(qg&F2*'BfGEE"V\⮶]vPicE1ɍ{KQWr{d*'>#=0 m<;ZD̀%ŵwRXB,[`̏f֒$rL!+!^**sV[%-3 #уϟ5Q1J}lKƍ}q<)H,WVk3ѿѵصH/KKiRA+6lluG8H,?esl-uc}t]BQ6p`\=6Y'mWԝ+11gey< ` )Qb lOx]X[52a{;~~ [< ZB hݹ\q0E99<Μccħk5Լ!-޵K4iy!CIT*"H 9,dڢL\q]8&.W95K`gaNɜw+\rmodZWцur[pI ̔\[>"+LXY@"ߒq^uݕz*;|b!æVku! h˼yĄgx5m[N XTG]$ k*Gr^ "6Yhv%(N5E0?#LJPiϟRhNrXì`çǔ}Qbɔ~\|_IZ&ybUԈAfKݾuk2H!Vv_8"H M5uJu۶-jo5_>/+ygLQZtT3<+$-q q"eja@ f}~rݜí:£|GmXJ5;= CeMؼYՓ˥ܽ'fn 25؀ %KE8FOL5-``!?YY;'*Ɨl2cCDК<Dx&IKٛ1#6X &`fV JrDĐg}n]TF:ZT+k*5pm)-N<6ekN$.jP㯻'2h"!w Kc~+hp*VzeЫ'ޭ[9$s-l)'"Jgya~a&}l?/=60>'|@|۩&o;plS0Da&-_ؐ?J&<0Kv43{`L?YLQ_+1xoN:'!_NQrsILTqU~U;ږH**)#"徹YSϚgγ+ Hm\7+/|9)Yi/akZ,9INw`>_;L}q2RT;mf]ߏ؍RI 'y֚zq/؉myPj]̆ʴ(p\'snl~,DD BZgb)巑2t:M.1|n]jom1xeޘ3Ƙҙ's:ԻY^-[`<ҏħ%ө7餄͛6vES8K+ j)Qn yիiS{:F^? m2K߿%F |$^#UbuWI*^}f  lCWƄ7j{8z۬ o"Jع92y6,/>F|Br o l _/6KIsz#ȕmyd~m: gk\sJp]Yl ˗g_6Um}E`Ү&2c,ߚ_=!٬Cpdg:=3ZL6<ݭ}؈ d KP P!,`['a5弻Ai3My3aNՎx談09t΁mka;u ~8Ln& eda XIG9url S3(2iu)\bͱںk`31[500[MPr*N&k0M t&='dÕ0!|Ӈqt}>`)mqzmy+#\P>["x@+oh-#r gNG`U$GެY)$,p&<Ev^FT`= ͖_sjmM򹮒`~<-;lȏ/B{".{/ վծru.sޝhy.uC,ƽPUh @|s}+} )NFÃ1WQṫsZ,"_.A2 #`n qәı[Їh={ d )Bzθ}ux!=F.*W%.<'; 'gG `'wF[u*q `#W91#KgD/x0~`]П'_jS4V 6+T;ܠJRUX{pjlaa{u/I5x,GkS>EPވvW1mɔX(k[4`1?V;,!IENDB`youker-assistant/src/res/working/15.png0000664000175000017500000005223213260315532017024 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp mF>PIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@`F0+7 w(FJM@YXUC zxH*( cYAN0A ƏN9D8x}"<KNPݷ L@? 0ԼA<@& G P$YcUt"r0B|{q(0cV}j:GN)1!H :^ _Ww]INk.<qfr |, 0%I`W>eBA v" /0ÃLJ!\b Sc瀤SyXRYmz2`2d/?b>Chv` 5bj l}\&5h@ u"ל8+ `Eta+&@\l0VaelTL, F #Qu(Z*4[0 ,P€@d@6-).I^OU]kVs=0?)j`5* )V L0Al KvHk8r/hET{X Ǘy3  )dh ARםB_(AܶDNPb7+P-@F/z"l#6  5PӛWR^=|4A`M #}$G4u2,iYXu jq13Q6 mZXYPRDG?:| %aJ$j@]|@O{+ )A5?Y!k}H[!}bBM%a'8RA ;najJ8]j!0̏1 ;+(AA#/; j&َ|e| q9o}facO-qxQ 7w~FX$o F0(r27AˆRplE80 ,t>f$`{f#jڋ@W{a-A7<15 Y`%+=%Ƶ8Qb-jMM؁灆 6 "ggM ,W$V#L2J"02 M%{%# S %5SQr(z;3wvwY=}'˛s\]Cjxpn1NJ_XM,u t8]!7Hbq\R)-NtrG%/ӆ00NWPKp͉e:F$N(=;ip7ygdz(1a[`P[1xY!̕8SHTL!rء#(@[kPJ9W^Qv o(UٓGim nW@3__6|s+*ʝHQ=)kx4\6P/{(Ziߘ#:n7Н1Hr"Fg҅A%g,3ḧ&PRe$SMxVUGzxdZk^vs,w5RZ[aSuL;PmT}z ;;e>@2+oTHtGUȦn5Dc˂bF{RR qCzx?gwkӽ.PZY˶4tlE1JhBRE ibMTmL "FUHibb۔:=33sًvw9dMOhf^2~ anE?uY՗n%/on q")P[?#] >쮍Ř7lP5]Gb_}?XL;4_ԭm|+[A +kcU(z&Ni췳pvrM!ݛRu eT2=~@b\2Wbp!^0DXBƳ SuCu_pUkm4-P> |V pu<)e2^h䚦.g~*1pxn<=$r-nXߛ"+ASGl)rd'^bD@9Dtg.mli/)șW~SU#͈iºi3bG;u[6mݐvĸpv2p+yWDH  Ҟ;\#1RĪzU͞w ^@Rddh$ӿcz&ݫJ *FɅa_!(tY [~`97CR͉$ubY|]ֺ?<ѳP HiB֙=;Pe D-^UU0UVa:4 l<98-!e* cuB8 TM&5qFy8?ae ۮ<­^I9y$d?~AT=vd-xQtl^Z:;bє7'U"HNä8R:놦)U9gDW@-Z+)1.I)@)5|nC䭻bvW63hgFԒ| &FeYoT[`($!wľ5RNIʮ[痓v;G][z]}%6eկ`THe5s t P MtLe;>ȟԎiIsx9 RnߩK)}t[<#;/sԪХiXZ/y&RF]N`HiyHiS6T5nTtԂ[%dr|,/1inkNJ)Vp09YZaqyDe'MΈLe q/:nORڤTWՖ3j=eө[D&긛9t hIǧ}C=z]E)9:0v]7—DsB8/Tdad015sy۾/,=FT{^WtDpfjGL-hiBI~)w {8j 03jqN;?9Sϵ|{G$zz7 *H[_ߝ,[rYCRsWF2r.<{Sv,!w7&)o3}f: FGpwMW7'$q$ QHta@SĊ6V"RŐF֭@PX:6ԥc{ (#6MwϹ/k_G׾?|;9a!dͭ۲<>oBǑR<4= Ghrǜz]Da>`3 -G(7V|#Vsw`3кg^\wKP2;+D CN4f2W,ؠM799C؅!ETFQ~Za)u_U`3 @"̋ (<~mUU  4kkS& H֥ m~{Y Ơ9 d0ܖe|! U\2ѿA8 2+@ :_a HAj5YTZ&ڌi5sm dȁ? -a85@*,=7 lߏ12AFvh ;0@yXV59JQF9i`%LҪsJ7WAdv4 ~&dC%nK:ǫEq#n]9GQ>;AEmx;KϐIvxBӨ_o%2xr1%-$z wצMPAJnπςϤdUO?V:&vb|Nԩ1kPAZWjXFnYn@^+"& IA?2MBGQx|8AShf'#T%NRn] lo A6fpJȶHpL5V$IW"y_'Rdelʶ$q< ,st&eN@g7$e@1ɤ )}W\rd#9NǰQ2{Ybw+lW$?,elig!K16 |@Li³[tŗ+YLB'm1*u6c&uԖ[ν{}+oN׽w`!Z_lP~,$('<+'^7wNVҪ(힑\w<; fd@9fvЉa>>$*_,7hcqkhjUq:'i'[qm>0{L6J^ b'G 6VFdyx0!ݦ!/"LV8qgxX߰羴~ }|FLǰ #7_ߐN 9AnC JQx|LhԞnrV UhR%PqfyWĽ:b4GZE.D s][;{ -n!>SK 'T%Lm)J@cYB9Aɢ О^\ZJen-ʘ4I1sD ]vx.dlriOp!ZqPU*@ֵAUby${T/4j~#jkL#Zu֕ ?٥XKmյ\շ Wky/ _;Cmѩi/~[*V`4bRE#MR7G| "tYx]2f:u{4l1w+m1HT)}$rz:ߩDzldIf#0Cam"wPo׷z:,jD̂KX@[0x#_⛧n3dM,^.l+~W{E#!Buݳ= 1|O쥟=Fʔ鯞6ʈ rJ,4 󛲅Ŕdh߈3 Whˋ2[*QI}ya D= p>2[17NwZ9=d Q˅65B=: 1>֙fxnn&A[Vu҆e"f@om"<HoQt?l|g̤T1;3ޏ<+Zg? 6|U7\aӒ@6u7vUr/9q=OȪJث KB#׋J㌬ y$H\rHKs65`s=Sf\} dYkZޚK9~;W ȏ@z}HՄ/7ra+ʢt'@ VAYE EeQG,uD)f\*utPqJ@@YT@vIHB;u$^ Ͽ{ܴ# x`HQ}b-F`"КL3P}$@U{o"9l 270 FWn;L>q47UR#{'c آPRȭſ8)ȫ'J2o_>*t s0m6}¤d - `jr?68;QڕΕe[&rA`vuL`˂2LrIA/>i KDcB[cT?@#ZyЌA"Aݥ'XXƍ䖛5|i 6ry Oyq=ɶ#|Fu)lpu#GRK3zJ@y6%Y ~|H(8םcFDetSp7͹@//0{4ߵϯ 0 HdM r-3tXꛑJ;T*8xRڶMXb=d-;Kk*n &X|fօ#ybV. Q-H44 J" 4#4dJ n]I拏TMt]b|48V6dfP,՘bJA 5=T!]c!< ߛ5xN9(CfÉ.'ʒVˊPFFnf V؉y,,oV5b?g*3J}4K5+gqQ^7XF8=]{ Śzǎ9|t{eƵTI/`k}h0Z:[{M <+ +xB{QN*"o8ؑtݟC!G?k[0sV!<΋;֭@ҭ eЃȚ_f]ޅOR;HB%]PHعMu]CJK;ɹfɁp4%$=b@7EH2Uu;SME{q3򒣶/ AGI-]B']b|)?ӳq 땊V]8+C!{5Xu/` J/ 5y`a|Ui +'ڼ_(gJu/갲z*A 4VѪAXWr@ݼ+J@kJw򣭌:dfI,|gw a3mh25y QnQ]YA2Q^H_ 8_vU}-Q_x1a H4 EX^nxJYq RwUF\މ[)~L@,{vP7Q4<) hkϻFjwɋ =J-1y-~?h7[{_Tt#yQ=ʄuaۺ}hX6f&3䍷8n7a|nJD¤ &{~_)JodҮuHN;[&wK׍r .ѭr?dPDLwǵp Yuy) r89+vXxhB$>c7Y%m8~m!?0)lKd2vUŻ۰ĉ88&܏ \/ :~y @"k꥕vd8 BpE76nq/naO͞h ^=ۗq ˎÞ\6u+jL`fڨQbԌU̔(Zq`L|NgX7]Aw1@~7V]vVҤݥbƭ*8d[HyѾE20r%M>!aY7a5k/nןb.9%E8`AKS\C &A'rBb32?6uz>3]JΊr7u+>\U' !}GzC  AZm)z3N֨8e*h2x+xI1GäIz+b797(Z6ѣ=e5y2X{l,xnPrMdki䃤uݘnxU23i=Sl┷Ժg^n'Cje%RLJ!:WoV3SemC!DSF3; 01],`*)urM6z%*4=+`icSKڢA%z6[ە.0F^i\5 YM?ރe؁&,3Ṱ{WHVT$ϜYh%_)e_K5躗! XM3J k$R8 ΪFv ZQFl>ZAք,bL.NzivRH_ `4T@P?} XW4}wHwv&ТU\7"oy276Z+)ƶK%ج*/u"YTR!]InݓL뫃Nadsvq8ChU.ۯ6U2دvSMtͳ YHjw69MD~d4gj/YIh0K1R'hw@@3BרH؉?z,edQ*Q%m7Lb>Zh{zΏK,aE_vG쵨eUhwŊ80y+3<DerAi\Hn| ҍjSWjys _Y PZ}~Dz/ e'-.tTgrJ>1klr٩EK\90!5߁@l*LVDr >\&ʔڵ+P~fX~c`v-gŭ0z?f" _` >jfeey?lF{}< l.eDEr9O{dZR092b'#*&g)40! Q׬;C 5iE4Hf)E|`1 si8FC٫ih"qvmt(!hye7k_TQ>l!o+-5g"1s{kvBʩxG^f0 H? {*CIAPE%ɐ^=DcnB~ھEƺ]aܽl3v~_V gP5TZ9r6 U 1p!T0_<YRdQI%i`D|yJhl+)C?|!:)Ml5TXjGwf'M|t̋c>%5 xOlU E"Б/h yq~%Ps43B!<8/~Wy o6\VXUM  WcAzj?F&}?">jUDDK卶VS|tDKsf: 7 D%EP`( 1 ZιҴƴj%6_Ln ݚjw#إb] .^ wV{[J #:Sc<:Os7#M g/VN[5q߽.80S߇rGр~a]9I>Ob Y7|͎ I9!r.{?-1"\,K)\'>!瓛G0VO>Q~Cg. bT"꘽'c""݅bxW8RΜpC|%y~2>ci+\<=p[ւk#H?-\_?h#Cl:oG%n6rRG(Df޹tчz22Xb%JE&vB\n'N7O<,p'Y$cVX&\l~{f6rh`*po N Nv 6?)Bb*R\FhFrtY~:ڄA] l~r ,U Yg_X;cW lPIA~s!G Y/KbQ6  Z$(}jZ=b1!Q$t2ݼ&^'r_9lbBVJs,50htTe/CՋבG*=YH̼pðďBy6N݋n0ڟ%i?f_9)K"-@Ij+&F֦IjEu 1 7Ύ T"SHmY}+?.w%pRTgsfzaDXQArMf㪸q#d$5ƍhHY1$Q5kDDPTn{d`{_LWTկi;# çypm6ٮ?B|ܶ񶖷,F̏$I|NY< \eUds2n  m)M2Cm#y NTĺvdsEFw|QZ_)%ұˀt¤#{?$۫ m>}@ {;o%t7h>RNsێ$7ڳh J (+voyޞeojv2,ϏH3Wn1STݹnhW0GSj =@ ؙKy$oY~in­IK\ܚ!z(aNP@cPuܦ/NSl؂ZlkM?7ZM(@_l ӥlwZ1PT TAY/ZH8wi4Hԧ\]Z3 '3ojȠ e}R6`ɕց1cz "2pi {/GfIgmnlkZT.#nQ@dME\2J$Q'CI Pɗ`?0x ;1:J׿qH{ᕑ8S8;jk 'ݶ68 '%W3f@#F\uJw+*Y5x q_JnzC>gзI -*!V|T@HeLcVĞDT1b4hT^uj-Ļ_@NDB+ iv̒%51+<18-̀w37[0U;!]ڀmol@EfLOfΣte 9E F Rl{d}HyFFZAe6tHthWR۷q;ڌ 'Dήw'ӦBҍbp>Vx%i붖 c`MY(63#$t/$ΑߘG;e)iZWu1{anfoϚh. 4#8&" j8%N)!O}tX]4{Rڀ͠#}^.Ҹ$΀50XyR #,g=av aVΓ ,2<^U6XeW ؒz pu[H= T"“6":/X<*{K򛙠@ī Gb9LwI6 CQ4[x\R0ݴCe xAs;ABmC9ktГxL^2^/p=/IӊCH54cUPc }F AYZ+k)tvP½ωs:C%1z=OQV?3~`*g!g~6H`dmꩇǒ Z4g yHMmgCbS\9wR FCŎR{Ȉ- Ɇڕp~:#T^hGJYI< n^mKh@ŎN:J:VByTTQ>Աw_wnO:SfP>2Y@O/+P]%3F[׬sNVT{vʲJn̘((;uJƬ%-6 @'B*xAڻe՜J =edb 9&G? eEۥ)cCkO[pMԡ[w*..p)ޢ#EcQٮ;PR)X AQԄ5< xJܫBح]߬\.!j;byvB%%EBsbGr_%X:}1:.mF! [#/:v!D,(NQiwFr(z~$ĝ.=ڱZ#)/)PC}7Ү(_^c"ε l4 ‡Bk|I5mKB}JzTς٦4U#:^~*Jʀ`5U&76r^ ؉e*g* *P\`t aj ޱkR 6]ZrL?KK)؈:AGFX:}ýP_o]PC@]W[4P ǟLfl"Ia;pzlQ>Zt ;!A?QpKi=UQN~8ձzkW#=%Cr" iK`7$ }­VISZK5׌ElbJⓚ\9XĖڿ]][Lu ` jILJNЪ| KJLsyca7?`\eHY9aഴF[RѐC(+Zw2?CdqF+cPBZ=nW#SMDHly6|Hև6=p:G@w"ס]ؓ< G+oDvٷk$ρiiZk7{^4BzeјJ3v{^j0%;O/j`+Y7sVkKEE*֑'ӥw/?ms䔮F,~H|مdTB)Dahܪࡠo^д@K :2:z_܅N6<`0%c:盠{[({\:ybĻ9I:^TF-g#n{CǢ7l`bZQOrA6"M:ƈd6;JK I=PR9DBO>w5aIYJQ+U.1Mgg}2Jb)p RCJx=%YN }%}֨y[\H$'g(:ET_C=K^ :{ SdzxwHҶ*Ǻpz")c҄WъGmW'i..ulw-D`_gcF-wH샏l?ѠziHE5k`LgfMVӌ;לK pp>OJ:UuAc <}B஋Np=J@yKՇ zUD+eY`v/z˔* t0 cz 恵cz'LR"YVSߓ|s0Ic ) |nC$WW'_W;oܿ.﵂R-&q_J o>@N\Y,Ȳlm +ORW,~l @j~N+~"*b%m5ӓsnaz2ad傞4p]ZO]ëz=3XMnSZaPWbtObE7Dq>IúzcU|~I;)p!)L '~l;p)ơpO'3lzS1 <^-iUh4:s.bQ99Y ( /+jh/O6@&̯9WvZšqq/"eўxGNjK\:%8eӋvHr]ܧT@}:1(Kp'25Fٝ&77נ 4{F+֤q~e{D<ɓT-2)Iu HXT?EHR?t7yӴ#NЏK*R8A9t G>SOVERWx{q:01r0l=tܖjʗx-aZ 1,gl7?@MwD6q|3)\+ɏ 紓Wy㶑4)]@=:sݮ!E7Ï@Eʦrd'(ˢ:^ G,!KCNmiutD Wlnr4V̯K:!j2_29 \!($|#59⡷6/ߵ_WKK@u{8U*iE9oIPK7ב <<(X{/b+W^Ơ߈ߋVр+P7ȖDЁre:S'*Ed4wC_:z- 7 RPڕ!]U1cYC,>Ժd&# 2{1?;g{\٪>wӅםN3G4Ju0'9cpܱ:vA~i<=x iTp0o-)SQ:oB܉m-^(eӎ=E`8pPO|.9ڄq׈ vaQV1VzcݔK{36ق`ۮl tՇYձ#t,IpY[C*T֠ҭxWG^h!űHtYB#9Cp}>8g|G69Bw:3le;dŠ^w+F( X <Gkz//6PE\&'Ouq%j_ԋb>IkU JXCgn'&8t,pGK^$d` Vnao:[Z⅕No|bU cp#,|kνzG)|ޤ‹'3\G!3,e;b7.1^q `z`Utc_A"*'JBrAz[&T0'6!op϶dLpKIq_t^<1ډz0A`XO%CrfL3G#BD:؀ˇ?g)qd 8[r}+f9IT/m]5䊳D|>sr:hIМԶw!/P~ |N{/辦pRgp_ͻWol;"]5UW6坳:t.2 lphߴ\b! { x(ڍyB’^zp uӡtVӖñ,aɏQpd _؞GW~z}~BJÛMOypSt2V 뚺𖴂 Äqa5=,MQ̆\ҝ sĹ7JrxyEؘ*lZ}x?qu̻1 &w6>EH/r3T◂$sҹ 0Gk?`zUDݕ,Uj5Fk 2*EH֐E!y{Щi<3ͺ4s ؔt`k0ư'wC0u X< x2^d[d3(V MCEr, 4NWע>O> #~i-Cgl@2|O)%o&Y|eTj ҐPbd5|>P%VΖ[* N|qHC ?w!A *'QZπz}f+{=gRlw `W0DH8 T1_@cp&7l=DLIQDRꥲknL6{~wv|%Š<3eHf-ԏ7_)i.Qt:饏鯫3$p2v$4  `UaUjLmӯ=nCĠ(x<.C݁ ~ Bmo;q׎IM}>o~ n-FQZ% B{6akm#钳̀mUs/-ޙ*Le\Txe},2T`6S;{mehpjf 5?Ļs }WLW sC+J뉴)rjmI]%TtKl,dNQ~t=W@EB/b@N3 U9=FYlT{t}u qg2UIZ4#b=·׮M"] K!@`Z Cq"eZ/]FIgY7(M"ے!?= t`[@y_%W>>ݗRb)l>WfGMUbzy=b3;nu|2z!"X3*`G5dѯC]$?/ؕp֢9?Ǫ@OFGUo%-]`;Ÿ&YO~~(mt[EEJhGti&>ZQ}՟[>s,=/FVkv;Fj.# {i &[!#'-6x|a#@#Y^gż L31@.*wo=\E;36Qp*BUCKrDac'ٶQBm_"t# Eq/5INZ,Tkk$pu˨1>IENDB`youker-assistant/src/res/working/1.png0000664000175000017500000005077313260315532016747 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 7lN(IDATxڤkA& @=ZJӠP zP1Jϊf)H/F^<DUziP&Фi1?6]Ĭ`a;o'_ jJ^z[>cY3_8WdӪ5A&B3`gAg؎->ݷ֌ZgOL N!w1[-]٭?<_')0 ^.~@<*hIef0{L&^ɗ ;nlce;}B#G5\Ѳa3Ze5&h82 zӁZӆe%P&?,.}*Z(l^m˴Qz)O=UkEEޛzK wFV~]n =LkK{YZ )/bKP1Agٮo\ \;qH S'Rr)V :@'J# 7_?-Gqrx^@w=Nq{늨ܥ&$(Aw-h^YUU%+$OI|jv(! nLlvwJIM2P)TUK RL=G`-( T=*&4 hqzS\;*+Cқ0qnT\ K (oHlh`۴x3f,s=֦ŋO?+tl؀IQ} ΁UgPS07*_k`Y+p$pT!_Q/Ƿny7(A.V/hb`O|gD~l8,`\&" 9;+"# n86̊! WP,ar+.Իr'W$<1#{1 RXTD~OM [>T"jdAbaA Z,L5 đ۝TBEU s:[X'W"`nLokz_Dȏr`7r] D>l ᥨiD*:@—s6ʹ׽{n'VDY*hz60݋[Aq ʮ[Xm}mMdGsIt|&M~@#oÓN3UXiJ]sZ|k[s "țO<fLQbs\b\F/c 9?;m-h)sN^k~A?Ʒ}< |*_aiVJ[e[/N`U컧IxdjIhBꠐaWYՐŬRδms=10j6b_u&"V~*$hRh玞3q-UdB&gYWӨ{LwU2J3cȻ=w`E8ca#;dol"DU&&5NzEg0 82_zm- 㢳ZOn^ =NtG )7L?d(er-pZ- 5UdYT tc%86i?)K=/c8*@cȖ6&'HA>=} ZqpSG'kUu 8y* Z-DckP3$ u]ƈfN*6:dևAw!uu,#ɩ).>ZLMH{_׋,_nN3m]=FU6>+_g3iU,Xx͓܄*@/)+"6 塙F kC-Ma*u~"^z& Dy8 6Xt%,rٌ ().GHe}[M̮W%.K.u r3 vӉ).+L.F~,-Aioaew7Gd r#2e{L%i }E (^DqgkKөkY}>0'u,}@&F/ v~O|>~> sH"d|mQx`]շLv3}V s_ZIIx1>:_km!m=Ģ[q ;E˫/(ە!gޖ,א->  Q1c=qsz1Lܵ>xwqCƈt+ZFb @u]]t9e}Bk:vxpwmY?/l>{HËVp/5 TEK7,=d2 RV^^^ض0[rj,_K'ccoB !  \'0!(9J|'qTI~޿?t7{v& FG퓰O]l]e}ko:ml8QfsaL,FL$dd$ S-&!!(Q"2(l21ڮe־v]}߻w_[=}{;VP杻S/POGtG̔kE?"COXxnºK \xk;l˓o)J䣋l}7~Z  3{Tg}[iaבGL|܍oü<8uT8Q7>L>c|ģ?} 9a, Ù4 Xoew{rW+箠ixuMֺ%s=K™dAsWd`B} hƎp YK6o 66+ix gdh>{@ThSdX &R=8fm;M+~w׺? m* Z|ز.4 )MLFܦkW|/^s/~/}A}n~+|oc+5 D`iP@#[YנG؀>HiEŊK-҃+yX Vm"i975:kH/c+kPa?Я|%~~Rv`P+H4Z6tg19@..2{ԬX f1.঑w4T e&$;7mBM;U~+ 1 Zt8a؃\B{/$'l47Z4tas&$ǠAկPm _J@`o^ I9{(%myk mSe8RCo1H~6Z(h!WS3/G|g2E@ Ў=?ش ?v zfH^`2Oob[v.ځ摕-8?~$L\cS |w ?/",k|;i!zkZY__?=NDUp б\C }´GJWeBxd}~l+okeXl;}aM^)zxA;m%<Έut\C x5k첒u( fx ܲzu+[HJuf >Ȇ 1^ME0:mdǹWbBNݒOx4A9v+t$Q̀K1H~-4[H/F-r,?>Zhb٧-ary88im3-ۜ@af0z]F&1ux]GùPyM7;K5 ?̍;拖LxN,I AcUZRA W =З8/ݛB7&UW&I~A9o]; mv3=05^O:@EAz}3H?֪ݒ KQ,& ojP[~qvylx|Fvh\R*=-d`n2?ϛthQ.HNۮcf>.Z'aj|=[\a)HfR[/W;`k.XCXţeXP-Uߌ"ajR)u'=~!8Er!-NK U$N|E^zj ZrO2ٶfb@¶c UpLˊ \ BL`זE~>6^ߔN$D/M1h9cQ$_wdW^8Wڛw,: 2^ЧK۲#E ( FPc[L`/5%s(N=mA#XB:sK[yST9yǨmDP=+a S-&0T"k>PUȏ@}^!~&Ou` ZqWPw,)^@'7@قźeчS׉wK5.Q Ac^%Ҳ| pdMrF߆ڠ٥W݆y?Eɧd&/8 =p)7 V67TErY `έGHyUׁh#t;26"؞}Vn^s`A՗h_V4 G^̲_@W}/3 dv캅'^V$H1).іl'2d1zy:B,/{u  cFMkVq~y߁4-#u~ymUʈeP뭴 ǣ^$YY{DCٜZ&ƒGNBbp?U}g@uU:H6o oənoJTX~#Ct-kKAq ^|zJ~Hԯ/(4v\`J HJ BPAj=jSVǞ.x=Vmk]ڣrPT@Y}!{ޛݹ̛;3/>&{oo?RЮ#g#VbF`.})fb#P=sw#5[ H,zbU[}aJ!M:bYRVH.<%ȷ)ρMAFL|"h xK}Ty)´-_g?`Sq/ ڢ~}x..al;)g~n6 0h@ YP'3Nj_S>`Sgr%:Kއ!a-%-˻Ob!M>-$g/:dXf w^3QO#w|9Aq%Wk~X.FE.>} [ v>GVB PZKXPOvNCF.z.ٳJ@Fdx3ۚF搇V&_bEUR9>Q}iI(VD\o?OWP_H`wȋܵy"Y).A{(A*;N6XOȺ=Xa 踱|\ƞ\h};{ k_qMkmxM[:dϱF k\5ü1 #hS[z =矔O_q!`'Q4ͮޯ/f{yI ^0 c#3e|V,M׿~l[MrpKb蒇~F%ڰ"G+˖~,bUZx- qJ 1]Vjx_}#}=FAe# @ jX+3b}&ǘXV3Sb,Dž0&|AWrIW~4Q-[ӢOZЪ%H rDc `{q !<2el~lT.܃Ɉ6cXѵHX`{5-G5X';0h I3)*`O&z8bԠn{uu0cx6kOʹ1l}鏷 6‘U&C/?iD ypTMByP4+}!r_za͌3Ο6c>% Ģnf[`l.'Vs3Pyv8' _G xEx~iE(.3#`/@eMĹE!z`6,-s;~67[dǸ>pjdpWpc˙ABSh^C A_6-~% haՉ$s6">,1 zt&Yq(b8gF}wluQ^jF>[SmKge#w/oU7|lHg7L3۫`pF MBnvA- mIokFo|SRkDˈUmfA7:5ng$ BX cL|*apA ^A(D\2J׮:$(i A~vY> -( ]ՕmvlS)ZY;hn!}QYY[ڴY3GXcg!E{eLI 3']]̍M0ڲ-g<mbi}Yp\?Ggۢ9N>pfY99ׂYS WWYI}gP"`NiG5]3=U6+s) zAQD`ZU:LGͦw=#S &L[OAK:п)? P7TO}I%Mz^6=Zt}MM0ka.4ì2XN+ Nc?A[5] l:r39e1"Dk8ʃcҡ`z{S$ M'jyB/#] / Q(EM3ƕݽ :}XBGnݴBUN468]jqA f?Rׯ7[uj,`;R9Ic=Kĥm2+bfˣ_=h/N/b~mmL79bոu:9&8f2.FxiW溽=Ojj{w9Nf0M,O^߸z lޞncerYu& ll1A{V>׭xOdfCn,aZ4*evI6+aX.cua[W,*`G2]T}EHƍp@StǴDAמY':]{ Ǯڏ!q!.?;VOqG0OAzkZh'DUϽ(gR8C 8ũ̌u5[-A{v\(#xt, 8ivia͢F?Me4s+> &hQgq^ueQNOm4s9`|cz\`qk7$'#%ꇱXuqMtw>m7DEIG&M+~z=mɑ*!S6د8>]J,~Q|9qmz|GbF.QdID \tdF=I_^gX~{W=[V4j[ s*AW ~`~:$VVL--sGrJ˃F߁LKY z3*ɗq-FW,$} :aV7x,><28O [`"ʤ҉/ Rl-@(ւ^ cWХ×j9,ˢP)PsLE:|b V7+Ag6n6 \HSiBνbW*E(?C(?3!8oStW-/C32;#Gx=Y2.*."P+kF3ߘ'$ߚ|Y9O?|&/E5\e볹l/?XUlk#7fzKp8_2vnr;$!K/r[N}wᄤ`ydd̽2_BVA^$!UǤ~,U4H>[fJwRytm~'H[k\J͂yYeLbilxY)&w֞-`\IoWd.g6zp͏CVI>ZU9Xq8.}q;E]C;l.@y,@$bsPJuOH8 e`8E!Ŏ7 %VS`9 2FU)?QΐrYgX`71 ߅ w}Ȥ) 7ˠfضvit(ns dFL "|J"] LN\w*%)RVC\FX>- 06ą"@* )aw2B.( qkEOʠ4 燳xӵ /9|I]GJYi%kI4MTxFtsI#oFii/It{qZԈ;+!#tsߏ8b" ~xI6ӎVZl~5to.8YDL~8<ϊYr(eh_`D7!n N>ԝa f6X 6?(.ABGq7-0ρcˑ8nkhѴ<0ЁGtaJ0x>4]?agM2SYFϚ0S3L,V~6n,L\Ki4rB6-ǝ_=dr{ Gv3,>s9 4+-o\d:',ClQ旕0,Sol\Y?T4w|B\JNɮ9&Q~@e}4vC2e1@jh|bfD(S0A?HPoO5R`9Q"utbїNWw#>Wu`&t1:P{>KAG\ƥoջ챝p}{`#ώǯc<ݩ' FE6䃪Vy mfC*օ9&~MrDǃ[$lnrCtv j,\hJ333 $p?urFVx)Z-`lkKq٠ԵMcל:mw~S [kݖ!Z/Lk`9rn=AԃʈA]/AQc-xqs.2{Ip>3$AMp^~|;EQnp&{У.ߗgOb3&TsnLRjD,ҶrG{LȾ\v6SiYi|X! R`*#:V'HaZDg: ǾDphN$z!c3L/{͜E^G߄[\h"b8e~hAZE0>7,*8U(x0[7nϡ68W?k1^ 8Uk!1{CppޱןQR"e({p4[t e /^fاy1wLGg'kSv :="R8@>rHzjzkO#{g6,V9|*ٙkꐁs B~ ;"w>؉lLe)"B޴+8qJf0ۥ/rUO|d[WUr1`;o7pw|\+%Xb"=[1+4o HL>Ņl!=ov ,Y@it,Fy;8@TqA0d.wksu y͕M @YThkw4V S4Mf:Q pkY5&}OEnc ŞrJYBDܰ8Hܐc,1itVrbRE0]/b\D )lJXT(hkݢM78W7NW=Z$V f8Yާ/Hx۞^jlw46|0<{ةw<P]c2We$[A Lg#ާqdQE(bu10E~PJTL-Ĺ;ôsVQee1$ʧ `882cwJ&}ݟ?W%}6$lϼf"aᦇן3M@J?YW%[uuګȣμO{nL*R$O9eK'@Q bO.Bؿ͡u88Ɖba>X૨Ӛ2VTTUkk̞{m~oUEK,HήSrWn7z:QJKT1]qP[ιPнh&C kO977Ji;mVp r,GI AǸOoզ=z˵E$aL wsqQZ[!{*᫈gEanXF˵{<1ѪԂOPNW^E=nk0*?ũ]\KT)-)E^JG1أt/qхc_%RbɍAcToKE2|UN<@rqRcI{ذxEq-u fr!) gbLI*Te"dd{azdOO2Fd]v_ZQ1Ag%1]!!¸1Bp_p}%i9th! \Cso2R_G*jTXZVPY^Ug+É0^by ܗnR53k6u# 79&iZ'hK}PPaYH@6s|U`c|[i|sXdlR`IBʱAO:iOW7KZ\UdQJk2hay}s{;FJX]x0.9|w0}Z C\i$L[:xAOy#= С֝;R8IM{mc-A u盃1ڞ[0T쨘lXr7?} ݬWC"V=G&",%%dzIHHRc S? LӦs'h ĵݑihiY2AF߄GXe:u_!zU8΋ˌn"C+} !`I -=}U/9"Ϧߴ|1hijiΫg'MU5βE\]1 56P}GæV}h`=h]BY| EAzd yU[N ~S H MR SvY}%vS5hX}SUki(_K\UKWY1S(K=EHJaߨa$^ ղ١'[%߾H>au }[یW?yxGEj\46$cY)LSDW/9P.oBs̒/8ѵu1(ب'O{_$ Wou!S `ђI~NRs '6 )ArKW.̲}LXXuV G$Kٛa0P¼U ,He1X%5]N]vt":1$_3=\=_;vcۆ4Zv֪zV?~B`76UR.G@ y PP  e6zgMz3^f;{G5&; ذ)&6b!J&ѼT Yfq6`;ZڿM/u!,x cmϲj΍,R\UZ̫Lr>D|RGH\ϥ wxxvGBʀr\%\)GJMp,8z0C^I̸>\'&1cSs]:lOSA [Pı]1ܳ}&;iy"+軅nPO%\B6/#K!GpuN~![&Rcbϼyf)bd^R!uE U.c>Dʡd ؘrhLʼa06YLTM\}<5R&uCz lB3w7뤄6v%EV -iu!^-hqԒKe8ʶz85CaNp_pG'_ _E 8 p ~(^SζfvfZ%D2H6tZ9j\m%1!?- 5 f=bъ 2ܬ"A<]r";P;!ԯ l͢ע^z)re(3e'\ukN6}}k bcPV]}_wfvot2m\|8[2O3G9?;ShӁCA[8d{tz:ׯcer;!. !X<8蹡\CXVa۔6vVf?88897aVؐVD܏8̆ɡl_݃=K8x^6䛃ES߀--PI6kEn$@_U'_VؓfwGxy$PtJ7-8֕|;V}>?9l*N.OٵY0a7\f~D}Xw-!@ rmg8lC{f_.V,I#+(א-^:b,Ǻ < (8!,d^ʮ7)H$XL ;t;b{/#D0/l e9mW&$0?RЖB R.T?GDe|ڷUnY}._M$Rd:Zp 0$ u^qw.XV:2z`:~sW}!n<-p4!*珙.;%SEe@}Nv>!w~~V88~(_]^D`']DE m+iߏ`_ПG(u+vu{ MZnjɃˋYiQPWXKvgwEl4Gf!;%ʈ#7B"aɕ@Y# [F^,*z؈oIENDB`youker-assistant/src/res/working/23.png0000664000175000017500000005222413260315532017024 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ";PIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?`)0 dY|#E k/<êk1`p]ѓ :x'쏜R vWk06r xS x|6qSFX!lq, L%(A `pχ˙2B @` C(/rDv0H.yЦW(ѽ$ބ vA @8/ PfFPx8X@l r((rPf&&HI` 6 @4"<`L` f[ ~{O5Ѕ|_t/ g~dqd}<7r{_(5Dաh ͖= B mb(vRp): Fb@KD f$M7cmV g?Thu&,=Z'pb] phe zfY3D?^Ñ.&POTK07F My9PjSjۯP?| I H,J\wʊwh?R $GmmXY@9_s"?/IH&x%M"rRQ6 rsW`{Gs(.P&J#S&PГ#؄C: اU9*L%TVA0J5 E%GȀJd^~FoD 0Ci +H]v 68e \ >T wY&1zVe7@׾ש?~H9  ΠaXAQA##@ 0dDM9-ᠰYr  l j (2[xPZf 7_zpg?!A$lex{f#ЁA3/>幧(A^Lz# ՚v7^ yFZB $"655 PtSKK~pAq!A UqR7BQ*]( .ܨźZcI1MbsM'f&}&^xdܹs9g|^T ;h,7 }-gEhl^pZKgށaKlS1!Q/DU2rw?;rSҲXMa^,;p̋"JL vͷVlrȇu`Їi=sۺCke&.2V%6ށ&vsJ`)co/$|-SWЂ<@p*z&xitCl&}։n+UaǸLiQХР8b*ΨR`~[F#f`E^#(&;mO#JQ2KlFIOQO&B商s>B5:ޝlW`tR;\&b/:>rj^QᓒtnӰ j{Ai|1?+7B\c@鉶+ tE`Ly+TQ.r{trؤVA et`tJ` TNvFpc,aK O+!y1b$c#L |ٻ*'|8p-q(Xs˾KHD냤؋Hk^+7{ٙ9lN7_݀D SO%:]Cxo~Cvtͩl^~rX _%MnmE:>|;`=b3./ޗӁŶaԝmG+X1 cƠ)طɩm.rc%ӎqrfV7t׾suI$TCyL9`te@~yIe_RK۫PC5 5ޗwE[صj$y3RV@iVsVʼZЪ%"8S?bnK}M& :X$$PacSMDIw\uR}]ZdLњ:-eF xa01~͝@DwmW;N8JNTe|$|Ai=1^9A]JUTsdp@Cʪ#j+) xz,ydM#~9hE]{Na#0M:Z9ؖCҏ;D5LtKW2ؕvY랣sz,e V5Zqx*qfp[eO:n1 :?S8#h|])>ypSNYb&7[( >Y%imT:`_^YGhftnjGqAfѱ)[/MM+'40mf.0/ԖV(tT;oz%:]tiiUP(&}=ZWf8-]Wò{ y먹\"匵 d*%-[=pӥ(H yU\r/Af7`wqQCSsٸN:-@C[h2q,$*VzM Z0pkh-Ҿ0 uE5}0꼌hK-Z|"&1jlȂLc4`Àl`AVvֲ6Iv/yI%iYVɤE€rC0 ƜLE4PCW7cK ɂ%Z1}Z,Hq#ս/:S[>Lt2:J3a:=G1AU%L",S!}) E0i_u^f{%蝇5r_#CNv\p'Y9 | . E=GLɩi `@WqE\@~`8b"#%@`tܣԠ*L&K`HSR *pN2;(dC)~ޤ<4ڴAO4\ X,Ry gmhՉג@t fAbDzeeI߁ybdҰjn93MbYM3@aY'ɪJ˱%e|J>[4—`q,s_.u@7ױ",fĻ{½, ( $wN/'XcP6&h:Մx/VҷowH K?1X1JP'S6EЩ D 1~d)a0saϵ<^)1DN׻7kk7E1H~-4zSQD$} o=66RWU%V}A^A٠!4(4_~vALNY3镩+7H?x{oQ+)ȰiR&m)-28?F>>5Ko[VG /RASW ڍBYf,H  7?eOGIUMkL`^XLt0i;5MfmܣOiwݾRbSEB`M* p fYc PQkqׂl (k)ǸMFmK-*NsRqo+tcl ,Iqu(yF^+leg\mqn/om։f[ +h<_[B=|-QJ6F*m˜/&_Nk[[Ƣ&7񝰐6_RJQ}(mBM xemt3G'k֔?肘Fk1#F& b`oZB4 auګD^ƨ1!< gsp.,6o*:+ 9|WK̠ iza Bz7J-\'u(`A† ˘qdQAˠ [msNJL\)nH7\#0+-tT$"JzYo>B1s1P%d˄rT|DHd?Kh(VHʧ|XM& X]αH D@xcK!:Ɉwo>Ji3W𞱷メ=vSq=b4y2<,ݚs<λO@Adh:hϴ˸[`RJkQ:Ɛݹ w&7D̵03Ƿ22Ed"r_ַi~ ,;)fk\?T'|A :xpy^v[ T%h*PX#;V %[}U'vdo˰[oEkfp\-{@6 B*uh|-)lmp5Ԗ `Vc;9w> s%L1fQl lRlOjtR&qrd QɶY;ƙȊg 6޶B1(\_VSm뭁Ȣ}\r'!lkAmEkԘ0_qU4QRk4;,͔e dtϪ@py tLfc&Ɩ2ZnpQncWACKH ;ͽVQCakGu"Ycw2ҁQfG䍘R%vX6 rL1TR>0GprD1Ro瀂8<AOwu+=C+0A".6>:QɛG{( 聑CFE=[j>HTxn1]DDEm*ǻOV%H^kސ&/`BK*i??6y=1`f{&}Utڨ͝6<)ouh)?+ n&˷u<Im lek\}:8|_ΞDslPMFD " +BC3v&!64*׃ td߫)z#q%Y hQK fCm6@}I5]uƢ#ӂ $ u{җ6,"=z8H@D9}6F-M}qpv7bU[.VD܎eoąϬ<d.CNL}}/?olgo tGD,x9&`]R|~ D9C-ƛs;~sl~3 CBw!)"$@c}t=@nKPosrRLL>nCT3A@JSscpOhUᦼӰ^lBy#q8@|B瓎`_M#k~[U- @'Yj!hK4<^6\R٭\(sĂOS;7\"NS#zۆqq(diaU>K`hnwaQ U`SZ0T*'XYjc6I+8Gk*0bmB?^7\_7>)Ǭ~D:)tx|޸dUI֭jv:q`sN&jd/6$v~'V(_ 1o92-+ $Fia2 $A Q[!e@] :4X|zAtklHt;TGh99+o+ca {n2[Ty> 90BOvIHXרܣt3WNe/0s!Q<:,v;fAOfl~؟iFh<L:-<+i4r}Y\#=;ǖ AK*8)m=Wh2᭜zi1>NTwjH%Nߍmwt׵GuzmS@&#?Zw3 a|N@Ÿ.>eH-; Dd2ˆt)Q-c|v)x|_vga u"r%fmƀ=|`z[Ιj3wU sHodc5nW8d{ȪݞVG냚Jsf Ni/2${?4Ȝ7U殢I-fvBvNcjXy艨j@2UqᰭJ:YGtHq@ciQ4s[٧ Iܗ/ŲCջ[$d\x}r3(ipx*ISKw%B+7]`{"c EH`멋>T˖M'I(BlQ/|r[/`W]a{DSսVaan$/h!NyKS5Y4c8sy=1F?fE>:}DS$Uue4oĢS mڽPelK ̓NisPFZ0mVT +K>`W~0֑N]fUPUǬVl nQmt؁O}N1hm>q1*J)'0`. d̉d]i3;KOmT2 bGɢwn k/ywU9:V~Ač\q^DrķzlrXdQ8}i \Jfijd噧[VzQ߄OVu"mUÜAN$!6t9Uޔ5MӅYZa٬͚4n̵ruhNf1%ޏrU f7v ˲`W|(7EHqs|t8zN8XX7l쳙H 6ϕ r,s]6̠"H~ (bDM,y`bFkR]Sߔ@䦝IS Ӣ>)(lULZ@[F_i%A(W WAz;GPЎ0;B[e~ -A[Ņm4+XS}'Պ.Lv;<#蘾=<^6Q 5ݾp'\C\$PF 1IԪ| ٵ l(6fFhru(DPP ᚪN7s)y\Ea4 Kݬ2$Z3r91wn<^>Ÿaa.&nAx Nߛa RAny|8f8.?+v /%pXؼ]b=LG+",ܙpE$b05R>R|>K6@8=lիեˈ>ycFc 7FT\`Y֐EuHX2>:H NW<̏ E'eAf61zΧʂLÅ`l]mϠӯsD hD=I߀Ԓ[ BVWc`ixtQ֏UFT1ă6 %ΉK] l8Җ!l bBqM{q0Bl4m5x.16FPX7wrf.?R1kSw#+h`s1%?QDYOCAV\\j#'kk4}A<0t194kp^txrkVtƙp=?}@$(ЙWg4C9k.Aa3X٩%µx 2V>84װ O o ,C &atќ+6~ f3ud C! ݳә5c#[xO VQЙܷp -:AƆ7DF&:>kqшd=V>r哱C-1z%p.k@HUl ,&Ȣ sIrȡfџgOv+~s@ҭq;XLx 8L!Q2$k`[̓$(qfz!QdU1JPSK>֖X [olulbB֐.C rs{`ta7 }edl(Y|񛞢?Lڹiu~am ?Om;fxjc C0Q:&'C\/P#gi%Eu8ّc#\G۪|Y iW{6hL?~3I&ְM@SqAQj]j]jjʿj~ZZj[걭Z.Z" P%l $!{gL73o 9{w$ldg#XdvP(vM/IyO 4Y)q/%'z}/\LDžU=?1=?~ӫϝhz#~jԓ~fD^@'eљ;2yưP~jHS%||ü~mm:,I)t*ds!L3lz\+k3LrF]ߔ/|ILܥ vl]+\2V jjF^lڠfL wb-L=(ʰ؇b:t)z}DZuܐ-ėelVE#E\1]'K Yk,gv>bִZ$~9&(7jO+4bʭnoAʚa}T`1D%H&RH(/RfKggrSk1]COy N Kl jaT+lGմ8@)Ѭ,`Tgvr-c~Rʨ7[k1nF (T4&ˈ4{ݶ0bG (Oɯ=\u6Uuø C"[W*E&xk( `9xу ;-Y0!r5Yn%@plVlnJt|_Ey˅[ MÅa1hb[7u'\aX/ R(D,X[JV|,CWMo8y۰]pwP!OW Tc-db>`^ʥš)Lg uafly=@)o.G EbiGnr$uS)օNq+b@LwHѳw`E)PGlCEؘ'_f}!Nc(xjKNtg*s(7t74W} ǎg!fI[LCT5ɍIGdF%rd/0' , SyxK_γM/Jp lbLP{Ub JB@ɇC7w!OU` < |m<[Kx:q?>>+Gijڜ5uMKK 1̯dF#`9Rx"):nsHE2{Bv.z>mgfƜL8Zt)-+SKkk;H[Dx]7(QWbڵrY|jT+Tp}wmGp>?<\kM )R*,ɘ|.ʜ[klJ\Rtmxa/Y]*_j1Ɠ/:-sH:ѩ` Ly!n;^Hj[T;^'xDyEmoꦃpX_r_3ø_:~ۺk-쀩"筰W>A zIoV{ӯ_|j}w¨h<)ælAt%,Cfg<1v:XO;7Ca-e!N9Gy{I`55O ȜAv('.@8/b]z+lM豷0U3̻/-̛U \&Jʺ;̐prE#*u/ddoօk754w}iҲ$rH!DLQBTT^]vmAY ;+׋41n?$ ua}X'_w! K=ډT$Z@p*βMT=Ji, )EBkvb6YV>dc3Z64ۼ"+XDks"uaMGI`xjp\Ok:tK?RGQaI[RPI"v_n@ /c6rYt{<\='xݯ pc lT ݒc^'ŻrL_?&\(}8oqvS 7<o}މϙ$?_~/]PT*|єp[7c(ig`3Oр,m,Jk$7z[@:\Y oc,]_8-*eCOpcHMrb~dj3ǨM"bD9*15Nш e$ 4 $&]FZ%WkYDD}l`ʅk*^)֩ݿds{(3Q]ْuӁly͍%Iנ'RإR{38tfJͺg ^4?Hooz>/f\GPὬ'X&ވ}6HLhͻG9}Yy V=\X9\鸤I#=H̙Bh1nTH .dKrƼЌ=/_P/6~5MԴ=#h,OV3\8h)b2V:"Li3A,fI qE2UOc](bcVgtڄ?ǁ-Y7ir&t0^>y%*`P9;e0]~|ogAq1EZC6:"LǏmX~ld=tG}hitDIi(OdW]+eFW{TF<*pCvoCz] |BQѽTɴRINMxfkS0S3` Ly1qdqm3U8Oky޹6TIMYlW45>AAM>{;ջlIbꄄT!+<`Àx5 -R<̓?sUV-_' ! lkRh J=AJT BhwPé źH86jͅ|6 fLW0KT#-<֧wࠜ,].^/2Jv2kxqsU),QNDE)}< rinRXJݚ.}]FG'?$k"nt쬽♖o,\^e%f2^Y#oEC)RXsg,6\٥4{(Ey7ϴ a nk?jNoq;(+鋞eL[gÊmmH+M+y/p0,/_[Ә3[.G1 S0 "6s3b? '^^R&Ɖo?fHki oʇxN/f@lNR_n#~td ͼ5gzpR"nWتnEk?vkYIq<ɀX]hܦ&"7/@6ss-1^9$\|:&qz\:%O+ 2n:K}s0흧xIC6i,%ycfa wG967$:l|8Ⱦؽ'fwmv1LCjP=~qm.uQ$2cLGʇLsxsl؊sr;&P1,X2Ŕ%Pﱸn^G[4Xp5Kiշ|cac/r, mWJ`%8mXpt^,37)tFk&ćH4< y^&A樊4ߵőh4b;{WͰN~,)]`kp+(IgiZ(\/ WKce3(WX->6 m?$-w4})"U9}XnM0RӪoh|h˅ ;NCAvDt Y;/ѶH#tNoxfHP62pb'5b$v‘"/7DQۊro{vH;\۶Noщ=`okj}z'RsmH e0i+f`CZ2b-ơs &7D^+B?tmzWWK{/sͨ ~z8%-Lh^E7iy7ٶJ/[؎ ژ;کENRm͸(P$tT"%SFb۳=ywqש&y%OihEmNOaQFZkGU)nbY 58L,6ąS(văϜ_)ݮ8䖧2fnmdcgZg>Qg&)8< A-0`['a8nygmiDc$W3XF6|SKDx?29vRp`9lnv ׶jD˺}4Iv 2BIbe %qs#jsko`;i C&o^y{MmFʡAOд[) eR*rćKCJi$kDib5x_ཧk5cX,G4𩌈VKPhw:)Ԫk5(B#|IENDB`youker-assistant/src/res/firefox.png0000664000175000017500000000520113260315532016553 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe< #IDATxڴWy]U͛}ߘt2Pii)V% !4jKCPD +DABSe)3 Y,o{_gH( /e8rLʮU?a筰L&ա (1KVc"X1u*pqtǺTs;[lb+AaC˼j|^XqoG\q+w-3-8TP\GS^lyPP04051 k Z)cKc>ueq*Fs:!ҲCq W4Dp q @xUsQY".sGs4p7lͻ;. %\Տs!F?7h)E}Huf;*^9ײ<6ܦ!x=E>Ҷd=VDJqMoOc_5]e`13˃f F^$t k`B1Lv5Z-wP뗐:߉^4XZ9}k E{|\%Э݈ˡDdLR,Ӗ uf F2\ EF)Ua:{o@L{/T.b@ZНdBp 0~-$y{g_a ]|pkWUm-t1C%k2%2%V ,8^w,oZ7pv^Ys5o8̴=? F4{+03$h$bc[q/t6/ݹyvvB ̓I uY\ЌM\yV"GZ#,bE6ZA[(]>_ʵ19eGHs>ހ]:XJxYHeױ𳮓;T$Ez+zBsNtG2x6koa҇ / 쩁g뵸n$:v j3H 3 *~_& Jhm-zl[qTʢPH|[K*ClϦ:}AM^ZW k[U.q91v!J252G(m&G_C^VQZeQ_0̜g%6zs{wբkI*LNB ]K¤^/<@HZ `f2gMх g1>G (#R0x%f^n`1v_tndV!IL;)y>1>ڻz)$C=nq,VDOcxZWrBAʱҏwj*uaML*Hŕ|b'N/cruEґMd,2\p Z!ݳsr)-Vx=Eớx1&-lbcTbcί!"ȉ[aj$eDˬhN#"C{9"$$o^\$N;D &Rl,aS0j+L' *7lh7ųFWh,Pw{'#v[;IENDB`youker-assistant/src/res/processmanager.png0000664000175000017500000000401413260315532020123 0ustar fengfengPNG  IHDR00`ntEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ;C)dOC}H/uiHD6"(l'Z0±P<ɡE /dzي % FhD* \Ә2J4eɈ ci͢F^]Ͽ,e~w7U|MzKJ_8Mw\#ӊH+ugj9-4$1D__A?M+~fI6)8fr-1FҴ{_@ `q/a5ȢU{b) Ԭ,;"jzDWq#g!5xzbxc;^0vȫdMޛB[ܠ#juBYLki|a&R+gyn73u$twhSY,ɦ0O`h9?R0B sQ>\t ;qT>.śN̓M=9o5f$/`k<|zOi).z9a Kg҅#&٫ڪMF&xfu˶o-μ@Fc}sD:࠸!nߺ1|+ [C0奆c&!þMG@OBy,/P2Zzj<א  ^f7t3(_sB# ,wA? 2'TQ_? b\tmUOt9*$Jǚ#1tL Sj۰w1_儬?$}9 :#,j ЭL''ػwAWfKvwȤeI&{*e.P&ŦXX}cw6.ʼn+ҷ} 4Ff^|J0*(tWO7x%IENDB`youker-assistant/src/res/remove.png0000664000175000017500000000214413260315532016411 0ustar fengfengPNG  IHDRQ(tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp EIDATxb?lf2`b P/P`3HaZ6TB@̀@ڌt: d [En،*Ž$ $b 6:@8 8 L Gݦ8R}IENDB`youker-assistant/src/res/button-hover.png0000664000175000017500000000045013260315532017546 0ustar fengfengPNG  IHDR-Z tEXtSoftwareAdobe ImageReadyqe<IDATx1 @@]l*]=xB.{0a᳤JJ52AϘG6G8설5KL ZzIl=U8"y]M"A r9"A r9DA r9D"#r9D"A'M"^W@bG~ ߎC9{ap[;?:7IENDB`youker-assistant/src/res/choose.png0000664000175000017500000000417413260315532016401 0ustar fengfengPNG  IHDR\tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp TIDATxbtZ00@{o30X, 2#  n  @Hc ` $~l˟oCydJ3i~a*($m&Rs<|,,/`3\ӹ'5e(Ȍlg=;6%! $@ȶ,}qS< i `Wzg= `f``b*-`!/ T3CAFF1^yppÎT)FFvMA?0Mm-4З ˣ%!İgY~y̠"RGO<R)*"\ #@Lv @p4Hy}g*Ё@u/yqĢ3O,8s-iP,#6@r#0D?Or@ie=BP021CUqRb×YiwC $+H'Sa?$V&FCL/$ZuQ[3hKaկ@/!HWDh Wffa&F.P{ @'V> Ȝ;(OpH!dR@Ġ r+L @_FE$ͤ`TBhq  JT(.Uu%([Q]tZF iC&w4e7wϹ'e(- Hf_׫p3"oc=,~Ѝ!QCqAt'QM^ neLeq;"a@JR6Ȋi߬&|h5AXa\igtXEOmaC d۔}VU!"UW/0)Bu@dQi,.7zLc-)RiQBqe.#.IENDB`youker-assistant/src/res/desktop.png0000664000175000017500000000402413260315532016564 0ustar fengfengPNG  IHDR44xtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ^<9IDATxܚYlLQǿZJl}E,/A"XZQTDzX_DKbIk-b'!B*ZRH,Aeޙ{2=rE2x0{N ׁ1E~wD `:xji 4`] ,]A %X`6/@!8͇FM5 >~:csRbPaX' 4#zym,kvPptD XFЙeqhp l3;i:3Y%%Rdؔhu^qO8h]G(P 3ΰ.Ŭ-CwTwQ1ef(5xO'jvx OF=ub՗q3o0"·4LKZ3CY%g!X%B1R7QWchÚ?܅Cfp7b ZdWZYľXglgTuٯrd%C.R]n8.&\~Nf]\&eL+]ꡧ$ ] iS$fZPKA:kfIOCG5\ߥ^h@?lX[;OkiM1v.©P˗H1͹x.֪֞!DGW>4|k!\CԽ9`i/bh$SѮ6aɆ\YpC9.)u4l*1!ApVe4ɸ.e|n앜pg%sL׳HOTn`3D t'W[A9.Ӭc?Kk%ǺJRհoc آC~IDATx]lUg+eKhmbT#ZQS`%XE"F_%1gchUVUJTs]v3wwf䗻vw3ιL$[,a>@E,Fy+1sK3/(xf%xX;U#>b/16 &b=L#Lj߉Qx8DRyQBT=$TE|I\ D{<ƊLjF{DNޛQs׈ 5S6ɦux:b| +Ȃxv pl nQ~b Ɂxv"~=oDl#ΣrfbK>DOd6qb`/,(K±Vcvh6D.bq068l/Ko( q5fXXAfXAGP.1ԱV*=\M3 ZP>81="5"v|8ZZc&V2x_ ާڤ ޫH_f-=YZ](_ @ٔ&6š^]ofhsZ%Qzzߴ@%VͥZnQdqXmFˍ՛;-ߤzeO ` crJ-` t5_ozlKs-LՈ 案Z7[u׉t:iݦNv}yH_P䕈DBH〮D2ː2l)]X!])]drkWdchIɅۈb4WK(ږkeApmc@sp ڔꪽӖ/ݻ-I!I($ΡB8 e :?t=\>Jڜ$j_!01ZA&m{vcN5ImYL-Iu֝C{^,d]xȚJïn? S\eղi/XSʴchbcŢ~mMK udpX Ϲ?³Z!}lVYi%>JXx8Pzښ~ȯԣDsՀT{>#u~kY-8u_ꯅy2]ǐy 0͟,3&ҩ{SZ牲pooXnOeM4sSX06=GbXirD x}(^tln͍xޚ|eBt adnAQTx,z ;#/6!IqLJx"X4}*ܴ<VEUljŐL潍4GϤ**+o؊L북~!_{3 yl牡mKd-29_MV#(Zj7<]YILNɛGyx4 mS@DG0X ( ֞cb?;p<;yyV={$ܸf.Ҧ Mas &JJ5jY_^`M۷f+oT UjhAfFjHTvwrE}a+4/a};Ǭr6Y/(=# %fu=FQ}JZɌ! Gz z*! lɐ>Zbz ۥff^dUax./M=P>Ԯzm.]My(x&ݚ\H` rˮI*?6Vǟ&FMl)\>LhUsM7|HWa҆0_k/=+F;mB K"oF0yL!`/f0 ߝU+9Ved3Z[[wxZ]eۡ )-beR*IgG Lи49P?,v^j!Y] #qk[ZZք%Ҫ&͏P(jC4IQ(6'dN~u)Ybפ.QA9;2r:kSXn]XS2I|Hf:vp܀r":Wr3f:P2ꓹأ>yp9Vkn< 0{\"VMIENDB`youker-assistant/src/res/brush.png0000664000175000017500000000552113260315532016241 0ustar fengfengPNG  IHDR&&:8tEXtSoftwareAdobe ImageReadyqe< IDATxb?/N Ā/u"h͵'YVl寯|gs&#RY a###XE;s *@27Vz?y`N}`^agIS|/A|biAyYU /-K%k˳G(>9?o KK3sY` R7\`aagbxîCae;kH v a0vj΄Mзp֧?c7P>_9XF| 3>/böu7?Vy'bҢy+tOl:a {j6PA㘢-^#g<ԙ d*oD!/k# H~ק7L_1lG=-Ph q_c?5 1X`}0\zU%M RD-$L`KDb`3ZmDb1 L$&DZuzSz%g{}<[;V4 CZ&ӣpPpժ}eh"x [q:581Vx&oqW拌%>67K039o|Zؖ90 N"#I?>YBJPK f$ G )pP㍐"dkn$IJ^hJiM{ņ6*z4kA-ZMUwu6M4S04{H4.+Έsd|*;M A건:tf7*^og2ww5k4bDP=KD=[Xh m,5ͼ;;}6,t5ass|%íyYh !@BT=2x%˷Kfs7!@FVD0]K2i*ET1#m9yhJ@d^ {)x9/APΩn޺d>0Tv?"/͝M~UV"dQCe6K_=i.n1\wvs3e;kfaN,ed84M6V]Ĭ|FF]-SY̮(XD e:T A59 o0-ގkf(Ƚіh@ IZ7K-pR 2 LX]G8 ~"E=OFx0, Д@?vޏCp)hZJR֪ d|j}6yכxXQ L2'BSEmtXŒe|-__~eɿn`^uzɑ .sܾ e0 .R60i$ٿt:K;dq{?LVMc |ByK]?TM.E"%`o!RA |}BSSPlê~| q1=ײY[56qNWƽ A-Cv'E,<>;!8<JmB %kNdI=J忊t kť2N-@:~1@SRGdѝ!*a C~\A4BičI㫶׿ȡ GV؊sk<vp*qIV(e#qKD߇"ORx,",E ݴ G?яZkSgM=yo7V.Ji&20ihQ$ bM A64G9)"=/SDޖo-JVԶC1a[`޷j x0i͡ʠo2 7ޭ!IP\+b1XH3h.;ڤv>s%GTqU|g(prIbD&A]Tz}V9?hڿe;SWnپͽkV=:Oi{ E3Yi)nvhJ%^4p(gfZfIߝJIENDB`youker-assistant/src/res/boot.png0000664000175000017500000000422613260315532016062 0ustar fengfengPNG  IHDR00g^FtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp SIDATxbd8f€ Xit!ƵA@( \",b^tb$l#qS&#lڸѯÔ3\&}1 ~ .4A7NL:8@\ 8@Q? ̈M%O2\Q].@D)bb `xtE:?us en&nJR`0xTNE.+K%P|=ظu$ϩXsy%h X1iyW$Lߎ(\ Ldz _@F♯Ɉ'z A]0kam/~ DnȀG#>cL>f8{TsY| 0"t~χ"6n&kBvW@DRA>=Ӟψ /|k_q8$S0aq3S!؀5+!C僟9mYT ]~KYAA͓M?`I :`X.5ZLzo.B?* WďIDATxlZr0˽_Hw.BJyK1]MU>;%lObXJtw>G/&bPBCf,{Sǻ˙lb޵B-@sWIf7{:H짹asřYZ'M&7ꧾ|:k8vBºMw @&uypI^VU2@+[65f[,~5uMm$1K&qL7AIObW':W"nyzK%/<OwɰߐkXm$ߘ& aE549ΆZ\Q톰m_X;y2ȎVCu9byI^)W+ .v]}ȃq:meӁwi}6 l+jD遅 y1q\Lٯ5 $HGc|{? wWo~`q^2.k R2(i \ƻa?P cV"1R0Q$4QjUW`dHÎy/ojs ﻅvޥo[Vc)mM7l@`r=An4k D($iH?!^ *7jtL_r.śdfNGo)pO}Ol(2 +-a >7HC˾+} ı}B&ғ@Z .#]u9DpO=AppHl.N͍Rŧ|B TR4nrlQ;zx{m_jXll^(,LQtM<ǿ"lSD ra>&x";!GkB"F Q{U%FD/?2cOt;-K 5iZwmF9B3G(` p v4zwWe:&xSJHKA0&`\PW5!MWj2%(:!*,BY,3db`<cMo}&͑WjaƀkSXEVU9ܫ^YJCqSG*փ^~!&~5`'f*t=?"Q,z*u!Y7zs:@'=Wspc?r,Qw{1S:\\ӹyayB.He!? `=?gt'}kY6!DGxMЌFułp,)f5f ` _DZ>EHI] ]ݡ5hl= ¥Cؚe0-eho%>CcYX5h#Jf1L.JҢ{ w68Cꦆpe!Afe?1Oly3|XRL%jɃ-H\n9q #™/<}`nڈہƢ07=cEϩy h48dj|\ 51I˱"IUϮGe3=R̎th=Zԇ0UpW+oN_vgcbI|vS,w݋2]MA^$B/CGJ (f+e?↑O&ݜ {6m;ͯ1o`tMȤF[[EiԔђL@B[SƠ` 'M+Fܲp>D@=h׏x衬-kU&tdeV9CNEr?qlCRN$M_Jt8?SpMQJ@Y^D eLc}3 bTdǻqNV܀9'nPGa'8P*L;I7PǢ7#ݰXKi g>aK}Ykye{6?{3pw}BRu<ȋAWǏ期(  o˒u: S/% gKZ 9m UvarZRzcPRtTKC&G Ӛ_ kV`(' J+R-Ax[:t*el#=i]1h v˯'L nJ0TlFdӭ K T7GFE !o~Ǡ}֟,%J2 =XU|yBŔ qS<.xB 5@~'V̕$FwQΠ DzuUAUUI>3Vf&=nFW]\]*x}+Ir8ʏYQU;\+UraɋqI).%\Y9!eùF֮I(}'ZbPo I.N%.yV)UƧ m&]͉>WI9C%H)AK=T),t{H: U@ZxLT@~}<Z7C+3ըCkz[XF^X Yf`r%JfQQ 飼))WZjEq)']ڰG 84a?3To0vb:o&BXN )sޢϖ}+ppuIf/>ֿ|[&%;[j˅}$Nrb>e}k J/h0&'QQzE ݃8c\[ւܨ"COw-n)flΜF*i.IN1J θUW$\>' ͛D=ɧK k+!cɴ*n\JtsQpU;+|1 ٽ4ّ}y;Nu\( ]dҰK-l+G6G*Bjyb7YEp 1H8~h4k@{6.&xD\:Pj#eWi=9=? VEz%?%;oFq޻ˉm7![~o/ߜa̐G2qDh5$j֭+rQI3֜'#դQqESUW<>j78畼i%-=yW'b<az}yּ<nyy\6<Z|r%K򹯐T%yT*oT6; ug*U6G$ D߯S]h?a;kcьRϹ$ɛ`6-].uhД`!U,> U*ۆqtb=߯cw4|TW;g=U85մ{ d8Ix`I@z oaZ`4&룚QvT*9qF~J-7'9Sڜ­nY6M-eo;Z١e}vlߔ̽{럣gUf.l#.тUE\J~I7,h֜EBCAL82,٧D&E$A!1}.E }C\O{]ާw_A߃ ]N5'Ƃ. dŨ9N%dl*_KvSa ;-jw]vNO"z|**}O '3TbM7VZBU\.7E\Ŗ8=K-mY7܀C} \xYo.氝-ԧސ_gtFvb,5{GIlG3;͚)$Y>!Aʨ_om{*}r{2T ,kYΌH"/L htEΜij*m&cR从k)`Y~ }VnBǦI dzӤO bB}By. RY2d  "gyBDuz URnVo/b5< amTU׵]8YXqpN^Цp1`FϠ_k+lt-{/o*8JLe_Pv^;nТߞLWUgS_UTJޜL,F¨Z=8z-7Gӏ3_3vwuw>q{u\Ϧ~=秪GɁ\!u,k D#=ЬH0L%MS2Pg Y ւ*):jj4Mʀ2)*IFsʳml10_<xpE5:Zȁ"Lt㸧#{/ϵJ~}Kփ͍9dcK%`AbQiSU sW^%7^ Jji@I]; 'ӂwD%2wX\2,xԻ ٢XyҐ7bY ޒ>A3Y5'Լ.+גkp`dJ%&5QVBqOqǢ:nP~Y3_pO :?/ۿQs$&d: 'L;QYkT)9˼l oqZ!%Fc&t^HoV` ݘ噶^Ms/K}WE{'3A&W#lWX3Qґ'lM# Q*V CQޢKrq8#w*\PqF= ^EP r >!çGFV5xgjI0Zۿ\>mJ:UAʸҗs!Ak0m4 9ZlQtE:yy!6%AÔzS܉(0~U/_=YsOvwꈚrj";7$HVJMaaʀ/齚*_xP:{N(Fl!4ck-߈(gbzq֞%B`n]TN췗}VtΥ <iENW$)|kWZ\h@R:!WId<-(EUVxBx=3> H|4dDHv1Ŗx8UL !v=xD-hޱvie>ρk9ZJ&D'#3R43 ¹lل 'Y^vC*J8b„(gmlw-|ٻ:9l$B{}&CGMzE,spiz}]K&B,Dz:ѐ "T5wt(DIg'l,}PiO/o6 2=4I,$9lWX԰]F]Q܋6f0 j(%8 o;q s0vj4Q2Cۜޞ%̃˲fO`~DNqjx*_%R@d2Mt56J˙P>vU9oLhkpz^s]樆:RlɄL3`z k“I>$ӡ|' ?~f,@:op{h~@{֐U[#2o1~荰ckʗ{-4`,7$C!:pd!mh8V B^P B$K-%qr g2s!dׯow*hEsnWDd58׳y.i`t;~^ekD9doOЬ/g$X;SlK<29 hдh kc'/OU):بEʏbMt!d,R'hޟN0'q:ӄaJH~|l[sRK~wIo_V#|ooϯW $cdE< ((+gsM' QޖO ഛͰMHvFqrζb2ߧۦ&`%s g Z RHpmţ $gyVT/"Ʊ7orn6ʼnZAhs*L7UqIBTnh9v_~A\\S)xܩLG=lhr iBOwidJQ`b$<8tK7rV7OS#wR.#!Dňrv$\z!oϏ?\,v,?!LPSQS -ʼnBd5؏`JHsfbktM.:b?_li,""$jWĎBV- ۘǵ0'8@C>,Oo"i{bV-ʹho &5h ! m xwF*42xM7h?JȐPAY,wFCF#:v8Ow D<6 MS꿼&qCeP3^%`>"HDsr"i.ڇ@$4[ L<#c1Jqv׫iE[ISei\ 79[sHTHc\,ĴbKPɔ*XqfMA\Į9}H)(MS֕aj.T5/K?FcZ6UECzxڊ9!d@& #-=q[2񋰮WN,t؋Jqr_&<qÇ}Րat!R(GH.1ʒIIDǓ NvOn|6]nA|tC J b+ɝt.XI4.+ ( eH {8 FGw/xycե82l! ub(TQğfOqS·7sڂmNƍ^n\A.?U^ؑ<{sHa ۬Wm9 PT']5NM*ر@\4 5dzp]bXd 2I5c$#\wPmD #ʩ:ތjo5uQ4"s#[ Ϣ%!dư‡с}4^\-W/8a"x qxlm#aOnd!dԤ?9=t-ac>ׂl[z 'c4Z!o_Y(wI~= $w˓PYKoɂjxGz?OHPx<ˆ$ =)3kn>rX/gS^OY?A72K)oUfU\ W!pCX1e6}Gj3ܝ~~81Jv@{mS[qh;3 VAsFM 6>3 &׊dh'k>bbsv4%_Ƀ!HƫV6ip Qb D]ԆzSI.Rb%DB͛md^7hO2ŒIdMqcP[<!FSL;ߦ(bCw+@& #ԷCAIʘ ?sAv%h ^ؾLh]{dSlR?qX/(Sࣃ4Ւ[b$4BA̦@ӷre[ppFnzMn\S\ ?Tu n$QO!?5dqOB6@,)hc"@2,J9XOZŻR^~B+`MEXiR+}LqY]SSW.@H)Ƙm<xa,̠/|hb6eT"TjH jf^ҕ6/:L|ӥCt!v֫rWrxr?]" ʙk<I^y.Y͗jrrIk^I pSbFv7_KNU`U/r@76:~B2ۼ%#۳-i/P觗M^ !hPųh(3F*s7"+k/U(BٔڽW&1٦s!=̝URH|?;/7h̃NJl"!@%:_AyǗGiku}X-L*{ahb4CSo6lW5,>2{)=9QUyT+ru ZLz"P!$+J*2Vu0{xR4T_rGtӺ|CmնVR{)ޘp`VЙ բrE:@(  #ՕmlɽvYsf{]IH,S㹜_OmkcmUtg\0ִo[t} gE}XrXOuYnCܔ,)nehcBV:VpF}:Fw$ϊf>4y)}.no@U1 1-Ku FO1s0|uDzBh@ٴ0@co7%pgP8}8BhXVU \mމw=N6Gs^j7d ZUqˎHj;[c^+p;qnzL14:zT|&a*aW Som]Ue$KmU&Z:)AB%nշ3bl 7>E܅MAF$*Y[:P%Fכ)c-@zp̈61 r*YPJePf.F/7:0ٰJ1l{niY/u)eӪJwFq</4j/P:9L}[\"6"iRވ ;<<5Lj'K }UO`+@eUk-%xB8R #u^?'yr<bm7C63|Hld&Gp$s`KkV,LEXsH7V|nJ;Y`N}jk*M֡ۏ>@l* y]5Ru ٶKXBp8 h' PlYjRl#+&~Ul :Da\v`!܀x9'ajn+-yDmX3+724]Ve5gd*ӊm: _ a}RWTv4]pL3 # "+SmxM_A5A] XdIg4O]]a7]$qXò cl(D"o8^0`9*9~7S` V ;Vgt3juݑrкrWeaئzp~.?fLB aU ֤Vf 8⡃^B,GG\W.(?bT1Z?ceYe ӖU$ۃx`Y $s^fS'# !OA(Az͍8ZVΦcK~*T-[_.eG=X %?98Do:YVܻ ^DOpԎRTi$.n V*NZz ?^W֎oO9U$\} \RcZU$\cΣ*=V2|-ЎlKSi`N=.dj"]݇ ZIl M: Yծ:{=ba$k(6];9fs]ݗ/۲v):2= Ը4? ,mhO~}vfA%+AZBlC)0aiX;M8Xk3rr%*Qa#6:6rXqeU.hlbys#jD(h&PބOI-~S݌J%ˉrnM"e_!֝[yn /h> 3p;H8`wVPvoM4~nfΑ]l/r3Kn_&H F^XS3U"|9_yTzǩ.hFeRьڍP ]Tl8c f\e@ ~(JL?(\N֬8!|W$UyXV:K_qFp05SEx8th"-Nm7ShݰrE@^*Q}QHQfPzOr/hhtqH)s;593L#lIrgV%huĒtQjQ|9(\{kɎhH׋\< %xXԦYq\z4e]"ѿ;?jS6XR$nr4D+ XU'!LMX y"X+')LUQj {s!rDކUQB*錅>UWb,LIVC mFV0𸋠E559+ް*lTJ Hn;lǑLYTGm*=!1ly#Z٘)"I cQ9NI="ʣ䞸݇)xt*Tb1/W\0 @xTiPbYǮv)qP]u+THvP5sx)A!MGg[.WhܓQd)逸AN>0!&a{j'$"vC/8ʟ}Cl,!.p9 [Ht xs\Y 2D Z?Um7V91֩L1L`l>EaECJϬ(#ݭp^u5Yhs̤9_v;DgPEC#pe{|n6p@u>dV5zhN[ u貄$Q|!fWvaKahjQ븻ryӺ_=W^+ @ٗ57v$Ul{lּ]uarĝFBʕefelxZ#:۷S'SӻE*G΀qhcIoPW~`YqJqbr0J6cjF \p''7%۠HDLѩXC.Y]:7I2jW} J`Y.ל(N0V8_H r&6lKRCy笿ZQ$=7$w4 *O?ЇzEo?GRDҖQX jdn˭KMY  W#,Y/I9)5]K0jB*fNM<ՊF&Ch2^ׄiso.A9vy7]G?2CuQQo09oC7z(4#Lj{U1i^%|ڄZ;3kzK 4>"z|'Ms5.Ca'I čFD&4'Ix# EtVڟ쿰FI PJ"Φ*z;\YtxD~ڃMOeobשD*ӒT,ciJP*< īb5Sۚdr@ew=Qq=Mxdߙ \~ژ$.wNblbic@'  GNwNtq^jG>bNxob5rA6@D,G I@/"Fv5SSzv&Gop#?Ҙ&QR/\%oJ3U;&Aiuh86wF|svQ-Mйfv)se *utqJҏW艅CwlFS5M7 cP' mVyU ޯM;DYqz'_Օ672_U!b!O5h`P AoS'|xu^GiSq*5{W 5@V\ لQjH dYZDMUiHɵ̍4W|Ǽ\sпiI+$Ҳ^xSLិE ǫ;F7զR](dl/0;x5NjOYhכʨVրVA-]̨[ibr9&!o-!c$9q(_ Xa $YB<5oxo w~%?ߟN>O6??O76WGX5С, βPXz sQ_2zixLPR+ ~)G#CruxI{7QD%j%ג :{›?vj HJ,NLU_f",0SS'i5FPғ.› CQ~:ü ׅʝ SFfЩ_cYZ:yVdtZ.<':yD+:Ǝ$pAI@ާo E%c8t&QXf/ňŅ8Ų #ޛQwMYV컢4N6Z^+MCkKv(^:s Mԫ1j|cդAB^cG! tMQZ"c/;6\m0B Y(({@QV(ku^MZ3T63ҹ=Dvkئn=A[«nDB[08Op/dQR>m>nl2>lyAka" Kb߄JҍY*B>8ׯ5ι?Ͻع9fc>^@A*}ꚮa O 9=JzPUpNݣ%zϊP#蕆NjWp?kF{p>zWPrƠخ]O2p5>Bc$Zx9䒰j}0(we؏2S} M%J 1um4o9¨ F}Vkъ ZO !R>)m֏=ZJ E<9AqI߾ьʲzG V?Qk-H:v"'xn4 unMyS#ފ@B~! )4W(Ù\y9!nKaZ'3էc,En bֺ}MIl7p)PA#o@%3ƕ=Ln4Ͱ6Sg&2+'ݘ\Iv d?ElF+;a4{Fu쥴h{-FcZO2ګ^f~vcJ cEÆqׇ&po64;t$[Z;lO@spŒV 嵜eNb9tξ;cEYwGc';˗;vAj@b(KuM |a>~"zHM9o%)hPiJ&zcSoo:QM횲5ؖC@(5VI4`-@a/_zG+⤉VdxlYdn IAE6`pnIkwa:&061,WL{K=:8TbgN^trT@\~#fYZ b[G6eZnBJͮv)4 0{:(%[nBmW;].*Z7XgϐjB<ҞfkpzdߔAT^׈ƈ,ӚgC T BVx4qs-' &lZL}*\^@yyP Β ݣ1uGjuW|6ڍ&!e|OǵY-^moTxxZZ> cdzQ{"SP)k0^N';sqw uEIݔW߳AC>Xao H<}( c:jP,P(k@ ߐ||Y(N0Na&';\Oҫ?ݗ{f0h| 'bT`9)ϗGu!rZ"rN=c P|!M'C}gi|oHw䇉w1rxܘdV>,DWSĥ5 F!E\=58p3*O)Zdpo)Kc 96 &YJ9 ,"2vR3Ѧh2T^c&]jT>Bs}}*חե4(PJOE-+oM|VTKSN~£Y.5)I\Pı;|De;4VTZJy*÷|qTw *V$\A=,3cۈ\$(eSI5rGk>ll `2AQA6]s~Dޔm~Q?ԛsԣB]졒ZPJKb<`hfH/=!co?F{| SN 84s*0Q]O`̊y.bF\P:5^|$nYrɤ!>qW&|c?MPuEaim𛕒zV/[mCKE. }07@wF|K04T&5g(}.;HL"A½>7ZrYXXkl eة O]G <\][q9ThQp/A#o{&b193ߖ>g a)u%JW~ 4u]yBԄJEd-SDIuױ,r7g&OГcN"fCgNѽz9k_kfdG YZtUUk2gYF+}3nao* 7hoAh3Bw{B7{>kP8X2_C&Һ'y^/:P`{](+}V{ O}dʼ2Of#l tf3Qlv~kЗwN,&+y '8<"%ݒ"my~@fLj@͓N啈O=M49aԘ9 .L*:6hڔdVfê[fCt$06, Lֆ鴼t|y]UP}f< Z2t;H5C:< eyqbj]cJC!щdosjvEd<fj-jhʩJԜ;.쭴dF /OIeՒJZgMVE*m=)$Rˍ²*v@TVi#͏4mNz%^3}4n*ϹGV>]=D~ͲjF f'|-Q/_Z΂Jn|&j޹}\, )A6ԇ8h?=({% e?06`{IX;MeЊOs>&igDkhF}ˊpFԺ~ i@}h}V9UI֐9~O?&3ۆŐI$A8Rn=](nI )Z/QFX__ye aޞd졙UB3ÔbKpӹtUef=EyߞXJ-$Ukp`4Ih90Nla_DTu͜z;Ǝ3m23U|Ц[漘^Uߤb5A4N1mb%>̝fչ/R"\EdwS/KAVː:FK@GSi'.a*lc}N1=RH&Iӄ5[` rkG {8 d5EY ub6ź8lUEɠmRsP*`?ܪ) ɛ+fgҤ1d-wCԑ5ZQ@]6%hkgp]}g,MEzC{g{c ڗ).uP%J#˗r]/KM'c_Ro`k4@vk]rMe`2<6X82ZOޙp_ΔM϶Y֨ǍZA=;kauX,^z:tQv/*d(5?@w9rǓ=V--wsX:X?G]YҿC2eϥdGwX!X2{ħf f;mo$34+s̆~3P r9[ R<{4w%i HzN\.qO6lsIsi>2'Y<)r{CڀC"?О5z~gfV c~Jⵔ/z=im֙dB 8O67Q~Rו<Ɯκ^\|8E_وG2;>.Fi0Gn885 /4E0kAC@Uޒh5SSRAQg= $a&RTͽlbvps,Qo

įO^jn0mE]AGJ yQT#)&6u3N,I2&}rF(DtjdtL)nH飁ՅcH$7tl4Z<^Mj ,}4Du#\~*7G\Q >itlτudSdji`V8jrA &jj6.~[x#˸p0-o&yFM0?bd"~vS#7Ա:uI5Lk^Do)Ns10׎ b77ZSEt7&:"XR -uc0HcϹHrY: D8ˇj9$HlVO+El"؀Y4$K^.&Uw#̞zf1]'Z:;ҷWiqkˣ $[.\}o(1rb%y\\Z\a\ z]-ֽl7Gx2xrgś9s˷3•{Xu}*b(֏kh*ZJ^PUusg]<>rR3fٺG8Oҟ:ʘ׹(q}.z9shr352 }}00雰-ںo$h=` ;Ɯg+Sz>tI'>=pj"Snl7Nܗݛ?Db3P7v6qѓ[fªd .jFMhe p|1H0VX.sȦ+[}896/usvjBRN'!qd w)9jx/ : ӊW<^*}Jsѯ5ҝ&F3+a2Lgaqi Η|f?Q4ۗ<|Z?j3)-;L"MZOl:?bJԣV6HKek(#( 9-"?e`ʪ}sLQ l$U)ׇjݷÄ=ѴM@-РE% '+P4\?B󣺷f}alG} 85T1ZNM:ge2 NѡWekY.xebn˿捥shU$_l"6rFV=t-6)/Rݲ|K߿s5}_IOe:{uAm\FYOF==4mư, b);k WN"7Xz!^x*cM)"\[Ë ב+֚]~o-Xt`;x'џ!pGY0^p W&;^}ǣ@>nKAO'۸,kG[tO8 F`j'F/ D7SZ.0d3fPq>PS_>ͣ Qz~A^dCy"?Yڿ`ww%b|Bٚ#ϡ?f&[ Hŀ鴾&囚4[1S)stoHppep|wTnmy*n3$|XN2| ^4Ss*qc!*ʦh1@sMrbjFP_F t(Fa>M-Ns'jeVbE ſM$g?$<`4K${Yئ9Sis/9ۇzɝ#Ҽ Nn"c"`XL/Ьqz&KU6R3͉Tws!CV+7;*"Kv_=fQI՘$%"`S`5u':6+Q,=gi $T{:^ MZE &lo&|ι8V0Qq:0jA"WR8o9tڷ⸌rެ*}.v H"}*ohCy(eyRr\""ӐP:Io,-VB<(BVKt'_wff^s#tYakH&: ]RɻuL̥U&"X*;oMQT>MtRc/x{B^g+:sTc=Vzχ[|vl'>Z A 2:Gv >>QO6ƶ{^~dĦ&01PiҪ3Fhu]M5Tl-i8]2`GV<̪+Bf5ۧ9R$ *%F:챳<La"LM ,cTX,ؓ#㗿U5J θXհ#图^'`ÝvsiK ~!LA.Ub}X7~y kfn -ʹLX8"Ý 3ɟ ow 8&?\ų0}k9Ň|Dw$26 {HQ җ@abڏOpxqj6';ۖtҞNE65co1?A_2}$zOu!޻\ϟuNG\9cq>~՝柎Ya!p> O.#1_Gaj{c_s/̓QK#;:2 DFYw:T(iare9aX*mR#rQ+rޱ!dEo E;RPؐ{&) Pqnj7(5PT?6*qFȈ=8'\K[U堣H ˾̲;:u`:ޗC';'4rFɣ|.3f@kǂz@F.@~K~ k>'iD2J 3݃發a' q= S2M6"U1OXuk[GRa>q8mc2L8FGl>˥0%^dL;/CjT:AՓx%q^I>J:pPNռ2 rdoCtȒF " a̐VQp87CiCf :Z(->Nt{l-$I>ߑR>_}HQ[ְx߿,?k ӥ\31v*@|7v=r𜽠cGT+9 宖r#\rqwq KxX{T>Ơ'Qţ,VO0^|#]z9܎Oкǟf!\>??I_0~:?B˱>H>/M$8҅ch^; =e-7'GyY:9牖ңLxat_" CnxcNgWM4F{s-q|ˌSVtV"&['SLjD~)Mrx̍KO5 ]&iʵ>~w4L]ۊ1"(FҀPٵi8y87@]f46+ԈS_NW#VswѣEg[Fjr6 tċ$bl>[!a@J Ѷ (C YBpt:%bee2N%sVuxY\ َgi9v0 2`LE6!Y-g6Kn"^Y[kL:ƽ`慶U.Ry ΃f;b]:%0K<<_}Gm]5x-'x{=XxyݸrW-'\(3jRvY\x )5L07{feh=Ї5cc˸4`]*,bu<no|8ڒr5y}|})뗿T՚Wqy28|Fvm3S^# d/-|z?l?icur22:KT|<*>E}ׁ?b1v+(?&0qgo=8Z|!K(~{z-|!6~L5.+Szw?Jm4 ŸYpUyk)k 1WImDB>充=~e#Z+i+"R~RVY)~g:֏_ȳ{w{|g뽵~D]Z ^$Bҕ魍N\Yvoi|rݿ},CַݿFyF[ʅtw4_or𷇛s-:2/Ͽ/d}4#s{4_~Ͽ_9ͯdۿL:.Cia?D֓oSOot_T@ τF#GҧȪ{ۿ_&#}{?|%\lNhuNht+Jp{Z^Չ亀q.h@30[FLñ;r )ngES^)E7qP/o$7W4zwU7.˷k"ݗDFߵ.7 W$i_$ bWn&\| B g wMR6$}w(g,(~Kfw[r6- :u4-Ͷ< H(G׉ s{-;w-c!x-eZ|{2b.$|kd# ۢC|/be'B;շNٻ$w'ے%pGF P-ϷG;Z7{Zۓ]XݜITBl!7}sƙ:oGWWS?RP$[;ߦ~>Fv~˸|`脯77R|Ҩ( PqAE! },V0&%&0ь2!ZvO zά5PyI:Pb{zh$ 9z:aݾEZ=`v_ngIנF>[3@n\4u1G،dvA&7=I'qZWU;"HHx{m+* {H4ZfbMB $C?ի1գ-Q0-YWD]^Ä́&[ ΋_/!` :hSxDӗVv`gh F0g2DD?ڽ7ԶSWHy wɚ0m+M{GX9Z6n+喻2Wkh}|Ϝ6뙺Rr31zC7L镝 פ-ϔ|VAN‹uOtxo ̟ʽ~3Mn% ؓr%\Jݝ:|ŝ3V%u°ś{OAvpNX~]::AAAy؈ԗmbP$eK;_.Կ]7z5 Q6xy1t͟@ Y[M ~ 6"2v8 l<0F01³u}Z|K5;-yGfgP{в܄|TʿoIHXk`'"vI` woGn*^U †2}*%b4K~Vo`PԴp HΪ'2d ~>8EV@˯째Hl<7Jڈu7LK^qDԖ/jQA*Ut*\S3Ny0b@Om>1A 1j@5vxݱ(a-_v 2VXn7 H`KEhвm\_D5WC;g0)0h=G,XLjtc=3Vh0xmb/TYah[I9 T"*K oχڜ?\l6\vl 7BFշ$;{<ᶱ!v4B;캰mB:vkڠV= C78X W[{3YeY9.7 "jVO^Kiä^(k[jVj4.U`5]5* #L3_ Y})IkeM %te?f&/k}2*#f9E+/'p45u;NNT iv/5&*.J–(o D=A=dTv5Vgħvp3vϛ^aՍ?Cce_o= li -@޴C#@j 9-cvnBCp.7r3 ̧6vΑ໚q:M@6;_# 鴒@6.iuXfwN:B lt+. (xY O -jqLd@kO?~3L; ᑩrY oʘ{*\ܗWvt<{Ny,Kii_L2-tMj~%c=?3HmD\p&e;m~̯tHX^N˱ Vz鶴 Ϥ&IðsӂP<F}/`uڭ<_OVݤ/?Nx8ߑgAYqweP{8ߧ1ytw6ڜln<'* Q r߷}˖XCȀ*{Z9q2U\&ѡ0k I9 ZA߄ߛy56lj5Ko 8>QE?K$$[Cfo_>Bג:97EKF*tU!?(b%Qgߛکpgso:[c[6$p$'mhԶ%{R;1HO `~q\5!ߧN5vMsڱ7(':͹wfN9gS; (LΖ7[6U{-\5ʃnު`B] ?jΗ46.$!p !0cT̆#lq ÝW@ŊT:+ 7hz ܨݯfP`A@Pm+",`Jaֺ8^zWF?Dw'Z"}C>v}q8[S+ T#+ pEj[[Nv3s@^OqSjQ};2?jB*,0uCX+ ñj>6V@"_Gq'rL$#lV@Sd`@'7R:Kk G$Ҙ +?u+S\>|IDyL &ƼA`s'"0%^ V|i=[vz]0I>T wj ʱ b˟BrB?TY!T$Rؗ;\n4u X8R)7$l"a<8$Rӕ *W:W.7A,~/^w7@'sjx3hS^d`KֿhHpgs{<(PoK<׸ᾼ|]Qt/HtULw#bQ<{RZڲnoҳ֙PYY q f/NG;B6|g>c:U4Dɤ\ <Vn)h"̑f:p\=&Tf+EIgieu9ew[~r4jhFb١Ûxh7KrWFpom[o+ =o8ӏ?107aTgn#z < BcO3n Q3ܜ&=ѪW؉7k{%,-\x+"8i{ v4 A8FȞ 1 ) l<&#RP:-*O^"Ē`@ܽtlMdE?iJuLȁ+#[BRTvΐ}"&xA=*+t5M~j2? X: :N5"t^+Եl+޺oalwp}*7*w?K/;l Z~A-2Жm ) ^HZR L ZoCEwm+kK2tJ E@kVt.UM߅(j'e2MVF vceMDU:DC091ъ nI3E0c$Z`o5A~#-SY[.uCX!ٵ1(wA0\,JC"t; \pė@R<ʘ*R]/JWл`>^m4bN9} ٤ ;esq )^7xM oIX^in[}Un5~5 6d`;CgS6'ޞȨr=[TKqMK[? O)+A̱JqfgJtK_~w3'_w;+s3IG-߳p޽6YOtGKĺ\*gȵO@Me8;{zR}}YlG6@ e QHeeO&]'{>y~t&wx"N;1h_IL<7Ғzn>|g{2hѶ#1te`w0%fd?󃑅PA}U1zcu@k5pľwiI[FR@4v[k˄z!Yv0vQi&u WFx ~Š>6դy0}4{7hF98 @OTC'h(լ(()[ՉDĆ=0ÀR접WWi׃v C?ӍDs'c9bvוsidkg :\= E;eJƧ$XR )a:E5Z\ y%m?M/^biЫjbHA?23b_>c` 4`n C0!L!09"pllY}kG~vW/"'ji(HMajUcSr_{k+98Z:uau&Jj=L)R+dzp`tj8;Jw=MgC2:tD &4d܅R|4L5d5aB4TTofև%cI7\/3׸&pØb,& #l|A{\q7izhu mX%jl8ףq6TF}ybD!$xpAnëu /U L77T*w3F}3J'B[&ڔ6E?ѦDF9BZhڗĨg뼂9w,yrkڗF9rS2[63Ɉ]/̉~E=ĵ>7^5D'zCczدPW:6uAutomfluܠ<|<[~KM%XX"hҋ(> #^?vժ,څg<<_eeAfvTvF߃eţ!{ ?:2l;I w)L-]P%H:F'<L΍~i_tD\[۳@x!=#쑡|+T8WQ콌4~؞Wk[k4ޝ4{eѻ_A4;hX4%Kl\m)rǼN\0z?W1rާrSfQFJ \"(jRgWo!6KD=|fWU iHWrëݡְ]|Uj5,!cuKn*SEe!/D7FtJ,OWkgKƼxžWzB3ֈMg'M6&8ax'h} si}QvPc}H)P/tBDpkVr^- U$YTPdn$ހ862$$xڻI;LI`i|q `oN fS|À.(36j&bYRj<%G8Ɲv!7u\Fdp2lTrEw#GE`1FNCql4/!3vf5딏 PHop+| T@ DdM19AEA>OaX8:\Zt@}Ta`&dYڶ갈TKyЁ "󂔳T<.^@b=\3/~ 51JTFd7 1TTHua8Ȣ&.˜C QRc ?0Y: [:t[_+)eZkJ)u>Ɣn3teu+ ۼA.;S_37tܨՆ@5.B;^u}$ bCn~zK^7XבJCϚ;jվ>U+[ֲW5EMlzyvb夾vߜfxɵusIӐzT #gSi_mO{3,TMܲ?RDŽܪ -d:g_;G{krE zv[kH+E@DzP0ke3mq/(]xr?wb׶}=6DI)uZz9zk&ӡTXᖌ&Oz:7͏Gs)1>_f<)#eNs;+>ّT"C{۟Ŋន6_0Nep5'lG2 NRǗyI" @&yL,Yԣs{Kɺ޴2O+{R) -{쬲W=z+ &ɷ?Q nuzwu,]kg:>_ʍ-8ۣaNpbm34-~*KGN MGl#砶y~צ׮Oe+)Nx:tkr5SQƘxa1k8t=A4l}AJJװ!ص$:u ɍ :AfG' 9NJ)FU:]>0#DLV@ j:CJfIpP% R #9ɗ]O'fk&tFϻ ֢G\_)ѯvcsx.Dz}-nǽܵEa>{V N1/~j\|Nιo pQؘ i=R Q.$chH64Bnކzm|1 aNd,?V@)LjPh96LN,C5Rͬ=읥,WהW@lwd芉6)̌>&JgAp&>̋.HMp[ٙ#zI?~/kf8d"IS[':%K/mwݰHBatm2ҥl: 涻_BئxcC<j㻫OiDl@2D{h*G5m x9A0t FqsЙu<wx_*FYlf|ZIOQ ePhU]yЈ!)TXyBZCD5-`2be = 3 w6I{<|;2:io߂w9 p>?}b.N 5+#<ܺK~FHK+o3?'Ru#?:uAN:Kџsy\Ҙ@橞^խW_: m0d-<3%7f8&8;U7X ܑc# ퟱZNc'Vp*5}f ծ*VD7(Sjmqj٫R8h4\UN o! ZVu~*5[A eNUp}Z*D}6eD]ZmgvKPF[[S´NbC]Ce)14I`z7DN89yn}-Vyq HK-eyZ9XYɈshmP_v?m4I˺L Ym{>6¿c&;[ErBabşdMpL--tWM!Myؘ&MDY#p+c )ngCఉtaRZhB%,c;젋Y+srjg G6S+A  *GYiєD)}rSXq BSޕ3ٽb@~NɫArOP&a>5 ԃ]呭R7]{xI!WA|Dz]tK1 aL6JzmԻ.󺷤M") BŢ 2*V!5#OkZO /W ;E*z($xx雕=;} ՚@(n\ X|/5t,yԝ0xnş= ~F ooj-׭վ~pMU/S졧_L4Wzd[rْ7̆WݢgTID2^: /BdpgiY}x1_{;Y&_p:j2"znYvrc6 n۫2ޱ,vWHd'E*0bWݓ]Ś[{k魍NZ / f½F><3ޕA œu~:m0x+SGw0:~~<+F'bvX"]LQrfO¼C{ =i/ R'$]/ХEfz nO\ߟɀK+~y]YY}&)dl߸Ul/h2wc?wQX{-,8]hT–_^>$+g+W/֋. 2y3.$tKoW{;ʺ?Qo2d=^&5u˓}4Pӝd,wpF.$H>Q. MڧłoĢ͏դ[KkM?*S`Д>C(U:mA,b7h(Aގ3LSti)bnI&X䮱Rm@)[ۤqF'`ypX2a$Az\SJD<XENE{ Ƴ k3T X=MGcAxL_)1:af)z@_WRc'L"ohaCENv}FCr4:g?"lsڭ=33QDx?JT; z#.ql]x_nPa%eeXc?L~ՊbRr?vw5avH\W:k[("OOʺ pIrI$Cxob;Z ˣcۑ~g `TW:Ċ4afK)(; DKc kxl%7pU+P۱{phK<CЊ閜,-6yى2x-Or t z"]uW`h&F!dSID{dWwD$}`њDOZϛNt))%fQ_ԽԗOp̽L YNex6)D )7'JFe {}_>g lՖ>P4tܶU2`a;~Z lzpj"ǼXCA`h\' _3DF8N _<Ō`< 7i@KWAo"n)1Eb'{Yf[:V,KnfNw3s՛;VZ|L_>+';s+?x;̨6:QM sݚ vB -#5"!n;f˃ȗ#ۯ{.j胈 h۔zGȕH .It&t[0g ʺߒrӈ_֑JBRwui꠼j ˵txOX5w]^YcP0һg?:]Si5exn_r݁ L[|W?>wRz|/ɧ@ww L[-BOOw8PevגmP:t̪/0+C./^Okky\] o]B zON8i Ҟ[e$t]^7,>vG1UL`Y̒:)c N]ToMVZ񟡝zk5 sC5X~g6ÀQjN\٪Ѵ!*:N“<LKd[{9LW1e 5AO kc vWdLɴq\S0nZ *5&h=%D]23pC/q0YDx ؤxa}2Y[$U80EF;UUB%*Ք<1&0c`Ii3k1xgJ\Wp)/N= نWɭhۏjѠ7%}i)'6KA"okG=%@l2"圝A7T:k;``0log n+w0MWq,죐aC PVC$Typ}{V*tm*de]+C[H&9*+$T"^!AQV5vVuȜ־7lqN7m'{"Vƪz+V=D.!&pj- O| hwC`HNGHLɩS(Ȟ~2 "UxlP"QP)|痒ה:c˓pe# Y'1b, syzRPO_ m145V2Ka"`;]]ѷvoiWق}b+_ty$-o|ms-QOW [:%U`5V??0 *WKmKhg8I#Wޔ/}Y8nfT3%sx&WL\Gzk.RԳ \<Ttg' LPͻCAu9;)y!:@]]2*#>3{>=f~$xNpsdF+Ep_/v7_A&ɗ?=wҫ]@} :!ҳHOϵA$;A< $/,}?ّj]U,gkѾwX_^ӵ򊨶/8rO—NS)zlOL8`AiY|n`̭KKzvPu^ M}MrL7d ;t>`l4vtk e}v3My^glf~C޻!]X5 y9geBGˤ v@@%"ԃ[rNWCࣛwu|u!%vdK8ݼ3wTx@oɧ!CIEcU`-$9uRj-7 rh ktru B \&x /,+Dc;TҬSJ(`D4^~dv{Ln(}2_c Bml/СND]+8Q dҙŪ9bSph] VSu{T`)4S=HxY%yf'QժUUϤN>j^Z`15vfʨG\Q`"W=U3zfhK}3+j90=]B@jZX@@ ͵QM,;G(z㉪G\z;ɜ y ט%wɿXj+h6d ~KGYFN*'s3 Roj^T7l^W~T̍Y+Z*9}" kG}䒣Gd{:s]iA|= +話NݕY, z7kʱg |Eq9vwC $T8̟_foM4R5Tί Q> h)$xc=m)c&Kp\M^S6!Z,rʐ|0!<m,xś1e#SP&3;vTlR{?(3͗otIlr搗wS]߰1]{&_>ޓzyȝvnOOw /żl_,>zѽ?]omG۳Co"4YWҗ'-uOY#xՂ, c@oeMIתaO{ti@H~ƲCND5 :Q;*YI]pyV򄌆>ET}tj{,n':KĄȃPuwOz{Ww S2pappCF=JPp[}K#<|-z9d%A؏4KQas$*UPFy~IM#OPmnn\X)->b7͓2#V*$FscH"TNj,U&1> &&{êq >P~C6iVRc⥦Ft3fz7ڙ>'{]JȨTAohv.Bf  Pl⒭ܘk2iRKY> ]2RazB #)Ps+2Ir􋍬lYZ蹺 q_,Tbڱr N@ka߈$a%w'u4.*'S8`<X>Pobn]xڠN|=\wzH{tgz'Tp^{\$9SW<_~gLj_bg=_m`٘PY-o?yyu_kˢFщ:ﳉ/٘AZE|Maͧ+BN2ϽYB#ys!zw5Y׻+aL~U職X/e)=ayϧ{|o˖|.# } Όy_rǼW c(9mwuԻpuElD3݂gIbzϕ-7y!=:mދ(>+ -HƳxyqJz_'g{|e>lW-0I`zy9 {g7lUt{37O7Lqh.,{fxcPbN7=hs0Ù|$?:CF^+?pg+tہS9D 5utWÞCGypF6}?2.צg i}o9?)[Ё޲v:+S rf.}(MX_ļo(JXRJR:DA2HOyP)kH-̕N$) dt1H&`EB<;A{\=DJulpz|Hqe40 U%]<:w&]+Ҍ$c~T3D}kKǎ5y`-9AI.kWr,'Wy!L4;}֒wY9eOUT%.\^iel6bc jW$Rrɺ@EIꭏ_Kb>v|*`!5,%|l`QbX>*4*ކ?plǁ'6#~ΝbvbV[R~z@ƱgCc:U ηL}n mrgioټep%|6ӄ9m[e*Y|_C/9?Ì^8I(+ve8.7Dc;vʎ[x8bPm˅w(>o>NcA:d˝)-g _eOe}sDsCx" [O\Z2a<;R77Dgu7[~{*t92#xv>@,V~/x9 ?/lzOŁiafG#}bct'B!\h)Lu#=gl3y2<1WX8_&QJ3OpyX@L RaYBy zp%5Oh(2.M@xtF}fM=Phu&  ; N*翂e=ݗBrY=tP^ Reo{#;Vw;6Ootݗa -gZzHAk i4Ŏ![V =ͳ$:M1(1WpgʢLxBس& 逍g=L!%zV9S395~)x&l }BzS qlBՎԩvR˩ɛ0çXT*=EnHŽ*x_&z2JY6M9萹w:ݫ!w4@ȵ0lBu!C WyC&$88DZN3ol[g'yO#9͐h?x(FW=5e!RUz♱S5 o9\T gyhlǐZ~lFUU(1VNfحuFRN}`tL&n q\gN)ģꍖFa8+hd{kZ$*;д9o DoՋR k^~pF9/ۨ)[@6EEo϶\O΂x'2s2|5cIkFV␲P?ԲԄ=!ӈX-70܅a&NWuljU;5(cUF7'Ui5rA#Uh&4  ۳6u%mɗ4S~h8d`F:-  Po!e B^IShSMƖ3*kzlk$K2OG ?6:7mU$i\V˨7'dC"4-#^~o&+z꒵a|mv=Z.J9mrJCX^*ɦ =ڊ/Oa:X#E>l)įXXzܒ5"7vae>Tgy,n.d,$IܛJ֘}ە.r$<+ׇ= \Q[Oh*!Nm98\\rZN1Mmn%K[ƝdHA&5.*Ej|-^#yaq.-?I"=я4H) @OeIUt{h&GG<ݓ38պ-T#8cߥ~մm{cbQ /@:cJ[՛7wU\4\W#bZաj0ZY.HȻ#ͰR SobJc:td?5uyw&wgL'^Dm_9uNwdZo{d?w⏓@?u=L˪*xW.!+*&% ;*8v@>u/{Bo,p0Õ^ `G'}WH yaM<=FǏ鋏dB Ǐ@N&|p,c?LpGkS< 1Uә4p>f^\~T{,zMzJy$z{:2\i ŸҨpWmB|8|sе‚dΏE^f򆒧R9l뤈5Z2:y6 r8> ait#f#UUa6՗z~lIK{s2QL%P4>#KJh7kωcs4#1"Lj&);OUYPp;xT̰s{i7x{e?d3_ظ4 C aD'/ULf=4cmLϴC ðGF߁y`765uu!~5h(bm{}~!,Ш^8hVh ܄W+@/9yA99uA" Ŝ-Ʃ\MP XcOQfLC$+0!ܗMf1yIlIaq}O8𿓖+( j^qː XjmWqCUOrCk8jm1&-WPPq@μIy er[F(a"Zcj)XoyP\+[Ə]*\ģȕprl嗊* Vو B؍mܧ' W}XSo G.TH;hU.0>'SZKAsQ,Т&ɮ6NԐdG]:tGCai <ŢɼT2Ji-:H稜'־\$T˱}).8p/:*ꩅ\.ehx:`*?PC> x:8H0HF)*Z^iTA{[ONA-pM Q]4 > +=r]Llϧυ?. |>_>q'>$|&[_eLs?Hs'#5/εuEsM5=|:7EӅ< @اdfA{K^iFNVMŹo` d#ƺٴ.̰*Gk>ﴇ!EAn^wMVBô҄7KRO[S"C$&3%e5-`a)?36z*)^ۀ o-|GHʀIm^嬣P=(Jq[-0LDq sԃnS疐rq61;{`+\D%3IQ+ܶow[\9d"kXLȸ TلTy%*)/CQusy m81Z$ FJG0K3 g˴WJQNsǪoC#P豪Ft;2^TbF`dT <\+kڊfQ0Nab]OAjwu3dԳVU[)oYtC<0ɟ" ?J|Y f9I,$1h=*2%f iBmp;DuL{K:eΈv/o%gi;Rli p$VցEo֕i˘b2rB2XSr1Ƒdɇoaڹ/ 'SӲz2_eʉ?V;wf7dGEC>- ~+`]m+wP^}G©p ?Rrg;yL}~E8^_T\3WZ^Pxw]ˮ>^O H+@H&.Ę ?`끂HxNO3=~f劘58Igl`Np[)Vc$zA T<^a0' ~XLb"i)崩J Icoi}wgPvL%$դ0rKc:9 }cZ)HS;Y&-zpЯtjk[Ĝm,!2~苻: @7 ~ SaEQ@*+Hrvw#`i_o}|{[ 4{e?koP[fڸaƨ-ռЊ:wۚyO|_ji(uCĭWw"[Heui*yra:NF~k51ʅ,Y>p0E(U[Nɘjm G*LwꞼoQZ'sN9[J<0Vmoc$!h 1X\x(mJU$/wحQƶJ-46*RomX nZV$@ÖETȍD#}>x&:zs-O#|&%PĩS+{9UmR+4RU'~z߳Md"s;GO߿wɞA>@Zd{{S)CۧJovnc/U.hi\ gf~.A}+. O`x4>S/ϟ >.揚? @e>,t3_cGcX>O{ZéЏ燏Y#Ng]J!P@xT @xsn_.Pk g]`j#<<7 Vme@ rp fͳ0rn(03}RN7D1ς a_$k WGrB6{x8CK~jf5I , CnzSvwlZX#d&8^Rmd=*AG}bFZlKw=Q61H$+ 2v1{'7;1p^y(ED qywϵ,p/OaW; ǫC1@O_F{AƯQt} #afpucirG2( ^!r>)@cm>-OS->ph.O~lt<:?|>#쨌z5Tj@,O?.@\Y;Yo}ɫz4",|P%YG6_Wll L?Ƈ{d% כ (qᬺz<`X"f@4C\:i+ֵlLjQY{Tt`3CAWiE9sk0{>_n;!@80x +!=#Q{`mюluz a%]!-U~:i?_+&H1 K.c@tws{{Bqe:f PPVL2[v5$mc΍ݧv3 ەBoc+n el b2PbXt*!|C[CݞӠi\#4!䞪y# ?J<-)ć: 'i7֞ZAPp؈kڥ_f2a`: Ab s\h@ 4l7iMiWbj\ZlΧ K uP:i,A.Yy6+o$!T%LTGhݡnq; HL7tGcs߶:8m`UAO{Ӱ3έƑW ɊjǢ# Z^yG;J?ڑ!A} JRy @Fy?53iDLw*wk~+{ԷZS У鮾RQ.9@N:(xd[ȶxΡ xZEJl2V蟤ZGS p$ ǫcy8>~pZ`iO₝}-ۡ:.Oe8KfqE8?TtoXnsFlsi+hDp£s=QOe +wxrV%ԖV`懷&xv Lo7װ{ӷ+ؙ8D?~H=4 <ßCfVUoZ(ronp=N ۈgmR,Jy ΕU=l\KhcaŽiڶVL={8%x!?c냜[5ƃ`?ir\Z4gekR*=|1_JEY0 &4j[ K3SO~td#H"Z#X) /b5sK7\E#HRhB`T˻>I6@PD7&q*7*5WvGdLˀQ0kA^e{XhݹQh s|Gè$q>[RRM,"Jͽ/aba/PZNh5V瑋<&R8Fϲ{%ku?Xt)2XB }[c@HڳKsв=1M&FeTG]!XI"?cL60.9@7 rӃh,1L L~JΣY򂸕e +[Y'zؚ{auDghh6$jhL92Ef-(VxۆE(>3rCςV)A}w:{a-ut)$D^NWѦJ^EQsBPD|5eI ))oϚGU<; Dۆ3?7ǚ )&GYF "t𖘪 Z58R[, t":o`l]C߲a. l'~Q@{|IJZW1| %47uVu{pEg=%.ѱS6ܝ*<rк{ P([lTCeק#gsd{1%XlOwu @py|h BMS [^@W?N,ݖ,-c92ŏ^x-V=|{4D¦g+ ekV \Jh1+|I oKx\-E4u.D].е ˆNt╅~;+xp<$m\NȤkCwU={ߩHcrIϻ{ֹpxUY~ooݟ6ˤ?ٓtWư9NvC3@}u/S쁩2s\ @/tŵ=k-dǫC_xh2rͅ:>%?]ˏATݳpyN]?822~"{rT8OxEz'G<称CNefD<)AJ3%h{|&MS\—s|Z襗|| oW;?.'oa^B{?߮y`gg~Pc2/2}=P4D澁fFVXjJZ=T別ަbE*V fC'0z{vCL*n5z |Bǁ(ӽL8|KOJb>,tlϧ9>FAw)sIM|3l%{l".^RzBdEp9"AɁ Վ S3O65Aѽ)nyË2#C" =b/?hOI!r8ȆƵY&lXHb7 ?M OױEHV2` 0ij\&ªO0oRH a.i mbH_Z4A;2`:F]8f,FT(I[`/ӹ=?7&ӫVJS^C![la dˬ)Cuor6,vAE~N,?ƑqdǼ л͐#c"ylJy-]UH=O@b;4ׄf{\L1Pդ+EbR?/C mbX]Y[Š>$|]tQ㒢ono`$J#Mo /DޢgPS48^4zcH4ooN{랛sLu鮞(>⩘Xǻrr*G<( o;==0;v{jUe>cRz|HOv݋(2_mux _kM<3O%դG˙Ty;Ǡy2L?}8T=~>ON2YLWc9s-/s3|?nw:,s?g$OSiuͻ9E(NZO4OlO?-|Uz}|Tq=L̟?3ƟU& __B/_/ezQ2wO~vocfo2Wӭ|Le,@-AzXǃ$xϟ-#$].oT- 76dF"F!L5 pƅc2#{E}^|z`Rł^2T73#l1!/#M 6jRp01;!J^0 cXp4z"fw1t !B9 cz1k["07%L16.z[ C6o*w&8;cmx|34 o}÷EӒ,x08Y.lr rSAGHp]AكY%_k.dPFp MgsR/>!W%+yֲe^US=gt=5RRbe7C3(qh{p@2Ð6>ѐ8ӰqtxZvgɱ@2'py鐘Z=LAntC{'N9ɖ4-T`wOIdЃ=P{`h*<2s(9nPDF{{dcq,",]WAH<:E~ d͍imԳUA~ +݉r"Ŗ|k-?A5C-u1 ձWqpLj(`K&wo usPj`ry/TCt)@nx:<pWN 5=h>gwH.'vck2=̪|gڼ #;-cj.ɞ;wĺo{`+2yAd?NSz>ALł}=^ͯ႙Pz̧Sty  ^tnaI2=]dʶx4<0ٞkM :ZX+:o|} bR+?[.h8框k&I;]>OE5NZʳI?IW@5(}r*+RŸI叫碄oA"qC|_5l{C߆-0Uiyo~e߿{~v@9Wu#_;__g}^g+P]0km_ ,U6ݖG[ڱTP=% 7GkM8Y !.%iLC ?ѡRClc>hDDžCBW;iIX (/+QKTxuoG[CA͆oSI|Ş| ɘ63gv#`6Zh'^@|'a!w!`f>LkM+WLHvuC{?3\/a*W<~[;ax9޸26\%5P<ޗ8$eTTċ67 h8RAOEF_XXW1q'ٷr~[ t?B" P̻>~8Ed%>&> Fy4>:B-ǥԮs /P),ß.Yns.g^`^j7l yA&3+xΓlʸ'g)AS{r(rzW Zi[g+vm#}2h$-׷D;2&f84%_KjIJgt@x<-r{ڥX@M &me [&C! uC\ޢݩM;L *蛥XS R 1v1;B6s 1e6i7cͱRր-JugX.y3Uh p.#ו`C3fw\3ǡYXqۍާ]4,j`Tx@`d;YvH+t[ tqpv8V"C䣋z'g;Mı\>p\<1TEQqRnr$+r4:4eo9yk]t>اҍj{QR:&YF9Aiˢn 5vvܑ p^Hbh)+Õ MEY꠨=wO }]SWuvʡAQ%|p}ZU='-¢ >.*w`l -p(Zuĥ`2vavdsIֈfs-/W*Q6슶^ZoV'{g頬w]eZs<,ws1e50=^Pdzw2>Fz܁3wgG.<_T<=.e&^ׇ p:U^ {0hȣ+c?|<;XsQ/$4R}L_/m_xw/Ln?`gwK> (^ z(!Fyom \.^O_%޻yA>5([rR>@LF-ɷqߢ/%N2Ud6.gIń0q׭ɔQ&b77]f5K׋wf}5P';ocMdZi3M۽f)ND@Be/Oanӽ&F*(%?- pFZ? wc^=G*,V4߶tKC&2͸GYZ-v꘎rE8^טA3Swfd]olfur" uґBׇ wWp)Gρu\ |C;V*Q jм̯hNj/  ز 0ӳքJR7”{^رA5zD}CwPfd\坢rߟD v}'d{RuY8 7M=juτ|vwk{9s%p<ߣՉ >>J<=YH2UbLw!nx,ﻋCz>?^P*|̜8O #/s}͏#2@O |IC{P9"":rm {0w٣㙚 /ig+/?R-? vO]i9g=u0=:W$ءgèHITwF̱~5HR ^+YjR=@Sc݊!|Sn@?E0!a SDR߄Nܪh;VX".):PfJd~"ì2b f0RHٱ(3%7Qt-I9 puonq gw2hs|oENe61wf ѦW]V2-_mtbohL M5# Jol) a"NzqUt7aUDupSh%.#1Z- ۄWI8:ѭpmE7W5B}P'Etƒ J&'/;̂"ͷ/p֫IK\w/w rRxa@uƄ "l3Ksiʌ2{ߛε'C11 pAsYd g,$V@myKh%'3KALy fyiץ|~CG˗eWq ? D@@K"v&\CEI67E'"m {QRĖG!" ZZO @P%4=*gt̒.l8ȡppu1 Ow.A[5kH}@0Jwcm"'P!Hw!_XSK{k\ 櫑8ށ{&޵+3_5~xs;.9lhnx$Tt\'aZkO@}8N\NǞ֑h=\yf&A[JU\\м2A/r_E2/ W-RQjy?-U}E}@ l/|>ut}(].깈|SI-?WQ?H`}'sׂIE~R|ZeT$d{KghQsQX9(O$Oa4yA+ϦpP˂Um[gw@ }&km6a{(sܳ+غcgVD$ĜȁFW23 ; f3f?i߳ ˯Ǻ͏ǭ4Z%+!EEA->)t 4Fi(Z=UFXd%80Ya9PbLÒ碛}" HC%7.U1|Msjfwn9ʭ! 3:x:%م>@Ӕ#q&D 񠖈#wio",qԟ/iڟ>[&TBae;w. XpW.oR+}B\{Ztn-׊*# &̕V[:vȉUU?C>^wHTKK멉氫] HI=[8M(DN=+sU~8%9uo3 0[i褥"0PL}AmB vMNrR:UY>$뺫+8:~A!RO[=vܢ 0 m)na>۞VVs,6T,|оD o۔&-ǡgd| "Y,:=߷$Tc'.AIDKz"kr=)w-F`[-ΗC%ڜ['FyLo&!OWǞB +'GNw mK<4c޻N5X7wl>&f zFox'!\KNl58{"?1^`wr5?{{d-n z$=__hͫy-@qu3Crdxz2=wfȕ<g }b{OyRA^ԓ_DqEڹf ouO!-'){Z{|90˗+i^?_`2^`9Wr V“Q#w!:wh~z!7w~{6,/_'ׄʞ^nJ,NY! Kz,:F4GVWaʃ$8iDi+Z~Hbp Y ےƏ٣lLǜ%3'(q'ͧے?6/"\݃BF =wLG+~C'A%y)UZit(/W?t lK]v=ԁB.ڋcΐM_v&7Iveeݥ\&>V2jq1 Sҷ@e@5pCK~k :#l>aX}5٧nH N,K@ CFoۛ΃!>$4exR`4 ӷm1,Z))АyFj5Qch"53EUO0) 4"z'@6i趹) li;4 )\ Ry')T>?SWJ>\-RU<.J"j݅]׿^DEq<7j0_n ?:m#Kx/rlp'7>69pPe2 )_m>C>@O|]~3ʻ3/Mr/Nd7K{W4^$_^}u;4dM7jywg)4{0ѷ#s2Ax`j=Nwqus-/%±ofz?o}~ q0@oxؗ["{-/aCz+pyd=}jyknՑ~nz |zLg1 O`.%N26/#̓9=2ϺOr?;m^QxFy9ZUdrY4/=0{JOJ+wI(NEM@fP.`PP۾R\ʣׁ~*{+oayS{FBwQ,7[~. 1ș I%pF$3fޔy>OֶO&0?\{y.Q'-8RASxrL:AWZFrG꘬S7퐺~A ~Hwe}%Y atE2$w{if"` Y0MSԹCL:xn B"zÂG]X6-z OÜQ= >){@ K|TlW u3hA?7E!5J3DoOTsq0+EP|L%.l jGN[v~ zW<af~ [AdS-S#Կ{kQ~5\¯V7{aԒ!ݶ@O5F@߰qB+DxNā,՗Ÿ/w>EhR }~B0?38`Lɍ0M#Xȸ:$1?^|@cͫ>eM5A+vg{}l?W yݧbvn22)!?o[`":=iKraW# Мwha@kD`D }t̝"hZ/E.w}x'}Wu>\ 밆hG#RwX o-(xKn盘+ޘ/ wkyEyؖyɠ#l1wUE+L淺mPj$)Ei=?P2#OR_?j_Pg#}i>]g߷> trZ/kF0Q<#M_(q1ϖwsH_Np:A?YISoEgE==&S1nDz?]hkY:[ lrJH;_4䎣R"۟# :ǹNSK_7W<ߞdtIW\$Ι`sKvkx\aƄkOX<_qzb T L,Cq@j2jj sݸ Qfo{jɜhxw.sJXښ͗i1 5O^H$z+1u*ާ8*1!΍SH8е1cģR`wD9aE\oB0wo ~'ajz+E-BsgB=|˯FV,VuLRz*` qwʚ}\"L()H7ͯ_?m1TƩ0͡їLd [ B$C@w->UowtU_w,8C{"ZI2Ge74բN=  . VJCK| L=~ݸ@X5qAR4!(@;vj5ՌKkX,u|Äh _]RW+|CݛG_`})؝Hr5oz*1F7@kyxn| N< w'9M,h޼#v#$]уߟIhTq ٞ!{`:A0wq*y2 T0OHu}J@ {1ʓÅwʺ?{/s6MGeW( Ng^Χ}iZϸ \ !Px'*e$աHO*9>Rͭ{:dҿ<?_ E碞fC`7KP;_l_}2TPcsskr-O'9Ie,|*Wg:V?}9' ||dܖ/b&xT}^1WʅD.*nE_8ŝ W䳧i(y0%>P,].͎>*@gH ϿWd{R psR{XO2yO,2ƱctS^V__knpO&|BGm2'f4$=U[ {u{F)9oUCKR@ҽLqʙhǝRaCg4UJPs0VY191TSוݝ(]'Xtw7< Q,YoeJC% bձsA $0%'Bj3)/!Aλ;/vnm5kL:󮓨A\?{GuZngX`m_}%#!$Ɏ#Y8ʟ{E8h\ڰD\q˯wOݩw X,^nЋ69RXbn&LfRC WMpUDݹgOkGz؜eζfW6p`DbnԳPZ:F4C~CIsۣeʦ-\*I#vw¯<˹gS?T!b~/np6'}^wD\͉;_;¨B?wíw0߳ 7C{};ԅۃI `#Ta@c0u$xy.7K{ݓ8z(Uad"9>ַ>xb=!\6L&]$t3ǞA%>r[q"cVEߩz/QgRj%joy M~-q#.|%.<ݕ!ghANtu]m-]A69MaC^Pg۽riBf`\ԋpUVIy(7&=n iK J{gi>t܀<ԆC)\D]ߓ }clЇ Bȭ <5E6~KnBk&r%!$N΃׃ӹv{ vv;L{{x罣`|rc5!Se5^gLtAf3nb+6V=5z-p:q;CV٩k=t?GQ->X\3 OtfV/EH^P8^|@*t_Lpyğ\]jN<|;Wf¾v k کrW-2լ7;ZHJEdt%cQ`˵2#r/80L> G'`}B^(jyu8AȢ/}:IG;3,9P^*ekE1>+Ė c4L ]4N"Wo@| +]*aUDž^׎jsW|J#slu½;ӕ鼠OiOlX쑤lR~»4 i[3! ?u6 /34_nLYٜ~E)TFj)mSr,݆TŇm` "|}PJKs+{<qWͲÈ>~VM5uㇸW!R8] EysN5HuWߋ84`=_oC!v{aoղM#Md3׀`m>\+QcY&vזŔ Dǥ ?+-dɚhqJO(,87C/C"$p@\3QݧHoxz_(] =W`VA[FWR=Q돵X# pIvX?Rԋ坈uºߕXys' cb3{k&LߓI*;ClyQ8'#%5[ޗ#~aBAJ|Jgt~ \6w5\-H$}<t=1 OGrے=ǠE^%'2{xp"җ*;ÉVNwjV|>U|O}kr! .GU9ߟQ /ιA?ɍEwCt#2^B@l;i|.C28Kxg2+] I>8X)՟mG |5j-mE<;ʣo^ԣBWT"|^,.OmNpSEŽT")O~!91|?4mPIh*`%7xb$jaLy]O2wBq>19ln>aq $ Gr,(? 0mFa&^"󹂴Mvs+evB5iOYt蹘z]}| uJ[#vWs&MɃM7*|H,xGQ޽s,*@HO5($c~oRa60s @|&N<`rݭ-Ըn{a10#Z!] H=tt cin_0S!u0}F0Eu6l'w-Cΐ14#O `٘'SuN !.ޛؼXd?p=dJ Vo_cubعbrH?$Ŀ{} vPwvÅk [vK|{q/Szڑ7C4/ʭyyֈ'N=sJ$@Jz_ż^4`%w%VʝQ|eOԠ)E"'iRzk\=P}{b z "=P-wGxrY+}yDX&]W!?9ˉ\Ψ^2d>Gu|3_IrrMIcvx9"},p9 I:ЮǕ_3 v0Y,<诬o Zf46R6u^6hY=$ԍҨS|8ф@LQoo9fHզigs,2grw;\`յ$/0L?l߈{7-C}óS& c W8 \sZT̄#NVMj*a4~U}L&`_B$`gCSCliR :wM,beIp6۷,IΟQ!X{F6R}r 4#5Kh$7U3۽kfvn4"B'o lg<Ş` -zoل)D(va+֘NL6\&m;=CRq?=DRRמ J/a-4s_=O!\)Eoñ݆8ʜ>TuU4tr]Wo?zϊ){@0#a"xs$2I wSw/o:EMŸ)HIdps@. rOʧO靸!;1c=̵^K'4aݝEn {3^?W ;ZE8σӝ$o#=tG{Yyc,竂@ R oºp:.dׇrW㾖 >p~{b {e\ |.EMIvt|gl㱴ŸOTy|x& '0kg*yhyzY@EA+e廖'Yr iw,?sY '.XgJ<9]D!"xgV;sJ|M k`=kờA uߒ=3Q!/%/ABNz a}_ΈxSa}z_*I&C{:7hGQa(Yݓ,˚ ~pdv thk]&yJ7fDAss0"-qޖ6lC? #v5KQ&6}!'@Ywcn?GG[-(jy{8e+(V Y2k!0u erS&˯&j<}_PeCl0(/k>J[`>; ݄w%DwLr9p&VaE`My{$x>';Mr[lwc|;gp'߲#@wHOxbp^T_ PxZb;0zxHޅ*g ;;w{AOEyo@~|;?qdV^if Wjw.F7r'0=d+̎Ϥڻ{~?pdW Ԟ}cb/XGa#Ec3 _,bWc3yް sHz?_ݾuT R5SU瓐+ ц(fN@㉮y;;{InYߒB#ݱ4X2#em."ƲDxy|9z">wѩO}ٔRo9_VZtw}"tt 4m<|W-+ک(ge|U6ތ=pDBX}BbᏤS4'\r%kԳk۱ pUuɱFw GA'{ fkj,n @:|^`5UaatI@GiZJb x<9=I}Nyjn7Xn9G]bA-gޙ{ Ĉ.ww:ߡZ~>|֙2퍛令TޥBNUtIth.Bo}JA yXC1Ża׏gWui]}Z XS:`u5/ dTǻv7H) B&V'}P6siZ&ӳ]tc&zMk_"0GN Dem6>βopFޙ`LuauYL-?|K- =dz}-ceXN%>8bOv_iCF$E;Ž`!v^|ز"yl|Z86hnCUi-7D[>8a>Hǰ=0w. W+iO'K\Rh(cZ$xgU=C/@w8G֟VkZ|{aHE&^"]δ"j-E"MBJjR'\z!e+d13`;VJ7jPɴO9f,rb#o_[<Ɯof^9ڝf@miTk`Mۭ~&9?8䝙/j\t);si%'WC.w;{^6<gƬwnZq'M`El}/ ~fҿR;NlnpiށkCIY-?ޖr:p^) O8}g7ZӖ&ەzQJ2ꙻ/Wy<6i^q KѼ%Ip|f}kqc9d7Vxߐp¯)y)K|=%<%ҫ}%^Ꙏ?ܐ!$nC <\;ۏ? I9/iyw<BdW ojB'xx;W*ųjix *'BJ/kb9Wg=1ӹFMGQ+NWs>;l zb%w8_ CY5#Zd{QlXD{O} ;Srs O2} HKZ:MEǸu|WˢntЅaU1];2mMD$"LW^]If-H4/ KvsZNj TM;juҙ&jC w6! Ne#!E?EL(BKo:/P9 XK)"7ClԸz1̸psUPnG'@؅KHG^XwI'Rh@ 87Gh:l-Z^91n7m?1mz&\ӲO kk؋mg=s.u^w>/\ b&/kmVHfٟ2 xήp'zmQV0>'3,\Q(/3s7Ilc:9s_&Nr4dGKx^2ݏ6TCF>Lꓦ#J? q^EܷcMrQ_04^ VxJ(:NūZ8!>V[Z y0#=Y#5]5d -Oդij"&tDjRy ו}>?LԪ&GktѮ:XR¾$uUm '60:6XE~saͥ*Ɠvm uhG~tp@ 9M&[j Yl6ˎGUo+[9jbRDOa{WrMⶾ-Q-PnG3i&z(to,XS(VY),oɟӰHa-jdmQF^WGX{.?AtMYN',ڍH饪G$D˅fW?Z% z9owu t73q)&=f&=-#c$q"yߟ默˔FyyST.9ܱ2_vY]'xߐnFn^!VKn5V0S<0ƷhE |KmO{QHx?%׎c<>r?_G%U'҆W YBP/ϼxI H AB9c=A3g=?]k+/;RUQBZN?o[I#xVlӬ`R~~Z槣iRo}vg4ՕI4OV0<{oq Љ?Ͳח( e"8Ka]`GLUVz D%b0cv:•Q)^ hHBfp|jx薗5L9k ]:^4A[,M[=k$ab'"jJVK[/CR{!n_tȿE|rd@Ri,ŠhHk+åg 7DžbN{ɩ'/!ܚF@ }ø][G[XoRfuV֭b\5-3],el?~t e(~}*w.q^^k{>W߳ҌpKM/Wj8r\?/D`5*/-=-=NkSt:,rWEr!v9V\ W SRN'{HBw铴{AP@BtAng7|]#<gޓy.bEῧxz ]r6dtdeK5uYl{#Ta{cʞ = 4׎DFp%E~TAe3-&;"y4ĒO| . reS+QS/?:_C&K6ttSYIunG3l'[?)k" loE PcfB`W鱗$nu:tDo)bɡZP1B+E#t0{lO|CFE%ݨX Y0Rb8p0a;DDpJ훡m@LkMbd8wML2*2}ń$u-' Yn-0,ڠ[mg6lpVe-V- &SiCz#xʹݴi幬oԍ 0줽x'(Bț II*tmJݥJQ#^* e6pN 0ݓE-Xk1_ !dQMb"edi߄o(#S{©!CfHp}a(8N5ňaJ;÷БJiBͥ^n j!1aD[p01X4J yhԸ=[@@T1LK*9oR"I(pX$V\*VxH&6y`6/%6NOZ@Pj3%nWڳ> u8+bF.//xv0ӹ<7^Cmc<hO,Fl(.Ǔ0<W;_$5g`rI\~ʔoO\QǠ0X(Ƚ\:e{OW٧#1eud*0u/;Mh_[o[=iKr߻:|f̓ŹUSKnD&6T~k|mKC!&+j91;'@iX*b@8od*†O,7 A5 L׾C%r(?8`{QݶXOR,XK@^7Q0#:z,ׅ.eǾx kH/j 5,-sH5J$*S,m+ԪYK;-}ո|Q"_3 Rh$مk>I]ip9rG|׏8 Q)UPŢ>ɯBӨ ^4v~u S')}>royV>D}\0 -e[k-_5 O+jGucƳ>izwze,] zַo?mzzAhF7?MgdW Q#HYX# F"LP-Eɬd'auT|"ʑ|zKVZ/<+!>hLe!@<mqC܅jH0u9e_)%쒆r ׵Tj|A.#7/2]S #z-AW W*x&•h<%DB؍jiGzB? 8w=w]$L}U=x_nw\U\.뗻\Zݞg-ٓkn>{)^nΟW]ȕ 7c^E+3^ݙm#"e[l>{9ݞw3 r\t}-B_5ujyG(`wې= p7dz/I#y\n>>F+B7e_p%ÑfM2z8ܔpi|(*H6Ro29j 7eBw> _Ky0](i ^$ |ؽNd;by]ڱ@fO=Q#WjO{=;1>ѫ򈪨g#K}<7Sq(kT<_9luB 97dDܜ |8Kbּ}?9>(x&`#P'>- p/UMOcbNûJ㸁A5>`l?M++5YO]+Mjg$F-\ynX(… ;=x9.BuYذLhT ?Fܬ$˒yREr@w%@[vh3@V~*cYKD[F{^ ZEn95ִKu(N*j@fH܊5: NHE{6A- zzCbaڥEŇ.Q؜]ᯝ4*!<L Yt9AC)[7魧 52ݯD 3J|p6+ +,n9} ߻WRV*'ev o='ی{Tx߿l,OpI!QЕ  sH%ܣGUrE`!aS JvJKB$t k&M+ "x9z=Gyc$s>A'O8iaGz|&bߧD#͏h|uj.7J>z[k]S _!T,àMGXNĴ`^{[Z:T$JrMd."luM C/!ڷR^,E b95is9l9q1*7TЋ_|Vjdx!z~zãDbE<(_tō]nwu>Ms;r\:4nvK /Dn}9vyّr`ʮnׂ9➅uP|NJ9f)v3=coxk\>T9N#,ωy$<|\JA|}d狣Gct~܆aN_c.;m_`O=j'/O7drMOGXK`s%|͇ٱӥ}+N?9Bw=UaDEP|ef忻Яf焧$SgNj;@ϽDZYZϾl3])ƀ9|i3PW67Mu=-,p~$BBOU0)%Pu}՘]˿C5D@L?Û ^KZԒ\T(Mv FDoeABl :DNk%dm7 Fݺp-!U6q XE(.!n{:3vKjf']jUPۨ! ÀG$T\%mý ro~B6j4=WqMՇ?LaR?OC0FΓ8BPVh13=B>ZPKmYE .,^J29L%q_0 v֡tD:A] 6Aq BXN"i&YDvo/:>T6ޜ%ߥӴ T.>*҄e*p3L$sΌVZb / Rbt}gQU<$<[!Z(:xd 5u Зr 1XWW?h`-uW 4kڄ4s2]C FzyY,,❦k€5H֖c:6hRʤ>t/;  SYfr?guB &Lyd ĢTAkƵ~{Io~n4kU$5gx\ix?n2,9דX'>/cTQ/X=+r]=Ow#s+v ;VҮwffEGDFKzٻ]<?E󢚹Xt7N7 7wŵ2_91%G":~K5^4 (ߠ0*絋b0_J7ey;U>cyZ8XuOHȝss \Q9O@н/H6H#}5x~,@\әY-`Ǹqx>Itz yyyXt`[o/~,i|ǀ%ʭ8gqv?'OqAX<Ϻ>jWC_UKeղIЗ@)ycҁUڲtVĭ5ܑN(})kem1KoL$(RÒ]sٱbgXzUS0uk l5΂J}xu%%ELd2l?=&ֽ1g3QVG{;ͅ7L>b!"v)3V7oGǢ6kTBK.+13 )(j Y<ilEu/&Z𷒝m`X'-*^"Ͳ/vBF)h܅:~kk4KgQviN2އR仞6I<0ɖy էhnQCL`"-ݣ֦!.aJg)T`[ZK<|ŕj+w&S:ǝX].JcQkH,D/,4M.,/4Ao;oҙ'-iMbKMQH{cAF!)NlӗRt9gQ&#Tp!!k Z-̦X?dXJ5{,VrJHwg,=oilF?4 G6HG~ HҿF MBa?BCG% n[fK3xc2ޤ)h IU.=V?n珈 Fϩ]x` ɀS`UC;(.P^dLb`+X:sqT~G{ovcy1חq9zoWs}͗Dn/-IyXQmW0nw@y8fUiSt8xL;}b183wROOn׈{99gM"7~_8@{ܿ(Ta~~y7čsǕzɂ|vvcOrL`%s1 mOβ'aonOkz|6on{e ς_L73qNj _ U ԏ|?/3fl]RGϲyXe=xR~${7ߣމ)D\"h_zA8_ ?9̹LE6oxkXD}vޗ߇ogǟw{?>~g'C]C ޳:;Wٱ JL?wvxiq,UG['q|h'eSNSخȸ)'.uevFWմI䮱:w0ZP% \)F+{:-T%I+De\T@۰hRCPA {/VTr~XM%p\UR$>m*Q$nAgH%%-6 Xb7q'{{hgwg>lNd.\ѿ(F Y݊1]vQ<&Rƃׯ|tՋ-/dK.n6ԄNG7`J]h` Eo<jeRb2gІ]|r65Z2j«gPLW[Q2e y= %ۀ} wQ*`k{5>NZ9b5R":L%|B;!=默rsؒ}RdP9Z}W ]r(\I7|Jy9F0.jG _b @&?+Yg~D7coeQ,֬g[r:Rtωb;&u+x6 v;Bo޺j|귘#wb?(N?sQOwoRN})QrF:GTN{K0?HM=oɵx5~[Bh~uW/_}9R ͱ\=QMsNXzb5&˶tO/g{2g|"d?Zim)+(BKف!eN A!Txr,ixqWhzM,\*&=oF zy$k+iWV?_jXLf/O錥>]|qH(gO?^|HFưߝ)S8X{w° ުnߞ}$u%POS83OF{+m r:[Ծ.GP>XwZRth+ēA!\#͔-}&ɿ66 MиNcPSJđ(J:IWHqMZhEkMka$L@C'Z.[d14K5KvĎhSK{Jn\Z/-\vꬪW<XJ=KEH?-k2A-[@K[P<)0jy3ޜH,+-}d5 J$ze1V+ eVsYHHZB  ]c7'8Zt 2ϗ*2enʱ 8lVwO489 oi`*. `bQb``6JV#o)=F3YlyⱆA3m afkFF1ƢMY2"1zl^I("e9 z*Ɗ$R4aTrKA։!Y_jzhMES^+`nYr+GK[tXJwRLjv*UHz"nb˗vص| ,fR>3Z!| JM{E~,]YRYPP1⹇ؕeFUX< 6Oz 5Һw*3Y%ùFlzCv.BIoiߐ|mr32b0!%%o?i|J|螶t<@W{T _x.hiPxc\Frf0·b%>}T/M/v9ȕ?_?෵AqWzHܽyHxtϋ mhWޕWv=Tc`5Yȉ&g|M7k2.9gsn"%po,"~D ͱ.9f e>} ښ7"w}#+=B<̧H4N̴wg2w_e/?r#YM;DU~U=FQ@ KV=a~_.: @<{+} w\JaKDzsEl٬:dWMYZ$13>8gEJ̊^_ɱueRW⽹rT)5T} |_ucfm)?ziR^/ЪK}S? yS~9ߠˣUGm0KhMܻj9 ,Ft@&UŪaߓeJJs~: :;s$0ZSo`!2g}v3YZrw5\w5x{sJNp:'QՀ!yLkirsjRPC݄&Iqv#Plڙ`?%%Ec)_neYzV5M' -uvFZ.ʑ܊ ,bPS"</R7A%h%ʴnwVN>ic Σg;FK{TX#a72Ӏ.⿬!a(@'EJQn!]U̶TQQ&Kyh4)dNQ//z?߻#B~_$X 3N׺`ԣsͧwyX~Zzy rŮ̀}A4Wsѯu/u=19уú]ޫu9viՉut ܌8Y|SE ~4.Gv y8O{Ti|=};鯏.i9>fSƩǛ09ؖJXxF[dQDmDϏ!>^{1os4z.*fϕv۲q|==!)yuG6,r>|,5||pk=n^>#z=mOLIפN cO|ۓ!2|ȝ ?.R@wF #_!q. lNr~g4c/K7'A<~; ׹,yn~ʯI,:}Y^IQO&{Yopy$Y}^/4BpyV㼔џ{ ~Qn<^/OʾCI}8}K0!8^YFcs_l#->ƲB326 ,eYo7/RMɀe=TfT 3 t@fŇ*zQbWqK:&aICA3=R;/y={8)O3N>$i^Y MF4A7!E0[ʌdH;Ͻ=o)nf)7 㲷h_d\ҹҸs݈!Ie: f<|Oy;{;G8?m 6aO;kn8p%s٨tXLBӼFQͮvŠa‰h@kj]]@WH j׊-d0i-}WjЃ%u'a:)0"Fef30*uW)]e)⠩1 pH#!VF"J6ҞDw;%wDX#ÍkD<93$`d|8Nsfj/Z&59{uUGnbtYvTH6K.@.J.53Cq\)Rf<-FȽJ' JtIL9]"ȞR`X\ c_Hf)_ʦ>IxvYLWǢPc 8xF)8$~éV,x6Bq1S#S~Œ㸑 NAVpv.)Th:6w_dS7_D!Ja|86w_AP vxk+\\e4\gZ?c>>=T7Lދ'G\^#^I|[ ̠E4\̴ pٹ>\dܠyC2OGM\=}҇q-QaRN>mhҔ>DC6yAB!:F5q|%Gl|!IBeqr%fvN$}RlA2BXYBqr- K13П {N=i/$3Zi޾_ l^ې)^IvMQ}#G8l] rv]HB‚-?77e[)ϚZhf_D4_0 m ; \3t>]gߡ16@[2m**]r{ط\?.UYBAJѺjʉ1XY"cy[ X70W^FSۉ}wQ@ Zߘn /(xl2qŁ(@-a VgKFT9c,bOh4w76h]ʮPiDFbKl~S= D_^7GBa=qaNA*v% tGa.89p\ ,֎AZr F7&^/Uw"o5aU 0,^c=hǞxk7,U K,w:j~ug(y'TH ʣt~*Ǿ]gZVm cB$}(d]P>OQKň֓`,n ||.wOWlOܵvOJ=_:Z^k+Y-m}'ĜBu+KY PtQ҂.e+<7Gdߕov2`%> OJ=}N̰WoQ !0"<*al_w\x3xsncO-GuC8'o Q4=mz4m *QQjrc I>=4 `@שF uT\!`lYh5 _h 0~.8 ^EXE1`sDfHdp0ە #v8 4Mt [hEXͬ惓=l: 9[MbG573oDRgL}}=&pIMy%Du 8MV0Nf g;H3[pm ύ70uTW(Dq@\,C M3G6E= 'X.:xY\ -2wlP⌃ƌehr )C^qiO6B hoPF `e@ b,'~v`y֠`b˂)P Fn}H8Ma]{^"M M<MtA XM뒽/BMf@e2:y,ǎihhkdWoxS\ gԎԾ ooDX͑d :Ш: V SBF֐]TS ipjM8i8 Sy a>/+s |Os~V:1([{b7y;u"zumO@Y+S@po,a0i]g 00r ڞip @@׃G~ϭwc`I`)| _ סkAw0# xZ2t~ś ca]4ųuT< >*t_f_WJN~#C/:5B%{/ mF {˳DB ׉kĥ}3 _L_$ ^|I=,2mO+.XUf] E už&JtD 7ukelvTۢ$KV< enO P=7o@ӰW0 MQ$UD$}= }#D/Br,L; Z2kEVO! 0'ןU\WH[c@B翪h\ ,GPap*o]a(?BR ^f6B3Պbx. =_yg@y𸐲o7G8~ڍb߸{B>6F;/$BzZ镔.' e#o)iy'(ӯ y%h|%%Iphbe \+3ӹv%%.4HhϭaN/wI.SZ}8U; %sG6Cyѽxd^W,Y!xQSti[pOo^W]FI$9ȂtM&i$#~'X>d{e>JVKᛝ ͇}Y`0-uް&`iЄ~`JXj5uBWps&x-2~z@o{Б׹aG)AYi ‘F4w;Ц1(Kϰ(8؍Ls*% M,lS&Vq:ZAc!cWNz4X;j#=Z%/PM]+!. 0S'Qsz׳B؃9(6qF/0ÖaG%z9M}/: WKq"<؋}Chܗ#~MpF-e0 W- GXkhD{P\ Y-|3B­xu~!:{€ePt' qpa/j1jkcە*ԱP;{ZBŘ!0RtaKCY'9 8"B j}XdnԋcC.c}F_mn9ϣAGA24՝CS{тa_٪1.-JQȂΈY##4ƗMv+<!e n[yaĄ =#ً] ΃(JVx+Gze7*(HrI<mlߊ"h/MXȾ)uLźͬ@O8f#**ů.p$\peuhGT/BcK!h.*0TD 4.%<40mW 'jO v/CSt,TVH%3\7C؈$!KeOl703qp:{hოWEi]Q%>~wd`5Z->A⭅pԤ?a#,4!aoNsZN [{&è5UMBy |{㰽E &*blV8PTRSJ{鲶/Zu| $g_=;:A8!MD~E a Y|Q6 ͕4OF"{Zm`w M?&8z^6ؼK(ӭ-3Xrz?bsP&YnڸfL8V݅%Kho1DC /`DL6uR, =p*K֌ L)Y` ۔9P!{qy@CCtRœB%B+ f9P+"#yzce}0G2΂a )N ELA}2~?Ob5?KH3`ʃ;PS]sfHK薈~{@NfY |ur:,c9&'@Fv),4vb̨v4ɒłchvV'H1hpodg]  Gr`"kFC`PVf$`| aKi{x\ְm5qc)pQ0^ mQY|)wUcզ佖ʾԌ @=t$Bdv7vGRP+{(X.QxC6 @(DUAv`6q}d-z5p˝y Ձ! mA@/# cT42u-!0 !Z j=:vM`WI2Z^,%2^+Da8*AQ]t bI`_59=2lqGRe+.>u5a{)s3u/Q~4ܯ$05rynb(- 朂_<+(_iQ.|HC2FNOzw)ch'Ơ.+?:"cs>͚pyա#! Dg9 tZO8&n$.vgT]o5ֶ;pzcb{w^UC}oxp׽rPegG@fvfv#ڲ@.oc5~?ͥ({(^ꊭjDB xZȿvjd %.oRnk<-Y~:ńyל$r{tvAsE.s]&ZxR b1/:0ߢ9\@P\.\Z] dv̻7ʯ { ј%]`zppy1/4=7 nK< ou,x=.N]$+-D ]yl_/FwR8~(p?iȷΣ1/KU8 3?g `=`?Ou7˦MY.~-~*=P/0N_upJ=46QӰAcϲn;w`~OݔN=ӝMDqEq7{Ȕ!zU\pEDi~C轚}#ghbn] k}s``8pls`DhGZ<&{QԠՌ8hw#GmF愿BwZu4"j-[lt8tV ؖ4!3c':c7 j{8W2 …f)6\Bl񳴬Nc H-nv=%WR<3a8qqjsO,0%c9$Jv=9FжCo*%jS!y牁Xus=;^.V|9ZN-oSo=@HÁ.bnp'`vI}ABQ=Fj5 {Fe ՠWexi IO)>mc x d.klc@:LmB^,o]^\XuZRt k뼆8תa@Ӈez"gs/{SS!Ke@hllA9PYBd2Npq_RPXO-L5 :pq_ޤ,,lHc,K`nGOEv0ʎtEzf­V#u8eă鶎Ua:2½ΫI:U  gr|A:(vqn/g榝c:؛y+̚B#x2[#)Cs3n1H{GJʰܿmy: \oYZ'y\[i]+g(Ah{oޠ^ !,^UᰐKޭ^;ŵ8u@l4C2]^sa>sr3y#58,GgEo(pp:|oOS GK/xN5+w_0k}X_@zϫ gCX/>*_E .OJXkkcM0.R&D3dpyZ, &𴅚 , d>˕<ȣ^/Z<$?VΥF CX~RޯT.I˳>a+O~ۣ g'P^NI.>/r랗S|=S" t*od~*y>d^oC51d0E2A~ީæ._j;GivFǞE~.bm.:n?1vyw;O%8JݯVDCM.s*~.PVgQh< e]p!Z K<a+yB߱@>v^e+oOӕ8=T80{yi7`o#20\p;t'`Կcv7:0Uy|d58'"r!u &~am6T4@'Aڵ.*;bv#R4R K^n2&0ϥ-X-6?soV AČm~x+R2P\/}|Cg5O@LkziX,e-U<^K`{Z*`~!V:/tClbw)CH6W_GFt1 ,h_Sn!aͺ8z#+q2\ .h'r:X>"_I$i*3~SFWɹ v@]+WbGS@eז;~$ ^iZAU;B./:yr_ Ooe@Vx|y –Dɫ^WM_ '_k[^_!UqO0Ɨk|C.V|q_!~SZ~uo+Q=36$y_^(?-%^j|Y-A^9W5Jݏ). Y}!_s%Umq 8t͕\UC{L_DϔDϐ^g ('3GwY#\PevT'yǾokYB򬯗ۯj_귷_enňR^ ӾF?MnbޝK-̢Tw^ag|\גr%c_lAb9\ON"<0J0D_H|J;gIx|M|PӅBlM/RE2w$g>DR?La\mQOM;_ybٌU>|O<$> gqSN/&Z?mN^W|O%}>߮||  tHqOyl>|7t`VPӕrǷէ Jy*v{j >opr2'pz:=^o1Ms|<Gǰ:$B8dhɝߖ^y}yς,\cʏVtXtٿ+|mo5 0Lb|"u#+\i?6 5sm;>xQ\x/cmt۷xz6Y)w!^Dr`gdGg#k;πM> hUJKmEb.Nh.!l:b1lטrG. 1萟C&jt{CDW@ 8{+Yq<{[J vҲʡխ;W;w=ۖ Pεb׾eԾkG?!vڰGWtL 4ӹϊ﫤`"F`7kc:X(+U@k^FdDZ?nh0{yvٰvpɷvmMu@>8$,y 2;8( }hfh800w,^G׳y| NjGbm>D3EއXt p{40hϠ#d p.޻' [`՟ug 7ew8Uk;,{zᾟ K)nݮ 9^7Ll P\%2Sk(D _zPb^Wz֘V]_PTƴl5J8?JbPE 7(.Q/<$nZl<|:"aSӟȘ\^??XfǞ4,ި.TWEVy.WRUl*(OfObD|*od'0=*m^V' *(+(4\*y^U_xu!=;;*Oc`; ^*]ɝݯ-(i yp*v~yJ'uW})&AS{\7?|F̡i.I{(:-R%^@yh[Kq}(?)Ϣu:ayXKȚ˾iNiH_6zĘ' sMRaW?58^vJ{Fx}7ٳ센 O߰=q({e WgO^4>|[V>89\c{S1UO5 {d =]"zק ~HwM9mӴ#1ԐzzEّGx;үxlL"G^T‡vWrn<>oR1~ t^ m og^ u5{al y M >s0[KRJs*>k x8w`FB{v1>|L9s #k[ )! J= ;<=cIa nҠs01yE/'5:ȵ`׃hu?RnC{toλ"ʴ1!SW,B`!m\VCQ4t„VW51:NxmIL:pH8,sݭfќ n 7dS-"-,|n`9a ύw{@S~F yh`پ H ݣ#X/.Ji1wz/.ܲXՋ\oo9¥]@pNS'Y.stV Qx?<ΘOڠG+FUvk1~]zb 5,z&/ kG4~_1lCyX%v00I,#T xpOڇp 9Q ,,&%,Cmθ{Ď6MJC_C?~4tq4/92kΠq> .oj`4U'Vmz2>`a>8`B\! {y1+l}k7D#:xMQV.ô'jIP (%֎z /z~!Ԇd -IÕ&QabJ2PfPZk]+v4? `߲)/5ATvd[_:}ҜQKס%VAb_sPYݦVf,%sC;:NteJF\1Z(V],uq6>66F5r֢:9u>G߅Cycw4&؇Pn]3?\gfйrݙË| |6cV>?r*{RXӿWp7g_U;`z(& Oc7FʙlK۹J>\Fp(yU=?sJ;cJï/yESzvFU^}J. g{U$OI:q WO{>U5e^ӳR^o ֳˣ+tE?eZűi1' >? G;*x&Y} '4HT ~fcj;*ȍGvWu6矾Heqb_9q+ :!z8qC[B̧gPuR?o3=6wg υCMmIz,xڎÚg+U(/bXVxyQO_bZ|1]Ԁs)#ڀT}X3u{7FzbSMBH{w!LZӧ-=>lybN&"l<[Ui] /Pi ӳ<_([rr&+/f>]Szx%L :j珻?_lO|R_蟯c%ŊkܼD *Ύ,)<;`E^j2O~~W"KiW4>ttNaC5 <Z2]{Ev$ܲLy9w~:ϟTO[(UcH?!_KuvNO?/NOB0wK[=Kam$Us7 ͻ+% `z측1l=Lfc8=Cu~|mAKr rlo%Za3žfۡgnk]7 wv0&)'z GlȦ5̶r/GyD\G}4N ;uZh蠛GzXp@]c {e6˝ B}[eA qͮi%ᚣ<1-qaKzi}ZĶK>;Sn;3G0PmV>;:ޭ,sC[Ul9X0s8lyG!(q,}=ԃ k )c(*SYkL '%Qڸ+2;AR6r2^k h1V\MG{`Q>5y ֘h0{3Fu܋̳0A;ҌXF_j`>9[(+(mh{󑴣xYp8ԗD`;*Auꕹi,W0.Y|<䈉tcf ,d^vhqƊ?}}E',6aEHsMhr a>n҈ L& =&v4b֎ v8PEnDq P=FUW AGoKW_JVE,B#T|QDE\phA:{"2{vADS "9ri W nos<6.`R #wj`OjwfA!KN8@0f1-ܙr$)Q!yg`-S#6 ]sJXl>@֣L3E=65 Zu7=h.܇OCS-]m yUQKVUO;vaa5?HZTMPOLmq5G3wzŏM?j`>Ks=: 5 qb$ ^z{loݞ i: jsģ@/OH'I ٱ)5aP^wǭ x ?}_A0׹l&"f硂3e .-I@oUF2fjq@6YӦʯ%|[U pG9 Y+X!*UMc~tã.ߔ( ] *]d*+q-\SyJl=a=7, p/7*啢A'+/3pe"8R?|H|pbq/ՉnjSpp OKCWE_Nq5w^ 3$xlnNV%A^ ʓƼ*GUkzc@yB'"V+>#tR`{(?I;m|О1}y ޶(cO7.;Q#mg26gR](ֶ՛/'SciMpj}h&Ŭd+_0t6~ Ŏi3Υ$& px(x{@,5'ER駨><U {k:΋Cߋt>4BmK\3+EyɋVDOY}Əi9Q2s 35hS!㗒k| pyqȧxiP=/R$ڞ5֓V'+V6G;rȧc5F6ϧk~ i(4\zRATnXSTU ^(_-wҦoi]4t^~9<t^#ỪweGU?:=}{y>O Hv^q|/ ~o;bksӯp@|v9}3A[1.qסsgWS|a3Z2,FqҌmBE*68z8#U(PI]CwikւaoOO 2M6B=JM^O#K RT80G0H+=6 A%c;ɔ(ȢFRPGќ-aӽ/Bz?>qs2g'̃nLS.x=Ы$$O P~"M$GNѡix7ׂ򧭄{iweJoqSmǞSys:<Sk{{*5VW*-̱Xg(ϖfP^Dr 48UݝzO~nU͸? BV烦8hJS+Ql%OMc pAU _|R__/*^p"g9&cy+/Z~I>`ur1!{IxQA`qm[˦o%[@L\>$IngH_CY]0nr(xg/{g;8o6)n%,w>¨F>#{F q0fԲ>gΒ= K3>_v#& zMqa}?obZ&ò1&N;EJ;ꖰly69Լ#wR"ᛦiԟtGE=o jc0Bp bö$#{z5z 4#l{Ï#Wc nIyO"0RW=5xp5@± ٨|ӞB*K?Nbog .L{Bժ?)`tU1|4DHUѳs$ } B0}֏V"¾^X/P#&Qs`: pTe-68FEC=gcdZ>/KFh]\JaM5/` Q42`3#C&|B{(h#JhE-1Ϻ2#ٸp/væxq 9%b6/BWRi {϶@h07+H%D01IccVA p< VALzm-ޱ@M_+'8"JJѣ#'Lipw*vwMwV`j%--1{;ex&C,@#00RL!Fn:'':;DSAtYn}lW/[ 4'l3,\z^3 RnIJ7h\y;x'=Sr([mx\HCπgCOFޤ^6 ŧ-|3:s`<  SUkPo]ɸ^1t[x-7g@? ]/7g~eLU:X[=t|i c(ug49N_DkͣykjODɧ#~oxv[/!!LgKE_T;X&N';mΥ0=ƗuCUl/9Xٚx u{V=EVUPcTocO˰!<777XgۍՋk=놳I-NcζlhO՝{c {I|U +m,*C^*?AMAAg|orYg>vdO}PXh 2{Jy3Py@#2h ?G=4?_5Eh/|;KNsξؾQNd+r`_Px?`;'24ͯx,plQ(%L8'I~ Xl?W=EPoO` ybd:yz̙BzP`޸.\6ql8yEnLg+yV98F1X 4ë.`{ g؇;`K1ku- ρ>Fھlc0jl#l|d{@k¸eڎA1ZK31 P2K F]d.ѡ fr3yF3C[ GAmiGK{Jmx )a )pK3mfY|v9[dC#|W;ȿJy$hgzۄv9USŪ/(r{Ppi`+W 0Fp+M[qs00ZQ$ *`#уu-ɒA&J K&$GR#_^ )U3YAգoF:eq.S4ﻳnVTa9E"y #H B6<I*HG ߐgjQn3Lb0Hn >Fu%[!|_[2`bx"j\0H4lT}}gꦀm!3Eb$;V_rMdD[(~<`Da8˩&cTzgd8 Fx" ,0,;EkCQ T fRUto)dBg}ifom aܸ~QֻȎ(E1GLuRGZe=ѰvѸFMDD_ K`L#@#y{Vjm i hH_XP+q*/o# @+-B4.. !멲v|yۘɮԲExɥp2$zCkbP}I ֿWiGőZqc 4 8[8s@ſH߲  {[u9ה4Cf[@?yn ^W? 6~;l)jdzQӣq)x !pW(k 0]o~{vw:z[@4Wʗ ˺xi{|kYb2_ Եe6u֩ d{񡈹յ?}fZ`.P>?]$\^dryN߈6\w\='9|޿k==I<Ž qn?2^vuiO_} XznN) ʿ Ay<~-OB~ fJx\uP<*::(l jHK#G4=#c3jfΑiQ MVݖأ>$D08B僂eo7=GhoLPb %dic5^.ǎQ! cPC$*gPOl!8`CѐAL)|2,gSjvȭP.JFIvV i%?*E6 yB@}V\"Xw'_a+{2A ی_nS5dR(VXVZ%Ԩb]2UsuD}kɱWK;6ddP4`;d( 6{,j裯5`ISpq2yX/UHjW(=I}gQl*^@Wv Cʞ/abE< hA'k1]<8ci]n 1jNʽ5-ϳ"Z?kаl pcIp3)d|5֑`0gV_# .SsH@޺αE-ʔTUb ,՟m翪}˾cu%\G3U>o>L|z|@oU~Z P ;]h~QY{iv~$|K>뺸֯ -yTž>i~ԟ"z,x=6X7.^]iO9wބ#gʋ ?FB{vWy4~Gzx:]ްYƼ)yE9>ħJy^ ]%^RRp{@ߋ=7_ʒ58|cAy#^UuUF-M+!T3S ɽ>SЙVJ绯Oc/pt8럄sݹlq'pޝÛ|ޝOk65\\Q?bݣ^Ä'Nz|XI 5~TCj%.]ϧ}WY"ﻧ+,TlB{M21֓MV'>PWb &N<m Rй%&>dӿ\gOd^˗-ILw9o^\IYo >߉HQpv[&x)tQ桘ӑiz)Ji`|s'=}l 'O&ڃ(]ǝ0~'yM[T?DO[x'OּnFyճ@3׃ewPo9x˷ #R>?{^*^yD(ǁ>?%7%ڞ%TUOV_'F_`/J-ϸ"OG!AP\}h*Tc3~9 HFV"aKnK5U!#"23fZQK05@,x63^S&#~;?B;c1wY BM}bj-v* +cCɱaeNCTSMG;g'-R _39kj*ȦN6ַ>F{t FXzb'J^+g(Ǧ}wq$+n#9oN-B[=\q\po O4`(:sѭؽߞ)^F]v^|2 ,[FL:V` Hx`̈́/Bsv)\鰸&cGa64o;9]ءy="HN{V2s*=pAXu33Ѽ14K *[F+BEUS&fNASA2 B$RFw5Aƒr/qL>JT[- {(>F} ^oEɃn cgԟm2߀鲜^+*s~ySwܯxךM.LtYAU/ؐr|ZތFfJ]P7o2P| (p geA>hN*Oش/7,'oʹ{;W;}`o<}`T}R׸Z+L&"?RE ~D13HnM]E)(ӏ)*鸼q<njs\jFivE x '\߯%^zyS^/Ŵ?h@_OKWE Yq,<6Y鲹:`񢯗?QOCs:< T}W"x<'_Q헕뫐J_%|)D{}%S~ڝ;Pw rs9>G3n0YϛA>.$׹vwg|US|^4l;ɋG (/Qyԉ\!:^ۇ0.!bxܫ ـ1I|z%kVJB!<1'~8U_ }M{݋U[S͸,ܟ?_DOaRwkko%n~:ORl]3y O OyAE^]_؏i'ɂ)1'~N;7ԟn&w7S?e9~<@.F~=T}Νbz_R (Ϝ2'wOW}-@ڠ罼"YH0C VBl,SZ"j"ܡg,+U1V?aAjސ#ANN~1xݧh.JO5i4 ż#f/ОY~X1: a,3#ǢoaaU˄َ2GtA_;2Qg;BL `Lf1w)Nja>5h`MF%q@k!:Vn62EmwlKk A4uS PvUH=tMicx,zO~ &:,m[u43J{LbtF*xH\TBa0RZaqͿ0pF8ȲM> `e=]K5lKلV˦U5̘%,4u_܈4/MCq}lZo\o12!5 ӣWQF/Ecv#FCL..HkV[J :[ܲC>R`+O(()sq hl`{yxˍ8t_cfpa K(d(5TPaai(RPUEzo|`0]e\(`qzS8<\m c P Zjq08Wϕːƣe0FlltG3&?>IVC71:t;jýyƑUwf:۷Ub6V2v}R#rw{T]EP- r3Ԓz`p3KUorn%}B,acsR N\*P>k|Ί}e>2,K9X k6} -9Zf$(ZEpM$ˑ V\_נȾz^(߲xW$ߪPxX\I1?ѐ+-x5غ3RCX#%j<1-*:8 %PgFN_K #Қj(W;&s{7_C$P L2 ee[(KSQne+#uGDb%dR.IL3#gX;ʐWӸ8 [A£5bH-ޑ7b}iĭ>.ъ{_2i0}2Mm,M`e l@m@ q76f"v>̼ϱAyʬ*D,q略Vw/U8w_2QԵ}1:Cg- gE ϣ~ABM<%\^|ּL*xޱkK ggP9l/~Or)luS|Ӌcg^jL R95\k8#?Ley^oV_LNft?C[yjys/j%^DVh\-/.O0=;]./sp|.N'FW qxLDib'2;s6=mݔ (&y&~e&BQpL7g5s݅&^꿩1ZAy~\98d[4j<]l }=!_dX_o}W/g| C@RQ?WK|;]]s b ^#G~vl) ]@|K7{Y΅)nquyo[|?٠f[|qNDۅσP] ZIpk]%Oy?7Z:j 4RVS3{7[ZddB ~M|j;f~ )W>Yk |=CjG@~>l~ cäk-4{H ^.z>KPF?v"⪾9t*%h\?G)A7^c -8lg$?oںUiō2r MFC@˃v퀚dw` ԰ހb۩($6!`TLJ"fq=E%\1f2> O<*Ɵ̿9gM,٣ u$X~qsbjeAZ3 גT@W}N)Jz05wV5Yì >L{{GPV֨tVЈf̖.b"gVkn{ #DkkzTfz8.x6__e’5LP>*v(ŖJ5}v%C VMC?*8{cfj ~n9.v4,uEn$ƺGc$HUpHw8i|.GwB>{i[7A2){*L9<8ڱi11=8+ܺvtehwg5ՒlQo>>)nbJ6Z,'/W8zU>Kƺ\rMp(}p818_cEazl]ve W/iGiXA`[BAJ׃!ɩ.]RѵwAuJw'b AcruhzQh}^4k#B-mHݟ+Nq7>h6I1@~Om >K+ZL|#9^"0Rzu`cّDb҉cPAuds+l[ [fX Bq #-Ui y[Q7I5z]l ץ wЈmêWSX_ S!cSOYVسvbЇ,eh;S6=G/_!nJw)0WEߡ鋻{k'^? й`Mz@̝={;:{El^9Qas: 8{E5v(m@Pv^nCd'hC&l 2Ŭ@j'0oH$ew-`XqDI6RɼXn`ypG-0=Bہ/uAx GT7(YM9\,n^RPu-ޅoPx7^wyl)G-f/dd" ^.&T]#):^t=-աYn\-9i fˣ`뫥z/WMk _=[^y,è7&Zܞve}s"lq} !GXߞYN",^bOR|Eqw.rrX:٥?Gq6Ns @ڗ /rXPu̼BS,>nb> L≣e9i~s.+\F)%b(vœ<]ks|;KK`S4/%o2vkϛh*;16JdaìwVk*0,lBPu Ϋj§E+Q)\o:*"%LP)iѧ4P&;Rq\?طZ\As18X웵{XN`F^PsD׉hcBu_a0$Kb {ë0) +#@:#Eeuw;7kÈ"a,<1aX%ZLd44{{S@ R A0QFl5+ y؏ JLBhsotَc>GvB.[mƓ9vFHJq}7z߬g菓BGojc^g) SSS4hqJ-њ1O#wS8nBQ z>S*}wĐX 䏹~|[#07y?p;Q0!७Bm; smCh0 {@U'=dkyrEO9jpy͐0ӖPa-\pT3 ѽp? [+d)ZL)Y@}th gp{`Б qG=~|փ ͬ 3iEIxa5|0NSNGG@Oˎ#l@,U.=m)&unn}dc>%1ehgX;~9/ЕhaiR Tei޸"xvf<7fdjRv7BnP99;/C]T7K :fA>ax.پw F}"UX. 6"T Ybx0nb}I_l潏/Xg3u>siO^? yԪ˷;{ww *6?_R{ezƎ$aqy7Gq :_р>?rXAd?:Yu{6u%V_  Ś>ϠW\ 1}?RU| xaߎv%pE4! z%rRXp ;G}k:|FkH=ؗ !<ښW˅hEVXq L O6~\ޓROT;+LӢygz5E;hЯg|b\+yb2/0'{}, g$z{8;}5t358n0lzǞ5 О9 ܏ˤ׌2r$=]HcO^m1[BFK`g/QL/O׬gy!nKY(-t?s S9$d/`?XkS_?|ֲ Y܋_>u2\Hy`/0:4=j;QӶgr^4w[2-:'!9mOro&ݝ_kͩ ^?^_H\lό3(^g^'kz4\. .SuS^.V֦~5(v#\%^ϙAbAdj!F^w|w|&vAG" RH 5uCd/Y@wÖ)4WfFPU@?d[OǓ-$7ނljb;fmUWvܪnĐ7*1n=RapPT8ƆTOERfoJޱmwMDTxCt ADRSwkȞ|ݻ|\` -oL 5SUϦ eh¡Z"hw+o9eиYQ-Q @dm'"<є΅i9B 7sƎ](d`3_!jG±!ԎU~0"B0pu[QF|CV# x #{8Sw%ur*Ε6-wG-D+ l Zr4p6EÙ!~5g;w6R'a ;,1]8&wD\cWŃU* S698z%\yYV.n4wV_ⴓUg083]2?($ 48̰`vuaaN>Rr͍g!V c`*(L4n5W2i D`V=b謱p04anvgbYh{f\gpPR`;:k5 ed1jhce}bK砡5uTzά 5rۢ˹Xm#_| u0TbKڒ],f\??&= "s &qY! >e"pWq)( o^̫4ЉrH2(D`Pk4!1 R^~nx7I(m|;\w4m'{|q 4!dV#Ś]-__>G-~إ^㛓|L;J6sW d͌cŠ7o~?^FG臠T:?p3zX IWX| ' <:`g{"լp ZCy S>(Yꮃ-Ûw~15s$ ŃBꓸ#Ž:V$2Ua ,Pyy|'񱗣z"(I֣LX oX U;?ɾ;GXx`;y4 8S>k;vzRu$$Z%8lOs,ug<@+$C$2%rcP>H \ ^O;ٖ,~D_d@>:`*aRS=}¹̥E2/NJ3|!+GsU( ,n3}"ϜVOGze JHɔ|b;׽L%0lmL!rxm )]mTյYs=9|+l"8L$.[9:tj?װ b"lOߨ@uo䤬+V7W˺e@>9 -L(Un3!vßmǮ ogQ-hw(ImD` 8zdq_{W-op'HJW35_k!9A *K!|kx}!G_m-a,::@s9{><#wƑ]-&YnPSzykIBrҡ"_0 2xT;F9Fccyy9;X>̝+m\x5޼kV]ξ Z9F̘_o=+` ̃KZeycڳD]Ͼ).5DØڀPyYݽ7ߊԩΥ6+kH~] _][nvA z ?g#4Sq z 觽 =44ь1VޘzR(4G b&H%(}G͐շ>^(0wgaAZUϠ~/~t !j;x=Ty.EXiW?GWШľ2wØ P@1#.dj~oofk6wq# Gz^)\ 8xp5\݈wGV#r .XuX#8#z'?ٵ~(?KQ}#L>!S+#yGϩ@y~~EF|(n^DDw>{Xrg 4Ae^7bh/w[p'1O[ό>}D)i'|(gA:KG> 7KӒ0ҼѸ:2Ae'+-/5@kYfMg wS>Du~-y[Ge9gyLs^J!®-uJ/KIu_SR^^-~}u" /S3#=͗cLL[ߞJ*LOioƗ3ܜHf{ˤzΏ3*/gn0fS;eai9ѢiWkzZ1oU2/)t-zdVySKyWvVފK<IOm^u$RnpK<#כ~|~SFI|yY[Z=!&~9jU9%/Vװ{6W"|y6J,`:ZWDlU0*ʱ6 F&!ĿJd@C(ȭN f\:u!%qa^|SRbef f( jMa@L:"T{^0-`O4A!Kuq?cTl*H>4nbo `0)swB_8S=€E85޳BHsu6T. #=\AbG on\Ia~F'ca9a$)Cؾn40B 1 1FM8 衮FC%Q/%PPXJSƌe$N)XZ-]LmoopNz6FsO΍VD5B $=o4{(G"UoJc/Ḅl"sMd[ćL) qmdq35^Fz|V^+Η.{xJ5tD IbJM<${uNH^&w Qj{]tw-$ou2I!;#y aSG"6W{RKcYifqoJyG{05=#Dd.?_HE1Ug>egޱ}]v^ UStT𨠼'z:ۗGpyHzaH$'5^%G3f'H<N_ {`SHX&SZ=_zzPԥBsLZXnɴR~8=}=ĮP>ׯcWˣ,K2SZH&,g7m43 wB|\ <Ϋv~}t/=<#Pz,&ƿVIVHnkɔzCb)U׋ ijGˋ|r/.d ОKT: 5^}Q?@9 545&=H<r4?>E𙣧_Ћu;uL]e'^D.:McK;ǁ&u&7u ?b>HKZwJuI;G<ey`UiOh.c\|ob?}vpLA6;#À=aw]s:6ݡo [բxE"6RUmWVca_Pyzcۻ0\{7 *aKz2B7J6PoĪ@Ers -0P(rӎغn7z?Y۱O jؽZ}"h!"BNGOx)Ůt9gg֑|Q[ ʃKV8o>< >S,X<>apP\ЅG7jItʞGEYr-aï ._M.PYjB<5 "'P[_c8`^!M}R||*L>CmAȕ $ -1X3WD`4]r6bEOLbY`@HfG:+f @EV~1czUK '`rJq$r8lE+Mulf[4}T|tLD.D J);MO^ۧ;VC ?2eA1g^lYI;S>U{n+ BхGdӫ~ܩa4Ulu[|?*ld)З0wplr혌42PXH/WO+|u 1FcH0 EƮ$ ůL/|anw `yK?x|8'QC'l|Qʧ.bG'`颦Wڀj ܗ)db '$\wU/P'ξYn#CrR^|M[i=0."?s Ζ YIϢuQӋIP~9#;; ,SdR-٭|ٵEsmós~hIߩ Q_Cs\[t;۳gsz-K_VKuNL'j)8r jטx̯EQ^+PVţ OS6=CXt.JUt|mX< l`AtYcX*鮒Y%_ΰ"z]i./L@ۡC^p|2t7.V W{{5=Z ;?| ¼ |ڲH.4znq8/` @1byu6ݵ"X/"pxd |akO oEI=S1h$%;%8!v98 I"GUAA0@@r3t"&tj|),IӋ]T?)RuQ0PӚ1r*ݻ.h8*bμMm/`m`@UiS9rD7~*>)$g^`ow59ܻEqZ*}" yO.umM=޿[O`hC!Ӟ_0qA(\9i3.~XoNY7'(PNp`:U!W9{r?$^` t$E@r..ɋD1#;E gZZ?Xi8ew+ql.46$ .eJE\mXI)[UL5d.9w)>yW%K8p6#r}8ۚ'_T4 w8 ]Ș.݊cxxV*SՁzB[.H[\' S,zݘsj8(a\%Xi\.8;Yd|E^g̲1_ұCC3{ˁ&8=񆵊BK(q GFmӷsE*^J9^{'ʕ,zaGXLݫ**ϩvRGAq%E/IԤ q^IIi :$ =+Pr~<=_(%yˈ] I~c=&+Ry!ryG*ʾAJ@yu;ìG2-dK^HV/yV;}^HJձ +B S?{?jDtk [ g$)(oF#9Ą'DMF$:p%Jqr" y y1?&{`DwlR 5|sΐoϤjtxƾϥ]|(yTw]FjSAi{F2Rxb~.ƋK K&ګYS&`$B8,WOCQ`q"6'[*W+=}g~huYKA:_z*|N래}~{"ɼͫk%m/kq4Qt[)7+`؋&Hgᢰ~j~/ }H q;|wOOkP(GF=:5oQ!tIou/e`cU 0wXE\`tpΛ[C ʟ/(yW3!%n@m]<1Ks?4"4鱁-%]v2mF[Qsah4 Q:da+s">@G:p}g'`Nm8x#UkTЛi|8An"mpgpmjb-?.PzgJk/*RAqٌ\ct>,رL*b^T/S Q1}kbZ:rWo|+'*;ibL A>P;Tci0säQ;_) c:}F؍jP08ٵ#$Wu0ݢouPu4{pA$|kJ{?'A /?:r$fm]\H@3id[͒*Bwg:+ht#.C%4)nД2 &ArL`#3@;(F1,Vm8S#CVMԺ8׋iZb.~tN닂NP_<./B#PD/?lE>-/3+y>{aH BGŵ=7!wlDv4.\h|?m0hnȚ \KnX* ʐwyafvWYLخ^ ` 9KE o0=9Jhcr_%ȌΑt^ϕ˫*( Tf7FH 9{b]gRߚ >(2|EqlO8J~>{?\L.d39t/%\J:6Hwf;nLylR%{]d[*e6_OΕ'1uY_˝vd+(u: k|^kb5.`hdhK\oI<& 9 q;fv#.xE2^FF+B Rj~Hh[F=(O܉W27 o/4$L;o!!ߎnΗDKWR߯7`Rw^yߒwA"ke0(˿ƾ[ ʃè7 ;Ͷ2Ah+MQ .:ăB_{3m㞟ik7 BKnzd ԥNހ3\􁷾5 mŶ \}ޡí;yXK3 *kS p4P,{6E (-ՊCwtxgp@G,@wNGhO ^4UVi:Uٸ@&^Sv|#VwŔ{XXwU:*p5IrJbmP֨+o͸z[Sܯ6$qo-kʃkԄ]o䠪˰f$ȷ,j>Ӆ)ùahD,ҥNTS#xѷo%NeAs#r$OwRĭ{3H==lb"~R,QEzozɇ2vaJuT*m7o=wdh){ v>7]ҧO[9ڤ+"" H%Pw T2MqƱ|{pÖ0@^z7!)wpaipJ nx79_Ҧ gd\'7В* lZzÊܑ/C1ʏ1L&XvتK6Awds[(|+ 49W(|GQ޶ȗgcp=)R{\oBTxI=y{մq= ]qu@aV]Ui}P@5s 06c(?6g lThVN' s:tuǰ8i,+RSR3 WA gM Z:]i;SBA.uT>ZY K01 G2c ݕ2sd Ʊ`-_ES4<-@G`[' Ցs#bzRG!$TV.ExVzk2 (p\3亥#` ZC ^-N:s:Y`$r݆X]+l03^ o*/p;>~ŷWm[+_/nrT;`O`x§J-H"xChEMPlϞp#ȃCH~矣mx^_>gP>?.;*Sy<:qJ/:W>,2o(ʗX0UR]?NhG 9-q /?Wfj)`z(y\UkI#ȣ^b@Xy'׼xvƜN@Y2Y?xO 823>ۼRrH|{(]2g y^X Ξ94KY'hO5w3Ȟ5fV(33q7?u?vqML_%F6@bb Ky Ӥ<zpO =oؐ_*_3h%/E(4B93,`^3Ͼ~~ej&<8S/5(ZnB(i?S`dxGj H>$ٵ^ဠ)'_2h[&G>n֖ I;zGhm46͜C=_=nYM9E .!X. ?2MhzpHu'nc!_f$L0qTRNlerq;޴uw\T𵚦 V fgB֦62oo_M( #k)nqag{|ކlȲK%))y4%:pM4rpy<4]x[`7 ԡpEZ[)_@E3*C{@+DtqK}=H5[L>ӡz`mHbsH<~ )&K{璊oHptˠWBc"SZ,A)6|f5' #q2ͣC2Buo[B"cX [Zsyw=XZ麐R$ # !\J*P/sjXh%C>Q+fܮ5~[C!T'OlHre!q`—Н#@YsTDse\x!+Dd̺sNi8@nJ ReQc=@]Y2jjcaA[MƂS(+0{Rͩ=Vў-&(%=!ć2P ?}#5ܒƄZ5RI@3H8 \tٲ[8)M7 ^jD}r%(.s!poף[*;Y?&xwC &l ~G!oVW _.sZ.Ԁע 6W{ܳ֫0-n^bVoVtNt ӛ=pAh.D (bh⫟O& B*տ\ O|2/X1YrMOv@ R*p/.Ds9ku#LTCTV("͕;IuwYX6KF=Hc,#иyI|]P =y)^Lf(rx$PS)n^a^p;onOd&KD8{zwZO ӳTlH͎RJ;7.;wh8J=W}@=$kd< x-uv!x&歑$;ە`<煅611 `ZN10 )J~tvϖ_|{}?X9sY<Պ߳< s.+pjr<%>uiMcs85edpߑaTSXG>a7<:Cf'セjT{x<]rah9c@PW5lMOE՞(U;ƩD=XjO9.c  oOq*WӒ:D?eix5&ܰV*hg| ZJqccGb Q5V`t0 rETyh;$QԋcIJd;;NkhHMz>/-nP? Gþ^w65$2cӆ/YM?vSz{om!^/RinErozXo$wWY#tүN}]DҷD[~uy=.wl p?7/[]o_^&7J3n3e9y3׃q0Qs,Snrx6g @+xd ^;MyҸyV'ugT}9ɡx5L-@"',dK?Vd_HzO.z`z̫Iyk^iQIPz6_ӷXYq'C鞌u /5H Ws瑝NO煥ABv{}AsՏ}z9|pOE.C"y'H\>P3L}>=?.%b{WgyO pyM`zfM%zxH>TC7 ]?/Ez>ͳB)/ϋC3t^5/ Pm=m]a:N~8R(R"^ Q$Zg#" ]d}w}%re% t.ݜJV4x5AqĺзH1'Ms&Dqkpcꌅ}JjȪ(eldUQR%eڃqL5* z|teS}1 !IC|!|RxШrp8cIp"IIOGLޜ\o` (-Ά{FpړduwS"S &а)%WT7JYKP+m[sM8L476/` /.EnGHvԝԧU4uv5+Y0Tr!e TcV2F cf9 RDlxQLji6AVWjN qd`VXes&VNS[AX|Bk| Oi{/Rg_j@ǛweEQ;3W7"؊o}6QT )ד_s֜qVJ (k WU l]sF!q_⛟:ʓ(7ypT&rkt 9_IFNE tĴRS[pGwɓCxGL s?jr%7V\8iSۨ-45iVSrVCW@RPGƛUF͠UB߮0t7)VƈPx{/iZ-U_6bq4eL{$G]2T]c׏i߀>Aq/iGp/]*o}YXOcSܟ$q!z.pNV ܋b;/⾪+Atѽm P#&l?kInSM`jS8QXIo[-s|P^YLgz`x3T/O)O>K59&g{J oNKy33,ů}yOgW9k$2Fq&GI$Pte|b}=:cpyO ̩dV/:sѡ#CY:`ǐ6JZlOa}T~_R0'_t=חS&2lhρu_/j;_t !5= #p*c b}s{&A)yy5/BA2_7gR R,C wƾ w^oϤ 9<0 Pث/K$TOo;s i>c݉s9,g<3_wUgb k&sBP8]d ~)Z'̣ЯX{ KY}z)ωHOWK5_QBïg(SUs{Vz9b?xy=|v_'\WR(X<[ܣƲOܞw $.g%"zNÍ H}*X<]Zt iâ!d_1H)&q-@֬s9>`Buӣf.?Vm|,Sxiuw%%էpOAyZ0W^I>B:R/XYC؈bo!:?PnjK -7G3: i]ub~D~;L FQ%}L ; g<Z%Cӱ~koBq wFCo\=N!<ׇbzW\X ӣˉK`us}{iĸXЗ*@wCtiodT*>l4BNE|#>>Xw\#wd VOW.-CB#X6GWX0 { $13Ml FGQV;W(jݙ gSApglNZ*Uy.bšH3G5#ӆ؅\E="$'ssdDuoî 43LͬZP_a 4$Ep- zкGPI| @t]!":j+V,2F(xS ,"ߛGEc#'*-VRk}FJa¶Alz~\Dm;%ADy*wܭuw8o~(FoS+Ql ?FacO*sإa?Te#t`ig9 ”~=PGYVkԟltembb !t8j-лt: gl@PɷlASd;j!zÇD V|J#FNH@9#cf@vxZg4:'22i7QO$lj Z`H%T_m'x*S&tl憿kbT>Dgv#"Hd#BĆR+B%GzG@`wB'dMf]t6n 9ϵžо7_w'5!pQơG6P"Q:fx= BǼ鑜_C*leh)i#Ӱ} 7rg5ahJ s:dObm O M/WN^7cFLbІdQ*q'j)HITM;zWLS! >[^W 1tZ C:4KOQU3ɻ}Kj6gI^wBrǩ &@tѡ)Bcs(yؑYm9mО bre&ƻy|w}5 &Y]|BgTx2u9}Je;r&O*)0ץ |lXC}d@p}gn{[?5'z1|4eOD:J3'ͯ?;r ?yVz8C9Q%깘˷ %c~F*~'yaS@?1 tzU4:Bz {TPLNBN㱺߳<:Ǫc/0D2[iP|Ry/'+:>(^ߓ,@l?N尐] m~}URb$]qr iۍ+˚X$(jYTU}] #̈}W[]/ b"obz?S'# g'ysypGbs OJQD{ڨ ) c[+/yl_EuN|<Q>B*3Byk=gW GƂiʉ"]<,?l=yΰ&MFyi= [ sّE4b7wgW= S<6c x:ړX1:>Kz]<" O8/>YܼY ~ y{Qȣ'R2D0=BD6gәi%u4/>H"q,l*T=OR<@a s H ϗ`~?Up|&'6ѩ{^?L6y'Ϻ?BJ—QGa8h]8} Ŗcu y>[ QRfHG l z=cjqI@A5g=Qb_;M̗@5[<.n93~9x|! @/ߜ-$7 p7/%io cF|{iw?;1ߨ+?$J4GQ:rп-'B{kflix?vmzXu'+1nl^&ax[ie@cGun.ԚC#E .tj~8!%R Sc[MGm;ù܊enPRs~,8\JV lCie({ͳ3j)qy3<'E]l3]ڵQU ~4 z5^RCWsmr_% xDժt2TB+ӿϊI`hoH:wx/(8)P_~plU)XB2eRHq0vC3~mn#:ۭLū荁zڱ ՙp2e Ar@G\"+7\5a|4 LI)B jA\#$9<9-f+#$<EnDt)0>v}\y2-d^@M AM+QzUʹJrSQ;Dʜě) %omI`q/NfB:,\DSW{ޕ"ip3aM r$ySnG,廴a͆;]T 2 d-kdò [ ےTߔz̪ f*α:YBBL. *y% ;)Qipa GK6T.VR؇fH_U^Y_]`js:q/zo&cTz?C*6^| P#Y2U?3Ym7gאzޱVO: ne>ξag{ uL᥎_YEϞ! 9IwVߒZY=t;~ShB*x~*J<ܓ |B秝̿Hv?<7Yx=I{s?*/rm2l/<lD<%ѳD]|"Kݩi$33 Cg4<'e~fV/E 9( }R0 Y/,e4f5=}r<Ѧ's,ˉLu_NJAsg#&~zKgJLx֫әb-O>-.zN*g΄vf_?=y=Gzߡ+iC׳#z腄Kg1+@yr&(9f!}+qPC8r'*'2_}hNnN#9@ބ:K5|**WNm^B&su[ f/a Wݷ+>,\Hr6#?$٬/^.`M~ribskuEMOzoqQn$ॺ gcZ2a Rl^Fߥ8"mIM(ty(Z ":1_~]RA~GQwѳcd^ⶲ t}:z4invoO T2ݹA'M(pgT_ݸԵ3RLB3J$jV8U@G^8@#ڡɟxw*"K.;bчJ4k&%55xǹVHa驂nER CC2SHTrCuv98'js7~5{^!%Rec1Df]଀ yZt'+ܾZc Sڒ#lj:KFѠ'' *#9v9u `^-2r¸s/;\B^Q]T\V EtH*q(]IB n9;h^mvwD"&2B߰݁AR[F_.x_-7ce?G9nϻQ=7gCa U"B7RD?R9+fZqа nσpbz? Z,w^ED_jow e7 ^x=wfj.W3崚^ӟv6?G5Gh*5|iG#(WERެ+A/UU+֓3; x;y8(@/b\(+vb܀IE߉:ŰZsyCʁO<`GƻN');R0O#Dw.W}&U2h=5Όَ ΪsY=ht^g-?33H f=p [M$z}H;͋Ӿc1'xCeX0g M1>WA0J֪T!MWuN | -~(wGox6]C5[a2is_1hAf^8)#$"9kۢ6ԣ[ k%g0r`Rq6b2 x8G%ր{im\̅"hMEc⪝W,sA*f 3Fm:L :3k-o^\뽀Pՙ}Π-E%]_<L'0 |ϸ4 @ߜSs `/8?7hӳcM*o4: ;]ۈB7۳r2nnE(̭BBVYXrl,ރ501;*$8 (tW+,mQ 6aVJ u5$B@Ѷ[6e hHe\@>4tobH:$iNmt-Љwk|vO.7߈!u ȮME/G\A_ՎLlB5=unQ4z${DΎcF5Z@*r@ӏؐ -d#$$δ7Mvך_RS˃Ң;\~BQmPY5WL,Q">< a }C c; dwaeh*yhXU0os;"q0,C V4\| ,p`d4ۙhZk.uqdEU$j}#NVV)x6>2zN TtK쌭,!̚:<3#nBvrf2&xs Ra V-`c2z3tN ReN#AMN-~ `1aJ5|fX\GR,&a[Np1,9,yzf̦[8yZժ KʰWy s y׻rGaUs}9gac-AY>pWURw:v5Qx?hV<<4]nle `SxnG#\${&Fqʹ=lm`@DBpmŖ*zn!pz c9B ;f,]S2/%ō7"^~=FP@oz/R)~IlZ'KW_OG_#[xG_J<\ L!Z$&>ͿiEؚp1 /zx A3CAq<_6x8*}4zR\;@ ǧW) Tw$ q0 0/CVxq!B8bΪTq֏G ܗO:w;fed5u7N3S"m{CBw1P+)KYW>> (⯧3fo_LF;*1u1L{Og#uonۼpy'sx́L"zΝ:Owt*e '@S:ngz S}Dpwج#'ɠ|C>M'o|^ >ǾH?QWW}Ay|M#y:n槒|Ke"?5=}?e<N<7!I~b?p 򨀻Ț6Z3-8>"OkƾU/I(' ?}2h,m^3En޻=ڭ:K6x4` [W6}9# hyde:^bO_bV.UaM0H@yּx섢@PBŞ<>ߗr?E-,>H=ii-x:゚;P˱,^'۵PC{_L6)ϬeY~ŔKb_OgY,~bS)pW'ʷpysگY/3~ O_Le:Az;$A xP|:}&YK-GM(=7'@yǷӉ ԫ큰x&|;?.䛚oDO+겉d+7]a\.ϲzNƩGI_v)PT}.yrU`.y>p1f 7MO+Ku<]azı"I Ws_EUr9/jy$z2ދZ+ʯ82+iey>V =({\Hd@7Oy8l~ywuw;~ߟL^?Ϥ*|N|i\S-^I||8?Z7I~LW~uNKy~y/v/?jwo`Əjj*r`0/pR%n z]9KbѲ5MrqEZ(lsU:'ZYdmy䷶9UpN@38I(lP8qu UAྯ/Ŧ@ <1j;Lo;,lXCٖhBߤ=aqre@WVesG\XMS?l%-s#1j҅cj:"Hi\ㅃ46qVɵBb,A!/ǩ\rvI~_f vJ4֊AB5ɕΦ|D_cuRq)#sT9A'*ϣJJ>{C1[R'hMy6fHFpn]ńbrMD b f9dꠧ?3n:NjBvW/  i!p? $`<ՊI??ĴH nH3itz}Q8ŧL>?<('6&,nbK \]'<T\< ,NdOW|S3SgSi>Cz Lȩz{Bn ):/-#gjA@< ?/RپQЙfQ? ПgZoK!-wO'p8 t|!rox^.f{Z.TKu$xT:<xxãxwb- w*yldK5mED/S{fe^MT_?&;?d Ndpk-Du/člR5_>CgP^e:B,'&;DzOȤ*f!i ԍڦnmAh Wn,tt.4iD*h˛`/<@2|Ķ} Q`ڜڤ2mi}fR ]TpOyUh!v9  Fwtc+<h6y(G k.su2v%6T,}?:ם}()$=07OX^peZ2àrl/RZջC+AM EZ0(6f.\;?R" ⩬tl\|zO)E)Dwv&:+c 9%ibFeiHip\,w%xM5bQ ^Gb=1.#5!rGy@!Ɩ&x]ukȨՔ |rrS "#3XȈaq/@-չ{dyF0;S$^CǓ#ϦHi=9JÃq}橄3ĀlVllӱc^K oR;72@Cvrsq$-vѤ.E`y 5 {%+P+gD_M%v+~tmA I}2 Qp j%bT>>HϢ-Q =F[ts1+ry4nh8Td!Dƾ5hZdϰ#jz o<ꯧ:;N6&?E|֍S;'.'5n^~9,ެ<ޗnY*^(ھ=W}WTٮ&^Ժiʫg(?F;i2|-/o<fֿ) lh@j1nCQ5,ւ Ҧ_Xip&{bjiz#I$Vfgf+>6 )p ytWS+Opy,|;ݕc壙 wLyy[GWqϙR;>}쳌0aw7Og8}%g?{{$p/$x6EOu' ҹo&( E^wb;<)Jx3F@<.7gcJc=1g|9vm?*eωA{Δg~P'i/<r\Ӌ'~OdfO/|q'w#g2\l3_8Q,/[K1#MqxYKy'SJg#~"{V((Ҍ%~KR.8/D yFޙlnuojzV<י@JyY8ң+9䣂|OX[M"׋zt`Pzw?IOˈ]?J˩$Zj)'3r@OPԫJwf  aMfU{X]tޟzYB||"ayMlFy:Ѥ1ctsGyԣh*e"Jkš hbsl3\o 7L_Bە1M}컷0[g{RSwB9{݃ eRyL+݀G=':0cUOr-2+(zyVt5nsEek"bj9}֏Wj$  ]ONڥJAMݜZqI,F\2$)w{d6-U-͎3A cɒ1&E=I&(qMK}YʮX CvWԗnMhb[Je/O聁*; A{.uT056ʹ;a 4T}vmIgf^' +掩uyUkh|7BĢcvN>ZUq7/c* Ohm.4C|՟@̊t$y Ȉ7LwhnG"`*sy|'ay*ӑY/Yǩ1ڔJLZQ_J)b Ri.|:wmݺsQ"C&!m+_UiD$Hi@m[;DŽR4zvNCۊAXv$z7m; 8'?(DiX8F+SCT%à/ra (0hֻA)a@\0&z3sI\e-3 .GeWygpTYϬ,*:ҳ[N\+O5Ij?9gGs@wCKqFny WҚ3:Nausc[Hk~ ֛T)fTt}w/sR 7ǑVL6ϚrRmq5:X=@w G3!{T2< tpG9h.J]@JeM %bCH`EGcw 5QF֚5_CDu= ׫1-D r|)%5  |n}R7| s; Q@ j>{ڣ0HʦFabVdcc0VM+xi7Q2]Àv2mh砏L:dV|En#}!bJOx‡lx̐}#uZ(q`T1P sLGtahXC@BM|l4[OcH=TS[o&H~/o/LIwZ."(_zk6=wEjhm=x5UGP)\^MLRUkN ;T]MцW3* ;NWd;^n~nzyv_w֥g'/"&_G#~;Ǧc_n~?kor[럛/'yo =yF`oM~;qvngV}I.a ( OX0}A|>>3?I ^0SU~ItwOf)<YgoLR~Y|Bi7O L3Yg?i$3(Cb\Q`z|/H ;?"t^INg7V`y &x}OH^! ?n-> vgF^V}OF'qvY:ۓk ivxdoy=ʋCb“Đ7P<$h 7G_SxIlEHz@ltؾ=IO`z}ދNwL/sQ;*~Oda{:W,~j*x#[LpvoNy9~""l/d3Hz_OgRO Pf1PzZk<ءhN:=]]e[>_οNݓ1.gg剾sq"sKU>dO yF%}A2 5TQ$\m;S@bМ\c6fUd.&[ssCBPOTZGqHcѣM4&l3lpNګ,h\_s VJ$=:jl_#8 ͠:+^m9YY(Y;;{y%bn|Lz@3k̰j1Wݫ C(;,u$u!ZAA}*em[cE$iR!qT\!CE9 /PЩXpeD@v{raxc0z c:;NۥrIee-x^9ު6f/rX0.{. 4֞AOm:4]PJc4^kPYPFVGh8TXޡ6CY;]Φ1Ĕ@0G g4rc{'t, {R@F=Y/YӠ՞In>M-mh2N6ɜO/5q7xnGq6֭iԎ{6h6 %nY-=|OVi gӗa(@[5&Hc~ORZK5T8!j΂9V_;^^>clZ,6{Q(C:ֻn0oOLv!S1,ٴbY%ǮhPˑcZ9E$sX ZR agxZvsȋ$G)6$WH&Y%?Z•3mruZ2`?湼]JDKߢzWnJ@3*GWdeŬ+},<"5_xIQ M.i; ~Ov$O&;ZP8U_ f`"Ă44dx^xk` fr`\"7k#F_vV84utX*/MMOx.Ǫ$GSF@1"@@met%*ˁB~ >RlͮZO]r пӾ 21WQc}$oszd엊/ _^C=eND%3 m0t({=1(/ $./~ 0!BiPM(!%?©%1>ix6|kӭq| 53 2U `~"sџ(i1Fs ;<'zyh#n@pyV?LVכY]Orgvgt^-EDG t'{f> (Ȑ'~/#!ELy= y*I/ert9։._HrNX6Lh& 5`9t%d^z%(y WI"d 5+)IJz|;ͺx,γOP r8'"$kz a4΀{sC/X~M}){ 8z\~,E#]K!."Q~gLչٿ:-|xۅƩ;kjJ,ܻ4Pߛcnb}V1S9~!b0K.åz._])^_=) @d= GYXgJKA: NJZ1لO8 ygQ"wLNp?0=C>=,eIEN;^vޔ[KH/-YF!xGN;tΝvy~QwtDKVF}ڻM}PZ =IWq ?cw56~IA 8^[' )f+0v3=@c.sdiRa;]vTkAu8 ^3\cK&yjl)S^" 頞X䂷[ 4,,y{.Z% K`fD\Cu5{s,u1 DWs3 B}K[2+h.niʡ5pj&y Q☽lPGˍdU7 +^A#]"lpcmX jZw#0 ̏k+~y]1uw0g:Fgl~i"RɊ7xj0,fhW\1k_B^4 )(%!LTCrFIp'EZW)[,!X}M˽J(Ff+KB58\-Z- e]85(IB ߍWrr)T;zъGx.[Y-+;u{vʦt!)w5}B֩ی~\Fxv$|5lrA~jGɕY8`Q#fQB|c8Ɂ`9=-"x' 1%mЁ|c$^Z_e:m2О"I5K27М霐FH@S<SG0j(80U5(p?9sIENDB`youker-assistant/src/res/default/夜半星辉.png0000664000175000017500000122012413260315532022775 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp < ÉyIDATx4ɯ\W~|Wo&)qh)mHVZ$Hql {$y}v;opVNZ&["Ej)_ D})?W)6(:)g(Us6$e,jjU4nJ;;7~TI[нQU7**~l1Uڪt'U<紩 ͔u*N[X 7ժ:s(5kJT9j#O̵(cyhY{fM)r-VBPuιRJj*Vng k)\XR,UجsqeZ&X]XUژbVF\cjb:TѪ&7k\2ʪhW1vTT5>| &澝*OQfky5kjAShmKSg[y* 16VebʞvhLh\i2$TUQ&ljnm+/[K}6u&]Xg4\zj-e+VO -HH^YJ@=U1Zgʬ6d36Z.^To~l'fC'u{EW:QﳎGm }(})5)mit5XJaj|cyeE^m"eAcJ̶@G/UHwT暆ŴA }B #{4eV' jq%ބaOEP5ʈXPlT),Τ[; A+usLKi R:7bL> amCQ  i¤ #8 \A&`N-<}gPiqjY7M/)hKafJ:OIhnlA؋ؓ E5B\Vz-I(΍H>K"W f}0R\<$MgHp=c VϚ+5J4[e12" $hv2A CFz2`cDs,:sSPEO֑AC`Mije D$7*5/a5ISî4M'BVYEy=K$iҕ$0$ 3(5N^%D#ýTU ղ'v)e 07ro) ԳhADbS'kz zTr]$U$f%80HD5$+@M?!bAoлvUb!MG'vzJ;ށ,20AWh4>yJ(E%zT+ 4: Vwuva?XF;lID}%ِ!:h1j"@@yWNcBصq 3d2aQZ00̟yj1sB9%)@` @vLA؞Qc1C R\["LKX, 0 8Bi͒0Dn *!lqybLUS>iUc#Vn|V31O\Q$I45ţF`dH<^F WdGe $z֓/t*!<6b BNJ:YO(b$yH <ȧLDjABZ w"$5fe\.1Tz1܄ Lke4)zjQw*%  " HW_bxAfIM`@N ,$Fv҉k 'F@#,r̈"= \@!VMhd*ˬe+uS$#F 0QNĜ,4IQ ][m.r6-#B|B22|gX^eC`E߃At1Nx I -/>i ӮewF 7 P҃NVAX4,2]Yf ݆\+ngnLur 7VTFQ#FHRm6"aD7LPJ $MU)|L^BeqXI/idvIWGw;T Ë1\ y\%Z~;ii2x-/]Op2id&݈Yj[kHGt i36J%%3o3$n77һRgciYH`d%3!H,Ջ"G<Ő*I%3$LQCf*iB(q6ŜwyHeM]6LVqk*괻Z (5 ;8Kd̬R9Ӈp)C9P0hYElpՋdg zʙ{I߂B X>_wģ.Q$-. Ԟjnb!L\+IQk$eYI2No{39Yy[c*J>e2;>H>䛱&1LUy𸈒/sYKI#2i2Nb*l+.O|HweRNcI¹*!0rd~Q<*E=ofmLO0i+dpcQXl,tT OOwD. E2!r$":tȷ?ݯkbpϠJ!E1wy3W{Ƞ(r4c r,iצAP;FHc9CMʆegъK20RZ}&_F8 Sgr2#g|Oב,Lyy+Ms^ɟJL$ۋ$[FĚy8;wbz;0L7/&xZ$2o=.%Y>ϻ@ ,hff[xhj5;G4$Hd=d`lp?- oIqtr cݜA{]"ǴV86#g ?2n118~_t}ko..Ww~b1,nݺ~22~s泽~{.m;F6õ qv,uvνS !"b'A/ݴ|?#3 Y/:<\mqkUU:'jMW_smޜ;Zx?B{}NNO?|٭ 3ӏN>׵;xonU|Ӹx=;8a8Ps~KJB.|Njh<Ջhs5^7[mj,}7ɋ'ܜw\_^V38u<88={1/>x;M~jm~;ԫ4},_~t1ŝwoz߁ګf,?{O?z~$ ݰ[A8tgOūvΝ?O}_/2j{r8={&kּPơ{췯W׎۸q@Gg7DLOz:O~~٬_>.W~ovYY.q0 .'}r44ɣ{FvONϖxGK?Woa0i{FǓ7B2װF?͓Uy XwjsO~__\.w~K*GO~O_~ч}¡3_W3o}zb~lw.V-|bح_]>Q#W_gpJe͛7}9/_9PW0,qٍWz?}}٣gk\ew|0/_r:qrM{vE׹_}_u'GΙG|w/hNܸyv{;7^]L=jÛ?퓣W_~~z<;'RGndރ/rpۿ׿~_>[Z*Q$9Q µXrժ}]Uss؉m؉A(H?/ HCEB0_3=}T7ڝ3N骽ZZ_W/dm VJ肎T8A/EŁZD Q6+.g51V,J];'"5|D=̀&Yj Q7ЏIq>XF$\~ l:YPaĶANǨc&@v8Ndr& [l"fGuXpX ~,ủ_=%F 8mp&4UnpCHP' 8zN\ҡN[W#yr#epB*n,6@WjQ ᘹtHC\Q+*3:0֨=IDQH5L2 T7,I4Hi@ʔDD%]8}Т+gЃ9ٛ0ٕ"0dÁ.=RM+%2r3/# N8L=6 s\ROHPEL58I`NQ7 J̞-J=ڀ}PQp(0i_@_VZPrjK D뼱-_)\~DWhį+  64d9XEwK PMrXZ\T#+&RQ B)KK`،dEI  漢ZPX +@m1U$#2E /W6E_&iNh m18WդS!j(KVE =SN,9I:)k5͐E-+)C$;tǥ%/M mtL8P+PkIM$qgMz=5ҡAp{`MQΜ+ϥ Ѣ)W BQ. cX< Ax3:KA 9<;zY#K8Z|K+.4ҚD L#HU,(P 5 jGd8|auU!y4%ri/o'(?۳%1 Z?F.14rIX9S*j c))vP$IW,%=54$ t3% h!'G^V(zdh4yQA ME!Dqv,^d JT5 c^EͦQHVaCUhMN.I0ň(Ya݈.-G!p8R`p_l8r+dQ)kI%^4*O|Jvc櫕C`KkCB $G #mk#UQLV1H= Rn3,'R\m*S[Ȱ R'pe5"vDߐ6v5M/!9a5~f`Ds"L3VM#Q%maBRB^A.O9'TQ\8MtD d>@26xeǮ}F1ƴr8Ǜ>duPVZ3{*[BNZ!ZV %Z @(1I_i䢏@F)HL z郓78j ՛dGGȈ oTzr&BEp؅ylyd${N!]Z>NEQ$F$:,HMr,puyABx^:i\ ,PxJE1\,@6UXEX7!My@F*F0 S b5p]j"E a̔\Ewf<ޜad%tI!rCk ^9k鹞BJN#GCmK"$G܆ᬁ@ ௳=f^P>(W^Y*8i✙K!. =G緢_+rq= ̽Y I91CqG@m"LH h*۪\*DM! JD1$-o6if\4qO$nhbHQaab*\WqcH(&r/8<'PFc(҇Col"f n)+tkޙץ'Y=ţ6i\(N-(:k9`p48, MOoXCa%]!v*)j# U H^37XJcy㫂_T\4<&/.$]nRA QɑG+\(*y5 9u`UP.G S<yۂ ʣuƹJAyh4rrpX`-d#KUe [dDuÀZ%Q05{2tE ]uAY (GBZ|jb\^ ^H": l,u0mZޮ7]@:/YU4pmԭ)v\VMqZ LAo]K#DqAIǴrDrHA9* 0sB6/'iq{Go)g*s"X™ 4=wpla)& ,P[G9I/µ+;H/nG_w6(͡  WUCi gɴQlPFB[xk=7I8hjm/DZ 2aв:۾8D. H֒1E"eďr޳\% b] YJ>-R]Ц\} Sf?V49Bh/SzA?B@MtUQ[s]?voG(il*NN=~?&p )AѪLg݇o}Հd ?9TcQS_9=Y'qִ}fjßVjE'!KtWR= ȧ I}X|Px\),9~,B[sPEn1w8*țT=x(1iԲ#Ul,v~lUj" C^>y5=E`y%I恐)?Uy !y/ ,Q+n:p w=zc[&.#+ð@>V]K]KkG@|f]y5yg;Avpocmf5EWAsDΨX뽛{_RfZ)c7)E]Tv}/ܦm#k'\G*vst:h<=?=9u{7n~ݍZDݎ°ZcH7O_=FFdqe5N>n"j3?AՀV<| nF"fuHmiX[u}Pwٿ\{/?\uk BtLZx.VͤY_֓3nWf3իqV"RAtZY{reĮwn6Ѵ;wXrF}&[_^x~Qɓ;~8^$CSzzb2:(o74j22w:\|p2L'ӻ 0}-cWq*֤}vrV`ַߞ?{WgOG|U5|}}wEm@ЁPq[/8AiF`u嫽پ7?Dzu|_9w ߐF|o_Ãulj7sN:V[wC|r*WFo$S\x٨?}wvZ}[].jdz_=7{nγg[t!-3ܰ8~w~̓?boFqre刄K`[*Pl׮].޺3\^u 0ݞM3,о.Mh>) 0U[ة۫[Gǧ~~/]v͛U;ɳmYXoPIS/Ywu?kأLͦ+Er0nNoܹ9쓧{7lT}zrrƛ۴Rͻ_>zyo ?4kwyqib>^h[;iզztp5;:,ӉhOO_u=<{9|^[߾|u%1wg}>Y_ S_^ g[e~}aW><8D%Z?Yy޽}>0tѓnM|r=]fK[{z;Gj-_x/>}p_|ng_;t~℞_fӪ-ޏ&+R7C٫탣fhWуϏvbN_l{7oe\-!N|9zW~dqݷG>?kW6u1_׶VSs=|qBM h>4Т_hD t%DPPcg¯][5{k}ߜc9ƘߏYӷ’*n=-]'O Ughiĥ3!7.1!> =)Y|ԩTYQJӘ>+S9eq#62-ULa}K?z`e#Um4IgKhI左PsUqJi͝AJT,;1' 1#_1Oe;L.p\.1fޘ x4gf/EEΎ Rf6(N{42M-JN;}t!:> 8Q=9SSXh1pW@8RX[T0o,[" ( OTzl?6tsAQ;xlK- 4?e705yZ1_͘2K:[E6USnķQdD^fnUC.VdRRLnSҦDoXp Ϣ_k^ăno ƠimScU0cuAc'frGϣa3,tTui)"{iA MchH 㾡8Oxp:Êiif 7 @?d ۫ҏL@ɗ10JYO ΰ6WiHrF,C d@" )Phi&4&A?̺wi2;vI˼*cv6wBOP7 _2퉎#L70~]<]"g)$XK@dBC6xקL$imT8\<">AHkɾK*TTµEW8ŇYg9|j.fr@OPmtm"T5p2J刌qz; sUץ!Pɂ,1vq[Df% ~NOB=Uqݎ) Ѧ<;݄q;q,]Fl<{" IMЯ(ܘ]к8(=mQ'"8H7LH=kUp0:z=ati OqHͤǫHUdRk=Ǖ0"ۈdJ-@V۴ۙW~G/9L4241|VEaw!JA=y x=ezB}lQEevY E*R47g0޹$`u:jiЩBimZ=KDctzx%I;kA66 0z&eF7M ޝE;b`SQAv(Bj|Vt2 tF,!DLCC Q"+5'D7IF[7CPC<,r4T3Xc>81]Lt7."Xzatc >{;gT6va a(`>8f }KN 4HnrpS"=D! u>dLض Dt_2{q% iyb uz`dX$)SqסQ2 3%'J3gp2JUF)0[Ȯ 6/D}[D S/E?ay Z@օ6<YX' r -IqAitz!`"&X?|~l} ?j̘J$!F?c"#=.R1A؎H&db)h:kTL *]X*+th![fAZW`J@OaI`G;ʠ.C{cVOF;ۮbW` HO9 a2B {~ꨚa=Fx8h6@?θ9FAÄ?P (6NЌm$ν`gǟ9m΢7}+] w㎜9O ٪}aʁ&H"CzhT=-D^#M˘ۗqڇ]ḥ#F31NS׋=.(@[c:[Yj*JZMj* ӯQoN&/ݗ$O{M4S 'XN.zgl24 u7qSi"T'P}Q &#!e|QLVL9;0d9$Ca٨4iͪfB X9W06z4FN(Ћ>#I&fJ_"ݼ)|{1Ǩ~0CFOViG.sMȅ\Le}MQ8rIAL8G fךi$eXX'f^5Xe9 taS˹B8r C  qMtq㎱LQǨA.(O;qdQc_өήdmTX|R+agq+( ~gu~^4 ➦*95) @ o59sz)oaL!Pq[0`|}!i;_ro V1*q35?>z iqҵ9LMc SpuE<мAC vW{FO?ToW_]r4bR᣼9b r8~BCtM/6} 5Wb <<NI5ٌG,˜\vޔL#ƀǦMw49 <։K10oHagtȩ (`€` ިv?ӹS>^뚔X3SSH!Y{]ƳCAeBƅHZI C#כ~=َI0q ?DűNX\Z{mca;ghNh'l 0` ]A&7cf w]R8Q$q&Xo7|$ "HHyT9`jGT㖑<0k ; SB ֳ LyzS$6Yj?GX t)<怶.0}` #H7~2VCdvl)e14_`M"菑q;Sr@u2 4:HzL.!5S9PT\5j9_JXu~(7f~lRT ʘɒ:AX*ama]I/vR U*Tc&ԱTW!ݼ"29bʸrYF Xg6ˀq%1#_7D9*ᜎ b&=B޼h ?_"b"Ȃ٩s *yݐ9HGz6%t\>QF7,Y ?Z/s73OQS @  &3Lo(Ͷ1_nF1Ry([IzUCsH77&VZ4ƹDzވ`.؂Zt}*,RŸOLQߜRiu)4VB[f$--=!3d:4SU ? G!h%M$/#^twaX!0FE_ 5X Xuz(&n@(u;bӍ33t)dzN02|@)ir`*چT F,ӭpB5ΎqEN_v3ӧD[#D獷`d4IPUp(=]`z @m툦Ba*: C Pѭ<*ni|;ܛ}S5T4AP{Ld`a@&9,nnWA$FT4pќ62t~K#v.a}K쏅nGd?_b[j6L9MaVdQ Uelz66f(HDErg8Ցƈ3K78gƱ NbЕ+)x-lfZLƣ" Mk; -. :ob?sOJB~m7bgxDc HfT=X{NwA2IM/3F]v7VlO|[}[F.PMt Y f’.kB ƐvG@)B|@8yS>a nɸ e6+#rmGqkAT[[Cʮ,}=*6JhW0B\ QJkQRܮ[1}d*~ #b8+f[Q)Kx 'z"dnJa̓G3sb=^F_|YmEێ.19,'R7驙)d-U qYW`3^pCX*UÅF=LANж9so–5DZIZyY:mg?vD+%f&y`x!.cWMg I MKh4va(<|n;}]'{&Ih "^JāC> MuFsVw# |ی"ftvͳ)%G'1B!5uwh*W?y G@lDIֱw0ԑj{ N27tfcm|nW  PR@KcMKfxo06;Y`2HupS?B˓qg(~$+[MRY @t@l!ҩlHNvG@ 0+ڙҰV&)o 8` 1Ͱ,Jm0h[> Jv{>*a fB|G؉P 0 YzccM@,mce|D}ğa|SyDvi❖ 7m"hF;]7UܺNt4WjEmiMmQmLpI#D =Y2nl1"UQ0l쎑O)tI^8E0kbMG% h(nִ>[+VFePSaFtqu@ۛ.C#j8F*VdBo|,.oCfB,QWqX얔xB$K_aX2R}cZAxCi_-R@cX>h#ҶyåO%Q-UQ 0𶲏>3͹*$V!yM- Gm ZgI$?fڕϪD=}u^ÍFD^8z֪ gZ|" .2iQN'כ$)%)<ٽueaq\IϲaVZ8AJhv#5$D\ p n4Ǎi:kU85*/lu:~Wn@hv4$"d}6nSME Kń`B(#aL&mm*VZa l-!q3%dol[/lk@d Jت+z1֖P -JC)$ktu@dm4=֡Ek.ud@ɵw@dU{ږmb֢R[0sb'Ɗt7&8ٱTckv30 ;=!GB6+h5!ugq@lKZش iO+y[6dðMCx$1FzMThKz00g*- Uݳ˯o;cݵPu:#ڊns#T9as6hܹ5T͘ei?`^`#K"p!z6&37"!geV:`p7q֢F @bbkCzlB4k^u4hBCk̖z \AuYtU/0824C(;5 ( )P)<0"L@J`+eoԇM@ӍBo@Sem.qbKMO4zS&1iF6|pNևtl-ѲO (RM8V6`W%/  /gɓ364"[.uqqu|xS%"=2=yiLq(}*I o2i]o6#*]](vm-s\osO.o.ΎU%fV+re_kbo)ketoj|RwT+URfjt6&꘡j]:ΡRxԶ4ǩг(eqQC|6ex|4ެ¸`VjZY7ӱ;WAZ n6J{a^ m<Z~z0E 6NWE׎eM}vǿ|?Ɋu;|d۫{G{g/<*[J-yAO-,Hj&! $٤^.OׂtlZ6*:tVut|o]m˼׳Ãv^ .fjtx4vȦu $;}`r.9~c|_;!Czvz>onoN$]-.˧dz^.}_Ž~hO?t_`'Ӄn[ӓd&eG'J6?>ƞ沛J(]/>O^\Xl-qa|u[('Nl]5i8MyYy?pTx?{ѹ?젠+*TܼJd/eNw`s{u\\Fo|ѣz5|^=l2均ۺ|n7u{9Tgqlq]̶7~qoz?oG?|?]vwiGZGۛo}u.gǰ>Oz6륞d\ocMdn&2鍳=emE5٤Fݼx)8>8,[EzqU:>>m/.|?bsglE\twUWˁt3ϯ+a"M~<(;wTͦ|}7| ֕ejeygK7w_w:Ǹwm[rYoc"nrxo޻;+Tgӏ>py\m?sb |:ZMn뎄n/VI)$mUbos''ke}Sů~aT$;'bu{X=:j|zvz^ 7B}>йOb!uP_{{,;G^uSq~*&\NJ/_#-W5"*qSo\_MoJ,m*!uzxp1x(ʐrUQ -ZmSNʾNN˷]W zs]Ef-Pbuk{{to\<{[-'Iu9{UyXM;-$bhӓb^nsAڜ=/NN?/>QPj7j˧tK׻Uyrjnon㓽?|? 󠜍4/rɣBwledݻgARdMWazyQ˛ۃYl&l7CBǟ|vtvoܼ<8b=.mGy<խ+YE,uB1lw{?yO%i㋵Lb26W_,.ۿ}f=ֻ>y'g7OoTv~;D$,}Av|gϟ]Wջ 6+㻪v>*n|??_Mۺ"kצGჯVOۦjGOm:͒4Z|񺾽hSl+e9Q~|Npm6y(⣟Ԫxųgɼ2 󣳓|>}ܟVBj{z"/<:~0?Vj~ymwt`ʏ>o9[!ɤjlW,>7&vg_C*u7pW!I'yPbJc~1?lgW=OrK?Ow~/? 3:9ڛ$;{˧/i7~{?~oneΏ'??<|wgzzyS =ۿӃO_/D7 Y1fd^Dpsrά(QD-!Z0a/#l6Z-rKM 4IʪNy1 Yyk};] %Pr I3R2c37s*TZY iV#FxbQCG#)#ՁMn9&zHhVwh)'7_7x=:I 7V':'@9  M1|I 9TO[&\(@*q&{`d Z-Ԍlz :W~~(u>pJ c9_Dn 77.>?Hd%w nuAQW]r{M5n f)quHqErcrʱY=EEB&u.wA$t~zUMZq΅-V,spG T_0Y#?1bAC&΀,0,`'O] (0Y'+nY'HG3[B/) 3<l),6Rcj}1Xs Kbr1tEn{/2i`1v&Kr鰙( Fi@ŲD5$(a<1hRGz"&!Wv.{,@Y9Cٞ5 A85vٌZ/tgC;PY'(p $AAq*7 6*s :p<;PA 1["OBD.ČuEơema%Ba@D&nf?.ND^ÆVF*X'>:v\L8q H~49lg0p`+5 3D1Eocٷ2E+5d|ڹ6`]  99;HyMAAlK ky/궳ӆ`ӂ^\XND^BV҃2F4>M?d <2kЄTa}*"LW(ُ ?Rf$#8px9^qhB5`ӣ}M1*~APc u9$iV*_\E =UAXvX'As㥃bRB:x!H+P\K*Ĩuheӆ u`]zcYfڢOʜEoO5V4IBEzt9>bVlmE5@Y#7(#J}C];a>=_^in ,>$E<:jzoH$R`Pu2K 5z1J|")SD.XG…Z-i:ܢf`C+\J`VV&e4xîрV_Q{Bnl)-*S0:$" dbIz*Wgu,̂e%}[ (Xc@nr>Sb1 yv sq2*V^QIV!X;bV>Sd,> ! }mth̰e&1Z#j A ( O2s Ҭ.BcL"0r^Oz>"Vj3@ S @NV\qXYDmav8 }dǎFm^hk!Whzv%71$3d's$pJE.@HI<?ܫ; D TuxčL. O} K lf'J5 6RDq2_dF*u2@Оʨe )cLu0e<0;K(E(vsJ{O>ؓ8al/I2PBB]>ra15 ?f2Ty;HڬB6Dzh%r כ9G}}r:R{irfB=(BaDʴPE2mϲ Q/3s`qH2_hKÌ)p `"xQ #~xVSPev3ZXH(ciR[pȜ 6zQ>APr,y=S@Fc2HsEg$cmoZxcI? xw8@/YpTБb&؅ 4b ],JcסŠc1+FPZ ػNw,B 0҅hu6l#Q$uF #)h]id )tiiRhV:O*iˠ!"(ފ0(WE' z gk;_R/G9*bcI {k-Pp\Y)VH vR@,TMqa0: 8g?dw#m j/:$0iM` uNc+Nc-ק>Gc3+%񄊩L;/EmƌZueGSrv " v٤]E 0,o ZA$5P"pA I$öd_ݤW($^JL"ڙ RO# A( }'-t10OG@,H5?F. 1wpl/{H7/m3zv;"+y?2/{)c1$[kn$I~tA=?Za`"E. J-Ap 'i-Gna}ri'6VndQP[vZkHł㙖FΤ$E{$@D,nw#($ ;;#;3ųܦ FP $R\RԿEFMh? ԐD3㵫lwjƤZ0JH|y, E/"b`(chVmq'El1#杝qe5椈 RST̙TuF Z{05k Ѣ+ & mA/ İ V{^xN NVƕ 6 .ڠLgU٤r#FA2yƶj0mDo-S'l8i% >2{}}ꢝVYSQ Ibo;5 lmxh qZ6<6˷Y"K+GR C&pOs#y8!f86NxZ0aEʙN]?xr& r#αO$Z'o7TI_ =bx6 D)0QkfUhS8R/ky7D B3HPhlA݂Se- Kb+?g'+ZDBf+LV7}[Xq]wy6rW<YIڅR,i"YZ[n-:z&D4G YCb/|uxZ2 Ke6\vѿĒ e$X OuRϵA Qɇ 4dsHVgM "䒑D&MXTm<1̕l*ZvxoN'$NN*XLzAcf!?^&PJ<+,ozfHR:̜p BȞLK`a\jo9r'I29F/'ER&5 GE:1#!bU6Q?uSHF,yV.Y͗|{ Yu>A ;<7 Zh#:h3sX,MdAVԼhTSSϪ\(H,cڰGGvJRYHavB2 (Gz!dŽ!fe".m2wo2DW{Mcy6B!^_.OY~gB+i"-.Cɬ g9iOTk&EY4S8TԜIv8+s(i'`/qR\IF)Q\1bV8Sh9ŀ XPO4F/`-9 zvZaiR1"u RLJ:> }2Y3TY4c&=b'Q 涯CMӰZr 2EV-ۊ>4o3kvu $GK JfUHЎ->R D< LBL'N}(AADbV[eoGąԒޫU0B Aj2xI8M37(ar@c=H죔P}$Jͳ$kIe#=3Niu9x 8ՠj'2yw-en# nՀ5X ji4iA VnF᠊wT Y>K?F#5_tl Deך)Wc kuXIX14 [[$wI>}W}\&*w9XU:+p̬Wl(JH3 3j h'M8G^[bĸq[3O7FRP0HpZM%H¶c; H7éLPC<>nis@&u*Lf)KIX:Q.?pZGZԧ)Pz&425)Q31:l@cyT -eoI#P0Jb^J0qAK+PUvĩSII0U6 $&5I>NM$ F&#`h8Y9gZkқF-'9. e6PK[Z"T,CE՜}ouZd  NB.,'pfwoҴI"ț+=97 v&WĔpj>Џ!e|T~d刦rgʄŗG(Qni 1a0 X#/Wc>M#n* P٩Eyv&+:,{A qǩQQLh=$Q)@Ob$dF|Nf "MղI?M k~qK刎D!'Yx=Y#,q/A^B v 2{WK6I?&=XLU,cHTC0 Fa `|++1&i*q: T0PiYk!32*sQ#gI\N儈eˆn6'1 NɒƴF> YǕ-)9Qy{-vPp,2!sOHdNTRk}#J/ZԘ#ʘD=k6-yOu;}.4ArD"ܼvmD0*%Fen'ӘstϘ`4\~#J#c=X^ V,%X/|b!+J:--BgΕ!Ԗ+z|Rʒ0Xv~2vOɠ 3_4Z,0=&B^:|2H) Vg DI4v'8XCY1apJJw@j@A6Ğ>,UiC@Tj="" ##0TUu*$jgIќD)qDj}J6('8+ 6J̑Лv螚A%hyi$F:OX%q:jPs9pD K>xބ"'_xtKCLު\za='^ 1VIbFdYqN> `BصNԲvc;x* |sיgC] E{3}덝clr;?de6: cSmﶊK1zV@G`i}9г nyRב܄Q L+ <?MqVvz6JTBuJID^±Ōe>@qC"oP2˵,!IaN`.$f`#w 6Kv"/rKcOٰ$CQ]Vj/Aqnɢ(QtDѿggӶ.}СDs-9>h7+BػKTK` d1f$W8'&Jy"uAd$z)S\D{\J5>"&1^N6L0 pQEMK\y͔cXEB%+߁%'RggúD-')Pvۀ RVMdH3RSԶS؍d5:{qޅ IeRJ V5UIeLIٽ|h^O9PؘSU٪'|/k2E+牀l Vxmq 剎atr=W4"O;/FzVTΉdr94Re=hC1Z$4$sLQ$Z@Ctlqƺ JD'Xh9eاGhRs@s4$$ڞvbXb}PkLda='$G H fSad|SS> R{,ytoH1bz>ړbY3 HV$` omFIR7 [D)2\c49FDţp- % pYG87YMܮ76֒b6TU?BNQ$˧Q&D GًSFF&S^$t(eؿ[,A l"tŝc UEfv)D  #3k `rkX-ASH'BώD?U^0A m8uUYwфergcժ9rȀY#< d-d"8E§iʧ`# 4L.!"GiɶGi_ɦMU6,X~ HD.V36 LgRc*#SQ1ܘ)Ђ|S)) J[*` !W'TV̳dyCrQ0ʆ-+1#;œMpvY8R[{ZO:DLwQg8 69'7I]2NsZ<<PTNև|6744soNImh/Daꡉs>Ҡ~h ը*IM}+GƮ|}Kb!,RmcIJ}l#Xjj>L4fEN?$%c8rp}@u}\2U&3h&T$@m%DjbL aɗu G+?~H#ʨ=5#dK:YցD^5' Yc&0H FY^ -6${`Pd- c6yÆ d"+Ej!Aڤ4pFKr$r&Cq-7Z18K9P(r0sRl@8ZݡP!þ)۠xT+b<|{ hXi/D7} q?zcK4Y?Y)I!0IMtuHz7nO뵍b5GV)1h-Dv(X k=9d4y%$'pW&e?_qY'Op2il>i 2aC9gFt"Qt o[8^mREnư~z?cd8 ģb᎖C5C:lFj ~NԨL09LsFn $g&,i'Kl-݈ϱhhe6N}L#t2+j亁=+*vrn<]/_5tr z$Phqqcm&1ᓡ.փ6IW;uc#Y<jLWcm,$44]-V CJju!SRN]OBgv7FrVvΘMG!PD* mFRS$B{1"J*KB~K/ ۿhbn!4;An"f0hڟGm-6f4^clGFQhYaF>&½U?(wbT5P"\/dJԱXu|5вr^NzKC-oe*_Fsa^)Ԭ`[v`nۑUWqH&C',L" aҾڴ1o+@:_gxPZY*[uCVFxLl%pȇnm M1&!E3 !O%ǁ1 :qps-4$ yLYԀq}1ٛQf-VRpпB <T}0~G NKc.FrC~R90Nh}-b0')=KxexYPWEnrHcGJYrPh=hY_{ ;%eB/Ӟuć5Kѱs^A ɞiUiȢ2aTW 1-;< $˜z1'ݕ}c5>-E9ȷz;%nPm6h(:x>&|^B¥(i-"/cMk}J>k-weEjZH51I.d#KEЧUd'Нi<lҰULZJCm?>B[{IZ!ql{Z;UqFҀb v`N!iIKŜ.ORLuE|dN~uj%<kC5!jҲfxPJO׶PwFR\a_&L`$G퇷Z)Y0fS^ nqo{)I5x[Bw¸<"Ko25 5hu2lPuh%wlT2jx_3A**~@RVc{u#!iӞ4-|]۱daN%i*& Siد BDzϜk5'W^VEZʣ,`gϞ^ȭF(Y7mj1$sQb̛gCPV~1yZy3Hɽ{n//p&l æ-鐴5xF@C18TmnZ=_Rix]?}K8 K} i@^|ეya̺R+_T-X2aۂn׬,.Ĉ1iW{(RF[Ve!e ?]1S1섦j,K B<iHxLjcYyT,I BDA(Y-d@IU Xvƭ=[`rExąw ZPBbK"dř}/{˷ӈTɳZD H#kf/gԂfY`^"u!"RZ@ÇF?BňmUf.K>RuیY",ʀ})+",-\zbOLqGrJ C&㌑ 1( CRvPN3md{)}fzf`N0n0R*/A<;q" g] !6I_ޢ ȇ1'HQAC6AoGfVU-kw-RڝHwN8'0~e9vW& $DD0pjo-P'F|PX:."3ϡI)κHa_=E f%|yb0SR?w,RNCL.P 1!HYIX|A,+/}y,svB 5a8#O ,둠P?0}{I;  K1ZLK<ʸKv Q%;v$l bo cQW>p#v A c=峷gdɩbbA 8f<{VLQuROSܐaWm(d{s`&D @,dH%.a)Lp)ϭToi+'QFkaV]R`I/:hCb&^Q"Vh9kHD0qG!_AM,PVԍKW.޶߫qj55 >(_=~?Њ}CgfgҺMZuI7zmHuƣe 2$I\v**lqCq΍<,(?F,!FaX[ddkQ'Ӫ9uY<$ҋp줵VrH+>F[ʷkaB'|gPZC>&l"[ y;FF|ҲckX RW wP;!Hm%J-E'to:dɒq2(+{sh^Tz@Ab5U3*2{> `醊u ! 2a%/0%khU/ŮݘsWP&;{g͌<-tHi{v2+qmӲd&H^>Q45?KSuHQ'q+ps}:oQ01`jat呌XX9\_BD$+{|bҘ>"aAB@FNA/wxS]9$X[A'@B,.֜uaW-3dMpLc 9#ihD DJj[PYCh5~8Ds|"jq]OzcaK ҭ_Q"Rpv(0oPbŐ=w_Q0poǑd Xpx-uXmbϪ{hNJQyAZdx0fBr#Wxq]U1DܹCIBFn=j-?I"lo"@}x;m -=K ڑ gi*dHj%e-=C$hJ,iY9.^`H%Z1I գgUa;iPQ^ԷĀFW -XPgIngǵgI4a)1 ,pVu5łe"4n,,Yۄ}Kf[,I?Xk_0(݃9F1}'7{2vD$q iڑm f Qi=9Q#6G@kU>V#6Kb[dh Ә3|Rĭei7D MTy1;^gi8Hu[uHbՠ?o0'HGR8՟K%k~މ˘Yڝg8/nYVPXϮ/ ,E)j (x^׭UvưsRR]Vuc,Sk\U>0aEmI˼,_\m~aNwrw.MU+NP1 *h-R$iT4 Ni[Zί5}:2JPuYW((:X(d1RKv(i:7.RH,cOG!KRQ# 1dз-3T\"AZc7Jsmyh- ?n0X ,Nx`plɳ pmǠ(y5=S[v* ˢaf`: p]w(FuA62ѭ'ρr(iߣePJ̥@b|m-: &uI[Eiŗ+-Vm1R QC4P;֯jAV2SkMB{avxSq"9_8*NxH8rsDY@5[eZ t@Ugh0DZ iL}#Gb)D!+An[-IwfhPL-/m;AV~;YVşMuMw"]2{N_N;4|$F`!j$XE3'dѻ|k8ȭ\~{VDo \i =f}uKߴyNFA[>* -yC&"ŤȢP!3 B fv[k$:p1D !GchܢIfDQY ZoܕnWvMJӮXQ\ɲ؈/`&0[o)NjXBޢ @PCnm>(ah;QoXʳ6ݨbMq[M#P0c2CR+3gT^@ٷ0qd饚H(>xcXlB؇B% ]\ϞDFhX~BiV?H:sg_6r H L,`h{8FM31EX{N+A@;?ʀ43iQGfSjYnl$Rg<('W$)4@nbDN*!c&Z\I# 7a?4Y&iƱŏ)ⴈKNr蓱| ua9luhUV~:DyܭwWae Hφovlud{\J;5-PIGUb'y[ErsIpZϷf]W|!752K(e<3vvof{uvF6Υ;XAh}a!Kg#/xGG1"|+"5kӯ$qIH!E_'4ZrL8h# |v+d#=Jqw-Y"DێdOcU_dCef'}b:!}!{v>4ypߣbf޿h,/lhg,gjHouG@&䌄J-ZmuAUc ʢOgVV8tnlyu}楽Wgv$tl6]{ga:ښ,،@v8ʷubj[;μ27jz]nՆ0]YE.1 Y/wl}~᠁ mnWPnVI,[7HFdW{U@VoZbٴux.I3^Z{biYi'ڷ/pww7͕ZˬuZg(}ҹrwz _Ϊ^]lc;Vz͢Y ܥPou9:C'"jDuJbhW֓Nul/1T|%K<ȇXGdⓏ咣njw߻|]$E]Y@|鋝mɣ$;ؿxϖ^~ybLn~{ ߺ=̭Z}ŧ,O= Hk4to\o,~tǻ/ixg/]o ;|⣟7հ,4k'-ۙ߾g؞J6{Bmԭ7bg{*NSK"7r ;;u:`zǛصnZtΝϞyH]]|R96.s,軳w8q[V ḪM뫫LoiXoA|/gŪn6*+Ҭ@X}Wl,gϖYa/)K\tgG'Y^$$6뫣˛|g~ySu k; y\^,Kݽ5>ٝ~yפ'iri|gsz{_o.,xU;^{s1Swh'iӗcK+˗w_7~x\WY9僮_?˲{ѯO?~}ccy{8+ͬ\oAޓs^}~K;,1yc|JӥpxiT.nn%`V5 \,8<>8>[b6+ܾ>n6{T]X^7 [~t֭|'xon; o2]z/YHg|^ޤdnz(ˋ;Y>ɽ {7{w{gMV,,o~'wC1۟Ϗ<`طvd7~W'<|읷VuK܊ߴȜ_t=__4еpgu}ceރ[wnm{yf}w>{ao+p??yvg_wi{0}l^55o{䎻}MricFBRaUxډl,Y^I~e#L_^ډn ,u sY뽽vgm,'|kx\U}}n:nV[abruyvlo.Nw߽x*z:̲x\0T<~rrWˣ" ,wE/'wKr}}U˧nj5Ʒ>2hn_|>qyx~݅5y} Ᵹ2zm60|ϊykyص?*j]/NQ?{{0ۍm%i֫[l|ƿ˿y[>y<xyg:\oba}qo.G|j_-vP_|_(H[5bgixY?<<>7?Owѧ2,z~,ez|7}F~??S1jcˬ8e+vY4ɶ~ӏο$o;'>? o'`ڮ`7/ӗ;'7}O]BW|?d?ͮӯd$ݙKǺjpXq+G~TWtXݟ''Ͷ] 6V"O۶Y[s7|7W|vv~(Kkk/[y++ɬxu~{/-gn4+CvgGˋzc;j/a"/^|owMXf^âv/ϯuYf{yuu 5X/& >g|O?̷֞/O~:@pl6t{!cnCN$L- dgB %f+Nk뙾Ϊbn`jb~KsSX`\(ZoZ+Z޽}}Y0-`;$I}].GZgAX[S_\~ǣw-XΚUrT̖]_oR{mo>Wꦺur룣u5, > V~(g.}O|gn?;R׏)_Upy*Hn/"{pwM}CWeQOvg_UU5ޥvom}[Eֳ.wr;X\_nymϭbypgn=8>;˝_e<;u- y}z6WݻoEsӫ"ÿ=Z̾O~r3nWmE[YJMwrںUxVn>y޼:|~6{l?:x_fQ?v}sg^޽`ֿ?oY}U[8,v߮yHU׿~ɟ`A;cKКrteVuw$>9G i%be AXimq,/o^|wpxܻo1lo{yq3wEQ_e7Zͮ“;u>JUf(/^;^YY mU/ngy'?<ȳaspw՗݃.|7ɓpV:U?p|W>M۽6ٿ*b8wϞ}v/__޻e{٭VW}xX."b7C/.ܹUjʡ7ŋsK>me}bۏګ" >&?몲6whQ^\O?y7 /o>>;_YݗO>GWa[ŃÓuDzܝ]t~tĊr~{p: ˫~Ë'_Ύ;/zvP4X_>}'꛰6{m |yɓ~-uz]޾E4_Xch1u}HgV0x8\jȫeGeևdijOf~d>{nyŋ4ܖVZ73f9 k}KK,|qv/~{/6WGGVpxy]X^ίE>s+2_afٽy6m[尭auѭ?쫝}|}묋~_s5Wż~7?o}w,o>sQVseaG=9?Uh}z]-wgG{;@Ѷ$*ժzH=`ٻ_?ӧټDj;'OϿw,z_??\Y,o?_?{w?6 dc"4SVk|3*`8>O =`8@L$-zKZqY,ZU= m|lh"ISs<3YT0 ǜM+ Zl6uըhH^;jZ ("N5"KƐX)UJ-B|aEk9Fw^,hZE]<[ެ#=zwFK]IWsZ0"ڻGG~"9|]8PETd1wF/WɿqRL쏺!*KN5ZH`iX8 %"8)v@h("lhAAe7ԌW3pX4L|#ge'ܜX?&` Ĺ҃|_=ZpybChDHY;,^Jߗ" }Z3́ӈ]T:w~+@:0%8mf.,(5e{5$ A tbk" Cɫ´n!@|KBd sbQgBs tD*/ ޾"壹F (iw>B6{u-qM )\ꇊq{zc~WÁ(`@obw:Ym4s*ƵJBxtа/ɋ?/y[=,BX N?i^'Zs=sVCkDD$,dJvo׉6kyKEH (OD˺-Q~s:t@z^/LWEFUϥRne/@e~0JX}ۏю3T-oEstA M܁*&g ] ׆*v0N(8@C 7¬k*A(W{V3ڂT|ey赈.bh1;TtS5CCLf|@J4}? uV8$q֕nCީΝóz%"Vk~kAZzg9 m@ '|x QwS_Q2IH+x $N9Bف0x7|2̌}ʩ$W-_TPn鋥JRٰ}j5Fx&yn!0n(l0FBWNxOmkuAc#N%xp{l^F=ĪPo/dԒLJkqC2kġ7_gjSC{u]'Q[0 |wTQ?ڶ *CYꃎ!9Z,z۟"YOag-(1۬qU#\w1X<"8׏ ڃ݌ R"AwK#S[_)@vT!᪦-l$4N.uyd͟F =~=O#L@T3 MĢIx0zc#>-ꦯ/47s$?D~jTP1cّУ<ޡW_5-F_7^8nףγ?gZ%%=.o U=DJʊf?j +oG(I1>^=3fQdSFCOHs?U9]ܚΣXjz6 9}M|O<yB| SLx0Vg6eIcܢVM~9k?AڲM'5- +<[!!RUO/}9iIOKW4RtUdlbc/yCcLNpᇶPC8axwWPotҌ;ҏ8eP=rYLiYڏQ-HF{GK1m vBA|FaݢGEɧU}A@y|xIZx'C)>gUy1FZTpqQZd m! 3XPB7/ɔC+k"Öc6Rgׁ>H{vtl_HuO h%[{;KRF?GTGRF〖VӱX+<<ȏi{Mt*NħI~( y,c8GA Kz5h\|j|'$6 ǻ BlΐB$#Y\󽢏0 /ZTGNcD=Kɀ[6^ *XDپZuY雞v/S00iCDAie,tOv"/ȯ<'7ηQH%ѪFsͩb3k?Ļu*!ƇZ~!0xZ~#=PR:*4E)%|cm(=V;VG1Ϩ&/Ӂkr+,hYI;9RרjS {gY7?ځZ#8 {5 שb)=I dQϨW^ l+A玃 Bhk{EDEtLSN%]\~$,tg9(Fhhv ~dN Uu1]8.#{~'UjӮ|>,C,&7zm9d>S"F)ys#y;VÊխzuF 1 CZdC7/a|JN6h^-6IJ=M/|l$87q}΄fnJj:[n`;JE#DBsR"42?X/6#C;MF@9̷*'LV gHbi(;F-B`+^\azb i:ߺc"-XiU~eU#x!ƒ0,ZF~tS[DR5%GhAqQbG&Hxq7 Oj٣(2T9:KѶf` vv|X<٭~nsb0! \gײPќMn/S:=es=@%Qrν' $It?p$^~H6zp(7TYLwސ)Xe mCO&UDYpZC#eue|ď*>.9pIHXIOf\hPQ:5W,|7e ɓo̸A_g~p83~cBdk =fյሌ?QƆB#(GvϽ?LʺR c+, :7I I<x*Aժ]Ir`FA}hlX!Hǒ>viãsCި /$qn0w婯.w( 8}])?m!hL&2GEGIZ4(=NKdvY^Yh 0GR{IwzC(tjL-JK'wk8{*^ɣcSc? y$mZ|(孝 ; dH{xҖw_VQ\F~f'.qڹ54@!N氢ٷ\⮑19$v^,޷^v #oTHd{[4}8rPbͮڷՠlQb}LL_ 'U[)887EjJC[-r:2 u6rE׳nZT?De\YB[t^?X-t%DEzY05uV?@CxvzU)/T,rOGk(0 cZH:/}|l5G0ǐc؈ Y?@!/4Q\'Hw$hnq:)[2HF*dW@hadˬ%wLmiIkzޱ7G&tSnAzk_ -V%9~U$ɾjJNuj$|n3W|DV[/x 7g&`͟G㏽S" QENo{@g-l*cJ^ "@ @=]""g5좨_㷴h~X8+wegT@c Ox@(7EBFM0Uk6Y/x۾Vl (}Hx㧭?@, \:zrFH-R0b \UCߜX adq8{SQV4 *e[gx4DhRanbw0.A>Sw!Q(Y(MN!12NE5Wq=+|,gBb?kKUӪ)yh`@;tL B+aq(ڳD fi~PdP? X`R0򐕼tW<~УQDy=0qd0T uwg (gȚ!|?j#("#Žp#u1ۛߺ ba+ Rf.)#}k E\dzo}\K/jCՂVj vK%~X=ӟ:H, 7`YkxhڔM vmJwgC|`adMF-c_I`7Bsd":2^2x+Hth^zXS^{[*L\U?7X M5|!@` *d5T`iBX5Џcz7>HɞY! ''u#iFk݊>Qhٲ&MG$a0y%(/"<f9U0ARtId#Gt?iopd2NF3`AHzZ.xĞ=[pmk_;9Ls'ӨߝOJ`A;{4̘j*%e$x7TȘ;l&|n,"IѩLϹGbJr̭K:1[׃Ϩx&`tq0bÐu1Sև yxTdbԵʓE%c>Nu-P`~옞Rw:E ѻn *#W]i8ʆ/E5QJ۫v!AtvE$Q\ILDpTEP=$ãluE$+1=IYH*xR `YiwJ ֛ %$?m7wU\?6Ӷ`w,}u9^fS;lMi2=/Ml?GDxju#(@]c qw׶0%/Rnn'#Dh"$cm,dΚ3=}^fM+AO\bG5u C\1g1(ږڶ:kt~Ժ4{]ٕ;pvǍzjO{k=ע<aPm0 ,cTf Bpq(_Y&.ڍZkHTA- >,azE01c?q:*΁zxFS;>uKL0)KˏzZީSDIq7%<nj{IPzn_9ڢkdl#N{yD@ePvm*x Jb+.i> (}AzJ$M N4tiu$L/aFT]É2 zuU3m.rlOR yƈ8u+|<B'p}DK%A_ok-&5EAzZrcآ*}z4 c}~hh籫t/xA4? :S%=K>S:Ic`8ބrd74+dtʖ(Yn.դL/X  'ެˇw&%-5MؽUg@F <.Ke"1gf㫞9d[%4R~퓁%| Wˍ,8C0{mi]za>r 9MEMtڹAFLUE]J4=w\?3~ 1Ÿ2l!Xvz7ͨF+FDzi3!"  L/3_eߥ<`@%{<|[dauAI@+~o4,ag6i>AaG?֎#8A_OAO|P28uTۥ:>(R~ڗ[[e;6&([,t~@A0^YVЂsqV9 bUA >3w,nALNO=ʢ:p44F<"p**>.—xp E$&Ȃhw?!̐Z g؛,&b旱2I 1Aeh.DhX$ڢ1eLZ OEzY[5jָ探 m^&a3.{]ښV0ӱ$C㛇.b+w IJQ`&= v|twJp!6>*W?+mfk`%e+S/)趫CpjK}2(|v/&G{alG7X,FI}! s3ϨעFw u"C@_xZ+J8#ۺpjxL Heby8h:-!8⟓%73| m*,K$Mh˚påi}R%hv-4|]4/7) PĽ$!7ؑ8d@bHY32+F8"qxHblK"PRggng>&]Хa7'묞gZ99JvKU13jd?iȷ{urX}g$ nyr*aDb 7ml]G9 ;қlÊ<QEnڸl٘SwڶP 1#xAfYp fIYK i|*#&nOv$+uC;/ ZܸxcêkH /b.Q$$ky  F ,xQ-.,a|CruoE8^E,`KD8X[R5r$9?|`XL*}00h#|/ )"rɼc:|o |Q:_vIp8 2P>]YWF5Vdgyq wdYOjGGsMdF_!$(_2΂ q#a"*gCN+󎱆0F{,VxN:~Z%p4n:9ɡCY Nċm<.L-C@+ D*;qT70L W~TTQ|kO=|@{%v'#Z2nN)D"Fg|-lP@ޔ B﹛DiN 6N֗,UN?LdL?[*Ү]bTW8 @~Igp]*o CJyY Ԛģv!xYaz ϲ&द{ZЏHpl%g9T7nLXB~c•v~ LpVOXqvIum%KV r" Ͻ1 M.]./* 6lK)#[%ç*/yLta&\v,0y/Qo '$#2'эk`2_U#DK}`ȇswG;zULd%2tT]Ii81*T]Qzdtߕ-}5.HCa[̌&y]Lpfw/5]X>:ZN.)W<Es\Ss9Pt U^&5AE}5R|SVv|xe@S!,67KL9qTÃ]ܙn1b@>);$á"0\ZgZ"*Q) ;{?!P.X K*k8p׋sC9&R@f=̑G_{TV]u"}Pm|q$ K@*c*C%C54FDuPDSAcv0zE&7>A_$az]r `hI@NV"5"ş~19Ʊi7TQioYȪ[mPi2`O `׽\ʟc5dI%Pe N"[U*Rv}}3n-V^%A\DkĖpT;muCFH*%Cږ03$cskM, w)Pm[T\h1sBej"+ YQǒ3RӾPPm^`ʫᷰixQ<TjDɈbcq%!3 :O  DZc(, V Q@c TVjp["*˺ M.Em z_u1gBY6V(3o%\6NK#f]BU<*S5B" ^NEb!IZ@DY2:+=8{dr.,ukfi1"Tp;[_F9w.O !.Hx!|>ZԒ at-hKRQoϣ|+ 231-Uk&RL:zE,k'0,Bp\^&GQSˮa>9bfy~an`8Lvo.f~Mǎ5Oe3fc} 8ɋvpfDk@$R\;Y| &@ó9!NwфW"RF19eD EӒW9|էBh f&耬R:mWܣL_h2rV$SAa5fg'{#xbeP)/d x>XB Ue̷ X\[V*툉^@E1e-T5M!rLP36,BvA #kqfm )W3Uw0c8nha*LD;ZD9>:yzlk++.PRmh^x*sb}@ =y%RkԌcoi).K ήpCS -uЃjRmՂX4 㜠V?[7!O"dETDWH(zM)='m :Hl8#|l>NDHQ;EBot覵em o+FؼSPI(4V9st Rk9ܘ-S84UH)BY#wtf{C0!`~#BG3ۺ(ܖ/ ~[#OZD1WV_&aҪ8?%\1TRX)3 C[P) M?H^jۛAr`rfIaE&/_QTt|f)N5~?U I(P/v-.\=ǜ3Nv~ҋk1e[U:X;/l0վ-n^Z,2 XP`Vs&&|9m.şp0qu߂'2$=yx\.NDG*ryqV J朅5rb(,K@ÏԎb}"qsL7+[ N]]>mK9q^k(sR %GmV2|F25Z}AЋ1ұ}*q'jrVBW9B%vfW,ݝ8kmfoD^ tKfGGvn.uč&E2olƩг`c@3u +~c; %` Ycٻ3E^]mWZ:OKa-yXt2<4#5#vr7lRgG B1j{K[Q%jokC`5Y⦤j掦%ۊYa$SMO([ysLV7 @4iYZު{P@/ iHRhCrK%fB"3^S uX;f,lnawa"Ǻ.6s"zͷbi΍ m/t ~֤KԄkbҖ(9W/ ܍G$:-}hVWۜ5 I۲D* 02-,uXZhCTx,CiTBkK#yg`v_f_P8 `⹭ .硫V=ץB Ly{Y4Rj>x#XtHR5 OsAU=ǚ-I4m1bM-.Z]\Eu+Igێu0&?J،el]A|ذ(/[T'摏|@E'tIWU72 {Cfjb,<='`LFl&j]q43zZ:Lov TQN74_ կ:G%o$568_uTMA(NJvn!"d+7}.PQcb`?iA$xusu@Ej"HhX65j14Q~K,6UTk"XXdm6kv[tE!6$RnJRlw>F p$LKa)6/Ldh >t'ݨtj 9&u2CUTݗ`F:yJنkT>$:܂{|BkvHyUOla늚ሠݥd^p3˳%/t]]+3E,21 }Q@,1%3Ebaٱw6xCfGu[>~]u>35xeԧ#3/ԭhoq:P rng&Z=bw7FT`C6[Ņf~7%MۭIִEU"p3]-U%rٿ8YrJdkGjag]]W'U1 zmv#"jƘhs쪫,$%9hGƊM3 ʝRKqϕtsrҵx]ٌ^lY:C|03o"%oHu mpZO/  bY}쾩ۓϼPs{W&=-]2A ZhZxSQ%&$ o]=u6b9ȼj~@3rLؒEt˽/M19c.aY)j?b)vQ>⡑4\ض@^ 2.DNٲHd"Si\؆5{:,Q;G$3UGC)hYԕ}2fԉSnʈik;^XV.-L(8) <Ѫ Œ9I%7drxƚHuяfI4qZie)I`;A ಀ^YwCXU6]QRau pVn҃BdƏ};A"B ?)X5 -=$L ,-o_3j,-6ˑ{U q ~#xa?[{'\"\8K^cuÄf !R)Z >Fi'{?V>U13d:j.7>!L{u07bc tXnb𰍊vxY|^&W ͐{;ck\t~-@V-^#H(-߾T%*#NB!m) ЍX6EH-9+<,#-#һ]2SK>JNPu[+MpCЃc!BWM碩 Ut@"JƈQhέ%&5-Jp7ȴ?_WQqBC|GsV4Zk1oKVQQS;gUz=V{y! Rdd OrmZQs |TgA2zHV=ÖBA߇Z,<#౸7zkƏFv4.z+б_!]KkX`u[+H6[0+7\.7m)Ύ6cHg=–*:~ԵoљjK<>/d7`dz䣢T׮k 1 +\Yj4өx&k]?68|9SFXԲ,Yo xZC`ɈW{HcԀ32?$7CB$w_^ L6_j1WͿ3O{wy8QxB|A-R`|xQotS i-N;RqHDEW-%Ym4\B/| y::8&u3 bǧ|/|0X+( Cy\Wu& =ACm(U6*KyODT'jIUg=uD@Cw5,)jmbw5by1))A!\+DQ#GےrFx XE*nꘃ}M1 /4)nXF EŽH"F\hZJ/CrgwͷM~Fsؖ’kM[]g@-4#MFDTj<ClWPIQA~,Ѳ.@RT~ cQum :AIBw\y{xQj=}^%[T ve3!Cա%"*@$ܬ1+^g-K<_.?ĻV;~n]E}w#!2c`R]zۏvU[h겼4}{EHxit/цs_P \8/ijNOnb)Cuk ]LHK^=_ȀL9  ;߷Ȱ=)Қ9f/W7 Kb]^URt8l !6F-PZV9vk.mSDz/ |Ѽ.$BYY/Nh7U/^J[AMĶ@y읱>}WeKrZR. 5@3e8s.wM q; ~=H&pofTI3~'x`Zcr)VV ir U"GV8Y Ҁ ?^~:sWܢ<.UWf}I4u޷<&&K3fq4Fik^ݓާzR$|-8귒`[JAEQFAf&Y@QG9rQ^'_@ Ceb*$=܄lx:-xD[2kcldS1qeq *F &ɑd4YFHw}?ET4]-7,eB:OЕ. E0.vk{ [J ?dF i{\_4"PD~3 K}7YqBI`q!/&jk saHbkU h\{aiI؉۝"W!T'|%{۱-a׌6Vtj/ ԕ(HF ]lıjX ¢jG[깲{爓Bb2GAU\ͶeIEu⇀FS8,Srw~ ERoXrɵ`%>"Xd}Fe[+`?\ƌ1rqF,h1v({5 D+Nյ9NKtgҚ.tpL>r73"O}rOSpB>2wf䨎~| BWLJ}SlZ|_ i#nC]c&Az?->O RI%_yT 00 31Ee@$c:p9ʖFd|PЈ೿"T^yسnx}c;D+#޷Gd#3IfڌAb.zt$xOMXbwf"z  #8f'/De./^-RcOmPn+r]_\].G( W,o;I2)vRFā!/!1 `"xK\0PF {_Yn#.Oii7ɦ-%9ѲߗzDqkKA\3LK"}Ҁ]ҍE3qd{708Zǻ=4=A"7"F ʕ[tT7~f;;8W11tӺ쮩-Ht'T-tfR}czX@m \2nQ|ͳD,~=Q!cG/iy|#. T\B H`D O.&hlS!3ͬk,B]?/keɁɅoPtFMNBQɍ>ݐxR'g{ ap7=RS}(z{C9*@*D) 2@7iF}<DofPN?^ʧtɤyJ:J#4DՂWwGSc+췙2FS%Y*8QcȕInq$Ԏ¶Da{Rb7J/FB`@teOڡA|Oخ XS^A6&,v(0_lG)ГD׮901R$7ZKE~[ҕ[ HYy!EU@ NQ4U R~Vim@T[tufr.gJ`Dc]&|^PttV@z_h Ggy;}W{S_vƠ.wm7ɇ.uih4Xa4ݷzMJ o̕YSR6-DIwDǫE5[ ܗbD2R-0{i4C{tXb%pk#uo훮/qkQty.vLaY>z@;:vD:ux<^SyDVH*D XR>s ;GԉpZϯ^GQ[qcukB{rlBo&)EK!aJtZ]ʷbAtjyDU r]N}Dpl%ULߐ؉_ݏ 8He]p~ 2O"DbL+eJ+.X ;sWE%qGf}_Ǐh/X ;? O̐ZB u\H5YWNG/.$An\cPө)ŻOIaVT?{(up}Ŷٴ(sk۟tvBq"> g[ou7dm($ąMC:h[ ϒa.a :b ;ѭ1o#3j f jYA0S[+(ujܬ(=L ɹ닔'-}D +29G@8H콶,(٨NK$w~ױբ( J3_W8WF+JǹxSCFףF:/mMګ|!)00M2J>6@bYpdTl~#GՐx0gIˈsk`W_o:^ŗԹ뒡T(HT=}vZD(aQ!F}qdf${ Tu,NJ8GG#En+a'H7F1q.Orq 2sZEJ=S\AR(8#9Q. 2 }u4yb}-}|9>JƛXLPgC !s05T-R͢je^*'6\R+A*5j9cwܛX^-QNˬqܧ'% (:8ti^޴Io'д%fbU^3I3jxq/FYV\@9\5H`O}Y#Js#Sޣ^n;=7qAE]\f4}K@[(BgŸ&i?'_r/Zk|c?՝.^K*u+VnjM5^Ec#: @-a_e D਀jee ^yrQԟl3ʼn\w~xgA2?h_ s揎wAh]3 ?g_ҩ8yK tq6#ҡnv@EZEO|2ou8!~F:ʓ2.WήΈ_QD[ b t#xkH慂2?HWf'Gf(p@`(TLr`ӈEvߒ=$G}Cn[e:9+ZllrX]7&9:zu4 dygp#w'm(ٵ=ΨUދzkѱhNB y}!ȦMk[w]>9 _$?beQU0ܰa0':o@5 ew \r2\UDQG~9xgvs?@{9{5s9FݰڵoL`R߰(C }'5zhKz.%)xT8)XPƀNQ `)id%BTER@*E+ C+Z"1b]׫< h5LJ;MntkT`jւ-@hm(ZLZ鰠Q!L%'q[. Wt0mY0c ET^VH[}gyzH*Vm̲Hb/JQuYAzVM!TcҶs3[%da@F-P]U`#bAL~L1MmVT y9c68qʢS1 [ g a1 ;bxFPa?>\*9e]^[*:ʄؕ & 9td(!Awz?\2\R7,fܦDXΔ] }3j)#c le"P(%eǯ`aҷF.72lˬGÂɄg3|iFɌХXv|!a!+3  wQ -fi n&~q<ݺ jD(l02z\%!YHlEG #lRO_Ry2/ +@FlmzAh-) BDŽ1S*Z/ơЃ%cR5 *byp ڀyЗR$~W`µ!WJBK7qJ .i2=:mtbDB[bOz_Ё_Uw@:ᨮЕ"r*@`'0d> kA:>o֘ш _w0Q{;:ՐUac-vkBѠR .?],bK2˶)X5dK5ot6 m@zT=˲a\HdzbV6l.&$HQH?B9Gd!sVRe #I󜩺u(Ca͢={q# tO5mhGYEQU`cRp <#`{"qF9nVє: ɁufѡӸxQ~d,1R=t'YD=Ԛd!fFjw#"oe;(jK'T[`(omcÓ&l4}l%j;*>FYyp^ F:khxm=ӿ'ɲG c Y92 67u qĊyNQʧC6;^{w J^UGVe/ cc`I[֒ p'{Z([vL3+*U%WTǽr5^Nnh|60%LZ"7±V N Eݛ- aWExLS{6ˮX#t"o2INDe-f.mm&fq(urѰ}zhJy0= bc~x]kNAނBB  隌%\Eh6;i3CkL%1GCW²,j`pDE!:xV;TV@KS G Ma6 )6%X<~qꎥTN0".CQ'"D&B]EUbu ]4?y"nF1o5˲LyYȢIqIY.<6tI ~u KWl в !ÂTTSqUk̮PB\Fc8 oClv?^R$ ˂ vgjVVJ5V 0t^U VUAˮu$`BEPTUyyqWiX,boSK6sAW{*kTp:]iA6G#˳aX4tA.*;hxT|YӱE Y肴H#M@krŷV]|-Ԏ͙7Ž*o Ҡ}-0w2j :m$ T|(A۫o*\aiS `# `x%2DUf *1Ɠh;ʐRl*MvBP\מmQ_6 S/Դ|ktUC'3 hlbzl HŁȨ cP_+ԩD;ZkP:}7'ّPy+GJo덻hz>;_Dp0Z*6Tiٰbee5䮄Pgmj<kyЇnfO; `L $yYH󔹷F]S%_?,[ 6LOƋpXn rL&`}sqmSQLzwl8>T U0X>~'o=C@ %<blݏSƎhZvc v&|4װ]aayW`UrwKab06nQJI*g雊c(ʳG h#WCVA}y tE96׈ z'+n&;RBDmwvfڢ:lp G$ȅ.Djo SRAlWL"diB , @O@Ҙ]ne=hP ^e_MNhcY8ɾ*5k'[qGϽ<8ݲdOӫѴlI5"7">;ȀHz0g`t$4u6Ld86,y[P䲄nL,.eO(A,͢hţ4%:&+A^>C伭h Bt@)` hN*\t @ٶc/r/ #zBdPyHE)ֶ9.,J\S{eeUIdx} tmދAw:sXfZ!!5F;vErY,b]gYI@72*ХJ2uY1)C1QW.cu, {]|M4xM ;ڣZW? PHlcA#8  zYL*Xj蚿'L+(.xﻎմ=:? BV?@j-@oxiMm~ ?3_ϲX֝͂:=*hdY l].l!C'菴EEݍrwHg &5~T< y] O0>M-)8E =щgGhqǖ@ .3M#vX<s^<]zzuӋ+f?N k]5y~qkWq&00৫&$+XlɛY=ɻbImy;]bQ-Yׄ/p{ 9XX PbafOAmUSDAR9fZ8xaWw {:oxA q cj ֕00ma8 4UK_FG9_WDswu9 "y(G5O[u>{B-+⫯lH,''gܠQBc]=k}-o Xn]I4嫺 ,lڢFuЛ5jz%Y8_ե G@UU& p&*ёI-M:ɶXn\T Э4U޲!~͛i4 Y[abCADu% Hqe!["`%wRK|}GG^)*D@S_Ǩ{ْlxOe~ Ƶ: @{;^yc"[ոWEh/ӲY}w,Ԋ:ӵl"T}`g1j$أEO룳P*\6j찉mOz7y>Nެ6N'_ Oxj*JUUmlwzLJY%Тݰdnc[6ay0n+qAu7@@= 0trHs/t,)ж%%( "ʆOAw6}2q̠`Pq-ku܊ 嘯SoȊ!{E΃h.?S`;.BQlV+; 8苊g\"QݪȍXM3THc]]HjQ\*r)W8޼vGyc#>4ڼ(ђ_ 5AA5T$+ fT4D"uî,y+0e:J뎂)K7EP]`0G($q Vq|18ٖ3z"+j&MwdIf \$}szc^k;5;ߌr. !˂Γ BccZD@kݙ \nEC!KuБh9=\7%ArENj.:zUtBTS(YZf@7Se{l.QcJgTfX[f4NUP55n10} &GuYz1ǻV wtIJ2C Q6Tv4uC5rmC4JߵL!2p-*q(8ql@8CJIlv.:~Vl;l N*Ni(êSZa4zp(ש$M'yURJBخtf.b.ãr ]'^o,@[K͋Ҳ<=x_ȼd.%5,Y 1*8xN^RjmE *d9NJpdƆkTZ$q`]nNI^pF 8o8%4gh&mVH{sA ^UgqĊYg:el;z,X=a8]{Ώ]K"^C͗:@fv_F"N4Kr`*PWVȔS&sU^`vOG' Utrjɫ_E+a_*vv-O!mlyij[jVBy(i>zʫl:{:S+xM/0)0ep`j:2xYRNB8Y(a4P] w)E zސr@[g|ʏ"0KhN.I(`:(v*Qgx }? 钫`iߴp2@ʖU3?;gܡ7A8yZE'^.!ss!RU'.iVe-$ ~ .ū< ":tz =T2sGoY;\@7E[K+pRe*!Kn^~Ce:F2\@`?lNœGii.l B*S<z_6{`[0VEÚ$?)=h cP( C4 -3OR3tOϴDP^T ڮehttUg*4L$C /|7],(3!(d,ëonp򌮤7MYڔʼuzwx`6N쁪Z}4ΨI1Ւ0J ttT.Ma{Zar x*JdYĩFRf4/AMJ&(g9U!lݤRiȩ dھ{n ږEq h@N$eCD-KE`e[QϩbO- mYEA5g:!c.}S°^G/R젋ޖ=*c=yWs-ӆQYuP( H8O JhǧWwJh^ HlLWSl⋯?3|gDe\]u^ί ѫo?yt1uRf˫톾&!bwַq>t>wW \Xfu|m$6UMQ̷l(0&پu}C(#N:\mYb8 =~Zc[ۦ]Gp:3uNoEUD!7wfV١̫\_tWד'|{t0ވnIz?FO1)Q~?on7n\˺pm6 ذ*'?UxSݗ| -A:BNIޅ "T5=jD_-*.m7&/*U586D^RE̊XTP'v,gGipu&A&(KLvB1--Dž^( *%S(cj`_JΦKBñ+Uv48^Q;vBS"=dE{ -"))[q~ϻw`LE)C? p̎a)c;trw/Lզ~jDaUH ج3kww~01(:=?9쎲#{kRzph֨FhdVh R\>~ЍdrǓT2=l=4~pzzq_uO)XS78 s(>c69?}:ͫ$Wի';`IY_=^>'m 3N&'~0MV̧ۻr4Z\]>==n贸C4Xz~(M6Г麇u磁 "E7AhSM)Fzp"q}KK*$l)өME2 Hҋb4I _˘F'szmIȄ6`&T C 0Ia~8|/~jt(1o͋W^̗oFXUxs[Aph2 @\N}FeC**?-j芪.'˳h< Z)o(QNzxv*N z͇ [Jzg= <~ߕI<|Tıy6 U! 熪b:c0G^WI hÝT}ݜ?r,g荽p}R&O~ɇ'2l[/)i,N̋C0wZŬDTv57􇘆Q(˧\nA`WVeAɋ@XA5XG8"Q ˤFqԣFs,ڋ<;*Y@raxc>ŚJ n<uYP+J~nEϲ2ήE1 pBGbUYokMOt$0݃X<7xVNaH?(ꔲCgaUeC_m*-4;,O@-v:8giEI/p= T>5gnNN%$_3D\]uTwUk4RU#0M|خ_\6) y72 z Ȓzy#_:S<:3Tnf"):Ver],+hB-U Wf pvMΜrͫd mYjórZ7Q0헯{2|wg4'lw\,^ܶA9֢ސj*x/L3t e`P6s׻(Y] ]g.gd~sG! |qBgIS֢T)WKhZ^_I#T\djM"rXz8jovە(` *(]ep(D` 937WIm[%DӋGN<\1Oxu/_|==}= M{w4pۄLswQkRɲ%A "=_&ru|H ~32=zp? R=><%Lpٛ8F.oáԂjV͘foqnq.N]~_1ֻݦYʜJVh_0BX; X圉zP֯*JmZ3[W\WIPe%gx #+JZ;=(Eh@Rխ`Rۙ+5ՠ9xER Nc{Γ=%Lu"&#aza78ZOv7t ck5H"j.m*iHxtN%ŨȱKgT,?44UE蝠chHђ`)DjZE>=IJtӶj{6QM񰺧;E09& $ǃմTR!|_b<|5MW:_"Lk*eu Q$Fcݶo_?7-kXG=J>||Zm{i}ܻiܥ<:uL :(1f&d.K5pD!mVE**IL߯|ss5pH:-nwIyf`4uFp4]_}{ 2Ux8mon#J$[kFӇvurvt*aޭpq~rI' ԕO?r~'R]q&2.W[Xp8_Mugxɲ6lebL vy2qYf`P)]?l b肤ɮѽ[W U>BSM4`89X1cNK, +m5t31 Xd?YGQ58iDh /Gur:A6옹BAr0(;_<['pO7-z# lvB|សWӉaW;@čUoW_ѐJp42GţE_h_E¥$6nu^ -f}wG+N|;Ly98U٨Eݦ s?W/QǓTO)ԦqjAUĨ"ta#.E=Ml=VR"l_AQ%~LrdžB10'zbJ8=$V/( tieZt Gkx&A,tCP*7rOuEqLl^gJU$:ׇՀjv] -IQ@|\=<$VipSw`kRt"UPl_L4&+ݯC?W?>kyFcKunx9MR L(V<鬨.no¯=~:]lOkmW_Ro=vx˲"jGq'Wb/!u =ђr1>ʻ}٣37)kG_VvW7o^.wckӥn_ENO6wp]=R[v8n_ߚT31pT4r?dD\ XU\[~?xvwo4'9~>AmU_g?svq>T~RmUihY,)r^D^N6M&aWlm-׍ܿʱ܌tJ)2*&b7.~u0?zl{9w$ݘnءgkkNYoǣϦSU{}9vssaE5ns|_ed4}|tI0ӳYyh+r+E_ӹ:g6 BmݳH_PqM՛mrOp:{oW_*Fk|{5U(}'Ou8].OS*' .aۨ-G4)Pij{AvSmGd,[:Ak"湐ѫOFEhK/Od9ī+I nw'@\ hI-oj9ܓHy6"a&E^.9flm.e+C,u\G'%ʗE1$8PLPBTatX/|[8iH*{&b~9}rZE@mN19(/W#!@Ikzzr&Q8\\yXJzUkZlۯ^JUg.- :әu1Yxw_MJJ:~YLI^훛^(JrN` ')EYUA|s|o0:)U@@Wmh'E!Uƾwj:qytE>}~JO~`Z1Xwp( +=V?eg QW+J$UrYJX70Mꚻ/Ud^gaڷ7_~=?7H'nUĂ]U.NmW_ "יΖӰޫ|{O~o aNB pZA&Y]~sKWOܭ~'O~=hQ. G &3͒Zq(qh-VqS?:9OEQy&fvR?nÜ_v͕T~Dfuj0 d!;Y]|o~Uo64xmVOӪpQռ7w~m(|zrWG<α.i=CS|7gs;tnSàAen;!-2*'m7U?G>e ^~*l8m׷˳hyޭ_^_-VFaoѻUV7uW`՗W?Go|mSGptFw>jKK;QxԚDn iM?靉JjK= O}ʣ£eNǃ$.n6MECUXmnY:p8lϗS[SW0JE-"*Ne&f_:Di?tjEft6PL,~6>$]$,-eCOw0'4 ctHtA!;tNhtpZ+zq1yݓ/wyy7?oҺR S1_<}{FgNLh.]d6p[ٿx 07ç33Ww,'_7`9`̬7e];ZO'~dt|_[pqqvIV07[&#ZDq5"ϯnWgvՍԯ/J`dg4v-߮/+o+X5֪w'F'jD(r:RKB-ڎxY˛҆P&m0ߑPN2$ʶ6̚ʰcөdC9k9Uzw^ML16Yq/ xDpi*2 d.D>XdiNh8pC0iٞؖCONjC`A6J>McժZH+OL/ ="ME~[]V[U:'^QveNd]WmoFCfGLS Vij'J$Ųx[n(gaZbrrKkQ#k^|fjW>v8_X?9֭Ӓ*77=>K\3̚qbpk(lF(x⛴Gu+|^;/'vyZMw旹)}z[-׫ȧ'p|L_o5t)We)ճ!!,:GY[ mjU:XӨ8}4geM!l6LKo_Rtx<(e%WwۧHf_'Z&*&NT|FtE՝gV+ӲTZ߭Ηc &I1&KkQaTf'}|n{=xTv"H%[gUՔM,Bl9ލḳ(hRnJv w>|&b:yΆq^a^>~tF6-{yWDZۊf(a)ջj6pT'R04JlI i<kX;cTk}S9GiƏ<:Ά`G}k1hbmPagX[Oњz{ 3j.+c2GB窤5 E*xJ^-ٔG7x} 5V3º,:_֍va~8!}h>+dx!Q~$G^ڷGag+.B ]ЫEr6*pCbv m#* _Y#S1 VNvemшyQx_'^xcǷZ#j T|j !^Mi- ̅pണa.n*#៴9$ %~n"=yE{ۊ$Z$8Eo8B_\,lZ͡Ѡc߿^Qj3&zv0Լ0y Enj}ՁgˊPK6$(RErDmWn 2Ubߍ8N׎M[j?LuWBgs\5]CgS_iPh"-AP|p 8xr. C?U0EUhf>6n!jU::U:"*VZ剳6ell$ɑ+ٗ$EG܋߈ďaRq9~_qwU@n?2>Eg2{AK1 mGXU%}@w?FmG L5> ,[Ts]6׬6NǮR̴cX_.#PGO:Ul1:?/oǁ6 F/\kk59يVG9;jQJX9--W|Lt u;"`UR9\FPS)0xQ] M=mèSbLp<#+5",( 34j4"Ʀ|iܔPyJ>҃Y`+8iⅪ=ʪţ{d@nNlO?06ph. ;g=:7`2JPW|gQLD DDY"Oh5:V$^*EfY!M ߨjvٯc3iLpӨ๏?rVE+r4ʋq B U Q0J64$lhd"4y 4ވRSG2Aqy`"F-A*N)=U[ٷNod l8gt/M3Fv쑙¸S"9r$ue QCxp95`vං!ꛊ ;Tvs"CiPABz5ԹQ|i 72袥3cOTv55uԣHsZtQ:`GyJh"3̪4Κ{5Vt|JG/|IT:nħP_oPGt{lUP|P_MeB>yؙF=$:pEMN9iS!Ǣ/]T)2 f*ߦu$QD|Fq[So2R* rxG (r$$5+ G'"B"@f1!&z)OW9 euUۇtj@5yH]aH/°@7 dru =0 x!2 @)ygRsH&2Tq[ГC*4 6="2vm;w&'eU1IߜM_cIkWtطK"f鳣,Ɩ -nCGfs}qo۱rD6A|R*-JKًldR=;~ᒍ8#L A8юGV=3qx\cɤZD˅4]4^`Q6^q$J\sǢ]krR̽iUd41B|{Go{v2!,m\JJqEd;2w:t]|[tO Vuo{]20`qE CUVa|WH$Fh -уߋ&Πo'aӷ~[Q4  G̬i]J$}tӖmWqblmhҀjE eDC840+~z'&I = ES+v2T+AD11pY;`MM k0qyJ[c v׈.!}t\Tp,; Dc?}l5pUnUy2d{5X)YBRTgvj@۹wQiz"'.">xDA8kkwC#Ů_6`WN[7,8O"M?B qjxgVE21~\N 4i)yN Nc슘bJ?hccgOՏ{G2rWl0Tcţm 52xsb"r9O|xXIj489*#ڑ r@ ` @eՐ{PtǓ!9hVʗ] cjT0eMe#oV1mWk/{z6[vX:{r)VUvՔ<˾-?/+=hbٸc`IObxG BUAnEyJۻC6ϴxI]/GۜqcHch#/N(S5K}UKd"˞ F}fCxN# a-^q4RS="ԏJߠpudHL JN^̺&v񮙣P9uȲY2jk1O$hpEfD%qGmќvv6# 6Qtƶp)V+ѭz}+\UPoDct2`h!mi: i!E{ 0'&t>o  or$Ήڽlt\<戓ՁꪆyN,먒8+:7/J\Ȩ[y>NJ>(N5||±_ut+@ˉ:ֈh# g_kɭOkOʭ|=:<B@ A߭=6hv&n0XJ =AG`׮FKю܍ Kf71!k+o/yʬ^LL98p4/$K&L7/@'"|q ,*apVML&^ȩ4b8z-Mʨ!4Dye/4Dxtx~dg_EP^EmdwZI;,pԈj;ӷ-@񋡆T-s, s|w<3\$b.,sYW܊lҊ,_MJGl TLj*]QrQJt\鋐@C0--ʤK&Y@h1e6I#fD\>Oz?mdߖ(O:Yp^ga8|jOwҋZ%ty߼13ZbM)H.xo|wU6vј1P#=Zj϶ݸD쨕@O_,G/o~dxb:Ӂy\(Źx+h1E'(:9g\E yK5٢ܹ}SP DTx3}=k@q\Mrǽ"k{/nN NWE!ڢmomQKk6E7ő8N!tiqߖ5^%ݪuQ6V[L+N$Asl,@cv " K3X3@F^ F@\'@qFes3at_}J%&*eqoETӑGT-g U>p)DXy}W@q&3,7"f>E+mxO 6n+N˾~t Gӹ.iIxLQU}t8z]\cho0toBd4eq]y " L|Y k)8a(9r"*sKxn iO&H4@HXyP7>U>!\B ajֽ ;Z(q;tϞLg m .G7(DFQ=F[w1# r=^r4M) M⮯>XI2#Ȇ1 Ka#]-ZsNDYih TbzՁrfYHBabᴲaJA?y\QeŒВRƇP$v|f$ Br1 > h^Hldwo|hUҘ,`Y;V>K}OeZbik|޵@fhN@4iMV8) ^ooYNf2O(cEܒhX* 澘$2㕸y".lt O[1r`lAU) E~Lw/;[aOytgyO &zic@R] c2W0@Nl?@pΟ+Jԅk^׳+O~mj|b~r/5HD_ǎ}k%9;li, '^߯=]ʗ;UQ0 t9W aoajii1f=WݱbTT@@_DU0^0.=2O7MbX ,G^Y-$5Ʌ=3u5n~g@,GzdvhcuZ߆֬ /AE`<0b p7'xi'_[6^^41?g)4eP`= '0ybtw;sE TB  SXk3@M@R p%;TD7i!Ŏx(p[2˛( +G<eZS2AuM*ŋxh!wQKSlVsy {#</V @uRiTʑER!x0 V^w^u^i&͈m/Z,Z.c#2C ecƩ^pˏ'ZT*L8b@5 m[tba8z{aYoyk/Ƴed\_CxX9!'E7$ok0ۑ<r]fO}Y a/4a90ęf*lauG l?wxDX4jc'J}EZ%E*Z8*F,xzV3V-wMF+%K4AWt,1cÞb:˓esGCÝbDY ڹUNAYF&arNm07`GZ&c|G-7ϗ.ݨ%01ӃުUjZ{(s_U P : :s&[%%/f9;Rę8'9bɋSP ԭ?pè  jB!񉑊ߵv8b2X};]-ƢtW zIE(6^M槺̜CsUKJy>>hJyF4ɋ>8(뒩8 Ʒ! 15 (" Ƹ%y<&@DevMNnB| HS ol[cREZX5O.#BEc/$O!xxo(ޚN宿D@ud\# =nʥ[r; fԫHlf[DpYHy+ }HTˋ/<,~"%r̩d/NUGCDrG|r50-+`?[+3:"{5Xd~ ۚEdֆ< AD/sl+QۡzGb$£k i4VKw?F5T|ȏtWoaJޟ*E>i(Y*ʧ dC + DJLҩ_]^$_`a$R# |Uf2D}jUhO~wgiJ prʳk,'%L+n\j4%ScS݄' d\FZ T?Vכa a"ij(Wi!>KD Lf?`<6?+%KzNSvkTX{K_٨yAN@1=@fxkVd@qP+IМ^tsq0OAF؋tA]Bo[7`kc [bK) ,Y+8glܧo@"@Qh` N&;fC攴U6ܡpO]+rh})Dvܬm>m֍Pv)}V@3m;nGNF4>ti{’Y~l"k +xghS2}$Th[|7&qfn5M$U5|,11H?/HSOMesWAO S{䠈Y-Cd LfHNXlIkz;H뵪^/D*Ȉ& [q\,;ĭ9 G>qVmo%MC?9]:? &;d>׍UbDC=߰ң+!ك:Im#p*XYYIN' 0J m=UQr̝falnl|n"Qd攙8o'DPDj㋢Y =Q(P\Զ0Ab$E3Ey(tMʈ\J0g&$u$rL{e$GE-3 8hHw'5yn`Haݲfolۢ|TOMTY_dcFФGx{`܎R1rY7R@$>qwȻ&GiR#i=V?AI(~jl1`wxwR% JuFrDmdP,*T#[ʚo7"y]r W뒜}0,e #@>4${ܮ⃂TTUA&kz]ь ԁ0N.\!|blyqmF,}Kf$CÈTIѼHJx:;_2svMY mI"8jď}aYaj# D_/fRJn&ʙ^ߥ  K&4xuEV4Bԥí}g9G-h| ޘ G޼(hIQH9m.%)Z+*hG4_  x]|򕞱nS-uq9F|v3MER.A$KX)%@Z!q!ƍCQeQ]sJ~ڿ f#LWu2`LIk쏸L0lL75Æ\XX%"+6\u+j/0j<ʮ }~ߤ&Q:LC%ljj1e@d+whm;tP"a!Jz V yF :y2 [<`nBم꒘S jTGTK\߽1j…D>V߱)ovQ:,TѶ}S9ܢuj9Ƨ >響8lO6RNMfΜp TTNjK;YG+-vpD sKm Æ*{Aae@a?Iߌ`ZA/2"E*xIla\}_SoMaJBUaIMB+~JP)aHRŝѱqT{Aha٠.J5S7**ACGC<$M Q*%>JIbIe""[H T8KlQ*A qh潥"]g{zN _%fs#X.z{=(  2¢#TAhbbY20Uϙ}_Nym t*ro&IX%2O4nikIrQV%_3fxD+i?_+ h|3))\c?c]Kv u߲V-+E) 4p.AnP#eOsue%p/C(h!7$zG„PpKx[?0İ3mÝ_-nTh!mRT} YQLO%\gIP(ٔB>ܴrͽ"/uy3{w䔒kyԢl;bȄӫ/!7?ԣ,;";z,R*ha7B _]!D#"r6[Eπh1! 6@ίRzqlj`#$ZbNAc%ej;L}:JQ+P5.@*ދec.~) 3"!=eT]cfO-C_Z%8 lxKqKϩ6ť*wy8p"B1Vr8DSR!7T(ʮqRq%?vZ$ʅဲ1DKj:NhQ4 }wEA_R'Ha2¶:pn N|$hoXxQd#ICá UZ8Sc2$>Q0_Ǣr HayZ`F}/J4F*92S/`#bJh*w@5:.Uf;!\? 2+J4lc0l*.IT-MtP69UL\Ѫ x T35Xt--5͉D"vWa K^-(EXL9,N +mx&zh;f$~Ym$].)|nFτ,Ƣޤ7\Ȼ;1.x,pIuZGW ^9] P5)ො,1 By7CRh7P ilן KH}_N$29ZTgB:_ٚe9Ȥ-u.4 m54 \'-a@[/?}sz@o_N|}קǍQQ2i." <<}Bqj̴qÅ_? #y(V_N+қS~ߣFr!䤞%Z&o ۟%,o(D)-Js \.jnW S4Vwv?N2?=' PYus)X -TÒZ5 ΁Dm+jeҢ[~Wƫ]#joܗӉS>\˶ "vɀ;]=,p38`MBkb .'Ney`KQPL4pAWXȖlUx7`r`ȉ\rT":rK4г9>Xil >ME]-޸ýȺP2$4t>jT@ k.vM2Ua HM_+&( XgMP{շ҃g籵=-ˇn]6[p3KuG[QSc*2aMTcLk ˓EL/r|t4/'8K&9gKd_]zBit ]2Nv ;W4ʗq&(8K aq=oE`xKO=*7aco4fhC%2Me Į s?x" ӊpM~uF j'2wVi V&U]%ю_(84BC >HuQv7%qDEWXMכiImA`W.rj<ӒLQ'[a׺JakQrA?Wlu2-)xUC9N 3Jʣ ꃎ) -?ӦHOcJ?_hᖮ`u5oíE9& Ѭܥa9stͳu4]n|:/ a8(h0WU" &d ۭUE-9%e]x>=AopwMV%AD(ޅf2MY)(Ipb&jWb_ʍ9f2!@l%ҼNdZ7UT%Ҝ25VfˢPI$y,U:MuOm m/l@[wuL"9Lʯ e&Ë!y^ɨQ0d"h&?jȎ+LEXLŸ4`XXF P*"ݕ2cqՒS enL~`~ITv6g>w/`([ٕ%҃!q44ǹd'biS"m¾Gp^[ݾl({/F5zR uj)fgv6G,,ƵSeQePjP8/D$8atGھ&3 oiJO4uZ ƊI)8qujSUB68f6 0UAEF:Et=5cșx%0 $lHԍMԻ #bͤA^UѵEBōFvx ,">6ZMK/SC$z* QC]תnjzf0qM;oaVH*{Y\̂ЇEޒk%Rk{4>R$N0THjO&^Y%`1;7'ֆ˽Fxϋ)uG"(UU#Wy 8l<H RۃlZYeZFQ友L|L{ݮ,aMȉ%;2YYxFx$t[әU~| NPwG27$R|&:SUi^2M>tT罥֎XZj~5 `,stv&W"Ha\a-€ٟ3s\W`U]bq*%#DYU`e{U%48ƽ&5ijwD+\-MYLU+nͩ:+jFCFciʨE5iFN4WgZ[ilYgMYbX'WK4%˦ NX*SSq;r}DI#D,h ]FM+ǔ*Y n @ޔ@Ae݊/b4u[0*OIz2%'eGUИP5hZș2*\ @yhqx+Cr1J6fY-hϰ;rL>3ۗ~HE K[mw7) L%Fn3tkvÙLJM{qVL/5:VI O-ƚoTfv v}%#PL|9Ⱦ.i(0aͲp ZW_\:R4$GwF!5>N8uW6,VRC<]]V+Ypmo:ď<&KD2Vk/dgpe;@Tu_UHZ_ o$B^؅nPkhAhSb(bF $|R3գ%3dXⅳ?nRD V q_sZRj"`ӷGK@D's+k{-" ]R T *a JJ*WF (g9^٤)08EӲ=1M aH^Mi0!` q8L}΋{ҵʢZ N?= j#EMtmO܁"UI*6Wx5PQR`P$xaȃU.ZxM|)FN@f'ӒԪkT԰ǢZb<ӣ]{iI @SOf2WYCu]Z׬9!5>Z6RbSɕB ڻ/V2JG߅*-t  `Qb{=0~REH XVB`DlAV{B֘bf8 ?` 8;u.^VY,2z˕[y?STICqYUzq{V+H )^6`Ѱs2y;Ot|^hfoHԨ]]bt$ xy fM Ж|l{"(V77k]^'WvK @ l{k[:#FS( Mˠ|/zC;'Bye]1f%UL3EvWWE&?OhN--K,ꅠ qKcхB"V?c~Nˬ֮X(M3؜l@whH'nBirwu,P).;VE <|kзޫB7rA<\u\L-͕}^kSzy\X '$x1 IN/R|}rTD #5 Pjch䰧a5p𘞓:HJ9qT6.E/&MImbv lhD+Q^4:煢"jRyw6׺Ak^%"Xdy nV/C~-ŖHY*βK3k @h,(%;T}\lPYIw'@^JEۚ?D}}NxׅG(Δn5RϚ=DGs@Lﲼ$JZ6vF2cvlA%_-bri>2e-/'lG}59"<}QJ+4ճt`_K+e 0;^enyF1>1\Vqt+$nBeVBMHlA4'Xe}3t^R>'nQ6#տ|d8X|ѻ4#<*3tJ:z5AOg;ͰAG(P`cZWd:Hk;' *=]ū!g[{)`(}J b23unkr"\.xR #M?b%+&?~K|͎[&kg9)~ϋm] g X17QL"%/Ntu Ppe'vzxMbdP eaUV>'"U<6񼚪l^$VS CEfn9;2b.\ŏ1!="SEkIj|x{$^(`M\6E53P_=%M9 Eо\%H`N¸&5=.ͼRYE+|_t)`{!\/4MG":PLʨ%}KҬi?6gu8f{;+D#u>ыƙF**vCIAͱQ! WXV{M-ɽo 5sct1ʒڗZ5+I2҄P-u-ԭmmMS-3YF,mny9IOirK4ZX0zv,Z&!L_̀,HX; Tī~==/UFG=']Kz## <Ԥ_QցZ{ + +Aߞ+?xC&Yҵz/ vWh`ӾYW} xL"G rF('. K\ \h#hodJiߗ)v[IdF/ fކ{FI+ddJ"GS!pTic`n[Z+ٮR5{qRoZg|ęرcT&RGj"N*-^4=GbrA.?cD4Iǃ"0+ęrQڡ[3ҴJ9Sx8"V L)=lXN_dUTs5饦DŖaG k74MռpgjVr02wn 5q~mqx(i$*L⥧I,fqPڐ GS W $H*5"wZ8"F J?g/@Ȧ;)5Q~4qu&&B#c(D" 3,) NDjDrwlE%(L|rJQOns\@^,nTlֹ5Sl2*d  gxw!P<$L\rR燑8VA%!y1qNF YT&7pI!5RQ.uH4f7݀$ t(o,0%nLJ0w@L3bqk0=,2ì $0q:Y"$Th@. ,X.^}̕oDܼy׋^ʘ*Kڿm ?xMZR߶'8i;nXeD50QY_^M# '>kǗ- *iRtSKA.A-+`8]Át& eQxp r$N]Q*xR}nNׯPuGinŋL S$gU q:)=G)qԃ\0J*PKn]%-7ص^8*Y`FPYM`Mt#! ;bшnVB/+Ɓ l5, ZVUjB NEk|&KKLIJb"jGz$X{&aUɉakL*\lfnڙxFGGGf#RP?&$SIF=:V6Zf; .z,Kv>$ȶJ.GG% ,4wW˔j6s\s*wrwnE;[ͫE[p@\NY<϶eG7 |1Lp^l@{|l^[62Ep|%y|b9f wrǒɜ[R]: H~ֹ\,7?{*YV2U1/#@T-: ZEtPFSywIE"4LB }8(̣;]Rt{qkkѱplFC>'sK&EU:dX}To=U:]`ʇ}Y1o3S0VK ۜؽ$FdU+FCH-Ԋ] E|9o,]ҕv.򶖖hNu4}MTG.j%3MW1VOgrnUmm֠4Iա (: IUqM$},n/oL0Q z4SӝU=IK]ugI΅gbc7{NsIҿTaPX']e,!PCOGSG=ө׺!+C&19xaM km?'4~-)ʓ 2]p~U82BIiŏݿ ( zd$D@ Ml$""lGDdlRϜ.Σw921 ԶŢר:JJKuF! D7Zg]Ai>*߻TA6~mh hӬiCy@eu+DʞAƠ!=f֑m-eg7Z1DeC4LFjd wZ,o)NŝTdw/FBPqowahn{Y#oo'}aHs"ȕ|S Aε3&ћo8Kзb"E)Yc`)n1}Kd .}n F*Q!fK, ;4b.iP'鴖U-b ^S}N.gc/}Lr|Q4HHcMM9'&`)dҌ9T#3*- -dt4]rFd-*OuKR#K6lFA*mUڈדbu MiCǠ u,$Lz]CdY[lo "(W ~ݻ5D65+zNqTCtP <#7P q*ۻD 槽E<)A?>ZL7GFW55cp/ȁ#w!ǝSOkJ Tz"zB ΁8&}e$ ό}}:MJ<6p_aTpUDA]F?_v?E3`diA,i9e4X0]nD&aoWКy],e/t,{?tzuPX݅щ. 65w'/uNa:C&<9 w}G-E1'iY)-̔ Unv47x<ȴuHg,^WCc`dFRhȞWRȣXoj>tۅvb;'esh2Bydz*%9*fݖc'>҅QCT TɃ9(TEVVCX%Bꢢkh z?je % sžcc%&R]WR3P<< Cr$)It$છhGG_]nHm}?jnuXEE? ؚ/F~Vwn@Ai|qg| X9ҼȒݳ8q5U#!A$TZ8ZB\h2U FJ+F(q $@CdSdx. K#5WUqNNy*OkHnVɛ:ʒ{QU 1T̖St,yk2\ jV&R@.W*]zT<dMVM[`ԷPJȫ|+#ʪ}{vYեӢSk+V>_)]Pmr0G)M?lUq35.L0mt|>kʐrJYGQk 3Jaೢ$`^ԕ_oǍM* Ґ&2I -l1afDl[>lyc$Rx^znyM[s\e&w%\J{7eӰN^Ǽ6$[ IN{wj͖$)jsn}el{]F5' "b$Ogk)is/c3gU?Mh7|۴1ܥ4]r"/cz vϥ?:ħԅ۽)w4Fw`} GCTֳBzG]:6PρK<] Omq<Ȏ4-ܫ培\=`_ޢ`"quOϾ4ݞ[7?TkeL"A NZ$R|A}8' )h5KL5WLɌTwak4M '>d$mdMfӓEMڌ}y>"4GԻjfYuwwxp Iq<6A"XQ`cg{Uωu]đg}{osX^{{~~`}yLCPwu|Q)r:Y4 =|IR[J+ w]nЇ3pJ-Lj)LlW| D|' ¡\DZqoRhLY<%dnsFYtQo RR}N}֫13M Δ[-|„C \W1M(^ EÂcrۓ2uvdi%su/XsWרP*[ڷqRi{ */p%Б|X9~]|_1!-)@Qͬg74ܠ8誰99D!s,BfvwM=9}&W5m.ʤFCޒHB2e2ًh~Rҩ#j)ߜ^M+0EnI ]n1̿ԟ+u^3gT;MUJT0,y?x׽DSbEuN0(9zJ*Զ*IvFY%m֚gSn:8W=4Pj$:;NH~vW0B(AIT)ˣЙ}Ttt9y_pb+oQQ&u%e'qf= #ޖ@׷pUƬ|`,ٞJߝ/]Ri6kśt9ܬf< sC$sfڠ,%# O;l/Ÿ?wgP~t$ XfF9/f[Ԛ)E3. ~UaZi3l1Yȍo458olܢW-%s/f'&͹e 5538AiR@`vdhNj u-PUgG7J?:T署F1cnH3킶qrČcdQHR9[2[a%6]TKGV< ckILεx#M Oz* v*+V-DM8a$[ AhQΪEh^М\<|vl0׌nS硨} H{ذ8nz ҟ޺ rpRط||Ԧlyb~( M{B^RbZbCR F_`cBs'?CtL$TUu09lPs},G: 8!,4hJ '!_ k !'i`ۃL7f;BLCFFL4bfi}N5Ha;eZ:6M)QJ=;$U$0qIγn7$lۮmO醇Dj<m)X0ѽf.lOJ& e=y\$T/'Ʌ#{S=g~7?'=̞b B I׋4)/|9{ծ )\2HVUջ'XqX2+UfbU`(ؓn,bn<:=d tJ5 v|U@<c4uwn$3kJ,i۱ &~S&XL6#%@I4w=4K׬ SaN⩪o-Z|g(*;˦6 Q\F)ĔM>khU|p43l2_22J{ =tSFOp,?#;r|XBSqϹE"iGH0JO#zfxyOdw((,}C ؙ+=٪[5LЮAy^y{ m\Iw'$L2#"TRw˦ gp>bpBP~6 *9=zb^Yzw8J\K8~2[Kޠ ~Tʅ$LF-^0}I&8Аjw#AQ»$Xpp,g~KF^p};}8$m冨)r\}x˧QiBvy8Hq\IP˺C 'YݛiДTՕDf ШY]# TBgg0g"d`adU]';݄Zm2 #ZՇ]{ H<͊3|||-7.#wKMjf%/]dNS!.*=9ڂ@AR 2.ڔǘSZHއ P ez?Д"M#!VH& S<H2ϼXҜi¶n; 0nbyr<B>lֽJ iY|Pc;LC~֬~X3R$44\^L ]^▝t>RfO2H;s1᫢rR]7(W tG =%aK//Y}r,`ɂW$剄!QzH7FY@?5 ye /'կT*%_庵S8Cկ'yDxP}/?ZMz:p>j\)8Lw5VYP㾨7U[MGƼl=4!3Ȍ?̼(+Fx7%50nGKLXESiٰlah-Q69Nfnx[lMXEL?8>@ܒ]r3o*zݽqoGaA8p&|C9X4οXl 3&F35<`w@ꨜo=æޞ=Z-"~fD6/,3h"R`RGD% ɖA ҎH2$I^q=#{ʮW%Rf~N֤(Ɩ$Ma6~{y{ҊN:" Xm4)s*l(u$ d}nVV8{1I)YS& }3*o( Q0) b%1p1^8&'b jcNĤ91o2 .Zr/oX0Ge'}wDŽveM-҉jѮ%#ICc3?ѿ@]'5u6:=O ]}~)~61ջ(sc~O6*jbΏoƦkmJ Nhd IF3wNn-~hqS*k:g͙Epuڰ(22SOteɾ Y;iCkVónD >k7@Q/D 2\#~&^Gq}.I-|ͼetGi$u<8꼓x}<9@}sOs+jïrk 2q1Jss%BZ}=$}$pG(7Vq9.%ԳꪩnűgLUבnCYkNbRR$I pM[d?ѓx^VY3mLLUØp)~`Z F^?؜eisHS"/z_)XcR2$jO^:^Im6T6PXE % Ò|9^ֿwf8h3YYM,V#WS`+f/W\gy oEiܜW2LMr8·k9ca2ߜoì4V?gJ~+g3bg8 Ję:GZX^OI XzGb>"WfzyLT=&3ϵSV[5~:37ꢭ 8/U#NݤTĩKbo) NӐ{^J)myOx9<*>Цola2eba3՟6P;UTs޵y|@-?7U^ ػog^#y#'ul(K&$\,sѥ GP/ť--} X5 ӔUvJ3S[K&=U~QQ"ŭk~Jc NѿUx!uRjRy̋ROimqFgkJ 9 Z,ץ=#:Ngܳ OHn.#ߠ u5)%v- D'=EnB$\ņjIC朐xRm9먮)1YVJZi ]Z8g2$Ɂ 9ߤ,8ќz5mp˿{ᄥv(*SBcч?w>L\HŝӐU(o:GuRM _Rrq CJ(vG3ahRSs1%<[SI(~l#aw3MbexD}]3A܏A볜\ի -CLFP#7J՝9 &:N>*(Ǩ&AQ[:N_Xa ?vX=,@&/K`m<-2Duߒc$ex.iIBĹ$!X/#I(Iޅ&(O!DJS3ɮgRUU*)#c?<tJYN4.v[#X܃+K:nf 8;D9r`ǩ1M-dNnyPz K(%a=hdq,M9κS&˔cJT-ѐ1f_zA|in;2e#JT| K,N~Ɗ% Dm#$NS/tֵ6ݒ<|0!h#u!IO %WIct,\ӼC?t;c8ӫ*uz{7ifM/Dz$_bx7l7ٿCU_"cQfEFV;%%CIxtT3/v`8FYIP>dY?2!Wi>]4Փɓ'2sK, ^ab1['Y)Pyk3g>L q!b aҗlkف$iR37|cU mq36_Pa!ugKaȚeKҥ E 0H!.и`fƣ+1dme$'|Y5K-g='ӟG5p%-+LL[7h "x9\-bq,mes;MjE%KIl UsE!Cq0N ډvɖ9~qA+el&2QMO5oΊC_oHIFzX\rӑ3Flyf[qzƦW:%/hŔOy:o~"*!59\ŷ~7,-$-̮{)1,;=^{< qpdp7:Q71݁7|a+TeMߦA?͸ҤA9fޖsAtipx0h._pg՟+hLUo`CpT(u|qP1 m$|ə|1iI+԰xBVcT8)YrYe.x.s|65[\sP:@hhK8ֽ,bz_v;^$4@0ag'rNTʌ 6aiI-xfbrϙ}vd,#iP/-9g.{KN^H;"bhQ^pnHhS"HG_` %C KĠ~νi:QAdٳ GwjenxׂT[&e8\B`\Ө>'=aTB`!Or=t@f #UァxBNչ;;:r9ub<@P4Ș=5T%=` HW;YsSeT>jUgrwIN+#zZFt<,2b6q+^rl9q۷bXt~UE0`ْ9Xt8rFhȬ% N] :n˜f.sa.qԮ9WX^d1U~ke7t-}IyO/o~(<魾?'7MVbEtӔlΓ֛c8,b] e7}M:Sə1Sx~[H&s!s0q&W),R'\k\(6c5e}[2#2"dmw9&9'uB,Q)(Mj9GVС5ӱxYvW4RJy4~[lioUxd.Nԫ(˴r&VQxGwoqΙ*4jb+ RBP ܌yQ)aKB3[ODUJFɤ.H2hd&WEM)îu~ciFc+aR謊̏<ӄ)؟(Azk^ sl8P|3کrs7,{g(DghtIcͣ?q ~x,gWS"]*|M{;t͡nJHӔ )ATRŜf k>uzo,Y5B7$጗-krs3nbL%CٓoL\?8-G%>藙^-uygѱFAE~ޔ~nIs^=}IZLZR kHEA?_9(+ l9yt9/W%Z ӿ+k ӖS-)+ L퀒FpvKY=逥c Ub #HTQsε4ulx 8 8 _qid Oρ)gVS(IRΧ;_- Ro9\;Sd c:%ptf@ˎ/;0]hM:5bv,(P2-0G@C!Ց]92:ADudɿIw"+MZ˺UF 5ğS 9X~mop#Usn  Ғ%!9)6\LVP7twt|^t?6$< %(h`ҚR;i+eKKƍGfI{{etf~QT;[DG~.gJ-2,kɊua= 3Mu}@|vsKy,d>~X/<f<6wDLZ? zDT "gB|ZmiDΉ bSy+Ȕ 3dғB8x=/xffrr9HmE ;R_ D5QT#}, flPvBPvI U6g._ Nh{EBxK2]w)6`%uxJV,qT O l:ސJ=կ7dZf2o2 D_= ثOOxH'I[9F}L+'ʨL7rpg>w=]:mm-yZ;/݀?0j la1P710T٤ӲdJX5H!c<)ѣ$TpMʠg{f`>P$irCjw$dU5iΈF ;y;N΅zq+BcK?JRD` MH94/L 9NzrJx2SMuN qrFBGUKcj{j՞GL#O>0@Km="q{R8Lub%5U#eU1#`ӫi-G5b=޳q䙞2r zJ2U'>|LK)oF;~ɛ#88y ~cɸX Νy뾡]d ǝotͳYIaZZ@0_Nv(90T#MDȒBKbȢd¡hb9(;.ck~ud_ Ds)MIv3j3[2mҠzdؤS$Pd< r*:6ݹ$A$)*O)IƖ;i[Y .h#SzAG6rTHLK\`.m\_ ڭ) بxqi?.!?qbnTlɟI;eGKCZ.eڜP& ӑԙ75[?FXՊIf[}0]gTj=5=mؾs{Ң]N$e4fh=WI1tϱ.T(7=Nn?C&!fEI,QDuNӵcncOg05W6Ȓ7"Io85#R`ϣcn ,m ,gMO`pe9z#:IR0 Rz@)?%2aE?F2vcDye}j۳3RWf \kS QrƔP֌# )맫S 4M1Ju"s%dEMQ} f}/;4tvK'ȑ|K^`0]^5 ,s߬mlxqBI#s6Y;QzM!4-wU*p SzE!b"{ \f4R1<' Ar&>*<2eEc!'dAj&UZ!*>#]I€.[嚄kJH|LF蔷mQb7|[)˱q߸[. \9H F}}D:ujv V[i4РP1j-?S񑌰ȫ61QVWVEs.`#H_6}Ml5-fPy `a kj8@w*'G~1G` =ﭱt@'aM[ySk* co'QMaHwA/gMW|R7M4>?6;EGE$߄ۂ8 l4r7u\=Uԙ`4WϘogҟ+ y:B^d/il9 +VUQU4ܲ}<:ei6B \sHypC!g.x]ArUhe&jϡ8(zU$k/Ȗ<_[hZ&Y4= j9 MFts^3`؜'yEp4F.n%=.@Kp< 2 x<cJX.ث%ECqoЬHj M$P4x#~RԭZTH%i+u/I_+SEtb]c\AiZ<Ƶ$tSHH`D"ɢ"nXv0H{NMo}& JY4X~qҿEwx/M`]u 1 =^A軮pq<‡WBe藵QO5uB_PVmiaq0_Nu(גfJ7Tfv}woQ@ό\uHk̬zQP94XKD *XWD =b)JtYf `/ kc ܇ çٴ۪EQ+I2)թU 8Ԭ࢐P}\m ޏeː" E)'hy؈`0rQWS# G םXXI'viJ$ԭKi4LWV#n =ޓU Yr< ?\\ң9hb<{Y黔Q]HM>ěO&0+;rbabJS7Ft6A\\;Z]=]誎3uTBCc>BdL:2?~p鶦Z=Bh@L쾼Ҹ [ZVykáM9)*&2UadkQJP<2eG7-RQ6#J'DGJ\ԙXSJ'},?4pTTsC$lޜSbܟͧ4N/ oPYV0ÒX'Q-_n 9hJZ{KtŹׇ:`"i eG%@]M9Zi% 88S-%m2IL9@! rϔIyR$Sܕ+a%OO9-Jo&7^[P*qCJP^_n; k2_c;Yom˞c黝UW C昛)A6n|#ޔ&xAr3p$B+I@XPج C8QK-o'RqԼ F~$b 1' l-k$pʹaA931)M8c_HwG 6]baHF]-(@E3!Y%~3g{(#o+d@c\ bߏ >ą\X<*L{-B1eֈq2ˇt_c߯fE7p#5!$U_Jt˱{48(6+ay@nYiJ6ek~FIރ!G#q0T̓Tm ]5}^-.4a&+NGHR0$@F޺/F_] KmסLU\=b 8[兌vdNQdOldYv}aROB\!蜃]CI)kiH1PfIŘw}\QE*>{ו6CDf,/8bEu>ÐņQJ_K`2:r8+42))Cy|&U)H{G Tz)y,ֳ9I__n4ףJl- ؇~en]jKec7SIDu pǡq ׼tأ6B=RF?Ժ>3mEC3fC% RbTU̧4^Dl YTWq-Ũ7d@ԵTK^fe(1$,qu 4G$BjҟVus: 'iQfLÑޤ[wiw3@[1>[M}[tu:↠\YcMaZL?v˩MZVF81?iEG,lƠM-mݲ}[gZt] \4GV98粟K M\.j(׽;/ APoU,tiy7j0,VU蹄C+H >𯍃;o}7izү :?/Y&n83B.G+c "v.a5*ɯ\pV,NTCo8Hng,8:9w|fh_MIowɁ%]+EW wF͵m-8"W#Oi &qaӼKWb-QC҄VڛqW*D&&IVc7%dL|-kMXl0JYMYK]ȃbK}8Ų?i5m1?b_=K*>zb?L$Zޙ3B MDѰ}ʒ"ކ5 kn{!5ŕs,*'ZQ]w⅚kc>4ql͉aR!1DNbPfr@R 2*oP(/ݍj/u˘ݭ{qt}w\p 4R^Lhi ]1tG2&~ѿ/ܮ*PI][OE(W05Ǫ[:\'s3"FO3 If?c7wE0諚6-KIIS%%Vk_lI@y2ҠN枼Y lLF:6W#DDŽZ e^ pm2gjz$خ5Zik,!"q3*(rJ◉" NQYũ7#rS?2zohgxTItEs=E,:ʺ".MΏm`jhW?GIgj%,w Aqԕx5.y 5C;*T;ׇ'f^D"HPQB7Ӯ]+тqmn4_4PP_ jmYtE›`^N9#AأSpkqG6= kδE,lXnhhCD8ʠE>R2^Uv^.)$~ F8}\Q2ۈ{2J)UNרuWh_YHod[OD<]*ą꼇iVWE"*;e'aӓqA=Wmb梎Kf&bp^8(8Ȫ35cF%q'pKtmlLk(MuQ[)M2TGRr`gx9v7SQrdqqfήU)&7)fi9x P?@po7 SΊ"ss JgRų۸o(:WuFD;7ِ@&{ڣ$.H,xv%pe%dђTXe;&!,8/3tc#e5~`x$%&Cɗhf9[t8GvX(cQMz,zO n eNoqiU g@JLJ 6TMgoikNehkTeǮ6H> |ZtDoaC we\,Uf+[umƍ3څBitSƄyKKdӮ܂yoΕ>)qgoXN r{TgFu)\de٥k7f Hl=MCX1db aآ֬M'bjPs/~XH 4jl^d/+Բ{%jlr<&VHݠ / ZBY3{P #dp5y|Ȃgor)1f0ڡ95)jm<ӹ0V@EԨ9צk ?)0P\JRSB:cq q$]Ę8Ӧ~z쭳k­rM>g)1d,29aQ@]6$`tzcr5-z}&JjthQ,d6aw`\oY[Fscbon{ю߸'bosJS(Љ쩻zc j{s"v¬[ܱsENMBIw_Y*ɒ`[>~7'm?MSlz{S՟ߢ"0|, 5kHX8zzkoq/r"'(nz2%㸹+Jh-gZep*EhOsQ/Sr"+-]ċqB;Y35%ΜmI}?^b: .*;(ڦ@r ţlf;4JjO>0񪺉zM\VW*i9e3}5ŧZP۩5xR&Oj̤ҟ Ӊ#6LqcwǍ8h-< \jFrj)`5 b}[kwf9sK>(d;ZTO4XيڻJBjMMKK^}s ւYu/42!l廫C;w pqmm<>oH+ʛfb~5o&Gē#xOp<1^vF}+UlOˬ_Y,rH0.z|nvhm^\v:^^ʜ2/Iq[҉:3X<Z VVZo&Y^٤XH"(`V?JTILhV ȶLtG{x* ]St<>E#&\-Lr?9; .3Ʃ -fϭ(%ᄯ~v;#aNĕpꤻ[1@ Uu+&nfvf_1"g\ʖ0ncJO4 Czm&s))ZLfyN_ijChm5_fXh̑;OKe,X=aB^i=-_GB ^ k?z(}h|m'H WIb K $"6R׳q§ih -{җK3d戯uB̼{O\#J?Ħ؊̟BmD,D+ \ zIZ% 6- &F- bDC|f nmR;]Lk71{!:mM$a]WP6YNQ_d:PdIq9κחRфۼdHoκKQ!XNd_k݀\?5ܛ ƻVo!TdCˢkkEnYնE?Vc$Wii;oK{ɼD:lȺzZTiha F]Ppp1 80aZ)Մ1q4 zP q a )Za1 vx$cu_u׮Kti,jE-^ Xkxn?p<Fw7> H:hOqL\j.BjHߺ#4hw_?2&A <3@)/RKs4"Ъ([BX˒.=ziP4nOżx]G=_]n5gCo I2,MR٧I¾d ի&m|Lv"6<MH\1-yۑ+pzW@s Ch99V{m%1H*]7В%<Ӕߪۼ&V;u a+إeqE*]Mћ⮋= 3;0aH6GqGXrhOr_VrxOj}e7X7CYj1(?No?R!;P =TخR4K:qlq>5뫕o-*cda,ƪƾz/'GG,`G͌[lÃj).DPλT͈Q/wrW;*FXsǢF +ҷ&VOVBi $8GqT*&Vt\ XqU64ekܷCjr9PnTC<ѳǸ[85TciA+Z<QZvѤ$:77oW]f0-Ewc"~Z[+>'u֒5ƹrB2A:W5/r)tA&)ːB>3q2{%5ykkOP Su,ؗ3we()E͌L?Lu|⊚}'à .VX֜kN5#5JIr/.ʡؑI6&d8'tZ+#X#7ݛPrB}3Ӎ׽ö&^K+g>pz89?ӅՂ42IƉKe|72:*EB,ajy q]CW )o`O0M[}Kyl@7ͷi*qg5 WmuԏU)٭11 k{-|4`뵽ߗrX+]je`] x8j* X0Յ%8ZnkHqA2J]2QzU>!uEFC,:nAM8fx`ǖIZ{Mb+ "d:$޽ڌr)5HC&EOHr\Ԍv1K'@F\7=>@]10jW7L}&@XVlqe# t>wºG9O_#1l6Fd#ERc3p -uq4i+Gd 2䏀qI!Hr-tv my7Y F[>|.A}#(E?l]h־PP`˧( "#\V*'I!K.yyu׿axeoe =vx[:TI$Z!Tq0|_'q_䞌Ws\>< B Ⱦ Xr.p6RC 9" I/ڿ\CߢJqpߛ5XNk'%cH [cmr!q?(OMMl]ګG^,TXdi>uY?z?C/9*zr."a]Z>'4&j<$bи`2ËC3uS+-*:0bU%ާ;?ߗ-EkNlt- f&k('ʢ@ U@xQ>\Wj2kÞAŔLI#St׫(a$nsoT# 4|Ëo?A nMOGՈ&!Ch1SQ{z16G'8z^tS.67C Xc'35TBմuʡ8IH}rP H€\WRYLKl粱4>ᴷ"GXm,\6ʻ{Nc/CG|.~uMZEhnb$';Bt6?IN+";Zp.|غT߱ޣHyzv{I7qfo<:*ev.zj*RyV!c>cetLҏ0̯ӄ3J{Y XIq]'lD:.F?3w>Uk@G71sy:n95 '$zh(ӵSa tkp;/Zú}ϥ9/rS~gwWNٟTv oˮY% ؊Sx5 (V[ai>s _vθK! 1!t=-26Ys1Q q]BG\XUs;N1]M2Al%74YŨWQTGS1}?]8Nbp6 7pFɜ:2m:Rc_ϳs7;˹q#byֺ&.gȌzrP yw܋TcOhХCӉrkw.c; n̨,Υ}{c *c̐qpu/z퓰ɠLGی.V*q/F|8 Qiw;vhq`!E~|>c$j cqۗ?)PJbM45~?\}>\,p[yJ'z2Ԧ3 a㎏ulB)8A]Um]2b9" N3k5*] +MEHpAl$:oUEdYk&9z8`F1Q:B4anB=O{t;8!zy=_Ҡ*<ˈ';wa7=5C+'Ma8bo` (5%Jѫ_yC(Al2`u|_lC9I1GyL\`N{ $O|qx-5cuW6F&=?+%"5nF-ua/.F'Mּ. OT Hj\4 kqڶo/9Y;׶f"ƉdK2ZWs%Ag* %m'C}쿸rs k=٩)FGkЪ[6eW}I*~GlM$Bc`iw~fIǂde,Œe8/V}h 3Ʌ uL~&uyY{$7 dv?-#@ߌ^J63x|8(b[fG;w85/J 7ym.B5OUNmqŝm쩽4hWkB=w6%QAOlHhUQ[M+w zP/F{tƱx)2bJ+BR[ #|r̓Pk;%x'aP닄xpfӔ'ra,1\U~p4$bVBw {܇ ×R6q˧kՃbWSx Ҩ80M^۔p&$7=eC)pe,7hVEhkϹSa)/) 4ߜ˵ |*u?rDCZ1sng_GnqOGĘ~u1kQoJѕ?"gIǧ@E;蝴$O:+?:X*b^ұ ptt?]{6'9CMLjsGr{/׭}k>M^5/~A8sh w ASG75WՐ!5oWv@_8czWǗ)CX\a9͎F8N˥0s8Z8aO9C~Hh â['?]af?ێg'l?#iG=P_0ip7Ą1[оẇ,\6s=ݘhb;CF0#t٦"{5']˱G-dr{7J yr3rOARƄ8=#~Yru]痙 bkwdB.R)Hco\Hӿi~JY=-2:v;`8׹io:ͨAhb3l=EvAY6O5 Man_ZlBb͵oٱxRf6 a*qt`+&;`CI$('E=NLgz55,R vMt+|8+NSb1ߕJVz1 Icj|y}fEpKH҇nN\Ʃ*IU[ =c&: Wn 6R%s|ͭ1O" oõLi` DkB&d!44D_n`K (l&vDM,8N:GwY,aޜ|G'$`:G H}?8bs~u^&n`sCA!/>2p9E'S<>wwtaǝ{tK"KST mw$z//f :Iy|`X228'=슢_e;!ma쿝4qD x! _R1G ,Be/hwRN5$kdv`V'w)_ u`FLUKJLY_^?wlp 1ri? hk~&Ưǝv=q.d1|0^$`.4'0/s#i$jxLf *%=:tln7nNx_1KFߞSƋKN vS?t}[s;Sw=Ǐqc˪SߨY)[(QʤRn 3C?]WIڄV|0ț Tb""05mKn=Ntf_^=Ұ ^ד @F5\ry#AQsD:o {_O0b{D/o3YyRy 6_VlerM*lWwdވՏ[i_?_P:Uo,N͜i9/wwm9S)vRPbzW'>oX%y-R0Be1_311-WE͵2k]^Co66Ycg5zı;s9z 8ZCғ18 q64u|E1#%뗁Qz̒9[=~"m Ex율ls)ӚtH :{T=ztPYj5~t\X6)> do{[2V:r熁٘Gqm-VYWGARf@3VH+O/5ƾjNr1 O3S$mIE^ڸifF]C&Wɾ\eGWB_8@&jHک@$̾1mVvfI22qpi?Pii/\nmIraM6uK*)UG݅ i0Y3&x]"#0Iyǡ.7Y_¡ubt\pg17PːnH*,X^bI_Ω y ZOM"_Q(:riӿZ@O>pZg?}*5bwq !Tg÷c"'og[pC\mCyn$fmQגYtO6:+ѲFOtc8ck8AUVTMU kUF2Jlf0j*M ]bZ|\npDz UZgR\_}I!x3q=h3L @aʧ7d +0 1/U8f[$>g U8'6>=+2ʨc,/|o+ֱ|RsI .M QBzu Ga}qPVWfK3CЊ"L%3̞&uGh8N`=J9V>? #F2θrr%/ \{ӓYLajD{syr ;iX?vi`Z<0vq?vǫ)OTF= MGjih#.6>]N#(G(>NJF{Q`Ū'4й>cxjUhV(`RX$B5~jE=;wWHtl"'r!p.?ܟבv /܉_ǯOg ;OOyepfFͰm:(ƕ6crP<ɏeYzv3M/"22*I6 ɂ([iO+/0`ɖhnZk!2;sݔAѬʈ|s7*8wI!sZ)Uupi!k oMW߿x~W0BFNNSK4|FƼC QPb"]wv>Zl,($vV2K!a_2P@ Hc̾Or5>"7V*5Uy+f2VXc<'46p#žGYG5be?B;A IRѝ)IKY fw?T\Վe ~?B6b!}X? +J->áaz$-$nZxƠ!RC)|X'@a暣P)o ?EpfY0r@* LVBDE_Ov [#r@'_L dgmK)Su 77ؐယƌ.i( vi>%~t8h ]b1BFQzakV o& 2:xspzA1uzt$ 9 e8 I2)8 eiT؀q"XLh*(EL7lvy^`tY8ObVaoȪVv(TpCH$`(#1 '_ޖGGzGx!`w]8Vh,1DS+"gOڻt\2_a!gCF%;A>5X")x̍yH-RﴨsPEˆ hwڟ1{Mv.0%=3(bXeD5$w}jr.PX&!&RCϺz$ !6 6m ]P5%$:ۊ=i: +@M(a@16a2 Y#Bj c,W[ӈ&9 xħd/0 !*`Fy"# 9蘻cP>U‡dpDP4FKogsFad*A%bG^Qfa+Q7 #;y3ɎTolzgz v@'/c5TT| cʖ|no<'{NXP!~or!ܜFK PNwG eCYV=|i fJȴ i;5JZq;U4$N5hL+:i4U(3vWh>)B N|0wWpædҒ#>KXuVK :j;]Iw/],XeRf-ICakP0x ypÐI1;泜'rqE,vaO܊Bg ؛FZ8R΃NJ(t9N`+E$Dx2hޓrR?h}`'!@'MTǃH`C],-*$|jHU#է )=N褐o)2")bp $#J9R";HBLE,'kWp4t!*$GxKuds6{D8pIra N!`He?O8AKYF0:F4ݸUGUQ:Gn%[ױ/1F5%Hb CT `AIs BAF"? P30%sKgHM@QˢY*~A\wr,b/ 5tY+`gd!lu=Qw8 f`PmÌ0 @smz@zlN8Ͱ.dL pE@"1B ڋ|c:%zP uM)B>t )Jp%|kUkپTӁRt&F^auH_kI-B P!8_D; 7jZ(3ʼn'Զu<ޙ.Ϧ!IΓr03gF'"Z0'k^]=M4`9 lz&kGDa3lAx4kY$q9 q^mZW6ƺWW4(C4IS(@19ۛ<: YD 5)q 9Jr֦S#CJ` ~Y ?BTu]L0hg 3HϸuE}-rSR' c>S x\l"} .q'O̜!sG I \Ɇa@:Q4R-6Nb̫-cdGq EBM ]D}AQH43 cś4Ne@*ܒ0AqUTyX-(m -F(B~SE1^hs³h2dZq(̃&JSV&dtA7J^ARVb}$8RT48 P e8Xa>2Gٔn8جھ1Η7FD[ |'4Jsf>4p/{B-Jޱ$-$@@ؖj ۢP\6 O9 Ef:0Ê3Pcb"0*y_k jphԇ5_0xC&hP" pR00@*ZXf:XX^*N.G>L1A; '9?FY$ajZDI.% -6>u뤯}A5{$E 뤷s wz7*W,o-^^ 6 0*Inn Z e1) , =.u3QLb*]f9yPG3wzAl' .42IBC}] D'o<`A ;]ƀ.hNP Nĥ`w"?] dDǒǩ !D 䱰z,EO<2`+ؠC+ڛVI<+XPĉ)jf M0k!-"^y+q40c}bK@`kTm+Cݚm@9g;U! !ρLXN ~Z+ي%3KOJS̮AoZMHaܒxuR519cOZ#& ?IQ L!,m2zjtPw}2>!t`Rd, Wkm"];R#畐%K'u}Ǿ||6T7ODd,oD00M:E1[8, ,128XRsZ\@9-Li,4A0*j*FF9FeIСՠT,;!й; 1_3硵cԁ> /KLN7~7iP","HC2$;rVJ<|wUSQ--  2Jl)i4)+$HvXl^]_ցvTVa)T}=)%T*nу@kY{9%w ~Z~|u<;2rU#5} DRQMv CA]o$̾t@nU~8I/Bi Ey  {"dgŵĜFTRPС s"B`HPgF,wSЙZHSnYd|@\(8*a@/QP6PU߁8z~1}xhJx ٧R3M; 1'p7GΆP >;?M"A؅ [dzfYN16HTZ/$ 7Ѵzt8Þ-<˭4lQ̈́a(ikȳUP_aX DOhY^ *)~c%J: EAahT"OAM0k[,\[eDtr A)qJ«jm% 9HT8!?K,8=(Tx~ʍCŕ4;Yx 'Ā l ZoX|bx]3,8k5(94԰0aA}P+ѱ-"|%Ȩ( ,M$8ɓqjv<"1ALu~ܟ޶yAn #Gy86 zu`׉'EhK(9NO'Зm7cjZe"E B6G~[dbF?:0Eb^I Ăvs_e+Ƨ~" x4\Zo1@,j iPLP?tl\0{Iľ$jY."=%1uMݳ9'v,8 S/Bx䡅UoKŘ0BNFY[k>g>kvQRsBOkZ ^z4HTԹ'dJSA̦gs:<eMR<,2ʁe;m7LJVW8F2>:ցDav2ZB*+1e9Ɉg%^ %Dʥ4}NVź bC!~AɨFf l)É){5~R ř(A36JB+鼂B--j~m~ۈ(uMMlWXt6¤sH@?`1TȧoeCV[Y}D@RF Î惍DZtQ&:-H}86#Ab4z^ K-}|)R?)b 3= )zG+nh(;I04Bp3 sX_ rCjgP/p1ŽeYw4^!XXD9X0`9  ά=Y(3 ZOSF p}'D­ޅT訲gh|E bGH y *&I -1c\6Rcl(|>Æ,5L>z@D X . ‡(KP:Q ~1"(# 6f ,cx??)D \Y}g@EKg~}7?C8'80 08;G?!#3[w^_"|S,aV09'sP(sj-/ .Q܊c{mɾ,Ro2e_]/<*Y q'ggch$c*lxv^ѫiX Ç5]ۄ>{8XBQ!@Pw>ʁڇwgH3j{btє?Tt |MT@ u _Q*ě;1de0,8 Ly²ee8|]T:qU^,ή$NhA0encIY9fTjFJ/!5I@  ?胏XR`XM `X L?w7li>بoQ5i'(-[ 3X+ٵjvT8KX;ZcXjefGyM uR9Q@qlA0st($qBʈql; % `|)b@bO9zu/BAHuK[5&Ihi|1ԿݍeMT,3,vc#>:6V27<`Sl 1 kbXTjOMgk$ֈV$^8`(,) PtyyH>q/'dԩ=n/4fi*<0 E XR]6> \Ƒ-i(9o?R;哩0BȖ?>/CXSFch$nTX8XNT]Ql7v@ 'P4-4BM&>vO/Fcl V MjM:7,H(PJ10. =S/:f{l  c4Tjć- Lca0^<sL0u{/9gh/B6=Qxm19 ixA@1&]404.tpQ+-kqos=ϙ@0chErT _ gX(e9.j1\ >a v}dPёv`JTKo~~0`DTJAp`.P2vglF穩0|LtNPS{n؁?d/1 GAS; D  I6{]z9lᤴсGKvƟ܆[qV`#Y0/?$,?og|&vx`ٲu8"v6Z|I1`*IpƄ )xkؓ䱦V\Co5SGw() &`.ey- 0ր0]tǘ=(j@$oR5)*!6R9TnG^#:<*2ԏ^+2jJdk &IS+ä D6(Bg:ej'W~ 7>_? {Li P+ߓd4( y x >rkGXc^5.НxU Hс%f6N࿔9P%K "xȣ}\lۦF<8r Pt힚<CAf iF)@z`(PҡB"hv(`J0] B9[WAx\@[c abiXUfl&@wfYҶn:79%P^\Ͽ@iɉ<0e/:A3>A]gLF=qv#f`=xO)$bdWcw1cn'&l~=vXh-3!g˥,uZWnEI4}.N\T8}}Õ'>!JŽLc?.߽x1=o~v+Unc wZjWQzF2OkttQZ_b5ܽʆ : }4sK9tqh/ .@,>?l 'N1hԱ96Um׃1_9{ Ї0Ab(/G ?ɘpL=h|Z<DZjfT0#iIԉ 5Ik% MK<ި75bN‚TF(Q)àEL52sLf]Y=âGLܻVkΎS-FX)A2' 5dZ-'ɏ#r@c!@I+"㣌 =(q f CD<Xf*-QlxCcF^8tNK8h BC^lRA@-33<{{"FjN ~WRA#֚!̼b'`52_`ނ"&P1,DQֳNx!8b/Frb #:c"?|S9t+\߇O?U~UDlYePy[[; <(t v3!,y !pTWD,JI&XLb`'Bio3)zz'x:W*g = $9yC G8p@Xbd B݃ ɮ#(3R*!ԲEx[ˤjpY|46taaR@Ra`qXQP,p) JU@6[/q^V@1ұ5Ɨ6BB[`ѡqk)\8c +Py!O_RwqpYQLgE|CH[v]H7@f 0SB # 7ڎHu ja値`QG! 0*3\XY85cz7M~T93đTPoDZlW֒t^mHYT߰NI 1rתmBT:@}<.s{0fƾ>=B+BШFí}0mN#sdUȚ|IG5[3gtƚԷ,LmVy8A2کg =`N"`U2^Y.<$SH< V"K5y^.5۾cRθ1\ Otpzh,_SX!` eP{ e9! *(+N!X \=uky@| 8r3 Պxq(b)slJ,_0 ;F%I'x$a0cP^R롇 ͨۂ2XN)>,D{FJ:}m >]@#x e邛Pp#P=z_&YdFe1QD.#sjGe=R"1.|!i0m#b-c7P7:jvlH|HR@=֨ljL5&gఠVMNS%HdIUQXnscaoN#ll`~ YҢ*&]0uI ʘ8ftM[QDYX=~H4u싃Kk*'"V9' e7Ud)Vu\zZcj;VAC:Pk\t Il3[Sֶ iD!A<0xp}?-%.FСID, ];t!3@q) KDXZ!$ͩA N_شq;(ޚdN 7i<:Yl w,"X z 8#1;vhy\LYǓ.FM sJ>rT`GXr>~/ٰfd.76 X{ (1u<ԑ=IaՌ/hl<6~{ ~X 1$eb6tOF3U*$o:AyG2\TȁjvF.')*0) $W<_]E#&x4v~nNq fϧ g-;HZfb&H;RaY) k48'.ỳqNQR'ϳ7EhuJ 3 &cbC:CP zRU ?(@jDOǩﳧ*ػ/5f-ձQOvmk nMVWaBXH*轜XF.IR/(XftJ cyA ]tYT ~TFqH1B1d@4ɿN^!eJӦ<ֈ2(DZFj Tٺ rNHe,:i am&T{FԨTqa'a([4;rIlZs84''u{Ӕ(A31ͳh40A0l0W)/y6 (w$Rdyx~T@ ʩuۦ:\ms`DBЍkv"dSQkl/-JA<lA`> &VQcЎټ2MYnrX:6MltזC뷝lbF.S T m)yL `ތUw+SkZA1BHDiMisu\6nT=Pk,U*4niDfBeu{E(T@q%z%JD~U[y?n˲R;`2)U}y^lNAQ4EsϾ}v/Z(]84E@(e?F3)XUnd}XSDȔ6ǰ~R0#D)"=tqAрcÑ{Q n$kpALpX uo$ B(DCu,O5dLtR`PHY„ ]S]H8hS*W#o%8KW]Q'p]Y:IG(ڊrSas8ӈ6X:ŧ9QII Q-#tHD%L>8ՀƑk:2`(B/]bgH-1ibc*ۙ(JRY0Z1֝pLd Uv޲ 8$7p 0G} mA?%k֗`(5>ZVyX V@DM$GA:tcǔɸ V BXBܲ9Đ F#tҞK~WbHjCWԕDU,ijĪQ"c% X hZIUⷮ˴H ?tN Mc\o݉IBW E@kز)O!l˸9ۮSQJN=caGX_#Z.ʦ΋tX(h99B/Qa?C`Eʌ2OTkle?UT~k X; U`8Y8 Id Uћ?Cp~}ia]P.ÎJ(Vtu@S% I#cG_d96:5o(5~ӄ*Rh=)`1zKIjh`99!8!SpujFCI8PTX{Z-PI S0 v+`ȁR+TqP>(s!1T׍U^=$z"My<=͊eg:Yzlt56ԝd֡ Ubi@̟̭AFB*:_űmUu!5V?Nt<ʹL9۴[wcYW!N]5Ŝas\^n=j FB~zx?Dղ8<=ͮf154}-ԏil^/ H?:ǃ 9TM\%yHkxZ!9]zw * R/xu,$m/.zWvw{Sj3[X<u1p A vث2W7Z+P(aˆ7&0AMS`c R\H0P;5~TU=6pJMS&#M5 v}87.bbe*͚/k)]۲3[F0AyʕǘR6<#{:V₊$wc=iT+J+.W͆GBc`} unRI F["x]:f:u{/ E6Mx%:\<9rNf\%":|VJ }7[OZ̶|FGro.98.v-UYjeI]Y[5îSnņ9MsX-֖.QڕcG!]l;LeH~VGkgA+8%?[yG͓^%n~1sRkuЃVR85f7et1"fUD\\S~(x}Q??+1lźq~>B4z"2 XKCر{cvtϨ9Pw{ϞCf+jO'{LQ8J.5*BD{WH([wQ(-TaKH'I6ޮ)%:Qy@/_+]}}]u*5um^V/)KRէSIxQhVҖyA ɮ}<}.9ϡy Yܼ߆`FQ\^|Qyu{!Я5$-Q|dN'N0RwY׬iԶ=2"T6!ܧ\e:@=9Rޕ԰nA4N=Ms:y2kIqBF(i9;ϲY4yRzA@qz212wEA-OMGmlNmvuyt l`PzhEV+j-2W%eDRe[jy2oĞZ A8@m\<ُ:Zu{Ja؜)}Ѷ j?9**!@Ae0_gŗ !XIRp53zwLtZ^_ЯeQ֢" hAeg:wO|^>fi t',+vNJ>ۇh $IJ,N1XffI`9>=lgW/wo8k1>ry jbhT.^rd]e̅ǵ~w7,Md<7izF15Mi:PU,JV;ן|F=_ l˜6Tm/?{zAqF|mr꾤܍,Bt="nL0cy,0[<Ezzaog55:<=PE|^8SUG+iGeڌq>;w~^䳐{P?=Q_7b͋ٔ:[Dw<|'sGj(_a:}|v돟{}Ñw'΋o.>h}BζoЅW,rן7]z>?o[G("N<5`VS_wձ yf؋A͊%@Ԍ x:B:_^5RQ5(X ^hN%`&Tdȫ)Ҕ:IzbuW5-Ps9\SnJTL)O.],.=Iwip_,yG%l1OObnY: WX|ٚ΃Zz9UٕMXlo6gm\|/}z Ml<ë|O*DN!86Ԧg#P&._%"?[]o?mr ΘWj)2zTԅL8MkqRg̓X G[,z%žkz'NB5E3tY|~}\^v#Q|3YZH/4PUf8ey&Zӡ0f:s[PF(^-gq뜯QaO:| N0H"l,ׯ_ ~CE^]7nD>~y9}sѫҸow}}.b~קg|{?z_bG8ݽyݞՏW\ΏmOJ\vaLyy,a*CSꖺ-(=5f>]:tF~7>l_k>ylm_~$Uc,SO`W>ݵV'TxQcOk 54fW.Vzsl_SӞߗ? fsɖjun޿ VLx>jݯu{㣵tJ%?Ti_7^}Fߥ$h+d^^v!ذ%̀ "Am峹$I T46i: ,5 *-5SRՉeht\,Oo@ZwˋguYaH+sS]H.{TGCƱ@ 70tK/p@5Jh峼M7V;:kM6/L(4qp'^yͻ/=+?5 D@%V#=a근0szEb.s!mUyMsyq:g]`7'9HUD ftU^m}yZQuE1uEDÉ VwEv7?K˪:x41 h Go!\uC~R ǃi]I5]2+Np]{}ܔ5ԝ<|HLs󏎷`ۦ~Q?Q5ۛb6Ýg|VdwGVT*ޏ?[qe1o8x:oͻˏ?U*F.MOmq-bթ= ~a;k?77Dto<_{a-gXXRg䳬8/Hi U~_VN*[Cyb贖Zz{-4: q[,8l iS9 0Ӫ.U:w=VgJHI8͛J@nnv*lѽW?R_~g?{2L5xݻ=TO=:k6QۘW,)O j^>Ru]( o<'bƽɋ 3DѤ׋=YQ׏\ t:JMw"u}k_.Vé:vj޾{PP O/(59CzBeܩhEaOOwf #FÏ>/= {PԬlľ^O>I?M1Evis2Ya6 IE 2 ǫ/~?Ofl1rnAQ̅LS Svjd" [ מيzp@_<:ASKix8P/nj{I'\U@T\xk鏭1+GCi/PUqx1?aܔJV:VYT}Qtư?bUϨtooˢFsiM{_77T]}t?$lwG Z.f5|t^PO9X]K }uꁞFFRŲU f[^X^~xQ"EM\={9@ZׇC@HTwRi|^1x!>ؿPJ1x#~_Nzwx-ַ~HdqыQ'=Uלޕ!fFf;_ΩKJ!RWo^,,@{Wfc_r߽'rf/ۿiaylsz|y7//Kţo~]^ꪣP׿E1է`lyAwFE*'mW#'&((J~ߺGϛdOe5!-ݡ UCŬkgsjC(n3d(Eq{ޟ/"_VMIdsϹtRl;OPJoD̢ŋ|y޾Z_ QgtjsW`[-f2]7o_|Lk4oy/pzr~uZ>>?l7gey<_,mc)b, |uW>nwo$Os t=}{gofWRuJjv4ʌP=ݾ?mҫU>.kͱU h^˲4?zLȬLjҘZB $ C0GBBBL0A4-UՕM "#x7T*"޻׷߷V59VYa{7a"+ *E|$*UGMޒZjQe^6T 0XRWP6Bl\}&i@MQt\Nc;.%B]դa Kq4̷`d)\j[Ch 6f8 =n74'ʇΘϻ8^;ң'D%cuyn$؄Լ*i]9%\dV\_Ms4E~%.0DOp*؊2]UiZ}v@Oط:s>wj0cqSdQѼDwя^}s]~Z6Wq&wflGgHԗ{qM4u|2$?=4wzvYCO.c4~QRS4B[ Mre9$ e],3Osh DY^2  4:APR,!$͖aCc4Lib}4n|o2y0JQE0:W蹲>D9?.MPyin1:H 7+Q@49""x!z^:򬪳@=Am7*ѐ+]QG+]Y45AIX^, I]7:$ Hv}{%ӺT2m&a8ΠZ4agw[d@UM# iqI ċ]b{eX癰hy(vE]QÍUYxp Ij(.JXXjк(u%` 4a}%U9o/Obuf#'Q>Hۛӽr<@$۱ "! )׷$ݤP՗?Pcߴw"T@PڼBﳠA ܃mde L+mrE |X _%rP Pi B%sISo-NJY;#0s "o:7{wpR%&9>YI"R-?Q|a6__,b#c6# OQeLEv3:3 i6g3y Mf24#.K{HEE)Lc59y-v{ݯYVnv8%"ڭ-jpﱪ&hkj^Ӝo\LM%Ӫ;x* #AOH}ZU tfâS" t6>]Q %+X~whaMj^:ە t!G" &kg7Ns 70xʳ=6Ň.߽j`65ޯt;̗'7p( 8,V. n@6</7x~{ya&ucDne 1+ DnʾEoPv̬DƜ('KW M}+?z\MI"q̘hAӭ!q;Y<! gVGGtˬF?~\sh'tw̌@uI^g84-m IVY `(Ǚj$򆖤8 $UV i0h礲.:Y,rF^7DE*XFեVʦë6_e()4*'"ʡ&8 $ǓdV$A!YIC1E NILTW;y)*+CőkL`P;] q|Jy5'𼋬=GVuRLL(PA8K%2DƍG9^1,= $^mI Y7FiQ~}py޽;].;IL,.2v')~n@tDe%M׾Bk>bKk,7-e% X覊iD[H:x)OM4Ŋ$-n{u3_ߒ8Ohù+83AL^P hV- lݴMVFzıdPӠ f{h)5$U%Y 4:F5g9W<%XYsIưt Z@ AT%UD*{V KiU :ºMrX4Y ,-J-VF߽`Z>t4s;$ajlD&rS=M'tek[؇:I~uw2}7[YQc;rn$Yg>2ȏ2ms(v|5s(Z@_ kxP*#tEڛlա,bZD<NR".U ~d(蚫"qX{ȷ]5I T8+a) r h^,EZ} dv{bJ7WR3Z'= u|wt}U:e,HmLNֲ&Эr@ϖ* DZwcCc~2g (㎭^Dn!E_`"E9umĒysP8jW/!I>տ;@$Rw ~T` KRݲi32( ar= R`!ф~HRq"ߜ~Ƴi1xxsӿU]uƳ*S@Ov$՘eZ)"t˼E‹乞'6 3?  ;#3-Ӂ'I~WooAIU1SK^Wr?^̱L M9BB,!Cph竄q l ;twO_GoIdVo'(ӵNXY]ZQd^x(l(uYfgP9Ë@xS%[E 2}0Ogh9Qb %txW;_3Ѓ:` Y (<8 B!ʼx2Tm>pSVP85Vx8j@ YVIYOmͱB@݇qvE͆muvn~2 3P8X*+"̓4-UP(2 zA\KfUoޮŵ#]{v`L͚b0/KVPfNYjMgpd祑uh=F`}~JE۴\2da#4G( >'YA˳rNP 5oO`U3B {,=P!(>N`#DAmUյ 1»/Î"J rZϜB4m0,(ѵyɐ()nIei4l|ݯA|9:I*C B* JY:.Kudv-y -9q3( ]O:2!^xh\ *sZ4-Oϣ0#Jd:.P z#)x: "<*dҜ&au{7(y;26A<8EDi⺩uZ80\*q \{$L&CWr _>pr^=]MM }^e(wLC"˷$*_2ce^ѵ"Qv&sB}m0t^7Q $|)-p:o1z>@kf^gsyϰf mN~T5PF}]hx2kmZ(g xx"?I!Nޥn zʲXT$*MWE6, DP8:w4!F:>A '2mI~8tf,ap~86v78iHA\I ݰ2N?Im4Z>ZOXfRV7[x>p!pI_S .BHEE>i(y7P])dž{u!$[wk t` g?h~n(mʛV_|l3z04)-~1+ZDaeViH:EYe kM1Tf~vh@tյ(NQzkuu͈2pU%< Va@i-p,WyIa[ iCzK71#æo^x6 Y YDaUCK]vpae=d S^sKR4Me(q {唢-FϖNoʦTlϾXa Yw'sS/:I>GJL˚')PS~;W_9}J^}XޞsY k>.۞H}ê&Ƞo c@+\eU9[E=1&4I}YTg ]yL 1X7@VIF4aR(% vai&?"WHDv* rײ ferDmƲ (K5{/+ KZ\@Τ `'Y cjB=îaA5Uu]i4ʆ9g0UCs%'J4T]RY%]8oz|H(@e(NS7z7%Q4Ed94X7|G]c'1ñ\{EBHE@l 8W QX3Vac6P d8";z&Yf)h1`"|wvf:{G4,th$퓡5]6 , iv~yv{Pvpo /uqǼ%M&]ۇ6UB/_oM~'I7 E*Q*'mCghquMh89xER  ))]Z>bY)\0>:v8If9HRٗ4޾a8WZyRQԞD9M"eWHV}5[0jU8'@)(&)sX-P2kA: =U 5շ_k׷MWJ{u11@-vccZˍl]S ƛ;7=IEy:.5Y:4Ѥ)BB%[$_A)1AnI\z1nmV5KX 2몚+* Z 5=JEڒa%˧7TmZwo7óQ`WǏ.~Ox]2 L! M,wD3ʆz}sIt@r4=Vɢ5i&#Zp(VSOs[0 4Kv$wLg؊l(q2}^e jѳwc JZ`1[{won3E`1IzߺpLq22ҵϪRֶN|p2=$v3}:JP 7r㦇|]/߯,KRF2{v- '`:74g-"Z_~2L6vA EM-M Aڢܡ (#W=&K{R"ǚ Q %ZIUCȥp@=lP'aE[f5#u<,U"z06nh MR%Z(8`8v/ {3,jxc h&@H[￾1 Q?TPP3AU)ʘH+u`LRϨ CV Y g֓5E1_Yd_y (nNEa  oq๤H (͑o?E)]}sPs&Ga:[elDfGIƒ(;P&f/?)783:E٤/^_r\$+Q(꺯~LӲ*Ic]dovcH@@`@VEwwibr;>^^cs A}* /fԹ+3˾}qGl6(u>`>9?6whƱ.P/;6UſZr,P2p]b%Uyeh#SG*}) i" AbȻg? (5PV+_4٠]CY O 4J/*stң E#4ؐH. S¾G_8nD߾t#c vmٶEĘ'^!/gPZ$`',kD}-Vrl){9Lj轕QFC _a1K18=&0R-\7}L,ց{kQ(\zFżzWg3EG@ٷ.!' . Zl֪ljģP'hM350Xca\}7*.Iz .F&P#yڿ{a7DG+ UnadG^35O|+x2c-ćO6,3vz98a\k J\SvF׼^'u1:=1&h㓯=Vyl=c){Vzt6s5>5 tG8#Cfj a]'dCkC,C - K/-(cfh=TDi0| $0-1vεr?7>8C! ic1 9 ӣ00 YLDoj;_NVx+HliDZk# _r;ϻOR!R"ta9'}ظOk)XVc$Nx`ׂCHIF}A7V? q&Djd۾ӃqZsKSEF_ !Y5Y>: 0A0uC]ΖvDīglOȄʹġ0BLGp%G`ؾ"k5WlKl#wEqP/CEŅ9^N8ŐXKcyO=DF,RLFF꿨f1xG@TwETy؋bs)|X 2|(() w|ر1NOjJw\޺E&oÞ;mƋU^'- ÂtVDDB*&F!S}ÈzQ{>74o(YV.ס`A\a0GU%#u:BwGiĈX>,/IϊUpL(9s:<zFF$sDu_ÿ!ǂZ-$gZf}B5XG/L┃vC>E9S ^@**%uz>٩41yZy P5aQ%ӿ\y"_S?MG 鐃SRvVIԄtVV8y{}>'$zX32D>)#>/ :5ee_2W[jMhÙq1+C?']Ҵ77!n¤m TBA*M/ VaWBp )d("`Ẋe=J%#y\ݏqn UqE#R><|[#@#?GjQ/_F|Ϧf5<| 4x͝/&+O(q EAe."!E:hI*=o"%D YB3Ek7RGo`1 /]\FArG-<ۭoWﴡ|xqq7vVc5%s '6do*Ejn2t#x9TE4~ &n;3i5CsOѴZQP=oio,> n٤<4 vV;mdğP:7F ״==cl sY}C-\q*!nE)c\İ|hq!|ڌU?O)+)B b}+;NL;UZx!Gad *Oȟ?DpHD\:]N$a$ ; =CYd75GaЮmqxw8b.Y/ oZ>f'ώ{"YGR6uQ\Oz%@df AD߄ޖ($h9%ѹpFȐbf6ɠ*3B%p1YFcqnǵdi-$W\8`mGO:œwC._̻t|֩uȔoQsj >asa0>]w^n`-2j.zt(>-A(h ob;:xLNrw&W}5r2$o7ҝ!1 Y0qo XgnYSWkWD`F% l!;c*!dH\/OZ|'H2w2X E=hWqb dAׯCfaAp}\To^'iZ-J!Q8+@tXA"`FL7y6ڎŘ]јJ\qĕ:UE:` 4GwdȨw*&''RUdh5ruXke/+SeM[yu7- FCv:v+^uCLZI|rao edD=V]Ó.zs|yvZOfGh^6R7*p$_d946L;a=7QRlP,O)m c.ŽL-K Qn99ϙp4ӶkI@1Vn> PԐ=s6V;o8ˇH8j國8rx'w2,yuSg,Vj@ wJJnV)%Lq3)e 5s̎ZfXy,qΨG'iF/Lv,>[ǻVk1. C[7%$[[QM`= 5rXl#"'zTڑL23KG~狳iTt2kkomI |ec/ޝxc\Rhn==-Zm2,>Ksˊ==φ lQ?eZk.SgGjηnP5VuWiPj=P;FP\n _ EF}Dm`+1u4=1щuW|7un_O< y۷H90(_ɦX/)>I(xh5)F4c+batZw^80Kz;*)df<#;,wEZ.L.̴re@{vvXMj!("׸0 {}-[#bAMG`ҭ!9Z3bhJͬmg/Ε bgGq=á69k6kS|11_?c'4~Erk؀r]t1,(1ğ'ټ$HDrm^ޝMCnAFzd[B_^r'HEZ9=KWǻuwϫ43GVh`E[+׉P𳸰NLs1EpNi RXcC WU1["0u弢0CGRo9 gĭbp.Iꮉ  TIѦkp$E5%- lP!F 'ly)M'H'畷+7AQ]3ךKXF(0c8Ĝ(+PPQ1!e=}k{H[o26Pz],qdV?a`kҷnY(PXx ClcmYŇ8P7l|ȒQ=&jSNp N@b\5 fk9VUW0 "0.4VC;zU6'{%Xr1c"Tt ^Y0dFkf^N^3 NUTz<$",^Q;u Eu 񂫍͗We#"4\glM?Qh^l-͟q;_u`Uf87yU-U;+E@c`9sזw, 75>{<Rj5 Ѳ_f5N9g4}ꥣ:DVG˖+5V )w jD%"[$b"@R{ᘸj6_rĿ9鑣{ò/Kf`,/'&cIl 8&IcF؜Jxj=CI_.mNx.*Z%w {'h:53Uqt;sCKUn_eNB $4m;8Cp.G;ym}@B~w>ԔeӀ y2zNJw L}3y |3cnJ*H‹sdS<0-DAncF.ާ}2eNOst:̈pY9㡔&-\SK f",%1_܂AgZRGGZ3fC0f~Z&ͽ$ۈKzN~*:"SZ_+hfb47V_PT3Y==΢uqo e?xUVo&7KLٗ./o nGВE8`[*rsW~j< li1J% 4D"✮eȿ`\U92J4~1PRu'xx |'B6> / !=a5?9cxͶ3:{djNYkPe]bw b^> {nOOғxwQo' '\΅!G/y@{_.$]ONH_9k|xXNƷ =AjKxB "g}>Av$ F炜!,-&6>3!ay8FjufDO}d;jB,U }[54+'^EGW,%@*-[[̐mIvB6ŗ֑a0M0R3I[H-ϽĽ&m4ZvY&M#;8`3*F[c}9囱-= b5ymE;DŽVw WjY' -q];_4, i'p%w9w?>tzu&);^wH@Wn1rx;%Hʜp >9W,/ ɩbjRKoIZHgr68l~ϗ~'V,|'X_22,@Ts|->hu6(Vp8lb> ;y3"#pBQYBT# {}@XbDSۉgg܁9sm1c^`d !?8h@(W]4B•:5^`[ p*$pfՕ2^1?Ȇt&Ll {s-b7;',j0&i컝r ,xkw = >ޔPp$Ϙ(*1<՝^#@g'Iv T0̘3Vge3~36hI$/0 rv9٭e<`74%Z'G "E(y\ ijySТ6 +Y&i5ΨIoB;֧yCɉfmPBpdeU 4Pl3ru;#Xsˊ3d,DuUtKwt//gi25Ӽ)Kte;w~839C$c%WK"3_M8ĵb$Ԭw4TLr]RrEG/?*Mj Ivnvnְr,r΂%vc CZi`-u7V"Ri1:DSw핓VVy8k}@HrƿLi 0M Jvt2 t6ЦMg}.KqrOlM mHyH%(V@g+Hr(\wH[.tX{Jׂ.8ꎰ20xĖD"}:}!( <Gگ|BNoqűsمu1h蓅^N/y4ٮr$m-#gv-`un9E/xCt4 Qiznr8{oW'q= jXD)ul?5_oaߛ1 }_Tz B^1n`[ }<`)ȇ[seg1V,ۨLJ,G"s#/^Ge4 D@8PDdK[9T_ҵJ`>?maeIa-8~`VY@fZW>(Xr$5aU7m2V/wZ>S{ncK.e yP"*;nUg{Қ_aሰ$:t?N?P(ۜVhHhn;גB,l6ȔL͉t1*R+/8~)\nZLs;9DD`-hr=jiTa{)sl,y>OrjCzۈ =lEKܼ O5Ё=6;rjd/'2QԁPGF v,]ajב(SsCgAsDɹ<}kD{D*'9*cdBX`&:d,~ hJ$|GTM1? %;{9§oJDOQ1;CDtRb~Amq* @!_H_ C0fN?Զs?'[pAp>7 {ɁgxAƥ5*|чpLGqRfr)%mb;1FA)"Gp]L5!9JeY/g%b#4WI#iDn">$p]bjq[Pp·qP®索};D#u<(hT4jΧ F'_ηkSy;paZ*#R^;ve줘" [)g`mF\vud {14R p;]Y_UwL>ۺbctwC$毣?.%(i=rw[2-:Ֆ`ݦ؃c]b7T+j Oz&sjSLS'ELm^ďbj F mks)*B<ic7Jux,T.太u "\7Aq˻pVljbD{r dL!0NsHs VfJ8GnyeaI ::8Ug TscP$Rv}])PBRp)*TI`/rRD>qVG$U@΍ʿ_> Prat}Y _ɓE XG%UrPS!M̙d#^/^yG 8="-ns*>@J?ϗDE"& Q V|沈 g⭐/\nvnqOM,:a=u8(aJXNq^jꪴ3K-Yb0W g+[U}ZrZkvҘ2d|ޖ25G.iC1i{Nؤ0 Ij(Jjzfm-"hi$w'mWN:Eg%&@"aO7*"b4hj\οBEE(|H }]PP+ 2%#& Q֔wK"OL. xDYv~K[lhՂS@ݫUJj?_!D)k#ōIThoyKL`ݐ@wτ2Em-kDwAWi呪x =)_df W)ɤ'ڿf<'L-Lon8S*qIJA`335kؐŌ2N+WRO.]Gq`&/;I"&#Od0Fݼ j#%"4U%-7NULcMtl 05~W$U Oyـl54FmzoT:~R(媲cD梣=r lvg!K+,RtxWi8o/0E˖۾S1dbB,e;ٵ+@6[' aaǙ`u2NO镮I"]xO$/"J|T*QR3 9Lv[-ϥ)B7]s[0CQR:="濐|';5Ë-JQ""poKC"jեcJ;m %3ihjOJhoc8JzT1@ hƣ+JnSa_4}:ɸm-[ *|_HoY>=nAْyNrB|-}\0Tt47OI|#"q$noh5ߑ H2ݦ-du0ݎƒC:SsA5WBsDUC)e5QF&:)t]Q tlc1FR' T7E5Sv:j8+l]cjXߑtUTj {By8 IUՖ S?\fOg!6 `)C]ĎDDMH, l*+"|"}~>F, ;@λn޷&Y}PF/^Aq]B@M%c̫#E{U>HvyZ;TٗT C) !s. ܠSA?8bҶR?o9%F"bHC>;HE0GzS mb;I0O&xxKgzY=Lmp 1,FV9j+/`9r^4OM&Ch)1Ү)$4д护~$T36RL~fBycaiPb^,{tBWaS% :(.e2 0e_݉y&W* NɃوZѳ~-#l#F~Ώs|ٍSi,"Tw@@n J5bhi"Z'n&3םGuq(lGSV%4Z]ء&fr`p[QU۷FijT۫dwpxzW%]4P+-fxhA_ㆵDx,y 37L>nxoqSD:NljҒ$OM)B  r" gj-kNރ'?D{aLN1W7E$7}H Dj엒1 sxPΌ/3U@fxoK|=lCg 3ʵ5d1wќJ4sR*et?A9^/|9W6\MuR##> vJ7m``;s*x7O% ^~>R2$ɋuBN-.Z q ۲kyt=f}tr*&7$lqAqoDY+ɹh01a|葨VɈY0s̪ hd*T@Rߘ͊0cQ^JE!^)0PdCZ=SC4/H5ڷ3\bLQHG^8](ڔDF>:E#ڊYi:[%#.ޝkxJ`[♈))uȌxSUK O :MEqZU\q#tO-ăN*|t<(R2rP3TMA%ߥkESAqtvY1QuOʻYQ{yJ|Ȟ*Se&P3'xCC2&ZfIJ箞WT*t*X=osKJQKƒD5,eD,vḲh˒꘧Ղ!eúi|dr~4P9=֦>$zɘn)Gw(K1I%aB=xnˠ*4 ` "MyO)4x`T,eSx 6S7qJꢩNiCcn[RE`z$ulW+Q\|QmqYPnJTtSчF߬6>M2ZL㴡y0- Tpvt(yzU?lK7*=)BfV!2v)FCf/ UZ>$xwx&z\L+f† #"a4#߯Z]DbΦ2<.e757^kRʁ?PX2' ՗Bw5FȧyB]q>]S-EGo7#|h2]Kf}s~hUD8bR('W$TLɇ+Ud$ lk^A&+Epbp7vH=SsQmu)@> #y3ׂ-y:4EeS:6hʍvC:y-/b}^[5~CahYޚ-BMeD[M ݑ JK55q韢qJ#BRLLZ8U@l{i-q&i|P6K-t/'pRE X䥫Hʶ:N N\F0U;τo؁ mԗMR50KL5NHҧX "gģ)%u*ηCs} 3 S+Kĺ$vE'W?M?[2A EHNUj*].Y*Q+D}Qnxzt/z.jT]6PGeN6٫TV, st~}ka})wIe'E蔌Sz^uA J-;W/.%Lq8U)98-AlͰ=j?Hudᮋ15籡4v)iFj\.A7yʭ~Odiܮ|;?]d\8-:D,,:E"0g[w%z4)j!W$4u-([ws"#:_iÌ Œ,w95vTa) T2b~<Ͱ+m=?k&i9QgG 0FJKA@ji;ȴ\SS[!G^{L!#쮵jQ+RN㱦&s\hרlg=aL!|iD@b$9VL+U_Ys|$eKfMU%[Os}/BmCCUA8J'7v7 S{#DFme:L[WsSH=Zcg;7 oV$bh.?Λ#w[IW)[dE쨁Rwã҉2<'E@~kɒ 1`Ag/)'pġ;b]H;եZˡF4c0$G.I~O}yXYW$jg\?",IM;ri|3)洪C䊙oij p9@?1Lh644Ji(e"WիSϊ&ӎ[TKX4obǁ,.ix,|3(]- ^J m.$,/rj(ִ;/ltQUU=<{0 fM'V2%Fk"ՊUy)Ir`poWFyQD9tuQ$yح [v\j';pb/C@n1)~N{ KSˣP@ήKw)H| t|(?9*U22tOA›Y21SYWw Gi!zFY'!D)+okDf %,pR.=HVw?^d/ȸ"O- -,]2@֖t ?-b`E%kgi):\Z?IBs*ԔRY2#`\jRS{ D?1iS>ԡio+H8̊F^Ō3 $ ͢g˥iY{x\׏sQT/IOq}ovzWH 1m%ęeUTeq#`8Ia\h,~vJ Zf`<73.kw! OL$SsPA:-:UO"B6+ Da78Rzo(̱;tz bvbxr|h&N %ӴeK_Pe60U,iWWi]WXQP}qȼԋY~Vb.[,dtQJ(:. $l )q%I+'o6BN#ugO)( ox_wZΧzM)3^2Q~_~h[p$s j }7L䯁n[#;xbBWxvp;a NF;KVvr4!iV-王pnjS@%,Ok }x-Oɷv)1t.J^TbX2 Z79ʋ:^'o-8{Cv'L[[. uM0܄ŬiFKţIJ,Tq&NޞVާvjr*S߭Hwt!j]@Ќz_-[ |^C;϶ͻXGpc`S1/@J9iI6'%m@w7w-{ZBW5Gm `*tWӥLyu OafwYVzrRSr?%mr4E5SF[u(Ei8d5U"-ݗTwTL2Liu! {Fz]qoFI*zkjoQ"AT? '́{_Pk@p4Ҋx*>L ×D,`N¬};χѻ X$'p׏JY@(_ HK@,v2^3 D$kkjy=bx1't×G.ԭmFݯ"S)qW%ܠӣ'|TF]:T[SQK#^ S5n9rіyR #^~|sѮ'GHU5atK"qv($.A­z |N9kҥJbmD8=L䎟{U!-֕ZB ;Ϳ~ /`XVlw ?@s~icwZY0U\P6s/'jIrod %*uՂ+5%>8Fg%%;3̀g]Ŵ#e~(.ʽ 3K'Eh>$G ؋ J*P8!l\KeҢg}C%#@tnc@(z?Pw$9OGP];FϩMVze0HS3F#+VМI/6$@>GW~N-^p>a'#"!q"pJۥ&RZP6Gb%Z XCN]حL;"QΔ=$u%د(zbmr#K>FV[ h[GLOg}Tit`LSFvxNZ2uDCGJĀpS&1$$ZS젚'rx:?ĦMyvi֕s .6`a:xk|D`2-ի\視.2\)8-2iwxOCtpfYnm\&xQ,RțxvVxK쒔 6JlDQAI  Wmê̿ 瀠9 Q0gwt(P@;nʤO$3\i<)Bv 4&A8ʂxZ4Eu$LT:S'<Nrad WFjRD=ŅX:y++b|4y fj8nH78 o:5Q ʓZQSp_7ۘVN#쨌Yq-ɿiv& 7/̱1_k5n.!ٳ%s,5BE"ݑ KYH IciWq2"H_chiSks,a (1{r1UFDp|QB[&Yzݥߥ~N[HPX~tceV}NLϣ$48N*ӇfGz;謇fEblLk~?T)a8zF=\2vVr"a)84׹ YQ|J'q2ޞ픽^yiWqʢ-BF!dwF2HW k[#ݰrt- =4NڹΉՖX͂]nLYk[Zng|=nE$R&ꜭtZK=}?ClXA%0.sJyR+Nw>'WJkj&H}Ë]jMQܜ%fR#t6Aht_Osc_ p6LХʹ3f&p:Wuѩ%_D v2{kFq֋WY ~YT{.u?]]?i%榯j)ޠDa`+!εD#.UӨ$Q;RٸgW\FrMU-ҚA"z{HtU^zQCҒ.x@[?k@0 N`y\qj&y9ġtDPJ)HdUet~Kk魳+}-os{.~;Vj]QEp`i&tS&أ.4 N\AI&(i-丧íʁupWvO(v}hWu?^U9dγK()|cʇOjъB-1lu44B 37l#Brg fvYC9>Ng'rKD|%gc5Cz<4]sfJRt;Mo&h92_&DūHXDPXS:ҍDj鏠c&ok =]0;A5 lfq}$pT4ƴK!גɊ3lbeָr5 um#Ӊ߬|!o?ZM8|Iu+Js,\GmlZ4U'38{ `6-*8O+ݖ*@gk^Uiޑ>yjsMtl)z&bC>2d$/i|]sO5ҋ^ǽEkVdBfn9ABM=|4axz`6DS)8~N/ɗSӫ$2yDtXn#QehJ9"XP7TcaL?/ (d8supg4iCNTMW[g4F~:}¼erk{Z-y~nEM ݯK- y]}(߹@,P/X!+VF&X#LYcVHt!t! S8-=,HZ1 vQ*LL>TQ s-$xt Jb{8MOc3FY>.B1of|S~C|u(P-n`|}(ܒ2tUrZ7(Ô÷5T'UXys3>) $ɑXy$HN=%cwnhNeEfK6)kY^T^@] iͨ"0PiˡwwϽ2::elapT(Di8.?E- K{AsHrr nGk3u&=9K*qy58P?D~k_,YΉax6TM1c8Q af;hnZ `[ɢsd[@'+RdLḩ@H6Ԕ'< j_a:RPL箯lj 6G O)T$qq*umi^䰋:\u_Y[tR^qƕǵ$ySvI1،0reͿ7G1*6-Kbyv`43]vo<.enr>'3SeG$*iL-:^6iTMO79P9] 4lI}?xiEߘpIyѣȀF`E]j:iBIY۩!ahlAOv]u\Ƒ8/#D0L}*xku ^Hp:qyDX31 blĴd<$Z6 ;]wNpE٫it]L殨֑4}ᱳ]-o;.mX<)4;:בr.cĸUϟϹ9ybSh=&Ih/:{\`px(\ }3Ul낓:^wz?jII!r~Ѽ-S:25҄R2\i5׏qF1ֵ _2B ]0jz^QU` 9(m}REW"p̽WOucx\sL7xTx(900+Kn>28MGLCrLwVq?ݵ@|"]}yУv&CdikuX?ix*饋O%|lHJX(q&X":,x=0k=)cK+Pt==v; *`c1cj깤RI ']"Ek%2N %]ʺ b؏.4-5ډr!,yT~A^.MsN\ g1Ǭ^$hޏ. yp.iTrkhM $m4 WRjW~0V߉j`-w(?=yvj ;=[ڹ?!A>fWmJD5T!ㅄf/ xV" BIR<1gtpdԊ*@gmZ(^*sS8_ay2߅~Y=YQ, #n*ݥcS\C(t*LOҽ7+f^&\-ƪBĿ%#Qa!!.n*bHM3d*r"n% QI=WAo@DB06i#%tZע:]0=撽^Rc?|W L1rN\Q:oNlfKn\jy=W`X ntS('u<:M) }.ۆ ;9<)^UvM}fS i/ >' ir!Ou& UCѪj5UCS\ 9CåCTnZTZ?i|v~o"񓞴R<\֠1>F1k9֯;&q!:bYpb|4ik˵`e&[1ge{IEs]@k2q4(+T܍a#acg\?;%.U֕Hj5--|a .@lO.ۏ]n8S"(W QH+iTQ-x{Lj/Ek~rO`+)wL,RI+ A-|FQ"r(6=|QQJkn֤(0h:=gZ"贿d~ӟz^>eܤ4CyEiB,Nި2@/S""\kB wĕbzK!w+~nywQ-joZu;/.ؚQp$24SoO* YHDdl}ҨEj=Ӎ) wԳd P_g&/)V{?՚S% E_&4-H4c ,yAu̕}+]ѲI2a ڹ@"(:JA@)nj Ѥs]:IҲStw\=9ٝ]>/˗F|3qҒ(!lf!}DA®NWlUTNK?qrq_gMA(M}#i~ ow#V SқKu :6%P}G#;JGD J=BC6ā%%ZX}I$()vİ!,W5t3HZ+РXڮp_=hޚڸ Cf -nv=yG,\pzy#8B:vHˊ;89 W6>]noF&'N̷b> 56j[Bylr(y=ƅTካ3Cgަ>;4Eۀ:QiNnBBd oiY؇z B)"xe&҇? x@W|*U!%A'Be-.~]~-"/r.:VѦ+D3D/D!-\d_]9vRD@VSe59E7F`z|Fi!IW_̇Aeތ[ rYldޢ'h$Sf4C,*KP%U#R#5{MxŰ[qIXx!2^I{)Ln`7TN`@0QǹC9HYHrͅ=Mn&7<U F΃۶k]aGkB Ul:7NFf`?'kI&pv#t&i#&{6PԛITE3=oQleZvΤ_ ]z00k* 8M m~; JrgRS]p{_Tx*A5$l-@jΏ BvX>jy-i_с3>PZ \Ox.BRP&=V[)h#'Hv`u(#ǩUxGbuɒ?o.ny+¶׻󋪙/3@ 8f/6bVg @ޗ8֋D0)sHŜСugKϝbZ3IwFX ~ ݪs&=M]lpiiοX7bϪ$3蕊"IJ_ fYyS3mO0F(yU?)L[EsÿpM 6!iC2hI"#f$sy"EVk:9OrJh&9AV,#LY0VG ǥ頛mJ#  afg'xX쇍tghx̭T[ B&r>;Doի#xSM%wt~JN:8R=J/m3QMDI%Xx{-ND]q<,%z(HͶn>^(5շs@H:6bDX4ahXn ('g*"{vNaWFNfbwduF^Cf%~RGC৑^o8 uTPOK2Ϝb1GRrND 8@bK#{){u *x1 !fP&[{!Ey_@l՘PA@be#nGm`ldmG,3Up4BFGՉM蔙c>ߒC&\N/oѓu .#W0vkչ|CO3y=B:m\Q|բiE"B q#fDp)OxLF%Ӎ,d{RFjA b;Qv{ ܪQ%[(w $}O){y95Q"d?4?fyuGX٢xx^U$sNY~٣Clj jI=`@9U~Kݩ`!s  @DCM;ɫ9@+֕ID@&bSj4;ӛY%Uu%/. p!+܌|3lG6?y7{H@6mJhf1>8|udk/WkB|A+Z\vϙM o+{ F5#Rh)kޢ?>߸h,0)shHs:Hg|0RhfiOa XlcZU؋m\Xɰ7Sj@ z༏rA홉 ÊzQs醸W$LU@2s w?/‚@NYpLCBKNјe@ ;g~6qGWv1{U\ ^yB"OBtSR r #(Fn55HO@j+_7"a[c@F@Byɩ]peYpZ)~O1JQHcpEHw~ .n% 7ʈ'1W Mz&n2Nu=[J$&1*SÜ$~Nt L}S I3:X'!䞌+1τ.jK#}{5cYB?kl}};cŽ?B gQV̊ u/?8 Jtֹ/ ,{M S"׮c>m)coj`ctΨy_]#a"e3 %ĝO>R$^0z`n2TC0JmO%UGJ|ӝ0jT_6z A}>XN\qbП:S\jR t2G٤m8R:inj&m ao0j1$IXi uHN9ƞfηa#(?i#2ߓ'~fɊC ɀGDmT[/4p[%fAb-ɳZ@*l~$G&c}BM-rs8[_DŽo$&6Bw4t n3 Luֽnt,zGUfE17yԅ 9-dj-I_}`7P6X %|/%-y\rì8T4N Q/]Gh 9X~cR|ݪu#\.9軓Hq5Z8ExR4@ѷկS6gzlu< Lt@Eҳ[ə $3xժ863kX`[GX+9wf|~xG=A[y 8&)h^ҥ@pfs6{"u u`m#'T%+5:ދ\K8)'7$G}jhq`:ʌ6j ŀ=>uFCo#BKumW Oߗloɢʴ[mYFnsܜ:+%7lU&+8U)55̿[M; aK> g(ofкDU,JD{=%YO$OMG J{CQN`IVKgi2Ns N($XpbN!ьLS9$h?򏈐$.X_Tn0Udp1&%9w Lb\V>΋#ѩqՂ/Uڃ)rf?a1ekO~>޸E%K\U *_}wsAm3Zb€1<1 <_bRD >nm\A&Pq;, kn 3aC!8!yw?ILgϦ1&!GjFD]3~Hsxa C{L-}Iv.bi0vH1&;u Ba% &p 0.{Ĩa\(]'LjB Ftt:QcSED.]ټqi~%䡉|I:U_9d?Gƣ:~/p!ꥄ3o\bgT5FL®~_=XU&B_%g_1/LkPVoJ:E{t]Ǐ BpP_[`2(6PZ&&%ÆBR m]dX| I/}O^kFkNަ56ɝsJR186 `1Lzoܾ7HE=v BH~}f|aJ8$U{|y4BKհ `_(H V@Қ#&U$)ڷY+cnJz#6%O/;]7SwȔL@1@hC N?N=/d>|Y,7Ҩty3@s)zZQEB1mcV,V>/ LOu1!m&[}LOE&1Ph@[sQ^KG9I{6PR}uC@)*;2방%$G N+A4c}7G."@k#ZQZ႟Xy|dPEp 'Bzk/Cp +؊ pteUuyX/š*jx.Fv2.؍HkBTE16iZna5jSOGʈ\` %iSĕQzJKy^%sQ:ijY !5DSxN",NA¾-<̵<%|^e[ojWnӼgS,\F(|S}He ْ gIn'K ~FO4L+Q1=g3t'~+< p^ Ftz#W?Jr5kn2D!E斳/*7*fC"DKn~ڠ.&6,{U9"cg2줦peg*)54zM`yIr*Ӊ 'El*ƁZ1b1fx^IpO /ٌ8pc9E- OCz(Օ=a#DyfI{զ ~f$zueLq31uc jǷFqfOSWbh{ʻ xs.W$\1FZr,p)sM$ g&TURDo+3|V>gWkgDUur F^2vJ>㧓lg:C_eH1.8ba<"7xPQy[zzEv$}56Z"~n^Behy9O*d_a/̏Km| E]&E/+BoifmQw jМN EJU|YZ(}gSKXAhtKWd{>BH::E^$?C/3|҇R 20dM8 ᤩr?4rE]^m ClMBDԤyyODIb"]Xk5~q?Nz'놾{d?~F7ZLVw|y'4x-9,\/Ǡw0'6OP7xK44[n"|# Ɯ\ž"{kɣUIIP+rIumU 9+mkV)FF$kn#ȋ^sQ_bCſʊSNa=[t 9@r_0C{"Rh,k'Ǧ4ߴS /òL-VD,z!ߍm;tCΨ#8n|$09!c$:<ΧpQk%蕨;5[Q4.^%(R/9NgЀp!n&e Y:+Y1X18a!r'2}צ'N>1he~:ǘoi(tnG6vpFfp.ۖ޸ OJ,JSt\';½w$r$4V x 4{'.%=~Ո4akB D`( V"⌁. *?yI <apj*HH!yI8G}^CڎٰO*V8h%eLJʒPq< cЁBtR6E{ZPSyZ8i7Swkd5{/%8Ԯ1F@4:GȖ`옚vUCLz G'F?_۸}U6 <)rmV{56 FrOsggrvKbir}e˩č灬OrV,*~N?,7W;^)`'|'JUg'>߬+|KaV.=;UGN+q+)R"E nBzEMj)V-P\Q!5S}I&[%= FJܵ2(z97 %jqN0"gj4Feg>9=Iq?}VLtPtHS*4^7nSKJuy{ꒁ*F|)ugWTI1tPgh@.-&)Ee8jC%|R%;6C_}ԞƮ 7цfKT2ڜL kb8J~FaZh8m8g1כ\3ĜR4UpwGձ=FCx/]$N1)q늌!ٺ]\d#8̉xCO%[;%x vؠMvzi>gԐ9'q7HB1w6E#a1o^qlz?lQÀNnRa&K@Fcђ_~WhQY8{Lpġ(^ 1__2n2;"&UTu),h”x|ˢuHOwJ"c"3bOjx<4nPaqBHե- I!i[|e-c"{ _ajʛM)|z&BG%\p[Pq |ApxKK/г}qub2^vy_oΘm 9?ϫs)Ns㵐W 'Vʼn<sP= }1HgQM|lnCu z߮ VJfBT@()F1$ uCJdh<WS"%2չhD M?Ʋe>z4-v]CF⹪_F>8goUwNK;_ݔ*"i4ˀP@f\ʐ? 9b4)1p{sKy7қAp&x[ {%$` .jԘjJl: BST0%KGCoSuߵWqMI{|iu>6Ĝ[iH;#*5 bFJ7? tL*w }{{$BEߐ!e5.B3!+FIݕ!V8Fp{pw{6OUqcLNGo^|Oq U>Տ$(mK>i ͛e"H;QT(@d+]7W[@ǤrM7-· ƘLt+KDD'ٌAdg F ǣX}Rr5]E-@;&b^H k櫍,WY.bXY?Aaacվ.e)h[Nʻ}IG G7B|K* glJ3Ag~%li=m.Rοs)kj4\t-ob^mT7Kz b[mgx&ĩo:d6yo띓׭X3Ar5PSsDW*vh&`gA\_[G-YWh4!IɀOfi eb =wXq5݊KL*hkp\[{We&x>H8ٜAw,WS3Hu.;PHnuSB@ZEnatYnIUd kKUa Qv 3nv!gT?L>]9U\~Lh{& Πl½_ek;@х1wѾW9x$}4W.se@k=uu8dfs`eϯ[ .#]WyoM8%zAq4ȅVr B", Kl֝c3hQCeB\B eR!@|J슿jElwYaƣ;d;u1d;-}Pmu QїM݀bzhR,+EƄlt܊8h -ӱZnaĀR!6"sȰJA2,j]J#)N7LږjL˽˅*bmM^{$3E"o.K-]R|ŀp+VklvżlBJ>Jvq_[++ztneu8ءœY@c'Fۢ=AdCTp cSR8ͧc`ĺX!v1$&4^㽊~/w,ǩRe9Cǎ _|wqH)ݵfe!Y%6P/T [u_I_ .ޱJ?t3_<'xH3MhC>#vp!tۯB:"H 4GJxMI'N`CYMJD{Ȉ{ιgUW`2^1Þ/Ok&x񋸊 /{6C~EXSzJ4Eʇpu@ J៞}*2/TC0MecݰSh3'Z2})ىKsHTdI O@-g|*&tj2UXKɳ əDue^Bf*2p/32k ":wtYi+~aĆgY&\lQXocXjݜ̓XJ=N3bJr^VsFV,&J쎗[[ǎdgV,(Zz[mlۯHTe^ qYjB쮬f':a DJBﰛ2dH ,/<pF r^Brv| jwq(o:oRuxa{Y9 m|h3b4O Sp-EMdi*2K6K -L=JXW`T̬1#_ǬJ<ể͵ s(۪s:IFuڹe=Ŋ59V%ɑ.Vd^ Ģ[3dW'A39zΪݑ9 +] 3xߠf*XoE6f &A+-Gv˛gGG6MQQy2ZᯟVVYPX4,d^eX`ձ9?5IIL-!>1p%L4Na c,'<oilG*:_! 3I6m)W Z|2&+ V;lMq(Kb׾dSDF(5?B:_(>׌ZF|z1xib "YȀ_w 0e}(UTm9CFt18>p;& Ex3},3)ߓaKqMz"Ё)VRHxJ ؆y4f/@y~]"LKQ(Nx[{y-lhs1:D́ Pu`ʬ7gN/v0mh}"_AX7@9sFC5&? Z [NÄwX*;_X[EƎ)&Z-T 5ӕB a>V& 7|ƿVhG]=4sm6Fm1"SGOPfIq:ݥѬ>QԽp|PN^TXf:; &u`(Bk$c UN%)Ǭ]{iJBMV;I 7w(ÒAl~)@N4}+V9ڻ J9)+v97za*R !J1LTnaᲹdgO)4i~탫*3;ߨN[5|kznn=۳BFBCstA:ewu:C!iuIL1 ZؙI 7&I_ui  Nk$n w_"b<9L1FgXgzew" mW7#9.e{iB7ӽRQMxI:jևM Xh&UqI=N&z7iR !&Edbm&qX#"mr#+P9kXu %r`=ScFŴ*2}\[۶! _&|,ɖ{g!m{ _qpv`llUShxBSY[n(r=鍝ǛT `rIG 5ZhU "|*"cL.˂cHR)ضQ4 j_#-&QQ8W} ٫)v+j&ųkYoK1pdiͦt318s)Նۑ<[Όw( {F|'+);8ahhMvpv{›Í?ʉQMk9˹́  liڶ;59};3[2Η_y;sSciH$'+<Ζ*a,~D\ lҐlYZfeݸ&)OS؉3Hk`(ȒSu64ExF`ql2A>:gB:X魖b&U0%QI''mxۧ|'d ojwp.Mt] q0)uiKA<aM%1}=|>3h~~}kK\ {(LUQW# ^M!9n8:gUcg泞!2hBW̦&פ]ϋBL&iWjt݋?sszsv{q#$B<ȩSKUjP4(9!beza& `dN{bXVge8>z4B<$E\J:Óal8$sy3iy'֚a&ZANҎV\=?7#,I!tަ3v^5N$i$;!4<&ݸSZIM|6CG>LZ;" KlZiŸB?kŴ| -tJJ_*gz䑽7{Mf ҳ: ׶l-֯Hr} K9vOnE hv3jk[BI>d"XY_ ˛H;xmfQXߤW 1wkeOG(\E6v/%WHO; nXz|y~oȗzV&y"cJs?뾏HlÍiٗ{d4FzUf]^Q1UH`]x 3gfo=f#=kJ!,Hh6SJ䀊_k&S;(dY㑕[NL;X]T57;zqq&"^h[ݎ=ް48RF=jἦP Ϯr4=<dȏޕ/;~ޗ~^OttM1¨rF2[) ji%~B墺qIֱ:0`f.]m^$3Hq N;;Na(aQ-Ҟ,`7 Ẍ́|YW_MiR)ee>T$Q-/H+pgZFW P)f))R?E[W鯺fcǧ?$ԱO_ן}n^+o?ϕ Ḓi<x kҨvl_@%eهnzBU 'F0wͯ-54 ioKsj'm ac@};JBQ*^{22QKÅ)Xf vfsPzi_Ndya"Lw OUȗBOΑߦ!yQgyȦ$95|v?XVТu5 9>\4|>(!1JwJUXk&z]m]Ӣh|?'yWq 뺹X_7<2 OrS ]Bɝ\ z~*dmH榇CnqyBW~ьHZ_vFK#Gc@㣴/&@>_%y۟6Oy2G Wv(?/-S$߻cNr+jI/<@]b*zi^;bw]je^ɃbU}E"jf6?{JOremxdڛwWb:Ռ '/T"ehf'w/Rn3"08nX8@` Vq{ޡ0פ^[:cf<ߣK$Ye~xV~VS4Q|5 %`sZ`"Ud>C䊌D^yHuvs,֛ƼCG0L[tjC-~G9|y8N(C~&l|'AJ 2l_cN'2fӳP}~^b]sM aRdoɴK-QuBj_%wKb3Fȯ-r=J$ц)R/Sխʮϰ ^sA-8Q7b/[:U |Zg;0SWI Q,jvDYe!TAu3%LzEȉb;7C']j3v1TNl9FߔG^|7!#'ϫ=`[mL[U{IidComaWg L1FV4Ij"8k5F[-')lѩoi9tcz7LE9厱HI=s;*aYRyXB '0Ct;Xz5^ihJ| ˌϱ *hdWo0X.Db;bI ,M=_9cߞ lv~AVMn~Gh'DO#b ߞj#,/ly6R"zsȞA=:BĽGV*ÌSwi}?f_#XE&  `oLSH#< X%WZ_DBSn%ygpDs,9oBDr*~(_VOi(w.m"> }J@|-R(b}qBGm}z):^R8@}R9<WRI4V*8+|85N49N1BaY~zԁuJŠ< ]Z7cxZϛ8R"eu}]͹BX)0PYmBk./k]F.&eIf[2Wn\WZ3!5;?ڢFLW+X31%a &tfxK@;h最؉*5Cr*)G,VP&dxC뉱RFP3TP bJA\v/m չry+=΋IiRҫ ;i84[A.3\J-$2FaPTQ1r)`}OWs [S9`mJ-ɥN{̃#@)#%K$iY M{RUccA(4mXb4)a w 8 gpS|Q3yNeÒ\[8"3 .v3ĀO;HJe@\P;wXqL<ي8o>c-![a<& R`ܤYADOd6nltJ7Z6㓍簡Ш?>~U]w$i]TEO4jaTP:kXbC91"]nB7v1iv WwuޯvʲD j4E3g +ABvCאjS. u;5.b BӘrxK'#tIkNWYyS*QUEfN+tTCvd/)CxM1L(:,JP[ A ی|R+er~ Q'а4L_Vrk 1YRp=>sk[o#J#hynck @J>qKu?qT2 IȀeQ YH}"u'?|RB{D6!bԠ:NsGCh.D;g*`ǯrLJV㱸™0JwEl$Ui~@mSIYBcՆɧ8χV|۝S/0a rVjPF 5L@/;K1Brn)19UTGV6ك[r! %ui}L*[ >űEѝ,ի :i:,W{wy^3dFQ9D0%W7vkJ4F"ثW2ihuN0|'*Tn*[Kۉ/l~2-+xCh53b S/Q7qGł%Pm#Me_?eh=)Q!VI4Mɵ($oE۬3`46m9i^7ڗٖ@̆s|V[]ʗP1i|X{ @ԛ?ZW,!oD{ K‘Πq[0\P)۽gNAgHЙcełn:N] J؝RG=MnHE'97.UaSX_a봜7 TPc@k[ Ej.e H,FN܈P'|ʿroH@@܏;o6ɩ*˯y%ͷzuYKN'5r; E-C4tnBB ,>KSP0+WIukfNJ͹X?~dHhE EHqLŃ0>I:GtkHH2ɘR,\Po4XdkB<_h^ǸؔTcm^~to賲m#`$R4&gRa a ֹ'ο5H inj4Bj}?pst*}ߥY9x1S Ď$[h몆;M\J7\hH -_ic;oU{nˊ]E,$YV2Vs k߸wg."Tv2\JwRC-SC^c<=)Mc0BLSEYe#! j&%7XJ;B-L;pSE#5`v}!fX|qt% C%>.b-e3Q#ّUt΄VǢ0BMRTn/q% ɐ2ҜSڑJM=9u{?݌j*7.C=o6H }pU* ȟ*+JDs6b`=M& aJfFAU>%yoxЫxӷ` t/]Ϡ9f_l8+nIeچ4ǤcqlH$o{W8rMKNi.ZV^ʵӡ.IfМXAd.tFқ;pϏz5LBHT? ͔sZa@.esgw5p=ޖ@Eʹi9Ϣe7@~ lБ35HH8ɶ)it n ƉmMY/ҮxOi OVy~'cބK[<ǷACS(A?t'Vw%Ҁzlɪ׶L> ThI윒~(pq2XFKl>Y_,F7NzB2Ag^29 6fUnWoM3}mw %'ޞd/H-NLVVF7m# 2g9$WCx ; a℻Ď[5ZߚϩCTW&J=RP+pskǓzqKީC)?( \ 5{xU!3ge q ͶD&sEVlpSwvDD̽ >!#X|ng8P$k^AO"Nhj. 8|y%/1*urv~1NlJe?0ܥu>T>M6XnWeR*~o^N2m4hO"#iǿ:\lp@ 8ټYibM"ėh퓓`vGXdb;IfɆ B=x_K@E/xỸ* T6Cy~9e+éh b;؉qyGfИ{V7cͮ:Ugx2Ds} 1g11P3F]rp1>TR/,㔼̡sݰ͠e߱'a.ӟ[jA6НJ"?Bmk-_"0Uzkc+ooY ju_Z pp将`jBقpI;h{e1UHrB t<(Ī^…wݗGBɴ#ve3Zd1qbJCf>^`] t6Nw6gHpLm5b^1$Fc!t$yV3NLǀ6v㌉¤E8 ? ϗ8k}F+jl;eE0crҲdɟ bC6C/7I/0mzv:^d #'l)d ;wuSL-lܷ+d>S׽ۗ_eTQ3]ЅRG+ Dc,մܦT”[! zYJ/cș>BsH6)lU懬bh޶B4d*p0p8SE}Ow\OIr&kY"a4dc0妙ly`<0 Z _J1p;͛nSCFTH#-v9k A=nPWS7%ٷ#=5v%q?8ϒ:i(%fYhL!ˮWW`=Dg0Y`[rqoEߪ KVÒe%zj@pSf+ð1E}?xW3$guD 6Ǖ(R]y R{Kߪ>L6arztkIN/gSGߏN-§vDStMҏr`lwp }Se Hɀw۹$ٲ2+rB9(8oxH(v`6m1g=LNڂp=m?/)[ļIU'Ldb>JnݤA$5z`v5r'n+S-=pd^B%VdBGí0EXw(\i#\*=9du n/Nɿ!|,/CT2?,tUa$գ*cO ,”F7Cn|Q. c'),(!>2S)z̟N5`qx kbTsUXKEe!,}2#Zd]c(Njx %lאEDggf:;"Wy Պ?=᳅YGb=K۶hb Ud!8JДv2CÝݖX#ri>n[{mqE^c#~8 kY&} }JExV2q3bn1Nm?cI;tLB`7$M).ڨ6N﷥y_b|uh5 lӹ)Ch_13JIrF@v}GmMÙHo}}~)ƣj'1{Й@l3=^S#̂ ) ɴ[Ey{BtyViyfAd!vź$@ڻve?WT9-'3]#OkE AɓƄKXـ@ԋ-3Q{fkJA8Ϊ̋i~1bEltۦK]™G~ nQn n[/6⾀mҠMd 3>9#V4ծF&Dc(q~5lQE/6P<78;S9 !9}v&!R-rNgFY<'SqnJJgtW݉e8dqƔPۙ@4ڧJ&JiEq}FKk4$6 j9$8po {A%0:u_>m+Jti2 u%w8˜`5AV&c^"Vy\W\pCp)Săp#N 8-y=#*4V~XpGю0G7:hї#md*9Q4=mY?B]z'4xPtJ;7%d%9=h6Vm0JS&7|4%([½F (]@?YXH?*/9d#Q6;Rtr#G~|%F>Q_p.Qȧ1*T48zf?+9$:TJqKFں_^gbȠUEH_Vv^fbR=f+겝ɴ@eun ?,_ַ0ckEWSf.GEj[dNC[JK96@s\W}e 9w*"KZD-:ٌkpڌ@SMa j X$9*?'za\̩:R>7@SPk$9{ !CKҰ}'CgPSRM=-E !BP:꧹ MT-~x{NU!9N?zu?R/lI"ِkhiƘY8nG[PE]!9MK马Z&r.c*T@N /ͺ-8uoa Lk{H'h2 f;<=tqC; nPr7 xHPJB 31R\N;&ƱpYaTpF _P,@شx՘ mϥx@iWAz\5XA|J2׎!awIOMWm);b+1a/Nn*p ^'IԝGgP ɨ&-M#$i彨ִGPb,3\b8O-q^J]{wAZ7jit7*3v% g"#>{ :"9Lך2GNBɪO.4!avfVNOMk五| 녢Ux`cn-L$N;hۦ[d/FvǸG2wTn-{0㰘7DwTW1)_X^^.É\|\ L[e3>P9` Kj P=r顇jm"lĈ2XQujG5+[Yf+B jJ9և>UaxF{EN@0OC)6b' WxdbVGx>SRzs&ZZ> L >| "#я7AYZ6QY;tzr'ν:KrC &'CCVۡm:W 2>I""s+ǃF^&鵌;cVHÖZ>㫭P~רJ/,(q;곞x!aZz0U=_y]2$; F_;²V)8vV*~@)-hVӡ&=ۇY1G҈_/pU* 7X}quS,]6Eu&9K\zrR&H&$}Y5%ISMrb#:XVF)-K0MM7J7 kSDpX6wTΠ+ FS]$59a*ȣ8PJ.T_?jVBlĺlDb0.u1}GG3C](giÆ^hTǎG@#EPSPūx̕dyʖ}YGz=l@z=-(O9HQM N:3G6C׵Uy<$Avz iE! ШkAp +ӫuZʡY$Hu2E| ,V8,l1²k j%VJ@2si zP ?hLZm&#rYFc(MtirKqw6Tq*ƌ@$Uk5 Q#`\rnXx!F$۪ԵhxR*y%,NӋSb8h=zV0 qvIH~LBQcYh)i⋚F{ ]T.ɦj7Y<#sGvWj|)@ ݑJRZ .+HVKwZpC& -bxG>$1/l# 4SuMJucKA˞TAU}j@~ ϺWZ˨'d:˚%EwZDk;"k-#tazğdExJ(߉ >bPc:.rzVֻaAĤ6hs"ҩ5PHIUhL_29/I}>}@#SYqJH{M /zy,TOXPܑ0˹8U{̳#6U\E,86Tpq3$PLw%3qrǀv7id~vޚF9:1R^t[v~Q{arK q; F8OlKco=Jt$^cj)t4h>,Ug0d᫞Um=#p{{~d*z5]~Xeƚ.b:F;YJ)Tpv;ˊc*"W̎_Ƌ&l6Ӌq 6]b(1gkiPVp[ܕxfm50/S\kdN[ c:$~n氣2z9|uq5%(9K%*`YES ΂L8_ ke?Msb:kԙ邺|K+.~ird2=^˸Ωd(=&LիìA9o.OBt'gʳTJnM 32'-&M:GÎ&ȝ #-h^oD~v[irhqe:2 c*K:`_|(5[T e f_̾Uc).]Ԅ^)B'Ǣ%] '+ؾV Lgx)Hhrҕ>^ @2T(i|%% %i4_J Trz]{d(_e 6rz,ѥ8/\f?ɩt80$:0B2nܞxOv}hjmʹ#~Gni dpcrtURh{ߌ8*nꋀR?ayZȈԛb, '9Te,vpγH@'(PڄԷ ዢ}^w)͠6+QGZ&a&}RkNXȥKUhM@>ɾsQWV! [5˅.EG׼,t1ңxޠ-&Z_*F/}DF8zvl 0⣈gRCg֮فQ^Q@oe q/>hAl/el,&(ss(;l2 e6KIZb dt&l!5,^3'6<*x 3i_ 67X$`91M@l{qtM1v9g>}b>h*SH8E*ƥ`Ԗ^,4⩄ժd=xƟ IRhH;Rϋ5zm@ QIq]ӺMqyv#ne#qF/^7jIf#[*V!D9%H&~7 >7z*" ʆH#x1֙ G_'D<\IjD1T{-.壋 !4mV|uЉvzٴP)#Y Øq1'L MMF6+ShdGkg}9&/2 [6@p#I:$mshED_݅/T%nxC_h᷇)ݝ8Յ]N"W7uNQ5-l3XQpTړ˵Н,!Wh5U4&'KEP{tэ؎hnȿަ 'K\^G~ a 5:7F'.o;J+N9ڎ0.ASx⸃S[1GkeI[?}bd&'ުi WL/xf71Be )ko%q37>(J|:;ƅ< 2f22$[DEǎ3 :L@ &T1-o@}X#̔Ed:WzĴ\v.*ßUrCE5n'b$<~9t[8ЦnNDЅD\DO> &ɦt,D 0KȣjŻ#TD|' 'b_+,wjuL+}𛊘LOB3y~u>es.W%uR!wzt5]Ik lUdh#nA'[)k˩u4%Xx$T4TL1b(3><$$ 6rs_yk3wyNYIe^bq[eTuݏ!uc/`Zg!5HgB;JS ga# '2#&h5ꌝrr dY8%R1YB!LuowU"SD|pI@6fԱؠ$12SM|Y#nJ봰Oܝtš@cJ-ݤ&mXd@Eg _O6%`u'RfH%h)dEɊsfKb'^;ʑ^"/Tf?Nf5CAa^i6r5$ae~ T 7"v7u SN/stsn gPܺ,&z3kiPgIQfJgǤFp#G8(h}촟mmYUGh)a}t`|3 Z ٜq[1l%' ׀FUQ#l:$Oے33t!,,\'QJ2p`LCt:}/)-rЋ\."ԋ\AR?FOm\YOsRuq #8jaQSI61qٯC *matat)}uP%O+ϼ,T;!˪^ _{ U&0+QG`3mգHK1>Sr)1\ә$sbطF0^3uikSV`( +rqP(EvBk8#yzNʋg#IK\]$VW|iiS aݞiMqd˜^}%FnǢp^ OB6_y뢊æth">9%@ ƒd }6&ӰL^d~]gz$ &HkW-hzAXzC=>Tf@t"s Nz&/5BFD&~cgh2zNhܒA@w)RsKdzk@;Ɯ2#D*h`~ [v"v\j*(T dI U#VqH` D0YAG FgF;邽*'T/o <őa^QiIjƢ_yL_}`-GphSq5?՛)y~䑲@;Y@ $XPsyEhƙ$ mknA'I 5%]Qb3aFujBΐ0ŷWQ떥{5pk#BYSE>=3=>pcҸ֚Rc.Wu?"~mnc9crYxCK';o{VvMH_@rr&RҊjɉECs7!LJ>9Q_([gPU?HXt M *?:(&a[TޙEس+ڵ{BdN^v :V|ޠ-zI6d]J=@ I"*ދ8)c?ɃJvu;v]_%gq]̾WԿ\by)vϦy"my%8VI N?0Z*Nqx4Xk8{>"g G'Q^0LT络/{16!ǒΤ0'TGѩSph9'+_S:eBvz= #3乑HFs:IT&-i%sfϮ+V@?v+8 udž@/20*'p[v~. ;(* A#]ƁFjD>:F%bnH:s;Ǯr@V/ţ1"m;>QY`Ӟb^^!CciN1/Jm\ᛓNnr(.h >r^~DU#afn$=֠a򫵸fņ7j8>}vxtA6uy2Nj/v1i }tQ0 ZT i_.w:?r>{bfp|rvl-+۵,EburEGَ[YIl[b97S I]#d`oNMʇ#?۰\c&^2D](1DG冟;4/0w6#YFTD+4~*Fr(%UQ3$;S7"&6*aŐ6eq 3\tژ0bsp(r2gV2q8h~j쭉ysise8!úe^aV.zePЋP]W3_mKHt ݃v-hX萃q?}'iVH8H7x#V-f5^s٠a94s%cR56knrhtSOBMO)Ֆdwq% b0Px>W7ƷWe㉟yVcN{:bM߰0ŜT!KE5rGt>B< 5 .J> ӋU@ NJYt%-8٪4z[ևX ?;taCɋl !: K?y2F uX;?^cȗƅras-54B)xiy$b-.PaU| \+o49'-OPŬX"fUo05/IeѡCfrmۯۇ0Z(KU&Rի_@Ʀ,$'ALO̅'MpAGH8_ 3F(ҩ Vt]-@E)n%$fn;ppR rsWZOYR_au/"q41l-VkJlwm`j09^ECp{q4/;V54"7TR$ ^C}/+A #Ӓ4&+O#p{m\@^d^[lG7GldК?#w ~ۑT+1Gb:v֩˜A"f&'pG $hB@H"YB#8Ah99P¾8X!K ,ޫ_DlČ ܌!S'x*ޕ3Ըen^q Nl]\LRUT9OOBsgΧ%yX$՘h6Dq2J:-$<-|_}e$%2dZ #{'.S-T9F\^EȩZ|%Ԥt)]%= 9ȡu*+GM+&9 ePb*\lI.(D r!JSM&b6w|JD=&;_*m= <86nvr.׾nBz-Ϛ >ݟyuMzh%dP%2PFjQ'Z 8yndp+r90ozg$m3if ^=sĔ~ sh@⋙Md6xE4^$)*.̊$zgٝtDI=f(MS(5=x6rd/4TLi]Fm b9UXRw۸qd6K}9Yܟ^3cJB"XiFboO$k80R `x8?C|WW֫%X`w% ]0-T Y_o[_cs߮xa\XO?Uc@TnT'R2HH'?S(@"cʢټ2O ?ֹ(L5Aq+-ЯqԄ{aPT*by=5?ӤW|0E. %;.DJ6` qiУ\Xp+Q `{;רhn ,0[3-XPȸ6t;)$LR\&5ŞCvl3Xɞzegl-EzbX͕θ*A\i gT_#uU=2gɦWT- R4N{><ЈMqY1_ &b xj=cf?UdK,6&(C,!#q:Bsbġ^Ő/v۩ Gdma.{UY!I+<%_RVg<ʼn [η<CNf>֟眸S|l8ʐXi脩$d?F^?~v0O#a~( Vbn z % hS*G%<$1 Ԧ9"RxAu6Z>R`-)ּ`t虄"F?c|e]~ADUU9^7iq{W*d& &<ǷJk@ )SJbFm_b #=CUsCCL,8u99@7 ùIvtV,CD~|&ЬSc *׶:gcvp֎BY0!e>EaN3$,mK$0쫗Zنs~' UL,Kr}G<_CFoTit")/wviI:|xuažBE$SSq?] K УO-(L~ Ƃ:F Mϲ~>;ޠ,z62S F[_JKQhMV|Mڐ NP&H :sD BCg3lH~hMw*AoaX׍OJNǓMEDa-J+Ҿ ׾s,31U4>hdn h]>ZK&5aˡf0|ށ8=`z /0V7Ƽv9Qfp8]9vDx8c!ΰx mDbu"Q2xMd,?&#&F@Πa1&뒂K]} ³V@ћ={b/TܶST5]:!GHo6!5q\U)$c=Sv>CŒq44Z9;WΓݥ[-٤b`HʜZq;KTq(FѪ9I_1vsL_Tlt"16Svm KgrZ(.vnlrPtF"1ehЎ;K)ܯN>(Ab!Vž켙ꢑ9fdLt>gz@8CSZ q;]ȍli PߥwM{.=f1篨+xbĴ[nv)&ӄT.@l?t79E$ʦᆏ:Mf=O- #% !]C1Z;mL6[dMmj/c)cІc2Y=NPA2>ޅ9 O9MpÛɌ_ӵ3(7jZwb|~ktq[И.y3bߠkpw _ӢޑiuPH\vÐv45:0aaUo'lHU3Bt+@X.4B֜̚4LTӼ̴pgb~i#bmL9GqSU+_JGtzb!iU?rVO =H"G*IlZ*1^:)]ԷnDr=^Ge~YBݰigu"FLb$&Vs;[Q!}lBOz9NROA?OC&>K'_f$Pp*u QEkT i&dqfL3~[ݦrɭIUu*2& D%ikf=8 hO&Zϋ<@)kg ,尦+NF7,Jˌl*2$1*U}q\\N)vTON,kzxP&I" J?u4G!JE@JΞ%gd^c<ֳ iHP=CHXnŬZ/I,ݎ$w2 ZM‾tvyaRJ$c[7q'fs&Ć?r4aOi%TlO'έgߕPCg0ya" dJK!A%k1 2e vQ?opUڦ 0 {{V Vgy8Вp1?UĝYrڮ`B!n=3䆤gCCYtd2|Ai<ņsĥi>)QZp7ٷRF۷l\d0\8QT_o)fB Ä sC2R=i`Ce5o e44fn'I{wpϙ1it[p mOe/MaƗT>2[S6V7_o퀆h-~$uPzdO+AW`Wńf LH+V7n-Mί4YץASwy$|gq[.uomBzi&9ҝXX^ {GBB ڇ%ŕC8Fy\6#T?F7Y2ߜαȗ`fO*}.jwg1] %Fy=Wb l0isUOoo=|-$l&غW6+nP j 05Dres3cy/+ܩS6s@R3T+!"03UiZ22E*\aIVR^֮E_NdExtxq/6@qznPR rhek\7vtؗubGL]h0`>5]e*Z*TG1|ٗD E`/*wP?XYԺ3%-{G+EweM8?Ոu0`/84p ct>b6]C6kVցIM{Ec6>$nL:o)T%rD5=b҇gڂD5R|uE`gIG+r -޵jfm"Cz H a\c[G'!=OΊ6q-:lگ"/)WƤCuo\rڑ0W6 J^GȖ`۠6uWǜYm.5ℰsP)|E# i:(Pl$To[S VDvfn.`ߧޤQf"/<[qUe}-P<2*➾/C["zl<g0,1>*o\ݦ;^Wf#޸3RI0mb(PwX[tKԲ=,==?{U7OiM4/4/ab5.f6b'#RFEtk&A" KѴWk_NbE[¤0+)IKM\z"9"m/E=qCڧ[5>[-sH?h r! $weuH "MlGd`DAԽh3_#CSsSTѡM JR:iU~ |΍F(9ٱ%<[\=/⬪w}*׆ (VQɱn6g[ӡ8hXlNMAr mYW6y.>R *ZX3_iC5 T_:p.5 Q.V !ŃnPF{j@靎ZﮋWsa+Q+3LɇqGN:.+従 9hSH?X6]^籱rw^&&D>6 53[I?Nؒ"MjKV͚>[;ôM*f%On#UeȢc+jd$ajHMRqIUH"2!Q "]5)yWoi>O`Um[#6/B41ChYipiC/=JeK@./:v#@c?8UXQtr=j1J*OȠ^ cT!GCM~!Pk;Wi]_:(<ɇ:Vu0n(hw~1;I"ƒ ?]x".J4EX*N} <)WtKS ,L2:xFt 9PGPb9_fq4sQ-E ZT%*4n<騸Hf!/s~$bI>t $z.OY&i[CxeJzٯΧߜgv.Z>X]!xiXoSIRMaU"h*>Tw?d"J!7@2& ֞bB9bVYc7Y'Ɯ5&BZΡl\&( z۸p +y{].թ=&$nbFr7LCv<W0<~رSnXH\-.;-N9 =G9]o\&gC݄ŅTCu=j4e4@P27Bs;~LGD7g8PIn-.Z%,UP£ghZƙ)x5nsVULM/VZSaPz(UJ \[4WHRU(ehvi|d:# h&0iI hPcz tCi^P.p*ݽFzyi:iTΨ?DXG@gRnx+'֚L;>)hU &{9 1dؿZ]i )No"HyP T)d{ P¹?2n۵Ss41ipbȳb'7Dr2!|,zCeqJF!#-Ƭل,B2UV45U!V9T2ϟ];*EIE ke)D- 25.Ѥ6sIߠw jar6hG&@l2<!jȴɅ=8OrJk >-9$!ɱHux0f#F^lTZ$$7! bݢXb/ m;$yD`O/~HloH34"aldVVoՃw7ϲS8эk[ᅨi!6:]dM\nGU4(`.wKR4 c53A5hł63%b<7"s;`p%v-ͥv]-*l)&W/8R@9$xI d4ϧL}:5ʣyW Q2=&lh8tg߯w0lZ/`Ӗ8H#Hg]b_! QWߠ;ްVf:$I0b7U}‹A0](˛#>P7V^b$^XؘG!BtD9<$8᯦ExUddmQg4LeWvgI%X\=<Ψ*;jLG*@ n8SFj0i]&^9;;E#=ScT>!9b%d4w-S vҺEGRa &yO g\ڮ Qu1Ct1whUCB/J6D̷F x]3:%D|rM856P7@HY}ҧusF#ڧEꦨVO˥1o"X03f q(co}0fF5yr[{_OϫMAV̮tͲ-9a!ZDǗv.eߍ/J1*墑bM*$.iZ4}$ƶA/KHbEvs;&JT/E\x*ukdvqiAt-P BKb:P{%i*Z>"+:#Pڅ/gK LX[w_ϝl}<A^"$nBHtH%3Ib 7RT +9캿>S?WEFjedzF[+/j(vN $wV㼤kOa'"\WyC=:KSoESAO(~3m~dF T3x,ӆs6y?|{NaՒr^G:=uʫQMtC(T'D S0rLCL ?؝һ Kkp}4u?1uiwkHRanPreδbϝ0G 1<,%n+B3Z=sMRVPjSCp|3P7'JpqL v8Zi꘲UHxDBkCI@ZiÃΈj+, B/@u>᪨zKޜX.`-;qxl0U/'$gM-XZ%uhĐ]dy:Ǖjq,#VSDyvKd69z%}K3\?YHIsH߿ p>98=$UM4gR[WbKil$h'6H>e@RL\zGyy3>ƈژHz-J>ӝhPNϙ 2m7*2lqܰV/Jl{ߡ gZm ɮ[c71?]eUvK-' Ƽgl9wUS3 .`ɍN2M~ 7h}o=& 6A]v͙ P`ִz?8LOLj˜p4m{3A1GSMa1#d|K}nҟ.}ߧ3V,$0b J,ӐJ}ZTaBp$&-,+#~nYn/dpr z +ISgl`N,eW_&`S!% _8Tcp^=98I'~,گdx0A0$%w+)A(w(BHB 0bljV9LB2y,ot(_%)|hP}EF:y]5Ru;i N$ j2ʏ{|/“}CQZ`+b+@aiy vl_Au1E y2-Y-t-ud A`NVIq5fhIh2I)C\)ʚc JI4wuH[T<1a*н~Uz2B"V[CAh;,v*VCn/(B!QbWRͥ2OiP"TSw8`yFsdWQ9}Xw.0CrmKc}rn0f =i@|׋U4l@Mzud\ڞTY2j,LpMwb $ imr/rD2rn(Rv1cO:[^aJ,E ;//\ f,~Uϑb,IF U(r*]2gg=&/HsYrhq#U'ߔ.ώlK&TeۡvgRcUA#Z ᘯ3q/-u F"taJ֩2orJw"[}.[x 2J6XyE%I1!#.z @!~a7XMyѴ4`7@&~;65O MCCăJ$#@r>G{ᖏ›tdڄ]c@,E9ì]MYX?91@2D0]Mbu^_Y5]4QYyݾ5N<@F=y>gh"mr!֒d6܏ qzERLR ۑċ33/ȵ@O&ߊ nz`O/<fdizWD*kv{,qaV a  (;.kE d]CאӗgǴ=qK%Uf֗}g`teNًM(?`p>P͘2§QJq6CA+ZHs^ v V4xKC߶{剆CYd?*ΙMa%îv~+aF9pz<kq\cms©8wZAނSɌxcjcwY[~t_PhTbv0M@X;z CmPbm{i wAyX%+'!ᆙ^,WPR/Yݟ&yIU,`WDq"vq,O,4qFZΐ?;s,ݽEZ(y5b{wb&iBY9꠾O!v8Ora.G+wYI0(R>(L𴨤14(L=r9v +2[OS zc[+o&^\ e(m>@]U@)v<%ZI8{F.O1/'AՂqІB,>V9 1,?(qhRiɭ R \ǥ*B@[(Jvn_?%j5;bQgupśc}ٵ΂]?a[]r 4L t82LN8 F-[sxlnqc{;ep(rϤL 4K_:ۯ8kToX"3D*[v>K$/g{&Ciu!"n [߾ SyLI/fX5Ǔ`1L j+HE7\eKRL$T`Ȉ]~9H{s7*=ZpʩF5!{[i؁|Ym@(so1}G3S]_qctof Lhyowu~QJh>sjŮ $cyh.NRӰ)!pv9`\lF.?>zJk p3؉2G [w]u]8&[C92r zt uQzVqTueI`O`J AӮ^5=LVbPL\.v&l&-;2$q覝V{EmH?+. [m+븍4:mm55i c[Gu{im g,+o|juTV#̌ѹ b->{J}y#15`֞ _cqmcXGᰩO+A-#,lQn7ѾtԌFvwjGR$}NtSnF.SA5ȳ1aל;J~ |`M"F/o5S"֕,0?}mϛx.!=o=RüA!a7to+߶i<^z떲kH_gigG; NV~t"Tbq^}"+{f(Ѐ~¸6(LOU&}R:5d_ĠIy $W>&ݛ…!lzrr˕_uGED@6ChR})1l?uOl}wl2,q*Ɵ?e$I.mbVLPbk"UHѝ Fyȧg,c_௽] tۺM2NgRo3UF͟פl:y1p7>01qN&N{۸0?=1'Dd:JXTPqnkc>䲰!xs"l(VI2>Ĕm{2Ĥm_,+glI q]Ѕ$m!{@Bk8wJ;;-Ljl%AuUdH3ˇeQ hܶ2>N9=T2θ-ʧU?uqK UA]naõS)?h3U5 o`Nt.Ol<-^?<  @io&)`;Rό_țXP#sׇhyk/vNhL9iI@icXTr^uJ>V6L\1fB%v[sY JSM~p,GCeWٛOJp Nly3y\`J7G<*YSy$S"1 MdNB1d !h(]TP2alGpxE2q;zF㛁~ųʕ-q\nAY`2žYlo<(_ַ%sy}SQ!k6 वc3P\+]i }ku'tO -IngN){ø&:{__f-Du?tvswgzP8B^ij&8ѳEh@`ѽQ}mOq)2&c`QNpkl7GAoF`wxsZN)+ZsҨ`]k;sfܑqk( ^>5%j(]hRktMKUIO9-cF5a$Ii?%d^ >Q(k[ a`pm+ϩ}\ki3lL@m~ӂ,cyW8{K=bWHNIdr u+JZ RGczWbFW'0ފht~Q:́EC{|kDQg6땔"qpmgTOn\L ml@JāR$`={# 3#*e@`L=:;omQtI\m0-5LGwe+CߪNytIuR~hg(:w E;B:% (zz @lmksiy&8q;u3{kR3D03h6M0lϨ̙\c HZ:C8yGP۷mz,X ^ݭob`[޵[QUdbLT4h\OlXd"zIq1p\3g1hhar|r>Wd IS9򏭍+GQLNe؏}d-HmOAEtl1meZ~֕0{C+Pl* h*^b4;UȬashvH~yG.6P` ^[58Ap6;:Y%E& *]$jI,BXUQfb[L5qpM8o4F: 艁گһ?[gs`Ii߆вv3;C{68['_o??7DXO:]@A..,5'X͌GXTi̡$EE`2SfbqvkvCp|tܧFioBTE_c.wO/ȟ^4} fuĹ9Xm%y֗r)AK{ ߨ=`T?:p#FB/Ԥ3Ax~&w`=zu4ňpSI je`EAfr6T8ʕ.nw8p"$E_!=-)$9MwDU nIkF*'5.%׳."I>;7r2fv3d,t5xVHوTۛP'j6& B.YD9ȣ$ozG9`Gc[8MgQʞLjF'~{ѫ*ǭVs;B5k dCGPO69M0NcE4#S!a=7>iw&c)zN@Y8'b<_Lx혼.’^fOO`l(z)q$@yuo]9b+ qqtY1˵TCXI<7OL0%S1Ds*jDs}. m8xb4}S +-x[vɵncFi.`]AJv,H|&KK0_zFU)s{zq2q.|ܬXH 9K =lHgkg)^<,tD^nM͓V44SNpDq9EʏYKps<'JD.z.l}:!u*~$vb|?a?G\SHmFl(Z{mKMrGr@9u/Aw"wCO_qy=Hs9[Mhm;p.НCjyFv: 2̫K/X媍J@,qO7t_^# 9dTK Kմ`-bؑq%bȸxyS9SB(J\hjyx{> EyT$|^S㡇Dk#$ln=C}8` TC7;zk]U5@Y$3wP0n]A݊ Q7;Ƿl<[rcէ`nѦz:,z].N ۧsn`Q\B2o[Xw]9t;Ν◔\ի dQ1_qN_RB$|S>-"'l1|臘Kl+^0x.f摀ҷZJ<._ݏ w9e 2-%&19\&}jӮm>a\KYPF~?/=&-CeFcbd̥#gT}(XzYz{+Q@>ۈU0+ݱ9&=-mzÞ \1@{gx2ϐ*̈#{vI%gG9Ad(l>DxaIi3 h~]MǓ9Vh [EyרS/Rsb, + Ԧr@MpJgH;v0xTbtxpC rAG"3,'ޮm/bdӅqgw # Jv@.D`6sfx|#_{cD)pC p\`ܶqy2>.HMEc8Ũ&} OٟZeEy,1'qqd6N3*L^27I߻W )1=ngATYٸ>KY1]n&c{J +(SC8ZxFގh4Z[oJ;rʅ.6^Y9c$nRx茢}d4uѕ :o@Tl G3'$lJ`X2j~4hٖI#wn9u.r{턙x-#>ٖ+Ѡc%~) D'Ox]WQA5Nv[{@\NfKZa:<#N"0sCqpXJ:I1x< y&cHAGڴibkF p-t<,5 knj AA/ Jz("2TA))cSP۹+ iAk+Sv0E7ކJ )$iZ2et ۍ9"ˀ^:9D>=<-տEwyӏ݉ Ѓ8p#r#QR7Cx:HxTgG/IsXf^}8~y; H)kD`Wf:OS$b]O)ΩBQIAgx357f|yuof_\q h`Eq;LŔxJe~߶LDžVXe 1t7@(+y)Z(=,=T/y;ئ&KSv | s$he,Eg3V5HGw~YN{-ad {̈rǨajp<;E䶃ppٿW_*y=;;:JnVX#R܆R\nu31Q4 G}K'܎C LGt#c؉C~p3enKD%kӠZ ktYQgqAh\mS$y~[Cy0g곶+sM޷4*J(mdA E`'̈́/a>U .D2iR n`}h. tD/WA?F &QK{u%= |M#nh>8EY4*;c.}h:V84+13TF#ƫJy']UȭJfRw.90jU6zLȑQ+B- lˀY d)3Z^=[.RkVt}qG7S`kbS+:nMˋ ^L +1%]%}NޘO4T=i/#o1:;C5uvVwQm_%\.^P".F|:\Nin]ҍLbg!g}%Ą;%_z41@glf( W2"T2rVpKuP^U8Sx.oP,Yw)cOش$Bu0)a/h$9"ѾN^ o (Xc7PCN>*i7xg#QvNv./]*lnPu\45s]#*¼V=ݤ27wwlT a>Sl{2Q@!q8PjexB@|=N7;`[[+uj:F*srALC%u]Lgy 9;=1vcwg_ޙi>Jb(lƩ.tVZ]5ɯᦻ*+n,L3DwR^9O3%o~G}NPa1&<&-dB_ P{|v"Dx&gq7"VwN1 d|9`) 8I'ۿ СnLP:ov.5fٓTxv # 귩tX͌̈{mRgE~^C$\_& ^LʁT ȯq:[N3Ō3@[ s#g@0W, 䫔&cOD2HZiw{9(@,7z;aT5A܇Y#(ˁNbk[vȱ7@9?;v9#G{S' < B Sd'yb=U."xul!毲{.4siSSr25f 8;C&u`Kwk5Tn?uDKQW)ZĞ:Q%jJ|K$I;!c5wήMSZGS!Vh+)v?7r4]0EfL#%p7uJϹz#WH ns-v!'켒 +kZ:2Ԫ& m][ ^RH]ROugJHT1 z;aDÏ*s z'k 09!oݯ1i>GgHδǖ2ct1I[Oǒ4$|hS$ZxӎV1N=ݺhF/Ff^Z:50! ]~7]XTAusSd{3wz*=Cd )ڳ|n|1uE944K|#]+D0Ot.>7Sfubf$5Ċᢂ<1r9^_PB( ~K6}_L +Yjړt#f;Qq2je~mU&0w|ڶ班{_|| .38CĐ2|/q*Ի(diBne5ͮJV]"kz綝ZQ?&1ݧv}yYw?ZW} 1lvv[ڈAlDPP@qW @ÀXV/<_DIR͔wiêTuMYǤ-. UIH5p+ /ei_.hIxSz5@BY>L7 U?,S5ǙLtEJyûZlWȔz[<vZf|1jڟ$ETz*u?mG홟0ж摳Y\ʃtoFr 63j~& z] 1z&QeYdLj/ eAF6 `[0E9%hIB.=7vPD_!V;!їwIi*)};S:\ǭ(b@v099P뒔L04Xo5yHGkK7]~黲LakU+6@{TL?G umx7 *wdi&T9ɊKw 8::/~MUZAu[)<)}Hmbo\MqG}WjթC>PL6%[˦!01ШӻOҥ ӣ/%3Vncr>9cJO?? 'bP=!X&$AQq=Hu4Vo}?}zw~/p.0-%ۆ `J"Ka<iih`J^@[ֶr~|޷_u V9wnUsN*' 2d,Оh|aD v=Hx]fq#q~~r}zȁH< ~Hp%X ce^R=4(c+>n2=qۗAGk]-BD3茖9iS΅c(T6{j+ 5e豚B[[$] ٸcmC]PA. %gW8q,@%1,bq!Xp~buljVkw6MJt.|_ΦNi49PN ?{m3M9/``k }1>F'Ym2Wp>6ܩc`O lN +bo٠񹵭6$Gk.N4!?ƅ:&Zkue nsj-*O^ooc$8 _uztRFqUvsV8(ɩm)qX"RF8 dzK<}PQ"GDL Д~B9/ʅGpahRS"9c}]mAb'Vy3ڃ)ڪz>8*F!xL@Yl}%{`>ă,t6U#J %V0 4D1q`QR 1#KhMѸ>IV~6Bέĥ-GT8YH4v6jAo飬 Z?"sۇi3wx ü>}Q.)4iODPhrɞiӣ/_gVGZ}ENbݙb#k44l AÏv' !}A6ho6}Ho7)n)`PVevµ _` o7~ˡ7 >xq Pn*@8;6>:!5.o?MGW"LR\[K} $ 2ԷG"DVc?կC)_^z}b9=v7=mubƃ:qbq߾AխȰ&o n6 s!phӣ>mGa7vc,ct 虤+Gbӌި>: S(,iHpAFZulO,"%83btgN0JHZ2L2i~v/)1qT` ZڙkŜ*'. pnB$`Ƌ SzQqqaaI^؁f8a%~X7,*]5=Q0gŽZdʂXW-{ muT96vݯqL7aAt_Uukwm}v 4oȟ/B]L.v:-K+ONZjmO+נb/&$"&3qiNyuݑ`"L"{UPi:ErR ێzn)'dL&b]焥NRתlBx&._KܮZ3bA,Sv0zB %,\`ì{Uw$kc֫5ٴg]w퇗g5xt h[gk ǧC,FF]i !Փ5?_}QZouU׹^m\%Bg}Tr38ԍh=JkWη=ӏrzG[<˶ֺm? ZdJ3TQT=(0fL W\FMg ͣfz 9?0^jgNe཰A,Mbu]rԉO&\^OC2ʵ2 O{hVx!xPFIe8G'[^BKwLjX}\/ UڧtU4& M;jqIG꺃9bEpH +dWQEioN0ꇛۅ?Sgߣ֏uZu&Q]؍Grb;|-y2u!ͷ??}6t]kU3̀$毥v>\nGO^DzTh<^8u/ɗ'n~/?{]_\늨nsZףhT+Z^`'ڱ\HvZAQVlǬX}c۞ڢ]c 1z0~3٢>).%t6'O|4\×_+闿nO95EV-UI~S]Nd!JG{ Yj?öVr Ө=2Do)}(_ MW| CdQu `&n hF[*[8Pae|)cu_Y濶Zbrk46g}VG=fQ5P5{}ՐO3r; &3"G^5?WvfHDRb̂&&f@1X#5U-d}1=}d tB6jXu(.l[I0a@1l Fx鰞0a~ݠ\r.$nփ̬\F4dytB/ùC!OEy<+f3f<:S$&tΓ=9ף*-I5T&ps;^ /8τ֠z7oRs oxDDR;H Y͒cRbҊNmilXC?/ۦӈVm5$[;}]2b9|y@OQfQ" #r`Wٞ7J;gǴI쵝 f|Rj@Jiw ߺKA~_ajG*Z"mTI;.OQ!wύNc.qSXnz#( k?>VxX3/fz|>yy@ӂ-7r ^_t$QD ybh(+YȪ`*'M ]VZЖvw3QuVt-NO>%8k$@fs$às߅"}=@7%4ه@B~mmL놙;!Ž>$I&nXnDPr,XS;%`cnW vjw 7q| p" iԗ~%q =5`,F+ٿ/e-dQ NU|$i$\Z6VMjЁS뵼ƤBH+r?M +bڇfW"ׅgOy%ݖSUO5:DJ,ǏJ[Tfhû,uH}igqMde7Ri@ P:Q1Ӎ; [V4+FDOI-NjN N ևGcnEC0=}Yo~gl0/\i^_񁼌'BZ5I`vyf=HTYҌ[N8 y{Oz0Exyo)۲,0d&zwf`d)݅LJ H~YZH /oO?Z9Lw˨FQH&Y#Ɯal|zDf4cfR>ɴEyM#psERlZ'ӭhXfkQK\-G+}oK9Cj +qfNԒA߹FFf5\&0e"trmL\lZuʹ"Z]4K QI'h]HHp{&[8$Q1Ȳ{Eb揟}yDŽgM4^! ǔ N1,ڶ;l7C]g[2zeh%e9 `{N焭z%">]dͷ_ٟ`Q ` N%vNv'*­A}0 c%^+,ovWm/蜻xD<}]_7[K?3>gO_ecq?̴RDp4'hXW=UY{-O!Q2vL}ߚ}ݙdC̠㘌S3D;(֪*]"3jfZ~qIb:/Wc~gF:\y!jj *s'}gfc? e;#]cRp"[r?~(,6MswïDz*DX6\ڦdPD:5! rsQީ}\$o]Z[ \OCkLn2O7~WlpZ3ilEF6.oH3ъBp5lu,xy#q|<K3wV,)\??&st5DdY)j$Ed瑐mݟ3F8{bXt|ه/{xym _]tU*m3<[vh(7z)$*=yϿɇq`86&W̗pBEILa/LC2!D F+:ŴXWtR$֐`@e bp@(rƺZKRg;gE0F$G`wr?}G-jsbb8H}ƞE*$B'QXY[SpSJ(U+c4(l֪=h&t p?c}Aս}X%BlԑCOK%ײ< 걞zzsa80QuqK+Ze*Jj(l۫ ь݋SK2UFbp1t!]TG-%EgcL`϶EcXJ*YL(I=ZAUɨj.5c% ~{̟^2߿+P#q,e9@?R!.Pq9qV^,Cg7RbW;yP~vj3Fbh ennwrZ͸(!۰]dtv%Vũe-nCk5 M]@iENe/ Zs(9\"cѭ#=읿-:}11'mN>g(68jH cM$f^;f[ 0!Yf1Ic[t'R]3;+)Vqg԰Dj\@p.!v!u;tu5e .fW~zK#TrjMo~܊C4*)![, pDE~ߣ掯OdOxnM_P dt"kqP自B^ ?dk" lvZq0:}S8%ӵ0rp/Ik̉ji o`g uH׿oN}׿}GǗ/޷2ݴ\swvӾ{`KKлP BN5lϳv+tl–bczyIA֞2dD_l#$4А&\6y!:sn_&]EÏjiuyӐYBl,Nj8cW]\G1H'N"_\\#LW X|f- iŘSvgb4_$c&d? &|\#:jxi܌]UZmRb,nֽt')6sĕ@'ո#8=k;,038(|HMupJ5LWҷҥBtQUX krq|{q.unlUuۛ~Ψ3˥ T42|Ӎk ߞ25e7VSZ{ǺS*D׎ͱ]A1떣Flo,i"/gDdFk[YԚFDoD<6N),ѴPj`QtB: *?տL3,?~?]\[onmqFHiw}xi.@[{~N' 0rߚb/ψ߃hJ#V CrR>оW?ɗ?Ununnu\#Q۾j ŏH5:+\)b?@.hr.(FGzRR›zxi/?8FqmE/?Bd;we~ӟ{n!9 {E 02 EVڶ.cק`V Ӑ) eh'3o?+-Nmf}^#dv{p.ڰ 1V&w !'1ni=Sٵ9Y8;kзd@1ȸPe7kdVZ1 H楷֘C i;fܾpC 3X*1p!ﻵǪ;64.*u(kyHkaxVB.3K%q߇pyz*Ɖ/]lڶu g*J_mY-x8h?e .xdE7!jluX`;C?7"4^+08Yi"/ +*E՛I~eG%SPØ(fn+~;E՝{0&F$7 S@ K-%3J;_v_. _ϼ$B7Th}TU3ܓÀ\U ĠUh= 'x5EiA9"}6"ڟV=ByMļPbTazw\1P6FnnRPŸ"r>$n]z}^u6:zJ(λ]ز)`b| E1#/#ɤk(ew@Z dJeܵif'Yr%(+$D;6T$*gKDpqt] _ĘKݬg>V+ኑG /11pz&GM:NCECwGH:U;$[H &v:[uWoa+)8!c:J4cetlZf[?&0pU%k[l5վ?)FM:^wv;!j֯]ތ*qv}Ǐ/v,/V(TB>Ȝm{W_EkuOkr :Z{nH^.}tiIzӭFA'0WZ{;P5!+*WZwׇQmyInzUީڵtG*T,qU!tM`+1PtOA%9lԾU!߿Wo?w>oey/޷=e^[ίObB&4XQ!k=.ւcko]ȚC:cdx*^#38#I[hܜ={]lNN0V@3~ڮgvR!yYe~.p*kY2\p۷Nɠ@-t `B`:0]Pߨ!/D)> )BJ}Bk 5toŃI$x 6PzSv^lϵoyЭm1{-`l#tw8Dpc\Sݺs3+7Y%%.} > uDl12ݚGAŮ4jgj5T.fL6[/E ;D%ѵj h"=p 5V-_?qd}N%zܝKW/ΰ@8Q7GpX}y!|ƣlGy Kf镠wk}ThJV-ia-ɵyS"R8Ogj(ydUӟHL3iUw0 ~zRYV7UHJ!NVT;BVG)&l9C\b1oRŒدeYF fK|uCSP8$_Z",E0sH2T"߅ݍWՔa`LM;VI3^ROX$н} QFi!~=U2F.@&uضVV4_}tmN{y3=WN\YUF 2d5ťo>^bڅMf p>>Lbn+#<AbwEȑ\~Sl[>){7!08{59P 1=$Q߿5pv kLHV~x[."aU?}?>svrWDjw\WUvt$_{Ի,Yea>YYU]A0 d0PHC#2L4@8Օg}l 5UZ-#-nĽ8.,s)H1Sgs$9U L%l]]7^7}69>cJyh.:G25$ɴwC1w{bRtIw2xG<TА'4 y޾۫7H` L?ܻt#8aXٚ?cCcӘyJN%͋*Jڗp$2T^%E03[92] \' W jEFk{~Jc[@LJ3-:c]'; - =:.)!fܸA"KԬ ABcpZ'N:?ْi\.s2@ ;79ʞn`ݿs 8s4sYG*(Wn9a'vj9Wqk:\XÁ[0 A)59gwY#4hŗ5jcD[Yhq[K<7f`滷&WCJtJ[~:4TcK+KS·3HMK)96|eZ+M߉ʋT9} {ίIrqyuAqΡhїHzd^AK0tZ%3]F{6b=hCQw{8{ޝƣ;q 1}g .94C9T|G|5q%mrAi9Jbz) V@ɢjR.$&(32 h2~2 oRAr'45| Ȫ{_vTQU4hR!.IօÊ2p5I9 <7yq؟,/6(N@űq|e#,=5/C/=p.tgh @UsO9v:AiNaOw!>)SOdvNkdQ?/P<K q%wm3dz 5Ʒ\O'7`+lELbާQïo4R0G8t_9$qKeBTQW.>ǒ|@ƏD_K0R15xޡd^-8qۺ}E = (h9Hɪ :iWP34ucձQ]y;4IU=ZOk^Ⱦ%%uXYvY4"|B GI2N(ӕk̀ Tz2pG*3$ZΏ2U`tZ>h@Q#M`#'$܆nx#5-@;sѡn.E'I=k6Y*5gis?W˛"2/;Z0wZNtubӚ2J*tzv(ĺ:B֫ lA8OqY8SHbҒ`@kE:"rRwi ȮF0'Һ[rȎtzUd5Z}IW_Oz糺ʫ d @& &I8WmE4aIm 9wmٟCЃщK*Ay>zk wM: M 6"sLr-dR2mUowgnU>Z;Q&\X $ne8r )VZ*l Yˍ&w'H VnSN^啜|ϵ4G% @Ώ3O-MXGRΈs%ZN"^ce񉜖Q>͑砙JdA^-,}Ge@IһR}"ZmZXGD".X/K1w Fܷ 555HoɺzS*8w%kJM"h1,86H.s"3 Fvd{&I@nsIU0ϗSj.߈B3wvۛ keRGc" $,LF" F^pN<,F (繪ivnp7m)T?Zˋg74:浛>>/j7B麊<8=ra&'>8[9a,(5kz0GEKw}]fr|δ_^Pd|P譲$u3T߼y6K_.8qE3{CYNeK;I^{2`䀶hiH5W]1& ;!'5vD9qU݂3}&ƾfwC9D^Ʊ~9^)fGPgM_# e;Vjk$ig_K}tИE烒M%AӮ*6ءzW^|}`yEv40swBtT{;A1 ( (o nW=KDVjR^{ډ*,()v3H.eD{ l]R4ĻwWd_ tψ0_K3D,5eƄHR N2'RWw"H>IBѰd ozd VlIUgPس񥞣A٨E|nK95?OE)VR ; ҙUqEҼC$?t'$F2i/888a \SnIS BCR?%l  䜡ءĝ9dj,C4!h44r4m[*LC˞ fYq፬3H\iΞ4*c"Eң@`3V 6m-D9(P#O!_3s綈˨O ŻkΎPF[ eȽWmkiH6L.rnTlݻa+ ^`Pvt48 Z-T6e u Y}$ Q+L AH&X_A|nM#d7_~ECY;t[g}5_4Z~]W C9,Nao31 ;r4tT'3 $Dl-Uw"q>FHZP^+/CE}-OOVLE۞_q}^ F+9Es׮7;Znv`HTCbkw68F8i|r'#Ά^Lg/hlB[ew8]WvG*]٭HNI?t񹃘yXYki"ηr  \RRD=NEEBIynwٱۮ&ŷs.TV18Ǘ:tPq i7VBKIw@#Ry_ ͽ0?8ڈ[zڋq_ꑚŇZ!{uu1 A3K FiLGJ;/FbvD+"7U0{ĽX?Zz3 PC[>0k zYSc؄v(ž(&={IXUЯ:,q^O!O14ٖ˘AB&U2Jebp!D%\CYq1vZ}ړb' "oOEC5Gj+S8zs k"&#z$'&9F4lmW?H/4Lv|R|ϡ뒪5/(Yr\h! 0%Ѵaؿ0tqA0N)ŵabAƤcS6 d "pg46\S3c2*rH.{-"nF[q$\YIq7ۻ~D .沣J$(Lq4 _> A*uD2cdld^#X A:m DOy*҉_]MZZѨL8ekx4OH jv:d`돞(jF ˳+'iʝPꄯnc?PKVr_d͔fYXFG420, '!&bB?%̲X+&/K+XO4|'1< zI~ s! 2ɦ')qeé@kN7WnI؈Rbo1Hh t-j=ݔx&~УN :"we>"P9DX`-.b8`"b8t 8 Epp!*G=.9Ma**2̽T@"5)Ol[#X=qI1 9|^FAp+B`*8C憞URu7'|Y/d|ּ_8 &Tu|-NEt㸦)$YT^z,Ɓzhɛ,s2@Jaɐhu9*$>~-*_JA Op.l"5ʎ^>TyQ8|qb!OV1q `eN]9vثDK#I,S({]gk^MHLv![E8w{ W4|qs9~ rA$XU2;S2Be' aNcm/ *ǩXfE2QXS<Şj{ez~Hhllf$q.D)ixIѢ0NzAßpB]`G\r{#eA4w6q8SH ~^n%Crl`IRIIӉW689Akjb+ )mCiPC١wKvə~(iIѮ Er?Q' &qhgz_dq^ ~PRԇhm{ ,+ y猓?tZ4N>yrMnaUg 9ǝ:u8#<1ew.xyF4W6Ʋ1ƹh|ɅM]ufn. Ŧ< `efj& LoZd/DaA@qՀ!]3s[^ tp̲ 8U_H xZz Qݭ2XgL&C8YrFZkpP0MOU.=_R^8ccH\EwOD AG8*Ε;DԛTZl#70lr9K{($-:cη3qI'6~i%. #5j>⾣>/bD=*+Y:kľ,-Sq= +R|=2p}֢Ċou p$-B9i+4@G+%K0JK2 B$Ev^ZVud<%Bhl#C(5P3r@xk9トt2@AOJJ[Ȝ,rA[đG>k*O5:(Ħ\<o95 !"6yCxT$IY2"Fkʍ rbDw,Z>Sz.S,d%'(-Wo LsҎ "%lL z#¦-!NOR?#u9pĔ89'U/يstV!n R8餱TH,>KYNE^5v2?9s= Lg4KzJ+MM"҂QKq~mWԢJQlE:)!\[]1^+} 'vV D4%㨈ʧ$KQH]'Fi*ҭ12j0u:&E`PfL{H 7] |Fb¥HyNcS q0vWCJ5M`ٵGp+ާ1\a(j{0t# 7Íj;D14 oPm8+/Z5sá:~] p<^{^~N}a&ML{Nq)a|M.1dDVG3M*όJ8 /K`^2آ,(*8:|t>'uUTlo:'|#'NrZ1p=ӦȎeW95_!b&wsT"@{|BṜO. {eqnz?dHpK?)ר~t P4a2?߯9J-Ȫ`5Xψ~=321p j$K܍ߘ:d5Onؓ|ssvz xG٣b#IW*Zqj&`G F$iW4PeZJ%4Xw W("*-REHP^O!?u 3k`d''J_ pMQ65{>rH:i9[VL+uڦ;pAϘYIpXATkGI$,g6KVN$'~j2Q;rfPsa\!^I0 Vޤ$!%Ỳ}v8= Fli6[c{Y*0#q4]gdWch>"BB[XuyZ>q=#D~Ψ6Q,(uUmf3&L-]M,$Y6dpZ,NCPvP-(Qqn|n`+x{iHjlUod/P긍&=Q}Ed4ESev$IQш)Y̻šĝ#pp޾Gsm.:H.G$D!`4`0W}ŷ @Gvр,&p>XKTfz({Α0r*I{Es6Lm`w\" Ჳv⾷Q*Jͦ\}?y>Mr P6O(+a4ys"5x4M[ہ7y=i-'նmoùgBɇ/c!?ocrQ{R wfMX`j&YѤ4-tx5Cl.ܮb9ꍢGOD[ćytEp3#b2v#E 4j XQMN(FOho/d,AfEAb ?)e-7YK@ݚ(;Pɀbhq(z D~S GvL\8i) v?g{|mm PQG^nP q(offx2\8"s(4fq606~v7n!tSo" *Kv|̀ :ю L41f@_^.MKw|;mdhфhTԑe{m=QǠ+ݻO +W"/GIߛyq2sy`E2Vj+ A4͛7~XLrn/|9Oly2=|OHq)>v}|5-Mw|}ɶq] >f|1E Ƕ%&G]E0}:crč̕KIMCB]^2<&rW[<eiH8&k3i0gY(ȰDj¼}捹f7g}f4]#N3Ofw-4NǾ S ,<^%ͣdD5LkP5C.oRT%Plv;{pH-0޴fozNƹ;8asQК `ZBH)8#4_6&{<ﺡoṄߎ Wxwx36 jP45bqq̻iTجbhb(OO{xv&<@etkZY蟻fzZij=Iul-S^}ݶUڤ G&U܋  ҭNr'n$7kk".$ zٲ/ ː>rX: @LFo+k6$tE`2Iv2Ì0T:Μe!8.-YrM6 {(K|ll $}m8^X}9~)6u^lPbG, rS" 9+فFKYQ; 3uc*|8VCIO 78>z3jIRg ]ewcv(Һ>]ϛF"nί8A)}4AIӬHx<vz}3QӵbQ<4Eǥ k"@X;n]gTLc#)=GW=+aϊE^WZi>H!g5.ר(צA~xti+N:$ZEY <³[s]BVfr;yl7?/'z_YLw)}⌡G6 `z92`H3O'EA D4RgLv vE2Lͭ9Hl+^/H,b+ Ԑ Ye{8%㥠> m{܊*6QݥE')Yj h6QF wLJLcN׬iَ~۝i@ph2U#-Y6wThk{zy[XiD, PIo~EA"mYUa@ko{#;k"lAtz ixq4=xIݱf(qJg MMzY+wo~1?NgpAPYxxx` N/.?dogPg|,PSH+ ÖU8J*~,@㥷(Sv7EsJI$讧݆C!M #tt.j\rZVHB8Fy,S@y+b/sSEa(^Nyl!t4Rlr)o߽1i.r}{,J.dޣV<r|mm]Ʃ97/7+9"rlpF ؟fyϤD,i'-RTET.~8G׵WEUyvdۖv >k_{ HqlSW 雲=Pӭ'w>NCUJBܚ 0K>IyQȑCf!!;Hc2e?l߿`--j#ԃc; DݠK*B!]P^eFLkDg&ds,5< :ƈB$N܌m㧏q\2=7b ? Ng9_:>I.)bbZ.?iɢcO<0G$,v5%ECU6$޶D wQɆmD P{.󻦣VDDYoJ5MAP@̳CꇈI#s6]H½pO:o\+@wxT6\ޢ:9գؐ7P$vrܓ&SUh߄T5-, ‰9M8ת9g/ʈ1i D<}6eC$C@H yt%aSj i)ȶ6K8E9tCva,/ #6톺8s8;4 oAh.C,.HM=e y,@yǷF]ziO5BnpDVMĎ>ao۞B\oAd K?* IAu͍2.R[㖡t+PuzȨz8NW5v|6״s{`5en~20͐K=i Hu:׏/B0SnJLVKYH\[8_O'@ͮκ][X,6?|ȋ2?+70!AL,֗rSI\VȞec i}||«FGC5Zs2B8fok˩mZ3|jw0p^!?!_6RG(xح7*2 "ÈK I72nB~~9+⼌WDc;(Mыp_`8? .1#ȷo8"8v[\gI!:|3y7;G(.p(Pn^.WC*.M(6-,Klgp_"o:¨ȋ0I*#X \b]R0\-QvV-َsw""LO2N)k׏P&d ov 숤ո+0lmzv`|ÕU>W "+SD]}?=_n/yo~5a[mzt~?&SsS{C5|ho:%a nP i|]mRVm%gs{ guvvnP6dY)qƫY 'zOÒ%6 jgm6Ş N)f#"q⹔x(Ӈ[ע\|Dʾ^\el~g`J(N;\$!ԛqGٕDVJeZnQ|O}1D^~^VӾs|6r;']1϶~$o⚏x= zzxgnW >5#r?voBno/_?N۠BŽ&W5\ˉ]!9t*ğ0xJۮ&Q,Cr׬HQt/]( {IpHx ޢyMe~Ʉ[9 ,+/02a*i(jG1Mq%$!΀i[Ī*2QlҺb\2mPz, >GiO-RQ fED]"8Mn&ya,ёԫ*TrȩwO1`NUEdS-ԟF(O[Roݍ(`wp YkUp\7n:| =8pk&r;?>%P\v_ջA`;6p?qhM,O%3. a0XC^&Y]e$F.7DyL_Kx@~v 7eݴ'$f%avOC"ɸ/FBMX ~~~3 m&4G3>R?Q/v:s;g?wz=LߋO8NS|S'rߋן^.iiٖ;yqw4&Ve|9](};TJWn(sImQ/^ՆQ"!$5OY@+Xgiw.725=n Ǐ1$pxڟ/p2o~C/E P]}m'I7\ "ɟ jMX@S Pd-3}(35cLj}rZ2X>Fih;okZNu4AnDɌ5'*̾io׆,dEYY(j$Jpϝ놇iҷ~";՛e[C^TdHVj^'+PqWDm{ߗ%`ĵM$ޠdơ.#m"H|nhÇ^P]8Qm}ChZo9owq?fT[T~96[@qwr=4n6u 9(k;@\ |'r"_?2 "o8p*<=S( ˜jW3 N~;_z|alJJ2m. RKV7@REH\m?xfmx\֝OHIkO2/÷~hnGdxU47 ]OdkWU]!.ۇ="l[w< en8@e]{qhrv8USD~D){ΣT!38ΧǒDT4 D@{ Tz.tB";`ɩZ.9ITorv( ^8-RwqD(e! 0޵-yĦ GGUQCw̌wɩ7$x[85gYhm^W]__Nj3] DyΧs$ꑂ;Sk\DUzw*=vkr cEȖ3OoQֵn;.|/WwAQr|m'[Y!k?n6zjՇן~|x|ۮy~i+"Ye%7p4˼qABMaXyUn^ MY/Ǣ>}2nJ3Y=םinfho-7kS!抽~āyyz:]b=sx - COˊ͸'rO@-@ ؑj} W%)6vz]9H@l E^ͤplzcLzH8lQஶ֙9wg ͛!?d|VLc۾"E/q7zS ߴ?|~Qy|\z3EP!jn EBvqhÖ3`Pr= `(/5`Cw-ZlOHj7<(ǻ\yMz 4o+qk=*<Ԏꫳ%XP{`Y^[~ ^Y;܏?]xH _^΃>xtEzln<|煴Ȓk]?~eg W<*j>;͝ZĞΩU ѻ:BgKyI*EhqSWNXҫ3Sѹya=w@DD?<͒lR[6tcɘ>)}\@ꌇۅ޼y}3z=g1[xj@$N%FzԠ[|xRjP*)HF;7g{ٟhW5 cN`ߣζRGqN &'jҦ,jPEIΉH@a8:y,B(v1%#$lj>ƿSDFsŝq$Qsb'@~0gyiC1JLwH>u㩮ҳ:(JnRC:5~>ǔDRKf9k|v['3Npy|8 91ZtOs]Q{e ֚5Qa&0ݙL$lF@E|Y|;|Rsfz劊lv^10"mӛ6[]ag; MpáTZOVC )tW׫7>3E=keVh{AihVcet`fUUTT)9x{;:r`}!سUii ;P?竒S)~tĆL7(:r!\A@< V  3?NvFLycyƌ߷- /o/flv{{i[V1-6"}}E~3=׏*W\z ۲TKV0\Z e.Zg"4:-,uĜN]Y8e^>e;N|LܘwR/CMT{L-(ҧum 4ymB-pVu~[]eؿ5u=U>xR:\uaGjѵ%~%7 DjVO3E7tu,LU \hg8/Џ|=pڴС2n"t}\/pI3e n0i!ׅ).%k۾]^^Pvf:4ez4o;( 2% $^J;T) Bn7s5W_ox_NLf쇯/O4aĆe3t"9ϳ5u,A齉wBiE{zx>Ŭ*6mCf~./b~cCVSW%I^_c6" 7|u7w1ÝStEBGkc p6x2[o',B3'6=R#}TbiyC7wfIőm(+"&~(7OkżP;mϙ;ZK`&R]$~\|>.!O*-D{JpQ4HQtm%i%GQ׷y7 Cvu϶.ŗPȑW͢,h">뗇A;&J(+mQ%/ A5Nw?4(Z.T|Y#Mc_4XL߀53$J4 KSr@V`K{rmYl62Sruu?FMr*(MY3=NkMʳ4ՂX!:lz5~7 SU>: RW^TVzUZ}CUjwOVhjG(Jnw2|͇#쨣r</)m4P_痺o4cL.|'ZS)~4az:5aIH-]ӽiu릜Qu`gd«OTA5'P(Rn[.VY}FڪXl(G4pYժ pKS繫Rջis,Λ /Ol'C-[@/fA9 :ۂҁ8f+X[es&qh!+j;j ]ʩf*` P!fV=Yw{(p6Xݭ;nn*馦s3X;g xWeqDd5+J8 (>nTPp14ZiʋEyI8xTNo $[*-EDoTo\/Nsە D/5ghS( ꆎQ۰dC 9Տ-F'ܺ(p]Uݠ*hf"PUAP3BFEnE'o=m['6kcFLC#: tg#\GD'[e` $j.٪0jmLѭ$uE ^z[ۼ|?D%u3,?#"D=P^g'jc.=)7 `iHѠXhꉪ}j!yn'iI3~虚Vf%m7r*)O곺eAm?M? K?ViV2um za{\E2Ktuw$)Ο۝[/,dwn6Vg}7)B:l KJ½ }TT/c$";}`t Gq UtG4tEnb!uFG+y.UȜ7ۻI&yM\T6Xi/ˑ@쮌H8QV|Ѩu^\:_x1=Khk,݇xX5$&hra+lEz~7%{d )RkvԣX&A;Ԩ,Nኖ>oJQd;0Mlߔ8Bh_"y* B/Rd6IHӴ5|4 fwW+nEQmhy3Jkڷo>-ﷷ~WS]K9,aZG@+q'q\re[]v[_fh@Ϊ:=Mmv ?>_?߃{n_~_eݐޝDhzZ6lVa#w?JdzjWMՓzw+=wm8 uh*2jA iՄWW^.^򯝬 5UP$CVi݃AF<oW*I+H6`G]TvW?*,?oQeuX|ȿ[@PVu4GD݁9Q P{â-MWW3pdzI!).#8TsA wsuY ܈gI YW/UoWU`TW\[]4e۴5[eޭ1a8'g yz76<f54?6Ð9 *m]2ϲ-" +p4EVuLD'N^_A@( - (QHRJ[]%@"f _XܙZ<W2UN#~lx!O%bXĉ\H]sEk}tm,ªy^y?"{G˄2L6*cL*0ԡ wUO鵹-{a{!}i@۔E]hl.zaUY*MCUV[7ayuzγKwt ;+Q7]?i`8Դm~ y^TWN+@Fe6𣏕5rvC,=v=TCUGXX o=O\T\bND4=:M)<Ͱ5r8Mʪ5V!؍.\g8Tb,Q+MH)x\C_pϠvquAilXEUs5K^m8!;̭amxO'Ju?~~e#6s[uaڇĦ<_<<, =</ /W./aB E;T_fZγ8clVq I -5̰VYkc.`A'ݴ5_YF6T) ]l'#?pZDf $z=Qb1!GX6H$، ۘ5#:^_vw;q(UAKN =JS٢mba8(`#ԯړՈl;3Il6/ov蛠(-k -*6&els˽2/΋ՆȲn P|{}bQt]kfv.>`_~Rjbdj_I VTQY6 EȳDS}Me=Ҍ5;Eꆇc@cny ?]@jdD=h8y[yȁed;v$t:cNĭH,L~Ѿ?p{$7MiH4Fp!DU69/P"_EG9HMCej;t5(d@E 5oN!@;j:VE+Hh;,r]c21pòPVj0gǙx t@\`£< B-N{X&${B07(H$ve=g5N'Js`&VUxUXs4E~ѧG[켢lYx(!@$M*#Vu)4[26[v#,];P)y mT7W}SV%5]v$eUХxbT4-)>"M]ݳvp=`"qj2 P0GܕywihHxbU:ڌ .)^ѽrAY!lȴiA`DG P<}P4#i@:-&XHOѦ_ p@0xem.`G >PEӟyV);%HI,O:_Vˇ=FɲGRKYZE*2z }=-<{}>=H4TF2ub;S!w)?|u+jX@{$i')B,{n5xkx E{(J#!LB۲yu0M#LPs 4yoa1qbAn*g2y~lcY5%db,/i +nGUM6[D0ֱLϽ:NIuFtJ<+@NPVBVU?QStH=Q*ۀ&OL/a*ZiCc_|%1ts}S4o4io"2U[rd4p/oI~<7ߘ!ǘxѸd2ox;O_y n[t看)YV#E`Y^T I32ɼhzy{0@Yj v Mq;9=s_.i=eR=*H` OWD^vtEl$+q\s|U CW+`Ԧb"6jΡio߿/?Rby<,ӌʥ ij˲d["7*(>splx7\;<<.a9#s&B)qw[U5Qw܍9݁yhq{{5C+_~}~ՈV&V˻;}fnU3 Qu?)kٲ.>zɫI$r~d^'ة8yU#U{sXژxK n;G1z)#Fm{.NhsSX煶I~ϬѫF!gGB5odC٨@[B6np lV|BףjZfx^^ #PE$ĸ r0+[ȎH;89+zYSFVn\l8ͦj`-vdNA&dLv|d:d]uF=},"b$Y%RO"l}nk.b(U$:Ka莫gު S ct_ \?}n˧sVJY =)[]mvtSuliK^3gk蒤!7&;X ]mu:v0/iTvu@w G[(~~M4waϯË噒4,ESZ x7Iwې]]v:]+MwE ncnXZTqM]_ʗ,@Oq-s Dk\_waRTeXҌu-9Pv%Ik*"DChv7xoִЇf)=auu@ XR׷wp4( ޻]B19lB5,Dku` D1҄{u!(R^/>irs[+`~iHCb|ob&QekU +m^?hx&T ֲ. JOnn}릣3 /aMC:#!0{,К8*EKmRlFMnBq=Xt-(06Hgي5PF RCTu}MIQ4br *h7Q9D7$/Yv)ŰrJӖQs;ad4=["uxU8 Ar vQ&9LjŎ?#t||s3Lۻ;`ws/s (?.:vC¶o2Lj=ָ%"*bү+9^`+zigwwpd=mn!1ڡPh $/A"=>>q@Q77Σ8g)7_lHiQPTrlֽل. T[v==TeXHe*@T-/W)w2} Yq&ݢH80&O`ARmOɗVTE/gS ;`R2VTSM2]97nb1&\,ϲW^MgtS82N_Xƃ8LmkD~Y|oY4e I_E O! `I #'0"Z3MUsq,֏n>XAu7b.mze:59TG\KB&:K 4;iVVTs1ي P +4Gs7NZ=jE+|ԡnmh)aC]pE~`ҕ Z׆v\mlsۛxҞNXK»r4b/o QMw죐jXMG|2!Q^pB -u1֠Z(,ٍܜ],x/kʾVQ*ɪkĠ:{њIT'c}hXse-"߈iiU&)ֻxH E*nV~uBio~*onuKGZ )IMMtS ` U5 橬R؏r5zq}dn|I{pI,LFO#OBu#@t'5CvDBX4PM(geV{Az/x~:9g8MGP3#Qtfg3tѵjp^%I^u,ԔlzPT+ƞ `| >:ޚ+HJ#J=QR| e` `r6p䮩;%D"%k6[0+15%,'eKy5ZD:&iPkiu/F2ynENm'yR_z.ś./G^0}ĭyDnYt,]dtj8.)vcL>ޅ^74\W_S1y9K ¸΀i=Y-@W!מR:.F'TNJx,b3 0,mYMi|qe|8T?wrsapnL>/{.wU3RjpgQ!R$+mc$h- 3u9k;c<кG E"h%G\u AT߈%[7 ׭EtSfUur'Zrk،pR*1NhMQ =]ȏ갚ii=j`%YH:`op-H)Q 5遷 .҉+-zt;TY/2t5!PwA/P<8  yOinx[dzp-1#*ثMy P =!Y͑lvJv =*H6nijxUuLMs}H='mC*En ݱ-c4MU3-kZDq<^Ѷ욒h=%a[Y:~|"Mtٲ MyMӹa[Ȧvy%_Q$HQ< PX mRyص5Ȟy{x2V/ c]T->u;Z3Gьe>)zU6(UgE ]m^ kf7VQX.8iYwwm$TU%T8:imA z!Б5siuq@xxWT+<ͽe]aȹǛPmmSR*k'ܱ-i F qK'a<-+,x-.kXb`2ޤLwߥy!1.$&[?UGyKK%К"DmX:6-.5nFmZ̰6+!ޅz2hd 3Xwua^֞y0{TըhNʬZ@8GN}0OwEpֶS7A&|sufKzqj7BX\{Bsh]f@lw},׍M!>kI|o~廿_ek_ ^4}M=mo64@:_z?oTU5 {FnS{ޖ [9#M꾻5 6R֕Ē/ʆu::>t"=oga)Ln .B5E_Uq܊^?=]ORw;߶ʢrN:GˁƭYIrsozdBן^:W l)R7q oLe!zQ٢Tc!ϯD=^s㥘PX74.e/:Ŗ]5,xh2O CE^tnf:Dx[.qPL0I3f;upi}rN+PݪZ^f,( 5/`'EA )ja8*< BrI_vp*݆TXӗ\t4r)-Ӑan7?eAi+ y ‹sǶ"j?4`bȁX  mul&Ssa\tYZPZA,ĬmstuzfJ~]JRݴB훨*Ș X( Gv !& NyqK7&NǺGce!̊)tƺi^q}g^fߋT 2m[04di&{n*ZY sDyiqXXEQ&<VU4n\qgh#VS+O/il@']+B5;F:@)mHQe#b|mw;pMՕ:ڪ.p$=цSCHm Qn6ul$]nhVͺI Ġ/ BbWЃa8r8 LV=T35~eYʢ5>,}B:.{gHsyj*j|dKUa4 ж}cAqw 7L56Wciԇv7LiQB ;,T63LHu x9ڔlͦ6!%ͯJx);5 I ֢ ̨%2jT\CRFʲ,nPPFs 2,nߺv|95B $Lou'oodbE6`mdo?l#sJ:^ X+[In5W[T }h8O(LnnfDѫP^/?=tAEJQ!!i/8|_g?i*ГNeBpK}yID?!v-ߊ;#;<0mVYnw7ԧ9;Ϗ'Yw7^ϗ' Tڱ$[o(,zu_W渏rMs8ŏq7!p5iyVj~ws~9ee+1v#VXAg<.\Ӱ^n/Ϣ,,Xŕ]:Uu^'!k1 ZR%xrlc]4Nrn>菤N˹|{˺$lRq)8y*Ktj8P7_Au3GY \K3-7`uurA FԔuS>qoS(4r@0ZV OBPs.* lך]P(~EQz-]vp?0|;"Ol$,܆#t3;&)i92Mi]'^hh,֩ HNSqG fJ"d*SjWO2^neaP7@va X- B.ƅgeU[<7eA0˧hQhXՀEfqty_ 8+qzˑUZhYRlPv&H6!hf$~/}.x}[alX: p؋Z/'KUZ/WwHM;aP)4 U+tA}2T3{NwLn[vo yC̄>*R52IBVS 뜤J Y!~JBk[-#As BZ萡(lAFVۤ5s,{LcݥZϿ (l[*VԿi]}bmpeRi;xAEڞ oxĹ/ xqC*{ }zi/ܬ`w^Ɏ8qp%4$3/Y9:k'\\şߎ]~K(7B\ 䙪#+bvg&]O/ob.Xڀ^^<֣;n1:@~nm$o' +I/Cp0`E$me8=CJ ޺4V]++&R96[ x`l[ߴ"CVx\^l { B1=e.hzemb)g2 ,8Fpw75}vI7q`AIڰ|$d@U-Dwq$A/:Ki*)`͝4[r^<4% $5&4>,zIfrloѨOS'^' % pa< J jL6m#Ӣ ۖZj <2[($8<{? u<+8t~}&c$"dGM3"mYopǡO57u[W< 6BDe#Iooi)W|fE~-Z)tノ Yf`kԆP8t<͞uǮ3m^i w0UZxg7Jyr<}OFC v y}}R=^йs+ÿOm0iUjDweY 5*;絧pc@sT .pLWW?o Qf\f9jx&`Ufqւh+9:'٢nƺHe *aTe֡hPxFpPHv܎-|8iPASɩFy#UR*֧hTHI Qܹ٠ܜGYwv m\WZP(N׸S.%oq P>pr$_OWie7ims̐8r6H8I%3Q9ToC@3XwE* X"  ƍC4vqk˞xnzgʆԃi%URcg3ubF**?BXi* eYɶ M)|^ϳVjpՃ`jGOA%^??&onq|_MSu `iNi`# sfqMtqM.kH9Q7U%D7NGp4/!TE6-[UţoFp_qwlq `Ϫ{H*/&lwt#ZRs´VR{{3 7-SW wTebDuCC^\S!2>*ںKBpK@ Ly̓ LK@5ÿ?,|us= "{tv-|^ܸʫ&c=׊ k M%;u'd^<4 &@=\,pojDMB?SW3,i˜s ^pAaҲ RBlw#)y]P6%^nrtbyF8l";P4nwx! ݙaYa{.n%%MG2 4MLGDG -&|4xK'KĤjeYNj*$(% iCNy;_Z& ʲɤHH8ćm!,MMƱEoV%۪DQ,X L6$$3zP8ᩑYN3Q9ƘE-P4?>Ӳ~oj>XףB-[`1M; ȕwЖmֱC {LCU}*Rx%^_9}xvOwyz5{!+dA,O"'}r"\*\w}CYk$=".\-2xL3Gˣ-O$A{hK[}Z3dK`Ђ{n?.*UTi|LX^w m}B~8EA²z0K*= ݋˛_n*nޗ퇻tHfEv]\l;ZAStE0U@ t3źϴy'pybc]iu#pB?xes|~x@ N5Ņ,DG}ͼF'(fG8ϮLʔrg Y7yf4|K= ?LNyy%]{֭b-ƛ/Ev-92 ~kOA[NeqAMnն(8Qdi0D2ҔgdzoxE-"Ɔh[|Э(n+#iC`b^'0 Vど.l't Ǣ \WG9Ii}*R$#)ʼ/+Ǐ@Eo 4d .hzxaCRq'atQ,7eƭc@8sQ]XL`]ѨoVR֣ M ێ]7E nƒauUJ뗭 1X^^uo+Y|VE2u#rI}:s7l/\R߽xc? M[QE14`ȹQT#/ d J}I YZ9.wwpJr0d;צLM |zJiKn’UG| /ti!m3r{4L$2ꦥ},M@>eY03dy"3m[Pڢo&O"[pWH*ӲgI*%$6 М^ Ʊ Se{\ՎXt4ދ }A$Ibi*@)$!dcd0ѠaUd,X Ѐl6Wx#0-x4.2ɶE*#Y7x*\z:77W f4?V}2`^z&Ż,tm-:( Y^#lz,Yw(WC-->עhL4%cvei92x(K[$ERDy3w@ұ7ޫ/^^ZV @uJnXHjfzp??} -e&郕i2H9L/:oЩ!m@mi-t˾QGӢ. ?=Vx{{.=l7. TuC4F'UUAfYFmᄐT-1IDJV.wA`iJzNˋx+e7+0jjY~߿\" ]v eINlOdЁ1t5ӑ\iϦ"ɻLx2OVX3+1z8NSL'@w#yjAtۿ,Y8 nd$:@2L[#ϤqEGwZ`r$Ca)!F2>aY'RT/Il~_b?uא_SIENDB`youker-assistant/src/res/default/魅力紫色.png0000664000175000017500000111403613260315532023042 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp [CIDATxLZɮ$IVx/+[FIFH 6lZ  4B͢B|,Xo9|s̪Hwsks'cQJJJ^WwK6+CzGUGjIwǀ/rH Ϥ9gU4>xS̪/\힏YuޚGA6)y)ZI+U;cs)Wt)Ees7()͸fe)I)#+ZkfY+9>(/(X't]o$pes=xtpYnai8QZRƨ 5 f;O8>n/)cjy;`;yt/.88?sJ&sIH@wE5n#ox B1rq؉|lutP mw 6>~L>[Ьj\Inc962y c^#WTFVό9"iS Fb 93ǔ)mwݛVW v4̏]xZ@R#tȉR&0Xcg,+dP+RbkV&k™Td PrfeO0H-/իji%58IUU#W30.JQ+mJ_^j"(m$8dyB5s[+!d 8E7zɚш6 4@ |4vf:'X!͈R!&~՚F}Gy !#C& $[\5y (phFhWoD J*FH>mz*AG|TO;AԠoNk$xHb鰥e; *q0Eo12r~h]16{L7i}kT^}Xa|lL՝ܶq&'|qϓ`m_TF]Zx$SDOAP u-{Z]< v-_1D~|f慝 MJVM WFp)/r̬ۚE\P>$([Cx"I#HBA nBnjw<\`a<8[c<ۦ Ɋ0`L^I }ih Rk'$b쯼uSXq,p/T^Hi>Z7HګI*T<SYؿbp"c+8((B@nb.pSf(¯IJGIbB(a=QU[k[=]% ([;פr-(O ƂEW@ 0|i,Z|ŝF4"VKoFt+~т}H2Cĝm^DNy$MO'ĺosOe?= _Xĝw[0ӼOkS 6ym4*i@i9 bQ*긿"oW!\l7Q>!~7/qLc-ă* "C+ A Akf /UPRgJEWeȯ˧ܟ⢖e().FHڏQ; oZS=v#^]{r5a"my"aMfCmb%rŠMBE&B4}-0#eWCUjuΤ_ %=3e8 2CI6) ?>w%O[A(%%H4HJ0;Jt |]t%QI ?`5/Hv(_|}>@;@#S8OOoPNLi_[`-pvR&$TӨ|rOjzp^h 8?]qwE s$\C$}mʪN]R)x"m$ pSGJ_萤 Iy~O[LQ {`[3S! E‚I /r}_AЦɍ!c&G7c<^&`.auN0Y&Ƨ@G͏݈Um"2Q789f%yn%N5u_C"Iퟤ"+h,SR@̹K%KUAkjQ`JO GK ?c KD"4Z$hXlE, ΋aƱ3WQ'7mn^Z&ΔdjD^ P5;nY4R!5Kˏ BPEHt%Sq+=%tgx%E(w1 nAP؋d y7 +/$ Q%Lu6oU{FN#UW"cX ٣s7}c3M1Ci*ʮL S/A_4N%BA˟*oȽ_ĄJTd$@e_4?IӥzjT:U2z@J㟭 " mzIN Ӗ뢻 A5 a ,[uL yƢ:ۓ EGYe΢feIGB$Oňs~DŽLնY}P%1 wP-1,4 <lPWd)(F^)F7SE7@p}MeۅN;Q'K..Rx,6;4U={ :fQ.?0Q(U ^C";T:pZ褪pY}m 9&YV.bd"ɭZg j&3Zx=rhpcc&>XJ%l_d_W:{(CG`i|Q6[Rh;>:?] _Ǫ8?4)[:51=$HoK.vѫW)'5ܧmCXVA&/=K^v2x׆~ ~/VW go^T8V0FQsסpIEaxǮNsfG,g1'Nk$x _+2 XR[9tT 6/iF1a.i='0^&cqDT+Dx;:Ɵ ߈klt*֥RޭujtJLR-_nt0kjȄ^ Xe䞈ғ#q[<{Nއvh[ å@DADvb,|pP 6U,kxDbLӟIc_%GhYăJ/ʳą*tNe514 fotWC/>zx/ =g-_|$D>AU=ACU};o MP#tK_?CDAT8>hй,jQbtK.lRz~^KW}8T^Y6G,WN y(K b*Ν` @!8] 7~ο5-l?k_;{K-4lhUj!1$ ]8N4X>=.K9" ŝ 5%rPAE H /YB:h Ǵ Ǝq>(L|99]}l/"D)֚MDxd^l@&PBnP%bQq)I P9?tX[Ѐޝ(TlTաgǮ5ZCNԻ_>oX>W/۫X|R%-yJE-\Odk!`*|"΄Z8x/mq?8H,*M;ıo?%9!ןFw;g*Y r/ʯ~WڪfvY4Z%B9jCݢǪ]\i.bP6饛|"hs[P4p%ϐd\ڧjeo?œ{S*n2Ծa؉AʗPS>lQuʜsej2Nt1<]@_>PSx$AL_^]wsڂ|?DA?1WC2WV"'(*f"X.S>ԉC7rDp]^]=qLsL?Q?h'rVT}gɋC; 1!@C6Щ8r4ADK_`~y1 Cŝ8:]w+f$~g}h4:{RN9YT2KՑgPK Gexҙ6.VzWGRf@C=TOZ/0%H5hɣrlh([0 :22WẄ́\wHd ]WA~£L*Cx`UxW(KDEaEd G?)-;gFLJ|Z}S,Od?0%NZ b(]8)kLypWC\VFQ4Oh^Ne|que[9ǫ4M?kV]eI^Q܋{ 7 s]qW]vnݬ̻,B3;`' SwDZ]}:F(T =lKo/xHG p%H hmi -z{_-"`4q%$W53"Fn0blCH YXX"c$ol}ߛM5snVu#d]UȈ{t+?iNΊ_ fšUG_SmNo]Q;@bH:"n"\ &FUBH]ы}4ڎT(*3"GV{f ӼEǘوh3ɋ6א4-v$|(o?<X-3h+3ת3k]SskקI60x{eIG"_|}J?Oiq.gX7csL%lY?:O#ƂiyJ4_%<=3])aZʀ2LrWKWIʸ t?iY+0{UUYr7u. zP5pϖ&0[ZfC.f옫b#)*I$ڱɢ^z=h*Ԓgl(g,uU ӎ͔gdıE l97rg/P3Vs|FPuJ$޾_j@d,Ӫ:_iO 1ԇr`7ۭȳU_q)`"| ]Ğn8љe?@J:,l.ޟm+ ﮬqoqY +OrhASKௌ\S ?9Nw+1E&.>zr0]A=en?QpTpG=#*sUVO*8fXF+msCC< `-(>~9o`p[_$cx|J0m:q6jPIs}3QYd pgrՁ@m.<]ZOcYC?wW]8aтJ@vD)‚1_{:ݳz~YخMSOU':"K7_W}؇/ڡM{7wV-BF!YD.Is{Kי'%f䩪(M~/|UVYNCpT~@!!Pn=Sڈs79I, Ôsfrs[\W = r2UtP/Vg#:fvNYrVSl\ڛ,2d| ePՓt\~>,p=h s47VLגmwe-kioOW%uO~| 4s@O[ӍX >J ?g8ZssGO5vߍn[,H 1>Mgfb|ݺT}X߯9,Q.VF;I]~(8(Pe.0L{ eCjΒ9% !>E#rr~o)*@2NE֜54bZɀ0EPAEUϻaYvVS/*_n1ؙ`.< k xim'2#Ɨ`%8.2x9Y1͗ZDjgܕt 螩kZ.4MC)Īr/(7Aظ7å1 u<8e`UÉrrLG=HZ9jTj}UB?cSj)$}LYa/R :5hE-7F<)L|̑4nȿbO7O8hOO7HtMלAk~\fbd6ݚ,:{zGPhu,=^tL0{\r]#`sqӠ0ίͧYLq6M3;q ^Q'4m6To#):K3D&e8[{[ǀ,X@eAr7gd@->Z`/@ `j^Z7 FΠ)os1EgR*PX5ҋ̈րԹC9ڔ],[M /R4FyN6OyV]LʀCrojH|Nw]ȣˁkbI^)aX38Fi`|UQ_KT_&@oh:V,AeZ39zM4yG\^qiR?x:^ް>enq4G}Ý3u  q{@q5O.N}L ku`}>5q)lu@<=M'L~As(3ғDy2e1Y9^lL$J2-A INqr 5nxn=C JtA8dR.cj5M]MtJo¶S] "5I؂[6' ԥ.(~?O8m}hqsP^w.a Vr>)pxOWZgL %ΌdR N3֎拂Mi7u W+L׬|$5rU0rcZh vxlp2, |qY m Ҳiw9Le|!&oDրUfJ':4wʆ4Uf)\iǓl٢6ϬRg1=2֫3=o}pҟ7X/Сx'43dq?2*%juZ`;Ǯ ߄uۣ%Md`D+/3#7՜hjgUQ>4|1F\4/QlS>*OGKCvf ,Yz3G,kO:lٽ qsGᤠS?|m=>Y "_:~FNz6ִU^L%A. f:8RGD﫪00@J@NŹ /V} Lǿ??=V*˻i7§AA0ATz<L^]TwQ|lmNr ?QP.Ev*ʶ"FbI3#NvךȒŧe:S/!{J}ۡȋC0MPUя[я .K#t4rIIRמ:>vam),C'&皶v+p&ãJ(iBTYP{-)jS˘y)k(+q/W]A:7P(y<ְ*C0⼗YЫpw%r9I~ƪxC־Y@(sGcc"_Rڑ-ro SymHvPj8&ߙƖ%qE`ܺ|&5^ƾf3a{nACʁ˫]? ckx6fx݄u-s8>n;⼷6<͖!:ۖ줧tΠ/X*BA!-H j V{%FA3855($V/8yg-̩?(^D"0G :*&rk̔ `i}M̳2ؕďLyߏrnxwA~|&~K(D;S0}5ġ>4gtCt,2+QF쬓k%aƗ@UJ@7ب 1Ѩaslo10-G$:ӼX)_.Sq|C4|J.e)f,?E|)(aIWQUV -uϖ~8$[SoEjBn('͌Kl65o߸_{`t04AG8qIsVTqՅ[s7 s3>ng |8{HmAt}`a˷} m;Aޏ _ʷ2I_/L@%_v. (^đR`CIz%P27EsM;5}/<ӓwz&E$q>_v^[sVz} 40"!0!BrK )@?Вe-$!ckU|߬Ow{תUkY_ ]+Z 跨R9^d'sU5@L]MtѤQDvh[ Ѓ!Z|-f%j"8t POEJ3@GG,r& -Β҅ޡiM ,j\S rX eb꫊TiDlACeH!}%6n!5:L GalȡH\HVStD VcVU? |*6fz\򅮠]^`J WrV?cfbh+*[c \XOza7v*H+(db|*HzB <ÖE9V#\9k-rm_˚lF-thMT)Pp ƛ#G(wB}sIEo䤢| "&?l<Y :jQGtʹaWJ mkpCu 1~+ٔD8G' 4*cr*])?uPi@ʗ륩ڄIrcB2?=SvM@Iِ / ЂThRy53YC)$Ԓ4nSjj=Dw_ !/iуz{P1'@[rVW=km_52=~wNw5 X*'N ޓYm㞔u ӟ(sxKb_VT\nFYj$i]99U[pGA뗷`sm0V`r!KF+>Ov}#!)6h6ݣO NgwV^$^+Ֆs铤#rvAׅЇ%9x(o*ҡ)\9r&`oJچk 0{[tՀ`!u:ϙݡDVvN^*R-tSPg39 >-SiTʛ5*b㲖,^1BLZu A ainh"E$J.CTmcOk|8ڂ`Ht!ƈc7\8Q j)@_Çaڊ2HEs)NLwpV4u]6m*XJD)WV'tkէ vuen 噅]Z͘Ja*L50"ug<33M\̏gYC{ˊ%5 wۚwSe+5LUeN)Tɪ8^:L|KK*\yPhox뀞YR֢ J*(|@F4%||.SZ?m5t[qLu /u+u< J ӭ$kFI$Ԡz#8ЩkE9ZO60<((YAqwy/ʅѓK2-t>N`2&|ׇ՜mݟବ/Yyf$WAn$$xjZ`j/80UF:~_.) W6UdmQI*i|Ҡyu| i HHCh|T[Rgp۪ƽ^5%O= )Ů^zCn{WvѴR3xRp7ݷk??WF=+X֜lȚ(uOoonY_IIғk:ay%jF<*-_aQ~ wo՟>5mS>>>RqBfmbQ>o9@"֞ÏakzBH1h#^[3Ըс[JW!쬦avsCU0Qh!&ʤxζD ?yIfx_|"FG9W?DGkfXDp4@8u7E17ؾq|ykax%-s>+>̡p-T$#opGl0,U`v -P^ܱB?UJf( Ŀ!xA\qFhkኃ"+lzk# @ZXHHbI hತ 32_5bQJz\hJm p00mt2 2r.gO~/`' YLȒsN//xj(t!+wR;>|m H,fCI1AMyҨGQH80)TI4ƼvR"&]^ s yhmȱqcG46Ot's"?mwgK$L ӧϫƼY^]ihy7&1(^B_"qt(7z&y0Lh=PBȻRqH' 1ck`ˊ3&ZѸ %e6K5D;65瑥g*Іf9y"/vSsʥ-4=pI 35R8[sQUy#][/$("zu#dM4[u;RDcnt4^15>{%=#|N' +mܿ)3L&0) 0gFla?#mM ^U*1ñmD3([Ԧ6XV]px cӁf(%[P]تo 7U N­d I?p`9t5LHL*äF%t+rVRFAj@ Jh9Ѓ4ujQi|ڑ5%2  υcv@ua@NSvdNw ]_L3-jfֲG;W3wJYTgy&f;+TqοRZ {( Զ &4L1CF3 SΆ[q?s'eqcmWTU|yP}aH|Sa I@R,%x; xu혊䭚 fJF/ ugK'3#(Hǖœ1>g\<*`LwՖdp Ţ*VxM596:"Zgjc i%U8&j? yIlI ?ZrQܡ=``Bvw87aDKH6};Q>'X*zl}hDAq"|*|t9Z|>%3 pl碤r^M 6"(K܊(ۂKN[(OZQ'ЫbZq$ڤƑ(+p%7]F5BgOu5rgjHrlaDQ%s9ȖgIsa̻{E.;EU J HXzLu">j Q_޲n Vx5u 3lƏknnvA`]]T:2N?g|Kכt烄7 :Ҙ)!E'27卣4mUmCRV$8sKYRޏ/גq'º񑭏;/tpi|$1i{OasψöaX̥! ĕ.#*4a= ~HW~?6(uq}n_nH݊[.>35!+lL{*L-aZcԱ'_8#KIYJW1.SPdmpܤR& l++a3lcE-lʔl_/#̬ Ew CtwcQNݩ,{ * |h!\>2ET"Nэc3'E[ p^O2?~dE͹ !u7Ft׎'a;DKHD"_>*r@ ~^M  ?}y*ۮ,hubh)pUCZΆ鿵FJ k$B0AתɴX=s cVY:UEt4Cirz@٪{L'鍘,ӵvlAf&1UduyDWV>~EpA4Qn/Mq4p$}ho(tMוt*4OhTfZpV&{/0V,ԦY=h#7-d\݀&;X5}Cg\yCҜODtrPTy"'pV6xՑ!F\=uSJQ[4u+ݸ55CVG%ݹnZr]\Z?ӟsWT *@W7d{.aw*fg*= RGM΁HU>ğzD,Q"|xtDXV_&Ftѓ %!<άM沗ak@.hQ))7y@Ͽ l+H2ި[bgo)7S~z߾^Vӭ䛪6o׆щL^;pg_q`1~^:imjwob?LX! sHRТN.8{yG`Ƿ^0#Ctn1UD/֞kFzSK4O!f({#&b3NG ٙ١폳n2T#Q8]Uv҅7eM0y+չɂKUw\5htHޫI)=T]ősT-MR,dmPLhctrbۋJ7 ,R) %7uݏK`6CS,aO^`4߮7q4Ӱʹ@ڪ9 {IU`u08"=XN{X- R`t`c1tk)K=|i{]$3R0(ا(UM2ND *`e[RjjLԈګlQTZ]yޑ W;wll.ZڙOօ}e3bInAXb-N:L9Q.jQXqqy*6eyp'-o+︬V#:28QQ[ɏ4lEpCC<^L"]lP }|hvДb[~BQcRq$TU-#uRZ( ꝫt^nۡΫf1\T̶+TKI\r4Jx_1ֻs =jzm+z~8m^h!:yĪ&51-U3V 6> ʴC->-\-?girZZmiΪQ= **ub@Nٺ^>-!YElXJw&d: [C@;R(cqH[KV'tL[TW/or1uwK_h y $u0GCR=즻Ǹ1~xxFRkVyiF0>ϝ9~.DfkvxFZnƸSvcG񫔏r]%: 6cfYt؀r]ɷ*y{PHÛK59FrhH{"Lmj4Ab( ϫSua:2 3d qK/J[G@LhtW옐ѵUrwJeR tI1 d޽i%kӞ`]Iy_YJs]1i;_l5y)E4})F=D)3ө=e mur%,XH.R.5Vxx@  #l#-hC;^bt=BfH$om&Ls-9K龢fGޘdqa;H3eOJuP IH.so q18m}adf $(`s4W̰/_K?\mo7t:D`uDͪURC!5F q@.`*hwcQӌIXj t'ZVitKMv$:  \aAekPd Zㇵt]WmsCN4 ӕˋ^Ǚ-1*6(}RūrmWۮ#IN}z¤e:^K| ùMWk(IMMW%Zqoqi6F[t 4i0+ĘbS ^ֽaĽ/#}otqBGM^?Fgz>_Vn]+&1oCB ?=kӶSFք} (Uޝ;']9qic zUCփ(>Cr$h ?ǃ{N]/oN.hRLJ:,8<%pTJ%Nԍ0j[@^ړܺ!i^W4ڕDr۝SM쥖ihtz-=EvN !zN3W j1}|=ׄy 됏>qۇǥp3}q]ER 5.P7R7|rT\<>kSN{uxlR),`T]dy](+)5N^1:\k^֘#*2'Dl}24+0ͺ@Gu̔aQɍiZ:3u.T HS`R=#|E?hVFƆkddI4:_O>jBUsNT 1O ֻزAsVZks1Gـm2n@n!At}u{BB@?@eɢ{g11ߏ|Ed_G:wߵW͚s<(uƈ+WgϪ*hRYgBҤLSw4K ,ktE: &\6TPD mI6VJ:U "Rw$'+?)55P<.fM%':RGb,GH]V$(ZOV~#rW8p@ F\jeEa=_x4*%XT7ݑVmQ1e,duΎ"j٠˅Z(|-.*R)r?;x3S}F1)eƒ^uUD/][_hjPe0ڒ]z@WZ6|#-Џ&Jه&FpE0+gծqXH(K]k- 2d$Ik)=(oh4^eX eYHW鱘a-|>+~!&~XATEtIGOm o#_![\V;ꤖGh~UG9=(jMFd r?ėD%>S1f #ԯ4`:'|n.+p{)L RA*oX&h[Kidڮ7~xt{UCdzs5 V1vi{~Unf1tmHߍmh〉D-3A̸S@@t:+Apl_U#_ @t@;*1cNx@Id' }MY~زKFlli \ZL٠KkfFa-%EᮑeXXN5hgrq#0A)mp/x1KIWtO?,0}TJ;G9tR@ձ@\#|M618@;PnYz@ PM)HRL-%U5ÐW¦q>2w"/[{ `$\?Nf^dgg\nQ>&w3)U4w󱻖fI8]V\OAv?{\+Z7R*V9kR&ts+޶ӽ >k.C=Cq E3xG)'T 0(ݘ fOӦ[ ﺧ||@Rț[a{yZﻇJOʨ}9M JKx]tR{ *6U= / S([NƱ[!זfGMܽh:Lo$x^U./;FH}G`@ߎ/aHj zͭSDP4v[L h@UJe%DzuINUL>%=UWnJÔ dfOI21ʎ[Jj2Qh&h0 M<AL-Ô'q7t*C&%ȥQ ^K By 1q>z@{b%ڌ݄8 D4'BS14-ꑛ.)eE:`Ún/2TNŧ千w5/?(-5c]=GW ΪrѪEL<0JWDT)`NfրH!BIu#xhߠG'}!zI%gqOޖpe^uB1y/g3(\$ CW8").vsll]%ta-NL[q^舗,uFX+J&੿GD.9m y+Qus"9嵣q;Y $H yBds(P4ɵڶ؏;kHajl:34G#vQr|A^xj%_EkIuH*A4XiR?HjgB-m\ꩠ$Č\T$V5b$/`7C>eOW -'>S gnCYf=ys3Y ڭ>);DX]"0+w|> T &T RXJ9PP'TÃHIsVTY*s\ A#C< |6Q)@=^:]=Lk%ړ8x5zv-h[&최(fj׀ au;rw8`fNz񾸤J<+:ǻ_004.)_ $I *5D\>b\W7Yɣx7NJ|^yƪj #4U4?TL,X(iOTu46*=7LA +'Wd?qNs #,.z5A7[?r<(IRRođ.$#XX)9`Z]bT7(VԽq{t߸C^[U V&nOq9eޚC+uEٔ.Y,__i[7HwhҗH='X!3ԝgBjJ(Q"Y;etrY2r#=& -hBqؔRO sbGbK[T)t1o;U-覆;d%^Û 9OWnCgY9{Tx*@ I-rT4sfRN\HyR?st~30m &>>3xIppd MF8H%ILF,s*eBz@bt9$'R|?tb 8%WyuԨ<twYSrl H{su@J ,yr0%D4Խ `@Jݏ=f`(f =(l ؈¯6x`MfmFQn5]:y`rҕyUtΠM`cb?,N3$}l9$ U6Ve\ޭ,9t 4oLRx_ $sZ/LA6eYz.mUUAP2MFb2{[Zz% %UѕG+wڹЕftÕEq[𥦩vˮ*jDE3-SA -c (藕aΆ-8 PH>^ӻ߬7“PBt㪘ޗVHP϶k)LhJ?WdrJMyZ3Mka0}Yqc=>"Y8Kχo4UT^[~ShB7)^[(:wP;"QG 9\hF`5|0WU"Qac& O5PPT.I+ )CEG(` z[J/u>l8 дm#+ikH- qz{DBcNW=ǯ!biR:#>DU-)vt-'~cy_ï"g/q Ym-ޟqKJ͏؛3cq.M>+IqޅK|>M[}S< ֭4I32 -M'=>XXD9m8QpR gbITfC;zwMn,4e48\ 7B˳}m%&d&0+/c73N>a[# σI xǬa5'Su/@-BٚeaGBs }.i˚:ܐL :)I% '0>NT["5dʎ$w)"nYZ:d}{EW( Gw3~J6)j(;O'3_!@΀IT,a | M(Z) y<n\!鬔˚f[ <`i]Z(D}AΖoyk90˗:9#XA/η [sZu(Ⱦ,a09 #S^$?&K2&uw/y)4 8T$\ﺢQ_9 &Ȧ6_, m)~f|5tV&+;\9$?3~袬J~_q4T#Y]I՛򀪋3:l͋m3b`!rQDw$OTGrC}p&::/h!^.*MU@,p1W wRJCZ uJ=NKphݲa_c'o W7ԚS'*WꖷYc ֤#w9uB>Ȼ^b@{wrŕA#-zT>mC.&n2P.kIL2U`D!nq3n̚iT<+H^7V$x'*D]"F7^M Kp(V Q'.B~ vY7터'KS8. Jm}d)[v^>vG<Ԡr$uP3!? Wu^Ef>TnŠnwRJu*Y,g7ԸRm'@+'lO:p?Hwٕ'_rCE2R:J"jj$ TL[L=oą;a3R o7ǡwEs7*}^^('VB'Nj$`?=r6HDL',(6v2O@lǨQZ^u؜!-4oӇ}5u#z+D=8͆f ƙ 3)CS7PTA ]%u)JzΑmcW%G@r(Xi`؛F4$Guc|I=OЀhJf"FX2y8D΅a P^bÀO J9 ͒*+UAH*c]"6ViI2Fǂ%èAl2IzUKnم6fwᨆ9tQ4Vv(^anp[FnZ'Z0:bOTv9 IJl%k?̗| $ å;Mƃ1gCAMʱv.Μ~fkr9mNKs ]r=kQZ`3{y>~D0JT_4=4J.PsemCR܏?pM clvr*C԰ad!IQRv̢ OJR(>\#yY{C4SG:w k`5ս `Dr_+8EDJ# )8[rJȄ"ZeMAGdHVʌp]mvWYȃǫ_h+czwO2"˦E)᫶Lڱ$y܏JA{OIֺ|QŨoՅ;PvۯKii]"|krx-e^Dcss{iXL͔«9 xeɕODž3fpRK KłP&O#] pL! _*Q!%]08dj4vsrDvǭļ$5h;`mݩ'Rb{H)b1ga٤A[5Q:$9O:8if[HUD5$[ӵ`KWX/V?z+ lSHvY_٭c;%̙ ޼. |zZHrUWux5q2:= D.T05A.k2SQ<#ٜ*3jjMN=IR`(e}y }uۭx-DBHOTJmMVQԗ UK4&x+)vOT$4N&-q `JF (U,"hY(C ,BgT!4ӼUr4lI<4M,?=W3ih-MR9KElMnVfd 匾VYI5_Ëܸe># g' Aj%ndf)m#fum,Pm zUYSNA(,T #i9R[` &wi4 " uc$2S2j0rOXزu E`! ENAXauwx(N\ȽPpAt:N r&d)E퉻S%ԷHFQ&(2pZ_P4vу8j7՗W§K*Fgԁ֦w;ʄg^ivtם*(Ns>&i> $X8*8QeOʨo,& ]jĈUٳ2%C:Uȋg G< eD{>44S`zʾ>Gt>1ÓC!JCa؟ վV˼arm$Wh>hD&J<޶/V3c9CcFNtХPP3`t# [8HIq@*Yu7w?Yi'ߍ/ܲj brD!@N` u;O_.MLmNZuH .?6&ax wmT{&p{STߣlJgp[I  \\W)ܧe? u.Ҟuo2}y2N6K*yBB̢N !w8̥K1", 0W!dZL&"'5@3k8L\1yx`))$@ζ[󺸍ESȧG9wALGJ W~惡q0S6hFQKiPʵZ6Kb.GpUYX"کJ KMw_>p:t] 4o=DC9.wy}:P. y>́DnFz@˥8FQ4OY߫BAHyj,3_'*l>L1T )]>/Zd(_CvͲr Gȡs8(ʳ*ᖘS(kNmƠ=x4"[ T taʎs7#0qQ "nx 岖;-n47"5"X0K[qy5?{T paڼ#ub[̪rG/u,oy)\efP\i \5fmN _t[FZprNG%Ck33JOgpj1Z{-S;c.MF?H;x;0׺M^˅x=|:zlOAχ{6;+Sv4d&χ-e/i >AHQ;Ff?d8`/iXɡ[a[×$kl@d k''o vSJ[L/Ó^ڔ1|78>ˍ{jOF֖wI*R2F~]UWUɵ4˷?)KIҗsF&e(7}y:x^qCڛ;y %KU,hq2qjq74>n=<jڼ+˙OG~0z4*s_oh`0Yg[(tO$\g)q:#re*IaD,3&XcbP,{!.C} AB*El5Y$H҇nȆ}SSZ6~"~ݽ.  0QnK6 A gjBS ЊAn& ɀ=𼡱xEԲ dDl>P>H%YoV̸I߸e*?Tl]nNO1,4b~f,`fZ;.:7y []eƨƎ:lƜ.~i5gؼ:"54nf^UKb>WL萊*LqJj(to_"񗒠:PgC~c4ԊAX\wjbQmH\<^m%pdu|-n $ m&< [/?qe}aT+RJJ6VN |z9j. I+5m R$Ss5j,+'x)G|e_O}ovH|Z %;AT|~Qu(UƋba0wWvVfjԄ䬠dHNJ6\=bl@ %9$BN1?z?S5:lnPz>K yV&_F-$Mt!~ӞyġJTG+E8G ȹL=QacA>k7bP31j/}(y $IR;$GK`)ʾ}x[BЌ Qȧ~NʹBu|׶)j9g:\* -1¬~.EFKs>i(T 4SL v.褡LH%+y'209H9\hw|^)I%4{i l Pb&L:0ZG1aFM* *cc0fl @@afΤ:"G9g*%5\.n ƍpJ;yn}iíf`^= +U~wkгo9OC;) q˽UGr='xߐaV:< ?B$Hkr@=PoGiЬu7{Km74b׮n0Ē8a9cdo(vc:HcKp&ΒбNҡKԄg Ff9o`Ek1J ?Wlh;/}2<2R!ˊp߸Û<7ʧ3XoῳKT%oĂgl_z&.)$)Oม,:gbCVfJbjBn ")oQk9Nܡ:XC9Yd"sHq2g/^"v::̎f+^J3c Ȓy5;g3J & EWD-UN3' E{XfX"ZJ'yX$Pհi\Ŏ5P `(Y,Tq&RضcfB @յ/Yl$RZX*qxSFs%K7-짛jw::z"H}PX-u_ǻ_HS?=lKs א|R JuÕ7jJ} ݾ ͗t~yjaWAgA,8 SfeV>/T '.l"* /4?a`Irx"3\n9!>< ySdƺ$rO kX` (zPCG?g倪 ʫ{iEw]rsҘbQ}i lD 9'6µ # /H6S9~Rs&< &(uJ@-^N2LݝϷo$^. ]L`FKy Vx;l:펧o͸z~VIg㙋! ~ZܔK? o)I\50 [ȱB`mUܕG|u? _RK|xy[LU"{Yzg5Sľ%4p|eo~MÂ͆DBP<(b"j, hۮH 5oOl pJP%̏Ɏz8 H|swzcL9ٶrwmN+O $kz'WoMIRg>mn$%sjJ'˝|7~ܦ&WU-Hth=XhP@{m xwӋ BONAZJ*I *wXOTo!;>TL9ôU z9]+E|^GB@FFq" zl #NاFmFu~VEBhy"a(YݽMljCZ\9.qs9Goʇ~H}N9u %fť\`nՔC,ɪ~s];JA44RNU-뤴<j e7U4p! |rσ*9|͈n]Q;xȃ=.gԁƓE}y .LEz5)T&\=T HuIJX \*Fn )h.r#Min1@ iS.X jrwЮ ՕT*-TzٍrٟQPmUܼ뗘L{R,˘OjaY$Bd*?ʊʋ!>LOy-I8ʬO}<+p .|ApnP 2Pj%~]JMD:`LwZ.2ߔ.ӹm0^JIdx IbH4,2JS%dNh-o&~ݗꩮn;pKJ!q*!Ƞ 4IgS5){,ȤM]҈ r,ƺ\ʭRe]'b`Q^H0;<&lrybOB?7~%mnSj=eZч\L&Y ?/sҟQEz9|x{z{QH^*^#M_N yK?^G ۀt}~sh;b߯DD=-A0{z@^z߭8HTrZPciÎNAX`{r{yf=tCjDMH,z=pH t !U?ĒJT~t3W_LLVZjuFG<> m}\S: ~#VNt%Tr4J0&Wj8Vq)]h6<cd2E.>l=JvsNࠧǝ)^?J XnkPK yZd%[JK.;GƮZ{›|^VYB7D(zwyvQm([5)*qt33ٿ±{¨9=*`wä hW0宫3Et<Ōƾې2jns~S/w KYwҡs>PxKgNA㔯*2qP -^ueU=4 ~r.G9PF$׏`IkB#D߿顤Z7)2WqZIZӆWLt碲 A -乻$9:3"ò'Oݼ鯭T7.'bRpjBOgc~RXj!؇(fz:cRGv`|Ir)WR"rB{4/OF_5C$uLd3ֈ2c#-L]vVAF&Ԛ3WaTd I-Ӈ:$ OT&,I,AiB7˃J+DֵVK߭Q tu%2'!{leAE^!bd>utGc~z$F "%xWQCXUvQZ~ DUeRPxg0>kׂP^ӊV09?QV.Jp]$q\`s9M%aؿĎp#c6ăDhEU{&o.ϋ0nSHSɒN]Г3+Zt])8#^l8#"z91%7w^X %dT/(g-וOC OUrܟ;<5%VvYUQ&czA`$w[cEsԶbTHL.Pzz'&b7#V0_/Tj>* HS  :[?R. 1L UE1} %%XlB |qxvAqvr.nqN;j LF.5,Y)|`FOઑ7(J3B@=ri 7[6_F %^ a P|T`5`~<Ũ-v-gqG9q:k?P2Oh{)΀ ;qu|P@joԶ8@'0vz;?j iTM^)w0ó>Jw'mt^di )CƓ\ē9WF2֎}3+nxl:X{X lIlۖ\UDOqw߽ !dHg K4Ѱӆ46mZ ٦]"LHeԱʹd|ߘkE>{Gz90ow~շ wC/ 8]}+/y_R{l/|뗪&xk{Z}Eoď?37ȇ[$\},첝_L?գn?35i,|Fn;<R7__C?c}y("y?|gd\w?x󣋟б'~)\ ᇟKrrχOHg&K/~({B~&ʦ{c1rr3yx+Y} C 7_\1r/٠wr7߽jϳ4{xSI|FˋJ//Q!T_C}+ak]?~zgz֤g&wɛ7_ҹv۾~Xx;Džܦa+)>\DⲼ헳\^?ο-?sԏrywpl_/ͲT[.E\}xQ|CU׏o;8j,loO$]Xߨ,>f%:\p<4jy-Z__B%ǯ?OB,%׽<Ҡe_hᷙvK}ne#ɣdEŦe_Jd5w\U'ȿWwyefr_|}k~)뫄Yw?fp/Z>mRAֽw^Btw'wyzF{+dj9̳rdݪSiH&ZH61,@WYitwC6tlg?̯ I1F\(:pOv#/ tV_5l;Ł}7j4oxP%S_1dLsy}`҂<)As0fir2FbÍ\Jy۱cP)Ĺ hպ(aG_hwe#X't}J1j/&̦G5{kD2Y B匴eAXXJY*mLri1R֘zgYt~WHIƅԈA]SJ՝(&Nak45mڶTĠ58[hB y5`FYM|VoUk 2'q~)s q-\Ӽp4^,fM8 KG ;&m9;Ŭٹ2] ?n6 JIV$\ k=>Eoe4>]|T%ӠтoG&Ic?ckP6!_v 30Tː$Nj6H=C'ǰX|vR GRwQIASŒQ9K'PkcyxS5]^e{,->^\|i>cN/d1OF3Ϭ:,DIf$sB8Ύyyqe.4mr>꒹*NGsKd QCLqUjߞ,Fs}I{6`r;󣒾?nPWA2ѲvA:E)uNIU"P > EGH"K0UO8P+cvflvIFBz5{:(A@Ne)#G.dї]1ޅ<)ADgP}o`jW&T|BC1!z:ek"k%u_1t^yQN*֦R7*)zW@q(XsdS+RP,aoe ۲V=T<-t>[y>a0cojݐpr4~Hw DIΈ(c+AEd" qՒ$0H򤪩8ങfJ␠ -@@vkgWLF*W jK&`)9lR}BT]+B; xT0`c/5A{:TMD*Og)c]ΙաP5ό_ahSn5+)]ۨ!A?\lUR?ZC}Х=U0&gdю9qG\Vyk6}RŐ^r>A$;^=i=MPz{hs  G|Ї#- Qݍ^LR#n}Ä+<S w+۫ b~)@`VI N7P^QyMW&UyɿT _]H1~Et C0Aǿ/;`9\[.7WrJ1ylc{?b^7MIx ]*:OJt fv޷xMϾn}ku7~~/[p.}ZKbvzܓ: %)쥺#hÿUw$uwBs{y ,[UTʳͶ~-Ƅuul<"eš{C@ a>36ڷpg !澆m7Ů7KX{*,&ol~l&Hx}Tg{Z$mv&١}-MkBO L͍vV+μ|ݿ(|e`OD( 2kRǤu/C*E {,q3mLqW:k kaf `vT9𠘎kҒDq>l ^{hHVPc\6#}&?+^}u6_%Vfձ'F+s RULpu)M(0D*ƀ"T_RuIPdaʓwY{Defj^{9o@b&)1$&QfH"zS@ze^IL[և_4aCx~Tt,=È+Nc?O?1θ&9ɊIޏU,e~B#K3Ab`PoפG%woy E= ty:WMjS G` U ;Sh.nZRJ%D6=Mk}]Ab-|])z#:EnumWڪ{<e54a﴿}ƶfn(AvHI#\J@-euEMu{0uOt s~,. ϻk r%nfrARNF^/ﺻ@=KڕI5\*eI%=n:ϡz iYo+Ħpl:TUѪkbuhny9+BFzy0bk\*QtSr@|V# zhTJSxRKj[eRztc鷫ݱ%N%Df67C+WL랺{כu1%mrwl&s-VSOBbvyh˜[CE HB$)Hm]iM^r^t~,tWͿW~zq)׵‹Ё[{EMDD. `Ӏ&C'AaMG?-l.m%ARdZzjx7ĝ[O0#wr^9ʟ/mv >Qt[S}ӿoQRDWJT6T7LDU2?4NX8QCOHǕݏ~JȤ_=E]<֌-KC''h1K I:y*AT<(L'IXfq:PF ̼ @N?VѧLFk:rD.D *Z/ˊd{^1n(U)G<ĐȚƩ{n5\JKH%MUB`s^ԯѕ~`o -eս^ Ay^;^h"mq 1+W_yyl{k9nl\cS҂wvG+,ȾXbX8WD RD3:kȲij1PvZb[fȣٙ*Y t!*qU*W*i 9FrN)k(^ 70 MYWbqr\bHq 3@g7|Jq6NR'WC,`κI2ѨB_;؉ &Fd $׶<حU@FH<2wXN b&,^&0I,|&A3#Le`>C'f2)䳪לbʄG:a|=:#D2 #&暲@k(0tҌ?Ls-a3I 1MWNotr &nU(v#_h+@A*Xdҿ=$+$cRQVeoNۓ5p:6.sЉc:ft5*Rr DP@I;b(vj,A]AZOG"WG!^,)͂,fk.5w"65b0u;z!zꛋ~ϱ8_/}Tf J?H ~,Pl >qU , G?T& Xa p1+]{!DXm^6FAcXw#TŅ+1]qM629ڕ>~:P2 w!wmXb*]hG2.xyj&DQlA}7ԪәAs)2çEWc\Q@-zzo(Hݬp\Zn+n&e3{`62ic'l1qBWj?v%%VS|y= .X;6L0YgӨ$ѳl^NybM>(x3/{4b[=h='`~ȕee)R1:`lHvk,S3 Z{8uk o=\"}-%O6r' g,F@ycl%(į?HԴϯ5q1;D;T!JgAosaP{ȺՠA-J*nUH_5C =k\ޭ$U?0rŀW}$?\bdpWO8='FUGmi7zNeٓCnvJ9 J^v7F'rDuG4dTݣf5*n*lbzXo)HJu+ҧ2NrAb9QjbY6i A'Sx x 쑩CTtEm)bUVW."ߨ*(.6aY_80\CɣYH8!N=8kfi2Q90]Y &L )8JJl>"9ꑲ$WCG'G@@KiDVAoƺlju?!'R]OTv ؼ=:`b/ C3Fn<ȯID^T<j9~KB EV5}JVQRGl4fϲPTY m8PB C )IA>❂\Qf %zw UO @t`cFBӞH,o]e킗bbb2eu6ωOxû*$aY'I%03 ۣxr'@K5A}ӧwoĖ8v=t#DڦQ>e'y!\1 ENC ?Ctp-eǢW6rAGa1&6%&Zя'e }z*g$M:HaRe'K^7R:˖^Nu6+Pw`KF#k6ՒF浒c z\u`sxH` ctIɼ<6@1O5[jn]=Vž\Ձه]sEea ]K_qצ(ݯ{/8U}UK $^bw3;f Ϳ/79֓΃ _-wɻ첝-r&–gZcfB*ӎ] ,ّDq>̕3)O q$[U=>CvV>vp G6:YfʁQj*Bi{&h;oWNC DER$7ȝ]bTʔtz *^[ ZUyB=eG&~r ֍p @ D ?S!}.~wfOYgshb%GN0/'PDҏI%p?Dwj)($5tC,&Qaqb?)`I (:);4DYmfK*L8.3ӶbNI ?h*\ajI9TPJJ`[̸v"<'8 L(qMluY_Fs:)d9k ȋ98 Hg2+%Dz\А+ᨴ C.֟k֦ٜ:bH$1Q0IJ%6''x쾙I* `>ԛS{(XO9'oUp6O#!Gs8e#Y~v, xFəitg~s6sMөXddRcBEc1 W%05.!ezz!9ψRQ4$\aբ((?*61r81ST$Ya-T&(G)2h=&!nEMG?z6/LSH~tjD L%a>hwEh`oЯFq<09HIBVkXo |em.Gxm kơiZ>));b:`? 8',M(> _\,5y*mE2.5t!%x=HFa\†t\aq;^B`Y[.=R RFn)cۡNj >LFB( jA k:y9U}`9Տ}X`ܧ,}_2=ǛPdڡ糆] qh0n`;XGɼÈgr1p٦xDLRBi?[ϸ7OG1 gϢğ&gA3#3gx)Zo#Sx(%A';~}Õ1-7"*:1NߢZi y4+L 3<5ɷn]-gݝTGvq)\xOJxQC &Rș 10'yrp2%g*w]"hIQj4F{\87Wi %pSNVJ(aysK#սϺz$8F'YO*&F`Pr V몖l' >y>Z FJGV; %!)韫m*H|U= vݱ{ɭ=y=2y6#,Ͷͽ*')nŦN+O Tuu%WȊM}沜b!)NnAz\<G#-C/[Cws]HF} l1Bhz }>cw߸Ƣ!)z%${3i6C nXRם0qU m/]/PYXwbiL ˜ᰈpf|=y[7PBIw?b?UiU%e_XYeu\K)=m~?jNoW7S oYEoH¡2j1lt=PCCOߦ@K*14E7=;OѽkKtD&F?jp;v3'{3J0vT"@Ft;A"HSv~. ?Fp` Ǻ^v4 'mfJYL1kꡋ_BRʫ5QN9R1LFU}3MpNfp(}Q‚5E5,uV!4OO>K..2zεPL/YJ M^ȡKu۴L>>$M?]GtQg`7bh0wbgɫ$F(aG^ПGC+GkNv!efDZ%'y?S(}@j8U-8MDFhB"HP[x$얥l*I6`*6() smpp3Bam+I.&sVU)Iʑʇ6aTEp߄Mp킜jR퐁fBƁk㠴"nahpmH`9ͮUVCzyh֒ AYͲڞ8vE)[d/,,)x۳6Whɣ]yK cK͢ǵzΤ9岄\zi͔M3Jv(*i8|PwvRD힃_$r3s2xM&e0c2'&`niPP+ "ɏߩ9daΪ3@;y:j2h˓G[7}%=:zb|e:|$`tw*zBUpPv^M F:U0U R_Ŵ=s `JRڗ.v}?fJ<˙"ZMo޸Zبd3 xo77"WPU7wU@H=>)F.N9և[芦(Rq#AδA@y>Tzf[¿q~1MJde!nAimB `e6hyV˦,_{g%|$.݀"i=\ Ũ􍓜aW}R7\^{Kbւ0-ji:YֲAݚ iѸe֐ bkݯT6=e\!A+56+䭏.aQ~ɒXm %n{0_W=jl pxXLA{RҏؽܿW{lJAZWr|g3Y;o|*S֡wԄ0m 8`gXk"*yTܰ4 8TH"r؈xIXtM3^C8x=Y[D]XVg"_^ڑ"~ތTԇpU]^ rcR=9o㴷gY}L21'{o+3 )}H!Lh[J9T]1ĘyF)ow:rʁrªddγ$#OPfkuM_iH/}LUQK t3B"B2Σl|sdП$OYײe],txT$eh9ENpWJQJjCU-lSq0N}Y?ޤkruL%]!QŨ4-R糲 4-pX r~lsB6R:Xh h@_"/MYԻ#rk0 G{x|JR%=ZIv(;dy tI9$}ͅ0n U963Dfm Aa.g?AuwHLуJ$P9L>Ԥ,^TTvRW*Ym>HC2l-ZC Ǻ{@͞IjR228ޙ3a$m 4CwOL,_i}iVn*HDTe2Ft ]|^.hFGI9$1Jw2ueT+$Sk"ZqhjFghqnNi9%#`J8Ukd`~2ߙ0&ăx-FJNb]9Ic iH O+<ӰXMxEћFwDaϧdh*20GE 0|t{m^u4T4QT_%h VO$DAb꼐DKF!l@7ޞ\I#ejh>(̞%SG6gHތRgD3K`ǐp֚ga+' #\:SNw9;.97L9B J=AE56O̧Ýe fJ`ɻݍr?0;r7=Q]^glWt-B͍:I ڏKޚE<Qyр?eGzx | e){8zE/gHZs=a,Ѥ lԮarP)u$*o"[u $U0*Uhu uiR-5蔳E^NG>)Quύ;յc+M\8pvϨ'e'wJI?kъ1_8AlPv* ߺP[fp3B9hp.0' %41G3CuϾ-tt&]܋>zhAZGr' NP8gtvo㾰E&v6taL\'?ǟqN'eUՕKytD~C6h?zEeD[a1'П0HH Pĥb:L 4G-ϿF=':9c-}дl蕧h&IOJ4hRy7Vj"GPfngV%OJTW2.Q{Uh2$] ^YY$n|)ݬH궧Dl`\)ˉt)Xm ϫQ,ǠMWD;2 br,[مK|_V-NIА ;KrP! ,c#h )dAzrU%#eO R[dMJ҈@sC\ |YEV$k7;hq=07u8Z-ӯʺXqkE,=T. Q&.7J=Ɏd'mC|pm(^ &,=Uow0[| Pʧ] (8mG?J(( 3f8 `R٦~k۲8]Pp|{R7PR,ɾjr`n }Hɜ{JGK5 zӶ4t`O칑Z;C N7p594(M^$5;>4Ë܊օ]YM žyKe*!Z.}<9\ٰ(]@Q)$V&R:b5H(T!MoM зl]]]-Qυ4Gnb͡}I˰Rg'N0\nE?s!F!e\5}`!~Ե~۔JB (,_ڶwItuAI > f8M -FaWe9m:_[qbD*TBe{:Ь3}wneJ/BwiI➆=%z%Q /avs[N\u8kԯGњU?+RUgf&X)>*Gjdh&Y:I6Gg/dzOR*!d K&Z|2Ty1*'@YraF +52D^0jmyeU(Z3%mEz/JZYLps (=HLIQz QF#4w_! eh+(̴}n(cӁL62%6IUA9]}c}s*ԝ؋B>4,Zp#(>$4f.iur痤؝t: Aٮ% n>/ۮ+5+ pIs~1ycHM+UX[JyXTm%W5̑GH..A-ܵ_|Z \U)ݠpKuK)iڇansY+H$QܴTbZyf"#c@ī{Q44ubzPv+Y? rWzӳtu/ׇ<欵%i̪;jM Yh y4BD59O"|uݿ1&dGOzTn{詁.nHrGAu {5\lx~j V,4۲KcI*dF9!QVB'a;@X G]J;6ƫף7樃eH՝S T#JyN#{׳@Nmp`# RR༣6hB>(%Ŭ* 䫯}1`?(Mr8yV01 r s$%Ž=b,GX }GӬ]aH졷?#r=۫&;N34aYWAՋYI܃נE=ЯZ׾ ɧ6͋rt{`tH/`CF@.\/Q8GFT 17Q-2%͗}Ar!OEU-]R>8Af bMJO h6?R%2#[J첁aK]IŞ+A6px7f.yq)O`-yc܊0Yh?F!1i6 ##3=t5˖ņ;#0*U7֨ukM g'Kk F'~&>D=bHo\"$wQG %m>6s[Ł=nUx!{Up b]Ý:Gn$v]XnoXaskiD;[') vmǾUwejza~sGhdw^-ޙՕ>wu.o%PaDIP9ڪE.ڻZ"tu% Z4z=\ɩg(c}wlnvEKsl2oK}̎NнA?A+ ?5&$UFڵ{!;ϑSKUqYfx!h%YJCWּǾ-K2ݶ_ciAK-/x+R2{1GDj*A`jzMӒġ<'u/fvc}'5/yZ\T,eaD~+riXd[)еE.m[3CG "<鴤ꗙ{ob:#OE[dmx[hߡYa0-z8Bk27E?*ݥ ah*Z ϸO4.o5c#' p]b/6'=r5Ǒ=+9vA$%x,_E;o#Lː$=~] ͍ V&ݍfv0RA5':EdV@aڕwHN$*񩵿*ڤ8y:s*~T̳7U9q\i4y}cG=̠g`CAҩY9SMb1SMR3HC]uyĻuC2c!C*a&#QV},b\pHra PƒDeȋ];2#BAl;9{RxfyܫTMqL70rx`-I(wY^5(Tr%P-*n7{|3fFGtKdǍB-w/aJv(~lր9XVM¢:2Gshh)Mx)_ZAG=0 J(o kـ*>\X;ǜJ6 J-g|a__yɣxصա!}#NAKlz譾Qmağh-A%jw pNEEOFq P_9-uIl(Fhv!@,~b{=UH1橲WMlI>ѳϒ6JyiKY;opFvp٦~>+ROp{sBR݌PT'G?JDx~!+QESaMҥO'87c0&:ʦ3wҼ0QBJ(Ȍލ%3~BVMMD;es1Kɚ :'Q!΋trVy--(ڄP;zY5=ag %9EU '1t :H6MHr!aQ"EZ O݂)>j"hkiFn&ZSB%~64 L()+)S 0PFq|b5-.VPJw.hE$l|$νΎ ݖ^<3qʊ"3dCUiD*Tչ2cF,A` -:d~rͳcٮar. :׎&s<xPlC>B CXiQ5qܡuQᥧ5)oI+@}.! lTE{JVKS$іq L̓@N%{7k=}3ɯ-hA}g&N{NUpZ]Y9nnv }C[ uC0 %\NN%nUSСqOo1GD~ER@#NRx%;J|/l~_d"yw%O?"|6U{Bu 4Mr)=l??ܾM}$bЏ2tU9!+#rP0t3A7E'-ο)0sjNsp@[̸PVWzaW\'Iwwkt-SZ:ogN8gZO k{}\.^(-7qGMlÎ)rs_G鼵B@@5Ao9תmی5R8D䌉+!Iooj&TOHyr7>L > HULkDҳ(;!@f\(5AvYZjP? Ty }5YPۇ2_S{%-s̡W\ 0cZS*9HT-9OF>܊,BE!wyU #x@ g@*{,H3d5ts0T7bfj);(*x9]NӬpRJCf Wm9͢k4Ϊ nz­CIY8/rAEՂIBׯ5vAG6$b~ly6cujyr@5_&;Bp7BPxc_C`fzJt@q&xK-ͭ'Ԗ uV)פ'j[fd0.꡻,}{,6P,>~]R._ϛn$2%KI /~C@(r;^~Q:^O/d1OIh =Suw՞ˆߦȌm4 ZSp p m3DpSlP/coG#40TQ$[⤈+ x Q.|3Dv?5ٽz1SW~?O@"ˌ(3dc>D# $/=*8h<%-N(C}n{BMry BXW ۨ?R;!sditV?OV3Q">ʆa!9cmicԃqCw>ղPJ q^.Z0p6G&@"Y4+b6=P/f9 a6+3$5i'i , qK(ݩ67B;KK|sxG~L%stC\ȰcBcv杄8Z 㓪I %GWWrVȉS/wаoM<n4'E{4KF>fU*q(m]v^:Hȭ'^[yd rS?@J>8pjc=rݡ?xN`}>ݵmU,ʼ,,N(b@azH(ڏC)4Rɩd@`𾿇IGy 2ÃRwq§4' [*aA=Vx a.0C 5Gs^9ߌNk=T1bsT trǝXnLw-y#һ=OݽCt.cqxi u0;JX82dlغX2:!Ԍ*ZaOΏNa 9:"bE:Qi7kqQ~xiV-P]7ܓn6 j3Zp^5|&'`#519ԅDYcy0A6qZUufS;"#QYCn6_mC3+#r8EA(01f0j8z13Ybu&*2V:8ȕuCD7l]UK\K aдr +E=Mڮ[( mWsRo)mB>d*L0qަE-eOR'yاUH;WY7(@R)ԘdLN8Ux^ 䊿&Eˌ:fVT.0z}:uIcٮ[S-5 2fxK8<ы/Ɂ&+ZL)='MxjkGYXcl].iz ѣ %DҘt*jr#4eL "N<@S\W?i]Z07]TŒS>R.wU/G.-j&ݲ_>^}TpSw}cwTh=dذٙU<$πU]4S 0pzxe(/0{B}rN:C/c巤6'󋇯H@c1&4@ُOv\ Z{z:pJ๺ w Ԃ!paʳȿ8i 5R;~ Ӽntfw0y*FN098\<%jHzv)9Yr'6zfdk¨wuK:4wZ;؃$@9pH3Qt0G"IsB0CIC` sMC|BWyiND? (uKT~ԚB@,9_[Wར/~NO<^S-aL][hB6sBkiH N032ZYX#qڮD?*0ըUY͗~pKKS]zn"D]vv@I<Sƾtrz ihӻ)k_oר$O)R<@I5QU_l x 7r8uhI1 &1E G9weI Ţ&; H1Na'IeS*~pRs;q1}g?yvU T%4WO*"$e Sn䢏IiY*Ms:٬">aA 17cy ^'Kmi7ZRՐ[Ќqa^|cZ Kb"C =sJJ\|ySDGz4c%Q=iW;MQv.\pZ8b0"'SKs0c,# ܻ)O~i^ܩ@ D샆90䁉 !@G|UcIZ#g:DgHC Ѭ-IYҀʺ0D>i%?t&|'Y+V|Ӭ9}??&p֚Oj⤤ {eTDup8\1oatYt-I]%^ Ww:s3Ɨ@[׫[[7񹽒V ȉõ{tE-;Fnۗ/v vSόy IjSy=7ükZnt;~e??g~=~ٟN9 蛔r97t]<)ld0WdmJq=* [+ X%Nqr{*i3OˏwZ)`1 d˿\$F軩EВ$/]gۥf]Yw"gs³H_f~Iw.L o!o  K{zMeaɅ=rr9[ T6׬1M+6 1G3YJ)jl{J]l0*k0e .P());l@<<;tPpЃIZ*i' Mf$GZaz4ule?3ǘjUPjJYpM+kH` 2ܱ7xroً@W@az@]1a-V$tprmQ*HCrJ~;x@xG74M{A] Cto9/(!wZI) Ϗ?U9!h#PbLJ~ G}ϰKU$Z_r$eAtXuUX=qo3G<&x{7H^w5| OTi)_rp;yһg]]U/ bWKDAG f-T oI!V.S~R+x@En|m6.<^Uo[+VZ41=wxQ}siÙ˂r@kWMQuŇEE-;:Yy%C,&s{3 ZxhA'3O.XeXcS<-aiEL;dgǟ`ɝ;y5ag1P|r읁Q?2?{?njG[r-Ev'j}9M*F*Nw%Rɣ]G]yA.TOզqE%Z3C8?ͺC9Nk$%2%]|VdRGNJ-0p[+xSFq^FQk,8Ș3TDgzY^*x'cuؙCX1-C 39^iA| ~MuܭjMlN%GD8MJbq[,+;8i':Cc$HFb觯ںFz5f60QlzJ@>H0ؒ?X[xn X Lp:KۈX= %_^"b,W]Ud8 K$&N`?=<qəZ(״@orio6=FMzaE9~){+Pe 5rQhDQgrܔ%^ާq#VZs2 7B(;^4@֒=QRBPReFCG?].:mdp4EVm x7 RY UfC>xL2w9Eo\U_4kǞŒS걊w(6J Cj5-yϱÉW>Ǹ8C)dQ9jQd=f]QCle&y @0yk&2i,ʦ3Pz.k%YR`ŧevLC.wN?c`悦R<|ݧI2j#X5|򋛶qSgMYp8.պY0nUZS*r)Twb-F @54p H* *2qcD`q8f0>Y'ORU4S,.k%lڵzG8E@%ToV>L GoIU5-U,ɱ\BH>hV_>PX2h1^Yn+"v>[ۑKԚ̋dȆ&"K#3g.:yPRsy [[̝q͇٤^yËT?b3лgM# 䉁n.vy%tr=I0:A@i|Os_ĝm j=Y$$UU`ZN7'!E^CiUp#WsztII~<˺^SCU?= .tÝ󂒏p{ͯri-OrM<ؾGPV!K*sVDÍSs2-@ WFF'2̃ wiЧ>hGz;/7_YO7z0[)Y]^*,nKb':9MɇH1)nG)>) 󎥧.RG ; c[!,;4=JAIQtLɽYX)ϑ/G $: b?06/r5 xU~_qǴ'A73Ho `[OJUX88EsX=A7D2w}8hK1eM}YUz_,ףMfǿH*m.Ţ4pGc}lqMRBkZlrX!=YTGnJ588-1.1)Xs~e1х>sE{=,kqaJbG{y\Q[U&fn ʐW"?iʦ6!"Jq5Mj~ t VוLȷ/5\5]7K{G=Eg+0Y|dt" j탙zaZ0ЧN P\ϛZu;jpgB?:[Zr!M{̷^{?}Uo'(8a^bϧƚn֒VO%(ҫbٺvӑ:RSzwڮ>y?1 KCcGn|FxA&ѐ/siǤ5c~7|6O4Cw o KcMU>ś y~0mӪjYL}Uo@h>=D۪ s*,9$i\QC VaI§xd?(8))4f E)7i&Sͤ6we V[Uܓtk~}*x7K]㌮\bu0f!Tw?H]#dF-q{Ȼ!?wzO Me8s1,z݋yU.^J=A =":E;2,&%)(ut0jeҮ0>i']qLQ+e5fdHZ =1dn":Rxh+48+iD9E*}PVI!alk&V·  2?s);aZR+љ-O[!--8s5 F$I0v$Q eLx-ݥ4.H8M3f&R|qn*Ի~ʸ a7yBZ'1PO=Ǧ+ <FJHj{#%{ݮ g|ȑ/ <5ƕRͣuꎮWJ"{@^5+i+H݊XNYSnՊtũh]KٷQO]z}?OD 5@ETg0Qg\>!2s34.H~:Np,S/_tLNT*ԁEqj+P,rC=oR@4.$Nf*A1dդ) h7IqaK"_ET\Ʋ9~p,-27Fׇ{:f1{ nh}D;G,9Y=zLXq|x:Q%hu?H\=A7ˠ<p =w䥿Z*ay7s~0h<P|Q_x|ft18Ry_{"/Vŷ64wt@*vn>'^ ]K7a|֙kfxQ{ZGi"FD:}M%wM̀45;9W::c!UkQ]rWYfKq^p!߷#J"6xN](0D'+tRz#ao bFL-#LKKK?'}pXKr,,+>xփ]}+~r+;Fa41Mup#ht^ PB='69um" Ѐf<[ڶ\cwJJP- 7&x"74{:+cܴmIz cy\ ._ZZIG.ʳ~mؿ=Nk ZybX)\5m:!9J& 3]0)q+5G1^.CGUzNud%|UU.KhC35be *>/C./]8qs<+we>.~(ZyG_,#5%IT]f҇1 WcG-K%䌐f*PcDSN֤J3Zn F5U"ꟽO0'+ѡp$u鵁LVP#~zj7EtO Kav#eflO2)+kU >`RXp"Xm$KhU~!qщ%n5e~`G٨)E"54ʓ_TuRUDOG0x@̮}UʜWRP巤3Vp7A޽ƈ gHE|na0\Vx0,[0Hw-^Ϸn?^[NQ~ ^X /Ý|:ރ:=8i0ϴ;)';̡Ֆ{)܃`^Zk*ς ,͹nzd2J6>Y#@ix}wDg*c*C> RA0ƫΓn)o~C&\Uψ~ *=4hV~ԧU7:D!HM??`#]NaFqT#>Nd:b5s]k{-_*_g'wHy#M2l:wew39fv]Ffa)EPpY_:,E[W[ A*aIJkG]$:[pVW]Pe/'Ζn_U9ŗ uN{sV~RyPsO Ux-l (͜^H_t,LuXrwk(Xǣ6MԉX <=SkO/U82CmY4?LA?Uᔽ  <,*_/%'`%};]"x[taDC0jfv>eW͈@dhRz%y.Py4u N(5 *93/Nu7{]&UpA,ه[ρ\n) FD3v8.CFyˮlM+]eQ `+ؽ3ڔ2_a$VIlpTS_hJ@=6M:09܆m%]<)HPgzw s3NV~4x,qF`P )F`rO "ϧZ n0^N@u]Hr?/ӴZvOұbMR\B%#S~of_*Gʖ& 2eX/ɨylO3$6ڿg0i1hU,QWr`@ j32ϠҸ0ݓ~:i`>CZb*o_cO[iAmڒS#p#26+x5[x0Y^gmܼ6X R(M-GfPy'pKyp6k5e?7jKiZ!ތ3C Pk >xUMĶݜǮk6>o6c 515X Y,J#k2 YnU%x͎&&!Bq8#rHk+A,i%,w˝f@]l"JYS'Jq*V2bZ_5+z߫]c4Ntɸl)Xu  ,Md̕4$%!(M^KfCBkZ6әC8zl(@_|diZ9Hs n )%$j.J̰WYj`d!'\,ꗘx%.)BQBFHW0bi $#knZƦðb#`Mzd[4!3۝G9|Yd(& BQ%1F9* $Lf0@HHL2(J.+3s~fe㼼y_*n|I悡NYm= >34߽DIiL7> )Lyhv M?!A.b%0M\Uqtzp"V%;)SWjD%ϳL=Ci RtJr%'z@MS&Ͱ.24Q86A~:5y42gS@19Z 񨢚x&kdoRT LAD8eT|6UP#\Rg4?}i*!%TE+edɃzMq;MM"9S0NjU!?%~ dC.+)?q= ܡWCjb%`>-a{JS6YIIyr)l';g*K- LVVL+ j%Ul3ݒ u=*V#E#>6|>~^vI8[RE!*Iw[3}?1ʙުF^SJ+{W%7xz:vyV*wb|?Hcřr]yEuD ) \seY4FvFĎSx?K2;023mdtu21t_9+,1 јmwG?to @ܾwOb|.'J 't*qңF1l@  d@0.!|ƁOKy&Q'R'hAӺ)!i؏: )Iq; FHWD}Y(}G jg60 WĒ %aô4ޢ@?WMG}?;n~kekJ-SP5RMyT QE!5'(07ntOja׷-TE-kAvHv7Qv  \B$d~IvW^{H˳(u^&(5rIG)Wj&LUJ xEڢ{G"T/r-d J( -"_ CJv>dk a,H@@KHX=R- ךjW25*$W*bv R{s* 6BN6"UcJ,K?rq^}j٧4ͲvO_2̲)9AmJ_M! c !Y'uwsM:q: SLQ 7`b!I(&q7;ˏFj8)B똫B/b dgгhNBs)!)`3˼QCiļ5PR'*zɒPn !6,XgB7m& c :ʻU7NZEtin(GZ9xgRjj8H5U0*PCN@R!Gb5{z݄" OH36룓:[-chOm1w0C -HE7؊1xXr N4`x2æCx1a>I>OБ1R1S$G7eLUGbpU?4ZY"ÞtYN(/+ #Ih1@]Ac<Cl)QHlYl9n<3"Jy I-!<#R[r(Ci})9ع,6(jǩcGc(DC@@ &UCVUjwі?^ ԡ! 3rf/Ɔ"a]\t&30s U҉1s7e𖊥sFg8&9wETQ夞7s>$쫦R1>mo?g ݭ~K.: ⢞wR-%ѣE/ hgAnUIERZY`RTcwTo$";ʿl!׾ρ0 vnRN'Q#Z XJ|OʿEU[r)QRMze"|XXix75K=AV'?&IŖbǧO&g)pq%nqoܢq(M;̹]xvT;&"UѤ?]D lvΠԩ$Uli)y4W1rYC3C)#r))㒽5cKt&c9sCY$$B:@&ug4Z+C~Y^%씪pFsrA Q\g _-T X!)aVņY&{AΦ$jbrôgL%lR)YbX~UڕbhGv?0%S> e w˾˪FUnUg**,_"hj]bdaz%')ջ#p(PBy-R*8 ya!"OR@D`^x]U hw,VWT9US`JӍRK#d1BOJE;'zUٲZB>3,C[=Ťo1.Jt.=ᐴhm^~d6;S+/̮A^Fx`ȦQ4(v927]gf!b!yI'ehc eep1ab(*z N+2%Y\ȟ16Lf;iA -0+=e3*s-s~PgZ`ՕP iQJT]^뜽}s'Z^PN'>}R) j4Rݫ|N0-}UAp-ڀ* e>_d,x;#~-Tc7vNGDIp:J]̼MomX|X4=\ud%GwsIXK>i~&>G¦^{&0>NuydRMKXU-\KW` b5m"]bwk=p+[7IWa*p׽p aYS+Ga 0qpbEvr$ S%9x Rc. q;ZbyNq|sV_:u?8I*e@MMK BjV«S#Nn|#L"v/2%0iza@N$)lvR] O1>5uR{ݸF! lHj3Lji]9Y0–uAhMREӲ'R8U68E?%3X'&>E%7iSM(Fp`JUԒѤ]~Z4ʬ'{1|#s.G!jMOmOx9"3)?19WC)%٘ksfP1IxJ)n5eCԸdisg~>gjQ5WJĆ(NA%3RZ0Q/n凘>%/bQ,t7s ADi;™4CNMQWGHQl "֖}0ǀm]hNI]U3 0eVΕpi~T)Te1ghj[C%8x D.+m*!Q8"NU fWNNa2D̦%G|Z3? L,,&YrR_T)?!iT+k4)ε?LEetQ_IED*sGL:T,T;EY}Ҡ(iH!yJ5isÑ` D$VJuh GL;*BG`i[UVܷB:5P,6Ccb(Dz18T8 4C^ReLqE8Ղ{ P9|)) &9*(_Lt[V# "G$C WrrzaL\M!I\:irՇTLâ,qR ;p赈-iCꣅ0z `^@ q,[/o>"@>&$G x9I2^I /+ctC\W0㔟=./9%4_c>rbV[J.wԪLJA'R+S6 . %7sUKf mWuqzF= ɯq RaӽTTnpn|Q}*z!W+LPd 4pWR[:Fž{ ['MRH@t1Xax̠$h8B$dhk}'y(B +vxUӸdJ+ijT A9и}8i*'t|1  Z"+ ߱RGO#,wi@~gL Tuv14CZ!Y;ag8T*R)|n·CS VV+n\ {8i/> v,JJEY昽PCi!_VG3c( XfA*U@] 1ԧlc?JJD렰>B!K   EU|i̅*4ˎT% L)0dJu,b'r=ZdJ(`\s7/WI:TԕC Y=<Z:± K--nGMGc*zX36٥P&>zo4}1s{|t8/2,I}Xɟ*.C~zY\cnyǒTzھ|ݍ>B5l?ˀ+H:LXDh>&nd:aUrz mЪ(^wR*ǰŶ{Z&~^~+{Eڇue\ d@ a4;y([Uc圣mr2  m1Ѓ!ôlHxgɼaZapҖ4pL3wKSg|'*)iBX8鈊Tk&~Qkb[RnPiPZ .vjgJ|;A L$BG?OA d L-9ܴnsJzAGvd4nY%K) Χ(3حZGMc0rr  Սf,1򖣍*7!/ς"#{:6uՏӒA0"$T~4vrF߷E]hVXa$FC.}.L@jOYܽJ%˲׿i<=I8К"r)KH1#өO(.!o)YcjL`2!G2+ FWwɴW_;Hdik)\T#^2W("~xlNr}LE,|UY޿ֿ/7՟Ϧ^V[`$^ +[VD{To>GEi2˔y5%|'xj쏩44 S~xz(IUp5},|b9`b^9qA!>~Bm_/)~lj mIjLkB,H])2A`{6i0ٖ$(*b'mj(ȅdF>@*5,lPNp`.1p|Rr#ѨB-y4I-]5oUijףjrٗuO e[px)WRV*UeևL1Y4ʪn*8 e;YLQOM._b+$M&BCT+9\zKUt@#S5MںКHfaLL:p=V︢ڌs*/|}A)I0P 1?~{??+#a͠(6qn? hJ rpڈ,,1nn"(̟%| T-S@ڋj"?0.4GcL|:pL%!#2c'I nܿQNWH~S($z:NeO<_x4E?RRn <uokm@nsľWJ(\_70wͦU]o5>u >N%@ö}FJU~ }Y{Y ğP{î[s-P6KϸuN:շZsC Խ%g xr'u{*J!I6ێ-zXz #*ʾ74-Od*>>]?ufV- U8qjm&NlUKVj]&r`)>qd#iig|^HJ{m6f[*寲 $LSvh7b4aŰ"'_˾&0&̈Xܡvd!#DډM%1ԏDoYHN > *roUO]; {&(x˒7%^dėc"ʛz1l*^C™(/U!<ojdL.C%&ف(/9fԓ^>_I*KL2P$=y>`z(C!Lv>C`^)]2}I콡RIZ/&Hd.@7jV(l=ds[obpjMYPR?9z"~ ;:{p%50l8!\47R&)۫yž%RcV> Voq./$.&>*I~BݭXkt9[oQm$#@܎[zy;UŠ'|ۃS/I{82sU r`fJo,uw,;]-quwzT C|ľhY薧'5DO럑{ѽS.kGlHغ$n;YV1=p`sf?<"h`P'ؘ9FGj@bh:z 풵Hl-% } 'ҙ"W4lԋ=Ӗeaa%#L (%il'a:ֺ&IV8hG`ka\TeT'@߈S@rXev@ PH%Ða@~WUI{ [WB_W?I=9P ͮ&Nm{}%Z=! PTU;u!)[K5U\JJ~륬mHz^:+I&t5O?ܛj1FuPJףoa*N嶀RI h2&EȎW<Dn LPJ\~Wš$b3<}s*8 b=jv M/:0>$RG[M9Yph^IIW)aB.6mF,@3^a9̐]Q_{bDiz@"(OvA7.u[0ۤ >HxDwf(ݢ*KQtXԳ$<y{'<4-/f싗jyb 7B߽k6~x >?{mtJ [^)0s7,), n&K_$kEm?#|t/d恭3Q(6_mp!b2ߴjuU䓳KeL9Fu㞗w:= Ь^Mˣc8 M9>IF9W9}+8It*=Ծ{V]Dme~د/}X}0( ~\}SVR8bTTUܟ5IQ;_T~9: $񵂴UWZǗ}ܟ1Tj :azm[xu wRUd?,|Ow}تMdH]db*~ijpU^N%gÕvP완zpȃu=w&814ċ:]1 WYpµ'z=}&]nXɥpW@^"9$q#y,9SA];6Im֛(#HEpcO$ʃ6zp5r7lWdLaDCrg8rF墌b#T t %3׭@?rwlᡄQ[o4@IQ w~ |YBjHjy/isZJR(S7~RNDBsd MeJ.19*3kʕ\ph)kV@)q%'<$R`G֫٫9 TVB*$hH =umwYRk:Һ2 \4T 1ΆH,Оs7 .~qm$B)Mp)J:{@/)!cjsKNs~w”)N|x{xbrb.,r׌1(bL3~WFi,e3)ոJ(N0 aZem9wR-ì@Գ!5K~3G$n1<(O;EsRjau>NJO''ɎqMڻj#C{P,{%i-4Ag `Å48c(]@pn>>6KvѤ(6[4rϑqںI5^4HUI3ݴ%;LkyR 06r:p;oQcb{蟉% @ˏY,{҇{h'M) K<§w {z>=,&)Ҷ>AXur%f{yMEi[;m+t9溨G~Fڝc6[:+].;u56IgչR&b!_J--)O".yrdpG@K\P0ď6i.韝D{g2iY>؇8k/0_QIFR ulfS<=]4 a`.tLnD|R#%?ÜŰr%+e4 kLwyʋmiĉMeٴ„ =zqe:;$ʁmTf]i$<RC]@6 0_2"fE&сRPvAM#j^RTcUAFR(N6D[3)i2ɦ?۟~FR)>^(8>^q". H,UBŽ,H1һp@Sum8O%K=q)s|v&E |;V۠庥~vC2r$l %Y`eEY}Q*qB/MJMU 'tj\k@[Sqْnmv*:˵ǭq6uTcjQ0Ytc dUJy@%>u^bPÅ*"AÁʳ{  5CU4OdGWC[0M;Ɵ~p|-p%Ascd'"P``~*7**̧:ԨpWmL×;2-E`|^.꺁<]|Q׸jvhh5NSIu0)sbji궗}bsd_.QE.FO_hVo$>G:6Je;*2/E=AjM"{S_\5}j,0|藺/ |7g%%ƸOZTC*,ߖֳr1禪4!0VlюitNV+sPMZS-2_n,v8HyNl` "\U2aZn%sԲzp`k*Jux1KVzNv߄Y7LB.v`+\3n='Zet5ַ)PmΙ4T>.@h8VgY)4A~= j9ʙnkN"V!! )ci" YW% M>)Z(.*oI?JL'jv]0֦*iloB2Ei$E/.7RO_IFG?@"wвb~lǡRS*LCBɞ `1g7<'W 5%_m3 |#ɐR|xgq?wg*~Krټu6ˑ 3+O1T3IQIUtu&C9cf d}s6f=u B K1L &2!$ČT<uJ .!Ԏv%)t3fl: rM sfIJ>փڷ׽֥bh(1It][,m2`0P,+ ڠEQGc,&APvTkf̓++y3$N%h!րS/5*rjhT+º,$6RSxBC]VI06M) ZQˏ_Io &פZw`3 =JP4ʮY8lH oW溾% Wff@efɱo$? nG,KD[UXl.J =l>=lN~mQ, ˗ٟ?)ɿpL)򅻹Zb\\5+}p;W' $Q훢b@!DFaًMQ>w񥞣Z}n6OodaZӆC(V bʰ$A\RbhT%8"fVjnd2 u QN)J^DH$nu¹|OJwSjyuߥN)5 yY3C}[=N^LZ |mվ3ڑz#ʾP_7Av~uZ04ڽuND9RA:Eٺ?[P#=azx kO'6_w-Mc߶ʣYxBX1-w&Ӻ=異`T 6K-o_Аm}Y3jiN*7) H%(ZϳєEx2a}| H4 ҂+`O_${Kw] nE?$58,=O&F/_eD]s[Αjd?Q08C_tsծBRʫpOzy|oZck??Pkyñ_J4'No|KeQތ+r`RBo#<Gch~ڱ棛Yb?jޗIk`B]rqw޿O7>RVc`(jQG7ZȲ669-qC'Yz]Hz6mLLiy֮_8@P e9d#/fJS47ZefdL0Uy!&mڙEm\R#ىji{G:PjZ;*ݙʵ'pV_54NJ2aM+?'7r&ˊܣ7TKK770%ʴN*&uХv8|Dm2;0hR, 0=:KKScMI-bƐ}\W]ysP/%5dKeھB~I\)馥SIO7$WWw_#V8)o>72/MM G@W -mu]cK 6NB++Wls_]6iNu,OAIP;d L PqFǐsɞ1/ I~`TշTʕ5$>>rW_e1_w;\JP Y\X 5R&(Ss)Y. 3Q5kdf϶M4Iu7)ђT$SzM9eDK ?3yQKC+H6{fx1w[߉4de5d77ogg~hMOwIOl rCmRGtYY/?COD#;Mrř'[,<7h DƐ;lNáQeaIj i &NR'Xu51MJ[9xWMc^6Wޅɣ>5F0Pt4 7[H(ЁF'ID^ET!Ů$r"Rt_xj@/z|*@WݔضU` ^6DiO\]S}'tnjAu.u)xñ.*vX' , UOy!ŕcXM΀\.@z"p;o8vRMݫX-.԰^+v¶?H!es|`Z۱$#Pآ=5QIc}d/ NVŀZ!1D @v9V5QshƋ|Y<hNǘ2^:; f~*#y-8Qa?Qi`*!9{z6_xE}T$6 8DgO,lsw VtLՈ2DcݻӾ8[EٽNֳ(-ʬd 8M*N*4&m4UB#A+XY\PZ+\IfxP{%A4sZy^syq\P%T¾kDbJFk;P%Jq 1=y .kipj* =Uq=T$Iz'G䡋8rD45VcOUBJm</UU&iDF.v^U]*Kiy4hnR̺+I6rt eQX7v~_(u}/QvQ4I/7vS rvZbmd]!9dA U5I?)ftx2+f43U쵇X( OqB,))mi,e)9>뽛h$G>Sg:TOܗtVK9;96Ed b)?6LQe%sU}Cg qRaLHNAW`)iu`;)dL=ܒ :!9ʋf6^V4D`DVğADP {0RoGa0 Cc+0bP〉J*f b]>] ԏ ]-mR`\F1z\^ʺ,!h-1Gh\ (_o NjRV`Yȓ$Ӗ4ǡR@h$DB'p:wt MJz˞F^T47M}ZIN?Q)1t>8BEޜEYƓ <MQSIUP*,"f1`1+ ֺnڀ7_m7rɨK s mO`U]]67D v S[\5CP8{9A#DW%:\3. ʂ0ҤđOUwGQ%so&Y0vIRd?3뻮3ʠ7 #7.]Խ74[MluM]RɧЌ^GYj-&rLz=]$)Q`̤?ckީC7ĄW07ǝ)>qGM~*qd%ﵓ>Z`maߤZ1skyuUUpey|vS]nC~є1II(]a|'F? ~O !epޔ\ s~MfۿWiQﺇ)uALx?#'< De<~L7]$^]}i3w Ï0Cyӫ"rP+L}V`axׇy>[4:a쎻q_[m:u6MIaSro8S5r^b ' 84ӻͲRӶ.HҷNөX*ǘqӎP"h|H,9oD\Ǝ#(PJI!5;]n7m>$JJ<0ὕtzN$7o\y>? v2w(أ[qzC /Y/w@QmgU'YYγ 3Kc1Y|$.y~9gfu!Ψ-fg, 3 &l6QAq 9hIפ#!Lul2:UX˃|m4 i 8*(XPtPt$j;y$hz:`k d@mSYS֘d(Vіj8 qE,!'6* A_q%HzT!j-f]EYk$-u%{B7Y =9ESe9u |(T$3rF )SoH&㚩9#Sڀ|+ dcō* HCºfu8?[o#K]9&{oenRh H77 UZT- bylê6pP';K(*xmÑѬT@f["+*c -C'5b<1k'˸U ){ī"53x w'(taRUTX^f"WlX>h~S%q-˒Bb.XrȘ_erFq c*)Bɤb 4E=Jw6s)$5_O4gܸJvIsRv%,?P7RG}`O%:] 1&/N!.,"$B6^HAZ/XIpJ\M펃Wݍ'B &cBecF{q@۬,^;zCg~g7-f@fJk'W92ٜN'0'꡾.J,&Rr-^i,hS]ѪkLkͻ:HIA+MW]+? ~Eł-ƍ;\ݨO@CRF' s)G:ʎWU X:VBv_T͂ݯ+{v|cFԊMjP냵\V-@T0|qȥW䲷@Rne<>S:w:=Sr ÿULE6 W <= MƔQ4(b)D<@w *<||vdס…=蕠rN١9tEDU`jG'Aa_:2bq#YAIFO:x9!b%U -۰.G]?m/_~d Ʋt+C&žJP y%/VY6+$_7U@(ZliUELQ k?ϕPc֒}PpJ4idB FS@"'5trKܺ, A%'zv߀Pj us6]_}{=Ms$^a?R'5K T#R&CKt\"#m"9ptSINwĩ'" p9h\ Co\Pi1䓥ΛO iC@,:/5^&ZȳYֱ{K^)%B>+.N#|tY`C0}Eޤ \sN*$鐈=g-/gK8Ȭvm/TN(aiwDF}_j73DOᅴ%ʒy|gzo*GRqiAr7+Wi؟ld.9>g 2PWG D6KZ5rI^r%is])y^ag,0qO/N9ZjZz4TNOU_;J3zLBؤYH`hU~d+:~+ m7>94:{3Z.W@g=_50QNkX,Ew'M8"w{HmjP }+KaOI?o) gb7tB+X.Ծpw|(! 6Q{nnoH}}/Y94* ϿWiE:; cuRWxPbjzeaN I.2$ " mYvDr?rUMj4B~URٶ>xwD(".43N̂D⊶#ejƳS~IjˢRʤDPN#aSq:9}1RQ˟aqn m ݟ=Q/)[Puf>*tȁ_9F[$~8AiZD0PB:Ԟ6i=^: L HB@)gN˥]Y6g,"ؖ7,i ј?NҚ(hLP(r+s#Z͜,.(@bIdYd$QiE\k܈T4~J9,qf*]*֠L{)EPxK!չN⬼ѪIOYH8{5=h9Hp]{Die"k!ߩ.{]XN T "Ft8ߌ|״ 1+^=>$4Pv@C@g,z_i>yv(B[ ۩?s"(y|v7~BroEyZ_`F|vki gÑnTrCI;cGvÒ襾,OS5>ksxBo,$__w39RO@)K;O&OwN.Nhro%J=F??DOD=~RԆt|X.g_PXp-DBG$O8w9SY5WWۺ([HQWlגljS|+?/O(E9NP90zOYI};R㪶$ ^n!+u#9~0ރ#hR|?-'(qH4KTzs\p0'0F G DO/\d%?NoXσ9> ޴[9t M %TyDRFT Đ?C@vԟXMTNN/t8t6+^$DŽNtd $)g#yh4'G'+2d?^q?<(uft: և}^BALcx/ VxS͔A6Xfh wWcdx1gEzY{ `evo.RqU_gw0fjBIIJUZ:Zm+@}~= RAN^ Tû]\zU v"" Imd }0W\ ?JE7``ǙxZ,+kjb.|bCӠu,x8SXY֡cPY4n-bW*9?2S6^ehC-F9}IB!`hYI U\RqBeӥy-JP5ģ I6}`Ql΁;%Ƒ,o[wk洑zy^% _-,J4:ؾ `%NVF =mBA>AP`F%}8)Hd Ia5>.r;F>xwD@Jbs>I)M>bq2#1hv'yG'hi&``窲I-PCP˗6o)uK'5کRV@BjgJCȀfJ&RkfItQ5WrOy~>ԆآKъuAۯR=,-/ε^کh,>%m M iB*J;wH3x`/<0lq)k{t d?:םjyC Z+9vv"$=(B <]gOݧ2zV @}틥^8W ZL5ux;T`υ8 շΌMbnHo8!gQf ?Be jت~k X5-R\ KIgiɨ>ƵuIeꁣQv%:s5<`N6y1&,T3jcE 0iުB3\1^]@:1NJT]љV5ZL) xA|n4bJ\m0Jqُ/R~JHu k e lE*X#?J6uWU:.0ruS&Bde4(AL^ %.sR׊m*(9aN⚲|MIG/xcy-gvHc,h;F}Mԣ{a@8A^^uR2o@FcwAhFXrpDA3uf$:I, 9KqCa޸ ?ܙMh7S?PfZ'9Vܥ5[Zb:qt^F<=Ÿ4:>RΨig 5a.ERsʤ{E ş11N4O%];QBa6rv"V-aEDw,WU/̛T"=Ҟ^}ݭjE'%|;=H|&)oy1ݐ7x%Wz;CN()~ai~pgE6$8>u9H13<%Z##᳿K\1>|&$/?WЗ2Sכb(%d䧡k<%OPUSٟm'QQ m~zjd8Vy(=,"{ yQMU~+[#Hw=!r[zR%;zU?\ p]y6ɍ9c[5Í*Fw# fA@NeyW˺5_Vw&?K!s}0yzydD (ŸqRť;wS>kQ0 o$|ޤ U*Uճy8 3rF<cj9*2.ܨvrZ|ԬYMxּ;z$Y B-=ʮOrBOv+/T!hS @ H<-7Ӏ6M>Ez]]b^*u;CŦ((!_r@:Ζج]rPV~''aث2;h!`~q3-(Qc]A+7gwoǣgiU[g}n?f׋J B4c ܀9@,&怮sNSNRƥ *kɶi` u(EjJ+=ƓJ`|l."!T%zU%QM祤֡>PyV 1.@K @B^%Ѭ)*ݕ$]6Bs떹vFW+B3Sq[5GSJ*׳ru1O IsInv6b31T mFLZBcŕ?"h}ԥ~vH 0i!uz.-&"{V^g), -}(Ժʮ14:CX^]![Y:SxaPH{ZwH\::eO*Κb,>p!z: a{[UNk( Qhzk_WV}XSR<&Q=9I mRX‡L-[$8$ 5l2YtHQictu~Td*W*ůꞔnm|HqO!`y1RyuϮ`AC~rCHģlI"9m[K9vz0Eg֒_`W=,ں~7U3 Y$.%tOp٫e㻷Akx'yh33 N*ʶnq^T,?"h<j6Li_'W[s+ q mA;@Rui` ݰiq } SxFN$ ѿqMR?b$:ށfv }&dM/8$C p%$OA~=ݣJ4H;Oq|VotG^i{'Ч<SkvM~zpeVz+7 g8x1}桀e4~iV2]m]NC޼uw۪:FTVOl1}r;P!غ>钼!i@mD'mzݤFI=q ޼wN#~zօЍ6E>$ f'a1ţ=dިI*/s .P48d?*m0=,hy\4=LGv냔 %(Vt (cnsBϜ+͓#(Og  fBk-/;+ $x=):A>፪ l[0%3PV )3g{#NiwRЄX`89.%Sryu{Uk#70,h5"kV4Hb3$A4,ۚf ]n(yhVtQ Ӷt'?PSKFVHO= T|rx4T~!؝0)., -IaX!ana7+bv9t|_U=yy2Q_Ap4⬓4_ X)t3l1V7NeC)ZyRd詘XVE~.2KP*PQ<rJ=]Λ4jfg ,  8EXD@VE^y6YRb-jQg{-$ fqHGZ,o.$W GXLk|K %O\Օv)T"|Q ZBESbȤEh4#  N)j<2VЦ0Z!\y|I4>~gBTjLƅwrSPTjiqj`T,& j*w~~yMêC!/ ǀܴ` Y}jQߙ c_*TJYNFO3˷ȶ"am nF" 5X#T`Ӕٰ-͡?.]] K WWkH E#x4aE_ a % O̎C%4Cl2*ƣ1+I>1O$Cjpfsg[G 'z cI.W);Pg_\E4͝Y`@lTiefITB=ct/MF.Vd3f\?ߙK|СЩD~m>?6_x5 Vk\v)k?/`%X/D sSHJa)yV[+~ta:bb&DmްPV̪O=`^w8< \vU^|aޒ rzn&h$gTߘ,GW<֧lsCW(+svTycȓyB[)յ| =1MiQG}xq^/a󽂫x`~|O~L|0g`!^g1 í桟=̗]z;|[ZQb_@Z=(Ox9T4H_f@?va/Bnۦ@GOׁshb<7򧖂URIb94 Q;q[IWLKL{8 =P}վXT ⧧jJpB 9=?NHBɵK=RF-? Xyxy< n.fS#z|[lyw}%ȾA/e)ˏ~+"0F)Ӯ%pʗI(Uxn>%:We;"& =7 3H5P ֡%*K8O<#m͢ ȓT,X),B;~^Gx-~`!Tm`xt90kzٻ 3`Gb"jWYNUN;`P.@T1]kp*'|0P2rJ]eoRƯt iaJůL2Lw&/XIS*S3ǣ"Njz5WF$3CWY&ZgoJfD[V0&|je bFPOQ@) &"P5>4+Ÿ"3N }psȈ:It!SuNe ~M %jlC3 ':!zJdoڏDf LNηo\1OFҊ\F>牳/3y+{4I檮]w|N- UUa&E8[3";媰UtJo^F pWUgŭe8,1mP14MyI/D*!c5vNRtg5*nih[8JJ/HrfaY %X0oRt]  >ᮤH(} ˈ|)]%!n`clja"[@ipnTA#%@\,vb&kCA%j9~U% ((Q(hP)7 L: 7Prbq2ߙ!c|^;ox6jWPAVPnVMr=P NXLs ihl O;ㅀz>]1g-}q@uHlۉ`_2_>eKg:Э,&kU E50K|ACDB^M%Tj5chcҜ2>eO:yF\cJĸO3|TAk &GUQ [%c7)5zCkZ% GR3 I jB$_$Q2 #s ;@ˮ'F13|x&"{t׏}tu.@58 q*ߖաIo`jͲ/u'K6.k8Pqz {OֹI RIف2T\8.3P՛ڜP,KP12zK0ęmZ_Dhx)I ##{He@!ס}_O*HP4Rr;."OgH] PW;jlg p_dnUٖ !'Lj|JJ5 %@$IϤ'T( ^yI+~QyA xl(BR\\4DR%^b.$L r]7AY5#ˆ8CVR1rz2/I u; l.%h6RXQw9~^&Oz7^jg*HW? 6@zaN6PHv"Y> ÿk)lu0}Wj]+wf$rB<>ؗ'K@G[]hpُo%:˳3vݏK =O3_NInr`R<Cx:=~~'&uimjMu=L?qR򛺮'pjb(g,NOwD9懔nMB Hm94ggV*7;eU8G~$DC)%Rg g'8$*iD ^ I,_|$mo8=H +Ax˩Prᦆ^Cn];aB>lrs\:{Id-Q?>00*G .d)kSPTa`w@゜X\ .^J5@jˣgx)lHf!*'tiS%v {C0?be lS!YrcLٷ ?ņ/-];g~-gyŽi5ꄔ5Pc.W ؅RsqߟQ* oZ3R(5g}3~J:r=W p%rBy]|:E1͔ʤBQ˃?z"7BJwwsI)#Gla?,3_UR>K-}?oj7@A@.cfQ@0?Hh*O@ VyP )g}9<0\]Jeg̱h= зU#uj_[R䡅@zk(X]xF%Ș IBqLؒpm%hh}adI:aldD7KlyFV\0LX-jFQVQT$=0PH*_ZC8"=c -*r CM$H@ O[ث(8uNo5qa1Bn$6C-C39+VsD|NcniIqIQ3?h?\@ eT `9W(`=Neu·ȱ QI%ZMdcQcyZwx!F,`fl4?vC!*vjcH,9Q32HٽkPfR'-%$qEIJeYM&&jA(1e=L#B!(iӰбt*&1U`-;9MUN'*d? $8Bq1JjC)GըK(a4HTP_LOGZ'?ٙl Ek1lJ*pc( hD NM+S KD zIC(TTx 4L7W6eGxei0ʎГɺM_?/Ԫw:_7ZtͲۨ|!£zʺ9#PT8zPԽ'(e+5´(cC6_pTNV94>m{"MK&$e Q=+O'`]U=ٯp+VI3?;0 #֏t(zKr1h~RHr5%O,?BǍ!LRu8G5jj_|ՋcCY@v5hPlm$رZ E,H ϻ[}/>`^woɀfVuH/xn8?,|Y Zi7p6,Ncow*v`@a82(AcԺ>$p ;>lZhgw[P75Ro48nR˗PcJ<4~ (X8p ;aFLstiiyv47"EeQ)v|uHػj #fM 8pZ?Td+fg8>~j|&B}HvT;uO=Pwbz$`ӣ4NA{$Y>QU`.f~̔uRy;䴴Z\%7O8)UWɽyY&QkݦPSbU],ގln20i^Y'y}[0\`_T@#dCIDCyRgFTe`~, DڂKJ?qL"̡ 9^1ņ@o2' s 5[ =_a҉|@ֆ-%X7ԀO@i2|*5v?j*yKk:<љ4M4LK,d3+#0@Xko^ O[]5=Q dms v=zI}cY!(mBG٠EueA#zgO?bA+>p9G`c6Z>o'usSdlOoxAuS<~($Ijgd[qP͖bw̔-,6X(ưcxPUlw]/Cq;uxX=F1[Oz?{;!xd?<YOUo߻gC̞?o @d\q-cx<$޻Gmy@{R55pb^I=*.wֻ;MOp^$J<ƻNGtݠNy:@-$R"(g6uyT>gjqztl A#;oqxk=t3t~y(fwo2Yv{ݺhkci|fؕ+aeeZ<'tV.9<.3wʤhe?Uuϝ{ht°T))^Xnnc?K=9H=Y~sKhO/۲:"$4U3vS^}_WL}K->~<;iNb8+`"b(2 f[e՗iG+xR*aPX\/9%Oe[$wIa`10y|HNkQޔ`! tGc(^U%G [91|FpxF[0 Y[Gܹ$3 _bbӶ Dfv~\"¨b/7 ӢNzKY-0 S5\/,s«]; 64J9&iAypg']cJ]勪0.,T JD9-e-2cc愚%6|Wg -KL 28qV= ;m6 l/y]6`?}S!|DhFo@+ߤkH<,8-܃u}Zаo8JGt r淿WQ7Ϳ} ֠ǩF"{vtCGW"pWu9g"A3c{NY7_w#Iia .lPI;`C[u K-FܤPvӲĒa<9#O*GԘhq8aPb\Ĭޢ:OW2g[D]߰{5nRC?<=ިލ;in~wS S!5{u!A /=}ҁa_]yPRp޾|aSd x]M~7Q`ᅮvl R#:97mI.hGo?}v7ן4>Ez~'T^޻1PVq/]%h2Q6O4;G(ȱb`ƛ")[6b?J [}PE^Ҁ>->%?3cC!"g>3e1#1ܚOcË]?˞U@JIѮE  ӽrXSRY0쌴m.O\~=K&\d!ԣ8c_J@T 0c,8MREA)b樎xIx;ږ,{$Tc/Հ'2q/b fU6X$s%q4LG2b0<('*G6xZ43M4,Hݏ'QDn~6^0L_pZw m\p5$KɅyԀmu:M0&ⲣP>v3'hJH)ۄ]ԓ6׶3%?A=;WJ(mO*4[Z"S1Iئ0gږej,];ͧŲh }ȅYtWN'a?nʍu?bED_•)/_/|~)RQҡ`NvCpvʵX%O.JUKfG,,CP$B6kb,.f:*io RIis+†BӏpJэ!_[%]5ّJ*SC PaW̢W,>Q]Re$?|*Y00tC"b݊LZ,sS!KNS ,n5 mv3_%x*gd~a,i,ާ%jRLkpm2Wf č@ៃj`JDl@ r@|F (}ٺEЬ,(ުs (^aYfE$A(ڕ yFgO_rBOZ8L_61П%Oi(TcB]~+4XeTS:Nj~8 )JUo,:H.s m KKDS:[lz!2ke'5odeDǎ~c1/ Hĝ+XYbt͗.dd$߆F-Y9tנ:Uzuv?8kÞ!-Sfi~w%kR墏x<Řr9/;πU6$R1#k h -#UDоr1$A6CTFWUrЀ: TwJ2CM4e+oGȂC eq&]f@hVL"PѤZvo]NPBHA/ly)JYO͒Af';>%|J,Q2V"z/;C$tЧB=I ^##wRiIna FG7o-ezfhS|9hx Ɏ1Tj;Kc}d"-vƷ>Owl=n<`dtX!jwohN p}mRVb~|Q>*av䢲#d q.߁4=`G{J>m?RӁg5{ [U ro2NiuUOs >ArB⾜NE1|`z9/5}{YCf~|(s9y\DwE>MzL~}jR1p4uXFY} G??+Ac퇛!sw{[8X[;I^M{rH'.+k_H9:4bh5:1o>*0$-JNm ކGܿN0<0lɌÛ+IGTS*z,L'h%xQ#zw>G6E ß9DHN#0m[z{mBI7LV%|C?o7_CtFG\x^Rr=,z|po#v9P@>!=S/TYyiagȩd" dJY~9kd99lJ W%9(vR6?Ihe2ƚ5uHdATW<ԏǖmVt{g9yY@IB0 @]g1a(:1``d02HW{N3swѯV[p_UDIp獒J+ f<^7\vv &08IHd6n.\5)A*d9N4!oѾd)-%뿕vgC_O& gA=bf56'eQP mHl*?x?ZBN$rlcU^/Kf+5(#h.{x;oYc/,OM(_9=_XaБcն-zrM)QnMh3$Ӈ Z̋$q8 C:lVOR.Q4$tID]աHbhښ*_^I&Hp -hE>D.e6G*;1v63,\ZU"H5:QfU~4(J8Tlj_'DO"}"̅Vh{9 A&jFXBhX69%J4Z}]B*[%^Gc]|j0lNWRS ymVRqC)Mg>U ԥ7m;ѯ y`[[ $<MeE>h$FFǧ\O*'xҥr EߖA_L9[)>D hϐrXZ]'Zԯ4D:F‚Ԥ]I{Sq|rDU)gT㾻NhU&p~x*~~!ǻf:?38=s;*G)eq՟QK/_gyw(/3zf(ۺ|p?JP{:d?䵻0!8 gy;_e'h ̇~Uɧx؄=&ر4%>d?ˑWJH$H~0\ڝ/RԽa|ݏK'L #T /6RGNjj$W}¥r'W6rg-ƦlOm$ wC}럲[i\`"]^WDA$dA9ߩr,>3Fg2=bvG8GUV7{㶧iĝ1 e-&-b*ܤ*zS{g (QrJ[+еQ}Fi%@J/Rt g=ww9w?$GCH6I,TToUI()Nv#jdֹ<;䂘پx}&?~iBÜj.f*FJ_)rʐu*E˙]qŁUAQdIMkfؤ rJyyZ͑uu5Rfy%n%hw[dif:ẸRu޼ p`UРf[L:NW!tA'_8Vd]2r.@Cλ$mԓv]ʍ5t@M-A=˂ bjQXHV8̒KKҔ#P$RY~hV)nD z-DfB7׿j@&VGY ] @ ݶ+;wztp N8Lpj* f,*He;LGN Q/_1QzT0q`$>LbBmDR)}ꪕŜ\ۓ$d1)KexIp_R4/% GT:Z΃A Sf90xPp%d:#)[=UA)0jnƪ\+P\(\搊͘l[dӨO"!Q\%~ͥjeP%$]V$\]]yv%᣷&[0Z[ Է 2&hmU郚x,#{r<}yͯYT0TQ^.NhH_:;YDǏRjG)<P#[Z \En\<-P(CnR$8 [8TRY}C"K0ɯ_^OCD E,*@lrn SYpiɮJ3qiT%7L#+M!b6mkVbtn(olb"A@k-Oȯu%Y!;5G|.4-ɿ{P/`l˫YѰlzXGS\CϭB%IcEʗL-A >ђ@<a12rX(Uê 3-P?ˬ{Ef7Fv]SM-W(,pdƋ\\ :[ S[Ǯ>@9 ҙ?k2HVNh6^L11@z y QK슲}"hZC > ^tT?TYjy,\+^+wv]k(=#Iy2##Q.s"y(i`΅*^)Ϸ6IR*aA~,)u4&w)iW&= MwۡCiYp&=2]r8+U*Q6>K*W''(IԊ#3q;j?DPmxaݣ/Ҿgk8k'#E'I%y{]Z|˞]ۢ5B3~K]W<.}{;=qoog}$C_eUI314@ソ+9},ޥۏr6>w@:w;6xW.Pef|w,_\7==,㑇t\'NJ!8&(>QmϹm4b%K $'TJf/I+7g{hIҳv{嚫[1tsi{q^=f+R;1 4!qf[vH k) m釖03TUzZr''6yh7/b J37ek RIkˆ'|߭=TTlnjV:ga%dw`7@ch2߬pj"Uj y P D9%hyyJ<ZgDC<*6ޖRU3Ὺ) z%GB LǐޚI SV̫ Ŭ3 dt6;i >ի~ٖ*{Ajzy1*Eth Đob$I"vRdage(5?񛺒8V˭c Ŧ1TLPN*a#BhMgTR=D$`{P#)$ T_6r&VPtu%35 6ʀ*˧,6eфZ ,1ljq >̋Mh~kє0jsW#2$2)+IgknZwO?V;/CNκ]#kCy-rs~쮫z $JЋ°g,U"}KF-z!dIJ@MR* 3 t\&$k6W~i8;~T1kPYVQeG#|&VWPQc4W*!O @;HQo.p*=XI;#NH yg@Рfk*TBZ#>Lz,Ψ!{1GPEc0sϛ$22ֵx̛UP2e>[?^^pOv/C"EPiۑkLϨH%mj5CV޽*c05C"()CYiych,uP"uK~B*m)dC'2T[Ihkb͍14R]bIL)cKQޢT# fۏ m6P FoqX4nڒ%U=aO % ṣ!d txQp$'bk\rB/ӶL$IK[镮a_S&..$2DvbN'IʍPԡ qHm{ɋ !dU~pMVɶ4S P*s (-{R:H o_v@6~S Z)(5 K@fN[Ք%Aڸ={UJgW\ P#1]*mc 8W"<\1,mkLjX"ݑϱ Cꥱ03ۈrOR(,-6\ĶjSn(5t1VU.wPG h3R G]p$]V\WRjOqYRwqR'bcZqt7>hWz !L?Cg iXY2)hO:#|]J7Y|RNyo`$<ȹH }xծjPî#o͜;2)'^Ow %*u4@L ٷ=Jyͽ?!!=NB ?I޲^t^ٿ3(R/iNj_0Enƙ\S.@|x: MMb\Lx{y@i%$pD6gJ!;jb<щHc/4Ĥfrn B,&h5@|rZFpjmTdAˋzƈѧh.k+=Fmׂz#ޞǣ%hJ`~B%|n!D7'.(NmqvG+.wx%sY9ĴWacS t ~Jdv,o|_ƿW$sw7솑j%- !쌴rmq5N̰M2l+N||R#IYdɠKIZ-U D7jAfD-R}I?jsP7fh(빪x]=Ծj'<(rAETp::3$>Ǥh>=jU]Ce:;* <%L6?x+=x^z"4T0Cͅ{jVG:qb IŜ|ȏbq!2<0aH9_˒qY~k] Xz9Z|D+s>xjlEd"IYI4 3OlVҋDtd16/C40Jo)0=Ok7$u1%oث>˸->Ƞ2Ms #J<y#"cEuL\iKU]IjzYNg+ E!b& y,%?VUC4e %D$sArE3۪b(Rbrr$* XF_}y>o2)џE}wC]m}u bP~68.8,x- FNS3o,hji|ru-ErԺ ~VĠ&]JPN & påo8LWo]E u`c-:W9Qr` ].ܰEASCy@⑂\z Yukեbr! U`3amP8p(@ !Lobث ~־ 'E=@D5<ȟ(5" .U }:}Q tAOg]Yޤ7UmL"?!zo$>H0]:|^0Nrl 7;W4; ;UėMKL$$&Q=E*nQxLIgY dS゚"%H-_5nS]I5/t{Z OᾒE1lt9Ҽ3>.vFpK7qlV]G)Tt pM?=K>ea;A2XT@Eg9pmw`Ui*\}L, *P9+' CMkWӸt//ڿ鍘c fL#_ | [,Ri[_N@D&0GV${["  !1GK)F8)rHW(|~}y:>_v`v͟wl*/~DaL$N@6J +5d>7>'Wn Cmy5uI߲sZX))v @Ҁc$\YB8S-ig$$9NPbHݫ\4b {&%b~vyɌL~]tt8( SNBuߢՒpF3"JI}`@WJ7v_/?&F$~974JVX &_<}*?EmU5cf Sl?UkOM@0-I +a/P0*sfD% qN⚆jl=μIY&2qnWPm#3dLE7P ǜb eB_0>f@~ /t#Ajt Q(Q#׫+D԰eY;,EEW0L ˇr_\Kkhe$VTUB΃nM%1TB -N|Hs]40G>Ύx71l͸ ) cJԣF<=+3 #1~4e,1#I| XC  e_v˩71LYXؿwW/iFPu|5S~֍"֮_dw1Dzh]}/XҠ1q >] UXۅ1ъfrNNЋƒQOe#eZ3ZX:BtW1}*daٌ+@DZ;dcZF Jٮ .iƪ b\JנycX,"Hd+Dudwg"+tP|:yd+8zFMW'UEG)}=5f(ϻ@f&t7>nɼ,{ g/RݿB^>VC$ nA S{g!N~XYQO{ϧ|pa?1HӸfw4?ovcuٝdg[> up0煑_Ouc&DI8S j?>-ϴM!$պQSx9HxdΝ#dj5U;L/J_?Mqz*4SI 0?M\ „G{%Z')핃{Ѧ>9̽ԡ rꭗ5Sx<ϧayշoKUSv('frS@3c}n +uߓru%4j~-&j{\Bo.yS.r)uU"w5QRX^Q*%C JO,W!*-.. +t]խryb+] >8)uaI%ܧ\D~$ڴo Yۨa=*,zWR_C ]Ҝ41ѿ4kSrCYQbu3L}ȨOd`yCǡ`ΆU[2kئ<(bCrMxZ  T %'^UCd"Tk1| dMeDNPBH)7dfQiW,Xz0R'X`avSg^@_nimЀIfFC:SFbhSĕRe+7оC*R*y`23pQ%SD7n,4L+?^ d6{Y Dt SBÛO)I)c.tyRU? zJ +I[|@.d?쓁gSi>AsjkOigRdW zT;kCWbCAڸeId.)cc*9rRHաaSiJuciMIP`Dò,) cJC9@lW@)xQIhyz\CHQ=AvEE 5dTV-men\l*-aZdFRe*z.V PK@+r]Yz VVE Z.pZ0++RnrK%)W};1]eϨH!O^Pچ]ГN+@]Np])EEwiˉSP>gOFʔ{w/w@zNUx5Q$eJQ䑽\@6e~Lb#cx uR3|:P%}~]ipcz:.6`*ǯ ei ǀ,|K:CuwDb@_YzSR>D U=6k;"D$$5I3pO }xnzv+r^^*QO[<ío-QWOy>?UM}zdOfP~ҧ wP3M[] k?jd9HG^%9RƙُDі'V/+gy0IO=xT7=F^BGUVC7/ue R\^7ծ~_7m-UCA49v[(7Y730w2|N*6rHʟ/r$5=rOh!+Uټ ?0ɅsmJUç@^<#Y;"@Iq=iwp;#O$I$-IQxG;w%(VAVt59U3׺k9Kr$ zEbzx'"ءe56YߘUD› {U IxZAM %ߩ0R'OT">n5/[|W8ġTW7`$ΤS zN:Z  S@hڽ=?㧋[?qU$k,=2O1> f$. *xef2@ݘu8n\覤9--$qL4EՂ ?pEV6**F=whV% Bȹ"-ЦqR &L*"HAĄ`lGyi<)dfXRÙ+T^f3L>75D$͐SM9z9RM%'z6r~xoCb NU mwr! ր }}= M7[)GM9o֞ 2F@AAs\ HaI:KB[^ҟ_vX~rF*ox0>@yrsm,{LL@Vvr3n*JΊp&f1!7El\0 ten H?@SvX8WLZk!_3u 빤ڶ4IP1rpy왯GHU4Zƫ_sVE ~ >i8}K'=:f1.W<#"w7L:jif.=Ao]Sk@H]C EZv&dpY|$/B K sༀbD>>*֐ʉfk^~HNmܶ"h$d iYv2C/Dz,5U+ #r@L%)aW6Z"*T܈\I++G#;V8ImZWat8'=\U; @v #DP4 2hF6}~eJ@4u1T_1=ޖoT$m-N$_|d.J3Ea%K]d@ܪ W:PIU~vıx [-RJAC`\F/y]&|2D ~y0lˈ\ΤbztI3*nb\ O[)_ Nv ; q3g|`WvzdI O$B]/GP)ѣ4t琈/g*IdY_wC%G|=ߪdƱ<bC9(ǃ^%󣡈qz\HMypCbSa{]%&|R9}). |Ӿ\ˏaD0>rew<>JԫKGC=Dn~>_\De_NY%dɅݽn< :#m%'Ne'ѐw;.7ܗmFl8)t6me9N?hAό8& v/\U~l_ۍRELGNBwla~'wby!߁ / :HC}\}#iOLKj4RnNL\hqLV{z66N+ǧQ!q1M8PmύF \d$6QC$dK]JY'SV bQVưjږL,dMC[KR6 㗫/ Am?r"qSsRC{3蒌'һJXܪ؂qIcffZI])ḌmEOOH0EMno_b<}7' Esٖ9cq\t"ɨh+[b[n;?XqQOi#)dP@-{M$" ._zO*PEl_+o71cgRzIߖߠ? 4>S:cNw^;EIq7# NSrw'lRiOD6TҮrm~3!O%j?nKh,=%Ɲny>a|D-w.5oWD=\yZ,` GRXXa[w/պ$ف\1E)a)eYn7\!R)LcVKwiTW[xsU]m0ohr2߈>+/iÇN8x,M9)#q1[S/_}'X0і}UyK|+݆=gV[Ttb<3Ծ{4rXi×g] '$FY@{déY22TOjq xE+_5֊zy"iթ~:D/h#evBطEBT`vIwi sg5~Wd~#-E5pwHBV9%qR%>L3tJTH:-~1ĚeK8@Jic[;y{A0}CV7ރΝG BURO!IdzX$U9R Js?},ޏ$1)PCf%/8.Z4St.avQ?[,eCx=]Y<o!9`:y_}O7Pќ]]8¶3p|NAG\QKy~d):e"wzеc{^%2@K] ̶|ΡĤrÕ a=ܔS}|d/? |:;V 1t.$R$;}Pυb Ϝ»#Pq[h/VR_~aS異T>dk5Q9{)%>q?IM7s+.'9_ʼ(O :z(RKG-Qţj,Q^lMOt2_~tyɢ~XeU^C_Z)*.1a,Ry;lfTEԨ#gH8AUJI8CCmxeTl1^衕#^(l9\Jd=*)I/TD?sR93Y^Ͱ$,TSbg%VQz(±GhS梎e\R6Rѻm] 5DU_V+7jۼj:3Ap[~P 6P1Ҹ&Pl&58L_[wHin_?Kfhs׭z ؀ X+"HA4q-cJR γ,1VUOg%HA~5 9ّdVn6 .f%3vIbe`"5 /~1}ܟ᰼~zu[D_DegHgMY8Z ^Ma@N\;Ӧul͸GDIG WLdX)|w-2w3@zH>B:MO4'&wz!R wjJ>,F M ˦Sd4 ` Ԯ1VxSAF5c 31­`x|~Xq #??3"d.=w*k:F:1,^OJfeЛ]>xB 23d$z!-YPs.pcn_RzQoՀJ K,qtO^s(j⟰Y_UgV㳺J ]T# N5Nl|8Bq|(||6rc&&ε}"gjNn~&o!<<Ę6|haA맫M;C|ַVm[C3NIPB6%fJZV[y;LOxBCw8"TWj=QPnjOW|ܟ˛DL/:E9 $#q_.; T$YD;UuWPc幆}&H@qGwwl|>4M lӣd<>5z'NƋzTn[|=; Z>,3 ^%ʹ){OM%{&e1=6#>3(5Us gE4IkӤ4u#ƕ3w)|QLQHY.;bqUPD\ QBsx.OXwе p{X^v\ՠTzHayǔ9 $ ^dRs }>~sʳл7y>1 m$ts}&{EEx+Q)R2+IDFw:(" @ϢZ_m$33hV"K/PJEOhsP ]Ʃ>UWD4agWM溒23)XT)fjl0Oj =Gj %P|m@MGrIOlu$A,C٭iJd Zl0Ig3%:jׄjm[w/ӷ=a>Vr484LM3{%S9gvhi+4W+)[MuϧoW_ݩ)+byj*EARE.$;hS tU:9Qq)͒l1Q&pdZ`:$ MVTT TZ*HŶͅYhTtS `H[4QKE>Iwɂ{%]u T\ʜ&(*H!%jY$S!_|d;c2cfS2k-Z+T` iDUC>HiU>)[b -Ǯ E`TPH?rU ,^fޜӲK|iI01E ??I-VY$N\.1$rǐ$#E)s䋨̥%iM>T =~`ʣWb`+&L![Фn}Rm,X$H uЃӞ 0l̀t mJ T6-/s/gUÌ`:,S[J ! HDS`Sק`9܄b!h$@mbmceo,y zV7fՑ$K,]*PB/?Nr)BA&+\q6MN{TC=fjCPĚ-tu%бdQQUn1(5U T 5yϱ#D-8/f~"A"jSXL"2PMtҊ" ]NylxYHT~fJ(oF }X8Wc\>PD! 3OtZ0lG-$f-?i%ez>QzN9O/nKd'Ցwmy 8١?PFLvh#X=3- שYNcY )f ;A$JKUp::s 4v\s8nI:{]Ru:fɰmq@']gJ{)$Ϭr 0hn\Ffⱜb9{"}6:ku$I>P3%ˣe v҆lyʁ7z)ę 4uJf?R#L4%T YϔS?}Ek,A|+k@29W2Ky7lTS ^ Rqo?Lg@+>M[NO OohNϠ}͵A P,Z/+˞{3asaL趹lҬjtqmZW5ŎQĪWhS{$OİY e~ "†}cB̽3Q=<ѴSqjTԭ{ߡ^H=HSxeai6Q4PP,_Jx=cM-Ģ\*| S']Ւ&6@ W9ǘ C*z,# KP!9.SnNmh6Q`8I %U Ktɑ,K4$4O໋FY5=禔(J]_`^ ˠ,F-q6e/U$˶T|J"1&.ˍFo:jb.b궛1|d,U槛KS^JHNQ\{wwzG%U0=usO $E5@+9"Kfd2 ~[ANEI5Gؚmp)E9Qw4MyvbN֟,ʞJS~RXz' G ]?txcjپ rFcFMO=p Չj()Y܏kTM\bSU3ASMCՆI(T6Cc>nlA3 '(uN?ME`:Z@Fˑ2,[oRԒб=f,ڲ!;.A*@mi~+Ep[V PRDlk5@#Y.Ŷ?UKZnn\uf( M* L Ѥ](5VA_T_o^%cO`Ƴd7h=.1v5PR(Rࡲ|lܘoo!|q`h\{~8Ɛy*r}ǵΚ y],V[vmLX j0:Fu"f!< Tzm6 qnUHͿhU}7ZD\m>Dg` 80;{lS67K*a|SMt,1M(ʰ_%iWY( WoMnh"a/ʊ$^g-)[;RaCVz/J<5[8w3<[mÇ|6 w⣊zi\/tja|w4 ݏwp Y9 5Ao;X,g*JaWoz^#Ҽ.`N>uku/;X.H"+q7mfYF?Z q[:G8fdɱI f:;9=HMcTǷ=ѥVts|'̪O@.wOyK w9ۭs8DTm6eя~(0Il=#(G ]X0kݝ?IX{L~Fx(jYpg蕓rڇe^3@ySX0=t'c1,f Mm3Sg77VpÑVpJ7n y=ȭ-^@c48^P'´{0iqAܖz$-obš@rrA8bGc_LM'tD|M>5&@MD3}/i)K r4C_Qhpɖ"9^g-u԰0TsIN.UՂ΄& TA72$G]N[Ž/2J!uRq"wE/]wA|)uzk{YjRӗu|+fb(ySt0SLa>0KAz%1e^ |:y _մ,dx;]wz&o0]щYj^ٟI pդ\Ck#L 8dPvnsqu U&-zԁl*PAW^ӍMI2vՑf^05V}R@ζ???2d͓+RMƑuW0::`R=ꗕQRG22,5Vod&Le4Q07jhߠ!H59DQRo*-]N߲r뽐q uK@S'|8-ɮyX%%W3ly' PWvfzgN{UrA^rȟjG+;QŃO7Ŧ^kwUWX-2#ۘ vRJ_)L+:-+'4$?ߴ)S;"="x]jbSz5!y M B|U$g:1\|IyЙ? =#?HY%a'ūw X%M#E~Uq&iibpAl5(Sx8OZ A.<՟Eۨi]_#TumiahGA5T~W0-)fj|h]=_}< ֜.lҥ/ۨ~D Ra9" hbܨ&/,Q R[]K.:VГ17,V@E٣w n銴T< ^gtn-՞ Z8h` 02IB a'qg 3lm*<`bLH*g!d|_jx w2=a%IxOˊPȩ*p:cTZJB-V=_qKjW~waiL6z6= 3+%ڭ%)`e|ٷ;~jZ/kjlr`8 /!wڜfj%G{Y.K="Ϲ~j@!HBPǘ1`DW ft;'O=[ͧR) mߞB߯~,f>&?;H>8ΓCū?γ_>]O\YVd03z]]\LQWf&HV1nQ`,vir׫ Qc<Ĩ&2b8IjIijOf >R:Ei4 jeLf7|E^E5mH{.I{؏f3v۩cՠU5n"BVG8MqB|xtE0vAOlpQEidZĹ92!׵k |B=xd}G17okgSCG&cN]s#)Rw#j:4cJZMc>%Qґ'qЪA꒪dca$cPQ :3H#ƆO5KYyA );/%!ψ48LIK Zz)W դr筆LqX.oJ i-iy˂1 FܯU]F+443f Z m AEL+ME`'QWDXF'v#5琦 ߂&B"Š(1_HR`ǖcGհ]DSr*uzDP4@S<{ ʝ$Qs n6s'U U>='9iEMH'TnʩkI; @{AkHJN!Mu_܌4')  ͡W*.nfoГ!/=bwze/ YEW&k0ՆbW@l#F虹_]2YoZl&"Yq`ll{_##SOTtYcQCʑJy_c,%\I?KS@m vN[):Z]q^R̔8lz(ϊ>> aj8#,4ei9%1MʨswT8̒ibt]:Yugpѧb}.>&.]?Xg9G?^u]2ut~I] M tק{i6i0:aґ3zQܯe'f80'11S]U¥`n#dbmek f>Z5lu.C.$CӸ[bf7#[pt4U>9PGkhWOVM)$`Q?28I[VTz!W=4j3v%r <v *fRN塪D#bR18e9l>\;XZ"3B?f6xT1-9^=m3/ 8RL~)> U}T >U O?d9shHvjY1- &`t"zk53Pz'6&?2NNۋ+d K؎ш2wd㏽|*x)G{29W[͢GU#4B(u$Oj rUW cF3hEnY!*TO9tMmLv%ELXyPZ_UCVORPN:5C´V 2PuE2ܗf}:j7\siq J uMᮚvroѭL :#'.ye%w.I:"s^rKUeh:Kq̴絨^y '0 h UJޔTi -фC(Uӓ t2 sSvH&t@|Vزm*zfSVb4CKD%it%Nf-4zP+)-]QD4!YPp')9Z PH:/4l:7 }ɘ,gn!!]7edE.t3<>Unr-OYUs0͊9=nhσw(f+zgN?ՠ?eΊ).Cg5ha.)ySOu=vji]^ ?>~|{Ynu[ip_Lo\ǹ}zݦKuWV/!*HF\ɬw QovDև[0}w gzA_$L~7}XouA%'f|n%Ӎz]ji{K|)GNNj\rOQa VZOZx=L7p_x=5"]x@x_ɧ0/ 3^W Dr{>St78y 4'Gijr\?kgwdkhnN] Lg`'RUAT` rd*p+ d펷ӃWn vub%/V׃)R^  mOm?,Qy%FoE||}BŻ7zNKˣ8 _&CQ!?pQ/ }/Cv ywFH5$+e%[T\cVann{WCpQ.Rݼ+Kcj@|2VNuyYqZ1v~j@Au9g%gv|Q'^nc+n x\h/rY^VC LuS 5p]<~\:tkm|W'LC5/\x:<肶=b"UOͺGݳNOZkSZI_ !I8 qytrm[.sL%MT=ďu|{^t~_ ه=t{92Zdҩ nZ3;T'եUNqA4r{n8tn$̅ؾX{:cЕ6̡)WEɩQ1_$ ~:zk|S.?u3#&rX(SN\7IY|l~Z iy[p9t'{0~._3dvMak=paU+^RFyxfW &U=,5GJh|=9+Q=Z6} l<̊F~b׏ہY퉼\-@S}ȩ{?}Ծ 0 d9dkź>S^0ht(a"x@u,7\mJ2)Z JdiMHTӍH^¯5P$Đ\D ȺXIxb13]-uw_ai(ZvSJVz9xNқoN.r4OQ"'ךpι}u.N]8_6nJϡd:Pī޸ֈ &Rҿaf}Eڛp> rY$AҀZE,~UNFAyiP`ʂf0J9q)4SCrk⍅tТ3EQpY;)YRh:Zd %$_%,RmcC9h pdXசaP_mm-4*hˠ_ٲMEUUv 1>S$-l+7mgW 6l 8,mn)>::AB?#߅@MlV(2 PtTVQxH\NR/Lq{RHW/!QD5Ɉ௢.598BW<U&c] ~Bp~x _ooM1p8/k$ahZVWgvs:JS!e$T^k;DeDrjmS|C_h!~ x謏F*hZM3M~h3 3(L8h<65PQ+]q-%mA% _'lQ {R #-0 54s Nl@$(HZ`?c!F!_Wwl3yWfa^TiXRV?ԝHރ%+U,+31Yp eCz+KHhuF%8{#3olv*yus+W(RI3ɿנ ӁCټ^/*Au3l(ZjbHiٙyX(߲и8|yA{G!${3DW"HZiQPj¨@-1Xsp35׭QDl-m?v2YV:LZք*.koTZ8_PefPDu+]*OhNDNbgtpD GLm KYNR$rhny,r_(u%[Ac1fdݔ<nA|/[)ͅYO ]1FwZW|G^p7և=BFUz3rrnD@n >@Z#(( pW8]J99Rw:k Gir7՚p6 !۞u,w~ZCr X7|R(/ƷCZ0K#a`zxPt7Ip'*i.·x=N8QE3H x;?uENeFuv~*E҂r_w3sel|c{JlN CWoU]hGVl=}Fݮ]W_>Kyo9r噿x.(^ˢ!>lnu~^}xTR.\_ϯE ^1)3NC IO:YLq<0?O% C\WFIwǞf㰑wUs?+)@<ܷ@}?p ;eEʨ\sӷr>GWx\S%u`J/}IHx? T݊oمyҩy߬K]vpyT:E<ӪLJC#^V~KZ?tE`cr>py G@1OɆ5+r'YҽI {m,Ky(a^"1} E7n2k"ή [3>rkBvy&Q%mVWtRpT}xg dtOty^B=W+bdžy~CAH ؎hJQTzOJ\W@U\^32!@X ]d! ղ!j4i_aԇsB_40~ (1d{ݠ ECIE hw)_r3> wJN!܏r7 $k[]pjMORڿfq/ZXV_qKkQf~DHԐmC/'h PDuri?,;Ԥj-Cy8c2&ɱM2VɌ[<  P6v/xX* Cٍ4+dc}Ƶcc (kJ'OQ ;(-~*h ]Jqk)77t]Pt>w$7vJՠV)`AŔ@v?=^\9@޵YqIToxTW8Ttk|Eֱ'>񬯖nr1vr>~hN3Đ6kcxcj.ç=s4J[i=N.B6)C7i:y Ij$3#0 /fqxgKwSQT/P *?/3#9h˙b&;tƶ!Ġ<gr{ϬH:1jTl])]7z՗8T"Fb[1*%k:ta%gP#>8(F7msV'4 ^f4TT ֕ALKM[}{%9 #uh8JYI^{z{hh42!=5\BI.Xt˶X>ҁVؙF/}@GCHY#}`Ph}uн=<@*9 Ch+%&hh O5qNMC ĬaLDߎۜɊKeO /Љ(q&.f)z8MT%GEF`dShj}7_9LIKar\fQJHS,LyVBS4f8 ɑ9IsW1~HRq鸤bTrߔZ#57 sG`_Dj|ۛ=`Ag ]S^*p¼F4*E2I[KR$YϱDwPY8;g"%QlKwkAUbin̻xg=^=m~c-ތ~Vg}Nod]1Ň͆iխ~f^ͼ)ĩ]v˜mml2&Ͱ&4,DRx,j24ԕɆ$w[!Y˸!qՐMo_&*(7XO8mmXZH8cTơ]8͡H0:7Đ$0 aΚ#a.cr{F* ̄hY>{rmw͓VPގ0g R?,#rl8Pcr瀔\@6zzpouz9޵ ]V4 ;2|{zҿu}.mꬮͣR=+7ard h qwyJy 7x~m7R^q]+Q;YVa#>B<48#jzׯ/_y>p)k&jQzӷˣ\rY.,ܷ+[]-t|+)oT}~J=@~>v]k\ұ] '5HM~ܳὤ"دh464^yh׺=u/β@5\k <=#&@6ܫ%q`4䖗2X՝Om9\t9#b Re<`8{A",B rul\;J<6R0-)ݷlT1dOǍ(]>.Ov}PB.MC¦aU.wBGKRI Jg.n/ "Ud].G6§vívՇ5d)H Po( ͠@'ެ C` 2M[Uh#,}.9ȵ_jOaFKn<8y&\Y->B~0F^0ex~dȾk^eD{V{*% !^*8؏r\*)VA:o  PIgy g2c؉B;:0@Z"ݲh[_R [ P.qng5 NEug9<_ L  ׋C"Һ)CwrZ萺񏙰@Kpi)`f$+#P~v6!Y>׼UВGُ^5&5n?PPɧ|L#^_$>: ڙOFBN Wj[^ f9l8ydƜW#TزWV2(S1yx%Bʶ Ǚl]ًiKlBƈZg*OK2d0AutKs+!1$$ձe<;´I]YV} 6@Yi|48 qƎ@sv4ƳgT5lfBяP6nx6CMCWy{g҆XPv#m*QrG_>GXƐRP\K5{vgnqc⑔ķن^%goe߆yP_zun'sLvUJQX5bdh@L6)f >OĘuJ4^zS䬥`MBsX˦/+, IT_rk&`x4RbyS˗5MbƈAdԠS"U}FUn'Z^N_I吽gSmޜ!6~Fi&BMur\+3%$:.&ER`]pB "q`7K'Q; )Xnnmp>1X, gmI̞!%%<+%:U ʗ|Yz|')59(V_4Iu *A+W bӺr ZG*X @%u;1{n U}@ V%ܡ`@u~m>A,ׂrT"!WT0* !ķ"@Vk+ϒ傮[qEN!cq4t!1nbyZfbjXQä&6+Ts,D룤[s6S(Fw)N'<~寋?PdsPf]XS`vUwsH.z!L.*J>57uא\>A'DՕ3HϾ._|H ӇnB*QKI/k(I), nf ?a!3E.cfEF͆|.RBEWe$uiZпx-t~]> 35!a%M/7[")õkm8gJ§2T (eG{~-|Z O(T;%?9)}73g0Bݘec0/;:qrB  QӨss6{ڷV8jy.oGP|2߃ΦB hTRU( a26X1VUCڬlyf6)S-*顱0J%i"뿧MPVE:5TE8 Th}LQP-HKe]J슆J(.m0AJՈmF0Ai2zHdPʹ):'5@7{y4/99j̠@ X"d aH)"R]v EZJVB1te Zs"!}ro4]jX~? :T)JTg_aŷ8 b RdAr n_kR3U+źI܁h:tYSA'fˮLkxIT8Ы+ÅCeYv.ך9r¦c?MYbrɩ=0LZ't QWgdƘe ݣ).][˹i8nAپVj@R2KW$y{Zk.e0peol_ 20( V$c)IJGuƭ-JɬV9E9j4:w9=.am/΍*?c>UU;P~iw0&{K$<(L@?)Jh'cqc9s_'dU`^׉.5yzC7#8 .6|? R@犏?}}zܰǝyʏT,gGlMPCp\'*>q ]0YUa{C(fo/>B؎AU߹Qw^랦oU"Ҭ55Ԥ(ܩ-N8p/Q@g&d:pu%_}\ht_]Hr)G$VD ٳ|7yoi-QkM˹K &,0 Ȯ[Uj \' -Zmoނ:@7G/=ᆱyD[ǒRw_)SPQ;dD0>iz9}( Qy޳Xz9|qz;?$04_VT?(eszbJNoUh" ov^j.+k˹{=aŎLer}Qn_==N]_ϗFg1n%>>FYGX𨜤΋SJW-lpOV"ͲoIѲoRr64uE_Ve> 1H/ۏԽ}#q ԦyUL? }UV=tC =(70n;yO-p'<)ۑPR6lKYeI ujV&ahsVO5 g,^/2N싖wEVZ# vԐ;(ݮ#߰ӊܿ(wef)<  77zyL!CWzMӶ#Ol&Bx7#ॴ#p@CSy?v1&x]`PԘׇaQ)B+;l={CRF*pg1žuuչsv>CHY{L!lW/|vp\:`iݓMۉd޲ nss0?1IR.E'ܻ>۩!Ba뭹s~vB &GDgO,1%ZH8^0Y׻|g~U/f {U9=gK)U9\e L M6.&=Fnj)>A P-sC)MAa4VǔH{ 51FR%E COǵf*ER_gɴR^O8t.%+Q./r } IBHng딏˲$)2C~A챟5"J(}窽 H-U w'D'UU}B 399e}ҫh˻@\ 2p!z;Zv]\$mx:v,1,*YQֲUə(2]tdO]jjh(WFz"TM儳] GMV8&',ʝoۋBMEV~ cx~3/[&'VZE}ވF? W&*C\>_ֳ(/[DXT/Ɗ`)he[ehr!qkCVyg^իil=!&@66%6CS48|[u>d;Q 4ڳJJbrspԌHH֨S]s,Lх~ץ\Y{/F>…N^?'i׿ 3`f,>!fiVnک:7ۜu 1)赱*UlH:;sڬc3U+bnޤI'6$dIIvL %3(\g9}gr+'YUҺτgggOftʱPy74FbiQS6!Ums?<#s5OPeSW&^i戀 Ð *%R^bKE; nqNf ~ [B_Y|+P%z}N؀PBgVpzK)T7.JҺ0Lf?gQ,<*xĢ^z4̸ )SSHW" \dzU SτfEߘmNؙl9dG95\Hj;ոֳY^&C@ K: 4?%8cwȕd(,EzxR#bQɒHd`GU]E),@YnꅜԝyOEFpP>"qra?/a9oN W@@\W)2I%[JqLbZ0I&gࢪa $UqՄޢ}lQ0~$%^[1FEtzdқٵ(3We $1f)͋D<^jvo88CŌO㪳#WRhO$l|YC& v.WWD\ih'1"~Jv} Q1eH׋<ءtWYn?OpyS?|{90fyE(v*́܄Dɒ%G*o zzKSùllquEB~tA2\X$~yFKsL_<*^O'(7'^K'=WW, 1ӭ"3 JDD`S)}`z #Ct4k'F~JF~ 2Bmʙ>$if@+NRcb03+Ri1&hMXxezq{2)~ǜ2's=gD޿MMLnuҌ?~.~gungkM5^'39,)ZVY9_ -_nUcKH@yR|ؿ%|ߛi0&larӇlp7; `mqU(-=`=^[0J=pZcbY|vH绳  =\.Xu۾enëLz/ꛏI\t[?trWqp9U5U'S};k꟠%ܩ3"U)ܿ/를X;Vdh hhnDY_~,Ҷ,jeĔ 0*QVR_?Z6_n~RfVrJ8&h{xC# >v9Η}tMuN&V1d^UF&!Q@ɲph{,Vv=$4?P8H}\GŚM:33}yRxL%Ydm{:?!IjbxB])Rp^%v`.h7My%D".q=o ]xpfȊ WV,Q[dϑց9[9@q2̠RYDLw^B*K5 j0puehAIIn:0Ȟ D9ZqAyF's~`L=6^YSa,o|樰f`TWnM=d<6#KFwx5 IO@ϩzP/(SPAAr\.uYB9njjc, R4"" DZ:9i+KNAyJ e I`bsP+uYV7 B 4_~VGC( tWyv6se|w=fb%n+R%|?NYN͉iK.0#zՒ[w:Yk2 j_$.*\ۛOj}C ԯD515[27gw mT&E_KRT2Ŏv+IDĦt! &gO k8~ݵd*fbcj EDFcq34̤ץ^}ۢ2XWlyR)38 rM UJ|ggM`&bf&\r!h~.e#r"\i2TjY8}JשchY;I66͌T}ejwÑ>$-ӡ,4FșZjȿ%,V˶easvZD-H&2=!N:;zLvoE5AL"@)"IMXT/js:vWł{>(IńJk2u.j|B!ckPF6):-F-PC5SuT8bR$c,W{^'h5Ւv@o"yf!AY ?ӣ$$mL)ݷs%8eUȸՇkLb&^r,2Ie5"𧲘\:(7͗S(ZaXsA|^>rU'##şXDyy+9?#Qu#᯾:g|M ' tǚz#/T+^8_ WyiXUI дzNjo.f#jGw-V\k5bcI<5B{N ;OeM+S@c)cPxe8r|;+I@ 1g,{9YֻԪV=ckz;ߓ=L5W~||=s}Fݣo<^Id*nc02U!_ϚΏsm|#A##C9)NW[u6G\?8J^𔣢Z ^tq\,`hpqO;-׻0**V2F p;%p$¾E"#fm>AC\UNVx Z.or:vOe\_q+srwfpGS𪏉>xm|=W_va ;]7-$!S^jq봆|vȏ`oE|x??_}7U'CtZjТ>(GVD$rǵ2Zr8:8]~y׬/ËtmPxڃyUz)s(#lrssh/ Pӝ2nh+ݸب}Y#)p |אgARVt_J#Z6`Px!S}ZK)3#lxCD+7TZc{MAvX}gx]ڎ/A5==kU-?` H%åZ׶=EpC9~;)*,`HBp7<ܱiF W{ɹ7<yAv^n{QIalc)> ?NzQkCma0}W'f >A w*o :7됱xmIO,>zՠ>Oqv΅{p%JᓖDrYLYT!piƈ19S; ފ5h;36}VNgy &*ysWҜ/:َf%ϻ+k}sNLJ#)/&oCI!\v=$)<Tn2 u9ZbO&7to1vjY>  |H^"7L°fF1喇:GDEƐ@V֭K)l.(^8gjD}4Qi&n ~ir܂<>2bn쇎w@Ŝ#~7?dSU8HEe$( YhFѫx|J-)w≮U-l_֌:%o Z=0Î`mg.!d<w:~ hmU""58U)+}Te&R[E^>qa :9w^H'W&MhJ\So]R-iBPv\"&(C7Zʢ?壍K'Wj^c+"pޒ>^jPnz¨ % h .Qx%k4*U gFS\/7|]lw{ynJj17:Ùz璉oafm$k@M>cj^Oo*fx9*@mC{9W%3lgdɾ.ݨаs*">ƤI DlRFtxiif6>ez䎑v ^gAsyJa\/=ꫀNsG"t9Yis,o_+۲ލGQ-͙_W!9ISic t93Fa̱|vVeRrs*f=?`co4m%;xMzSAMVjHb}vT(,'39Sq3Yb槗 ^G;.3|泩jH©8/R7aS1gGR+F 3}7MqWTgilG0}.EbƲa LnG !Lj$4䜯sV]b4k(KqחJpBTZ[S,/F$HcJBAZi٢c9 L!>HG!9s%|ﻎ}4%ra:Rk8a,, ~ձ; ,,RʛF& A.MOBS̼&4LU;TRWts+I} d#-0;tGR<+w0ȣC-!cmgλN^NdPYɒCu ZV7 ^.yBN%AKyWF+|SU1"qnui4b %DCY~u5 D#w3&~Е11\J,sj64׉j 7htA}̖Ff"1\^O0k˧"^Xs#Qsg6{ f]1m}VJd\Ye@]QV'&3!NM%3?5h)xMCbFt?>T`q?T_vǻ[mG`.Q%3[@ÈeUwPdV9^ )᷏#쉂bj wH 5ET{%)Wc+@Z3FZ _qۜB<}M㊙@wZ0]]cx=Q\ nHir׼.؉1S^>w370ZCN>{mʕvFw4iӐYpTR9ߵ;(e7HvwLkݱx?hÉ|}J@G̳[cش|NB6ǺrA~2p%G̨PC`:kǐzj Q!3WŸz(g^R|MdGBT9_Fzg9e+ VNNC+Qg>N_0|1?J{;Ë6'лxߵd]Kw^z}4w{xS/~_^*j%  t#Zg}g,Q;(G,שmNpvmmIb{yfVuh@_I{iWY_eJxyAtn/} /}l/ vM%#0_wm,JyV  رm ߜ/ye6}'{.٥_Q{٧v-ɋθW≜ۄwQ,0^1w@AG=2dZ^^vm/fءb~E=ceyR&ڣh6ՠ#(Pp! ?+v^^e vix$%_OǏ~8]gfw,C*9ٜfkq( *>k.PE%yi'c(.<mFu*!_=Yk;nfIϙMSa(0E|wre&_5HS.罢8E.czs,=pKW#~|Wx=^i'V 65Avo fr'/ C7{m1GK`zhwTm` YWP:9{k62#?)&o93-wOg8m1lM=+IxVL6;YLCMLUb$3zv<[i9knZٛ%^bs.Sx0OB,0—xZÎAطEG͒N"N$Kd_- d![j''ZZڇ1 %: 2yFƓۖR{NzN]O#([HʤJ* !.?؎OR09DBy `+&Z](6B;׵}>Cr%sN<)E#;D KL x./Gux=qre+QGjY~s-gvدA#P £!5\\; w֡K<&7˺z)4ܭJ k^5*>N.#h[Z@/@;IwBvY2W4k5B=cLє5`pl ujCKB !u|Ķ9~<.6Jj!L"t7АBu'/DF􌱳ۻs+dbsh=%~Hw:V{lfH[@$B}c"9'[eģA`bLQYb'5\ vwiΪtxA*#]\P јF#: 4LET u1Wك5>!W9+T3/ٍ!&0K;Ǥ7@0#,Jyy#~A04!-1` *\Zse>y`]-k$ZjHMGM/#_kYg[p7CL$}/m*c5ƒ"iq%09nҺ0DIg3{扫]m,%Jx/,J]t8덅`cHj'9+wxgkγ!L+˲zdIm9\6kف;^_ hOy? b(~(']&:?lZ$O^)\O¼. ~p'3\] xEz?5't\S. lc1Zfvq|2J\ {7GfUQ/܍9>Kl : @ p]AW0HV+KB0(9&V%H+ovNRvHFXuϙ!O.Ř D%G5yɔ_jwC9eY.{;zZƎ+EE.ܦ+(B&@h1pja22A.ЀKeTWH`%X6iE/TnOuMv WTt!ͩ˩ ٱ[AģB#yx"1'{g~ॺkr-ؠN rx䨿{NImۖs}3(-˴, :n+.-$:t"@H@@6$s;b*f1ZkG8sU,T@+4((͈I(wBo:Md$OeݑڊL/aq\&v4_i1If|}e5`9/Gxsfb@5'G,ȻY*ns-sM1`[/eQpz}ɑ`U NEY a?J4f#k ͋oa1TfpdTVϽZFHrHNܨ@`4'4cFeyfmѭ GA'A:VC4:RP\R༄wJll5 AIk)YbHu}PyKxLC'D q}IfN%OR S !O$}>$E)Dά)lpR "ocUrvSsmr#'s-PxČT FN$jdbLaym6&_1}H]2i6"- *UhI"Z֢  "AMn52cx-d4- `R fO>afc|vE5R闬bkG^?а^+=޼PLǣsoL+4{mn"E>o&0i5jߨM]Wg(HRW-bw?K Ι+ߢb 1r9# dС,@=uJ: P޺YA2Ww!p,y) ߃kW?2<<{{ur{j}2ڡER!aL視R~ws7vjGQsDqrb Ur򴣒?\?.+ )R,Cgx Y[O1Um,a}ܫ" =vUOБs3 ,ߏOr3JX?)&:S`m|̸b`񲹼dbs+k8.js~Q8"qٮ]2*&.4ee |.br]Yjݾyq*gз{\)+ˊԽ!YwÔ˳0zf=Hpϝoextj YJӟj4(Ewk9ϫh^^ sujQg.e[7O>FCWc~SX2{ey.݂\`o^W-nͱ]K۝OK6mqb"ѭC;B̜w*R9R A^wz Z/`J&Evh˒6FoJw3s@-r<&˸H*eXu%G/qˋˡHu\rLѴ߼;# PQ2Р֜ndC.۽[22>:۽csa*$f?yuVgEsۻAYs|TQT=سo~[D#Upf\]g\6=ȩ2d"0:VN<$7F}:{gS{<8n&*gP>ّujσy~haNtn6Zu% Lcٳ)4]tҏ+:dA'̺O~KSw2/⢷;Hv_tʀaώG^Ғ2Γ P[Q pCLC哬~pW#\E&=Mi{n|oyrlxs~}^[DЊQ'g lydA_hgt9\lq!c:e>fr#; 6 KiR!6qS\ޘIa^flMm.vGTacƎǝ 5Ԕ:!HzRظɆݦH dzle05m԰=ޜD]1n4O{eOzlyj UOR ۏ!&E.ƎU}zBeAESOМdTȧy;+KٚY/wTHפ#vo{hzɫƛ{)[X\;6ԋ(Lb;;j Hc9@lH2*Lo(D] *むEdzFc6k96ֱ7"(98`7!>_5|Vc&W=ѡhRҩYl&ɕ a}(<礜MH-bFغL2=!XP|A|A46Ի_%RpI+|TD{\oR|t0f?X}ǧb⃀=u1<TɔtZa`?m^yOpe7 c\_eiA{0\-qC8pCv/G{Ni~7IɁ1CJcdL*ښ!k:]P{*9rÄu;3EH:Lł[|p@׿A.dc ^f#M3%m!Y7$9ejt3@ďI3(P㙗DA`rPFmCj3` 7H ;~YJ{Lv7d~ؤhgL-uАb{I`c7f@m`܅H^J yk{HQӴ qJAjSF7gܹ( ~ d"__#]JQ zhTIJq=PPHጪn&+M4yiY]Yo۾Mc&S+-"B+v*rvn<|>0?.4M+kϹL<._ao3yPh*|r*Og)CCeI>[m)v"&2f~4`j.MKk'%`A h;GXPS#)#Ħ۸7|j2P [>!ȩH ]RF@}&2h$\*Mb9m~yiu a:F/2er \tc@:5Qn HD F"J Y|/M:8MF<H:0}Ug+LL>jp3-izYd[_$I2")^*ZW?'9<@>"7qHWOxu'% iUsdnKo^i1U ^_A_N*5}90^ *_>zvFqv3=rNr,[ aGџ @QlfpA|9[2BKuw7fyz-0$pa;e<>jmyO?^Tl?u p =o\~^NnHZGSYeE-v{]{t нP]_SD<>d ~ulΏ}+azT(,Ǵ,WˬBUuҮ[ZOOOZ|}~MZXhޏ9$W 20pw|sc,#.)٠CU.3d%![sq3wh  ;?5ɾ98n/:xa{z*E<[m//,5˺DXr Q<(׭_Α$cp P4[K! @[ ͡ճ־tZ^4)gcܻVvsQ%FpߵB?6[া[KnAẖ`'YoJ=?/s ֐nH"k dvTwuqԜ6!69dr97.gǂԽgKl~+*mxe m֡{ee|v+1h(()$n]v]K3) ߏ_]4#4V:rYUھAi9)VNή60 euoϲ纝6,ݩYhMTrxS4;?| <sM񛪒'X4d咥wZM**-R@3W2e ?Ѽj:;@ytR?˹Bƪr8Xe SdY][f )mĪj&?a__5aizFْh%Rwcq+{?c EbYsj/a}@rEgoZF0w,ƅcC7Qr.(yVu1snӹa+8LuU1 -7RΨM%σyNB GOO;6IgX.gǖvKvQ DRY^E^Lm# ZE |H*İ}532zvcF[vkءTtVg|߸*V[ TD 4W`Khߐ5'{#x Sa%O +yu^: 8 =u^;-Bfb2d&Í'7` %@F~8vYlt[:创?ۏ0N<}FxՐ}qM8õ!j8tqW-s%G:Y}_MM?cY} .?=k/3*}RLʃbk: F:rŒ]g|SG[ŝ ȡF.h:CB~%?n28~ Kyh 4O :2CCP:j!J}QVAKz,G̪xD%֫~2ߍIq4x?bSꁪugBM.*(wZ7kHyH),;,q^,YM&7_%_$=](軛\T mE40 >)DZ:sM8gxnIH3t;ngկʻ>v6%HL*y u0JT>WK(I҃%PŌ"`\H2cR& jRJI `oAMeTzaJp?oA#GakzBbTQix eyg>h_EԐ"wL%tR? ځQl4=zD dT[x"کU|;lrXjOԤET3 G]X97'Uq7*UYjBiG0XBgV[+>feF<,@gnd6e.{GE^LvMT|NyYn> ߔHҳ,Ճ w Ը+U`Va! (N_s&&6\ku!$caʮJv\72tk xsr6QѪ*epN|X/$<M[`r@QH,gYzyDqKN|I@K G)eyWȟt0ȏ]0Fd0&k9VǤ(>=ȴV7h@~`r80M蔏kY,%QS56Szrg&'Do"}Asċ*#m4B sRyF Fg0y%Af& ]'PqH|ĸCG9_i௥1W{bMl~1lსfbzCM/DzU@y.!yBS3?3a.(~gvLA rKu21S(u)PI̼z0^!:O@W4J xtg9t%L@\#78 f%P H| QP1(}jQ^DAQ:nJu{&rwtB@2/v}G>cq9?佉>?7N׳ h8˛Tcuoi|ؾ륳 eU2ˉa'b-eMȱ_eQgr3GծY/OpyUf]-g}y-i˺;?Q,>Nwt~5q螽;X唽[^x$E޸U\v߾8&hJ6vY3˥iu;'et+Rμ9O7kOB7dBl.GRnz'ѢY77'dH ;T'2n b7yE:(Χg2g}h-W?/)QM[vNEؗE~SRFv3Ն&ᲪC?[ sUi]ËN7?E=?S齔!6[ Dڰp͊}]mYݜ0W7?aۿoWwnۻ=A#Xeü ];\ 蛹_U7w:,Mev>*Jlo%Oõj]J̣ (;Յl0t {&w JA~ o18c[ {6S:qmBibt)n>tgLJ@͢ wp׳B6D#s=zLaO+Kv qdS}%DV.Ohpd\:6Htxrk}8rJtWؙF[ݎHzߖ<7չ_ Mn8s牡玑Ć0dg4a0Ž7iz/su J&2~`2l΢]"QQ?7 {1K<5~@!f"S,^}'(@̿}\'tBcPTi3s\ WM!)~t3% rNɵfШ+C#&ɰ^u̚7!&5Mz$nbmsu>P =Xi(](膺0q'|Jr> ^a2( ǹt& ԯ=ygIة0Y~s#XsѣIWv7EoZ7WkOQQMP\UkkԻ"@Z B3$1VS8Bo\+f8PסigP08N!NTmg(GS`H>:ʜc^z= 5% A:>,P[hty{]n:ZXK-߉a{$ !O+o~mIWRRʿPʊ(rkm]TJ]@#JfЗ7 uDx6MghbZM zOs`:F"4 3k`zp'aFZK>4 !PƁ 7o(9) /OUM[$Uzp\e05|w6-"=s}$sA$BmtUsPsFΨ 쏗2/a9\<Ξ`C.KUt#U^3nj aGmu(3 /hF3,R Gl]?O?wss ?Tow9îE.X<%{EE8O* 4%E*|QCmP;ew6~M>Qp JRIl`i]×EHBgP&!ȩs~9ÇlE4H2H ĘqI#n<+,027m13 GogPM5>̜(m4.S53WΖ1:Ƈ'Xrַ샩KF*ԓ-\|-i]jFYllk*++|=10%%lb@?d'ƓEclj}>db%: BD/Mƛ iA Ke 0#GBg2dzM^pSNUm>0*;$Z#󄮥#+ļ`ޜ#s0&-X E\⿄H > fɨ gƥuf+Ygau|i >KP$zsI1:} Ч:ޤgI񑤑 AJ#tihD=OFIQi`x+MQO,М;9@dK(d 54sќX㯱rRtW=ڌb v;@$W%aBBsY@!C: y4d3V; u{xlT^ r>ZBP?Aւ\eiw+a8(z_Sv_sZWKd9 ?| |L?jW fmtQ-׵f#K~j8惁je50?-aoIv)!t)pf}7Tja g#9 0Q4YJ4Uc[retaP<|lZz#6 R;.ƕe_]T@- Pxzրwo)$҂G#A3;3VK:$!4e DR=r_*Tկo}r؈q?ſz}5maK S@zLVr=OMP& "$ +@M| ZS| +97L\^뭏9y"z܇i2TJtRҼ CP۰z2L aЈ Sm{D g2XF=fC$}]54^R6ي K,/TT6os$מ2TQ ~5`Vɧ]g}" _o_eaݽ{K\C_(y=s GZo*ox_eD5hs|%8g[eUP3-?9UJc<>C^6{N.0=ᝮ x.}Pܳ2c|hf8,~z”K~M 5"YvaOO0)t=ܩ߀$VيwC~-!Ȕ'O~a~nzor݃K,O/=gE}%W窆zu.2 NO\=2Vn^dY.[xA'wTU^ s~+l`,\h{7) d7*hZBwiҽ,~6n1Wq_Ѐԝ.rum֥ mQgUJ~W~>| ?OO?YP@$7y80w>ł^ͤ39NTYjL0͵)sgͤ!45S .qEy!?alkfH,dR8jFAO{!%h{JtlGxĄU LlM/J4Qh|qyШ&Ff E>:ٛǫyBb['UJyG%GzCSTgS 541QMde1Z%=np Ny+eH}=3&03_?" Aq\J² )1͡t%mX͆RX~(gvK֩LŌus>x!$8<xՅ$"F>8)Y[1Z-ѽ tθ<ѿ5r0ņ 5[-A뤆A'{ۙ!N Q6â~8_@-&WThATQvNaPLM:Un BtSaP{v.:)sY d&TҥhS%$~:96:9ɚn_Y߲uLBeA-rDW 1R5 r.)ɫ PLNWuPpYTɈN&CYUC'w&Pҳ Eýd74$ovsPBXf~u\įfp.&W *d [/ڒq՜ )A򥣕z Y.2>k#Be}C,JՌ .Uy3Pz n]G3s{w#wm#"5E7f}Ga=@cg3HdR?OG||׿_g 2R{2pl2kG6aw7_d[Z#~,U6c>@:JC6e>𺲘P)t,0&uȵ QQ>(*ČJ9#g4ꢆI]d8v%t E4ђ*J ~!$)j1$-Qw͕M:+z`Ǐ~=W1?cstl^>[{^GOO}+U);St*V(ޡwgVwiYrJSL[@0#(߲9`{4@_(3qwD5B/1O]z̔xnP=rŚxyh5}^klPcxΏo8CkED\md D7BTk J#f"h7!54Bn{6jy0sTURU<]+Y6vD[Ɲ_y6y. ^Uε\NIe!!HqsӴ sX:ٶPXT[# (_N C%Mf"(3hhv?o;\*;v!O6rV>bY*0j25g8V!_<L QECyEsr{,뺾E p:L7K^/J^槲.~GOeׂ3c4pδmy v%9ᮒxa\m'xW-*iX@d] ez$Ձ%qդG,rYt,F<ݧJL- _pUu',E0c2 :LkrkSPڍфfT` k˝ѧcb,Vʋ|CIm+U볘XdI ei _8ON>w C 36fr_OCn@_cj;7iMɂT܇x|8GL7^)~8W/Z7m{|?西R퓈^fl+y[oho2=;x:Ӧ2=Z&gp{?hJѺ!>Ll?j2x<'C n NO-W hb̤ϛoZǙ@O5x??)tyxg<;?kH}߇mL+X@)徜36WGˡzBl^f#L㕧M*yT;mOoOS772kv`ݳI˪ 9t%c]%,ZB93vPUIj4r9mnyzОʺye֧{8?Ծ{Uar/߬,RmLٸ]./=r/9 +4Cz?*f yʤBhjm咹92Vn&]$S O޾tO˥ߜUUIa&#ry0oWy}V"Oj7y fR8y/]/ܶ!WַB).Bj>=9*bS@| r,x:c(?)p,qk_Hey}@ΰk)7>Z"sjr M߭ߘFEb}~9ɨ/}#lO`e`y5Jٷ~wy.#!x Kۭ[n99uϊ|s'YN[ϤDiq:f+^}ϡ}US7uٻvuzM}7~/_^/~~;kdC_FɞܿͱYПƳuaN1P9~uq;+jZw ŢBUmr捖;: 2_ۺ8¾cn*yyp@F݉,օ̾NܧOe^׹=[ؠsL3y,ktcL|$ Ј@aeszf~W -["RߧlzDS c̴܅#-ԝ)x+ , 6I32hh,_i%Jxu|3x^JHqx3 y,^*as 8}&ݾc0`W) up}u?}`4vWWMñy9] `P5-VYh0@Sm~>\ܴ57LnA Ad`LN^Z4S e5ѡ?b0GN2k3U&D;dz]Eռ l4y!EwӮsHzd9yE^>{@AR8V/sz^PBQ@ HGuty%ܺgU羽FzG.=k͐<"?D-[,!v}F^A!rjw%Xmj30C~ */u-G/2lzACNŬpXlVDa|йt)#h)b.-raC7T~ Rlko`b jg.k RJT>FS6~~4MrVc.%K{5$-@}VT0 N^$#FISh9OXe*OsHb0z=[ݪ-QnN2TI]rԹ9vP1Ӡ?5 ~sy&Xm<>q.yYM83ٟ,!!F肬I?L#R)UHBs~E'y zE?3pRjJ S-PcHs6 Q`a2)_щQh ,g7hܔUZ/AkO)k{lL5&% ^SW_Cu[]^f6gwtŋ ")dIGɈ\ ]O.gf͂ 䆉E;AEڇc)ԕlp;P{Tժ';@LUBm%!Չq`r1lNW 5~hNe5>/CEy}gKOt43HVQ( +Vx^a*-L,٫-ZH68Qc{?3LxO?y]Ϻ$iFh$%,PSDiF@rO=~R>Q L5kOcf .3ZWs ϔZʊh[V,M*(#̫Jqg~ݧjecщysj,w0|G nu|2pJ'U 7cd8Uv]Lk)|]CQL&xԇ_ C7~5E=0}̿d bs οr"zڪ'9< "鿆;?FײM4W8[)/;/-#Mgie^4'#oz-GY0CMq*pOL_+hꮁ逸V- 4]>,S|46Y!WHlGwh11l-I˷uv CYV%yŃmirz˫Q:5埴ο>EU |)'?A|=|>֗':_51\c|Ir R?m/=LKh;?s_;H W'z|uz͊Y.-wC*>/-+r #nBz~ z+e2ȿe3띜<+}v7H?5Vly|$^. ñѥ-v4g:EfWP#ɾj5M_P^U]W }xYiam61;oF|~S۟fٱ{NÙ]F^_- ؿk,C] CCs$ WkN LUc&GHщF:MOeжlwyd=ۅ%3YzbugKۭv=3r^}@0Z a^ta;+~,ZUcbIY7~m:9wE `;?|k^(/m^oJ͡}\6]##lK)Mm"gԯp=s&1H[d_nC?5'jr#=VsaEÝRZ. Z qk=#nv!1/ˋ}G:ܽagֽxھ6_h^/,%P:fW ÷`nHqc/b΍.29[U4cҔ7EC_C8hdׯ--?EŽiE;c{Y"R '+3 .upy;~}ӽyPnm{@ylmv}۶fg'_w)C{ }017s2Eׁs X55ܴ v wd18+X6f*H>ۋ@ 08ɷժkπP5K٭D:1K,~ ~!¾@JdykZLkF=M62z82A*l|amXOC W9N>ՋIfq?1wݱZNwbȦW|5ǵ{_gި>E l* ?7TՏykyIf2.b&o^ǟLd>ӿgH{l{zz`S@&C4_U=ʯ9?w 'gsvN*0Ѝ]0-]Lo3qǬ >zs׮A= {-\AQov)5 +i(? xw4C'jFbV@wbo">3y"aG( ,1Mz+](zgIC5+fT-e:SȒ#pĖg+ m].0sG}uF2QɎߣ/x+ia $!OD$nU3t'jQkb^ @Np>+Nd:Q}ȿ/,{(7T'귦YS?JnrGJEht*4e'&U=FT0UrpeSFYu}>('##1ڤ(φSnb%#}e«H}~"Ox\ߴ<(_&jzFpĨyVE>31Mu^­Dy4aAR#*HbEt5DT9S.|E{=J3ei%հ:"+Yl<'JY_@.&񨏥H끕3 _b~j* 9bpGn1^ i rݱQ5M#&OH# 븁P&N2GӪ:˝٬T YtxA" f\&MuI*!uM)d 5J5ĝF=.(?WB5%>=d eS<04K,N &UYԹԵR>̐'GL@ǁ%Bˌh!vyV#-%LRr!q+_SU9X@j5f I2cT#3% 2s+YSx:=9E(lJ#Wsɑjju -AkTkh7P$ ЬCљBle[$kr}4H^5k2:M0>Ǟ* tGLa3,,5pО{㏿G)?\Y#5qC*18}sۮk/2t$EbzN-QӍ:sn2:gґG'a"]Ť#e}R|pEY7D:YpylQ \ 봙G( -ٟZzh/ĵvjƈv޶Nial3 cI/MꅂL!MuS x9()M^9Lpv]'؏X8gĪǐkѡsfJ B3!ON>jDŕә T_.?C/)͜;\ ]ՠZRj{~AôVDu7Yw j7CrUCOY/73W=&FxSsH&QV\뵁b|ȻYd^ˠ(GL|Æ="gλzF C}I$J>SAQ{{FY(^vRͼ=<1 xxyߎN ~VkAHQ狿z B{7kP;yQі?@sʿעu|R%{ 𵔏+quy O;A)ȩkz:=nw},؏;M >=5렋Jh\9x>VZ;!(siG!Lvz :a͊g@9NIM)ǒ{HB"AbU-TƮYa"Q_iq)/Zx}}G4X~W|l^y}e0g{P6Clt_퇶gH: S;ʬi$}j(W2]ʵf mV&.ׂAAԒ7ߓdOQ5 Jp_˦50J8fx4@yKcBh.0xO~LyC[WdN]:8FUM(\랺rAez0A}C 9$A7G]WםAe?j1sƌb N 2o7 2ZAͤ9` h>IfP=X59ؽ@Od4*Dx϶m]E.Y.kkZUSaXcG,(ԋW %m7zsAEO,aȭ%,*Q!.(r DrG*g:oM=S;4Q<%Mm:&Pԍ#3I#r:6"0[S/:Lcv"Gntż.=l2;%2ٲ TEU7k@ّI-CKk,$m .@HڦboMn`·uͬz;؅7rs" Tx4V$Ф%7E.g{Us9CvFnJVhOc4J8&{l"د77%l1Z2r4kyi*R,F1yϾ̾ͳAEv Yoo>R_S'XϧDtXK+;m iwlвeR- &Lc3fI }HuqUI]LY  8`BuwÚEwP*IUǧVhHфi7jȴSg GHIS_:wU xA3郦|2t"?kLX$? د.)sref>$&%R+|<)0Csl?֗21axU}Lz057cC=:Ikfx (: *p^ςiȴwxh{B>!&'L`xL| 4s>zCO3Ql>Vq RS(I7!QTsz˜.1PLUm*[VfX\"P>u= Y0#&1:8+:مӇ]\5ϘGxR$b`!`JJH-ӎ1K55`VQx,LI|S+ 7`,m9d'A,eeYҜwO TuԙdC'P 65|P- xrG %k^=: S~Y,M쨱@2파0 ]@M0FCt Hs]6`%dekK_'Tv7enƙ&Lm*Ѭu2L郖#鬛b1!b}K8Q*m2,q<l;wl{=Lpr 6BI[#a·P{L,]mi@dXI>Qbv3)‰ iPVδ Eom(Y^nw NTi+ t[pߑ+(C2x<2te# Hn\|lR=!T{ݹᬁF^h\E6ěA {. 4vb*2̭f3F H?C3Dޝ"> 9+vEM9L,bhzTV+x0_&b*Q{%!NIEzo3y';'Z/c{x5}`u 3\^q17uL񏘣_ ⏰4~X׵LbtdL. S$`ug|]MӃ~M➜%u.?+ϟ젦t˂J )!OGI< d>iOsJ*'d%^ >Y9ɟ3 >A(%]ܙ{*zyQ!9ﲼ'˷u҄bAeLv>ac55=׉װʇo%Ρ!J:b򢿟+>.Eׇ+m(?^sޏ^~xJ7B}*V'$Cen ?Y4szہ D CJW@g]6򁟗gn|\Ԑ`?i}Ŀ"ʫ|r?CJ93ľ_u#.lјCV@ 3` >Js'/__VH'r~{y  l6r J A)dx`}rR k/VtyFпPH5JfAѹ~s|d7~H/2oakWZF*eyh_i?)}st蝻 /%"Do箷޿}{?O?\mN)Əվ[Y6dMR$b0}c+4Tr몪i>?=S ;zæN `Xexn_c_vKd<{o5b}SK&KAeɽy\C;) @Aw]`r29.+^t!˹BүQ Q>^PVrK[ׁ^i4Zuo62rkoJ߭6ϿXckj00xW/yi)m9 n-׈+ΖЖKg{^S* ]e]^ĩw5岇 xzk/U'ζ.PoA @'}eHzWVj޷\0#ݡ;=ҿY `1qƍ]R5|704ѧOQŠzd9e9im,IQ`Y㞱X<ӷl{Xj? >azs{&mJkԹ$-ŖQNR~/af ZP\\R( dFm*OO"PVC%8 H/kR~r Zs7)w2!WΞֳ.GΧV Ηv) /@P|?5cOs)_ [ v Q.qc# Cjr/O#O{k6ǹjOѦ_>x:inBosc2HI/dKM):S]^\Rjxb3fu܌' 8fI쮦CL]T[҇zt>\{߉ rY/ҵ%[}UBΰWUH]5~zB[U-giPSRoɰK/n NڱNjcbUvP[*i..&wlV4bE)LӴ3&{*F{TPcLzjh#AGFG'KYdʣL#SPsK4~FNYԆ>R&d劤ObOM 0ʍl/K͢_r ZpZh㑭V 6ݹ[<_ݟ[, +eXj'9lThGӈ/|{SA6+b!y[~,onQ-L!D6d# ״,mFMlkvhX/GX V}_ԲRrU$X#mOCr0Lcӣh}}#"*5D.&'CTK xNaX AlMtj&H Ckp@[KA%Gj͐qnY3#G&su6$49Ibs+4,G꬏:-]+gn2zύHg,͈Gh̲5gќ:*SE5|R~AL>Ӆ7]Zgr8V5s{k%:5n!~|E7ɩC{|OF~={閣I"a[.!!%zx5&>pbbiKA3se01$~E-`1j<&M$*TcɉF3RjMƉi)[P6x'Hb:{0,5t,L[5 qԔ!4༾ABuHQa& z}8[{&wy#Kbx8~Yb؃Ib c,/}}}岾vp*^Z`K~m_sW#ȐB@,Yj!Em~^0] MVkpEdjrrk)v,X=ayE_ԨIE׆05 {ʋ\ 9,JL<EeQTP[|#hs?:`Ď:sy5l"㒚#ۨ`JX"KBSuse:< VUGSxW>CQ#ŗg>t^gq^U2Q@͝k=Cwlq{T{kF#gN?x;N A.GUၞ/;LoʨL-A~zД0}c~?>/fdX7qcUQ+vև'}LLp .P^*[8ӗX~86 ?!5Pa>/OyvxTp%7g_ >ʮb׾4[nsyos|agx=E|j0Y㢩HyG-t}^IYvהܷ/ tS|G#=ܣopGYAOc*%i?ȎK}PfίOOQeeߞy1oudvO}G~A\TraEWӥC4k`ѹ g'S{@K֣[K&E([,+٭w(Aj׽9r=wzy-.]_jZF)Ƹɷe'ԜŽT7U%iZwQOlqC{W߹.7} _/ctu7weX](/AByɅA{#Mxhw+q%-=?[0**bcO,9U6/#x8|CZؿpX䙾`k%?YȭŸЁYj?8lG=+l+Rnf)vaG7*"{> lg?d*>|Χ\St5 SeSB̓'ޚtqU$^AUH(_Ð?(A,~|7A7w ~é.2bYlzIN eL<<.́Kt^$wAemTkҺjԿ՚Qxre( VFD쐯Tʨv[RONzPg&͗ѨdR;s_5 >NNu)Ǝ6^6m܎^A 뗚a6tJH C-wzJ|?Cev@TFTDdvϫ*Scnmv%8W96[6{uMUB̪#}IAS;7ƥ*5&bޕ#U;aF5]5&_=< wMh?` Ob>\5K&(#ICasbmtӀ I g ZX,δ;cyE9Tfd@bg? WFeHwpXbiBC@WׄYiҼDc BCҺ2bRLޘ^VtC:k%njMUxNFЌf2#vD!@P$v٦Kv@be5΍%LR*Q-5= Q}4Y 75A)8d벼ִn`I04M$ZU*뚰aGxJQ=ώE_ak fa4 cp 'lӤn [RXF,xeZF@lg[jr_KupRGSN-E|~78 w_mgk1fb|'LP[9t?5g"5#G( sAsvT*<5Ծ-nkX%1IBD0W8/D1'|;ԓOl4Kh!g. HD73ƧMf_ m O>51es& ⭻͵e73^z+V\Qv1vY+ch砵wY^eIyׯC=P Kf1@"EU,Cu=4 umޮ3A^ K3"ʵ';"z񁪠w.Xhk] tIZR'@ɴJRs /צFJȁ p|}0٫jF.Ȳԥ䖥;/ Rp 'O@On(HtU^HYB&'rV(!r*lzx c :6WQCݚtӋ,sl^NQ^aeܾeg-Gly@3gB8_ ^O<ߓ#.OzS$=t '=$4k;g?գ~^3Nj;/ {"0e2O)p$|":G}r_QSݠ(Ύl=. Y z|h@^$ttG=tR>F&+"Y9ʟ|?='fC7ʠB'M\E_u}F,,hm#!_?,KyI}ش+*G5̓MNHv)J>/=?#N<9Ff߽5in2>>}<?7uY{>t. bA$_xSy;lϧr~B-sIky`:m]~xk:`4/%%U%9v~θ9'>Ԗ˳%Lzۯ˲|n zDn}va?j]rlKwu)%igݻ]4@-wz_!k 8')Nr=_n}vMf/{զ=Ig(N[):K9u/$ fi0ٝwtD(c4):2!GŽQ1TxWU2wӶ4i# /J[[wМb"uȋzM{gmo1\ |}6j C{exR׹`c% Ў"ÉB#8ԐQ .5.\՝]?9r5rhM CVge~\0E?Gd3|ܪǰGc<ŷ7mq*[!2+GS5cxS*8mQqO8V= /jaӹ II>,/\y[ c')kX%#e7ǡu5d/HBR^gvvр~yH9)SV2-}=5j\ue /d㟚l<†z=+omQēAKQ閔OhAmZD2cbuW>IH?rwPB r.Wcw̨TChЏꦞ"5hLNb.爉E6W7t[m+Nihf6f΁ױ\X}TQ-IQv_(?U@VNg1PsYW~8㻺dz5 h5G&ݻR4@ݤh!pg r:zV"JIQݫg W~:swo-acjsxgi6q US׃XN _>65RQ?DQ.5O8sQ4Yӑ#n}E aQ(edc6X~ϾC,[5]$TW΀I_3>>qzL=EHL톛<Fol,WD޲d#=Q5<̂pQ  rW( qv!t^Utװh&}d~얟zɀZ1EekT|Khk=±\(x׎vBu>y)FngAն3[%8L]SmI5h/,!1)iB=%yFvZPc\|z0Ꚇ#SQeb]{ M2t#rd[9eJՌ H2ZsuQۏn@yIp RHۿvE7!Ϙ Rr?&n EW =0h];JRP(E|و}h yek)C{yt~0II-'j jzF`Wop2kD>$.QτT׆Fm@ΥPsJqh*>jh) es˹"-8_[h>7qF%pdft^='7scU7O!i adBfր-C(ho 9~wr3A4"`m "RD@&3 4 '?d  n4~֗7웒*Y +Pka! 7)  ^M,,3<t̠?tEV|Rc@Qv +\-0[K85\8Uf)l4`*^ZT$/[x,ǚ6| ?*KJ$u.Pl,P &F:Dl}bvIsf fh4 KO ZslGu{sOUt_DF{Ȝ%3ah?}NeVC/rB&c~;k'1~4$:LZ*4[떝p35LvIkHqEN**,tĚ|y*RRBH2GLEALEl+J*XWp $"cZXJV=⩚VX"&:ɑ^ȋMOU p8H2Q0C0}{_s!d^^4(  ܛGyC)F({ԀI! +% r4> @AcZ0"L 6SBŰ\ 5([86Q@z_sީ/X"][i*녬!i)ID|MHbyBC/zKa`n~q㢺2Jz UkzR'PA0ŗ\yOr CQvݹem|Jݕl*^e/<&7&9ji! E] &{}?^lvk"+&՘r4AkTU|О?3L>[_6KsWBϮAYNʓ 9 `1U'F8 xӔx/_:jNҲZRrC6| O3!-!j X,Dۺ /b#obC?1mWJCщ,rA-N*w$%9rP^mHIMh:"QbU?2栠%QUf'2ԱE{b["`WTOfeLzX̠h/~29xzCzײ\ýb4?SMBQs"oQ'٧"ug HE2U3D+^iͪEa4r9winjй" 8p'_@ Em`M_}ÓZhڑ൳ f''>\;n.Ok>uePe~P)&-?k X06g=K58*ER>GkQeCid!i kpd0DV>C8/̴D͚[bvh\z?qs~Rk]JGO,rΤ|NtN+3* ULUCz` k-W4*st,؞__Y5ºcqzf97e^󯈐ͱ^rk2ip$7C(Ɉ%/H )?.=z8li /ɏnl߯tJ{pc@Hj ,%@vgzTqS3o{zY_^*~=ȷG *~+.}iUtM7] j Du_}[6áhyﺗnP#.ގλ"󰮪r;L v՘*6c/ ~n6RNO;yWӹ:1-qy:#{vH%pܯ EAvO$2mZCYá8w/!!E*1yUl ިn\qZJvmAtauˀ8ʣ7rnYGlɐ6uC/$'tûDޜajzn@LwP PV8eU}v+9ʜCf} ~ם‡VRJ®<&܎ˏ~,};kד!f C}}C >)BPou4(ZWo'Ӊa8 Q:!\J2/-#ϽH [T)?y-2ZLm1;2=Ф%! ZbO(ve=s$!x2Ð9=m|&KJb$hŖ1xr b%"mL{23mkA$[3:S>0SP K,7`~؁{LzRyԕ_VnJW5a,ߚt{`&{kZc^.NYtu_i?IrsSolWc*U vXϢ)dޚ[hı6GSs8cbϢJ-/!mn՝0q4}> vkԫK+znQU QD#t|H'goҫidI:J`4&^`S8GZiD)WsG(gs0faG/LGᰌ *A(c5ȓ%(ː~/: ARw\*jYaϓ6w @D!rdղ*6*H# .a}6\ODgLhS*oCUJ(3 ]UYA#QMF6tG7 DDzQ>!y,~!as\HYF3AH`gl^ {=A_Q~읃V3_ _]U5UE.vd(̖)[; 8ݖ'uw| K._ssQc@@oR(Wd*k$q$5SV-, aɮ4ezorɋٜ̦;Cz[&W(拭z \s ׈?H)T0|Jka9^?nm}^ƙSEM[9\PoLcߔ&}KIIy 4uעy 1nWkb fZ U41R8?fyDLP{.!L1{b 6=)ך!UPDU;E3\RN%'7QDeR`P[%쯖I]K:XjW"Ai u~i5DEQC@/duuuW@߃\ݓZrRD$]&Il!EbQ^E.m9A$i@|MnCBϲh%X8/`TB/m5 Ӕ,%M髆 $6Ѣ7R݂h T&R2B 4?ƈViK̝Ad$:8si}k{ +/հ @Q !IMrkG(Cl_nM vF|>͉2Rͣ6U y5 mh}b; p2V#=HuD*{Ӑ*I9RSJR?18*w+*0䒷"#Pn$|Mz"4,pߑ<\V [/|JGPq_]Re\BQP<|yslljWw= ?NU 0`зºi TH:7= dMᥨ\5Q|YnwPmJ9Kwؽ Ŷe;>dݕ;z<}CVoC6TL|1}ƕo2)Yʂ[-/:[[yܚ WR n܂݁=}(2ٷoϯK'(*Ѥa]v؜Q%cQ6}jluWFoy˟/7mP}_˾ M [GaCkՖ>.ʭr:@޵m^[jTL1: $SK<g~qAZyxr*֭c,q~=e&8ϼ!P 3@^]tK*=7fiZ*E'O]3 3!@'vs#׶cPS6gfج,ohߔ 瑥>r!r)~v 8Y/mIboc8 OiɢdqI9Uޯj^ y;#2S^Gy3#[-tfƮ?TkʇsL_G==\ϖKSxaJ{2G@& ##^!9E HXN[byBVY &d 4DZɦ x FTE7 ))a;-ˍM ~&gLX.?O&M|QHeU>;זYU裀׮ -7`yU=kfrNKP6Tgz[V#tfN}Gg:.Wt&xE%;]T2c'#g-" N't%BiS#&= '#ɓ?^lvF75cф ٤ Gw<*N*mP4T{4Dk ]ehjsatdqaz'e/X*[HHfpr5.Ҿ,B]7rU-|C! H~$\IOCu0"/S (]pa#FC_pΏRZ2`4,(r 3@]?e$GD#i&w.#2c^O(HqZjJw-FRA@)$xՓHP%SN)/6A`AXmpPr5l\;|__ܲ 38hZ0-է8cF`? hsb%51l]ً~Bi++LԳ4=*b.$@lRGU a%YӞRIZk&'.]Rw j{ktX,3$&0 T5X7,}{IWW7ФBM 8JY-"wtF,}z&WP>"#Uej/NkfYuBrF\0\uzfjTdX dTE݄8ӀFxd1;i:s5Jc r>JnADbL%g:t -2k 9m|NLa5S)*cHR!k{JQ鐝H讑5+y | tL)*_]VDɎ:sr!:տN~G(S~rË,4#j^EM a(!f"o)CA&S6(4#fs|l<\-%fK&-5fֵ-n|l53#efP? 'P?xF a B1'ѫA36W{1էqAu߯鳚[m,G2TUY_Sd hX~gW\+7/ù:%z%?q:#E'>Z6VNtiѢ=#5e}߻^Tw`=T_Tu}p2nn׾}y>kt?Q~FpKŵ](a嵮_--؝;vz wǑ* ͦ޷?PQ餳  Vȝpݝ}< r4f 8ClswG@n¹UUC'i2NƶՋm9[5CRב17;YsߞW,)\ckxYCmj\{Ḵsǭ{?A1Iڴ~=^ݶAw)O@P. jtRUHq7Lhrحx80/ sOQ>y9|?O3CLPcjb^yumeN[SR8<^u+ W\'MMVGQVy~jOrP-˹ּɰ4Kؠ/c//u&(Q&Rjeuw/uY岔dSQn)x%5\zN{=11 9 *0>ٳAzl1 \^OI8rd*hi`Q]ȅ$\[.dDY*lW"]8m C$?_ܳaKD Kvp WR!x2쐾_%0qҾ+Գ}"yn|& %p ='m#@/j0jzT+dg2xҟӵ% qC%kA= Y3Wzn>zm"HQhs(?QL)G>uB)l $e) Pؤʷ11|wĤ SM_z46 I ήz_8s ,cڦ~ߌ[.mԔ'Pۻj0ܠ8,й7n*];3#ѫBk$7w TI#:n_rK trf(>`yJ[9v ٰҦKJ(]N^hU1y3=eFN@]'[dN* Sؠaǵ($hJaU9 עw[ .2:PR:wR>|e wz ˣ |=DZD݇XL t7"w tp ?S;C,Z% $Dghbkjpoc`6Z?G ʊ+ иZ2fhvtU Gcf h3g68"eNJ*lpV b~[.`tD Txp e%L|4+tGF ZXJP) E4Iʓ頎F2 PR@Ne!Kj.7N[VIZEN]֨.:^$WԊȄBXs*9+v/ '$YNA(']EW$pk@_{RC5O4 QCbW; !#7y escR7 j^H@'W);rY@L- j9t똣L(R,k.w|7 &kOKz)LϠ ~#yXW&+O $6 j]jSPF8(]]/Pw>X1/E܇X XYvq5`ݬ,Qtlhѳ>.5Z!}7i-5 {Yh;{D*T MQ8f}9@N ,yym=vDu9Kc.$[85&^[e&iwBVG7j|̅TyRg(1U=#]pwM7AI**>F 1N@iS3jp\]N\tˣ|Boï&Ӆ|}70zAg{֩ qt  G%YOw &QLCR"g^U\Lx[~OOHו@7gL}TStvz-tIFis!4p U#% ][$F=iL6eoxW:@r;ݠBQ\qw/{Y^ƌ ( NÓו`3(0ԊK+{0!OW₅rQݙ#Vf mUqM+WvE~(qFT-f93YVeDfM ?HйtԅGaųYc_az'^j0@> h^x|2= Pw^睒P?(@oǔ2N 7g0uG91<ͫA8,thW?~W5A؜ [P;. c}|R2 Pu 9<:pcܜk.q|G̓o ;; &a|pc9E7_ͯ\ Xy>*"exGC.[URw5{?1حOm]Qv{Sr!+C.GEU/?$Ccw/* s$%&y>*2* SU}AAf Fc;ypWnf;~ ?d@nX>A/R~0`snS.Mjǡso%vG.L_RcB5Ï=~Aw*A@>?r߿Whr׍"wL&KW!#Vpsr=˟k.vc̵l-X0lݚCM #T~̻އ] <|HДL8a(y ?L+aQ- W~@LB'@|;0@C)uӎoLFQvx{)G8#Wqae<%(~ +)NbqlǶr{o?H-3,x2wZ-ɱTy>Y6J5 &&Wv&TL}_XȪ}1#GQ!f&;OdXPzκŏ!l&{nӋ-½@X?nYFL0=JؙD-y&ūzqH  :7f?uH-(8toUGBZL e?7"s*c S=TZ%Il*_o7uڄP|U& I9՞,?pyoVp̗\eIO=7}W M6r?UTkTV_c w5L%!;Svm+@ /dh5ڢHcd:7Lj`v5` .@<ҌM5Whj\Hmu4e 'b67jOUM)nfꍍ1F8bXRWN`E )W@S<ʝkIO& hP.l,\BᮛjQ׎{VuRd<^2we҃2"osVteѲnl#d `  GY H u <,!ZuFFDf:N֩9gȈUlvCAjf5J&HBSa^Jڡ\鸃f`C(S .Yz zFJ>t=RZ\蔝G =U oX8vu9}> ʳ@cz9'N %RKǖsDefJk6/is( CMLVJC1;fvP$ë54Q J #QB؏^g0m72Lס .bcK \8G^ e:)dKh:GE RKL@h-)xj>9eeFI!1qIMM:0 3g. Y1}GFTXv|Xmǧb5LɈt+aLp's%9;R!<^>Y;G5.c,Rc} Ly\ߴN]"1THQrePbPM|Q/o162Sg{܌8! EY7(rѵh1Q)'yUM)RG-k)q*;F2w5{eϣW=+#&Kpޑꝶq́x{ 42iE4jD,u&>RrdFGC,VCx RhZho_H|AK(Y9YLƪ:P+@ZGL
QCkOLA J6njR|?oY9.õ5.HqYר|j5:/EGRnA؛fʂ8_&D  f:,C1ԼxPcA(goU%v@+%CEʃ3fM#1a ӈ5Pbu-&UŒbcXӶ d锔):{ (|_rDIί]+Nӑ |a%w#׭s̵~le0xK=@.4~Jm1*P#ҴҥU0e^a`VݎDrWQ[Xo6Okd>, ^!Z&jY*iڲI7jzz@s,¨!LbbٳHTi*B nvE@ː>0p+)A:ܢ.2Y.gLpt9&2캟v5MU2Ц6ג fg*=d9dXNK&qtn*h d1d|͐LAfJќA-\3/pq Kk죩S5F`}HrxכC|.!KfpU?J/*ϰGugJJ_W#$y9KrgR8Ye|ϧdo.{==yh/ %&@w$:PD/B&r 5=xb^RoZ% P!/ JEElrozгsz9 ~HQXNj>:h㓕EƭҶ6'5]=^ W7yy~Dž7Jgdj9vO<:eA;ߵ 7{^$:\9޷qo/pY;b`*e=lvo2d F+_ |AV3=8|]C([o_;v}g<3]^j2ɩy{/UWQ_vù}az_xqԇVŵ}{T_|SSss|>]7î{U4ýC#*\ƍ0GnWũ}>8}U(,T qҿ'ɶȅU7O=}`<p }(7 ̳?*s m3ݱ\}P U;MS{pe;Y/ms{f#mH\s$.-Bi ̿p q8`m) udƳmZMa7un}}BRCfNnw?Nne6pw} Q>sDO56qSq9 aۍW=49gȨr"~wzUtNl# dE#2ˆgG#'۪/Fjww2]n}~ͭ)oOwܟudRHN^*rJKy\1.p[` rS}m;o￸k{ r;Hdh)RI zB~2@u|,Q jRq"jto(";6Vra!Sb<Z\*nKN ѿp-BƝAmK| VkrZFPd5<6dyDڥ?1|cVU9-5|xYÞKS~OEY}!*X(4S:@"sC&I&&XjOi @ Clj&6G{ѣ@H{Nљ5D$̒Tyk㘎$cADIeÛ<:95Y6!zUk.(r>Gĕ,#ӏ1tT;wS#Ȝs;BUː@[*`k(^ .0CY՜˿mM2:й IL#`ʽ*#3Hmy꟪l'؟` HZkRS+BtiU:7( *$=Wh//;4@-gT]| ZZopW /ieAA55M]7bZ /mSJ6BSl&W@Z!s ;?=geg7}+4aTDÝ.ְY2ϋA#+RSjS c64ޢcZ1]YYp$ *E&fz`rQߏ##SpdM(ňUg0(g+O-Uly52Gc\prm0,Szz,ZE'_tubg{<X7FcS#,ON1j"ɳ!*Rx U K2d=_:| 9 A@J;e0aRւvI6$%#.t!Isub]y* 0:dtI|giJ 5lˏIo١C,p&< 4 TY 굿={2 %X6,mԏ8{VǤ"FF@bFUmOaˋY/WJp}B~X2 hX`&D;,ejx!jl76:~;m,R*R0EyRf~*af#grǘS|zs]|,čIJAӀOG%Գb¤OiFt12$g5L7S;cT@џQm,ٕl:ؚ) }| g)xu?6RM )P&NW@z {R xZ~0 5v3hٓ~$ccĔ9$o@  =,pJI\'q̔ϼj3uQS#[ Z9Q !c+C!a*4lӶ'ⱪm~,EAK9]٧5]ÒFNxA}6z[f+ױ+ae2Fc^89ꢬa_ï}˲8otZ_YS )wŠ:L#ibyS,"Lա%犎J#P#I.i!A#=8b sXBQKf%aBPN]a]pnSdyLia:bAT:{ M<#2Ɓ>FُF)0FOAB4e"~TO:B=ܫZ_>UV< z f(v7 5A艟P%*>rRT:[m8'.o2Bt: ED, r[{`g`Mol+!|}QRW i'$C)ox= w)/w$Ͱ˝2PEunOwZi=CHh_LA_u8f ?n|β*G43(A-dGڜ / ǥnI}̈5joӏMYax.^.Co++?Xl{Ϳhz(AGP@C@l{yT YJ."@ [a:\Kug#)2ure )cs|TOJ~yAY;MO=\']~i]=&!ꗗ?uGߨ1>Az~~ta1,(E6!\ {#&w}ܫV WsʯZ Y k]w+]|asʺx8kW\8woPPpy.:v0p!_?Vek/}7P:+Q)Ҳ^\'yVLǒ[ ,O f>;J~iVwy"$`U6޺ߛ \.Lq>+3AOiM*ў~>B;KteӵM+SX¨ќGU^+,ٽ[?ܣKs|SU{iynJx_IL4GV%JYINͥuKҡvO g{U^)sHI](ްD[d}A?0vȔO?4wEQKr^z_U$9<`I=ݩycx/`#t膗ye2OmƫϪ?_C &yU;\F'e;ex#=rݧ:50҅-xl;nb،PXyW2MH5NU]Iy*sUOgHAhG=CPW1)=I%ZgfGZ7<dre盟8k+/+7ƿ{ǰZUm}~DP&蛙p yR ņ_p^m葦yivcC9R?7Ϝ?`\׌o֮e [lܕV9 @(-wJ0v[nF!xdygUJu9Ƥud%R罷̈́K)Wuȫwx%:x+ h@5eeFp_`ژ0+s2Rǐ]Zť^ 7vl>!AJc8^G.^E~ Cgx:|xݳ3tP5 v/jqbj[}uXqTuP|"[(LtjC R^5 s:-lD;3~ Wߝ&ĜDl0r UQϜOAdC?a^O/2*Ւ[sw7,-Jesub>|S7y;<#z\C\ѣ>&3a^g8yxHFP3rbbM(C+SפMvV\՞ Ct髱%G*?Y£.xWe&]*xp@󧭉.&bQ.h'!O. ^sYKwR7R|Nl52e:0'Y9bvՋ$Q6S]N)kq![N"gz8:e l{ؑtDV K^`tpI^ᤦ +mP|T3: /l.c7 !J!JrhsDTE))CJz|BoT\[+_P`nDeZ$vQE*0p d: vUQhTg T3a~\??=/Fz0*w D.9It#Sŵ.sa~D8xfOЂM `>/aU]`ocܥXx%JYf=cC|>W?stm(Y \mq^k?r5j'Lr B7"0F؜^kg *8J'5IS]TvBhvc#x@Tģ2exzffP†!fUMrZ 8Q@oͧ|uԟ_SLӡk2A\5ҳC)sm;K]i;S6'sţ ֣쫪Zw(]dc]gԼˇ}|SEn[PK< 6llG>B;6F`K1KY92Nيm™`7;bL,v 8. yxo>yF.ih|M⅍%b]E4F>%j6?O@26iq+AoJuR$sHEp|In'ySue|#HJf1/ӯz䳙-`>"IV`Wх)%kE Jt~SRSo> œҴԶO.~"Fx骗Οp8ׅQW/h0L[qXLkBΪOVY.W;lO a5\Z}3=dĎ hZbR,+Vq)I ,26#Kۂ_ofڡs鼕3Ĵhm$[&ãxVΨO@395(d}1Z1qS:vyg}]@Gb&n<<NY8*I'C^8z][h5JBO+NOlJ4J,]H-gÓt/Z_2"cgqAA7XFM `Z^7?g~;0UmvmH#֐|vh/"+NYOmds  Hs6'L+}?l6FCeolS͘5ﱉ/ 6A>yUIen7 ؜ L*?<~Ǫ*(ýſO:tdc2lr ʫb }oߤZ/` #nHt?^:Da ҍ=Equ׽s|iGJhw2{sS\<7ovwk (_ݸ x"ؽs/ڮͻ^U3t!gg?}l/_guo2}yu鞆sB9^摼ͩ}ВZ~yu.;zE7UQ RpbmhNuxE ;SUʤx9}nt/yY=PТvWܔ<ڇoT]Wi}Y|ΑgpjK,wH a{s_Z:6S?n]t#< ;s cZ驴"H=-ϛ3dFɸM@mhaw?ܨR;9yoe|- y;e5&?}pylz@,Gy~'mn/;~euNZG6˟i:jh-QQ5sܖī`1^5duJn\a{9]z-&8 X7<;X{cG;PKevsieI[CwWx,-hKN{pj;Y.`$#׌ Ќ]FO56W-rzWar=OaW;) jc @8Fxwp?AQCLL=U~>\˛m_^R7:o.Z:x`~/G/b|8 =kDZu1BQl*r,Zdkw4ݫk}EYQ"x?17FpxYj%|Ur7zuvhh@0|27 'L_;s1;>dDХ4JjMFC"|dOORϾS4rgMX_vէZ#:wj٘R$Ǩ 2vO}PiTV&UsTMղ(r4{6'7DSɵUwa9hsgp6v .S8'8Ϻ4HIu+C]lET{UΚOcEvmQh/NBq|=;$uZ%BLkIb(I 77Hhk31T4!:ޝY .SN )VȤn 7P,a*K袐CD[C,Ƣ߂AJ'G=J^ny3UѢ|nh'>9G\;P-`5Oj47:(gk9{/}Q5|:FuA6!5tx^T55nC)%vyDK,:{l&26>WE%5Fj;Cs^g bmhDfCJ@ s=fɟ7m|ܸxL2DHnB-l01B7_33=[׶r^ JeS6 alȟXy*UбԚebE;sӜ"ջ>":65Ċu*t'D>VLl)tE%G?@?ԞtOFSɀMY؛@.V4˲5;i@y;zG r  Gı6Gh1m;[SM|,!6w< !&ˣ0UijUVa, 馔A#jXz%%hUE 0tM-TaN;*#~Ks!JIzVw?5;':S@JgD?̻ 8'XH9bِ{颊BXE-$XJVVr`r:Iyzj'_;C =Zp%'8J*N?ؘLgu'9ۜPre1ap(l-̀l1jc)(߱H9S7UY7d^5$dSV]j;*gaaEnO'CLr~13Kw\':St pU#3N@ vidmvt"wɂP 4eqSLS8ṔU>KXPx #V CkӖ͢2?vt<Ԅ8b~rD*G@験g!LD4 %w! 6rf*#osA̦Ȣ.ۑL&N^M>ΤuMW{)^w `?fS \(Ec|FLR㔢ds Kڨ1śzәf"Kg`>L >:>1,S4TSiV#'&ء) y6V@9c{ uWcL6'19e>_&R2-cʚyRw@tߩ(hsy@O;: l_"SA+QRB #|~>pv%Gȫv:^Q抎؂aN>o`܍t|==V@J{Ls5O'v#!(LG|S/_=͗sLoG[ÿ#6{%nūy1>kHG=R=?0 z`{FݔCjaN>Qu8Щ{dB^,v=}߻͓CkQU.,v62yoy9?>0È1/* ۜq}b^ =}vCvJ+1{[xpY'))8nw[vZUPv{8#u]7Ϟm"rGY4DoK萐2q=l-w2Tkʵ&̻NנKMh v|1~,uTz$jݳͮcMMɳZRp*'y<7@G6GoKqUKR~eUJEv%2t_֟dҞNzbt Mmƭ"!Uӿ.!;s6w>b₼Ѣ wf'f47ancn܏tBslhu?qx͸+Pgq߃x=QunsoZŶy~NjKc˛?.dk #4_čktC'k!@ ϟ?c#.ó iMJ /-@\uԬ:c3`(sfr_Xt"[򦠤+{>d^7!:R P܇|}{ S-<]ߏ#إٵmx~y4S=SwG \ k"rB r5e"1[vf[i\c~@Ruw!ㆮS{ǫF{nL*=rO,Ȝ- >fzԓmd,J?btV)/jt'R?"\zM$ LbP[Dy)1Kg}V`.+ xzRtu#aC6;ln Ri\Yue1ꉏYPxv#gQLgf5v\rr=βZ$0r|?s;w;ni v]5(}h06W9 mA٨j6פP*7TaU$ KRz6g0wi(j`:alROen@xX~"5'˹0z(xڰkw.dyoz1@Ly"|8*l]҆^ sIQ̔HHa Lؗ=%{ՙXޔ!zǸ[aOuzkt*[UIpW}ޯ= jcgwMtR٠NCxIM83C|Ĺ=M2"œZ 2Ė$tl(Gg&>PUgJR`IG2++O~{9{z Al+- J_ufs4\Gn95S^;+'bÔ"FaF 0љ2DG%i%L;6µ[|X9|}p7~@X`u"XoUyMr]'7#ۋFuy.^1qW1sP7;kRӍ 0gj|w.zr5 1EH":HԷmd-G5~f%eB8}9r#F{JRҺlP T.`jSyBVgt"[ x`ҦMaĨO.Sz>E/H<|_څlE 6&N7T)s0PUرb-e3g ,jP3dҗЏ1@iYX$-acS.DSyjVGϞS0ɏ?ȧ*L~΅ PyD)]-k21LXT!O1YHeUrtY_pt- -鸤VK۹~'Ѱ;1A}22MOAUATyX|Fy,[X3 =3|s(`A&-rRN^!2yy"_`j>v# \V6()a#h݇/l艀ݕAKe0*j1E ׌niHeShƔx41Rʜ/8qɒ NF ֹ9U^6_~hW y`c_|SN+]vGeϳg^32BageYԕE-UHq]u~:_`*{ 8 sne93 򞌳t?֫VurWeLZDQFf|XbYD|{mm[kSؔ2nf2[8&+H7NY'tShҌR׈[>2V7߭S<($WDYt%#dl9Ug9ѩ\t\JQѮ. lDрRtM*8ʬ <hb7| {(8H8%k쉦EOzP> q1HvѝC$7ғ&`ԚYeHPc79Ij;v@{^K1MU\ϣX9XkDhf)]"ppԑڱdB"vLܠ1ɬ_3hfCn)$7qfXϢ%_dqȷ.u0=K.,lfYO<4r h~ƫ톢JDi jIF?nS k!(eS/!&}a KMǃ,rfȠZkNJv9?[ˤ2+L岉^QZZ-&yKTz#OR^%A>L׽bhV2Po,a_˃n[Ddy@xL^y4{=nolc$#WZq9XpZ1$j_@^oʏͣT.r|s)SKF{ʱO*x'^wYRל 5r=wB̳1o^޼]f{~n+&N#(-ԾlG} Խ^y (O~]:;zL;O?phYᅦkۃwrޛ#{_ڶ{.æ@}y".>WYB}ac5pdxt+ٹݭRWg>*ܽ0P CYZ8_O,aˆ*  ` }KVѳgm{!uF{o^Ԭ_0쇷vAyiv4O`V]g?adL S]8te^\GtLFL,}F\r)U_ N]!+ C=+I6"]{?`O<ե{VM2e x*A MU᏷KgqlhӔV^r9l|wCl(3ZQזu,odG}^~/?zMQkUsѥJ7:c7\Ac(V x՞;uU=/k~{޻= Z-.Hú:JF).[cFɭ,~|}7j ce[/l-{8Y.6}T}MDU'3H@y5>k%klk Ox?hMNXFl PEx*6ɉZ̖wUlHF!!v j[M#UPzK&Չb UqUWf*ZPnYMl we̕fBLpñ|>JS~„?SJ{n@*™=|OtP/es1akټ0e >h׸GxN),ZF(|v.|hCNnJᢋKGo4.dR{:dI! D67h.aV%9T3l U2Q%GG)[GPK44#afi".~^ǃZ͠-*`ڇƑg`;Fe R-^sYn4赀c*B>>j:FF&`s>e5,[gsL,lpպtOyCjG j 1 yaВa15CⰃ4DSQ ЇaҞ!܎>K:vQD[Jj.M7/>}^`k|VZ!h3I$D(fGSd'q.%4d`g}jUaDMw;1&QjU#1@ 5 }PcN8@˛U5õkU-h7;拇e 2T=RV9THHOt5تvdɮ)ǖ ^8&}65;@v:%e0 Y>}* [C=*?eLH-T.eY3dW krED0u:h:XUx2Sۊmh^&!MjMsd ̆Ga 2+0I\}&%v!-s%Z' Ͳo)~K +#EM7 )u=)gxj _uA$\.)EQQaF`Kݑ4To`Ƞ1 L29!b=Į|;sFQI5~5O-:0'"tSzR6Zl~ 5Sc|b}YGJs *ce(,Y""u}ɾ11ߺe֬Ǔ\ڊ sgaqŭ JYg*~Oy)!Iel4bPkm&=)v:Ʒ u?3F*IĒH2v)+#*DfE"3y:/:&2u ?LQѺB깖xHGɫy_#g2\&$іdVKd1*uG9/Y>,{%Vq3>jqrBadfA'4I2hK`YDs?Du*誨h.Nԉ 1=r#C͍h+Fk0vA5&}$賮(Qadf/ n̗GA~ 30ʏ0~HEaP4PzKvdgQF67[/ .Ɵ-nºA}j Y :Ay _nA 'J!Ƨ,=XB/J٧MA}oCm*(3rC0*ojOr%yh hVɈch4Wb3, qc@CiM*Θ jmY?go]W"UYJaBRtc!iǧ6W/;q]3nsBuU38`u^CYjs InPQQ]3m2H'ʩp޸Y5֫A) R%*T$M2Hfjxg|$Q@8! j3F6dYJ.MQQmt*$0+ޠEʧ ˍ&݅ Vr0Dm2K7)X0hDB}X~ \d7WҼ) -x4QR9YɎbJ$0IgM7j[(Ao-|>P4(`R!i6D㭔A`>iTYH8 #f|@@v7ehO٢uKZN5?q._%7/YƓE_rzZiLd 9='/؏I<86O&}VIxIuNǤu/ÔyTcx<${o^4Ȟ*|`шx,fWz_G㽶mI^~^&&<@izejz/VH@N_86JU {C;=Xdx ly8d OC=l)Ðt@{Qcft9o1&D)C8}C;GX4coxծ%}^Jb;c<Հ1PG%*߽Gt>k;jY?l~wa'e&l@uʷŨBq-Xns~ 4Osesro# C's)gZ ex}jx_dʼUneCߡNzokC̒od[Y٫k|[ xqEwKH<0ՏKQTeY#`̔5+ݸ8bO=bƪ}%UN=}a\ X߰e~f mV ɔxD]F[PKtF=dFnۍs3%޿*ky=h <#~'E^3QJ?+wk ܝ 捶<2uQۧx+7\n#A.}3ѷRk*&8u#^vOQɤGIK]69ׂ؎MQ fܫ^$2.L р22X|SUTepb񅰀_jK*# <9#d6pS`H2I r?K| A-ujI!4ѳO ϩc3{<,:uv:^?VҔ$+ժY*Egl擗} w]v&'tBF5a"S[عґꙨz3oػ5 ^NUMO#ZQс]I] *8ᵄq6:xQ/E~l]^!vW.6o/@$`N|j5yL=XZӏl&p13Sl^xRy#4!7ܮ=LAQ"Z9STq H՞.E Ӕ7{&P)dK ;8W{h<&Y0$zwlR Ϧ&Bҏ;`?װ1H* ME(EG0EiBJjK'U +3->W?Bʮyu% H{8?S2EXI ÓՕs"Sj0dM uHRc"bj RNX,Yկ}_o͵oKhz,MX o)7vRBoTlsAjzUk{'@Pӧ{㑱 뚷ė)y^Zsl(m -uRZRGr/{ V5 ?],}2檚A h:eQ&Z^3LF+01} h _M57 kN}PŶ eH|SW뛲^ee?/S-uzu蚡0"fZD PԬ2%ş<%yߴK-2;>ymj}tPgpKgo)>!ȐmrAv] ɻLШ.B$(WDRXɧ.]`'Hn`%UGG,+0rpsc/;NQ!TT>kDp f7hDXU V䛏j#I5?d.tIKR,|[ag(D?~D7-`S-kힲ>?m8!A50:d 0)ԄJ1VT6!|j:.=i#dJ4DRZ^BpPiYMV!!hMLΦB}9s[O2ľ;9vqWzvY,]HF`I "19"썡6 X,m+,7|VL~h5@onؖB!jaGأ(zg1)PwNzEb p:r>JQ%P"N`evx5m;6-$Bkփ_L:h1?_h Fo .j 0nhC@v-֫Z-1%}eQԛUJ0xx(ö۟۫'q3gه@HģM.Zb<߲ tm52#6X:S"6:hZ4CpS?}_-[e%tί @P_2NgYA&g5u}{u=xFyuؽ=Q#d/)  Dges.L}Smέȁ7|g$%qJ?Q,0Bu`H(\ZF[L\$182<`/Tk>}) 8`Y:j6gQuӀ"iR _#۫i KM/?̪AE8\ԛ'ӏch2 enk 3@s5nVu];3@?UL[f=3wd:玹2Qf#\ IZؓ-V-cڙ&[O簵hH$i3䲞B}*ض=33>S0t}m -wũK2Ƞl> qSMŕ3:b>AB 8T^.-[eƑ) kJ,mNADs[k F`kg }Vhe;u˯Y>NEhߒC$NQ`*Hg7YLUz ɣ83>tH!CEt񉵌-rQƜe5E'&2t5yPmbv3TsR('L {3+2w9,5DfgʢQWJX}sr AC.v tHUQngĚe 3e> (VZx}9}џУ^.v#>?on$NQVfPӍ_i^_}ȟyGlY]wVNk;ȿ2!opc{̻\'˿wNfsy?(L/ÿV$C{0 3y,.2b˃NxaWĥ>p8r<{;~ z5:z=?U^v{ůˈiv{;1@^QWRrs\ 4@.:u=<<#]qm:?V`#W'P__SwOjܱsȋi+c+㈴(b(ihck0,=CDr 6W̆\Sqx:m(*!yxqq/G"U ˸5Xa|F)_3 38N;r[dG9T{Mi@3uNmF fqy,寋GaL~P1soWS8±7o)?˴!uT#x8iv|b̓s>C WYj \7CiYRR& yw:g(i׿;Mrʲcm+ٺoyƏ/_?/WK)&e覼#dA; !YnxHEgÒ Qc [UF7J7*TzemWr(F֖SkI~gOQ\;!T{_Jp^ir(@uW_(<ɹïJXz#u n[~GB]nL{qCN(܍|ţܟnU|eFpLw}2˳кH.;b@ؿcJSXidzi9 Sr>i yLa!>=/(iە53;`/ՓϼkFC7!Vt\xz꼗 O3 yw6Ug@fB#k#hKCŎDG-_7`c4^Mgs^<`SzV?FkAG#i(KG+|P,n y ?Y"6q2 to_Q݋V}ϒO83k6f(2=b:YTds5b7}Ŵ3+9ݘ+!F% Vh1FεTV\;k@ rT5$I3 ,ICk0>ʤf\ UpEm 1jH??w4g&O{)6'2˱*WHЏAtx1{FdI=pEZRۘRTS- 12 ^!BՎ>IدزvnqKPrV4A9{Uگ1u%NcN "v01Qv.RUFN^Ub0_%L4!h͌]+yB쓛ڲN ^`h%N˰#<ȴAL kur0B/a0(e=m]R6$5:$0 W2tAB?SDa*pVi=2ntW_׈K= }&@D\(Ԛ7b~u"3+ȚSni>p9(#n>L ?B^9`a_糟DZT :;ԢfPNs#9򎑳=UtbH{BƲHj & dwھ2L22 8  !@T#^ MYCgFvROn2"d'j-O qtd6wTW\i(SkL `0Wψ)u(r\P}:! Ƞ ŶB㝒8Z3E'LQ7ϴ=FTĤivtU5mcø9LE$3&ڕWiʨ 71& CVzr ,t3"q(9_ %F "m6Ɇ3@FJp`0kNIK8B#n!Z6&~Ti@2p}N7(ŰahTo" !\^-orυ/U*t׹hf'f ;}?5̲}@ aTQ 9klR.zQ䄦]n"^ mk}.H}^m.3Y"%ZkA}L&jw \ %)>f)Y蜷iLl}X`qf?&EӅy}2O`zԟhLIqxv$RwEV_3"4e s77*NZ~@^_Qh u{bxӔsx+}0ʅ=be#A`;C(RRiW74#)v]Mҡ.vOLEAj/YwԢnG-ȶyǍS E=cG_@o!<!(zr9oZۈQ_\2MƓIv6M:8 /NUr[f=Q/UQ_ZEG]ĢӜbU^6]U?@oOze!|`Te]ܮtnɝeAR65⹳x .vSNEΏE/^p:8n9]V~x΅^]u4-+O/ZO_i Jp A!Y||"?Ubn |rW2蝹'9 `2 [@ Hbe@;].SwǗ{w>f)O[8_8D~n~2ʳK/3N#ťNaVQG'ޭpDÕVqɔN-HyxP=bdظwłtĨoTP#_OtdμuN-;wrLQT ~ ➑1|4a RE4!ͶP_w3lEy|S]Cti%[[d~K4Diҳ0wv9uq⧦utGS\s rh;V15,\!t/lq~jj-頩jSfF-'霖p[S&Bqz^}`L/g .46)tjyGOew\aKTFmiYjF?~V)q{.]S4+b7a&6Wo6konwHms>'y[v@?}qc2gѫhtËk ԫZ%IZ-^;dPw̾Ct54O3,rdG]@h61|5h*# sR dHF"ZLP4@fXƈWjY@0!] #awt09٤ z+; fpGv2e!6;Wl JYsSܳ\NJ,F@̾m/~(.A?TcbC[/S4y7g[ h V{ 7jB]K 4fj0&!"L=d- djjU reu}IS' صH/vM˦Z1~'(cAL陊6jYm :TvY_[lUِFtuդA\R[N }I6t0ea< ԁ41,UgOﯟ??9oW0Op)R Dc4TO^ ?1DŽcV%:IhSdX43Ѷ!1cѧ> r'H&MlF9K_U, e N^ԶBrȮjsu. E@0rç:"?qn6rƦW)ڊ2TJ7]4եUyW ]ux-ψs,ًdzJmjjdMq^`sY (klA&ݸn'~mMƈj=M3WhWC,ߩ?] ōR~ĕ;Πojn&0eŒOjR5}d,z77xl7=EbGXM8߰86:IͅN .05O"e !$%"e~a1KʚМݠN]Rʮ3g^E.KrvZ?>' q - UMޫS9K@߮`wZFڭ^)F0*VMspG+SVDžMI$!"\MR|aں}3GYkOp2j ~>&n>DްIYWfB<qz9d>DhC*g_ KM3,T킎g2I˃\l>U_}gMM_ğ.19W!W3Aײ^y%%lLܦ!\7ǟcFYkW R,j&GJQ2SkH2gٙ0,pl֨Kt UjMJldF dP.4 ?F% &SӒLHϐ"cc&ܰ&{6-KQvJń:wԍ|R7 <ʥҪa` (~?(o>i}\9)װ,UN*RtZCkVi. Y2dnXt)mcʋ|_2c %o6@{c={7z#=x '}tHz=#\DuEu$fW_qWzZأ͠ ֎/GռyqsE·VF ?lηC;8==8No|k!?~'}>oj =?>$QAWR6O\Pei;l[`nP;}y5W|O%9ݦi Lǧ8=58.P˓n>.: ((/qB6C r^UA`T[9a@se ^J.{FB:ƾ2.dAj?<9J{apNӋZGY}y:?vo5NXvm(O)vGCQ°]k#Ak22P~HM.~~_ɗ]Up]%y I.pq]mXЬ۝K7u˵TZḎ=4]M'WjFfzdSS54.,|^eQu2춢{iH,wUUS_`'.Awp-=bi|\~7L=ۺZ>v?~]A2Hb!Ԗp{~$"n~;n~edTgrǺZPf z7E1@9UB0Fqz(x T=r5-rh?k7w%O\fH.ڲ׼; v?sTw[4KGdߺ2cZJ^;BN; W~H_ÑC|=ߊ\ҋT|> v ֔o tKYԇ ^FnswaN!g潾 >!F2dJ[;|<=xCo/6vk٢ų@opYd T1؝\R- g?ԫTVN r5LG$3bFF9$@t>մko*/7<de;zV&?Й~jП {՞1G W1^m kVv DJسã <3OA=%d7`41B?Y=vP;q,KUOL¨M.Pa3`€O)6痪>JW 'uG*7c\CY?Eˮ WAJpYvM4gIr?6M~zV6kshЈQLM4mɤTnKu"P,)d/}[4+|4;d =MV1lJI;6H,L%z}Hi~fF.x}d ,l~]*D[$X(24;'mʓH֤dD^%jiEnv@5BL"(jb1`o%)By$@Vв8UkR&ɏ(@6 >m{|НOƵkذSf^j.T2g֔ @BJ4E r$c.&{ʹ6U):McBSDՔ-dLaEpNYޮpl'Ǵt#. V׋lj'6WBCj.Rt~+BxQ "x/>> 9dA/>"'fA9%ⶋtmo`ο/ˢgʶ)StI'ߪ­"-bY{@57pUI?}E|/7yHߐ, B(>e7. P1j>oƭ\ݤPiZS~2OԗIHaGg5n~+{4*L键<;HFKR5;gO*OCwh-5^ #M&EqS1S<9w|戍 t4;%êFFj$%MP$q$K) fΫNe0HQAIyl\|YH\~R H L9NAT~1t vRy '\PBYy%:X< y dAk'ϯ拺YiAYg07t:9lM9jʵ.nng̽g 1\Y}eh$B-s1T2G܀vQ'Nj{b$_q倓O{ypHzѾ+.vF]3֟Tg*N<Fw H}Rvk4@Mυrpy}ڞWg8?)Fn>{̷Euv?HͲ^q{I0LL8|Yzޥg8l$w٠7 ûyp/oڅL+;eμi. <Ye}z9*W?Uĩ{:Vj'3_۹(N_Wk)5#dmi[HGRksNtmZKz'E*<,MC;uoZ-˻PLvNJ٨`4'.?@,)ȑgR޹ {%Vj hUۻ]0Ʌ=SE^ۺ[%Y-/tn0@DQm.+B9a:gn-VB8;oLU%m ĉ texT^r!ڹOnE]զKzF R zNq`?Ya?1@\A =`n(R]I6[qOW~Ua7Һ'+RgMߕrP0=$r`;Rq.ӣ?B9+] qބ(PWNA6%{ؔ{6Y`fwJwc=9tvkUW=&aN e5~_-e qGbZY)IKLpRxP6'*-u9Zґgav(޴ʤ}EdezU67[_ hˠ>TsDpVOXo]7sIU۲خڼŭ,^{jS0\mK3%^E9KunX{%d_Y |5uDZVU}4d2)GJhp꼂9J0Rt7-5V47_I4 SnZ(<@ Ǧ'U97xy.7鄕lVȠ\:9|<MjJ9n {utCU^i1ˡ_nT4;h7*at+ZD J)nM`ٳ V|/`U _,я^X`vxN5z#'(y0Ϣ)KLx5C4+*8{#P6SqPW0'06.S?&6;#J=o ,,2}2 œDd?eэ5.$SX[[<0QLyτz8gs YAe PÆtR5$7!E]RWA C_[gp'2 _^,)q'Z5m&ctm5x 6Ji3vf*չ&hc,$ wip}`sͮ*|ٞ>,tAdk08˔De5e7&=(Y-9cT*@oYX,)4 ˝a`g[q#g}v)8cRnu+z\Eƃb|55:䕼jZQdYNq iKfpГEh?, BG񛘝s7¥<4H-zvJV0ϥSOtOTë|,>M[gjnꓠ*AJ&vA}B1(ͭ r~θ/P /_hr@M^M狄E26bZPmkQehbaXd5j&RS5ˤ7h|_mIRl+C]u>Y'@tɉ^I&2KM>E֞OtO8ŅYzT\l?FU\i-$T5F^i\dsuIZfz'zv0FbX?-PC 4}U]ܓ0Icmj,h%4>$xOs-ϰ .􎫙OB}X5ƧM{EAuEv4;^f OM9*5Ĺ Q`B$6(4ڤdXHZwLvǙ' 1=1 MsL^ju 7 UU2ӘiZqne/!F֔V7ab": ˆGUռyU]5u1H9IdykqUX r?׭ a'g;BE۶1Rru񄪺k Rx"H(ReӲRԃx _.~!N$]}׶չ />%/>u('VRTIMP!1 ݷԿB*3f&kd V:wŴ .&)z|@eȮp{ZiB[ԋZ(fCZzV\NeIP7w`AO Z]sÒ$,G ӨtTГ!*jxxجx`aLi1̨ "tFOUZ[@dIAXlR}Bg@p&#f%TneuZ(7rkW{a),RSCY*_wu oƅ<[NjoM J DD%?"& fEF'CJS|ʉLN/1_向eZsY5b%d|Y7"RSxT\-,@D_&syQoo ?o&¿O"0ſת>i~$:A%%hjV*iϞ5>VJ31 <~~@Y z||;s…]uKݽx|~cq̯'>Ngr@7RCݣqCzr{4,:_0<2m{S}/qqyGI|i>??eG%~WFǧ=f{yz?s-.dH J?Ώ5adrxzuOMm !ԟʞ'9i H=h[-; 95̹p5G'wVryy |e : 䉩{HWPqG70gѽfW:=` ~^^`^W0olZrb( y/)uxQ ~kdndux)M?˦j"nVߢ1 dg(y(L®Ww{g)H-T* P68mto۲{GnǢM2$.__;pa(e|e`Ok6wZH~5B)ϔ=3OVy&@ãHbπvhl7Te+?Q,2nQk9\9 HͲuWkׅ>dRYD`UmZ sj_;}|c|9~oxC/fu-\2`xDɨo,xO}Yl*SUsv<SpAme~Vd%ɳ 3ˍy<&Ǖ2ZG_ĩSNһԃBe|Mܙ~M:#+޽}#m/,G~yTMWnM~7{\kfzh)}}Q<ɂ!C&zT%pgwV, ^7y۫xe5 mB0c2gBr^ l̷!^ؓChuPeJFN*т)\@^Ea9< ǬGJHvbLQV)|fSlorH=z@<lV1z)ʰ3~&^&,YU ^$,,O['ʫ ($[$IJ)KZ-xIVUJu =;=.ˤ8ԛ:1+ \z~1Ȯ=a (7RQK!R_Iqy"Ȏt$7F? Q N!JՆ@ gHc 9] "Nq$T?U,Yg3A]U)@c rۋ b,kyn3#B|.Xҥ "d*!Ooi/ c{f %hiUц[R?)0CUA2LH0m ABS-9E7.afR))=EP#ͩpdv54QJCi^ ,׫xauod`&_> A課 JE!ڮZ;!ǀ J ;iݼ9`Uޫ})J ٶ1Du쇬y˥Q+`P{pň^{̧R;S}G=ԅtRkUB=0hv%e>/'9=]nqgF$8W_V?5ݟvՉFҪJy/4uFO산_B6l _ݕc- TWPno֫vБW jOhoEE>h7r|Yߵ(7˯_dyx~|?z2lfW*SB80J" UI~xcR6Ӳ+nE(U-TjsЬ(*7Kp lz+)&JW7uWXeWWijM B%k7ٶK: j9Zs1 FN}Ӻů7 {+ W`[_Mɦ|1*69xu/Nb5eV}j)uxuBN9#Pdy9}W-zS*dF\R"%ԫ?8Q yHCr49|InIM9yŕj(y<8-)`#Obߪ^ԯ$%nI5EgR"|) 7,'3ɲ:ZX +r!eZTDlsѬ4Ls2q!@R lZ)@sT*3J\]|&זY&e"s;1\sȮϑ)^4谸XsSk)+|6,\*V:n|qoë\3y&D({uYL~~M8#jp |EZ=HGn ʃBƧE]a;Výc`v@š{ljԊ[n-e5nof}= /|zt۟х+Xd~01m]8h_~5#X{u;}!_u@~<#^nG0/)Z "A]I)G '2'^ B,>AGxre t/N/%7eI1*g~_'$e%o?O/LQplHas-=9 nB`UV9g ;Lt"韯j1'հ'|zf]h+Hݴd?wSRJ bp'3hm ǂ-VnT/o;ͭ<"[,F l֔-aQ jдb#sD߹l|6[U2xF9TvǭE!T3^[0tUsD9^$rO9y$?"uOYX!b?e[h>|dX|\2f53YfRx~4%q7-렸^USE)-O^qaxgyb>ījxsU{uj@+%_P՘}#&-g?XyKp%WD z)&jtːBX!dk a(I9OQF-=dL).gEAoQپ8;3)@$)ݍ:x|7eG 9 E3 %4519,1yΏⰝ qӾqmpi STV6f4[)8>9{V%} [$4ePHU5V2PHAzp֌F8 mY 8KS vb"Cw 7uTM18y˴RmUɘZ?󶟤 XUeef^jJrڪ+Cp2F&>5 %CF-{Z-:C@0jOo*\ƞR[I r;yd#ՔܓZՖ-6d"{NGr9㦄xN)aή~&Ŵ&xtvjN'.3ت9Uڝ (4sYR_U6+ Lжhro??W~tK>_/i2~ls׻|nY¨@Q2+ti+2 EYYsr&'I %}dE KP˽ o@{p!eDVĬ] S&V`шk6yD6bAҼDK&WFbC)r,η:A>ve^Zy]I{0W)4XFR52ebU_誁;Fۅ"&gw]wA p֍L>f'Z(̒564>_&ŋP&XNX5, uѲCR^瓧uQC֭ߵT >3]׍͹ؾ%J{g>^sJ/%q(|~@߷BcPPo?O~Y[=">VO7a3@FFvUy.*χ!I|9LjnovtMR%WnASmjFUxe#TD5Vfؚغl_H>/\@JՒ/{ 9wL0Z|h\sЖd dİ1㜜8Qe~>yPoL~!#:!X68Z52eQdm4 pWP>E$)@ 1G$",a'hJA*ؒ\8ˤVK t̹&wnJ O72)П9P o+hXYKa< Ga[8SB3[},_R߈-CWoRZML Ajλ6XJr5:B0LAyC-'2(iHR0KhV-tpDJ̓]UR;X2rf pԦҜy3,XמBT 71RLŔxqu9WNisWȩmG:MPOsIȪm]:VOKbٖ:[ʲ< 0V͂6iJ [V^Z=)eBx'fܥTN)GL2Cumڻ}c֍Ԧ$vHtsHEtWg:1ìd4_Ae[sЮ<[%,>|c䁹"59pHZIx;*1 e-4$"Q~0_z@kR)Dw6kL쥄dvdkˑҕK M `xG80ĪO_ZC=:v_cq=_ 5öm?l?& 9rW7RUe?.^* NwTHUu'y|@pFRڞX\#޽0r'Wñ'^z[J2D0]NFC x9O̳)m5N]uztV_tπٻZ,]4uH,1C@Gqysأժҹtt{!/s Jf}HM-?^><ՃU:3:w٪'x>Ɨoϯ۱+x~8Ja E(x=[ײImdʿ-IXy~A⛑X+(|K bڅ]Ux´]%_9_;MHgY#|u[؍5M]vLY%Y^3~YM6Ș3o3/эʏ b!2)o>Gw ^&܅꧐[aB%wcͮ!\MF7үTehq1$t?S;K2N"jiC/Sr؍u36S)tbE08|j'j)}RӔA`u֛M i澰: {ϱz5|*@$ۀSS;f:bGb618)L!Y ж׊Z/O`o-;@%8->$F654Ru&9&fGRW#}U2SP<5"EcHZ/f"_--~ß^ω/4ᵾ1ߢAYa?CX:.KՇ夥8յ9m6_^Ib٬<$ͬLjmK \;y@T X0Z)!f$g4g"א00Mk%Y50Ey׉ OT%4ǥ^]^y?{$̹\!˘&V:D"13Al `Z|!@9yސd@Z֮|Tg-XVzJI%3O X`@`0JCsnef<PDCA&O`(:v\aJUTD>fzAsx6'uMs AZHc30)a>:CO~9覮a}C*m-t'imGGzܨU |Uncڡd|{zǼo۔ܿw@8#BSjXjnn^Eo5+9${ݮ)8aplۡ'8$ִdI.2O W(،m>NN U{9%XZ 0B_&cpwuqjR*6ʛj#d2wy:K1GāIRw~˙pK)t`D< e^>d*p]6l-ZBaO'L4" L 9lLI!_ z&e>w 9wWf̏"Ԡv(]a6%mcD0u2bFFoMU| ^#imAgMYSW( pP-,j)+$yi4c~ -燒ƕ/H(,tBAO 1>oק BeS+@^k}810zi<`,߽O?Km,1K#kc>:獧ʡB/_ ;V?OZ>v ݄<`!CoA~ %QMN7F A=1%7sEcQ<ΰgH=h2cn`;K,iY2@_(?߀61!aoޔkFL&O_'5 $QӍs_9ux'0cq(Xwv5o]tݓψ\/ݛ,r(wƢ-:j RW׹w>ї޵ŧ ?E+0]cGL+:#4/찚1j(x Z,th1LF Hj=  KƞPkb_Zև{ZAwvqC7㦼<]ZEđXC7aJ*Ձw#Ǐ:e."`Y06ew<޷O}sZjv;\k5{ߓ*= qvK):ḱ:\ce#r8n|[WC,ˁQbNŲnY;i9sU@.$uqTS.7 )<&Mv#8i<!}ydm`Ʉv 17Lxxț߹1\K-4jV`_';"_f- bJ3ۘ3$S' QQүO)\!,-D'TmŚ%FRqc>[2D//%hKBŰY,e59\'W˧VvIy=h qH! ԧ(H*Nit$) ɵC Mv Ψ;4"wDL/(o-ɀu$Oy# o@OuM?t 1]m B:7 kÚ+VeRyV8 ͽ~Ȥ%Kdܑ$L7 ٸ'lAJ]HQ ^*dm Ek)7^ȼ ˠݘ[fF7B` OMV3= ϗ+xy^UDa:S\{ˮEFLFpPʡk\gM9AC1Һ F`U(0TEdC.:uU ׃IrCx<7e50| *S͖`b(FsJ^Pf4)!{]5/ȵ;jKU3IAj\_LL{ ST`jX.P`-,CQVFƎ*%\3AԿ3T]єsBs;V5х7 TLd C /(aQ6`R(vޯa|@Gk9=eHH=1N/|0Gʼ~@D2Oŵi_rop .N.&}ϏIϾ.#8Q|\C"8-9ޞ`<#XEB%Ɉn9>O',xg~jű{mjiPx'Ѣ*ᆎ<`MH?)ſ{;>UhWD`n>;xˠP{Us✇{}*ݓ~ ~ޯOH#+qѴ~/BFԟҜÚtAF;n"yx_A.Jh(\{ZϹ{ֽ5$AԽ(<ݞeS{nxi{M' eSx6wh[Ծm>Щ qzp`&p?ȔF~\}lzSՇY`'`2 ^ߺvh[?xhJ4=ZoZs\nޟ><8% rnoB6 :cpF0|_eD۾}Bg zWa%]}]+r`?W^c RkU]svc:slc{߷o?7pںI~B?*?;'C~4,C4\F4JH!j3ݬqykn@];$_<@VM/yQVqqɔz04*nms[՗6-=!D *ש=rcM} t;DS4馉琖m :"Q3&}I:1]_Uw/{@?c?Y lL'otYGgݷuݷ7v]ne[v})s~_}b0Z> Yܸ逑l)ב-{wp<ͱ[P-z9Pir{X&{N<KXa`r\r*,=$%šbݚqww0R5Sq7wJMk+L/N=]X,=fH`M1)Ov^Ĥ,TTSRڨZx&u3mTҵr4KwH,IW^*k*{h^(vєBr)0Q\UVJ N@`~c|T@3G< bJge}P^mipᅰ.dʡJG *BQ5owdAсеV0 c|LԶ6@YB#XvBw^]uH[gWtB {0US{ u\"35kY0 djnkaI>I&&PE{Hw3XOj㞲-X"c~ {KE$ծŋ\a4B~W;PT+"x' sl.}Vv᷊ U7#ƣ2bPױvĂvojрw0Vc _S֎㺲InxSj4 AÈ䩤5k qZm mRSAݏEe `zm?eߔ56X~Q~sݶ'pM̉.y-9=!{pE6療Ų6Fm%*f @4k1sG0y?xow]]sToQ9kM"7J}IXX*[]*Gl%53Q= 7a8TzNezIH-T5QtޚB; L7h`!d[zpopMyG SDBÈFz*J PhijEHftvpN,roOZ䋙 Q#7*cF)2]n:W^7[lCd!&xEÅ*Ph:uMp}MAm VWcW隋C9S~3J&֪ XcrD=/_UWN^U!UTf}iXG.vrDA% ME "}1_%pu9<Wwibu8&6}O_,x_y.'(ƵkDHI1M.Iq*ܗ{1Oah/%P#ǽEzzrS(VQߟGIx~sc=ws\xLß)N=-i) Ma .=徻ocGX UVCBRlCDfBbӉ C!yU .z'EmԴҸM9KEfBv)EgƉʗUv襤>F4%5iXɞ_h{z\jJjs$vrk,J4&Lk$hnoiroJ0 M#a('O6hbD ¨lL1SL9Wt&'uKFՖf[@<1]Xe&EmPNl\dFcɾ%MXs0*LAE4=~ [&8kIf]\J'$3ApfRMfw(aU$lu3`4@m 3[xxF*)t&%@Qȃ󄐳p9&ӟIBє<`6K >H2'ne;  Pդ#LZX fh;1mkBa\9yϳR6ƊyfU`sLYˮa%!'.þxʦ=ԷA8xtw/؅Rw(Gs9ݖk?^ג 2fBxza2EתG:s*ϭ51ectiF2!G%Ǐ upYC[[*Mm诣<;YRNn.Wjk>CVc!ܑ9űu.L A3yHM{T?o(w;0𽑳#LCGh`n*.zw퟈8 $/p*.[cWW^ӵ_UÕTǹ=iK!SC4غu\孅H?sڷә:>E״hN~}GƷ?zO̙%[w-R=ͣ,o4z\_AUJ |iGʁoWT$Y}j1{e^QO2t^B@X70C-w1ɕd/s'ηͽ<56 i+߾<(8jr@+\YtՓ|QUAgN[Z.L?} L  :ͥ˹p=Sk+lRSwK'5@⪛1 /,¡ lLx q? pOjP>f7u˳}Pcw۝aA#4:I 3vC; $>m7"F hSΤNr㿫 (hSj_pd,FcʤCkuFw*ٽX!fbZlli6Y皱W6IEZxC>U`RDZ2WgOO,p"6^\n}2gcP Kx$R £66&*L~I )=bq4̡E%R19%ضE{+OVjZ1ؓR1Iy*j/>B.pfuIUڎF½v<:\" 薪zjkmR'+Q2 p`}aTfu4=. }Sj-%ƹ8 e$T1|\ 4ζ &&0, N8L`^ {4_:z'/GSA,*ڨXIf!|Nk_*fci|_s[h\4e -’~ǭT`q73y`b)5bv)= q1lRomݩV$Y h-G]Bf]Ч))DiҒ2-ݞUD̿PdL)M(v/H3e;gb/u4c*2W`ʆ0)}fH`F@+@hFLNgn{7 3J~6vu&u#M.KR1PuՍ`z:r Z;(5;>(~m2•!#S'tW߱&~e{0D{8`<̒ؐ\IwG][N.X6܆6;Dm՟[F0꣮.wMr`NUK.ザ-zBF9q8pUow@ө9H)b˅d2OEab䥫!i!ܡJ;CB.-bbfEE]47Oll캨[x =fgYe6+򘛡5>[ g`EMܒD>d;*в3UA}Q|5o)^RN8,W J-IDATxyw*vuNݓs&00!!mZci-vtkkw^z'+Y-Y" 900arιr}W\U*;ϣތU4_vTJmh |#l\.JT"dP "к-zW^W꥙ gbc&W[VC|E :U>&;5<=uPs [;wc_c,^a55,HbJ'6e\t'L=ֵ\ǻ+~'Gw<Wԕ4un4 YWNf>c֬ Vݗ`ЭzK' Mp1xˤhǛb22jU0g[@x\9dP.ʺkng5!ZQ~wPQN%@)<v $"iYq=K\W3I"7[F q?@__6{s۞)݈2><+ZXTqu 8՘.zq&l.fkC2dM :d~ ?xg }gb td..Xݛꢇݳy0(:>ui)'V)E f)G(TdB~3Z T`G+~`+0gi5~%4ҽFM N/gXH^y> iZ:< CJ,5v,Y b,4=/% iE?&Тi^~}է0:?ɋ}Goq[f*uk:~vVKY8C~:;:n^n+NVp$ZRA"YXmMOvIW&{JYF^ xKSA!7*!4(Q9"hL>(j5X N2دZM McBMeg@2x%WTp&.>uj֐>_ ΥL~*֞_Q;Vvf(Y =J%p>!%M p^"o}+F|FG{o ƯYClx9M: ŅL Z鿀W,Gc]dk=&g\,#kg.yjP:?jٰ_ؼʼn8S@bW"90YȐWH4)Tҥ אՆ5UΉc#CAYoMCFBMLg[J\uI*KR8q&{bϳ@rd` ((j|1+vt &J7NEAW&Vf*c b]dQ}YSNDwؒEP<~KrNS"o:a,Ko\ H {@3Q4هx/9]AwYPڠ;D[eh儥@w fXw.ZǍ >\1۴qr*ͫ y\Rbv%bunjI7Vgrذ(T{#N癵&q}nԽqB(G(f͌)gxI} x"rR+KJY%!V^A[k*8*%y<3K9 K8&0c˖#}N(p B<; 6fHSvP"Kj:Ad"0~ ZQwcBa=|7t:-yFT@rfFKK5*(ߏJ|Zu= qkl\^M s`|\nh6Jêݡ:WMF CuMm_0t>j=m~YYm_ְnI>8w={rnq8KK>rW`%Fy}KYC8IRxh>'2XIHsHE=@M92@=*WeMCI hOiWz yw+ŀgڄ} *…1jj T`@W:JJRTY v>QyeƹMo 9+8etwjB@٢"HN/N͜^遻*ehPET,t\Xqu̔lNظcsіl*ʍ ft|Ẏ$R6,uN £-GVs)gir’N@HLˁ 1HDی@v4uU/I_&C.Mb6]A[,$~iuAf|-akkwKG)YA!`0 ǹÔHg`EC] # h::ORd \Jn-h_p$hiNMDָ/&kj&Gv{*T_R,s3dQ > )G9"e&PTRX7n;FwEI>EaƅSEEEHT5`AUIy{jpD < `돑? _{|v [|3 T !=ND8GsG:Tmb>m?$q2Rπ &Z&، l ~LxX}d|(hK3YrnW<ՎK6 L&S(y`(/(njYxb*(@%_,ZZ@QE|>8yd+=(;6?cYϵ[u7_Z-]<5IX²ҴS۹Zag+$D$:cC5.kR9#ڊzUqqپ7P,.bQⰿM7m\o衏?KijCW΀,]F(D'Yy=tp5׶w߅ّI1a^.HTZ&½PLNd\^A12%tiM2S "D{<=3%ndr j;Uصⲷvܰ Wm kbKW_47t^ZYqTw,W/͋?m[ThӯcRD濢x[-͆dQY9LCEщ 7CߗXTh]j  ]xh{/f_wUFͦn}w3rZye}7{ v=ʢǢSEa:B~8uQsY|'EhmN/GӍ KB'ˆH )b4DhW?ē{ۿ{Ϯ'[QKKy*|=2K,~I}CGsSե/٬ϑU2PX=hDCMfT-ni]_Z^8y]23'9SQF\.HQ-T>M#bv tNTRgCƒ7z k9 qdMN4ݯ3iMB$̋TpO\=M&"Q9SP^`Dq} o0dg .5cHdqLB tVi~˫f?w;oz3O! U.j;I 㺂-L|MwOקސ2.rySӤC׼m[ҼsֹP$}UU2bEIACVQfHUYO}GcP5<>YuYtmB|nIv$oK=_d( I25X #լ|.NNMOStj6•{o◟G=硶 Gdp^/'d-~F(EP _|+5GՂx||lUBezci8|-550GŔF`#M;|x՜ˈ:u̐DoNsr!5{W̋Ŗv>?>~s3hIE2 M5UwϚ h}NP"+o1DJTsNc!/e2jshے+Ḕqhrh(wz EV39"Q1+6?0.֨o`**ف^Z)͜}WY:]eB'h+V|| )+6,^`PXORJ`Q"-T6Ra򗰖ӾjG?ek۟;}튝bNMH>.&f'JB Fd2Jsto*4dYK8[9V'b}ΠYKok׭&P&;y&jVA=2)JS4kGe%lS (M nC^V_;$h unA'U".pa%; @kC,P2rxmREEv/ G< rwNM )&Q*$hvq_/??{;q)UnO}̢cą_-'TZ]5[WƗ&cmhXg`,UTDQ$A MFHurF,U(nI6u~(,]ֱac۵K_`HʥSa x x&_*-ԛ}d4I)M$0o{y$DDnZTz!5I2@lG;wjNk"\[7GiC4O- O? mDEfӜf [5XtLmjCSy,ۨ4ZZ[MOd,+qQSM&ַwcʫGzNXP-!JK:^h1Fd3ی,k5Yt,h@S Ym LSK[WFrH&hD#4lf"1&QQ9E1?[,;YT9WϦwYF5  c/cgm_54Dua=#R2L6v =p !];yK,zaT!gʙmD<ƯߑU=lOesPU`5s(-FFڲ3J-Zm7nFENȘuPd8l&3Y1/i`XMRuI]:!0,C'r#if'E(k\zWʤfEyYf o%Y4S-99%>ƹ,ZعR]da:w;ȢΌU ǂ [tU^r\<V%/+Q'liFmĤ)w7]-ꛓxˮ J!=$T<N-$B,MjA#i%ؽ\8l8@uRW1:+йZ75<%>'yYê5sj&y "hʀv;ɀʈJNuѷA,Flߣ;ϸ 9)lۥY"}tWUH&fGr-K'ϩpӈMN"M.T‘<"L] _ 4աJD/M we#k'<M(hmc 6@Y5y7ފK[`WCah!YyK4/Y#m/6굈G|oVN6wRwcٟ Etojǔo߾IWHݡ:9Z9`aic,"H]HDXF `iiNy]MH2NDp YI> dחXl9 B~>H6<#tͷrV)T)RIt&16fg{`l w~FioQ!s,t\pbV{?-ƣo?x+הs%ZIw>9g?-m L.iB bz4@YcK-ƭ6p:k2k -e4=R3%^>:yU$sDMhA16S 1 iT`ע c@m8xu Т ޳d! e|G_7N'Z +4G5PK|{iԽxg4|Ҕڐ* zc{l( {mNc_=J!Weٮ_n_ySW鍫n耄JFAFB:HcdJA.7QΞdX&9w8 EDmJ,- <1,&ԏKG"#NwvOGbR3m$ᙈ!&Jj&NHahx.XVI*l[g"T8=pRFӯm\ c>U-,ۻ#0&!Mm()&g *24!lDް LJ/kCvh( m6Ln}D(ZɓPY4{ºkm|L>߄ϝA}_ٌK0y8;xـCs(C oVibxl t %P\EuMroVH5?,e[xл~gOo_:|]ݽ±ᶆo-O)􊙕 d&$HLt꯲ Xe \GkkֲP-#蘞KM\B$]^Vro>r"s-Z44XTbLeU\W`$/z咔/׳/owCⳟ3Um@ܕU_OQT[PE5)8%aZ6 ,ٙ b%&u7PR=' ȓ]XK+YΝPSp$2)IZѩ0k~s =rӡPn_zw)_#[0^T٬j5Kʜ2^fǖ"],LLǽtK$6?rڬ ۳3}hE "ʺ[SBx-fr:L2~-pv: JDt6K:y,q&T8NoC1 (毁2ĮŭJȶ L1x~ѣέt@?9p@ZyqC;g\F9$HL, H-FM,XZ2ƤaH2*0c"|mn|:WP;6S24YFGbDQgRf^L܌:r3ϥٳ4@y9K-=*2e*Q~~N|izeMlddS!]q{Ldqɷf蝘l_DAZVY1&kQ#G{A?fNdQzjZq~PT.ET (E@&:tp@F;JPvUF J"+5OI%q_GjM-U,lӔ(Hͮhi`B߼ B×?QwRUv6wGGOf6<ͥt6>װm?r&K}#|ٌ7# b|\=X5ߵ˽w]^2ظGT> EJh Z:\LN1h/l.,cKZ}h<2REOOqtQG~ ]13{4Gwj>яi{k?K֥NeqBY Յ  f&x-ME"sa 9<`懞ufA{Oss3Ug 40M=A]Vˬ{/OlǢIWo\6^ ƫj7Q5׷x˟xjR"Im;g\JU=񥟴N)@@M3PM]墎v]YTm>EHNthz͇o=mn.+63z&8;xamƯ@X|WGUVLf5oJ|!z&lĆhX3B[WµסaT@rL-T@XP}k8iU +g%p6Pmy_I%JϚ&##IQ9(g k/4iӐ8rKUEB@ӈH/s:e|೗^27ϧ6*#UL%4Z^ d3^~z2ofXQJݖb[/M4 ^!Y3lWuf?,VST^C U@!p -^9 G-=O>x{X@l4X.¬Uwa ?;"KQIIjka%5 Rぅ6FS=+q_M |NP<+Q6_(IQxKUr2/B`d M*\rwWd䬧ZcJ߹e5[ltJMqԪgmzvБH166.bOZXX#`TlTShTH]ET +4Y3(d4&Vl=)LݠxyJ:'i89D@YXc#kg&//kl9f)| H\WKOn/]V xv>YTĺ3oɋZS]=3{ѲR( y4aPS.l35:g7zkuY<`4^;m_㑯|WbcxxlXqX7K]&8:TǓ:Z22NJ}{n䝫_jCnT ݸ[s2Uy٥eqq>!8M=v{IjXJ˚JMY P2,RslFVT&HDIeE:wl޵uޓG?(uT55i9ƕi.PyA$+I{[AFQ4vu܎܉9$Sa3AXj&,D٣曵1S.2%*0y$eXRۂ,܉x 2̕[4axiknrIj Bw4yg}f@'ߛ!էhIbe(/ZSƳpϗ߀aVdi1G;ݶYɚHz!;)NGt,Jdd" 391'KӱrckoqYm[[ϼhx/|fT@☑eQi GN;k#Rd0QVN$rQQ =:js?67:ڻďjɡJc֐]e 6 ߁ YQ(n_x/pw?< _nz~ǙѰ$"ޭΎOƫKA<.@>.D)w"aa`a, _g[0MQSc/?xo,-+yQȉrN^* yH-dU&+KMJ&ʙm\14*>8_HłI"^3ԮWAeߵS S]CL8$5LJT1#9)Jl˅ntɷ@QJԊF4<eVT՛;0紷.X煓"zYRF!7||aBƈIpKghȬ4wfQCZ;s~zb km]O'S`R@yK}wH&1qIbZ|igKCI23#EVDD++@hy6)̱,x0HîNr5[w~1.ܶP8.-ej(_8}GT`c+a_Z.ԷyE H8"9*EOGv_)t^U 06fr?}uh8~#A"ղlO$LkJ`p < <4ٍTERJJK&oAT-A.34w'ϡ5GvPR]y&֔ݪL/)i“ɰq )/Yh^K^OFb9эɋփKVG93EP 60fIUm37_۳ff|x_ "ÑlHdt :xÓgjKqN# h$wW1ϡ*Ay Э)cP} !4@>o!_|~SA5]P˜$iUX0x a i24 ;裂b'vLY+sDKT}عGp {3+L JO4UDA"ӅBAYCz)ud(]Z+km(bHEC+[d(8PEXvv!#')-h_Fn@^=\ä@C ЫDσ02U*Xv@kzUf_y eÙr:9UN>S#O6V?HnF;×cg-dcjhfo`!Tua&/ql6J{5PYs$;/iڋ>%tozmiޚBnuT\c!4VWQUݎ4E(b):A O?"8%YIXtQ,e{Oέ n *iۣ5=bklB"͘)S#1y9ZG=d 1B:!"#k16܍ۻ1D0-;941g0-ذOn]S>X*xJfzsyiQkBלBʚ&{,BAldD$&0?]cQ[f/+)*Y#4X= `0VCEft%)jRWok{ulWgo_ tKTL#kX3{m!;8uI%ɣ9SOBOډҼ$`%SbAT>uoud m@wcWy?{iz3;f7oz]{1;Z4/@H K۫l^5#4{+3!]IG>[= \VbTa]%qSJ!2a@Q-+Y; >/SE.TʜqL٥#g!#8:4]`YLW]Ad`pYD7pMضӷNTo {0#!ЂOBC/֕r)4"Qkkce-/ni=L8NC,T/CJ4>g7u揩zm6]pO*5r{73#*~iYlzUea\¾G[e縚:(IFY]0n)SxrH[!DswY[tn NRH hM08PU9$ f/A;sb̴D[ UsX~40km=&׷„(;L/Q&3l9.<3vmHNSJ@Xf%6HO@Cn k| (xѷ4ƅ mQ<*Pڊ,ɥPPO(*)`nɷ!hE{:'` ;PfDӊçZjγ\!sc,j듿8{0aۆƯ\J^cӭKҍO~!w kpZs4u̾m"{P++➝lY^]eM6c{).{z rk,G5XRNs%r.t /M퇜E ,+]LFXZ 8 Fy_9V;e=G]2"VKLmܥƕ IS4šά9Yz(R.ӪhnC?,ahHj&.^U9jH4(2KXE!D /`Oܛx hrXx9LK]Z&نUаDmHe C4I86(uo J+]퍶.ITGRR$A C&q2 tnC-ҴEH3%U2:D3AAۃ(z{R͞kp:KCq"pb82!ʻܨ(9Ŀ=ٿ,%`m6\-YrM'$`t,Fo]%t~ճPLwkv$r(k=Fo! J؇GC w,ibOu*\]Uq8%9o}~˯ІGJ iX#u'tDO xQd "M.%R:8iDb95Ln:| ] 6P"ӡXoHY4&̃ˇlvKfA\AU@3}PdGuҫJl ւ݃S^KXDl+Zv|+=<v_@Qh١Lų;o΍ =AZLꇀ1"C'( /! (TBjaܹ2؅w#Ns!Qp.FCY{J[X1\M@fQ2ՁM \RY [l&ŋpHus*WBô W?Lgoo^=wƬ?|;ڥL(,1H6.sM0*gdCYO4Ө=Rx=M|ךnO2iw0C{z:.~·Moݨ/&׷wu M`|#|_&TOn.m MkIJfK"hڭܾݨՙEKrV0آU`DGlKG(3/gn,@o6})y\ULJ9=o$}$Ϣﲚ!rlB/RP4rT6@39dx U ,IKD<^@^"KI~DY& #vOf5^-Ǿ7&!Gr@M黆DroQHM"ul4}^sy?L " y z$23ogW#Mn}ĸ{]}'XүQxJi5bTd cp=#njJSEj '8{ ?W:9w4d6S+Ђn g?*$uM(RM#5+;8Dgy0\?U Zv?쨒bzhdz[M̓xVzqyq{I˙uU8zwvΤ#Ҥ@ē.%&}oo8,1zjyN)D=6\_F}; %rTk%34ܟ7-L(}`bn=t)eylV7 /3A݃>(p^FD n8-\ێi`,("=<b!h.(6 :u4dGƂ7NCWGt Õߛ"mR Iq"DiW-Ӫ|~hxm.o:vgduZlo7ɻj/(dCxm O&0wU:$~SK, .K+oUt1TMӌ&?zKֹkjfO(< =?K/.>CFPkZ{ڮ)vWn\x{Z]խqqRqܪ.2n.LUU6VIKU0%GF섈 زiϬlLJp{w,@ bNyK]F*M4ۗZKȮOcOj3[yZ4dYPT0!xGh)^A?3|7Iωh45y,p.7ӽ2[)Vtꁝ;]N-5$$NΞtOot{:F(B$ J~Ie V'NU l4mKnwh誃~i}]4~&a&neO&[Ïfjx"EK__Άkzs^yYcnwmVr3B񆹱535EdulGt:q/|p `m0h6nl(%b&'.}6bRihws9yOuؾaɔ0)MHڔj}-,_L++0!5ܺzv:yB ! 8IZB3+>H! CfdN-qg$掓-X2v5(5w %_ t׷S[ -~ $ɀd*؝Z,هڻSh J6byi(+Kt>QeE !k.OU39ɨ'+(-] 5zIB䁢",CnYlɈ΢/k:P62oB\WtN`BMJ.xxp}Ѫ3La1zeue[ kFɼ{GԕR\nhmr̩W5ɒJm=7N`*"VvO\c\X/?%/f: LR⠔͕sR6# 9Axl@ev˧Tg7(q[wO>7Qרr.)eS\z܋udwkŨ+$[?BvIϓf9-6nh^rt6޹ZmEs#з5nw.gIH_^FA"(<*vzB|Ji%ŖnׅSꍓPw3ց^و xwEub ^ϡ8LRy$ͷQdٕ4avYA}PNҾ&r.  ?Jtۺr|n#" Ҩw+g{,.3?Vf?Tx }bk/xN3҅*[$t !(wu*݋[Zl9 )S@sw!vW~=elrGx4t>W칢͡qG=οvao56|ΉR>o.;QMzj:/&+DWexrd3ԡGϗؒ9Du橕'B xFn?|oiƁùRGJh[;l,;z]׵8~mtqA 2Dz)]}cMnw[0ekb1=gDzaUlQ\=;~cx:Ew5$QQE*bat3U3 T\XW_0MzdZ"2=t`;9SR{3J*+2.ϊ1PDYZJ%S0vR#8$!)BxqzF{Ƶ67.#n,҇ɒŬ؀G'PcXE8,k+1ئL I͏a N_#QcAdq1 bNyJF iDBBQ maAl m2Rrk[7[B߀-42;LpndQH+(4{V_~SJit[PPqd?v91^a3D/o{ȥ3B`Roo~|`yZAl"һT[5z-$틓f~^LĽRq4szk./zLD Lm=}+G(qa9h\t]`nJpDVn;]F,%UgToj 77 ?uoTe?YfghM؜koFnܧu4/0JmPLFC˚leV}[yBEvHnkKEB`xL}/ۂG5`ۀvz#g ¼WM*!ub4}V4 @qꊸo@Uw6Xpmj^+)cލn#l.qUpNA4> M>uΡ|Nd>C1 zL- AeSM? aP^GK9H.#ػ̦<8\SOg*K [Є e6VJ=Y?qQ!FZ=ɩ߅b)ݿ( )jH3YOd "6>#y-ٴ`X\tt9P7y+o ʍqevӧcr[/e"}kKBNǙZBB;[GoMEIAmWLEFlh+d?|)ɧz{5uZWna8 ߍ^Vz!D\^so^6,|Ldշ+1N¤Mw[]\^VdaeyBa:p粯s%c\[N/:F# ![Lq17}dn oV7AނFTJp@>H$C#)%~tG78}^vY@^ 3ZýOe_܃T@_45,:Dbi]cPj!tlp:phV/=Ή[.z(\ǭ`R*4tN?zեDX:JͯAa͠Oхɥb2o֓l6 .wm؝TtEe_͈5 %m¡$(?+As?=Rqʞc(6 lMƱ_J]|_tVAZ1VX Ǫξx ڠ5*J2$Jʂׁ*mZ b ,g/I(lFlnjsj?YD_ZdA$\b}pe)QY-pD&*dS*4U.@BsŁ%QocKR׀ɨٗ Zt֮5M^ZݰqT, hLv;ǚH2Cot\&n\WU1 jp9)hGb!4G5ЩCn͡m$Y G^tAVF*ft&e5eDGp-ac|2qy WPw oGfrcQ.ap.~͌{ 0*] Сgau6>2q,SJG@(#B>U1C@v:RZYټ^S3ef#߶d%rbD ͫ3"ҒBJK "8fjNw5k$q\yfluYsfqzf=ӓi>iJǂHl|cdZ*/Nd7t\3 x^|-Y"`z;uS=IUj|ܴgY?/& {d"3)KhIصq:Ac!\{77˹$I}k#1T4&gw5ߜ'vc.YY(R1ˏ!sY6餲R)v+ 0IdE,Y z_^:/i2@*UԫJc#3Ϻ[΅m`kČuy^d%e30:b[#xTG-hVI1KrVlEXI2*jBkPFG^7Թ`΀ F E -ܵC_xw<gUC C8|<@@+`2ޢ3];Q6 `ʒ~{+4A!X_<28:X7Wd-Z{*,n&7}(0ۡ+P"x Cx%+KdSX*foTR!(Rݍ_N m1_z+$0RA~az*l(Q51Ƃhpa@8 I|j+EHP%hxrR@ rؾд=իh:H3tKybEyokfP`L* h3+<VNEZМlg'z+> 8 P*C_"^D8 =DǾk7epB|[ ^pDB^GV<̌fój@:-sb3!Oaꭑhlx^vZt9ˡ"50<`x(h#!:NRrt7Tfc`/'S򚾺/ϱU@ @t&-{݄&HNE]Xt; TYeU7ŁPj>í^ ?wݸ|FSF:ji t .=ɟiϞӷo{LQc'E$X#@{|θx;xp@k4TUG/JmRPʕzcyo<}co+u ྲྀj}z/%vxRt*)Y(@b5LRɬQ%Ba"4CLB Z*-ַ?|wOMvQ@%-9pBLd&PE3h rs.c}+BbpE6@gOS36"V\ڲշf)&UB\LbKl*{j7KNl_b0ڿ[D(5*,07mu>6$4Q *_H[P=.x4uw7{qB$U(NS nPe+g- (֓ųJe!V,ҫ81)& {?&b eP2qAg{`vL:hvG6g^ *J[·Wn[)f'@7M1Y0%rE ʫ؍Yvlzۂ8磋/K,}7#JFZ$t5(+mnt+ªA_tEM J{ǻ֑jkSerXp^LBM%\d3RgNOj!xҕh TT$kԈHi҂STUጆ"K CXsl-E+DST+h]޺0=po{BrY[cN e1 ~`S6x]6s&Wx9L hhNL)Q<`7:ɑU E+4qAż1 E : R>VD*Pg),j_XoWWl$0y3ZНcONՆ刉\б o-΢i22ixljlj$< `E޽2_r/{./=]y~g'^OUl')x$&qvykbY}-m/_{{1 Y jtotZ;EƣL"6Og˻Y#c,tHez#XLц6lCPifd$E"ϗ/e P58JCAȗO9m[?>%14&ӈ?5yX7WҙxtU8>+Dq!K<=lۅtjC_o+_\81-% & 򂆔V*B?I NLTcDgcTYVud Oe1*"O:I5y(idJ`b, જV UAQ8ti_)o,QԳq|i濟yj!qP:2Ti6lJ%$ymp:jN҂IPD锨!_T0ѹR)XZ)[69rMuŸ; }S/jS-ĵ-RD[,Ё `8{|Hw5* lezTq"E`߃f~AT=4rPc,̠z?4zWjԚ֍EI46NgB)#Idă;ppeB;7a T*-Ș3 ;PL\e9q-2ί/oqNjDοsHUf&Cr:yAvU8S!2ZE瞶29Qgf:lL3v;SbSod / e×GMwS4)U~*tV,"Qi*ŪHEU*\eR1ɕe6S9T"/A*!UTFr atZS2y Vb7l۶uvg%;I:YV6Lܼ)TP=r16~ؽeп65Ҽl2WjI0Y:FiJd58á6M:I,2V\JXnL"Eqe@C(1u%iujː\mA097V@*d0UVgȦa 4584Oh[ >ރZ_ G%HXāXVƀ5N\D-'8 -x &Hԍ&-b~=IQK}^h0$aj_wѡG3Hm ÀŶ q(-08 mۖgSD:# OJ*" 42R8FI1" zFWiC2c#(Z3f hkDHѠ[;#Z7$I͇i߻~î=;wܵkIS Z vDa޺'R,H8%Q^G:+b]-#]2%Qh$ߴjɭ?l7|(;M$A JVaԐL+G*( ѫEfx܃Hp:Q52*QiE(P%+Xt$iAH:Zc$H=eh 2E TGWﺞM{ADy-&EEV[T@S00/Hy|9z?^'6떗rвIB.tYp(}pʱƧ=}ܠ4D>vgbPb{!1u2,?Bg7@IEpg=S!{U !d@ ,y{t \Էz.]Շv)/Q!%rA0k>~n)5qm,[@Y/ ^#fޅ2ؾYPIbN㻷?~ޝ'% 'O"Պ$(E%jۭz4v{ gM-/F4 #Qbq6JUB#<ۑtwt8ػ˚r^A6]&;ԮOU#X|;;{;FӚ+ t[(RYǘuǬҙQI[emYИ|ǢeIE(L(8ޗ2&d! 1$$HCQ)уe 8P*hY߬o'@\cPވ+䈑#0=ڍ(]\:데j 4Tfcw뜾%4C6kOԢ3@bbңp얽ه瀮_vnrmӓ/VuQubƪ&EC@)n +\[QE=KwnF[_@q[h!a_*K2Dq^fa+T4/*՝uՎQ^0xf8j֣tSXomaM`Y CD⭎}nųY8%x]Qt}<6 K>zAihjBXjFX$WgGP˶ݦz# 1E4&ym "/ʕJynr,89v׽x"¼\ P 93#rdd%dƢɢ,J2d$yU0:X޼㵃/_xJ%Lq{i,t&%'aU5PLbj| t9:Nbj ^_4 Q'< j/aybXN,_w+ qMdP_TLCw $N0phZzʙ!}R)g><9 %mZa'ˠFYpq5:@F`yz@e٢-\ 꺠1ڌR{+QR2!ΏݏM}_~/up!h#(Yx0Uˁ.X5,w$&a)Ș {x_}o<nk*˰QDĩYĭb{P8;E솯z4\M{2ZX'zj{#H,}[탺\OlJgtN~ uexk2>{Y,.? G|_5բ&Tl6v?,Y _+2u5ۉ'VQh(h &]i=_M15LC3>wY_L~ҊQDJg2n di^:xYB*N fvvTx]!XJMb; ׅKj~ Yw`} U&luvSzDmE,<`Z]M;[TTr&mLvj H)xVB\,\@7JhU#eӪ݃A*0a`Xlx>ҽ8r->rjZj@ZPhz@^wJiQɣ<Y$g"VoEAb 'H3\Kd=y@E8Һ|3ְ> 'PQ3R>zSi~Ƿ=tn_l w>0=U|s+z=w}Qĵ&[%A6C"G(Mz#gNmoP  bE{}GH_] 6Bae.IG5|_7\|/u9~oۈ[zSڽ ß>?($T2!4cÙw&i,q( ;@O8hXF!%$Z@|_+iua*KѰDѬY=5 hBE\Ⱥ;^ e y{Q.(fCr#*#9KX̢Rߓ\P9oanxy("s 6jr+ɰ[@`3P/%6@oHFD0Bsgd/E4iR9ǧ{ Vw1(_ӵNִN?4}88߽~y~⬠spzkɦE)he.`R5WY':R1*R67"$+ qb.\r \^ٵeHFo)H,-g-puQ\䉇07Z, ʅn)?r]%Md&ijr&&Tpżt)dUz4ra1b2+dlvJʲՅbt4H`ij hh!4-W Q s SY>Ot`sPT ?L;nW__#[jނJElJ ^) |'k>kgiOd">jȩXYe95:Z|Hgr䅋ǎ4*4"QcY+'LT~M_g@PB%C=TqDNH|kphhFm>s3V'IHX$CޣXͣsz?Qhr1lߘ^D$eED6>pFLXÁC Hp4Q*AV%Q4H q+Si@ni4>/ LK%,uBf: )( x #x~hX3H\ț:T*3h}oyW|Wݿy7373_V@>P.WoIgJWoLy8JBi,& 23:f 'noZ,*k4ͭJ%SQ_@i9w91pBTRqcG [5amPI񔸳KcHK,6A6N% F_$.?fy*%di&Np)S , 5f=X-hV‘CHQEvp9fUYy)I YضvoƁYH3(u  bВ(JDۿFJx3Ewc,գJn4VB9qH/02wpmp SHK:I`1#zNyb T.88d b* ̓F ( E[y|˰uMp61`=ݚ)\lynBQ f …Hs+h{#h.rJQ.ZI0iXU cV܏Nh떖X*% &ZŖkZ|ջ`yL2Bsyp&Wk-j2yoZe}Hպ (}@TNdt9=7W5.y,:sm=nvmmj^S7s(4{JrC+U&[$[Mѡ"mVTQׯ8 K(1{ذO FI]h˝ Y&%"IOZ-yF(U ȮUJ9qIBqv6 3E|*Z(ΠS :ރZ٧Pl/Z/yY ]>փ `6`~/v*x) И@)7ȉ />}e=^C:@UO'b|}iL\*8A2 뉏_&zKwͷO:zi雠 kVψ:)$gs]A*,/}\+3E(6y$h++jRiXd9 Wb&{Rj_ڨ.odj~->=:3HJ Fdž*(1罃 ɋXs7Cŕ.-RξK5έ s[6B񑔻֖ 0L^k^cm֧3vٕ,fZE_+(=G`ah=^8__kP^0|V2";DN\uɘ.˰m;Ȝ ߦ} 6}ȷ_.fihP*zYm;:6Z1$ HB!xs+f{4A3b E:PdϿaCƻչ-:{.:eƉ)f##!1ǩO'Źյs㹾.(G5W *E0ߩ]Hg}]⟀JqQqrhi4Xlċ޻/iG͛kӻޤIa6LsmMk*c:-U%l,g~><)kY$/źF<K%ˬclZ\SaQyK7?>4tI[rژ,3[Xxr8غlH%g.g 4v$d|08)xrho,V+5czq쳥BNg^[m!`۷rS7WYMUìU2Bcwq2WJlHEeڌ:ج%SU);zI[svSq]|67 MGEgȓjI@|@*>| 8K!`e5}qX!'K'aEӧyI ILNzUP4)i>rٛ8Er[שD;<Cj5ԵjdskM8XTa~jǻU$e J4Xm4mXzU;7VצaI\Tb[@ngF)BPrfQ]ѴV*iZf_%K~Ź`F8GL1{rVrr4ᵺӪkIΉ͗N!5ܱtc}- ځqȾ2TTH\n&׻+ӎ (WZ4J8}Jl}+^BRF82sݷTwbfQ^:* :> 7KퟂSҩ]bՏ]SˇzaEgZbL)U~3dҌQ}26%CU~@J,i6| -Jl?|ϖɡlc"pqo;P(F#jrܹmP:#R6]X=6}n9z|\nn-s/(+GSP=2U :*6r'$6HaJ=" W!k (gVѡ t[clX wxj{jܼmm3t"8[ Sijљ8?uIЩb6}RVMs˛O/+1 P\޼BڡzOs`33ʈt;?^ki^L|u4M~odW;o}b8J!'m)Z@\E]\Wb|+9ƜO1- j)_[[2+hMplٯ-!Q:Y۩-f27_e VhZESrὗ+^\Rb4>D ]pxm?'g4_n?Fj[4Jxk\ꪶB^T$u.5I (v ՠ֗EzxcCjw{*=;gCWZYL<'~{wڡy]PGw)y77j`hU_:~usŖObb\uG5h%Rh@+Y!'bAoWmf? jO~-O=lབQD2KBЕP+l% CEDr 51P9~Ia~ŵPcLRJa>-*d1m)N]1ckt&~sbe S?5.5zpˠGm$Y(G $\{Q(ŘjMboyi`J%$LF?%!& }!!;ЍlK͕pA)"6{Tmiֈ Խ Zb9#Dg l?4֖AaZZ./㗰Cغ,=WC{p2wSptZa :h' *l fJ9{ؗ㯾"^ʠ1v&먩V W+ ԶBȢGuIfA?b2.JԇiVH-DVko$:6>oI4wwSgo=JJ5Uo*rE &5750W!{nJo#uߞٳ~B< :5cc=ڥ߼n[߷AId,7_R8 ] mF_VݾZyҵM]X*(=v\ k|"}s{w5st67Lf]<( D2;1jی`Ѥ3Tؼۃeaن<^ t". $k˭-K9"m24Z f+}hUib2׈:ftpގجc5h,Q$.ƨt"ڊDi ƌ 󄖦g/<>q,Cf6R *L" dmdWd.=Rq3{i@V4֡.(c8z0%c!izuਸ਼eUAz\ j8Wg?{M<5i & 52&(m82fpv< Z0 Ϩ&1vozUVS{ xٳD:w̛IrDǛzyop'.T8Aݳ{-uw3O&3>9RMeJ n8h 0zhv]_^T$imQn2hw,.OΞb Sߚg:{?l6Tƨv6nӫTE1K-g#h ۑ9 NGTn͐ IN|T"׊QG@r<.tl,Ttd(2KmŸ$l~|J7%yܽZ^KUūPĸ =1.O2C8?S(#"2T ӥ2S,a_hkgqdA) Hі^mGQR:XQ-uؔ̀T"꺄Kya3hU嬢?Z8GL6$S@NL~v f#a5(D[{]C8WGpMR0V @ "jai_t$<ťRaQ9")(p&/2,R* VB0P-.3ili[~Wx=Yugu~¥Cꪘ/r<"^yZz /…׳' :1Tb%Ҫ zAؘ,uJQ\ɪ5֨(r[Io:R.W\5_h)eie&z+?6UN~pi!IUJ(=Uմ %uH(2 {gh{6 yv{/WIJ{،TdWx {HY&ek ]P<պ幟EjlḐ68 _D1]xcdӰl*eUkCw3?]FxC[$ru@}:?q5Uqo}:mL?c$lCyrVJXJonzCYQ%\T2[ %-D|1wwlRW=NzƬ+85-(L8*օSVtfE>յ* Pv2lZwy)\Z(In cs'Nj0RxZlX'PW޵2LsB yF k'kq}"a4-y)(ym̬Hͨj-K-Pu1T L]HcG"XdmhH$'Q>8D}aR^ U< HjDRC2,5lb8jbбH!_Gp߁X. +߀?`duĪ@p7C:N΀/]JQop"ȇ?F C4 f񅦉'~6rM$s@"ғWR%k]T,6M\e¥sȈ[*k,خ^*Y)=huUEPl N(VgP,;,՟TIIAz38(=;MjS/7ʡWVݷW\J4tmae=exxЇ!Qdmd#Ωф@+͖B9 c;^=g.+գz$D$wB00龜~Fg'PE jwn`z\9#e4'cOBl ъISNDiqnP)#*^H`&q^"nvI(\FSׇ)RLvŶэwdVL:3NjY@ݥ5z}yTd5uXA,9$ks 49^ 56U.;R*A2Uq /5,+ݱ3NdKO=rw5~=]Y8k)|XY٥-{#ٜ7C%(dXd\UI?NPI:7'jmdIy/^ņZ2_{&c~hxl0lkK|$v`C9NlC`&,4YUo/Y[*ȭ[x)Z:wKTQBo2JLJHn|RI)}bN+-ۙɀKӴ, H9ˆrzN ><~Stl\Oz0鐄,-dI36L)ZD@Tu|;uI$;xތ)5:|-M[CR³[ۦs _x ;$[9pQer: \H>i#j:ao 4,QaTI2x]h!XLA: ksH"ڍ- 8=XIdk3(xp)]N]"ł@ȪSwv.ˢYF(\t:Qp\.bSj)YsYM/Xňlt.w.ZFں8R:\%&/޵o]smN/(Oò} k}8YNQYOGE$c{݅M} [¡/":K)ı[vl}Mz [MrD+7;{  wm ù-)ט0LƷ7#hpMܱ!DRI B;O+$wsS_%1:MmkgcB" 2gUvpoːY*q%Rш (c祜u{vyUI5jSSG VDFdhNE]}Z(F'מ 1b-l |KN|*_uC4݇LzaC#w5R~^4q6 @B^`; .*P0r3#6XqRcl'՜$jQ~t)0Q*h*ڑuH=e/Y9PiI,uEG :ҔIaic^*eveeӬؘ !Sq^e2̮udA *R.ϛ~ً?Wajy]yqb4]_W}z.YLF +-Vup=^J+=~|@VjdɆ+ɄT_xY MOyx&p- af` rwL^;}I-]Ǘ|! "l:5sܔ9 8+9i<&dHIbW#rGwxqGx3O._^'K*jz8[4^ab|bs0IJ"G z8x'>ꠕ15\y)vX^ʼn(lNos2TWBtG؂ƧPfξGo_~u%$:jhk+:Jujx jrx:85Fu щã(yrFkF UK\c꿄`vmLbܷP! 05 fDpj҃dX?|u(꺛Vl9s!(dڪk J,]my^3*;m^5Wfҿ(lbv*jKg44zV#D0.y8k*zG箵hK3?K{W?涩5p;6f^FFXKŖ1HR$g~q6ͯtmKb W\l&rgM4`1O+=\,ޣn^ 7 ^?FY1Ԩr)մƈx(E 6V i.fb vhe*+uoSXR,[94h4P\K:[Q)Hޏ*<ШN3v'9.Ybbr5N8\r֯~#KFLvCܖ,?P[&wU (Tb4QyAW!ԃi+L1jvaP@ t֪gJaP mޏo|ȿF$䰨 7ܵ洸'Zx\3o/V@%!jΗ؀\2,5(7EUI.x$w&:WC&MFLUG J%l0]5nyB0U.R_/傤hF~c-_֮/*R;|b}EQT,xҟ*z?׏=8:7vվ9_t]ob*D* kDE(J+K~B2 EJ)k~M/0>~edQ+w⡽ۦk{O&sܬ~Ogʑ,LN9BiG;b9U/3a/Wz}^eΤخf, VQ(I6(`N:6d̐<50*մK.$VTӅ X* yacʑ7Akd}w@Ӹ._hrXM$^ |g0!@(CpRD bJ-C)=(bO;IL_Wa'H:PCr eK%rAA67*:kZ#W%Y aB114s3C#^)Im;~a&/ӊ;)Mf.\1~HJ|X=HԀƍ..\ ͽoƫQ_(Wپ. Opnm8kwvAS 'ӡDhr+l&TpS(I[w2ɒQe"ˊ- 4-Ko~wtn,S:sIxz=]P}-GUX eTW*&W`t4x~S:x\UmwwQ މ8Zoj8YƠW#o^Z_^k\*\:f7B|0[u.]so+gԚ.}"O8j Ţ@I1 Aي2 9bTgKt]3dEŦCX 4;W*x&/GױR*و@xț3!I`!3+䎏VTpY$&q01d1[h'y}:װP2/I'<8jPj:D[ kF|gga٢TB* ].`MZQQnc WR›vq17n/B\ɀÅ4 Hjd%`RLZe.?Y[ɛ >>\R|Ŋk p\Rb)vj"D`K[,l^I52jUu~{mߝnh o: SWҖ;vOn>@{zic`{3֭睂KQKF|Ohs/mW7n9$H$eI-PYCY* GHsXtUj_fŝ`u­˪j85qMc[U 5L:wMkikem'W.՛Nסhx0OT+@WPbU6X\ڔ)΅I( XcFN,D}9 EÅR1 h@21=JdDcīB "gy5lڦkԐ<uO..>|n8] ([MVJD /+*nStd/шh#LHr^"O,*"l/?s+iY9?aV rUHiӉ^=:I%5.WrPe*"!gzC/7p.xjG/ϸBZ/6[Zٿ<%+f{=IJ ʾ=;rztojwoK|p%9gݍܲ#u %ZפSQbV4g,|_ag{稪KZg/ޕIq* BW[75y7oW!.at:h4nuɍbC.V:qAwRl&GgG=1 #} 5^<&,%p.zR"d0IOi,~qʫ{θ]h)nmN*B,5ua] cUΘk.bp$T2t3ޅAVfڢ=s1syRB^3tKs?`v+gVx~mlr?5[mɩ-f?sHҪZf#Vsuk= 3垑Rvea%vs<䫆2wKN}#v6WD<Δ_g[Y |X QU gZ5t{:oD{-_7eeڬJ]N@hq ׷r$gR8(*y|-9)!5ƳX3:IG5z*"%"ʪH|yxc"ul43X)/Usٚ^ѫyYĖ+5soݻN\{22L>oyÔYt8ͳztwccDS|r⥛*kxH'|4vRB;/Է!%EokB>As/@K5[7M=1v؍Pם܂^t_á2OP_KaU~`XoNJb5*oy $ =' 6Q2qk U ֯76`xأ;\ԅu;1 _ٻRY<QfZ \񶺆k g5N[(w3Ӥ"\\S35=2K7> †CJ=ky}/]L&l;G}?ʢ>.QSdz\~i<2q(#VƥL\2;"JO S'w25c:afYqôDrbڻg[>Ooh Y *㠫fV(.TVtKGp5Ys):QBurN."iq"VںR8tԥB~l6Itۓ}pϘ'=Z׬RzfeuY9b펻"W&6Σp}&\Hj sڋ-&nݡA8FMT U1{{o`690sgWg/̗#FϏ5˦E 퉝}Z֢Mƚc+Eu 7̰V ) ə, Oz, EmuzJ_3{moi%MQ􏘖|mO?apq`z`~>w㋧;̶wYGn}vpбXn^`x%dK[/3hs5pnwv\.ki$R /'Ts{Ï=]XWy>=j(dqn']Yeъ=JE &\~-Pfic4bbje(ǙR!Lto^V〻m%Ģpsp u'dUj`}l8,֨M?LT)50Œ^.iLeօ OV8@*н~xJ;<-MMџ=~|nsڬ&3QE7Z<[[}ӺGIo\^hjp^hH 9԰ UL!-]{njֺk~'.6K0UǢP0ygKwFOϏϝdsUb֖:_0}lj\Jq$ d -x<-ҨH6+:$$#A$}saw"ҵr'!'rUk뗒M8bp6w}eQ%:B=`s{{Uup8p'>G5}1pQ%:Մ6k}pp]T׉*E\ȣkд+'kKN*$:g?zX *g]rh687!6 7^fKs%km\BG^uyREYp %o[zbK㖝޿n'U+\?hR>tmm˅{?6z<%2*).3]$i>x׮1膮 bbw辍噾XF|ƻ{Xy,*uYHa{hFwa/V9&*Z>5Kr;rף} ZO[a%lvAB$`JXD Ạ{cCs4}U$Q+hs73$.jHUdZ8$̴]+ yFMTCgЇ̂B!dv p*XK *n7u;]⛿Z^x8}neV'3@dTE. CX4ʊש6$N}}QR$ش/g1ssXԡ,|1kǰT)[;;y_9xِJZ^̕tjK-DG+bpCE?%};8.=9i>}GgǶA_0uڵP!e|ȯ`2݌Zm\8VUM}?5-m=珟ϕSDET6O&a2z} ..+峵eJf5-Cu`ôZ;00EPc(Q4)4-k\vB,` DL[cWgeΤSzd|M0Zֳu}L*Iw.-QFAiܪ=pȇZV7O%3`*6?*S)!Mu.NScvI4ק N nL,:)vj݁h"[SOk8GM>]HpEN7jzyޡ{_kAg^_=?C;𭌯w6~ 7j*đoe &([Bs}:&:xd'N.DE~ԉF.[-h9Ӓ$ qgg_ЍB)  |XHgpKD\XDb]wp\<,/gMu۷cO?Owq>Pe;O\_- h߻>>U{}e/{{K/|?o[{ y:XƖe (@O*H@ԝa46v<3O}bo{6=53%Bm8Liz'μii9Iݢ˹r_=SWR4Ĕ,_sbж{-fj+:7D9y\?.Ě3'Do&,/5u5 ]|%=^?Q7!FS@QpE=tղTI!Mv6z%>eTx^ʙ=f* 3u6Zv% 4C<~kҥ%j钕;MdXvOBJioF.KV?L xy_G *P-=CR0M*" - ?vvv?f-PsKٍJ`}pˁZp0w'_, Wk33ii`Kմ%?)y5DCߡul:|;Lo PD⚪@f 7ЮmQhP_ۯUKۣ y(6,ΠF 0*B8NϹPBveV{CB]&,Cp'Ov;)qVtͰ鲪욢mg}{ݻ ?>?5{ky4JW[l}{C@$hOoͲ&pʅLЗf@ò9Eqr}XmCCaY6J Ρۘ o-)wb>&Iֳ_m?Y֎]<\n O!+rz$4MdT}'[`kKBT3:#f2LPvRl&[.PHI+L#0(-[{o72=R ָ u1KKaؘFp8aV8jmQR={QK^~k-O8 By(wsګ9roR~oA_#qsm\ẕH?jKoҝ>v45;+kg?׮x<8w-!^n`|9n$XoIuiszVLBoLfT;yXڔBnx"BW+K+i>2PS{{ӎ'!pèތO·"Mtrjl_1}K #I"4Ymu\@g}NWKW|Lp4Wu1w w[•)̍Z´-x<.'VjuEu\N"ź*ZM&(d84S"ޕ䪪Y*+UD(B6`o("AXɷFX\č'V| Il9/~j%Gv⭣{_ޢ= g_riZѻ6sjwu-:m#tKlU48$lPZC>Hyc9X~m8+nԓY?&X;eՋK_2pQEӻCV}'b䃏Y 9\5iXT µK؈=ɛeIߢTLwm.C[6Rz*XZ&nGX9' qs/Ph+7vm.+yhW"g̞}VC8jZN56yV]1}/.'4}%?U1Ĺ_Bi^9 S/Qେ*ULdհu]f݌*|q TVa N+g!0$yE׭@m3g#-U tmPt$$E(J*UY'dYL]UBG&ܫVa):)R5E*FveQqMٺYې٥rMn!`-'"ŽGcjbWDTYpecn2?V r(J\)$Fj_3AQ64 *O9 xQTK[λBU,)r%!yTam3AԒ˘Yo>O_Z]ѭ SXҟAڹt@WrGQ<14Qv 0NR \+!~'jFB0޷e)<ڇ8hc TqP& KH[^WVKÔ+w9 ۻ냋;hًq/sERL'_6ZqV Ę ։8q[DlfU*Hji(F`RHYSSx+W{\u.g \+"8p ~ B%G<R"_C`Mlqh+12@:ϧ2^0{R:yhoYXmZȷt5/p`$FCQC,jĬX]^5Zc\lBX\`jɉcPܨvw`3bߜUB9Ez+y/?Dg@_~Ӑ"sz]Ή9Y4)\YB|u4*bhq! rF@_Ì d<*jlo5+}C[E1{y+=lx VWj%#}3ն~m} aIl/;uި/Z+$*VgΥV0`L~ }'_xW~x]«l qv|G+(Csp(R6o?fmUʒ>Qي*[ZH(&>&Rvax{  -ie*v*G]+W*kZ&f*tMV9.WT¯JRMUŴ,$ESjJDϸҵ [nZ~GЁ؂oKthYcr[\gwDč.dJk'W;WhT%3qĞ]syNnUt]4!׈QUw=~"=gL6lY,K14M [K6/[' e=9h\gx\X'\bi$J(4>*(JjΆMo˯]ɬ`2Ek',&o1W4VPNR(2Xdv}I+%)EZTMu8٦bE½i'11k!ՠ!L1%SKۙ}zK5LjygЫ߆mc8fhqbA]Od]ҡzabLpq9Oo}>%qdP=h *z98{_YHgL%eP& Urp.!s5*W#r-ZQx2 Գ?Ɯ Q/Lwԛۨz emqˎ+?z!m{nfuL My8<ѿ㯿M[;Ƶ$nCI3)4OW[5B}$XSp)n- ʫ>̭r% ]}3`RW 0rrGkƱg R`,mҥ}5b) vx{r4,ͳ4c剽nF<+<+.?0c#c.9-n5RƱ&n u~AXe{a;mW!7 "’ɺ#(s*X/Q}9h-GJ!eC ut8k.y]|%͕0rt^] ֆΣkM;FG!{~fb!F=桢n" bfm|څ'^LNU_ m"9

0O=+ECӨ/_Fnh}p{^C;`i]j8/X[SW}CݼRHgRZ+,CrkbXkˮd\>}ByO+ڸ$D.QtjFC*}-%zC v e! _ t9``ԕZ;b Sg>*U^オbۂ U ?ZCnO!j}"VuL>K԰= 68B Rۥl Q@Y#ȧH'a'uCH:M^g@IfRM!fy{0,-luݷ9΀Eup׏˯9yI؞ ^[\ldP,RSuPL%tSKٜ2"\\*'Zra8Fk%NaL  ݱ/pT^wC6;imR"IyܸVC.j^k,dQ.37/'Z^XзZuv`B8$^+33Jh/;WHxׇŐXg߽8 W͐z?1K(?TJ{}BE u]hBipG)swgc3̥5Ǒ_{o3YhT祮~UH#+X)Q5jWHc:*9wT#S6uH$G.cPOn1$JhÆ%\~ ӀH̒XAh9bOr4gY2

L=p7qx_=iD|+(r#DS|嵓W_wL -)ncK0@?ge'v`s{gs]O^;YQ`k0]I˦ ~6F/^2t53jdRGwSetv*5a4wkW_BR:A7Y-S5hs [jr.U*~4v5.!%Y] Pk!):OvPwڛSKJ]{kR1!ԉBdO qDڻʲ$ۉimF܆j}EY꺊"^75{E}ۋZvȶb{ wG-J aP"qy"(/D96P]^$ReS+Ti'XU }C:DO뭭{XU ,n?b;ouvE-[v@:?0q|1iœweYYQ`2_1YX ?E{gރpCd@Q_aȮBn{:~Y,c°ۉ_'KpJn|'Y WP\\D{>O}p53eaoBYtl$iy<` YcЙ$/AC$CSSV8}1h۠ _}6s۾MsM2zؼ: mX˯וf&.7GwlL&vM=G~_kLNjïDm|J %IdKSBWez#^WVtUv]@XbtKc J¤DX{@!EN`+aHuknI4Uʢ>{]h׃p)2ijU{SJRf3܁?{Yk+] wx(^S̜3C=x@dÏUQ0*@!74y3TX3@nAaֹK1$xuC!@u iѾ}L>lCYZmF UA,p| {^ CoFܜ@\˕Y:܆7P|=8ShM NYƝ;oQ kD@e{ v H@5t -\(nRry[hA쯷 bVV{78Wμ-a0*/}k2|}GN/7}x;4E/R.ݰ؈UT;=*ɚwKd(j RٓCi|dbW$骬Z&$iZ'MY1F$(DxJ`19,^E\,JU%U$dbfhŚf\ai*U2yWAh};G>63,K 鲙MUU'>/tn7VUDeɚ9g&QR+9>kabhjgޢu6o;T@jlμ ?/bF@EޢGv6xO<y;*e-A0<o~gM ;[/o;C\g^!L y[A߄Aw/Cjy! i@hIsKPɶEvPY/Z￀, ! YTsc, (}05=XO0 Öu1[ ꊢ!thI79P]il~߹ggkw}fm:3&sPDBVHZz@GҊJ *ڄ$86cǷ׻{gw4syyQ}zS:yx薩K˂>oΜvZT@7ߍ,/NΑ^<C 8MZ əNN3Mh uQTn:#BYt uw;ʍ" es rP (HeݲBS`yj\,1^E6E8Kݡ OI8Kq[ ȻWv︳mqI y’2- D+pKjj ,ͤk9w$1lgӫKmlgo쭂j_;b2_=&$f_f"76@r'.Ak&q*`W}E|^m=@hw]AN!Y43dur`5oA^Bp`4ŕ9[ w0Ba;i,< eg hKHA78ErlJcɍYϖ5n+Z30wdnZc*=t/)~= P͕?e UCr <,7p$21ܢ;~6q왃bO?D"撮jOI˂Cy5g37j>9-$9-S;#:wEa8eDJζmQ[])b9j 1<8,E<= Wvҭa4rԪMlԖ-G!M:հiI5g H[q~`Kn(XW`VC]im7#ޤ9Mj\XE!$ӆH_1KsKqJj$ӿGL/ُTvL֕&TGj_gVKC@A@9%ۡ*nR8?iكcqhDfEl϶VY?Ý_ XNF`G;= X*b' `PV|qoXST79PLH745Z]+WUb g]f ͘2SHaK+ ?e7܊N}yw.7@v'N]ZyF#-HaP޵BmUTx;m(+g>=ѵe<x;cZk j>7sRGV3z~!+L^̺Ʃ7sMhZ6M% )Y%4ɷ%&i9z61zKsulRfv,,^rL|wn|bQ/V?jʃv⾃d!s^߾iX^K86gK` (fIGޏc$AL% k0; <9̚+\@IwXT2vx2~AKg[[ >B\3 i|}U*ȳk{BԻ7t%_0?yg+JRc%yó׎ٽw#ؕqFOCeq}(DCDuy$a{}y-w{)|(TTc/Gu7mgF$"J$%JdYݲ$8kl;N_lWY-YYH{@{>7sxpxppvfg޽y,VlձO*,܀`BD]  avOM"l,g.YL4~!_T93*fgo`l,3_,F][=N2UXD8|e k}G;qr.}P+<kXͣM}0>HWTѩqMA\PHT>El0~ 3}?kWU=(Wa+$ ڸW:[[b&4;"ͼlPe|UKa_D2Y& >;ZY2 VXt9 \۱wnScoE"$0~gX\*08hmR7&I֖]V(XAE psCZ:`28-#X2ʕEL}ױ KZ;ÎzӃ{]4y@ *G@;:.yZB +mt. vm޾\Z>x77b{G'~qz3pϽ@$9̏o\ڽT_7ɜN vW8 k2{eVVgvCG1=ݴ]Gw^tNX $WQsԅZ eP:ޫi썒˜ۻlV/4 o2yhbvIav֋[n;e^Tn̮YXs:{޹6 5=}Xw&xaioJ5 ]<'q}D*Ua/wwr~^ }흋l'0ɉ1OWo3߆=MK&WN|k8O7cBvz J˂VPS/i ( sP}<`HOkZ`?__GGv4j`QtQ):XϊƪjtJ>aǛMce*"y8nj'n yE4[ Tӕ޳8uEոppωw:L&q*`56Fk>LWq>2|VӠo&2xv;Wr-zŠ8 |Ȅ, ,Y.d󐎡|z`i rqpt <2(w!p} u7=d6;xA[d>a{j;{Ppr-(y~o1 +e= vKÁNJBnlpT#S\HnZ_&Kl "SPA1nP8,$ZSa/#*v}4}z4'R4y"/*|q|Uȣk "Kw\ GUITW4{ fߩ߿EK!Xͪm#zu WE;/(=] 1}f͠wE,jt_Uj][k ;gW U5TE ZJJ։={4Ҋ<I5p5zYn֖ks>+1%ui˰5;&(<*כf.Ӡ[8W.Ms r_~s3/ȡo>g5i(CDﺕ&xqOR.-⽅1*gNQRgÙbHR^Z\TTN/YL35QVcl*< 8hRD< ^ez!_a)cmJ mCljX]n,I#> ZZ ɂɫY1B$RMΎ][D`1&=T-eli`1(lkv# ~L_M][RZNUqldC;U)?U6Ҧ x#{?S`}CZdknp(hLosܯ<ßs浚Z{z>? bU(NIgLJٺ#m7_1}'ulPq,h>uA^OsJ,y3Z|5ڦQ*zR~._Dm;ƈeWXKUimc5`FFQZzF>L͈dY&d:&O\{CY",ubpb fT%ĒRAaZbKJ6[BG@F)^j5#_ b}%Y}K .b D{BbH`=@- ߎ7B oaMD\K$XG$62IH#0ᕷՀ[{e^xCgzF$_Y,%010*>,;qVJ>YA /ԳZ< 1] $yꇢ:rho#:|](9`@w@zJw|H{N2P~BoAPYTb64faS{75sZ!{k3 q& jT9Ufՙ+ 0V86fk%XLG*9m +BQ b `݆Zی> 9],7Alf"D=wc*W9p\X ,. \!@ذ;h_M'h$ed&v*==ɬk}յ򁦶,Az ԧm!&k 6-Ab"kJ,.(91tnimg2#CrΡFoC:nc=^R6ucZ\t>XU )U7$rl;t)ڬYZfL.[|@wi5d,&Mfܸ>5=*fHcQ:R%Ɇ^2:uĴJMNHʬY rT-AdnC5!6r* IӨLDs +z(e0|}=vY{ص?&lTЎ}Z&f^PPRD5MOgw62aV|8s3c6gh}y")TQj:% L8.CtJ:#HS}lGkHbΉ G}$"EJ 81zF8FQn#j zDm'VՓ:HC~ѐ"R` 2c\D ăڈ ,&FDyП TV΢LUj"gh@&Nz֠m ErxM-@S\ḈشE%n8shz6l2 #azBu{I{h;T)ۦ[+:4;m,':& LAZ$060CCb P H 2ruR w ][q,&ZWz\i`zuVdk. xs] 8uӅd`‹68w M-߀ FOqmI L"/AV,T@CIĞPQ?Px(:jԵG{Me`TZK7n$s60k1G; p#VC%$S]hέ'>6|sB*-THC:܈>M _EmX)3cp8ݙ3*< vQ<C)BeH#U"fk+}۸s/x&ٞͭEVJ)3r̥bVkapK0d5Iv#Xq$-MT,um&>wp2Wmfp-#7V-~4py2tҾ=*)f\C ͅy)=};=<|%'&pQȄ]:"dW=Z$/jk''+P5WhZ{@k27yEUh4>U˗v Y@nU%݃gO5Rx->E7I _Ӽ "F!xA0ݣ :jM% $«dY\H d^k|fc=1֨ ]wܪv>O, Yir \=B:p*ѺP$Ba8-ef||~W {yLj<:rM<5[ks$vpF-gkɨp3GuPU( MBD.+*` vwRFVt qԓ6'Yjk $!o@8a@cf'U󵷴s;OvR7,$g\NU䚠$Z׶|XO̖drRjZK80 rvjbq148bQ N0aȭ[]w9 $mǂ5ݓZ3 "\U  m\.RR*"jû & e&Ub{AX\/GCto`DOxIeXC  [Wp=C2y>.tJxd;jeQ-N#LЎ/HɷhhD}Gh >t-mnT*X4T()Ţ)C}iE4v%JqX.1$ΓHy<)&دѮOÍ sI%EzŃDŶVd<+R+Ӣyi&xl tB˪iupIgfGvC5˅E\/hX#jYۭ#?Z4h 6tԆ!QE0 =ʭbQ Qw RA`dFPǾ n 5bO I(eau>M} wo) {,$}X3OPW\ &fl:m*RNe 7Oi5M'ڍ\-ًFuD} >;g CFLnGN;U9r~mVX{nO}[O~mlDl:{%HpZ';F\ܾ_J/Ö~$7⪆ܱZ5u23*gf9)CyJCk?HKO<|o#*$vfLJh0Ύ[m\^>o3ȸ|TȒyc">Wvog U@Ph$f%C<8 T,ɒ^pɆ*rEsyS,nP9kU$c J5WD}.`߃XB'&Q 5K\"200~6=#mPнp%h2Iud%.'wz|CßO7iWoMSc o2Qd/=(۪A\Pv~øvyftP褢ȦVR泿|D},=*(!gi~| |y*ҝ,*F e  Sz}O~6ZM$rS뢨ͦRIDVaȮ.r>ucL ^;7]֞m;l҃j XZt-H렄jňF؟-Y}Zd97rkЮӣj!!465ps4BBXMON#܌W7w?G'Es@M~yuuU c%N3l*Xk$[#`wH&keJUήYNz]%]Ahj&.E mhw;|3A:Dd+dCB Ϩfac'vi4j @lޝvl w7NpA~>WR/"ldPG~EbEV7i 7#,E܏s+_drqIF~&zhL07[vIJ6O bWꉬf\Իp^jkkPlҤ9m  ZN(o#eG#8V SkU^u-ںp*/XngW787l0/W,wETv zu$6Z]b7JP1IFF/{J40T"bl2jR{׿yqfh!qٻGM-Mũ0&>-{aP'# /6z,EWI}͊p3-^ -8 Opb7JB" -=V̓ÝRВg_>tmZsoԥ~~#?Ք4]1Ph6[\VTR& i-5UZ<Tpv]xGms[-](^y?ΨBbiDvdem5r6``j}vbUTuDJms)π=ٳ< 䬷Ωb)֡b\-Diy'|ffGK5F2nls]NWhzKΆF =0h*NvzJ[ݏ߇l168?`VX^MAUQMTꆉBc0zzGX9QP5/Z/^ paYڻMժ1V.˒Jm]lze˴ՔrFlhqd&c1ŴB'Q2@ӧ % PwA![&ԱGIFn+Sxvrr>YH;PDP"Zs7yryfӇӌlS? խKhwWA95У*i2.K65 WΣ>C!q b֩WfN@kQ{qXɤx,@CymB(Zk~+z. nTuA <6a* ",ЦㄬS?XԌZC!h}n5hx&o_ϞAdZ*VY5凿N2ūsc6 6h멉]=񓓯F#M"*O_hR6*KM_ۻ:$LV`F7V.ނyVEc}1iy[l^q΀7o%s;/_[[Fe,ݕ=L2V~T`c% \Xh- Xb(M$ ̣~[G c tf Z2T3 oʕwAB,TeqfnAOpF#Gq>p_sBC%n.*#){dRh5Uh5j/B{[)08ڿ\՛hٕ( KvkCXh 97ɛwOZIA^N89 >A |톖-T?=:2i:wQ-`2oj` ( 6&Mvs=-ƻ-zaժ\0lQc]ww["hD8R{S6? TҲv#U"PĒNVjj0ebhZ%̲dz~I|V k7jߜY>iwBqed~waq\;1,HE__\*{WH()u+~oՈwCwF"F$y\ 2GnzH%Ē$ќdƄl(_QtmR$9yc|=tY75)Cۚg'):6 Zt&սNrdz= [jG}nȗ}C'N;MT%oRwcRyZÜ"Pa;hX.M&d<<}fX ]w;Ta5aپuMH 4%2j)9JK]t Z&[N;q5JrjۖN-8b>c{svɋEEN-l&gA2M'{d0vR8l[~yr šmۀ^M9 -jJСA&Mh'~_ ٱ s_K2_/ۥ˲Y*5.qjPrM9Di^Ml(l!5Y]T%6blS;C*ySVdW; Fwh[Wat^-}c啋,^%v7g'ek%2kUPά{l[뚫E6Mn} Fwb]%AW`m|\C3H~nDFbbhf=8As`׷N.īu1eD-Yfڠ勨R@ {7P$TH: H2ׂ(z+܋J|Uΐ[ [Pb nj\]|crReöF|(eGaL~ i ~?zёAt-G 2r4B4zl;noХ  ?!t f'>9^tfmH:pK 6$֠fV2H,-Az (@y Σb[<ͷ](2N(Avv=dA c{-+Sͤʤ? ]54c0kS dE5"V*vS V4Wxl37nmK/IrO}/2sQG?[1j6uy!Kw/#Vuϳ<0P[^4nLi:l6)K;:I"VBvf4Ǯ6{塣ob\\38Q&7LNިvruhص:^Iej4^H/, nl=ݹx:PܦSvȧ͈͞le@K+jb : gbV#I}䮫7;&L҄DeJ?ulbאJ-rbyuYe6mn)ҡ%Td.NֻVogBy/pr[6N=M֧drqi]iA* k\,(FjL ;ydw3S%-פcsBK K!,}L$5(Aa|ж $CR+U*Z㐺0)tB(gJ,QVOJG-h=hE57lSINr ?uZ'_QF[ga@dc+~lwF VG ӀM3HrKvmGj"2ӡIrfLfg_Gz);X8XyTT ,֖M`-<0S}{7XJ1Za=֗jE`0яC* 9$n;vUnzPRqpP18o.0 jS|jjTAҵ{_- oأ 9}a4DEA3X~ % UkօKYF:=)Ak_qkSMLCҾB~d!MyI}{STROg/6vk~}AS)T %JtPZQW ShX]&.\k|!|p"MNPei=ִ_T?ʿ'jQ؏фhg,|km_$.AˈQb+Za 8U `޵P cJRӦ)nݱSǿ.VbMN7Uᮋ^#+B3_?{jS?ZټZόgh"d[#BPܭzw7{etu>ʝiݗNw~mtʀo'9,#"]]22oϿA|:]ݦ1M5&X_5u.ucw`Mr%4uْV1+I&O ɡ3sKPCɊ.GoYPGZG&mX3=[ٌMȺ4}.{ ~::PF%FHv+*CkLo5/aqX|X:p4z E0 [u ~Њ:1"fEcѩWf* PUo)ZpuDrqI&#}}gnKŅ.!~Ȝ}wf8 ;4` = 6UdJIA&iVè]`+f)!Y,,_KoG?>T%b8~h4EyZEzG-[Ei\UR$.Ű ٛ0)4 BWFj;t]mR<5bȮ 6RkMAX ^#`̐P /Mn k*_}4 &f^B5iVTMtyMyطX*ft"ߔv'Ue!#A!Q$ /ppJjߌZITy\P$v~xpr՞?ܪZ~'JB&]$ty/ݙٝc+ @(Th+\X\b'yqSKŖ˲du 6DwvOC`{+3~7\U.@֭mlvo7Ks=d!ŐIסNeݎh/qM?iA&'TFJq]NBA(to|H#;@cu0Q:oǚϼvh׋NTA<3YE#Q(Sga~r #5w};4V'*csÓȥQ8:Pq?f_=8 pCk7 9!-%m!aƿn-5t#/I[*/\Rxr3`iCjTT(p6hG 1c3 \^}4P76q]zD-bm''O^9]hfIjĀ-06v?vسw$z:ŧ:z{Ҹ>hf%Bo#w_6qU$@ұ;W^gϸL!k[rihv nTQׂ0Sl:9  >nZZhwq3h1Б͐UUO sY^ņLF|~灊tkV{k.8aJMͿ 'F>~~gӖ]g?g-]ezE{3KN%{wNkBܫb՞)߅ N0ᏣG. ;&Ld{ ɮ\|9[ivu̱5WW ʀ$KWOmkg4V ,Am3Eok|Gцѣ`Ib!QY) d1Kj&2\*x 9:,F߯c㯿1x:#7>Ʃ+sTfT/J\Rq $h[']X TPo6/wiOd#P2y͇5kRf)\%wwar2hUVڏ(2"HȀ[}WM̡HX}U J ]R+ `*ǚP, :ojSbnsh ulrIt":N[]vj֬bB8={VWR\1W-y??C"VDdh[A 7ob3b Z;ڲ&e+䱁 41Xf! $/7@4.l{5lpðǼ~SO+u"Μ{n c6r˔ ӕ@3fV% d)>eqVzA<~ݿT'qJ|V v{ϡ_'vQAq Db'1\j>BڑNǿb[43P?n [7G.G嶦m82k@6J!48a~<=pEn'w6[/iil)a,N\]w[$VR`TQH"4lzg7k+?|Fz:vVV@+ƀV]ۜg{:76NUś*2sxͅw¶)q>D)lAOw|-<+ 9Il\OuvVKUul>O Mf^\LhZO!BKӕ]̗"K06Kwth0j?]A[9N{ResΜ\sí ƻN M o<oLA*|.Rˁnd=UQFW|e&6GQQ<8َ>6Ջ,pRuS̓~Jװy(`nyy}Dճ?bnϧZ/,zH"1w d""N/-r| O-o_wCIVKYu`'mwRpξ#T-]W^[9C'1LQvܱvi$Aqxޢ-N@+^+~[M `rk ;j]^ X] =֕+|%:M* $V1]-PM/^zCWyܫF,>:>V^D.`tC@[Ͱi T@ <LÉ]ƳȦG4lI^oF3E*i%dP^¢Ad 0^TE#.?eeI#҄/pŊTe Jx4z}ֶϻ~?FlNUszmHg"GVlM &4; 3l׏tHT O%tf2/'VW<"d)%eϥO+Iŗu#Zv=p#Mz? ىY[^y{Ifu}gَ^>(襡Αt5ry{\+\Xyqak[?M^y3U&Sjێ;phJ4s'wRӕ+?k͇5ejl.āb&5J4!#lbm}g &W\ax&fJqd5م%V2 1]v[9;6|]M6OAFօZv3 ^v-AμE/G>(Kv߮KeONo nծ ċ瀋N$yQilFfw[huefmPi%7JUMWM+EY0)ʟxpRu lPz$o!Mfe5"Wdٚ-zI"Nܒ6,d)nEjYy<Ù4#Gc5 E qDM$>#gWevcܲѤYU_& 1DҜ(wP=g|NXh2~M[au4O68fb!jM5< &Y\C[ī'`; Iݙ NUeMqX"t 9 t:.(nm੫zB L,Q&be&#!`;;C:xb]SR; NIecSocM=^΃п͌Ul LJ&u5޹SJCwsZ\6eĪ;8iG]mD흭T7x|lIx>{}P:?-TO9:/)QEZBvBVI[^J|]4]Cw~D8;j FIQ+W=v[%n$=`F6/w+͏zWZiq!f"_y; R Pt{gޜ]xk  ]]>W-C ƑA]er^ҒpvI(ivHۿx#;MwBlBR1vȁecY3kihDi |p@ϵ+ 6al7Tl6XFDuxyUh(]3cԠ'<~`Lb{ 7rK bױz,P(CJzFg@bM= *no{e = 姿2]25o}nnrմӊ}nܘ=l"̗ Y s)i1 w~jve{Bфr( ݵ,]nE^,j4R+$YxbIDql?j=m'\L܃h6XC xn2ߒ7I<N6dF 1Azg*7#jL3e'viHQj,W66:@)X^Ir^J`[Ulvٵegp?$5oԐي4[C u-oXP;6v4jyєgL7yzfyZ7/[7P7tP!ُXݑWOG|šl>j0l--УP+ѭgϬB4"mwEuȎg%@TWa3RRv ;&|})<\ SOD _;l]pdzcU6l5{pZxߏj=.-G{mT5hCS8>/~O>o)^(*_'ǖэbuzo?P:xz{(7"Er"+q§ҏNou* ]QN~_ז~T=K@=\%ı1gjp{y 4D,:)I]3@h"@"w{7Z!XIBR[=(U48QM} #c6 ~Z~[ ZXq)qem1i@ r \!(,0@یZ/P;*9 X^Br&}(G_EnXk"O>DNK&.6jhib@z]th$X8d T-::hiSuFDJS@%Ky'54:a-T5&o1ƖOUGڢhwY6SM ,tv[3Ve6z|V^ ,guQ\E7gpį5\[$Z$G/\[IplAAdD`oHۗӯFyxvsն%GaD4PV'v=}' yDV!L"WVB뵁b=mСؚzؠIk`nݹ#4޶aՙj ZL_c_'ۥwv썚z#;z)k0BÃ,(]Uazȷ3[)|ﻑt1i*6t dn#M:gr?}/9pZ7lS?MDG?*l}&mԹMNɨNxG؆ 1%Q6" )f6SnW׹̲A'D1ۺ:NwHr|` X؄as| ҴQ)!3%i6wYﵭ\wDRT*iPK艛gkd0(ٳ/Uuyxg qUK(A-P\^~O7o|2XF -S{ZIvؘI"]$__K r5&W.Yx[[.xZ6j0I҈dIS G:T: +PB`6k)Ntcl8dC:=nL@tA=X%➏qoRlPp,]N_^?Ǟ=h4ܹ; ,䷁)Q [qv75[੻[C"X@2jqlعR 4R2!s "Z;n w җTc?J-b$bqy%|pGV t0=+LRo#m^(ٷ@3˲#ǨBYatD&ALN44{Q2ĦC{7uE/2;qB_N8CogE*U}6cKABNv{`*Y#e^[z5_)^Z otvC7w\ncGG$AŜԁظCgԡN]NDA3@N.Sns@!# TU+fdS31CV$jE\n'e4t+9c0$~) T%a1śl,S>iuR`1Ŷ>\ė#L\&2U;n?Kpk>=x䮓׻v_/'vKWCTfM nSNíjjs8QkסW`r QSoNM\"pϽp#+XƎ'6rt># ]tf^m|/_Q!pX*έ^S~*o3331>lҥw=_vNփFvu|f=8tֽ 8G^ND"6?C_~g('VȧP\xz.O\߲M]A8S(X.8 /\]ћoܕ+3.Z׵?n%,~]Fʮvߥ(ʵBk(;K2I"4ZBVzS!E&Ԙ:_,Z4q+B]Lt #DmW, ]R !Ic1,J6E{Gm.wN7TٔZk"ʥ"bd $o޿FwiLT[)] jK.@+|nřG3u ݿĕJjp14\2.\WQɵՕhu:ڲ+o_HԾtX}{_0tM4D??=.G"o"Ts|k)A^hUO!cmj5tzńf/T0o,֗pO4UŊ\.\TS >a}'ܝHALLϧ71s/47h2YLnI9O)bBO(/8{^an:`5ʠ'uZNK%94 VlrȮ<-G⌉C ͆ǰUges>f0vvcТ0-6Jqc2z6 \l^D7 ]&6H**CsWOO6..~%402wXpρ|kt؜W}w*H0NoJ\o.6?ǭ.D{Η5IrmDmxP! Fj2kBu3+77s{u8$ Ԓv_g/GեFsY"MZ˞aQ̦eUMAԨ:RyDH⡵#dUۊbpr˰s**EЄ4F YD0 i౨Gz낔EAE~V-VGhjLpn$ DF]!!k'6ZEk&5Ə :H:ؗIzuㅛ}?$> ly0rHСJ Ҧ#K}PG|F`xգ ywBN@Uz Ϫ84@K5MbvꚊoŮ 4[85WYbZ!="oݏPIVbJt%d#{ӴOzQ"%d,҄q /{qjW}*Eݧ\m0߹0)\Tr%m`!zɱ> ::BQ6HakF {LI~'*E]1.HJ} Uժ 98~Te:jɊnEmuͦUS__|h/o}'VhjF2yl2Z?.$acK.^Gm6p?OCeau욝]]3U٥|Y% z Dla?Kr-]caܾ~Yrzt' /W>RP-/Aez.f'ozc}ca*eU@x2j3XNWq:<'jߵu>LT |j#^<7uCGƏO-_Az#% , 8&Gx4iٟS/f:Yj4:6$*5CAޖKFοU`ϻPyߒPCaMgKzM`^lWiUJTTLO^XSVi&#P%_$hjLa U!mȓLS21ߍ>Ү %A'jt5]Tr<¥W5mbf"K j]ѳH_ՉEzI.aIZw͒6,>-F)to| %"[+Ͳur6u*"eB`mU)džf*#무h %:#۷hk 44CHŚu)ć XR1 >9p{*hRu5EYGfm*/9M`asié,W5/ b (l.kUAj &'P)  p`cbҧg-A;2MȽ>nҹcNqǥ_fYVB ґJX ,p٠:D HBCU*&Z-:Vi S)eexSIvn]6 h}{XrSC$o]zU&uxWd4;jM*ĶZbk0z wujQKB!ÖzEԈvFS7SNduꯝc*h;RBYE͙ihP#je`=5o8faom1Q[9~LSHUnN}=YQ~dPỦAuCzj%^j ۉz~7 mVC{}bbҕ:Q픗 C`G=(wF|N$Jj}v]> E12fbGYTcl~(9d'!V5S5IlVK%OP&c5j< юID(Ђw`Wǎ˹Fec9wZp__yUpy[zD\X6b^]K Ϳg5>k7 HMo`rJ5< 6gq>6ʻwȝA&p9Tρ<0? W3(9μPTw=cG׍˕q2ۿ5HHhЧh[Z&t6Rwߧ+3Orp?2Qz*N;r87dFʲ't32I BX҆M "an#e%wjj'2M>QvNgyOҝ\HJ:*UKc!cW636\ԭ6xX}T55C= ǩ,14ꟻQ7{59M4`| 5ɏO[{^{u?o%DXڳs?U*Z{%akr6j L0*jъt| .k0\HƳɲ"V'Ok/f&w_GQ@Z|+{wʤg_aNn&O.ZF;W-`BlWлn>ЍXS/Zj&ڵ#+0kFtSn\IX]7|<:=zŸ|lRWY$yƣQYHRZ,GjK/jM1ś9lv晛TEc,˒ڼowF]-C܌nz?kR ./59`D1Na-Xw葷ShkZ­ɅN''cq_e1bLn Chp@`RD0Opln•q>rs(.*k'][MK"D2U׺\{v>ğEuA(c{`y48J|Xvcn%iG*z,=OW%lAA7aV墮QMxu,kGtjDp=[Lp(rDssuceEJNmīZq0Dm)0Z ;N`o5uhd X{SQ9NC'Qq vC5腅wa-zaSD3Y$EI]]nUN(wXm.4tԌ~(CօJy;& yhLI J1o$}B <"X{f&h~/5[T3/ЩFjQH]C&ni#*q!NHhuAҬ" 6EEvmA \o.A^\~ RiF0$+1f/g *l(Ӛz| Q18iq<}v̧u eׇB;XPJH,'sd T^(@Gci (S~K Cmh<6 r@z| olkXæPAk 7! Bz}bм mP(KlL;jIt m't%,3fAHlorHB:A6r aNCjw;譈VfGnĀXF>op_|hl>FUIN:plfKh0 DaZAyeRqq} &]O=Om,ɓzXhbk$ f3[-w˙-x=ׯ$[GCѭtΣ&h&Ҁ&5驤?r s?ǖol:Ī_UvsUݚՆ_|괦,y^+f*+LKP2ozϞ9';?oE6hfF#V(Fko x|m{:2ΛcFXh-n}/DgXDӗ^A㫕{wZ%.E*뺶T~ʆ0JD )l߸1!VŅښ/O>[:=Sݪ8͹^L^G+Qy|#UX T*2UȧMNVUNi e4 c&-.k̞l{uOZUsJa0;%58tUyvfw6ȉ ")f1(Xe>gپ`NsY,`[V2`Hd`609Ρwfgzzvy(rw7ae>jˠFC\a+C8\B-#,ncZl uf`F6_'N'fx_= ˙?8Yp5EZ͍58V-dS[b@X)(TWr  .W}SUuL`>?"vBH^4*FCt7n[:?odXҐsPUiir5UnɤDP9!h +5B95j}㎵D> WnVk `c PaP 5ks98Iyv^ ¡mwӈDuUP.8 ARO2@QUc$ZzأR+7c /+x;=q4F_;A>c:Qqv6,_tk=SЈjjD#_biDQ+fPPk0e]f|^zm1* IawF=K֦K%؛ ۫i8xoom>x_xbYOT Qw)}h}oW2fhH={nav3w_^K'/OnRdSEtڡ"s8(L+՜$Q {; (B9n"+&{>Y5ibMJ!=C__0n"❋'ώ׳3wu%2 b>6_z zs<;ܞk!̭ԭDIܬ-OvesY2BtuGm뱯l7Թ/yWyS7g~r՟W_);"fRO,T{F@Wܞ^ \Oo? b1]-+n lUm+:_zո:ק *AM\@{JTMUAHQֱk r[ cikhl&[YupT\;k2D{R: @`U=gW!@Fz0sң{v{A{?c{ڏa.J†ao?* PgzgGWrFtj">uKSW`tNH@]4rE6FWk汖B{ 60~FV+`qpx?,G _v=T{Uس_Pnb-}J$Y Rl᠄$|z~ƫO~9c *ˍꗿv;o=7"-ፍңhyr!EV$bnMl/%hTELa R'b]H{;"c3ɆX7?_&~O( hN-ޭ@U0g#j8gr\Qlj%J SB8\0 :hV$`&Taj5rtPvLVTÍF~%w$tS.bYJjG؉& :~ pi C;[b^f łqk/,;Vvz,Frfv"M]\ƅR݃G fmHJmas#L 60#~ask?({Mf[F=fkފ2cT'?N*Y="gH%P0Tj؞ZE ]-{u,少qehih4ds[vl!4O "U f"fxr<Ù E|@4օ=#$H^T^0\wv;ۆV_Y6RϽ g 6r"y|6} ӾnaB[[;BLyfFZK P[J~h_MX/rCBQQk+(%U KrQ. "йm3 ֧PwN"U ȧP=})Q76"&drwcm~ɇ.?h|CzCI^̔lmE}?f "Q9~;^ 9@fDZtiOZ=&oMYՂ-R8\$ޝ܎( ҰOe#HElv)K\4H”j1쥬7D֠Z@h|ñnX2ekIX"K"u7.DƶTB21$YM+R&-Z5/t;"MN%{XvWM2kM:A](3FtVlUrUN7ϲj" }0$0`™*oDLKZ\z! v: ps8k1m=`\P42w^AVg4ne=cCjNȱb][zk׋@mb,g ٬wF㩏njeGޱp=6~r{~ם@K^8mۓ(:1gf`9GMS0Ћ:: M#YXH[\8xgʊ9R%[qKyi06GIo~5oD6;0{H\\R (j$olZ]6 E sE[y\5m?8XKt IjBtxV&=n;SϳILH5Q/3]'m'!l'ɩsDٞ E&S=?h2-Vwh>.A:6q깞4K$rIoCYX;esі7)HGV*伝c_d](Fў_l*ېH!8+F`2U Y&[ IPe@ѠR@&sVHID11V½AzEScJ,G kmWj:;Gt DK1H* _~ ͭf/X[lEg֚$Ƨ;ќ2AJlQu U.\([{F.hO<#Ɂ@>$os%jPjH+*]s^J+԰BOB/>j!T~#h7w=%BP\J U5'gxbrnjVIs|3Soec-*QNW}į_ C G(E1ٌ/e6Ia=8*dX{UhdkvC%t@'K3`[[)Ԅjz6U0A2o8d]4mh$ZC6uځSG~y"l+v:ۣ˫LV *Z kJ;6{oW؞rh(>0O .>P;PlDW1K$kܚ>wsTѠojv?ŝ%QQO|SW.iAբ[ԽWӡhVP,"pp*dqk1LLP+{ڦo$1|dנ[oJܞјhOo%ۋɋɹ%f"}鋗?vbg{pa)E[b]̕p-$sbtۻ:dgw<~0ipFCX-׾(ݥt9;UP?<3nISs30v Y_D n! PMI*yQ6*B]03MID{&.:%05f[H v7ɫpdW.W>#:xne$CW16NTI I*>f:=ԈkKɃjF B UsXZ<A`k3G}rvimkπБrmF.[ 8s%ulBt[yJ i͓|VZcb,PR^ȎY(5D#2DE {a]l&6@,#.tQwT0T{;p]_o zokí?@?$:ovE4B4Q~\jnZ,B~<<Y_^򷺭+ Z h>E`M#~xH[kL%w::qg(\ASnFzYeYMXk9iW=.AU&6zrdM_ZBlB Gfr.7 x);auO1ۺ%:N<ɽ/Zi.V²Ri]IX1"N D\Pmc jFeEժlj8C@i-چ@;%:@=Y[CT%4b>im&PVg32s⡽cc8.뗤gV6vh)Ɨ9&@o&]].=~pttءy?鿼s#T @2gLdЪ7fO>?֤;63|B gΉZJ0 -V R;Ri|I|K#*-ٔV$<Tҭٽ~g&4+Enoȅ\ѿF-H`ejGޛsٷ߼(TJ.kF孶XPT8@91Iق噟R9GNhu>ݻJ~]Y8n.׌k&""5$HU׍6o-e ivSǺP 2[uS#Q/iz 0Ն_AuJYc&)6&'.87(+$MB=D8tJB7ڔO4(x<V*V:dZCh^sn OeBLnSL0%μoo >{_BûZ^|  L7T"5mKL KB6D4眹k4yph?0lZ"M `&r(VU뛪!zHގcbn-l"2c@:$MCS @A Kq,^0,@+9뀰!(K !:m8pA2혉] L稵VpၚD<sI VcFI`@ 2Wg 7N;Rk opi>79# e#DQyW li s&?`Pg[ n]\9xW}ZʛM4tf6`9`1P< [1ϕmXBN?0H(@*U(MJ&3lǨRfΟPޗm"߼b޸fa y0`2Ԋwh`PU%(UL4xVN20dǟݽ^MX7R!lao ^΃ ٳ,`-vQ'͑hfrJ#HyÐ-- 곭aqrCfV~U殔N[B(DL.m|.'y™Xh!4 b M|s `(wMB8P^؋l'&F9s'\~u]ڍk1Gi CvTX#R*I8'Lkj*ɢ0\Ez U(#Y Y-_2px n-c .AUf LVjehYn}_]K8< 6ڼ@an)3aY:$u#6͎[>'9C߽m fڑWy y䱷N!TQB^X[)7HgкZy(P@] mӅڲڏf1"0i_f+j[{s2ULx$s}H,"] 9 )Fi p L.;ާ)54v[vey]ݼCcgSpXZM< gіIN_xg={᝿ralfo4T89#0Ie*Q.QjЕ˅:#NdoI(_-kɴPM^dO>ߋ"(hRY3;`x]"Q諯'_7_^xbMH'aST)Vwwh~ &zb`c oUovHr=vzmxax˳ư,ӌf(%Ɣ K{{G'9w'ٳxCcB^e6&\1 Nr2bCwo$~um'*jMjam o/gPz=@O:4PUK;?1IbEb|Ef!L9V,;ʮYaM(Mf>~gK%hBs;#';[kCBq~wzun@&l(bRܼ@#7(+Eu7o)8Nѽ,ʇ>361tQ/]ϣiF 2D8{d,N1ߜ;9&T}8㙝*mZKQ~zFgZ;w&o|ӷ޹^R-JnB!ͱD:fmrUjM֪v >G\H]YFU q<9U&E_ :(ø 7N Qfץ; vU똺3 ]UglzB߃,6~ kB"G9 DV1 aWwޘ#ª)$7$I@Q<`Y~ fXvYIL|$N~p3ǟxCO?g#yOY'm= Ξn)־7~88ZR] Dv78>ugw{'_43JJr%լ){>>3ܪKϾ{͝3_*Sy_/tf]─cqdk& 'FKVEZalXtȱdfS@leDQ4XK^/麆 5je'3a7S v=~f9ǥD[5$:E:rS^/ngun/gS^t<.UNa=ΠFbJ%P 99ٮ+S@1 l9kEj=1~mӠ"u,ݱҋ(<;mjXMKo\4:X1lښʶ ?Z^^'ةGtTH}y<$8&V ?wMuZuY'o^ ?~+{'QM z0『TJ p2b]ѓwNEr=;};}uP;H9 mD@QA O0>f~Q8d@Ht4 X 6<ՊphwF|ɥa. IJs+_-[xLɻ 6zLt :SG.]8q*pgoǾ{b\YTW#.V[h]JwμuýwMltk]^𗆺:o+c=Bh+g}1(<һ*' &NyyxV=fxgG#SxBۇt,a)4(n={o[R##xnQfwiU$޹U{Mӽ^[W+jW$ ,,٨jD#B=5` 3du~?ܼ>zwjy;+gU3ulnNlK Pk/'~un@YPJBn^:rzJi{DEAv6Px{B܉@sM !bdkuN&OAAG +Nf~^m4Şk߂Ű`,@T%hmKSx2ù#~4<^u`(w{+w<0`%/UAϾKr%UBwWX ^IW݆?I[w[tS+;no MM{Pŏs/˦|?j8x'H}(~bmtC EȇX0w#^z v*pm4~ip74 '7_sedWd @xSAi,_6sp }?lDY=vw('efI5މ ͟ڮ{t)#a]T Ó W-5 >@!_(tAm㲊sp*& .^ B"k3Sб6V6G+ϚfXifhM˸ăc5ဎj -kCgM^ >XUUS"XdEcCꍆ "&606pdS=~CqLV7c"v0VB>ZThz`dbX "免`G 4N.UzNޛ[ƷuaޛWyLP|eru x=hnLU5`shTXAo-YC{T*u$7pLI.ӷ|]$8z IC؅EP9*Y\=ei )ֺ|LzY#9fG87%MrH\ l 2N0$F6Job~6[$*hq 'AXC_Ç7L{۰(nP (HրJ 7o?!+4X:t/7m6m-#]Ot:{+# Wn#k##] uyEhnR/4٤'3c6\<>RѾ\ d<.JozDBE s؊3P ͡Ï3^%{D\G 5_q&k%yPTCWpcǗ #aF̩&Q7Gl8%\2&@ɓ٨~@$*IFHrg`Y+-4Ejb!YZw%)r:>\&Ba>ZB }Ĵp:i="pƄi~rDSVs0>[P SZoRYKTM~M+}%1on H,;,g:d(vo45P[Hpgx55iT*6JW@@Wg􍋍9׷p;+65o-b#=3߿Bu-hkuz,jG+簗w}}L`:\7nN;S ć#]L]8֑.6#,Qi,Gxa4e(J *vnY}lrAЀV}q [wVsedsrcCon6PD&fOjj4:,g]0͔,oǴmB!I*]?| W- MWi~^}cV$Jfxx=BK:_)ܛlU9]JkLmW%M$GsdsH&$N3 eZz@RCmq &`X]Lϭfk{PDXc̓%Mdhj 'BbdR@U+U wԱiLMr,Ca5-ޚ(]ǝ{_I P0RhLUUDXE|NYtMTT԰놤U|$.S Q?.IUUmrCUIiȒ(4*4sOz#gv;zGOr$;Z$`׫//7 Nv\#Zqﶷ$CBS]Bmzf-Q=Ž+I6DRQPw(5{Wp8yc uk̔k?;>:3X*ɟ?:1%Q1X%+&Ðbh!Vq"XA)dYǑHW sk<dL3qczJq*5c K}gWV8};jwPEhFy#CI:(+<`JFL,v/>0Nn.&@;0<^`ߥ.sZQNdGqʚ/"sT>MYȇelTB6EXjIՎwJq .;@|č 5$)-?P(B}a C> `o h?,|VO`6eJz[4qf8xO~Jg sP~ErrpZ2srp1Ҕo/C@N>q2TIhen2z/g( qS :HG,Ǩ`,#n㠭u{3߸%:c>띦Xjq 1Q8CE`Y}s3dSQʶ"i[&ayN˹a˶[q׳kF:`Dkz ,])TJACO44uʶlNMVUtlvtSY e[cAQۣL-_p$'缷+U^_Vxw֗TE&qjsi^w_RҒI`U"#9.d2zc4*2xtٱܶˌg\zK>ڹn,Oۼ2U @| "N&a$N6յln G-.cUZgݲEHt^_5-MiiiɾP̞5$q­\ho^jY5 FPa8}܎nlő<[BSq݇kY.e7ĉP!5r!W. RUj'gBq9[A< Զ2r4ӧfqS  L5 ΙhmJF|/XDS4<X\PS сJ||mY}*^eރV_a4^[q!\ٸ+0.h)[+}=14VϳW߸Z ZN65!2 ^\X_A~ĵCqtϢ3tfBL[&S~o 8QA3[x v{ r, ,`@E` nc} 'A3;{b(rb=(DeE'j^&c4/4 xd+XJ#)əcEaRA>F."8cS!q%ўg%V= 'Ď#q@2f'{v;:uGgNV·ޅwGs Z- L_^q C .X,5!Ǭ8_P~qS+p\CsF mK{72b x0 DHz.J$5}ZKrLMY;\m>+A^ep1&i]5QRIni*]tc ˠԆ$s7?U%~`x\ڮy!{@;ù^ڵ+0WS\3;#$Ӻ͖`FFpCo~08h 8fh|MvgˆlR%rVAU\tѱ?fv y&tʦIEG69 A"*Ng"Y02<kXhF:C2]ޝh3ևʹ 0v琔_˱|ul@NlnCۯǝ w6}Λg̃sc&a\fi٪j ' ߋw@^ڂډ>%}k5kɨ%{D 3j+lܚ ހ#09J ڿp 9:*R7t@k]*j0 GBhG]} ɣ[ )3~G{Z}39s&GKYr3ur)>{~)Vs'yT+ΫW_uR__#v^-JA"B,= C$LG_Y-ŽQn+>(W[֤B-5>) sY}OK:5s Y0* m0}mlwJz.skhţ0vз'vlBCMMrH  %aiLp%Q]C#JJ#>?;uSۉ` TZP[,aLj(=$`MH͋ #̲0K;&C!MM!eQ$d.!U.C!ɦ{rze#%ۖV/ʓθ% nyrѲ?HNC3QEd˄*2EYkUu(/#%]<85[#ٖ p9ԳY,EaGPiJ  J+2aQxeE$8v-[˧DLXgu32 GF|ż*yj3}eYB(+pQ YPHRڭ Y_0cÑH0xԍ Kv{<nQSoEfpw`(<_9)oEf1 *|%kŭH4f|.+OOUmqhM~sk|~w͕T 6J(0arJ!wWsl l{<:ٹŻt# 9teEC[>Wq̟-~/Zxf+R&܃'5C EjUXj4&q8q+VivU;\zMIRѨf Rg {B#SȧgYB)%IfyC~<7301ALіkl1}莧9ЊoԷWs?|)zwL_Pd6.dg[qINR+ex{(\:+%bt U缔o#W+֌-#Oo]ZG+nxáKowSl-U5(<-xHQD[(ǹ2 P\f''oro}zKWJ.{;ч`׽𫟻Al (Wf&m-\ppQ;A @x&RJ;ְ9^]ᮔ%hD-: ;{6jX;F" !v`[imM(\B>4V/7#CzPsZ4ڿͭD3s/ܺZkD2NDa5 ab}/yͧ2 1 $R8>@Qlu nۏ&S~lr*XR +rp[ΟlUN|Z*TٛA}yvua!өI}nk zʐ{0*R˞u#?5|}،$~ȧ|L.YmP Յ~X8}/xek~amLϊ' ^X Ht3fy륆vƍV8{;1U7+`u1/䴵tBa4]eRM-Y/K4LcD"6\¬sz܋_|uM2%0<OLlerPĔ^)5@<΂Gx7,+,(}B Z7D`G ̓ 2Dl0CE>Q HOȾ$^L6-֩.G6HH XLTn9tj%2pRP!Xԃy2<$J>!$ KY 0hr)&K9]!Iv$';?81c0zG;邁X/īJ@,nϓhRűcr8tW2%O|y7pyR|VMWͦq4̻7 ,:Ƃ~ 6vQ$=S,V M-+؎j-[hg]7-DsDme ^< O `Zǡ(c!sjTU5;Fv$;ƬU$V* R<=^F,PLa0^ji.oǗ>vSmO7[%ؘtߝ{ .'`KLl}-^.JjeO$~LlU3V>xjWڜF^lMۢtx:I+HD$~)Т+Ɔ\vB~-JbĖ ' `4hZ( EkS( Ze,z(='yYs"/ He##FS61A7bXd CDI|~Ep$FEQ ~Y(>4!G>9DxA%3(Y} ɒ(R  ,|49D`Oi%Sr%YV0BNTDZ`0{t{Oؚ1C.uA RQ5P 78^9-o]Cv Ub5LikˤGOP>6> mU#@5MO͐k-{bRx,WVb'!Q RqWq&4nHȴ'Lj`ih^L F׈7^U͔ ْ"6gja.*SʜW&`wzMji{[#v4^+dArE8׿5"Aѹ9`. G<KCu8 zSanjѦ{D!N|$6x(3[>n~s/>$"'+!!W?oxz l4 hԙL RyG 0Ӈ+U"*4t?\F`Ģ}|2(vĤ."[-5\Gp䃽_kiU7j-A{\ɫ6/_/gI1z0:t'/"DŽp;xxm-lIM g`}]?ośQ<&wkvXvWk+H,;"ƵOz?IV.~]1X5^jߩ|@P,e;]KQ(Ç$W/oygjEnJXVXN4v!?~o?tdifi9k=ʜQmߋs[z%Ș+Gm DDm!uΧՆv'H úY,gΆH yV!YM?h,60<*7!0:< f;^^?TS#l%ĖcL2&\PYnدwRx6ex mÌjT\ƴ-R9E?ᶺeeЮ*,P+H!Ҍߖm.qT:kì&5r9riI#Vvwl$&%hL Tݲt5JM4C"K fQOnSZȪw2 %G)1H?pB@8zdĝv4MX8j'*Z|]9 U+W˖ASӑPTnA*ީGο-Ɍ1!Xt2*>'(xics!BdۛLlÉM-uAz3[&v=y" 3m9 Ųb&ΧZ Fn`?[Z Ije\Y-^gi*j z_jio7F?GweⴞSȊ?B}lfGPb'^E;FQ0J_' ,\W (Wdq EtFa VEF_(Ga`^WS$s".oi&!^]{JwPϪ"$(m<19z;.g&bJ.4sk+;~#Il$qjn#c^{݆Cpl/.f罚jX"󕷾 Z{{NzѱK8Nj`Qto̡k B Mݓqnt6Њ$ G$*vڡB5Oɯt]5E_⏃E'Mt}@&'w]GSo.旮+o[+ǡ4;8G@hK'8I(.UN:/i:*z Cvupf^Vmq巰B/0 qlނ:JCѽܤg8B{:a7pT1kӳmo*#r-U_A2ʙh}M6ÃО@BN`ݍ՞.iK>Wjb>‡*vSY8rX?AlvTs}#`^G6} ؿc]cۭnw?D"ȗ[ +5Goif; DY;5Mߚ̉AB hmhK6jۮX졣Ra/Np["'W><;0qK xMp757mjFb;|~h}^C @}k7^5cHgݾ}Faw4G{zVoBL%} $BåڪY|2@ ^E[Pƫ l!?٨Y:Xg8;ds7VYFU$D(_ö N=(HR֢M΃ V CMm/~?F6 [B3dHGB ͍2hSUNWST{^Qd0t@[dt]_ZO( gթ(bJ&n%%b+E|{a- !Zjm\ӡ}[A} O4$<חeYӀ<_3/ OuLFyDz!DY}};}ϡ'>|/_i /kr.#bZ8WJ8poBXRR-x}Xz缥lluW^w"1(fe`0ae/[ cs"/a\-l49A_0w4 # mQLY혺͹}=΍n(p>W_@馳p0YN6!o۹}'Le7*'!~[v6 Qe]-'N0{$t@w>c=҂C.xzq8<8%.൧h?xJ8A;ЁJўg^//.JmL=-ν{<;t _z~Gz\DU#a4_4KD0ܷJxnvRywBuM 2Tn7k̛b4t)UxVq,lno^*/7oO[,Nt-w@{;mǑ+WqK*mOs;U:3\dr!9Mp蠠Ǭrx+31錧ׂB(seߘ9||\}Zr Ev!h; t8 ЋnxҾ EG/Eyn{Xt;+qdwg;?+Fn_.G6wr"щ"EHr+@$ `hyW MڡzuFpWp|Ǟ'Pw7O+jICrH A i={%#4,0umB48uO EYھJ*]2Q֪ZC_V,`iٟE,:#:sKͳ9A$I@}e*U26ъP=#PB w$?71nWhGA,ޘ]ݸj3|,h#SIF%r)Wjܞ9]]W>#62;jy_\U+s+-߮"ljص2@yٛ~:vOvk3@xpjg)we!4pއ<{x䄷`ԶA-gǞ 9^x֭Vͱ[? f*J[p6O$Shx;W.J:Žkܷ#&M=c|:#BX֮Kf3<0XNtyޡ'ktΈ[oƧHGy2}K8St@ ie DъCgէPu)I4@{s}Ҵ,j)zqie:AEuf03ֽbF(7&qOP&yS)!2k`NGv ʏٯaY_eQ"˱NLxk۳͙tB?Fr:;~9E㟌{FL.}Z0 _ctE4\>4'bM눴~6C o]zV6\{EIkhisV~7Χ_A&A@-vێ@b aǁak`bx:vdĪT57n4*s{1)ċJ3ÉOm-Z䎪f͟@fS[<CŃ! AhH 4~ io90Wq_ d0zgUdE fu{+suMi5,*g߇BcxqRCgETM@Ep6@D1/9-uױ܅r+8 z98aX?OF_x1 *O4dϟQo\mcL`9G:}eUv28 v5R2.g$Cn 'pnW>02pB$v|RG'R "E@W-BI:A:v}T޻f=? Ψ{^}#pRIVw`z=a L &'Փ)Qءt ^%PݺA>k=[Tt-${SBa/4+K'S*:N}gm47XomdO=-r,zfIa\hVFwT_cBMx> t J]b(_V/:f硵p @AƒkK8&"pO1{{8xs^yJݵ-yx C{hȣZGh:rX䚂o0u<67jDD+B Cƒ,"7IDDthjaG;n tn+k*RȪ⹧_#߇^;ksFr Bv47܂0p6䵦]GHR}Q_Bس2j\g 85hq~7`>taWlcPEprXpуcxkK!@*t}`6h?-YJtjM &ldܣv {ذ{Ys” ]0;&o؎@owfy#h7D"Kq]rw,j@o3T%f&r{ $.PDJKE _ 7>Z%x?rsR a=kV BJ؝c6$yvv,/ckymz5̆wpo gD_lQEZq_V6Z)&z:Fj&̫{-U1ks sJm"Će6,-YakYn]/)HJ~0b:Kx(Zf2:|/ "I u3\P]EiUMy,pHu(Adv#V3Mr Ps%׻eI&bܳf)3ԖH % .urB9lrEAip9R˼gc0V,R'灼("J ߼3$NeDqMv%OՀɏ[vj}x(H[o^- N&%YK_B, [^5d˦jww?h6 M] OUPMu}=s^Í a@zHljӖR榝HDolO|:OpQc JT9]9D.;/y-}WtI4bvI? "_^V3V{|N76&_+8k @l⛋9^rH[,wE4xiہB DK?{>ܛ+a˔o_fʸZG^1s.G+ ~?:,yz_ S (-e`Pd*v<GKgQ;LPɋņM& *Zy]n,MVBKr`ܶ}"4;faeK(,"٪JjmXQkڏBc( =mk\lLg~~jt۵;(_tO^XkL1'?zl&,R#`FlMK"fh7]=ALj#!w|PZ:EQV$)[F *~,e yE+9'IGd4G@e ]hK qe%h?~gҘml{fp:רƬbF!VRt-+ 㺮>;f0C 1H@ ")ӔDEڔ-[>MG*%|Tٕ8"W[.ʼnbcvYR@q Hl̊Y0[wOo/`ݯysbPWWԝ[Vmjqقʒ:~MFcdRs4V#/gްXbQ=B!k"$6|}dfTNfźg~C2Oc`*rthaV{5NY )i ˛M` j?frxe]嚵.:`t` ȶ tO #Лס DWv:^TxJKT ,Ϣ<`k+_cYOG>Lv -XDpϳ( 3b8nIn0*&D/+F3tV=~%rt'qi]F{!O`].òNҸr EvۧOQICvU5uong(zҘDɰ\¬ C3ehi9k^۳X@}usUߋ㨸IomBG+e[`S5\e%%(? o܆xE=sp1/^ۼ3%l7TĖu=WFNaqe56$L(.=G,#j2RBoCpV$No憓'aq>_6Z;jDxf=5_ZZyPfX&_RrBȫyuGBG^L>s?vەN ?Tb5Y}m'dQ#Qq[FS{4ꬌ5Mq .V™a*^h.aX@1iМ| BZ6_,aJWT$ :mp6 ]%ǘ6 \"y`N`3jq4܏fODUi nbOs HlOv4DИfAɮ }VٯlMZɒaЙE6*d a J&i݈I- d :u lԿ yW\qh y߈7W[ "!C]uٷݗ_8\c7řCr$ָ|C?+W[Xcx; zdB0]jCf-{j%h$Xԫ"Bf"Ju0[.,󕍖 N7yx>bw:g~_4]<^CW^rYz@'_F"uY>v'mNB x~$eiBѻ{!I+*ij3 |@ V!Q@Y\UvP :ri=L;Gx&>o4SP,c[t?+贔^;O;]0mQ5ծz ۲L*e05c='<32:KSAbҟ6~ d&GS0\|PޛlϣV"~Xo f˵]Id?Aղ 7wv`,8+[3_Z$CD25r4hG^LmҢPX'Vq"6gc3D2Do FJ `zGpo@Ol$huKF4 5mBS.rhe  UÑ8 (>Ds]Aʷ x &Z;$p Pv [kep$N 2oQ,tuk]suˊG7@4x7oނ6%zBEb4YkWGt%{3\]\]e鳟k\EH':7(<<d k[Yz=> wVybĐkpչO<>ĔKv9ncg2*{ԩ,g!܁:D:>c$MtBժL&nԞඒKfVwӜBnGs1vvTsE/%G/9#%n 33wW`< r;!,3S)# p<!Vɤdh9!lD)Xq`6W* J^Z=C\j+ܻGRgP>Pn"-[b-MrґUe?@E=]4s7BVW@Lv3V {K@=츮+s*sA"iQdQ%۔9e,[=eilɣ,YII "F7ntN9ի|ZXխ{sO( X-sps 4VnYD,Ӳ&DBs=@UQ@H"a,娗D 6TsTؖXxl5kړDQj4?U#f~${C ]"mt{ !4Ɵ+^ł nV1Td±h9 ҏ?Ŀ h9Gà ~48M;aPdr_G?g$JYt|2Ib%x!Y>XН 9zЋj\!۹n?h{۰XK/'1Da4 SbNMLZZ+pOԫJ ׾Cέzjg4yJ}yFi뱮]kG{Wוחn7D i&WRB%Pn 4HL&Ch?{ ձk2.#ӥ? 6D퀇 VEP|3jɺZ ׵/|p[{@?>}?iVg%Pg[JuYs%nO_0g^_n >ݒT+S#eW]Ρi~+ҏhqrI|=r*%DyMIxjS7{DC*l/vnyN}U^9q3 ;wNѼX]|+ne¯^|l) !?A ʯY۪ZOyO*9VݞDifEO&mas xta*Ưt`B+kz\n?_x8Oo;]=ɓN2FzEQ,˯Ig$}ic YFqVF:/g X(L׎?.'pt!vnZ |X8b~j/^E^yσ\.N;HSX~+1.r{bY9cx*t>}Sl~RmN} v=at'9F1JswN+ .#͡di iRՖw' RvY%}ClZu jb)m:Iz-~S01B"TM2,F2J%0adf]Tr3Ҫ=ڐ{bs&Gξ31h5P-U$֩̈́1WJ;`J*g&>Yق`P ~U#P"rmGb|syIyM7=_/Sg^M*O݃mV詛pg>^@/e b{]!Ru:'q,t@0Y {bR]JIY]U rMJuWC`s3`ûhE%f.Kj>Ca>mL+xK6zt_'VU=F>%<'>l ~V{V$ ;J]7yX#Qtq|RZtD1 6PHn!dLtVTr.홻55  I'ܺP7ڂ w!5,ZT]OG_HnpW)I!?Sz^E#ہ g9=Y`],pUWt͊mqIRZdJL4AWOիUeH/U)dי}' upZ2ނ]4w>lrX+ &h!1o(t`5yӺ˪}LsîN7i`^.Г7L!j ER02(b{noKD,A,jݧ*d$ P׌}Me2N{-i͛;n=}|!RDwgId:wi t @!KW.V[nǭTQiBWr]A+g^e/VǨ+@Y= F>P rjC)ks' 6 p^1x%a5(Wv. Kr=Ba9O;vS*aea.x?, -2#_"Kf_i*Z}/kKRk{I%mgqvG*!f1Z`7D<.F4{h'P ϭ+% =nzuI70{=/%a;.Cy 0io!vP6tx~aԟ>5a, Gx4ܲA ̬6}y{!{R{|Sh-o&ZAS~pEh:MەNNKY(zf9Y z CA.]V)LA'&4u]u>-uo%|+-uvtjgj:Mmg;WΜ5DZuQ)Wt-Ťo6OBnbۼ9UW7*WO,e1dL F-yPF  M^6`L \*^?\h6ʬ&(wZK9s"% LwvBѦd2U t SS`S܇F&#e(xSD8q7\| 8XG}Ff&q6BY$iDgF+,@A @#4 y!:xLYTHŮcƋ= q Qjv;aaX<'x/VdeZ=[X I d0rq4SatCi TohxH+Ub\.B!p̞rY P'۷/3À## &ﯤ{ w9_L5䲥Z,VxcYחF8g,ϟCur.¹!6ae[lfiN6;|.dG0j"Fu8zIԶO6֢P?پh>\oqkxh>Ԥqۭ/GxԨsg\\o;G5K$ E:/X>t糅1㱋}^vFR牻,<9P7PRh.r|d*hEҴL 0kzՔ&ն>7Z ^$Ŵ _U:eMnTM]l4- HLdG?ITj ]*BRl^F/ zֳog*}gzk㦺 mԚ_zYۧyB;jgdL`1lsfqWNaL_u/`wF ޛo:lLBeb8,"1Ųpro  p/.  J.>Hvit¾pN9]E3|َv&˛H=0+_`cw>,žI iڜB?ߜQ[k/W{jI4rtRKszЀ JJeIK!L5 kM4gC(T"}fٚaL7=5eF]pP(6i^&Y9Ltt90a5qcvbLՔq9Y'V+%rߨu3EFʠ>@r"#YQwUNN#]3) lnB$DM}ڱ;pt7ٿH$;LB'd\@6hca ~ 4Mr]Gn))~B*u t `j X"ZuhɦRQ^xCmBo?+  jE)k" ܘ' Kq, $2-hk%XL@O/RDȃw q>PoK Ve D셂`WVQ5,m4WĴNs Jě0>SϿjڏHo?}u }xߟ)׍`6 x.Q|QϪ˛x`| .׿ [E$n9oZ)A6na$50kZx`VU஻6R٫[{3^7Tys;z/ǞRkm1&4X_{"lڬ7llVq=7tV\.DιBP%y5|{ؘek3]o־/m O#xݞ\F^P0,skx l@0\osյ.k))O~ ۔3"x[`e̼)[-<]2JT &efhaxŨm6RSr|\l{tE/6[~WX鑾W\ngZ.m(DuG _ʗ`iۿyb}Zs)ym"2;NU;  ij5xz5@mLSPNn%j{7U4k5ͪ*ВIUh 5_r}NGhXX}Ô4rFB#0¥$4EЍ`e4L%3tڻp8T?r/4J`d\; B{10eƠjI|%AuQx Z˚ԋsX$64уPcIV6Czu}i7ZMuo)?Ws36'DDc!~ +W%`õ~uT h@K)طɽJ!\ht-R" drWhCK.)TD_QagA29P@hzkX2ի,O\Ȼ"zޘ/DI1@40yY?b,=wxcG t#Y-3x 39ffpayfZl|7s|/=Y!֛F-fД+(B+d/zgEo("9[:? קWZ7p#ES1;>S) ݥȨli\}s6("L"2''y"ҹM} ֶN%ot7ڎF-+n͸H39t5P,{ DӬe nJ֌;UqhJ\$bv.KjW7!o̹~!]B ,TJwZ\v8UޚjV@p狏3 A߻$F9LJ5(5@ن fl 'Kg2xt`dJl}I.SMZrN񅉛qUjb$fbz.Z(rEuJW4snՋ84epX&*SR\H-<th$4:OX;j?iyz @ "5ג8uԾz]mS2 ,QJlD5~TՍA; vwJ]ɧw_82[J\rlZ!3"F3ff`̥U|RjTA?}u~UhFZKlɠs *tFQ)9;e$TȞG?UoI~57.K~ VޢOJ ;Y!ƛ\QRIQ;T TH^SՎi3y=`WLMc ܘ Ywܥ-}(Y#͊y/š|N 8N3HLF]3 Cä#= :R,W*6*jZ數5넎}z{?Nc)᧩w}j^iw`@(*P2%Kc\yJ1 oe$Abn.OvgdJyP p=r80A(m=EzMb^ R4$dkg=P.$r4'Ǘ 2=1J xPy(4Sb¼bP?0aSQl͊ S!y I*98Z2-=1}<[`/{9nq-F57֩RM N0򂥍 ȭPe ܬy!n9X%dn߅ ēp51'#_$w$x J`' 7 {{JHOG5j5)z|(P\\L%"@a{nMczL`4uh;n/lUX7(B슑1M+CC戔GdMG>e24M_TJYS~eiisrlTՁ.7.F&lLS|Z\> {|SR)fݝǩȴ 6Ƚ0RQ뿇ĀЭQQXJ]@ !}|_(< {6kJk( (ZTj?mZc噗Ӈv>[*`.h2 c{?:G]^_my^rX+/vq9uȽ>$?x7SHtuUN,Pڽ]Z0s^+QCD[4Zv} ZJgR3ept?7:ڜs,w{"mZ׈kf\XYv֚ &}Zb?1V1x5szX|[*=|m=vᄐ;]ǥ¬(JWcÖ^ֹECxHUmwFA]5)Bإه \qFR1NC#!)Qyë/C_K7 ˔oֻZid)sdK3/"Mr)b11jw^U4cqla]`&u<=.mVPjNb1KSЛe?irkö/6ÔCG/goRͅsD9LeD]j%H5D'2CY&6ʫH Q PVR&d8V|.֓ Uz*0[?h@A~{A77S7ăPcAI(Dx2Y[b2ލ&uFF3 dv T_6;RK\ !}_2o-Ƹ!ֺ4d2F4JF2ހoU|\}E4chVtZoX-P)` <<oz™ ~){fvOBYhP-a@ 3͇C1SOVPH.S;|dxJҐV9V%¤{. 4ߒC~)z2tBt`@vɶ*m𲆠ۭ$ՍM.aרK &PSEYzkXUG7gjDG[MMX//Tb4'g/H= OW`>|3ӂ}AMN]QX@ 1@g` J wC*radwYʒ'mܛrjg҅Jpkv<[>s44E@(I7:蕭/^LV0m_~/~bC6_sgH}"2lYc.G^c!l,iS~.֭}w[-l`TYEjRI@/6.(0vf)ԫ ve3%O^W5Ɣ%ijqI0)Dcnj' F**t9YV*9XiA,3:>t;DR1I O`稵ۂ]Ͻ|{xG%_,Nݣn^/iwHu̓)K˘Xd,̫",>3(A桸jF,Vƛ;N>7nRCr,_P~VljAEUj*lnc6갱A'6j"DwjT-8nyJK_Zhf/iu(e*ZucRIͣ4GI\a:VaP[[bFwww'hbx2؇&:XY6 Njai5Hb5F e]o,4j17O&S++drf/B~Zf9F~^^TW"ۡD*9~ Fk 4)0O~M3T`5unJ?* IvTZjv+9IAnR_G,F^YntѱpXko ʗO 3V띛r`wξQ(]d)qAz2M;J2?ǥr?7P!<Ɓõ+]}$W_ [9PVkbjY^<30~i UÈGM+IcgkG%pRg4Gb)H,b5*EEBJ|œPr)s'#Ղ,սԸt=gw%ۛN} OJ6Y=$3IZN 'І-zd c.ܵ.箚ǩ[(OGپcܵ|esP[uE5&#.!^kb\ƛC9PT'㓽ѓyY*Y!^=/R ` QP|C]mb}@WiGN(XڽϵʗMF.9N"h7])iw?7=cI/NTOoww6q [jrᚪg8iyؾc{ ^9}e5wkvvm&M<6I,T|/G(i֒-N`u10`[%ER^Kn^XOUHjI fTT zŚ]f z!+e6BNPtŠDU >Nj HHY]fP4.^#퍟*!;N8MZxiMs:`{]E %j%9%I5(T,4́1S$} uNOM48(͹ӕ'|} zHװϭzr𵻞kb^ %('ɪ7Qf}AmpZlKn"\[. _sB28҉gW tt]/7@;_NFq'[(KGܽ3;ߜKrB-nnX5~uVQPkHO'CԵ5@[ի3zj#!: UܼST:([5sꔼT<]#Gvn+wh50PF;8<;?Nmz};{NP+O} SJDq>ס׿rAfHGUtGoڵ3NGCm9<WxV(5 ,yTn4m}%Y֊oeYy|Fx҂&$hFNeDT ׀Va~8-tE-Pg*&s""E+^;U`>M(B8ܺZ4𣺘GB(.$MLLi$Mbۈw {LV`hG'ރ[$3 e4bC\)I`-(`Y5މjr\|8بx$s+bhDU %whhi( ut 65lPC`ЉLA7h3H5ig)Rb|afR Y.N㣧s.q{Y~+VGgSÅDe +-ՐL5OK3kjTrԝ .]G4EP;{ 58ПC7 fVT$h)Ω "#C暚IAt s`-+ XuZu6ɾ{I>\zSߴ[Zc׋?{;uK$i8rhϒ X%.~pcSezgBM{Lf{ܷ5%tBel)!MIr̙˧W~7qnrd>skwX-4UN'Kg}vD]‹ݿSWz=2XlnsվLw-F!⩦_e_gNN=yE׮.2- -UjgAfS-l.h9iD|{K r=M257k|= v\;Pjo&&Ǝ 4;>j~푩#:w O T!W!|;q&i vIq^!~WctצDMH\ $I|x,3S8 V7Z؊mK)ŔsDl4Q488dp錨|c;;%ynzv3Y74*ՖTcņ.K@`rtla_?R)/7{,դAVe&{$γt0O|ύmBQsMHl(7:BNnzxrboBFIIGc8;6`Qq#5y3לׯ8 d3t4ZjĢ隻T5HIap14DUn] U, yf'(OFmx M+*j cU`FGk 7ʒK#{63 8[5O=ٚ[nEafqMTn6THƥg)TXZVWLnܸEfzX%Щ k4/Z,TW5^'R@j_.WT!BGMPVW<*ڡ؉)z>x v!Ŝ(B ō=tQUY f=(Qӭ[v#ap" AO2f-(>,IXA|u kdvڇ+$:1VՆX篁XBB`{}dʩ+idu뒬+<6J\ S) iVmADY)tub*{}9#@"ӻ3B*E` s( *ʩZyxm%wa(c=WP^OhKKa+ ٷv;VRB&H:uU#%'! d '=6X}THB9( M7y.G>lZ?kX$B:f~ M&:S?;zOJ5̺ؓ)i%c*&ݶ)1ٲuQ4vUc" 6(tq_нB5RZ?q-N|g62|LY=BM;CiFq经cO״‡(ahe4۩7Wƫ}͞|tDlQ*e(poo{>+PV5 5v7g2 H"Lj(lPuFKenvZu#>8=C^^YŔI μ1ѷV25Zʼn]VaӒNj5 V,` {""qG,bP!}~.e)/aT)sKbu99`,NGP_{bJ+`_\^WL:3vJ[,(ǎ gnܣf/ yMvԫ Xqyhޮ6oz-DG?\u0yZ `1bMI Ceͅ6oBnUw mutjң HFV`wؽ#nO#Ou؏Vׄ`r~XIZWh]ˋ҅\*?+ʅB[cNdwZLo"26Gj--mç_wמj_vweL.,K;QJh!e vjץ2Gnw--m=d%+sNwvPTo%G[ծG]mq5Zz*WzC'⬫Y' Z~8{*p3O :3ܵf͑SkN ?0Еw(݉snn.@DJk4FxwS4jj&us4iEvo_Ǯ64u˴^8Rub:gL 5C;e{6I^u*Fji9]r>+Zt!\dD,#/ʻd1PNʇZ%gƽXq5|!"e 0a^rlΟJY wwp?Ȅ($Զ_s<'ODe_LԺڻ۽2V#NBvGx5Iɢ?*U }h;+WP4:&KzAuc׍29(Z 'W7tc2jlEl?$(D:hj@ #xPFpmLy+Q--QvP224*kBB%7S+;6͝Z!`9żJ-SӔ%(ubU'qs;tq|>gcW窈5 Gug?x]otQCEOiWCg 1҉|7[ۈd&/waN#l\Xj(--ޒԉG>`#! nz4.r. WK8W- ,v̲Z6%֪j vX41tݟ ݺ2CSep;M$ 4-#4+YXoe2q-Z)(cc+d Ѽ08ťەh+sI,Oɓ/1୺"=T53BQ^+3@k[_=w{IH!}>n/rIʥM3 i&9w"Z L,koL7g'}20nKSWN -Zj VP$SLGe4(AZjW%yv2Buh,6j̚= 4樾奃QmQq.L \"Ah'(Z1,/|N3ɝ!2% fET%/ H (ۏ1%< g jƞUU/@,nuR +6.5Ő"2X/lmE*"΍=||w`k<raa-\r1nH/+Bi L"I갖jVbͬ\l)MVI">p7FP8Qz)=\4~y jqC'nlFğ ;< 3%̸D\Sz}cu% PiJ k U&*%/t`C(GkقkNT*YO\d\pGkߑΔV_HѳumySҥm'w5'+jGɦ Mc_(Դ[[5\7eu#Wamo_JT =XSQOZֹe[G޶{rejK 5kEUBSYrJNT;%tJZqۡ d/V ɸ>:PG:I遈bM~=1dV˧d {re*x8-g| \RAiκbDi yCąWݍI<#SXvlmNvXTMK :2;|Q6lS_C!G`^*o')sՍLBH$y$I(l닼K QNJ~oPT65AB2A>>*&k7 j6!E5ϤtWڜ9+a>?oxKy˸-Z}& Τ5Ao= d!;+`Q}DGKلX !$ѩ?kΊ=(m.'4Cf7 J]ylԬgÇ=@!mˉMPD5 2Z@ՑsZ+H%h;{bf̙tB z P2r YEn{8Џzt_ͧɳ(E62 sai/*9Y>uf#X9Ћ1RR͑'Z)r+EL$2Z"8T4~lh2JQƚD &W miڣwn/) W!F2Gd"Ptye_v :lɔBw.k[f&*Fm7j1RJUizƸNm}:OqPE6c_XaRbՏDQ~=U8޼Zñ`CzpDyEV0\A!P +57'^r#Ή^yu [rmR8p&ʱ,) )ګNjl0dDoԚ,6'7>VC[՞|E/M ƙ"}Rk/b?̹jt 7Hc7}MFW֑=/_?槻4Ώ_L)VG~z-nR}s65Ti"ipH]PTT+Tmm|6c3XkBȆ%^Ǣ Qtp1ϗrMYbXhzkD^7T{v=xsdqigV/W$(DCO uAG-'"dnY/h:QDNWdlxAE=dk][q~rM%`|Nvˍcua-\ޤmωɓ XN3vˤ(M^󲁠TuE?Aԅ $RwZ qzI $LjfB$-tY, o]Y`i 9ß&2EP[Դeґlj;$XL[} 50 ҃t$f-m-Q^ҽQmxN}}* If,b( rP>ci' e=)ey܋.a*/_Ke 6/E86_7,&nC[4RPd;9jk8Fdž@`uąit"/-O[`e{:gzڂD8ލ-&ܱ zKw܁^l")HLs75,\ 5wBH^(;D|hs6E ˴)QYHʛfA.Bb@t B t PĊncɍeEQK)OE6ʔJ3|VѦ?{"\j!lv@r%cMI?.)RjXutrC3e! M&r;I(/_յw7G L{V>/Kd*#_xw5~^oEk8~E~Os-a7&lXbXSnJ»\j]K몱}(uD'NPK,mz]{JT"='w4qU:B-u[Unw]䁗{[=;%ݰoWOT9! }{$L%n=?hr%5+e,pϡ\9uWcM%y9ъW-@n- veoS~p8BuF2ROO}5oػ8Q ؖFS!Gi}6[ϥ.2yOhΡeՆ?VL*G*g QviJjnr;qce3 {:{%RG7Svu^Q֙HyG#5ϴP]ۢ?@8X7d7tk} ;Ƚ 8d.K1x.=TL)7ֶBPKU%K%l=J[Zռ VGpyș RHܡK}f5SrI4S k:M'w Gp`pjՖ^ԠsNu ʚƅLBl CI]v”NZ~QC?#93IUhΥ݇?r{ԛMZH7sg qg^Xas܄.jmSLىY7n@K?"~,OSf݉ CZ.f(BQ1qyNs`#h f;^2OQ5:°~d(ͽrX?S}WM]j vCo/e n?lϣkP]G)3r E)<Ѧf71yUʁT#W[ڨd3qI5~ d;E 4c) ]20emΏíl2q Z:Ǚ"Mqůb8<6&BڜW<.*DoBZD17"ԦiſK"n檼` MVк!son;|4xv<@>6]>=vEՑsGʋ)_23J&rYyT⯓ܣnޘFY}ͪND<;ٌa]eh* A'U !Ύ3OmL`NW-'[3D _$Fa/ u.NG$56cȫ ut";Gꍜ@=?@;#n;)un;vl/g߽;ޯfsNf, l0.A1.g/VQU,m|Pi+UsbkS_Lɔh#]Ւȭ}:[ ^v)XAjkĉKR>FY92غsvqVRݭ%c mZdE&H0>qy=#RK0K8|]Ģ[4~- ]U[_DͽE"'Jjk~9vm!Z4 ]~1œ㟾gv&NI/̕b1* TYӬ[LRڱcU>oDQUUo`rhXS\Q@sj.{ݸcκ3RvśS(\;wX/'`+NҼ?*d 6Bs^3%b_1tڅCrx~.[ڢ$%'YвQ [y j%d:U-Al> :!4E9l؜"hd]YNȬajbum8bhd,! hv>|w<,3Ǟxg۫ehRB=u~uo?_#SA|rQe\+EZ¢S-~ucc'3KO&l9_5Ӷ\%8C:QʟtAHr?`3LAB`\9܃Nd݄Gpj@80܂ plöF( YL#ٟM#pIG:ym1M_ﺽ[Qy_7~˙?gOh] )1(Sn눥w{Ϻ[TkbY}Fz.Tъ!@KڜeY@ % gQUFU`@ʬ/,km ,w3oTJx|R>[lVƄ&omwbx]ܤ P,Gx*;q j]_b>Dd`k7siBvzmr99Rsq D+pf'2>Yv(y!sʬH00˝N(/S*{?a'K|m< d8ejuEjl dUkd%*+<@3P{[WkSV*`a[3ImqžX`xƖO ߬^d 5iS bFrEC]ziuc]8PQvV汗R%45^wl/>CB?}Pp*Q3D}WX X^'1; 2&MXgNojUmc߅"w !;d#)d;KOܒ@d>L\ $ ~HS@!7chEp:P(SX)ZOaJP1]%¼٪m E AӤǿ v!M q Qw.PX:je7@# 3( a۴o?ݻN{k?{`'m n1lȱ?l1NH)iGqN?>2^~Fug>j^\\š'8+~+1njnbAJll-wA$.~ǭǤrJ uN (A/|pom{XbI v9v͙] 54CΡ Mɳ?s탎<}u=YXJcZ>_w.godOEP}{E*rwzVoO auޅ"ިi9;zޟm46X뺂C8.Y]Ր[WJjVUI%I OώzABpV+͊]Oڔt.D. ޘ4Sm/ޔJ[U+ E.Hk )8?#Ϫ!b@gaRxE#u4Z-=-6^g/}G<9ڲ6KRhdue~,+‚iOZ[īgl'WXDx7سG,-:qѓW`4P z/%X̹ HŎ>$i yː0Gi&1,ZRTeURk :i9 >YY>=0$,줗?.n%gU); eZyi$huw 7G!q,*:s;nҾsk2*3[u +ܡg*7-! +$\M#3"$9[ XrJ~9/ɻ%mvnu)pϥwV:%CKbtoUwnYYF ]O4v+wTGޫ}˵@R9+=WO[,hշ#-n;Qn_ȓό<3X>oK'[%PlγRPNZͩoufF+OmJύn&ɚ=/zȉP¥ {[ש7&K)pjmF>v:񓬅$,*g~VxE¸UL2"b{,*zrYN% B Q)6rK.u2l[m<ϧ ͝I{]}[$>qe!T>9+!W7 q{jUvg-TH%ՒN(ƝZ6gY.?_VpÂ!h!e'0,_E ;@ UPcHVؽYj4wCv i˔^.DZi2٪{=v$Rb ) Ӡ_Ao~*?q-W~Cdp)teP HQĦd-./rZ|%QwQ7Lƒip6ie|RJ-/J\2W )]EfL\Š5&-=]@:LzgKs;B漠^`|YKgPbM _}6F>y~g=Q*4_cV[T&CO6lUuH.IjVHBw!/:|.D@vCS-a$ /N˝pn2ta{^3ڞmht{k*?IxcV_]Tе=cX5)#0p, 6o6mcׇ T\gCoNѭ'܌lvb?>XWdR+bvsG:kQeI7hS[}"KTJWotRV![b=_ L6_-+v/Δ\jx*sg]{>7SK )1h~(3RULҝ v*Rtt&b9 rN0 AN]N<P"NO XAq$T4Mw,7G".gȸv!-_ l_z wMm.bCm Nnjaw.=KEC^뵋"fi&STGӧ/iϪ;9c$AInmԒqEIrs+5mЃ|~ZTġ:[y8Uc%a-=fLvNt uϠ[x d_+V(ޖndZPب6GiQK/I>R*XsXKZ>][3買ъZ]'x#oʊ鵳 S>qBq0a0Ն2zG*aPNK'ѮYE-aTg3BVHб!Y@!DoDNB׃n̴Q GAu0ʣg(e!Fw}mkԵ X)B-ݦg! eϋh"h>fn"H ('Q^?'7n~[5?<.s ƥbYwQQ@zLb QCC5 ) }2+<8]@Y7Mra 9h'E!5EWv^?"L$pa?dS꽷5_=!ϕ~}%!Õ7C'^{|gԐ鉉1˘K$aqrcgf(4=uGL"0vXHW^I1MEPc3\GQ_S9z8n9^U&WlpæPB@H7y&BhcpٖdX]Zi{o;;~\/ro9 fz *LFՠ8sDɐeV-i KF@(7 y7lY FEU@ov(^:WS}FfT?{V"67(Sjw}z<(л\gPĽ AQ6*o7u7/T ۋLq!Xy: ;١=1HSam vz _>p[ DkZz<͈vg% kP+#'[8iPdm&Hlî59Q|?ǪKX)#6.A.Չ:bi(z (agx`ZW+z@+.!kJe3}8DB~ʡ6>76SU\҇:qemfc%pqqNL-/m'pۯzkʑA(#XuHN]6_6uĈQJRKx^w4H.' ܅@ C*EA: k̅)g;WN:'_T6K[W~S߾߽QW͸_p{DI4[Z9ˆU/|nuq2r%(Y1f~^G)Rణ_JqGnYbRkk:jXkqgپ3uNɕ#&O}.g֠سXy?==mG>eVmNSj 5{} 4/xm}-:^8~PQg.5h;)^wAy ^{—qѺf <<sЈ6>Y ]CzD^-2ҭjPz6ma1"Um4F?wQQMXMmf{4zxhCco M}UegkR6a"-x 7o~}gٽ_YO}dÏx}BBy|QvR=LcމUAIxpiC*#iחn@uzGL[z5B$Klp ~DRy3( g& sN#MQ,Miؤhyh0K h5&Tk-ξ.8 ŀR3&Ңzvx.0v'Fxjg]UHҒ! *G&.H\TQl>m/!asA`XhȇegEaߩMEᘞcVV\^6cA*XgOCTr'k>S֎HQ )G.PJ@̗:{KO`]~Cf܏?ґ=H+){_CEy\eaL8[Gkeh;W@l'qP ѝV.N@[*Q{+{Vdw짿y P4( ) j JU3V|r;`V3ՠ$êb6zkRz7zλ8_6)|@o+ ~9 f dA8!:5|y_ٚyiEG2"wW.QSv/-_ݜ:E1MG&RG']+[\~I) EQq=+ 7UL5=f:Mdѝɟg,o)jHЃ>;3[oCP904YXRԶ⩟vt֑z:vY a]w5s/mx`x6j]{uܨJ8vf]hu^Z|yŠ"TS N8^Ҷhi {=Rm3g \\[ɇ\](pއ~}t/ٻ x'G,tj+k3 mm/Nihz?wf >0(h= W]zUB6v}D}crh?bJKS׳26t_^uU{++14:Eȹ+&;"1dz女e^DZڱ66ʕ kGd## fZW=3W7iPKiŕ!0D'UwKz~WK`3VYscBgًs"}fv`֩N_'&k:y: GcNVұkӏe3Hjsg“9?{bO/^Ye#Gm_, x oM#&^LHofJP(Ymd$uMOaje}28vZ7TOP,hZ0 >r#4!hT~ V>p.*J'qa rB7ބ#~1W2éPԧ.IEQP^^B 6."x;߂qb@hX c6%UCk$ K\NXۃB~462aY$D4wC>G24QD5Hu6TʑF&b|]Bdbhu\ڷy]1oiL ܅զEx$K¹V7mffp+uUs}N14U.N;}𸥉m[+x#~#rgs9CQ ǞO.#=|UִdB/?[򎀍9f`}hjGxs M .8ʘnsr.zqX>v?67;C`9k,kcRiP2^s}qE3xjemGHE]4? &RTtPmHz^[LMT]TwɟVLjT3Pk҇wc3U' +z},lߕ*N^r;D qd55{]N`.fe- |#ߜM{\ndRݡ<(;Z(p'$j8l kzjv뛉rfbu壟kIV[;SK~jy32bjTK.v&OTE\4E'l.,Nvlk6˥yVaƍHyA8nC(VyYQ=5SհN+2?3o,Q1-IP) 3mWn}\!@ժEx-Ve6DV-PCsl`j՗ށ7fʽGz6gR;vmΦ,%խ"{KPQu u\8Yֺ8U$odvkL@S #P>;avu.G ?gb-@u\T[J[PbcAc ]3 Il6."xmھ t߇Ơ2vB|9^D'`Y*6/aF)0;0$XaDRi|+RMlg&x_Y4[H'P` Q6j@94K^(2 t(oSA,Nձdb:\ن^s0z4K1kK%`PF5jrGOWk*ȊY6wDs\g܉fN|ɼv\TڽV.>(iḾ\d]?e )FSYIwz֫7iM|i?}kM+׿x%b|o>88u9h0F?5pZunN[Ft?!th5eO@e:"dh3W:Es~(pz_AoB^VK& \` t:QǧTyC!{Cw#|{ɛofx>u'"qUTءQޫsX8p:>4Kw)F􆴚weJ7OK\@Jk{] Jԝv~a2nvw:&&0#0< (iT5]=Ѱ9 ]Aw |i)ơ(9AH'a LGͿ{fr[?Up#C}mٍE[WCi'K-.vо. *Z̯W!^^`R~֑xPl_G w-B6slKuK:~/Jj+C;@s&)ŜJHwF+k{G&ol| KBZYe@[NMQ<:8Xӭ E3Zy Zv.굕K E!~'}K H* De32 F,"j5QFRGTE%|-|鹢oDFIB6V&'z(UF7'# HC|' xN]Iz[$̎ߨ 1^Qqm'R#6`^T(;? [IGPi"v2VrQȤp.iͅ7Ql(.kwJOAXknSf),,,#8@㬄Ě8 D(@ ͞TRVD&p" uȕ ;k}vdp5~F  {e*/OuڊPQ cjo(MFeq.eJ8ySdfEX/ז p -qWO҆YȀ)zL106yڟm\Y--UJc2Z_@{Gv]xJ4["XBġZ]~#5UzEG3g󺿙j}s)dU=vߩl"]r`*ֳO'wxuojK?xˏ Oߚc==V|.351cX b ,ʒȗd =]{zȊҡay=,wi}sWL nb&'xFMm-kw.o7ZPN_Lw&ǿu#KdaG{@Xț hJn"ڊܪ늺tRC2p>z ;xt 33IׂJKu[_ /?#~w?y=}`7^ߍ#=C\4'X"Qݬj)Sa)3of8Qv "hn kIIXY@8L⦉3XˢmfQK 8m۠hn$ YL4rƁ4>ryL$p#ju֬)M/Tu%g̝}>ImA+Gnw+X@R841?c'%ONv?+Reンj kyRvM}w$.}vpW]mH82Вl]ўk޵T42UtHd _ktp?J|փǺL|ЪsCԹժ/UzF:Wl4H6ze:]7/fuuakwCz9^!5\Dm򼎭FdClxsu,|>{ph5ƍiIFJRޫ\7.Xy]sc*n)m}K}#63{"\T)L K]ZѤd~whmQ6Q0G\f[ē[Yo`ϑ5UTQ>znkۻ'8si˻j;NPA'oXU-G-Ng[֞TRbC5 e tl ׫xA>J-LtMdh7gw.L0Y5N\W}R}ecl+i L;;FԆ)Ei@0J!5:w+2ŗPsv@ eTRcu'LOBnyD|sC"JP%qUޅJ~tZL*`N2'1#!Ol>q"8:}bhnXBWf͏98w@gPu0yLch IYj@)qDǐ ը ]i+n(*вtSuGt̉ 6[Q@D+dtE7@.g\@Pʃu0L>"PKdKs[Լ'Oa+dEJh_X^vL.sg{39ɛ"rIɸ<\.!vNxhKmR^ۺAnp;D ?M߸Q- ͘30]6gߝQl a]mֲ+!!g{boLY"[ܜ! ]XuW?PvkXSu5;Mͬf4u#B ;U( GEb7JRILf{~{;Ew`osOJ dػ7V#MGx{qk'{JnKrƠh >t W+݅^Os#x; YB[˪) M%^gz5n[SWUie [} U\1i<]hZ(ێri4eu 04l-IHtF+uDQ9=Ó'qau!&Cw@Wk'!/E4vr)\Хeİɍzs bga] i4=]8o۟ĵ ˆ P[+J!  t'p5\΃'h-(چ_E| !֩V%QsnSCyڛ8,2US?2Yۈ ' {K)FֆܖYZ^@er$hDUaoduف tLdF?*dolkA":3:!p#/b>+a6d|MdtlԩٙM뇅 pB]x,[! 7vVo^7kJCQ=RVAjɅbb ]@dhVxA@;l3a Z]vPԊXp"]% mZ8ٶicyVʺJMM-n7;mw&倃rˋ aK ǡJ߲/=e͵;w}K;|W1;Ea2:b 6ŧw<yx댓9ڪl]Nވ_zӈw'`cu(M#bo%Wl)pXs7' S+aب)5r 0& Rzfpn"W0\vt"!UɅzp7n=Em3sB85ZE`}ġ[]^_l}yh_}nM8U͇@LBcoC4曽QhW= =m3}u}#9|.@L^܇u,PT(6'5"kzW>qkZ  ĩb}qv~.ղ]1{EmiBNaJ0Reh3ۜ#9jZ4X5,шrakR\lYa7}' = ÷@ jhf>'% "(b~5TNaZLYөtb3ZD*cbO! 4 <+EDٝ0Ԋ&a $'!h z~yS(:EٛYRTsm#joeQQݎWAkrDu2v)NuCOn ;D]3W>HڏR\E=NW6W2+ ni$ԠՂh`ƸxEtPzRat'53Ҩ͗1q".<=ODŻ'r730"caE&VXm #겵H^' Eqٴ r@\&k֔ kvaրzB}ohu>{6__*5a X'p:<gBZ8-]m;2lIabvJ]4\&\a"˿aG n X6mn\ZX /#o\R1VH6flsnRl`61VۛVkb 6ӿ27PR8mmumng.gL#OTˍrho=sN\F f}zn`S3GYݶRTee}) NN893S9lC6n3ďEc )48xmlsosb/5&堭E7Ǘ.ܽkQ)@fF.0)Eåf*{f5mo-J+CfQze xBPqLN~PXSS3c]ztF .=9nOԌ<>.umW%#/t08s*JU.~lhup6FIIo?q\ӪjO"4a&X'Ͳ  `irP%S4mVE;3njyy{ۧnH.\5ZqgQ@}#8)  ]A>6r֬(C(A#G܊%ix?"m$.iT"@6HY׉BE=,GRGPW H\&;V@ -~v!> >biF.+ߴ կۍeT$aykZA\%$ڈ Jg۹mBlngnuxĥaE-cZ192EVpOX)F2mNhiebb\L)Eb\PzS8QqrNlCE^poȳ,c60ļ& 'u9s"Rk ȠdžpMn_#3ݭÝ7s~NwիZȫFD\|#,MV&&j,ir(י| պSh~7aRir-l:ò(Vն:Z{-}g,;Pc Tn \2g?yZrTbXS7ozq"֗sp٪m]ѠÖՊZ.yFDj3ppHRMQW׳=HyɧR7%ـZ8RE5 c6!2ht8 ކo:DC_U?"nX^?Xt(C1]$Umwo Z8 G1ѡ4RM,,nËZ-&94 .i9J @l%-U҈Y+ic\Sӆn` ~UR)v 8&R4hh[Cl.h%TD*6ܠtQlk8w|=|x*hBfs بh6PLJ񉹏7;Q?t(vάW&],U+wc{J1Ƅ`P8⮢d2 4u%=l,]p75v|>W?Sm]-}/dPZS\a@r026^9=c! jVdyӄ_"Qp/nJ6(f`$t7tulks̛-*J ezgvK_o;0qfT[m=K)_E5'hY$hz<r5﷉ } BiyZí1٭Kn%@KL_}q'JĬ*u@RV0o+T* EGblQu;v9CV^{ng4E݉i|:p}BiA]by oLzqA9ͨuu(vө)vrz8ć^{'}󒦆BE*DRX [ 7?=Lj!d.T:j]PX8y<(Z3M@X-0ˋwv!"_hE LHB+BEn2D;QbXdaY#|nQX&ȆЮNǬFѾC8'ZU:G,؀,~G{mnuvgj{+/Ơ @G&O I*X,^\BFla1?-v[(&39D#i!0Te G rMR7݃^ 4iePU%g;93i5d4\ITBٌ[Il \wN߽t +BhϚ! QNM5( 5$Hh&L/Hn{<~9Ν=)ىkBlkE](+&4S i}KR5uv++2ES27حS"M6B";.Z+dQDP\(fҥ6Yn\$}fpY*囫w /g޼y)TۻDrRﰻ|$g.ĞO.׶\e{.m/?|fKJ݂ p[K>rgױTrw5x*Sށd*wU^;x9iI0PVHlYXժƖ&NEw/-.팍z #:*R6{wQVci1ys]eh@|㋟ gjKђMZZ[%}{oښq)& ;?N|o].`(U[PCf"Z 8ɯCl0Uz!3R'>FUNoltWXXz>\"pcewo^; V{l|G^?Ri`3mՓ\n MD狕gڏ~yvj%דCJ-ёF49iDVG&Y6uoY:c}4 -栵屳fnw -O4 o7oڛQ{{ۧ67ąߕiT*+Hٳ)zwNz_W 5=Is ޞxIWNLoM=vqxo9'YVd)rHr3M4]rpdn*YΘ.ARvxOwv6 K>_^>}:LOγ6愸ADeK,[-_Yڒ||%˒%D  y'<ӹUs+U )fy`uB'Z/˶Ҧ4}h7[ ];ۺډ\ NoxbZ-VcnPӋG.@ u(}[MGxyv)9x"&g?D ˏ? ζG@ҜfY_I[~\Ǫ'L2sJ`wj-?{ulH{?0`s4isdvPzJvi3;5 EKxaE=+!ju\C9Z#p\Q/qb,YDT== A4|;5L^.vxUo ߨ(gUJQ V~ml2^?<-/.^{4 AHUFcm5E<߿T>P;lJ5Nf#|1[ 2@ߥ)Y]C} ˠF޼#7%pW gH矇 UEMx}FC mhض‚BCG=u򰸐rt7 8t,2$.;A[%*(])]f& 9u\}G#`iU%@F}I+ p+p WN` :4P1;OUsz*Ѐ֖v^5kM9 fi]dh@ %_$rYh!)dfrsO I@&ǼC oTws_86Anޓֆ`JC ^Q0X65(:\U䆀a{P( f u\V 9K%U Xv0W<2?ICFUl@CW{ lzx'ʅls_n=4~KV\À-[c;L84m4:kчα;lk+Wsa0_N zW ǃV+j,Cc>_v|Xi0sWնKv3HsE&|K06w3b2)T,6C?wrozN_6 \yet8>z{S]!W|e4#H/V$QSD_<Y[Q4b'JZepIPF LbUUG{"h?hǃ,j@) nA~bkk@GOA 㰳m{g]}e:7 P&D4 A-``8yaT.D jy"`-)6Gv[EdS`j.r ip KXP"+AY ՃfܳV=TX'+}k+A{YRE F j ߱. < <A**B4:!.Y s:'/T :W X``yEX%O=.MYj`GQ(LgӲ?lZu@NG{?wpD zH5ђid0ܡ+V 0Hjw0##Z kiZuy. ^yi=(pHQɌz\uJY %E괾=NCJHO*Qn$)<8ZϛM&D,ALiC4Ǧ3&zpUG,zƯ/x>Nᗾ@`g%ɽFiifs{g'~h~UEk_årr.n @Rb\c<֋hurqY_U`dut8fUYzbK6; tJamۦf@E lA3٨CiS_*u^ޙ-nS+W6fPv[?OYGđ͜^G:x5uX kD 9 טCl~ln^N䛉ws" =}k[d<,}fT+AF I5ahƳy[3edmȩEY*"!nr5n3k++px}kisbX "a+n5ofn%)IEV^ޢ[驖 ggP{±`"ժM̢G1{0)G HrC C%9BA.#g?@O?}q{y{/ ލ;k5 \vCj%P0. *r $$ݬєJc0Qs< yˣfn~FS w/|sen+CM2(9et1Asn> kļ7< MAm,LH@XNvP<;?=;#`۶`}X31Z) jas2{K9}ow[?^D@!Xt竰y LNd7a[I8D@y= sÀmPKH> a>uP`2,dF[JjKW\xZXjl;eDErFpOK#744G͛g?}tcefC4L|HT@FfX ɚ,w.s@% [@v\B,ͺ`~ ş{n\AObjkjf~۶-.Uˊȧ^ezI=8x~j}I=?f;8z:껖$g,>+HT\Əhgm쯓K.Qa3It1 jw2υ;N,f Ŗr0w 7H6&6fX7pm{|A{ouVe.[VLň_}{ʵv|Sxy=ͥ;;  wtc];`gSwqEm%(5Y/ohLkc{e!GtWW.LVS=+tDC -o[)Ѕ tK9զͮgl_N\;*Oc{gV#Ai՞ W &0{asr;S?xR M"cc ޟ| 6'pb$[RyfqҀZx +Hd0~WִJ[3h[X?LbW0#?gbQz @'46;| U3k?smmV# ( vp`D83o4J1x(*0AsX XBA?ܾϸ4jaAAVkmTWH6}*쀀'wa2$as}pe |YSS(0͟4<QS"Hh$ꄀ`l`֬tE#Cj Ag? ,778]Bx%Iht3*ulE a´'-Ȼ#zb)!50p!wŠ!(0co >Cf1@ȍqC>^os{k/_2Kͭo<%2&VK#$Jf+Au'Y\/f6[+ՆL6fKy%F#+U``5$d6Kv72pZJi6jfEûryaPa -U/IG||$GEteu:ERiEUAvo,[Rm;s>R{%՛on&^3łzFNrnJa`)b,i oP$!ٽMZ:m4*JXɗʁH1ӎVקo׶\~64K{⓽ 5,5b+t]nb|KB_}ua[+mHGpWe<9Ovǫ;ޡ3?O>{F޼?<촉{a e)nJPHD ۗncHH@uۂXrP_aq|a>r1&9H-HzO[/CBv R{d-9E]?sݷ߿U(m3)8yn]I>ڶymI) tz)bn Iӣw`;D=xm}XF tU kQd lh]]`iQ?n%-<%bBߛ,SMf ,gUP:3g_x;5 bpu6X?yeް22ES=o_n(I 2fV$'s)#!ÛV'˲ 6i=v;vBbhl*'ukUsȹ]dۏU\D!Zn%SyFB>Y"58lvB[_5{|;:4s1mU3((M>ϦG5T%pZ :9" Q 1Cz$-M;O]}ӆD|i>n7kf?W{rBuzXgߓd4*^XJYH}p` hVgRo't3 UH[u̓tt sBJB"ޯ÷&d㉊*R(b|iR)dҥ8D) |@ p=[`"}@T(x5̆ #7-FSfymlIW9y=˅@F ;nyY}) &i RT6݈_[ūC i ڌ5ce[Z&,@6mYEXp$G8ņ&H&P(%Kx[ANJ6f6MT B}#(VShZ[c@rZ kzZ=JLgTjH_pS5!4ut$}o0굦(69(IM8ƚiMT8^rɚ?Yuop-}`2 jZć_}aq-}S! ~۩c{.977q[{*"FJڢmtX&p}m9C vlڻƥ{vw|j .efD:}](c;$>d AQ ˗ZRjÍ hlͦk@ʭ[`0T*osUf*&:)U:LW7?'~wt @Rޡ^x*%h R uA>L{*J'@y% @T6vxBDLwlpS")l->u=x.2|Z]W-_7or`˘oH]y⫄nvSwbvb _@7{V\TRBw Ւ'_27j~_esm묶fTi뭽g{,O3OK>r<_,< VM[(ry(eGP~ ?L bcVeuG{-X6ȅٱ+xz2_/F (NJD|1-^:ŭ}T\̦!~0rXՍ掉wQdOM5_ć]߮Z;#7S}}s{bsq^h l fF+;{MI'i_hMyVӷzB)_Uhb>a4Ӏm52w.Dž$B!BݻZ,MR`xʐq尙VWˠI%A"iO- $5o ;7a#%Эƈ1 uEY Y"U"2*|٤P)"QB3n!o]#-1Jc,F$E`3 Vg;'{NMIJ",3nf`a`]ԛ <}6/Jȡ{by3GOʋd%<}dj-ޯLݻʚIGako,c=Pa[200!* 2$@eZ:`ޜq?QͼHZ-! LS`f: t[W%Ԋ NX f7 ȎL ;]ȴwv&*#;RހbڭmeC3UUR W#t8"kyduP3li?bFKjJ ȃw0Nutx+`";'@rYk:WA!&wKgPvw$`BT}=fnm0fA7K,D*y10VlI~3$o4ȭo>}gj٦*3b#.f@cxAe}MꄙVTJ uFgzB:c]|=71vv>7 ,/trMVZUƵg_] vXHw,ݽ3gQ{. M'N>smAkܰ۝[7eNyddSLfN/ܤسWF=H/={ ۶~{m/ǍҌ{ؖ[S==ݩs*ߐU 4j.k/,xp>RD_KLķ%Uso`\!{b3w4\V8 m6\BbN>a1*HokTMI޿^ _5Ve Zo0]R hylk[ntgF,8-݁L/ɶج:T:(fu" @{ևQQ˦A4g)}TdRF/ !)VFGl!A9?x/_߿k;Sg冒Ja%jO==\/HkUw3ճ O l@`Hnř[^N4hM ,.ޙ}KC񝻟8JZS\za m0W, xkɥ{'>2:o:#fup F'c w&oZ"h:Ɏ9wo}._۽Ztn3X+l-LD:m4Y>wH,Eꎭnj lQ&lh 䚫N<L/KEY$W~́B5mTThuF(~0MdM\E(_̭&zmmm9!DOB &3A i '"%Q EIlqlPK&^gr6b M<U>JNV7^whc L/a= bB`.s w)ߴl?/2'Cra]-Xhnh#!apr.ylSH4U qxh a@R0a `+ Ki~V^&ىF{|. c[ #%P@+`,oa5]z`.w \-3 S "kC]hc_p'лN8Y#CK ztvͲ"` K]kD~q׾j,-8G/ss7 ˫Y~'n\jJk혛uGX>XeVVI *GW,NW,/6>#SA1)lyĂҀl`)UmT`VB m26o; _PʫFRWVNCVCL2VRlZMd!Q*#Ӕ5刼q'}`G'" *u|5YD 1nRp}r*ENq]5kZLv ) ڵ af'Cz;PDJY߸Q0k_0 ^}KS:3ʄvEx|G(] 6+"EfSpVyR 5SAЂ+NbP-Y Zz]NE°E(]П(lLtY@lR(L;{53݃riH gIր&@n{\i&{]Ni¶*msD6 q$/c<^ЋFkTЦo8UXy*0/uڍ7jba/57˕YP\*e|r(2XR-24&#C"5F+J8uhԶ8Ծ[7=.etxjrYW?d5[A,z,)z M)d&lJ9J,PEzDd8{\> EWί +d_)$7%^9:ܦX)6j3HBѕI+=IUrXJkV  zǦޛo"uIڴ668B槞>vm%aw.+V=Ҿ022D" LKL$#F7zFɦq"NX4E(ټc/[*@-%#?"9\ƹK$kaHzmpX SkbծZ |RX9|*0(mAѡ.,Lkˋl)V|MTHj|Bc}6n ٮ_)`:hEeA%DNzȻo\P |R[xAʒq/dYRUHUFZ'.;wu2jVC4(; GkEi]ݠQ6 0UXi jz {}R 8)U=ꃫgGrB .=qAa6j<@۷H?c{w[υ-Y,VV^oc4&2Y T);@%X" *JN=SזALaa1`T:j!(V90@M|Y.H7ٴ4ڶhɨli1:&ꀩx65 ("rU׿.n 2)0%vGl/X]*fkkTbssSO5\NH":l};Qτk\C 3h2kb:-: hP*gm` ]J@"D(f0ɂr(U ,ME\ 0 EeGHC#mtB$8aomof)оXGͯVuLvOpFtEe `mL8ںm0&yJի! dx"M7ZjU^O 4Vh~w 6Wm!ӽ/0>?&ׂԫCٶ,Yj,j%_y yݙjռ{#OzW[9zrh2nd8b8{{ Oȃ/BoDu Xg{ y:w^~ݷlMr4eEj9nvycȡO@ŵ~9/-Ck)2ľgjZ"_0HC*9P4_V3Ĵ'%)Ʈ\wL%ov`sVNց"B H Ɵ ( [ Uw|~WhVd6K Xo/Ub[ i%⽤4ꚉ;Ik rLNDjm[e2D{ƈ61%-% v+T 4Z]̤RK˨YU&X:4QC6E;ExRk ڮ= !_\AqC@Q`9/Q5Iº:gxdDE)&0\y<`{(%T#7X,3==W52|,o݌[:Joz^a U4dLݷ>[|c&'O b`H^d9hf4+0}bbp/PTY ݐb,AgJ2)0}́V[H$@mMXA `o/|F Хr6檏}0=?~nJC* qf$boYN{*%kP IgA ƩR衋InDz<!B!44 t#hm.WAC 6-Z0p]8xNCa2Met5Yn]LvsB8|랴}s.8usb?EeŤ E=bCo.P:Qj{#Xfo^hzy9{2zɗz_$=GO٫"_mTNKfGH8m7sqJh -JGzśjrIzXz/α7\ch%ڰ63 p|B7X%ɋ+bwF[VYeeuX#G7t44>c4퍷_⟝~gx`v`/]CfMBm )Wr.5jQcj9vfq\y?}̾!ظ-tÉu6sǁ>$ ^U 5Grujwj+zbfo:wfnjAQ7LL E u}8{"3w䬖ėtgU rLn6'DȒWm C[Sͥ'@5Q~2UG)lwr̾ie J16U[,G7$-䬣L ĬA w7Lwkc!t\ܝI9G& mljD]? 8aw{ C2`ڀ`e=vyZqZHBj;QWNp$H?^Z3 m7L\ 1OB>2 Cw}r 47IΟ>*<E JL~;;pH``Ʋ ,`B3܇7b]IP0vX) ~dfnw?7oug{_ {LC;?Oau}Cj^>ַTV^njlXȞ{Fٺ{xdvV lچFgfwV@MIS _U\ G+Eq lT0;k7d.Yë^[oV޶T!L'Wk5CKD0>Pm_xo_^ Ы|WO5nڏ\ٙCFYF;zC0l~- f@[iBۈv Wՙ E ogsjZ)j m]s4<[ HteHZٜn&e+sM,0[^@v6@d? !uBCQPN۷a}_@HmUZ6\\w}™' ʻk^;~_(?V!@F#;^`sBJ#_EC@HfOP8rU7jaG]ԏ&"ҏ7M4Ys pAwЁ0,܅U 虂 k>ƨp@enI2k?u&;Į*7s3_B$C-$; y0 Put3h*rW(X(tMqP,J9\(O vpKC f[vITHПpG[@N moi_8c} c#Z߶-07m^bəGOkg߆G[,F}ժ lekU#' 8xUܾmEڃY):>6jUT<OŊ/.]z}kr'Шfh#6)TE2Ih@ʦ;9|F'Z501 ['Hِ %Rx8َ_:tL*uLdi[F5,*Vh8Mn~p# ,ϯb,j0 414oԑ[j30u0x0ޗ[[?o{Tz/vdeuSQ +r8>tV XV 4YkGx]})LO˪O֪Z4J^c&R4됄O15ҝ7dӴ0I2!bqK|Ԭ9^R;z+Z8\ٔ~j` q/4ENîm;vv=O̔}Yʫ+K$Ӻ6%-4ȣ(V:au4IMRꝫ;'_fGt?& v޻V4+dYB{w ;q$  = tUp"Ѯ).]#mj-exfv>_}>+;[ɦ%qݴށ$`r߹'1SrJ(J׫m.i(;E!w0;I}SMQ^} [u53I6ʶly鳯\?r3l-:Uآ!XYuJчJ7h\lgrk@{68mEŬR}ϣF%xG#M6o -H̝|CTu/5g'JĕI66M7ֶC1wȞqMU"UYIg=sc;?D)4.\Yۉ!?d^iewO=J.4-+bs(4_܌y`ҕʚ[&ǔ!`ڍ=j oc3=@ZuӉ;PFy` *;8wP8jB0-ukUeTv$by<4' aCBu1X`*HH : T 054>ɵV4땢:۸k6hE [RCu>W5)ΆS[^+gT( W"6V"zǜB~ a r7MV+i;MS.wDKqw!^&ЛU[ráh芕Ib}'-⤬Xb1vP4JÑ$xaI`H*Ͷ) v&g.-n,Skxb\KށQYjT¿m㦈;Dw!G?3;!U[&D28]fk,{3u EF$Ik0a8/=Q%zKS=$ޤT)]Av{QY.ٱn"[ә rG_WFC]2˱z<ٌStgrNbcqp-oO_5ÅkQvEQC,ް"IZ !i,hTt"<*_,@|*Vop0NKgH(Iz5-&GSϬo^YZw +z(f6͈Yឝ07p}yd'UMR£txfPmo:֌HjՁX祷G;?/ Z񅠮,xCaaU)9CA2QznBY21ЬzڰQoZ,A+ݑj`+m:1hN阿RV"iR QѨ? $zEJJ%xb:ILɢcIawGUr‹e2uvDE&53vsT bi5 Ϥخ[?$_DgQ Yϲh#56{dug VllS9WUt: @"XU69wc] g-4 Pj(  zbqs΍.g,_WÓh#z{WE3o3732Qgt}e ~ XA N)FXAcc瘰U0@sEk/@ Z<1P MWgzqW |#_obf ƗEN5-Ӕr } NRpU{9;O~]z+7Żx?̆s<4nruةx3BV f__gIx`GTPBF? w-pwQq800[_yhh ,̸>O:rˍ!dT:PaډN"R 菪>@la#F0TܳP +7CiBpDPrdafs&J+ݼˢؔEYv,?hla(Dipgc`R$`c$lVV3}Єk>.6::[u\A% > =up +.ХjKŠf}ٷ$6p 7 `iҀc|})?kY]ڃړ^wÂz-"Os*$mQj6K2v Wܢ FmGv P$Kvb!q16,8V S0Gx}Gy#~EU j崛UF^OB,do_}ʭp{(##; 9[n]S͖RӴ=02 0tUǥ홻F"yUa ok7.c&<F\o8kګkyXQa%ٟ{r.yk/豕m d"C~01Z-Sv"G6. `Kr7SڦnCdS)ͦCR&nP8~de!9W}=oyO>~?xKKvv !}%x֨.jwՀ!{UM`ӬXZ&3bß6AZHPt qd ! Œ ayeg|(m;72vmI&o$s zkԫZb%Wnť~Lݽl6Qǀpy%'gcdlm橲8 q ='h {80Ԫ#@ s'!P@Y pO\nT.V|'tW1" ۵6dHhC۠Y"XCRx1ϦxZb??X6/8cDugŏݘ63l- {kb ߙG!u~i//sǘ ʡ }xjx7E5wv, @ap bM 1HbpG:6@ 7Ǟ]59t%5T]%(n!84L0"']zb%YOu0 Z7^园VUI_ αs-$2P88*̃ʖs`˛"\MLHkr!R젟Pu`I\+P#v1b37*WҮyb]k7kh֥Wf%%Vt<tڦwm|/n}7b7G;sixJmgksLt+Sj3vOݨ:=D褦$j*a08{swT,Ҵch+DQe8zc0Lk4qzF/. gK͖@%$?ß}O41|,q퇞ݟq"6dV6RʗX(BJvygggzNmo^Q0wh,3FG嬯u#MٝpgR V6z%κ oG^uaML7*Èk"E 1av/ݨjrI0g:~,VveGFbشm4zptgMl7Lu*(A tQrE1!A벾uJ2تF{W Jk\f}.^im4]R@"`beC ;h馍)Fܺ-ZRI!aE"%oQ٬`%;#H[aUicwd'poi)ʰN(~fp-1˫@9>Anvt{GpMMJOl}D@ GB T]nԝnQJ!$`[mKCJUTd46T*gN\ Z_@㞹{4B]p>5ykNV`OTkK(p+.sb$wX/k쿉:bk¨c2ɤ}ľ?:>x O`TJ{=uBr n^2qKο8<Ν4t}G_[rEZ?kDhп9'[`\|!bO˺"EvPtp4mS;1xd \dmY  Ld-qp8nj3S?tRsmO}uI }onZ/nn!xĊ})wSD#.=Tg [j`93wCG -U.4˃N[BB4gY-iӬf#W(8}zqIS7 tMTzhLT4 E2p `9Is$apWv:<ӨфOU0T8X^۟Z[-tYZ[S>k_i:eoU6Y[o&yP̟xB+&_++ ` {@`Jسvcj536v)DfR?2B1r1_`^66`mE'Ie.  UJ8΂q@(Nľ;o}fJۢc{/.JUpLdh"(GJI ȲQg?X3iFe-L+\x tSHsk۰tX)׽|56-'UQ?q`;nID~+􎌍_f#qجZ ā EqY]3Y:4nxזW76G!g]K$դ1L%G:$Ey4j͸)zI㒄$G!zЁ/xL,u0*jk%C/=6JjM}oJ1T6o֩GF\/r,0[ IH )k-했 BYRIɰ|!wLw0(Myu_mGc(QT֔P-I%>e&2[ zcJcOEek?]"d)ĺ:ߚtw/rww.Uv]'IŵVXX=k7N:2l^_34wdQ)'受?`b2mP<~MfM1Z  t"aoQ4JfbA-Gvʩݴ˄'@!Қ?vf'VŲcӇ^X-q2B~Cj,GOvOqp[ntwE'z{X%.L< RjC4E;:hh3Wgoǎei9vd4G@qx{a}{ f\Aqh9am[n]4cYЄb•K0q#0C@Bs#r/"ahҒ8Ay}PoSaNDg3,4>BYV(;SGߴz8!A0Fw&krh8 'Vϰg3/4Q}u ҮT Z*O( H1j0Ri$ڠo5+&;ig [/7dW Zi+2es#3=Hp^2q#4% }12BQDXcEnJ,`V  ZԷ@( 5lj܆Y-bH7FBU}g`hhoA:!E6t# 哮T~*t#?<,#!xϝo/Ѿ}Yn||0fJ^iZT@n= R&xySPl -],:|w9gNSK@Yz09\vg6g"I0CL")i -˶m]ז-gږ-[d[WrH" &D" szsWz]N]bT<>g|p@d(_GS?yόleCpl4':XZu~oÈ]A?`40-pԕ9M&_l+͑a;XLHe]}BK҃ncAMH; $LytX( nΨ0ĆNp 3+NkHOڊE>Pț*(n0 hG喦]OTMƮ n;J<1D*6`*'brGa  nwvQs#دPup1 tOo|F3hG0S9fjډL9+\vc5PTtl(LvGðnX}x&fqXm]2 r<U8Hz~.sYbs9;T327_gy[ ׿:yg6V6nF5vڅy|vTޞ?ѝ#gVE <@&VA7M>^*FulV0l< x4p zFCnp{Juu~놎j8v(kV60>lg*ŧMLUk`j1B/9`i q>lSW>WW|/|rz޾[l xVt4sT{ 9qFk}ԅʜ Hk?'FK'5P\io1tv5갳[P kJYLwV@0fyHoV_Dps&:PQtYHR(@g4/"?=Mʄ, 6\.p Sv&u7jas~V4RnvV "{U qfI1ƶ;Tox|k DƸh8f|<5wz?z3<p>l4s3`44L[ښZȋbf|eU4 AeJaz%>P ł(75zY,,nlK?z2&BExwwޜzSߺ85۷{똇ÞtVs,:~8JV)JB_ xls<ljyr<,ڈuH f&Ξ<ё+/-F3 iN׽>bl1l,I{ VZc)74\~oo*IF<[u9c9k`۔n=|`+}{2SBmlAvViy絹?yLwUmO _y}nx"gҹqYH\Dp굙R<~䎻ts3(o}PV&jr;>fviy!f5@o^ԢlV=h`7{N/Jh9&}-k찯,)NS%:r4;vꖃ@FOE1+ӣYTwR覗?T-K u%:0Zԛ_h5i]SVm5M˥wmV>4JNnzIF}Rw/ шXQxə~ۯ$2ЁV.ppmdLG#@C"c h ukY3?oDgeYFCR!Ewo^㎾',>v(Jp7&,$XqKBTLH'QvQNVӁHa.Dݛu&EjϽIg񰌈HӀYGC,|Muv@QX)܁TBo?n2V+? s^x`9޻Ҿ84T8X/A`/sr|pݸvϜS7xޮf89歋}(VئG%vN|/|r Uv ;^2R=gnĽVLJFJ{Nucj?'ݗ^00<͕XgXcW UTLCLg|OOz3ybd@a|FmDCmOQݬBSW2Qڭg?"#^?t1PkϡW߾ '0w.j1w_ d٫o%ZYsS6(ZE37UIv-H>gݼ6Y}7|KT' ww>RuF.bV&C>-*vqFt\"2 ,P" 3K!44qVwzFZc=w DR)}*!8KF.>wwJ%X^R- j #|B&@@eӱH\ƚrf^wUHG`]S~we<2)3s2wt[퀙]Mɢ7k'0bۈ|&: 4K$=^Jb;k5{~U -A70)DS?(7:S+13ϡCjp{,Z H!)LaK%{4%pm֗V 5i hY<ߏ,@ ?痍XQE)ݼ:W?{2o|s;Xā[?z OuKQ" kvuK/d}*Zpю=o3%.Q`l&jYͭFSO :rj 敡à)޽?2hA6~6&tUkוŷyyh/qۉ_eW~Z8vkb# o>[?5?ݐ("~unԽ~ ѵ^C"qNH)VSMt}J+$ix4yic+ÄmPk91TZs|^VgwBVѭN|'piuA(bKD#r;)' G4Pr4ChF|ʼnL:MJs@Yc[$u,!N[6O?t6> ߉aZ';~쁏=?;&R 67JN8,פ)Gi3>%<vu?:n&豵٭Z y)0;2nCZ\^.tWkq}l?6++,GGr)besrh+-u|/6ԟݩw.ɷx ZDbke:]r3ՍnNu6t GRA39~}V4R=Lq9|IMh·5@4z[2VAWm"k%,1_ [U5Nye+dtNZ3TwtBBv|BlI4P,אa8kNWYu *4٠*\m1ڱՌ$.թ]|`2N~TG^N7RD9z(56lQD`2hZGHu~oJuL]}?zGmӃc†c&ayҞ˦BPMazi#/FQy[ Ա Qj8 B}]JG? yd KU& b.66{I Fj&/9|pY9Mft416fўX3ĨotPdKzK<2ӟ]+wVߗ׀[gb\Ů`0%{D޽n%[6,0렮T!.K@T̯hX*ʵW/LQ?~f+=ח3/<ШpM4;vV J-giԇoP= f[t=RK ݥl5HuysYryL$jjZf2^(R>gUpBYPhKbƇpx~ɽo4ݙp]|P>=:zZ۔71LLĬޙ1[&KDc,~b1i;N-rlbaAr)2wd ,d| EcJ`) z#uNo}pUT)nchs?8XG|Xye"*- >[+hޔ6 5X)j l;++;皥m L͟muvՊy'28xsc/6ѹۻVچ9}nv^B.4MPxmށڅ'tV'F b@ [X>gZ.*z(ݠN0 jLvj)T92_=>7 B~۴Ycs(_C'`x{ Wp`k1i|աh6A}Go}3p-]|J V^ُOb!{Ѯ~w[w?5_'B:i UhhcxʇTهp#] oSײ ėݸ9U px(.Q1yb-zS_ bKڲNpU!fd}ŏ1/ +vBN~>w!F@yf1CQK'51=|׿w/J ڥ|)P$W;Hct$hY58AJeMAu |w79HP(89.]G7$=0<~@-ULzaz}0,blF 0$dzL%X,;ǒU|dǢi=wHFd͒*W~vB9e˶U\=CN}}}ꋿy';zxAR%a:Vܖ=j(q֨M =LeU6pZWJ5xX-c|Fj*حt5?gz=zw=@ꟙ/RVSf$?뿼x| cJY?zrϕe#k*GN5{[zw/70XR yMQN 2SYgqT:f b):̆Yjt~AJ,L`A @ب16v:% MJ熽jv**p•%YS mIM vt(,n@#@?`erNYQ.0hv`ap=}[8G~޵aW՞@q41kB蟼d ~eĂQCӭ qW(>Imթ[0~[ԕ:+K잣5uμs"{n_oW'zO~}!ٺ^6>bz]՛lSpl2pЄK'&(R^m J6PGӺ`@7frV:zk!AZӝ&xΓuȃ/Fq ca:H{(bw藯XC h/,`107j$k{5)4d]~ w,H$a>Gp*{$MW0[^u(wc=]45H2f(H9MLˑK.q C.O 6RI"dX""1d2,)ҔO#i\Kش8!qrfLl$ȍH[ DYwScf֛zjXBdbqe@'>8m-YLGꍲTŸU#\|`oaEo Zv"be[ =;'*5ɔ-eGϳYZ5 ta0$Яu8vpʅ[v85o&]jfyc,,ÄSJ4kYrm>qΝʌ\7!Y*ńV虞JAn,?H7  +RAyUsXaQałȞc]+/tk D:=7'JqF?Ӝ p_=*-]1gO,]LPR1HثH![w<"=7rPIMDިK7fIO]wfM-p eDDSUWM[ Ie(3w=ӆ^D8W]>j;jE~.bđXP"@]'&&mDUB8j5,] X6?p@j.–HS il$Vo5ts[?rXi0HT=/{[=A Υխ,Ǎ?7gXO?݃Ҽ{uH񑢲aV|]ӷJcՄ8A]ol^}UG2VV3Z{zyih(\IJ]z"ePPRyݽBlV+ rŒ&f^[bʺ? f-_!c-[Vft՚E`~>vbRm,'e4UזXܖK^?%r 63yC0iYVd!x%;1 _v$!-Y5m]~rmɚݲ4,"'02 /?l/hf])Q̖)1"1P VU7^pT@J# ,xX#=竇벉G:OX1HvU;]{Ƌ*' 1ݬ08& yL~Tl7ڤw&&|qhkT"\,`s"}AB10.8XEkmP\\2 q+kYZY 8[4c%#h@QC^q^ ZIy:j].5uS7Z>ok oOe aoo[Y:^' g;{IߟW((m y@%ʈ`jDexOL&2}XtdBSoϟ_}t`8뿖Dz^d8uvFl5Id YU>n,/'>KoL:9:a7`]dItVOZ~6^L:-Y";&=kb'6rn÷wÕF &|n Xls"݃6pKm#Ry:㢱!M0( ~a0r|ZDKr`~!E< . Be[TBJqnn@Sj -f1,貔}&{w#`[/7$x2t:la( 6*>/u/mv]5Cu ]'>H>K!{︷yxLdKeR~h, WX›J^w`G!VmnM<^0#A$aIv*Htw:{($CvYshNzaan4x9TR@~{<OcKAKCz35YE" D\Lmfwo#)bhP?siOU[2Gt`lO W}>lnSX <حZzͽ w:g?<<QtsJ@<?:ߜtVcw"Wp3!wG޶Q+p܂؎-O'ϘמCg)iSMj+$8tm ]-[@i/:uU_tnK1FQ=ǀ;[Yj^0 ,U 5dK`cd(wrA7 ++UPkpHqnǡ[`)fWFw_x|G =W.P.FezE5 ZJ=b(m3DZ,XfaudpPM'ۗ-4A7f؍mP0 M75LfM6 YUaMoL4teқ}Ul/G/e:M1Bt d;!4״M,eY:؞9Mb2׽- y $patqv ԺTOؼ7e:;EͱFN5+`.VQݨ)T=r"Ͽx F[z3 VX#S@t}RG}Щze{yq-JٺZW^o\$,1dɊ9(˹((!$sVAcY|'(Nx_2I+وL[DS;p['œi߱u&'t]Uc[ FjP5_ՒMiuꪌVɊC|:]|]êS/V[svxS4M_ Tҽ).=Xn9 &Jz0fZi083d\gLz%FFm 9g|k1'kސX-m#Re >Z֭}#`Gmd!?d bY4%0&ex]`+AS,gN4s[UeMrKZR#q*wy]Y/; ĢBl1nͪmYvgc2y׉S'צ7ۺðrcy~p>\4?>۩_Lecz|3}l>{0.Cw*BFV=c]SG*[kZ\S2c . 6o(r JiB.03dfS8F@o,֠ I=~PH="=ȡ3ҌvC ] I h  hg?y../>}ooeV\6e[酗5J@;$*2"#6ƭ|sf]?UK}===Fa3 tz-wϩ/:wϧ@|Vv?bk Iv-Etz.:>H#-1wtmk#!8"* R@3YijyR6 , 0eI4dD؂]CԸcU)YoHĂ \ +?5٠Cj|/]8qq;UߐӺxc1~tv0;+ɭm.Ϯ}Ե)}򝏜ڌwxrY5)U RtLV ,Qe\"w'^Qg֚ebqIچmwJ"jѻ} ޶>޴@Ag8y C zWs.Xg/g{] E,܁oc/fX#R,F`!KE'Z$˟,ikᑆ̯r&`J2uŦjXOeH 6Nf0*$t|=|,6V@3.lʒ)THQ %vlD\clq8pڗbaiY4U]ǨVMIL:5o)RJ.wK2nJ+n=wSnj2WcSsJP`9toޔ/Zlb1Yzsg_yJ5K),)]]Ɩv.5tuVrG嶁a[Tb=FS+4Xb ohven*)Ji[R*apV^k4_ aλc[?ui*QkP8-QOGk|1VH:!$%K%C [v;5 _4C\8tzp%χC|1o.`rì-D_0.+pϧaBz!>CJI o1XcٔP#5 #B]GInuXV+d+p% |td LNB R)1qГ:u~}M?\{`|)Cra?4{hth)v+1qƺ"]5Q P.Yi1FbG>Ho^J !ϢOY;0汿U; eȘt4WQu "E+C; #V\-@h{kzԚ(u!_2KӼ1>ir.Kz쀏/圮K-SypƶJAogڕ<'1+rM Ӣ0">[FHzUCVdUЪC ~q10mtFwՋ}t؍Q!#$EH(Dbc+6ܢ(M<YWzcHwl|ffjdS)Ih1Ա B'R,e /2$Ӵ?bmʺlXf[k|IEWUۑ5YV[7%e$PMe1B8vn05E3418'4@1oX!6fzCοblQ7y{!We;AHF}{3e69Y^-`[uc˓z{-Y!CpA},u r}ؿ6ƌ8G?r6f64Gd憆h& ,̷qtŎDcj$Z[t;=;= ( k6EӜ+LEIC$ n낛.6da FqX~urSVUML-Yn;0:|1*Gl47 Vh]QL7LS:©((v:_Нf\?kBw%Kd灞^ d@ϡR м:jZ.2ɉڥˤz ,mo ҂Zj^1ǺS*>@/X@ A hFbtrh M87}'Áa$y(F* W6P H6, w>Wwwu*Kf0ݷZvӟE8^mYkn`=cV4ڣbC/G8_nN:z?k,kiU}Aw7DgS0I2:&⋩ƁGa 71v?|QRl/|-+K10:ê'xo/ZTlbbH@rLKl":)a>I^j<Qxx^0`v9~3U5Pe kҹfk0Jm7=ۻR]|(aQ[#qѢV淎 َ`$#Meq]V^_ A$9@)Rd%ZK;,{yqۖ%[$%ʤ(1S$AHԍι|sɃnVw9l/V- 3{򣷡7;M>.;q4޻՞*oֵu &9:2%1@,Vg/ @yĦ}t좾jOS~Ea42-hNKh1aznOE"1%&ͧ [ [fn.9xp#|[Un .qL*F;bO;Fx@nJO~ԻD<c qݦ7SK8DZPn, q3,J-C4UھIb7G9 iXhOUV@/ ouZzc$!ɮ-{.+oG ߅o11jXh綱@Ыv_߼sSlV)sirfh7ҠF:j\:Љ,NH7 ,ʳڕރHG)M 'sÉ=slPWx%筅e\) E-K U9\ [Сɻ]'F>St'B5}5PWWf2#SY_Ot]ڼ`ez ̀=OZn21V8Spfm~ιֲ67ӛBE^j sy FإrK7ΜZu#H&'VCDCDwVo3ihz9T?ѕK3;:6 bsM6oյc[ @ȷWN!4\.z4EԦF@c KkNȀ!ID)@xYUE ʂH0/Id%q2%Qŀ*[g[A Ӓ~GT`@yDlߢQETOȰ #ߴvkkE(],gmG=@IwA :!#x}qDyku;}2U,0^"0n B `bX ehC=:GC^vC]~\=hezrd4WV˽)Ib# 7OWZ(fgFgK{ū }k5kܺvݟ?Z͢8 ٥.i&C97~7d.815'iSu͠8ttr9xjobzvutL={Y^)>zN%ĺ]Jp?~WBm1Їl!ן;F]XrOGm4~J(ܯz}͞x-Molڗ2VHg03<GL8xǕAZ"Jj0;-uW! {z!MjU>?\Vk~SNyZ8 #S8]=a42)6;o[aa@ (fmFM׫ѴM,e HX1Â򀡂mǜr(PabZ0& pԢJѐ,B qmЂ_pBt= ,56FCXσ>@OlW!)ET"Ypm <8ΥFeuGraŷw|>5697EsĈݷpY3_ Qo正w+ϹN $qh5\gFYZ& ^twLl^\ ZQǥMHmѭq n5a1/bfzt^a!pfjʆ7jbfY7[F5BK/0a5| gmfz&i PfցQ҂p}*snZOWz *Ztԇ K<@9 @y8!гg͏}nRo-?{U/g6@&97Tڶ_f;+4DGom~ƾՕdS-_)}`$囅N*& @r&Vk\ٮ}ŒՏyψήuSoebNc1RDG볳}fpwpECd b1T4G:oWoyXbJ9]%b,u(⾁P&kPQ0uS&pzP.*`{}aid1at\djCM\-bAmͩ'Z+s # ϡ \]@Rȴ]GmB3%Tkn xf:t{Ti=D>s]>C>pSZhqߧOk1>MtylϢkxlLk$\=.Ěh nz' m\vҙ7pk{h_{⋍,CY\{Vm,1=/خ3+$:nW|•+VkP](%84p?-=D1'?r2 E$N*8&]7|s:u_wȣsN.g:vaFrk浭;;Go< 'e+#l/(1/vppYgbe*'ҫ(n}'ߓR%J EҙP`ByrЬ'( vC=xc뒽wrW˩Lq"!)YZ3K.zZ((b_Y6h3D^?o%@֨oA3>\Yi<ɌH3.AACbh̋D`$jFѼRG"5-$=u/p&Ʊԋf5c hrY4]}5QogN [&V"f#DLd˂I|{aU ,2c& ,U% 4IJȤgwNpϝFNgzbIӚև1 VZ#-b +xwpF1U[^('B7 _^V$2z ;U})MbfWVZ-~|,9oh6knB #<8b}hPS%ނ9٬I-deUiPUɱq浖aAduC@!dEYvAU0b:2luu%7@Gv-Ĝx@P, { K[>&Ϫ$ξ}GY4܏ovRQf+?CU,Gf_#H/NT&'?3$eC@KҰQ' xLc|AA68,Cp0FlybT9\w@`\L*GjڜN G<ɾZ זqlw#@b5,u1EVIs??lQ#u fBfPBbKѪ~L@pۤuiӔ`~evia؉ݭFa>ꀌǀ4ɺ>%]$u 8V0lRF@gipwmXMbNj[R@@_̤Ki=M R`EwVRmeEAQ%HYz&!H ]+i{)S] TIoVLioSC;0X&c;KN"wCr~ӭTCw^\׭AK]qC#mml;(zgf'˯c ۭ?ձйz`j͒l EK <8*fIbEuuLI rƢܕ˅zՎb vatGYMZ 8ΰngD@^5]lJ P;í>]`=VNɥAfgeQ%{HŜGLV18{IUl@R:Jn, l嫭yuC]qT7-}' xJ(Ӊh"?VP3v,Z͋ DB\r LA֪-)gxM*H$71M{coqw2Z.#3HxP,DeT?xֿSo[0BYbۍthTG{4v\YrO#]8r8vj,Jr.{'w35N杏Wξ=0h{y]RwF]|egI'/bLeIXqVU\J PXp0 Z|/~k5pQܺޣJ".Xѭt}sx=4GhZ}{x{+gr箽U*4>6.ѕ>lH(ZRuu}\8AݱC;;7%-:S{ҭZ=bݼd/_9r cNa?v`kcxH_߈f {qN^mQDڤDrC\h.0|x"Tk?[O~dY8i0B[1) (Pƶ] XEEF(pk#=m@R|L;`QHiQfR('C D+R8~c2שּׁb-~Ǐ=/umHl߲IoVv+ _Hked\dc[>)tGskrэGIL-9_;{DZo&bGҴx]kN">2]b,,ntg9"PXίj p0sf<)Duhemcy&Lí7j%cKhUبz$ eC?Ʊd̳zI &Kz@>㬾\xZOy!4($6n[})[e2vȉ YyyQ $qF6Dj̲ MhYI`M#/ '3ɯrql'6`k3_1G3ޞ۸W ﵂9HIz 5"bhcDs)_m?/#Qd!>;nt of4_4SQ{;:MYm$Y39JeǼ78&Y]zs~914V Rgm Et}!l"FOa۩cEkmXv=hu{˨6CnY{ (AK?&>lg/ڙȎnoZGRRҵwkz!s=oPj8G?[Z2_Nt+KJݱDILik=)[3n Ia*a(YMDTv8; S;D'M}V W۵g(*pf]mezm3S6GFo/jh;Ƕ;dzϹ_S`_ǥuGtǵ-dG6MlZra(DĐc۵,u\Eך. x \n#4C]ZX K/5ާI490DD9)]tGE?E&x4r ASRdIx29Cs_v3CGG|~E,o7Vutjc1g^b@\ 2fs~$)~., sOr>Wg[bŽ5FpW-qkB4öd7F,>ni`W`0i V&kU]ڦsccɍƁRY|ZpQZp]6`If8 g~JΖJFV7+xz y-3>ގRl1Xch<20h?oѱds`t"^ {i"{!͍s1f)swjUYIdWAfn#cd0&i'ٱ*\+,&R{wюhQ9}Ids oD6PR1GEk@v9urPfIJ"DJ`.Co|#Sjg+d]&[яgޣ˥cb@8EIs[9TrWO=y 9h1u\FPDb>?s_ziߡ;lK$}8֪s{?MEw>mRc!twEb% }bkk__nP`amT>ulNϗٞ䗏W>m{^o~7?3gS$:p6uzymm]!TXBa`N&xy}eNwΘ2業]cX+;A̬ւ!u޾u>[6iE A8i+V2U.ǢlPa[u˥>s`66ik&vR܈ $mA"ӚnR;3(Cmȋ@=۾( E0X0-" R{b;/8K;D9 Բt6-Rojj>A\~dئFs `D{?{QZk5F3<9/ qKA[$A n4,(H.5>1KMCU^ kGainE h;!])Nf% m ,O( \vR4ܶ?- 5R P"A L8-h+oGiMabgG@;mB4ŶK0qL( P3QF<e<}/TOο]KvaIՐ7*~}?)_' F"8㹯p4DR~s#҄G(PuE]IdmqJ~Vqdc2FGuv7y&se'RZ4'8 uY5]|.Vq]Yf=SrCTU6qj ݼ9B\) 'n$TFr;IVRgv|ܙ| ݏi` K[(4Hv̔_ OA`ں?yd;.7=\0*#6yP8,*N5p}}F/2s#c;:LWv7}bdM:G'tBTm'эq @y^i Sd~-xiAM+@[H\Zsk #ʲ39a$'խJA2l6Bhc3F (t1Eݸ@d;s'>u\%KL$?,@'AP0yZi% Lk@Dڞ.ҍ*j11tx) '|#}Aŋ*ңڭt:w6%OA \,\6ҘhQen4< %< ,`*]^DM[7)3'6uEy)eЧiV+F2:~}WkjJ9- GvCQDVWJ^a6/uw0QWĨsoqWM_1|ًv?:`$alI,H$Mar۷obcpHKɱM3%/p8~8t-tw L4莐+{/(ùݵ4(0Kad4ŗC( >smdi,]!09N4#S[^w%3n$:'JؕU7NƤB \}%*6J|BĜu\T,8}},~*C;$Ȓ$S*: >T\%p+[Xʐxl[|׍LR L`k@ bN;fY#7Co On:/ O|+x2|-5}߿i$GG30WГ'[6SvF(Tdy}Gݟ N!+~3_`'paG7C {m8!}RrNrs?=#Dd|#54i3ExQc=2K#Rvt*v,XCfOG tZ]a0}WN$ e!Tiܚ߯o"Gl^ő -0VzP; X'Ãޕd׳ yL"C@JڔCtHmMTIV-]qcy8it/ @VYTPt{Xn2k{f2mR[bШpeF4Bmts2<ߣIP(nq |ڿکxk_e<-K)H?ګ2H`0Xp}JO=yà7:2Fiyܺn bV!HfI~_[ T޶j4pʭҎޕV`ByY:,70(\-oBm]FuMKa6-݃9.j ՊvlJ 5tsA4 3)4!JD>-L,izpM? WLIe;stw|l^@87.pmI6OfQ)|> C{P}UJm!Jq]^Bcѳ ZPB (TsU65n^uY2K󿇣lM݆B"3EV )%@>DsNA@O33{{y\ec:F-|daUĕ.ko]+ret~[fC嫸gƱ'c,6 CcBdQv̟yhUo3z-]r8j]g8C󷰸MYWOsfۦ(x_;qAtE3,]vrWK;BhT>xz{nG{JoNx'?avhg#s=~G=W.i B :p⮾r(BSopla养plI@ 'u:tf0 Wc0Ӫ!U QDqqp3ڬ;}ƆHrmT! 8NXY\y}mAZI'[0VRrh{G9_yi,gBȋӘ,"}VIRd/ 4V`8QP[F˂ 4;VI.9]X rS"C)v癶M^X`oBÅ/} /XYDX R;Td,Wq9@\9?aY!p ]*sb;. .϶s]i͊Y"nmve j˲Q$Oă离ǣVS܆8l{CɼơvZZ!r}(e;ٲ[]'-8{W(GB~N!Fw;{ ~H>ws2_{+K vrw&PL8e]Qnk퍆m ^Qu 9SolURbwqlӫI/D셧sٿaIت4wI~̜G޶W(2ff_ű{}T}Sh3&e_BٓƏC tF Fs|$ Qn ?wnqk5ֲ_~NUX^&˪֕ »ƉGq~JչHT ,mz ry|!">{^ 7 TO'iO6f)d̰MU/|QFI(b ;ӷ>| (G?nj"ELKh6(;A.[p>nG) 3ӇK!TYe(yg=$+GJSwhk4K:)j(3ݑfvIIg4Zp$"h@ վ\,>3bJdFFdƿ߻ӣ9م P]`mTyc@nxv?=`ݾߏu:~JMJ0n>n{رgWcrȽ&K/T w^^>u闵)W"2~Lq͎uJCIo qmwÇڸ#AmuxR`lA&;r3Np+*zЉ:F4I Qu;?gI<6=94{U7V;ts۲mJ,6D0X^d ~C >D(M@ \P#&/E!k%QHDMQKenč!5F( 1)dSlg-"/HjDJ_"mV *HJT 8M!D`l3ʇY}*,ɪ (e%lNSAUY l=ef'J*ը()*%Z 櫂&i"=̊ b,M ЁNV2CiS)"[N=5N$)\ZhO@yeZ %ICY%k}_(>,L|$̱+'Mgot7eՍ-{@8_ueut3t?Ǯ]Y]Gd6+ sGlm0bItK#|~Ez9sn]Uzkjgv큮P=)ޘ6R;p2W%IK8WPm)-.m.jo?ҟylE5 RwqiVѰn8L2ή-t!]p*>o| 9AhB+Ǻ<fg?Mj\cWB˲پ ,ΉkT.L&)QF(+gBؽϞ6D-4% Ԩgb5Qe lтF4zY e<󗒘xf)Y`fU2jѻT@5Ƕ]v}EOzYk@0 RYW3c| (A`: :Tdmh]ӴX ,݈ok-ҭC8%U6.rrXNO3Ok+AO-FA5Xz ~kBDHtAEs%ϟY+܆-Rξ;I'H:G^i |s7?]bR@MW؟}߮y=U䄝J 7C/"ݦt#f-  ,V缝Կ7~kCPwbgqQQb]ؚĭEPL5`݅zuZC 3p[\d,Na8'Yv[?rHC0'vJ˕-|BgRWMI$,]ȕeIv>2H J0BO|`tdjhkl:BhnKf{,_;E$thtBzk :iz/m™f3!E4.pӯ/pg-,aq/U^ kءgnmXQ w }B}CH Ny_MI+mx䦉] `&{K{?v~O>$K`Nܟil#2۔[hT2HaF*Y;$"# }5kVU $蹱MnGVx0CaͬFT@G)vYmĥx DAb3jL(DSRg#"+e#KdWDMH8Au=%Q5D&sCZLt'"Go]q3db=:zdyf䙉J@xuJ7dgv#Wv('x5_R0K]Q4-[}=r6sv2߶-ak.ztB"H>Tv&j-]}3[e;"Kel+)}2ČFoO6!O'B ֗hl{o;&sgį=!uýP ^]ֿ$j9*3:d91w?r v,c(U6߇"cAn#1tMdYnPX@C0au B![_~_-_rğ?GlspQV\\8V}hՠ`[?B2O LjYJ #M y*-Y(݅}v8~ vpPA ygXC-T"ΝÅn:vyݩd9okz?غԽrJ}`(,m,-FmWh.U`& `1|Q 5:Y֖m/>=J3T $`%OvG Br7k'p Wk'H͆_ᮧY˞5spzc=(-B<-TgۂD$Տ$sdG TK\_!R@NTjh4y*b%nJҞ@lHE}iCq8|UJ==JK = J_0RESˋ"e:^~9P3j˲LKg9sOx񧯧:^Wc{RS,BgPRWݷ5M]&"lrlZE ln  XDc|c޸% *aJ"iBc9pTwQY4=2 5#5ֳzuKi;4Y4sCa*$  EO^Pk|V<L]B` EY:ҥ-;5'JplZ: z vn^nH4FI=Q{%,obOnhm}SI7D%rj௽W4}'/{^[ y_Oq?4%QH@nkyN[[aϞJn(<,qO:RtP`s_t Txց?d,nVʘjÖ12w h!VͶEXk ʼ%h >csʄcd.hrPzɳPr5 >8eL_} t^Xw^ILH$NֺGocTѤ>'v-rWU7(+xsVXňHf}Ѩ/WZ;{bZګt`g7ϵ/W/B}l2C $)ӂwêKO[vn8sFpf-2z\z5ÎX=!|>إ7Ko*vT[s(v$a8,#[v* ZſǦ(u\~ǟg3߄G_mX6 *ԹkEF$;RH2׷}*[Vd7vVvL ٥6hPfmp+^G0*n$gMT&`DžWH $*y77p]f -.\\R'zo,Z&tvkFucOJfڈxw>}i JlV,wĖ;bGiv#ET&˿yY"X4V#pX+c`^go^&Hm H63 rkPZH ܒP\nUue7& 5Urac-;!;"Њr3,ZL;QJ̄Fņ/ Bkdߓ Q Nt3Se#VW.hb_woUzM@y߸Ta{2T/_ƴʹ&nNi((q%JU* "xoMQ{.H{}q7˙~T$23-&!?MY÷ggcΡaġD#cRT; !BiocECf ܩ9T'K1[f+>3lH; ^nQHsI-cA2M~㥐,!IM%vqnsjl9s7 K&V<βd"qˬ]/E?)wfMïߞtt/醢ܵkFpxs{y3w!GKneb^t+3=2?WoBHLaG, ߪ{M ƛj6ͽ{t-tҨ-2}3^+V/`TB[$l!Pxg^]pǝxH8w}!,gm} E:^2sB=& u03 CTWarlVZֆbL8CnB"O{Z^)qtKzqv[w~hD>G= GkE.n3߆s%H+I)~xjmOKg(T@ʌ;̲Qámh ģE,dIZz~-/Ðvㄷ u zMS`Bwb̓$:UП_U3U#:|O{ ˖t[YM )Un]ieraAJ_&Ğ6ݕ |6&uxYUjJP8lb0x[v{RKU]0OIs"s$nZ"'A_cu^Iޙ37w56g'd 9;2 V~וR_Fe խ9obix_%}L\w[b+TzU/K7⽹*wRN# 5)Y#Cj+[[fW;d.ܸQVb;sVE1kN72Hb&E@"GX!Q(S>f0Caje {}k`:/8OJ%7Mijr%VǪEYB=(fy)+e%G-8E7Hߛi( ,ˍ}yJl RlhBxդ_uHw娊/eǣOe% ] 2?fo:=RZa^n ݠXccY^R̮ۣ됀M>J|V+kz6Bau*|w|'oɿB&w௼I::e +0H2_شqz<!mg{fÕdpΡz:_b՚[?c$I5YߏtŪ?R0܍:m 5!,-KJxrǎm\v2ߒ8xeFկ*Q!B H;~5kfgD6 0C?ȅd08TOIt ƣ nnh3YI)D. 0:!>$y%z]%:wQt9ac}23L| 2s`3 [}JE΂bŅl"=Qq1k/ָZ_ؗ4e$3𽉕77SΗ2ZCÝptWR?c,ii.bx^&5SnGZ_+t}7%FGhPDu .47C7[з sə3i>4lvV2jӆ#&38%E Diy\dM T $iW@92in}RhUT*oac*]֖kt>*ٵ^\&<'Id?tk #2{ZkT^_]x˱u> uլGΜp6aa ߉NX*3K(n9I.a#^#hbQER"nQ>Vf')!3czn-okP P#u[Z*bf[y;4PAAD@*8Vy;ƳdǸ5[#KXX vhx ᥣ(!nلйw#dO~/CRwN֞{=NI^>ފ},%؜fLnOyl;^Ƶ۰kԖ౧z5x"~}wO9j fvAGz#= |AX6 rtYڇq )Th j`T!uC=q-}5bZ#2Qm;zZ/one)a7P>PojѺݑ{_zyR\OUJ=)c3\LFC~g2<]7f4J.18vC;n[ ;HNԁAzWI+Kfg<5ʒ z&@ F ,݀z t/x`0:+.nް*i ׫@*׮׆X\%3.J/M|MM"@:A# sv}Au/gɞQUV "DqMbeZ0W[,3t_[sW]ݚtk+r68-#!: 2| oFB=P, 1ڋ_|k:GB Uť_C*<4mP36!$>/#1`&mDvZwU{͖)0J dpV1+;he6<ZH+9y(~nMXk3Kˆ=/ +r ap{M^Q jo f:8XHD 9MͿD l#&m1׻F/=R )p1\\$1o]l݅$h1?FN/gc۸s2hwe~!}\<;=>W PlF epj(9(r[#8u [eh Ia"O-Q UGȽT%3 4+$gWߒ Yf~/w T`5OK J~1NLǗg{At`pY;Jgֆvz߮f"q:WϖBä>݂q/enbE5{9s[ɋX\pMw}CyD|gZq烰J4 f N' YoH;d&'w-95s PVݭ98J.ϑh:uוaM_SeK._yU[b2޹EK"lyP-w.w%_Kf:dG.*=ws+ptK,@1IF:mFkva|>n@n`^7z~&M.G*?ֻF󱇆ߘǔk?10PIJm 7}2tCcG0d[=Y!"*E)p09,pu5rCY#۾GNz,±UiRlE~_6XE1>*י;&#HvY뵗Y%CA/ `U幒 =B?ECa{zbkGg'ZQxuglf0,5XT 2jʩ2uXx*ն+RH(0V:~xNQbqAXG"IMn:G\^ u;>/0q>=ojFniuiD4k'd=,+&LLʼHcKX&_h@/k^|~݁-VzJwhsU -mڢ" ƺʿonJS.$N5]+T@K[64 k)1*ϗ[[":Z̡۰|ݜ#QUHlR!5G @%N-døv,$#F-N:^x:$nب7Cf+T3a=O`:KeCu/%9溏{vm]p Q *tl>ͼp)1ʵ43kF(7GVObrN*K6,}`7F6Y#u|})vdp[&(pZ&n6ՙ{DhJ|tә'*%AOuz_BRR+9[n/GCCIOOǟ`w'(˹ݷ+qP8F N_߱GBk7\IWdb/[@!;5mԷt$NE4iT۷xĸQd!4~ٞoڥ%&1lNOw)_|˵KWɃaeNhnluiGKh%Dwܫ`W|zs4sk ~޿9pKGbmm}B6!IbF()†)+B D'϶]ѡ/1pf 0TY ~J♥YDJ=,՝{,S՘&tj<ŕ[6xlۢW`TBzVtb`Y3 'tس v{  0 jgX| J){*sWuoA5}`Vu8IŘ+Bu#!FoO؈W&ut|x#vbH<ٶNp點>(w>w)Zs)MswPDDjzVc(č5kAj;?܃y 2GV/ц;M\6/זo0gd^&(W7:(]_ 5'IT'8䛗&V\~p]RQ2vZq@o(Yf % 2cxO'ܛ=p zzH™*ҨO>3XK䙥ys)vd߾M%Io=@'e+7tHmrY + XaH4sN<.A!G#%/鷹ҚN'-Y <7 n3EK2ש=*$UT;FȥMu)NRfjANq_W0SR5"NK:zDZD+؆21 yO%?6=HT0R(VK㽰}KRjͽ/)b^ ѣiȭON5P[iOZy"ׅȉn17Y7!YZgM@ON.W oJI/nuH^k{;\Wr԰5hDG%ϠW|:`XzO2ġuQѧ@$VgNp\E yps0<83n0!X#^ LNFy2 8 '.Ì`7}vг =Ec3C{@Z:Ijhqڷi^Y"qCc) 7FnPB}v !Od5ad֌ol MA5b{ʋg {?z{,[ t1gz\{\} ^RWg7Yu?7k^WVvp\fv]-PܥEI4:}w+xvoS@y * ^MP9Z!?[H{gۿ0 /VJt hV͓, ?C>\x9TKop0t&X%V%ILIv]sJTM%U΍JN/ og$|bFN7hg d v[ vZaoo\#C 96{G?RLK|޹ji53-t?T79MN~S$3_!a60_p<5ߤt r6!k$|˻+s/\}վdh %bzi4|X)gU2y5:|;o1_v'ӯ+` .uDci ˏ3-5?CUz)8hA{[E~$|vP`H-hld[rf]FfPknܷa_oCD*=Q?(!޲81rkaV_yjcbyhj1-6LnjZJsBoxF9X߆ChUZ ٭=W6~5vؚ ۫C':Z︟ۮBKx`zgh_(:+6p AWRpD1jwK/Buޣ|Tv)QIK;rxvC*&ul|p$p v>T'Hۈ霄tk8`,+&`P˷-Kϒa_$54v0cN OW+j;m<<1duc?yOo+ Zl„S$#,##n_uiНA5|' rha5{?D p&ѫ^}׿w^ڂ”QkWnu~}gW3'ذ.?}?g: vsproy7Z+gD/݃HA& rLr9ǻ#4Ѿ] 9w}JvYweˁ%sU8o^ٍtz#wg\YR}"kϞ~aĒvTǸzz()i%{ҽ/J/|\&v镙W%6}3]쉜iլBF"zl]`{L./O:3^j,ڻb=:{<674^f{r[0$xRiEi|Umgssv 珪zo,g.P׷L4qup_%V/)u1+ܳT FChLUrDD=l% U" UmF8 ERƄJ0nQ|.c}Ot!%r>Ƽ`)Vgh+`E!' 0Av~{Ģ, cysB F#sv͞.Eg gP^Lp"@*\2gk /qaDǠ.b--{u_lo,DZmIƵ|]d0xwDGSx j_UC{xU1Vhi=f\~H6=j20v1SR1{\׾KjUvcU*d4I6؀ GH lAQlh0Aϥ.MM8K3ҡ0s -^.+94q1))7N9J QC&eL(𴳅FX(r08n[Q=Dg;۬$+D:ѥC4GO=vߡ'IlW }\o}?yRJ+]yOT1PC4=PALL 4U4Pe(eTR)/==߻ޛ͞#Sy=۬}{}?"F!'Ad6,hs٘Lmh7jz6V9InD< 4"v}cE~B#="T09yVysԇ'ɜ5m#ۡ$ cڤGe 9 -"8C٠ReLEhńjGTGr}:J!X2V(t=`}!E x.S8+<(L"- cɡnE">0̠EԨKJlVV!CmXT?,VSuWfp <5L5 (A8Ħr碾@N0?.6;z2 I@W=Zk??_lcbQw&=:pץS*R$Ckm_sҜJvohgAq* 8Jxb4u*wo۝}2UVu+ ŠB/Ai$y. ;07ZhbZs\"8kx3H*806/(.VktOB `hL]tBjn{@^lFwpu?1AH׿nuЇb_^x[]$01 7 di%6#a_ߍEGz߭v?D3Sxݛ/E6Abhj(Ĩq}BJk$dmev>"S*GOXj䵋.* :y%$& ү_nN::zvڱ<8! }#O7u%nCCˋ]#DR1'\Y܏F;AجG9Qc.8suLA< ,)$RtyG.y߲TmwHF ,IwJrc8/3ّr]zVb jd5ݮ7>/ym'K`& ; 'DN=*XKT7?u!%3V\rrW[ kC\ZZsI M{wnE C G#lalgAB?˦l/.쭲'x{EO'60%SC<$?1NEcH>5j>S.;IxD?mC܅XID6]Img'P\VXل0<o<)RLӐ@w^;0y(u=) )9]OKC`0(#i-ʙg?)9sF׉Ek1ݮqH$]_ݵ:50v6;<^b?a}o,lbYaХCDZլ32 "%c~.`2A $aAՂ$>1_Ǡvi;.=/sJ4Sl$T^k-00ozrX43M(b04'yVk 㸭="xbN066{SP0Q(Xfk6 ڒL#,lM̔7Qiu-[5g<9B @? .?5A T =ڐ43O6?#a Cdl$i.5' rzID9 er`$#$&%nɘMP2(@,RzIS* SO^r asȂB l \YkHM`$8҂̠C28:=hpoT&/8 1VOMbr!-JL2Ǫ`'.`M 0ǝ"Ir\t(KnxmL{ JױɎM!‘@:1lX{Nx"bغUTנ7GASo z`^D bvv4!J)WIRg{ŻXBM[p{&ƕ!tA (`ME!`٘$ɍڗ~V?0W}gKa2 = *%`dXx " }#3;4VvVM}Ѹ+M{$*'>|?Aäu(^@}X v2DL,M+±82-c$[:,(&BNg, ݁i  + T^7<3HI"|!2ΪbȲl,c~۫q"τz=ۡJy1(my^ɓ^( _Ufv7Ap#e{j}o@0Ξ?/ul_A㰻k ]tzBIKຖas$C7q,MGJQֵ8djd(,ѡ磻!^F^*Rp5Ҋ.[Yqt딭6XnJ>nTMo(eM7qG hƻo?O.//g: bǠKf-mYEjH<T2!(R+X~H˦SYiu_xcIr#uZv+Mxj¥~,sׯݹ};'ONޥƠO*gFNVl#ɥ)YDDlۼ~6vD~qIuԭz<4 =>{cadFRF읳>byhtkkkw7{'HLtv2N<3Xj{Ku(;ʛ.HP\ :z¬JG8I"]Z`Nc.ZɰLal/Dd<q<.mھkE6kYOʵZnbnrFv(+T^H,SU\NAU7;77ut]~B2Ν{*H~f v?4Tyɷ y F~s׳8WP޿9 ? o/'ǧH8/Ho:@n?{v.:7Ņj]znAשei"Y]$jTjdu%i0Wef *? i2۫N3`CJ[S;$Xo\[$30JH~֓XyZYA11|ehLg tMVw$s$*Qُ{ eOgzXQ۰{V90:7 0.$B^ՒGWwsSq ߹.r,֐xNh9:Z汳39O<۾\yl!! 3$=z̝ӧ0bӚ$ NU WD&#U2I{!̉Z_HU]q~%wN<l;?Tpb-̧­kK+`cDӼ̘FwGp ۅ4iU9N6됽&tg@ a!K= R,m 5¨=c0?(D@-SuohF%yyCL1Ӏ=*kEh BN9=Mv=ܤ`+yH5  a=&r0\LZM*M;'sCPXQJ i( hbqVЉiE/ndhI^@`EhNwTޤVTf™!ac3hSH*Ɛ̀rtĪ2C+yEi, %"Ca󠎪 8@5=KC!qsQss%)\چ͗pE`QF_:}I'`е MŠN~r&o Ŭ>h 4v۸YYOUo%YAi#|D("ְN^g@(0\!>fXbtzyF?6"at6nKR'GF/, sJ. 3y0t;J85=MI,`6.gk6Y]>厠o߸Q ,1g5.-ٜ@ٙ%z?[U84R9C( 9mz iiv#,1Z"kxitȩE s)T bndX=73SXWWff^mkg͈ExMZbpuQYJ<㓑k -7W^u= > 5Ȉ̭ex#3FKo3 {+?E\-4d^ʏ0hHo7v!^Q'`tR=6Y!0!RIf Qp6 ѓ%1Yrl:Q-ܧF c񌿏[D> &TS@ՁS'mZiӈK+蓹G~)i '^[04 {Bx Ð*02si}(P[ 7,G~gW{wwGlCTL{癯}kźXiDX!#czZψ@UX1x>7 w,sdI~ƛ6;2h޹{%liuYƖ`fD>Zj7|D`ו~DSON~V8lKI]yiO=0 dsSѳ'/Vw6o^t,spީ`Z@C0sH)!LD 0x+tH3X倰,&҉Ξ[\y|XoW)"jrV8ߩ@/;j:eMt6>5$<Ϛpm<~q AMNIx \}Lr(л;oz^e<67r]QD6SlCc%8vH>7zZ:%'HvjN ǣ}\' shDZM 2ӻG"1/1GOGbi5V+~gZ^YZOIh4{E6I;~Ɵ|v<B>߆ A2Ds:__pP9 0g#,n#֗gRzxhNL˫kNgā y%nIW.ow;  ^x?0ˬyiwه(fzG&)j(LH#5DO>0I 6c$PX'uoyy1g3M0ڢ'^򵴜OS~(s:CS&gN|=pȁ/}QEZ B"4* %;5 -DPA(s1rV3NM4f)pRWmC"4v^z qlu+P8C,?qc!>i?a/wnZo KW5XY5XG-A$v ZJx-*acF*F@#%njh+! P_ǓC2LC;\4tDz Is v8:p*a>G%U64$'᠅vI"!F&@L3>y.&hU/(H&mDdSvPx:>a i&7LojS MA0/Q|캴N<9`Mhp󘏡eؿͻT{x:͚G'y|<𨲱9!j!X ^ 1"ƟTeM/h;-ē l )} @ONY 8H!u\i}B 1cGTF8@h{D~!XALv:d'cYh7CXJƝڪm`d;k,~t1 {]9B]k2{ ljaTɓnڋ>L(3wNz,bCZAh-U2(So&F!p :k>WsHp==(y(\~{o`pha`a#ԱHP TkV71>?%N\)ۈd*ta'ѡ5$$_~iFPI%]ܰtttk[Kmf@=VBi9=DY('sl'h#U*=G?:ZaC ]1^O>8>vv0ymЙSu`΄DIoVʏW 9vh<< k+j 7mhUAH/6< Y4B8; 埃[0YzpT֝L\B6O==|&'* Ǐ7MZc ӆIiyk_Y `T\E HJXIgf}m U%&:,A?{_\shʵWV`cvo?6:1F"O|}Dmj($BֻWQ &mտ ߽7dˋK֙ ?Y8%_.Xdg\7";?by 09`*kێ0\P;X\[ٮj\Q|rRl.!$ X8B?9 B*8'0v^ao+x/.j{KIG}SSC uj<)|uVOi$h&FSP,25ߢ7|[8XZSq=cqi{Zj!kK(Nsww86:yw# srwI~)1Y2jKŬjibZ L\ɄIER^4G 2V d Dh>ȈOF#]dpb;ub#ۆ):&JD0* Pp<͍i iR$\޽RpPl;89rI5Xޏ6N,%05(  c}$}ۗϵZY"=A=.X809HO :$!zh+ؘl-{p0(#QHIF!Nx.Q^6$d ǜpވiA}i 5iC~⓸NR߀}0@*FB paZlaWa-|^d\$!Ab E8bsbCLv|-$|/G nYAY G fb(Kwͥ*,znD=lY"ϡTE E=4ZۻXpɤ+2*]rmzNdhz9`&ED!Q`2[﻽EPz ]}ܪ!UÄ+RqjzX<C 3tfG (Q4޹6~2@ ԲP3gjwi*Њ^wB:g Ivw>Px,޺Y6zp6 Z=R.C<N Z{=@5#!B aY7Go|OVQPb}dHDw^7 ^`C l<VF Rc}4P)yMv# ş"4mX"UK#bnLѷB . b<1VoyF k 1!Y1!?l6PR.d\^ 2greߝwڼtNx; /\yj/G4ALdqve{ۣҙ12147w^=0׬xdΝا;/{O]F0!OѭN+};╝ZxxģM|c lƊnm[Ve!s zy Q$`<ӟ~ȶvƢkVOLEDWڄ 3G<+FvqD0[Oҧz sc(<"81iU~12NyD7_lS'# x AsrNmIeYH- [)wհجzSnlUZ2@ `acgb{W 7+&"Ὃ@tnddb VI0ɑBKTYMO2I&! N 2ᆆvM5244wcT/|j6\}_<ᏌggЕWzes9Ąx&/s)'Te,xLVx9>|E߃qyu$cA?̎nt1%ѕAG 7v0L d@Bw@Mۣ^:nlCD)0ϗd𱮣XMG5rLMCq56A LVDačwv>y?~\ZZjɫ  /t(Q/ˠ(٥ZL6-:mgmmBDmDCqŭoxN!{\핗gb>qv/|{)t.De,È1wvy Djb߲/Sr7Ic&֏?{z}IjC*^X~԰ưͲY>0#laB~`x0%{z7tF1BQǯ`RtN {rM lY :Ǐ@L_$2 F`z^^90d^)cro-zJGr T7!9wxLp"6 ~VEaOT-8:U-. CA#pL(S=yX]m<# ""-<tE "8Yj:ڹ %Px#HCEZ1 }8B$.؇za$sy@&4SXX,o{:4cx k:F 0K 8 P .Px&LpX@TV0!7byK tMFKI4q ,ˣ%ߤ] ʑP-1P%ÍPtEN ]PLLd".^PO~Ò 3=ޮKH n#QV`{mex! @I%0KJ6pa!DwDu0nQ"sذt$84MMr›M9$}7W`⩠_}/n "g5d-jV[!zsr=șΟҽrV+t2ѱ Kdlb5 pݒp.j:0{ 3 j*! lw&&06qAuY یՑйV<'Kp3*ed%U̸B́PzhӒcgG0@SΟ~ nx?^Yܾf֕]| V ,O2ѱUfz٭֜cTCTq[#0| HiUa@bmJM1cb?<>?Yf 8qvk~eYBAt&$2L% 3RaA $ Z8Add3 2]m[T$lAM<6?q^ {+_Ff$ Y a9;jV 0=n<\<]yߜ;#)91USfrx]fs\%YfuIpti|gqR6$$*4>]`#@:-tv`Y?v1o\i(FS@E0#CT$~5z񣱃E\<-Sϝ[Kwӟ UEMK0p'D:xFh=rrXv_BZLd9jMv?{T ]5J lʜ+IL4` aZ\hZU`8o\ƠsW/U|*PJ?4bdS­vV A'pܙW Kntv/(T3#EF TP8#po{?Sз!+DYBP@VVXOFB:9믢0p\C:]lP, ,|gB6x=-7txoP*lS Vn$áRpŘ!/siޥeyD^@v3р!_!uX5N E8dji'ـqh9XG. d ĴD $]Wy-̻H1V!5 zuxt&ڿ8 D戬)ˡkUJ, z/!%2&ܣ" jmui1A߇SS+-BBT3p3򶷺l fWʮ,RSjia-1CwfLSv`>DPwu¡j.+w~L:;5\i_Y\>7 [.F8ݾvKvZKWk/KKF744͍)MK=?55c~BӦuRpi_[]#GX3<`Nۺ Mh6u="S\>17z{i/ {\_~ޚ 7'>s:M+,J$u]^Yêhרwn.|ŧ)vL4ĸ"AwÃ}X }"5?/|in/~&+hT\έԗoxwvylt4)dG2n8{{#Gy͑]]ݾgvi &ҾIO5K XDP8NƜ/V^|3+ա<Y?2'ȃHGySP>3 ^!̎;ʝh `%闷hwBtH&7"—/|y.P.9;ܹ}K}qllt;^u{UQssuӬ׽7h")"aè!U^ȓg{JaY9_WUo<*60䒈͠"ZjK=yDK Rߥ$dY0 ֭nQ E6E-l(6f"F J("HRǣ(V8$l *& qVxޭ@~6l9\e'ǩUXyW%YAW1GS8ڣM"'BI ԻT>@v,c6ز@ #RyX e w'Q ROY zA5=&Bff d4XE-j*81 ] (&SF? MؾaF9!1ج#="8K6] Hc98|[5d0AEZ)! w ze&?p]D̀X"\^4HiMK5I5iH s``.zU#ICL!p9x#|7ƙRUFz#ԺBqcN #E> #Iק^w.ZIϟ 7AH 91'E$-ERfBP$!|N¹Xr\H %kMic?#"ty jzig齣$:>^x۲YզԭvBHBрpX,{̢0 pH +/Zզ\ͪ.232xݻsY z 4 <%LqcĿxElhN_vh +XU߻j~x!5]X>[+hpk<D d{hHal31N2qgN,ڨ֥@G}Kn'}細Uo-# ;XeS^MdžͲ>H~#NAnKcr:atxxa6٩4쮻qKo@T-n^7ժ~?hK܉0[0ѩP~n/p:Q*'ےqwɡZ/u/>sGN}z4}LJq6XMk<ȯ<[{WO#Njͷﱭ7({DNs1}xV;|p<]1 orlɏ&`&EȢZ%?4F;6D4?~g_Q?@9?ZB (xUOi擥ir< GAbE"B0,yܞz vWhe]Of3y& :8=B2D${93PV5R3èe$m_ {d?R+MN.xR8f]{Q$9I~X@{ Yah#[xܱ)/ѕ׽ݫ]E8ӋpOYZfs[U'ETZ g",0)oNd2iqdp%^nv+_d#;Kؖc~e' `~UR+B\}~Rk&vsc 9ϧd:$@ք^ZJХΒ:inKA 'kn *^6ćp*I \Ѓ6N5^DL_} '$jeMI$`b>-#;h88jPxH(BQ6tq2EzwSst~:ڊB!&*Lv(FdzRZ? [khwP2&drG^9oa@Z\L `slO<,ȶX@8HdN)Bkm_ɱkn AN"~C$2цB^&??4etCAfk{!qdANxGeVyytq{RM2b}PA3MqRJ)JbfZ;ӐDޮj SiyoGuHz@D(D./3w)_2n{l?*5==g].WNw|vwn\ܴml^+6u"d`^'=AD" #80MsS}i{o6mݿX#^zf:r\H5D]'~7wR8ss}Åj_1] q/s&©BBDܦM[7W@_,~8: G>x ll4FA |ܝ?|Ò?? BWp[x$].[+ČZuEzSD8hE(D Z+yhR۲a.%IԪC{3{8e덎W8buAE8Ь`OŒ*lBIUr ׷=ZvZ56$Xj:; eГ }09 oDd(89Ѕ\j]ȸ=9h!p@υNqIWƹHr Nn8Yf# H,wn[ُ vR$E\y5rBbFflRƽ;{S`W(n2;G hLe"$;[h(I['a[pv@Rǀ#;CyH_&*EG<?'_VlX2'f RK(q>EP2d~g)կjx&c\:)Lݒml.똑yr̨;~~擪"Ih4e:ّ@+׷r-W*lԽFϣH Y!kr,,,@4(C2>:p,agݩvzxG⣠ G4^&^6xb6(:M΢&ab'heDx7m됾^0&-v\߅Q]62V)A' 5Hy]o0\s2FT `#5֠oq`8&E9Aր. 5I!-"n4 2S\I>L9B*]bʂW5tIxֺc|9%h(Dm ;fF 0rn3hxS$R! u 4^AMb{4C4>"O24V(kk 覢OKӕ/Q,m@4q% 5Vmq ?d&br dԸj߹Ǟ:a:݆Z@L@ʎ0B`}d8 C)~[Yf]8* E46NdׄfUaf / )Tc8"$ex1A%$b\0UUȣoIxsZXd^GA [145K8E,;ެ@Oq㲛knAӛS͡h"]X/V&ƘZ-}qad(fsfQ ^{(U$1]IfD1+y]xV(du>DQMQ`lR)C|)O23cn妆Ľl!qДS@cĹ-6c" 3ٌeM颅gdʫ=оl:h15@VEP.o\2B_CwO~ ܻmmƻ_OH!׹d} 3S!wHo|B~zfa>?%>ӗ|xL<*g3]>m{/:4=ØF* aJQ+18E\⹏r82N{V1yiZE3J؜PD$~nfE͔ueTW}n8cIdr4@8]>fbiNl@$JFw%!ɩ^>(D2u4WYLO:-+gH~NdPX0PN'$h3sW^.EBti҄$I9I<|:%:)bG!I`4*x~ΪS.u#qV# ?> -7^GFPY~eGg֩3,jXF[w " f} D,?r%GqTX!*}$0+]7pw]- Gmz3PxU֮81b1dl62E:[Zh!1@e2%pq;&D?@;TT%xݡG- $#,,tk3렁Qɥٿ>EP[̜̒x%N]#”*:KDLV/K8fKϵV{{& ּL?&W֗>@T ШeptpdH/<@ko/:Hc{]kk\C{D #B[7.,o"Ab*}JYC`A!VٱBnq8JIga~;~,{s- $ ˽jyr${j^!Fet;VV~NSB=Ƃ1P^%:@G A'!GuJ`%咧HSraѴD2_U_e2JĹGwC_=#F Q*)8޳sXy. 4ICQҔLV28CǡO(fe* GI @;"]˗%Z}$LV `- -LqվW/z^QFbD그ew"a}426@Ps.%B?;&DI}'zﯠv(r{ Q̸0Tp 8N+7EG-mqԓhrLG7__LG&'’\u{73:xl*5OqБ *\yL6^+Iv╛b~Ϫ d{,k[}gVU py~Gb`,[UԫsͦDg 3yF~<ӯxJA&SAo;Ap4|` R-d©f9p66sN(&Šq|&``i4lՀhijbf*P(I)#1dHt2Gq]?$cܺjhrl+ҟ#CxOvbYcj©r 6Maa0ˤGiL)^,m5Sz $ хsˠ"ˎS3لUKd.첻G~iQC7X}";tERZv @L(ê4Þ[~R? -#g8P(ertigͯDFŤrH7! kDfEX3&_Gg%1kX)y1Q̺)}$UqFGl#\`g{!fɃM:n(MDK4 ] H/s#rCXHQ`Qnt|D" G%\0 '!hh%-A ćHq(r"\g5m0$`$C؜;K:e3O ܷ~5O' ? ZL:U95 l:nUW|j"0WAz~v Ňa$IaFBAɧO|'zciB%a<^U$g'``P Cs+ >r6>DHn]i4 ]ǥ[7{켃sJ y\(Ý&E1Q&07+@]BBYB2h7ʊ8#IΧyK4p+,ļ 7ebR|WhI^5%iR11hJlv.,e^0vg`k}pDl]e^K}Л;-,L/@ۺHx 8EY6J^ܣTxD=9rCcs7 MR7t<Ɋ""Q2mB^x/|zӭp7n]|oϧD9 p?و9Ek1/xsm,81ί3}[Dol޾~2;>8܆%k3>s`ST9qፕݷCÙ'E.욕fCSphkU_Z[rһK Nk/<޾[.TI2@[3>ͺ{bx*QT_hw`<3K5Y3yZ^ҫQ!c 鑙koQeh8xpo{=6P2L!!%RjbFOkД! m d8vjcI%'ltc`֪'#lfݮg&x량jwR尥@߁m+ MЬuU☎o$Bbł^44w[y[w|4QEjJsٕH8nՖ?jqhiL`q$fQb jٲLWo <D~lB:%LcAmS$ A+"c͜ Sv{}_7;UOzBa_BͪK㋦z#Rbu."@Ank9yhTS\NzB ")UMFDdt+vc jR}P>5&6ku?c=J4[=˼f9]9Ipӏ@fEG3w"lW`S9Is~zCXقw!%zHbD}dB+2e0OndR|~),vRkkj~Jp2RےQ/n??<׾GHS45t]{sg,d';^I7qntG-J@RL; c׮o+ym?:3~/}gk]'Po7 ,7Wf^,[oJZɼRzݞu0?'go>zۼRZ S9il<лmEbFMH((Kצ.0qr `|HŦiͪZ> }`beU;9,93м>cy8$nJn`"nuO P((JRy I rjPx^}pkSQݣĩY$ۮF OL ʡuڇۉ4D]ޱ{hJ%R#~xpd)ifRS{XWQ7h eX_7aͼJEФ!$A%`*TԿH@S/\^xߔڵi_=PW?\o?y0<\8vNM59{[*P2|FW~Ѣ|bkOF}p9a-0SP %q$ }lǕd/:˜ᩣor&Q"Ax3-BУغ#vn92#dV&4&Zjq,l6>$i[h6R7#+LO ̸ӒQq %xY&i6F](_^%3 UˆۂGS(LKeR| $55GjEv>f#Yiu#GNF[n^(ix|Ckj-&Iٸ3M> IjbO6*T[i4;˕ @S'siQdk@'EQ8@{be``yBm ku݄pTu{dQ-R*4yXsI(yGmvJN0#ciVnPߪ }ltnK286K@9dmN8,i=ϹmuBcʂUݶ={VQ Pqauxst8xhH3[Aↈ86H3!!= 11C?tȒP_LLQce!-vCdzЄC9`eMn"\e) 7S^p2@j*5 |!)gQ`kwQ>s dXCz`])A`g uv)%D68ǁ0Sȋ[ntZSAXph 1)j6chEpiJZB(=ʎ 4+291Lp2SN W#rE$nIabB!{7;&a0E9D V;àEd4e#`˜O@FRtyTƝ2iY/E(xBx`V iej] 9ڣ8#P  %H23G"o]4/RJєF\)ϟ"}ռ 2P]|wL1ir徉J0\9p*Y>m*{֍Ȏ '|HDJtyMܶ+FfcZzbf1F)dfq؋z0Gdq6g)wtX5Q@LY C6=M,r?aTD {LL1E3~R[S@R;*_Fy Kx"6a ^h/p4?2%鏗?GM#gK<|{oarnŧdy㬐d2mJx ~fF]շ#i5"\HQ0΁;H ov+1L^VIX@GECGQQ ?߸7̱P:Sj71$|prh>v?^2 yO])mG+FŎfmU|0 ĐߡCaEU%7<:~,?ViO`&khJ߹j#7omw=\TD4Gꇍj/?瞾ħ>{)CZT+Y>I{*.u㒏jig=a^WЩYHS!hR~n{7 .E#_<7;)SU.S vd5tM/Cx fŢʨZxC~dlz&5 )hBu=O ہ(ڮi~P *e^!vM.99pWf+A)3i>;oe7ڏ"GC>6c%Nik TJk->JY=uqOp50V B w05,@uʎW*B8dٳ#'neZ$?KG?1]_˕jKzōf )ycN(fvX>=AyNr)tЂ(9MN kjvV$Cټ]+F#:*aol$ kA3?o'#U#"3i`5작lf@I(*MUd?&Ha}JJC:E2c%Hفv k?\!G%L7GI@Xe`!=F4XHBb2oM`NI͐N@rqԯ1H!:k4K0">ĨPr5LC_H ua<Śȯ_'qg;k)D?'"(0D QC6"E `I ]d蛂!^p$ #.>ÆR<5'ah`P,v{K\:͋Dn#@ᭆ`ux q:λ ]}Oݝwg(4tor]d^cȱe'YZ9ώ LSj~;<4);@0UuVp#wJyh|fo$VP'dC2{&<~-l=4yK8$( JAhѷ?ܩ%ar^̝͗&Bb"zņG͎Qy^p "O'\s: QBoo޵.UGtCQ$dֲH_u0rInz&:܄N4k^*SnbE\2HG'Cm_lnuHAqζ`OzB4"**tD?biCpr?[?˷q%L#E< ^J>δXj v ?8>7ҟH2w.S Gg~Ov:K_f8@|}ȋZ%$B.8UdAr]lkT3W6]NguI ԧHz5d @./B=OqX3,Go7I50[rUn޷u8z C2$\u%z˯r]]3r$(REe lkٖG/?,yF#VeE Adsʹ^Ņ=goQ(]Y~gE=12 qGM#nh':,wZi_S)+//fyer.\wD<:=ʈ֎Ų#2mrUt F7K+@:#UqqCn/x}Iű|4h_f Q\bx e}B7 M͜.tbTqy?8"*U  ?Lc߮֜P_+WG4\+V$/pME7 tvDXeXۚ$l~G~2D݄voo^ W)6K}]}؞U8/GorH8,kz]Ny˦ " E6uur>','tx.ب,bZu9/`+kmUJ@ؔN31^[:__m;=K9l!)TKJiԐ$Hmӣj$ %x:w&dw'#^v2)N/fSOf{Nyr%3 Յ{SSe.y$tZϒ]8lBO=7~e@GB8"1{IƑ-8$xj fG8ꎥv:ǃ.?t`kXм=Oi[iruŽ. :F }jDаCnЯI9F$HȨIHfOl;b<*>3-,5ʪ rGbb`(1#b("XU=܅^M40q4<+;PNLu76O:00қ?ܲu?z#}ⳙAwp䛠{Q[߀2~]:}bH,Q.=N.]Epg lKD]z5L]\z A!٦ɊmnPFƆ` # D Pms=F"OvI^^8dbeL6H1K7QyhZ&G&Bλr6. s, Km @T"c#i`sҨFS>$ `N<$@{p1`=.>vu0R!e&A$?Cqy%DT^>sWQc[Y40r&yWǪ } L1`D/F[!B%j| ,!IDAt`̸C(.XS?UIΑ HGT!SU0H]q B;hYs GQ,tUoe[~*oC/[a5 C0t"fQ3 1eI B>l*^Y:8ɽ_9  ѫ]C)-@`$W5|iyZ]sEA>ZxJgHZQ:.}m_p}W]D&ޫ|*K:VT <Ʋ)<ӧƒ7jȠ'al]d6 U6# 赆I3s=JHw~ۋރa ,Ԅ`b6]Y>uP_쉫S#s~O&p'5r_[vJȳ< :<=> c?1S8!F1z %^IQś>"|Sm^mr}#P^t Wlș%N1{@'Ҋ/f(oۉDDp˃xsФ}ڐF&cLvͯ8Bp""Sy_,. αV|t*&"}Pn"sg 7B /n}q- <1>0mz*Œiv" QPTC~ê3e_ukkܲyY7z=З+k2(ON?(d /S#5l-Uu!x _鹓WxKoŋ r|/ڞ: FPY4DdN ˶}Z0B2 G+ض 7nN$._Vzv:2UK?򑗵x\_|̵TErA1 3[ͮbi=HV{6/0є\\Bcc޽k}h0e+];M+5nGEAmgۚ~ʝ=űjќn(SLH>.q{ irҧ\[Ƒ),K` b+ 0 Uw.,N>Eb;m6 \?xkN0ƱsgQ |uF3'jke&Xw^mku#&jFXr:-=jA53<5BɰIe^owqx7ƦБ:eHk߃7iztNvփCg$d:Mty{ 9(|,:;thv!h6! _۲:>fz& n{ToYe)sٺ,YV8z<=^h8K!Iw޲-eD$"pslcp,J f CQ84d9NϲJ}޼{I/: $nۤ=6MmY"GhvՓ$smGvа*v1G;ݍu=0IK$EĎI |!Py u/Yb p(Qex)p*f\Ob 7Nb3,nP Bȫ`*({ dPA%/;㧧;:*-]mui|cȗ@ o,Zܵrwq,T2._'t{v[Z>q46ս~Y;~Zқ-`u`1k1%6UF, T_$1 W'ٳg9]=WĐGnӟ(޼ [BS B[}3yz6݂lCuf5Upu(^F'çޕR 0ХYP #so00)UD-I~:Gf?\f:Y rI&G5hSYZQAwBC!GݑK==eJ(Cp#xjY<8j""Qeְ۠NlU qIݗp|~IRA ʣ]d98=[ R=co,%bRCxVJPcVSd03NK,`!H~_2g!w կ H?>T} ~P<# Vi7f:mG$HHJZ]OPkuMXL< /D6n9D`MHyU-5jx}o{VaJC9r0|Dc}a $8.y;:ӄf,06C:2.]x q'~u}8&vZ3Ҡw!' 6ނO&yT>}nK&sst|❗ߩ)!. xdنkbku;Cb )vtj  O:ٛJg[[cpNg7Z-V _J>ݼѯPR?_tP&&f ?9lw%O.n^]=Kf,V%<+(VQTLK_k" xFǾ車O`ü NHiɤ[ׄpkLxjzg-\XYY9_p{{ Vfːk55qpHTZ$O^T85cgҪ={T.~p&`%$x_=Zc uٹ89hr᭷}A-}xZlK#w@B8ڻo@ DPCx6JL@>y`r@;a2ǷOL7mx s/3Ny& XՕۗ00LxIC_U`Q\3v UIq6-< ˟;5tԗ4thy鯼Z4Z`i^׭w^Z&gax]sû ²$^~6|.} B"O/Lr&vJ墛kzͱUԫCt{DFcMVsCikxs(>㽎mX7;0ѱ޺NXATߑFpU# |B6 9Fcb=ҋg3|qAeYc1ՠ¡1貇$Q|_oR\ųe52$/& pJ' r ,uz:q0Xg]ghx8I z݀X:a뷤ͻH#]zC7\3Ө^@2nBsK97% *(NP#^Kbk)a;d$x''bhܯJMO|2J6_]wAAv"^7=˴g{ݹrGdkQSbQ,hޭ>(O[$DŤPbFS 3uWճd }T]ΰ]v7h-y K#s`:e 7t, Qi.M? ] *T@g 4DKD-E;!HWDH4ut$HѢѩ٤H"4"& 2FMD~®p<" DV p NGJjX.U8<,]Do 4Wq };w|4Ĩ kѳK&UvD~qK`Puw`w *s||("s~tx>,n7GfϲjQMuwMcmh1uKծҴ؀>gg{_V4w5L9ױ9`zTژloPG팴VFgEڂ@S0ۅ!9w`ddRQ~ 3? h{9`S>wiG[C GN*~wNKQ[5 glCL"o\nѹ6SGAaC?ǿ. k;wk[/|p~2-#1!IfbI%v~7Rug,t|5խ&˛A1Ng|k7Lp4;3"Ho4UZ {DIRؘ̂IXP{'$11^1tٙAU5ruf90 f]$Qm2>aouY }a+X#S#ݛͶMFf*FvR=MAj&OWVa:S31zE"EP[64m=r2kkǦaNXLePO[VODO9t{g}`(4O* wJR&!erLla8fیncdjwV&\:tNj^)Pr`tssf*<326|}KS {C~ _X/}NW_[/ <-xSd۹[A 3vpZ-X1tk 0<#)P3lsEA=?@H V䁧Ϸ>$3[FڨCgQqȅV\̓.~W8;cc*NNS~!!:̦L0#;q|2(.h`9`? z#rZ.u`z]:dag>7yʷ!Dy N}y-, ӌGjuױAX2T)Aݘznx4”'^ ?DݒMFz=L AO% YQJ֮o>'1@l6G婭$PFDr(KP߁Q?~~vdg(@Hwԡ;E;nXO0SZ[ZWmf8Q趬H =yu-ɉly5 \:!!g ؀>RSF3zz0aB0L$4D! ϡakI@5} IF'$h roLBE6 A|+u*n#OZ\dE7> 2o k՗p 4>|fơYeDRe^wY,w5;q3>E Q?hZ*2὿m,6Qzv˵ɏ/Ao_2S]},; W'l^1Dd" Tdž#$Mbt\ydMyw~򏿡8[r$a4fEqqx':琢($0ˡa1cx%%G]jZagDNn6gyYRR8!\0B8T@j+|9}6;W6?8/"96) Y͝gkq^F3/XP3$-)*~}DuǾZr.8[lP -6zT^;!ϫձ 5Sz4I.#έŲ#Bap jHG(,p3XDyL6Ճs5[(Z ƣO+/">,5xEg>6oR]Nr6IIdH|,Iz=93>LNKf{&C6ŹF7IV;7;0?2l_˯(!11R`6$eWv,Ͼ/37?s`4|nsq,r]iGd5c^˙X?Hy*w[͊šX!Aa.%yoGM/Vʷ.J8 o.Kq}!_t;S]Cb)umuk6v K" o@$RD_ٲz$-ЎQvZ5P|BMm8qs&|ҭ>Y]ÿkCi40(F2Lo;sAohpVO÷_%& 5ledr~^2n0mWR Jm.ɕ_TH~=x;ہI~`R4)=YwT t} 8$ɟ]ڋƯEo &Dr" / FP^/NDB`U(-e?:05q*T 7BR Ÿ!y+q?!&ʢgoHi5\?a|l՘.s;Jmy%BԖCpc:ɩ+/֛wϏm*Pc7pϝUog,q֢?Gb.& Jcuqwxt [e,XuE_i @3p$͵ G.X\@ }3XuZ&Ƭ8CcԡH<}6,sYa̝-fjٶ?L;=P6t@ǡ>#ca!o|PYB:Ho&$/AV&ϑzOK~)xUiaJbVm K ّ(?=͑y Q 02|"ns Bq&1q3YԺ< E\8fx鱃ٟ~u7X}|Q{pҷ{7' *5w$cgZѪIV _y.UTb#0A6/ăPa,ffIAva0m,/fic1.], Ht^j^DmDA~&lnaA"L4 V YnğuiEfή4{.Tmч7Bpe19I. $8mDץ$tpJxN9„¶ЎBo Atj(,.Lr |` I'!@u$+qu!|a"K4w0۷/tƦ#߼xGH}F`zbƇd(1B{yw`DD Ȳ :8c;b_'̙DS7]n[3Ypfݕdn ><`:*o`* ^}fIBQ&e%OkQ`6Kq2P{B4%9.y%L%$@;FfKEPUʟtl77,)R.F<..╗iI= ng#$3`T{!hpK䯃4 ^/m3b u? єs}.nQPT.7HN:͆> iߤ\L &I7T X<;(Byhև#YƬ'D"$ݵ6p6%VF's~d\46 h, BuLuG`D J9Hе4x#x ^z{z"Ǟ<3{X(edhv^Q L[QRy' aO_?k#*1w^9ox뿾3m; 'RᔬڽurƎضkr??oU L0Lca}q`TMXXV7ccmH /-[3PnXZGo%ݡ'Q ApzVVpKl"51?V'|TagXƶ i4ŒD]BjPXL\k9|>ݯ_2/A<"8{=|詨0]Y_؞_ Źg#}u{~mxts :w9hR=P͐ W-|S衟Zdms?g'4>Ӱv~X q$fvnpa#uZ|N_LcGmo=/ޛ ?31P00Zn(@-X Aqe2C<85'HAcB<t;pdɃ$ic|rxe)U+S4I+LmoMfSx[ scAiwTe[_bЩ)„|%:l^ݤsT2ӑ@V@D[x١r&MU-dq,G)HGf2YhlgIqRЊL Q( GqBk[iN/RD6 w=,茎i:(޼ݿX*XsM¨ 0pEpS ,vQ@ƙ4ʤ?b߽!@SpV(a :ӛ,BR f76'{? WxH6Vؤb,&>G .ΑODi2 J.Bl:\5%$p7NI`D"W+(1@4GFQcmpUA$KHB,]oj_ 0$Ֆ8G"ŇfFj8 ޡsbqT4c66,?0u}p_q"%%&H_M<ē`6 3@w Z$BںmZ`7DlTt3^|P.p,Ia[]W%Ï;8AɃ(; ~gm" |/iY_=v EkB.mGb{w;o}Gë/cw/֘oA:;xdԴ7ﶀl71 =fοGP;+0Gt}B%+Cv=(h B&L-吨*^ 1ddscX~0M9rQ| k$/ij4p :qp:F=i:`3Գ/v&s>-V?\-}8:lTYa #'Y#>Q<ѳx`^f}rU{՟3_ho/?o_&lx;8971Z/TT)[[dDCY`K{̱3=%V7\9s%x՘O%Ĝxb|gQN=uhk]OD:1‹j@J+^xА<~xE nj(Lj:\E0+E䂇=Q1X[6j\jAKAr77aY,SwΜ~[k$" ]ެ: zCc{jϢr"Lm*‡z1|%}{޷>'sƒ ڟ7otV_~G=vIYLqۉM}ˀ9(UځG??)͕[dƹj-(0#c| @ RS 9Q>~ooX@»%m7u: 81~v8*-ߜWUjIk-Nq 5WgkU G6.YZ@o͘*02ÍU7J qjN,zۼ\ZfGP&D9zPt`WL{x:*vBKZjX2x7 l}ċxpc nOdN<ت]E9 ƾ+]: YV(@w]2#1zָY=M{᧌9Dp "?)6PI69)wvP*I&Oa6TiwXO {NCuNCӟ_L&b*6salBT5`ĀGgӞ&,NN9x:D "ĎNI<7][j$P-ܸؕң8>DdcT5}"npEL tx.R|.9xv8zvB"b8:U  $FfCE-RJ*E$4zR+"цdp/ş}֯sڅU@ a- Y$n$C^J p0_#!z?H|܀7VHNaB=_X.#ACNw|r0N4 +{'FvXY,|mDe P3Ez\MSZ\lf}{'g֬o}t䮽X9v2%O(h-DdΣD`x' vs6sѬT5$Dq>#WZ3YN$Zoi?L-s-[n'g߾}`!BMEe*Eoi|ڐxuzMe<# 5F'dކZl&Y-ǹ[ÇCo<%WgR#;-z-G9n8]}Z?𚉕k_wOi?/}@$,\O|A;Bא2lتlcL0j2Q{So!P-cECLA`-D4mK~8жoKw6hUmi`kMդUR `38۟3!ϭJwxyG ݰLKŠa:F^0KP%TE$jj yeYGvV5R 4<\ybQM>YV |mV<>)yuQ{Aylnn|@Rū:X.2ʜrZiXk4~y/_~jj~в-'=πFy|eF-Yā+rpv?"=neKEV۬]V nZq#IzM2&+'<^\l2&Gڋi-4}H<:̽C>Dy OB́"K۪ 07q"S. a:0n=ήiypCWlvC¿Mp"`apT̀eB7֪-%@zDC{Ȯ羈$\P/id0PAˊ +!<@pGR4lx7[Z#uJf?d]7 הB֌ĥAps?ܱ^sͳ3k7ѳc0^VWm#'|QgTKC62{g4K x{3HUhe+:S0W\ eZWdMA/YzU ^ 7oѫz:]r VZ{{alؙTmG_ڢ,ZymD)IefT!wwO޺_K^HCude9 ?G'I+l.qΥ>ii@`ďF$cŅǢ7zj.׮^?5l(^$DWV4S3 g>fRE7[{.Ǐ+b eI[)ׇ:Vx< Ɏ *]<6PlJ>wvtбǾ2%Ѣ 䶡RWd č%,P 2`(L_a۶}C1lLxrߘ5v ;g6:`mLKVZUvҦ\[*㱞~w>`3}7jmyKU5[mBSIu]9Y7%`yz0szsf I(l &&yÍa+ϼߓ,ʃPܸeo4r.%eS=`> y o92+ھ/>/_x7nkY[mVUQց_B``Y=O˶.l"|)O !,> |b-8A{uc۰DdF}9dYfDV}<Muޜ':dT8Us|wHl;7$6 Ԉv{^716>K7v\sae8F63jM_Xkc3oɶPtM ]٬}C,ڳ?qo}g;.&|~5Uv( ? 3s ˑ{/;Qg$g)mI,9uX Z&#"eҋ0z;Jc}1y鲨~ R{vyyGyդA,r`68 壧0,] H kF {QGNxAkV@`'0 6` |6J,15fQ8qZlygkIF`U:CKn^YC)[nhj;txă.z=0uX=<-<]NiwN)\RL řTŏtcT7t-:8Ӎ,65ɼ6z܍(r C P5 ( T<^tuJH 1't&я2X*(O@,4Hg66-Dpn5@n#HzA Hv u>19L=8ZۆuX:8S'鬘EN0 8=P܅lߗFm.wniꭊB}G 8Ib+Tձ'̐'^YMKâ@\{!ԁ E$"7 dž+8'bʭzKBA$|"MKBf5VL OtΥYBAyw}μr{lI; ;Ff%xW5zՂRj# ,u=vӟ-R]Kncj+GϜzٻ![`) 9Zeoʿhm6g'T?ڸ36omt\|u űK}c7Z?R#u8ӫ6PѡgZى>W|8_ ?>^9XY^xcuj[O_&=O"!kS{xcrWnʣG#8fFvORTmj_Jn}[_Zn0ʋ7<>@5(-@אܴN \K,Mf]r{U] $ub y&KMW=H{Zw-&{KQB2bӢʉ%a0\5e#:wKn-on?8:S/xݨ"J=Ѷkjv޽7cC]r~%E㽼V xdYL)oR/>(^TUC6]лΓRs^*#d$6#on(:f{#6TXO t,ǻ8Wj2k>I_[8WH܎:;mEVuK`iiMVS=A'b u@5PA{H'$j_~ɳ:/ r ^EK[5ɉXwpmVXؼM tΈ Te0_Ga,uċT JMi':a{H$c0 ajt:1GЛ>@ )\DIߺ㤅[ "4Bu0xϡCpc6QM+ĭ:E*h®):<^E0L۶KiR]': 4yXsPo@.Սm#":CU̻@oa9vܒ|)  Bq> _{ʲ]|s@8p\W?!w{38d-:+fR7]&zD(t7P-C{yX nZ#ږ8f A6,dtAlkmD,[Ō)( 6Ǡe| Z*%p(I¢;4T0&( # X)VjeMgvgoi3s-])h#a' 1"OlEOm:-o_ (Nתt Geׄ[1xȻ#jj.`aRڶnC`x\{{mw9çJͬW ͠*iKTR$رNŒ:K;>dU,Nc܄R,A%_4ހG~O?M7) 庆!0i ;Eb&Yf *lL ><<53#{*ލ9l/ %b%ϻ|0wP$TauoCl\. Dx9c ֚N=0*lR4 j],!'欽b޳Nsz$$<\U*B>ɂ{0&/Z~ Q(cP0]O|RBw}ѱQ -%WRI(4] rÓ/,zmwg=w>}o鯼ĆeHHJm3?_JM7T5鋻$e~Ygo&xqTp'U3 ]\9YS?`i2}V~G@f.|K+wz]_/ƼeڦYk3990QC!% ;D+8H{Ι#L֚2(ūP[hpvzٴSъ54*޺b[ #$t8)xbF^W7-^6u;{Е/N:5'ה]F95t{xix;Wm…=lGO ~l'[ve^7e;'=UTo]x#6rڝn @Iueي)NQՊ <ڳp'fog8=Z ,u 2TP)Jn*vĉZ%Sx| N;yj/rѠZ[l;NmU=1Sx bKol+\e[i60lv&[yxKf(Yf'Dۘ=o6> P1Yi&Z>'ǣ^qVIn,3H^j2c`T3! >?뷘| G0mĿ}?@/!m!<ى)l3 ~k\妴2zB$*)cq#Ö -\νaAiY$@U9l/ܼZJߛ/:t%띾JԹ 'v'ѡB>kx S<=,%Q'# n8PW "Yqriؼ߅ijF˧OЭo$ 0vRw7!P𱨇>'uġϢV;a H)eԲj **bBm ҮjxڃCȑ{40By(I$!"¦#A7ħ~L>/EWZ<.\y?ۯ})͊l0:3!*e !u*M$" h X,IøtUS`"q Njˌ}LuvR[6u+sf  !//d:4> ۷h'AmZaHڔ mH " 9V"$dի5dn +^d;#ƿQЛ9/J$Z uXgeݙBinU,H$96Qlfؓ JV36ͷ߄ xZ_Gخ8m`-0m pd$9&eY/6ZiԃâBl\4ɗ fq/C!_Qh1vL[f\z?l ;~7+ÛLݶsOWJ} Yp:wƩ72*;V;-T[/?ReǔS?m9]>o )y}r^yZ_idkfFCG$u[ǣUn[]P!aNw$qp|</?t>[[gw˯^wXΫH Å$8tK[fݺqBB Qo7CB&l…қjBb@׶X]]]LW 6pWRw/L״fMu xJvtjYdxUo6k>kͻFvܙ.<(Nnxfld+ 5$(I"WF:@*N߅XR`}~F*lZeW3@/&;R[ņP ^ÁL ;Tnk=s,-.k.n-ͭ߼~jn9zB:s*W].D=EzJeU6U~P#X!ܻ$*MJϵ;?NOa|6o>؀!3%emI0c[?έ>>E1uۤVsdt7Vjw{/++-4:k6 HtsBOTh%?Kz"1I]Hg-xBtY;f{h waUUdzZOkP-r G@?D-rJ S7߬Yދ&aуVog7;@T &lf``WXGZMr:[,uA+5g7nl*^R'wbor<E%> #^ 20CZ a)UN *IZ@G/|)YxwA辚JIml(]phiJr*J ?K{*_B@K$)VۻIDS [Ey|.ݧz?}uتA`?hUkVYBG3L[7GjӋ&rEC*i'/2ٟW'<azq,z[46-W RHhG#VJz.O=|0tV|E-N/cYLߐͳ6 RC\[J!p"Nޤ22DUE$`~l.alUgM۔RXND:@Ep:ou/vSҏ<1uxrʲ\**X/,k\,ل@${AsB|лKBҕ;];` O5N;sePLP7^+A: 硁4uv@3,9dbhssL\^1{zkoYHIX޻*w1kvi, 㨑M< <9#Cڊ2:&H{YG51G,-߽[$d]!QB$k%RRKa*eAFyQ[KJ#'ْ/hc$"A'Сj#?K0ٕ.A? `l#,54tl_?h@7"#]mOEYUݦZ .?h o šxDYń&DJ:1y(}0wri%bvhb5 cSG#,XuyεzE>w<|O|wOz; 2Y [%On) =S`AW:DwXǠ1,<"wl#x3}^҆4}k\5%8@!@%swj V 9 DmZk<;ad:SkY7ǁpv sdzN[ H4LDi["~ ehMO? 8ͣ A,kc<A@ߠ6eNL^4%IYUQ4zE'lE?$P}BX_=ʂ{ $Kz:X5emZ٢jx"w ԛT "0 5m[o q7M, ctq qIUiݥll$ U{ldj[Ui}l]5TԆEir%xp:g6&u/5(CT)c*2Z0&Z Vvek+tNj4ic+/&UDef&xtpl2_a6cw|]uez.Crf= D1 @Ħ$ސPBH瑠ϰY9wir#0r}O5*3. ^~;__??$9cFM^6T3}%<[0IR'M΢v#ݩ)ra\F6ϒ|% Zj64;g,JwrՖn?ZxV`7,D"tmhD48Yd@Uj?S2]L}՚ֽ}=Hd 1ߛb^p'!sKxsΝvl,tAgڙkLD^Y&IדLll-ֻ+)Hls+Qv]979W(@$`N"(Q%k$5qZc4n{g=rumYmeJ$L@PBzU/nNg΁Uuoso8 >`B &E83˟ܾ<*M@ #pYEBaalHH:N ??ԥDƎο=pHlb.|eG VG[MJu3c$D2 _ev6<6< ;;eN3͎?n^{& !>5aCIJ`lb(z,WzE_噃)1\]X&qvA`:SnwDTkrXȿӵFRH/&\!4N%ϡ@__+7S4OC g w+۔&I61vN(hRrcQ1$O̗<M+ST0J X$I|H9~f~A;"uءW" kUs0&~T{.\ӮG1G#0M;C>hnM/*ba.Wa8:À ]./)~5W9$3| iOxT PF(JB PC|DAHQ l| q][ч:Ms= G2ohQX0e]]r T)&JrG6-Jj +p8Y2py0Fi Pa"炮m@ǡ :J`Y<pڹH4%%8ѤGTF 90"_T*MRd/9A-։.|;po(u&I(Z9Hk]rϿ+ {4ZA|-%{uyqN3)hwaJ 8)X۷5Ú&җF՛oݿL 6ב(: `d"I }Ғ8P!#c}狳xw;~ióE{=p]VSE Ш(E_`$ R0RF0ö (M{O]hwv>1XHO&b6W8wtߗg69UTr\} rb )|ϳ]gbVUMM1M\DFRbEId;fr 9b_PD҉>"zd C : K(<)J;̐!ک,WP, cCER`&^{[ $|F6ɱP"ǚn~{ܜ۬YJ Z #D!+Y( lyӟ!ąa^ w7 ;oۚYоB,Q/Q3s( &\ Y@<'dfб3al#nȜ82φgcBJYLݟpWE"cQe R6 X"[OïKXSu`["|u*)ovmڎ8<1m?\^QO|?fd@؇"p {~obժubv(ojocn?G^ڦ !)~1ḌWI15ـuҥ!&l20ƴDy!j*,r(th\F]?cS9t`VovW;|2AD $r8t;KSkعsثTkxungj#)RKR1(J!9v1BgQp?bHKdsξpS+d %VX6?B_Rrel]uތ_[n(ؼ;१gK?w;Az`>pBZ<#R$l$xt`sԄ~jx;SFńڎdPO)9Rkpo73CͱYp^^if&챩A*h|,P|:@u4zLqԳ7fF|d~GIF!nݣ&Hpmhʺ?qz!9 DVw]:_ֵ8f׷Bcz'2iWxh;>zr:yuNgH1d2C*z9G,>%eEcM{1 < 7y&*Bm {.I24 [9س iAd\eѳ޺Lڸ3s!֒0o A&[}[,j]> kdIMļ7@l.c4 E͆ꪘs`mx"8v\H `eY kg$d3) uDG=4[KDdR@&:Nl`FmuGa(|&@g ^4;HIJz/qf& d>dHI}wȆe)M.fÉ_?cY88 GI ȕ881V>~M/`A)cwHbgw9et* I2M-H dD Yh~D{ȥ0#*Y*8`. 3KDC|HGj@`Bym]56X5 7L*T[GAY9DAb;l ,BNΞFaC3Ȉ;"S}JmD )P[8tȡ * 4#J$/ f$ mk5[(^`Q{ V_CpSE= l9MK_,r +iB5rByP`5gtfq '%.S~ImGMG2`ka)@#v=QBxgkX RZ=CH @!~aEڦbDPM&o# 34vk{;\<n߯oo/ErgP5Qk@'Scҭ=$؀kqEo4B*k "PF!}dAxo݇A~.Gr w ^=CA.'%k뼗$M zk‘6,0A* =m^Lbk^jy[oc} ,zǞAѿu4L4\!!d$)  , ;D)"+M:,BƩyJSF8:Y P@mZ4yB;%7h3Zĺ&it\8v͐*<ֽs"o0=Q@1wj\8z(8ZMn8Qp3hf^ƌk$JqE@ ?D$u'᳝w F3$Է:Bxuq<n5pPv_zaG[ mROѐN&ۻkBw8hZl\x\{$Ph4}(Շ?n/{A d9!VڻC \ؼlp>Ks(rg 9. QL()EZ RAO+uз˓H!m(4Ew;ȉGnW܏aسO?={P~tzp~:I'|̕Erd"W1Aow/ JO~vQKcDв"=3/cq?Gy~ Ő4 di\`Y evp3ׯVnĢx):2%?}wiޟIdá,;[imI8 j mĞFD>BARgA H!FRCHFn$L""*]aH.ݺ 7Q9= &04$4y;pTMZ>8唐 hb,3r =I`2F|Fkݧ}bit@Rd|5z|t铂 AR4 xx%b\ TDuuzgS*4'SJ(3('4|Qm I MF:t0nF|md Iy@aa P"u64ur/LVw\rDS`gČ˕amݼJIqn7`u B/2\8nnbJ[yMk~J85RpCsԿO;3H%Ah ݰY&x0d&訳瓫Qzu{Tk-TםQŨbi4lI|T e77=_HRb4 ҿdvv!?+H*í ?``6߾}RcOm xr>͝9B! `vcAL jIqz <^â v,<ݗC_1j;*@<Q$̪%GAIF,F&%0# &N6^A.M$0*- tކۀ;(BYZdO|){kǾ5YLL38JD<ݫ^&j lil&;^Y UI8(V:K>r*mIyabqyzV}5 L:d ÷?a<)=ЈeC.:\r!: A\S.CyNtğ/w\\sϥź;5ڛ贷ڏx Vֶw=vmM6FeLaX!",6}<-"ra4r{́7-P5ÆxB=zcu,36P*tJs2YYVyʑ;ރz{MjEF'{ |4Cxȵ,`'}"11 h۱wC1 ޸~~in˃d%XBc~DnԂZP3`~̉ői(5`ϵ{[p/<~jvoCjHi{c24VehP(oܼP{4W [=Zs^ܺ۾h(jQ03y3p3z7D<ЮVne"j<8w‰xg\ꊺ=aLwŀ05995[h.Fln}s1:\L\Qx}_yf]p"=Dd!GZ@=ȶTxHYl³FCm7[e!@7y+," gK:,`IYGܱ5{L'aAغqO6z3əgQɔO&d8BveL?ᕿb+{#+;[mXJPz%o#g< vVn﯁[oo{PQ*3{ު}[˟^OV'snF!pJ(DixĈ*%Ru,VW%6r64U G©N7Vtm`F}oض&|5䏈y!'#Ӈ^<[DŽ[m|] 3'+U  p{[?&8̽moQ䴨hf/E4Qr ept =7hBrMUYq؋CE6T<Djz:T"&:0fr `m04`wG1By ~@lI%:9ZW1xW eC @ d|gd֠ "y HJ6 T"Ov0yd~7B}BwtM<c{Pm^E+]ǡ$m ڹ>iDʼnIN *\C'Ewv̛ν=wn}N#`IR]GI0Jhu-T  1@=RJA#D".OjNxJӘU& t.%Qp` q61 R5zIJGY^`DqXW|}QDZ1#(h(fԻx䞃[+'_OzΩgWkKʝUbvxR8 m14 OP9,8Y9P )n\43ƫ`qRa8x󦧌!2=UHafIѭBZF0jWAeÏ !}2 d-t.gOŪ+{kK?R2X8$FS _f;HJ3 sA olZ8)>\Záy`LVXrX_ Yo(KM^娛+֍^*>7p`h4aTia< bŗ_4?t&yVv?6LsJؙ<{7_GOt}á3ͩګ286H%?t}ȏwON a0tlXɤ 8Eѽ 8l6F@PŅramx=EpO&XWEđb"q;ڡN|>uvIx81my+65=􊡉 ۞?ھ>F|qK+}6`Ν[JK*v{KvSi~lwǤ .Sb^eYt{CA[M(1OJ4"I' \nbGa( r͍ƞʞ`,$qFeIS_|-2J]{Wk(qJRd6xVREQ }<fnQ.V)q (:Ih,@t H!c٘Y#|FM麶i)p'I r&9r5UmS0 plQxuzfU8Tz!s6w7&VgT]6X {1CIzrm?J/P}")h<CF >b#g] hR@SDgAt1e)BE*pe Yz(rP1(%h{k gg^ 6qV7~F{ BQ4HJ҇J|e6BC=2Ip(<~[`,\Ľ^'Uk_U*w߃Ww/QH!D}lUJ5܇Ybғ\$2W8x+0R`1pZˁ]dA*sDFT;󵃥oJ=Zu+g^V?:3>o1=双R2pҽKPk k#|lX՟V/Tu, M}OL~;ykyߩiXFxxL#Ԭ6n6/τ]|wpsrj1SLڦܾ}s3_A \׶uY% gNNy%ݿ4FУ7~HKJ}&% _:[kU+;_z2-M^`KʎX m?婩՝?+[BNˇ*Gۉlw8`t~= ]". n/ ΀)[9|^+޹lgc(LRc][\kks߯lOzDwhvahH|O<0$uE9Gj1<|2GX3⋼kmUawQq:4hf"Q#ޮ1Yy[0\W!FӉniyayrB#}NrsSb(QXV=`kYP--]&82|F}тM0t#}m̽K XU% 07)(zMrN:cAd2-D` "qC (M6Up2 ػpXنCRC.Qt`Eq _G?o٩ܛp^NHeQ:blجOEzU+*B:6!2ub6м kPkupW@ e]4J`.I)f%Ig4iSZ"EШ B S .+"fY.K|\O "_DJ3aP"m0R4*` Y1Um׈\>ho hh !\' cq{jXp؃[7Pg(Bg@E#)oިmPٵް 06q&1(N'$@@0QE(h( '|ه+XMIe  ^: ȗa* 3cҐ8#̗\8= ]¯s9'0g٘foV6%ط}Pqԛ^Dq6eш:y2*]+vWnkujJ`c{ؠ)Ӱ;M/iC(9FA)1 F)cIard %Hq ݋&xLo6^x=r.zCN cD_vQ(ňXpt."`2@hX='PR&wd@%SQȗDF F>/"{38-_g1o-LÀdMO1{ac&]Jplpnmk!FM  Q)0<uAI!DJQb,֪ˌM'rxx.0&- Cu;6FqЧup;9 J9ֱ-[B9J 8PLƀy6$>)'1齊zgssC6pwvjW.*Q=\"# z\VMKoGggf]~X8_n)-\ÿ? Ob={m}=]NߪhT˱'N][g!>,/ӣ @KR,(\mZP/%,^ TFɘv;u xIV* An²4Za +^ʖ!̌!ggrڮt2Ŝ'6Wj bVUxA TwnwL>LR\۪mղ0('SN] M<t0ARTjnm!e)ɯ;MLh~2H ~wwzό\ƿzoiuoz=fv|yv5[ ˣ|&4!gwaޚ |<h!x?;?{=O01;e?P\+gݺGWJV0:83աӃ>&Ev0Σi ht ҰH\HwxU#r&~p&qu^kwO Eلn,K-J4'zx=XN:&81uM_D rc bIEe|9B NK* e"3hP[C'r4R`0 Nҩl 7M} 0>|ƭ+!M<=D9t  & 08z&9 oX}ht㭪@e CxCx~͝M8C8 I<(3 n}StZj*69"KZf`1p0v ]4@D!BSOdSO{ƇA,= 0ۨJO_4Wc%1ϢǾ@q1tRKC>evf)JC ~}Fe@( =3 k} M@<ûOe GX ?up*d"A\=I"M4x߉a3p\Ơɖo1a0_l_D*Pk(#Ul0L\@TëT}hc.IazE0x, ckްG=>KqnADS.DV9Se]=$K! $vqdN'XvMCK `ϋ8![E>k=fnw)L/^ Z|wM%_8t}7q yL>$H(6 ~_;O~x<)c[;I 8ߺ`wx\TM NӁ &cPhiBa~nkQX57=,SPUƠ'鑳n^op?[ ":Wp-0 =qeEĆwłYfվ9Kb:H"+lV9}-\ʍխQ$!M3 뎆^eTf~EM edǗ{F/!!O'Fj-䱳GDŃCAuה!V9z~4H#$SlNǺ<]ۘ.ލN}z$0 "Tn{I\i===3=옝X $hp$x "҅N1t"EAR4 `{}uWW7_]^||O {k`-a,Jqd[psb,ӎy>t. :?@&wχv Z; ̔uFIoqQKe84$8>]bhJ]A;XϵVGa< ܲ+gDh_.On1VG*fbM=8:1vh Dpɴ[ߣ=%2ۂ1Jxe097sl0duLxvsg:(j"m01˩Ds[KD:ZC &l5;<kd0> zs_ct^c׫U4U hno'ٹ+e3}s oa},~bPDāy+&2xsޡSY89W}.*]ƓnԉaI\"ApX1Z2t(=!3 6>*'a2y8m-9w`|eX_wH7@F:H s'0[2r]R/.G&q*`z%x+/c_}4wGh̩^lga:\\ZɫI?=X\@zv3x)*i'ZePBzldibAZ !|, &m)º3zym@WISqlT8Y4{ 4~P c HaaUӆq' V" $?ΰxqO!)Z}R9lƎ#fT0|ʋr)T6F3A{ C. ǙP 1"< 6;?"U#Ur(QX@}o[ƙjGꎏj jc(JhnA<|BkChn:>|柃Ug\ _p n|C?CINNd"_߭ *)\qR\[g1a!9ƺPdX7 \IoL(( =&k0 w̯C~1r)8҈ 'mܲB =97UF` Gn2B{t¬4  $R,^9B,Ed4ݖgc^DC* JSXM[!C)D0Idx%Ɇѡ!.d+p"1l$,)TCEb0-66Dv7Q$[dȵMH1"1 B{$=58]:)g5 1ec$?E+੭X3!#+t7,q3P iɍw 8?3`prplCg3wJf$dJʿ{~s>;ciGt ݤ`Q" #XKdb)9UmjtPs>UZ~>RΩB\:Xf׫j x2Ay˅:dH V͗')ofN~Ӷed8hם˂o9ǎ͹itE??Fi_|痽Z:  {ooQK,WBz?C$sM|Qt0$vO}Q!p-{dIwc37}3 2߱ t:ڦyg{;c)|X>253_c\h0?XF@{i[uB/[qaܸr ^! f)[7ւ?kG`[CM3$' >" j-k=qa0w(%I-/T ^u7?>}Lc\[1΀O2i} d=~5Qqgq R ح<*LVʍ$rg~f}jo}G' @AD#k羄x/|>nNjDg}Gla`XA&Ʀ a5"mʝ`%,G=0#Ǔ-׶\&@,C.aTxoUC.N'QHRz2&@ FA0c(k{j\t4}1t=| d-6*y`pg6E{'̡'B$ol ϰ>c Qv0l6tNg!~~.V(yP\UϤ2E{?]J/,bP`pԈc ޸q7/|3W+[PU ":hZVq{DGF'[fܤD΁tJ)?zt\}a1o;z0)"ӓ)$ό鹱ϫ54Qxò_) ޘVš&R@A[ClպRפtc}QԄa+'(DK)R6ڭV9%E8irl`#€2"?ЀU;r V`BFdrݖS@) $-`Ϟ@` 2G<ru 3 4{{܅~>(-`<ܺf{34n@o7s[Nb/-scK"9){zhkBn'Yw?7a{%qd&!/C$>a@ gk@?m04Af*O1Ʀ9D<]0@,$S`O *q'Ux[{)FxU@%m~@T&i6O̹(5Q2'< d%0Rom`z᠇?B.9%rРTRzAdbeR߇ E? ,gC` I)Yud*F7{F{`\SpYzze Ct=rO9"vk3 )H *'Ip -9(2rف|HzXE 32]C27d@gFe%e2Wk(?{ 82,(5kۀ4l>E𭯓:A s._~[m5*4# 4Knu\GT:e"*4PIq 0G <6iuoYU0 ʆw3PƦ\h9He1)*%??CGbq::4!0Q1 xYV\@&љ,/ 50h&ͳt<q$Ƙd'RtFCL0B] 3W@gnmG +th`qu-+?=9OPwEMdNOpig 6yAj,NgT`c!FX"Ө WiQ))m Óڶj346)% KJ, B2xY-h Vskc*Lz'][K/df;˚nǦC?Jg_·__nq;<4+"u;QD Y*lV떝g-~9^aHm:=u#6U{ReAxn|FgwܑZ_[ٔ9XvyC Ȍ\9\$&<۫6:HY|k/4!cC$ɴ(%VDՙQ`tfht9sX7MTLpE^j1`G[ggO|I˘.&(fje@SP zm< #SȇESR MCv͑d?QPqpX!B &ЭˑsQy^P#U"`uζ}'4gNK]2JӐp&M`r;߽pgg^yF"ڰOSJ\>T5م2TQ$XSmYA)5%Zw4M?s1ZѸ˄a6Z;Fg]},'iƪ桐0A,-l >@98Q`%Is?""7D04EL>wO O)d!NB1HAdx&>?ςaA*9M1mt_B>2K!]6E&`2"P"$c1xu.8߇5pU?*Cx";Y (M,pp'G2mxYY~W^eld泱꣦cYj>\61B(C,":۰9P{wo^9R6 gLdAwEg9. r4MPA6D,Ig"UOPX2=1ܿ&L΃ 6IsϰJ $xXH }Q)h>D߂c(2q((\GMPoAqifrfEX'NB ǧ>%mMM<{,o:Ma;U8~ Y5 ?BxbAcb^@1k:AVVfRp" wP&Ag#"+Jw&ϡL {/#c>c3QOE!$.hP]D(l.j}c CׄB H%!n&'__oTwb!_$T!Jj)1!Pڂ=Xt^|]}S^-}'׿ǻ04[X=>8IEA|6[QD1w/ o5 ,i:q" ʱ(g?p7W0k-Db*˿?`QC48.{GW`qFBFVk`@$zNq8QX.+M%EL&'MN|PVl;E%r49b_8*!ӂ8eԙpD MfL2%sCyǷކ++!'#,H|7XI&ER(tO.`c{Oϔv\Ad6r:uOhQ <2oiӇ?7n][cxbaO؃*_OJK>@w~^za⩫ g uh]]@k-ݦ,?}Tޘ;?}M7,t?sozQ}'VooT$"/^}f1_c!rj?iG?9e_ߺݩ7ܙmZd`0f:d͐^K+S8C;É $p(I`<%YM ax>dW1OW_Xk0E;xy}T_8Y ŧK?{sgzw۝n ˿_/ -;u PL|],d+{+n~E;<ćcS`·ꡥ7S)fiQIWG"5}P|TO:."f^Eҭ}Ak~tפh8LeYB'_I"ܼ-} 9P<Nђ*`kJGϜY|tkx w[$;:'O+"v+qNUm4;]?Bb`Fld4R˨|nl ijp(pc#Ci d (bhb8,{B,8^[XGڿJ~@mIUS(5.? m^ݻֳZq pp:[-SJ@ol9p}Ǚ ?<n4"jp䐻se>3AcSwV%ENNKO,h׍  1( !潠y 'P`A:x7N+ܡ[o^&/_:wt<[wW wL̺ ;0gu[a:)ycA8=8l Y!]ݶ"}oQ/;Y:Cnc6l.;'y!݀2 ;pTCv@()3#O uH@dKPxbc8f4"5DJ,/Cu'xFU^ n!c'ii6qa@C0C<]8=#?-z[7vM8"` `'T>|(x䃓ayR0@r1xCU ]%t/"8Ji깗gP2Ibwk][32{^wH'~6'Fxr B9 OE%DKQE$,LH!TEsBdk'R ݑj5{" SP9 $,7:IfE52"p]&0wЪ#=_^Z}Dqhx @2 +d@h#dGΧQdC`8V&gC iWQA KPk`}u^X8OL߱#`D1<6ɼ 6!Q: c*ռ݀&qpr :Z@O;Z_ e'KHZ{ {@Ă]:a0@8wF Yj'XIN?;~w^A=PkL-wYkDygڝT8ALeJE#FѢ &JĔ0ut-A,. 11sdJaz&1t3*TC} b89LN)f~^9p=ms_{ 7Vje_i gM'%D]` 8bAQ6 lA>0Yg'h0 : o~s?Fڧ0\>RH;GІp:90[27˗OeY& `ٜp rϴwVtס YfSmcLN&fa5 ÐH8nwF3aSetK/p:)/t<ŧ{ZV{ U\ =Lk>4u5c~CtbooNƯ~=L:K,ٸZF拟%*ȏw[woD<VVcr[6qһs/ "d%N뛐Bk[uCPBA7hN|B) m )U΢FsPp aM=m:Z-_Z?(p@4%3Q`8B .;{/}6zJq4}gѮ5e{qLK7ou;\x:gO;Cl бc  _#[X{ʯ|ߊza693u&" /~kǘz;ᇷn ٳHs?}z65v_y\:^@p )@WFבuzB佖a}מ:x~gcb񣯼&{|z^D:O*yl?n53^-ayL3<蘹C`Q|:}Cbbػzu?:F#z$*wm tՄG Х|7QԐS5ݷ;ϠH:TQXWB" G:5z8:=}`wg#G7cTlkG@HSQjbN(Eφ|T˂ Qӟ;25ul5͟l?X@=n\Yo:L_Xx/|h\}meқŋL8b՚cY~,AA<e* E (ѻoS өId6t UWoӮE>5PKfjRAрGnxY'CX 52 A{D# CbDY~`4zRahܾ ~u7 }7ZR6Qw `#Je$OS[+P482+NCsxfPz& `|,/ );G_RzcB,.mu86!pC+4>E!X\٨ q6x y6 0tRԔ|(N=z1~ tw}r_σ~& \L66Q FKQai!41 cP- w{ )6䎠 mA#&BGB{0i8YX:9W7C9'pB.Jf~ jS~o^/3гFAd, *eJKjGuRE` SJk򐃀xmi8q%ny"@EEYWlqTd7P &A)R¨ݵ&$`{18?%N98)H1 (` 2'VDA0e9,h~ oڍX#qaQ4`eL Xȹ@ ib!p<,/S!f3axG}*Q  ЕgRK""seAM/6|!*5[D;7vG4+|Hf?X/ldݦ)U0m#*Ĥl;X)r]{ÉmQ|/>ӯd_>kw߹sSV~, aka| Va^L GJűz ̫>#ܻ[7oϟ޼ N]H"qkۆ4>%D%@m4̆h3s1)U+.*Nhu1:wӓEJ%T%n Lۍ$"n%5FN,;84B<3:FL ~Bgn:?VLLfE/33ӳ>?QclϖӼņ;cL2h $SEu=@@<_4B41.f^.(džp86 yfk͙Cp}׳5ܻ,K/ܭyq8ݞ~]5gY5&ĩv8[ꑩOl~t}ɰr^T61&7/ 8kwy+2\qOmW_rYFyscyX;rnD>2tzM[9MSg.UҜsr悪,~h@̜f˫×!,}0u$LERr~`ߣu?Hfak=xpoKɸ2իQպkS8{/^lk)cjq3Hɻh3؄̊yWwڐX~fo<kz ,Yg.dgv^(ED1p,Mޠħ"G^8jv_)~Q XWsYD!gDǁ5$ !'.GI>v p%Qq2RhX}={Xv6nz(*P09MP5=r|^ ґ; 2d"w‰dWI5G0;j}{+~|w{^t +NOnٜ=-YthR n^ݵz'ɤrĕ-Ql؛fe`EWŅɱk,%a0sNOM޷I&$zb;FGsbfgXX,F@.Va GQ)S'V }<KrH~ ֲ) a->i2"kfw2TL.'`X M!=jC1 ,::JQNGs_9N]YNJJGr4] 5׳o^CK 8?F7nDOLe>Cj(k]C FG oulǰ mOD6x8IL@>KY `<::3e 89[.l&xx p Z+0t(g%w!r^&h Jaar3"+-X7mF@ɗ"E2MLAۅ.=^0"ʯUG ?ԎZ]!rTr @"N )J| c$GnKl/ːY=/{ `@}Z*2>ٺw GPT B{`8hfg!2\qFuҜ.Q8Fa!S``*RMPvh7J+-0c&V{{hNTѰ R)f<<ν ]a٫2!e9^W@QO}t`E:]huM<,=5O7jfxF:N ln1"׻7;Ia}ߩSCsKÛ#c(F}#-EV;0G)ce!%J̓HE"t,ByvHs=CS#\"ֶIױ52r_t_W E Uoz6EYJ&" ICwE@*v "Z(e~QU[G MlXV=[ omź("sr'Rec|25Η0)wX4"ZO^~[zu|6QN}?8xک(GAtM-ݱ0:=v?74тzZFCvtIb2@2cT,;&nҥ4G5RH |D+H^$.+brboXeNxt4,t1qcؾ1B.<6(LvDl"SiǼAΖƒ` JL>:1~秕CSY]6<5Ezzlqq~8O=1`ktԮk˷bw-ԄM ^J.z=/.~! f;3ũZݻy­-m/Gէ__vYmS8 iv78|Gm<+ p@qڃ 3|Ȳg.Wh5B(FYd$ 0]zzheeݠ<ϨP|tݥgRn1D 01E|Z)DN4ooTEHf8.aUFV) )DmaYB2/B<~<{&?3vtjn6FGټ;8f ִ.D\\źܶ:bnʭ-:5"z=-$<~,N0ufo|ܡnA@QLO^"EHj,A 1%te(AXoR _i(ؼ66ۻ8GX2QABrk] I+39 OZI]ZE孺TggW??w;CM0]81wɓgΟ86S'Tv Qoi(EԐ*`a}zȦă:鵅y LvւޱbXrFրblP4$'l$D&-M@:V ՐNѓ4aL:5 EZ:*oaP5g <<~"d4CƩ3 A0dYp,JZ 7E\pF* 7>Ѡ [8C.!Q`BXR#xŠfJ u2=y@Xs$d2& oe[l )# rVw`m wFbɦ$CGGa})ӟ̕Ux:V6`2&$BB j v"4 4Qm ?"灔i874ES\h?qޡ'w_V"v5 D*mBUXel)x )Gv(nJ5$W5tr]}k z(<{įW@&fO_;Jjڕs^/͌5i`mhZۅ#yΓ X`md|m.fكڃ ^uYll75N=)$˔#*4=N%rK$BbqsCDz^dX:WbIް}/xk{\Hӛ82Ь)$' XPVdP8*l|G P+ᯇU fj:繎 QГ$.y/o;Pa(`!-1^!c|;Sd6c$z;i\N1Ǐm"9xF}ޅ ?:uChB0lklZg#&H{o:y1 go< Ekxot6Zd6ѧ~ڵ9W6e6pm g/s37ا^7dg]gmtKdӕ9E~^_t*o/=%fUtߓV^45{֊Gs'F3hUPN ?zs(vTYiԘҭh/vx:^0svm4hwSkwR[ř&ΞOG%όyA'!:phZ&FOPaMmZP:}Uzsuݓ HEQDɒL{-[ڣ=Zk{W{ٕmj &ER fLαr~r{/^4xOJz[wH2rYa!ôXj`JgJS' 5&pXiLD}R@CtXB'уե  Ҥ{i%xSqdX&JS8IRCMr7''W8W<'R}4 C"{]~'/}I@?5GX8Ih p/ڴj &hc:o)~0+;m:BQ;D$R:-^} 2P`I48}0w#)F(q#n\g^R o*{xGq;p"h>ceC &،k 0h~vu\I聶yz?[˿`esL??x^->kk/PPD(-w 6@t.\I($!a!dPȠOO2gO(KY33xvʰ&0X"DZ9+Og˻s=Ps >tZ#_WJ- z)0|`P5hԉ4I.Q@2t|"K W Mבatx.##sskՉ27 ?>fThJ[Ի <O Cܺ%X3i KoC ?!0qe`4'N=Up]m"-h _ݟ:ktBa.N LqJE<4% G\ ,8 ; )B<0~!&4a{+ TPG>#>$#ƂR 'P4K:ߩ$ș4ҚxԿpF.D>lmi>3ڰ 2 )f` ^iT9A=0>JhH|W@!(^As4Xy۽ Qc 5|D EQOۊAE1479TPPyCXބRhiA(*#/4D[7`nxs : 8A렿 P $;5@| @0D=.w! {]=V\] j R߭!"~z!d?nnzgd%o+zs,;tT6ӑXkTLlL.M!11VmA,MCkfq"W8~6/|왱fgڻn@_Y[y-L1v+~,OD >QleE 9-BmR&0Ȕ$)%绾$KCS7E 1h/c~'96xGhׄ7^ǁ%]WhE3B, Zch\:&b\ σM9ϕQ{}@gN_GnqDIǪBW( HƏ$ZF c(d7J`nɻAQB:C20ݎ]SOLWnəpq[s/P}WL Y2cӧa͗nE"`jh`N|i7-z8"g ЮF(*¤M5 %877zc՟36hX 05ʏh`IbB>>VA}5 A`^L\>d{#bF6s+F%0yvdЙ cKaqZq%H r؛*> QxF0TdYm ߫5__LOټqO-FvTAZy0Utyil3 `:Reˀ%`j" )zuag#9TBQ1Qs@| Ped@f #x ̴0 Čx5`|Hwcq.8o5_ Zip_ cD?*3zq %xCB]o qXutϠ( J jch(I86܂8}0~hT r"{`<s Ic\`h~ 20H <094t} =NΤe>ln@sڻ0Ê> ?GIMYKg?ҕ_٧]ÞRGá-t5?PqDp]Ydl4NLh0${jȴHan&MNFUA/}Ή{/QƀIM,CD:>ë刻%Ath$@ 28,E>"MTxsaТv 4H,1 hZI  L$bTXdS Bhsk"za/L +Zj_nOTR"60^zgS}:`/dչ~OXk7S60sO3EC[h~n2{QvnR:[‹SOn?#p>8'>waӇӻ^#P[+o9Tz ׇ4ggZa]`#f>ܴAr)(#币3H~4U&9>pvmKlaa(;6:N.$JWQ{fVjSS3Z,֌՚9 Iqv OXJb Hp|[(UeQz; ʆMCkbr`~+tZݑƧ&{nBYSX9߸sko>}EMMtJS`l:RөHvzB&6?rrRKv>f0A/:Q`G>rQQ6w75Pԇz?(rwx*FWu}{=`dUtH@P0!x´(cMzSr$FhARV, ,Qǿ-s=0}ϥZub1(woR8(7i,mv86QCMJP$S*z? π@B`)/>QOE8!ާ6C&L.^}EJR6788>HgԠIlѕߦ&HѻLEFC#lD0UO.F7cZCj 4~5낭z#-avV鰐hP(:u̔$&׃QNvbzZ86UA[˭kyVw{ى+=3*FP"N͝㱤v8>"1!}98 KHA\Yht5$BH6օ80T|giEYfdKSI? ܌tiNz4ЎSIHK K$#yIojػk AD!)6o:. iP~@H#^75c  i^)렲I VpG]ۅ ") ƠkC kxqB6MNK:UuI;׉@Z OFڎ%ދx$R1e1mE/=>}[1r~k_rT2ys. _gRz QP!eG=~I d(vx+E$',=ـXutl+&4EV{ *FSn7ۥɑR#.J"rfϝ:mVFP=׶qbቱ<φhԆD8<|zvfL3@*5(CyHuc8`8)x[8-̟{.G\5"T87.~鋧\U'RtZń["_W`JyyH&lnWjt"Л߹xcc]91H"/9}ș?٧/X_{7[;|4?mw+{BX\899X(Q襧~kyu{{V/|,CىUvɌ=>>9q0_{Tw~_6Z+O-.cN,D Gwh@i8~2J{Z9X4~æ%5YBzDECtO~#;wOouCisĩ5@ ihЈ%JѩYރ60mI#)@ON96Tr<3-T6:Pלc#w>}{G##95Sx>&K"'Ԣn<]:5r|;- ǫ(2pf8$ öP(h}#.Kud%vwjMJA mNM!>U )ԕQc}9+je I]drIc'xt<7<b%ڭ2CDsc_媻V >w"L`0&rnW tavjL8YINJT Ds{pu`#G>%c@?+7Jmn{cl c%f4߾I5zvk~ܷtjQ%E&)k?qno8&ҙI撑R8:` Cg@sЋB<"tERǧQqHxԅɑLmI,8a[HBʼng[Iqqi!B\ @ fI]Hl B8:-t1x =!4GGY`[;0lf O1=~71uZ|)<@zW*Pi~+ t{gPD~^y Fx Ȏ{]A'?HáS3s Dvʇ.MumsI$x|1fbjZ81|yuhSY9!Kza?h~πZDY6jKT&|SpbgϏ*&eX91陖σ Bv,V6Ƥ1+{[wIxwZم:j7Mk[x_Fg7yK{2- \? Abt_>y:뭭vU<{߸t۠mRN+=/u8]=pznx?pSCXY]aj17T(FlFwNF @0 K6۶mo3 GKF'.ow} qٓccG'pXo}ҘW_NXT3l4^m΂L:"|<z߿\>\HUAҳO.CxQ8u/ir{uPv9y~A6oݖ0}1Dk=$KS;f:pZTqqjf)ƒwDܽ7wCIS>O'aιraadtpc^oW]c!]}p2હA?L**o^n2~jL>[} 8qqg_}^V pqqrNO{)^=5趂g[y r=И`3Q{z 8y$0˔ь$+FpLt.皙z;X5kAEE4Nu> t|kAaXJp04\yի#$X6:3*"Ow/L'hSBidzclwگUOxB MшX$R PjIH .^)f]ɩ oDtqGGJ$9^HQ) q#Dv43hFqpZ8#$^SU'68a6kA`T"p%~x-Ad6fnPm*dsn۫k~]ݺ[< \Ta$EpZ(f3KR0:v)x0,wvh=81=<)}Ci}& &LzwC](Ā*{^#Wr^Xjh8 r-jvY/4+3Йɫ({v;p{\ f Ϣx.".c6"J6Zp&&LEKT2 ! PoABt z2 0b#ҖKC! Νz Q m<4h`d57 S݂.H/g?mVAn A?h&KPD-Hޏ‚=hP(^@}(8&)CQT(l,3(<+"I#`9N<`Xt=Bshtt.JiuJ$<|6 DG [c[~Yjc $>2ӕB6@y*cT I \"Tِ0$03RahNc04"P:X{:$4KD\fP2!P" iv@X`}F?DF pxD0@XP{agPP@0BMϣx ĆDVoM9 ĸـ73Tv? >;h"lQ`!/?P߂&j@:} czř9oj7Oϫ  ihƫ^(n?Q<B$Gx6/6" xgxT"zǾD.ؿ;7~?-3rPY^}c*G[5iN͕$RKQlN/B3 K%F%puW.PH7B1xs,%hjՊ/"A`׊hc&I׮+fQ>wZ_AwR,(Mhyi EQ87*f1=rL#ccE!.w:bzoLFLF8P-89CǕ%捺`NIp4;xrl|,_*vUEA=[Vo=`2/WBu 7Z0o!+  dkԼZD͵knC&dѿ71叽6-}.geRpb6aJ8j?qTwv~}o| Ui~_u?{۹RpzR!2_?}L_޾7oPY,ԟvp?u:n 1}7ZhXkp4xkFu݋`8:5Ժ햦Gb Ԟ5rɅݮѭGbBD;(/'{|y{;h$KQ ۲?gO~jSOU]klIl`5B29/ԬljO~9wְiY QpdQ<^oW7\=}Pۼm|wWLΦ^z:*m?$iw~$h޹ *0)Y8[]]T.;r4~_$YoT,~ Хfspk(C}a)vIdv+:'O,5S~_~>-ͽڻ~kVkv?|Yf\Tz/} TsF8nZ8ZSbҞg VW(,D #7(/>w/֯i&dǶkm2y3ҝ?{JipKPa(f? ^)a޻>5C黆qN3g!ehGS-㘃0 eqP! VjץX  ? Ytc*͝>QL]b0_X_"ǺW~(a'Bǥfe1`Z.K.'#+'gtcSxf$`\~Sa $:S9hvuЮ;nS!K}'ό8ꎜuL'0@oHMs8~=Q,CfH-h9 q<1L 0EQ魣CYSeVw[G_UXYWTe3:9/ BB }%rQA$t+7춍Y"?N*BU"2c @t:#Y|71Z_;:BI2 Dmֱ1%0Aa7a39YC@1U[8R5sX<,QF>7F.fy6 v![h{u|!@ hzwUiꌠ*m2Κ ~B >> R W2^dYNDBލ%⾭wȸ4LVD)Uu@il7*˃v}Ӊg>{L:ou=~q}BsϏ_X`}}V?\\o'x??_ _<+p1Nvns淪CiA[VۨQXiT/aZoWʛ2vWl\ɺa6lcesW۴2^9?g QYS׺'e{{xw^l&s'&soBf߿~ݷ2WXܼEN2b(i =48䥣g]^- ب)ʶ a_-q07Z+ڦOtL{|hdOI@ ;{yz("ۯ4 FF7L~i^vlJvT6Z04۲IP09qϢT!nLܼm6"~H`&2$r1O<1VqYH".v6CSC Gxg/qHuZQDb85auUOQ#L{<:Ɲm < .<r:5-;Lf9д 6 ( OבKW7M0H.RHb+Ql3(h0t0D{xת#vnko@T.^Yn#rhmۉH)KG;>r̓]QG=%dP<+ҥI*{Ca0 d)MJ) rara#L]z")_!II^Uy_AnAއ*V&U@("]qe[v?DTd io`L &zGs!02-Թ 9ƀa̚ CɩSgp@ĮJ! rᮙec3 ,!")3(DRyH``]i[=g?ϱrp6;$ҭ"upou u9Hc0Ę;I/;J?xb~d,Dk-&L#}0q:_`hi75M'> WHA۷AF$>/RN`(= \ 0<W )0)>'/?=Ǩ9jZn48u:貌o^~$mRns׻tjxdmx-G83F0-UqkٱVh4qit;C>TxbnaNX+>i8C,O-Q >Oow}[e}ݫf^3A"ԩ"q)T?7?o1l,=,t3uU%J57w{׶?gl?^ۤ*,TsSiTnW\hx%L՛dLÐL8$$uGH1m:)٦ \$!61š(a),pe2!scD]dapЮ;"u6K  5wuܲv@ᔲ@S3Z}_\!T< ODf^:LԭO}ˬlRCzU]/|memٹ͖;'FK WpzWFG Z6Ǥzk{yalS*ilL'{R@FIMOT9+d{d$ccq6-OfptMuQyoQ0.gO]XYy]"SI>+YkVuha!3E5IiK6Y.Ar(UZ׆Rܕ-"93L0:/|}/TB_;;G|JT0:~dHqBUeKlFE$XISXQi?lی @H(7әі?S="c9u[6Ӌ{+x݅GǡE=JyÛ.LvxӮ&EtOiF!1Y=`FŁ"% ##6اSI|aB$+T.#MWW_( ~ChH43l׷:cP0$ H:(4#!J>B/!ωV!F>Br2B!&ఉǜBdrKәǻ8#$ tɶC'BbY8Mc@$HNNKc 0 6?DbB`rAZDbQS1hH3%r"[<4J.Ppadh Ŏ38zS #Cްyt(]իCCCh@>>w$', JJ~#01MSat踮SbE 1sحj?dA1(g ĊаU÷^`YEr%V2/LoMW6 9g},HLc\\f14 VJ 9,Op yv,WDV!}L|DiHTHA:Hˁ\ "Rc= bq2uRFD6{Y[b3P+~ M 0#4fvNc(BcgÜ$TL,&^D]6}Li:u\BA,E"%mP"b\X4`pL'z8^,3ko5F*|* vN˝:wTR䤄ӭP/)~2zs ㍇&~GQ>O uzE=5&gD*m~h>?'ffήꇻF]U&qv GT|*<\$z' Jtt=U,@mEm8=To;~ 3HR<J~d ._?hlm2SQ"E+q9EN|^Nlp$ t uɹRLc,I8xB7{MeKICbuA|jJ볖cKH1y Jx|m8ӶXX&h" aHɚe\hJ9q]W@ɍ!$N54ׁh2T==zC^1RPV"CnlFHH Sz IN/ʣ\M{dN$QCȀFUxDIW/4N,4Sl FD~?"&L܄SF΁!H8*Şhpt8o4,_bd`LJlmfSkK\?-:2y(pIW F=A#Hi H'k]saI><=}iṖia HQ t"$*q}&c8XJ`AM D6 @0hّ"WØ1,*,<N-4z0pP&aH4aiG{ *g@_*)# pKGK.#'scig v 394안"u <_T{ L} jgɉ/SؚB6Q =ɿ# 6xB^ _Cr-:'^80^'QRS _<{[Q$, =@I2 Ct(ia|8ͱ! >ƸK9iN#&dc;_¥/åt.2$! 7s_dcͷ1gO#Gǰ.j;Tg Y u 0ʏkyH޷GX 4v-A\$q0$)uL8tB\IuIᕸI+3{5)ډT.K{@y%ل+7u'2h 8s5:9:_鲃UHz`*QFSPCOӈ ̅g>S'V,LJGm׆<|ăqq# V s{4UO_lãxcfr`ZY/nkԽуR9dJ ো3`0T|*t\uwqt]?Y)W.Ł'.)mu1ge6Rbuz{|1pqNryii,CzX++Y  q^]|+5t/\Y;1 dg: Y%xDJhƠo"+9.91s<ȗe>j&RK`kt:>ln.P ~=cThjzoh"?F0nPxmLdI{[Q4\\ [D`PF,@rn,Ux57p)rNGĺ AkSHgn$ܜ^eZ7xW) W]AJGrL*I0 f<4ypT%&RuaJL`r9A @:8FE~g@NoI. UHλ1K f!ׂ Ds!e~i@R`LYipv]hPkȂi(_ ~yc7cπQp"G 3lznJ47Zh}pxpȵ(dJINQxo4|}@G[JĊYJ}cdbmzq"1pC5ƛcwZ_gdžӣv?ox/~^ u^JfwKZؾBN阶}}q#S*±XHMu<dv?/*+juZ,PfI2K, B"څ"ˉJ:{}%#>Ԇ,M L`7zx \1rqrr/3tk$Cszz}PHxI|h֍}mqebTAoT:\9hg12gi~smC献Q,?8(NY0ųWgHO'gFcMe-/2͈IH3T5؟̮o?>X:sr'l}|NKYZ.Y88.׏;Amq TRDVエjV&Mc⩳k9n~7[`/n:fŞ׏11D8P1"icZ\5A]軬=3 -Qמdas948)cb!䘠F(IZI ۫Ve8t^ݹ;f'p 9Y,\nJF -Kb)/ܭ+/p xBLN0‰iʓ#W&(]fL>h4{öIj`%xSBTVj"v./(k*;%%J fC[VlOY`V`b<'aļ k$N{tMR>XFc#@IX[J`c#:e x서tD.DO +Gխ1N(fzQPK)9V.]g0kk^0<:? }׌5ǵ\9 !r)E4F4LrJHÂ6 SOn<($:mr8d80gaz*$D  b4hP,%7J'0p0 lڽ#dt"&iUVF~kk~rT9MDzb!m"PĽf8FZu759 aAJ I*F' IF&Gn޻-rw3. .dT(Clu^4DBB<30!iu*rjw=s'iEe,Ɛ#LqP>G2 t*ˣ0&B;GTE#Q\ÁK05;o5{^JqC] ;E .} S*BvZI%)L@" X}U(Pi%AV ^c/|6]L4d'&qnj:ADZ:]N1xw\ 6?C%.^S}z`ṯ_W X9as dҁyD`Q1*84;3v0Xf!A"7*6`f dπX"tM|a^%B`AHQpPPQP 4%RnmU~H_9{àD`$ <,_i|FvTg_Y-.Vb# %3lmr = #8~ 81@2|cptB>{uOFdm>qv//ed@=IDn&( D ?_™rI ]R1=n Nd86) B CfvZp M81)ptu F<8f&Yc7vBZ:Ѣ{>ͧSĽN]Nz;AӮ=}퍏/ v<^__lab_Y/=sg~^~6m׆}/SQůE31r跃~MX#8 ~i"ۅx#R-ų+xq1/e&ʔw 4bKrxa+*xbeݍ6KE1v]nbE pj6utPG @X9nb}x̤dY;3Ly*!Ho~ӑ$> )\҆62LL51G CS_OMNm{kUbai|?nM}|^&~hXbǏ'Epc79 0֮&{I57ouɐFfr%;p|ɮouGmd1zp%NS_x8imq.|)И7ÑQDqܥr>~j(I?ްdR8JyFBy>vBSڿݚSˋeD0ɨz2Nb>y}<&`||dM>7{A$!a 24Ɍ(SGvxhU)H4&e4h:OEDӜa$2{GQ*J gPƳHkZFOQcآb[lI pE>~*1wqdH gK <) )zr_F!?>9,EH"( oVg;?a:'=0B$KA}e&H/b$@>J# CH+R܂ADUHV;&ā0䄒Hp vΒJaL|1F HSE8faI.¹!_w~HOP3)/cžr(`Y FcЈ| L0)#+㼘wga{g'anb ʨ|zޟ8 H@wQ](-(SLaE2׆_}(PYrIRt X_CG6 ri{4w 'a<,}Tb&T@Ah?w>. xobKUUìmovBuKӴWR+ӕvt1-x9wz RItbT"}f!`,.@@xM8m 0swLJ/BJxfS/1*k#{ H<$KJ;X\b2t:$2e4ww&%A :85!+}`߃)dgV=mFQ$JK6W v6O'˗*%/;q~i*_9Vkt_7Y~῿<zuЩ5?_=o~&S__5ƫjцzŋ7;Q<'ʬPNTL}uǤ@'Z乑Ә] BUV ]XNw'˙VHsƦ?H%@& .39! Qp< `t%>z*wznzq~h#wx &cc))D>h=г(ڽҔ;;w@@d@ip=rQywh pkI*_UUEptíLS) >=)ebp&(K0@A@L+Rt6Y1! 0;ȱEgh1ifJApn>,-\!ǻ-ww͝ g·`z2o*0?JO =N_GJm`X& gfO-wPĂS3xGe#!d;Z_P&3jڠ|etR`r&>yn>v+ڝ *s噉 ,ADNj}((?4qɭ^ loT )hI;Z8.Tr?=I1f6Зf&!m4A8 &>v@GO߄=#{7Ozq :Vf enr^?Pz<5HgN4Ԭ?ۨҠpJ_|WW`vq9f5-ZjJ 4\c> EokQ `y̤߽{zewq)ZTË)ݻ:lćM㡉>"NS pJgô5әtM)#tEHD!WԬ<dqi=8շ>tsL"noaHdM,o>u&<8lm>41$ ,I''8O0zhr1*@k4&8ՂXg~u#]rv6mM|AgUӕwΝ5z `1zbew/x4- /^4kFKkjN=VZmjC 43>8 [ZktiX ؒЙv7N`fw{g/_zhwԔwr/ Lkv7^tg{];%j_wi҉k{4%I/_64ۉ:+{[vu+bFkQwpN YǶM΄HۏŇ?TQ|ÁEU{h#K{=YQ„s܆U C^\/GnM# cIA2ӟk/.+wqhhz Yz~Ql!¿0 '~]'k!9E :L&ơdB,SƹIeQ Qc`z:3cq}jWdUB!chpx`#s gp9oa7Q7v4ӈŠp ݑ#P^"ŽN0ń|<0Wg'3sf{{< G[9<`ej͓'/Rb>ѩ+@,ptZ,juF(2T ):*iAm hr8@M,9qԴ1"RT ġ49!{ \0~>`M@+X_Cw0jB'dc 1CcJ 0qO@%v?8&-0x re!8HAl=͞?~ʟ70@8`=;ɟQ5E v|%4(dWT-d+ Ww?{U.jSD8; 2yHŀ8>jDob"ç1Shp3krkч },0]4"3dF!`X?#tX ,¹UQ1UωYA%np|(<UPo~&~J>1;Qp}CjHd8?O 'M,X.+[{f&)T1>B6mBT| p4?"ʯZ_A(ȥ$'t\.ъuq>>Xo;ٷ|%]~___;NMcRpEx>M~I , Dn(»'}~f4(LT"T`ؤDCd#e }*,р "Lb6#" ##O< Y'aHň'QDƛS27-l [m?-HyNdL1N{pjXNHsjWr(L(VƄy6&Ҷ:&ͺOgh{ dhr:*''.ź4?`'㥎}P^^`u-G[?֒V@yAQ%zpNmkQw_IO8YʈAު[oxʡ:mvA< ӹ]%.R9x Y`IX"'u-4f1/v˅[K!DLht܍ww _ܿ_u3XX.P0 sg3}o,WO-5pO5nBlֶ5Dv(#Ha~:Rà9/VV3>qwaK vTq_ ?|<c` ..8Y"n:C j"4}%Q>VI xPfC6PaZP.N98Dn~!gM.e} S$z.; 7]'ăݏu *Ͱ8 A5E\CH^60%R6bM^=A\L@H NkÁf@Et zPNN3Ә~ #pr f ۵XiKiuIGۦVmHd'Q +ivٽλ`6<BWX6c4:9)&\*NfGxO615R^ԩQ"JJb>x@i4r@(?CқR̓^^ w  ba`vME`Db~o "&sNjaH!XRvR1r$|U:tĥZ0f  tȽ{w2^KڃNUŗ~]p)&9c0Wb6Xޘ^8ܭ׫VP)fZjL ͰNJqaʇ\!͗YZ<4J*-;TJ3Y^U_]| 70o ,ZΜQh)+'666H-b 文3{~k|sS>f.)3€>=+h)IXF۬ziRK/||,^Dj_nd:k s3ŝg~i0_~h6 OfN/=O?#nF!κ8sԵ{\i@F=I|$Te?H(ܣ@֛<;ND,dw; GoL(`%I8rgX2^sSs11zmSZg 73XF>Y1=Ӊ& :}Mx>!rnIJ4uVh^|{Tmn9ysW.=YzuRBm}- 2}xYfn2ǹQÕƻ_k[uc#\-g,'ۥApſ}}99 k{N$Xw{~!$+dV06Aw611ȀW~&h8<.N(?Aߺ?Ĺ#5zN*@UC.Ln( J32M͋%wY$ ={`*QAB-<Ͼ!miah| \X [ʷmP{xR*($Q,0 Um@.a!w|p&,Z@G/ 4DF`4 #Tn*#9sM ^1@@/ ^L`|BNd) )߃E x.FYÛ5)0 A$hE;AAUyD0; :éEؠB Wi +s=vֺCVQow4[voT\ѾȘ]LO_ͧ\ 2ί|O̿v1;:" lj{HOLϲD*px!5wO_Nv뚡c滃~7OHTDX A<97I"O XD IR HfXR)0 K(VXx<+&Ӊ *E"rH]Y4  JPӂ~]b1px0i? &rT4BU>['N9,-ҽ[mͰly<]8qQbg{}021r2Z)lm8i"?BMHo|{cT]J]ڸi/_S3 iqn4YlT?vƒa4PVŹSlvڶa~S_LcP&qwvo }ϗTA^+$'(1O/\ׯypld;p;0Pq4iDA2R Om!*a>?1AӁ]? P.> BrVo,51Ag 6 f;{e.HZ9ZǣN08 QZ]f׀E̳ dV Q nk) u *FM'E}o772s;a{ $5=mÛ*1stvR8*zWY۲IMX)~ѴP'^Ql~LT8}dDvezfX=3cgNd ]s$[T9vl;,ԌD@˝+Z}8VPu)Sdխn79{-eӱIiɧlUݕg"Bz8~4r~??V\I Uŝ8Xw[M_ڣnvP!{EpbPe&6yCG@N]͕7`66)/$ı "aX16 T4hZA] A8ys <{:2ܼtBsa>4<-T2Aq#?rki6mQ8:yDe3|DdY1p.r 3}fjhz6n |^д938as~HL*˖7ʁyAvC6ć/c"uMJn$Hḿ6ھS7@8 N0L^S4~( 0+x PHv H: v'@} cKNJ7PD)*P"(%#Ճd,3 V={YǷ!+"!\Bxa4PYB*,I\52t`}[{%/8X!9FtƊr6DQtÓgCAœEa{81SGk$ET0-,CAT\" '3aBG#la@Ա 3$έR'GCN0 u.ra DV3%K?fLveyL&u.k8 Đ)26@Q4}@j 3 dDA6N p;$dbSoQk^9 d}Ƕr3bnu"KaLI&,3ӳLZ2 A jbqv)oWuERH9=; վ<\8="G&HFxnP`㭱٪ﱹKgKfgk8\8'(n Q{[ '*QNR 5.q)bi9[m|jA[߰Fo|#}BaI~;a&0ᥫUKi%kS3nIGKNDZ{x 6`Aet%1!].7ֶŢ^=:Y R\Is:t:йx B3/_筵RZw6j)NO%|cs{A"),[uqLS^ "!e{|!k;V [6p(`ni ,zi?D9_NByp5x)I#@:MT:ŕ梓G;8;ܒƕ.yGsH&F 3 Ems 4mږ,5Fwz O2%L86JֻX<3W7z3DDۨgby{e/ dy=>.V\Ih%cǎvְo 7HH뤳h&Fњ 51=\ͤ2ԉY%5:XknީKWÚN˺KQ~p^XquJA|$TL=pw};$kr9"")dntfF|]Avv˿Z@N a8jwF/ÕIpŹơm'v8k܏gD{nb:.ԫ`2AC|QP1H\_0ʱ(Aj0dabe}PC]saJ9i|(b}h#qtQ儤Y4-)!`fY~'fb8:^XI>8EU|Ga0p% 㦏wxܵbypn*<&9Ⱥ @$`h {0@Zj4ԜFm,.w$=ݷתﴯ߮#%Y:'F1p3tr`{oC0Xw濿[_W=ܹoumpT1pƈztij*J30jM{l(*`5Dx%F۞'h)J|ND1DH'q~ŒR*: Yg8B,Cv">FEZу* mBlgð8fcpW"P]EvL9JT.G;톓)@>mBQ=Cq1=ur{duJe꣍9%?͕Nϯ}H>a}&4gvt.UJ`zM;sz4k78əR\fXk?oOî%&r"-x}g4u"x;oOnܝ9&ӥdFm;E5),f8,+>Ow 5=ReFX:_xx79ď^xvwmn4^y4'G|> ?=\v{o*V?4 ұ8*îGW(L99-]R5*`sj"{M`ZEѡֳǏ+Gͻvа5,Ǚ:ܣ2)&w[T>\(CcAlti[éPTjznqp蘖iAC0xɨk[d*[5 x\7:fW_;\WƽA2ȟ1 bOPyH1 ⷀjIf-%1SMj㍎ac+SMp\T 6eO<0}oYZ~L-ӣ-+D (^pX1f* h0 Ma'i#b_~< Yp׫0n=Խ|Q!bvh@lBtGJZYR }i8g)"&1"G"HL\'h XeXL%nFCGф0x2׿eQ]rQ 6sb@ \FĤ/0ę#R(2Z$Sɨvz^wX*15J;3{wK&g^[VD CxM41b 3&i1շXyAzdYjm )&qfgYSM` ȵD*D8J hnDq) GQ4J cACPVDK18S,M>va*o‰ O4# `*ƀoK)J$1:3^*= ywaG[*N.]t%7v-X:;=="Y7a}uH\77«;n_ I-1pu0YmowzTaShĄ0 &2P Ed"2g-o=:0mr.D=&T:+]xj 1nԩF_X9qG۝z_Hˮ#w}4u ,W}=E Ã^ |lƵIhz؄Zm.1z#Pk:뷺vAw܄CSBphlZ:\ {PQ${_~]Ѽ|x䧿p"YDxhٚ:lmsi(Ae _Ex$A$gQZ3kި 7-sHf>O=O taSCJLpcg3}IDDZ_ mwwjf~|է<}_=.iB"/8mSWM>12$~sQ[om7p⸫C:a8},nNa F0<,jtYUqeLD!{H>MS6P,CTZ5l9QcZҁLR) rLxbB1P,9jpHUA Q0hRB"ry"%Q\ܑe>?SDHKAjR?PTk}"dЛ8Γ$)p!f_pxijø$E h9Ef/E˻+''hszU<.OCte gszqBX:?sVq8pDdpqt/1A*SutA9[)9uvjjQ< UdAT+ݎL6R>zgLkOowOkI9a2uHucQzɬ`QCY%[Rie8SI`$05>iyPY&"q1PKXU=p<Р# ǣ_bȣ:$'BĵL/rYucuZ q +y@ ,?鈪Ĺ~ 9Աݻriь'# az:] PVLٗ[cc>prg0T.NSO.?x7n2;Ս͝脽x|B4zFpst4dbX&D81i{V9F" ;!VF~;B)|╫n}r0R~rn8 3e>s `Pƣg}PA*ĺ='ݎx#>[xg?3lw|A",[ =`~ק9v^/z2FZ4B7F5OH Kݕ9cV4mPRxke10ugF"&<+8A Xد"3&Ld Ca[XMɱJqmL6>fKvby|aNOz.'m H$3 |L'07Dg"JOds1u#ױ=sFi{Jf.ge󂧱V- og~?a{Hq%?_%D(ӾO~:: 8w]0He$Gwr'P;ġIAIJ|x(/mkk:C X1NgIڧQ>ޮA@4Ep^n^Q߄LH8ކgPVF1 ُ~d0%mr>{48KjAȾ 混`1uhb4@5\x`>nCI(x҄'ɶ!H@89p 589k!4GĘAyXxN3t? $iNNP*``8Z"L Af5!h `u TO'OpU*b;ֽ7ƟB}>|`-rĢU5(2,hWGyj'QHOyCU 'w>SYܫK8zH'Ĥ\5<$D U05Syz^k9\F!9G|Rƒ<QŋX{pxQ,GGcI3¡u8{%+S?{g4z} 8=?Ӯ:~hs2+%I$Q/IHpцs&sʕO~KP2zyQMu5gv~05Y82?h0=Z6-I#<EO<=OCgn2޾^A,rO[b37)S!2}vT\A&t$M!Z)0z@VTV{f=~qQt31f!&l5x'>km;f!h#BG pr1{9?1qibQˢ65Ƒ[D)vE!m (h X'2q B:b MC̈"+~ 2{,`YJ1&c\mo}Q\ JuA4LEMH;7'5ˉ4zԈJ7y1h4xi S/uCʇAt18G]YҢn s442;[TAAЪ2paD^:vaxbXŐJZ"훡t Mi4hvz9z|Vb[7y>a}3CѮFdqLVx eӶ; [W7k8}X#rBZi'h"bGN4WU<69G@.O H$] ?0Iݞ  vIz!SA({DcMs 0~dN68QC P:0u(G,f r0P<2IҠkrVΐ\iogBALI!{ʍI[y1iVhT#NHY#$o.h ]Y_W^_#K/8}Iq3a6% UCiBRM4ũr::QocY,ru˯+D tL@"򑣙Kǧgvn?Tv,Iͻ(KQOϏ LfPb7㗎,SɥDD> L\<4y҉ggO=˧^81ZUGU1T]pZ:8 yeزxBмGUpAhXIq.+(݇iW C Г0XpD-DM}O^1?{hc9c8HxWGs7oVC)Fl\0ŶX Z<(7kCOPß:PX{حw1Mo}:‘_—FIG^HV zU4=֫&$d͝ݎ> y:xlȡw9<-y.JKYY*QUDq&,GNq 7xEHG*n"%952|(Y)o{xX`s]Ȭ@!sj%83tH7ґ٭,L*Α【ȲW3ń 9v  E~y[XNkTbt{xǢ)smؙ[wl"z6 #(Dib;S^Os K.*7 (uütnq$Á hF qlg:P2X@|*ŅW:Ud<;ceT5QxXʍ/L,Δ'Ǐ?tϿO}y髟x")1RTt~6/=oXopqr;"Fh;~ /E_?'}/n?6C3\'IVC|>fDwBܣb&/A -X s $;A5(S*84a &Qs9C&"긼HI1tKmSI ʾOJ,¡@(q19;%Mf9NېSG/nul`k۲sr2AvL:=o/>et| c0lxt S 8nT;Pgo||vk5xʕ/K/7N] p3|˶$9JO Ϝ~wF5R S7ԂX+ vfLzM.K's3 gQFkN!͗RRSyowzjkA UzX3۴z*yTs~*/-/,8c"a&##bnzdr;@H˱"*ۻ.&w;<30'3Ḱe(3O-  h .&8&c@EY i&iه,fr" 8T^ S0 . QӪ|2X0G "9*=5D.C\OA j`;COi0X Y9#(! XIF.%;*} L^hCv%=5nVܑO^#/"|ZK61>`׾[Aa$ nxEѱg]Cz@v@=*((Iļ0E#F_\; <tX BwmDtz?Xݾvv?w^|z~GCH.q'99qX^η7P6~?z?ލ[wck_ȍU5"gLԙyI֫;#*0۵S'tV`}KZ0V>Xnul\!BZ@iTaRq괁w>.oW'v63L0r)I/$(,E] cc|bu୶;^6Z{k5_tliAż u[#g5cVc';?o3#f8r0C(L3jp@#`âbgPLfw~Op#Yn;TaeCYNFPOZ<=dsy2264#ӧڑxJ/(#—c%[ &t8idbpMgh;'2nZA|c{6|GdAfI`'^8O̝&H$QI!ݯgd豁k;NCygD#OAbi8f〾B­{MZT6 6) ;i/2|ً'{ł8p';GΜ^ܹ71Ogf:!NmlD'_yyԣGY4p$-3k05m[o R١ )$$KȆxʃv !4*LnF~9l!l hdn#l{ =QXCuj;SIz(;FH%U (0"iP$C̑ibk"#^l]2nïcQ`rcT!ըےº;l 8GhJ-ҒL:v5n2:~a*zyBq `8!4\.ˢHs?@;%84B巡-D`2zؑ #*G|zH{ &uOeq,ɐ T5:(VCUd^ L6=&dBU9ѝ+,<l /L~(Uwn!cQ+DENN>x^O'řa}AxZ,GɽWw:;$02>;f R4Ъ#kC0jriH [tt2S},ZCCp2OdɐMM'\=Z^#)6W33[.FYN&4, ڽ)cd 0D.HP\QTI ʉQ^p*p($ O 3^"8p.<t!123rdtęcO??Sscε8MMΎ {[I, I7 N~+Kn,H,L4Eb-\|!F(S mڷ#!<ƙWo؆3;'&ӡ~Q=CQ- Nl2&dLOى1QP̰$6G1=Ijeh=G7r(e5% lėj{-oKա gTNү}l{#O>ibvQ#縝߷QP32xPY];MFRv{NvgPVϜ:{ܘs#*n7;ZWRMۺ2ف֖"cc3i~[_s9ejr8 8 dYk{>~NitwoҪs7v_< -Eg^x*f݌MnA_hI≥#]y\6pWzYqf.Uky4\KVWf{"SA ^fP۱9SIr1ϼ"=%TRYYaCwPQ kU1f$^8( [Z9#&e]m7`NNDݦ.RAi T<5ۖi֠'G0:&!FszldvsdwZ.!2ụkn}ˉLL$ߝ=2c7Wۯdx^ ˑs6@69Un'Ϳ'N3p򛌻n`> rqEE6kkun(q جe9 ڕeխ>ׂDƦȗ4ą>d$-7Ǔ(%8c%XQc"Aɬy64;P}> fkcBV f+2M0n1Ney˩њbfw " u +,F!MTmPTVBO P%h AT,@./0BA7wb{ m`5JHb"UB\EF40 @8< Kܷ1B(CAvH`R*M!U|D>Uj s NʒCq1y\U4 ȲEo&b_wVS~ݯ D%t.Έ0,4/&{HKAۡ#)*$RmAuTl6=fp ڹ;Y /+߆wzwAȂ%.aT)Ƞ-xY @ S\ӻ*pj.Z?8 :`mXiabvM3#_JGAL 6`!,4b ‰cf%'2P,4x;r ='d!2 tA gfm6fq~W!&Nr{/CqT,<݃i$A`"!Vj~ug_ ©g Dž|YxU8Ut+Ωq%EQyh@R}0*ă&\Xm /$N}u2Y׿<3߽0x~PĆɃz2u jqJ^"BXu#$G[٘bq(ZH'0 m#92%T\b)q-}tlUf$/\ q Odg[fQQ/yqpTr1 HӲOa%hU9`|hDIdjŊǘ0z}?{Nll-eUs9Qd֖\Tlشq@|JwXP oIRT,l:_+ џse6 vM#bdP+v{c괟TbAAL's 7^JGxi޸T!9u [n뵢Rr895>Gd>&I1#|{֭n)DU9A('ZdrUiLN0$ሇ#`ZbY2 aeeiD$aۂLE!<0=S8lv$.%TbX82=sO|_+/~'?}>{ܹH$$SO]76H__RxBi;  JVVv;ՀH+-:qY*Wꉬpl? Uzޝ~m-߸|?/5懢3';wFSƄ4bg7GC('irעj u:M@,fz *5a0!T֑cv.:ZLG.ܼ36rZjōM1ۺȄƺ-%T |!Ν <ጙ\~=w@{ oj1Bt@ SaO-fBOȦa07Kн=B} èKp(6r+Ɂ*GȮ1i N.k0ktd2;];mٲ[.&cZL$]g\6OtG&#Sql %л>Bpr,C`ĕr2-">6;*>y-ƩSI>z]?$G\Z/Nyfl0IKlj4|A}6ػ4,+ݞ:Jӎ~p" q_'UnoÍ2|wKf{6yMYSc]/e2W(DeL5iOK! a e#jld wjh0C3@y q11"@= CTlb8;@d `Á%?ךF ī̾t=p02ڽD+ $=&$(?eEh簨=7"0=+ %$rZA;71noT e5?nM)z4'E ` چk` xYf.ͪ'ADѿΦFVU`wn/NL?Pyn>S/kχ qL30ӚxY8fw?x\[H߻D|d1sfMU+/}f[?hå/B`37>XL>6v޸.:(7M`fNt i[ՙKpst%`q?cw`q=mS&y Ʋ3Wf&WJ't+|rwѻn%2Ph^Nf~pT?{ɗ?,Z1N@On"XLq>\R3Yo6APD>^!tЧy*r{ p-<>޻]upEz  N~Zm' ò#@Xx۴m_LpVvEJL)  L[s6{ѴB~|zxAw{|JM3t}6?2Z&ѪQ^ ]MKW,U'6gdrz`$c ւhJxDa{䡇Ξ1?zK8`,8&ɘJҽl*y桓{2:9UiRG33U<1UUⵒcXiYIOaQ6b糟ĄmݒA@l/-eA<; g0G{mâbk BkiQ, )SJ2AM'5DT u"$\Uqaût;0Tr$?v1wQ h{>x?~n봀81&rv'w#8a¾+c 9lF&۲,"a:/7kTBan`YVRx(H5QEӓXkѼ74ȡʀ]DatE^k7:,f}gx՗H,V2&>HV1 JOAM nY %NCلh &\R2džmB:J!iw S$KE(+C[\'SEqm41@P7L gٷB [;.~=w雽gF@ՆFڇبRrN, 팞=|:@"EdܯA\ga]x*3OoQc~k'mBpRb!?͈x{v'9+{|6{xngqnm&YCaL e3 HL8P-^@yxhXsL&+zU&mگ>|鼺뇥f _x`z} 7|sOxM{vmifckh8(*CΦ61-fhT8k݅tv>)} ٷ™ <%δA~%O3On=cWR/}H?˫o5 D,,z)G^>{a: raᥡխk}DٻOFgXt7|,׼NH>EcT@cFfPu(yZ0XRYT'J|D0vN6.\tޞm[/MQZ$ѽM]uFQ֘`hV"C ҹˆhm#6pa"XNbǀK 47|?y=="HĖ}`p<2pyuEr99 mGFG%t4qĎެ]XE):6ixhʶ Z-Ha!Y!& J&T`$\P%hCn @}OCYغ 9Biw:i -",ͺ8R|SP^;,(EW4Dw`Z)%0S 灞UNM93DRU$}*ޑX.IXlhbd0|D4'~N)|pev_cɑ++LO]uԌKO=NDU\I._ZZQyUE(A>6<;=;1ը'GG3ǞS|ֻ=>~X|ho޾f쐽=?%_:3v];s$3wҿ3ť xHBLZj?1a&Fn<aЩ̂0R95L=(_s{ {fz8pɠDb5Q08p!asXizaH"M/깂`aMXΝ*=$ia@קIu(G,a z>JGL6Ң)S}\j)*^8E ;SC(g/ƌz^=d" i:dt4zΓˉjH Tߵ3Y`0B֦aA4_AD\: 3>ڎϵ|^ <׿ߑ#1lQ54xqN] Bg),9߆XڷR0{jfpj"@$:腠CK3QKF2-D 4[Lh^vV̓ ŨnTLnHD؉x.xYE4a]/Kna,.U+iZ7s-)ѭ̓Ճ'(X46uia;f(exZH@1 S`QDjNm&Ƞd}Թ.jlS!4ab 6;hh$𹄒 ȽWZB# \R6srn*(w1`ָp\\otM݂`۠.S|Pl%ۛzhB2kW *F& >h(hɑ^ {w>{s}ύX}tsњz؟-1zṽN7ַ]O^`<ܾacO7Gξf[oZa#|IUn ySn 8k]^orld(&".?qBW7SY^{n.MmLtXxFЩCf U[mt6vP&lކ"; 8:x@znC,s#hF¡܏%J, g2xaPfu t=Ja_\摉3<%٩uvc}a9xϨ֝DWJPBۨ}'lY l6N` <率zyvWQ$E)'As:6KebIA OgdAd-'OL+iDd.1\Tي,Kn8*N $߾FY(A6M!?rj[;xh&0+(a6m'DJ>n$5.uX֍ n#h D!6d2S=31 8If,KJ02#E3Ϥ h󜐞yά>=q8+ISS'>g^}o_NM4:=o[osKc C`Ud b9R^?:DRuɳ$9wd"gTFԩz]>5[sfD9MF`6+m%3:s nnX76hFgyHLDUϏ'♥kzט2A?ׯmt:ܱi<^?T SVIdh2J<͖?G=MkrzxA}`pDK^Xdp$'SC4cټ(q"D:sYV 5'Xde-ݏ%y%—5qIt.dAɰc] O1vF^Fx5bh>&!@υ96pRKh<:ȴ}E!Hlu{>MӃTF!ە'QU*/4SasݖX~ 8UhŹUv wR#ӂldue/ĬG[7q@l 9P 2/‰0L8GbB-\cv߽dSJy66 BLZhS/)&v8 7ʏK]'2h1 h1V蝏'|Zu THPS*g4ύacT9OVf -dCo;N~ R?8P!ǡ‡ȇh(s&.-?ʤ1ihP(#X"Dž}`xhO# 8(6=!v*CѸ]:UfpR^o'$ fA*"1! xxT|+6(`^[l"'Hr Cy&* Z bE%Ӎ!;%ƕ0e^uv:Ulf# ?nA&$u4GJ1PۧQ=q8?6\~`E*>xGZh)xUO>S#H0O)ނ8GxwަZr_o/~|ﭿ#B܁/OgK]f&p;F?UR/'c7>e83 vXc`Yj* J`nVa{9ѓc$88ΰ=L Ά%04sPyV?x_}VEOv) >3}6Vhe^]| n\@UB!x8 z61a(V1$GpH\űͷ j ]!AFbݦi8RB XA 7ѥxV :8, C}L> ., G￳/͟pIlvG/=ެKIocU_*9$35h g?bÍBdJ˿|T)]}]ÎqJy_FdCe(hsH )G,:$|yNhX&dla_ںxgEnzy J3DI$XY᥈Z *% ~VMZd.$o;Ql,䆆+eQfR?϶JCNOoT#CsR C*:E_db)ZwE-dD^ںq31-d#O=BK)-rlZҩ(b!r$У_K&=< ? ,RPHz&M/F<%FLOiБ"0exPQFnmb$M*fnA,~ۡ'.厞VCWzb/g\̬"\3빗'scX`T~]q}(5u4l(W #.o >0oP^Aqz U&׋ԅD<GUتMS)뇝/h٬3Xbo1MWvfEҜ} a%q %x.M'f#C&ka3Q\Y wx[n@`Gϣ3XM0/x%c`\BBy7NWzN3moc |(}FIMK(7OYGz2A[ZaZrD61APa@r4Ux9W e*q:QSv*z%ɴ3ȋ*P~ 5MPIpc*p{yT)]9EB$ЭQ>EIM8{淦J KhU"g?ɏ}V(0 z'"6^pBsZ·} _yIt*| bN'\`6܃k//+׈||E8"ϦGfz8 {U4F;K˙$Y| #_MPc&HWKPGrƶ9RCs,;H^JшeYvʍvhDg%u&xoy[F C'qDJ Hv?#3ؑM69J(:рU]zާwgF̼7==;RR 13cBPA9j-I2^=z_(&Z&3 N%7'{H!m$ˌ.3&Ht#jrve *MR(n 3:v5,(u --IƯHW "8c;g^ ZoP`p%_@Rxv {؀i'2IږY2hbMNM]0lO .SG%2uʸuUr[!*l.AҴ" 4+f?0h6$2FfXYƴؓ>SZgr l^ PN Ӯ=ƸбhicڴNe9\F,X'wol:OX!I?xؚJqSx`Xعʓr5Z p,CB!Ų(ٓ#^J,]\ǯoks§4Is]ڇjOK73:VV{;[GweS"{e!0P$4e0JaEQKz59 $ie{ltZ0"0TQ?:GA((o ~DTڧZF0G4ȝ*}Q;lQ@JIi(}N8T铟G#:Jtd?L(h tF T > 0^M׻{z[|6 ?N[?ry楟ZL/I3>`niSs\abܼgCjMSD\UhlkxjELN6lKIDL8W`_'90Xzp\x,'IӥxgYڅR,wL~ Wd"|Uj蹽ިkwgW9SͯU-=kfGdH|rq-3.,m6kql^9~k؆uu?9:i4,pUIMN  L1M x5,Hq_oi[oMO`h1op{sº{Ժ$=3.(N^dωA`|+0x8Y t01(osl׳YP%Z]=$H 0^sX2VUDs9cϴ pOhpB+7ΖjׅxR^#@z5f<2$#HQC`#C"y0H7I2fr4,&JEBػ /Yr0vs5>-я>9FM mMj'eiIt&irJ7PwjFnV9ĝH!V2/$pfivF#cDX) 0h6R>[8rRʪY#)hyFx%EvuY$iNRw;\fӨm gTi|蓽CimcK+e~``6fg0\3ñ\(r+WkZ% +ַGkZy$\F7.u6+)y-DEw"i#d{ơNNvOos"37'mvq y>~O0 .tXsӓK';~t-Kdvet!&ѶL=ߋ32S+7:~7^E)J3BYkvVD!>gCSy,A!?Ǩ<ׯs=.Qs?@mg_F\`29 P8ݫ7om ;8#-1ǒ{T³ÝmSr؆/{r&?**y3W~tvAϭ?<3ogJKfPJ*Krp#P3:a| ul(h 7;"x}}?1 NXvvqzܪf,kiũD:+ŷrRlGӴt:9!Cs@{{ Iw4y)hNyrAnLE&`L$Z@Ez'Nhm4+~6Lsa}K -K'MGƓǞ{r7/M29T"[,tzk3S3{l3<7`ig,qPe:$`;|>w/,,oy?0sL8~Lťٸ> ,5˗'P8j\Ei6B5m#W8á?,[X՝b'C=3pyF.V'U۴BIY !ƮITYtLQae5 +ʆ!p9.PyMƙ7 ??tmKbW~ޭў08C`[l䇻pGa~2ׇwoj  pf&(,Z Ђ`yv&#jF=s s%זZC$$2n$OM̧bճ\ 05t0t TNsװ`!?ɇd8-6;r<~l(z,2\jڎ ;q4 # 545ʼ8E{L:jNc?0r^|DQ/q"!Q‚)yv%srhV&$Ib ehSӁa3K=Ά 9r95AC$˲N.xkGM#.?"VI'KKXs5&b~NEG;<"XTC*TŌ.KLϑ0 QR! 1Eu@e)|߷a*4N⎆i`kDŽ)࠵c< h P,.5@&.q dⰝB,ǷoWǾ1ph!ںBBUZmv-Ʊ4ھfZipCD6&ag J.! !8s2i)l:5ZwJ Ls%ԅ5S_B hT y2>D~W+/alO!;_3vƕ%mQ{-pxui_?9Sx+[g~+1ǦgԔdV5D=-MP54F y*5]Iyz84FXR}ᅦ^kR!76M l?ڄ~'Ή}d,WJl8@ iȊ;z~j tUNCj}\V]Zd F0VcCs{x ]|2r&-18b X6Lč}z4@a1dl\\XqK'v:wn,MgAvMx)BqbBq\A[Zuh7"/\Jzwz_y0Q BO `ls(*dƜV&6Qge"eNi:c`))pez,Nftmr $ӿD0$<-O XzUP( "L@A~hO &FyONcѐN)(gDU (ťL N ZLS=)*ǥf&/~Oܹ՗Ζ38{|)SJRퟴ3.bN^e9gS*$D@Qvڸݿ;33~U+T֗Vo{ny*}pmv̞)T'ca8JD^PSLe76n\yps SO;X›[+Giv5_jټ*|VӘ9NZ7Υ's,B+3hɑpJgls0 c L&:whA`Hs@e!J+\svY *3Qd8> }LAmkuO;ٌ6[wdq9{A~盖Jb57 GLj,%.cZ'J$pC;9hu,.JCV 1Ä(JLMXqp؂QSF Sy!) TIY2ݶYr%yr~`ب(daR9#Pd>_LW⼪&"d6+@IWVFk]~3p KŒJQkHܱY/ {Ntg>mN] 1fǾ_D1i'! bUI|D;ذ`?1|&)xE, vI.3eA|{k2ߨ[e* }c | YT$}g-U41Ǥ9!Nii8R9>d'!NDDRDA{q5C1hpTAsl"8)% *,;3X6b<Al7|X{`s1|2wFcHUDIe# 3zj8<\ycf*QGԴThj31p9MqbھÈg L4M ^EvJCUC>zU2BrΓmRQ}d*H B2l{A<-W 4+%E~S9#z[o? B#^ c8bLۨm#"`d `/GRvosR^h{lM%V0̑ D!o ,dRn9q۾N@А1;;ayRZCz NOhHnl4bMDL:JGD$?z+e/3y)!3ET^TsSW' Oހ8pHЙE*v&5%[̳"HC:ց{x.+Iq<2Sx3p ǵJ xNeg4M~|2ljVھOEUx]K!EqJq0kUWɢsJA7[*Iسv˖A'SUu),?zP>[vے"*ˢTȱBnhޠUK*zrQ\2i^eTNq$-XSn:b/kQJ⟆elOiOfk*J? :(k4eFMёi,Ҙ+E~ >L'UW`p~pKKE A=1=?ML5Hhqt9]YONUO ꮨ1UV(k06*@g?H~J rW ڣm`  tiݣBh.OeBXul {]c0cc#HK1Kh1uexFCgj^uؕp +3ҹGPWQʰo;ձT*nbƑM%8o5w<Ȱ؀yL+|O\.gnՕ炇W嫯D/ L6<[/7LG7l1+f8 4"@dOEB6Y!ýWQݲ"&ϑg/’\~whGJ`2NLp\lq,"ȨjImQɅa qvhMV0 gVµ7I_|s_|ӮR]8,t`tYYv~M(}f/'L,rXl[@IS/D&R *-"%Q|i5t t]CO!޶>O2XDMxV!14_EL.~ah>zC4 NK?ZJ, &I֖')5=4FN:6c,` SA}3i:Uq1V&2ʑ}~trޥ3QQ257[mm4 ?54_:w}_`d!BAK;an%\.ӵL0LА("O ]gdNH7j:qcdGUIbC8Y>|$znKM͈RfdpDxL%PB cy Bz0:D8%;^~k&ɕBQI'Em^SXʤV x4dAz.؂|x&fKHj"h$*i'H=hEFՐi(psiaV%-h~hT|QX-N(5 =ھD gOE`lho095 jGX=ѡDY$h8)kӨk$ Dw&$:3WLt(O!wZFV>s@\U OcQAE7 Ͳv1y O#wDqzt/ O%\qp]78}k`.ʧяNjuXg2e GqXO g%M$h91Gv4ԛU/ŘBm7ğ7VsGQㅒd扩D3v{Y\`J޹:^y*&'{*=YId}+Wug~5̅?TīW}`_?v'oϮgzP&+a5`w*gѽ׀ UY,d) (R p> MC]@ֳQ59b*6G˨^#pw)iRD_ĥ/zsRoǺ`f>R1jFrgQ-n_~js[s dWbZʂ9CӮfy9\AqU >5Im7Gz3Db.z=j~gv%4#/\#_ﱬ틃ZcVv7Ӯ1k7`yey-}O ˀ 4U|@mtydXf^FG4*EDϨT4ʠYl8> 'GQѺaGzvEh2Ӫv| K$rzB?H]JV1Ek(E"OoTD՛"z:뜖GޚDdSVf2T*_?<ǧOĜRE ,(JhV,Ք/1S;iʞzF?OKE[iZiH5@ZfEɈ,"}ڼڻuMնV7 ?x^?r2s~<^~4+{/wcۭü>:Lg 7?8-𾯝{0L;f t9a.3ٯlyh.ZLk!qs0Hrˆy޻f:@?=`hRv4@}Xm.v-8qxV׸$%1X)nn=΄B@s -[ӽEPgl"oؒsp|m\bޅb;[%r;_{WͿ]o:>)3ZCQ85;.Z]BM2+,:^(qz8aV aâH'?pvGE,fmڂmire X  Q3 &KMD+NrZ\} T?l=f5.bqEV)iAq"n!.7%gw_;Ax%}gYIdvL0ܠg>*>*['7Giy, إx$m޻=FzC #,ʢle.w @)'H66>{'wù󁰄/ĜlE?rpg#;zx<^PY/x;$ID7a-H< =J@V1GM. Aא4Q3aq 9'}N% DV86L7 ^sK -q"C(Ec/yS`5C^N}߽nX)@Vj/@G 15R H. {hu$(%cKgXl'Zn`äCQB:#V.GߢMJ%#K`>sڔXO&Kzlnne" KI9$eQsEK˗v/ 3ށWxF7awOǙ}IS`Fm#R=&I+b_X"[.Ɵ\T3mLbiɾsW{d7Ř}/=}E41tࣵO-W,`{.oSS6*D X!CB@E`&89ꤽC3(>{xu?rNE,ho2,d3ڈ7>R`:SBȨqL8ΚFQ 78f+fŠVݽ{SH_!M#ter 6":byR^a)H03+ͼ{=D'TЃ͐ˢ~-e3؇uG_|[3@N|?Cb Tʤ¹@owJc^Ww]<\ X ^"34pWE|+(£8Vy4=y\y"텅t4KXiN9j P:Oye9/d3YZ$l{ L5ֺc]8@'gke,/T*sX~?./K[-9ӎ1ӣ\T=CtD2&:¦GQE*PB=P0hbF`F=vzT&4vTCcEŸATDq*0:ІQ6{ÉaJHtO1 'Z?$. R(Ua/]+#G:JQ4gtv:3hWJJЃ&;ЫEQN*Bt\=ihtDF\= `"K Y]@h)!T=EM%~ y@8֪>t&7oW%+H`D}D76c7~ g_\Q,î?G0*.ck#r󥩝Źѻ߻Z}sE%/jw/^t2 =j"-ڣrjM[>"u@v̳_}?yD(Ӌwoޚ 0fj^dfpqAMH*("p,Oy毾x=q'n=Ο#)޷kN$yZ~n`ѻ20opiB=Ҭ9zb).aSɌݫC\N.1 wسj*|",fnˠjB`A.=oX1@'HDkNՂ}sh"PZAû[p H 3 KvƆ3$ p*&&f[daX\>/$6L3VkztYakؙ qj8`yorEw g/pb i&ϣ}齯5-iqٵ'5aAR2έ7/)P, r6wVhCNF,ƈT)뤰T.!}C f";&Iq 9ĻQL@ZcB`gH@,3Gs"RZ5{(%T.J+2lN3i^d g X9hL 8;%*5C;=CN<+ .IC LG Qzvm-ZD{ RG 4r"MvQ}16ETBviyGԴ(I0a(seHzTy E"A`a¶itvlaECvo^SIQAfvbJX,oLB[᠋]ƒlar.Nc;s@ ,l,HĈb M+`Q.N*lzm*X(4*N]'GS̅O3:O'Vi)Z\˓A9y"@^c_ BS}Zh9SNѥB*ىR x*7ױ>DhVP4ߧYiQ-S2L+Щˡ^ (shxgt<_q)+KEZh^ؖŸk[AX&>܎ umxe o.sb)Nj`k4cp;ișB!ދnMx>ATyvss?:/4> ydʻwjn` @\_3i:-[zIXxiWw2~|aoR}Jb2@؉b].<._nL/ fwnPRө::) xYɝnV[;3Yh93x IDs]P's qzTF\ZG`4D!>xgXKDЁ=Q Ya+̔C[VT}4|%Ƥ2/^sRt]`Eř *`.؀d|U)8ѣ5@?<:J>Z|~UN 4^"ݟxz`˲0^oUV X>6R#:$O̬ ^.˭,wyTi~֭L5{<{yaa-{w+5RVi*"#\:~6zփ@1 yLx/b\3Yvz֠'旘olݍ r֓|34k/C~?sVm1;& ==\{[]1a!Yz-jݛmGX޳% 7o9ĭklr6GR ".o]T=๲_RQozZOhj[*I">U,oLncUj0j햅Yp2%_䷞cϞ2ffլ[AO_NGch !9`nl^ sXCb+ sSO~*3GcVxAK,'d`[h^793W}(l]-ﰃ=wX0ʎMXקy0/BX#-c06ΑL =hFL- syI KQHd*m>Z\WAn&k5--8lBY6܃Qz4,c@k)[<]/b(ƕuwSd6ӑ<z5%x4*O\wuhLбWtԴcԯ'b1owM o^=GI}{Cx:ڭ[!Ґ>NĆBPl ] 4P~7xJVĉiqSɅhvYIt ո`lqt=յ)_\%(TDqk[ѧd9>~p޷<3rO9a*L g~B=+r2\T Ц"n}=ga}]d.26Jqv߼:qTu`+`VfrB@E -n^BdT;󤘀ӷ򆑊.+)uW6.}7Q~sA[لywZ0}C'>(UHEal*\[On%;d@S)?;Muf芽WGԴڨ"9SIApO đ`|gfZSj4*[j CHe#FRF%kcn*!7bD"d|(sL~v zu;ܽ k7Pꖻx!g?;\xz0hovUdeR=K5X,c<6̎vUE/OibG7x#XVp|_~"! ѓBg,Tﻣ#aE((q*yS9KFA~rONGL=44.^`Fw9R; v HTDҍLXy@Wѥ::ᝉ4) a(- 4F& A!%$„q}BSq~"JKɂB2(T);H\R?h!|!Ҫz ֮m)J*NQك*j+ R4K١!'+ u"r!ԹD] q)uZFm+~.K̫ՠ TA .SO=x{au>"ݛ`|L٭GfdJ̳kf.96o[wdQַ6W:䥩ӧ}uo؛>׾xv-`(xw~ozHޑv!zߝkY"fkV+[ɰ?߸hB+c."q Y|^sN^;9?q}߈ ۓC/:.0Zzo9@BWܨ o~6 Sr4PwSimkR@i.m>9o *W- $xNa^<-wRM 6<78:0ugrZ:&4hLKg>G ~1Z}dB%lfN pt3jַV8TswÄ7րzоUzc Box◙[ﲙ~9ہ2Ņ桸aOeFRvj3i#7ʊ X~q\5J& D3|NҩV;m8f.Kܫ?F3,fyrm܌cgP2?w|v>d,c4Tfzdd1Hm~XLqYyoE.iM'`{w g eʇnT϶׆q-r"1 ,2;WzSլ/l ?3qع YJlj[CW 2Y}ab9_ "|PjܾvήSxEuwaa𪡤)~/v1;<m^ ,x`Ip.DX< Bg{k4wZFBar%+Y!iVo7k;q?e] 6Nj4*| hURpFNnT|Y;}: 9_l@[:pÇ= i_'2^v,wC)șU{ˏMKՅ|7$#r!S}iNb1[_*K 0pDr\ϲZ|l ncDS|y{j,=O=;{v~RT⾢1Ef> Rη{%FLgZrQ$&&ct}ETt#ubn⮤ Hɴ=wV_Y=ka@^ɏ=zj#=4#$Pn)"!O]P Rn9Q*9e.?Jr4:*PqR4ȌI#i( vKv3O#$)3*̯av\?@yH'@|44Z9Fq@ث .j"\ړBv T;4uF aHDyaWW fD_rMQTF2\tbu)PRpLTpOcT\lW$%4O*^|BEo(Q- '9Po1~͞t|"-u2"'W7[G`}s]NUV4EUDوAnjB+;3bDlb792>qʃ5^OsTQ7sOCaVRl*a"5dWK&SK/$~Jq%ť wme(]Ig)Ry*,&7[R9z-U,bqۧ\|/o$3UܓO\X+ũR^1M$X=u+!ǥn\t#blQϱʵ}: _Q mv<<1шPҴ2hf/֞Z-v4X-{v5HL| !Urk t.?lW>?tjb{d{Cďi EiܸiT~tBaRY-s]Lߣk5AGJ/~.{Tv+nLT+r}09;i꺑: +܇ N`Yf-%cOm޸ɻ>h*<-rՁz"ol2O4],*KǤã^" NL+ Hzx2IL$j8Y!KM#m(= G@G?"C"PPvOm@3ǧRpzC/t-PRd^1-a5U018XEcEDpMBBUx=m8lJ_$9yHBy6#`-bǨ-q&Aqb@5<Ҽ2䯓D쏱hnWp&# 3Fjow] =E]^ S|!C Ir /||rE)&~''&SۋUg{=:JzmGJ9ZTnZu<xKD48e憳~tgvʿc$_o}tOÝ\E> 3 |TVw+{)]D6VJ{^f>~ʱ򱝣s5C9iAs R2̜cknÂ@q\E}߹qDy5T`;0s?&/"GScW9ƧEf,04,M xxrf/փ{oPpBĈ֯BЪW23F\ c|cзA ƳL8Fcӥrå 2,5strPhm1 ߁7`eiRS\?#)S\Iɱp'zn%&C{ *u%"O#'><~r)b7HT>v]X|1u$u?*$b_-PY6Csay#`!SP\jg:rb bdcLMdsÇynwXܞ}f94/C,3mvZkŠ,4փNN6 JEl G/qznya>NF>"-fәn'6Koږ3t_}2|rY%ޠ&x<ϿpRV%WF5tK*NN @sT(0оz#LqS(H(t[$JDzNa^ iD~Z<#55y8by$: A2M"eT) O;'"yZ>BWeg%4)Au+KE$|1PNAE6Tf X^`$KQ BS0aC}.bUubb1TY 4L+ʪv?㵨bx5 }5As\)iY-Pa'Z|U櫯rh¥85]o sG@ *Θ 2\I_WW~~i7j;F36/|~P49+~>gރvr`[RH ^!OiZFů,?٪˿_~{|xؤXv, >)+ 5Y:m RIE7 kUoxRHX7v,cѷ/)Q(J[|r9 c,s=Cxݬ'e!Abʠ iRJ0Oע>?8[:dު"-Xɕ.qx< f IѪ· `2LN~ZMg}&[:!"b"@qڨDc0t]H%p,1%e;ΪRz#DΑg"Қ Nc/#JO3("OB"B:=uA.aJeTf*"KhX*"sYdC"n >W:YEģiP %H̐fqA:*3A2 ]:e%1٢^g.i`͸1Y CIuu#ƊxM-(LW@H `κQv+@N6'āmܤ4{6Ab\(9:3KX``R6FO,/U7}g;uxԟ*`#%v@NɭN"f 7&$y`ȁ*b?pKT&&l$d1yY[gPoN b _ay9gkfcg8" yn"BkIIY\KoflAs#7 ; 2 !:ف/?_Zc P`bpZ:MFJTηZ Qaܱ /UȤ.]W ˻XoKɠL?X _;ΫίEz 0 ĔOƒ7>6_\/^GBʽ0O֔B!WoCiA(?!hl ϻevQg> '&o3] ~<;5(?_C?kAķizL!`ux ^AxAؠ(r\omo1[6x~]ĉԜqF 1ɳKɩ cgJNl+kS F~ti&5GJ7 N~{mO}Bv|QG.F¦,f.4юƒO94JƑg;^k3]:\qFLUI%drEIC#OM' B N #7??Ga DFTB#T)=Ƚty&P5TPQeQ=?DZBQ{(2v?4H;dcL=p ISӿ )9b}W O&r&GwIG"!Q Paac~|2H:)jOˀ|[@]94 {.F6xp pGX2A~?tp iyz!4/Yz*WmavVl{ɒQhvbNeO4;IMz:r|;(f\ҳ?GbiUd-*7\B5tyo2rFLxn@3ųR {[Y"* }HaYAɓPH[{\MKB^pOYZ-;! U!IҨt ;tLnm{H<]w;A=_)7>=XΌFŲ!!Dh&sJXp#C ~KeSc;m"7n3f{\wY,h^pFO)Z7ڃqPe܄r5 ܟOؙ=#kBQ&ȧabJOi:C5{ kBmaK)'eOTGy[o{w33YN`^"dcoeVj6ރX.n '٥O:£|g=zn>q(ItyL-.KXvLY@#8ɗ4/(qEt)"IC6IL;Ñ 7/|o04 5H@7@T@Hg5гQLAS9>[Or5,'6A0!pyJSϓSY۸13G 7Dl4he P1 37vYvlŶrm sgkϑ&A\) ܸrtۏd_fyC]~#bwgHxЄ$*33z]+'M47!efb/0?~!ps0apqO@bldj;;GUq~÷vcf(wZ`q,3^Kkѥ̗Du E E u06#FO4ll9G i^^7^5 V F3[IQ][B1CGIC%8x{Ĭ{J1Iy%e2oW~(Ͼugΰ͕IYNkϪef`vK벉Dg`[Wb 6z.:O~v7Ʌg?wƟ!U '^I6~*ı}~U`HS|#η9d.vJF XmLv 5/wSjRŹR|=ė"ܺ_U>kt`ý`5݀I|4c)I00҄sd;צ`*$qYPߓ:C(JHHȰ@# T[#"[PrT:L)(i()͉ﱑ)mRCC]_7&GQ i;ǡ\2mB%޿(؏hf)afW!s &w@ZB/B`%BXvH&X~rC J! I(d)=5}0XD -Ip|iQ-nYdV!TvE[P%v!xHJx]UYmGrH673X;ߣ͜rE-7>(z* ,o|9ȧ#l`D>߽W~to8>))H# 5UOźMZTA>ZT6w{$</=zq~=S|z }54\Dþ&hchN\.7f{rNS_U>5ޑc`DU5wNRkd1M)F=TU1JĻ3+h B.MW'{߼_f>"ٙH8!(X*bxܛ,j:6L)bHWE2 _Sd\A(G5Ic0\4/&{vzDLwi7cy"V-{O*Muu䥪($Rep,3=ډaup7M:2YAd!uB3lj,Y,gA- >AH~5"X1~m?'&niﭛr<[4\Q0sy}w Cϋ c&Tjނl3`7TǠ84>~WWs)B)8|QPSěRnD5Yt> nMH,U3yv9v(+ Veq. D^o0wUQdq{@ 2~901QALfE]}O35.2-a#m5<}awP;,2ڐuMEx&Vlw&?+3=jq;9VFci]JDaK #]f  ~xM!KM%AWCGJG{ Y݇uL0)V"cOAʾ̃ R.=ynd=Dah1M<n481M |!1vD߿G LIb^ .ik:w[AeĔagu>qX. }ƓkyjvP:0U'/NM ;eM{ZRgPRLP~(WW۸L@%'H FbkKǿ&|խ7"O>8W|p.!:Z")s$T509 Ȑv_c8R҄$ ijQɍl/cY6":-߀e-Q@lxꄱA"Ɏ/氒(zPdJϭ#?6x8~9G%ؕ+^ =~;pxD>TQIx0㬹-t{^L|LIV )1i[5)0=@KiS$ Y<(Ԑ!7ntHEہ~ǝ_0? Rp04Df??QQ6 P'|905-6V,~]Kh7o٬0wkǬ DA'#o]\vJDjAqXO*u܃> /lʋ`B9yE?u8#4֧lSțo~NxC!,7-fE5 @`bw~j8^n~ +h{$A_{W~ڏn$1%ci0 ?yR?s>7"In 4]fmM Ze<2 C< ʼnMfj6kfZ_Wl)}nٺ4X2ÞjQXKspu>wJ[ﺥ^G%+W4CV+ffxcX<1#ظ7l1޿!Qw-:UgaK5TۃnɌh!*pbLnDp/N+t}QƧިӏ!m gu"MS˪iTzԔ$hw]E ǃG2FVƙb ӢTaό(v 9J0ڶ[ VH&gAIO`qU=<"o79OUǰpޅf brqI)985B0:a+gcMܥ 0jHȌ"4Ԟ4UV6 l4sPȡ0qY>01)oV)urNX߁Bj}ޖu%[Wv{xöC+ |\O`tJz &>uꮸs{_C 6j],R'u-P{ ੰϬr_޽uך';Yu2HG%|_w~n ssHfbUy=7K՗OYށÛ|r9ö`ֆTX!&+\\k;v/1hxZr|kS7Cғl[Na~Kwons[ Ou ԏf߄<qrEi3{Ab :%]v '_w(xssYd7S@ \֪ԝ&x04kj!5޿pM"i@gSSJ}tM䳩+>זN%y 3Y1=+v> Ήx4rn]2 HW"X\x;ξ/6~NƄB`#>uqm &,P3`+>e\4ՊW -#) ]\=9c4T]֥X," <M{e޾n5C5s?CxI&= rDFkY 쉯|E^>Pr۶#RFA腄)X !JҜUo4f.)GR3i@nꥧGw1,a9PU0#C#xHi ,Sš2ah]|*u,wDVǒܔ~Kl*!/ЍcnhyH$-դ5u=oqYIɆ @S|\LA QG^BC$|]_CS4ZHe2B*DP׊=zT~bhqGVV/pTX'K'0d7?`2t 죁X<; U l#]%| ,$M UƒUMWU]m^|cKNޱ<E/]jn?E~S,b_nUѐ7@~*ɻ>,܌m-.)˟Ook|U[5w Z<=|Ne 3-$V5i A4|FgUrԻ9X;p yo8&l=BA0pMu"ip5ҹez-LyFH^v.|llw~.;Aρ="H̎z,gv;s!ԃN瓡̐3O/Db8:h&:u|CU#zo4M,EɲӳZ,&pRi}*SkM,&#j&"f5-P *EMן(\ݯW+Hӳz,l mی \ãvŽ=܊['ij׮?e^p2357}8;姀:XMР^&OFPY{U9.QRH&P23;39&Ajx`lj >P;}5)eĮ~0: eĮ$^ngV;Y\>)zs`LadV˥2k=-dDžFߢlĂE$$1 $Z rnrBHc6]ZOI8g#BSF'u4yۛ^,5~$L8ۨ#l`;7}FV` xxl/NG\R3{S;wt{6~\RJ5pI0}va!9K $9\nxrGP4r9HTLU_)E&&d6qVV'[cSyXиGPho wS9}U)~2LČHD´~[QJ S[0 t4EG`Ts3`1 5)w"?=9r=lplrX.^YU=3{=]N=vi7:Kտ3tDlħ"?xb:UaW}O܍WDK:c]N ^m`xք 'X" }|^s)? ECp y XPz*<1쮓Mlp净@HςG>݅y4N_,:9̀=:?V5zIeΈo]yOw*JtSؚ.v8jPT7HJJh[{udV@`.`J Hw]ϱBńRݏ = #Q0]u5jJPLUN1OgEua{u@+N>]ѸP*| !C?5)c >Ê~cRθe!bǍ̱=CHN٠ ͽ Qu"b,>dܦ/B"2Ϝk^C%(R”{ZwhDRʔbh'? 㵽, 2bwnvQyV6-=a^QX~Qq2|Kt:DOG/|beYʐH͆)7yq;A.}` ,Oqg^fKé9.4+[m;`O-9j3-yJDB,S;lw7l&MT/1[mdR$uoG.FMK^LB%0)Lqơ}dʽx`*pL TZCs.Yz)S޼riQUh*+'dwld'*-i`1 pFBM4 _^c?V7/GV+3;%5uKbuAGx0R̂ϐ͜$i~CY&RmcFmvR>FwZ2SMH(խCi[Fjn8܃%`P= 4dzGTSHF.G?=غ zS?ޏ{zwjqV)ja*G}b:O2e6dT.fa&$fF C3,Km`A3Ip}}<]t;T%#N#a,"׃l%,*ٓ ;ojrE3KO>%M@٣_k=+ C\[&ɖ;> { VMcHacpv];ipb=ŗ舒CX>CG!젉[T ? [CMTܪ/SS^>H*3klmT2{!cE^ęKd`CyT =aetfMK O/ՠ>P?$Jat4N׌*7C.PH'xqR"viuiH%OZq3fBkdbLS% r.xH1ԑcQ"o0>f2 V!AFi_jݑF eEW*D"0&izJ:} Iu{{s~HaGIa0RY;ATMyW?}> =Hڤ[n,^hLg[M&l(xV*s4A. Fh2Vlk[䋘P2QO>e5ЃO][3ZM"-m/p'!͖II;u'!`Dpou&!~!z6ْhle !ѝzC{Ķ] []&34BJYq7%Ѡv{=8,x =?-/~<:$Tl:mC(CE]FeIjp| gݥU4x&(YBC7Ř|KpOv0S VUDj1`0n҅3 ]i4zjPu*\f+!Ә?/:aqeȋǼ鳣hځ盦4KK&cj껵ay+CVE͏/"rLV&Xa~B<1wzX#3T-UxTA=,<՝Dڞο8+;KN8=p?XT){JUuW8Z7^k9TYm`]Mۨ~ 胖NDT9($V x깉b oގ8h8{]pyQEL*S]I)X*CSb p+E 6# ꜷ9ydV1MQ|ߗ$BFi@tzh%FW6ct+k+=jD]R[+箢;vb@T=Աl MT$G4}=N !pVcs+1G +Q%AHcU+TYB[{tNE< 0 !?G{+kq##zZ؊Z98? Ș:r\X/X(3 Q Q2%jXuyg烃A]%'ME8kwEԨ?[oϽ<|W m'UTMiL寽ݠHˁ/8N($WPm]M?|RqqT:٢EdRYXez]=F8 ߒֶ-EKjʔv  ybh zAnj;+D"ֻ-O *[gr]Kn#I]A6+ MDshȐX=n4Vu^xJ;pERI{̘+t4 }jeO<s/ ],yŐ M>Fuhȝ5*,-$5 " 7>]pD>8]g)wR23ɟM:RE85]Zuo] 1H`Bo)Ȧ` E56|*mQmB\ ܣi]-#q=`0 fBLx\Vo 퍈Z{h8OB($YÕ8 kl*v1&^Ok\@!!)?eH|v:򑶷}c3_# }8lEx݂'[y;4LijL ]5Q,Q)>7׾1FVN.irf>bY&)IFJslp]d>OɨCPƖXTQq}j'!];jcOJUh4 ]@uۇAԾb)x챲"A(r,wwabL? nBA=#wh*Of;i1+"yPpL7zn{F;1Df X +lTI~ ؍xy?$`ДNu:hQgώ:#KnF;Feh"[0wiۂRi&do=@mA' +a~6~㟃+$'$ _;@bqԄ ;A-KĞwg rL)2SŽhG0sb HeՕtE\`6R"R)fSr؇b23l) bΞX0 6 $2bqMBt#4/@'!y.>Ki>bkg>K ww|w{)y WU!Հ88>M$}շRPNJ;Lb{h46NR%pBsҔ?S܋.Zq(; DJYLz n{=$eB[4:J)oi!^*?r Rgx=1M%Wj&xЀZ[U막Q [IJ EU{c_UxWd*h{veY9Ca0@ ?.T`E+Lvwrs͛HZHRŠLN<8Qlobz Ǯvgq(aKI(86">{ ŀ&[ a*i42B"6ǹ[Ԩѝ6ݢ!=]%\~\e/O{%I'%EH ''G1 3<_pGE%6F\V8VKhKBa(Sr񔨢!26n8ƒCw`gk jЀ:2Gբr5znd4spi+=yb4 I YK#c u=osrx*rL.S^(p 8|]?=[S4$.4>tGaG\Vq/EĄJ 9穐۲r(B15pi UYZ[v3az`ˑgYfT,[;dTC6F D32NnSo3K$-~%j.=r9==CW_eՕp䔾:> mpR VLyM½ y>[Bi2 I&8k5j0[NAxSm4@a7z^܂[8"r(ldc9sGx4$ͭC?p+S3훇.ahŀ(ۧIz,8*d8u)U`ËAxnLPC> UuZ`ER< F_'T5 6⽖őG=7g{beAK)=7lZvʝ)/xUbcgBwg$Wgu)Xrv)bsΨx1H6%:J'e/SXuC굽)5'_(]+M+ ZGt)zz3]bN1,m3mGWd+: u',L%Ǔ5ؽP?@%>@d蝄QIB4ИWIQGـp-PJ|9\YF)N=ByC54;7NBé_6>a]X obI,$ ހ LX,<*ɳ0% ,bPj=XCHd1">=a:E?̃ _{C'&37Ӳ$iC`[;1H:v0Ȑg F>&S#PC.:5$X~Er TK]y{$rw~;a6OON$G#[G̔`fHG H% ip1uVI.8eMXl"(lɋ/&w;o×>K{о 6) ص-BGȶ$AMTīv4l_%G dA7@>"Z.ټ IwbG}}2NHUp4e.omgmWD7lq$I@諎c}tnNʼnwxZ2|'31M͝KK6#26hϒ %-x';W_'ܰ2د&rSUA ߵadwjx?܁ط"3i\/T@7j$i~J֮֐] \l%v Id/==!'Sʆ;B3-ƋĤb5lzFj>R[l;x]ΜL|[AWJ'*zQ{&( G45%au #6GdlˊN3hnc\9<9$&Ʊ!jxhHUUH[Yg1UuPV>&jG624e K< `zZ;Hyv%+}񕐕$Aw`R71=^uGxl4mr$SWt ;#]=W~{KM'5%vg(a#bRv;G~N4]M _imDh n06[AO=|B:lfAtq JGPݾM%ڔ!I>,ua.8|^B+`v8\&Փ)fEX+OC8}pQO^cNl.fK`w=RPƓB+Жve!LH}LM`=%rD AjsŊ05 60szl.^E~ M}^lnˆz9yMٳ-K$zںq9O+{QB&Y4ҥ7SPz̝Es Q8\OåZkq{6hGWUv:pX|Ǎ []MBa#08'% ca0A!g;_950/UhgI4s&èYoUSO$+W@OzZ0tx;:s!g\alY,z:4!xX >%b6~G8 =4U#'1j]ѕ^-R?^]ݸG&l9g`w 6MäqCa.<9sO/ŮywnjUrxF r@>FO$&掟YzeÀ&llCЧS'Z>S_n>OԇտzUɴRƱ(x;~clac)j:mmnQ{EN>I}mKX&K`2zG?b8y%JYI]}\~]"t,cquTwŶ27al"쓍49E<$jC(#'7wlә+ `dI ~CwH׶" 榎ifіGw_\ d !M~t|Ywo.&>J[N1sϑPX}>7Ga:M w_=G)>Ǩu>a?_ѿsxŏ^Hh;8;S)㱔PwٛJ-?nj`j&[gz&cz-!5YK|g˕o{-O:l3(m*Fiv 0G/#cG4wXӠJs@%:>"e( a"+FYbEW>( <L <5xslMӗ8anjEaI0NEkTCj!o<X_  y?/X i㩸5'F"nxCwM&ÔSә֛ёjΠmV;LOdp4앏buq`îxIp%1Ư dXL6"A(BuJ׊XK6dRej7|L>c*AHҘ(+FTkع3IIy~f*gꈌ0hm)ߋZ¹\,)~35d8HhbU˝ _j;(|szvR mP "̃"Uk–pP'''wwg:6*( 6/*=|Vc`8 ȢI\R>::)*@e&&QV۲_74<ϒ4F&h#ڰLc3bx@f bP&Br-Q%X >ٟKcY3az뽰0.f4V/34:tUy&pЉcP] ><v>$ Xu.g0MoLn )PXĦЌ]?}Ԕc'>V]G꠯ј" y u]hzch8ͻ4M=W4qoa蓍W/3dʄ#e()"vHG ҏ .s$-(Hju]d|? _ 'WݫpY(tm0t)I )(n9ҦǏS` mX< ~^ҹR&(A* P-<jP,\~^xt7 5U?6aŀIDst3Ѣ^o[lR%zjh(Rr*oe$sĈa!HLЭDYmM>|砕jH)8 A- ة'ş~%ᩏ+Nj}kwNM^rhW M4LG.LB\tȉ|ms{( kgv>ܯo 2o1PȉDy?%RСt(kO5걝A%]ujaҫC}M/~{^Q?yFvFhȟ7!Vr:N[\;=O aХc*$3sq~N֛W!#i~Li&+s"vWrE]EC-=ۈ}a7zN^$a}1=BJ Gh&Ȼxxh/qd;D0*'"?pTY5eX_]qF I78!A1^ \b.KHGWA  fe%6]tW~+2@gЦklJ2ƀ,ÔrKtSR46flj40 7ug1br"i/ ?~sԉipZ WRJjynO&d cLau;6@gfܡ7BgՑ5Q)YcwS¢tWýHRccS[hVoW:_wupx-OXND#; 0BHjWox.vZȧYV,e*wӉ\Ҽ}jJ;fހaN'\SSdj0M*Q~l? 3ya{Jo+JƃF=wfqxξnPs_r}%[+ƫ 쥔W/xR"/%sᱳANo7z=_㗾߻GGi>[(|7!iဢr^l[$5C<nGɈ1QrB)rPqVmN'):ރWHMx'Fx}1Yb;4QtG[tJF3v5q9H&3(cuX]th81kNg)WovshmV/CR1~۷vnɔ;T\rS%?+ևb1 Y밲ϟ~aN1%RomÍ\f:;aM";`~CDnܠ|&g'アG}H`)ܺ *)bH!TφP.-:ubl"7L}LH'X"%X 'je+¥SAm#Qd{өpX6"`̛#4?KTn=g^Ϟ; ';CT|:5i-5`􅅓Odzl` :m xnE%Yߥ*/gHan9܇%َ*(Az?%J+z0XB/Oo/o>-h(K}gԄ 22];1A?7:veG,w@=F.T n&jaȣZ5 ' @1 Iy>yRFu`nqՆqҙD {Z#(-&p CqYEş4~2Li ]8M,x ܔ6jC~0jEV"B/mѹ \pN߉lq$G;; ϾẄ ѤI|8,F(~(/aȍk1A* űxs˞xH!׿j}@):> s$JƗ:S5qOSy8Ct,Ah5J{!{\6njݝE[(#}(lc Uz2DNñRhK; vI2 3m9#T숏WIF/gp]!f>4Ş o!# |wLaC`+cĨ7:ws?xgTU d}OH5]o܅O؉fU]osR")KO~l}y\*] )e;(eכd`Qg#Zi#w{ =ΰr4Z<Ap쌘-zt^9prtב׮&)x(%Udt aoק{Ya߹_qN،MKDX6DUmY.K*["KˤEB$% bygvgv'^Nw=>߹omNw9~!}g1Dۗ98?}tthʯ.?vT+yCPƚCv'&  z+'2< {>FM`AJCEd(Դ "Scܦyg A;6ET9d(&4lkU21 ? ?ԃ_o`ކk$[ |ChQT 4*t"Ύ,ؘf I`z!{?.nJ/dXh`|\1y _jK7]+ X"Nño:OQ.?;RXUICEkh }R`٘;e@Fz! O`6#*Rϟ;YYoZ1I5wk=L :nސlTݽ6B tMcH ndS[P$Ehi1WlPLS-MۄBX:T6I82(=ؼ"Ԫ02! Ǝƫ;-A'Ұ5VItxHa02O#yrxS\MBTK4\ oёIq"4ގˮ}."f g%3g]Uۄ/j]D26E$:C~&H tzk$ T#˱nyJ6 ]_t6ozqS9;uZ9VHJ݊^Ϟ kK@=C=ѳ-j)h!G` B 0mó'͎A<((! v_ek(fYVwmh092RL'++;D5n4&NQ&R3T&u;cl~47%>rVn;.,J]WTm~EgݞnJS ӝFۮCUpMNJ)ygʰːRX^ȁD!kWa RIښ$=1N6@cc<# جGj!A-o/aW(ݸ4yDO1#tJڹ J8B ڱ( T!'p^j hHy zh-?rAk}G-Q )` Ѣ})'O V'p$I. ]gQ]70$PK @8 o77 >y~RA(UOUN_*s?U~88Z.rB[gK־Cx|+JuEQ?ז94>V x/HB;|az&O @yl,{uŤ9.VEqz~;߾R݃LL&ӹP3vI̯6jΠ'?;޿rclWGKA_/zpDHxTn=mʪ {jJD~Zm#O?QLZ"xX?l GdhrtF3Epƞ-ĭ &&=y::/+o~[J. R~g _?뒷v$a֩#'IS^zv+0 dwmr8Zg$i8DoSW;p7,Щ"9W!EBs=+AK"Ԑ (K2v0,(P(w 2zf}Ļ0LNNT?ar$Ët BCqpٳBBiDD]_͡Ϊۄ3\.Zd"+yKdE-ÌBs3?'&D1%71bG`:GH"a)\/Ӑ3DlC uLXBt]Fh^!'KF.|OiX7$iinw *|$O6![Ѝ+9uϸF]Rwm+07;2 HVђn.&siA~"Q frgN 4m۽wqtx=E""郾E)"J0YYHT͗ry8sAy:Uő^Z OL:Z%>|4K0lw̤7~6lWhV2F9l|H)LCȖ0 i8*΁Z~G&M>5pd_t6Wd4|H.Cy2TWD.al8viR45!2TrF ,F}oy !׉It`jV0w;{NMoh1vL)SDž?wY!iAr"`4fz/YHf/_>T޼b e_,MZzr% 糱7_IOZ') #iwvoe-i%-a>;~!E`d4^ʭh\p,A4Mòө;NBJl$&z8ƪ{[DrgoYdz[w/gٻ@:4& -XT{g%ptP h4rC">+_'FDM%vl fk܂29۱P$U5 ? "L%l5=R}rx[q<xIe(aA<[O;$ΒtGmd4Yߞb@0&IC7 ta- P": 7{C9}r@>a AxlwP%( &}%1 0 rY̅OIy?80D)[Ě9u "8G%r,z" ZQɾ.(ډR a Ā# ' f$-+(lV\ ?_kJaFOců}3ޛ7x{G3m-eMNgXX/+~$viȾJdEh6L\ۓd t;`φ0ԝsGDJQ"'Պh)V/mq쥥X>`Mx|]%M]2œFL#;= vWXeM4ĔF;Q'p6k^e#w>E4@RdzLTBn7Ӣ11QbmAwJɗL\9r5EnC_ܯG`q<”c ~VzvO aP=~fC thʻn@ avO>`xUwD-lc>>{$8ͻm77l.Md\.^0tUc+#Z64+ 9KZtGq{:mP Hʿ%D-}v28;~<{F6Cq,1~2dcmw"aNb6R/8L@ZF4i=W>BAja@YQ22anH) 0MkuؽMp,mILE{hߥphϔ| 9l{Hvڻ ҥ/Cݥ420dҤ츌FfǑIpi/3c萮>vqEc3kMNil8 FI~ -I0z{F Ds/p*nwgv߿Ddx%_l FOa;?$Fڛ:FǾDkQKDw' bq%æ5B@# 9$5î7DrdVvnT]]ȞSҏKɒ9#Sok$<IA!t)j94mTA iҟNFFmv$E"7ΌG3k] K'B1ts6~apl2O{DS)zұGحˉd>=>^}m%.'El66wr;. b8kX~4NBXNW[8X-]\YY5N !V# 5٧uSYeC?|c, @09>wkaЁ Qp;'=Bx0,"{(fl 2GARi"yqA/#РNH*`Ɋs=)%G;ܑ49SXώ39R\*DsJړ)3D2cOm~Yĝ0gAw)y* ?PSqŒc3=if9aȝD !`1][.kIQ4SI,p%\塑Oח'G$tqf_GH,x] +IΒvۓJLߖz:dlޝx'Ad'g$~<dZҟ޾w#Z:#2UؽdYEzf.Tjp ~_Zgwovw]PF adEr{IDcN$tثi7rzF`)/>D*d7KvXܓR)[`<)m+$˷7|@:lA *PM$0}+c_$GƨiBׇ {@dEl̀ |iLD}ԋҁV#bDKm7Wt|4aN LV,fcx )x+Vs΂:>V44JHozI0>QIaG/d2ϝ0&>Bkh*GceZy('`frT +EO&&E3ޑĒkzi1B/uC# ;- ^||/3O.bem[0dȆ$Ubo:eJsw߮X " O \>5O!VYހtL+tr(Bei : K(K p||ÍK*qY3eu:9$߻:\sz0Yª{@Y2{gH(C!C$f'' 7 9X}]4 5VxMS 1V,2LFm()|h1pХcpށ[ ͐Y 4p8pP"h6΃}L@'۾W9zPrNCXz6d'xR`R4ۊV^U""<3IMh)a_A6&vlx@R%㤻Bo{W!9 arұ5\ {t7aʎ=R{c+rW$VѹۇwB8szCn-ER}g__[9!=W|(MFCn]NԔ#za]h'ddѣM`5q}Z6j\]äpZr#&ReENe#s_ھ#4 E&iJI?T/8deUJX6@,M} UG ?7߃1;:•Sfw#=Ŗzü3Z ]KgMEŞTĬ)DU 7NeK|ͪF-C>'+aԀ{h<l5Vqaqģ(tZ`Izu u\A3Oe!b Qg[<SB\E8":¶>p8Y\MyF𞨄%p 'K=2 ԣ<"'캡ΉGsMy*|m/K87\^Q) B_&xgI/Hn@`?NcU8^UVD&I~lK7e8'14H:o%Tǝ5MXiCR2C`އOSeX' E8;oC `b* 'GiUV2]2L$A&{iMvK 8YXڵ!ch/@1̧2 vabg<œ&a[/u~Ϡj.xОH.]k}9Ȕ|bff61$< e!2Jtcqb{og4zK4s$rrZ yP[>a /1Mߤ﹦SFxDk}&ÁYtZDNMJmXq/ѫ7kLۤT%1/h<\iqgӭrӒu 0ݚwP*.UrQd)Ul+(j(;[4[Cy(稛+v/Qۛ:c+~Yħj:%ah95[3@6+{FV"Ė4IݣXGCI{l 06x.x͘kCtÐH~)nT>3Av""^]1[矿݃jl4-'ûWr5O f{=A9͂Ղyn'!F3DcuƤ!/ ׽^ -;60KFmH.Js{O.TL~zg?Yw}qYbge[ͮσ ձ~cug Qb)d7V[<cD!5;þ'GRE˷wo F~wcpb]Z)aeMl4M*0[zy BS3; !wkՎ??(nV;2!X g$ROp: JmԽ//}K_ZA#[ ti&㢨T-j~|m-N̍0}4lw%me <)|Nj=F%n񚄚G1к}Lb. EA:+% 6~y!S9Q(OyGi<~58ޥQT6v>);8zO쉷m>$-n(+Aj}"৲r+y (Seu m"ȁ8*p9%\2%ti|= lfpLCJDtLtNyiIsQ7:-Úѥv,*? xPc<* ] v1 gٚ*Sa[Ew Uv\WtsDv> ]˶B.}gÕ+b/cn_Vpr#xe-yUhtFtm[QI+}i60 cVJT(ӰA'3ÉTh}}o~!r~dKaX~ytL,*}&__x[ $pL2 o:q]7_#aV ɲP@Ѥ0X͗C}g=H|.|&v- s\pvFN?&w1oWYz]5~.EZO/F?| a*Xn*b%GBؼ&u+eCvD)іS/QgڠD0foMEb{0*+n2L"-ڍ!UR1w[WCEN@$O4Ӣ#4rA*xہjpl!⏰+뒁J$Ie!7vCҸCf s?B}|?aKt vd`-T?HWd 0ҸN.8.t0&Q|- z.EGMm1"m;$\Dg%DEX fmnB"lHG#Z,V$8م޷v~"T c%=v;R820P2B5zsnC @j;]!d" C- 0$I0r )pMd2'4aCX ay)+tc.H Q9M9;6p4r(S§g|+ۊDFY=KVA|x8v3)-4-4B hiP̅Ea5HE0JWżc BJћ A8 W!N΃J6$b J6ktbLf#+>$1-|*vHʴhFEV<+Y.hmULf 6,)jߔ\_R-F?Kw\ͰC4:?3Ͷհsw"Ȗ2 `}? QjifCQ[&pr,JC_}SD)TK iZNU/u;U363yao8ep>uۆ!'F !:. gddl"uR< "v H(O- B#{yB".T*:H2R r?I۵Ɲf@J({/@/-(d־ٓF#td p$'q[6(dW_L~:JZ$<'ز5O7L>wlf3` ],:"&AHǎWb46CHa=$T&a'i숰!xlf FOP4ہ~zxHT~x]!+4?6=؏ΐXcQH)ml7mC{}"!W Z>+a*݆VJH }>Jg>/Jd<4Q!C*&bʄ`X1͍BDwVuέ{~ qqDpIi 'R.|Hhoà !%\Q!e=UB5tC3աI.*6LɑaU\+f0cfO#l%W6sFpdhSt_1q }D'aϳ *0`;)/q7شQFsQ% ZX\yoQݾ;-lR.@&D?wB-D w4۫DceCP$w? /B4*Dzcۍ*E4yA9 ћWak]u= tR wQۡOIA4Z8^m{GfYf tD:ҨzwʚNwYRj6 m&sBOr7Itg $׮CR Ew WLӧ 47A8ğ$ٱɘC/%t_o[1.|kS0s2IҾOw߄۷`i`}~ =ظ O~&/ǚ&d#Z,vڵNm`?z#'`PاCwMEŖ'ENb܊A}@*>(Ȟ̦+ԂշSSG Ơ(מ-/^4KQT6h>b~\1E-YSiu GY)2`K4Z' l0ː"04L;JH$Q5wX"1֩B'IiDK;F+iדk{FmZJ z g~7׫p91Z{p:2y E- 8Tx2e[L(r<4TĖ`Ze D}r$L+}r8/O[3U<~vYFLS.!\ DK>w2}ERķ"H5X.OF $X.}C~> j? `@!ةbVE(g# [-Śa}V8"w=#K>YKHse] /](` %gu\{^rix|)E՗$4qMhٹ ~K( Ajı#k*ކ0}!Nn.;no^g‘|)x0z݊09U֎1Wc4l m#a}eI0d^Se%V mˢRݗqfkۊ&bN>4~zR)0YPʓ*Lw@Zmg~.G_mďY@MÑ$첍OE\ck;侀i u+O%b;ic_zF'XP_#xB*+K)G0of${2$<ʾ%k>^J{3lkM >-yFG6 z <rL 0\6 bx $C*OAq4?BQ !3x@HF 2Àaō)Aw*0%!PL&Nc L`|!F &hLF\kX8w#ay/n|iqyMbGTJdvqec`M$L\?켖Jj[i ɘ c:HmKX8:d:?9]׶euD[G+^(LaS'ݪyဪ8T5%YlJ彩o vkCEKY?QLN^~]* &7`Bj; [$vǠF t%hhŹJ64n< s,R8bc}ӓ--v AeQq!wEnl_` Pt.  >#Jmt`ZmW{1Qu wzVC5.[S#"dg%Y ,FdbBwFUr8 KFN'c$6 VE2$C(h7濣YXܺvCy8 '4ǼrJ#8/kndVH#c  :6aé,=1+PVLݦI i m$4(L魷ɽ7b@6Ioۘ Z衕-Я>|V?_~Q@ py٢dV$KN_q׵(; ? EWAh<-5j4_B4O]8-ز;:)H a+~dxY%c~5-I` E#=c|đߘtv|tX@vs;̯闈!]il$l! n EVcP-1fwdJfeugQk"To@g$ga,D(|1!f`| !|~5tpd"lyU ª瘐*KY⚜5 L`/XJ9M4ͩHd}wHc݁I EgFFK'6X[*î1qQo?f>Ij_ a-rUzR]'r^s43Jtt{$0L.t^c[1w_~FbH=ٹ!$C{pbdBmZF!TQ~AϢh>͞"(7!1!35Ff~rjy瀕.ZulVa:)dsomɄX c`]% ː͓mm\),/Crit}%Iʋ/˟.R t|? wn~Fly a2)蓱[}V<ȵu,qыy Ta!n`W&HjCb(jŹ+٩V=cY jH!p'_ %`_SvC@.kl:RnP= gdtL`M={47ڞz|Nn?k05ങw)>dBHD+Cwq#hP;qhw!0@,*x܀'jG:>\SNGy< BշxL|t`θ%\n& H3 =y 5AK꜁ l3?‡GVB"Eq ;BG:-ceNDG NM,3ss|^ht @4 HP6:Wȅm?p;r> B<̗ BZ,cF,)vymkn+Ex&B]4{R?9sdJ3Gn~iYa>d`@tMtar>'^'-٘vF ԯ{~ 5t :7BqWhz$2<{ Ә n#NOi&qippjvQBʀI  x=LLOq&g ԙO;~wS>hg̑ U29El{alBU W WNsi1X{/KP%˫8N(I#ǡOQU",ү{^A^jxoӒ;K0pvHqmà=hBmMO$T2ڀ6OOR|@Ù״D^xSsf TFvoPJMSߦ;?P+hy?BH\_n8jqoKS#"L4)d gؕ-aWw=פFP#F)2g#0`Jgm eCnK+_ޭ^2Shʦ!Чw݅_<쓧OV̸cxq;sϞK)hr'ws>fB 'p7Q1Bz psIYVM({sQє33u ]H9R^񔫑_"%8FՈ|:wvR/xe 6^Ғw0LlFR(8fzgnρE鲌`7Yƀ _4bs=cs9πU~G LStEA@$O`C'G|XcpD:&p^)! ZE0xBT-NvsJRFȼĐX^T}+e=FC ;RE5=]Xo(°P0GR$b Ifʼnɠn:u/{M „!RAJ BNvdž jبY4R%hARQ̶rkjP*![V Ǧ)yDUz䆢* (}gnZQ1`&FEѱڎ+B to0v Q'?$Cf$.o68#;X&̰jw6[PlR1VߪzF%H]k:-MZwN2ڦn]L)qg,#-]1i2-U*F>:癯`Ǭ&f4dRHסMbMY6:F*\Ӊ9VnN-by:2$)=(-o>t/|џū(/H aܠ?H J6ĉmib+SAjaj^%A5GYfX%RĀx|^d0t1q[3 ; a+ F`Q`n g.gK*,?cd<)&ՅN13av*eTː-Tۂ&]}-:+jctiMr1o$;C͢7dH,^9됄3!ڰݥ~F:w)썑Hqzg`L lYkys:]$'KOTυd_'>.iV"gV$ IPjPKBD]v[qf~a2$ft: d;oK4]e 3(m Whizա/iR]> fg.&e0}b8Ep '!̂c*1`C|7r17nd+01 EZ.g9;MZȰx hX(WP3T6;En]LC1ad:a$ZC.u&z*½d/ }~=AsRAG Yp$dd=ܣH.nedWfEcK3ڒf$ɽZ.+S;J ϼpG?$O@gΒpIƔkRY19QvCn᎜QuiʶO]U p01NcaH~.C#M=΢Db%>#Ybthy}4~lG\1BhY䍠UD2E,&+Wb 2ou,o#{9 "~Sd'kqB d2+w?V!U =U4Am@A׉OӉKS*8-KV@ŭՖm{9j1Is(ܼt`ع_xAOӫ ;>sOF{ڶBF=#Y NWLdeixݮuRBSnR;(Ñ%aɵ;I/~M;ꭿ2-p2Ӂ9[7lL-G(Ϝ-2 .' GS[eCqX֧>7]ף.}p5Pv@;;@6BSPĺ o谻[Y#I%mY-d QȐJi8x(飉>a,uaX ez^zѐkåݮ!;=aWSc?1o/jB4p ɏ=2ZVh 19:@%mII7>L$195 8Ks9XkTOA@)2>1M4dP@K Vfk!7B)E"퀮\:),*'I1A!)Ն!l_S:鳇GDn C]bsA w(XFM JpnjLz^Ev;gІsEr8ˮL(zش4nbu0=ǏNd'&V_9꺳%bvFXhAh5诲R"4 <9.*`Krk<>jBK.`b&}T۴wg::dsW2C/NDT&ѓu1zj.w{x{kV<&CfH0xpn{wX1ykK<)jo2qːDPCÀEvX/C&drI[VÂ$+:(M%|CtMT TV@\J lǑ*deT;O^b{& ݚҮ4x ؁P@n]ur4B? q⬇+Y,D\uT9m( DCO7t]K񒢜iw_0;'}Mv[*&ݏ3dGŏvdG]#E,~5(7! *dz۴r%i4fPqMhvB-#NϜLG/}ŐG?RDZojbLB&Ycx+?[DFH?"CIb])Oj}zKrvZmV]oo x;t{a:.^0$/2bi,ѭѽ@9[8OBY l0hg Fۂ)P&S;0ѐl~+6T'4 H |@IfE]P!f[R{D-('5&^Ft{ǎZ?2a@~JG$#B.u]K N rL@ @XUkE-˪K o}p^{Vc- wB'4vB9¾0^')x6GK\c`.ҙLkwBgʽ`NW2t!IVΊ&Vf#%Y ,S4A;˫ne̝QjU: C,,kp^hꯒj/J钸uOaS3Wnxkd l옋x1 L1a/ZK1mO/;XYpbQm7m/͑}?'kiy$;:$v1hmLB)qCڨh9 %XȦu {~9 $ [%cT×cVh6;~` Iӧ?"4 lCX䧨jYٓEbdڥ ᣷wI8I:O=4}jA/C dbӤMkd;8mm1*~YHerٙ+ʑ)RQF߿ t"nn5YJ&4emN_~H$Žޝj)PDfO' )=:7 ^(٣#OkW~|qdG"o"Rn:G.!)DR&5,edY #QSÕ+cŻemHO?#C%$\ݗ,F;IʻܙKanX D+`CdU)1BCH9b"&osnY>Alxxv+\^JtٕؖD%Ok(L)}LMRpRyDkO>mEYD{腄۸E pgR\̐E5zQ.ލoI<+&FWS`7 #NDj*"qo)!qS`,,"nĩ, I *ŽZX,".v=h}0$o=on,г p0x"j%![ӆ"MEXn# jax)e[w~H@v^+߹#ŗ@Ƀߓ?-ȰO}HL0͠;)2%ZUēT2,A?ӻyy 2rKWYň8AdIGgTolm\_TΞ,\H#_c8l;R^4-YY=kc[`vڍafVlzAn=U _SGD}x1 z,rbڣ9lܦ>D$5L :$[zNUHgpb!;EsIcz d } =~vWo[o}_`>>lew÷Ia^!Oӟ `Or$!CJX~q(B]R~ iÇ~v:$ Psg'O^o׫o@ ''a0C {xC2ReT\RW|ySH¥ et ~}= oR`76W?g=M'`}o\'Y͓ +$l#má/r7DXa,|pQ؎/.v@_7 `ͽ2O*ZsF"d`8g8'PU%FEgY!I#Kƃ7URe%Njު,G[*a{Ra8aPhk "d0@cR8U%A~#i«SE# >Y$y27Zr1iNG{k5/Ѵu&L]&mu,n? x!st'StYaܦT8O_X3Ȑi&Jv$ .lxt,*BNP$x,zIA` Sj_?z fO#cj22 tq̑2$# ߄qD6tU]9MNO'gU-+P_S<?^Ҫpb)S=_ZY-Г}n!7h0:YL.-)4D14;70Y!m=Ϊ >= 9GͺxR1Y.Pǣm˃v~_}ˏx2o5ls j|߾Z{_mܵc]+s[?dD#H4lEs#;P%m! G8F!fP{{{v}W UVD!0s†NF>׾Dx``拢*mH%-"&MۺlއWg<N'c됋1^Aa֥(DE\%[ qb(Rqǂ R$Ρ8a2o@r'D('6T蜕8'P)rxA:<3-qʦv~m}>1;sh+}M$#8zF*w!GN --q ]vy)S.FYP0=T_@#t4su1/,Ɂὀ}P,Wr-3Iq-ʾCW%CqS d<@1FI,.N0b%=SlCбB":VahӁ[DB <ESΖwqFu{q@\F#C:?|NR1KSʩlOY qb+0}|)CR cҋ27uvY飚 Ȟ-q~ w'wiX"zmg?:1?ٯOa{SʧYmQ9S:[ ?Y7lШm}/Nkb8^?H?Ny '}#1BH\gq|ԉz/pk\BSR8i4CPMJkm^#''STLLk GX![yv6L M;#bҸiYto}.UG]xʹGZ3nka49B#Hq%dvh*;yţgNi`2Z]n؂6*tBMgX<~tU14`G&b0J[Dz w RQ}Hjٳ\i®J}}1iu7nǗF#sk=|2'vE1P$EQ$ |8-MzQ%=&tP@H$e 9 ;8\lt'; -pb ".#r} 5+ {4yG8ێ~cB`Sn7ބJYMQdQyCEIu>Ozy=U !ق&¹E$q*<1ԣYu9rnJ1/$?#-SYbi8E#?!Fa!kg< QF)bJ0L}$> ߀N4+ Jܞo':t`BaלD㑏,O:EgSDۄ.(J̡xSxk | YE>W׀6dPEDȰ~P|D-(B#V;ay<.8,c[+م/?+)Թ+O[vO28(o~.be& 7D!BX(S9̾;k|w-Q6:l\ rWu%UEcW3ƒ 0Hkni?n־Ҵe6ѻ>QBNcfgf|FjXxRtNܫaϥmG'|>qVG;2Cþhbc9ZM5|8N/_ѻ݂QM0tr@ۦ[ &BcӘp0UP>n@nj)tKluIhǾ$,|&)`@&Ƀcu;4JqMC>9v0?_wI߃;/(?WKϿ$e$;AFIi=LVzHi$gO?EZI-LܮdbsgC}ׄ-݄BuSxieu/H {L<j=.NcL㔲O6mڱw y紺/.}t fW?B_!~#>Hs p[m)t,@0ӽ IA)/ -j;DT`To!7)φًtwbyU-`}ٹ۷G}xc;d ӣeWU͑CƦ;!]'qs0nTK*=+T2vx9:h/Bs˒B&&X:CX)Y;:6;v䩌t 6WD˧$Zd= hиGcY9JC!>]$}9U&=)4p՚ -AP6Z.1>Ҳq';]C ՝>n'pNT2]aek41ag;#$9:M E6?Ynf tdTͻQsUǎLFˆ`ѷjk=?R7vGF͹0.μ0R*8z纞-^*a{=jӜ-Oڵ^$s<+N/v*)Þ38:Q8UԘdk#_z"`c&~&Laא'['r>LUԴڵިR/blT$]ee7xā{jCfxgLjKP8"G"!?鴽H` :6Ye9?bVN(3@B(})B p Ns1]P,JtFH"EFٮ k/Nr(p i=huN<]%o!I>x0q! u"Qp<Ƙ"3I ̝M!x>!"T9$c(l6 t@9̣\#Es(/,e/7y(ۂћCcCW;4R0E?Uo?c binڏTQ v"!Q9ޥp4z+^0Ŏ,q{Q>1r~vpѢR7L2P퇮H'%c+4f`@"}+ [WaVKN$sݷwNWzsMtM.["%Hv?۔>se!"Z)enz|ijA՘=GxX *ey[ɜGd" v1s 52Kjp$?d'xEZ9vߒ1}p PXRuGٔQvn죙4>ž ~v,q‘w۵+0d\i-8^Dn^ 2Fyz3nZc2lcKq4<=vAJqF&) *'ف'=;{i :¾`YGds}< "WGʍ j7AJТ)]:r$Ozb}Doˢ 2{TX2]%C5-; _cF޽ Wi`cz>wൗ_D ``ae<`?JvLn|_r6 ~?{0&A W$cUS_iotiQ=|:9ZPZ =Q"Ynw>@ fUpA 1:k>{& eR"-H>rLU&hI:t1R,?m=jpxu]H#KS,LR!u: #ۂ]Ց|n`vJG~勗=|ox)ahǰ&ܳO.LㅻO>T 7 H 3'zvzfk&=-3T3Xd{`Tۦ~ 9{`WfNZJK MOUV>GAC6 F8# MgO\\NH:4fN{k0|)LTV{JIdVΖ>[cw,)lr|(Q.L rt#N`ΰK|N?h =(<=d4RU~ +tETuk5mi~yKbm51*<|~7d0!B#`Sr{IENDB`youker-assistant/src/res/default/落日余晖.png0000664000175000017500000122360413260315532023074 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ͇[#IDATx,zgeuޮ)!9D)" )lG-ȰSQc BpTb# HXm )`6eD(q(pʛ7z֥9ě7{>k}+{_V9TYy!ub\2ϣ`\r.$VBʔ ?b,%& 2<"D/EńxqC. bJ^w1K% ! HKb\$Xr*Ix%sH ."CMᑇEyWs3%\6.h;,s>L,S(\ 4٥Mؾd*rY0*enLQL7u6d(H9G"Ad9(;TLQE%OJN|Igx%x(B&o[AiC M$s<< R51x^h~M@KJ1Fn="󹸽B$!B9~yn?DJQ5hiדo̐qfGq{]xjkvYʓ-P]O}fxy#() ]$1FVd1R(%]hg\2iT`\SJbD+ X  ~&YzN Pȍ[VQAÃ1$o}*$1V2^ZR 4z]Y ŸHL7ڛq>MK3xWoZޞ -o58 5  c@ yC?D^l[yVh1kkAH3D5`ZH Oe"cs &XbMuv9ɒ\@(nL̻-ԈY@ DZ4:+V(.+x1s)Lʬtn;,lVAyޝ1`<;nR.hf@Љ9%C_ڮQGS"͈b̙GbQDtRbs-HCD (@LSz11@Ikd".=\1):@-^ J28X%\}Ko!գz960RBƵc$|RO m\>Uf5#4q|QV4 V,mи82lUdüLjzcel:D2K%0ße%T&x/RJ,r͐fET)úFRXC(lGN4c`Q n=3,qu:4l 0:QxA1<V5kU_kU:{d+oAm޳gG;7<8XLC5,ݴ '|Vʎ[05K4ĺ,IKEV3*^D 8F!%xJK!\@4BPl̥9(e`Q1C%/GK28_paZ<&%X Ϣy(/Xh'-nÈa, B7 hë7盥C{tz @'ݹv#a$~}'`pjWOVĉh޾~tT QY};4=d &YI`,Y'Ϗ/m9͖unl:;Ɇ>]\:/a77_|Ŋ1zYFa ܻʛ{vRsyIϽri.Q3j>9&o/E0ͅicZ _ {l}ο>0(ǽ+x\g`:;+*DVf=*&)$@BB| 0U{ӣEI% b| WdۓlkcW!atj@y"3{l("G{z{xBL.²ML|.[լlS?\\`¸Ŷw,5w' ,'x6-ѹ#XjU9!ƭp>:^6 QT0Ʃ-u 㧇ԘeKe@bgS+nΌKE) A FP#~-76Fe.uEFcGfŢqH*.ճml`/lOΎXo߁}20s2O]ˊcKx17} -5_=BNzPe! ^%pW-`VdA DBfz¿DQO!G>YHyPo7&Q9ȱ]a#ۛ0 ,OK>p\-ú<- f :3#Ao-~x3".c>K]j{T, Ъk0([X+57b4T{sYh3E n!7і.C7a2 vf)>*Dt\5ȋLVOU! ٿ_ ,u#t4H EJE,B2n` f@r%1xlt'E@J: 3g ʃZ+afޅ@Q8 %^'3g]VuPtCP@?Cl(D0%i- X7eVGÃH0t)7ٕ@1'zFC>GJ%eIQZ u³)`3YhNCS(ͯf?U PW%Yp r4Xm3U ahڮ&$_ G"+cOfPySii}kGgGo A_Cq(ػvA֗^6e@ k:OMP.I?!KzC`{Ky@Mu\?zoх{g>b^$}@+s8x @蓧wt,81uB),&G2Ӂ%MVwnB̑+*Zhw&) u<. :}u <v7woQ yU:DV; );zzCǭ.ygIU<z0X"b-#Au@>Τ(z۝?znTKtQ1|pAC0jx/I/Ey)ˌW# tIfP mFO=W~ҞN_諸mxd7bɮGՉ kn-yX Y@ )tIv9N%}Yim :g\I^S&fU4{gEB OThb}@^i^ ` p:V/bPZDSr8oO=`ML(dx>SyDhC+zc/ֻ1pIJCcd8krLH\r(?[_YA]"H}dt+|4a=fK-iBct PZqO6t'(#D tЂ%n acz @pUmF}PB?~HNpҶȵH@0"*M"G;փ-bRwb+j\,j ElTj͝謎PhGĔ 5$S-T,m,Wk,GU$.T齩Hj2:D"A RQskSL[c 5`;OXS0"s$DDq KMkPp,98D`+ia.d ^Ԗ|E_R{vثB ^ sat N)z EP-ekX CAXc'G8! )2eް TC1\Dt6;4+ ruy S74 Wa(R`m¤Ǽk@KFjBBxџ.l]'a|k{͹cwqa}Cm`׿~}/=2! *({߸¥GPx[\~ZgڣChS8tL F<&W%陎/ #u]w=VUwUt81 6V>$ )FĀ@1l*- KL2CIEL}_Gֺ auMսZ{sͿn'@q劘ʠJV~ $$V#&bUP:>Y A#|J{ a <T!4~) /b̓3,a( v#\Oj<3AXt`]{ & lG"  \zw_&٢eϫ4X7k"\P4(tcY !lL ir#TE!19 )<]x#@$^#(PⵗfUXK0r)(7щzz:")0)y1KqMABIɼqCv@+ kǪYXH1)iiRM(i;?({8ZqbiFʰt.sĹ6쪦6rUz5l/@^&UR 3.M]뤲ʱE@%bA"9 0<-莄.eJM0ϻݞO1-h $ܥ~;Ww4i/ 2%蝍<[/<7R;˶?mg(z(b5" zZ;OAt@=K JU&e{"wyr D=5B* aǔn]T"U O.\.JL!k|2$,6h ^F*li]!.Pi8C6AwA ziaB hWRp -@Fc[?NJp(c7oL~D&HWi,N5T3VQlfwU[;}lj-&Om5AvZnu5@L޸Uompڬ?H|wɪK04F!M U:DhiƉJ#[$6 M@N(y-94n3g5;DNa$}Ro߫D*~%f>+WKt?8E׼} 0#k7/ Fz<[NgqAشsg& z" :ol {6U!(U\-U؋k]0zp1MI_`Tᰘt1|Q|`Zͳn=y(ƾw-Vvv"'{m5{tr%eYM9EVb'QW.O\ȑUG:AtmWh͍d\LiZmS]S1ӬT'YxKw|^? 'L[o'/O^6=/o/0Vq!T:U$VV~*#e ].y,wR.u]R ZIQGHt$i42p#D8qƦ G+ wzh3@k%)KtHM'J·*ۺ>ۘMkU8cm<8)Njr@\hm2hOf~zb!\=su)VxSSBu=:[$d1-ʴۣ,-6 ]wm #'p絋Vfᩙ~C,e˲+RP6lAW~35D%-(<ڸx~pR/t,&IbDwy%ƣ D^:4t;Xmj$9_OWMt F#1V.N-( 2dսpb8(:>@~%j*OFu[SPʻb{wo]w^5mD3Hrpj@i酚[i,'#Jb9/[c%h/l'fyvb17k˳[o8AP/H":t@݉"Q5L,9ˠT5A]vlh4`&PAhw&d,BKgX )t2Pʶ!5>,in]|ࣟ\?+eC9}+ǔ6l?ɓPټƽhJBA#@'D?ZPl=)gUۅ^)!n^}wvX)Մ`evD2|*PA:ެ@xK; G[g=SVGƻ\K!>2R ؜ e(Нl^φ!caЮi5g(e'xJ>؏?R]ѡ4 #N LqGMԵBL23!-̸yRx+0,=35^/;oߺ~. zЩי-שkqIVW-<+` BG1wavx 7`gb> y)>T.azſ!"~|ˡ.Vc[w5H- O %q Km= L؀s% #fms<@NԵoqC?6Vasclv#tn%!Af)|߿GˍxѵpbFKKQboX9h|*RŢsorDHANldY;;[gK$7)n2mҾYBֿ c_-2vhyrѲ?kr8Sv]}Q!@e_-(t5:lb6Jc?ٿA8AP",T^V;QmOFG@ƷG"zBQџGC{T rdN@7B?8&$jёHg|hrnݷߺוqa Њ ۺZpn¡Ko\,_pH+Ww{'w<:s5v($g;p^4Lo>0"]uD;vUMzi\eRin"MP<9 ݼ yig\VM6֢J.}G~ &TgQ?ښ%5Y! 6h4J ,h- MΎnw}'㡇CHˏ^~ak-?mqZ1nu)=[T&rEs\\'m.>BI<6B'zp\Vi$P/$??oDyu?^> sӹ_(b>]J6qfEIz[mBԑT7@hBz;Q ! +{{,{Ld-{gzoxNkH^cDÑ] ԡ⧨P-1 XZH49Dϸ(ЪdCUNC T u`:E {z0"~Sߔhn3$\ ;OÃuv0=vBr}dCrX7k0RUΓ-VПf/u4DLe,"@(QFCNgjPn,"zJ7BcdP͘O-%+)“vIxKّkĪ9e dgۓHMXyW584(RЀ5yCVwJ,+?1$v\X2_fX,}z9C޻Fg->/.ϗOc}lL}C QGI>(9?C/qES?"45nۆi@pŹtHl]_ؘ7=QJ<@t^ 4kbdMQ{j1dvbi]oF[z{q#ľ;xF(ˈMO{x,V]w8E6䡛>U:1@@d 5bJ#j@ #%+T*at'Q= fiaCDIDQ m<7m~O}Gygn%rVvʗn~y3/&t_{JD[Ky;H<}*˯}軷">=wͩ"鋓HR{n壃z#/,goS ]CvwmpCBDJ+@$HD e"!cc6nLvuoùgZUb{>{==[xLT0O& R' Rsv1+ܱ^?e넣ʧT8%ple3%j qZRU(C9̺U9 čQt}i՛(#bY`DHɮDe2rvtd6 ê-яA\4 ίr QdPi4( O+pϓ,R1R ?_2AhZԊz:"05bSE@?>c Q yo4-ҡπD{6f'*_eSyGNrG) <ާ|7N%&^kkuUaW`#D[$|8$ l[T|8Hqm6x, ɜi˒zZG!p~ԎpXPQ;a$Gc9:0 ( .{;mn~c?_X`Q3ZZq4~ݓQSą))(!AFW+95ɡnVVUHg%}5NI"0p% ()0pWաt"Ȓ'jJXcf?5xR>1Q N,[d\̑Zh gYޯ15>7bzyqva@~/g8o0w,i\x56C^]\4m6.r_%zJzOln[H`F~D5YEՆl6K\lva\C}r!bDz@&tĨ98Q;EV鱙=r$Dv<飄Z*7s.[:\6Rgqi]d06%syw61~ʅ ېfjnOP.|vb++Ym=~1.PByDsA"]nB08Q}?Ǻj O  ÑF Y@D$\ǷB/g`GuIU2ԩ~Olsidu@!{ ς3߬H y7Ⱦm,)=(S @m} Z>{N66)-JhSi1ޥy8]`Q.HPhX)9Z1Kh$a-A5J9:)ir/P#`.-D*amb;mTD_U0YZ3SQ,>^c11b؛3dIUiZ֚#flMQ,YiN0RƔg[gj9 [E\Lurrd+`CZ_jrB?Lt2d񆢧'LLUx)=&1n7d\jt!YUȜo\HM7Y:˖tm59s:- =:WӒnP9N@l6B*A~oγ_F]ľȄ"&ҷc'WtԒhIT : 2i eˏj,'OpLLB$HqL,6 [$>eD^HamJpS#><|k<ЁƂSqȓh{$k%*+G6]gL.EiH`.ۓ! S2S, yt.:qGysNz0".i1yx⠎m9CG6!9㩯eE;fc%@C< y.+-Mߌ.JDnǧn XPG.s-Y $N  FVsd ]qM@phW!dлfMJy\l30M"sq iՀW~6-!/tuZ"N`Tl02.ۿu&eڜwk#`',B QM!{dPP.H͐/~+\#)DH }i)I,'IJȍ"صl19)•{8R[\X8lW}Vۛ7OҘAx:<4)&#e%^S0}6xNI-0 4(}4u.֙d7ZU8Y}r^|Z{@@HZk뀟"Sđk5 d|7?o9dDDBj];Pwʺ4x}\Ǘ>w]mCc{zi~|zh>~B2gд 3|y9cwڍ}3E0~2Mn0*]?O|{}cGO廧Jgw7xuO?~ۜ* "Vi_'L9<|9}a}T`f_nJ\jM`j+GxJb[MasW_Kz,'-?3xٹbُb0yfŽOMY+JYu>뱣ogz0bUCU+:q&PbI,j[ѾqC]_7n6#M|3Zkܕ{+;:53JH)ϻuE_iN@_׸D+^v)y'W6d)G/^kO l @IcB"|r^U7n^πA`Pl{ηӸ+gYV}1} ̍+A}A5 atk/L<%@l2w#a1['I<鰧Y0“|6F%EV(:F (ϖѢj8nKN"*Ǧ~w|r|29q4Jãe;`Xoi*.-|3.!L4rj`>)3dH2w$ڶ&ϐcXj MDY gėv9+؁2 VTN3\.̪ q)mNIͬ"2LL4e nm#ˆvȅ>}N0 3gV'k&^@],EN,`1 åV_(n"%Ṙ˦k^Êt`#pNe>=xZQWE%4A/}V#=.kak w HqQ% ~K>tisƹ3T l*[?}XL%!p/aêce9#!p|JciF,Gs~6Cr7*)lӢnx=J䑙4+)2#D<둤)WsSaI @a8P5i@>fYu]f[>z9s{ 1?jxlI糬 O%$顀XلDq{z\.*|Y߬Kч 3$[:(KEÅQn(8ZY,XrMUUzYRr=3ANf9wp#g!5T0v0|^U=Hj[SS]S%9M8SOHwTMAZj] )Sbڄ5K8ܳFx(97pl HfE'6COGqpPApH^( +W)8! 1̒0R59_q}7P~[2kHTW)s,(:nhs  lIQo)seƶ2u'[8e dd_ m`ILjgKYhU2,&( _<: D7=yS՚zxH,.ki$[ŋ) -se]UDi!3Ԝ Z @>C!T9c~mk%\dj*8Áu|(Wr5`1 Opt\QE6kb6#i؆G.ۑ!X_.K xd;o'å{pGMydwEۺzgT);y8^4!lMx>ؑ+i6;,Rf&E"v),'gO Lq،j#"Q1Cg1ogę4=}wk |ȬFNWxi=p 3McifVM X/pTE3qeUHyyb;iԿcE.uixF*p2 Ly5kLk+k2{pbgclnTD3oXbZu4 NlidMnқM,] Ciap|z VUpJ.9&$N/DTy] U —YT(U XP.EHݰ}Bnħܴl%x9=6QG``ǐ\*"] (p 37Haݍ`j椛huWp..y ϜcהsXG.ǙS:54o;hQ"qgc7~Jd*z!75dQᦵ kq`nT7x 8sJN*Hi26m|kM+46!T-|U d!#nyC!0:J#!O]RZ {  x tg>y)5m&[C 98 7p$wpᡁ](a|mCl)4_f*ұ99*H4u$R̬DŒ$EҜmMOĂ )-bZRb7K} c.<Ȁ=< `1'YWH2}RCavy\gSt&#aA"Ld`-BM m3䲔B2jt[@F?AfSɶ Jcp/ʅ+()zQq5rfifD2K"1jPDnJ-+7^ ﰅDp%a TV[ő#\ Aim]✊t&dꃤ@-?@k";e #W$Q+#/sP^ ٜdW3ip~\: Ħtq8 ؤRZGT2c顲n2_*?|;4D@n&Ys)%}Ŗ"XέY{38F065 :Ô[ڪݟTkkMZZ 'a*~}ukpU|gS6`_lĥpS yWIوQ^dF٪>Tp&Y&$R]()BvyP6P;?m4%Vfp"ȲKBd 59$2dO]1?8?O0qI[!̏ן?&Hա jFjM PM"Q\n( 8kV'N%K] ]ފy-'C3Uy^³vmSR*Y5Gړ)k(Ԙvy"bIn~ݑf?C#LFI(W*#zbj,lRW2ֶH)#rJx cZblڏ ׻b9WcOЯ,}?NfjaJ:zYr/MވhvJ8,mk2iȖ&\rldm;SrO*@= 8çdyG?8Q*E}@&5s7^?YQ }I*[}o~ұ! 2 ܽ#pl3T #ћ̵Jȏ0&6a 3qϨAl*,ř̑MF+͙:M„[PBƈo%MDL'l,RhDLغݤ<Ʈenb6,c;]~3e@Pf 3Ф(|K ;.T_kP|oN8/cozӯo}Y^f{Te O>mFfK|n~.ُ`si^U|;eIIXgcHyxN/8cPH>YK8{#DQ*KR*I/X"[ ) }%I N1vF֓a! 74r);fx;F-]:_> fdfAa{i*vrƘ|{s I6#9Yo΂'e-,fuTEK.?T_u#*ڊџ2Įq\<K{9X13"6|3ԲTL1ck3[Tp )brhUD >z NP}x ׶jT"^|U|ܝ_>U_?{+^5rʧWo濎,p.⍹^6ŕ{ن|Pepa}_lmY%z"H<%KfE:Cn%C B@]>FWwO:I6e- GHv.]eo:L̴* Kƕc. ̧{|kHޮt ?**M7\<.紾tH/&t^7@*9q; o6ć!2ʄ,"^{M,id’ %$AUʼ"8n[娛tRDQQIbʰsU7L}+Wۂ0ƮoN`)$Q>Z8?I)P ޛ]y ,-p|{zG9jB޾8h.zusFvz2VxEޑծXU{~~پQsBͫ<,LCPK(xQFV:qN8AܻQȨ#N"$ U-'λJ )ͬ7g9CU(D.o_]e ]v,_{ޕ{W[7oђA%SO~"XuM{~SE^G|8|MO=ݦ~wLQY@ӝ'O^GPf}+Gco`_]EN(SQfe4VgW/6H-&U70MYXed.eF r)y /gȴ AmJ7@hpg;զs?ٛGbyx|7_zY>}|gnNΆA>ĸ K$ Gyk^ {G怌>|[&$m^}e@?Ld]1[;'TpzN {RkU vS6jCkǰR)D FI-\ Bg2 dn1 8ze*0(!ƟșsG~ׁ {"#gC-a (6N?o7_|[> kZvKAfQz\ay?|S{|ZLж}3_v]Zg?zϾoz'9xqq;r1{lS"7#5v2̍qo>#>ɚ xjsVj5"lP]r@/#J>x7p?x]Ͻw @ n\|-\ow,'Y[ s|)D)@& :Dji;!Ce?B6Wrdr?e˷MW\\Ei)8ys9Zi4' щ(ysZe8WpfUw374_Y?h+Ţnu}ﺢr-I2wo\d,%5jSVdFQ@ؤ2 ѓ^BnʢiYvJa ID onq|ڳ/Pb٪J!B*0'߰v5IwV}_y[}N~`Cdtۂ-sBXj2,No97nk5j#mFH~ #;&5*1,$suh{f||ןҎIp`3AS# H6e5AmxJMC`Oh#,)YCcY6yX+"Ztx=D21IJ>TMD"r] xge-Ft/vӷ04[-SNůxK.>d9OrƏ6K*ik޽_;׿Q5%nhp4_ Rj\P+Jy]UE=oqC]!M۶kB7JSbdMMRp1Ahʼn61p}Iag7^6҅M˪+G8VR۲Z )|l,ڝRqǧ[Rg0Yd4ٴOn Kp>u +AοȉHzbf$>>މ]Hvh#Z,\c*qB0&>V44=2'ۀ CnY0॥4^h~wdNW,ʔ$g>FB D^XnPlWBTj>JxM$RV"(%µ< ;y+z־exVKOB@($'b6)b51{%1V 4C1$ Yӆ1 5BvR'FLI Taܘt5ٖ\@0\L>0KVT)h%,2UB}ӔIy_o)9lJEX^mS \Ք֬ OU*%p&ae;-3QY p00Mp lxsgR\ߐKsZBT[XDrcfIS(kft;rݞO* u)4_?ܩ?I&Ly–ϲEfPzhjR!FB9( a3I!Y>vJIMrR )# D(å4KO4&8ɔn.o(t'hG꒼@0sKJ&?,%gXkRANܓ]Eh-Sk'>刀A5n"Ku+S;KeBQ%}yyh‹-E 0LD܎\pX%ޥg`\-vi+rȐX'k1Қ^FiP.MuXLu%6pP_-fNhG &"=UTDSD97truYż_kQl!;{dy%E(*D: 3.k٦" ʔ$0Ԯ齃;Jz&KB"UKi.Zr/-##qEh6_H !`aaGbVS(!=2z/zKYmbqMI/^P8Z 2r"v@, ]vB?f窝 ]5-g@ /~mFKҼ,B`KJe\<]u4xQFGb}r\Qy`{dr2mxK倖l.6ē0_[GU"d C9l*OTSq&%p50\jH6e~,/3,k~+M^$B8=sݫKgT:űY9=TZs9[is-AymQm=+Qot[z9s%u˒-d0&3H@8Tة„!Tb(pD(B9I(X q&3 $$nVOw {y/9{ZZ]>1YmteM5 a"L2v}b~{;CGW@&}aq +.J2(;ge1((S&%s #eu"BG,6CO< h2)SQށ^ &axpm5HKz>AkZ(,LjQs*{l}q#8Jq1cd}k}FH_~Cɇfm  3+g`P45.1P6uf 8O8Wـ2PBk"6l+ Dn: N{:ҏٲ}jnZnBTjQDZ4A-A['yzTĄ#!p6}޴bT;90&q^s{u7yU`Zo~o֝W"NQͅ |:rS9SKLwr p1H0FcV;LCXQDPT@5Sx.|W&Xb~Bʜ/ޘɐO$`Kٻ12AN/-vIXHp0j^ `=B)eQFM{C VEr?u c!HYm1!Bk3lA%h3Qi\L!(MX\TFFx42| FF6WdevBNU<$lC(lICXxi\=WY_+]NCv3&[cxcx\:-dfLY~mEQ6˴֡N~/>WY,[ɮ~ A\J ;ɝ1R)"1һH<#[cNrVx!HPfֻts)x} mGH[t1jU@,քudP"RK${UqJx-a=.AT HC?1:SqodO3,01]d@!gѸgaF:gd(s0%:4#\ku8"EBYYR?,[-VVZG[\(یb8KRipcX*݄&%߰Zm =<9*L֘9 d+~qehL>/rG91|Pwv޶|E`AU߸.[zFebcy׳kɘnY:$-XdMj`RTrxϯ]q#u3*yʽa$(qܚqF  Wy- \qTfǡZN͸YyN*U$s&>&)%r+ܖJ% rPP6j?)$֠;$Ġ$h^>թD@S2f<M.۹dj=Q *~& #>V:2&&G(w.q/Qghr0y^l-Ke\2.VJt<`0EY>~j fC22J}lm}bWJ\cBQU֯Fժ XzR߼]Qi3fo2GD!b%eA8T((zk_^f1Umn*VԳ8bAH"jHQ5}ۙN=HՔ?ڔGYxNL`uԏ]K\:K}B-dZi(?cpq>Z|dX+a: 3rpZ}VS1QgVٷzvCOlX˫APUJFg5aS 4wݨ]޹?wf[7W5ZRxtlyVL'ot޼{Uu56rN^`^Vxҕn9ejƞ`a)p˵iE䡱^X/ъH&HоCz e̦f/>Jn[TD C},0A ~xh/-]+ZMSѻ <}9`KR3fً,HAGzD,#1g&lcyЈsx$.c"Z#жAluf3C4wY[r76 ql&Ve ݵ V¬Ren*[$N|m)Tdh\v p.7w.nhPqtUFdž(zR"A)M% ½"K|gvv%Gg}"?:ǻ]F#B~N1ߎjk#DXOeߜJT(H Hq@;!#OѭӠG4 AsX#6M'+MIh dS[c^ `1J,wP|G3偄p / md(o8[Tڪ{N.u@5ov".ϘŽh^C;`(34UA7Ƴ!Z_a DRV1:4B.IKF(҉OG[ZAw[mg)3O#Z1(џkZT!3c` ڦڦzPߎ\|c]޿ZdkUg6q_M]sُeAISWM"xK6`z?PNiOkβkG줜v]tDNo_CPD!Iq``6ŦXe,'3՘L/UB6-p$tآ)tch751zt񛥽܌C5_ؚSQ qjB(%8}M ~ ;0{BUpiO,+FIjΎz4z v Cf(dQTdN5{>b yBnغ*(l8_%)!C.pNpCՑQ@eljf:+R!Ďqt WR(cezV ;%.CUޡCny '%[i(]rV`fUIx bA-Nr+h(8,d K;yNY5ZWmߔڮ+eyydzYt)pfU~ymX1۠tP\1F0 g)ӊU/PbqPO$Zu4YYuwSg/3RDz ZHlKz:Z= t:5m=7₇bm d<&L6'3/TP 5=OQ5MffזQCTt'K L ێbI],eaJ)$ffzӖ/cI[RʃOE\jrkpN#PZL'N>_.Vs?W9̆87餂iݕ!,FNԀFmGʜMx'y3:O{P f[ҖL Y Q((X_AU8&c?Fns@c޻0lyWV՝ND&V2]T難?>2gS1wN(dTb ᘅܩpYk8aR p*)4wP%HL֦DtOHę>j*PLf%dvl|)rh(6]~>dYVxDt94-gbWXƩNrU>G&.{:)Vfmh n7 cq Xekz%_Ұ׿ z*Oes;tcgw,=-ÿ$-HwwEl!,og^XخQqGaӼk%Je,\ y j9SfuQGC629qd )S[~:DU>]j9 PE-&i3pieDEb<:%7WisdFEVUS{ Fn*(fM9XR]}o3q…6Ĺ мY|=`FlLd6p)B#pv0ݳ.Pc -#*$TU R&qpÏ4 {4 /Q%ر1hu~UGcZ}vŚ~#y2KAP9/׫>Z/W\|GeOGNVߺ[,>sL_F^з{zJ| C~%/QbC**pm<)&c1VvFTltPу)=z\&!L[0"0фS$4aSƸwfi3yIY)htLκh#sLl᥄ ??ԸE(olF8C! k[4tg3ezZ"Q_cYϱL ]]*ibUEli ELzphK5ŀ/0hT fn ,U[륅D{f"a (iM .vS$\ۼ1b9!"vG'߽:@ G7U3m%Ӈnu1Yƒ5KoaqQ-ly^VVB$q,}.վ^E=MQ žSL!O}w)`iS7~hКywNpqYWN38NtSEa>*lޅ$T1ddcB4@#,>$`ؐ6vXwCMGxQ#uu8e+@`7+^2ܔttaX c*&Vc`Q ЙcSi5:;z/tHP~3;=-7`H6ʰPǬ8X/B@ bqJLfVW)w#Nnh޺W;L!_4Wyw@ufg@i>Β~cq.c8Y BY6+̇"Cd&tV^ݙ_di4AŠe'l?eѢ$k9 l`6ͅ%NύNCT3vk((DC1',g] SѥHc,OeAۇ2f׏PPX7qiz|$*e gx.l7:\-ҡw6/mG|m ShcVEk`^k챛h*mѴ Hoolaz™O,t5K4xGZ#35 O=aGw݋nm۟3ɡifOڶju̔uJaLGq5茮::?_=~}Y*nmսL LND)54ݤdX_a뚥/tm:5'5yf+6rd&Ɯ @6s. Tia px.d@SBҟ[^pnU(y OkMHi6W)IV44`NMk(5POJMW'ǘ8Ew60ٔ@mox3v"]>5ѱ;ؑڌi7 4c$6[N6="nD6S0ޅG3@)cݠpOJ/Vc'%*US|{ݔ3w~GUݍ(Wi3PMhS&KEq|z{c{Eoy;n.IY9 {M4O_[y qPuƣ@vW1T(`mBƻuǏttcG+Bq^*=mwOn~D3ܑ@j}4>t-YU@Tbyr[](6>\mrU)h~{(7ceP|A`6ܡ C Vôknߵz[O"Y.<3+|GֱϷ>YK~{|kzqgNM;\4O;do=ZWWpVTRd`AV M]34e<>An H ϳhWzwÚ z}y8*kUk'<`k2cO^|+6J9sOMty GeYnG^~k{ton{bUݭ^o°o,q)#iQ=e l ?C5MJ7Sqc;[ ~fծPNS-x7ݠH*U?r~V|{WՁ?Qao!ӡ Z*)(@#*a΋qӶmڽkG+o~ݷ? Myt~jT`#]7ܾܺ{y/ǬکP ;j}dsoXEu|ZL_?+%4P 8R/u넱fCf6Isq`.s呩/Tg&MT!ۙx"w_;.'N0l媮u8{ܵ4nj{$OTͷC?)I8}EB{hA&9xtz 1fܫ]W:*3yz(ͭxQaҧmxԹ?^}K󾪄 |s8U؂ GtȰZշ[)M~ ߝ%vB` aLU077aU.Nex[bmR ̤:d:(KOùi+؁VWQ2nlWwUzm^eD6:T1'/Ji%S]awrc9|"GώO Eώbv{og.9oݝmwn+ n:LҦꯪK!h=~ҕصsSH+?+37G'HQ¬aWj<6BGcyt|A3 DYݫRFwܭU2"ʀÀwg,}?V=m/:/Nt]j;vƬP1:ȣ[۪Qմ7秴\ Kz6ytm^7΂;uEaG~(x8 M2=3i 2:*AˇzYvFw煮3ߋ  lGaX@aT"(0u,4'I 18IQB IO3ew5ΤjZֹahTDɝ<0.ԜO\CjT謲jNOK:Ε-@w>=vrte0á!(5M;rAugSPZxAZ̨r|+tni3PyRM?म/.|IitM{ѿ?)ܵ*evr>s]YpvX+0+mشcu| |@Sh.D1cW7s+rjyFϖYCGժ8g|Et3]7O<a8.rE 1{ Q.cm8g<`*dHi( :)}J-<Uٰ,*?5=oF"&f쩚З`剰Jד8{ȝ[Un UBkԐ,WLR8.w .X&zJջ>z(K(=}ϊ/m4hD:IpT\A EZ]٭("'=VgF,AS`Ml}5SGcH>tCMO80MpP 第vziFe ^vɔ# H3+zVl1Mܰ~81c\:FlknDe}3h$Q 0zvdJCGpg]M37+ZUs~ tGA$]AulUmy]05>P n԰W+ CۃhSc^ma Mt\mٷfߍE2QR)4rLW%GBGS mݩ uԉoiޱ=(Q(WyWN)]cB78IQ?ɣTTd{} ɣ}Uϗۃ^ceR]UV'+i4 "fǩs)˫ϐH7%+l@?Xѝv{+Kr([IQ238 =,9a#ujj`Ke*2E&ӯ[1E<2 ҆7(3WS/vڑ C`SzG=;@ =e> 4zYf[TUJNWuǛcVM _)4z*T!NT mTPgP |#uxpd.{o{*Id-{U)52\LtU̯:XmZ%~)0@f#AΡM GmQB\zɄ։qDCg$YR T]LQTvcԟ){ ϺqI{9~wEs՘#x2H./"A̳Hd[ e%`B 6\ T"(+4Nqf\,),2+>` r!ZdM; ApqT` (x󩞛,Ly־Libf$A\2-݁ VpA4:!.(+݅wn?x믿y%tYL:~^aQ>v?(ՆB >5.P#ʸ,RG 6z=}@.}<ftca elnwšES̋}%չŀ y:8A.T=-VXbxUUz}=oGyq|2-<UX VI@TVIg"0&z7L`Kmqz,S%oۇzpW;5ϦDrbµhVECˢK%,0WColrg]ьwb}Hhq47Qp\B.F!@W.YEdiQ9\?ңNJz&~[""WцhKŢ3;U"Y7f z)@.u*nx +BDrs}7exc {ii R+'` һrQqpQҳLoNGoٷB`Jp)D /̦($wƠ4DLiD($Zj (P_A@P^:j] v8xzw*[]ֲnJu19Z}t~jەɌ*][U7:hW:Ao{Lւ|yu(dl7t(8ЅH:M灨MJmKaP>àʺ42 V7^ͰFx_q(Qa '(B:܌t(UKDgwB(P}TazdY;ջ*9W@NQ5*GJ\>$5(kξ7GIlsom0RI9ʕ"U[<lQT.ގ¶mp'9aL³B# Ų 4uaxT:JP@ k6XR{6Aĝ wpDoNN6e{=Tq2_n}K8S;LʂguT~Wul!Jm6*GIՃgdz䊄gnۇzA|_Vc33J1,u(PSYTTy6D!cmiHQ,00/%?3=2gzб;G5p.8OV螏ݿz{գAw1^d詎UVBѡ_.IFAeIE>rtH&6ۀU' ]<` dНЁk#mߗ.JK^jGm| z ]w&SwZGLo"V),4ZƾG h%D!!VIʕ*-Ma4M1)XfBvw,,v )m 5޼Cأ'XP0,Fi M*ß'=[h# 0 ɷS*.pК9~πs\ʬbZةg)cGH!Ole z&`f!`#g'Wu;MoE~36 u d pf3Gy.9SUћLc7`F|ժMq#FyX7 ގkPrObl] U˿?{&F4X͐meyR06YO~oC 5]2*bYZ1[pG$-.]bH,lu};mvMR`aA2`ŜąJo݀;"wÙ|Rl4Eyt&m=b -cgjoBD;?=ԻA}>By :ޮJBNBg2 a[ M˟rd e)-I]5>i^P\PP[*C>zz"߬ݡŶ3 f2i|?|;o}7~/ϭlqLST+C%lvCGף[жVGZPNE}UsC`v2$݌Af1Ba+)Mg2p,f`}"rܢ%i*ѓHGN#c2[H6fa"097 lqܖ=/?t)A@@xgA7Y3Jȣf1U&uu۬W$GC@)}EVe@tѢQXjDڍ:es؈%C|֦EKz-y{M=[z6􋆳2=c ɼ̿1myYX%l(*#͏<}/Sȃ!)ѩpI AfS/3Q#Y*is(oZ'y4Q7 \͌[ENl]̜R =)e޵Gys_ʷ<͈cyV2i1{ZV>hؐb?Wǂka={n4sJOt>pض D-XFM"3Sŀ/ Hjۻx]8b]iAxehL==>0%p*C&`I{ǿ!̄gLkBT$'0+;l/" FhCaG_Waf"_Z;.Xy-J`mX% xE_2Ĭq&{,^&4oGavSw !Jw@S~(cOsfsԋB5! P82e`Tl.B-*;|1*ozv:}+6]z.cm‰A eXM/|?b^{?=5(a 0[zlR-^t{ppX #*~ qܭ;QyսagL@NP;>2#էC1.z)jו ̏ lu׿S> cxTh*֌c StU;{xル?Kۄd~˺GMQ+ׁoQfTM^ORf2I7`o'v+O%h3A%Cݎ%uٟٶrl 0uγ&n)XQàS^ Rri^c(r~]lNg1IpLup=L1`21tBG4؆f,7>$0/}i7fWaxr1V7fp/*B|uP)3QtUQ=BT0F!qylQR)u+lMRdG{>G1uPYVk8Yi-m۴2:&-@'&=J_LMLwx|A]}o vo6-;L`l: :sJ|}ߟR)!Mpy[-i%B[_H\C#;p]jMh'ƙ8#<gxM1P.D=t*vm] ZYR1LB^a [Gc(GL ܿBܣϪms)qNǎ7?k7 dɐAhxqWw%/ö:)t_GN>J߄v4 ~oo"=ULz ߢ/]5ifjI#AR<'arS?k{? ϰJ R' `.:Se甧>hj)"J9 EZp#,2y$/;a` #.*3rt 5h W?"@QL'[ԏIQ}ɱ:ܘqy豙"Ʊl"@һoumLg^74^/OՎ6/l 9!ڦ~_peZ3u/lDũ@:*!d}K50,?{SE| !bWږ1 02ӆUhV,SU4KKʡPf9аSJK;9?c}pǮg#[dQkMys OѳaϿǿ#*^~'n>z}/wofpfh机)o4ɻ%Ѓm۶L${  L}}JcL5 w,D=>-f>{?ʬgTQErSbf\k:3BB{ 6A<rpn3]kQ'$j4c !R? ,_m/v:eE],cٜuȷpsw_ynttg=Ll7][ x12GFӣ3jT&H hz u3L[M񝨭.wɥR oū Yg͇;ҳK{ڊg֧]nʴ G3y|Y,U>NR^~7o>?=xǦ|ş}~w H1Y<^MM 0?]{j)NU7lG"$*:g; nbD =pTa(" |n8g6zKStmЭO,8S?>+'/}wܿw-?72\dF!&#Cxڠ'}gdj~]7'?(_ݪ<zH}׍uIWWp2/ckXg'gl=xƣw?0NΎXq>R&Ԡ),8̬vTwhGsi9IQZ }o rgl^|Տ|îˋp'_y?/|⛟}WoM-:˫-1_3Hg%%/M4u Xa1 ]lܑ/dHo0:ނq %&?1CRviC_,l9l'(u6޸jéOwJ|] 1c Yf>fx:- ʓW^.?~GN?_z@֛ݗ/yӋyW ѯS2HQwdMyU%=[q7?)[ShC!6+K_H׺{~$1`Ń 9[h4MT-_SdZaF-9Awzfc7ݾ|W a@O9Bdfe/Հ>0Nw{yL^]^\+lWgg@1'aZ@f$".ѢSY7Ʒ 4s6[3 &Wrx2N"NTJJa]w^7ag|,ბSAȔ (cPq??قOF;WCNyxǤ5qˊJ?>ʖrs@6GBl 8H{T!$K]?[뷢!Jσafm/~u(1ИS7|O^C!<,\NӪJJԌua'{v> o͡E _N.;Ncp9ݚ1RYW5:0Z(=N@m̋/g\ůgz/7}O:/)כj]Y66Hk74|sϽϏ 4 58\]_BK$>#^bcEvhl0xWeDoj1d>lN攆V;߲3ˡCvSMISF0`qStz瀌cTL A]_Z ٢J+ 2ZPAͣ SA#3SC Y:\ʼG66,W?35Í|b1 g$O\b4]3Qc$9ʝhI/Ƨ1 FNO51Km!Zڱa0S꣛SIthc[w>~[4S8OrdO`::aTlѪCNL}^L<utsOKy/5Ko\..P=F& 닲WtM$g_ ¦܏O}'z?ocScɂj/4N.`,NN5_"֫"DMN(6+QMa(:Q%4T*#̬4HU6q㢛Fgd|fB[2y#ulMXr,~Rg}wQ xコ3/:F[nsqUUJV2ϾbfP yK6Ksy0"=_tlϋ19R [Ql+ X.QF%zA̻}+ ٟ*31lzBj?O&d8;$daK;$+1&jډ3`7@MgZ7g+aGkQLl\RŸ{ B /F}|dfsj}" SМsGKa?4-ƒ*vwM%i_=g]cd"H,+Vf7esFؽ.C|F4cꗅ1"~QYEtȃw=#B3 maG7qq<:A9FfoDϵ2DYjTڛ+i1LfCR 0*€OVeV鑾sB?Okr&bS3fk:5N8g1N|(a]ezl孷OMkVA:7E !6"(\o913a1S%Y{=K;uqMQnGGW#W%Q0-9y!y-E-زWj;+T9I$L!iݺүEetdf@As֩Uimsn@j&I$DG: uvRȢאz|͐Z`kf|d!*hC\K8ZOp+w`eOfmK,..+eEF45Y+eی#1Z#KJ(WmFSp#3m[>`EA̘;nj`YBFJ! Mk4&gr®+,i"+3=BN_ޡ5)8[LL8|9@"i9Vu 1F|D Q^ͼĶ%Am!̍hMIM(޵QǺLt$cRHPNnwŲ */yC@siL,w]UMJqA&]k?0P2U RDJnR}qI`4sFھlڎw܋e;eVgŜ$$GY#{'D#՝Y},עEyP鱕f`„<;MX!Le쾴UxdIX׺YqPΦO+ u~0 -3Y0nF'!+Ya'!"Kd*u) I<˧UO3\fg5̬I@#H zg΁&=tZ^BN5s Iԝa6,.}c}J *X\!x (ڗt{u{!1ڲn$v@VJ1YeFlon-{1.3+hP@IPCP(2ZxdqVm1̕D5.53_ bEnb wK_]4ZAPondeb_ƺ~wW. 37̪n-գO{q,ކtC ⸜]% UKoz/q"@Sa'4iC 45 9RR/P $YkXsXvqeJt \,h懙#2LxDvuΠ{|ݩTb,2OjtN(5휴D`]ӁaRiK)q)@dJaт6:!02˗iԮj@x(槐rO_/R|<|iҮ_|fݏ?BN5#쉛!W)zp]=o]=Wm~s)i6*ޱseX_5ز%Z7 L!7cu3<,c"O+{sM!4O#ء'5Ņ!:DŽYr;[~c$_xzP۾k9{8޼D!U" ;ڰ!%h-P(Xhl mBl -4&9{c9sM7{5Q7\S}l@)Tp %wAĨyڲp*t1z@hɗ"թaڥZbv`6x<|ڱHDB\<J ȊJ6|eߴx3MЃ -{5maƥA+m/&0܏ 9u%uSǚA݆{Vda[ákW6X[kT$6PDM*ͺ xz5 M;ťlKuw@ ,rƳz$ @9Bo%`sš̚tCP[Rl»VJ- %%⺶{jwM 5׮^W](wjbp =䧦fk{Ne,{Pgu6:>]jhf,>f`*u0eUSz)Ck J(P—e ˴8{MA&[SŴr>i;zΛ#=F S81:bXki m|R,!^uV?Goh^D;z z%]~cA@ͪ~ӥ(rl% UC8:;?X8^tB>/(e ^ʪGhQ89sJ|/ 5Pzɫz#>=liuܦȆ> ҦRk)k+}cimeR e՜BN*.5πnQ]>ָ>H^tQ_ݿ"ڴ^]BzzTlRy񫞚(DoQ`ѸK-nc_( ́ /9:^jjQQZ8Ŋ:ҭ*e06B0I"[d)W+ux*hNdV *+uANP>OfV8cVMenNMfx(VٞڔPavCX`2wlEx"2 %c17=| t5S䰚 @Vnဓ@=bPg?*c1ssdÁ@x:O5 0&{q ' kg(&% OM^jáDbdmH8RMf)Eݰb:;kJ[ ^6ѷr6t0 {p^yW+=vz'?xn3bC(_me7Q\mkۮ="K+``yl1XVbi=.$(TT:`Rl֫f;j&tZ9 t(tUg5_af&U#]6lEhC_yrcL*Nm`*$_؆g"nN; - 59tנTap`,"Cj+ cSA]4Vujm{]r&A16i`R[fL.3K;]@iYӆ4J*P$h9ΠdVHP[t??ZwZg9j1kԉq8bi}t+Ђ`b~tٿ#?Oq(O\#:~Qddlk[a>q籐,=BOdr[aߪQ/pBz*2vT3Vx(\mɭrOWN wXWc0N\by<Ffi6ymUW&S͢g%iGOeAz6~\`LAóm2aVh\{~GEWZ7Զ]~Fp[LՅjPVu< hȔh6t .5;OlHDٴ\g '9x6~O1.Wةba1E1iD mp141az{`R)W!?O崕8PtҎ:TE]|۱mRdwjkW])n{/bWҩoznÔa׸{~p?w5֨#Vn(rD7x.eg21":kf ;20-QA?j2d4TAS x+bZf MR6 ~ӈlwTϙ *MShrpunֳ_Dwrub=[}bs&Xh z/ܹ^vU1gbZBee}U*'0 | ;HJx# ]bnwUm=ϐw5rd<3 tt\@}Ϊ2szlQʈx`9g<ew쁐nAՠmasxIm3Iq:tWtIm[ v-åLcTlo0b-VejI{48;A1HVf v)HY"cF9TNpVA W5Ӓ#42r 8rGV$HJ&p*vۑ}Oy'e>뎤.Z:Eؔ{m^|Wժx=%[}XU_kR ^QRoc?.82vR to:$sŠ^kb fH b^ G {VR|ŕdB٪J/ݚ*ڶ@խQL8bz6]}AV/]*9)T?LUyvCW}Ui&vDU[w2eyJdS#2яq׷/Jʊ*f=me-#fA@^vy+6˲#Y'CŬ+Ig?cRM֛DRRٗ@c݋jqe. [3Bu&m3TE.\QY6.*B(NI™}޺ k~g\1UCݯz:xtuȖ*]B+J8ەt|u &C dTH-ǁ<sϏzbYv 5_#і [[3oREU)@=paOI2@-6#y+Yjm/kWؒ'c7jUUtjsiȕ@Ӻ="Pz 8J&^YE퓒NOC~Өˌ0 (|VJͽMQـ} 5 )M#(p`@cQWSt']vN*xXu ;:Ӷ@LzTPJGujFRRt`fHnC<궫)5F5'0,U*'lLŔjfͪt2lzxT =AUdl| 㠟Z]a?ؿ[*aAmYiӄ{g,SUUoӷuır6xUG;h+uRW42%Z!+`-f[q%BuDjSˮ'o~1#V4Suþ.PFGlel.[@%m]}nvJ` @wtD02.{[7k,B]שmUр^jAʄ.i=tMNXM.ȂEoT g C@A6?FT\c<@oJhÀKUÆ-D=T0{Vl1 F2Hac- !EQPSo%4X)BR@ZlGz%7 J%| -3o|Bwx)?%mUnT/#zBzYw&.)፽쎰/Ki q<N&!4zR?AFDZH\mQ ٯ +k^f)Qco;3ٹ>_'^`TsK󘛁:wwLY96/(ӅvCKOQ΋5w2x#YTdk, 7/ cmб &2/_CiompSs q|`,()YJ< gHVJ(ѭ k:;z0UG26Q+om{GٚdG9#6ƾ >-E6 (hZz>tWV"xį};^o>_y;ݽoz;z:30(OkT6.MMhBB9mQRV/Xݥ* s>yOv_ּ3d S;6[tm7iޠb5kJ~]fsֆd޽\H^٨0-R/20Qt*,jUlhg-j:ȅHuvU Xi pq<>\uP_g"9JKiMsZok+lq!akz+W#psnGRV뮭Z5ok؅- ԺcѴ7 s|+':BXWy<~XzESɌMMV(Uz; ׽A”>vΞc3BTu?`_4Y1U ӯtZ}vbVcSFM3& LI~a VVk=lӦ;%c]zưzz潣C~.b) lC#õ$?[JAZeN}nz^M=ԵE"(EUKEKo-d2L.rؙ-ڬmoT3TT Sl:[x f;"E}_H{:cȕv ryzb;=D6ޒ&6ؐ-e _F DȥW՜@E%41*2aN%m/sX>{EyrF-NjjA15Sk} PU9 c/wl;(]jtc &,6ƷžMCbюC4ЏPr{)Ҥ{&r2',q_0f҆x.rfW)C׭SM>5;iP}߷Cm oviI ԧgL\yQTCkZ 22>֭jU-EPw[Uxzm^k8%:sS (ےXclEӔ >z;@!P[4e.T;_||ȺAͰČK|/qGה/v5tѪIsS_ L5y`hG$YNgc棴WVy|mˢ}\\9_kt\U}bAG6eрͭgYږ}@2{γzRwT`H]o WR:2B#B%u3p`m=r$~AWfuyPb԰˰oDlЏ桏IgEn7 FHya& lc欻q8R\ CsynYajmAa*T0YŴVhYsؽ(*]? jYѿ> >B,xcf0=n7sh@}*Wm?5488a#O2qCAބaiGg|ӶNaGVyB( +(2M6sZ:ӳHaְ49=3dV*(WoЎ.߄ݝGݟ 53O腷]H=Cp~0-^a)فlWTdm HӉ5+~6Pz}@F'D2!cp( ve0ˈawdYwB.];% kKĴ3YA8EmNgSk˷+?h_gi75I(FE% _랞@1/1/Tu5tNn== mۖ><0,: }E $HPHɯuyi:=< eâ>|,,Ͻn˺=U5/۝$ϋx*R{*W@37(MX4biF N/5qUG ŗl{~ #[m(亣rBV褌[zqt@X`\|~Ui`q5|@hAE =U3R񡧕s&vc ni45o)wԂqD=-樧~L< {ʔw8g_qX:V̻:XE%_q??0f_Vk;F+-+eNׇм“\5}[˗voz &'vAOYtϹQ3\`C%`]g}eiu("3@̥A7uC"D]| Uܫ<-v[&&|=ζRzgBju[ VnEBV0u>8v3`COi,,)a?WX9GQzDa?"҅٦!j\P^"=q˟ u\TVmiNQZ[KԶӻb~sK?wGuJضuz[YI}P@oO a~\wOXj}}Iq7Uoږ}\VSܮEC E/BY%csTU;ҨZO k= sSDhS IwioǸGQXc^m'$~ sRY@32J@w6}]eG96Mn'Ju!Lp*ZS|m.Nms,\O. CK`gf<ƦC6GYkœIt$85rՖbv]z= zԌaOvQm락iwok*ŽTS|>RNʧ#8fQHMj|_~ϙv뫾jTShA2]Txr,.ڳ+TT1ƜHel Ͼ6)of9R-)p6g{\z{AK(Qקx-n,,UxΪ@b*{4zrx|!e?cR pvB%cIZCUā |'9mMvw zGԻVAn*m6"c1yJedܣ8u(tOAp GJtdGBt޳huPT$T uwPY*O=~eMlrź\5*'ͬ%\k h!&3"3uh0+)Jÿ;Kx®]?|?-חQ~>ޔ}BJ&uWV{: ?}-+9cYr :l ӒՃMcCSf޵QJЦRۂ% N(lVe;7U8cPc8ӖVJ! P;[ɻ 'O٫ ҔSxSY0ZKkڢP-6fd('2:Θ§D=ssmr81?CbqP+[`\[9dT WE`Փ+DF1IGVҢnjAt|^)` B[w A& 1gU6}/XG34`sZCQC-VPkrErfga0# FR>M*F&;!0s LeoPtLʹݍ$M?=_\6=w_w!x(ꭀȢG BDY8l3o/ yZAsrۇތu }Bali*~\0fv#y~><]vS؍QN=l#&K"ZV/ Cc2V}*3Z:hwh*c;H>i;gZ{Z*Qܢ¹uo2KȢU?E3ԃդN0l3!3Zedv'JT$f6⯖ IE=g *.R7R] <=ûk#Zшx/6kسm(N;,FYObgR-G:eֵm}>xzVuk,C'f6!ĂXkRk׃9FJ]]TA[oLJ*'4(B|2ZBh6y#Pc[`zͱnQUk782iWuRUl4ϙѝ3l#fo^:* ژygFE}j^j d(֐a^nw/ ;B 5%GS61ՠu(YeiļLf)S7bdE]$Wj9L7ᨷn]Bg ='6Y~2*S@+F`k<5-OU c(BS7|AGcBtY-̊,F[=bPA臨 -Y0kMhփ Bp#2E)D7 L:-q(XB7[)[X&#>,82fiVX9{d</l !s& ߾KxzQرwnPvHJ=kkM%3_]9^O9EJ 4-1k{4_yIV,]aƮSPOtV..J>0Utqq.Д8'~K S~lzXۢz~P`(O/i&B}.44,[|\~|>/ꩡ*9ũF_}Ut[j*K꾾.5,{z|_ӗӂ @Y.»˃j¯n۵+蹡 uF A0>L*޶Bլhs"}(r)Ze㏿nW}ioa_K׶cl.1M-ۢ6R[q,իQc"34ÃV/, @%X=~~ j!fĽTHecV֪}AĽ/ #"_(]ּ:rhj:Y*q= Ao/=(*KsP'}S(-r׹Ru80Z;ggkdRwhX9oWJutv=<^/N9B/Y|/a("4HR*625[cFi eO_JQ%Ӄ7{5Na/+ɛdxqetsfupmx(r;2*OӣB7y"8.πKJE{7FmXQ+昖OBlܣP)giC=}Vy_ۏ9>&\fcń'zgzk?wL`8xUo8Tإ}Iq_5ס㛂 >*u_?mM9^p{h c]vxznk۪y˶܏azCf0XO1vjgA0w&-YG,it?0ip~kC?$5[jh@ f=X,VGP+%=)Coߔc};- U۠'^+ĸT14Jo_޻eKQ9`馚ʏ}ڮ8&_}z[ :IQ2na7|}qa$1݆}LH H {b?^TX|7}KYl0sb{Goyx*v]7۲Nj@K==OKz?!Y}wY妴~lki҉̟@UPlz>CT<"o?}y=%7e/xMo{ݏ̥rnժ4؊)}].+qL".{[F-fr"(0>~xryy/ Í 24N#Ϗu6dۛK]>(0MzUΊ"u4W}`Vu׵m++0ؿ&jx\o~K5+J`~7IWCzWcnԡ9 Rrm24EM.Gō= &L\,^[(рɱ]+H{E۰1߮YMFcIRc]^k</؀AVxX!X *s/Ƅ0D}}c7 ]}N& Wͮc:#( p},r0Y}VrF,'N@u7#l2a^ˆfJ.'w-@BjZfVMD aA-zQ /ٱCOϲ.iFdkL ENx{ym Trt͸/($>^^|r?}UKons>W?űkƦ|Ƿ%ҏH~jCH6eWo_.ݻwfՇ`h~z,* 3Ri ?R~LIUCwԺ~ "8Ĥ?oجm`I}I}UyQ^TU.zA5Sɗ}4[R{4w3SlƓQcy[Az58 @lWz7܄Um0nb9E#}Ryز˴&a(4@w>-H҅7^M+zTY *H][]⪏al :}I<%//7^.l%D\ԍ:B[ѸQ^CVQUlu~P99C*Zmng 4׮k.1E(˽q2Dee˲mԻiRT0E.A!* [VS8ٳ%x'Pg  KߩT8>1) ?0-fh~:U:WS";yC-BٷJ(k]\Ż^W/Ը( v8VDqljM8U-4 )`#e3+(LJe~$Y#FhMdI|!#fh5f-v6 pP-پZpIY:{(#[ P`pBi휑罌MiՔuSao!j\?-e'bߖf(s]WgrLgʦg?n~L$݄СbC8Mݕ?bƨ;/t[tvW*8O^E).J<"xሱ/cnԥ. O /yv۲V~_JfXrD~?+b>ZڲM7ON}0ϐ:Moy]2|/`ҝ,vAE|*i0XtJ1!CNO(d2*C#[bpi:KŻ1p Kk9 ]դ5i药) ]?ph0(uѹ60ĸZA){LBin6(YJ tLPUc 6v#4a 0^(dkK-n1SLU!iӛBHk^<6-樋6rX &=JStU5tמe- ; :{n{S?"RDx+<@snM;`rheFh,(o| 0]Q#&c*#*0v6?sO~01Ӣ9P'SAAT?\rgyir IBmq }MӤsWkCCnD"ۊG4wvheސ_ I ChK[9-{!iKXW6V)yjujpnE, ϓ%L ~:tEU!`StM4snl'S*Өv/n:]Ux?>}qXA۟1G$. 9ry:6L nf0bZxw__>upy|+#} tp- lO^ ;Ku.I9bfLwbզ3ӶeRÁjKPk J6.҉;kdpΠ&ds %^ϭiTϩËXoS>ݏnzB6UjQ8@@V:YzE-$e,uQ߶]jtj6x ]"<7ie "}xQƴ 'M]ĘkVaZts??=0OPͅޞ]֖V$P숌^JVpuIE.]{S߲Z%oܾdĶToÇTvJ!]/]m^. f룮K5+9 E+3`'`"<UA4Ac[&[MqSQCWmYĴd6iI#.|j]뮯0iM&œEǒ~مW*{ZFb*kNK. ZSgї=EJnYS)_/O%GSՍcMsU :&x2lMf_ w{cSHIšWE^DYR6a^3`&!zd\zʶ*KoIBq3L(2* H]]x@cjqb֑tMiЖUT[{- 9=SQ88^AZ|6+?>i\̞Sݐ@qx}lP8&ڏ͈yC1OD{ ӷ(dxdzE 6ت,܊YYYگۡMgP|L C x5`z$u!G< FUaab ZgE#sިSWxnPذ netDjMgA@?);6vv=ZM~a;dNՌ.j8L6X8[qX%[B%#ÉPT% % Z`:.bxyR0*״i aՅeQ.uSfA!mwy*,M#/E lt 2F,_Q_aݕ0ܷw}y b wH%Ujt5V԰=Qq sy2jqzxk }z.u#2ئMd?u+瓷g/CFI`:#QVe?6nSբ}+=Z‹hJԃf t: }ޖ}:u92RNӖY[?!9+hK'%Q3ΪhTӪ0ZO '}%`syk?p96bP@Uܟ˴\A8 nټy<[gӬMo ȎJ"X>'!개3~'% /b>*APc v9hN&ԗ/~,ȇ?.L܌ǻlOUB>Nݕ2U/׺UW羞INw ۿv{_ +P_ͰͻG5o*X  õgoUQM eK?VKa)tP $5׹i%3| #g E=R:mgX @ʹq^ge1\Mi3Ap@bu +^znK?5S` "-p""ܢ0^R4_6 c`% M_dS]o:B^oyYQ"G.mbлXr +h8*o,eK񤃜jh=Y ;VϪt%+f34]*Q"cǂw c`2MgLO뱫o6R% *393LpO[Hl)c Wb$!|rd Yv:YP;n!\nnS]TA%c? gC/xغgҭ>:E//-4FM߳i2r@+^Qyy9H}=_؞O4T)ݖMgy DO{ +\ёC3vJ}io+Q[rLQ{&u3"AeK`R-<9St.,Z`䳕NFXK:=wji^_h>cB c%K ZpB2ZO OUDS,΂JJm˪e"GL$Y6ZфpvP {ɶ Ǩ&U14OwG3ӂHejDOm] }s֙N2^^| "f{XQEX*SRSih؏FX߹MCd650|b0[V:@zThF<`>ԗu,3j+̯=!.r (pWU۶DA1vCx[$&&j݂3Da܆СbL|6<崽v9i29ʣ]u r""uBȨT 3(z~_Kʮk b__+kxmYK ^1QU_v_ 2hNO t#Giu+x&aU OC:4htfIn<(ۄҍM p"h09$OP,,F1߽N 9wدӬ/~=;&sOG9%sɪ.)lv6NY9 7Tr:`X5|e؞VCo]WQn{RU"4%T{fbsLDMpЙFqyRϔXE{^xÖ\~_~@ Q-LޣgebKB3t 1 0#+ :>˅ ?b81A.Cc "`ǑoҪPJejfe[|~Ơ[4 ˏ*ikbPmתKCޱTIqV~lpeKL[VY8 r9 I覀P6۸ d\w_ SMvak'T2֦n.^T Gr}lJBSmpHzVWמ1[R}W֕$~Tuic@UtM@q`1midQmExj74MpЏLwOX=SOS_S&+Ymb=Sw56s$Q5gT+Z 9.py ?F!%*vz)U K?ڇۀX_zEMce=Z |!C}wny}tW4N-kcUYm.+ V 0,)oΟ!)阮BdشF0: ݆{OthFoڽUCs6[XCHT֋vs!pB6ELf !ʸ$X .l6Wͥvߧo.zt۽ǽn?|xdߡ ͇hE&C`1ӲFLHũS.쉌Ζ1GC]UO8}]zUkX%^K\ fmP=LMӉnEO96C] G(YLliHaUcM̞y-ڍ3YlJ[`ѼAwF{!vSF UYEC= We<ulff\*towZLJ?קeŸ&Y7(LJfaC[c= 3&5f6۩o 1Tnx{+UW3{ gVo TE=s cPulV8o'Bc}]E7x5l&Gl}`bS#]u}9G.Y|&Ji&L t2ӁIBf M:JiLJ!4ƥ$;+زl|$YGG:׽{>MZ#K{{YYm@e!UY)Vbvob$H5ku)S2dgJdVB>&0Jddِ ]%L `9%%-wIF Pi3G. 5E$AI<ˑӓk3g/R@ m4AG/zNR/RX%J.D=L؏vBlZ`~Ówlӌ-rXAl-egx­;heɔEX3_ٛU2sؓMyТ(K`|;=fwο2:-K\(z')R~ơeN?o4uPF_A|{԰ Au};<99{pB>UwDVy!,t.!R,\RTؽFFfJ5ؐ@QAuЏږd<^E=O *;k4T۷1*6dIRGlr;X -/:lcȼpZhYعb1oޟ4>9>99.f|?c?Yh0'm&Es( gwRE /"b؈(V$U=KPᖦ5F*$B*@Ml^fMd Wy[V(orsZZ:M%*> p5 VY: 7 c8BN\dI=s ;1sOYUy}^6Lg~~O~d5#"De]gGA 5+O$fTAhl" ry.(n J+nc432y&F@ד/rM¨~>6/33MRkgc㢌Lf~VKZa&{:{EJ5J ǧ+r~E_!Hyk:6ŸW}#ϑ!pV>U]e. ߛi-fn rcOմF&8XFTyO,zw??zm $!Z4|Q1<,V[yYI> CMUWai~xA(T5҈EG}=Ð(otzPjMP8C#_)|Sh*zkɒN&Y<9 6*+@\\J:=>e%¤h0&hԒ}# 4EP۠C<71Jiau-.rqY/5FT{!ՊbnOqlMwI4rY*DWPzU- G nP-jq%r9A*IRAi'##2ÐVOg!seW,z\Ұi 3 z^uHLt$cG`AgDbg=}jαͶO9J龇C|"{f$<>}?_Z"#d Ҕ`h(jDs@<d4Kw-9y9zڒf~'/?7G?/gvN A9La$GA,$-IFAbLeR 딨J\m^~y4El\K/xg3"7NW4TPmHrR/&vZ2 ϴ%@F֠h 8PdR2TVaȜr7I_" $9d+7=-"Y}3:oߋ a&h2dj~t5~!K~Il馾kCUҳ"Ym{ /}1V;h=F&µA7E@zHT#!ULSK,[h؋mn&QvF좀zyb:FQ^.fҘ?)')Ah'OLwyU ɝ۷?;o\˓'id@YMmދ /:Q}JmOVW3ICd/Heӑ+P9 Wk3Ô)=X_oࠣ-Z*0Rwd)D׆kGo\gĻPSV.FQ1b@Fu&rmO,.TϽtϾ˼DlTx.I40cҪ|M-EHbbr= =ν߬o߹sxvxQ}DHk{xi9[8HDP$Lچ)9Tg3[ɋLA+WbRjqTWb6JH[K9+/^jiWwmwE\.J[usگo%;}sso{/sw?qRf-S"/h*>/so~_^VT M9]J2 ܹEJ΍E ݾgHO?8!li3tQjdH>?bN:%OUn)ob9˄$};6F"e`+MDG%ƂH #?#֨J ϩEwF햡_iNM?PfLۣLP'x퍜xJg? _!6k_|=O?Tf-Z{}YHkf{L^.B,[O,  <4@0ֈюc2KJ/'NK-DHAVczߣZHEX /;Ug$GԖ/Cǂ sO>zWa; TN!xH؜eIk'@(/Z,PzwPx7uCWiDڷ4^!| WG"h:. u,Cv-*O!IJVvd٢bAy4b C( 51; D}̶]3M5Og.wΉŊÛܥ,Q|C-;3㳣WݴbədeݹvňM2={weXY5 uOֵe]Z=RYkqZv͹s;9>P:j8pDu= <\8u#T=2dۥApwSh=APnwy3At#Gs[q0DDe)TKxW*Bq1`_N;|? mHh*ɉE,J(RA䕖-H؛뒬amݖ$'}LJ^3A*%[{^`?Ï-D"zb8iny!0Im뤡'FF>MfdW2p2`a>3{?,0EysD`o+M@F{yLe荓,*%&+H[VL;X*˓1;# 6~*a@M(qfړbBS{5xi( 81BVN uC:[]h'$U7lWka"#Z:)cTw[11|p,a聮$K 9XS7v oo!fC*Ȓ!ʬO4^ Qv3JÞ٬䪶l_x2,Aat@[ D*$x6̰B{&RzP3ڒ/L;w)l1Kbr_jR0i gGts5bx.»'wON Y0D͇BlQG {||-&Mn(UӘI-M,_:hXz@M"5{%U(SZ\ebAnׇ ,v5٭,Ќl Y1b\iVq#0HE moFBcY񍩯&Mۉ +`Y)xvf١۬ÿU6ʃ>5R!':Sm-<-Wx06ޝ#e|o$fTT n}UQx,y l<, 6V\( B'8Kh/'vIJbed9BxGʄ)t5ObtثȀ[ ˉy\,bkޏUmfdCbK&ȘF6OO34}͓|ZrJ9(f~nX<`M|>Ol^Lb p7`Y*;&&7^r^<[-=pi>Ӣ;8!zBŀ<-Z k%?}:,IV@㉄0Dٌj$$oEKI079sP{(A""4/ //K{95]qWdhz'm*Zh{Lj=tׯ/f["Q8d`DGi[>4U(#|ٝ#ݖRۊ8-8T.@07orBp2V{rȎN2f 9o>v=u߼u7nq~p9|ĨT!-r,Y~鳇OL΅YQ*t*%U$W+S1='MjKyxY魓o^RSzmԨ֍%L\aEWdz 6 M HY)5`o0`؆-GafrD)z "ITΰة;c[ʃl,i:ڮoy.Ҷ:^ `io V?Mm@3]8qHm8&MT+WnM6?Z(OL3 ZQ9.7v.# gNCvگ's{#?#o@ǴZQ HNe y^4AGA*f}~ka'Gt,ҍWW.Ѝ3IƉ*im.c{i~Kr͹=;iSۦ_zIfصgszߊiSo?t }2'oYR1xԀhhfl(k+D}a"k](_"c,4%c!$lMRAGv]֞pS^AWԄWa8IR$NN?MIA(KK0H%V"gёI( t#  ^Y$>Y۷!z)w`Cb(nxxy֭6G>{z{엪{/"͸پY]QZS_؇ճ%O9%W\Gm^5 ^m<2Ue:_Z>6MĻ+Y-a"ƏvخB/gquJ"柰<`xϢl;p0wiV%d$=ڕh}ζXlMuf2vmGdz="Z([sy!k;>$e~N2 ?Eʱih;fªD8oM QQMJI?OуOTێhek-]XH]*422K߼ux G;%(,wLEb9RD Kuh.e"Jv۹mS14oD?Q~k.ʀ"F rP"_ZT 00Sa-6?_LU a=;=L>~:,1lU#{MV\IfvxfQGo\_<=ºZIU1D(@${NF4/[44>(6݅>ہք$@~ʹ*7a( Ʋ-qشD 829i@K<XWo,Wm!1,'*E7b٨g-W/Q#Tw_ލmREIp=6F KN[V{KEVaL6]2Aw3)"п~xr͛ãM>pm}^3-fF_yaKn[7Mi)*lܾU7䍿]}/|K}nk+ +؊UrVU)ܵG+Jezu<<;vxz_uOTג/|裟zgt=ԏyv|+x^eBR2dЀ,l3nNfZOz-ztTn\g0z<ۛhO,K^^_wΎ⠰p}o=uk[~:9roޅUD+L 6&EQү#EhM.NHRꤱ\35 &ts* iy}J>`9%C!hZhkim]Yei_X]e km``n43T%pȲJV[$L~{.٪XYs\kqТwFMv",eAۮvڍG}pj엳ԎIDR6:/,#.ꓓZO;[Ƕ>m"W !tSJ]'Gw0JG!x Wm( K jWk_3\P#`ΖapI2LZx8H &ݎɓ[4a…`RJN-6ؚDe!C[g d )o*5S2uMVV@`i{,nlH3a`+bhٵH"?iRJZnWVWƱĪIZ}* ڃ ,*xdX"4\BOBfQ^YaG[G|'~pD/3]_Dxf[d҅hW73"Ȓk#dO]UE|Ԏp3w>]l$85oh(-%^/_ko\>pg?zٗe _WDCT0IsRlY9Y%I?c%UkEҋ }zv|z֝X:lok׮)0zBz>)zC:̸Cǿ4 ðv6kQHiУum.喁neiA*VU {LBw6Gx >3_mzh'㸻(zKEr&Ljk:15:5`JXbm.c9 8d E0gaQXTVir)iϲѼ(d,-|=&)MK|<By2~]rDi!lG8gT%x{o{KNQ>˧gUy>Cf\Ky~^p·o?v!or,.izkbnl\%~4U]r|7$2y>kX!j/G tG@m0}\uRR,]wW#ٹ?ݾhy>|Yԍ7CMvʚ 8t3s&1g͡<y]o !{~ˆ) ]$/pVS+ hR 3]6 4[ku[$ ?4E﫼kHyǫx)cn?4't~"Z*مa؞j^xޥz<]Wn_]ΖMW_O60(qJ96}/>Y@Սu _,+Sn??<.W^%ez߹sXdՈ `!/ COhʋOZĨ)WZYFG3 SN,Q!NoyѤs4;7ou(H-`Bx7 YcRHNADIs1DҝtSyBS4E?Cjb:]+E1rsD[~lݴ*MUӸ1\On#`Ty"-Iͧ>zLu@HW[3 S_^E"SW/)P*1X4hs4ўIߛnT&4KK%oG{ 0!0f@QuCؿgƯ>w,._o߬|]$mdDPa@Ԥ6Pހ&aNkZA YifIq+ F%%{?{z|dD-M)^Q8ոJgWn2؃^"Mfе uЪb.B0Aj)].1nXhnxO u[:Y4m⯐( ,[Og׾s͵+^Jb ޘ^Y+t2W g78Ɍ(E=fpC!M2NQ?XsgkEֶcg|aK'/'fԽqk}BzDvUYvx(W O̱I_u\vf¶_~_,Knzvq#,gAӫ볲ȳj6v=_쮥Ψ B")K^pUVGǗ\]^Z kqDaGk0lgѳaiw鱜,h&bm2oSۑV!O7b2K nZE eMYybg m=_pB,H@E5w5uC#{QQXJwSL IEBN@RYZHw1H. U󥗞~:嘅 U+$ɪ::9>u]-!ҷw2ټ{CLβ''^@r-G,%'J_H1CqvgPKcA`'FD"{ $ߧңC@5"+`yc-vv³fuO姷SRkGN0e|ЃS[[/ Ip!##b9(8FHe|1muzjԕmvD(g:guk?3ʣ,AЈgZN43 HaF`Id$`kZ3J4aB /"'o9a1Xw}i[G2USAF6W"-E'K9|Ol:4X "T!m56["sxf%5C[vKk[!\]ivsO$7RM@1Ds*i)%$%hN^qR/rItl5ha'|BR>A,t{3y?I5֎,E=iO>Hg!3T 4sN?:R;YcYÍBvy;t$P ML1N HG'qe8Cc ц|Kɻъ\"~F魷4L|~'2 tp:܈]İ #Ah#C넌yn@Fpŋ1CEC]_lp#V3:gr)4ZR4x짣~}+c)Fq-ҖV0ly9v=Mon3&AK* m?._wc.+_cOm?R=x_Jܻ;>ѳv%?8G=hws2Ȕ"z\1SR:IvL:|޶!{NOdm>o9%AVXДɴWtm&'ق%RGM `Ov_}5h, جE밦ъV;ģ +,L$} T\iOM C&Nyf \tYXˢ௉RpBuie. 5O g/3Zlnw>fsEZ9)ȐFB*TQ%DAq1EgQFSA3RXe"G2n7jbHPB~RLF|0)jaR ŶS|t`1u&/iY %Xk~X,nbb_[8(j4; N]dK-&Б ~ ө(MeW}<7=z_M/S7߻kI߼&#cWNOm73;nZ@&rJ';e!}QL< ŗI]7k}/ԛrYyo˯]ƭAIn'NQkue%X[U5h?2XRON}P uspi@g4R2fؘe$@AB([rrp ev,wNT'm;vv:r;rPŌoI3:F?G5'=RKCKr:HgcɀvŔ/ VW4w0v"q@!mxO$ݤG?n78OkwrQ'vgh@U R,CvKj.a5iEv2Ov/|?W.9އ4//Ôva5tɀ&At%s] fɧgJw]pk݊,55tv 5V٦EZiLp̑=AZZj_t~հƉ.\ kQ5Q)K"Dmk5BkD#j(,\ rog@cM98.DGK3Yz4c]=$=~NfQ `EjQ=ίBL#0 ow/QCa4& !v4.j]#2)PmEu.g;ŬC:C QkًCՌ1hX-Vz`^ *=I۱ )"[En~Q*`SRPw%3E;D~HHF\"->W_@F "f+Д2B(';!hak9?z@Hcj &wyvgur4^ Ru9oJY)vq|2QxA{2uh3~A 6ٸI"snݰQwi6)Nَfp0^d7ղ4\;g5PgcYLV0!*kQCZbNzol,bI=RTo@ 3EcbFsސ:Um[[9q~M);h 2KU4⚼xtw#CD2ܰ5ʹήIv|y`BYQ~r{ęRL!P8]fj}+!Rj5gw0(S֪1.;J1ܢ 9RdRR(Eat9JSv.;`޹:6vQ,p{2 4me~S퉹N^l u5N,*F-XR[h%>dXn4ݞ^/JC'St3`oT4EX_c'L6)ŁB(=fSvKޓ*W^$b-p`#$33wZE =0!iq'!_흂X_-_ͻϟϲrz#/K| Kµul:™d!)X;FX 7wrc+iF4}`7DJx*$TH_BLNxAȤrn:#\^O||1TPēWG.#c@T@^`8ch6v捅AId%3I0jʞnd1ѡ+rF:C|D±-rpkEe6y0x%Ǡjq_,fNJ{L3jrlP,](.`ࣰJYk~❶g(3W8Ƃ=;=Lt"١z!npaD} ?e(EU,Jc9wx| Xi$Sc›>ZL>ٞ|㰍!~Mb~8By>_!YZip؀T腲R $T'fAl95<'s}= hz8vϲys\r-9zN GE Pt Z Ea{[h&DIe%m:9\|S߭*-٪KSfU*a꤆$ՙeEL _o(SB rcRKz5qCaS' $1dqR/sN[&G- TrF @@'`>T_:5]($W E$+W7_'9uˢ^TlhP/+N SXAYo^`sqvhLf2(J{m2q@o@Rjw._gxnA('\>Dytܥ"U(,k62цynG:62X 90ؑ& I+|E jt-ˊS=eV` KmCUf_ (2®HӪ֮ydmӘreɧelj]rMDVF7jg'oTݢ|ïB],]zJEнڢ;"~AO\cF1# ps5x4#tKRr1jM^h8'`} HQJ*Ԯm7My!4е>-bTԄ ;-n[ʅ7-%l6j@!wUFEj;ͫlc-$u9%"f;vĤ3v YT XͯYw_q'IR&OQ~|e$FXd;i<~ V w]5s`zB'n@[5srQ%M( լT(0E4-|)I:J1 iDnB4]A(t0梫G:1U'hd6 @2h=tǢ Za.Z$sRjY}ztvIJ|MeN@Asb*UN-Gٙhf・C0 `CK.)a |r=\5|^-2 H@3VuEkF408'bqKv8)cre9-bB:yi˴ gյc$al67=2Ef!+di : 7HX p z j tld352Dʍ<$+SZ/{5\t$BB0DV{Q^]Вy$w%r-6/VvVI.#gX`dђ.(`#&RQpj`k F$d:Q,ܝ$' QU,DbŮ؏'*tL,Ȇҋ`u`eI*a #<}V~%Wc4߉#b>w2*$&o OE],pǦ-*ӳ`<Y8\q>d62 .Ҏ k%4JUЂauѤS4e)^;z1MA?z){zְ X DDKJ{Gۊ4)zj^L8[V%e$=i7|dP6MlɂV"VR={&4m(\뛾U!Iϟsvm[[,rg3Wp%pQSV@koy7a[U[y9ҕUyxCܻzׯ}o~Vb-8 5'Tf f'x34 o #CRłIk5[."?i~2gI:4$A fL[L̾-mRxZaӶ! 1%nVeXM,asim24ILs987.L $,"Xk`1|A9$!*ƻ?EBRc琟ɶ RV->*e@Tiv c#b:& lSN4d 6 )uX `!A[6Bllz#YsKODotroE~^uMCQvI(-0Nt՘RIqT X'!n V#7\7JEך$%AU;'(_NVrpݮ m/kS h^4:ZG.d&<@A!1vtM4Zk[%L>}M3Vd/~I7MoKΝK{K/stZ=U}S#ORQ-ioqOpDg=t]6Ux)MLdNwU'Y_IX\;BD-rwE,{FJ>hDv9ivmcQW=PBLBD;K.r]{Z0ݣBe-yB+ktrj-+0=L"ioc]w<-͗0˫En׷|36]tq8%P)"bYf)E|FHyb~OdMu" G@TxwpdkO 7N,ξAe4s@4h=:V`c]^#ak/>dBIOR{H4QhWIU~gCn#bh'n4r]ZagQt>1Uc86z1=.}1wvع0$THDuzU&\c/ɿE)1iҌG5rD$J.20RVLK!D=7DUOL\x%7W Xi0b3G 1Pi$->fMs(1!h@I@ g̮wϊ,pi$1oql_e&$)*J*<>ߩQ Pz V7W8FIӮc BBuDA=\S0pI`-,4:27ڡw;g8(!B ad,l*<ƶiZN.Tuͳr~˼,fս"/6jV,B ) Gf^-,F@h߶k@F_n'2wZvx˹&A=;k8^ M[Wۓ]w`ls߼z֫ڦ㨓֝VE Kmżc3K93ާ4^= 4Z?>1]&fF~d øscK9}cots+@բ p}++KUJLfΆ9=%y<4.Hd苑<0`s=.aϸ{_rsXέX1nop+oE; sei??~}N;xac=ZSGK%@3߰&rwv[^(nłT`2摓W%HŪq i:ꃻI |>B. ȗIzQ1n1w$c L*ϝ}:{2%[2.u5.^bbaxQ"A0k-zBYX u?ż94(p6xo*X'4 gį4EFAa0Z-ԢojcȞ9KWsIe޿`*戸BB #@70~Vndܝ+$`B0 -ywF.0@ܔ i [_ e-Iw JgETP@dl\ဋQsvGEV^}M@ج1-8XOҵ;i~b1jQ]<(h)IG.4&YMfe 4wPݒqL}-$bq$#0PS\Ծf!9Bx߱E1@x#{rlaP;tPF.V0"IC5 Q3=4c .Z#0= l:x&|?,ojF޾2!+|h9t2k]i]<נ\ %9#h)bg n*'u8ڧGn(X>Zk΂@7 b0mYy݊={}-op%$k/B97K;7cr%zqH\kO<[nBazLb%5>&Z/N 3XfPA+>E!kObB>iiG?rN!^o,HB| ۰1J %`}[Ç澒94x@9z-> #wAVj aY{ PNjvf8w_ .gi^fd͂1A]/Yn_UrS!ʎ(e&0&%jo2ZfAkÈvQ:m!2vxSקu-c)]vư=K,Kd='/˗YSVȄN,h?*3 ,!H һM4(Sf@G #tL29ܥ9vǜV[q]еlyhą7ywDs䷣u~HH+UZ܍OΜ2v>iXA6OwcA W\gxsK:t9{L3YQa(D(Lw4I㙚Ԉ I3DBY 4?b? SIM4&XQhfMPhc±=&3~1Ki[,# Uڞq'jnN?D!b.UÜEd"1nn^ʙHw-|Ko/"|s/qًU#[V2t#i}dEVڷ{^qfWqf{b.巟yjَ/"]ł0Y?jzԑ;]#rVA: `np1r)jq1@th8Y{ZANfXp t;R s|mYzib.; JF)Ѡ +5. 0ĺHI-]J & p4-JW<4JRTE=ǟJq8\(AV^%9EP=5إH[X.y;#{w#7#{=NB27ZzPi Z-B riuN-ReqjbۉiIkdOyvm +"1|4| ͺ4tI`h2ǹm{7Ƴ 5gd4>v慢Qd3;Bv;AFrXmh`߄ V\=0Ol:1uӖWA٩ιW9V=3ِ2,RYgn{wȱ$*Ţs >ɻyvKjkAﯟ&.K n(Y$:5$5."ǒh VjYOe`6k]S\/x_إ)tQ1,1=FPb`U^ qZ€G`[t+] Q.Mȭ;Gf&MW2 eZ1tKpzp}vÒi@AQW)Q1\ H|U;ī1]-dбN00#Tq*v]n cFSIrFw ߇Gi[NlG_;שZ;KĦxNCCw'?uYqQjsRhỶ$bY2\))BäX0*XE% W0rғfâDz>|~xKA/0{q5s)aibYfCB*D%ǃIբ3RLz]jURۗoR]8<_4(/c:+NI{ao3Zmeַo?˶'rYy¢ /av&xV<=Xp"TX-i5ƺaqVfO/O/oQj-}EO%ڽJOOsg E^33{Ŭv#Scq!(5 I[]Sbyb%/ռ]>(Կ $]'+;Yf;2@fU~ 78Èf[ɫ6>4~ҐМ. o 5E8eͨ^8/m'U+.?au=tZ,H9}$4vr;ii`]7*[XH`9G"`<E(0: >EGe^+-`mcAfM?ݾOn:i 8ެQ4e6Kzh8kx5ME޸m+ޓCv/.(UyȦѪ|QUf2^ZwK }_ﻵ N@pLSXfK\؞.u[J8)5/ي Kn87 .8fѭuvo(Ozk~*ݪmw,`w#ݧXi؁^G~:kvO/ހ9N1Y=<^;)ڎ!< lv;'ɵВ;DaGd&Rd'RB_O=PO%E*_j$98vyX΢Qov{J"j>P^Wk m8-~y[r4l֩KU`!K}JQg)T6+l̇E/X{a V"f@ c:"Kd,C HMP#^c"O|ؓT{#lb,]L ZKݪJ) vd$ŪwU~!Hɽ2mh*nK|J1\#m%F۳H ?LKn#Q0z} KVCMp D : u%2jCbws+Orj]Z@ Rwu೫x!ttZ<:kŮgn<}6<$w\Rk<}o?X^Io健ep //3M"xޅ 0S}ۺZ?11Q >Pw> lMo+$84uߎwܧr9YgGx]O[[cEG$33t 'y;>,[;4=}{ٴi,V&\+B5YOMO(vd;G0?N % M:t+&MUBBT3}rڙq$۴I %(kڑ2H ibrxQ|XtTAǬrd30[N=e q!HԮY)bQ8zīwx1.'Ԉ)R"|9MbwmU䇷Ֆ MDwPݲOOOS\&r?=gMt=D װYR$nx؏RXF,_ӣ[ҵn4Kdll9zP>TLe;sA5m?-P#dcX!.<ʺn%bTy,*TwŒNCؘMc„K[[M qR:U'YK,XrwƕEKTi124'8.9\Z,AQEk=ٔQ{%_e/ww8{QOw0Tw,vqRC-z7}JH ^t/ v ?ʠ9\H3ÈZq~+[[k}=Q*彊:ϱw/}-r(k ͋> QRkV4-ٹպ V^(B NB^ :vTjN kQuDos Nf)T Ú#ϼp*8,;,*GaEJ?EÕ!r Ieo&x'QS֡w '1| "-;v=+8^pyr|ADZ/Q {?i+2#=pUNlu4<_.,rRIO𒾘]M';@* h3$EFnv(ws7ou52}GyxJy_n-ok?駷\,nh;Vn>~zJ/ 7E$VLToc3`kT^[I0ZJt[iYsN/ɺ|O24+.ӱ ;Q _a'qHfW8wN,Xt/8m*@`GP k X[4,\{)&nH303 ܄fZ&_r:(AqQwVuyߵ ؝||zdT1+x֠R%3! lU,Xb [8 $I%d`.Z$8 Ew5X+pW@ .9eGfJ>$ǔ 9udMfJɬubYUQ@ոvTJhcH 4jP2_^B0MFzGZ9'L@ˑYEV N@!dD^0a:,ȁ=8bP c7 n8 Mxᰧ,D*#s@vڬ_tµ|*4qQDVE-j2w r}/CIlx6A+~Z~z_UL@w}y'vMdr%^ع!UGA"k^1~F?osL ʎr'#%eH0Aujyv֮ lhL~"bL EhrZxe;aܢU<Ѿk"TvZnٯῪՄ1 xm)ؤ2v,X *}`$)b؅%uB,T%Vyr=+KHbV@'nN%+yOs{!>;Lq!hAt~ -6֤V>ny& 2ɆJR׺{^bunD/bUtCǔ/y ?-Xs,:bbwg.NpEӅ iW{ gI` 㻮7 zЧ蔨;|U>d(<1k>@nSv JIv d{Do"Ҡt r)eB pW {1cJ.0!jjF"R;rkSoR2zI吁5L$T4e)fbٷVlIW(4[q))x2*C'Pb#F]|'k!}obVƆufnDt5% aI.4;G LyM!J@ftJP,hiGu;֨۾w\.tj 6 Fr[0GkJds2'LWpP*ܒ }[m߬8*4۶V>>=M)lvH\drJLe2ϸfqٺW)K4/ݸE' uX>#"*EĤ'i3X~/G }v; b{&&m-?L5*AH|g{Ӱ(ƪ2i gYD(#Tv;NLʹ#sʭ25Oꜹo0y1G+O*3H|4 (FM4%>'mw8zE ={6u R6R 0rZL1De0YWH5SG~=9Bܔ\eeDw"!Zƅ6 G ŕqbW,.mzɚDb$fk=C=: bgX,%S4 j7JڛnMBd>yNn/wUGk-Lz/xCP>ލ K;IZȬH,j$ZP 6+2` x+$إxK=_2ؿ's^W"K-$ >ٲSsv%loe+k }Zye۞}y[O$YW{NCN)~4eoeݠI)59uG߽%*ӝE뀈X ~^ky|;gmǏiJ8p`bכ5"%: QƋ2Fq _:[Dˑ{RwL^c^g,cls)PDQFjx[EˮUl6|;vff^lV})^y3[Bf)f+D&]|ǧr> ?%As*tv ky)ᝒ{#1HR&Z{^Z_ƌ@Yn糓=| aDf"QO%Zm[AAvXUQV{/y NLV;)5pVZahދ]ňqLd{=X:Y^ 9B{myP va-zUjc5=]&z#o0aMolZ=@r[e~JțN ۋVjo hGN2ZeXL'Xqy QBi^axAk%,-TJ,4-P(kA}QUXd uފNrK[13ʬI<ؗ n?$S}-[%. ZGU0T9gR6#Կ< dAUEu)n4wcVjFZ4˒hqV7`Dz#4u3IC"wpRzpZ`E Oa?KkUEiObcYYV̠F+008wuSqǡsH9s6D+q * Mj6/tb}V˲D*L+K߀c=l w-}HXRH5þ/g=|FST#)KDuM;z!/L-V<@TR(9y(E2!.qE9Q1}2[ ~zmx+9|]y-hXdO7is/ni\.2K{6g^W+enǷ~'ha+#?~[x;~|+(&iyۉ{$cE] +Zr ;(2a`ivA-rgCGrW1P,حVKLpCr^o&ǎ\Ndkqj% PbT RA[Sc9[#QfbS=^^ p;KB{IjAe;O%㺈D.u Z!pIߝI FڧbS&{'+~U-)==Ȧ Z`e&[E?66mAJ)uN[e}/%_.$} դ!Nz&nQsȋSܵ|@LӒ,1*J2#LC5t"ܳ:+Y闭9CsF)ZY;ok`;'Pr==cTkXy`쓱;DX[Ɣ ̧,IG;mO{5[#ISnMsؑeFd'67OJR $H/(NM͚)ͱHF"'˕.ʁS8ן>\msTu%oo%]?%Rm?mW4 3]z},=g+Վ}^O"RӜ~ -XM8޺䂝,Q-ŔYY,KEǼ[2(PՓL`ϩۑjH9ґ0T6Q6x߀oF@ y>-OYL١[.~d9ޘa0kYb:I.ʐUa@=퍒 (c))pxA%DիJ4}U]Sȹ -rKEvJZS'I+q~+d~L%Ԧ"A\ :/%TT">p j&7XEHGrNŝLhajgXzcȻx.*nTCe({`و;GYкG<hBhu WrBN=xOجۆIP%5JhS^@=# 񧳊zT|'|]g UrX|yy-ZpRgF022Ҡi[㞙˷}c?z|v<V-S1EX1~/G}kmkQEv8&@1Q'߳C7DAsŶ0[utCr/>RV%ߖO%c|pgyK+@_׺սmU:-ȕH)0(8:VTLZgin'񞑪Mbu ;3 /xvN{Q;ݞ\nB{ rp$n@ ` zi?nur*`Mf$Xc=8$7\7L(l@Y>C۷] ;DdP; JhJv{@Z0vnx ŏr a.!JI t){ZbFS>+ɮ]C )eLPT3Ro0,8Ŀ1TB&,3݀ +H;`[P?e?DE)RwaۣNv\APBTQ"['ְBi>(HBԦڂF0h3]zrж;zc;8b^Y9~6uDnhFO͐PvHVuu@4D vl?%/1 T0O‹B,KWυ /$͟CHӣ5@(ly뷻5a?oZSGs?7kz+CqcLƭН/fzV[Eٱ$=1ܖ'!1ߘ+NЙdۮNf rE}9^y, xIUVƼ,CȬW&YheE0҇huN*j6ѱD<8 m 3A6Ce~L!Fdcky>ҼQA'<2w,/hiB':b2nO1߀uQ/Vg8FZg^Y _{[w{@nŊPH;%GzJM,GnN]ݲo鿴ʪ8 ]N2[QߞD_/SQIJtD'֖i@j0'q7(ُqZc"A7~56ފ$B,5 RLu'Hv]Ѳ;(9~aə9a' d,D 'H%+"}LQ_u`)`0ȖD/@)$<}xH7 v =j0eOYb!6^;|49LNSNi!*|2o믥> ˠ}e dAKY1eL̥;/ j}.(*&;s|`A&Pbﯵ"ʭ wI} 4TNކFbVۍb9Wr9S5,(½\M\%\E,2٩]C|{ mu)e*bE?JMv!Y (ht s⑖ Y 㸒E"cKX*AM %y(zCٿM a$ЗU:F+F89,)u֍Օ4"uCi{dδZX٫m(PhQY>YjO_\?%%[.ġ7Enɢ]~O~2 ΢YUW ADRp [j 8`Ɖ_ÈWk۾U:ح/?,/u̻u$B' [@ K[8E:`uZāEQKH/ߏ\F 5avD( n Kx0v(6֏C'Xs<)赭~(B|w4_; Syx`h>miJF6HSZ|,bZShȬEilDV)SݠI 锋TjfnuK~*A#4~.JsԋPZ"Gd+V)9=zgqhCq4.[ JtդZIe<[I*,X:"tS:ly ;#Wu-7O׳D/Q萔-*{!469q=JjEm뎴 /Ox_=*7 /XYas bn/mjҲ`G^1GsD##@侮39!08%[mUTߖ;J` ry> 5^g="IF .zoMdTd >HG,n^z/Bj=.:42$tv)TP(S,VoZ,M뺿 ^6{sP9b ;g.Xb}VZ}Z(Zm1nzOM󧏷reZ/o9^SRSxmp_= DPyYq6Yݙz0Mw/N;>Gޒ54 !5p  j5+/?!abBjAcDeb?jDjrۼ{[ L˼rXd(sZFRD,C&߱jZ9ȫk˖չ4Z1< R 7 T^21кދx d/lzi]milhe_7? BUQ/[ 7U BBVaM*CizQ"fO1vm-ֵCf៣ \"u@G42m;x?C0AcD ca0C KFQNW^/$dΕiAVV%'<)gâ:3?JG"Hp(?5>}ǃ)5qkKcu/O/ux?yJ꥾?L-M#eϴh0V⧪JyղkC&=#,?HSN_ۿr iD0p 3UGH23$ 1KQ..I?i-&+!48g|A >mT rgA$EH%P 2ٹg8' jqcTq@EcNryao]m ,^E|#(M^~Ad^bdTh?zF& ɣhG;Nqn.1 ͽ#sfv† vk_T5酰ҳ 2LZwjMǣ/F;$w9?ƘJ$MF"h)84_P>pLS@iI\j2DMN5XDV58Bw=Y#d-ZMmzv 3%HQwKg4QYAm/(@U1s` Z Y̭Q>Weax""hv& R"q qw Wu/_WF;岥dqQFjtph˙-W)Xfc|-Y0eˌ\=_.CeWNHL=mO_X4?1"g~rK 9nb^#V G)k8Zooyw_uHe8g Oqa9 /w8Y'닏b qs ̱[g-Y kQn#KDK-ɤK<( W{o_K6, fu(pAyR[wj3<b@&>}`AE@ _9H~OК&KM3Rl=a2ZBm*\_3G1xGh5\z.JTN~ HG R ༼O鼲9XY%/2wt60J;A:rgAW@e0BJ Oqw d t>>bkRYWJRTclLԭ{HebHޜZ3jeVN2*:E g"/sQE3)_m.Dy ك~AB 9^JV^!%HD> p 7cm|9r ƾ;}G1Jv)9~QU@/50vgk,bwL6oOT<Ծ01tתd²I10/.28$֝޶)BK|{֭X[&4 %v׶[5Y/۶}x??_?Ϳxlp׊YV?wˀ/>>~9?_uzhm>>-kXn~N4V>>b/^uXQ;}I,vm_~ўz2\f?@qgW+Tڽ8^߬;VС6~|C摁NJ|Cڸrny(&;տ++Pz" xvh51"aΣէ6nAsix`̸ShY3%QD+Y8E85<YEug`' e/[ X #g48idCtt'Ln:Yoqlg]q;qwnO)E~JUX ߥh`;"1QvɈM鰸A iSˎ ;gM#t#AN5ǐueYtv'8. ,Wh՞b̝ :NQh[Ϡ3 夦5PvVK+K1镛PcP /A4=ieU+3'od잲{'B09<8dH ڈPBRD,)˞\3b@xܔˆҊDZSFD3\J/$w0(F=%+8 %2f;Zw4I:]KRy'$?*Kgl'LrS_ͪ9*LQ'l+yq`ON$U*1;lKRB`a56J[c (fum5,|x?]ZÞn5ѨZ8Bo_qg\]Nn2몫.$iy]:D?1lnE޷/VW"e,њY,O~kգ @gcCN>?;.le{Nt#mtA̚\`v9Ҋp)iiŠBGRa"]pa P{L @;JSP,Ais6c@.ϟ&x#y|I)4bE,q_`uSeS2U̵݊Gq~OG gcsJQʃ^@&}IS*+씫VdgG} 졢-!HecƠ0ՕLbh 27sh3j#Dj+ZU-#xgY##HHhם.h_'ځQb2rHjuT0 80!KߨKEP fD GpGEƇRGeWf]9'6vNX z3~.~?UHK^"jpA !߇pQ쭀%_(E9MmrP9}jWv9A)EcCz=7Dȯ)0-2KWz aZ2CgjOr'cv]Xe IMOr5rW.09XIMj˱JnƉ| hg+u',)98ϣ+/F ӻZi '^ ^|#!Sj)h3N_dnkBDKҤO*:YDDCywQ"קwEdՇ4J(EWI]R٨Ĥ&FM)5bsD.S}L , 3>;9.NR"(ygm0a& mr{_,;f(pA)Ηc%r-N L 8XD"Q0 o+(р@Z_i"nqޮ$C%[!9[y7F*xt`zˣgkV >-͗*'@k,u *c"Oy=Oo7yGɪ< tMADz"? gأ`xʡ m1\Cm)/$Iej ^cZq]{熼F#amX@m.aV $v/vA.";bɞHxђ$WD9$F^xUo $LC``ʪ "T!RԳu@jnx ZkJУe'x)&:iСCɁf )cr'ַ?6v).`Zv/щ!D|ؑ"./b.ɾuhHWvS *lJQxuF`2! AW? E YT}F2WidzvAg& -4/ޯ,ZN6NZYd))^";I(B9MXy ˈʪ2G6I;>)|Ƒ{eC%=sFߢ W˝XjԪ0 nVE!bگoabtvM7bCH@Is+I޴ WޡoԞbR%v/dbq0(5.?}O Qko˷_oUXñYc "TvV FKWz#vۿVYTOeY2&KykkE=XoȐ \  o{7_b (cھJ.rZ>삯k/m`l&伀^:7޽͊gޏ˱`D`_On 'ףiu'Xؕ !Js!Y=4PӪl\,-@+ss1YV 3IWV]x3ܚ3 }!F)hϥIDJཚAkW{W1Cu[ec: VBO? +a(9,2w־l{C7@nlB $$ǩ YbIEnwoJRlHX5y9J+f\Mu{ !Z n4T5k+bG }jX= Eh z]"֜Ve&- ֱE7*g6WɆ+FЇad r]&7&QQMc[rEćQ1 'dIH@v7dj>^hv h=3ifB0Ύk+ *#EQQWF}J{e/;3)M*Z Jx'4#$H!@~|pY~|y!(fEpn.+XrIeB<Z=lLPko9PtsuRUR2좀q|˒>~x P?3Ib)Y~-4_[XDRR]wƎT`Xd9N9Rކ^QqQrCD>lVo|mZG;‰]^amϨT7.%H8"@?uagLȺc7e'3- Mߢq,V_dݹ EǺ \q%0J 8,5-с_+ٮ ̓/TU:lXd.e:CcTx< |-X'5w$y.<\*'&U(xY$^ xUme ]Z@{f+KSO1V½0XۓeRd6b?qN']Dp?KwJQ]]ik8Fr @]oh*g7y{W Q|@Q_QcѶ)#Ydd\Q}J`[SgSϵ굋̔ʱ/uqtOrݕۑVtܡbiPj|p#kYfUhG\ (Tg3Fvp}fٛxc)AۺT^fi1nmqbڈ75c~| r&sa@ 4P_}X>??ӷק)|{Zݷopb۷\\n uz.KbKk-2n:E@_5"f;v o̝ձqWc'w>%]Nt]ܒd5>\{ooo`j!zo'] ꜔Y9 v3C vU5]6rJ6vDce VT 8(PCBX8 #0nmǫo榑UOr'98 .zxg";tw2_{УpNU^b% }0Ϻ6mȺnS/XaIU0 >v:uaNS)S]jü&KL˛j۵ZH]Cʟ[|nw_MSݞ6&A-^dm۹Xeͥxw mn᳷vo~R~cѶ()C3iD Jq>B,1( j16>IqoW9& TɀY؁E:( vpQ^TMvY-LUp4ɇ;N^]zaЖ,sS3n=eDl= Tv]O硄(ۡ1 nI');L <ҞToPEg)O!gRrD pq\VI^ $OME$!DK4 i:t+)*l0o:-KYlS8d P7Ĕ5o#Ie})ֻ̇U ֚vfDfoFb R/D;-_la*f@{0kSfJdu3ցޏ~l9ev27 %!T͔;{:P> ȠZlRf 81d%;Bՙ畠J2"~(ҤyςH'eRaa좫2\9?S%NT(MOv}Ǟuχ0t\ޏMXBMS`xQq4VNWc$"4kxݲ-Y6&6om;q 󷂨kq˹6})(k2^Li+%Fw'v Nk|;qbC>^8zͷ^AfA/i 5x_#z&@7CY|eZNϞyf4vrwiif q\ed_̅1k<%s?EەsmmzWnb 4y{٪J=qot?Vcur׆+h fB֭n*K4vy:T)KDu՗veCy*&x7dߥ_]bH@`>U?E1BEY8bs+6vGa=y3}ik{.CX9Y9 ȓk {n=[.i7|GIv~M~}7A ТCV 邎e1$L2_N'u[a|F_p!k3?kʯU_S1%o6~tCɕ:\FjHa>N s$D['v9lTlXZ-ʩy]u/n6@C熈{DrF9vG6sweV GpJjcdvJwMKAN8B[^ S je,+y-tC[븾(Caa绗|./T@W ( uz:)w9NeLuNBmG0'd[XтV rܵoNH/xKz/CcT՟W6C"_ZўyQ26oG2/ #>T ,]nE`; hwm5ǰ,z%at.W,՘B4 fCg[`pYS~+irʖo52-Jb{dԵYIwl: vôUUxuO/c`π8{MO=(h0^o_~wQ:>~ұ8meiEeVVg3o^se|?MCyaqM?[tÂvRج[يe kUGJx|h%|إHm1Yͷ0 @zT*B6PzW_~peYe9H9Ѱo%۸ :壂Gn-EvbcS1pTΊ ȧ=5:M]}-@ww>7H#&擙5Dž?#2iװf g2p5E62dNm  ?N)t{< I/?HzMˀ e֯cq`M/O i*~cD3;D``*R#a_̔m av@2{`* ySW?^.JE?|_v=fT\2@kPsԭ7燻i>=]]1+<ߦk,jd"N4MT34P"+xj]&B: Jl!q@vY^Oaz +n ?>IŠ AkWpص)NCGW5Ӹ IwM1ǡ^Xw>'tr(C╆Ų{5>1JBygU(q:NWm2N57b@-菵%rE(E(u,p]uӨᆦsUYR>%U7,Kst#Wo_\.ÞqzO4htUzekxM/-(a~4>><|M] fc?u EDZM/t^^5^utA-XkP/ia=v$=iWЏ޾y[=Ժ|q(cWEQe4U羾o>M?|:=ovKog511'o2d?dx[[XP+P)+饩]:0 )J+5,3cL6E d˫bsY]k8ۺZoF>HE7 Mv@r-NuyS.-SxNi (%ń -4' j(Ӷac-#DNb< 2cN ͷqj9[鲶.g<3] 1 SئGBjUp`.5Vˈ_N~-c,dfZCJvц%\f冦n6gSǩ,)_eWxC\u/E=u|͹n7R!~ik~m=Ik1_:Wj7TQjE*0d MoBLe6 K2{[V ͞(|W RQy4Bּ#N6Ϳxhթr[3lSw25Wo Fy;w ʵ<*Bo 9bzDb+,_~edJق)xgk_w>Xj'~x?z;˶=n@)ۛ]L<Ο]7uz׽\19,^iNթHtHR5b{>=~iwoӧR_8fy8J9*W0c'E΋-`¬QT}^ +LcB\~ d MUtEj}۴E2tۄ0WL^B8J*^%Ƿ,|R'܆I6r&Xnvxs}Ea:*̓WQ+AA'֙ 9,J [q.eG#vNbS䢄ٵUv]mhA0Wptpr>aɚf=lz6bäd$b*aP,4"ɡ Y$y̴\^LzfO9 Y1+%8A$Ӻַ6˺X*fUv(me ԪfAUUkx`i-EC0PDGv3ȯk,@gQzB{Kk`ZC =d ĭ p[6)* 1R ,y 4Jć:μ<5YlUyM¸]wB;+f H~tU@W3A(i|||7nu~?Vlݽ^o}GU0TTb},KzZKH:]{L:qzW| )^no895]wzs_0>\F/{% ɄE")Kv5*ԔTEurcNjE8g /RŹm6̬A6Q ~hL!_x 'b z<&Tg "p^ࡋ3JByUXg]m03+u bx6QǟNg8V.ÇO=C8㎷75邍BiPRiJ6.}iD:bcp8;Ʀb'mر1 R2 !"6u3 魜+SA!yߗԢB^'1͆LiSUoh޴36BWbZjçOʯ4V \Y={W빬ujsP!@vVlgظ >~)X)H9Z픕6A^ZIyWYz> UWHKc[l1X(S-W`k0_+~ܢ|N@L!"ᓃn!Rސ+ m-=!cۮnJp!w־k5$ T{`)λ2m{ĈzHgPߡ΢ H,U %K{S?etb {K PC%},(7퍨wed k0jf {[Gh}5O溦;ݸ2Sr;H Uun%)/P- 0x(>:%#_MC7ݴ7J/ cys~R ցa+a-ٮӧ^G ]DU8Md!TPq4ŻGVD_vɉQ! H0i<\rDP(V1OUjjS"aYye,r/UfeXG0{?/nu(PuKnڐXҥ3Ji\ 8>+ˉҥ9=_sNF/W ݂>PfvÂeP\,':]j#FzfA/!M+,ʱ{51T=X0hgVE`<m[jaPyhTtxs+A lЛG3ֿ _,;B3o?_\ G vw )&}h%c YHʪc^Ǘ CbSѬ@̞n27P!UH;gn^ٝ*U"lsDMc")>=?Z S0?6=OZ̈ duմ"U-Y{3L財(EZrUq #'+{oʑe(O<1ӹ~pk6rxz3d4")na^bK\^H]9MBxgI%E }$HH<ς@2h[3JBɖ%g̦Jx}}yyQABO>x"Eѧ8+w__\l۰T`!:-I?;DۭOݔa 댧Ḅ"~jۢ0\x>ymmӤ&)'u](]{?+[JJYNv; VRC-9_ÛgܽQΊ5ń0"gڢ:6@z,G;h]bdG I:6{G9_tUUxjpM<ʽ4MMQŵbJX 5IɚZayo+S"O[UN늮*v? Ԏj 揮1/t&e h7o;}FTM^/*;rV1k{*mSs7EB n&۹.'0,8̃>āeAGG:K+Oj.vG3YdFQR),t?W.Uq̳~뼸3{%4Em!RSe?/"Ϝ,4-k\ %ebYtzzاa(7}~o;ZODfu}nߤB *佱2~aQr\5;yl$mCm[T6{KTMY1R*g -3-ױFKV+߈.L~@ǫNֈ]OOc~:7lYY/tpFU0d寄2* Xq`Fˁzi*"!>SpxFaw @387SL $j41OX"O#CSZNׅVMTEL.ЍIFHq.p+&9Z\״B ;KF}Vꚨt*(J]R Ӄ~m%K2]7'6r/wEnmdr|* S^#+ ,(Lp$Msbl#z#s( =Ccj]@{Ff^(GV߼:T)9 X N[ >2o&^6\ĦHKXױN͵{pfek?GSwpB95jI05N],h(zT֩q1膰EXau?=Rq襏6NUC1#:-F%OSξ+\H3]A!OISkd%ިe81R2}U/ri9H4Ue(d*DEZתXP6(5 PUިw(~% T`bMi]M3N>ݨ'z~!#F-" !UӝXt+* '%u% ҹAbx-QHO,dBGןoF k%q)N"D˲")BPX3Ci mPQ ^*{2tqUEb"@%|e}F(N*fQ$ЌR—){Op *FVyϋ.sCe-8W@P`ޔ.oץ2U Cᢂ|>RyB{n`oe|aϨRj5ߪ, xf)4Kġ!.{e2V iGlw+rكUzwj;_'K'얠Eˡ9MW%+*,JonH[/'6&jSfi@; 5vu{iK[|pt%.&!mabN06L]!xUJЯ:%Lh?3#:%.V۰LRPX'#ɫ+>!*?8^--AS.Ie6Y"yY{e۽X8<+0oڢg%R۵-U{6b`xZ 5d^!^i nc.AXcrBaCr"W\![١d'^:E @ x/ubQEvQQxBF̙r59mԙ%cF[0.a!bLNp Ϳv|Й(`2shPۺKM Q1)^$a$,1kGTq kY2C1/y1.WKif1!^,Rzوm^5xp2E\1T6K#ɂ}13!4m͗k]2y:£ACAO\~%馚TtcܲNW ݼ a̰.Uf-p-_Slܛ̐Vv}#C5:^yAzW+XW?d~ RV&d~\r roXb9GnDrHmfp=fN/f`9fAP=XU\Q"ľ Ts`E4""-lȠKD07%/ޜXK͠EOWGF(P嫼膯w[`pwNjHp5(B"  &p04DWPPj؀O%p%#ld_V:A]qn8m5v'GP|6.@<tfG|:#ԿgY' nsk4mO_:o-SK]>]'Gt*ozqKJzX"t;î6mmCbg6jh~.4~6|.?Nv{{ !Zp,!Jt,C^꩛4]f8A|?IHiZh<+6Ƈ-ud-7ӼF;L܏D6M(%[ 9mtmޝ;/~su nT1CsZüE:9,F_5d!g}^`OK#/Q/j?үupҰ螰si?]oqLg"saɺȚ2_,\ҩ,~< 9\V]&lycҒ+|<1KN?;_ *ÖkfpAIKEqYWZn@ Ec6r1(x,LrwR +G1 3 7ز1mH?EB|٢P!;(p0 Rc_N:L5Q[ѽthc欲.4sou_ nwĩkVV ]bAeeT|PP^BRK"?WR.QNb&WYg|?46I| )p1HgfG>a0^Q?3uCiLn(tYߍvxr(U {kK cbg,=BdsMJXЬs\C)0ζ̓*v lH|;u bH1al-Fg\2bMCDzc.?\Bߨ)k7,Ǯ١4&%K1hJ5y:*4pPs= o YIOHY&o )v&3yYWrH'E<ҁ5nEj!9j*#K*7n(QLc#G,N'lXO댌G&w O;I,L8dm\c@ n1uq\J mǾ ^_SlmuxTyd+68RZ (?^R;$tX-ov:\eRTק9)v uNU-VfAq96ᔥv]fnT/P~/з)B.zb>M0+nƬY~=HmAFpԙm_JHt\ɷP!v#*)ROÐ+qbp4|x'ZHIӔ qn]cڰuJOmX`Hq: aY((] @v 2V|&d%Ӈ|jN+n ".Ä7۔NՐYFEݾOEf[-E%P~57mQl+c8J<=-)hDW"x&w: lW?44%rRV98؆SUg_BVDVZJ4ôPH>LmC!ER㡤La-UAhHiP3Jz1pIvIdcA[`뙠[dS<]ίcs 6DPq(B˚Bs3b703?69;Қ9Y $y`Yn8r&Ev7; algJކd^Xh+OP< k4"RQ! {kTk+ܘt £7hs9fò1D-ggf^B^63f|qay5|Tn.]cm^)1(oa6GMj\()%wH opI.:5 |DbIZiRƚ00'[F~:PMKppŴzk4\bC]..h2[76Y܇z6{1zV<j@1 ET҇U<1&`!O'-! UNfibZ N9xLqv BjQ?4 Y3Wc'ȳ&jGd3FP؍b3yMV%=L'J11)k@`>өebXm]/ї'}}sMMά_sfݹIHH c?f~9A8Rip o-yF b4oBm>*+߼u>}`r|y/[#Fݕs.ݩmWОU xAg>Qh{".a;\mǤ  Բ4NvM N s&ԺE&e ,-:DvRv=E(}~$]St ]SOn4V4 VD )bep:k8A?QPg >d{V_Em|?>#/SgԼ+Bۘ AƈR38^?2-+0g^[ˮ^#Uu]UM X:z| xZ{gJ߆&¾6̐@d?!NJ`*5 FB3YhLyYzMKHP`彗 Sᬝ!CNdp~X'N'MSD#7,)ChJ}~JbubY8mVT ii=876!g{c_û+UcΫP#>rRH| {DM"&Nc!3abVe[2~FpSK$1 XHMrM'_X`Rலs܃;ePPW#Xr #.r|:x'\vau9;$U`>'&3JO v4wzҗ@hzM}t8޽e,'1cv*ޒ`o/nSm0yzEVLu¤ dR'T 0$NzM`) #morzĈtB6nI;LբjT^60ւBA9kamN ي&^rB`K] `UZ4 6FH^STWhn˺캈0Z¹[&Cb+DdzNJIww kdbxO>m2k{́fܬB~vF,zih` 71$6zXFQ@u:t*=W`2 .Y/r`#ދ`k'[\K̤= *oN҇CM Eʂfy(t:%ۄzZ|"jƥ9-bwI8}L0hB!!wu2K^5t-bF$sWuҳJfl>ϱ9Fa("O]Nz4qfx-Dq]6I1pdt?VDk;v=]"nk!{KHTYܕfKZrv&mž1Ma&!{.KU0}4bd]QUMuKB<}} n JQ2hY hlŗ}2tXx1#PHljrU_qY AW+'TXX⩣c+},zm ,H-V`0q:c0 U*"#*ybMUp̹lQ;nFf+l!qGU ya[]-HZU%ouqTneeBeY{d GyՉ9`6i+ah^DY0jq̿rAf7wYQNnVey”OceYڐWTaie_7ѫ4bGnGF^ |k[6&sDZ3QŒ%Edx`_$:ӴƟ@czmxvS1-FM(1#H[vUU>WTNDR $Qͻ*mY LW$՗9vC[' mesIq`C66qz~2b*%Qxm ` ~.aҫpBQ^znlUm?RE"qI1XX0JVt@cQ570W7739\>3YIj~HY7%[V<{۽:2pfutޅ I|@t|fw H_.Ѳ;[&ȈMSM|@ysp,,^ӟ(NJ%~XxQ)*A=dǸxM0/B+]Pn8] ^dz{FVJtCŌi:HsQtj,4hunXQ&^d)_|Po ]~Cw2\9fL+}R=mٻ"8 #BJf1>ʜ% { 4]h0Q& H{awj {sߝC aVSD(o_񢍗K@jP!Bi@Ѣ.*OY!0}3ˑt5z<;~Վ&CճcX) cʆ1RiPRx S@cgcPCwuUj2@ekgkaE}E< \]i Ԡ~7ic&U[) Rt],Lv1 PmF ا+52Zc5mu3I&[3C+c\V g/,3ֽ1 nsʎc<@*u3*ݵ G[1U{ΛVh>f { byL|odQ/ç aEIjr{Yv( )zF8Tg)}b FU1bQU8 oU~rJ>2ʖ,dynj7d.7bK ' #@$A XǸ6LĦÖLݛ9!dT.T(?]y=mbלs60٩W. ._|TMpELoeV,|ZѣN1 t Y^ ״ 3r;^VJ׽AӖgzi`Pwh 4-jXe,bF_5W-^ .0c] mi(cԠV0ġ(tlnx̆g~@d({i xrږ80D߹S+d`4Q*Ke<Vl#[7I!g}R9<EUuih`xKM׬X.bՠ Lf$n; :J6c`惍B%Z}n92NOgEWBP5WP9Al m(e!FH:Yd8e;L}* OAfHÇN̍ʟx`D(e3ʭWdYX‘qJ 0XWvL+؃~b/S556D:QǙjFǞVжfO)G(PJEn xsdp`dƔy!Muեe0!d=Y|/еU]nP-* KRt?v<ʴKK^")|4PC(0]+<œfЗNq97.O,-Xk/?ݸ_T63h*) &BƘqqǕĪ6UMUENaŵ$u\Yopς}v,Q°  a\2uǖZވS2e\1@UTQ7$UuYǙH`Qa ˽=%qs[5Ê(R5׿{?ufGSE-UM-UjuOرX || 6}Qg5;}(g[+`ȶWFڌϐhђV;TtNhTM^5mݡ DjJ!030 KE?[~ ,ʖ =5OY c]h$ GY{RJ)@=3n.a *}B.ebyCv6|1žT EűLӐ@gIJ8e8TXwtbkCc 8^ Kwpȩ+%Z6|185UnYשcOB}HoyseNHN5mؔ,zJlt{P=W5Q gTwg0@GL=LFI=9{iO3jŨi;т&/Qv3WRF g/b' QLy}*Ġj>7ڸVUH [dB%MpT\p L}a8wt3Ta:bkl(+O<7&J/Pg$oh>~d/ſ'/W~mzu[bkŢƱTV W,a1.! :..uUГHTLe3|`huV\Q$J]JxAEaAMeM}tR)̫ +EA0'*[ELR0KQ&ގ5am sj' %DY,z?wtNt0{d4nvN1p'mѤ ы]MI(g5ŗ#,kZ?re"ş>ׇe!%"20PʢI?||F7-+F%6DTk/=]f7SWf}la¬֮Y_Uw86晑36|a:7^t,)2 2;V P/30]Mx 0F#a꒟]ҁuK⢥k0v7e`*葧F0%%{.[ET$nt3Zu{%}UsmQ:t?n:mIӥeAZ nScCYo[7q+u2(ň lF|MٔCLq43 ďg` ƪ^L^q%vOgzf)@-T*}ZnuY v-+<"6["&24A(cd>11bg-zR$ԱU( ^X=te TQ\cߧtO1l;Opw=d7ymU7/'z00āɌܢH'l NpNeuI>8dl$_{(*| q(LMfwBغgRntE`KLFe oKaDHdWF[6z}zbao`4942 3cf&Il*2 R? 1tQG#P2?޿!ŵUIYV!S مB2B`?qY zCC@7I/?¶_gdDL+OiT0A-2}lM6/]{o{;]I&k+|ˠSYω b )gB5+*kSF:YIDZZ*^rG4GC`}/[g F;ԫ:.2nJZF$9U֓?De -̇I_5a~Biˮij8~7?K//AӿoQHrJ_k#Wu>}7{'95MK#Ҏ , sB.mljK1*8/gC`Nmc+s`֝3Pip (3z@De=> 5S&H&cHM4-L-^G^)jt /yyA$-Um <:&vzFT+L(9ۊܱaʯu"?]ƭM=g]F3(p,s8!DCWn=YBefzL>@O5)%W8vy4Z.~5oh sy^ȉ  ɢ$u!+x5[Z,^_`z9wt< ]'- #녞6rl-Nv>7̿+CV`QetAQ}L[ERDžR/O4&ɤ/T&`Mev)//{LqS|Š߽/;z*·>7Us|ݛ]m|;:?_5Ͼާ\P*|N}]XO?{axxjk}yoә-?Oo^(pL;PLOZC3s/mI,wǡgaX Ȗ&3AJ[C?pFM="TTD !ccMnB;lzC7u._T([6̫ZUP^P'Goc!='=fP:]s(>؄\ \_ض[{﵇s %րb@dHĸpq8IIP! Iy.l1,,DKVogP;gﵾ?ti$ҙ&Bt$f"8kdP.:b GCsK-E64C\eQxZyoGI r''LXY-Dmvt`Ș 6Y!:DȇSDPtl Hh,RJs|>f/Kiؙ EaHr%4b-ERըLv|ɑޣ}#K^bIF a\NNeo}G:8fkIQYLӢZ 8i_)ks'ܵ:}G-p% 50(`YBᏚ &;ʀ%] ; D*v8P ;{0xMgb$/ӎE! ɴ hsjP6O]wz[vS[*n_in;-)zY-8bXK\U#bFac'~x.v+41A-%A2K;m4)|&$-Mmԫc`OWSd{:v\Cӭ0\7R@; :Юk?sˮ]Lo|aV … a}̷/\D+Zcm-]i\Aa)Vj8|^/jro\(#0%lȰHcP=FHs z{-A,% RruP;ݲC흮,-^^.BUUv/g9mZذEð "JW> 70L7þ5R>LT %.H1Y`KDhסTgzRג5=,-A8P\fD撳S{ևbpd6${`s]Ad`Rm]gT'z= )QiJ=0h-fe^a_=AkeC=&2IÒUiu<歍lXqT'V m ?ZʎZH#F3B[PJ~.JE =:I?1eF/Wr0 vѐXh#h- ($@VuOs,""OSbK"J ,3bDQd"["N=Mk|go [NMb'JT@-OtފliXԊ |fW%xԝ (-ݳ:5 3Lډl D%ժ>k+ˆ 9hiT񱹡xcdߣ(ӦmڳEreT5pOly:~_ON&%Vz $]tk"`)ߘAuKa(. ](H Gh5^H$Yߌ4 9/E:*; #bOvC.9͈Y|E$i/O^H" .SuVs}Vcr*a[ XrDлqӴ"fÛ<%uG:lj(NO9 bfۖE{LE`EM2DJ+h#RbYhą,Xɋz@Hcd48TjYÑk??ӕt5t)A DD.1Z`}*<{IH\UV;>up2Gnz $4fJx|'b@Sb /3X/@ t,mf%(ϊA "Q ʗ&Q6k=:k;kfm)=&kR0eڎ3ݲ`ƽj,f&8t0ԆGm>OF옅d=m9n©h )xI:EֹcJ}iy@Ldkwuzige ִ o]~5v{jr"^M"G񽆭ô%ЇZt$oՉ"yRPУbYmɕTb-fb>K/еL{[٢󉡧~lD%?\[ O J:R8->~?xvpG>MQ Ek]GoX3"S+CBf2M53h9"*0z&L6٤CPm}'YD\e-j<nJlU!%锅\i6mf@ te|}|[ů~S$i͂jxq#C4y{G-3JuZ% 3rUG`N2 '=UY$M  o"mQE3r5ĐQ S:*Vқ QOa~р*˙#$,ƒt/e?9Jw<7 MV!ϢWqPfA}ba3 Kp_y鹫?=Ƅ,P[24uIDŽ0C3V^eV^Lrl)TB,H1}^$c&Mፊr&e_HMҳ +HRKcO֎Ew)r;dR͎D瓋` b߷@ܦg<_[H=>Z9 oH ])>`2FmD@uFtQzWҎQC2sp 񝓳ӮE6Xs޷5|cm_|#vNP)ڰ F&[ H1e8]i{&0z^z9*GUZ-Xj<^̊TIpTzt#r*\Ƒ2^xƅɵ+_M4x?>>fz;_c5Eic> 2w?7׊rḳE!f=w)H T_5& *'aT X(`!w^dc$?m\lTH~4EdDQcT-03#5dVgO᥏?,7mS"6MEͦLXqN2%^A#4FHoWZAAL J |C4!T1rrGQ;1sFOT`2(@{t,m664raHW`\gɯζkA&3+_>aVTxﭏ?pN׆*,qy_ tͳ>wllH3JXYϰ2Y!Rtf6` #MCƐBa n((@ ƒ+ sJe̼,#)Fxk{ϮxrFu'(fְZ)#*M2P(NzB|h HbgY+NS1v5;jYݰ~-ZVX#yMFdos}znjݽ]R$Iwו%T6I܆S!O|棿Lչw]5i1pWsz~=ʎ Uhیf=eFh%yȄ.6QSJ^F1PkBۯ K-%YDW]Vo)6m]!A_XO̟r|{)X{YK썎C.FMB|N>EHTգ^'cogE!=ɬO/ S. # DC;o,_J)x/IƆIXKi0IDmS6îAܠ)ʃlƨ#kk>i- xKPM}ACr|2Zɴ`1lGyE;>x1cz }Ӭ Bh#FPUM!iZt5.V~o/Olq %q̏4AQp®ѾHPqH0 NdC}P9bևV.Gф8Y\K kPޏ-4+$AEJ9t xdShgYbA1~pPJz0Cn׿F)GL r'|aϿ/Nj7ڧ"w5[.gMc ]xuͷoʈ;T75"jV;>7=CP%DNd噂vhwёCV7NBYtz{%n'{2J[q-m۔EnW^rL{F4&* ʎQPNZJmIZдEeU_' Ұl+x eOCߘEfπV|\eMHʶFdAEA 0nN@as10$vf1:/dHVk"( dLC1 D-6"DY F[A58|T„F=kV-@ 5ujqD9S<4`䇬E*_Joѷ lX} uU8f2L~4G@3Z^y/P74rNV]a?4H_Q^vv{i̅hzbQ 1$zR3B.Ƚ V):Mʵ5S_{[\[޲@',f0 B(ނ(ҳP|G,Zűi@{Z70(%Ģ@.~^z(J, !h<#u-1Z:hjSb{J5$ q-F$a'p{R6&ik UU&o ObJflڴ  |tVk03avGtdzz֫uDTpП߿s{zRIU^Z/=5_ X\/Us~ ia!ZTZ"RZywËIBc6ńH3 ]v |Gye1 i vڒEuc/}0ύ6Mo#N1m3̒h,I#: J0Ŧ%рl'Q&Q{4 _G@iCa?pm N`1w߲M&I}o&~*r\e@Q;9Z ؃,|uu'!`_fl:\O^σO<1t]v7VU…뱷־ gweR$ӶYcJ^N'ehzڹ4v2gVgP|5 #gh"wtwNkǝh,eA0q1&)Uh1tt'$b-ŸϪؤɾѻH&H5v{?\nl|T0F*"NT%b22YHRRwduƨ[tE. l3k@D'yR8m3fr31%N_4e"%+e+-,9Rr#t+.u3l?U$&!)|2+\TLԜAyntdC>rݜJlҪϨ"^P:BK'ՅRNNwuKuS#7$aeU歈mV)U $ 'nf`%/sN4ߌiw_yޣ1\JУˮ `Mp^`?ux^QaP>Dg9r<-d=5 `km7ȿ ㊼-R^Z>Y Wg%10<lh_ IF-#ŻBT򴽦Sq({>`OY]s\ v=z-[A E beATGZZMg@N&/ȵd;J Lr) (B .4acͭGG;]a݂ş^>&3 j>DD tl_@ "P7V% YP z昗&A:ۄ:VZ8].#9D\ˤJQ@tݤ`jilGk}*VMcX/vyo+/sy^o9׬=_{/?n54G8(&?4UniҶo]Cjo⊼g}rQ"ʌ2d K92eЕ5FKi0{'`mrF-⠼$e0 6auP.ҋ?7gdҨܖ R (Ri)eG} x4Gno^BT =rDYڨ#<Ȥ1p$b$3U:b@a)eX\"Jk(]+u9ATx5%67îpe&u6Aur;x1Aœ,%d]{.l@%0OJloebJ[ }0b(0aPqQ|@!n"jy%'lC¦"l/ߝ,BǼ>v\&gՓ2s5]͊4:'ZmZLR)=ZӅ?O C8Y[GI|_;EAI`(_OK'7&eREG(DsakZ~Ko(-T z}Nŵ'Yk]ID`eD= ϚI6! D-|pҺmVS-袁Xa;IZ:oK*d ?LDvy_&ҳӨzjRXrJz^>rn=p!Id|g$ ܝ&f&{>suMwn5 m*P(5dW+d컞 - 0,_RY{W桐oΜȮk =9Fvݐw-/E􌲲pE*ME.3D$ I;w H'9ƈh(7'g,m %2t2(Ԑ$C9f~JɣKRK7w|_B|2ikO* .X9J$d*\K0쯣L,'NP•8 j7ɲM,t`r UnRnx  9T b1jѤɓi7iL(P+IdI)N#r(/|})Qd e0]nN\m.so{n7dT!}Os$/J{"$ӒBCB{ oGD}+( Rː Qk}hP,CIN'H1TIVzp,Y<#JN8Vhl%w RwZ$P fSTgA$hVpRߦ$-V. 8~nt24-e'8Kk{v[J\I,ąw; `t6A&&f>['f- b$]|M6ۚ`N/RaN WvWwN'Lr*Vk'UsX :Ҏje56Y>c&Nut*}D{bv!,= ⇾iO?xw0ŨHۛit1߀+aT ړY˴uAvxrW_~?~ك$%k$G( &L.KU>BDlo6WRmQP4 YgSDf )#]m6PPty.*a%`pRsEOO>wɱkjX;}%ڮWAJm LHo~[e6:ɛh )~VNC T^3^}pA>嗶-=кSI+o&R9) jJ{O!*qS*E('{ա̚ EvrOٸ&BGԉn <$. l+蟩.0D Q 2͈Kl|maux(nNky=ղ ;ލщaWZO ЗHgbXY) LV)}Ì6dEM9Ѓ0ɑO.uχQ&Sxk'4:>ޛİMĉPf4ّړR"NL4n;ugj&e>QMU;MY?JpG LrFLҮGN~Ω)"j8I$aՏ&,[HmE&9^׵j! Nnsk2?]s}gu2͛۝]^_ ŭ<̩`QS.*0t4Fr$ezOՋJ/YK83=>F q%:bjHG2_AN&̱!0C=_۪vwh<m7 ->4(eH jdd yzخ` 7Nł,jHgP=ޫV\ĵD'%qf@578G&VN9w hW#}<6 6ݰT{FXBT @V5]|S?N٘lOJV`FW !Ӥ2{IiV ,ڇ*N3( vYPB^Cd6Yaأ9!4MOa1>a&Q(Xz5m KA{Q0 PIO-p.KRʾKe "#Mâ'X g'Ew#eKk.=[ ^F2X',A'[бA婓tiV[hulOVdђ?ϫݝ6GfnY!8Lwctt<+)Ư;L WL=%$^oJ̊Cb2iTM58\'~ʚncR ҖUR1Cx\(@k#D;NjU/~_O t:,UA墱 #HMuaH?]WDLiJ X"sQ4ͫg LZV`cQ-8!@PĮs ڏՕU'hxM:^:-T2g{,y]*=a<-s;8L&ۨ05TI bJbQS(I9פhH}R'$nf.|{kquP7 0-+LPvB>k@l^򳧥dq|eUJ~5Jq*yTt8UEU{]<8(kg cZt֬=i9 C=Lq|={y-lM,Q`utYX E,i[KkӘ/H/$dTbZUD@9.nv}z}[o~?|̗s+zg۪{4܃ ߞn1 fݯ5.E!n++ i}I'N?3Á;\wȻ Ig޷uK/^/מ?{֧vܼc08o\'0Jf.$ ҍYŔ2nN v>/NvĻ;v_S?}/>͏{kgR`hRIv+xpK ADV[F{k6OthZ W]صuhl 2/E@BGs(|  1HOO>dVQ~I#%ԍX}~Ax줨J KS6/ᵗ U|DI"|L& sh.klBekZv ˦XGPe z|evXo_?6kycISN%7g ظ:;2㕅V~[Au۸J>^^ʫ~R`֢fjI"s5lF!Jeb=@`HEQ'P7w}ɱ%~Ƿ53w,hup9>[M}sw/7*[;+ox`VdI|6T׎nl'Knña)(4x,S^ Ã#+]vMsG޽ cs1o"\:H/x$rZpݵTP . 8@5_ ZJ8# ИSFLq²e;=hIkI[X sO%ziFa/ 혘E?7x8ztrrZ-]RX=,O_z++wnG~{vO1@Ccl/tZn&n<_;^޾=r3s!E-s'mmnX @8okW30Я]&<H{n [:} c4`7N01CǔppճaXۃޝ,ъhXfgZ;dKKta,h3Y26dh"CH7Q4%QέO'K;LlmIqGiejc6٤`G=va)g \+n$93i 8".&fU)[KnQHvtbb21{@@=+Ύc۲)o?V u{|YnY4]g.a6S.϶浵;yn,zqܮ`Hwto$e}peT!kfD<.z~tקmZ`iF-վ箿r:P]gӭݟoyWgi.YP^=㙛 xQ,a,VۗB`&ҳOTқ!pY[-;7?z[ڤ뻶/گ=u笮f ܻ$U"|`./P"yP3PXi !a+1V QR>z-1ڐzq͠ʮ& ux! =$G:+J7jh,<ӐA'jS+,&ܕTc֡J&']mne[_:=ޙ6_vwz1FjaX-ɖԌP2OMkn@tbN}wX_nI#X&ksn& !I^Yծv>U)^5LA E"H)ʨ)?*h\Asw+S5@QSs~W_rQ>$>7z}4?0Iϋ{҃ۧnKt"nk+ +*YXLkQ&_BO3P& o/Ni*H5aKvmrrCԈ[6 $y)vVDYWpQ-OC$G'm  4jQzFA&zeQԲNP@Jӏn38y '.V>mS+iǼHAW6b['|iA|~͘֏~Q]7p:ɑ譪Z%ِA<﮿~|ln.gE2\+nu\۪'9'>iiO-,,p}uJ6(7ë]~t|tlX1d}x!bq\rb)э\WOmr[]]ws_Ӭ|γDeg8rE)åi'J\<\{\x Ƣ}4p-seFњ|_W0H watձ"u.ʘRA M@H6r/c[j%5gcGA$ѷK-#Z8ːFmu6>ϼǬTVTk׌]{->q_{;^!-_~7hoVN ykOսykk*_ mhƓ7'l'j Ĵ[1}aUz#-R2sX7iR喙s!#Rqٸ1mTCP`TDqb= \085އF Fi{ ǎ:rސJk&-9 [wAc?~'0NմBFy|HP VZGe,Dw66 W@#ˁ/%x/~)E c;H3ʔ}L 2XAR\^jS^,k_=8|v}AOs!$X(k  㧘v>ܱpxuvy4K[W=;ׯW3kn3{{>?SZ]QBFJ$U:H) "V%w;%']2>u`ki)縕0yY7tL8dz ۳Wo?ʣX[wVbnF=m_R]}{އn{_Xt~mSNMY{aۿup׺ao??w=r=<̹$(Ev*}_}[_w{J}˫jduvso)SXZ:h76D8s+9NC~fs[hFљB[N$ddt/a-] щ ZtƋF A<39i} OaSh 3(lƩ7 k֯)@ȡx"vH.,J$Xڌ?2ٯa]0N3(8 s8\a /c DC X h(fe\}t21b~|EdC&F4C.c-x0'՞ZBT:G)և/ZԦMB3 q! jr&xzAGu{Q.t2Yyn2dKrAS0F{tN74{kBnSi}f];8n;7?=l__ywo.Mdʞzoُ?w6,[ YߴLz ͽ&T<޳Aƹ lIYd0ή\t)s ;ouW^tw|{+avRÛ_}/Bz EZe ^! :I Ԗd~c%_w,)eŚJP_X}^Dt;..^JgF)JP-A5 {(vY\jV`MbMT럽ren~볟з~LmӶ[yܕW|[gO}[3Pmcx+/\:zǴ}_}+Bű]^{Y0NsWjٯ>/Kݮ#cV )yEC P-8V;h.G`Z$zOz W0 Bɦֶ{=TTӻQEOI(h >k*ch޽P=e^01RmDӨzEb<^?FsѭOEU#{ӎtC*;kZ+h,-h}bv2fPK"܏٘ f*dX|jRL&>9 CYlIZ50F{qEj$*]1;d`S.-X']S/ňvRbҏ@!q%i/h$sK3 ])ak##{*We9|֋(1@NtX\n-, ؍YG)d+x-M[UO?uS^I쳢viWܮ\UfEQ¹yF Ksoyå $h/f}؞Ln=˶k;akm9;Ypj >pTԐLrX"jzJؙw|z]n#:HZu/*4]5N5$LӍ{ euwJqoK 25G%dGj}!GeY'TZ|n `G5ҧp rhgqnBTV)x$B!fsDz~t=~hplM%,e5/=0y#U^%U*bY0; >VD~V&s;*:G?giڮȇ9ddXE} , jBH^S ZV!,,*`=>UŃsKF`ߙBZpc,Gi-$+ZB7+̿t3v%l5#0j@$dD:sTqf"/;K2_|`م IkEl|y`oۏY2iv75$tz҄Vݍ/}j9^лb0l#Ou/dEmio ȧf%*r@idX}ӳXkp֥m;Pˢ-B~@qCh1/9blVͨ2wʢ@:dNP oó׎ͻW$Lv~7A*QD+'lD6FQD! (t::w[$Ex/dcI\B,,l;шWK a >DealC;lhac;myK܅/!ɬ Zl!ld%E9h|eĘ*Q Bɸ)^}ӿG?k^7pU2ҵ/ae2̊FůZKἕC'ƭE'sQ.9UW6ABӥ^!.Yw$HW(2W"XXd`theJxm`Ć`j-?IkCW8ï89Ee#}z ƪm\Fq[䁐!nyZ~qlh%p1ELzK1U%J&,X!tGp : RO#|Ze. LDXW>7-8P/K9i?HꫩaW3FR)ʳ)>+N8[R/JTiK~f9lI AR˲) v ®-{}on^UV @JsRDq;]!]M_{ݻ,< = E3/I~XMM$?tDɝ*m{z5*uӽnޛN d>|ڄ(#%S @;ky>n])w>ZW#<42apsy HjR'_ˌ֐(7Di1N#$z3 Z ."`{Q <=mXWQU莉g?wmz"6TMZzfviWo>Z.rc:KƃNvv2vbRذ_P뮷.}p_~&DK+,x kC:;dP`mebުpFR y!41/ҍu 7;9I2Sdͺ \Vᴛ:'HJ 9K˫Gێ .7gvBbb FnMY)ޣWn o"y8AA' kW53iفm%8e C6v W,vaFdݰLW嫯Thd46m|xƃl Xߒ4xWuc#֛wdP 4(n+&ؠGw(>">4iʂ|2HZU_:[Ĭ%}޺:wy@`w>%~uK+}uOle6HmCn2 ~7fɿitӦvSZyOw`6JX3aq2MP4jf}eCnW/G9˽ZQS;Q)ڄºxauaP[t}}qZLpc"( }?[SyǙ f@sA,JK  =klL/MymMl4? ?Ϡncz6oŇ_[sOJ7|\R3O uƌ,e%xOW4LEa^O^>_jw~ߘ'7G Npp hJ+m|֖e펃<'gD/'a6"F7$*_@bCHv~4]j!@{bGxPg &bⓦMS^ߊJ BsߦiQqă^=Mr Ýݛiz'$Vn:䦏hy? *]lQ3>W(O/:{)!5>l oZ+)#_ݢzkunJRbrt_[}Mc>wу7wѣi4)g pzoCN7ehUUԞˎ:6 eՒݜ MM-&Ys(OF'hQŲ(;qgBGLBggqZʋ]BޢϹinb>qe^v^>R{8-v~:GaQ˿K: *M,?0bͼEq%IpS%Y Y CY{h/נּ#aWq~ZڗDaJ3jIUFwl鞽*]I,|s6̉|KahF֏bwּvYgO#C jPrOO|Ǐ~{>~_~,}+7/{AbX+{Hzh.vE/6(##tG%Gؾ_|omҽ]v~>v_]?oYvs>qƬ2eR͛|;|G2 3\iAUQ&EYPn#q`EXj ̷6QFQ] FEP'EwlpNQym@": 6OZЂbbUA I%bqY#U"ʟ'T^ЅhDl{G5qA=nb#gf`% T=XO?zv{8Q}%U(c!jm{l}{~|ް1#_Bц6c\#'@UO"zaƍ%JTb{)&H\wBa'3Eg&CU'KPi0 d<,Ҙ`R#ҩ BZ NOה;& $ sy+<ܵRq 9heI[bBсRb!dqa"@Pͯ&63hѕiooŸWJ}Ya:[jմUƊ\׌~7~>xV?o~?}6ߵ_3_~~w;5?q2|jzNs6;o`nYꨳJWx!$~fޅ=]\=g6w}+>_')uq}T&!)!흫<\RRqBH2YBz#~Q@f֢77W9>`M,sȾ65@Ítw!#E9A3u+\.>d[+7ɣ^[LPrM,ʎMt{|Ү7Ey')%s@^uFU~5efBdCQ.`+mUOGs?\3N8̔f{7?{QOww/#IRk/vL^:|FO R[G_-S\:58Sf7~&z~ԛ.YC"!]Sv.>;"JG-! )HКG;d0&v>@G،L*[mA Shd Jbq-oZ[s5]nj5O~sx05~ӹ$kIg9oy} '_LEۖUn_ IIo#lە]VޞOΞO7'O^*oITW$HP;-_xћë_t<iSػe þ^ /J87!yӊHԐJ.-vGvX1rLݾj7̹oīnϿ'_I\^Vm!ً>{@D$ϙݷ>{: u&xtA>j}^m货BAmvҥk+Qf!O&ͣ7x>ݏOy~pp˦Rxfݩɍ2n O>//I4ܤy7?}lνq}c^ ]-V.dxT}Oqɨ~Vuխ&s.|y+;]^s(ٞfE0WԕXدy!y<ךFi [m .Щ_RyyADKWCWvv/NFW{`eWeoq|TQF4[]ꖼk߳:ǡ|p1Xd3F͜MБQEw7AdOSsҲZqiZH\mKX(,Y_Z+;qD<]n)P{#jSz f \_xNtLRPeif+R"k0ݲٳ1&zO_/\\>x?q9uh$l6MheKpq,ݸRz䏦 .Fcy $dgℯK$9o5ZO06RfOUEn113E@g,Z+\y;qMgmpo!tZMK^D0]iohAX\Y^Nf#xdۦl-qn5ك\UPx?`\\k[2༟Qr=, b=5WW]Q7/h-ϒl1QF0O~U#qc?x̲E7՜I)eq/nn+T]Y:{pVj?|*4C=8ݥo+6H#s,W,74Ak@&l;2SFEKKJmэW` X ״8I8F%ۀ/QҨSJ+/='aujZt"IotnZzJ|y*fI@@9<6.v 7VimH\M\KA#+0otA}&!wA[e6=1Nf#؇&$\2H܎wlts2'Fh"mV1ɻ"w=~|gO?^ ~xQ.;b+Dy9#*CRN⩄璨UAnDӞ8IS9-`_/SiH+.1߳Ye+[&osׯmZIj^3K N]إkW-xݷ%/L2`p^uIx#րZY66rِsi|DMnYKqa!4Qݯ>)ߍxfE!}5Cgmo3 6o>b[IM>وMpXဨi[Z KQMvUeֳjTf;OtsU uڗIVҦTQvyOww6ίevl(yԨ#ʇ>n29 &m- AFՂJmZƕE.-b3X} Qx Uz5XMfue16qitrs3XZ-,X|Q`56f$XcVI|E)v@$۴?w+(Mg%`W9fۢ[/dZܪ{hyHE 5"<;-=\X+=/{>O\fK|P?ұ,8R-\[KȾ?^9Q8)c-/ iFp{ (*0: !rtSӋ0^1)~0Xڭ sf$kJvofY&]J}BR? t,Ym[ݧ92um"hDoDžl剰MM+,ޗ24M u "hW,8C7}$ghmaVJ;~+Iw;9nl}z@RcsW ɣ0 gw.绨2:[G۝ıO5jHcE|CY.}dkÛ[ɜ|+ƭ T2C@VkW]RɦF\ #b d56Au DhX9+W hER`$ (ygl劫`"oąJLMnbNgB&=7pad=cuԨ 'vY he( "%1U܍Fv ]q8rH' Rfsu*Zh?ݍn<;­epvi.83ϛ I*=ofQmnEyZ*8Je [}FRJ]lsɇ?w?z"D-ye\r:$e$78_NRE?اj' Ld۾+hٛ 7ug̖+מj>g4KR3AB%J#I]Ze2p W Pi*$ڷXPQnn!D/T<:d8ɪ[c? !# XpaLe=hnetKjć !]SԮ?c/]Qܕ %H)S':BIсA1E3$z ֙5J +Vrв,}5lf{[ʁ4m\DR 6Gټ8K$'c̹`^Ԡ&O:8ܕ]ٜ5[n> nu~awɳ. gN.k\xN,ҳiګm"` A*/_T?*m=th⠗KPCrw7p^+ʌOp1ז}6rywdX76j~YmfR+F\o`㍜"74N}Ao|&_w SҜ[?Nj_.9ꃰ3-Y@vM=iq}J4f_-\5>B+IF#ȬAkW]~Po=RتG(|3>}$D Q\VrH̛6cW&G?@GYP BW}hѳ* ,T!NA&I4)BTC>@Omk절_u̩)5D+/}sws8[-{F˗i* `u ((X@[C4̊*-Kp榢(ch jZV;G? `}d+@ >6&+rť6\蚸E.ʤϣ^aŽY.H ă/晝K+6T<фnEbfK=Fj6JVpKMN,vф+)'iV |"ɡ%!{*8ӫf.6@ +"$y[awgle$3hº uE-ʃ]Syb7_16n8x.UW IʣZ !`M3;EY+CVټڗ=@i}w{6]+`4(3O&n mDܟs?16k?v^2ϕc8Oue+3x6nN~ۓcv="Pu2β[GF 1Øݠ%5f:9t9ђn)wz^U^fS QuOhP]*ܢ5T85uDefN7N{~R@8CCx]4+ry.9T>jrke! D{Śur ע/R|ų/^]'id62^~{("V>Ҟ$UI 2?(ߕǹh]!i­Yn_0]yQETjj7 Ig0ǫ*^ب8ꔎlEE]>Fj=3y ˶ Ja!偗]`#Lx*9,idt"F̿U]Դx8ɜ6y6_.*{-F.ԋVi雧lz!s+CWe  YU^8^7QM@DZC-(A "ŃiO |9C>7>uf N;eYT"RP߅t|% /|xf45%u  ~6꽱 {bQau+նUq{xN [mӎ;tmW3ڴ>΍iJ{VR٬w9 =x1Sv@З%ͨ=Bt8UH)'{Hz˦\LԗL썔 v6L;Ve۸[9 fH%ed9;y}E?7|6Om[ 9!&5z$T*-xoz4'+ #!k%fh) ?c6?nH1eL˼O+>%J#Y+E lvu$S;s9w|"T~GVSj|&i8f#1]mq^Ww\#qߌdrSaup :71  t{UyDc ꏛ :P kC \7!8 'ivcM7=x;4ñ~WK?Z˺Qp8eƴcg!(aľs~/LGgSԔУl\g.LCĦ /*qh8:/b"PVO o4.Lah %6:jƺ*1#-RrbbQZ{{^EΉT PVe^2'4KI?jK6*D0vb!QV▨2Б_hAW~¤y&Hk (, @e58]ިjjӢuV.'Wn$Q {j7D1kgX.] ;d{}Vڮ^"dUM؇СVh\nZUOF#v{$,?@XaOY"%y2`]r7ŎA6|8.#=`ڴ׎p%xp  TMvirLMP*Jk`^l0GqLS&^B׍Z-Ϊ-=C^'?x,䉥МeC8=1xWU77Y/ءs e'cUlVMNGL]i'vXt;p dJ6(FS 2iyoPEvHtV, w?kPUfsгWd%1/n!0$;â8k6x8l` m^z9j$$MqEV,j%lk|nyu{3=rixsG۲hPݖKK&<fb5 ;mdsMnx:p]EWz$'h|UF%efHw_ u%ZZ.$B7`*&VnmBsu8:xO|^)Y2+ l:A ԁxųYl L A<ꎣ[/vNYt sfG+ctm{@ ^HȈ"CnzT EgceE*,o[8]n*߀ML+4}lV T jt8NWdžsg6Bjp!/5&C/1^QۿSVX>VJ>RU "<3F9,mٽ;-&$,L}Pq,Ua6&Iޤ%$jU%O Pc"hw.g W:~펇Vuܬ&M=t2R;kFw"{5 Q7/*(K>^ˆ*:AyL ieԖڦ#gXizfEI=zV%Leͱsr1JMIV];9)`K0*Lr3u/!v òt8֐ 0H鄛=h׭̓X4B/234ou*)sGZn)ʮز6Mk\r3|zЁG$Aqmqo5fk5눂[`'^vSd`q zvG" GɄE!m'V~'}o tҘH19B&N[gQ#z[Q?8GRaOA-DW  @yٰ&;yDh\:6/جlgo\XR?ǗZټ׶`j{ӓ;m.r9<8߾g]78n-5= 1G8a!U-)ܦio<<=}bz)䱬׾-"yɥ`$]/U=F4JG@4AW(v6 Gy2 ɽ.BOa8|TqAuVn$B[ *NlruNWaxmq؎ͮs (i{x@Y545ɨxZ$;2rxU\yWPw܀ 4Tw(疹sӹ'p}/vo[ڠ]EVy2 VKE-.w闩}Z6(`P,~C5A]fe#Yg1v-yt?Ac2zӂ/m&d E?g׹40L݈F:/s*SnvvoAR G{0OƃRd~hTچ)fT@ڏ7ڛ:m*ͯYQ|)bX3FYmI(Z¼Wv/%c5ټ6(yY\*$J^˩ Q<4]v}oԶ.ɳ:_~T{4Vp%2հp,NSO/s45ϳ CO<.pKO{\)MWtWTϢ,A0V3$l[p:~ٓ/:noj+ hYT֫x2ehvs?]['Ǫ9FӶB DMXRgY?jw܅ |ʡ>T/lQ^#+*/]Hc: j),ŒԸwݵPAcMcSVO-NV<t56XT(vsԆN]M}Ҍ+(!ds^]-dum ujšRe*˨׎ ueٴ!\ױJ:\g-VvZZj x;݁8#c7J\ֹUt(QnmA1ʍۄ1lÕBx{2 Mӣb':CM:aο했7Ff퐾Uݷ+YuX1"`#f~»crjiI+.噰`f4d`7mbۏ?,+5Lk/<z_ Z߯Szb33:k~Npcαo_mͩ_͌&a=^`rbc^O6]V<+fu36N)~LOZ:ֽùNRxG"a;;>(3S*8&;#XMĉ׈Dv<ǠESq-M`+Yo|"[!i!$msNyJqMf{ܻؖm|#Ĺk;FO.bМxՔt3Fϻ2Ğ[fMa:K&~mSS3e(dH̥e̞XUV_aBPk@q \~v?2{)B_|R<*"u+(Sn 3NkN7EuDQE1x5 JX?j0)c3qμC}Y.`jZn C;pP&] #J:.3Yq-Vuv:fڟxKY78;R*e۟{g-6n4 VdvF.sFww #Db]Յ蟿 szv]wg+3}A1qJ 7s;eÈ3$'cBMk.Ov 7{T9A4St]lћmn}ݲ-WYw-5xx[nLsWB#^NDC>8dLl{Y~?O .<ȤiPB2*0M-FKi"S\ENxQE"ɕ\"]Dtn7fD>eˏh0j@~b7km-ıycУuRWQ(j\Yu!/㠓忬~]"L'! 2qQ 'C薐mQ.ƚXu'k62tYڃ[҃,>=EʍPhB>vh mSvysTre[P4 }z2WbQAP86Z?C 풺c}B'$Kx۶=Wq7qUeIACIXnG IToǮzTU|Dʐ9n Oc_Uo2Ph)wPQ+G=VъKq?R+j.QQ`V dMA}í|<|mQF}$Q\Qܳ^Ӹ<\!TQVi(pFE!+j I?c?0lE?nO Ʊ&A8|}U"Xp֥=`(ormZzɃo~ :-qsX~$ZV<W%\Z֥〾f7偒 SZq[+Q^xBZO¦FNQCLu\9 Wh{a xU෎{dD=Pm\ ^L-[t$[-rW v &-Lp:W\%'QD&P ߥMZ e@R'>)u~y RL8YhLR]pEb(>͡vsˆsƝ䵉0S⹁,ĸRg`U#`47*IϣaoNȒYGys#C6YY9.^O$ָzkT`)2mLrgE+TteW)i-@I=zO?@ Uu1R9֝Q.@XKHNV̺E,Kg%ޱ}veqmpWZM f^;)7Mt=:] 6':Hw&*Z^D Z, "__:jUf|κ0XHlˋ~FG\cm?pkozl#jUzKfz_/,A^>gHtm5$ƇlSn:i1fWwp-;e qSv.a>Wyd*:m3 FR!5筧,\No\m<< 41?w*_3D2NܽCQh+?-=qblAM>6@EbRMxݙvWNܷ3-jX +4ySP .٩ Avpjr!ßGidc*1>]uq%G1zhc f?n Bb `e:%zdw8:Myъ13=v]NI#\Saׁ2`2 cB)b9%(ե-?4:g,aqnѢ[5zAs̤hhX7\,7{ xq*~RXt.Q b9yd]UmzWA00?D-^{@ iVTX+'62Y׮~W9i"cl9a=nb,$xa,6'# Dl|;V8*F0& cUdeՌQ81*VƉ!M2V(irH$ Ŋ&6J'ǡ2U-3[?MT K'!KK05(Fٹ&F\yiF}'$5X|{&e]tTVǘ6ʷ ë^@Vt.6of2R˅z[#"-%Xn#-#c2 {7XU,2[k >$>|#s|</[>ש!+rƾhP4hezIT*UJL%Jx;'t$Ң)HeoVXVܗb(9-$bP=F Uo'0 aI d+~ZF3RSϒw (;kQN<ԞJxPjRJS֫}H7[єV&E|['IKvT`57Ek; UA<1"CBVNs;*I0H>R'70Q20Uȓϋxe+׾P%RZ %55f=N/#55oIdߏE?wo6KIJӣ6‹|]V>OK7t `uBX-HEϿ9V:GW4HdQV.C6>gBp}T,۴CXXct4*2,?/q/Ϲ3/ױ<6߶5ǖ~c-ۋ؀[ܡ,Zߵ}un(CQ2a@K{q.*Gx4*3zEj6(;4:V#Do}l}v% [ᣣjĵ_p(5U1Ǫ\%ݾ8j4BGp,)&e>vDY>b)r\BI#}{~f?wL]NKQnWdhS@ b߶z<ֱ/3`whP/!DR#45HGc sVo"V>X'뒹IoQ< UhꓰT&*}߶qտL s= V%Vn\]E [ #x{XNS p.sDC* 6-/"[x e@M`sea -``,m8mfN d܌lCR1>`9a~GVnEp33O!e4lӍ;Ŋ6'F{cb!edfǨyFov>;/jo>4Y=K%6PχK>+2-TƟBLJtQH!dQ^? FN^g0]( %Zᕱ5Yљ H"WvW3T;󉭮fJPmv­ Ix*[c;FLi8Ԟ,TXt9<Eahc>T`VbQbL ct6n|ܥ3.Or@fS"`͹8劁&Mk bYQ* )*0Fq(b3jH(d_ˋ 끂k˪r!<?>֨Q[qQOdrWlŖNGz0F{ʵʗ!bIo9ISn(NnO/q Ju\|hXvpg{as7P0K,?KmP K(+ ( ]Pa_7\ۢ"R߽вq>YխQ+hύ e̼}2rٙz.V]*"gN~|CͰ%1 \Xqb~,fڸa71ДC[.%Ɨԩ_Bnv)wBӭeD3^'iIk3ڊ:9S}g]zSN_8WjtS'%*[v$o+$rCR1iaۖ,hE+Yn&˝;ůd22jmtK9`^IY> ?[9 ?JKX`ǡ|~ِ}t`A#w%L2 j]qX0AЖ=KȈiI+wCLECd^s'0D]h5O fuxՎ5k4/FSjwTO빮?|?7, ظ^׫l_cj;20횊R,eec$OҐ5(1NCQrȔm[X]n_DaPJ1 y}3@ީv,?NM&oMc8Rާ K6 ³*N]9EUܛr5g{yBE ýۨFz͚)O5{Lܓ Rʬ0(J/ޱ X݊?>MϩaS1XTS7ږ54n׿!>9hVZo V)F *jpPԮċΩP~3+U3N}8> JP;||Bܫpe/˂aCDCldZ;(yM94 -u+⛟dgC]L2|G慐ZڷϪn7e*@8ȎtE3~u=CO8/N Nц{K<z=QXlTgY]ɽbuxUllۍiK5\u[vj떎mޭ9-3:.m' EO+4&s|jo)T('>V )rGPjx~oTn,):`9*jjUjM1nFi1+.oX$tZhRŐ)c-i@Oի2Ti]8%q)[#R"\Z;11P8MrGZ._BF{-q3byw_0tD]Md"|&vKDeN4U"q5bg'֑IhȏƏ=?)=޼ϛYzbs/:ew= g2SL q+$"S9Ќ hRyGɀaV\%TKZ 7ϞM3sk('TWnU0o9]C  f։yiZRb W>I Cĥi,iR֓w埈 #pH ֓zN9нTқb\5JQ?ק4TgPz%PNNŨs+м4c^룲w Dϵaw8^-[\BXS76RFSi.!L!i3KkӠHcI_.HVpb3F@uk M?>}w1i.t|#Y yA-6mcyQA#˔3\0M>rEZk!Kd! )'0 ZQ'#ph֫G~{PB$6u[4gLq|Ǎ4RYM= Hmf4.ng*(X;I$|Ӹ|V^72]fР䀫mtf3lΑN1!S_|V]\l$Sh bBK(6 !ZΜD!;+~vO-j^VȬDeEW~Z8'8jʄP״W->)^ \`x`XL):. +7ygYuUunE|PctlXW}Qlxn5%kU*^gUǠ-A ;}7l^9#HzgՎ(G ui@ Gw˜IV^Jӂj50;OQ*v"d$MtY(Gl#KH,uY dӘ.`WigrRf$")x||c-D~g6Fݤ=Yz9ԣ1StuԬp̖ڒYt]%ܬ=lES6-mAǬr/ FeG#*0aϪՀ69HAfi&.Ͷ輣(zFQe UrzajYo<'LJ*QKŅ1ǀUAq̌Ȁ4-z̙CΘZI/iv1E;)j%+(F?Ы q"7tNMƾ<⿁s_']&|QFyPۭFUr'] Qʳǁ9&/Mӭ%DZE=gTKo_NJIrޭq DO*Ks\2^XE!zwOm2$#"qnQغ;Y6A!ZLxW3ooKίe/\k8ϯϪ`֌]d.~F|i˖2uc: y ] yo&"7 t]0u~GSڛnOۓGҵocq]A]@(./cQ\_X,^__':0ի?9-g=fX1SYg!wrSq~׶?,fF}ƚ4_%&8.ox2Σ9U%,zD vl q˾Xˏۏ#*] z&\ە$ЮW?6qG{Gſ-UAk1j7%N-\ 3Nn2r]鶾"%;Kɦ,3.>,2dG'ͼ|YhT=A w|2m,ZWc& wA7vXmXG]>`<6 ,D7mEV 1uk#m9H=2E:МM plc=̱[59jaF%O~A}vq68mEͷ7ߗqޚGotV_7%; 2fćBS2tఓc뙎n'P5&(CgJ|c8r2< 0:&}['(ihXw]m_5NEB1[OE<%nZe|g]E۷5^0hl!o -!)/R pfn3<O>#xge<ʝݥJ]>ml: ?4O2)?YD¥NOQjDbXI68 P8UV!--6ƙ^ rvld$\<8;c0M FsZZK xRDEhmUSZrM#lhe4 $ r^fe>D*5Us?0A0Ew25WtFQ5$An_w{=%ߞϲشqVxZwxGF91CǓQ"y4Br&|#S7)gTe}$02 m=2%;LغV*8ҿp,u|ܧz3!XzAUwrGKU˼7ɚ|[!̘mw).欃v/Ok=J}vڬo{e,]q%XHn'T<oyqy91f.Fx}|30,@h i2F˙mkVΆg]%"E0|mOѶ<ka(NqJVvڪYW(+$''۟=5NdT#BQRs@Ա%*=/>8yO7kd0T W!7&S1+-4қ2k$>ҬCUZ*h7{"'(ًj*ꇭ4G:W7gޚ{3*vlQCc&l-+uX.i0?g2(fLbxVx(GORwә~u5eī;87-OIǶo閦F> 8&/|42jZD-_1A_j{'fQ6AbzM,?Ֆ%, ZUaYK-K2EX:$zSf_ ,6C(oJŸx~+QeiB%>$dǑJ]*Snܤ6%mPxUxaq;+q<WytN4|%ma*<a>v-kX ƈ/9̺U|u` TŢG:ϓ:]WD\Nr<(=?}G# g:;r#)MZrGǝ~i[?^f Ez/{(Z{`sR[kjxvDm_MLX H\*@]9H`HZ7Pؑbc orp+KT/q->x. o4/@Gs+9;kw-^qE"|^ND Ndos2Yc*.7ne'>PEG׀3J]t ԍܐzIHWtRys,mVc z:Ao[LyaQ7[yb2XUmA(81j[Eǝ7E,Djq؟`$j}!.}/)gI&R 98YsaN1gi,ucc=i1zٶ8d]N S²dLkW.71ȟJCC_Z7ptO M-p ˟W˱s6N EQhl+߁ SÍ~gi>ĉds`\TLIضc@'eI$>{~3:F,b6 93,MR?RܧzjP?_Ki? s&fy3-Vﶤ dQ a]+ 2Tp|@AMA9JJ)yZ'{Y,nH{\Ji`eIsʹe|^ӌ"s`ϭ)tO}%XHfPng- t%b^aoԼKidMl.1IuɴN*`d/늑Iwl>sFpݨ8b wZ󸇇VsM"3moH5o퉥А9cOw4KzrBipRM)}b|A6+"ܝQUBTs&/N(j"YRG.OL|ƨ#3dj3;<6W S3"m饠Qa3xnsK ЖY uW}Y[V$*AGk1jʅ.Xc.(5;1o[2:PC{>go:,!ǩBԜşxKO0)&|K1GT0\i'ss`Nbz6N7ዼ`Omuw=N;uWMF0u'* w" 'bb%ޠ۲6?G<=oO5 W4s,U0RQ._b,*b7 m bAw)t|O2̩*rE-3? )ºLuOBA=˺>]$Mf ɠ1O(c p {N cu2"7IY(\ew/z/0tff{'QJSFRiMrQıWZ1LN|m ߜ( dNG˜t 4cH(D.#M=gXiFN32m&ZgҬql0ώ-!$ß؇禉K`7iAƅ΁LR/bWFҙ1LMw<݀Y\>Eq*" ^jwy6pJh6hWr3g똩 b0O]ψgKZU޺؈|MLkiI?>Qٲ]B?p?8/t1?C2 rҼt^k-BFL/Qi#'Rf53>[Y-yU3+?*q0;O]z`j16©S,},Fp@b5SӜy0.RH:A}R t%YWoQzĈٶ>?HtqBa̘s=;BCxlby@dǑه%dZ|F>W7<(%3x{Lm绿yr_g[Y[Zr~$`$zcɌI,Xj~fFoY- ,ooSإAmzoQ>cD%E5=3XY7xOSGggmYTR s꣡ 45IPfÔ'=jli,]~ΚI5{@G OVpeY@H)S+k F1|v9!M$[t|i v\&Ʒ^?,.)?s32sZ6q!,2>f-x%-ۑLZ8~) ɻ9$=mZ0v|;,nAo!^yO81ts녌'cK>/S`/<"q!U>$ qxa(0Yi9L4-hjm.lܸoBZGsNjTV>wS3/zMoTxDKiewfcOqYΦx5n^K;JA_R_=!pדDళOIk:%R('?/>~d&LH' XcZOڈ=g$י@ rv@ߝ-U&GB E` rf0RR%o Mt,2PCWd4YK]Iy٤T!^+k3Po<6Ң:=]S7$=/O~xAgI) ˹Ґn& Ǽο5oi5L; K„񠮌S٬߆S 'vmUFls\4,U1 'DrpX#gT\ @ᄓ&aU҃ʐ=cӾt]Fg[ V}3QƩ3~y<W)&jzbw[r;Y(Eu{W%_n䩻}_ҽ/ \M7P!uTD_w`5`u{fR)חGtc^-7SWU>w6Nρ9_ܕpd <ы 8ɭ7rsc+Y[jx'tmY Rb<.-3n_*="u JXVsxkahR[OG$Ss;G㱭?~=&  +I (|}; 0i{\QGYǹx=Dq^Iሟ?=R,292'}e^$a%V^>smJu;3 gVVj%Dm5kOȽ^!=?[T|>]_n8VMٓW$I툲1* Xz}}s]R~ըF<Ψ4)3l\_g鯿w7Ԭ( n Dz7E4}@y3k&2o*u rv/*o~l󫖯ŏz_3 ߓT )Ǔ6M)2qmS9Oq!J$ehQYkt g託Ȏc;E~kq`KG+:U g=)7Z"mxxz|- .Nũ/J՛4{ޜ,L;&u~bc3/LB}R>"c=DQD`P+d,9^hN. {ëm<ټL7G_*3\h ATS`tƆJx<ȜpEW)LiX@} D}{D]"vԖXXQlqﴆ9vE`p=B<8tsMn깷A>R,:Rds;q&dL8Շ~Uq3j3nӪ9\;^r>8o#Lv/.?`zYYPxVv[ACR䚤[;Rr9hvf%7&qȂ5& &SuCu BpgRD(H#4D4e[ ۬h|nSDojCNi3>gRaWzIcwL2-+rgrV1Z2&4 arlz鵝Kfd M\SXv: VNSko~~C tH8!nxAud1CHgHAZ2BQSe)PmeӴ eJ'^u\ǚu%}4l3zeɪs3xc^Y|)j:/i'9$ƴA9fOє',tA4 r@pBV|ig?]t\T<xϺGz6Q` 77%Z j=Cls3!+J2R٢S^-&4̹Y(獢?%ߌw?F1|W- ʎ49}N?]McY~=]2LCM4$?u* &<%3@6EmҤQ B7"|Xom nJtv:6]6<-in͝3$Pqj]^Qfgp!' 9j{§3yJ`*arWgJ+ձikE|-7`}Xcv:SgpdW4EÞ8+챢 OM<>[hE*7a3VgגgY8z'hgqO}y,쉆~z9Uyjb0&h&YT_L|3 p5xc] B3x* gQ`wmVZX&f"sy_-h76)X>F 9A=LqD'~0&J*zCT=ON=dX s2(:REqms1Zy bd]s\T7ʄǶGYrH2<֟?>eH!X%a[ǡ䗍FesI`?eΕmj|{U4 5Q\I8Nl}3W?3oTi*XsN}*H!>T L4ZP̨]E!(D fsȓev=0Q߅lQ/J̇SKd)04сtRfrU|x&TxA:/:5C"J,,$T0I\O3޿۫U qQX,WKЮ/%:ըXU(zm] _p ($f d'*.GA<]"~R7%wRuμL/UN>1{Gx bl/ eZ%ErzsJAx"7NוS*;WԣE)j^@$dW[]|`>LT 4o4ŗńV ;g|E*rMPadԤ]m!D‡3m1Ñy*m9E5nɤ 6} ~"ogv= ]*]&a@1 w|ٰf3ʽX/FÙ ȄC=ʥ'j`Nʇ&n@$:AO HuJx|CQ ߹%Wx/h &SzJ"ۿ]+q+~S'yJ,&Z>YΪgqQ霩ܤjfmaP; *%V^*}0ġy7 l$s,:č4-`K6=6-/. b%0;RJ9cTMbEܤaCorpSĹFø@<7`_`!fj5&s*cOJU*Ah. K,n_n&52_dpfTz RLuu>\.L;*qlӨI;-$=W4&6Nelig@kYƉws5}1BSDyn]77. v?t|%aU&M&QG[z.=ok;;ūqz^X9EZ/}S )ȤDo]6 LþB;p9Cv ]@sU4nxG_\$/_ﶡ?AiHgVeRhw(VDL㢄27ӼϬWz9<2;K"c.:(@/*z3re^R17\BA؉*1Dfab6ԗ~Zx)NN[}',{';)"<[9,*͛-*m?.f'!I:I%;oaxv>ZүDyH~ON`eO5f 1ȭh\0ug^$;7KF 9w~Sg荭 jfW,oݝbjS3)z%H>Չo_4Ce,mh nMuFK’j%oC "WPI򮨜(um{j[|s6[5_KP3>9[Acj dyr$Fz.b_o1/ia,&3tU#.m^@Em[\k3i{_ M*wY= uS |Xc5ǃ_O!=(䊻9"ڈC<o#hߪ.?ԋW/xh>|MDd;J\ NuG  1'mo.BP0^t oc-hK&r%PBOch00Q vmf%ʔ&I.(AJd%ށ:Y:l;^!>9#8ji75icgF4x٤ȄuM]@؅]*I?UN}\NR2r mZLNMl]gP3l 3]X?M7?)~FfkBsщs'"(U 7^Ozג)?M/NҘz6na%gʱQ} Q(\ q 8 գ CpԂ ZKA2#S5vU:L~1@s?C:$_\F]9TU7a`g=l!|/mvhfE[Ic)$V4 [d8HiOϲf1GvI5E/.bS1'"FULQtc'V nhKVg)+eR^"jn D,M\lesLZ/QP*2&]a8M)EQ3 3e>vLpg6+[ȩA (X%0o+3IBVWB۳(?ul۱ T|9|F NfrWb[l}q`gY|+-}b}z_ƐbjsqA3d3fenlM#49⃆6ؚCɐ!. /ddNFQѧ<3XI|kG?iPKOw-vu_uapVB fb>x1 `Jyf5%J@l(,L.%*ԏ~R:ѐ*jJрscr$֚`oudB$4-C З8oɈWLRAXtƑ?C#!LߡIЌEAn[0n)N('⃱%Fz-a9F q*l!(i2`KWޅjD_q mWY`Qގl!6aʳC(iLnJ4MeiU] MP$MCdqnRh/NUCOR_~e>,UQg]H%E 5+>̝8McOEC8^M2)K_e7^1 8ډ[=ebD]<=5IbfxċNLbhNn1v1`I (K*9 KNL MT!6VͶba#B5hi{ Ā~$ 4<2jRQ̻NOW:>[a vo5gǂ.wmI1ofٽ:f{(ZfV:,d'"Hp@yRDHxH.!c OJ_4 6w}yC KU$(!*%3ٚvAO,I5mO|&X]wTI<13~58#%sѠz[en٣4}^ձ6ts; Ru>z:he3 uM m*RoxN A˹"0z(HS1C8PewƕaIcIՎw sԖxS>]·2`ae]h9#fvws*ϟQe)iՈS.{sa@/z idS]j/Tm#-qӌ=>z"Xn39X83ᑠHyZ? oo{P(@lUVp<3)TXמ/LSgN.dؗ_D%Dvt4S>=0nAB B݆Pleܢ\z}c{z^ٶ<s>؎!"nR 7K"P$~(_W\ !!$pg{5U|pd־{^4 Ɠ zE΍q>M+7_?ДjNG2f֍I!Hm,$Q.Le#{2/}f(i%;f4EvK6~j*oYw+ 88\ ZR z3 0.:r"Z3.K|n^o^œ3$_/[jS琤l HQۦZ wA3 9~n H{[t3ZM?@D fw}A~Yt/&MT`ZԌ&K:* ǗAAܴK`u ED:tɴQG ^\;w;,;Hg ZR=g^wcf*,OUà323tz#-Ge;^݁FO3¯!g7?xc 88W\Бc{ n=b : J≣>^\0CFw`V+%5d|683*Bd$G0QPlS-YlGڋdeh閾){s B %;v~eꄺڊxN\j"u=MiF͚Ŝ5Y l)ɲH'"b^DlN!W7XOQNkF;I W\5%%QW=hiOYY).Pl-vqݽM":Z=cjjş_kfu72PiO> ;N,:Rͩt49=]rAߤ }2{O٦j8[ШrE?->ܪ` {fNݖ-C3Lz(IΫ9D©˟vM=#\\j0y"+6N;1 FihPI'ekFBU$F-)yu~j0/ZusS?UeTv˝]z p5%U~dHfK>ϼ]^D'L5*4q0'\+OVvEigOȪp铗vZF56|qWV*M 6x>4p /!{*ۏ S Qhe;}P^z[ŷҲ%ݱV<5|~ud!*Q11/2>}9ωehѸ_/u\D x"Z7uo?|2pr| E߿Mcҡ#O6;C4gC4YOe9epiXo,p9U78"ר9O( +X,{At_:L,Gbrzudr6*q!P]/硽 !ao,AwlgꚓLuk |(Vm-?L   WSttT:O3.HNf5K%)K~:AP4~}aa%tqO3 8,s7닔D+\YͤlGot*_& &5ADѐ#m,CȝxmN7(8NAnO#UQH([ݛ34o5l= L^73Դ*i{eHvIq8D1㺄F]L-QIz*ddl?rW 续 %wdkQp%:SH!⭧c3㬭c3`]a(9'^}չD[2Lwvsy$1A)M8(2{x-p*i ~4+bm}`# vՈij7gUxL\= fL!CZjWXPF^Ce &ޫ{2b&Wk9t߳G5AiX^R8canD*X`iVTqYܮB;N\7ɯnpJwitHvX&cjдmQE6 g;(^3Y?p+ޚȕH* "''uGJZSB,6KL~r^M =|%AJz6֒AG&Ky&Hj_&#-T).(LWǜdĦ͠foGRR1uyOs":՛;܆O]yϢR&4S {K`-U %JuNi/9j{:AArJnxP$<]8J5=.OQYϾYgB8T\Jl(Z.!R[PJ]t~' MTnmE/c [{o Pm)*OC֧иVEo#Ä +zV-U# v)A N=kZ9u]X[/Yi˗mݥo9/)rAHKvh9ib8"O OhPd{zF2|:eFȣ-*H qWheͲSF,|;E⋙KKI&*Q}^ r*hby>ͩϫ+$ ΨK^4elwl xcЁ!,IMJQTls8zu >3q́!lPUYiv>\a0>36GY--+}~qCqA1Zv{$/wN[SmC $'LƸܣ5YE`R@BH|SeӁ&y$2"wѫ[Oþ^dɶ-Ҽnɔe)%z2q-&肦y$ubCP ,|ڦ ^g(i-D8:QE%^8xDIܦ;E Kܯ_Z|ovKwˈb3txJܣx=Da,E:SbUzD}|JT<'PEN{3W+V\L7o}|d^OڻRZ`K V82k~(FJɌR4ʞ6mtO;rIA)Fwj6ZS7r4c.6>eqVߨH5~7Emz|tNqrT .,j,l/d3yMSlGd.]NI#ےbW8wCD';GY6[UbCxaRx.L,zPMҾ*hs7!Hʉh;Zt)$Kwjс3X>Ř7JYAG5+ݥKTiUA>A{(b(Gc]WZIL{240e˞6]:I.h5oNC+hB9P8b;r'L+Zx 0hnR1D~P:IX&p :)l$ǹe#1.-'YزNVPXtAs(.^,೯puxTTzdt8U+T%97+%皌]sc9[Ol6~R_5j<16L{ˠe f0/~UB$QENOFvRF6Mc* M^$)} E)/*r8n}-jڋZYB: n+~tPdϟ@]Y[z7f\p8N'1rq!SzKI"W-Z ;Qol)YTVvG̀fH{ ZʸXu3P.*c ]1;CS0t3v%-*p›K%Ι>HʉHlSI"cNl9TծSW@_,2{SMP ks2 #I,Il=rX[Z*9w帽I[s՜n u8e4F 7rA1nucwir!O)yg/r(y\$)hި ;n!S $A/Zp3c$6*e_ľ1[8u @\垍nǭlvP&{ F#5Z]o]wk'miN*ԑ+ Dġ_aԧK֑##v+΁7`q5,z[{=*kwuf{LkdzD32VX4Qq>){PaB7cA~lYSywBҬ`_su_jnM.8Fƞt [|~?wWW[+* lV_i^IV^s_Oۃ˜:==RIG A{'A]V.{dKU}lw1ZO޷'fѴ{>:@T;nj%٪_d՞c\z"4K5\Jc(zsu"҂Ŋf0_guWUJJU)1( &?b1td")a*x]6kI昈 n'lަM- n'$KG)X/JlMq&ܐ8CJWsj6\?%Uf}$7g NN]ӆWAճ>a]闐"2jTScX`f4r\SR3OAe|B-FE!ocd[g UQ@֫QGVYTO"Kd%הxJ&( ?%H}4a:PS,Xykrb{z,=bMubZ?n$rLmεQ}ޏ qJ6 b@U6'{\ $8B܌xgؚKTxÉlӣP6_Hq4A;ˑpoPe &L!&5!-RE+gƤ"3{I=/}_^\%7ٻW~wY|G^6QևKsi[T6Q{%͗W/Cp|V3i[/Ǘ#ŎeR־p7b)YD@6Oj7-(xc0\5׷Ԛ893a f!4QsaV8cHG3s*%#ȉ, ]#{x lnHRo~M%Z22@/ dL50I|5a}baS(OGڲFEzwxu3_ߧt]Ժ ﮯr>VZQx]/S-cKbZjaLJ'"M+q:֗w캤^֗ר=+BΟY}ʋF:Gs! ͤ& Hq̼ɚ f6VQuXSQŔ6Tt{[晬 t3D㥴' V1=sv%BZQnƓh~DGNR:aZMa)sI?9"z,]?!hϧ>/|C; QW˼y.*L-!W-κ n1v*mQvqԍusϚ"U?JXY03bw\"G?:4[p͉͗f=qqaKrIjۺ0\NhT.1(/d-;r[sx4d6:=j{K{\FkLxמ<['U9fHI]|?drМAY-"*kX4{fx:YV#1Ü7C+U4SZ1ӊL ~WDaVQ3ְ@ə 9m}:\pvtemzb *@#tFbj $I4և kǙ'`/\8=JXػj&o)N0I[ TKS?˲QNjQ.@ǒ&gHoZ|N=M$K&)k ¡hҨ jL50 mI ,-[3'ydqNSRՕT k:FHEo>*f*W/Þ=giܵ%跥_W='WFm\>#72~pM2Ƅ%ځ6&fǜ /ϮѓDŽXvj3B(G'v}ۨ*V']4&3)#nF-a4pOG,Q]u9m7#BK{תxx?Qcڈ`͙Oj~e#R,,ԀVuMڴCu3Q[tb0O$y)&?>Jy yt 廱9X:.BS XSm{ a3;p!"ue1 u /z|9}]X+URI.ׇF\~te $yBJ]}B9Crd!H iװij! ;)p^=L:QP>֧ͭ, )eO{Y5h[ 䰳Kr-)Xǚif7zylDz}Jy 1#L.{L&WC '28}R &mZEQLJ:Xn * +ζ-.6_|7=Gߓիfgw=E|AyB@G2h,?0"6[teqOQ5i8+`s꘡PAGw%Ue_v:P;R᜾93uV <<[Ua' ܊NMͨWgjb mK.r.=N3o}A I4 a"ͥLeE)>bX8G,.&z"#캀=*'%fVoe|϶'UDw Ѯ-ʻ۶)T%NfxwZkY ЩiӘCZU%Ō9c ME<{S;Ax0Ӛ?܆|%4vVoŨ5e,2HOosĎ !qZI(#D-d8F1Q&qhOS6ٓZ ѷelՕ`RRI/L.RJslUԸugNd\D"]s$GQdHUٸ#K$/9mEo;=jQt9-tE"O=F!(4ҩԦ8f<[7_?DfO&SVpJ Zӱ,Geצw:@#bdvZ\)SCQ96 ;TO@JpXKzv:g- R8=}  Y,WLc޹I8h\VJ-̩$hyPl3 c|Jk{b mՈf 8O,R8WR;`OU&`TS|P\,AUW̓Y;Z/VB]SE}733Jpl pʻ}aF'ʪ7165hlMՂdvLcv2Wcy Q  &R9P!62pO |.>3, #xi V5@45K=kW͝? cԯE_qv߽}]4O*p؀==KMyzȻWH[XpJm`}9[(Wc8nOs桪x ]cUu["(#laEoU2 }gC_Uҩ/C)C J`dG- ,uzDo>fb=*bu",zgͳ;ʺ,ҤNOo6hFMwIcJ\唃mg3('q d[%ؔYw.RsU$6+iW?r rjԦ{ƫsPr%(qJ> T{:|pn%|it=KCT9u=Y۴ϐCNC$F4}=|0URb܀,ubΕ [SB tS1iitr8EJúFb8]U6U5d}cq A35XN>wqeHQRuKptaEsK --Ւ@/" B"ÒvV(^j+-xy~ Q<><]:p #roQ B11s5]9w{ιR8|}ɤbHOslr!jaeFSfP[;F8S˷>)pOh?.٤c&Tml /Q!Hw#%fc6t|ζ0Q[wz"FL9Έ+(udcjYsLTk0?Ti {{NI9Ԫ\:sL3jt>JWŖ0]"թu4~%)MWأu6hQA˻=kꜭ7X* </zQvpD; y4uVזd}>q m9ӷɟ޿mq Hw<0=rcɪF Cʠɱ$ޕ#ѵ͕}v Nc_sd~6Lm{%f't{wbٟh@~>u/Tlr^oW$J;E'ѷF\<|; #М-ScATdnd-R"Wg@[;ho[]%Kzv)VPBl^8Or/cwѯ?] =. JC˱Ǵ|{l32o̻+ŠF7MW#E@2h GJb'e ]2?@=(OC}חfhKߍ];;^C& }TܓCèJ-xjC0PẏN=%liϲZp'$ Ivwl$u&,+Q1ZQBJ6YZ3) Z E}RA4xG |$ _!yWX3qkiNJ R☲y("sm˩sHw!o3*Ѧ(68rd_>Dmh  C6 '6qZym]!ƨSu{jR?zv"ǎ2i{bKPmbG|!M]s%'RXn+' mcYDikcÁ9F@eoի# ;T>A0dQpE~bWrkz 08Pܢ5p-͊3Q=Ypח*ؒd_ .gx0'$=]V-)ʫ-EBV 3Uesg:`8\?uDk^l!hyzN&:SF*z᭭1>F-˳=o8\x76`4/"* Ghd=s}JzwbUnB3,y-S4)-bXutT2[[\gCaKr4wP>e;W* UO [JvɩO3YaSFOѨq0kp˽pqHY}F*H8@r񡍟"8~`ic#%5"I0s@Gú3ЋեGZ7'O(CRR"T|0TُWuTpJ'權Xu蔙1 pZ]VBj;esqj9u92h$;ǧ MNM9QMzJ]CTrMA,CQ9wOU*^;%&MbM紪b+)ܕT*gqvzqGɷ(~/1Eʜ&$ux"X.uzؔeQdg$)``KBi9 ز"lwz7&Wx-)q]3]/D =6(+ƂW#2BJZ$pv262yG [n=J2&-`6EE6TB55X{؋ 2wü5mKC> YӼ}}N?Gw䀻p\g$e]K҇q:1>;`iƿ9#WJA&| 6rȣF7 >5}f/ٟo%==GONRq<5L^N9QBډ6) P5joglLJqP8޵#en+ZΤ55*u.kq T+c_j;8O $k7pľiRDh?nԈ}2nCd5 N. T;d6[xyۇ,YhiPɦ k7`-NJς|6_zkV ,񅞨☣9Z&,-)%_|v84`ܰ DkU&NEmfÎ"{d=NsְaD21oqz;nc]Q>p+>ͰtH2mS8 (Nr]zdjAh lZyww6uaFhB>DU~ܜM=ʙkwSG<씺v';Prg&_kZ7 (ƌɎ9X4r$)Ӭ |CNcRD t+šV]ȿS4>d ޤTqaJs(0@ c?jmk7#ltbNSZW_TAJ T3,f,=!$RCPHJYEju{5ZjaDu"3E9-N I"QA)A7?NP?xfepəX]C%1CM:Y3mk+ڒ1*"(B>7g MEھ^oqyÅ1p$lk\|1)ZDa(78 ¹Iwxc%,o{Mþ"j,t]L /I=<9|M)?ƴܖ㊄dljeيK|ϑTrصFqg+_ $<.b߀HޝgIw65<^KEIP1#SnFwzOT ݞsy\+Φ==1[ ӈr'?0/UcsS,wv(EZ۝S<:M$]ԢYZ̞S𽆣Wb{UH!~P3|ou,ZqF,Wh͹penehwB~Yfb,Ugk-|n~NqJ#쉿m6S4ŸdfJtm[FJN Hi\jUr=eS_]ʗMeߖƪX)*ʆ&Gq# ֓ HTjM ύT lE94;}ֈ9S3/YZFVGzI6bvgYpf:NMԎ #_}ue@A;> 9-=g5ne2YD1Ե+mdeY2+ 2N*/9(e@ut4s~iue10?*.weRkj2|ViHV切w^ V;_c<r L:w:~-[T(ٟUޙNNTAij,rqA38 m]Ժr_q*yހ&x.2aNt7;,ϷTI=P?[m0yn%kH|zHl5t):taΤ44L^N$[SP37Sn8G}Nv<M3֫e/$Iq\EsXT9E-qzn4iK(5`lNrcP6X 2Sq[LҠQs#>~ݴδ`e"++&(DcJ4OKj-m[v etzR0veY ibJ9} e)4rvXh1Wy$,kv1d4XF^^2bdwq!~dڜLޝ1%My$~Z ]Y qIQd9u+cJtd(c1R<Hqg"A FuDo{1,ۤ@}N*ךD˦q%/;&EKq,"*'iT[e;Z¸_Tg7)q uG;[/,fdoCNhF4 PgўViOj*goJIW 2Γ֕%5N .n' 1N > ix.ѲS}!aE/܏BfK." 4n|n[B|՚Rd~[Ac"vT?~7쏸c.y!x×Rsףn/+BB&h K+ķk]BK-2tq;dD8(b{nWSGM{ǸSϨ3vA 4E_^DeU'?,xu|ri!ٳ6%k `wne 5oRtO0~Ic'V)bqòF1 wk|g'fuJC1{,ex(,38kN8cԉf%_/>(M{,ԉ:3"Q.%r<)7ٶZK;ܒ7;vŋ,|0HlSZ5 xw/Ը>A y$mlkNQJ:NM;@Fx Ff{aD5Ӝ&CH Ոr%,x(Z8U6=w1D;ud+ Q/wm7H~ؓgod :L I Q}/;-6ˎw#f\PdK`m>C]դXD)8`J/޿=>Ïs'Q]:J￾|'/e\߼O^ 8䐣&_-_l|Ysr@*# t;R^3NBXd|)dE}D`i3BXQzd}lxv%E0CD ~ –ZEnݙ-r %ǽhm?8ժlPiI"&ݪ_/13ȈlwMhcrI?Jaf9[dܴcp& ӛ9'å#E}^ ӧk' b^(3z|Zb%~PP̑FQ >mm? +jQQP^rcZ@ @ef uȩiJg+ע #zX=X zYt[\-oX Es2u)֦JLOإN-e') ,ƒt!ܨ9+ULp¨5+v$I@@#aua Q,1*ƧA?m DV5Muӵ|o-tJ) 5gT:|:O#<$Qz%%5"jx1w& vpq wej!mk@XOn~9w)# /1Q/HsĻ-a-g|FuyKoZ>}yO1uX>G^߾{ц4U0xH5?iR}3ZHLJ,0tĵ`zG`n}U9k?݆.k<~(#m;Kn!0uFGɝ!q8qtWK:m_yweP>&,5Hx04 Q8p(^)u7+.Se $0F]znMшi_Hx^.;0n}"@O U`po4MV߽pw߆EVSw2 ot =D/U"GZE`V@WK`I+/6hO+G-fQ-{}vEv@J,Nָo5?9Ǜ[^n\eG׷q+\f#_忹.ȓӧבr葅RyiV??U1m[~_Omt/dJ-=\Y9)N`5 Oex?^?-Q*_mr_to~*, Nenب]ixG_:~~{W?}4̀9tvuݤ/'̍(t2ɹnޏPuQR?߽~/ۥ?|wM:F7.[ʁT+(yIKޏ붴xYi[Eo;&F[lw3 ɓޜ[z Bqݱ~?ߦOk׽]#,wqmevc򜖤!G/nLOGFB! t[4_8ח??~/T9t06nj E!$ 0Le{ pGRr~]T"~ >՗hOޕ2T4h;Urb߱1eJ5JO}#sDmGqF#~3ܡ!Ca^4EZp\mԸ.C{e~UzzkB.Toy+ th>t%.}ɎTTeT|ک(@fu]|8u:1S_WYq{cR;/gt“H UX3/l?D3.:!M Lx⟩4Ogf2=c}?gx]22 }Ș"hGzG ZIqp Q/q6NŜ:NQɤB=UPU}̫_}>^" K>6eHX|]L,֩^.VwUޢ +W[,bCgt=zi?6FZaϭu:R0!+=c[/ZKC,~S(Z+/1l__^8VPnÇWZ-ښl5Z=qO~c)1s/ M=& 8 m KM=a[vdlដz:C2emrb Kxa:OLl^2>'`9Ŋv/g wڇ2G]NK4dwn]|DSݶ l+HvzR<9FS3^ǩ=ޮc5ψ.~1 +Jv½"$RtȻ\]jtqqAn>GOސ *J Yckmzyc{P% y4ה?2Dǿߨh}O>#wc7ٖpQ;{ > z ;>JЍv3Vk[ʨIydI q@AnҙJ$ 79TP7N61VK3ਡ_GRߥ@alOUR3StuʔRyd% to%>0٧^*aFOREժTeU٢]b7Z2:u#c止 5\ºv-eTH;ӥ ̻Z>xn83L[K!JKI~ޤ;m9^rm8™=ˬ[ös8jRjP3^%6:8WՉ>P$8u!{wqgQ.鑐>YeK)8E0dK$_P2".R!SvjCS6ZPZi`!Ѧ &lTǍ s_zdmFU 3=RzIxo'|f;P+E ךBEJ"veC|sB٩r0|%sN6"g(챥dхVK+лJzsZN$%| U9Y!ƮHS%Q`}h׌ Ey)8$ !ۂt3M_G,i fUV)I)pJU~+fN!. hD; Jl+3M(֢[~`'/F{zJYAj!r(Uئ+Y~zoWǚ#ݝ8B^oC_7Jy@R]YL]z Ji5U^ :AU'ɛpDgQ7M/%3&l>*Up^"zj34ofgvq312سNLt0wP~* u_Jn:c_SO#K=S;UEr(w%Mix}Fk,8m{nVX2K_&$~"l%-r9y1*T@I2[Ok5"@U2g /2AXU#; eO?d]$a6@ؕsa;dw(0Zɐj mBQssA/jG}a6Z#uJT^`GcHE{̞HcuY7K'NMT3QёyGv}bCHJt3x5T9UrO/*Hs`pOlۭVRϩyhUR̪2YduL}^+X[茮ogbyߕ+gp'O9k?!BI>]/Ɯ }9~?yC{{Bӹ%Se]%"Y #"I< FfZXI o-FMEW PTr'}\,A/8JTiiWsIED+S=nF4#x"9Eп]정Q'\AnNJLM&XV-yp8Ǜ.n/S($T`ZTEUps(֤MV9K`lz4Q:2wH!<@nac[Mhb2;3d 9"A:85Uƀ=@O]N Dmq2HOӴ# C^nṃOLt43Έ|T~?{@[e,dDGMddnFJKY7] Ve=< §id!1$t-) PNmGMy#6YSXܥ(}KЎA]~©'!5\t L| E_[!䌼S sQ Z% +]rTÝ>eN`.vTYfn^ϢA5vt")ږwmjId4U#?JwXRнuGUxKu mgŀcLtM+?BY暜G5+1%O7mY"$^M'F {V #W$s`3EWP.H3 /Rgי/_.&qDmxL©JK7(C, k0gda93K}8 *)B颎K[m_0Ir{]VPz:&F@NԒ2jRqeP(/iFoq5jVʽCKpiP5K"*9¬ M%k+M1Sڢ[&m޻D:cI59biҞ)yL׸4 1lEWAÞ>H0 Tv(Ku救μA[P_c d ,%G59Pa[poRkX`9 u 8i FȢă@% \T0⨵JWU+[ꊘ袱KMs,O{y[sP5]u`F_nM`8jT"1cEsO<I٩?|B%Loks>a"LeSJUD@QbAI|G-^ٖcǐraP-%JRA@p}ztcadb,<"~,[xThV&> PW 2. *-1mn=<(f#UsLx$АNN/ )R0cWSLĦq,R͆J{UezY>e܏"RmӸ{%ǺxC` ÐJ4(/9R I T;5irVLTμHgq:x$1A@w|c^gc9(^c('zp/55i]xJhk"8&<28_Yj4#"0CBu ZHJ_q?kA,c|@?iރ,qrCs}ОkӔ-Ҿn*c ^0Za}Ҥ6_'W. EUs}ƭq`. o &gXk*DϾH?ǍYBva )lymTI^dbl3 [C E/2y_h (}:A>R) <P{GeNyv5"M?Ks\0Oߌco8iG9@1}h 7H#:H%Wp_4S#ufF%vQ)o!/f1j#2~zh[: 5 k HXUO>hěaM oW'ţICgϥ4epoHk<7`o>pОRiDm>rdۯ>AzX۶kax$ I0p'O9FB!#%^&HS#Rfi@M$e9Nuj'kh+X[AJ +a3;Q߄vAZP샡]q<St z1$<$c&G /'A4TU"Bmqz vy{܈JI#jLYEB 1j8u|t27 6}o/w|b%)8 R*[@l: s/-]OLbA;\s5jm]}tL_7KQ|S  #ȏV:* !Oo?6GrxF%\jR#hzTY# تLz/Ԭ 9DhAܪ߱ WY;@[+EJO pӃS'XURN%^"1`A_dy7>o˺4Er~Q'SyfT_l3yP sQ$jLw̼*HSz[H NK~6fM\^)(buaSX^e8@B>5ek}:i'W0k^-aZBW!4bL}+mr> ii5kt}Pjp4e_%t^`+nS܋іW=~q0Gc⨮P!'QUC%;L0ʺ>˺7H1TCx%#!;tTI(}':KG_UIg [OH&FSS?J>nKn ݰ'R/g=ѳ*/k/TRP'F5Fe)0khUP p ȫC1up*b&T@u ^9pouOٽ.ݪT9}KR*=/oBTSE8>$qp;a 5S,H~? ܕ&g4#kG:< T)5\Z М+F.?718g$ǞHrna뗃A0aULRH:qoY'<C沍LsJ-i[QbH%IA7䬴OcE$arRB'.2;Ų54E/4`\v1@T4y4+Л2k Oj/`Z'b0O!a#׷'-s.ѾY1 \N_\\Dū3Ö|"!"^fԋf~q`j+L{;׿Y۠吉@J`BuӠw'EH j֒ ^xI>!wYV R8 Mz҂MY))%A ™L]ߋPA w# iưTK3m{3Zoҕߵl{E[kÖDuHL2[N-d[$D_=#j[v. 5q%(Ǔ!L*6VITL l w:~iBP ,\[<Y}כQŌ\H֦%| :EP $ ק%+$w* 2I⑤=a\~زa؏bJŠӠBOmxIH&0}GRԂUɥlӨfA Xhȕ>e~4 Aձ6bM'G0: 6C`9e~p CqXj#N'kRv23-&4{ʬ; Nׁ ~GrV@c%aqt6t/JwQgӼ>=?ѿ9 ReR'(L `\W  EFmMLZ吤Q lZ%gbQE#D˽1V15!U-몽ZO(+O*U(d(a gUZmke ,˅b#*h (A\-ԅe$'q I8Cn$/z{swU+Uw(@s3$0i.3"$W:;uzũ_͛Oߞt72!(*J0 Hg|zz1봐Dt3iV;7yq)q&3DYh9xt tEAy5"LxmU0$ZZ]#؇. {@( J/\CJđLOk7=s/cGlOhJe q (Ou}0¤+6ꡈ=-Y2:2;dlYIqB#tjՙgNH{R(fխp *\4R7a';AHY_w# 1k!Ld"] Fs/7lKvS[{n:zSaa\<80ijkhktm?;AE &DEɛ97r4è,~܊9-11#?SDv$%e0m$ N Cx@;(:ՃC0 e_Dqq~WZ^ovbkCt7P c\.w)}׎lJ{&h r(XX<"-7GڤEj6 .lhfi$b0ШO4:w -@?5դD*}*cX3& !trVzCJw'z1hdo3Ë=M,։Rb KYnUG$[o$U! JwݽҬǰW6R@%sM߃oeDA*eX:_ڢYPk Y&y"lOSDy; d6?}^f V=TUeq̚Ě{[ bGݟ<=͹kol5Ś c{1_[hRCY2vH/W97윣t]f99Y Sќcaۜo{L,m &] O>K',Ɖ0Kb|Ɉ1be!af吙kbcj0fyӰ3ed(B6lΝmpt~'xȁ 3m[1dQTL^u}腣`ru ES%D1(}X#@dOZ&Q{z!z,LF&2){p4r=HF a5ŲD#QoۏĐ rsn2{8=+tE`BGһ* ੭$I.D,)Oa~|қ4#;y--BR|E@5. V)<^@ hۄ|Aʕ^b?te,'=)z06'o8Up_ǣxx.OԚ5Na7+ u$ٯC?~x knN}xTs*LI ,"N诞4WNv4fCA`J";nȓ+6I^iWsbc.ӛgܨ4N4V)lf+YAáegNe6dbGuh i&%b$ YI'яuIZ!D).,ydmiP <(}5@@|jK"xH3h8PWie[@_x">BxILP $NϹYXW m8j)Jwv^V ˣO惸>e،fB96HVjP #ʪQQQr{'QߌR #9#~')?!Cu$],dkp&F_;vI6'0H D-Ke+6sG$K)ewyd6,눾ܶVG3XZ~vk{!{ׅB3)+&32puKzžV{M1BiS*3%JW(s a 9φC 5CI yuSȪ s;ckXw54}`3G@JW_B6S-#1YfvIޡ#5Í3"/MWCZ j}&=-ڋ1ml9tA\H5 8#Kv^AbT%*\ wYm&I-u=ÕN@saλa\ 1 Ge:NM4N9 S/s%Uq+%Be*2)N d]l!|:UD-fzԱ"ϬŶ/Ihh[m`z{n#I1%Y^``~l7uV4>#cw(uՕr(hMᑳS $d^#ROhBsʒ/TzXqfҀ1a0>n^>_լrYt:ZkY.)um3/UoCJ ąc@%%"%Zķcfެ)kT-ߜD 59\'_̆0~#FxPLue -..>G;E-8Rݾdu- |#2f61ua mMۀ gp,vip\RJ)UrG} HDS<$+LB E8yjd|y jZX 9XDUiV)̌f)7wK^w~!'~m|ViPAEJspauz.7y{eeb;"z'YY'E< 2+{"Y>r.qٯIm}V:7jpe/)|EQۧ:jNt!lB~$^)9=%.ikmWԈ*pth=`/M aV@̜ݔj`#rԘ>UߠxC`_ѓ|Y>OoK>\&b(##54%&DjTQ=`g LͺaH ОkK"G#O2uCܤV{T OdD7{B5yt]C^nD!@4r(#S !jl,5-X 7=sdި01%hXHF@˵=d1f|EJab44; {XMvQ}OY˩3a:`>=+D w$R+`j(AG uB9o<THg1.Ȍ>a[:uP Ro]Gpr [4v>PC+"axvyuGz;>b!7kAJRx,YU/rA.5.ioV 5Mx5Rb,>BY֖X@ b{:VŖ5UA}*U3'>m]~(nDM(Lynt~军8 dMBW_r G,/*jQ8%0Kxdۛ)a0-c_鍧i?a=9^8 W HTݷ݌o扻MrYR(8plw#( X#9{6GHrK_' $pODRc\NQ}E])y[xR$cR(NF(S51:;(Wv &#-nʇmߏz >_3pCbpky(c+')"[jW͆%qhjf D͌sWΟg q@&ZF@^i)$׶B!+sl4vJ#L&{ORN'jn(-NE<,mЀ ~`Zb0eLX*Af\wrF+pl`I#t952UP's-u!yy _A9Ebd`{p#q+EdN̑iV)T)<4"R[TF8>0:('#FmK/oI .*/ϳr %J Btdf SbdRwtSQQ2.iYbK!\B&i%2#3r լjbjQݑDe= Cp` uC>qm~G |ĔѤk͵ǘ#o4ƴħK! Uoģ''1BeQs5-=OF”Ѹ +♎k9Qplc2KP)-Pl.e[ܼkx0:+!@0Db @#% QfkC4A袬/MЄkRr(ӄf0{aqN.?y8 RWi("꘹%wԓ18 ZKRqv"BaeLq<` p@YS 8A9tula*)^)gk4 {Hzq/岊 E&)b2`>At;^hly-fGe n7eR|LՕKhP*H=};4v6R–U_~ϝrW#gG&eTds^,KmAH Et2NM

# /2\,aˈlF2{,i1#)}ik>QhShci]p5yKM Ej_-1qZ36Zs߳rk 9[,jiوNu|0m^z/Ĭ~Lb*7|PK=jZnF>mXal]I0 B<4|G:.;Ƃ TВi*x.Cv[sqL:ѕf- }=C&UuvNa}p7aͲ\sgbCPu>Si4@H'B^&3"HY h@^ Jvڔyə1`4y2&,ث]Ы'\A$(}ZENb4vLj^ddbS^QW5nfATdcdC&Kp& yJa c!V8]B|(;\JN'>Ȫ1l#f8γc!2ՠ&R'}zk"]e̲yBT![T.յfLbe2L*@vvܑ|VhfUf*r%VhB"/-3 (~ߝrNe\L: t til}#[[1q.ڀa lbŇ₴$>8u)3~m ?˽CdM Ol3 v?Lo{oI/!G{h6Ԯ@Ųȑusiz2k -r_&AϦBF"Qh*򢹫Fx,D^d}6-GѺp0Iu܆Gƅk8/@r))iU1$rBp ?~V}d7BKhUaܰD>ˆ.MR¼F?k@Z56F95'XBw<ϰ8K麈wΔXDqמ2ˎT(< q!l_a̒V` WNb(Y5"od ~/}Uj%@P@@߄Do2j9ac6to#d2@3 2&8X?%K)pcljxň+DN0A+ kd]o/HUl`OӜ0",8SC9+ 3~] Op?>`]{k5⡾XN@G_dK+TxN mlx/F^i7VH!F]ND>ՁjE30m|B:]215^u}cQfkcX&[dKm_ز)w;wÏ"?w9yRK/˞(e6OdRqܹ&|%:j5;rndfWF0Bd-¤ Err 2*t) ÌܱWamZQkVqlMpEQVd'~mndoCd,̱Q&jt{DmGQN@GVkn]<zɃ젝_l'*F\1ܼyO͔N@Kiމ+\<1'4E?UN;S4#M'sCz-.+ӋEdViC +ήՏmqep6 ~V%.C 5?rrFZ|ʥQqQD4OܶKʗ9ݝ۶W~`r꼨BT-ٔAf {B2rߕ"_"AuſIO&4 9=HINH9Gv K$hTʙ("gr8mNrA5)y$l.-TH?,X! :g, 2yk%bRp+jҎ(%i(P#*zw6'c$`߆7Kҁ$R=J=^BVRgڤy e $3W$6\U}٬9&BڶX`@j<3Bft3Imv^V|1a;Tbd[iz96 Zte$7CI(v{ҎeºZbG& 4 zKQW0?Q3F&^}o~cF @sLHI NTY>$<5M f*u+ OzF{9ۤFL'GcT{B"^,Ί}dҠrRM9KS _^E´V'73n.U[rTo$Q5zgRߏś%cZ]HBya$9b^#ډ`D`&9iEf+]>7cE- {6(% 9Z#/N 7̌ESa}_bmB/龉F_,ˇ1&uLcxU_zbWgp6% P_a턁 ;H{v0%=Hpǵ~D^mzr)+x0Zl}M7dy<U=,J'm>[xY|lc^) _GsʑqQ[h+Fn:oȵy\I4 ,D (RA7H^spēwI6 +"VzG@W; e^vra/hp4:`sSv;5sj]Ggfl<]qx Ֆtr(Vi&.h{)\hSŅ#19Bn\ql (1'mطÇӉiicf7ʃT[ovߎ^ɾ7}|c?(O*'C~muɖIӡeqbBX)}OS_1|yZ]>+9!EQZm;a9dhodLTUH(ŭ0HԋuVu}QGnt\/UCwBZǞ:\C.^^E1\Tl>Wp7nrT 8:jtmٝ.fyiO4xq6 k\kmvb]~Sn\eSjMuOKKr3*'23zՎjւ@B;VrCEͪfr׸.?xNF :;= &-=f(;1TnT!e,z]8a 3+e_&y==^xbR@ckgivlzΰA #첓okmjKŞ :_5?悘Ji{h$ 7^:Iɽ+J/9 9e3h-ssl;Fi;=O`% 8v)u*"*H1޼i ;+ZM|4ڒJܦkGς|', BL#T/R8}(vTp5dFSd] DM-iz}~@!V`ᠶΝc^/$ڰO/@w9Ƴ U@$8=Lxw3hŜ Nª`*ݑFzkD5U>_We5@Df M[?zQ_I eD^-.4JLt;6ڲaA6imjC$}z]{]촠[(Mo{ OTVZƷlB1!'HϑdX7WK*/"C!mGm;9^5mu 3;$m ~Ľnp¾ΉHhU@D V[1b车yB){q*6A-fUDv*ыZj:qAYWLG1pQ }f~^$L Q&c7\97?uϗ F"ds$@.XkY(  Eu\"23AGZ{; 1{anR;ȝmR,)56SZyJ6 ͈MJme&yFԎ\Gjp1WUpgm^ Vv:{(nGS?^E>iaA3C?8H9NF\h mfIgϊu=*d"F֑v(Qx0DOp=޹%8W{Voę7bѠXRs_т0ُYU@Sy<Н"&0fRO릈_Ezל u * LtĴv''^6+3oVez/ʼ3#LERqh|ۿF$+xMR^e80_`Fdh7 xkTw.jc̪$5ѥ_j4pqulJ285Qư󒻲l^mI#l,PUkq!ib L<GKYјbUɾsZ'k\-nl$Zi6z͒*jVvR9>}{UJ!3{grCku^&Nї@hVR'qɌ&ݒQ8`+_8M3~_нnY6k)ݸ7\x"R,04`3[ҔbXf ~>F4B=a0OPf"0̀tݗY׽tX# |M2x$ h74RɵcD#rhD 1d;a{ai?S ޫq8Q d g; Σ#"x\T2++aj*̉ `Nk4/qJ*4 *Ҡ#^GsQmq6p9 $:nA#;};?/}>\DtBc[;-H'4/ jF1x Wm5/)6Lŏ7SNtxj6G*_34*Tkշuz1/tCE;ÁWNoxwۣ ߂4.H_j.cwG2vr&Y}ݰv$ŹQy!_!JE_uYR5miSePahٔӚuI=L׳P:m1"B3E\{3{:O({6`((,2e G#n޶z^闼4sǮuز$tLT~Zкp$mi zҶHZQ}\Nf EeivP&gE"}?D.eԒ`5oc]I{'}'oRF~ñ^p_:6،`4=i(MkۧlgUVuGr*nͶoÅAǯ(Az~g wIBpœYd5}.5<`} #1b'#uFw43fN>ytpdA2Ft<0U3j/כUnC CLl`Yb9XE$4 =(^԰6Mִ3xS/$0jڸLKxV̹~wVƄ[%>pB҉68CLI&K1^ #VֲSRN9ÐužNpJdICd7tND: V"c; 6y KR I! H4i>*Ɩ`e  dFx EQ㹴΍pMu]-%<)dvLiyq'f&S! V"[{|lc,F߾o_{y:U_T -!*Gl_yZȺ/[2 ( 5kόaJJ~tV&k R9IpFy6;[nCaeAVԼLL.o rUg.#G(A .8$@е *h^IMhTK2|]fRQlpT2SJ_P_ Qb0yXq⫨wxxEWFwxۇ? Vb4V 63vhi[*$Li)xٿbMtjc+@;_posO[y 6>x9BhE) A}R,EMchSП`KqHK8& +IC&Q%5v5a(ݰA\ynB ڮ"Ϟ6>@E@>$2rJʛ8IzvDmww~+_]_oe<_oOpMo_[?c~ͻ($:AnWp]GAJ`&T@ ZWh S!nw;tc&$ڴ{".r(ߘ L~#F;tΩ&HhS5%Vf_]dd7:8XѱuB+{qd\(Z3 ƒTkc\Þ!0#:mA\5!Q0st ʓz'-t'eMCTT9]ĸGfU9pn%ϑ\1i ??3;6;ߏ/9ve -z&9j٢yac 8YT2 g_H.dOIF}l*aUIܐT,vav ;wSaPT*nK3=LIWZ"C';sO=q\X3恧>DQSZ+ }0{Wl}aB|=DB$ix5qַ5e  x?ǟ~^Ϫ۞K̚VTw 7p~NJ1@n2aDjΜִV84'M9,j =o 00ǡxo /fC aUAj4Pwv$}Å VU mqc`.#Y‡vo g%=e6}"0ږF7#魸T(v:lU4*H,Јo&ho'0kvIRl R1!쒽`@]Ba`u]-ӅLL!ta2l*6`P[)ÿpVhRS n hS\%H)k*4$?0alqgH=Y3Prmz#N0Wp80i 7 Ob$"M ྉ}w$U*1?ܥODr)2s1 ,!;Ӗ \]-GLmֱ%p]WT4/u/*]M"%`Iy8G}kK.~ vJDI. ,I#A}?&9LMmR33WZm{Ѿz7g) 0`;;Td p\4ad-:66E#gA8WsBuy $Y9٩t0v<.D@=0[fe0'?z]bLL`YW}~xg؇wreà_?[C}Gן~IIOHzR_b  }% d D@od^ E*r^f)/<8f`?ShCk VaIzj[Hk<|YgiXuZ4&9_X>=j[c}/}k*oF'xۺ,⊐0Sm ղҼtd#Rd MP3n}vflmx9ݷ0LdPfEVxpV:'Bt 2wtl[4-Ng0Ir`6ԊUhXK?a%z U&*I:2t؇>V;:L:3 R?܏=d9ϱ=|;GMsW*ӁD1LhJ`5ѕ3NC=9Ġ P#,̃SL|Iz?X*Z} LQ%O$:x9O~G?ZO?@Yn= 59 iZpZ@NNChN +tMDڊf;ӈ3 z"4.]!_@ˈ% \a1ghExvm+Cʃ6:^?….3BU0-/u_0ҋ=y^~p/~*.SF_~˚H> 0-׾\e.D9vA3Si>,oYY!SB}Xi1 Ef8`L㸉 g{Oٿ rcZ- T*`q4grGup!b@G4 (1c"y{Y1 7#N ">R?:0ȶ<=CƖcb\1 YHʇ׼įN|y Kyz^qs”;>"(FDijŧ m$'y}8ms֤3 "~&b/7o7Wuk¤ϺINYjMvD"Y~Ȅ^Tn@I%BWđS0Ϯ1e8ho>{?{tYW勿[k #m$ng#J A:vNztԯb*NLI#!uL@IC.yJF +VlcMnĔ%x :Xlތetsa{uRLɑXTm0Npxn`frY,m h³(v^n2.傞 tQY- wʆ+]`+WqC&6kNۀ_LDF#b7NQUUd^%)ل S^Xc?+!_ք tr1msԏ9rxZ3=LeFR_ $zT?A%:[QHÝC2ؠ;35PkZЬt.va'2ByȖeuX9$+Pv/ۣ;HFtG+C;g='ɖKS샰A\0`?Y2:ޘHݳM&:ZY[i&m> ~W,\x#AUl uU̹_WA00U2,і2<&vP@V 1*_`\Ւ"O6eG3ڬiJ%/?6[ H9q#^׋;9KtД@9d9kƌsv=)s^0@YuT_ry>;?O>g}oeNo|?~o}Ro7~7O~/:/?O<])?gow/~|\|~waк~}o_Oe!Gk/>ͧ-Ko koE~U|"VeI^BQ޿-Ԫ;Ys{=6v@$Irr_dzַn_} Igw2*b46 KOr4]bتRm1=&gV1q &[:IEiuP2<]-*`-:L ¨.9nT\PF%U|3 BlrǾAjadyZ,Ʀ%о'; 2Wkx8" %K&k8~4uX$̖9iIƁ\KgXfY]ޡ]G, "V0% 29albPOEwFlTKnǩ(sրq:,A Kxlh$20*Q*X.-Z x(&Sİ @#6˘kD)Hd"$q8!%@[r1-ax҃hUOen͂m'@'9 qXFF[~`H] YȮbKmlb- +PJT=o9Za\;n\{Xi8`[ϛBїq2>w;-feh]~ s.A9YE(!w7 Ɩ!pY=ATfe'dAaa33 >v s%YBp3TvPĮ(?khNnHe5w/Tl43"PVž֎&M}!h&]BـqZKjw4!MI6< EGg/Bp,/'KY<8O\"9LGnbxn`RH opV^$4&~u]sOMT$tZo mvƱ{jTqi ƻ^.J]5*#e5?ZL%0=7lz=))򜔽,ZΦ+K"ca7?,=@o&[⍸ȟ6ǟ㟼7|L__,_.Ϟ}M~~wv~>x{?ڙyX/xo G՛۶}[k}۾^O BHALcZ l*L@IRe!TÕTN9r9.RI\8q0Ӆ. Լwl2s_)zw9{fo~Qsw9{핿^g;GWDng}̄Zb՛ʟ{Vs`uz!o0԰aǶ&,)2xLI)%9,i܍^}䈹 l60ދ-ԋa#p%]o52e%)mj9H>q01@sǑ 5rH"2ۖj6 #YfU]3)G$S(2RJe{/,='Ҝ 4T#Fdr6 XʨeIppa#qX᫟//sORhzrpx0o7OSK7,] ߲%_jf$2WW 5d(#, QXMEh"yIS,@{Eg=춯fr *LzKgXd( ֶ]ZAyZ7]˾ d:؊5 8{{ 탑Ec5~Qq"p[Gh"QA2QĎ(#;^aGQ)t%9a As-I>\ 6@4 4:: w6$>wWL%7^G "#ncbcxI&Nܕs?簘C E4 W -itQ$@~wH(cH`{%댭D(-)`,xVBfDLQJ&9L}KQW +fAfvTrN4Q 8^gPvL-ϴ:)¼fΖ:tel -#rY Bw,f\,1!F4i(R w,&% 8q#qEL˛!OsQ$[36 Zf]{C'c7)Bj# 2*|WR&zd_/歓o/ol-N^/#{QͭXNq,@/:SoF}8;IIM.j!_/ʍIu}K0^=ګ %`nn^X w8EiF(oMl6)R4&#O(vÉH)1@e0nTG$z9Hp}@:x7?Mj&C)4F%:g^EZ1Ex6g1x`L62>ٍʃ/l*1h*B1KyL_p0:+ҕJmˢGbHIT8$,AɄx jԌH}Ox_ Ǽ#$pRq2YZ${C^=8Q*P"݆m,ELr/ʗ5̹G]c(;\Bn9JwIÕVQJ 5{>+*X]ٓ",ϳjVehGFW̻~/pޣ:=9-1K۞~S?ۙmfj0ZookJWۍ~!r&1QC(dZ BOa){ӂcIC.<.#Ȗ51#PXqiMId 8L!_v~J Voѿ* Q覈Z%)Eqk'sX^Hn >|8 K$|SQrX},rrOAJ\N6cjɼm℈V qOóE*@t#NہprTʲSº%'A_Z.6*.=ՁI-֛)ʗ^̣Zג|O!(3r*)-i8t|!SLeNqf+OLӌD#x(G+ ބL zE* K)/r\w${_Zk% D!>Y[{E p 6mˠFT92!&D&uwMe齅if wTídmgj)CO 'a$/F$2)u혜玦[=1-(WTP-^$|Q"<7dePG,# ۞|Jj7|*q'w6l1-8#t4q.|9-m], U puAA)gR X du;ށx Hhj·c8is RZjIV{&b#i[ohjI KKo~=~zX^]8m6|-Oݾyz=?;:9=:<~Γ76;2au~݇rrtqxsfsw彑P-8.2aH r @̃UBA&bp\q1pAـ]GX]&K"Iq < 0wa#=ʮa'9 wpCGǸn Z8Tצh2ܫ JB. x\؈Cz O/2<_yjbP(?Ek>`I "hkJ<$́Modz;>0, JЈy  anüp@矽k,(,G d„ųfj(#:)6FQ>Xb,K4yTtD$l,,h9oOxUЏl.6b 9Ssڶ`xjf3b%hm 2`I UaORA)`ъRU0ޮٝZWr]ϐJcW?R]P/\O/} _\+Q<\"MRhFs˥9 \0&IZ '&"%ٶ0zDO>m]0ԥ ᯥۢxT`NɝSF 2;gr vJȐ-Qz أwtKW4 0QToDc@fQ %({hCI(}E.̀#xF?PTznP3EeP9WN>myЂ ge汖bD09;醭buЌÁ(_& #ЈӼ٬]ݫG8&WW[w=|ɻxɍMn~gƋ9G}ZG8::8y}AS_jG9t%ƭxd 1->$0X;aw3ble@a˦á;2;x=R2uHrjZӻ8QZ'U;N9:0T Qȭ; bm>p}O&"7. */kX6lql2 2P uJUJabaIm&F%%>ٶfBuPuO3dyy8Gӧp>@o|ÿOMƥY{Ms1#F&96Y~%1H=2tMIPk+ѳrw?ٴ,GfîIM&Sn^h-e>Pqr2$FXy<@;DILHL^&IfǨl=b8Z̅GzA&2H-{֨9 q3pcuBʥ~gDRe3-^#~4ٜ]+|sep`MbyσM$ARԂÉϖX[dc40I(J&$8\MH~v!SD)T> fRs6ss tNm9d:~g::@>B'!0wb6MrAko'xvhl1dVת5\?|iS逋o/9n2a`ki/ii1 d H!*EbJEyZ,Df b,%xVcѶ.Gc[ud("FI^&!`ݎSp(<< +d޲5a"وH⻫.YjyPdJiqkˮY3cxiġIV*ώF"gݑV:YiWgb[$N2lѨ\s- ZxLتPԨ<V :kˇBNL呥|r|$<88әX> Kц"3SBKJ2sw8pqN2jݵ "訚nvFkg u>b)3ǼŔd [+ԥPd Df.yNeG2&HzǜN|\QӶ֢o{x>ifop֙y]1ښ#ƜpH9,U[\]-fYM ?3yIE?A"6 _L[E@,|isyF# ^$3 &>fت_HM͋sA⻍ /2 3lc:R{Ɨ[QƱ"3%JJ5|` y㸾x8oLJ7o׻7N1Gdy;ӼZעzM&-U΅)zb'8sVBgH1DFzerCBVMG~=:쏟{xt^Yͱð2kKE; 80wʵLQSN ђ[xi%;1qթknOP`.Y•H/MDfn:0%P 熱^XcY l]ՀKS_O_Pq)KR1$d lGDNҌEtM!q@6hO4Z@[R AqrPXKqJ6?G?./ѱùЙ)۠(+|JfoT1w ,jβ8&U~a0tCv75bx$OUN[\rQCs'` O=@\(}WBOV,I OjaL Fy񶁁)g"Y6G c]13L:yKZ_M'jp߲YF.QpIL񭧊2ph,~z93>mu4i}ɯLH>Ǹ{Y]a_;d% jz`ק7y^]׊s3oA7W ڴ9Ԡ3bYY?\.'Ynjpr)ROkrd0tq_#LVe-#E ARUSt8tUn5(3N`2bHr)7#\Kn䫙f4É̩ =h[Z\Lg(T B)=n0LCӘkle8ظj}OhUjpMh'.1,g٦ɀ ٨/! BS\3tE%)p,3X}F$Q"#ŴdɄ> Yqv@7?;LHN* Ef"x/$vnMȨFRgP,֟xˣ%I;1%OQ7Sv0YC =Nȝ@No/w <8R. 95^pqvI3y8W.WoگBOQ|eie@n-f奇K{! k5QŽ13 Y/RhF_O3+[hn0Eu^ F$&rS@hSg'tqQ@VTVq)oTLI%HQ&0GV@yʡâ8Ąz)XcK4G sHϞjI:؃y@2h#w(b#gs#Z+̧39x=\/ -xd~}Gb«)?LŚӘ 11@4j+uvR0ĽMYs|zv[eǥy&UŬ@12Z+079c!GPh}G./WۋzK6h8W}=IlCY{F#< s9}'ڃ;w,YRHAy[(X` fM!YcG3'6,h W3"?/kƐEf8/K3cͬyV[8Iʁp2㽣On9<>}yޘ'8}qG OR+ L7JAm@uԽ/_;'PAz7ݻWy8XKE,ԃLb'. YET}o'o8>7Z"B'^y&Y^lBI)AyMZ -rDɿJNԕ/ctCC v.+;%sPPL+zӊ&V}3inWy;MKvBdrEg٭3$NҀykZUu'vω-ę޴|deWmJV;$=7Uz%hRkZkA;vIv{oy_y[gr n $͜Z-\װNML"2<v(9q1QI5BRY/CKڧ0Ҫ:>B,ʁF wh)©D)Y;k )/XMDn(WARkF m 'kP?4&mz@WbїkSWU,Mf-fhI/]^E1kr%SZMm~fhަz֧/}O&#^w;FqGBy|;fC¼hEEԿNcꚛx/˨([-/75X ^K^Z8 ME"/ZhIȒGڰpbuDR [Q̈́q9 QkK ` j5$6N^%uxR̪(4aAGh3j,d\nZ{nIm%O_X'=oTew+o)"y앲5*LP9c]M tH(h5&L2vGg,ꍲ뫕9An5Bg7;4젤Hun>3w‚6h 4S fcv|һteg|Dz7nًPj"Ls'E {# 4h 2eSHU RR*V46mvXsv<{w[e8X 4,GG7 ۴Bz.]Vq@-pE|.n^-I)_3QX*C!_o+g1\v# PRG[Hay\."qIasr4{l^xj%1'vLZHH#nMOe3+}3!¦6bo3( of>ZSBaWOpK.E7{Bg; SPGL!r'C+Г8"Moݾ9 ۚ DaZQ3O>QD-$O"'e-bXҚhᄇk<x?S"uH8%+vûGG#<$8m2ַ*dKn\0vys#{(ä]${1q{1}]q LJKgݦ5w74pB"?fIɋu|Sݦmsq)Մfӹ 2~_^HMto?1,) frJ-gϻ݊"<*t - `йQO#WU y4)rSFOL&wgD-<'pO4@Eɫ5ls{ytspi0m׫px[wNXjNpBʝ1}&u ħ0X73e+=86%절uvQ_^u { )5O=n_o :@ɠ]SY'GRYQaFzm vCt3+-/SAj  Αo/qW75mlcݶzK5&!'Oe C9zCb{g{!XC+f:5.Ms;P(laCYg< :hf䲚ͳΡ&Ǽt̐s޿ݱsxW*qyOd6O ~`UPE{"?9IhH,&E*}tr Ɇ-u\|셗?$av!g*aK(kIR%-0x'%,H `Ȭ,׿(8B!4,ȟeg$qt# IPӒsx!-Gs^UIk.2<FxdBj 5"hCsz1vx-=]f=X? !;.Z"#}nA=h_+&jձ%A"O Ѓ`h$K˃z=2/;âG55{j5 uP=RlnޭoNf0>~3w>HȉO6n˴]t% 񛶤iv 0H~~aUk8cjq6H}RAIz>l6W^NƖqw0B蠞m_s=_o}zu8]{t-Q9u'i,ׯP>t_˱ݮ*+<8=)\lr^(5 t[,r.S\,NVs_k=s뗝B/ H{}*-zw~qO]\R,ɘ9{a$F?`fKX.g =,, }ʚ'5fq!uA NAcK }0HEPssϲ-ENQWm8h>}+Uqpcck;iд6p)4Mf! 6R'4am2W}x۝Y}Q_7< [^o=\2͚B]ZjLAA:cTbuB8(KFĨ-2/=CQlƾE۩ڞ`aEз*uPqyLx`ȱ.9f U/e pH8]g[!;-Gx%IDS\x!1PvUYr :$G#s&f ŒM=m{2͇"Q3Ut)NԶB'ʨppMY%b.s2eݷW/K9=( f:eX6/@A0"\/XlM@d72!6CMxUU;lg4*N,25휨<8;Z2?f]u1&g!\_?/4xGѲ^fa:ߊ~JxSgLDݟzvc‡9 ܥ;nks'ŕ &FYNͤYm{ Y#7Ţ͑G [kryiم:#^u8MLuWb# |$(bXUAi IXQ} rpѺ%JfZ % CAxF͔4Gށ~"<vZ\g^+a)R0˜$Cmղr!E5dZ '"Ž4, 1Խ%=7gP֗Z`xHjk b/-_=ZʃJ:S0bMġk4sW'sl4=km+1H߉ǧ"AŋبLz\? #\!ZU&}\A96 ƷbVG]A;{ C:EQ#y$LP0MYvQΖ N@wh,"ZI'jdr1XG-PQGo<ɽ1;:>X.ݸ^]F45Ž/Μ xh/֫ޯUo~^8[O>8< ݬ M&ms(Le5+bpwh=Kbp{nٚͼytlWap2UOv)rp^+./]O! $<#U!fX`Olj8 = > Dz/wV՜i'[Vta*~vrG[Eh$ZU[:R&\LQ#e&e=BFFeExuȗ*, ɶ6 oP"p~,QKίfA}95I]]NwۥQW A*]Ōx ~ug7^ɿg_2">Qi2oQ_N8fiRetoTҖPgz eFF1]r>#ȹTe'g\ʝ4);u q5c,:ѝ&Ǜ#jf )(f 8sשSxha3c _ɏ$:y=[%˶/. Q@ٜpQnƷ2@gFez9g;ƈ庌M y+ ɸ/<ۢvuc?yA5?˩tXI# Fhy9SL͡mr`iZPyxp~~O_g8<v@&Js #<ĺDs$KKvP.zI E~ro[,f`29ぎvQF,Zt5 禨Ҿ$`a}?1X8П53"H6Tfwӑ>+$6 KR[[&, 1#_uB^ Ь{F 0(PˌLp94}}"UHlk5GʌۏXMK?2+RCCփ\<\Y ˊH@ |₿}lî!  9PHwAVC)ȴUHǩP^]f4fCJi6< 5E[Zkg7)ރE wBa^~O.@ X]C'ԫ/]vՕ/kW)v0Z{ϙ~}Md)0 ,eR_<:Dc-8UK<gr*mj j]-]7WWB s&`) DW'L=ЬjUcsKȷZBZdQ@T1=+-QMZӲg뎁gJs/ZYe#C&lzrN ۴//-f(!k<Nad4d tsiѣ$&2[iL!I:_.$X<f^_m}i<YQReCK N"B"!X/@tfŬr,]m\ENAu;ጽqbCWXԃßf>mfR*zĔfumnݢckBE5-َ^O sܐKi{'8de5j\,@CG5djX7Kg8ge6$6x XIō~tSЏA oy:P @0N=/Pca1I&jO9+ja֏Ƃ 'YK`esdB2@|DExrې`[WT81%g7 SRð[O=rS2K$]l=.4(Da] P#h>8TO2^FA ̘BEuvJeVvC=3"-x<vh1 FtKCjXlfI%)#5޹-W#IhYyefҡtVgH@ǥE3{Vp".h8fD0& t$k:Lr{@nYS$˖ęQ)?!eF9V̹g}ĔϿ:o]](4' xuu>|5vf\{jֶ'l3l +B1d4aU1dࢆ5*rK!IרR181 ұ8stye+u@8.1>ًC9Y@^qkΘDkJ;92fJ{:y9@vI4sx>mjϮ'0>o_SӶl]tB1+qע0dgvu-JQH@Bm"!xw}Eۗ -?xס'E@1SG%lN}wg~è ne==mQP+`ה|hC/|8#T mX`( g68bؕS8 ٍ<ܷ|\ XЊ0C,BcQ( L[y13F@x5D+q}ڜ%,w65 F_yΞJ-Լ>Iڳ&n=_4/sf R+%B RRI̕y=r~-$t;FHգUf*].V̊QuZh -ȇ /F9Ɍc%qJưQ,{6 N= I%9mɍvtR QVBg*Fک\>6XnR I> -KҸdY`",=ѳПP狳]]]V+Vv` 'PBtf Nd|YeV $e d̎47P oO]_NzP=>YEWv8E(}3Rc>_ڽ/*x-ɏ ߸u0 KaUgX`( l:4رVRݴ:!<2zs|W^^~#A"3k0J#ZTQNjbmIXF`RcME4 S_w`b/Z02rr i+2yX7ˊ9i)X4?ZS9P:JslҸaw0tj՜`)1-n4~|^pmQӮ7/YpvuKa-~hHv d]l3]~ B"̶ϸWEh#0 7i밉{ɗR #3<9I$'ffsH״3alRer1er5 No (!h$+5ҞnDLm r@;W#$n}DZ S*XwghF,ԞyW3EQ-A38l\s 2# 700': QKSŽM \5¨;E!$x0Dhޢ9.t8ПUW&0&xuCyٌs/gF9wtaLjJ ٚ$w@Ƴhu`&й>{0Xu q83~Ƿ)ΝNjN8NS_ #c|,Kȅ?<:9q 4Czt8sz'4i׫qs}0w+ zݶKh'l)x yꖃ3Nzm2t};n^ﶵ \v_3W$0JW824{cgyBH.A Cq}` ӸCtƠu6҈,Fy(-Lo}l1X?JP 86$kW)_?_z<⇇ʎbkqCKGIEgƉZ:' \S"X"agMh}^H6)h9+?oÏ}{DO3}w''@qƣfV-BgYd\ikҒ?@%xqN47OԵ&vq{  B K^KFⱙ c뚁zOHeFlTrMDdCy|(?W3ˈXոcdR'Nd6/U1':VΓEJ%9%yF43Z!,-[pme+ Q+F]]J0zk:i/dbν'BaD h9Z&"8Mqh4E`U+1x3uH{QBQdVϒ&##hc]uS\U<9jyU_80f` cs`kւ@vfI!-Pdć]PYmzf&m3͙{¢4tƏp;5Hs05?XK]$J)j>bf]$?cEuIqv@a#w2+qH' 8Oi&>ݮqg[fQ̷fOqM^oT&ߥ[؁~3 Q~S~`/4Mכ+'?|- h'=sX,WNGΪpٙ4w)ݢP.&^?>X~:,]=ޚ6eOޙk: ͭ_P!x+eO-!iFDLN %+K:^i `Z?u`x>ЍϿZ{{k۟u1 Z_^(67WUӜFP 8Ǻe˴:OmgE5rg4J/t$4x}Ìd"+倪'Rm|N5B1Hn H`yMM<{V,Ɋc:dG7эḡ&:md?> XFD=.+ !0>-SW+jf}yNnH!ZӄAƖƹ n3@`riSfV YKm!g[ ڢ"Fɩ]XNR}+@AJw.Ĩ4\YzyyҧF-lvщOd5ܼ}__}uA4ǧ?98^~r謈_"TiLcT@X\&S$Ǝw-Q%ْUS],؟$*5X@tN{Gu~V[RP+/ԭ%i\T0q8ӹB6<"le^DIšmEP~3b.X֧l˃9m bq1 79$ ؘDp$K_( z/{bZQR' ''-@X:ӂn1@p1@b";~17 MY^:Q4+E{bM܂{CP]>UQGQ^gz]Gh .ٿ%byDx\ds |ߡ9 ʍ%LU.fA ^&BTvN34$YGIR2³0F  -X[~jT˲<309ȉ+֧aÙ H# *ÍR 8%'nd_3M!xXm·V~bMqA?桇hݎ@9>Ur5WЎ3]YY-Z(JOozr|ʓ],%HmїWO'Nb±`zB/hPCԠ)r\֯lʽN6A'8)S;GMA?oC<후ReW XNYS`IQsu먮Wg ).z w9a6ZPoqZ T0b7quuSH(7-ݧlvAz]8&5"GIP\fRPw=bř ǺDL0IwOոLkfHAp;Tl&(_H?bOHEqjX>ǰ *jU<48Fq}-1PKt0κFЛko4@-}xU3"Q̭KK & َ-)l;6-(yq:+8î G-|VCXfOhZXs$ڌCͮ BNiY03d")ضki[o,mUݹ!-`VfwZf7!̰ǭP%Hse ihdjk \WO/̍q6'@Ånr#UʱtzLx[v:"[Ke|[iluZd+KȍylsL͕ק7ͣ_۾[/V@ܽZybwqē'7gg!dIE<9M£%6Y' )/y!W$ oj=HL$a/wEX蕗ʝ[8M1QBηnxԦ"Fpcow8N.yElFqyOݗ3ă1ٺ<~sGL{ڮc}nKv+2UŘ/ϼ҃FЀ8\T/}#}gZuem]һy P+sE lӨч(Uρr1|^9bbzq8Y=ýCs7&A$mQB BD!'@H@$PaAW$ ŊX NJiJ4D8In]ꮹgCZ߾Z!ͪ=g߷5&>~:oOO8*j]uBn=o]OpE{qf*BK(ÂTg+!_%-T^D| }uM{c<bV@%L\ wi0Zl-^hI?RTY0jj q4 4nԮ k̑^ܑ@B>HzZM)W0U)KNjΊP0R "C0On 2FDhv+%j*8NnxrDb/e!03UX_ Wᴙ0G&zo1. x//-SN|pk x":fwg[?/=eg詔_AB9daRbzwOc o25!L^KZ.J;ᮭu0`(;q7QJؖvc,N1 'yx$)"hѸ7^~펟u7OOXLʭ!N{kXE/<춲qU/g?$ޓ0:l\NoФrJHt=[oT}9ɰhx.4MvV]f[D&q]:b.']&>ZeJs T\,vcs' +mcw6W7w]Ѷ2umtO~Ƿb1/aTPuHS9ƬGz]>(6A4L w!0ˮoZUB!D,-־O%9p41?K7"tNP"UR;*+ *}2akxT',"Pf1<6gT;dNP>`YaVU!-I1%K 匧v*p<Cg |&T|NCI ŌĪEErK[Pxyn&bڂǛ+ `L.J5]^1`̏Ng'вT|1)Wƕ9WxR(SR̎! o$am음(g {4IƣeX5Ƃ ate(ytaT2j-Vjh.Ŭ9J5PvhSN8gǦ '$_҈`^ƓF >I(7F/a4_R<A7mM QQ ŕBpHeyOv6HS;t"2l*\cX@1]A0x.欘MĎSgGGv6lV'?R;7-6}{PɌPKj)45#,Yz-I% sK?Q HrNfIֱ?D5 h[5o*,'Ǿ~O_e~(sc=B(+`ͪTȐZ'[u%->{cO>E^vQxz sSdU .@)FUuꆸÌXr,`uO gV%[^O#R&,&+K(!ArE$f*v1P[uN:cO"eرC[(&0y#6XJ<譸H;9r'/VОm#6WQlWURiv*l3Ls LVp& L )pCXs$Xi<PC?GϽ07&d0>9X6Kl-6~c-V&Z"ѩc yN.C\s-h͠7ZIP~Ɲ(:PsnA1J 򡢡ЃGlGOL/?twggX̌OZW#~<o}=VČj֝i"ʒ{ :":%jI gtDY')E#gB a*bޫ 6V4ͭWn_r WT.noJ#/.>:b?Uh1u:#x2M7*"@sffmK4*'/#VHg3K;LvU%<:ŧRCG'؃C!&7̙$z]*mҺ,+Z#AcZE0l r/ːPDPFYXp4l'S%&)m~ x833}1^??/26&^LogJ:m4B=o챲\'O' SS? s:;_ܝ骚ok@|/wTeɷ؋2eZ4DNT.xK! U3ȗҥIw'lV?2AlRB (sYo/ini+*b ya}!e|x5җ!Rb8Jln'yg%ݮ*}RpT4$}L4[+#)9tN@^ڗD',EȥDA}\lқpPsG7`6]b,/B|x4'P<?!J? fN``Ir?E~xp%|/ge"KAYn(,h:k} I?lIZsg҈^0@+4-A '՞wABRtȘFb/B^Xw?g'ɆaUج۵CI@_OP^Ep ,g YKʦb^Dc,Cc&񙵽yFB?{A3%Ϟ__~ᪿvݵ_OhkUb)ol'^B16Is `ش+:7Ⱦѡ'Gfj ^Gf|hbRC#QMŤq[WfA[3~r-#q_|+)w"L6~7~WkGv{{2?kRnE|q栻F t=sX"̳v dzkٟ9*c5m?3_~{>,ױz'xj8݌if9Ky sz|Zj8raU͵:{4'뚹vvnkkg;ke,*]sןdQ2'L@W4a_9s6NJ!i9؋@[bJoq'S+3b#{=#}k1H݉A3 cB!vhE;RE -%+l(Ay|2//Dh >mK0PIWfc !_a I>B(Ų CM6+VZ촖D祋^WUXtl>[!0+1∁՛gz g^EpNWҙuJ +wZA/ ҐZ(Gf`Xɐ^xkq{g!B#1 3[uVnL,y?6KNݘPlkc?W67?$s)kOa͚!|i*B%r2[vP- )aGGjX*;Ixkg&:y!Y^,RZ5r~Щ!vKqIvIaYt.Ee7¥x{ 6yđlyB#qܓ`Q<4Rj~Y.q҉mx&GRUƒeE $\t4#)KedCٓ?bg\j,o!g L~ -Sd;Թ3uyz4n&V^ls] gx\JrYm#6t(7(e`a~tPc1efe^Q3i@3w2e9=ZFp',M3tfT``ZA/w!>~)bYEsRpvHEeG>T_>W,܈Ud*SCA1)5H2@r2qUt,X]492!y)IO/a`'j2$a |3yqɍV^?>LB[Wl[;&Umb:XZ(JwqU͎ *=tL2;(Modzx<=:- vv-BU *-^fF YiWSC?z+1hFЙajS?`:]I% ;82s4Ns,$%ܳB-mDP+bd$\;qJ$ j3L+KUb'ewI[ڇ^t%>J%}Rc |~cb9(#ez iBdC5/hzC˼@߉),0'|cU.ZJv|BNmSnXQЀɒA9ř 'di*0䒈} %dFBqDT:/@wNq4*g%K0F03&XqR_$*_ƙ:4J-!i,shj%*H.*Pn8x1x'T0)o`l"Y^E+wA`A\ZA8 '?oX88Xqb\.oOy?oB%3thmLnbi5AQNV%xЉB§ 9 Ty|7z_i po@C:xe' 7xҦ1D^Gl+ eW^Ut䜠;huh\t6Zx{{Z|eyڕ&较7[_y$&غM^6n/ӷх)oNnYZLR2V8F`r@`]7sZoi;^|VD??VĽƳKM}ISwl>wt`KzRۻ{kmҝ}H{Tb|-H. L+7&`Z\bv[tI?H"eaLRCCh@ b oXkށy-T 42j%5s8fY-/L6.yG_d"ì>[o=᳌)i_}[7RkU,N˻~9PBfvrڝt9FKNW*ܔǧ`MooݼZ?@ϻq\W^m3]|3g?ʊ,_+۶4_Q.2$8di)JdDNV"Ha/6,@C!JHq -n @OOtp}/GƸNLpG{^ӵ 8ȖѨ\s.fd)Ds<*rXJi;*A L,0KGDű#/S}I*qnK㧥1*RǤOߓХU*ilYaHkf<+> Ԫl{=.V-L?tOCLo?ig(DI&-?q[Np. -=aッKlЭ75-cj) dёdpt +qb Rw!f+m ,  }jq6Gy)4@r EyY!8YA+CiবtOB>YWd:i= <)DHHxO{C )`2d[W}W&务R1%A`IO哒8P{L(Z8v<95ag^_`GF Ѝբi 03q"8]WFd ZNʮoe?-tbE`4PuJ9 \Sh]Zª. Tҩ;=mC34&rO=Vvqw=֦dO]~~ƞZ r&'sPk,9@5ݺjF3cԫ\)6$b|# !3ad5;P!%XCB?[vvQIl̕,3;+ryQN*#DMGAwu=:?3?RM] [S%xyRB6~V^?D,v贙 4B" 3 :Zrzݽ'O=u3sf\ŤGaŽ%NG&< ?U]5Gbkkuu{FL=!)(SEϝzp=;dz:M+. z#{z 7޸[݌퍕XJsN+I#F.0@-K ts,8Wxܕ%p0 4GD> .Ŀu|>Xw\bö+^Lj\3M#[D]߶Jew(!4U`af;G]O}|n,R>i@93JNc-#.B ,8[r\92: FDbsȉ8ЊRA"ZuON @t'jB`{dmzƓ#>p[Y N}HId@M +#_^[Px,/1teyaB(%=b|f&XpGǶi]R#s߹Ɂ&~[?n;Yӵ{zHrIu%H1cSsd,ƋZ,*9WY. 30fPHahĴRX *Dի~ӗz~HQRhE?3Gn.q5!_P b% 3D灤= +:Pi <_nuGE$7Fʇ|v ڦ6 M:o!8.y4!τ6bb<D.g=-p}ږM?e@Pݷys?TgjWy ^R+5 Zk966K&[Q?}ݿ~䅛?Qv}˛W/?xjwˈprW-Ӭg頧C~2 CtZfB54 1%f hT/3X!bgr[/K!#b(nx6ZSW,*k _PHY; C Հb5D'KMg 4*T 8%rCLDC m_O (30l ^)`uwa-{<'_>7Su]075YR`KdFHaLKSܺ{ik}RՍo&eux*SG*`K!R(Qo7-n~;Ǟ{Ɲ_CMGE5&}Ɲ7o倊^$!/=^U4*;۩'fpIkChhE +Χ_OxV]qgу|Rcb)S8r}"./+Wew2gO QBpO2G@ We?\N3q=t|#(r/0]C@ŦչمwC2ÔK8 +–0K5\_r-Tk O[w3gA1JU`2݂2߄Xw Tl)&ӏ]qJ$ xsNafFT9 .kcmMmB).ػNpBKR@HY-ߓ; D*n̙M%]?&omGF+ j0XZJ9bJL4lA= d${&q$0Y! {=~x%7Ns{t6&@١& nYfk8kHuAF-FLFne)2Kgj;A"4RτG:DPRo$ fO OV1>4he,2WF*/_s(R6Ӥ+INmkZTu̴iQ=4(L:Ox@{nj0g3BN`ē4j8f !JIV@*I˒r&c,\iO^emxpxs;mԏ=WݷszR9J\-LOќd"%k~0~/M.xoS?;{+/|É|)RGs?=eN?7^WFa2W{-t*d9i!̾P"{<_&h =3l٠2L PN8pw1PЇA ATΚ,6`8yh䜔Cv>$] O(VT.`F"LYt`Ša46%!% (1@Zj,45ۤO^Yuu텪9A\+F+u|&7#.ApW,h.)fya P#>.>޽~K'ӗ_aϿpubhMZd!pPEw狶q%Y/3.xi7>$sH^>SL.e2+YzeFE+7mӦwx4_7GsẲN'"G nk 9-}[1B ˔@485O- 6slrZ~t3S%9oOt>i >n 9ˋ&^x[(`hbVpa}aՓ;O*%N/R[kbwm޻ C:Pr\ْv5>omT=t+zt+=ԠԮ̱l^!tyLw]34pr$9/ 2O^F8޾w/ai ngyseXN"hxB]:#)>wc؈z0|1q+c/?/♟W:V}nxՅڻ_^O1cY}63Sj])h,0+o&"+=OX".Aݳa \GH\e4̈́AN5h$pO<1YG! ȹ` gKw杋=:@igZ &cyir"tFN&G0P̀_byvֺDaBh R^B`{781xcM?V^_BBfXM(WEXϚ:0L ;J⡒%bݷ5zbiӶ(z~~3a'߼~_J(Gu]zѻⳫcqE4磒ڊt1 pR*EwzqC_ %f|FU%4U/L u:gn>?pGw/~(N2XϩxQV eo IA5Qī, p^Ƥ t7hTXB\0p{`X`hc:zJq0d.p\M^b 7&پ}T;waddJfǦ1a:RI%_zpr/f/3lOCt_$Qd  Hn#St S&B&@FaRrIzaɺ, SbT==)Tx!R4OI{%J>UzCd#QPqe#;ag@Ϟ $+aFaſXp iTCx)]Krf5GO*{,hKmZD!!!6'(X!AL@ÐSE= p'j] 7OАJe6&{ "n@=CKIᑬFyq`n!%P)(X($^"@g)(eΣ-6|b3 Yy#5]Ƣ+I:m憞I$\r@sH r X1+3- hbܙA52xr#FQ/VY=w_|Om b AD8ZʒIlN8/R07(lM9UZ+jt@& (TXYEPs*~)u/0̯܏p_B7zWa/ mxiwۋeͼ˅׳E,|MMN<]K$z28GYe&R脤$% gaF,LAЍkYƮH<fhՉ)r,-*?~@㉒; ]h[h+r7}CYޢT3}h(6@He22㏲TkHr2W8!WSyw^}w+ڔy>>?|J (I,S+)ljh ۓ핵w_}&4EdiuÚVY>?l],B0`z4nѶC6ǡ @64'ĄO3L9wB;DezӠY)`w&uDQe(G8PQ++uz:u:\g_ps#6]ARc!G`n˜h# EK8wTHmJH {Uff~NfrTb?qk)[pU:w3bunfETN:ID+Q:B:%\>|!mΚ$2]&Lxg*~~(H J{%Q}ege`YM'Xgx44F7ySHf_J>1Px13F( dG"7$\.s$ 竤ݖÄhui-wXֽjy ( R*-F[&8ڸ%B5o*z WE KÍ$L=Rwir88-sf8PnU^@FwQdBa0>yz]|kHBe-*&ެ"6ߢ?<)p[` %D;< 9XFGs'e鵐Hı2 0xAδcπAziK[er#5 }7&NSA-l蜒lXR U Xj% h3S(>DJ v$p3U/rB-D<&\`N5 F>:NjP'j*9 LH:^@2skqNFh;li"zi:k>.0:^cye[Ҵq'S`%R[Lvb. lIPe?o5s=Dfw+@N9kւ-vAqsVfh [e g4Lzux-L1YX&h<96 `ǻ$r-P˖^umf\-XqC>'P\~iSB66#|@ 'MfhGxJN쮛 1@>wr (d_ j!*uU_vJW_t~Io\B_Qɲu5o}m}FqKq~ 2Y5dxdpj9[b#Lx=9Q3( 82VsJylmbAI:! .PH%` .ahPnb˓zuXEwB,CePv% _te=ݹwPo\`}ϕӣWo۳$ %WsBƻpW% ~ar$ _'heV$>#!5l4'yQc:3υ ~obJ }G&^HpB'𭐋e j=I801֒&Ɍ&Q9A˙DȮ@A0PaBd#a%Ah, Te@$3eQ17$r7n7.(]86KIFc'co ZPpdr,`>{tO$)1f7*I)G1|725(KS[GmN{#((k}VUF3r #H!ZhA{Ejw\=j֘>G؇qb@b=ZnuuoՀѼqJIʞ|jtB%  oì)@-rQ9v@(x& o,mnmQNkݭ,7x (]h6|:1p0*zhנg˦P[Z}~7?ʮWϿo3wm? wk|%>^Q?Y]|RPfehc_ Ȗa"W20+@32J1-#Va@oruMhvYeD c.r\9BL*ԱOxqQX)^эLMP8`+iCPBgK?;DDɪKox67sP* |K y[:nӌS8-]Jad2{k*-ppXE24E `I2]}ϱx.MB$okSѦEd`,no'A w.M\-Jꓡx&$Oɒ!K*ꥑxweNH ,C,!f+$ $@*{lFS]K5K2,M-eR0ɄG3Wa&0+DUT4E6@My2)o5e萠3؉qڶqOūHN޺uU|6;OhRijE[(!\h, uyCJuyrz^;# {*oڦsqGd''1ٻDfɳɫ!Zsךɉ9l:gV͐Pu:0ɧA1>#ʑ%yBMBa`c˲JQ$;o%j R-NT3"6)*p9Gbrփd\Nj|HnP G|C!h;j?dqz(m\BRq:0Y}?nhQѾCĎA }Lr[63Iѻ(?KLo)`vö(CH$1DOv2-^f=w9IՀ3q+*Yn>yCvD Q @ 7;i\k\SVS982Exg\I2miXOqI # l G,1O k /1EA? 5@ >l^A*IUtc{d/M8e;D~=r|x 8)qQɥk>k/]GQ;_C񡏻?9ϩvSelz<NooBn?ޟyȺl;Glg|]ޠ ,_ʜ[#/aTA (qk7+unpa7?^ݛS{ܟ6 HiLJXz۷N,")}UN&9`lN7o f$+\jͺ;G~B((nx,""GN{Q0;i0;dCn.3Er5=. C wC\:b%#vgBTNbi#@x,/<7ÊSW $Y8>zFĎWg*[> Qwpސt:,eJ|f1LE̅)|5 ]u^$녆n\G}zW+?I`J@V/I12!1M<$WޥO,=p YlB8-*: 3@?wK*s;eR픜}2X8Vüd#97(~ z$2o bؙQziHa͜8IBa伤D~2lW *uԙnn_[l Ahɟ~E˺UZ jš^cg+=O?A ȹCTb5`e0g M(cqi#0 :u 2Pרe*R MVi!,]%F(tv0<D%Hcgse7 |Yn LdYryP.viBLLX2uɽ.s$;>ڑ U)/ùF%,UYL$KWVA6[Ca#BE1)G@>C?,Ԍ;,K>D܏8 . ̉"R"\h4T:/S 9H_ܗ] t<>c[;ݤB޼LL ȏ )|O V#3u],\_N2Yj)֧ԋ G,F?4g;ՖCrA&DrEXQP TQ0j9z3Ho͑-9c> ((ӻk⼦OG:=W^8]lڢp6md㵕)K%pO> 0) tU 5bYxxn>z4=է޽ho6VxAO^c%:U4'bة eTx;Н&cTΤ%vnuKLrWUͬ72Ǟ@ֿٓKs~/Vy8Wn52zYe0p"xRHެy`ǪroT؟|բ8]i9ʺ.\W[& 7iu )Ϊ0-9_C30B%v+9S)r rxNy 2P.]拞|HS-AlkF/M8帎2\hSjЌ]3<#QՄ$%\1p@`!]W/JOb5 I 8 Bu¤o;TQje,0y*X4$J  (%pQ] LzހQi&em+:.2aE)x-X.HĹᤁg7bŌ'+rNZ:S7旹KI>&{7m;Le8vMҰL :[Vc6C(Q6)`.,{;Mhc.rg8Ʃrvz *ܘ*~durjr>[9,4LU+'wg=Ƹ] J B k*iyMy><> ?pPIakȧ[|paNO$9͇E s;@Z 50]x`K'eq2u2#,Z;/ 3AU܂'zV6@;b5jzcGXt N9aA@w\8 !i j-CnOŌ>KcHSe6b! jLZشZߡ>_p1EyP}Cm!)0U+r|H&ծڇcǂ!APlK (.O(n*DKHn^xYYݟvI0mG"[u\ZM|hHJ+'3BK^Lr:Jȕ{it D:=qS8^""DV <.E b>EXxdp^ypTMF{;kWfnrȍJD&N-5=PHQ/iu/Q(!kݓɟ}O}箜?x?3/~;:9j}οԭWm^A_vZ.Ӈ V2=ޢ 0a/9$l<%o6 \+kb̳E\'!|kA禶4/@Yaz &AKA艬Ò+t$Y },L9ٜd!Ѓ&O6a?/8b+~> ؇^iɘCS-=QyTfp^^X׃8!#K,i+eOC2 4ex>!qk2]]aXX H "_AR$_ _V0dT MÉQơ&)NOJ=QAJ΀ Yp܏nF넆p} aP {vX`3I,f,\h+Jb3F 2a*1 1%{"j:&+圶HLujA)0EWm\c뙬5)G` ){"*dᒂ$ @s.":Lb?dE1w${lHv1(79R\"#< 3Ym_cv Qproqrd ۀďlB:nN~W.WxLgΡ-#5ȅMo=-+hpyDz2_;svh WbmEe՗n{}:_{qQ:ݷ>k͆|:F.L{zh :Hp+݋^pTƕhm q 9*n;LYɎT]<#PN+ܡLabXoi2R`T Pp0Kkr'/>8չEd^I-0*{*Dž}7j$ː~(Uܚ$cX&G ܐGb`"#@WgNݸc8 Ӣ}Tޭ;iMUuء<,y"cB} dx+:V(=㱷XT>KG@gCZ@gMitk,ah7.nX `t* p (АNK!23E 2>= M̒*Rh/e[Y \?Qi҅^%Q(.^6||7e9cXHn)_+0 d( ]'Kl)/T- ސj+{[*)Q,9RLc_؛,ɒdWb:{SUd.&AP\p? _"!(hBQ f:Q9W#`/35{=dՍ qad[Zٻ w:hh|zҪJRH Hl's}Y(<%"sFv-S-]TX(2@u o\AQr,A`% Lh #USȫY-v$L"WϨ-m5nsB蠒~{k5[i>XVv8KguTЗ9-,AjYU \}݈( ea08[qD\6!0HVyXwE m!IU0 珝sm@'DZxJ,b)-1>?H-o;0%i 1@=vIkB A@`nZSDH8gHD\:>ѩ?~6{ w_|%oƷd ((A83jNQ̮hLWgIm{ߥ _CC&I߃XĻ?x<?^.m7v FpTL,/VaGǗӜυOia%ƭL HjӃ$Hp)jc.7,Y Z,JD {׋)ă7QHFlx 3"aj}L~A3BuȎЁzb{;]5$S=ɻ%E -tQڙ]dX>qmtʍe+H\R*h4}p{du~nPk6m]2zf(R mB2#;%X3N՝ nOG,mpW}?rOF>xw ǗZ9H >aK4c Wk\ DjHd!pktӠʑp7GY2Tdk6cAÉfonJNQ@h^m,$R laDYڵk m_enZ#cf}HADh(ӑch5U FDs9:8NQ$wY-\b8Q`ZE-x`Ke8V,6HC}yسAR-wr.>Zy}[U68n#qNӑ@b9[. Qv1m 9%Fġ 2*J,b^5hSӊ;QnPjҴ;h7hc#T;U Pa49ôPdd+ +%C\T+,ZcQW{~drNc6 EG7?[޼BMK.d%y{w5C% aʼn%\k#׻l|”.tcjb|>'>P h?/[}ɧ_cn/JϣlT3Jx䨱O63yEǛA%:6_;ҏV?ju Нɿݒ" ڊQF/=^ Qe}WG! 8 Z Թ„m$&6Q t,qV>r4ӮO,lO/:^@[W->w':TSllu`B[sGb&>Q{SH0h Di"=8%h>%kؑNp3ƒ4{Í#=Jn!lʹiϷ)amm$\0]F&3Nj+٦CJGZg* lw.*ʱS7BbLqD9V'>9|XL+XkSܧSÉg'Gkl\toitGV}vfnAID"Syt$ PPWδ$^L>U 6l7*l zƭOpѩi}zg͍Ӵ6k 4;[T_wy)tftJe3G)M<5k&thՍ:y\'U1p*x4_eJPY˸=HE{[Dao|k^$SA*c8 |E+'/IzWɲ< 3:)1rQ@$MPy&6u6ԍ6SqC옽:CD-m? d*‘BHli.X(묣? nJ7ڟsu6Á}ѴLVRW*Z*F#Uy;njT q%]6Uoم uCw]p].W0Q#t$>2 ˺z?t:xqU/$Ģf`+/&fqkqUq;huy2wǛГwҬN+}byxT,zq8{.22\;n̎Nx!(AGl]N:p);+Tau(,NPH p?dѴg3JŻ+WP>1wXyYm6P6IWaMg|ت)(e Zu& KOc*?/}Wp~i>feNCi^a8 *ػ143܄<~ׯio/`v;E<emT? #Y;@p% cHj68l[naUmcO(Gъ KY,*AF@0fC(t\hsTPcߖ*'\8ev#d\93O^I5JI1̏EpHa~1cz><~tl'1Ʃl#>>JKxJ-ù)rtooBO8M>rYUUoy4XpsBjL{Rt\~xbt*-N۝zV_8(&Let&W+|iH'~h9:@ʄ͌3+D TaJkDF!ԃfaeYn^, E D?F瘭""2NQNȚǹ8I( ]nE8>5#'h݁ Pe!ʭ;FXiK $ЌCb e&@0=ZC߯3N\]fo:[x &n&c2l~2ȉ 4lJXJ=;ݮ4YY @By>nYעD] ur{Q}b+%lr|G"5E8vĴjMiAP z L04݇s}!JUG-e/ 2~[V MTKcE0K c0*-W3WY z"G9TB3s)# \B}|yوlLEwTc96vFFOIFM"/$|puTMA,q3˦`RJEue|LG(ᰡ.'X`jhG8ܸ8ABr JU(^ZIPX>uEGsE` ;#l4yT :e:.GcMZfA zk(ʄSjI4Fa]`̰LJ[Xv4Ҟ:Fx$LGP> *:3<0 m mxD>'nPҞq9LQ.˾v)6·VܿǮ\.8Bc-(<#<ܓSȯ sV0)HӸtY :HAH,EH_,qY9] 9!_긷esY> g͛8b",R^$*k)ē Ϭ)JrT h544O E.3lb["m'qܾ3lܽb<)dM OGHqަ|8hxc [) ۨHhM^d0\$=HWut*-44D9#XDw"7˭Х*X#@?>-1uAtP]9 װT" 6<ڱ<ṱ/8a3TUaIV}Hǰ&jQIBPBD+0dVr];$XOY&(͔U'm- W"^(l'+ 6j#0X_Sx||:\Z=IZsp?޿!c|rsYpdD*ǝRPeܶ78jnٴW>detpZluwzCF)hX%CE35mf](qĸ} zl:O7US%Bv|LΞ:{;KYtv§y Cx*D lBTI蜳`\ىiR%,Lk*a@yjg:[? KW}R1 KN!L\կŧO7A }rKrH=̛֨]z'5%;%S`W0ι6%f|z) z6Q0ڻz@;2u 4r|dXJ,C'e;vӓ3ċJ qUЕF/# O8Ϝ2>3v6DRe'\I[S19""$"[Z?ެYn5(֨RMdn?mk)@xQ:=v"(W>Eʂfq >,O)cVmvUlN'eng)ۨw583&\ON8MѕcmKJBV3^6:BC Rv0|5ԏ#q2EKGeB t0(ÖD|2s?VmBval=Ӛ MR7 <>f+x 1Z,h^ \OfHU+K$"^Dfq"s2NDM 1ua؆Jt<@72,SizGʦ> G$;؃2:`OFi8Z)3i!-QpJ9y%Ε,vSxF.%BRRh7v`A4%xz9o6HK 0da!a,ElL c!!@ BH-3x>8ss\ ]Ni.ocS-*t{yƫ2ka׬ r'4JQ қβqxJMvBhxj`9?L<< ? tٖU$EU|-M#3'0[hZ҄2kkż ۄj"Dw 8b|=[NǠ#ٚ9>\U]q2룍'h>ۚK+øat~P\ Dc:bCADw@-3}6LJigc.WtIO y } 2X i ~9Nvhd^>hM98,NJ<j,)S,/J\Ou"/˸ktPBd@xRIjN)j4pJh9N)MJIU"JUSw8/j}Mw Fvm5lhw+4~)rfVe @Q-4$w9 _#N_Z`T&,VԐt8hu\`ϴ𵊆Ƒvvs{wV(O= LtDni G4c5v)jk3ԳJ QbUhj7ȫu;sWAD|fQ_=bR3'݉м;Üb^SFVh_5"_lp,'SC#mR\7?I:o33P-md7j 4C_;+P+C: 6Jd]D%C"f*OC+2 Jkv) mخRirS40o#4?}2:UgrPb2^ɮ+4X@ "1tnД i3 Z-oNHb:חthbPsB.mp3B QXG)4W񔠇 Ⱥe'bt̰i=3",i9&?;"+}-Ѽږ[_X Bʑ+ NEbx 㻪4YhS˺HF]C&gmygVLO598Ҏ#٘pϺߵHTfz*ծjuqJ-blryRPs &9ND ;cO3[SaN_׃>7d?BO?KHz?pRY9V}]4Qg Y OQJZ̀TQ~ܳ,49QKACwӑɝk*_1_u3gGM싿lS56YTi&{A0?+jbǍ@&C7FDgbE9حmf@&G˰~e,l,^KmDO3O? 6(5jTy\Kj7QGǡr>avXʁY\޼'%~J"-.+JFQsc@=fi.֚uJM&Arg*=bBq=e'V %i$&()YҴ-2cs 9NN @[K\w^JA ȴtᏥ p!l+`dSnVmiHi8IHX(YU%k5shbn .G.$'6Bnbۻ8>{fpW/F}k-MJ Xq`hgbcpV|.|pSz5G{Xۧɉx;Ekw?vy3P:¶@i?gn 9j%sL>Ce| |tdl~l ˅r9d+E3yO jlou=LF7ђr W*mI xۨy"2Xp\JH9e ~P1Q6%Mr%G3/7=Ί4\a_{.BR8CYr$6Ȉި ak01 1 r wi~5g+ hYiUP2hZ/D7]y0WIKZAQp0^.d6Lk2$/4KOk2 lcN4_,ޞL`u)6@w$lo,e}S&Zq:(aYna{;CwP4hH6c;^EQB厳0ε+̒Ȱ8NFd4,-PWyU_!3*͢&RJDogԴd 5SoOj(9Df~ڥNOuQai)N8V3Y4Cɾ&pi&%!90ūx/tN^eSmc8kJ.y]}EG;i& كjË NETa]@-UKczŰo.f3nsuGa:f,֠n54ӿe/ ߮F"cp0|\*dn|"|F9>ø\Tԙ%Aks&L[4A-ZבD0ghw;Y m](Q;Bq2cIgd #qsUڋ+7 j.tuF& ֹ/Dj,*Jgb 5CQTe/(H@x?0.+邉QDk@ 0Z67)2 ^,ųAjc6y^xڀKgD038I+{ARP1H^AӜad8,@&W{1c_Ñs(Ǧfu[9PL  a S]MU Ed"KIB`" :ˇ"LuRepX)z/r2LC)RsowH\o[hqO;*%^!,h۲w 붭<Ӂ旻0'A Z^¹ò.V m nF t }M#m,#*LV:P="j|ڱے9:UGF_F鲱C4 k e2V3Z&] tCn0@@)4gç$\KW 9'zv܂#)ʼ`%CH5mnФN!\{ʒRc&.ǺV3r'DdP=cN[zb–ؚAhMlq`), oa؜D.YV؝? PuR\Jdv%RQ2MɌ q+ hKr>\=Ѧ'~'h6u]15x@V}[z# e{8:NDIVf d/!}>G,f3T]i)w :7m3>^BƢ&6l7,N?uu2>Y<)g`v;F;)ʖeW[?&ؑ(N#8i2]*`OxOxjۆ@NDHckH1x([I0~.gA#r\Є˯A1"{TOV%{X&tx`; s.,}GE*#A˻`Qv9UnFUB Z43pRyz!{n;'gF%$ua4#SV$D'6Uh{gErDh@ǐg_Hlcs'hHbUKk_1SqBt `z;U#;lyOdgjl[ nGcO^24J$G+Ɇ +\tR}( 6fr FI8ic+rC cFhB Cy5Dn=>zs6|';J2܃ǾDbɐ`XՋ{؅wc6E~`, OVX/AYLKU!t%XDGz~g1#GSO:jT=AHOTOmsQ00m30T qʋ ag)e.z[.dŸ8fiPg=F1CrTXB;Y6sD^CXaxY\{PU,$WG-(c(DܾS7eY~N9zNUu:OZLA3[  b˅ƞq쌢:3PRG=lR[ZQ+ɯK4 t.hW7'Ssua#f@45yK* \?8tF{oSI?SJ:,O\sWT+MvA.` ڣt|YR+NЪC~'۰rg^"[gn ڮ|Ag1hLv=nQ]+2o=IY`|B9>gyF`gz 4w'&G,(-+*˦ Dfz!< :$ nԔ 0^1F\F"&jrMi.`x?_nto|eѓ#Koꠦq t&dAo,IǓSH<N"NI3-3"CAO(z E5|=iүRRѾeL2?Q ƫd83<k@#Jb^8!kI8_qe-!J-i%p bxս޺9؁$Ga~elۥ""s0Pj޺)L#e\ 1D\=GV@j<z7+qm]q7`e6`XeXPa%Ph2BϪrO,*rhUB阄tE;MQDtEGKXmɕ_h {+ ܋[?1EziWO$ aZXS")"OLYk3V;۩C)"~^N"C-"d2ay>S5%.$&NBQȓ:eaܩvl=ozz|rXLCdn:HOX5O~-<)~:X4`qNcDЭq+ut[mAX_Iܯ7qšltE8=ʙLSdm82q1LwRMoŠI4X{*W[*Le&p{|rpz.!(3W.)I Px,X2!~V1nhw/z؝LF-͜GOJYdzEQ 1M WnA2qi2 0SdQgfNgX )> jzxh&ul@ұzJ%)ie˂=twt?|lѤ47|h'#^-g bʽe'k AT7(E`M`p|)ަP; h"o1la>^JСUg 1ՉƷ>P$u'q'vҭ̀qMvУ<"Ԁ``x8T.Sf]'Ϋ/0.{Z;- }7dy4)_N^+ϑB _(,C๗()MKx ^Be>aʔѣ8 ^խMm S%-Fed< Һ#3B\0CFQd5,0v2_@{sW ~p_XdDzztclV璶tef!oF`U&،Uȿ2ˀ7 \W 2]`.G- JܨĊ/M y+6"@hcw9Q0L,ڴ>#0&Ik+bur/`- d+c++p˴{!Q|.K}B03^m'J{槑@g'Ve60QeYOK&0¬!&PȭOsE?&wi5߮l;o(U:e6 t'IVwFqg̙Ib76Zed B3gx-pԋ|TubA':m2"'WqxXbU`+@_V0gPlDRmTæ#)a0@ӎCx0.p)VF Div~i <N$?iRwɹ7`sG#S]9ޤfƞ `MOH0AY0hd)곲RBQ0Ôac >Vu4Wq'JQz]+$tÏ}^I8gT8W[̂fr!{F(DUæ@v$}f ΁ACӢ tY;Y.b\|ܰ *ajOg4f$"+;?X|-z]cxOfӂyǽ.7}oE2fw|]`i`*Pw`,e4 `p#ҒBDomAWp.*Ufڂ%aIpӾRu8ړ~0Myeo_׆:ZjĩL%ߋ<^ƥŮy%7v3/fgT+[y?7i" ML-qh8V;Z_bF1 Jdq NG"7뢸2<2E I9te^#N{slT=qhPXkHWi61R?NRn@[_^ mߟ?'&P #q<@)>tWr 2:2[HB?r#ٻ㮭Oh\1O1(*"Ȅ/~:=G2"dy/a.v=r`% :`7:I@(5GHӒ1bиY%~9I*@jkG2R2wƗSRd5| 4dz!;l7I*(x1QdIGqSr4]{g~lƺٸEЍaQJ3Gr:}K]0ZJ^3P I++hu7g6(D?-Ugk.Ue`B|&Rb"dr0]4h "gvư0 ݝ(q,Fc/^q8RrG])y|X։EaYm*>6ѓeR i:(OT)γnKYE4|l:Y0﻽(ڛ 4q,*?-.)MJ8!tbRΥj&74/k4qVI=C/%EG>?XWQl& @xN;F[(F0+/TD?\dyJ ;x; Q-̬Aټqin%RTnwD@`XJn-2t`%u:wqg`=C9x.3Aňx&$)7#i\޼>HHiΝLj~G)țA9ӫ?=cO?[*(gzTe~A͓MJ2-Xߘo3v6Nfap) 0Mdj\8g"k~N}u(,jQy1JGl 9*=KlXfL^Mơ gEN al\[_Z|PW̵¬úp -nhhC#)2AˮQb- 2B;Ds?$xN(gcnEBs:0Ug !o+t'Q/ʘQLX567zLS*ɄqcYjiyTUɅxV%KLC.XLE ,1]ٸ!vjV&;2%8o7Ȧ @vzK  X\ձaAªG/T .ZЕ7 A^H)Ez4Hl :]\IyQ\boMV̥Bbw)t zpAj\`I1vV])|CL&N9B&Mb2w ֛Q!uLRO`Z[`Dܐ{>8TfRGJTrj  k-1dƒ/vt>+} =br00Vdk wfΛϽ[7@mû^vN>ͥx~|??!n~vc!1u'w^(VϞy"ޟh.v_M{7%.l/kNx~ȸ6 TFi{%`8QQ( ^{O>ڀ7K?fx,Kʤ"o>Z^:e2:c)-lz*xn{Gk_O(4Sy_B+!ɴzl@A@"`Y^i)L ᤷɂE`LS[ܝz40D1'=sW*gEht 5ș{iaczUR@QȦ;o_l@/L&42H?"g G^==6Tbf,w{fEMȯw15x^v#w(opƙ.L+pětNҍ0j 펔/_}e^_:n863d8`ӵ6ث6OĴGCe}o奬˝]x7RƟ}wi3q %y@iV9hkTia>!_`~ơŶɗ01FEG=6K6`1:GOЛ_>y4,}""reJ^,y~w<-}Rې% Z|W3n*ʂӞ,ґ×&?V6|uw43} E?q]o?{f+ ./yvߐOQX(!.VxHohxo(y1J_mbx߿O>@l^EǪJ_jfY<ɔ,=fٔH_",7D΢L&`bd3Ol3:yZ?0G21?Q*٦&6Gݟ5l"YGOTJM^COIQrJS}-f BEzyOL}dbGh_dZɄ^ii!L ]w(Ô[1 7b]OV6j(4P\Dۨ|2F8qdAT'PiD۬>'-\3WHдšFwwA~)0P< cD08<%i[k3J03Dn$}m͗abN˦ 3eҒ$3X$Yzc[!fC,13ٔ4HނvL‬YocG!aW U(-usjUr:3t%،<bٻl2NqmcS`'xbS?u ^<ӪUԔ{ρG 4 ЪSLJ8;XtޥQ :Ɛ IBmyCnU7EY9r-ޜCRDIENDB`youker-assistant/src/res/default/蓝色点阵.png0000664000175000017500000045616213260315532023057 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp CXIDATx|ZnY:?ŢHIA @#1wwf/aKRNWTpwgΩSbb7C:[7$i7xoX0,_qb>Я^@Ivg巒~aX:@=.>~D/,Oz_-.Ka\2[}D۞/t>·..ˣKGY\Pδsw~5wk7]탺 CKcHfw8oReC'm5R6(Egf&jL|6-k],Y었Lcŵ[ IӋ #m9|,_#L:|Sob5Y/ExqvfDݎI8w3Ki%jҹm\}~OՂFݎQ|AA ~R ANl3jG/\Q'=*X|y۵}D NKk_Hb}JH`2/4Xn+G>~F~^}J|f٭chx !u;mXMϝy>µ݄eCr[—A8ؾmNi[f5I$wzl)T4{˹]|W_u {' у=z+L/̭nPwt@)&. 5&nt('gd0_=;3LfD6Z[$Z)#Pb1j5m "g،qfv¶t=3sIwY T7AO94P/jj Š.(dDy;&SHnLX4k)^S>ʏ yd”4ʃ%LﰾBѸ70+rN_׉>mOܯFV mXfyȏ'9u!}l{\G$uyZ9 e=pCvEYPzhel۞}"c. q㜎 0c >>sȇ^HtgPёLi8cWX0#Fy7]dN2KB 0,b .1xd8- t-ɖu\xp:MMV7Qެv%N WQ|ңӹ9|G]w+# ݰZijwKSt^t]%D҃;Q&zS^LTA}п@B# 밑9zPBne p`_V:ϨS*;In:ş0: P #d 72tP`R╱,~84@/vhSW YF:*Wb(>g=qB@3ߪ}$G';A#`ve RYݖcHAs3Us!ܒBǻ\ E}.1dWږɔDfHkP@:sMO1ιqF'þpFO_awb{vw \}:|_k0\oguFЫ܇!6[8 aB:jS O[

  • NIFM _㹄w}XuvtS TKض5#$Q)l$xRVmҌ^fT+9JLz>ҙj&#irV-yjR:lVVy[7t)}<PW9ln] ސpf&@>6L;&Sv. aH~6ǀsv8?]u"k]]Isd;KV ig$DEFX!7)VĒPYLz5k\stO:@CŶ1$vISXPpaE&%fܛi5%H.C>/gE<>uR؏r] ^]ĭ6(ѵ3IS|AZ.oeHaa"*!Da[S6݈Ӌn WLPm n֏ב Gf"ݼ;Gy_gZ&'<;>Fϭ<7W!c(|.rs5mHqFi^dӃYd/䷠2/I3JsCs6*, rSBo48E4~' 7ȬMK!ďW =??/ˍ!Pr"رb֙p6-'ّ&V"٦ ԤYhJZt {ZmPų-p3vsN 88 wNTrG;3.apnO4ws " qnuBnqFױh>"|}QiʝJ'ϛC_r}Yq9)\'):Rဣ _pKesVBx:cI:զN0OyUWBUvklQ44T㓄_ݍ(>CȲ_ ws]\B!\wYeMWUgH٧}~.SZw7m1vM=,x_?z.G[^}w~BP5&P6Kn'fgY__y!7xfsXoL$ X;Y3ў.E}ZM ,]Yᇋ|wbLү}ƊvNFK /Z30& ( r| J 38W!<#è2!ELJ4fJu@?QJ}2*R&y5jKq: e%_HO ’ʖ'8)4ƥkI) U(<])/!+t<1 L% j:s狫I|j6ܧSj4'TǔƑKB^i6`xFUrjAM}MmnB3+Dnvt.{{LAfv-Ԇ(/햔R*k=FVռjOE-A"=g\UJ7D= ͧ ZW( Ijb%RqOE "CMec<'IȆU0r$#AʕI"u 06\TΎ#lHVNt`Z7ʸSWm~cW]@h _x.M:.I@k3K M&_ >'CXM:j aj0ƴ9Q/n:nPM/5X2{R-z]xD)~2֓1`f*;]&7.6V=q*!T3$"vYbT+Z8' 3roEH'3 wzPynϵZRQ/~g^Ѕ3Tf n<?(tҬ'L>?:t by*WU۶ RNF?q3SuYWס EK`r`|bb7iYZAx$SLjd0̭V.?s+ &)L ^#b9>dj68e:`x{d=X>vq"E r=^_wdyO^zP\b̭gʛ5+%Or[{+rf~ĺL*UxiN;l׺F?bF*;D\ץ5L{oCvٞ KZ|Bcjy܈v4Y kmNNY]+hr;a?>t7GuO!fE4n&PTFi(Z{iJP*/j*DO0F} D 6YΞn[LfM=$"xJH%g#Jt+^]*|ةy)T+yLYiNrEk/jə6DHWƼ(>VB73\V3KZ- Y%8ōLo@T%(0m)wW,5@-QJ?^P,liQN!&!65{PRSPj ɬ2,Ѽc'L)yID IPČC%C&+AJ(H2iW8쫬$W$8WK+9}[Czzl B4Cқ^ wܦ@d25kaRu5ͯsi.%.䇬T= 5V LnsUv'ܦI $F~Z(s㈴o0f@w ?Y i-7؛̑X5M|(-jق92˭Wd($kk( >q(kcu(kԘep$Jo,FF=?Fl>ߠ{\HנGTGn^kڡd*f[tRҖTfΘ^lpn2,wHt % MGxwݾ*7~;3{.픉Ԣ]5֒;E}3 7t.ȾoIzQ9TjP'0Ew_ dv:j>3,*K!lB6O3B94VR<Tvba;W }0(0G (iKUm4 z]9{K4t$74y@8SncG 1#o E\xP87<=4.$mdPG"KT‰lT Ǥ.k:A~Ã<`+92 /%VE2j *Ǿ]!$=9"*5&Q\gmXkNjjL:KR@0jһ#TpO6P8+m{'*bD=ULq J6آ>}λ lΰW z$&GrVkNXʶ]YSJ!^O!!aN6:)bvX!O DFI+Mjx*X͘>e~ C|u ~GuC(4ȸ9wy6Iʠiպ ũ\3xZu5~\h拒8&+JӞZ0bTZOHfeAz|][!’A" AC3BP< 3Ta11Y}-Q~ݿL&R xM.Jk`vvtv{hZ׳/YiT>"I}vɂ=Xe9/FNڤk>视slޏ1?Pvm,9PG\g0?8kI&֗%vaHn G8EH$2T%cpH8鱠i\[u68@KеdkT~ sde7њ8]b1JtֶT{hBb ~`Dg3_ l2HFRD|UZ%&*LU`B/~K"ZrL[~rH* Rs,zZ;! Jn،C>dMVP e{0l.SvBKɡvI>\|.jo^h͈N|͟1}\{iɲPamdkڳ:s9hfcl$Jqtuzw9&Cqȼ/ alvXfݞNhgd[#JItDNRʳ1O ; Jf-Xz xr]+3qޓMTyMM3Ha`co僛M%uߵŁkbR<峕hfߦJ.ԿNS l$ԡ`9Ne[pHrZN2(IZ^,e^uTi;$2`Im7~4'<(q"9N>֝Qn-8xˍF/_@f w<<٣Jt ƘxF a&MO śfG^MS, y ҳ8G>_ɛwQ0}CDs-[i|~HniJrf}ui;*1*BzvՇD%+z=v;lWSOv:ك!o.w]&G^b2;Odnȝ `9GìSՋTI呥^_40C`%/ σ,P9)|[FQraH'QrCjJmS5Gml^5 ӹi.gdF`I;qE.Ĩ,6"o}Zt9OMˍhhٺ8M-uH|2O-S#<޻tj̀ lvRv 0hJ:;'.167LdvLZOQTLnCM%e_yxtWEkDp xst~ҁ evJ+f/yK=CD`χGH<{|p4`IZɘ75t ťVq(28'm~q'KS(.h|0at8!4j ,y1'[tY|q7^- 74>%߻+0t؀Uh78r3K}?bOiᘼDD'{{P(Ur,(n)l'2͛BD@-@. #$js+ +M :k>sjEBorw֏i9dl֚(o䔬[it@YA:xZ/L%N&y3])Ʀs'oy,7G(i3,?KY ;.E)jbZ4+hVGI 옶EO*I!4o:r&VJ`OZ=[}}QQ % +Fm88Ҙ+$#4!Iyo9:{K݉΁1 Üo89 yN(2`_L%Oۓi)pR\I}X5TL܍r 8#[쏱}`zl3Ӥ/!3I_?#D-ߠ^nO޼Kv:skH!7zRhb\VeIAk PQT0lrN 'PefHƮnQ_ }Z 'WxHՠ/DI85z@sXGǘNz=c=|w1<7Q0ZuN]uIo*@M cCREΖq}toH<6V.o缞FӬiIcmn='[:)Z7U?/wh#ci[ ~;N%C̪( Hv5;ݥyש%wDv-y(W %o+OIDm ~56nFD^h%p^ﮓ,ݫ?8.Fܗ@ lv|F ?@}B ЕF)B.ŔQ4`B``*&K-_h+H5zNEtA>u21lVtI`>X䍘_fǞ7(r^!T?pE a DurF}.B*v'`"soEPGP=d8G.2^^i{H(×[lX߿oRSOh<ީOCo+ւD@ ӎp9%;Gq*vdޠ:2?s/RS5N0MV}BoZTw|~^I0 MenQ]ktke$LusI|0>оwt%byx$\FѰ5iں#!h9QԲ%i  4㊱aq߄.i܋e%͞H aY'.½3At&6W1jG־uHm1|\q7fJoHZW7r`I$nZ߬)1RlxӮg}u[ =u!?1=Σz¨%N=sOrx2CUoD؞W @f5D:+q1߀ϳ)j\yEzmt0Dr*gf ½Q(ɜo GTPQ|&ʓyoễ~|1ٲ.WeOX'%j JK'6*Wq})$_Bǖ{N-4s,q xγӲ4*}*;6 @J;"oy$y@3Nyn纸p/`@v+,w#ujL+~|cbu dOWԾ!ZV <Y1ad i9lX*6I`)pk1o %{́.*fM^/[|"?,D7?c-\Th@*uϮ0H[{PT|um~>\×[:9q'yշSFڵ~0QtpK;J@=4[f6[  ,Aۡ_wՑR+~Tr~V)sJHSMB~=/^D3l}JO!͡vQadx )c l<6=< z}"_菉 A1OVKJKEx*_Hڃ2O_(Z%X.ZZ/ ~nԬ$2CĜ6ק<9 ZYQ0qXDjGܳ ,-2φ4_+;Dxa?B3f=)M>*ͽϷ\wGQs V-ĈL֧6r) RXP$ɖr~om!VgjfEVՖ6gTdZ))nt|Lb6OxH D(ۿJ5Kq/R:J@ٟZHI]z'GQ+?ٮOCT:O.]zwA ^(Ń|ޣf%Cf\;~]Px QQ>aUpR[ ۤpOga,SV@7t5sZA;FujUY*_A7%]`P% YNnxFtgKp>u_JMwMQN@*.(sTԑmF<+4*:ԈVurYm<㚩:ڏ6YB>-a]#nf/oHM1f;.yGl'݂BgRoUdExjrUGyKHj2ْdt %IҔ2usߛjCÆRR@*GH(kQ !RMN|7xvV}](RϴZSS{th -JH"cJ[لui#H~?uծUf@(>ܞFEd7 ^ȗD([ו ~)Sm!O`kkvͨ >AW*3tݟUJ;)sN 8ΚΟEwY.}@%8-kQ_ZnuS {2vts>o @<gQ Ͻ%:`Zzӱ9 {cw8XJXYUpwLUdm|>"͖ogor]/ 5E}̜\#)T-f az7[Dt̛eS2|{[IzfmXZXI0IY״z[ 6_/eN|mƓ"ignYῦLA#UP*_Eڽn+W7gI:/5jT-_=nH oK_Sl}ZbcoA kjo 95:hLa$+.an^0`œw|fike~M$Iy}MJu@3j0K|MO6O"8Թau&S a$$KjMb은`|ӇLJ-w}+q@6sGe&,eI[);wdBsSpHVa^M6 ]Nۄ=}W Pmlk{+,YBh5C~%>xD[cΫ.JվGܿgs"d8\GMwFOZ'ѵC\A95_cۑۑ_}9~ ֳ!(K{!9LUiЂo8~]o݋&nr7!8^n{ous;(^ d~q9 mf7X?Y:EgJ/h`V&o MU8ڕmNuA\*U_\$5^؈c#G`=5I8χ5I$[*CQ o2\ xb&M{ '{x\ĩQ&:KDz!A5>2gF=v~s˩pJv>A qg==2}+#mą)bWe];[-jz@CYd}RAOTj+{/J<tU'CfGX),P$ziZ4Ǡͩ PM,W8ЕԞ#nbiOHEz]/= ~ID:Hh=z\Y ǦkFEP HLGTj|U=5!9(ϰë_j{_( 7N@&ewDQ#O!?O>3A< gk:%ρwW K7,sp) _m"A]گ(WTҦ굵JiKCiʜLZlKS!Wh.xsluF,ZTCmlϲ1%[w݌WWXkɵL Lͧ#f"ߵm{g_o^z<ݼo{'w:<-O]FhTEgj>O4gJ*YӘ@mRXWH:\4 %$e mT1 +! ev9А4)DD 1-*FFi-Ptk(n?E -Ӽ@V}^c^٩YA[^idl^NhL\ғquZA>Ou UFz{tӺ)I{!}4$o؝n\}\ѧ hak[KuPA: ?pY]AW 6o>t';1du=[ҽ7k3t] VA# @_訧CxFm|5i[XϖSovsj<+M輯D's'4qkOȢ܄ݦ~:([X4 }PvTB}޵l"Gs Eh6Krtܘ+,*: ǕEed6ڑ]-c;Gac_(mc.maq+N KMiN5r1mcI-q]E9DL]Om;)@mV5~i`s@" E5J4 Pv%.mP;!П5 ܟiXV"@v`EeFxctI 9;Ė3t?߁Q3A]o avK|uC 78:sKΊOwhwUn0caR,_?"iRrT0Vw$χflZKU8ᡊI+ :'+'Yg!Ms:E}h[wG)tX۱;Vy< *k1JGMZz~M&j_ԓ,F\ mZ(؋KoM4X&wͻjb9/%ѷD|ۛ3KRx@uudzהּ}ZxηB a=4.up$x8J4ԧggۨ{>QRዘϝY) Vˏ*]gwfWizm8Z/ #S jL )ўy)}8 y-ۙ2%,Ym:ɒJW'S9O,I;m͓6{.ݪxU[xZ_=xf]OޅM:ߞvSoi*d'ivER阣bf(9VzohZ'O}Oa7x߶>\qe +7{ UKg]O Y6Sk/Z/G{-XJ5mRZ#b>(/#Usgj~RZ,Ugb8B7~F\_zU?MyQY#} ?Mt/5=hGxr~}楂d&bMc2H>MXlosZ/iXojV'axpǍ ^_x}|9[@£ߍq`8i$i͖7ao7ISϯ멊S U֮XNuƮ/PP!4m%Im)OV=Ȍ`)B3t-P#`8؋whшu-X;(}?hn8ꕯHvl-h&<6U&(q4 oc^-!=SI-_lyzR ϢG?>_ߠh ۆmVl;/_ <~]|}6Y*rRx-lydz9S//Spq;[~?ֹ. ?h;0@W(yg؛pgy^LH~_%atK=3rͿsCxMw9mc80ml{zrQ[^ }MVF c*?%\셳T{jyk2ŧl¸rod|2A-;&\hccyLicٵhrQRU, 2Ly R_7 , 5 [t p[ٛ|9ڶﱨ;%TM(}; p5Dz%0n9\'hcښsEq=Їeƶz01Xأt_Kju'mzĨqVxtdv"undbQq%W{^F,O/_/B|5|u2P.7;?eb4XJ!w9lbp7LNZiwG(g%CvMNp7+Ex8Oyo{6=|p8gݧM6y?0 3k^/pՈ{=ITp.gZ# q-m+U Gk>d~D7W@ov 47E'<.]%zRq_᭔h ˥HkQ>}˹~b}c4ߦ<>ڥ%3RMA;V\sC:*Jr2.RTsI&W:>us/?)[ڑN!BEsa#CՅfU W~ڄU%`Lσ3N iJ0{p9\y&جmxR瞙?Jy2![E|2#̪9G7{0-eЩA砏3y ߓGAdR~9N{'7kXַfaO"^~|FŠi≱% .S/f@|@ Z8^%[ruMNП'IB7nx|D-EctK`ԃ.׊P7D `w}λq. !}x j32lClŜb@J^Xׇjl'$d] zK̙ݬ)bNfjx5&YB4R.>$8Nە\z)>#.ANSC+Qb5lk!?٥C9M3?*Lu6gu 2ntͪW"u}mL<êe`n`@zi3brEqJ;a h?du|.|i /w`̉z!t#-s;SE#&(w 98<0o)l)Va7Vm[dA9Dh,0,lnmh*^׋xM'Zʯ¼:?A_d*+U$ڦ ц|/*N[l _VLk< F~=qK{OG5umIX)o~d-4Gzݝ5 m|-^ Y<^w"7y4r:=|SgY rKj׹A@ݨn6jwKDe1Yۡ7ހuɿ^.a f"gǬ{"<ׇ.X2nC0kq\]^csw)CY]2:tH+#=95+v\B^޹vVW$s25#'5VʴU vj} @'Fb03C=_5!z4ݘ.0T)sOU(!BCrJ=Sd^K,r]Wp6g~}1>h.oQhKa~p0Ję~D;_g3 ;|Na!keMF{!2T]T 7?]˃7=J>Ҹ7ڞ$FbX/cȋ6YlDL4P}\X$9VaT{TE;_ ._? Mp3ǏI߆4pʴqi'ݢ>܍Mydo=n䞢jl@A@KbwRqw;BbT& }HJr.'7 {WWZ\b>ꀅM f|S M1W> Q,S0?9d60Fsxz}Ll>nLKc쮮e$O}qE;9JyhGVMtLjYNir%#gzyC>Mf7֛=@|iYZ hBqLȜ?=afoN40ǂ/*XNAi%#N^20w'Dq(/hyA*oU F%ZRFaj tC9`7SҤnI3-5y#ҫTYVj)uQ >( I r _޸wxaVOBۓ/$ǽJNZ̗Bg9th:~yƜ~Z×꣊'zj|?@,__s}lc~-h 3e,y=!W:z:6zѢ˟?#չB<cBI-y_OY}t=8?4@z^>y?_a'SY7)aB}ۨg y5? &\Axp_:zB7+U}^f'fLy ez;L)Tna% og_pbR(Yх;n+6,J6=g˫Ssޫ|s >݆.M6vn2O"wޯvht|KƀI1-e^0I;y'Fp3UFKY+CO*@ I֯54plƒ)yzvzvp!t2Cb %* }6N*wRjOP߄x:x28O$>`SfϳW+7t?'b= bl뭘Quلwd_ǪL1[IYd\5}Qgc~Ri\z@-j³)/VI(wFWjUk{6AWgl#%į^Tq\C.@l|,6w =|쨫c;W6=2چօqeh9YKtï % j҄?u+w1@uc`^fl.EY>l]\?Pulv-.,%4藖6F68g w9`%a1w=ϼbk~ w|va֞]]&'imqL0;tv".PL_#H䱩?YLlOo >";1Q.aL-dhGuCnuiMh@ᵴ*L[ Y+5v{Gq*T瑱q{i xA5>3t} aޱZ޿go|ٿ@9yr]L]AQ|dMQZ̯ubrj>AnuFȧO&zVng TF_>ۼgxf5|>՛jG_z.kyZSJb)qP2̄CJ|8[U?ckntwkt{xn|4Ʊz i^yj77M9Mػ.6Uub՗u!_(rK]#W& .bn\;/F93Y/Popq˹q/ܮxe p,66ݽh|h1^2kG|eDP3rpEǴN*u+#лft>McгD{kbTW7Z9H.u3~I.M80=u ZSBK$kjscח8gB&Ot5X\{B!S@-un.ÔJV}pY?MS]+ULcNKi\7vs-|W80l8LP>/ QLC4v$I<D-?*H@A+F QH@vUV=wk鮮pSmn] /1YDFFXsH]"Q,-eyDjS'VLBf;^Ke ~TPc.Yּ ESvNJR^%t+5c+YAZ4i9Iݤm竹_À|lFl=W za`4k&T)j*G>Lv: Q`ZrݤV? nc݋bF{}| l `,_*5TrZIKD?h.@U s?zDEu7~~UbZljŽYq}VDF3) *YX8-FfƗް8kF)i+N{hؽg挫tVRTO4ͻElJ[u/;`Ϊ* xۯzaMw-NUcعЦ|@v`W1!7RoKJ|1xJ]onmj[MީGRT^~-lp'5r%p]TĽ-}.w^'=U\!7-Xe zUps(*8gua㛢wdY>\χb`J kW"5lS~;GS4͏?{ig4l\mÙ06-=,j_\@"D>ۚ'%uȈF:A: WI+ՙ莢*m D^X;]G]Yڢӷd[B ƚk ςZjqEdW 8qEu==̼v4KLţqjx`ݡK_PWŽk2"N~D~ aSqO% C;ct\|h%~ܫny\hc xV?/iàM=VЛ6v䓿Hd7Y[*-e&Pfq OdݹLŃ:NO<dYy?0N7\B[EbPPdš)Q&WڍcR:רB_kNiYZWdڸ@c2nf5eE06~dj-/QL@=[4A0;tqlyb0CRcӎ+N 3%Dq"i]2Bw턬u%!\L36 ĿD'n;^QqpU]6MB[&jgJ?or -~[;Tv {ܼ]|lx-sy9?4 &Ѯ\h'I1Aͺ{λL{q 5?qzn馥F Hs6(b-33 H-@kkbQXm+Ю@@o|6bzxS/k0rA'˳>b-U. YEёsl])ӵZUo:nۈ ӝ\zȡO/;uhW r|o#?oz-@xCW.fK-.NfޟAvBfD4:M鯖/s y6-4vT㗐$VS@hm>TWZ 3H"v;c 9LIMtzA_1: ?%0v)]SR{Fln777<3xc2Iєl⻙ HS4 vH'jӾ/di}V k(A֜O i>3wIC'QUy5#ehM[ wͮ0Mς sC#^*XZtQfNK{2ïkFғ7:'/yYO |2{;a&3afL |[9;*YP=R/ds@eaY E3+b11f(WقRóʝi.𞈀R~uqϒYutDGJOay"GcatCgdV;YJ=X?ş~&$>A/>P _ɺgNaVE;}'H2 o2ayygο2)uOUVPx]"SLL(ñilpXZdc烒/5zA 7*wf+(gښ#qK1"}ƚC W-lGl Y1ѳ&430ua(H\=r/'WP/=%CS$?{].~Dzd\E{H'h+J/0T?:ֺ ԦW<ꜿ 1f 7:cXxOg'ϥ$'Nk4 BT试c,$TА @ۢ1N..*qʳ WK#*{ǖ3\ԮygV8X^C小A 'L@ķ#=v 8g>J#O2b$!i*"9۩+ω7rJ1nYA2%ƛqq1X,&~@f {)4NJ4c5/_ y 3ùPC"L*Pg wPu<2rc+|T}ʲSC$s!{r_+;lN+lHeߔZRWCuLjhO7L| 19ISVf߱@?4đifUZf=_ߙ3kF5M?wN6? ДZ.&d_0u}q,G^M -{CbPlzևK^>mзWome?B2$^E_NyWA..I "k8\aYt1&虗US\3vJUd'9y dhxN Q'Ʀ$ڧ?m"LdpӸXmcM #Ke~Vg /8TE X^;Sq}ՃP!dkzvXt5 q1WF)D6R~O{X~N$ۧT^ [/C*L=`AKYMgbBڧ?A!EE?2Zx1ة)2sC\@5/m ys Y*G'#>5"DHfy>{ ='G,/~*^]H{vxr΄p9ƫz9zaV-]V7P_b.`/ ^1%5!s I@iZu덈W4/P}S2i\؏W Fsg }?~jB',l!m諾#3 uDuoI P'}ȟA"M8#?ՙ5D=^c'bgg睮~kxc4pl-zO3VI]>G?%-ɷ8Td (J:!Klř5EH(;R S3d\ԡlR*y jB:'$&Xu?3Cx+͡J႔`uR)(($ 4j<-5T>DGEO!{~<2Z8+~+h؜5p[(j ]|$3 ^2rL,x5):'z-rG׎+(9;lZCu?PqzwL[m{Cc31ἰd,$Ol"ԺA (EBhDw@/ H"#_'I0;ًcg y"Obw t?U 4.Ow>tXFDt'賌S>]MJNLT}>F}ZԜXB2*sy&$Łzڠja>oXZQ9]Ђ1I|: kF~?E}':ɟoq&Aj vz(| IIAk$iN%lR: Cmm*:SϏ&)"p;(=a,!wp/CxtDS 0fMHEsW.e}gسm1"tpn͵-Pc{Zg@I'3àWl 7JHue1Lb>}hol3 VIhRfqlxX7P4TAx *=ܞں&+o6CtM`?,Q_2kMΓ ;u0{ǣ; X>GuM̠=LqoǿwQx?4vyGSou퓑o ʕ", *NM 35\>X:Y+€ WW R!) 3w+ w"@ښ ͟PZM4Aå tR0go& X'Ê.[~l\cZr±." FޙZME\&32W٨VCGz$7GlMVR54ʟD5Dvq ސ2".ezq܁>Za^@;蘟zJWqp`x]vjhڭ$N}k;~r3 %kdO7v5k Yt|U3IM zN|>V_ww\ڞTD Ə4tt$83wOx +\Y JdHo w`b{)Ee$I;6pG-6J_Wme# ʆk~`uzИsV*WP+9[l?x㼌} }\I 9{>Yxlu~p+ ׎_"MWQ'(o*jdQJgM8ν#EO >iV">Kj7̾:"{߃j p@C|&٤*׬(0/nlRёu$QS5ܫ'zz/j:rsoף׍%xdAI<&aZC3!,k/}9 X+u`NSzN΁()(5p*pMoH&\0bJd\< I 0@xt,#݃>6t*HN@ +y3{$H/3zlQG4'Wuic PW$v;FaDdN TdO=O ZxCpilSҧJ<SY%=wIiy{Tap*8{?/)Ms c{hLD˚V36[!bUU{I2gNHhC𔢠~q)Os6n\E"̒`K\M55.4,u\қݨ9%s~=u])uؤ+pk=VIb&h$a%JԳIa$G?I˲|R>N@|9;LY*qn85v۪[EuǾnXts}$P_̯a7\Mt(q;Ƣȝ]E䏇bO n~?'2ObA~ml/c/lUrjߣ{vG䕵 R~Ew+A 3`~c.ySiɁjCJ0E |u֫صSv04ϝMQoD瘷xAxPxt5eYjhEf{n Kyc˫^!@o=<{fiw:C:Կ7/*>{sP?˭!NNa8"<l/VWCS|'P@%XljAu L,l2(R/aS6!RKj]#[[ h 2Q٤&&pg@>IUy>d*-v\-^ 54qtrVd}kRT}%S]0l~rs3ӯ[]#|;; "|9E7{pz,ϝŃq}2b Gm3<: ѾAxTݏ:G;iH4nx˶ -q$}Q9Kn?Gu_)ɣ[M>? z7 %c 0XM ]a!^^ +NVo l3 !ad0yQ%`ӠPSjtfz$:/?,oaAAߐoD:4vy<}^KNhє:ҭMߙUq^ew+ו(`(D.7]{*\Kw @6D0~3 31foFR×{^6/(O֡in0ZQ^.)q5>E5$Ir=' _{ myGxpYCqЂ&bR`떲n|;X""?k`p]ĎJ fi1ل+Oͦ-]kJga.jl0VViR@I=gcn ur%sR^էjj{~p'}.zआ r#/*xZ5F1ɏ>̎x*G> ( mP4J<D{wy }`Jd1} m3Vb!zF#5?MaZ ڬ/v:`"P瑯;TRgS1UoB~k(cX;3_ 7ƷÝ27%}}j׏􍐻X%ŭT`>^TIvӫ|Vgrv){`>^#Q5eWxG[u IDҙu 4n~#jHaQ-ΰу$U^V &ՠ7Q`F/&U-9ofU$ 1P pVP441꜆a~t;]htB t+waMnH+1޴B$AϔzFLq#A iwJBkT5>sWVU~_{80PA../}<`P%]WyxBԲ̌7;Pt=J8' ʧg}4EI##$ n s|$W= x<eOt<`}d W:>Oz>6ȀWGzV"5S|ZdJzd^Xk!*L=C+Oo%CƈɲyrS3"ʂUP_[;S <+[geCSLty$ 6N_UWR䇁$QO%AD|t^\ۍE<={vLp^OSZ>TS`}dž6صW.v}׌-v f{ysoY =B$ЎO+k1|e-#N`hʞH\7ik6A#t*!<%@Y'(>K_:{!;S/tz37a2i4vﳌFMbY.ܴ!g%}oǰƔ!i᛹U.OGWuz[v NAUC;:k_ `'EBb;M-qz =AYH 4 Λ7.+ SPK%گ>1Z2ksI[Է+XC۞F7^ [QzoώiIqg"vKTA9.d0I n`>ĂxUl<  tPP ui/gw n1} OϟyKtNu3z?0 #;򮦂 Nڰ(t̹b^&֫ez$POȽZ1O<ϐ93~9$ٞ8@xi^QxBx;P2jWȰ 0?)}WKЫluѷ F7^ƼyA4#. \WarQ^Lj l"zKLy`@?)>,/o <[:% j}ay*vyTz`'+'㞭!XUh5T)R[ dS*i7q`UZClSFO%8Nښw܏>?#tPL t ɸ|pWofyUBj$xN3Mw0ԧ}_ϣ:u OD#:TO !"NZNgT*%KY6+rh~]Qn4 ?Q ~(( f}Sj2Pk¬ *ti$+/Ǭ(YN n4?fU)" ?"TT4nh\" }+ԟ;j /hl?PCal:|h͟?&+7E],{̓w,i{ϴ߬L;b{8tvX1'W} 嵗.'SUHL<韷E,\(N9973eBۙ|7yJ% t}=1ZU*A_~?Ȝ΅ aZ,'mT4O-wzs-@doT>TM֊[N\$Sl"G4zVsnޟdAzox_tRCR6ɭ:¦.v"J/Ag)@x/нM {7Wyw=˾}v>_RLA.~JÜ7,m oQzraae/Pθ/]{*ղYFajկԚv7"O]'S;]REaɍ5S8%M{r3w&LW9fdQ-Co4}w0+W&{?ธe`ۯ:꿨r*>E*jHQ}U:;;b6<(N]t .*Qu^ڥfO~$PgCA#\PԴW@p١x:<)bQS>IX:tRj %ܧ?9:i` :}i)3o1oT_P$CARtyji:˦Lł\;b}}]%N\crE4hO,xpAm ѧA.E5^Zs]'Uc^MO̺}p>8=(5:˪ZRUc%4s# hTD"hL?4.\@]$ ڸTCgi6{E/}1EI'{:kFޑR5Wj/Gx׃TtOk@|b+AonEN zv +WQ1*GI˺wBWC;_~ սt`r.Ha^5_I!,PQ?s,_OA|HvR]8_XJ]N *wNY2//:nr|ްlx #a{˄P //;@;xz l>8ܛU>?Ȋ;s){ިA$}d9rx!Al=$^_e[/&8]#8_$ii  cʉTœ M0ΗlbaԚns{ & So1_5Kf5QM!`sZF?рRS{k ׳MJ(9d"ce*JrxqjV=hY>h`5ezA1M) }uD ^01`椇-gΉ߭ Kԇv^D1rƯ6=:?$A*Luo_]o"ߵs >Alj|-v!a>rmkQ4 *…ԤN<1HK+3AOI*qmZM0rtzFKƲ0d#O5? ٘xY{.9hU&΀i' (] ejLdFT/t$xF0\918 hr',0#I M_=,5D uDg}R+ dli?A/ v^8O{eakVWE+4?d$׳{w`9>VCSr!zt@,Qe\玓Y-2]5x*xͅ߀EVځYoIT,<0{jZ_u7+BC7 O>ro^E0_#xߘg=*ߎw|^ ^:=jڣhQ}w7_,!wb%o2?Gj]_03Gr#wL=H^{vh=A],C\?"6 gj6Z\,Ɛّ:vp69W6̢\,fqK3sZVlHUTo{KKAvCaQ̰a 3 Ԋ}%} i'l{~Bc|{j Ҭ4Tlv f/yz$MN<'UKk7'D\3HGaܺ?egEg5{a#+RrwaȘEciCMvR݃C2!]-9z(:o5hM0hI\Z*@c9+ԋMvrxSt %S)tSV(NS4;bKZCsF[O} -A "j%mZޗ`}g~@0V[uܾ/Z󚤆:ǐ,RCC[0ꃆAo{ P?f޹-HIPV:W)0~ڮ kpܽ%M#A&b>6Df |+\i(dFyro!Zh7!;u44 ^]xtz9)`u\;u W'}gk8}+Ht›$?|ףUG g_&\9w s3b2}cG4JzzY<\uy`upp|N:s$=U~Oߴ$,6>']"z.y:%6ý sw){! ﳫzǐtv~PG4Thb{/8YXU []Թ}"{/⟾ʒL/?j/wp"yr{U ~'Pvm u7Z>RTxPFP?8YAhZ4b{XJ]x&Vt~v<$w=d:i O,d9SP& ^fZ2emY`SƌVlã AJ`I!-ns{Dq+/. yy/,ɇ$CjswEk+ӘDi>j|EIGwe(\kLCrЂqOw93= '53ZS^?'q…wYu] >um܁ Ot<ύNJ'AN<7; czNrck1"wvI--wq*7} z6bYEv2Q0_u\%豼Y^lL&,y|{!rh(x~1N얁lM\ix< ,<_OGj>aΩ!^C= ._`ۆjQ#u[ij[wIQȮ@?7]w4YyPL]gUFob|.I7!tEO0دC4pfg_ .i m- Z: 8fN4vQ@~,6(;eXϋaqg:~ajX4+nNvgy'ڣybkrMsbh=50rq{ }?U$~Y~]La_n"A:d5\QU~&xkýx{E77/_sSA3Qރ !ww "@V_y#m#_EՑz7 /YeWl#YgЯe'P=Ľsy}HPLX('tfF ׂVѠ! PEDLC %E~I-].b+^v2?DZm%;+, 7td֧|AZG-|$8bPN8}]~ȏR 2KzMӾĮ*)A?3awg`mdezF_uŒ;:|ֵ.{/wj۱9'MU N>n[eJOVlOcvx T@tߡ?,;8w=c (Ȉ3N-#ܽ% _O%GOu_sv6"ZYeW5Ub ~"V:w.vO<ꢊ4]+cq  6oR⌼wa@#R"XyGaS\WO"C< mM?9R<kaµ'ywͼ&,|׷27f<Ψ-(YNd>-gn3j<27ToxE@/UwV0'g?w|1SB Qk\{}"oß97?ecXg&tcVq/Rgʲ y׆[o|:uИԠ"UAU:jW4߈{WrT?Q{*y)n,jofW0E'ͿȍbgZbgm|Nwub{VNw_p&߷Gl#<o019J0oq}p>k<:n/3Gg[}g.i~p>F{\_o,M7@n_?hKǫ\e{k_&҅ stIm%aI֢32Q(Bn Bo[p"U+ 㻀e-4TDo.^¼SV7RS>%o0^_ @i_3r}( vz[_~U9}5&#ۖ tf瓭69?(ntbFh<_"b//=b<缙ZOmɒ%25mԭG>F@~3"%"d-3Mqӛ*8Rrώ}]ݖkAj޶XoY{? ΧP?}xߒ[~{$Ojo~_χon/hc{S׿'8X7~W^tKznT Ib9(| ;o7>+}ĿyXYM}9Mv7a_럶wK=--9b@oX?#Wuۡ{>G/#= oAmF9nC=B8'_~ : __ŶRwȍ=o)V7C'6~TUF_Rï3nϩ$͇}~=\/Ya=,,Aq>SNHV'Yac[?BA#e0m}RPȶ(+[lȿIlO6xmlײZ~%k+ol 9ݠy9@y{K~IԻ?F(ޱ[}$;s|9$n.tjTI?!~ՍtA/gȮQ-)3@A"Y] U٤̞ir<&\2&7CWt;Ϧ T6C|Xq4Ph?9J4Vɷ1VYj~M)oS)!LK%[:MI@MLBsl!,uLf;ՅB jGYg-,:ckiBS͈UDZE Q6e琔v{7?.']L2p5u:xu8 @.; Ք*xu/*ÙR wZKzYɟx+ Mfd:j"IrTv"[뵣s'ԷgF?4;$՞wTߛќYgYT&pW -ccAbBpJLxCd|!NէffaJ07QM- I6$Q@QĻK䳀6Hމ:U5B!XCnJswAq>đi54dvAP%Ŋ1͘36n省|qK :xHWayQlE,կƹV%ZsvR?2=lŴrO=KOŏ^yfjn[PMxC'r<^.RXY4hdDdr5QZ(L\YƺA&3 Wz9ɜ qYb2#u=?2ىD:_ll9?T(N(}WWp@ GBx* n*,|{/"=xx9JD gd>p<כkcDz4$kdOÁ'^7U_{}T_P!1 z]=;b䙌{̼oz .[,q&Sb X9Z5U,mfի/YrE*l٘4Mn^×̞MfWt_'*GI>)j %V?N*2msQHn8 efA 2`1AAEdpeef ]rLQ+t.5VEcl5O'Gk9fgXAW5pln g/ UDEPMaq> XA7J\ŊieM+aV,ZٔY([u*)DkھfX;N-E;,? K$Ee?<~׵kqJ馩ISz۔ЦA=`?(cP T\ZUwЖ1X+*X:5U!m\ 5TEE46T1X4qiVkkC* m)$MO>٫Tu`3vwcX؊-®a`8Ss 9469b3#&YX8NP|Ex/}5ԋ.D.'ǹQ܋ݰur_wjNv>^auԳu W#>|oZ6Ni'aZr?ja^CXf,GlT%\*ΏyȯbBF\/L<7+yΆ{<;,O>l@ےm<YE /g` g}a~z9_j? snNj*AJXTujI_OWF&=T |(x=JJu=Y푛t %K\*M̕t`0,/VC?'cZ"G'4d2V iQqqQ,0 \ڸo)L'2^@/ߞ&?A̐#`>W-Ǎ?Ja{ 'eRCy1!"Pmȣ؍S'_lcsR\$z[qr :@~ XwϗQ%z^e9Lr]b* |^HӐMhkHē\L(#E ZĈX6&Bpbæfc㴸/Që ]ZbK#u]i'AkғX%ϽQ_rz>v2Rɷd6=50JmsBV_(C J\3fOrcėL4u<FٲC/Z~e||?BtolE}CjY9Ap'/g^$i=[sQڣ дٍNݪ i_ȋvKٳޜZA6@$k+h|nQCrSL7{5LR ꭔ01i 偂55thqOL~ OqV% aŘO]y弮&]ᐉX{R}e䕔M!U2K]g gOK?Ogx~#O/H%닚qQ$\{>BT{kُ)=IL$͵ipw{7 ^gjCz5t0K9kӈo)۝BB0>4JUGpёwJ[{,xg hzX';ye+`S3f۫$O鼏h$4HGs;P0Rk/;@Ă13fQurg!NG8B8)q~^J|3Y/,yיӇܔ ΃6(5|JUO!u_va(B0~4ei>]B Pf|j݌#|gJS14_!jxrms}s1zQ F@FGF߽¿A L> 1<}u <~ޣrmڕY&K:vch w~Q/S]S@'Ā D^Ǖ)Nj#lYD^c "]E"?-sj }QXrwٯ (*5B#:vn+GQۙItM6CUT-vPɘ%sWCĢ e^2K&WSk'^L$KixxQcz3jnO\Lo4f+vȇҔ#%)wO̟u L=opL%T'^xz*`j&5pzR155E?>(SS_i@ 5a_}IGPlGM+5Aר`Jг,NAMQ[At3<0~{,-70Ba<*FAo{h4tj 4APW!T]dS|xЍ O3Pw0IԻ3Bbp[,̜H,ɹe"˚P15SbW >>gw_c "@7*AD%g|v8?F9Ekj~5e![7_x! k`d:4Xl8A*r~D ]Fs(vMRo$(w2 P';ˌy/O{0L@oʴ3Kls ;CQzG݉҉hy?~r>!5i,dWG_~apZ@]*\\~4ɂ;KROFBDY~rTh>XP { zKä N")Z&p\~66#fd /dɸxy>T v_Hwҭ)k E-/Z5mRjo_3 3hg)3DdWCΗ+gI`$0.ݥ%+vw{/oЮ3Z>ekw.48(*|4r zǯ'[_ M;v' Oԣ^>GnxH<<8=%h:iWdCc7\=)HdD=*=Udy7; ="Bx/"?BOWL= \8 EZ[P^{hCk/VW|9\V-U=GDk+ /NҤRu\+P{'0ay& QJùc {|e?5w?;>6yF =j5?Bgf:1ʞ3oɔVwSQיu#s?gP/gK_xM¢;C]ȺM)u.UVЊ6i j(^sϸy[sd6 @vvpX`eKlޞxOR1jKŋ̬H uJ݉Yu7ﱿy&F$&b vڐUUl|.SkDś~j|: +(Ì1udw |ٞ" ߗee ޟns&.:K)Hfh54QP:sg.'eTK\ aj?ڴA o0{FD߸ܫt(6|([uן]VE.>D;vB|Cͼ}m{yzs㽤za/hZ=iNbj|x9=/#%Y]cW\!ת2-ϐV ~Ghkj1~9$|`ʤd5W%Vߊo0+(jNFηWU$߰r܏lIO~+p`y{Ս*B הl0AOKm^^uPɾ h.'ux"#n?!{<<8mR V7wQZXرnc;?9[glz0;ܻf#h#4d@ʳ4qt9O^ffD_7zaiQׯ-Q%3cjJĽV<`Z|ezsYX~\&> M˕ /NmRP+I.2 v4COv噗EU߱477>li }aթ(fpjd.ٛD {U! VS+Ev(SAyIGU/Q5<'/ִv+ LږQ"3 9{_PQv{ FbsJRI|0[;uqwE5F c+ZN'kh7 ,-[CG\?sNlqlpsjc+.`쓺z'Z0V.4% zP. o,۠_l('Bhhlc-)v+½ keIש{[y%_eIy)LXL(O6Ě曢~{5uE+A)i?b8r'T^K( p4s ~>(ԴKzz˟ym߽gS>f׃ W=ݩWayQ:DPU |y۰<*/Ox":q@-ܞ G-Q.Z+ާe ҧ,Ty\u}l3M<C>*7ԉCtp;^l_ϋ˺@Cԏcw~}~u߀'m#rJjSR^9uoqfg&3mC" z)$ǫvaj>Js>yh3Mil:€aRˆ/3]bKp4)h6vܞ1E-Ҽ4,OWr /2G^W-KAF2~U({H^)lHb 떫$7|:l]p 7K֨Q+4ua]y%2*Es=,T9A vt~>OYyj]Φ' ]~`&]wT0!4>D~y|1o&مfkS`kKAC7`drVo l 'v>uuRͰ7lM $"?YoQ[Clwy>['bZϨzSk:e0a\@6úxUzQ^j^\r0(-zL;2jjQvc=ZѾ5f3qS 9iG|n((7̽Q'/;ܷoq~5ZUC=o+[{켛7A/`躢ޥACѴ}}؁;xO,.=;QA}ImCxH=~S}uAgP֐Nus-?|X,sRsE%F&ɱyovxƒϖ cB]gx \l:\B_c5^q^g`oZa~I%-(U?̄x<>(sxĽmxo ~d`L|m6[T:֤p+)?tVAd˿Iͷ MLCMw!᭎.`ad`vߤ] ?-SޚRϖ'2N"#df?4 =^4h}eM ҷh[Y7Y +2r(lQ%Ogt=L )| MyJSOL ǠP_~?$}PCӅkDXGp:wCuAǖ>5DQ!wq]l_O+tೖ|8f+c4rw%|tP7=+{t>\ V`tO=+JS;w%FoJ ۮ gZ^8۸5jaUB !iH_QZ4>-~0_-*N7tCs>/>?zeAqNM_!!׽{2ۍPzHw&=Q z RXn [zj9nS[nnrQ$S68I|ŶK]+bb `ZR,,DalI\#MCB*JRk l4f^Wv4r(ɝ-ŝ/ЄrF'./4e)(2rh)63=R!qʪuHЭ\4CtAI[q` 0h,8򘆯v} ":̞ÈA<NHx79wTaU)靍>&b'\Aj_tpep~C"=QE''͒T˟5C 9r5+ Ajz "R _0KuQmADlD~ߗ# A?w=iw S~^b>8a/ Ձ*_5"SP TO=Mk+GiGD9 |srզG}o7x( OpߥzX9;(=J}/,x+fX!3ĢbiU@yoP{d[ٶGFxn|rmwQ bw/&ڟY M+Z8Oi}:r`p!\ϳ JR Mٻ"BtFA ? ˗0%C.GPT?1h AI xteWɩ{zO(2f M;5cpq'RgE.X86X[ڦ׵}v/ϬXӁzK4 _;*8jGUPjP&' rnl0 5ΞT/= etpg5dӷ+A@}EqUL,9OzM|W,o@cP˳A?O2#|075 Yjh}C\Cb#N(c]AQHCOm3G{>1Uo`u0- ?.hMakM| N RI陻gıu~mӪUn.4$>}7NqPLGg{-5ATCkU2SIڦKk2{/}Rw wQtOݔp>E[9V_Â>;E5z}k%Wߓ T7P;{ *-p94 4}T=b&x) 5ͮ+7@u+i":]]1)g1uNES4仮A,C.S4*}XP{|f'.!eN5mk4|G&V~Z'L'uONEt'>=2A<þ!ʃW<_g$\56 7P/z~+As>lG瘗# ʤV2@R9zڣ@GٳE3[zSJī%驺q_]fB}w~zxRzȯ!,=)!(v 󙩯Ƒ08–d8=C~vv'>{㐈'ww &؛^412#;?+ճ < 3r/j?0;! aqO;΄['5Ldm ,g{Y {`E%. y6pk Us:,0?45?.ϺwP>Sy Y~\_vd N壋[Op3G>(|*gMžRpΗsH}uj~2MqF2/H fs9G AwTŷ/!^)Y(=/ݹEO|rX?mv8a>Sw={{`T~ fx<,=aYp][oP+'n6TYC _9:Cgqo kZciXPCA|O&}@8: AQ&D5T=96пK)>`ճk5o.?j(51YDYKS+6Vb`DwTv+t2oI ȷ+{z:w ^߼;\K}*8'L% 74 E=Õ>;cUzwk]vu*(eAxT* _ yryb p1*kymIBS:BfƘ,k {^8Us:>g+/,mT~C.*8^W=]ե%Ɉ~c07}f 9|-?̅;{sooFIM$g( =a>u^vB;FZ?2vb<[gu˷/srP{RzBcO{S|@n-GAN^: Գ$;ϭMT?31zgs*`w }Sp04tR=?XIH%A~qMXT.O"4eB(w WđdiPh*b ŜKYOT@y L19k;.濐I z?=?E ;Yp{$u?PSI<;f;Qk FYgkX2~F%5o_%;P~MoB3. ^{Y~K~9ySsSRo|UfϩʔG1uGM#;6Do4>+SE+R0ՎdIS x~ܞ{yu8˞!|[{/#L鎊f%)RcĬRV6CodYܫZZUZ/}r'@{D牅7-o^mMk6"Ǽ2`X٬qU|,468+(gTEd 1<ז7{=ihs +zߓH*cv<DyV6yaېaBmL|w6<}Ct2u$"it >1,.N{Z}c+7Pl1 ebzA=ԞEgZmԍ WS3P/ ؿ7oţuw5}=p| FNbZoZyќ^„0OK]̽덋{v~A廻^i(|x=_kiPƞF6UOW2{ 0_tnD :*>ɠt8b"){C ¦e1wk$>%ʰK=",b~Vqtͼ"0Գ`YKXRPGgV{4Iv#G_9$2~Oن%"9hX~' C(Zs.d6=򬆶si>&,AoXF*5hҬís!1iecjXXt^7R%Nk3+q紋.HP{gH"_+R+1AU$fzœC2Ģ5vjQCF|@螤.%a TM'S+"(a8~f0YךaPf!zܗ6Ya=|D5癱FgnۦOG% rRٺδAc ;#W,Cx*ՕjGYހ__lFq_t/jx5DC}E@}!:wR:s&-r 3z5. ~Ui>#D([#wн﫱|Y+ #<o7zM!Qd"W WvI`G} 3x:IUXq`ƢX,sxdȽz!2lӏBg9J/ibTƿw\vFtX ˏztB=ypӽrƼ&׍^z~? nxhvAsE}w>p虤99(}9dam^@}Oqq zSMCa7^j w_qLVXn3N90ӑGfpC-4n(c7h not<ZHT䇲KfqM m2^EX&%}ڂqdٛ>ϬU hVR^JLL%2h-6g#1PK{2D}?MAx0,*=Mޏ0X2CFC w|Go=!%%K𛙟̿ӶcCB"8 ,Z BG2I ͦ?Sه<72;ma5 r2d2@J;}bETCKq{V=V>|nk)[=.BQg\#מ#߷+)sschD1MPs'!Uf_R::ЬE!}z/!% Gm@|Þ ݺ >xqkypNjQ'u8;gοۍc FpixR~fbkCg ۃ'EܕͿmmב.h'IsL=[RYl+MOKע筝T~E{<9.kzT_p_1K7 Ta ݂ Ep컾+h%8ꍽ:<ؙe]-r?iNarn'u5 .BVc_{!Kh4OA%8zlz!i:~OyI a?٨ KP0y̽!hŝ*׋ ba,l<ū5vYmr*.Y7K:ǽss˯lE(I@j@m] {YŪS]Эs5_&zmvH,ſt"sr]~=Lw1nH K'gu:sܑ7%'o' YJlba;{Ka aSA{}o62?p>BUF7:IY5Iҳ1$DH#[dQ`vxbgzu5t9-=& ;#U/:e) Y + GТ){y9}9x|yg{Mg׍51~z?^q~zFm披:?DxDaۂtŷ3D,}z}U?7ڿe?^aۗ;+E9rCކFP_of۟LJvS!Y)u6?C4G!聲|;?b/. ec>a'4k؟` ρ.M噩oLԂ`&?:d'."!)N"gېcmI7P+ z8F۳NyR4 xH#%坍jY;L&=@ni.Kubx7,mIPd3xN֕"pn3ʮvH'lbM?Eي>I{(DBُ9a[`4iXfT yuo,<" t/@pb6Uwy@~[XS'nq|޾t~ti򪱓p/i# ʓ^;&|x:*Lqx/B0 0gT S;KCl~ -Z˱w,iP݉Y0\Qe] +ze>hu2'y~`\k(5ܺY5+Vņ-$IZ-A{]9&F{&IJq>AqOkhEsBs]셝z!jwM\Yv\.K[}kvnit Z|sϷqys@F)l~uB\+|7:/)q^mV|94Xmuo}vw@ x~~JN'|u~wn؝,g:|'>$j D1P;yUP <>m++v! U~3 /L3iؑ;뱂z\73`<}(|kz2SGYC~ g-}/rV˻ۣꕲ% wɟrvn?k'zXq/n\t8ݢ{C=z}+;>=?ˣaC˥K+xߊu^)QzfA煻SG`H#8}yR¡(ng(#!kyJ4@ z٫הbjˀt7PKHXL`X&=kZqο]vBq7ɽn7mL.42:P@Ji+9ً ~_QcWXoKߎH{^irRE|ٙ7ekC XayVn$LJwլb gj$g|暶\E@Br&xM&y,ܡk$QsQ-@T br@:)zl)}2_?or<IC&5Ď5HsYEX5!G~q=|? 3|)ͧtbjw2PAςI|۾G1:L3JG5tj&m~J8iϼ럽yeSqz#]rH2߁zh|:pz?#)ƕͯz*tmfAA#^s knm~ڐ;NO6mPIZaqG/D3 p"]#5ݞz: Iv*3xԁw9hxE.$ϩc7b= ~ghX'Lcx9Q,WT|1T6ʫL _Kᚪ*ϲW|tXpeQ$ yR`awT-+m$9+^^0ԯd{>Ko .;l8ߟGBvKOq,}-x\A9CxjW;[ww {;00SPRcu.j/0[pifw{[ZbΊ兲@}(X]S; Fm'yVA.`KrF[ߢY@f ERa%9u_RB$ցClJvh9Qٍf6 j(D<؎z,,{i=[@[H ^"L/.8$_];ih96ɵy " *,qc鹒uI5KEExr|dVμΕ+=C+i.S@0O/ytZs$Gv8OOem|$L η;$РzU+oԿG߫cs*G @=Ut#<|V'#,`1*X꼧&x_gBWe -O7Tg{aVtd˻ Z<#v< {-Jo(,to1fBԻ= t@}֡x^F <Da? jST;o&wX>T0S4 iG䎓~YayP.Sfc^g[|)3A;hk @Qn: B/ JpxOqʮ^/>AVFz@^^%٨h;_wաY!~c\Gk辔*[,\g!o8kGA8%B0:w4Rq֡9kggna#@5ho7~ٻ&ȪŸĶm}8োtp~OSLC[> ШIjz[?y}}Fa%o*Ie8j(UHjɊDI)b8\'替|ɍ H~`G[ԫ$0f)t7:8lF9wWY7~لd;Z +ir'SP 3JWkpU@ldw,-5,;1SI؂X"{ӠnvkYNZ M\WM0/8i/PO<^~S|vxqh7g=b#K}}Zȓ9zí{'>c:![ Qy]$skn>T/>d OͿLi  ,ww'IOHT!y!Z REc)=覺@=RI$\Dx?Gvܠɪ+9ē'7[y'~ /I^E n} f_ϗg!W&ͷ;3;yP8{spT1o|TQ?pS\ ݝp{/5^Z Zis{l<[9|SoM3CI}AnNtxYVtyޥĹw'LYvS;6]J2: =A&=rI(QYB MJd8wi[P[kv²ŽfVQ[@Jd.k1TlC梓M|Q1kKcR$n Nxp CG{7ώŷgnw ֯wnk(?^ #aymHr 7f5~pP2QtWSS+B D8ߩ(2VC":hnl Juef˷ znNVtO엳Zޝ*i`" -=S߁zH[< ޫ?`rǀ(}OA-ؑvo? tfS17;PXZ'aϽd-ϯH+ץ|9ͭŷ!jBsY{\[ԛ&]){yuٙƍɀ/gN$l׌j^,9Ag}8PV(r'|;K+E/_LQVtO๮*o@{1tg᳂qe /+yB&u?k 6eģz41iSmdʩVՄCx;P7A}/rO/6z@~Ɓ眾QtE_;4?|5bct|ܟw:t2_g?[y˧8?};O /l\*_#KT8ixsɅAzLDuf^瞠$;>Rjn^3h,}FoqHȶ)pIvĩn.CmMQcZ&Ypb#=rO[4N_58*cuhJ6q;$mQL6F]k"~S2tR"~lo᫞@~|;_!zYtpzf?n _.ņ=.i #o,j~"=&ʛr){Z.)֜q=(8jJi8wg`" YFSH*kCMuܜ] xq*5褆∪*Z|s>jDT)q{{(RzTw(xuٍ-K$DeЛffJ`Lf*dv?9'yX3`A=~ہUAoAx/!02jzzs""#Oc'.ҏ}ˣ _#4SsPV˝0xc~d hk%"墒`m71JFv?OnŅנ(gk1ۦ5C`Y:`|i%%D6Kbdb`r@+:0cx˼`דfUlnQ4.`Xd\X"H>2xDH`ƞ<,n`:2!>̘(Vs q{e=*:m0scICT@uXt~)jܼ)]S#45)ߠ G*T '܇}QKQNlw-9_Q' {.N-X]|] z2ò60h GH+ 0, %sܖ@MLӃ5%_AAV)-T[όQ9(.NyM]=3S+ ܂00Wa %6dd}XZt#/6zѬ(V9~kBAJd҉S}sW]CqّD梿(>(l-qm톔>M3¹_Z8࠺Crܯ9N=q24I;Ono`o̐bs;1ٝQg6Q9SYipk>dIv:082ϫ_Jg7{`A>P=oP5֡m_g%=sBxe(F%tMFluO_*-T 7Nj\cVPOBݓsGT"{rfq׷[XABse@X)eqcyFA_ z:{s[ sKͲJZR)WgPO4s_O_̓ H6JH`#VN_~KPYNţK|&_E;SosA"H~Q1W*|]|$ݙ^{`Ǟ1ƒw);Ɯvy($ުc홻.6+ҌvwR5S22%|@pВbZ-Wٔ7Iv{X7CxMꡊd8 }dQY;ċR/uaK+-v^U'ySje;rqڷ5mJ#BjUhfD;7k] be⊭' \c:&,e; 9fH*S-.v5d8ǵmTgJcDΌ$,'Ltf !7b}tq~>wK~~xtTee}mYJPEuY[;C&uHQ/R#wE{*xI:oH!ϸ^KE\Q@@}@f[ ݨي^8frdso]1ؠ *L!Ul`q/YF3@Uq\( KShpkK {jRNGԚ P\Ktl8Sީ|l0ٙҦw jho^QRZ)czC4Epy7 ZL&Onv2;b~px,<{߱^){"珩򬱿=p[UŸČ!kէk ?tޞ|4ʾIyhgN]{#|.G>9WG^>OPo ,xzS>4eJmxfӥv`x=PǫM9 yFMɸ+2zP8Y Q~tBoϡpIz.uK\P{0}V v̝iEe?p)\4:{ jО?b b&G IN@V23PYفz"o/ɻ|A?}Lb}EC4 {Cjy7y٧[*}jNҁ.[C}c\;@EjS\MBg B瘡ų`َ슈Wi'{.rGc,YsSR &+ѠǨbZt腥o99SEjdI/'&U廜hr Q3KeWkL0Zj4h&ϿC/ t~%"(UW9B f]O?/R ߛGp*N/j(C<ۮ43{d!}Rטu&\o t6/9.*'ZmIDZ/:z~>w?k@urV__1/w^8Yޱ6^qC~N` 7|+7j?|"mk'遠{ =cT;T+&3Pv(ogihM{/ P7MLqP*YŨCJ +>CMW<ͤx /tI<Op/~xQ}S'CSƆq\*}Tig#zzzz'7zP$,v7ZG'bP Th.KUSRI[oЗKEl2` ڈU"CB;$!b}9nn:hw`.N"d1+m*cMn4,]+ =PV8ȞʫzOn2b;]0קs:+e@E-)J2&9L ɏb!\9ؿ/|t((sm{U:imuI♎YqrGM5}k/x9qx_7 %owz){ xtZKyc<7,{=. k%:FsJR^癅U'Y0(dݨ=нa># 6~o>DW;?ɻ(۸mxy -μڟ+z 7D>9urx&r`o wp,z&T/  ֯8cM^RfEߣ`>?枧ΈͪY8W$=~̔+\{Ֆ%*Fi裬(p7ELyP I/e)Ē`1!kQe~RS&|ЀdiV\e,9Nܫ>k2a{;ĺ( p]pw"Ͱ~VZԐՁ)fi:W|Gԧ&wzσi.hlͫT2b}>j1|OC {GQ=ӹk(dU5~ZޭBhZDyʇF!154vt^q;Wt2b~6pxą翹W݇%Z4U/j(%os&jr-)fɔ5.&I]v㶲DCyr~,3=Doo@sY"*϶ǻ z8Q vaAҦH,ƼXULV7r' SI ڷNy`~GClM^ةYt7:hcG.f.߈)vԅ噅b{G(^N;^t&^&gOk:|9I2?5yp::-op2s'WU^ `o;^ɀ⼇DЃQvZ!MZKj+̷c;!+?ayR>uF^&z"8DsuA_LJw!tga#Hn|N/z& ["}7s5y/9%dq> {JTidGbNw(D96:8@=5jvy^FO.ކ##_Fdp/XG37q3_k^ ϙpXܳsЃ/@e~}3aڤ6ol6NSn˃ b: a͝bűdU`R: /alɅH2]T @:u$ (\fnduaY:SPCe:nu;p7gɭ1}nuSL-ҾM(F 9zA)_yƴtz4#Y^N$3NYP[s{p.g uMVbtj޽!}zDsY|T.n q1YE6z;Y84 `ςRTG};yu!M0?O~FM6O{.ul1Ω_ "^`zs4|&r7U5w0`)ӡ2,p;m %@έ>goޓ\7`ӹ1IZ*W z:e3slc  ;ʾ>{amx>6}Y#ŷ?qOyD-L=t|9uCjtG?Q/1'~_PXxkY3ʩGH3սOe=e7ŋa~2$*o qZ|yP{%G۠}VQY}g?ɉVܡFΠm)T 2U_3߯g#+z`==.D~޼z)bONr|k"|S{ /hzGrEmΖqL8O<{r؟[p k+Z(ٍң{#wd]~b}H\IRf8fn&3nbE-~v>nQY]ֻywbu;k\= <>fܬ 0ةO]vfw0}=w݈g{Sw.O}B"\[;ުPJ;\m!Rڼ3īAߓ1+ٵSSgZ)#[Br;L Gho@d0!& |#y{]JsNЅx6P\0xϩ4 &K &}sDכX|#nukt=ΉaZW ʆZ~p௶M4s-n&Lr5t{ Dz GnF.!E*җma7Po4:(qkQ[>`>i<ڟ$?,{[j>*"h_xtO$>/hW #=3ʣ}%t_oDѯw|%4ttڽ=wI4PٕJ[䧆8+r'otp|JoͯO K8|ugyҖq~R滆?$$zz\A=7Fѣ{Ag5T^iL}oA965xRr_Yu?Or>82r(\R_ŸؘWYW0aeC'; F݃댩:$=GLfgGُxy#7twv'U@-ONu?G*?*WPVŝH-竄XS)huy!*'Ec;LY\([cOF0|[!;t/fsЃEL 4! cj\K[{< Ǫ0z\bphݯ׵g/r䦋ixn&\]5s?ՎR Tz,x0Iݙ{v<'R4lc%[Zݻ1!`Ջe<|~VGݱK: JwL}'E62 AW޸įJu~^{H%"=//n:?(P/'*푭ƆA-RuԷ{ܭGұJVwOvW5t|uxQ忉Rt Ûpw:8egTg^j(5eq~`ofy= _U R g|o<ۇLnhS=L#ܔ:u+S /Z=t֮3촳ϧw#hjyub~lgmힺJaoNG}C*N2@ĝb;A{fRP~wx{ak2C֗?kwK^ ة+r۟lhN uu5~ay!m{!p}]zH~ϡ>E7ü#_dPt/9_5Ă_=<\_w@)u"4^ix(w\>wjmMp~ Ɇ%XTyEit>$; M_ !,<Ӎ WuDc^mDЇu3|| Ÿ ϲzgBu$?,=E-4$XJJ0z ϊ )f}gt;*5UY+|p3Bŕ@qbI-vFV>Sba־zeÀCzD?̺QY:WЖ_fjfk֢Z㐝RFf2 ׷( bqTדH*ʐEMq7mm vTA GACo m*K1Dus O*vOPen~)y]6_no1ƴ DߩqEͿW8 (8H"`@1.}s2.fRLȮBvyyQp-iNHꑸN@Ԭec T<33PMesj ƅC皁] a~[{đ ,.&s68$xlC |GtiןO`#b|٪k-MCso~4&E6-ώ~V=J0Sk[ѳ%]1,u?:7m;D~VO ퟺp|HrkhTHqe||fQ0;CөI2r2[}e QwOO;13z~:)>xz_9 `?0A:M Oc}z;,-~WijzlsIC>_O{i=AQF`scP/0Zv {սy˩7}_(YzuϿ!p2SC&ɀSh4!:hcnyvS,/>@U㋂}B9hOxCVHM::c wt!?p"V a@}&Ʀ*|LѾ=PfڪYn依gqFBE"KFkAdj;R^N>M/9tw;c'ր?\7: |9Y#~t! m0 80zdvF9>!Zf &WKzip8q~v'G TCi#TEC y``KDwnl1rĸ [PE8w[<;KL!{/v")$V2҈_54eX54258kw|:M.[Cw] '!!|7-ܝ^ }W47Qk(܄)>)<9#a8lq nNL.nnͫ03EN7  oen ek(X@rC {}:O̯ΰ3AoJOZ'??Ig؟N5  >/OY)gUTX^CdW٨WL$Ro{{2hL^e/:|4^^}qsmJA_!vWjQXg7A Sx7ǼDz&b(v.f`ϵw3m' :`\ldJSUdLaSY =;?; zdc?h#a$2w¸54m w.oؘ*Vo">Jѵ\lѡ~ 4@0wlwht|Mo?|a>IofTϚO|z|tFiEzU="|֔<+m{rl;yՓ(5>A/6ϕr elיS5gPb*鹞u#R,?ffٯU6-YS.G 2<Ծ®x*܊1A= -Ոzv=Ey~ă~ҳ)_(=G?\ne]]t\`}' ځz>uarF=:=lVO@zyPϻ{0gQ31O듿kBu"%x:?>¿Q?ԣOgGM?OAS7, m,f4e_:ϡjN;;זB=̂o,(e\_׍ji.OI+U&Yc0!YS*}Is 'hǩs*x.!opO87 ˯(oqpqg8A4=h[aiT{u"z#cə3g=-AۧF\ Aѻ^?o5%qK'DFٍ |:  `%MCJ"J46H{5#ѹe|8Ԙ,|i"!'"eu7—=֎¶Eb~$#`v~4ƧQ`AQ (r)MfJ6;VOAOsj2PHoBGJL/it] _3E-P:P$}7 t4UC"m&NH5^"PGtPOCQc-GHNLLG9yMZ]V-Ciu+W'7tgm~^{8Kܠ;s6x+= 8p?'O32E[y18bD~ /KF{0;#I35лJ#|`0O$iFHqj22&mnި.}مl&t۱s-&#c(IʈE`@t 8O]XU?,Tm##OUThXpI ',VK"/xG_>Tpteg#<~Ib챔 Ҝ;cB_Pkhv/^}}h D"(5of_fK8x苞+f}K:gץQLF lH~eԞEM,͛?\Yf$rXȌ$b%K(+6h R g(&@pWr!E0WLА%kZPwR}8~Rۺ Dq +s0j/bdKv ܦa*x h-?rvcRv9ͫ܂mC:ډ=;$`H nU-n=?B ] I?JZaDvYNW*&k?x3g ؼ?q\Ds=CA,y\:_"~TxX'4vλ3=_OP˼iM؛Z UBi3oZ@AY̱LT1Ҷbԏ,UG΢]EkRb5oh })>hU8#![5J%+z2j- ZҺ7rݮhg\t |*}ah5KWr|V`*9ț**ت"V[rv-OclShSEp;rTBe/stiR\8yζ)K Rz}6ɦ\^md}U =}+ࢴs"[Ǥuuĩ~Ns#,Z)P Obr 34pf$p]]]/>/Px?TY^G~9ϥ̔VE hg*ټpo,c&HX(QafSPFp^4 E]???"c*}=hMQϬJ5=a_g*ie2HD<ZZd>$=ͤYsugR};Oj`pҿsqQdžO O"ݖOGAjMcQ5 ?.[ZǯB zJk1gW-3ԅ&]ms$oKA'$7@֡)Fޗ2L~{PzLx/X'q4n0Mhcϕ]?}=mx^'ɝ~ f7LUh"8%aD S E$6Xˣ$v_uϢHW*3%`q D@6vլm du:#I4جbC$&k"b׮Z4dCG+ܗ˥HY՛KuUw3E Cn?ͫ%Ip 4uiA*Hb *=]H융gyIƑ,Kק2;4]EY%m לZMTnJuy1_Z\KB̥ƃ#H*gCxEXe|u6_ٯsgL\"Ml^WP}̶}l(⽙n Vk]ǿ0ow0ݻٌ;mF*+P8% 7B'¿}ŏO{-*;#V8LU 98__fURռiڸ/iKFcndOyeM ɫJ`e w1%]'䯠NMILCQb&ISEp@l|hU;  "Yk 6RS a08͡ (4,jI=E: Hѭu K6:?AVus#Q+ uXD4.&l$f-^4B(f|V s c; ,PeZESp L*R&]HGUXj6~Z|q+D4@H_(p+JJdo۸k 70_DftJgdebRUip{" źJ/,_` CQĘX6|'WY54K#0d^{E$?4[I)y_@spf7޻F{?q \uY,yo?F5Z>Z Dw;ηәU??[7ޗygzjAfOdɕ9{vd4HYhS5] + l?2"@>cyT>k^}vo}XH;g ?r'_0ˏ'Jy:1#ft>-L/B`wb6no&0.Iq& 7p?m-h+dP>d$7s(B Muc W0}PްoQ~kRd3J(䁔7 qp yͅ5>` k,5&巖_ U?<*Ǖ1bx|gY>Q|BY{;Nއ x& Mrxi2\輪cDb7]9qmv& =_ߋ<3G+P y!nc oNy^/L.Zp j<\Z$ttx@qxS&;٪A;N2Ay.ս]OTU \sһE]IUGtH2cNÌSGPߧ-29WJj3̚x^ xVyr蠠<NQ߇W{7S;:8FB.z.8WqaP#a$ ?t=_vOI碀5]S6Ԋ_=)%P)02 :|aCaz1Ǣy0:O_RA,)}씫$s·$C6QMQLő.{5j)^-$]^D _C.)2` [ɠ90' ,cKpgQ(E=0&Ԟq{ހ{JX*+iB09ZnͥRGfNϪ?;>BUfR{ySx'1&HdOǎDZU+.-_4!8}aSQڄ:sqMya``3vAۊCuI0L C/\{1/L9#2$/G3ReMuQ08'7*[_ɡ'nT*WULD}8đ ѿ1z?O%UL0IN^HNeuL8 $^;ӢdFmPgHt)~1u©L˄"3RڌlnJ "* ;SȪR0@iPtM"Su3*P'>8~4EC^ʣD+$`Z-E%Bg1tMȜ#Q)\oR`]-(N`; tqrFS}GXפpFP\ɑ0*Ls=cvJI]c;P[15B44-, hI,& _>tdQϧm!my߄j%~|Q"e<`_2:GH\tN6v.mEp=|Qyy(#_51 I_χ g<1;kdL.)J$W9g/z}g`zvȲG €ǜ%*G3w>1/Z|?BlE?3U 6{Q S/9.BAs#]wә;/|v̟햿s@~% SO P:?Yue)i\lu\A$oM0}&g4"Eojx=Y.b{Wg?^|: Gb7_o9P>%cs|?;,/ȋV`f =$0>3::r4)#ǟts.G]SY#e]dߝdհxaXGQtϟ+d?w5s./_o #8>od{pC x^8upA|,Y!i\Ӄ:8s檣/b놏_% PwyRK ?Ekt>8P~{{>pXۄ w _&=L;! \~b6Ў1oF-K~Bo{^PF3c%Jƣ="yKT𔽜-I[|μ)@g/.B_CT ݳG+uVlEYi(Jn@U\1}4\ 4/~用vqV3PI}%'0[1(I.5X:RFJXsKQ7>bKX^7ay"l: E4C, QĤP,u63П"E zz7Q/0jJJqc\5bqOloyefSk% z|f 㶽7VTNl(8}锪3:^ EXoݑ )w;i0S]A;24̦M}nhsipFA]O :OE_ZPAB4teiC^4|gM~،uW1ooaT{5CeЁe0?H;j!E$ $Πj2׊`BC 鵤Q -q/"[wf60AI7 %]O?xRF9-CKh5 {B_ID]KB V \WqXGG<>ϥXbhM(o !H264<P%6ͭŠX')N γAšB%q:t%6C}}$k^RuSܓBMut<0m`XjwAĪRefϲR/l'3,m-'W֥\}!ßڇc4C; ?7l Owd "Q+< ]ŞYQ]:2GN9xF6:7e{gDcv]^Y'KD4W Y Y]s]jXTu)ȩc 5΢f?r%§"ѺtS14|~aMekM?x[\|/š;F:ĂDo߉}7B! qRf X< !?*P>AG:>SQFÁ,(僐č_Ϙ 臿^'=0zSq)(~s9294?g %;=5AyC9*50{?aG!kD}12@2A_Xa[s}#{^\-㞘~izzȲRᐣW^E%z;|L wLz=8& 8M(HV_8PPB{;=HE#jy?"i%lqND~=Nw;A {? x!Q_*;72睑w} k>CTG䘵qHT/=l4jm[7y͚#Q'|OlY^7mKCx2#( -T=0Qr牺;sϋnP_͝~ 4oaǡ9|&Vߠ/`pJ~y.k吮7Pɵ<Ðws@yC9cWAeV WCo|(<4ZMe{tk$(vc,*fך?8R!sd"Rclaz9>To |=MZqD0zFV/\ˉsۘURL?"Bҹ2Fϳ4*Lw@KE*4%M+Rȗ 5"R(+Քdz& .L瀒-yR ]*h^Ne]sɻy0=j\( 4`e^KACe]muCI\E.-j̏o mͿ$٩HcZ\O(88?* );"JW Y^!AP!bO!q^T3Z0n⪬<0O W0oj|T?+%] un8E-4eX* 2gP T P@eg!?䬀itj\a^~a A0';;ICf3m ofC#7/y˿Lt۹IhY_ʊ:~ an/*T ~!N7O$_au*}K7 й4#swTH@A4cyv,K &`ZSq5lh Y| SpEpz ͊~i_4g-)$zM3ʠ~KGe1;&h\Rz| ,n9CNHDO8p\~)pѷ |X^wn\PFRClԴ-ŤGykGO^QG. B*e~K Z $*D}uE ˋm>=Pl/Tw:#hwb9w 6+*Fz\Ս3ǷDog@mH,\UC  bSnEJ]i:=:EíwKLyҠO(8r:7#ѝBG텎{<֠| { 18̅ڇX< 4v~w}= 3XgG'7fJS㰄ߙa7Ä}h(Cpdj\MqD+J g|'y=3+Ұ@xb|x?Τ|I<5tQQUI>/,M*c6} B1zܿfa|9碰sU7i ʓ4,6m P6*w Ge1XS/ LϨz7xBz`|*/p%Y8;?r3QQ;lDLy>),~+B+J碴xT3 /Vʦga<=ɯ")e\@ D[Yc?lLx;ٚR桅\J01}#y=(H{"tB΃=ds}{ ެlOfR _U!+3\UM"G,h|;QŐsM'P_g9Ea>!oeAmamv>/6 p0O1 y>q`jV=M.,BY> LϙmA :>gDj,ִ$VBGٔH>ӵn!)Kr)߀]3CON?pX`pyy _FWXơn@yPP>Qtg0C yb7D_=bwup@v?15ͿN:s˳? 7e?;=m{7$O݂f}u2`2n^$i?3:;^3$ob\ / `Lω ]>uFjKQH.1i[Dpb,#!31=|BtJ¸_0@,]jIw慢J-2eRy)#yA*9pGd* BBZ9 d&BQ$1u]ə5Vyh&eJQ*%gznz{ FBHb\u,xs׻ߟd8)4g}Ku~er/P2C-J: VHI[%)&I~QI -,Sp n4jk y{&/jGܿ)e""<Ɔ/79Itu1NEz:X7^naŸWrKsŦ"[FU2.b 88 E3 $U'Bk+(k Xb`ڒMj5%g(ߛ9LmvSZ]M_E Y@5H4hH$`!xTQ&QG!  ,Zׄ$E.O/AWM *+ZJk\-! M"ɽm=XEJq#rjHy[#䋤aHA\,ާe׆CZBi !RA#(=Va(64Ԡ<#EnY{|*(i 'jP9%c} nG`f`8I 5Ms4޳5Rޤڱ9;Ѝ54N1N;7#Qm:eItvVQ6P/LF!gC?)Q.*az|qH8GQ 'a#ˎ?9r9dhPůAz"v_YT MɹEAm:WS@φORS't>*tAy}3n[٣;_OAT_*qE_/EU3Й Ȃןs ߹\FDOoA\,|:qԉy"≯o\#\Կ/Vjsy [=К pa2|AgYqϒ(=!NpOBuW,>OX^ t&k V/ Cx%?Ϯ1{%Ղ}Ӧ'SNn̔ݛVA;TwQރ:/;EFى>J.(U4 %|=y}>&tGypp?.5`yxzǝ0[Z~ǎ,CyIm;9>;M,A~(Vغz!_( *x< :+3J1kGhщ`7eӏ7}2MAؽV@s-:Eq#W$h(7-fʇZvuLKgP1k8 MXDgQ/40=vx}(zP>Cǵ4&^@7q_\?U =97e:)%z†c%z.LotM~{PޣkHUF|*5S7,Ib؄\)WILB42 FcU%PVFR+cŎ@Z)&q5rtz}v bJ$DQ_Q&#_<>p1w+R / d<Hk6yh5C&}#it`@E ժ~e/h$o%#Rh}wʂuѦ Ԯw*j@ {6c[kV7d:H-'%EiT'6`RD>d}S_EJk bQ ~}WulmĤ#J E\qV*r8+O߁`|)۳~i;yN?{]m|F٠>+?ko(G%UX;qk M܂;엇(mfSixMkE։Ph7ʃC0v: OHtA#Qmq^9ycX\?1FߖJnjR`U$E;9baY yL$aֱOhY^x:)vƫf?՗_O'N_R>Ñguܟ}z%nd&Ӕo3pӡ_ə:󚙼ӑӬc+-l[!3l: /jl 7d||D `;oR@y}3:/|/f[~frp2PsÏ|Q6=E%93^|s9Bg:7_iA?;zkn̤%UO;1xA;gjl;\X^Ӻ'>{ f<%A` tܕM$zֺ,n9 SI;I'ag}JdPogэx0!(1_d*XVd?#G5>I">s{ HRm3۩’p1hz~_f7G'KZaS8v%zF繢t!% ٣{C\~CMQ^A{NG ./ -}.x=;: wc?,! ޢ@yڀ5Ugv]}5Cʼal[((sXӀUwxt^ Tgk(A緑?Z e ]z@uvVJ p:TkTkG~DC]ꑓ`8h~Ղ6=|U`1Sޅ-~LJw8_O;E__SI/ĽկdV(v v(!מm'YVS 6XZ > Cq-@tX2q_Y8N _NQrf6II=MIC)>WRm" 3m Tzs!?O@[cC rk^oy®:NrĒAaX{BAh`S7]+ԃq)/' k^\`پ!lRKCECt\1~ڨ\PX oD)8-% ˈNxN\i E+?z8b|OfZS]*+-U^nKZcPĻ}!wi5yg.o8ZGUT[y!CK|"iTQ4Ⱦ5,'}v:qS;ݝއ~`Ʀ:3J~p_Be`lDv?C]$&¶SioH[+٣;K`>H"H8t]5Lz] x;o,8 q <Ԡ(Kra>]4V;+? )`};+lOE KD :MQw E*QZ*JNJ|35a|"&vdm't{"i( msĹmV5>yvTr 3-Ў Hml3O~@|h,m}ƉC R֌53pGfBm=wHTq(GrJGʜcAlVT]:\ T͐ZHI?SRw2P lΈ͙:nM}!y)_Ig20Pv`ӳjdrRlW(AퟌDp}x;>;t"M$7}DLV"mDc/OnG4 Aew8q&6ډDyoKi^7%QQc ĦiNꭩ?3Ǯ;H?B3-;^ܭ^sh=/x50_Yh?_Sbg[<* ӓ;;<} E,V.0Sq)| Wƣq3:to_@yp{Sw|y|\ owzy]<y P_hϊTrq"`|RZsWFrw {~(ӣYh J'l<3/d3߻qI3_pDo@Vg4Vg=yweooBV/}PKw8(ZH$zj9S`zB}.5-p7=3 YXS`f%䙀$EJI*hʱ6fn?-_<~Ƨ)/IFZғ׷Mz|D2U (g?~PW*?t~|',:ִzGbP1/k71kcs|t)S|pȋ`(z^>tZ@_P: fx]1FB v8I54 ؅C-]8`\W߿hms1ʼnDoF!_@Do'q_,QI!ei >.خG ЏQeX1zµSQf%'ʵ_"} GTIEca,+DM}pe _l"4qgV2'H,ॕFųQP^MTF$XMlf}0z9vPy%|C {Òt(2&:ROOIf]G 88"R',js[J0-3TXt)ad |rR7y%|E{1Dax hUPw6n4,ދ)DoI/|@jX3Rl/Ŕ>:WP ~XџL2s/EޯG]/epMMOɾw!UZ|Tʧ0|el)+\^4)Fx9I9;ӴmLn)yÃYZxd=yy7yOQ=ҚpgPĶތǴztz5 믬lʯ'%ֺgamӁQuQ. I Ћ;>e}^ۙ?L|X#U P)M\dv_O #l.oy~ (Oz6w(Ц(^g⥦h}`dCֳ;SQ<]H#Sj%YaLCu:ՔAذ;T+mS؏<);#kRr "Gc&Ph8˛_smO7MDe8ʰqz:! ^ajNw+`G.!4"Gz*h"իʕӞ6 Y&V+|&l_J 6ihƥyIGuoЙ\|#5b^w<'`=v>u)]oj_\g42,A)aȏw} BZ{Qm!+$j hk2X6ߧJUAoQݸ_E/;ma_76o||[S5xWWr~}_m`{y>)Xng%9)(:+%T|%[]د]@ϣkA܆3J͔@A Ym|*t~``~5K5tiwȺBQ5]BVϧZO@P _`eo 3;_*Qb;@(*{I_*j%kʵdҡ .0iz[P|QDS)CVi EWf1LǾbWz&@K%N&"#Z&_ksR`r rŝ̯kp=n^kS C C}KmX$ ` Wª.`+ḚS3A+XEч7t9X.o0n!K[=RYl_!Z^łΗ+A`qQ*u7*h2;}{D9E?N>jk?Xa>ʣu$#( CwV~7ɝbnI]A_7qLDA:xN ab>7d&a^ Y9Iepb1H6x6mTs_PD2hx%/waG}SH0:ΰcV<]TԖZNMMNF86~l ϞJu #@睳|=e)A~wEI؀p##$z0C" @i,xB? يt4H_W&1B'۾jb骦~xp[ ViY>Ge!F?0Հ򩆼'طT0Z6XQ/G#A+\6I/xPP^V6'(8Ti|Z|.$Z=D{#_o^|y4/0d?}Wk`jpa~b[y hr2)#EcD߾s"&zJ`QzsjIBG27H$›o1q Dbt@x??@y~;;Uz ~۽GH"7&D^ϡz>fd6=IAyd x9&yOFgYH09N`:CGOugwY gEͿ応&x{7j y ?4 tyaԩNp哪s;HA1C(ޅEپ;P=΁iB],W{DX=(5^I7(=9{wk/zSON!['܃{A~4aj~J9G@lQ'^ %t>rvi| yk y׺M~Wa\]MTQEoih~ X97DrK*KBdKPgjX߀Y +=1M2&.s׺5] >4k#8):k IK6LqEZ!hکTVԤҩGO򈽠<RJFxt$!!.OcA(t\{l"M }E{0֧IKZnZQ,@h7V~УA4TE14Wz8wnl"o`mqB1M$, x|T݇6ׯ^5}ISf"*:P?}ǫ}؁+1tOvx>Yn>7J!4NA` 78|&/GY4Ը_j7޹J??II 37xw@hlxբ8gjpoO cqAVy w=$e^8v,򊏏NOYNkaun!&'z?i%,Up!jS;+ } *U* açڹHab]֏.[qY0adan=( si3M`A GWj#z$;eZAU8xo0S'fܕC{^T:Yv3mﯤL'-;}uˠn"a9&Ue LGL&RH9RɾVZ|?4b@{'ܖz. {)W;xb[Oe\Qu}8ePE +\E`;W[nTubS2ўaf@+.2Ay!x=Hu^?AYNPeA ?rO2ۗEDz^ ᚱxrjP~[8:H)Pn,4k"%+ ETNot\k< Omk2 sIB4cX [e=(3|~ȊϾE[wU=Nj=~ŒKBm}q Gp750kr8 ױy(轡=uɉ>5F[}?FE z{ 7h8+t:YjA\0J~&9-܀*>twjVv}-Ţ^-q9{t^ )Qr ?^acK/NaĦ7{6=*?^rZΡD .ceЬh/5O ;6ƃ&@y&%$eY>  F=n?y &_K>j VQI.G(6g(FBYjI =X* :߂ŶI(+ ^mh mKWzΉ֠5_eȞΜI}vUP}*MR#wd.]g`pf>]F ,f#[!;2 ;JêD4(]i4ے Mjv!^*Ы’T hWCnJ+LeT>y3{xE#ͤ.ߔO* `,rhϟx3ZvsqNyƲqvRfЪu1<4w(}A ܖ!3z8jZ'C&joZ%q Cf2C0ԭ):|L!Ӳ6k8[tIccYR$ *wZt@MD]U.`! + |@vox qgrO܁ EoӖO-ўE@%v + }'i)τ C(*-_+3)խ_9~3Vz.)8v^|Cݍa\ijFM1PW[(7~<jy-B&}~ًա3S3(ϑoj7/d?왙LL돏l*}qՠ|Vž~%q_ޛ8A?j<z{x]*PO#F0=c8۹Bۢu3ҟ/ݑo%M'GlU ^k; p[#ыp@djS *ōŽ`hf.fǒxBk& ԲF~oD(*cu%iTJD5[dP>DrJ?z".U P#>?-UMEVQ? lL26TT.lA9dˏM-֬cJ a>ISWI奅őWz]{vawT'dW ~@3&̚j 6+ R I!xeuh-MUW.|$i*@7,ǢvPў ˆ߈@|/?.8{3:Q Zzxǧq,oؾXeg}0ٷo@[gwa6$(fHH}9̎k&,E|=T1 Ct>*0hCi_\ʃ>[pM_FH]Ҡ5EP"Mj`'TѾRCVH= l3OQwehUb|<(u $^B!Ua46M\U5 omSzE]T;faRXE-/#^iOi #wkHԽRO@ h(jҸcƒNK ʵo";\P{XDAOX3T\IG1Tn{~<؅D)PEC7&j f5мr"JǠMɝeD .DP5|`ȕ: pDщNB,0D:tN\Gy9*CMS[ ' #VzLGKQ)i@.?}pWg04dYUo.t1,,Nu0уiG(D2Jz=~iLaac[ Dkþ+m>6$qXl Dcl2n#AfcROO#Fߌ?)IٞO IocG/.,'Ar_UE? ړY+c t|&D|2e/-y>~i@ޔTJ7P^amP $mƾ*%{w0:= +0}O 3cI4sG$;Oe^H~hVO\H E)(_Cy,̯hd^b{+y~^ vXQxAշxK(w>Ld!kW w g]8='?rm(Q22]k=~yB3!0PazċyƨdG)d^y>C}nIZqAiJ?Wua+$w9| Π-Z$Hޗ]}aG%3gŗj&겞Tz%~tᴃ u; %a)O`)[ rk oW򳒀nӸS;~Y2l`Q}|5)܇1o $mعk_lŸo E%G<!կviun*`[Ca ݅:9N{P^N2CIh>ܰRT tF˒0jpM$M~4}2Ǒ5aˀŠMǙˉ߷ DE2zS.ADo'`*J@Wt)όfX̗{qeG359xrm5˻N.Ra0(2CUӑgl>3FeHP~Hgn>+|d=E|? ^hIyDtT_ Z 8;~N4 vIBG">G-s(pc=OϪm (s *. K 6|6 CS^7tk'>sV`ΣEԯ)_\P'\ǓĠ(cDA o䏡ҾPڌΣ̗[Mc xyK"ucN>9izO~n;O{tR?WIcjyy;i -L߰v߃]Y{+m2i(fk~A% R V)0[ݔS?uggRao9WR4ȓ& SVU$"?uy`YWVҒ6 F%Q %rCMRA>TuS7t!we0E 0aÍlܾ5(vHmě pAMK {;@w\@MWi cBCGX7omGSSS`jܙz[`=~aTְ ~I5*ឰf4sDᡉDG uOE=&Rn|% Wu$Z5Ճ>tЄ8h{5#uUPj8e? #켺̣l'2U(byᬄ򚁪1~=GDO( ! ʃ>P x9>Tk篅gYS~P@pe_ <;Փ$S[9i / Wtl3~~FJwN_މE>rFubY H1sO {Hx93LlZ5s0}R~%7-D'0=/$ճ1yړ9&}sL\z9P$/ k)C90}ST Tx=&^C:q,k?~zI;u6M_VFZ ^B`zo<%8et> \ ۂ@Ikf?F7埯ː0@#bc_o; -5@ybV>aT{3P;rtEǢBۦJQY zY" wx3-'V|~/xTr.&OA!ސ t1E`͗zpyB[>Pr.9Xq>ٯ?qav]= \5J-Mg 4!P?QV/jy8?|Q lz[$Zu9g~MyH5(Ǹ飝;.\yfZ7Q4nh0e.P-z/* UE!Y̎eul"BF($%P(#V Z1X L ij5jtZN,_SF q 6; 'lWMXkwG!qOޓA6dMzUt42?NkvXqTH{Q'O[ă| a 5>Ai{">RAGpG4#ص u&E ATq4Y# G^$2D׺ ڏ{TA4s0ACPyYAFETyx;(=A:8=f;OL~ϛzU{MO:8|QLM cx 6g?,3;v3g;FB+t7\3>mF9(_g>˅x>a樚#?S!SxQJwG|x=z߯\%v|$õy)T`q~媕LG< G,gS܇/=Bi3,b./zT Yd@{_7|'5fk{ZL.,G.$BW2&h >Qm\]ϩdEq$Vuk@Q~W*ơM1nPH31CxCC$7PL>;^ONK@Mw rRBZMLwEwh7C݀k#c5SQT{⹘U=(Oh !rD@2~V@;%f#ު^JD12T8/E4&^/2?̚䌩,_l ,}A&#NEjaչ*2kPr wㆍ\o4A:W#Qzq#F71H&K3{tJ2z;_0`7In*m8L|='n@_-Źc ]79.5xƩv40:@raWLoN ЋOsaπ^1}Vx2چp.?-r@QP'!nPU+y0wy~"#$QTBvvTO J#_ E"xhl#l X,N 5 /P@ڷA%!fzjFP>:'THV ߀7 TD~~ފP|T*DHB1jPPXPO x'?,w"+e?(=E YQd%ŕ U`zZZX"ר$Ki>mr}~D- p%2P#%M#q{)QdSkH4jR|w("aba MG @Vc3^J]9C$Xan4tp+E"vHdz>FIPGKCA_N#G#A?uˍdss~dUR] n :'C{7ϧYzJv.Y_>w~9uM @^DbϿkͦD9\y221=(7O{>H>9H_qAe];wgsO鼨/ {t^ /2 _z oyq3.Հ ^M]o]h<8zu`c&,s/sow]\px_}(`K,%Gz-o ѓji]C#qI;r|L_ ?Aٔe`=-LR`\k%6>f/#aMq_a5lK645(Jrr^ŀ5 7]ƾKvBh;Tv{ؐ3+og\ugɶLC[y ͩlG%zQFjgCie$Dcڂ\iAQaSbreC%9T#N_|bY3Aqh7RP~d76e(tɑ'Ry]ȃ`S[7epj_$n>eJtj(9 x @T>(aНL-stkT-]aA[2j_|oMAÙg_T.`ʵǑpłBO/M6ޯD{ia)f)eͣT&fMU/ .u~6sUkTJ#TBZ:_ytsA=G6;45GLoRx^A:aKHnp=Ū˸:lu_ԩ2!<; ٯbq+CخTsQkF:,ef拱7ڪytoilũmtbm*+9wТoGq-Ⱦ,)Ȉ}Ρli0KA/ d)vЄSK* &?ugZO,w l+H|Ϧn'C$=l|yJokRLs%*_z=Bz{Sovװ-fo[%}|-tD߈4Ǝ R&nc U}PE%0,+?0#CX;j/+calC{9t:-Ǔqs$1Z _Eż@ Fj/߷aGEw.f`.0 PND XU31=Hsh(ͱcxȻwWcwN&%a5vk=>v;6;#x ~?E`EO)QFz*l# 虑¢TX앨o?ZAԫ2Pɻҫbs]ඛp%ʣM }H3Ts!$`u`%Bɽ7B'Jt(͂A(yZ1)=m3 2g4i`g< N l*~y rgC݅rahR _+Z+x+(8ۓ6s|rk%,jd+t*D@$i]\IN3z>b/l;Mh[F{M@;h8tX3ـ+-`^E0mhtI;WحiO oϸ齎^"X< ؽV@G?`.Pë-5/~}s|f}$o|HnW>p8`_PlȜ-Merj]PRlYYGv49Aد(lT Ol oQK @ÆlVc{u؀%g3apDzb&5#f$p{=wEV:5nڵ(ȭ6G1J%/f`qȕIs/puCD^"ѿo ɾ2+(?k4y0"]ZLޛxO敯P,8,{6 ٪pVc|yvay>?]>-wθdQ'zMџ3ӈw~=~LrCy!_/g!-k߅4tȆJ?Vj}xίtjQh[<|C%b,^R*h ta.|Q5}Tw>>eݲQhV_&>y,F7_dğT;)n̠e/L1/naė^|َR,x{ ,#7䨦%כ۱:׃ ]-?{ݛ޻MRt~_?9BA&ػ+vIDF9+Ѩq99_0tBJr,s"[ kӜ">@|L w$U0d1Yhm鶮7زMTp-2[Q* GԚ8&Jgh¶h,lk!D?,l⢥ԞCDT(dlm7 C,{z͗əS~K)k$_]iFߨJO7;Ɩ)׵yG+AGA}}xʎ~ߠnJ\{܆k<>J$# #y!|i;6o8[O77i[LZ".~1eJa}QSwzEt|ZF=3B6%Rj:%\)e\tFw-k7h 삲BqX { 4;u+ne=dStX7UW[A43fh$\^:=npv8R:ՈX Ae˨6‚ꌰәv?ú x=joJH}/}sChEJCt6IIuz~sAqa Kⴅg k !Wk% |?Ҧ)Ԣ뭣46L߭D U+ai䅅ܩp"@R5iL SF-eL4-Hxsۦ"d;Y~s*hxs&eW,sExWUnx< ͛P\1k|F~] 27teS*Q|gco4~MS,EjJj_6GU]V_i8r}}ȮA0=trsκLLgtK49ţ(IN4絛bÜTps~%˂UYKV\9T<ԽOjK3ARF`Z ?0Kc!Wt|;AT=g]њz?LYYEj)Ѿ|y.[]q/遙|aNw ]Dq;&JAKկ2 ʟ뻾g­jn~col_Iq'iQ&3!czuHzmamwݼ?0g{#߽~ecR=v6{k!/ug<'e*Qy@LU1=W"U" ygO8L?0jKq&}IjQŋ?GQQKKpdCVD۝I%<9 x$wX&,O>F ?f7dngRg("GyWӿ ♳cXJ旘~%Rؐ2C6O}x׫~?m}Ŕ;`* ׽F Y+ ӈKxofy*dg8e]R?{"ٛP,v ”{|`{Ho ~VUƇo \ww}rqffPD qj}s sRQx`mw|azΔ@ꯖ@N$a=mtao.p:4> (M`6nb6V8e 9"8^Gï@ Tms7GQ]-75[?A`u7 wB^&ӂyԈ13`0I%/n0@_-QXNC;W*Ѣ7XuX=,c4Q߲-e%t,ZƮwPeezY%jejТ)f%KKz9?3?6ѹC*}ShM˝fکL-ԋu V~ڶ$2sE*hBC8Hp˷|GglGϜ;WLчф#썕*QV2 (+Rjʔ+{*:qbzbʹ͢o~Zl]6=e^ ŝl+9x#HG-LDɋ~OΔg)u( ޟ%Z%o8oj2p':\[8;;0 YDԼU}}VkРv󼰈_/'Иxppϲ2`_QL;M .э{moyxU1f:o 2{3 ]}Wnʔ'}E{e5tϭV6W_V} |}ȭ=U  M #׳XVO~{a:,}5zGʝrw] ퟏ|z8~g#{$ d-"MH$^TB$X9\D?oTV.GӼ]Ǟ}=]ʛc ٞC m6p0Oc?xwm/5\lxP@mM^. :b\$EPc~ͱfÑ*fY k z>F<'(?{7t`@<|yP'L?McܼMhU >.v Q~@܀)%_)|u0-}@侈c5`oe7Bʋ/So@C[ev|/%y]"}B.u/WD@J EZLDiTމf',(օ|iM| ӗIUlw}"GL*?Z5q[Lb4ƽ$Zq43=G~!kGRƨyCb`gΦ({gR+Rۇo?0.֑ɲ!u̝VR!vd:CUXCK[4v 9צs ^hmL4EJ~=K)^Qm)'1UYhcqptc.'P,W6A>-@kw}Dx zO"_*d¸䍊>XDsjgèN%1hw`+v]4Z0lckm! +6F=hg&[wOȾeۯd.*K9guәяt~&* > v(!x/:jQ`0m}9R=#/5AC>90^Qr$96wi(ڡ Նir1۩8/g ̄ h0Z u-R+):iCC>;Q7Ѕ8nSVoUfdZc}:<Hil_;B(=\U.ͩg:B"K5U87֠-B.v1p#jl|MG85R8 >vXZE$P-d_͗D<@Y8Wb@fobdJq7^kێa3w+PUzVal Q5GCA|,u-7.h6XX,ʟk x {#S}̦g^$4u"6Я,#D#L=+mT~&xH<{}t^ JL|-VKY_l ( *Q~&3]٨hѐ 4"{?6|;tuk|WnzvȧϊY׿]=kKm.}MU:~j|tzr=?}[\>1y_q{.$.?(ڷkv1,':r HCzf{7d=_g9:gqNy|G&]v+,Zs9WrWM/ ^b~|N,[󵥡#kN!Ay^(/BK=yOj`UѠY;YQ_9)_AG-zۖ2g\yUo_mvguS k(dNjlhϏ"}76< xzopdɣUV>*#^QU&^o/U*Y2鞰޾1ꗪOY;X0 sF}C]q^ߛL^VU*`q|/[$=WK=[oeyy^NDU{.a[etF:/Ds8lr0&?u"vV/\;?L7(kn(=nC<1hʟr },0hA=cs P7V tfj ]q>aT<$_USQQ pJ^bθi`|Ђ&?ttEDcqe[:Fg#!0 q-)Vki1PU<`d{M hCLS/LM*+BKWMc6XNAr|&FލH`za6Toz<:΁`un/a4DK+h-y#egȣš';!jkBe[kLxgiPs8r!$TNVxJQ5Zok~W<x .ÚG{vn=l{׺wؤ%!vSϳv[K>%Q$V15!մ1mz8_PU8߄ڣVaDmc}N@e!͝6 ch@"|R> PX4FFlZdql_ZX|!<}ҽ!tDLh.,%EA CP>se㐻5)-=1!wAhZ%rwY:*I窱)kZH׳A`x{3s%jl9d?9ÛV6sK+ t UN%e"o{B>y(:0\W\R!T.}`D?*#jP|;ƋLb b iR/l:_X?%31MЫ xAe6_Љ-:[neҀ+^}k$7e72t2HBx4]7y> 1Nl_?c\D\hщ߮F}X#~)j|>$k-$*Xvs%Z6*ѹuȥ9}DaZ!%WwU%Z*`3"d 9.={W[GlfL#]gAc:OI7;jp ;G ʫz0V|AΫ]9+=Th/?Pc?-S$,P9K]2/%-By>)w"u6牕R/9yZCCy*eI|c KPmoy~'yߟ1mwJ J_yWaVv;b*оcoOЖFfT&:tg z]=-E._3:W%âWN?X8Y4݌O"Ac|dhO9t5"uϘL>&7[l1oB%@|evzNnFV!N>%RF0g)Gu4.>vf_P3pd} yҦd$ 16~ɾEݣ~Q>ẏ c]x}׃{Jo /E:?x$8I^z["z0}7LmiqoWuޡwыbnL+%c&I$'vp Lv7 "/O|I"TS6 2,%"ZT}UN%L9F )!> \Ѭ#5\6o 4>[Af'0*:sz@| +a,}^R 慛FXqك~XE4⺽L~@mOCM: MBN3}Dɕ7}Z//uO懠sy_Q1tA%Ubz&C耭4,]"6?{i ?Z O'\24&::^ *F*Fd!9R.Sd$|ZMcⰻN8]p]ieaqbq? p$N/_U@?[ƣ_^*^,;w'zD9r"}7+ewF~F!.0[ܧ[U"/L$`oe Zjb'DpA8K3dXVo}0􍔷},mE J2V.ǐn~*Q(c]78Y|,r@ظ!Q4OO .yýVƒX~V8u6ƀgrBŮ(̱H_ݾ^fd/ U|Lpo{ػ:9ezAlA`:M|dmNnoCL0!1n݇EE2Q"e]U,ڊ5/GL@fQ'8tLϫ{L#f=$!SoNP^P""zUYo$$'.M?wzVpwa7ۡuL]1;/*C 'u ݌) ~i♠Ypۜ>QŚu{nV ]DOD=osλU'F4~#6~Sܾ>ML/X-:&6WnPLo ʦruɁ8Xܫ_N\^_g'4CY'|*Y(/ ܟԽ1>=Ӿ^-νɱMjY%QVioww泬OG|aA˿ t,3/$P^4nU8 9.g׋aiV1Wj@::08kP:sbĵ"E y>kǬz[spGfpk3Ime:%|Kyy݇4 ɦ]RQM<[qz)Gu\џGL ^N0=uVTEFγLK(zY|p}_0GF>՗!x|.}r9=1.&@Ɖj]E;0BUh4HJ0x u+Mη n/טF.0?WXE Q?5pDF[-OeT%&bp6c+q-;pBD\=gp1^'Уk/RN u.=s"D A;DK4h ^W ?ÓU%#tT]]8so鍨n}]);TAJ鄍_.Y{'J.}9f}_oVA3 z*^NZp8Qf,Qu?ZL6ZAmbhO*Q9wp5A*@1h1 ?Kn$J`8A5X_7F-*GU٣Lד؉U('T.@ch ];b,W#BU8~vN[y]M\|-FMOh+~4)fsJ,Sh*ZIX,.77J cAIF9^ʗ=\rщm2y]i2h ^2Z76;=U7Ph ~.67Uk^cbX1G!HSy,SڢH ?t\ >Tt"k{^0uaұGCrCmt,x=ԭ&N̚] ewSVeqtJ%ZLAm.B;,Y \aoF p?< i΁5$zrW8cjq"YeJEUhO7MMđߟ|]k$R}f-rg*Z Fμ`.tF>3Ů%r*ߪZ15T{gύ/O,dI?P}K؟trx|c+oјԖѿkUO7H7&=G oLa#~@1?riâ d 5{+A%#צߞdQwGA'6 {|{ȣI?,ńS[}:3"oE&T& ɩ#=R[E+M?qTI6P9㞞Fiʢu %M{Kqĝ0ӄ5$M$/[cKw/R:3'ȣ~}}v[p<5F%0ľů=12Qq qt"Plgʗm9<yjyaoAotLY,FsCp7,֗<#xr?eaRx٦W0L&DINqbWDvz,.lh?-g:vY1k.;l/O_<{PӱR2׽fpO ADo] QN$K ^%/G1b4֌.FgXsxX -ȱdxoe*<~0Ҽu 2mn%>n{3򢞞xP-| ,Q6(qCDIJlx`+#g*Mc@Дɤh2;7ɜ!>|[+OB^F_\ h<55+?9&sA=&C۪!aXtAbqnLpC GRDt,cv:&t]{rvix6nnFŸ {<Ff4 ߃'Z pPB̤q28ٸ~;ps|(h*1 iqh~®ɈYl76&۔:7?=!I|yge*|k()A|~F[)>[Q߾/^C)ΕO$J#nK>;$ kNw 8dDX֖s5yh#Uz ɗL>I7(9T`f]r1{l!$:p#!Ϡa@6|/`S,> E9~q}9!YZJ[>XsؤzW;vǤ\!6HmƃXyDqa9{%+r=9iI:NzeBQn⎲ͤ8Ri6ӡN#J^E=MO{敚ONoz.V<omsb*BX\ VHQR#A_%R_Wɯ7?|G7u(y /USD#9ھu|41xGU~pBے]3~$H[ښZߚ0@)LIV"qhjq/վX+VSwpoɦ& /s:qI:IMyY;}yeٸY2:kGh,x~.S4wQ^} I+ς^Ⱦ\rEF.o\dpr7{~?_ENzS$e0'ynUBc%~O!lhA}g(t26]W757ہtAت.'v8xzUE_e /v'd;^BŽw&WCu?ᓚc&y/=\s1{"&G7g~ p yg?9g=Hݳ=(wiw< 8\]A %aߢXSӔͩf*2aŲTN:Y/JT  L["t$-$ #U-ܣAr nh`>eإzPMd0So1WE;z%|^hBHdX,T]q$q}J!814\Tk67mMQWƨ|;%',Cg<jX'ϴwKWCHW1]Q P ]ȿרj}kJ I=K2fBQDn2 Y]_sFZOwPef)~8rmٱa)y=/77x( ij:lr} Π8@lS*5][.=xl~,CwBbQ_pu*:@8K8+aߚQ}ь7 6^ߍB@V5~umWC6 cUd MK],بľa2-Zl|Iz0~3nM}Rf=D,b㭣&\ гEs[l&PNg%S$O p.b̛ꫭ \V V;?}r]ށQ]y>2yσ< ~^/Pm*gUE~XM_Tz#Qr8{@ n2 C߅X5q%LKDE\Լ|WcBC N {o k ~HU'- J0fm1 bG~BLvY4LTuUokxo #do+i[5ee?2ALLXUܮz:8qn^lj纏#/;j/qW;pGY=ǘdȖ=!*uD7࡭68SFn?SHzGw㽪PLd$'\闋F&EtXo#϶ ~=;ECLF*tsNwѢggwMT=(i~(g Y^2ܿ|_Xh2ah?]~9W g[}=z~qpDA6 g﻽Z|2={tFྈ>Iۊ^!(g|}a*C)"O1ׇ]Dzz2-瓊?> __mQVϕ.T F]+*y7zz~?Y Ÿ$o?NbI?aL_]4@AuեY\{Dh_~һ{%Ա\>;u1n1A EM4}׮Eŋv5q7N˼L U'dɼ1}( sʆ.l7<*Tpv-d@ϔmy*qF知t}nv9@9&# ~ ]Geq6 CO{l7#@(Y?xnZb5 y, t>?|K_]V ˄__>ng̅b $g-c"@!k]J>,>k|TϦ4t#DL/%qͩ>ʃ1KP͛FC|=%ܡ;Z_kQo)Xۭ'hNB=:?ۡ1:[`"w% o]V:+a]-[ʺg&~(KDAH>լRjl!WR +d[ +4}\q9a$9skǐ4 ~Qjw H<OH/pĞ}A &X+g^=MѺ)7DBߒ;uEpP BfȾF`NїUWVjk־0Ā U(7ߴ1Qz#\d^uZt4[V-JX)/Je?T_m?/s>EZ!Amْ΋(RVx:9Ys/X|(IQ}PR5щU܇g9jhLQ6 oUK cpK=@],A!Bnơ6şRBĜ:կ;:a7BJ@WWNgV%Ml Gصə<`MQײ=0t{Sv~ WBP{,Tu]UU| Ge7gEgl`)Q0=[&>|UWA-ܕ1y$uU?UcћZ4:+ "asr|J?@ZRZh8M,?JI2y>ە?q$&@Hwc|Ru}=]sRDx;~|Scwɝ'?|j}yjcC)E/y^bOs) ^KCy~bq+Olxz?qTƟ/O<ٕ0'߾czP5廞?r~>j w10׺RsO6F@*W'*^w}} l.O> >AU*#'^lot/SV?a1wEj}?DoY;rQ$|:Ky=C:Êk+ǣFOrd<5['*ODp3ǣ4-qUU ]~*no\\ #bg;ѣ˗yy˘}|G2]M<#at%GgkRDɟa%qe0|vzWӳg9W[ 0tG4ys{|,Awzol ҍW,%9DdaL𗄨D=#R'ߊZIC=o"K ~#SַbX66a˛v(F^q*AYB+=;:ז0uo{ g6sYX!9m-#3IR܃>{YHtn\Ԏ6ܳqM`)XWʸ!õ\8!h3I\,1͖_Q J#O.PpXʘ;`m0ηT e*; quoF8?聿:`w6op ,SOo{u)uhۘ~ΧfK[Lb/ŅyzI({ZlVfnSk,w7#W[vַH\Tjr ,vW\ ]o۔@4A6bwճX5l1W K;[9.|%6eSJ;A *=^~?TT0=Z|*Ht`oz6};Hz@ơq(P;;<ˡ'utO{VE|"w'}?gI| @(mջ1E )&8=s(ԆB0_4K{PNo2砘"e C˼d^ DO@W7 {I9GH"О N'G<8YR /*'BHѻDغ>sy8op.y 7~߭T kx0s[nnzϿOC輽Dre&D΢̒oG)'M#kg?yt !y׼+u8F~'[ӓ< p疀(qL{Lb|}C_al }k']AM1M0}ku=@2 }u(Oj^gLE[<_˟GAB@紐VkH~_C~?XGCd?(L 6&1l"&Q򨘞 yIiBx\{&,?_%5.M,HI;OԱ%ty9s d&1ධ ѡ,L,C\ z&}m%_5$gy䒨ro^pgg9 [A)( 2 #%A}R?|@P1GDObQ);+y6lXͣv'=APdV/g#zQ_΄z JݺW]D-t86<ԇ|G 条<޻;bSo8L?[=Fy~Ǿ?j!C/NX=!&WMD/-4uXx7Ce׃ i|4(oQDBguC{~P?2ϊ[HQ]G\(N#2>jDAmWQ%ZXC~U`50=jR[LA&cPM-@5`67K$B[Yt8cKp2dA&[r] cC/Q?{Im}f0[@Yy?,韭]F?K2cU}9WWk]%d9TŢy(h8Xy(ih?O >[_`?`zAKj@4j>0s?!ɕj1cCM"ѵ4m5X4~IˇIPemj9)+a#HC~ A]Y@,8ݓgU`?d;oln:ؖߥ1W;lXLzءp^5%>$FGD}Ēc"50ܚ˨,6Ff湔3=a`0Ʀ潓jաlyؼ+Z!HEʦ/!?3~Ό.%ō`z{DvC5y')mg9٫\6h2h6s=Zx[4e ej{JS8@d)P4E9h*0kC Vź:z&Tq} JIxTDfC;vBa)Ul+Jׄ _Qȕ..yKWI\Zx3텨MvP^w3#jm K%kuet{Cuc5O'E05i 7)#kCBJWxAh-q|GZ-X Pr4 Q:{0uc'P+Qv="QVQt^)<$d~YMoy~睲O }nrܳƻo_9Ϣ,~_7!y׌?yĵ蟺ܓ=9O|Z'YxWbzp`U" nzOt,?^/Nh@׃Ay]^SwBDYwT UίW|5f4 5]Kpos6&ؿC{h DU(#5}bw{Y| s/Bŋ(%XӣA=rdAϷ &g!l0}g$,5,"7Vx+vr2(C{R:?p0MtxC(ct>Nt4w3y:Ch65k _` oyeG`FL?~1|u@ǡ߿dor76«bgL7ecyO03u/=n`}w ]qyKwN}s? C(EڴtN'E0&tE)?[܋Le^O~AX.]L_`UM{i!rp"kFEJ qzvq &$ޅ&}eG 5^_7RIrp 1KVaa,WCql3,hu`V)P4}Īc 5o >hj3#>Vɶ[&X*dj׊m a/8u(}YM(")BQ|ﻠhiy'M0M8&jlQĿ4QC~z¸1i#&?p2?4=Մ{D)q!EK K) 9 ,/9w.~_ _)Aa`|FM^.l$uy=` 7?7@3^&7hx[<"^wQj\w]Ooǻſtk ?|# L,TkJq,RҦĶ _vD^\UWyNu`kMоDX(2 WdjBoI `vpSCfn扑@f`%1-c,̕nlkM~^8S8! ^-Xꇉiރ~|S}ͦlDs80lVWv`|"uF%{q]\j*IzGb4+赣 xTRǴ&@]MvX7@UlAx=U%V2zy-&iask)L6"!k݅-"]pR%*Ivp}L$z>Z~ZmP779%,a[*[lIɄAFCx+Ra&V[l͗U@lЀ^S瀬u\A?}T -:!WMaLoTe *^jɭMs6dnhd1oWHm=ٰBT\Wm^^SNbBg3Uˋ%Q=w7 9n*(+c\e;&-SO9{^eJxvi#{H bDϑل+Ӄ 奏lɤEzT5i;g%~<',Xk|ӯ ;˪W/z6P"(Ǟ_Oe4 ОX?l N?FowCN/M]':UߘŃXw:Jy*ޞ>rrOn~Ɔnh˳A2osX.M$z y8zAhpMQ|[ޚ1}6g# _oc>^}^}cݥ˷Ky,1)[3ys/k %żaibg ]U;AhUݛ8" :V shq/+ 3h?\vl} tE}_W/ lqO,ޠgӳn)Y;~^#KE2[9g'1lͳof#oU#-=KfeDЁ m|RйB Y^6܊Cm#$]:>}B%yデad>S7^TsUc]6P2,\] {kXo!D 2t>&!˨ӧ+K0I( vT,Ɋu9h2z#GKR:R_b@ m4|Oɮ cͺ!Fх2k']FiȞ5`4`Ζ6y`@;nd ceD\^Sp=ҒiE:PMF m %M4. : kRzKr@޳T>mXzG? n~yǎG\oC˶7;>xn{אgj;@-y@4jt:c72ˆ=ԽoUFd[\~—)޻H*j Ԟ?|PאV 9V\ȍJh8S^JFvk)?r[Hn&ZKN3vg5xbK:QI *C[]x[ɻjCd_aSHP!@W~CSP24C?nxyhB{кd H,駦'(:5F٧ ߳9(,!bzT{a?iT{_? 2??G{yKUC`x$ _/i9gG ףLPWmHpnz$uy|?Ig_^}/'5=YB׼ھN<9F]o1]ECgU֠꫟O7-SlsCO!ݫ%y??#_1^.'3?mbA!UcDvDPߓiUV%?!湈Zr 4.+ 7(Lp#fݭeT Lʂ,LvwxF5]@y^ʋey1PЄ#^OZg}K0f9p`_omNr΁S ^D>SHIǣG=>lzts0bzpiȮ5nm5&;=د&(Cs Տ,#O Ŝ[L)5bwv0ߓ}n/ K iQ].?u' C.O'fun'7>:Q{PjQ(ئMKqo:hǾ^z]@F]F]l}J a59A+o)=)lO fCU$ 5BU4ճAe. g2:Y 2 mjBho~njnq"yΘbTQkd v/t;ak5 x'pW{kM@|+ٔaHzC8ϘEdK, +Uqn~"_{uZYZ/aifzE|)iX^+BHS[DS6LMLfIeAcʹo7 .0aLGsؚ>jJf<=g Mgh â9b J{|Uti?g:$~-`vk /ph&4Zc%*Q d E/;V>7k#)A͡].U^;܍+ႆAp8N9jdG~3ӳC(ONX5 椎BR޸k;N^"3xktpRvp'쯮M)\O,j u& *zLM +`ekM@;L~^u豈 YrڳAO*ap@^DY__'-Xy2DsPs4|BMSZ# 8[m=jKIԹYˢ`!|d8#Spo\>X*<}޴ Ds _lpm}z rs#ro>F5톣"/A\be@zփI/UMOBB?h:{_~?#x@ӯwҳ63kATnZ8dJsgţ$Vxb3v 䡳FDv:P#7}ͦs쯚_×p_=լrvϼϪ|fQf!aB_kSW^4~ꯨZ}ʜR/$\:^Ȓ%x#("_#~v׽߿z=Z6,Nr]4K%#".B{;n]eXOS׳7oWtU 0?D{igu;xDCӨ?H+TDuWscL_t}45͡Q@v^XpcF5}fR0'{|~`Wy4zRGqq/gL=*_z^ww"7iz{) >О*/|$]>c5}COp F>;!Ê]VO,ф@9n10'Eɚzt)DvKwSK":|v,6 L$zXz[c(D8#ߘ=>w>ŷ_>_vx<#7|_w_;jGzPL}o`t햱a. Mb{+Ot2(fU ?%Ϯ vq:ŸgLjIбf7ʝ w \zj[̥e-/KLEeo8.!LQ4>JݞBE{{ݣz6Zdxs@3 }Č/ 2 M˧RzY}r?I kz=J-hڐz9H> a57pkS7!u`҈(45-|.sNpcU2X3`wq٧R)*F1Q,=sD@?-Opqgg]ާK2z?Q6 |?CS߉-|ds,m9i\ v0Xth;oeM[mqŶYQ-Tzaו?,2f5溚uF }bs\:ﲄ/<7rP\q:X m]I+ r-#J\d>q {v,;AM<۲p6 #ח6 [>r=/9!MPnR0 րۼV iš|eY*.!86p!dj'Ôa T6&Wb]"ź^8T?_!?R0"Q|,C,s| A/T[d[$hAGW8o8{lɣMBOe &qhRn7@Aֱi\F<}%JmrൻZ f2S̀~Q9PHW4Z a]sS{ 39`e_C[81ھ+y}9z'_^3J 7CY7]Y,|ٗq2ô%N1c=6TvRpmq5I3>YXŬ3Hbs\?j#@*JC\,zi31 (N*Q՜<-+Q+]Ƥ?Mu]JO*wh/+3%O#3fp-}Mzy0/ȫk>j$Q\y_~'llz//;lH]H ?4k>Ksɒ2X\Ȼx`os N|~|نp#}DNG_ztu>El/qv0~âl_%й7"ZW=gӯ {?8F9e1= +B yļeu _ݚ7co`MU?ep-og{'X|Zʧ7Lofs?/'@q"tżg 2gLMr?Zj[l)m+ cepu7,cvχi sB0r;'" Tn(JDAK^Uld & ;a$7zk2e%Ff]ݘyhCm 'Zcl}|q6J27x\U1E4boN g;#8[[Ű>EK[zUiG '78ZgT+P,Gd4J{ g7k6WRې giJ%HU,g.trȮ8R"4?q[#C|%5aMASAWy1>3DK.yUy@6kM^\9Ģh6#>q>=罩?H/S)POyӮX_4khe.gN'8.4ZpR2t;V04E2%ݟC`!9ƭRɡdaϟ4t~X'+Eي ^ߚ֕3*Q5➷L5w t'IUbgJ~GMWbju׬0^/MsMZ$=%B4몝D+i7FAj~Pve^#v$\ЁFɯ^3u)4_x xhkg( `__xO6yA׃liux7."z<={ͦ@0kt-bz:*Cy潏?j~$-='E_}y> G?s;վ`"g{-#|j<{^_j\OPΎ/gO/_‰E9$ad..WE!S+t~WM%[9=gqvߊ_.sR$jlA5{M"{ȫ~ٓYԷ{'W5ngNi1Ϥdg}/fXQ8V)tq<DM88L=AdlDhf揍͐ 5A[nr?T|r\ef%C䔃oVC 7w w/(˔g <^ΆMh"7(vB0B)Ϫ|۪+=LCW߷ &0}MLխ'1HwifM"GE`GbznJy]Fia*_de*/=y3GyWRg^h sE׽Ԧ'щ!51D1(߷#kN%}ۋ~w'z fL[05wKJ%O> 䈿61hoXR푢exeZ>*6jf Ẉ:>пLh_t2 `S@=GK(SFȰ ﱵXǷm^F a7NGg]TMc,'4Q{\ۧM1Y~::3G9,YhV ?*rLN1VC|o^zij NrARh Wj`&"u!#ԺGi]"y33 EIRk |Le6tQL|1ş8K3,F%=ꥮ=(-Z~DܟJv} ~ UcY,4?GWw~3t[ߢ0ox`82(S{m="wtK~߹gca@ݧuaQy$㣿= |aԔq>C46[W3,wJtZ؉vFbm1iO)AAfT?K ;pe}ӏ4`Y:ulamWV $uBcr09̔,^a֢rs s{t(&R$4JgKWO 18_|h`e.~Ӝ@njYFZf Le,H'M7(%,vm52tDjL{+#A5Q{"7[vyjK! S0K(Y {v9/OiݢA*BE6^xR.u a[cۄÙ/\עP{Rn.-~kS7%vbf  x-y*-As׹8K50U9|gvR226VvW4Ӟ\uJ4YlAZM*Q"E]wO f8T8'@[E!Zw?Il0 !0;wz.G6[dn'4i Ɠi@EV)t9j}z|Lt; IWc^e7ׅųƝ2uZoW(ʀ p?t.*l綶ibzW?_ ׫o /3ݥ+q\|2_*+e˯?lzTwճ%m`V _d;t=<]ZNm4+nxas{ίW=mO{sP'?I%O7_BH=Єի'I~'O,HP+果{B.3, ֘g݆a4Ggbvs3y9u$/ ^4lo^({@ _F$:_WfL9|;jHZN^r^'Rrm2{+"obOtZU75@zdVO*߽C>c_ `.@'yu38+':QUtssHQ2 ~$HVz?a,66?$s;;{˴|NK ~2U 'a%sF5=Dy]0xݟVzk$zⓊe0O4tO9i2#εޛ27$Nm4=M a 6/unl!`Wc 2\WdPGwĸzc.IQHG֋%+ jaZza]%VƳO;6k{K:#p|5wx]v #{i߆ Ž~6KJ=W>{1#ʈ` b  $v[{J/CFsT iѦ t c5=/fuk&w{HNh/ |խ]eh[^ƺa2 gSi~Ӂj)ʏ|10,vG\ԡ"Z2pr9@:grn >n> ^Mot8:gf J+Chx?u9Ѭ3@laXDl>#V[Oʵ K젏0FF4ޭЛ7[`7oGisvFk'F*ſZɥ:l-_Ө1LJr^V˧V>^uNM(cOll*Qɧ}\ZSx`&8AFdض3Jv}.GFi{h/@.R\ҕݝ̹ DZ7^cF;`cmLXnBM,]yˋ}Lb: !jRfI-O5p?,l%a2$pnDR r38̈ sjB:AUhJyE-HN)@m>s^ξ-V^悜Z_t&ɝŲxJUi@1PUnd,U(~PCF+Qߌ nߙqUNnakOڏb7$Eznn@“h&zaֵ+@XUG؊,f^ņ)uf%\%ʹvౠ̟,(lv54|bc7mߌ*BnͰh`}<+~ٷ;isM7hʽ:jP7U?Xd?9=zdN?^ K _͍?:jz%]ģA?D,P޴H64VIV/M- g99Sj&ʑZ d9`2{|^ ~i[1TIx/ {90'~UOO 6C?;[ƽ5ߪhxGKg/q=ϚQ^;z& ΊiĔ&*\G9=O^)k=U|ӉV1 ^>Up/wOu{œP>usF:knEL_>ۍ놟F^u_\PA /ow,\T轑~34u˯W}<mΥT jqƅ|i>WV˜w2W MrYN4>k= Up#2^:Y=2Lm 2lɼ8Y}?0Isor>y~՗͎H)2>\qm@D̹ڸӴꜢk;swVV6ԝ}{ª~=H*[Ӄ6죓}y/꿜O,uߜ@~d ċ!JIDATxڬVKOSA>-Pʻ% ֲ "0 ,L\ƥ;[ݘaY@`Q@HxS(o4-:q\*|wΜ9gcΌ/tC=GQ~dS2)\ tɼW gC:ad1\3 ud5@,tu2ڰԥ K@Y 77|>ng2)Q*%uu zj쌖X1ڥs!R TQQA333tpp@NfQ~~>qZ\\"jjjZXX7(Q9'zirr~?2A\ee%oN~Qm5Q:@ @rJ>Mjkkyfcl}*CDŽ SSSX6 6I&F"۬g:tkk0 acgggiss5tfNAAA&/|zE3K82<C|uI!x64t .:%%%\,H$---4??O{{{ÍsuYKpgl t9ёN4.H-++ `@{a!%%n":f ?~z4@@]c@e)_5!T VSN]]!<8|}}{/~'O0'88777B@ן1RH߿ @G&  9ϟg066.rkpk2BO bE o߾Lu@1?FFP+**00ALL @_f%-FƦ7od1 ;5VIENDB`youker-assistant/src/res/iconbeauty.png0000664000175000017500000000377413260315532017270 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼWϏGίzgb;#( !, 8?a 儐  p1 Q#v*{U b宪Uu@]zOZ'/(ZO)Gi\3?zTn^<^0 ~ٱnǵ7EeFrgq6O1 "BDQ( UI i^nAxȵi\SymZ^O 0f6i/:?鳲i013Wax 7눃H,Co0ED5N.n<,C3j764ZGkN{M5msCX`l1fa@Cn}7R$(ܧs8٬0;DIHYajRX]@N}9`%$ԎWϠ=߽/?(WY$M f~pKNCcnSPCZ }Y(-K.8jgZ9yqd۾~ﬣTpp(8n?ְkSԖ&U[]rтέ֝6";@}kgp뒈QEGVA*I:y8v_~S,wWV^$(^l~N K8\-ɴonU@L:N)Q^9VCN 3Np{.e8b.B(HE(Q2:R>d<{}߇`F,7rC ?lS$/!V*rRb,1"Va˭H IQVVP}$s̽  [`)7YWC_wu>\bDRL&0Tq @6 2fH$Ia@nwY6>A罿׽Rm O?rI!pj(ΠyM*UC:Nlk {8ԝ}K2`,d(HAR?ۻ(yOOpxxWU\E|2~/PU!P 7#h.\. ɻ*WR2k/K MCg|gc_}Y:~W)F_~'`[IENDB`youker-assistant/src/res/ok.png0000664000175000017500000003456313260315532015537 0ustar fengfengPNG  IHDRa pHYs  8$iTXtXML:com.adobe.xmp Adobe Photoshop CC 2017 (Windows) 2017-06-22T16:14:06+08:00 2017-06-22T16:14:16+08:00 2017-06-22T16:14:16+08:00 image/png 3 xmp.iid:33eaa353-cf74-6f45-9cc4-eeac871f3c63 xmp.did:33eaa353-cf74-6f45-9cc4-eeac871f3c63 xmp.did:33eaa353-cf74-6f45-9cc4-eeac871f3c63 created xmp.iid:33eaa353-cf74-6f45-9cc4-eeac871f3c63 2017-06-22T16:14:06+08:00 Adobe Photoshop CC 2017 (Windows) 1 720000/10000 720000/10000 2 65535 16 16 3e cHRMz%u0`:o_FIDATxԓQ @Dߑ @Bq@@PpXup%%_&3U!`H^@!18LA9P4SI])<@m//``9~@a[[tB =5Qkp*qLbnт8u"[/mYcm>k`UQIENDB`youker-assistant/src/res/cookies.png0000664000175000017500000000673313260315532016560 0ustar fengfengPNG  IHDR&&:8tEXtSoftwareAdobe ImageReadyqe< }IDATxb?:`^f9FcWڼ{3b| 0LV]_)n Y":Ù _Uj{/0@C ,;=clv>;r/1s3dgxwwsEWg/=~x4),Vh6Ϛ'  %30ge=Cr-فq2G/fHUex/ gÏ7k&N?31Ʌ0\z(Op>8(,0z>~%?VwQ/ ,۩Ux  B }g|g)RiwCt?^ h?;[i |e({ o ?^`~sz OaeOD3\O~pXGՌ`Pa|pJ`c"Óu5p0)nWp`?ß?]^@T` B9DpMJ#}i"L"dE_BI-A[%ca1^ZfJ7ڽws=Ҡ9J&_hK—BV戮M}䮮~p!0gdERur{XtFPg'?kMŅs1X1G?o ,6PXz:+,icTRhC9 U0ԍ;=ft6-az㵬-!(~ŠkL)[%WAe Λrȿwpd –AFS6r*JNH,"oo)kj†ՃCJS=} ?!ID1"[}_wq-в,O Ta %!g^+g;یr,%JGM[HEjw QI''f#LgEAZ!Uq̘z:޺]"Iy0)VAї"څeKKPDѲԷ>A7&vr(+Ce7;mOkG=WߙsNA'\腙agyψy2n[Ww챲i)*fVn銤5/RXшV6qk5p mq0,JD$uԊ5]{>چkºzjp@fja.C.hLdLn7b(u&᷂6NW1H0l3mlʹ9},ʽab3ǖxs F2 ,9[!T@ˋZ{Bʞ1yBEnp;JNBz)&\O]c2*T4Viqx;/ wW33h1#|[}8 %B%|VM&zFXH&>S%.A˽t_CV,|E宩2`D;o XvUiJ,-zM8uSD՘lx I~QV)æ,,⍜̋ Rif{~'ط"ߕhZc73;nPh XPAQP ,GBEA5H5DTRJ)mtKKc)J( nrޛ9͹|;7ٍٮŵ{ "&$Qx;nhmmWոbGl;J _Vk|a1232(G,sQ@h0xEV YJh*VvwPq9^W.Ulzx3$#`FrlIC8-8FC~`"rƖI3ۚvfWRrlDž aheX>:MP NFICM13<-B?ݑRQM4&b\DO[bTYj>%)SQ9~r$PFv? 9T?;ֵT9Df5 Twh?ueRQl>-7e^[ufnEp]i(M? ?ׄў"BSt| YD*J=x_CYyp)A8~).? I/fuUoiOq]|6p gKgOc-}6H`WFLrQ"f{ ?O/a3LdAM jDגfhLe읋 =(ōkk\,~P96ߵ ދ I_Jc (˪ 29;¢ KS1^kHݵ?ލ7Bb܂Rdh8 ?ԇFe̠ TD,&􂣳0*P+jy ̵FU:DʇWW{I?ŏLtz6 W )*@TMP%*} Q2bѲЙT 0noB?L])yh kD`mq*xC`\nE %)FzN/ ['Ov%Dl_AG%f-Eff5_6L։8*qw? 1$@ _bUYX飷ϯe}(l>Ch:4tE+UrN華2:^~)Q2_s+ub N_^x1?IVERǠ2d*uI㧧Ϝ}cEs'_!TE KXlfd01vB_3EhnӤcƽ#;d ݒLsB\TO"?ΧGF\E(CBgȺ" ձƮ}eY#{X gÒNsrvdsD`hd% r!aIENDB`youker-assistant/src/res/shadow_hover.png0000664000175000017500000001005213260315532017601 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp !2~ OIDATxyPW? q0;NIʹS46[wNNn<LZ;;!1k16̍IH$ttXџr O־~۷g^b%Sbcb\؜& a$f&])x+2=A~GbqT!{=M~_ssmĖD_J˰a[W|;5dS}\c;]ƛBȻq?%u #cIxHtM9Gz^ d80..ÝCBhP,I3f--Mw0݅q#]q{ڣeahz\lvd9IGqb'ǔl`!kZ4nwukwfwLѩU$!>p xg|,t.&~{Dng0m2y7gRѳz-J/G&WMFEc:]y7]ܳ Vڅ9lƶ]Rnh*-JܝJ uHc7z:}}8juj!.w`VKm =qహHq zbYcF\udb뜌 5\.7@R|5lytbm9P;\(ZCiys2Thӂ# q/a >n>3#;ѡP$ k9E|Չ_$\20 3 &6׿F/?(A E'\虫}U,!>qf2 or3K2l/cdwew{[p<gd#]]a&KڨSv2^408DwێO vV~lȎ᠈qgv z*7wIˮ'SaqbpVC zu?7R6A++e\㦗z-Rzk]_h.Ve$">m pe^xyNZV<t|@9a=C^jhA >o#U7]?áw]ϼ |:qd|_ك7a1/tAsRUo=GkUoG#+`1ګ3N}oZWy.&sЙ>zއ?#bg)|wV .hn(.MR.F"i3NG>dR1+ؒ/`=o`7vh$aKP<Zs:J/ITh}\s>{78_P |[, 0h17|S'F-@ J +p]y(u3bTF`{2:n"f , 5b &kO+[2$GKUd1 k}t(w_Aw}̖KB`ƞy8g51rD{y̸PDjf5 |\#G TOUFu5J[lb5 5SmLSƈӏT UA4ˡVLjQ]c.*D-WO1:fQ`U^ڏAlnLňQ&*@1#F YX@+|D$gx\noX`kኑ4򳡊]d8#Fi 36:r.`YGYPp]Fzc(ǷS#0hK@ [Fb(P6haHD2KCP%`lb 4Md 1J~6T%ISixlQ#Ah6T)HFaH(5T6b*'1V10YneAl7FReV50Mrz]hzx?j;Fk#6@83IvgNwY΄7&+u`4ٍ_6& F-<` / n7cw+媚_G-@ Vz?fo^mp4߁\hՈuRNz')UOo#OAXJ@4/{O_xEWY^?| 4w>NPW֪tr^W=:zkV[D]҅|AE2u "]JMgu[*H1$烯ЩVk~NчD-t۰' @٭)J&qY_->}6M)MR?x3>-$ǍQ Nr"XVWoc@zmŠ$X :|fq8! mo[V?$I2K~pW<Aa'l$-f;iEMaH(mڔYвF@Vvqp OUtd\'|gaN: rTnԎPA I6h(nAšYqKDܷpdE70Lw:cY |nCRkY&]CU1xٴsNbWYepT(a !  pd&s20xV*PZIENDB`youker-assistant/src/res/ip.png0000664000175000017500000000324013260315532015522 0ustar fengfengPNG  IHDRVΎWtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ^=IDATxڴSMhQ~d6*VE[4*EQQ E<ŃRK1bċCIE(؃fkڦd74v3qSBmEeg7!?kzzzOX1 cζm]!lsktt,#C?#KQp_ז%kF %I_gD󃡡BZ`nP(?+e*@0ތG+%I3fGO*&EsQs|vE.]7fYXv ]=Z,k|&Y| z3>qR4@+|3'غ d+ؐj1Gu4o+7*#IENDB`youker-assistant/src/res/systemset.png0000664000175000017500000000634513260315532017163 0ustar fengfengPNG  IHDRQQJ6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp jR IDATx]klE--`C<0UAmy4H1AD 4|/~{_sU9"#?ch@n!1{ Cg~[lQWy?GN  UWa.xfM+, (ba+GkL ? m"nJ6̻H9Ͱ+qH|u|$ Df9JS#Dҧ(KXW*fzLPIXdӱ7@Mx[q.61E#86"b !hϕSB 6G];qfk*IATfvJ w7\+Gp&IBΐ_u/kMJX$q `=JbcxHqM)u()ctIb_k Cӗ^IbOh8>K&׎=VpzpxHq'%R+_>?1ӮIf[ uU o_=@Ћb)'U7k`[ < GZBF6C6b.j`$?7a:oD,цv`/ ] 9rnv ak"-|EN ˺ᄼ(}uY Ƴ3xgo,`?/dMew ${lpQΗ{\Kx_*S +3"jH-X djIb9癴J?KX0 kôeX:Lq"Py?͡4ERP9qJXcqx(_ijxл.c&M /&)}NoD'l IDATx] lUEbZʢPj,"dQP j0 hL"K"* KܵT\*K Zޓw~~oIory3w23$ q/*( 0… +ذ)999'9IXHp S!*"Hs{k+}(]m f]$&8Gp!n% 8_H]'" \*')O߇9+#~W]FNGقN~eQ^[Dcm,x1#=ɋRщmԥr%j;;C:v5nM]VQrK``<iA ZĪ K0oAs ``fr硫SK{\ _eA"d&ʨk7#^nL/t'`DЯI`7׊aU23oA`:E݂B60!X~NXN>TƗCBҳN)I0QS.|*8"$xLd7'$q h"2Q  n6$i?łk}ԥ/ $- @2})&%i)|髦>鲏}ogC`?fzP&Q~_Wۢ,?*M_i?B/}}D yOrPiH -#>ˢpi.<+@`r鱻ɪ;Ibk`nba߁Ss5n-f0t^5xF/v\QAWewHZɊL$D˕ ]6ۙ)M̚B]dd<i6 Bqeē$y?MNkeR(VAClFwJNH~`7QtPJ N,A1CTmc<#iw;{,kV{q:Zdى%ȗtZ'jHLi$WP J8^ @`s8v=MҤb"(RveECӗN]}YgӀ8VҀP uV(;r'"/fۋK_kq"NRh$ ߝ˶q%htd,&(P?k mڤ>F'{A գNvwj=#Iua$B G g1QɠIد8pP񄼄6\PE&Ox B}pR$6t 2H=!U$GNzJI"RA`Ė-G:lIENDB`youker-assistant/src/res/tool/0000775000175000017500000000000013260315533015363 5ustar fengfengyouker-assistant/src/res/tool/option_hover.png0000664000175000017500000000235313260315532020606 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp 풸#IDATxb: 01RĈlϏn ʩA8Ĉ -5EXQh t9W!$}9Hp>dM$ L,B؋>Ƨ h5fd6ۀW&Hdj!Hjc!#AbO@Eɂl8o-l6~Cvbp'e#3wՍ ^ˀR%Nre 9K"6U#F|(8zq6jH AIuIENDB`youker-assistant/src/res/tool/max_normal.png0000664000175000017500000000220413260315532020223 0ustar fengfengPNG  IHDR$$tEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp .IDATxb?:`b( Ftj#,@\Osh p)O5ip"*0f۠6?]B H5q@&Q( O$IDATxb?:`bC1v,HlF -benY  Fl'7h!$Ft7n" cS3ښQI`t'' F!"@9 "*5k\X(_aD0k`T+!F4bBJBTw6(?lЕCih4 ԣu=kIENDB`youker-assistant/src/res/tool/unmax_normal.png0000664000175000017500000000227313260315532020574 0ustar fengfengPNG  IHDR$$tEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp S*IDATxb?:`bcdī -b"h+abz|C;E4݄Kb1mΠT`q\ÈO! @#>#e~ 5tDgj%٨F4X OZez4 WQ0* O(0l?Q ;|.6KzIENDB`youker-assistant/src/res/tool/close_press.png0000664000175000017500000000270513260315532020415 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp +DIDATxb|]΀POZvĈlNqsAObl,S!,#$yc/sbj,{"+MpALr %0߿腄w]133c=1X` EkS/ȯM!6d$k r$G?ܑ pIDATxbT[ 01RĈl_"8lX#pZv3\\8 hJv@m r,Ȏ0WCnVr @NtOFhLX"[pjLj4T{ih-gK\pT5 Qpm/ mFfG-)X/0ULdZpAkOA 4Z\Z6j>YIENDB`youker-assistant/src/res/tool/option_press.png0000664000175000017500000000235313260315532020617 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp IDATxbT[ 01RĈl_ I*C8Ĉ XQh t9W!$}9Hp>dM$ L,BS_O+l\26"moH #髍=)$ "iH h_` w*2{8 =X។MW7Z6x-jHG8ɕ=&T6.q,Cr1C!ЋQFe2IENDB`youker-assistant/src/res/tool/close_normal.png0000664000175000017500000000237113260315532020550 0ustar fengfengPNG  IHDR$$tEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp ^c IDATxb?:`boDk L ZOsQdS ںz 1D@G†h|0(f۠26Z\T-mBb_K05 r e;t@!*xDD4GƄFeDιѼ6 0ڨF4 *gוX[-UtP8JVB\ 4Pդ u 1%556h3ڞ7LrC9j`!bF~Au;ΎVm IENDB`youker-assistant/src/res/tool/unmax_press.png0000664000175000017500000000245513260315532020442 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp u?IDATxbT[ 01(f _};<&&#p*: * `~=>6Ie43hȕCs'BL"`=ȮE1 L# o2X%1` 6̤6! @C;6i^@ Zǧ Xv07rTʨ#ĝL = C" mFfG- G,$2ZVȥ e_ܿo4, !(К}Z4`xx{jx90"#GQFeHvT3mIENDB`youker-assistant/src/res/tool/close_hover.png0000664000175000017500000000262713260315532020407 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp TIDATxb5w.`b@Po>#yL8M F4s>9]D})Ȉc̎X%C`ȱ\ x? GJ`? bmcga{{GnP3(Έ&Ϗl3Ղ|mDNt3בdi{Ǒ-mwWf W%Vȝ3:K3~VQy~= ~털̦D@6Ś. mFV&66&:hb#.,E DA+0AsPRLˀEɿ7o%X *& Xcggfb?֐g@["?WK*[O++xXX"x"ׂ%ȨeC2;9;IENDB`youker-assistant/src/res/tool/min_normal.png0000664000175000017500000000216213260315532020224 0ustar fengfengPNG  IHDR$$tEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp ?IDATxb?:`b( Ftj#,@\Osh ""*0f4<d$ f9jАI,6 0guШF4Q:hA4pw^2IENDB`youker-assistant/src/res/tool/max_hover.png0000664000175000017500000000232713260315532020064 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp B|IDATxb: 01RĈlϏn!8rjX#pZZ͠]N8 #Aّ}CP.J}Zu'@;FE<2lc*l!Z© 3 tHP Kt%B/qSD3To-r 3$nlXB"`)X W1Zi=1g&-I`4SZ6T,:8vIENDB`youker-assistant/src/res/tool/min_press.png0000664000175000017500000000216413260315532020072 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp 'IDATxbT[ 01RĈlN9Ĉ |QC m` |~'AS\6IeaU7 stj#[@QF-ꖱfYiƍ&QF-h!8IENDB`youker-assistant/src/res/tool/unmax_hover.png0000664000175000017500000000246613260315532020433 0ustar fengfengPNG  IHDR$$e?YtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp 1zHIDATxb: 01()*?4ĈlNqsA8wY݊fPîWN L">r܉m/>RρZ3ѼA;4ࡊX9at FhAtB^V,0@$@ LXIxITₔWh96``q~#} NF&rkЊ!q6#3wՍZH@aI+cH ze@῁ ZbV0C =IDATxb: 01RĈlN9Ĉ |QC m` |~'AS[\^95aU7 stj#[@QF-ꖱn)>THFȨe edKWIENDB`youker-assistant/src/res/menu_hover.png0000664000175000017500000000124613260315532017265 0ustar fengfengPNG  IHDRNRsBIT|d pHYsttk$tEXtSoftwareMacromedia Fireworks 8hxIDATxj@_fBj[),KO= yRc_CeY(ښ=$<A _1Npp XajX+8ye;Nk4qn\Y,|o0̗h2tz WUeH?x Pޞι1o;oEQj Imk_1 I(o9o#UIH GR8‘p$#)IH GR8‘!đp$qh;UxYw$MI{\=NGw*M\=Si  ˲ YS+&VUY GR8‘p$#)IH GR8‘p$#)IH GR8‘p$#)IH GR8‘p$#)IH GR8‘p$##VV?5 sa>Xi>nߏU@nk<q|Emtgf^l t 'NKS?*ӧh+;s1JIENDB`youker-assistant/src/res/closeBtn.png0000664000175000017500000000130413260315532016662 0ustar fengfengPNG  IHDRG(tEXtSoftwareAdobe ImageReadyqe<fIDATxb?2`'N區 XXX0| Fd-`YFF bqP:& Ft7XPJH:P0h7t %yP\IJPZ DNt5P@/﹒ݻw;0sssG܀+99 ]CDr.\ʐՐ'"K -䴁ĥx5ijjzU@JOx5]vm/`r̀90܇@an%NRRN@\\\˗,T6 Ro>ŋ3@rT8 /xG,04Q h XIǏ /;0C4FUb1@ spp0|,n:,,۷o? d YS T;P d`~zvJHٳ/_~ *%Xpl߾]f젃0 W '!M \\\el4%(>V^ΝS?r@lϟss<2pW^Y'''>/5q.qaIENDB`youker-assistant/src/res/package.png0000664000175000017500000000554713260315532016521 0ustar fengfengPNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 򝵑IDATx\ lU}]j+Q m)B#()@AD#@QA `hADVQ~Pi(Ü%L'9ng}ξ}w{IjBC$#-&f [ 3x!appppJI_ <: ^!\kb 3l 9Px:G7EIQjA { W W 0C7¥#npna"F8A'/|VxЩ |*%pQ8<3O佝eIu@YHkTQü,Y .\v:DŽxL|eL@U*\arJ9A_1hpH~^` ?c-n} e(2|!(,Q Cv |1Ǧw9ý@(@^E%밚R 6: uo{_",h22Xs}h8= 1ݎ@s[/担cajK-͖Oʹdt YL0&Ә*Q-러a?! vÊ%9YeP-Z5܈Pi8= lEzxqjFL4ūZ@U`t0n.Q ,B}hx_'@#>+.@W ?HhӨ]PN h+Ra +% l`#hy.pemrM1@c5zz4A-@ٓУ I{ȮMMN tȃȎr$!~'ՃE&>RpN,y&u>5 G wkrgra =+&4Ow8:sصRnb Ђѥ˅#XGwpu|f-Ӱ؇?'ӊn WͶGK5G xvifSl<{| qi =iZEUr "nP>4 LZC` "݂+o\a;Oi]g#ci ?}ҫX(NaƖ=yp~?2ث)ZxFܣ 4 }g7grig`ql"4`>^BZ@MJS(@Iof,o=mX2=(Bb,ha+x(O3e9M J _y. L# cu/ml ig"_}PךKBg_l!lĮ4 BPa2 WڮxyFi!aQP(B -HTwҘƖ37}E €Uڞe$P=]kt>̲q7*\ +-V(A;誸Ci[L)^g^PZ4`}a'&Y~hf,C 3W{*̮0iO91-Qg--Rدц]a+3,9$7m&J8co+>|9S:NnIEJ1I4޲8C9ia{e4"?QZhW1er=yMz彐 }CVw=W@}x"+< I?1g_qfn)nN*A:;WxƸPi ώ85`60S!=Fe&6QEFvL4.X'3u,KƭSY. WNGUJEAڅk-9,#E.,O]39eLUl98+SZ=w^tKGaV\wepuC^,좴4`=yțQ?&xpc7s~,V_-غfE0IENDB`youker-assistant/src/res/checkbox-checked.png0000664000175000017500000000230613260315532020266 0ustar fengfengPNG  IHDR ˰tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp IDATxbiig X<ҳp(BM \v&YN'&*.:=a/#cR-wn/\xŏ}+(`#ϞeNN[O>EdA}K<|˟L*P;LL ̣5N\ ^.fj -t(ruvJpȢ&Kk-.g)OJg?IENDB`youker-assistant/src/res/logo-hover.png0000664000175000017500000001252213260315532017176 0ustar fengfengPNG  IHDR,,ijtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp PwIDATxbtHfw b-DxoMb?#,F&J//i3zp`LdNdͰGWn3z x1N)ؘǰ_&?fo40Tge2#(bf{ru%EėK710o?5'o3/g K3 hӏ3ӌ_d{3ٶa.FB=WU R S.eqHL@o68n ߁?2v'(7S s`>.8 CQ y3? l 10LWf .``baeH?#?$9?xA XYYrG~bhd d ^_% ȖS Szhcio?XlZ'Ma``cbfa@ &Fb_) .~cX"'FcA/pى31|3gdzAÖ!XAF0f`dx3 '+ Ce:Y@~-)e O>12 #ÒpO`G(pIÏwO}ŧ``add\4ug>xKE9=Af1tl:qxHcwoRa%jc=-ʜ$'@HՅ4sggswBF%ɬ-HB$QʺY^E ^ETDE(E. QCf4~99=}~]I>V:!z}< %od$ՁbZ6=:EݵJA'l^O͢ڭqiE=.@-XCk*3$CzlR_tNf?}j=;0v"w{.qu2-kl^1m+ۀzC"ՃU-2fdC<5Mf+U M56,arD/cɤ5`F9 *>()WnjzkJŻQy88nR,QYߢ,9]hɲJ<Ұ|>lmVln!c`h/;}|ܜ52 tZ1C4L(ESfGƃ s\la8l wsePГW_'\+XDal[*ɯb%F؎?ao<5\$$h ^RjR.Qv$%To- ( rʇ`-ծ٫͖^';qa&[1@Gnv5a9(R]v4렟2q=8"ɿNFU¨Jm=R[耩܄=&Lt:2Z%B D F Kl)*2UL5r@(]g+ ȿ~T`ono ESӀ*<]$*74!E.Z͔O Bie^$Y}&6wSd@? `_srF_s,L?zHIѺkb?rCQg}9vs$bD&OSgwHYZT|*HqmJQ"6,=nԕnA$ӮW>l8T Ձ8OpAO|u/'o!%)x4%p9l;C_6hK޺6w4:o#u/C"4u$Odۀbb̈́8b&;EofSLJ%P'zmC.Ë#D3t:WweN†PyY*6TaDgw8 QxPyPNYX+}iCC@NlK(Frh æK'wh;`a%x)7[}=}%"ߜvDmf,hR캰^[b, o^!7H+>ZmwsM%Kol\Ty-zܘG]slcB)P[X_Y$q}n"/pKDPUdr]N yua,ieJ[|-y-dg֋V9k3z9.v?A~A}c}-83Ib/w;fn:76g! rf ˌhmDXrD?XkPM]zC;G "S s;H.#Gy8o4p$*?]9 {Ol:IENDB`youker-assistant/src/res/browser_check.png0000664000175000017500000000734413260315532017743 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ; IDATx]pE J# 1 F# PQXh:bAŊ{FcGAPD슀 D]$D x>ۻݗ?͐wenwiFK jLԎ#64bU'0IHAA C!,(l,,X/ +/{R KKT$kO~i3!^ BL{N RUW_vzZSzD 贍a2E`}Ɨ}J)"KO '!p`J 9-ؽ}}j{ 1k3Mq#vTN2<isx=>Х3t)q<@>C ^Ul 𜾼N1ޢ~hw݈@dI1< ^0J5XDb _ ~+=N0^IBx=vYtݏbakehIC~=Fl#ݒk3=(E`=^e`f *'7c_rALt8k\܂ޏp C`/: V-gԹ] ͨ`cf#C^aBlv8"&mʩK0]|?y#qڻ2(-8O1l8#4X{vӋb؇iZq>`sfA s]+RFym𱰿 k8د]^wIy~'ٜ $I^/Xorm%, w )eёQ݀HH~v:Ǟ dn'x>|7s(ҡ%p^E`ZURΠa C<:%?1 iw)νCݹXc|;ܵ1^k AfA=SSB^GqA6q ocDlP0ԛQnX0*ёN'{:D)M\ĹH;Գ1񤈙xyW6ʋtKN+Y^#ӹ,{2g+h8d[k3њeЯbl#VՑV}hȏ^GI58[O0+!* y>fX)S }lP +,+ =KIC]ڵRfMzvZp[ZLVnȶ72X*9)!̐b/sCJ5Xl `.hY]bI,<ٟwE RE4TGؖ!jN :a4Vf2d]"el+#^g:.D-^E-x%LeϚD=SMx%)<^!Q8zd"G+4/G)9AlcK0Rg"iO:QewZno'R,IטV|xYsf.–sǮʩ,WAm ^.Z9Y$.A6Ef]^=(/ bOdrD40 A_~q T5+zBlPnS$Ҝ968ˑ _H$F -܎(cx793D+](Rn@ˎ5}|"/:᷾ŖWmcl {ZlHMB`1הWqhD'U7kV*vк):rQ@.oT~;]/>)lsŲO"ۂ {L)M C)2,6/aM ]ghMm4NHd3sqGϋ8'%gUxM>]֖Z0[+gQrAE$_͵o%]۰ÂòGSkbKɶRD;c- \Qn5GsE=iKLT$eg}])zAd ݒtg LQ44y˺a㝨Sq-?4 Ƚd=g #oɑU4rFD~LaP6Ṭ5x!#-WɓirA73tꯪg8X 6[WEWޗC0=mc~x#ypY^gV0L6F 9̬ [/7Q$MS#O҈IpZitpgy&2&P Tz{ ɖ4:(x1 y*VU'y$׽D@un0 ۢ yB]Wڸogw rvS-fqL5uy tH d1nF«I"P=d%OQcǤw ٮ $ a[*+$仅 2  פ؇=?mޟhVYPû#n+Ӗ*.&A(TR}*% #-v$B%;"%%?#F-0IENDB`youker-assistant/src/res/disk.png0000664000175000017500000000215713260315532016052 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp IDATxb?SL P@  FKQ`$@p=0Ā -ca@aB+  CY7`\D A)aO P)9XxK8AIENDB`youker-assistant/src/res/menu.png0000664000175000017500000000202313260315532016054 0ustar fengfengPNG  IHDR1JtEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp (ـIDATxb?e XT7 ȟtj;_H`D ǔ#ȀiL#dą =Hb =@(@'2@F^lԲAc@`IENDB`youker-assistant/src/res/radiobutton.png0000664000175000017500000000362313260315532017451 0ustar fengfengPNG  IHDRH $=tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp =EIDATxڴILSQ@oDA)2)L-* ՕqԘtiƅ]j\Ġ D",d0A %-%@ vx߄\9n?j*fXn ̲7o/?J +zI=?1^C**Nw)9h8۠0΍SpHݮa| ^uc\񑑑xjw80:: ӌ"YyKT %@A[g6 rs`hhnO8lZLK|1]k< bM7'<`_OJJ2&&& ?}J|0LE>jq%%Y/:9[1jz-}P)uhMPNn3^P>5ˏ:% |" $Н@ׯ AlNVE6.]b)Om%'/"..n|GCD%{,i\9Vࣔ|8cccv1>T};=+I#>9R Tp&ߧ^}zࣔ|h嬎qܷ}B P-׋u}@6^5.1\|xrn>Jy':::QUb+ 3ByY3{[.8SSp ug \eIC25j%6ޑ<m R@J3 (~jIDATxbii_00` NaPM T|H> n@,U 7䙠x b(g$/@| J$H ^$ pIENDB`youker-assistant/src/res/shredder.png0000664000175000017500000000526713260315532016725 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 3IDATxڼWYlE};=fnbmہ8!&A P C!qq_$ Hbxmbljc3;3T'>=],ڣݹo!%-ʹR9/|y?YH>|cg#/{6),OhM1q:91ZUբrGovvt-Hg!2 pA\Xgh@4(VDiPK-0f,9E' GjOcx<t!C{B뺎@ ZL0I14Me:xnne.E?ZZZpf,:d~!$2=}_΃ 9Rr(xz1+Ȗ:{ IDr./Zrf֚/"#wF{GvIJ}F6jI,|8Q!j{ ]ww"`P1 عs툄ز`fv"r> Xlܸi6lpgAi9Y29=¹S kM6 7KE vM`1Gf|:""|P2){֭[/ЌV`^g_;]A3әi쏫ժpvLa9{̃yI~ؘEia˯X,`P}a|/eGnXcL!D@&%rͷpIXCIm`LU9Ek8Q ;*ATHSАW ' @p5K$^Ch%j:Q?~]zpTN5 2V!LZtZ|eXTT~y4wdoL<{\|0^Si,~)bO$LNH0"H_ y<LAIQg1'[ EZ }r`QU 'q.aH Qj%t$kZ $hT:1(e krx\! "~g(81 ?hW1 6eknhx]]8:CUA8M:ɇ q& $~AM\èGO*?OEcNkY_Zz];, ghKʅ 8{IDATxb?&3gX-?,FO>1:uk֭190-6?:ذa# aggΎ" LuGr*ܙF:! C՗/_qΧO"L' ///Od]d2E b#_8p "JӳgQQ$ X'@2`3K0FVV[!ȑ#M&pƆbRNN(;|fDCV˂,~޻w VVVV X ^W2IIENDB`youker-assistant/src/res/theme-cover.png0000664000175000017500000000245013260315532017332 0ustar fengfengPNG  IHDRwwN>tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp zEMIDATxb|C0yTf, GQ̓I3@Q%գZ(7ȚIENDB`youker-assistant/src/res/cookie_uncheck.png0000664000175000017500000000623513260315532020072 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp qIDATx\pEЄL$*`"m DX +EgdPDAF8H %Q*%țxyv{3ۿ쿛PTTŻ$XN`0*gáJ1֥RAA:W(8"CM/6Nƪ AN:,Dm%$QA```H`UA_=ƂE9=/&Pt<#X/x_@wXC0B0L- Dp`DeA7x$D!:XV<ϱgHgB䕔l3D[Kx!&*:5P)k&ݎR(LC,פXgGd4:&@X5dAosiZ; L|:+ǔ~} !.,X1 F!YOiF$-êxl+FtP;9ył>$X./s Lc/N?pN?-/_>vD2K/p'!p``J:SqtKm(684C|R< 9LtozUsI¾6E`%?#}pĩm.!D   俽ߛd'F #2cP+ hy$g'~ eJ=TFtOrv|gEZ 6RV*O 4nZJdag6dFƇP)+7EF`kBrUB`:9J5)埀z_9{C,WIZ0&Na傏FtTL4UK2BE_< F{(ksFS%~ ]VJ/y3 jvemca| u74B)Z+:>T[:AWY.NY `F3p$ bR x{)-@}fd2JUAv3ȅ|oİ#QqnXP.K:!^.qDkv>]sK5}m,"*X'XT'vI=eM~SVW'ui=1{H r:ZLj4t+ W)TKx\sT5aq UĸTpʴ 9 ބ$x\$xICvK[Ru }#,3hZ㗠6pu;q젮FC+H@UϧE$p;4]zpB`'#\p[Ej6G`G 6T%TtYp#W(4;ihl }. +I+@|P4NEU1$m.:[e+mODZ:i*.ͨkfe>) PRڿÏʁ`OtU ب_Z5~uC[3qPwrQ@;W쯠!#J6 #5ww8 @#̀0e:MlSW^<&x̄,5{D&$.ؓYj$r@6q!61uEe zZ|Noڷѐ ~@eȡM48[qdAd Klts?'0r;eᴻkODaJ?Mų3#!!C^\:nN8 _aTh{cWVd̀< jLRH";I,>Q?/F6ޘUt ptNv_-ZpGC7us+a*5e_ӚX{qd`y9Bʱ1r[NjlZȃA/yHP~A>^*' f=0z^yiD΄˘qgT\u;cGTp@u}=JZ!pG'Nz*8ӹrk0a.em y}좮y&^j,NCFǑ/ fqt!uM݆L:q{[&cϕU0#FD^ƶWR&~8~,ZS#ixww\YXiŗ{ uoUz83{4}.]\<߮2)*+׭9Cq;?ZYJ6p&9~ m ,ɵz 2N 1PIl5Ȱ(8Mt4:K) rZ`0W:9IENDB`youker-assistant/src/res/checkbox_seclect.png0000664000175000017500000000055013260315532020403 0ustar fengfengPNG  IHDR tEXtSoftwareAdobe ImageReadyqe< IDATxb?01@@1EϺYⓖA4\  X?2ުR _~`4CBF 5g#mX{,!>D'Cp{JWs@)c~zoxp e~w,ȦN L `/CzA-FMc::|l.鴗_%%Vy?IENDB`youker-assistant/src/res/title.png0000664000175000017500000001235113260315532016236 0ustar fengfengPNG  IHDR-K[sRGBgAMA a pHYs+~IDATx^#s ˖mDr9 d1N'!!|3թwjzfvG0?=׾W_ ;/u=%;.`xѽw^rb KXj!OByKx;,v2x-ze?)'_m>}GƽSx8ʇK-NJ-N#}>yObCt]N㿅qޫ?m3k>x|~>XygZ.P>?땿QQӽ7y>ONF/鋿[} o_2:ρ{̗>~剒 \t/k{WP0hOi9pPMq/_yd._Vrs5y3=[ƻd_^R 팵&yO9x7?횧 >SNTq3ŋ3}uA9xmsng8 Z;mۓCyZwӿq1ο`=[m];Ev綂}sΡ۟_Up=W~sB wqω )]}=ǜ|'2rZ"bH&b<-ꒁ*ZBf Ub5oJ3وɩA4:"zBB-RZ"Jm]4KuǂFx߂{xcFL4<0eX}Z.ZxJfG82.@r1 2Ҥw{sgꯀKZP}kď IhAp!V2ТyZbyY4ՖEv@"0CC }wrŃL)q/5UG+_|-ZIKhlH>QUo)* ~{A\i?Υ^M_Bm̃X<_ vF{)\1ϤeYS.QL{B ݁,xAwk"g/qL3¶.y3:U:JgJu ^u\y|Og#!CgXnhIp3{|ݦԬZА0rMYiZ"~\ƀ^.|7 Zaalh<31KL}L_g%KZXZ6ofTzQ2, &d9"UYmȖ#%{F|,<4-Bh T:213hԞguG[KpZbj Zh4ѠAKV8', \ -, -5XTgThq紜tɽ+4EhҰ]+d.CqVKmaVT[,X^2¥_| "a -D@S\J L茥h5%ꝑ i}Rbx_eaZYY_ŃHDsVj?%Ddf҃yW/Qx(%Q@A5e0,Ć 4 xRk$3QR6Ǵ A@+]"Uu&,3H@To4x8 )\"V+D}p9EIS~Ki@ L Z!Jx-}cC -fx@`9.DÆȰJKq@KkiXBӒoUY<(Р6Z4ł -QIhAє!!R0,*-Z֧Dl"QF<-dMɉ) mZTIP᳞ ,t,p Z1^Ϩ23$Y+;.ehxB"haAK &EUZ^1mVKTiI_eؤU>&K<#~҂-~{.2/YFJ";Ռ!Uq xE*90a.,x╳K;zC{VpgS\-.wiMQ-L4#D˴<@,X1[ ╈,Ү(hHe$bijKZp -5i5{r<*-ViUF m-PeyXV8whDҳ["?% -"K,,O3Z]ĺ.`&5Г3aH:yX)3aAKF]OFVkw)ksْ>,E+/ܣVOADKǼZ4-Ps\.yհ.)@ AI+x@#zxЂ@ YkZPY<<-5PZ߂fJ Z^q= CY6) "@BޘEH`p9OzZe_ѾS[ҰihѠǚ߲.hYhRV Fvk}NT0gТKXZ#zF6%bJZɻ"bY%bRu@KNj9CB IPyXfگ+QZJ"-\" ,7hķ2&Hc)/3aXj\D9(0 hZ[t@I?P(2ВENGp*-<[YS[6 -0Hh!- Igd1߂ߵ,hLh[kPRSc6Q3-fԯ#Тu" --]>BTd1K]L‹"x*$ޖ,yg<(-,y-5`Ѡ%wim -E칣+bGo{sZXh Z$0x@3b <2b2"%I])[a#E4 ,p*-r- 2=-i%pmHmp$YF[tWvsNx$|DDaRZ<*-}gHHϖ>ydy-?Ds"}0޳h? -V -D:YZ2O g/IDATxb?%]~ Č4lUCA49 L6{do0& 0 /6(`K@$GЀ?0߁LVbfȼ?L` jΐzHp ?~Eo'~a}!r /о %73`KPԼcIF 0^j^vCo^ho34[2#*!] ft9t]7T`=7RIENDB`youker-assistant/src/res/cache_check.png0000664000175000017500000000507613260315532017323 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 8DcIDATxyEkE4Ut1J (j4&QCh#GDXE+V5Ȳ F`7tz/!03]뫮>+{ux ?$n8T = /8TJ? u͠_5`%X+̣zY |dF֬td@p384 R4pO0 \gA4] ;)lqzLCgD'p4(Y3E?JaॐU[ua&9.  ާFktAjKVV=9Dm6VA5_|M`l2(  >sc?#^ٯ< = u>Pa 3) ^7zV> )jYW-WU\> uhK}8,QvwNVZ_ޕ-ZzA&qb&NLSz\}=40oJ_ׁU q1;j3ȃ䰴I}2\ FJb_Ss ymR"/ *Ѽ-6g;oTdOMe7O2ID]1FKelJyPWƫ\@cw]*핉9wġJ*z{1LI WtFṮ26j8}~zĽLY=Kѧ&zᵳMӨ pYLS9@;?q!}Z ~tw1-ޯѓ\ l~ts1{_nvOZ\ l\JQ$@; r1pV#^; ߹ب3 uu+E'  u8{&NGț yD/>7i xl[.06ڸPyj`"BJ]JgivVg'?3 -L.T26M^*]T-z/̼c=UKdfƞK8x4iNH<% )\0T>OMB[!S 0 +8 al6bgrRVcSJnWu.xcS_zv~|LuɲH.5XcX`a20{2ɵj|] M~̏W/ż\G`RgR:Oz+X tˆb_UMa8qx&wꭶLTƚpn`0o{vn^A<]'|Pݢ9-Ss4B?1PVڬ{Gs36oRlу%uXEhۋG(O'A\fǾ4K& =1bkfBבfǗX*3D^ .ڊWIENDB`youker-assistant/src/res/next.png0000664000175000017500000000061513260315532016073 0ustar fengfengPNG  IHDR |tEXtSoftwareAdobe ImageReadyqe</IDATxb?1D01@1N8񿬬,ûwXX֯_ׯ_ pbljj+IIISN +++Cjj*É'6lV @ KP0,O>}_XXXƍ [[7o00 fΐ߾}C8 0ޗ@  GhƮ.A߿gG{1EEEQ&߿3 ǁ!44a`1[n  AV31 D?0Z,IENDB`youker-assistant/src/res/checkbox.png0000664000175000017500000000304713260315532016705 0ustar fengfengPNG  IHDR tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp #LIDATxڜOQPThP5ܩn4#16Q0X!CՅąKF7;N ~$hy;(عə77of;B@Gn iXteΣ|$XVz^fN*>_jq< ֚7~l~݇eڪ-g g0 3pi{HKwW k{?Rs$eU= =r~Y%,b2[a/3@I͜F{j8м I&zkϔCaa ^G4/3@X,sN4a/3@7.t` f1О>rXȬ[ A2 ,˫c*mۑ7 6Wmf;bS00v~`K`] tꆱg8ebP`ӆ&<}+ Ț|%5G/d%s^M8IQVÁa:E8i),(-:W~P$&<]_,m:x -&)`jco&IB׹u% fH%R$W漕{jh<IENDB`youker-assistant/src/res/cookie.png0000664000175000017500000000604313260315532016367 0ustar fengfengPNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp <HIDATx\ MUs1ȣ%ʣ) R$jPH%^jQke))V(-CJTb<{ k(BE0L:]Ns{k}Ź{;{}T*RN*h*Z,h .HTsGE? ySR|-&MpwZVtP@R7HdIA-rbln* (%x@p`` Gfۗ   >|*8u  rh q^p```T>CT<Ҁo`@N}o.BPkF*}>fy̾[Q-j%&p}{B4 DT[4:&D XU$A`̤sDj'V0Y]pPyWQQ0.`'S.4cm*As ٍ DT>vwI9ȱNd4TA%'6C >U978O[64L4TJ ) i40">De"hc Jӳ142 mn|rҌq.n:!>:k%4}"Ĥu}4BZԕX@@z*"-NjDMS rZ:B?AG4H CTIet\i G"ߩϔF MHC+iN|\k:f5$ :96iuA[5~_ ,FCzM ?]_!ܠLM t/ϩ t1)dznԝ:h0FMP6XE<=Bt:pri/hl>} ymT1%Vxo ."9{ u9sҸ.^S4ãH+:u*[=i*(Ol&\|݇:NUq9Nad34/5"䠯inf!\As?"S9(|>Wh~Xd$Ke;uA0eҔ DQ&d1c$* 1I|BCb9ApJ:0d;ʪr*e%[rFؒar( |3 uC8F2s["θ=YlPOLUۊdTrra@;nv)")0zWB.Iq|4 (*E3+M*2o̙/bf1u;Pz$إ^lVnYL ϑ`u4O+h@&ck±`}WYAQkHn'KWgo4)C̱{0R&EuPx("ZQ޻QsKeeMpN]̈}Id6Ó½0=-ȓ?B(]8 4ᢊW }' &}>0azy^R|'\RVW1БeuԚKcu:5JD]þSέh:{m } ƻH `_KU͑L]|OtK7;;Kh<ΜDW \k ?)^ϴJ5PZ5p`c#oD3"Z8L Uf$ 0Z3݆+e~IENDB`youker-assistant/src/res/radiobutton-unselect.png0000664000175000017500000000234713260315532021273 0ustar fengfengPNG  IHDR Vu\tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp /e IDATxb?Զv bˁxFsu/#HP4E]UܔAZR GOfy )_Vl <b`bbG3(8Z36V *@fHC!`t*H-HT!Bi8 S+ ˏY0;9S1HH-83 \oP1%L bMׁx O% cIENDB`youker-assistant/src/res/hover-press.png0000664000175000017500000000134713260315532017375 0ustar fengfengPNG  IHDRs( DtEXtSoftwareAdobe ImageReadyqe<IDATxbO,_aa Y?~l~O,&I^bpLlyg4ʉ w5o- t, O/1O:[*!DWK\FOGה?_w,IgKAq'ߧ| MXx8j_`Z AHS G%waFQھh372f}TvIR2s+'p;Z!wvZvr! JRiwvoEY z7]nScH^(!?_ӯ 5qrTVt2'A0“ʬ $9XLfiMR(K Sz}foLf['ӕyqe^m6 6s/FIDATx?K@-+Сn|΢EDP(3^A3}xC/apZJ-]nk-×PGX݆-zP=kܐiZBhv `auxiM C/61`ǗJ0aaWPK(|;P|2b@~‡{ {{{`<~P_!`ǽ-${uSf`M'c 옩zŒKI'NM}LU>7C2aי|a%=0M=ƻ.b %)%>ߚIENDB`youker-assistant/src/res/switch-closed-dangerous-hover.png0000664000175000017500000000402113260315532022766 0ustar fengfengPNG  IHDRG3+tEXtSoftwareAdobe ImageReadyqe<IDATxYlUs-@lF@*f+C2dٲL\FQ+[;Q6T2tjae[1XVKeR)qn}e}w9s|ǔRtT>%.s “ g xl>Qi*%~)BbY)LȮ]qOA36:4'Hi!w|7s כT*8`ƓK5KВ^%YAdnσ@ prg˞eܛ w+3<<#jg^?fF *ujlqѤDYRʩ;+U&$WmNcz5sN ZnK>*8zP7bH}Nnj ܩ@+OBb!Ÿ/Bܰi7vAR9@Nz? N|g'^ V^ Ot{}ENBYQ,o>DnsW6ow{< 9=2&<ɤ8auԭ9-w H0Mr/sRw)x`aovs="wSʫuHM?oIQ+%0> ۆAuA? Te¥EN ~ErAVG\w Q~L!H@V` = }_,1ԜsCU Az{U6*gMɣ{&]GvXuPaEIᝄYaiz<Y7?uWފU)6`YEzfK Ekt7B>$%S$Zgf4=x/ nǣ̊?6cȡU 2:u8$G\'7J<̛߂]F:3I9)E䞂ck3ƢNeс2Ay (#Fu<ة 'w8G¾{jUCIp-F;u'Mc`%F-wEǑX DW$n.N0XCǁ "SJ!RI2MҵEu4;t$/_kZS*@MNQ;w.kiit2s>2;i\?Mo e;#}kU^F:)^0+9uL)\ģdӋ=:Ehtpupx$aT/GQ]3߇ @e,,UU730]IENDB`youker-assistant/src/res/history-max.png0000664000175000017500000001027613260315532017405 0ustar fengfengPNG  IHDR22?tEXtSoftwareAdobe ImageReadyqe<`IDATxZi\Uv>oki/ v 6fsb-% 32?@E 1pY4@3 xjv{kުޒV/sշ[~}=3tu8TTZJ(N#5~iU/Q+:wiӈ44C]})r^DsGFPqAcRc~rv|o%noݻswݭvc1etp70Σr/?bFM]On0UCu,G;Mf+,O=PQ~kLקnvL-F;ɞeҌij 9F5u<3SGU"3)Lx5Yu^m8m]2cy񞛝6I&"F`fVAР{Ohk* Ŭ2? H[ɿF7+τi4{^w(WH{&&'X5?gco[Mѱ#]x!>,Mb&@,!]yD_>YUFTHK ^= 9iqB4>f_mMvyLrEEN!]0& Au\Dg<^5M.% !IR.] *v Hep70.[$p^Lͻ1OP9ZoXTZam:HQ<czOOOS\B3L侑ө9oH&ijlGazM PU"򎡉 1;ধF@@Tʼn䨰:#.Z~*JI(]]]O˖-B FZfRpNԳmi{H</4mee;55E_5Ԉ)[%{{{oY\d4Mδ"0;3GzS"QB9{aDlnS 8AQܥ%@ | }tEidfd"Ĝ>}Z;zHe||\%05=ʎ5JU-P+iߋ"io#|qbfVnuJjQ{ bH6mŋ D`L\+r|UWц Djw}utM7 1n̡fK,Z쐮>D`#|$8Y!&27 I={9B7n5kPgg5:ꫯsBx__駟իnAFmuϲ iQiPԮ̦,o֠JmzVgZ`ϟnB V" \.'(C=υ0q [Y}vZ!:YDT;[u3R0=I1H~XGĉ" J;#6gH}]ShppP$I'&xA)*VjQ-22s^d._p:$ nHܼ[4 @̳>Ko ?\w]YV94w^04F -[fWpqݺu6! J}Ĩk/HK.>$ 8ԺChԕQ_Hݹ<4=~y_8NQj)Hرct} P1H jJ@kjvazT o!H^URWi޴-HqKwT 8 `vvVy$Z%OC=$ ?9&&&dEIDŚK:^ *^yz2SO!t@nhJ2=K/@R^{mfGFF+;!g-c Wk!cê5zdU{#]yAhUKIN"[9rVXKiAScs ٺq4[R3Lasݺuϳs7iKύ5mH}L~&,7OP$|VdvP0\8Lߧ{xD 1E | s({uoMBR3Cb0xe9iS?ypsև4ZQ@跙3\&';< 'cv„b\b*GT>Ѵ_reP) j=QRhw b;}@]J  5TxNq#A}K06,7j#6v,GhDId;)$EAꫯstm: h(2K) 'QJ2``)d#Xv4k%, w%#۽{ܹstqII$VQAng P)r1HQT;u$X4Ie1u qPJöx ^Z3@H9"0ƅJrw˖-rM[g,I-iv"=6uzk Ly g sd kvkpY?CX0zK}UԾRpƌ<<va8 aNEDڠ=BRV(fpyG }zÎ$‘2jN ͗;i˻o~)/; ȵ#6Z 6bR lFz;Dlye?0WT,EDG0/ײ-䀘g6MTJAo'"M4__d~b@UP#H*i@bUj%mGr&X6> ի{3=ΐm rfIҎOw>8`=9~ & 9 0ӥ Cd.!4e@ ?^<@ǖTENh@vО')Sn(Wm =QBph[|ר;sO>m6bGi!Z:Խࣾp62Vcc "$KkQ)ƂrbO{bm5v˲xR=Ƌ&M(T|MܴͣZ4?QdtsdBfh&"Mϗ^J"<A .٩"\snlpɆl?KiƄ'_nv}w\_^G@:j9 8-8Gh+o"19<!KǏ9IȧC|U2p\3LͿ{Ե/ؠH=?p_7^P!ٲۡwXv`~v~V~e4fןY S|9B_jS0]o2IENDB`youker-assistant/src/res/switch-off.png0000664000175000017500000000204513260315532017165 0ustar fengfengPNG  IHDR@tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ΂JIDATxbiigʀSb"ccA&!F=0Qz`F=0Q z 5^hIENDB`youker-assistant/src/res/hardware/0000775000175000017500000000000013260315533016203 5ustar fengfengyouker-assistant/src/res/hardware/cpu.png0000664000175000017500000000207613260315532017504 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp @kIDATxb@غu+#2D"`Ă,W… l'd`. ۀQP$Տtx u_IDATxڬS[ Tq/d8d/e}t$M1V% tÏ& '0՚f}XL$pT#㝻,h$,DdBޒcD@6oV-pr]MU.3Ɛm|)LYqc02$IENDB`youker-assistant/src/res/hardware/board.png0000664000175000017500000000224013260315532017775 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp MUIDATxb?%c#E&P& 7V qF8] VywlÐS3݀{[p$˄ xB?DpLѡt4> fO wqj4a' @/eS?hyr^G]pIn*teGHiv0jf]IENDB`youker-assistant/src/res/hardware/audio.png0000664000175000017500000000222313260315532020010 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp IDATxb?.`ggǏ &SaDspp0L4ca1niF "--$/'ˀv`C@4f\4RIrF~b$B#Z, R"02`<|p=0\JHP\$ C#X`Bw.(eė,?C3/\6IENDB`youker-assistant/src/res/hardware/battery.png0000664000175000017500000000236013260315532020363 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp IDATxb? >r?hrp6#LD).ZȀ ߿b#@\>d3ݹXf%JN&F?W8BӀ}1cW^~ k08<a9C'QQQ]ĉ`??1hhhf`p+D`ee`ԭ ^s΁mǧ=>( pss3qC^tw (pEZd/yy 磌mmm`ΑÇ1tBQ@ǃշIENDB`youker-assistant/src/res/hardware/cdrom.png0000664000175000017500000000231613260315532020016 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp m IDATxb?Ñ'3l(78c#cAex<8X##o`HB}C]bҤiH,D{n\HsHx WiC%5+33bh^:aH-H@ۚۄ!yH"QSSA5 ܺu9!1 )43 Pn5 *,o>|֔<̀; p}vchIENDB`youker-assistant/src/res/hardware/unity.png0000664000175000017500000000212013260315532020053 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp >| }IDATxbπ] `  x@vfd%b/0>x"X9-WW` CSeUvd] @ꆁV8aX tC)2 `.ktXRIENDB`youker-assistant/src/res/hardware/computer.png0000664000175000017500000000211013260315532020540 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp !wuIDATxb| ưLƣJQ,JsL0 Xz%MbDWɼ W5)ɡ(~21445 300z!mIENDB`youker-assistant/src/res/hardware/harddisk.png0000664000175000017500000000214713260315532020505 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp WIDATxb?%D9z,Sl(5`=p`BFt5X]QQQ.b\AlD04S⁃̄B-m0gx#AjQ&Ip%  f O$IENDB`youker-assistant/src/res/hardware/sensor.png0000664000175000017500000000227313260315532020225 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp #IDATxb?%Ç@!`1Hx.0ld-K l| pIG>V !* fm+p2Pc`#) 3pJ0ps00LaǾpoO^1<{O jɁ `1m%j?:`|\ %m c8X c_R㭇~y` Ǜ< )͍ RIENDB`youker-assistant/src/res/hardware/monitor.png0000664000175000017500000000214213260315532020376 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp !IDATxb| ưLƣJQ,J T@dSFlՋ 0 [cYV^ g,99 ۼ7*2xݖe17"jaV!rcwmu}A {`.&IENDB`youker-assistant/src/res/hardware/memory.png0000664000175000017500000000210513260315532020216 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp >rIDATxb?%Bb@]7H60Fg FVfwndK֛4 W[Ƀ\?n򌶝`EdNyL`21]IENDB`youker-assistant/src/res/hardware/network.png0000664000175000017500000000223313260315532020401 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp o LIDATxb?%BbRʈ 2 ?  1i;B K@_Pſoo lc, -ų XL&7"oza!40@\x1 ڮ`H6640 ===͘ZWRRB ly(4.[n0X{&ՀIENDB`youker-assistant/src/res/system.png0000664000175000017500000000530713260315532016444 0ustar fengfengPNG  IHDR44xtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp Լ%IDATxZklU>Q䡠(W(( )(T !51 !`@ JA1< +햻{2w{{|{̙,,z] p%v;:~Ett@X|,?@%P[m^  , x>2;LȌ|9~3)PLV&D4,xᏁcZ12/qVQˁis@qd^1u浦ڱj |4,Rk\kPO`=0xK]8k-5"h5~S[RD&#Be%mG"X 6#8S˪ Bj.(`FL>^֌^o+S{hy3ndUݗҠtfw!qr#n p\>`[{VHacScFG%@K1`~$2"rdJ{ qa#Of>g[[|6j$Sst L %[붭-,3ΰRc2 LL]9~9Z=;PJQ/W TUFg~ws*¡@A2w8,ԳYut0d$)#}dn`ĖP}PJָ Y?J_H5ө$g},2kqlko Ψ1²;vv2 vq܍mkfae%{D iB%D6*^>ى3/  .6 L5,CMK,DoH baTmk) r5>bi?,AQ*;M$35pazo]. ٌXYd#DH>xZZtV%#=@C;=J5w\ &r::zT2 ӆ6 q4$/M&9633$T)?Kn ۬a%$Rug=33є*7jE?fԫt/жP:M $Ql A͠:%7dgajBz"d+W K()K`|"m ٶ5:f,=IHz\Y5^utN4ڻz>qYY!6Vy]WinU6z$)yO9cj&53F2A[UŸꎈ-swV)U'''ɥ-CiJHd;sk٧ІAZ SMrJZꁘl(A@/B<("yWfÕ {;+(dSPd$%1IPg.k fqn=Yk#9`iO{s Xi=IDATx]SGn]W@n$䇤?>AFQAC]|z|UZ-*ҥSIHVHQKYe_.d[{;Q($>JZirBx\ZִFNN|rץ-g@[p/,ifV}4i 8H;Dq ;L,N$}Xjvhy۵iE;$s JrKI͆'E&Ce\7Yj)+!:^xzD9 -52*Z ݯeRk2eV҉aǣo+; BׁrNz=U9de>J #$w`Km5lJF!l|_NCm D.78C2apjc ^HŬ-\k/A߇t ~4)dJ! XCޭ8*seLKCېNKI'.FA8 2$zWDIIo e-B4l6t|rȈeUyI"0)"ԒF.&:5f瞩dcZʗUfҽ8@C/c4J12B[b.LńjEW7\R {apLn O"R$X8Jj3lpC<CϊtEX8epn-*hE&}įqaZE*̅J'(y%ǒ^@1HGLlf%άr &R{?w;E&%Vg´>IwKiƎwR4m's0vXR[!TB'ˏuv>"YCj?q<Bm1NoGpECt#v<Ⱦ0ˋ{K|6z ̜PrHhnV5/uI/|x6J5!/~|%}PpPP{U+' ^pRڄ/,KdǪK989#1?Ɍ4-DD҇U>1t1\<˼񾜒nj]%+v9´}ɝ" tn}1VF'?NJIͩ~JKz{DKǤG"Q96B"}) kέl=&]K$¦cy:›#è2*Dԡ7EI?HIxbĘ4֒J e"]dKvrNvĄqjlIxѼ.)JINsBFƪ˸붣HuB~S1 qaӁjߖsJ?nvyKiYH7m!&ͥMH$n[0zIW0x!g/ |aH&;TJA6 PEO;>C4g W^[t< 7_8keB/qo)YsxT'pѡdS׽I?y.8cvJ3J!Z>\<;#-<҄-<=Jևro&*#wu%#WBw CAR;<2`^\ wLɊ[9͑~`a.J3n<HHwX]!}Σ~3)%|FK_AmJMqZFᣩ<40E&偁,-t:25l6qsܓ)pܧiu%_y9 j]]^hTk^[?]VU0+F!3aBRB/Ӈo\GڗkHt_Y$jT-F*ȥ44 Hn ̘620[^ mkכ*=SkW588JfSWiFO'*$Eo('N㷲IENDB`youker-assistant/src/res/package_check.png0000664000175000017500000000574713260315532017660 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp bhk IDATx] lEVZ"  %FT G PCEŋ*hE#D)F*W-< X*XEDBQ4vn_؝{3?34FHQEʈs[m=1NŽs¶¦nppRQX!\+\#Xh%QxJV7 B =v~aKrg·Gv'|C8J]gQ5>"V8OPx0$WxTX \,<' pޠi8e #|a!чy"M,KZPJXJ&,-gY2ͷfs > ̄2~*a0G`(j e%eT H#`هye@xM=epYxVç߬ {@p"@z gnn AQR@PD_z;ю/YN s;YD lDgύduttvv {R0_WHq0-nD[=X<*ciSd Λ'lD8,Zj00oU!o+`kX=kxok;ÚP,RZ ? ;^+ lî4_B(^ugK/n`j,l[Zfagg t_SKs8H)(3as q$M,aU Uf؃#ԫI33tW-@u s9}h# PJ/2MUڧ8E8ZXh^2ͺϺĞk,5`c:^_;?>kVq&E5a:64ᶜcڰum^im 4m*cO tSA33Ĭ"정O;=vpMS4luZfz#~|l1/I gj% c8PLJ"ILcL ]WL&ʈJwgvp2ّf&`);>p2fq -3M]`P=X `4kTe#xm#h%XBʢof?Ձ'Ĺmg)1d#t2HvƉkogq0lc9V#teު8:Ԃjdzi6s ԢJp :GVV X4g}, ]忳;-Tq&Ξ`A"׀7mׄ"4EݧZ@$y I^Ihɴ[\w>^"+3ieD}{ vo{ށP]eG\MS sGgg#9U?p7j q"CXwl JW JNEݮ#NjNC%Z!Pnl0cvQ&ߟ 6ה-iM؉P1jJ4bn>Wנw4c*F93_8 ~ݤ%*X*x5D= i&䫺)P><$m` ܈qv#ba$aF |L 2g8!FDlahqB[i2 Ճ|3lPn"N˾ {Q2+%=XVuzym48?)"5@Ia# p23->G_M)?#  ">`]aIENDB`youker-assistant/src/res/clothes.png0000664000175000017500000000213513260315532016555 0ustar fengfengPNG  IHDR&tEXtSoftwareAdobe ImageReadyqe<IDATxboh+pS& س(pl t~v(bu?HƥG`iuaM.s A)2C!Fa`nϷ?m4 `afdc@7ͫˠO;3<f7/ 6_P`Њz]v>N)^8}.5xÎvo?Ƞ첿=g cU pTNn6$E (q'7 sXXY`/V6F/ q Eg 8XXX8X~aUX@`E@/ 92z ?`5?o F L r "l _a`ddS2H ?dQx0fj+8 *R273\t,&.?~~<@o?voCؑ >ab>aɱq˹f+ ~G<|T.z2* IIW<2$011#・0<"" ~z-O.U@ b fx830p32Xb4DU~ %f``#^ɰ~"102",/ 7_C!_8 ÖcS._; Ȯ4T5 63rE=; ~օ .opfI0 4w:z I,H'cfbDO6^.H8 ! D10321 ` bj8)TE$i޻75XE˰kǛEd8]pd[2*¿cر &_"  Y ߡr)bPĠP2Lw4FIENDB`youker-assistant/src/res/hover-enter.png0000664000175000017500000000654413260315532017362 0ustar fengfengPNG  IHDRs( D pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_FIDATxbO,_a,dx?y6{?if`$K/bp/Ynfyg4ʉbyϿX>}']˗G_K'-aaA 0C,*{cUNO~'4Rآi])?gOC:_ZoBlEŋܕA0 Fi/\P I`Z޺4]w?KSvwmFFAj7>5vҺ?5>h&N%:gvboԇ#! G[ P~n#9ȯLiN;\BCΐ$rxk dؓ#%g| jG^ I ]0 CZ0u'c&DlkIׯ p%LWL7^0]םˌ5]`J&Q`vr#Ln^;su f(;֖׳+v IENDB`youker-assistant/src/res/arrow_right.png0000775000175000017500000000173413260315532017452 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<!iTXtXML:com.adobe.xmp NQIDATxԓ;0DɱeZ6";fFj Ig@!V5F PSbN 1g R+;hIENDB`youker-assistant/src/res/create.png0000664000175000017500000000275713260315532016371 0ustar fengfengPNG  IHDRC'ztEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp X胣IDATxb\`b,Pl&$qL TX>0"ibgUÄ<^ ;ĂLl &2 EJf$Fxa  Fh0p:O( jA-0| rV#րVx^֏:`ltQR#2i`v@g:vTjtGzD'̈1pL8/EOGصAFJqU`o+2 `?T9RxiR^ *"e:'ܙ=D@t@t@"W{ӂ|gD@Aat@t`D'S; (KC ((b2[[0cwm-M?/rǘ7<%T'Y|$6鋨(YCIugFƍYEX.eJkf kkA5%Н}7IENDB`youker-assistant/src/res/broadcast.png0000664000175000017500000000101413260315532017051 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<IDATxbb`ggA[[ L`b)**,ܹs'#PAKK ⿿cǎ1 0\ .ad pB{U̔agu:)`|obUիW0 A9CPF\B"0V4 XВT?37B9sWJsC-❱cֺ3hgt B 1FH).dg$@k*R6-@0Q-,-xQFI!!"" [R;b{.飶ܗQvੵR)AQkܴ)(\bp;֒s1LVD1obZkR7ȷ29g %r IENDB`youker-assistant/src/res/picture.png0000664000175000017500000000226613260315532016574 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp , {IDATxb?%D\&L dWDib,gc@T ^MYIDATxbd``h`01PPb;L bF ȠЀӈQРȎh  4Z&@ @ @ @[4 F%sB@!iIENDB`youker-assistant/src/res/plugin/0000775000175000017500000000000013260315533015704 5ustar fengfengyouker-assistant/src/res/plugin/processmanager.png0000664000175000017500000000401413260315532021421 0ustar fengfengPNG  IHDR00`ntEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ;C)dOC}H/uiHD6"(l'Z0±P<ɡE /dzي % FhD* \Ә2J4eɈ ci͢F^]Ͽ,e~w7U|MzKJ_8Mw\#ӊH+ugj9-4$1D__A?M+~fI6)8fr-1FҴ{_@ `q/a5ȢU{b) Ԭ,;"jzDWq#g!5xzbxc;^0vȫdMޛB[ܠ#juBYLki|a&R+gyn73u$twhSY,ɦ0O`h9?R0B sQ>\t ;qT>.śN̓M=9o5f$/`k<|zOi).z9a Kg҅#&٫ڪMF&xfu˶o-μ@Fc}sD:࠸!nߺ1|+ [C0奆c&!þMG@OBy,/P2Zzj<א  ^f7t3(_sB# ,wA? 2'TQ_? b\tmUOt9*$Jǚ#1tL Sj۰w1_儬?$}9 :#,j ЭL''ػwAWfKvwȤeI&{*e.P&ŦXX}cw6.ʼn+ҷ} 4Ff^|J0*(tWO7x%IENDB`youker-assistant/src/res/plugin/shredder.png0000664000175000017500000000250313260315532020211 0ustar fengfengPNG  IHDR00`ntEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp E.hIDATxby`L :Q5?~ !CUE}eRĸi&;Cm228~&DU OZT`abw eNz ߿pW ")ZҢڕZFBN$sQ ɼcboE{gD%!7 -ٕ7lk] "IR m14{$ucQ:hA G'_ sZAIENDB`youker-assistant/src/res/plugin/startupmanager.png0000664000175000017500000000422613260315532021452 0ustar fengfengPNG  IHDR00g^FtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp SIDATxbd8f€ Xit!ƵA@( \",b^tb$l#qS&#lڸѯÔ3\&}1 ~ .4A7NL:8@\ 8@Q? ̈M%O2\Q].@D)bb `xtE:?us en&nJR`0xTNE.+K%P|=ظu$ϩXsy%h X1iyW$Lߎ(\ Ldz _@F♯Ɉ'z A]0kam/~ DnȀG#>cL>f8{TsY| 0"t~χ"6n&kBvW@DRA>=Ӟψ /|k_q8$S0aq3S!؀5+!C僟9mYT ]~KYAA͓M?`I :`X.5ZLzo.B?* "cIDATxb?Զv bˁxFsu/#HP4E]UܔAZR GOfy )_Vl <b`bbG(8Z3aѣ l`/'W`c31ţ- =Ȱ />1 Щ FRP7|~LC21 !osπq7B@xa1`Ё@\>D ؑ`95-@Ig{;}Ph`c{% {IIAd`p^rALj4@&@Ò@XҴIENDB`youker-assistant/src/res/cache_uncheck.png0000664000175000017500000000507613260315532017666 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp XRcIDATx{lTEŧD*E4|aEĈ E#( T'DFj#<ķRԀjU|`P b%0gKްݝ{g7e+suxΉ?y7UUUl`8 GJ ?kj_G` \g 3X(6ɴfBC^?{q*px<&OIsza`8|ָt:7k xVty-q[s2yj1R䵿Q[@NQ SAcPAm+X,Mwꞔれ6-T @Ί+-V۸Rm.G<0l.Oq.Hmϫk qx2ѪQ+ܧxu Wdu7\8F Ѳ*Z>X\8Lꈘp6X~Vj VӟBj2*˵+o)&Ztt kSz\} x7ů8RArXڬr`.qF`j% Y<6JQ,/ *ѼZmtިє53O'MofJW4ebX-uKzy06 |pM=+uw:^`*ن2.Ke;x.x'0]R!A kj c _SwNiMKYd޳$}*oROO#:< 2H Wb.21Ǎk X0@m.I m~%j`+I@u~^;uZxuֿs1Aa/gA2WN2iAr0pMT7) a&^|,oRH8Y޷6ol.q5cws> 1+"cw) \g|;֨0Zfl0pX\^I[MmPoW'sZ0͡tFbi5S,dyF}kJ獙Ȼml}xܔɯ*\Ʀ0nalj&kS&~),be,`Tm&>&6_yَϤtf9;Vh+c 78 #~v~1v[t\6Ua^&ĉ S|2Umh9@nBeyy2]{/?1dD^34c-!iQcϻT-- 2'{ݨg5E' /5zBU խ9C2l=O#c+%`-WqT17o?chT=z\5m{tAs2ȗ ܗDd>'[l :JK'oIENDB`youker-assistant/src/res/wave_front_small.png0000664000175000017500000004123213260315532020457 0ustar fengfengPNG  IHDRdUl pHYs  9iTXtXML:com.adobe.xmp xmp.did:793C84FA7D90DF11BB44E7D84CC8D86E xmp.did:9FA3FF04FF4B11E78293E36B179B5577 xmp.iid:fdba635d-2c36-dc42-b4e7-15ca6de07e07 xmp.iid:74c5d078-c4fe-7b46-acef-fa1673ae49f8 adobe:docid:photoshop:77b2180d-ff4b-11e7-ac80-f0adc28d61f2 saved xmp.iid:fdba635d-2c36-dc42-b4e7-15ca6de07e07 2018-01-25T14:50:10+08:00 Adobe Photoshop CC 2017 (Windows) / Adobe Photoshop CC 2017 (Windows) 2018-01-22T14:18:56+08:00 2018-01-25T14:50:10+08:00 2018-01-25T14:50:10+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 387 100 K cHRMz%u0`:o_F^IDATx1 Aa_RL/BYeؔnUAp5 t~7g 8;]e]̰΁.̇9_msU4}<R({BHHk!$zi%jq\"\"bpSV&Nai:/J0\㯟?1MD1MAlPS,\D3g1E29#넅@aCSs@V 瘡 @ѽ|Al49 L6N mHnpɡt߿1|BR \k|UًW ve.L. |s31 1EF2" OcdNHbLg C3!lxJIENDB`youker-assistant/src/res/sub_logo.png0000664000175000017500000001262513260315532016732 0ustar fengfengPNG  IHDR,: tEXtSoftwareAdobe ImageReadyqe<niTXtXML:com.adobe.xmp bIDATxb?C H6#// B >K0>{7NI޿~U?z/3;ÉN z?/g >66Vk.0쎒cp۟^5P'3cӓ<@1(sCW l EB 10I ʂ PedE^ 3gx;@^' ;\|$L(LN ?ֆ?Y[\ei!Q5HP,@!w-rMvvg'3ys;ey?B x^@3viʠa6GB"#ϔ}K!?ہC(Y! FʱFU8БPۧ D7H8 /aͼ[@0HasYa:M xޏ1Z7Xx2Vo<͂m)a` !K"nQ*[C74D57}xI]g} =ǐc] ¡zzRNtiHe; *yE,6OGP-RA[Z˞i( ï8ql5 20U,!b?UXu+, ԥR5Mخ8i^{Ͻ}Lj^GG9_AhK$077ݮ~Xc3u(/N!!s#>`%M"TL8Q\( Joc TvJYx~p#ShKZ 1Gx6sP(:vP6-$ 9 B]YE@ybzG;Ec2SD£<)ּ˧/\(}YW z/\μ>j<Qb?~.k/9Ha_Yh7)X8SM /)(ShXX4ClW/طk)""Ku֐)w:Te׷`lDv4zv۫+:gFiN"mZ.J2YSdd|䵬X!Glӑ7NLbd")AWLĚl pa)= 1˿%BxPby*ڡ`JM x_dH=ڌ?`2d:$nҎȬy溴G4>xy FIxzݿ ĶQE388vIۘ( @"`Ţ lXAHt"*hHMC>JˤJ\p=·QJ!!15}9٪B7/3?G 8vu~*~ 龗Π\_P~{#Ԕ4MZlYf0Q e>)4]K+M$$⃰lhrϧD"qW[ZZ 244EBmt\K UMICvw1=="Vw~q%)XJĎPώG1ZM\Bm 9t-Bz~HGdѠd\X4XeNޝ5P0,m\hEy(qnYWzh*3`A:=&w4QP(*}^T2:^]\ax%3C;\hV5C@{?:4]5tZpӶ`˧ä~4WQEc yl-YO 0Ʈ"ߣn#G0 ityO f3;1/Qyܧ62_^ƫjSgd'p:;ظWC۶R(MԼt(sssnX6q lva^tG/in1V+֕!;veX"RIqz'\BюQ^iWZC2=E7 N0brĀ)9]}5[:>1n˭k߮~ Ԁ cM\{#KvخքS̵Z~l1*E 嵏dqdS,>\$2}=ܹ'$2nu BZ}}s.;OU`slQlM!>7|P~)-ЁQ BK*1Zr^0c33CQ>7/ZW}nHHsζGwڵF2=όlֻ$ʦZ64H(HKAUQP>"$H$H UBH|@TP[AVV]d7v|g=3=hw49{9="$ CWc?!'[ѧԛTc z)?&bڞ) obX+ֶDeuҊS:GpECWRpuѴ$mhqO J# $L1]-K=W$Ppm[#p2OOt2NaSTƲ#@}xai>_wOރi G`dzf9l57 L-S靓cX W {xƐLh_*$yߪuXOdy݉UkՑ` 2vJH>Kp,gcpxfbq< XBEblsE$#=^_G̩Ekd2(L=hRMWf֌cLVXmal@Fza| "Xlk |6- pC\HA3KCwF/Gf(9Զ~< B+o&:+E#wE>=!yIqhk0%#Lzyq|y,OٻU\*XLCb+u;ԭH}ef)iel/^5uc*p1q.B0]\E:R'Z1^}qo?fZzFh0SDfd|cx ɤ{09+MiklRN.5|a,VX*-m6 YgP3v;D)~9:Uh$tTAeOlth/kRV(2qǕK ynv%P!ϸ:a#i#h{ZOO_N?d7FòV_jj@ĈOd>~풆>4 8G룯XO7`KO_>慘ZWbYPsȘ+̩Vb(%bUX`k?ǯomaY}y$`WP?WXm K7FXw Ņ)#!剕R$@u Xk9TW0jqʥj!J֗!~&JoI`E{`p\_80-UAi1T݆bL6oiL‡xv&i>_65$j_ ½cB;Gq+RpgeI_ M.\]H}HȆ.-C)ցPtweI@ Nw?5M:D`ݦ_2T?IENDB`youker-assistant/src/res/kernel.png0000664000175000017500000000474113260315532016401 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe< IDATxڼWocw%8N$N&iLi-ET y*Q HH"D//HH VފvTTL&L8%8r;dX::b-?s_9u-k?Ӳ2Uk?ɍow_My: ":bk[t2]ѵsCLl1.攫u\~ҍeg8=QGEj/n&Kh:lCkr_`ݞN`·::P_. eYQ__%L[Ԩ!?֨c~;u ԫX:_cy-9oN!-T. tx>ֱs+ {*Иs<P` |-Љ!,_ `;%'Rw\ Ɲ,NCb[b߅"NxWVZ@40DA,0cώ vøKtbHՃ, f9r W:0k:3th@Vq8:v!p(pa&aa:9j4TTt󊮅F}P?=Bvf,SA v*5E-tMW;C7`|w gZ0^''"L|p]0Z eĢ1F5 сEںIq[kxv bz_ilNܐKR94N)mgԷݶYyTa ss{s  XR%6d7g4ᛋ Z{p'%f`-yj3R(vIh:s'lP&l)0<jF S9 wi5@ۛyLX4h()7ێ(ݪif U\z[?`Yԓ.4O(yWDW' PzT+ܟp^׍|:.n1ͺu^/f`RG2j^Vk+a'թb`HV7I$t4MZN*b)qr*YcS ׋i%_W38N}cc eiD {Mr-b4Etz<iN^DBwO+o)JmW/)  b.HN5lԱ h,N. oL;ŒD+ΨM'syU\o`l%" ) x`"\VDpKN2(J* *jh`#d M ;|Em3AnՅz:tnp]Åg_c׿{XJc6ROH`Wy~}G; s0EO.W=4-߁Eu~a.XmMpT\Aj.fpi22N#ÁRO=(Kad"‹[:̭%x<8=>*r^'u83 Ѕn_z_xܑ .+yל:b 33ן^ |nr[9 s縟Es@=es Mlyݰ\t|M?JNRer\" V#D㥶>#M wx.>H;Y 9niZF._,LQMʵu>EiGcB] 8vZ"r؉>L^>/t{?O֩˳Z/[1]vuj;t; RM_݄m49}"a '+-u^<?6y^{ 2TjIENDB`youker-assistant/src/res/closeBtn_hover.png0000664000175000017500000000242513260315532020072 0ustar fengfengPNG  IHDRG(tEXtSoftwareAdobe ImageReadyqe<IDATxb?^16@ H0xoi 0Q~' @^{D@@Zh(@ J&2A @Z !wbp g b,`^+R` {eѝ00 o2$nֻhmE P׀\"3 9f? r d=]?% U{__Ț@y% ܐ?1|غCjK.`@ro|3kɢlFs ~ Bc?@ 4P@,`i)6C0>L <&h@H@m 5j ~ I Zɮb%ّ@il m`8*%\㡥oo6g7 $X5<նWgB>oG_p; i\}^LFYLAK;΄&px{"u>µ[HoAIG5~GV6׾UϾ| }Œ +wE?u3^eǟ}׫js'#yȿɌ91Bc/?c0d lЬ`)Cȁ@yRj @ `eʁrpzeGrEDXW3oR /0aec>o]QǗ |dP4)g? ߰Pv ?Z5}ï7HP/ ώִXfLF$3!G  ?]J7X7o]Wt_o  tH \Oa@xP$cf%{uWR|̂ڬP=H ǀTX񀊘_9ru.U^pռ:@)_Axɝltz5=eSY%ȜۑlͪǖOs_^__T_뷿yo( _# )rC] Фj+,POhjo-&MP)#a8&GWOIENDB`youker-assistant/src/res/folder_hover.png0000664000175000017500000000262513260315532017576 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp NIDATxڤS=oA}s^|eA"%H.M(}Oo&M(%?J:W`,Q+ώFf8̣ki6+n|ҼNh*S9zg͋=8<#|8HBN D[8J_Cxge^tS &!.R~ԟWz?ϰdx-E v}PK<` |CQEGmn+=t8@D#%_G -G# Ʋ O>L b@}H*x:x<[|>.CBJ3HAzIr^aF;aO`8d24lx!VCϮ{2gUŘ>Wv~tc0idIu*TV Jiʦ)*d` TDIENDB`youker-assistant/src/res/themeset.png0000664000175000017500000000525013260315532016733 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe< JIDATx\WkU]s朙! D*%#* ZZ D#(Hb'ؠ@ @6(%""Җ>{73s\'?7'gf{ V^/<+ٮ\PY,q@##A4@# #dIh(TgZ|2TȪ]{xtsOoѿhU>撛\pV7B眝C  sP R-ρCE:F/W C)}c : ҴM^ iP-ذ\\b:219ftvƠƅk ^q[څa_|X4q6+++YE6wp8h` Ĩ *-%vz-n`jiC-^F#)'yx ՘[mHF@{UAV Rs^(҄U0(^Gc}Ū8{ZX,`s !3>"7b8=]4T%wLȳJ# C!(9ڎܚK0}0=T.:b.P(/=ַ@1cƴ-d h)Im&Ih9WtaxI9wp J J㬸p%K܌"*#K&:Y?l60:F+V=R=o1 &$Ԇ`q鐬krCAbdSZh@Y@~i@K24 b $RʃQ$a ;y9&yDSҚ&TQ?h<&wԊFBȢwiib_ R=K)dԋ d&г+ %2j֞?3?<߆3߲Û@:?TAn!2,^3"Vޥffw7"\ v]g>} &q۠ T355gt4ԍ3Wo2E_[se3馥ȋ~dvC0}$~k'\wn³c>4YMrAS#*b$JH=UFN |T)WrgM*\Y Hq?,ݸn6N|ixnMXq:,iRdvy ! 1y& ,=!`zY˪SDy/j){jˏ~wޅ܉|2mYJa4T4hx/BU%J .:B \t|`z% ↭۰;.<6\c'YSKrK.Tue aA=t,R;=EZtэ_>8~x Ěw !Jc,>L3RlqOB 99P{@Ph.+fe{q=`7嗀x>u%^[1.˱;^QzuoWWĬg8FD0_g7oƯnzxs\4Kݘ t{ հLXv')5", OJkՠt ֩Hm1\j㻞7_㗬cc3M;?xg&x_'` %:#!YI ;Y+jDe{TP~c~dG??ϼg} Թkb<%g]GtýЋ~-A-%'g0TZIQuxх,'qCO[S~=³w+996>er:S-&9 IQ^Ԥ4>ujt2yQq#8J^s^k-gW%?}~M/`p !^-xǒ! 51^B _ 叧j#/=y7:t-ٲtٙP]|Utb4兩H Bx[5p!t}o&D @coC._qi|PغQwʾYa[,ޓQBNڟ2b=Hmiᨗ%Tz9 y pi-H$JoP^ɷesox2Y@kJwVrը2o{@k|ֽCKTwξ{6E '{OKzP <5fl}oҟp ^:(z- uV}ek5GtO^`\ u(Y9Hg/EPb~(.׷C~WlYYu] Ҳ>/7|&i)T|CYXOڑ<+F?+ lPIENDB`youker-assistant/src/res/loading/0000775000175000017500000000000013260315532016022 5ustar fengfengyouker-assistant/src/res/loading/11.png0000664000175000017500000001303513260315532016753 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp SHBIDATxb?!Н}bF p39a3>Uo"kfG d='`>r ;& |%#ђm?jƄ#ܰadЌP $'M<% )t1F2˳g@,ENl ^$&EN$ ,5I4 k ^J@q!tI gDL,:aR%ՒX~4~7%EzMKD% `&Na^"WRU 햁tX%PQ)@|Je)u ?!#SPu .=bir*t2Z<4vYl[^!s @&H ER@ c‘訫@Oavɩx'R;@ %><;Rt .p (qX#E uZ9WS@HE" {XJS9DvUޯ >mhiMIH=3 /JH4_alr+OdO?ZԐ&*4CZ22 0@v/ߠk2 w4᫐+HIeSot,?+V# t%LuRv?\q|mtAMLQA!SZO2AID',MBKi^8HAYdO9:8kgi s(BDB,b-P "HE&-R)j0>Ba C&kάoŊ2 eWڤxcji>9]w9d[L y, g類E&~<ju@(5?箛a@4xl>wXEW1t!5ܽjGdEڏxk% pdaD:ޝ޳ 2b%@D-IˑeCTj:-3A漈Ul*bAQ>EpQD))VqU*.n"""B*vcaGp%LfI|0K3I99s^㗡,O'˓d,xI:o(.H9e&b݋_ =c39ЈcMlY:,aC.;X1*"$ i.c顜),ڠpDJ׋mZeH[:Y||t0J`nFXd>g͠d_iJ4ym&6u2j-x.1*YP[w;nxGAUT+bb!{Ov+Q~WtC&\:.k^ZZ`zDj :MSFI8 άvTђU?OKJV3.k|Ij~p+1Q!>?Yh=mljt@s^M!zUûibllc7+YyxR^vG+Ydd>O7_!?D0nHViDU%KiU[hvT-M9Ғ2MJxM*trzWc -4i7Ҡ-Ϣ./Y^j=2ד=Yj={=Y %a!h I#6x(H>_%d!f*]Il&HtC.my>~N;+L|D PཨK >9 UT(.BkfΘ$버jH.fmU$sI;@*Z+@6CPN0tRGC6YQ+;׏+zSɃ认Ϛa'F%[v+6Qp)R]4*X6Ҕ&% 5;K%EV0 oG$ yS&2!Y@*W9bG= `15iwb6L?DQ9zS̗c2!l[pL `.R}LI$Ep==j[Df%@B _蓄m]'#gmt/w:} k c(1za9{Iz SbPq 6b9 ody<>]y qV2{@ZRHFlXp-qps-eȖ*4Ȓ't1|'YQ9ӓ4M(`?ڪ#1FC̓k~ N{e2q@ep40[cp]eJ݅ti#jfe&i 6|jykoa2k 5&[ÜؾpqRM(XRnj2R_Ϩt c?/_*t\nӓ 8O0"5 RүP_w`oU:cрt'*o!f[M\$-ߓ]L?TXg~N34<8jӉ*\UC1CV::!:1w]6 a2h%b9X'r8N,É( A)P[IENDB`youker-assistant/src/res/loading/5.png0000664000175000017500000001273713260315532016706 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp [-<IDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:aL8"FD!h|BMS" Bc$<MRĦ ePWl7I8$m fyFR2MbR;P\2]rR.Y/\&AIZEw $&]v* )-7c[,$`Fzf'\}@y%-@QհAnH5Z2zyr@,ħXR"TD,8Þ4]hk`;HQ,6- %T:XJc´E.k`-`pjԕԎ @-A%$9fE(Ĉ> HUV0G`dH!V9@JB&) PעPAٴ5(Z;*SCz$trD+ ļ#PC)ANbj C,Q(j;^9GL׋@m2j2H%+nѡ8+4@{XJS9DUޯ >mhiMIH=3 /FH] W|!,"礲 M&Ӏ<` !e6U7e7@hW!WX& ckOq7:L8*dzbZ D4nOlss!@3Iiap5AZK#g71]s@lDe1RLGhO2AI$Fg.RW ~ K=BKi^nG Q@-Hr8ِq@v(΢QXFE ;(Z ,lBiIkae! glႛg+\"~1Y1Y9D &-q8F>" ۀsE&kD1Zw?(06r [(+6¦ԡ@G|~Uj Q@;PZs Qvt?D]n|_2 B@;}NvpN" := ٿ CVDEp@~jP>t8!k]M&& LLRԢ1&,dM"#/K!yi^υt,|VLV,WŦ(3FY($͔"ԨHd,߲Rad@IS1bL^-4~{nϜs{Ͻ|ls|e$+ dY% &` pNɺq-c @!u8+ag?9+Bj8g,8td^S7PyvlpYM/1F wF_O#o(yyI,5̋S,ѸϗX eb |A J6OXHqSad{JLW,b IZ:{J..YaSP\f]u%2iٸl#wS2D% Uxˇdߑ'Z JBځ!dƯDzѸ'5։;tL*fW(ij/kGJeHA;ek똬& C^i }LQucS9òDԓ+}X f`|o~+SsP<[%':8Y>GO #( ՂaqO"w[pw( !Xj A) {@"$g)k8;rBXi"QZ+/0Q3E{&ꜯ[vb j5>mWkiVd|Tdm|,DnUUqS=m'8˥ 9*D*w;Oidm{4V<ߪ޼&5M yNHo^2'D%rV;ƭTJMkZGZX 5 ]gfOIKGZHjbreԩg,XvOQ9NQ;;MºzI9,쨘Ks~9%{P G'Ih>d]on;J,#VB2Vt;)dQk?.+YC\h"7YGN@K!VUXR,VX2QzKVlٟ3\b^"}HAirba:oҭpH\7cBtG:WbQn1Vzmu:T:Z&E>ȓ2#DVxr3;5_J:(W[( Aegc"Ca2Du3U`unxY VSqpqn?}x_Im sa3 ZaptT+²´P[Pilik\EW/L*G'vz"2=jOɯ[:.lźU!RA0#R"~:9jOˆu^7麐34U< Ί#?s!aĪ,ΕnX_܉ ̉VE,H0%`l:OzkM6nޭױ~ƭ-R^p^b}[|kHsźgZ(yzbAkfI_4KfW,pȅ}XZ:SJJ+XYkډU b'VިbQ-w; G$Bc꭭Y+?&X_dIm WKŭ+&թVEVQ8hrNK{gf@,w[jŇ8ZT!bC P[-=XDPPdYPVѐHoXQc>r iư'Cl!-/X!uAĢ U~ PxMzBR1sĄWN]ry0,B,TrAo>=V)X2t}\u羗T h#;Կ\@mtݪTaEV] >Xm9VMpbIcfg0~UBX OLĪ:izy sHpP'δ89N,pb9X'rĄ (AWXPIENDB`youker-assistant/src/res/loading/12.png0000664000175000017500000001273213260315532016757 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp BbIDATxb?!Н}bF p39 _<[,HdFUz %QO\X>6 -y req?:"gPjv@v N0$A *bgTRD$"[ SY*hmc!M$`%beJEa@>ރׄ޻ٝݙm<=zXXAa rJx ~Њ#.^.#;t? 0oX"a2a>j՘B$T+ݼ_9s1 8Qz(LD(,aYsO8rEjo2vXIfe.= Y1TcH?NXTر,ո Tĺ@n(3 XRFQ˜5\XarwpƜL+(0#gYn%LBcYf+?Og CyC? C:FY4[Z?3dGlwq^TC4 α C>P#G6(vJc7L%֟PweQ8K,gbDb[E2,c@2ë:j0"Oo>iEjdJ;v0"~WtȲ@]ٕ+ks-I=dgj0{bS2@$o+ *Yq`5 B36"Az/d2sxiμDR[Nl L GwXpޫ~=<n% ]I`%|?>b4E-:xZz g(3GvTޙ}JK4&7h!1ʶ'ԪNj'ԴGZccۮTeEAPB@0$RnIt9z}`C~1#tٳX4^KFOMcnءR@3{4@l`95SQجV+H+U }$}QiуHJE_DJA CQaXee֐AeaD4֋Zv~T:s͕a{k_:X'Ér8N,sAZS-s ~iDPB( RIe!ωUob=iZ c !Ym"͠&voi"rR %7$;2+@K~ Zi,q& heX&6i'm+@ y +FfDxBV%Q0+нڦx3D <~ֶ_}Kj 0m0#I;̴I[&Ocp$i˓vZVxtZlSܭ3IڤMIڀoDDB,ɺ<\_<:!jK-LPi?Õmcq_~':9Vi&j=vºR|oUWcn՘=In@!Ff:u+,NJe嬌tR,~BV\K%0{ i6]?#tC>?v zT:X)(΢NY|{7GK$V[MXܼW,4{U{`lB3fb˖"S*?*^e0+Q684](k1hwt({=bĶb5TI{2tJ>mk]䵈]'v?RZoApc1Xw' NOsK`h.K'e:Y h;,yhT8ec2Jl}aU+O j2gJ=.IGCʃ9\kYY[aZvV؉[HVُ6⹭X"P|dR9ŀta厬W}r/pZ)+Kbݠ/ڙpa1Os{XqUb_wݦE0b]|k/u!64 &Y9,l?6[qgbqrԁwbUXgjn[NsjX#;9FQL9Ī%jX[1{9m"۟<4bڰ.Xz:}~T|C Bs62g[c/ڨ//w0_sAju7\x߻}ŪՊգ9ERjSJmybz'V-E,!Rj$3*Y~Hoo珵mz#M-߯"Vj.WKvW,hREVQf?JvnG̀XT_ﵐmŧ8wAQ!cñ p?WZ%=X3v!%9Y J=.?"+~̴ǝB1ԈX*<nE='.țXYA eށ4H2葅D!sĄg4'=:tb)n%?ZP傌mh ypby Pf/: `pm40KcvPcx^me?X {dw!j`,kutmFcX]aTIhiy^8:L]!ɥ0w,8NUs4db - LLט06b~*TߩrCoI۬ FDV_ԷkJgb,6>`ҖslX_&.(G~~Nvs29[RubP]8cI+dme2stz;c*NVCԑX'2>syl̯E}B'r8'Épb9N,G! #.frIENDB`youker-assistant/src/res/loading/13.png0000664000175000017500000001270213260315532016755 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp BIDATxb?!Н}bF,ބ 0Re\Ͱ@7Mt͌x ]A‘'5aiHA3B506p6AcSH,Ϟ9_x9y$@CJ3bJ j] _ k ^J@q!tI gs%ieXLaYZ/捻B:DMlDT< Yjhk>/@}@)a_KI @T5lж[aM@ {@^R4_-h x IJ 1X "9ɭHB@[kC Gy$BlT@&1i&]֠ZYԨ+8@9?#QU$?!J9*[&E 'nPchCT@2ĘFp$:*SCz$trD+ ļ \/1@@:v% ֣$@:TL "OD]HߍKj2H%+nѡ8E W "@PB!@lPAP -YR m +PՁ/@B$T6QDbz'?l!o0MZ $VĤ)|c1ɄB'!H@CĶ1B 4yW_䠵4r|v=FTv#5z􌱁J*c %QO\X>6 -y req?:"gPjv@v(H$,d)%NciA[Hʒ( G#)k+YaPtϫiݏy{ԫ{89/zAG#˶lȁ\Se O !vv[LT-QG7S(FސIr:^{6Ѝb4=}r:6A(ʞB9FQw tu5#;v@$nꐕAl3eEZ&k%7d-!c9XOe밌wŒ2uaR3#ҾlF۾Q BbgOP {DA:apr, \A$ J4 BkΡLҾ Y!kIYɅ4Că柲k) /ҶD>"˷3v1#^ٱ}ܔV}<+U*ѕi .*$52IY[ǝ 6#е4cl:}oM1xCtlOlk sHʤ7})Ni11m\D"hUo]_k#Y ޵F2o (JTQAAOJDoI EA$ "(E=v6鞞I}З^-P$K,!K d,xP2o(.Q9E&rˋ_YT7v3Qhı%S<{VqC.jWqx/J%Y4xc8MYn|,mWCfx"3QpTL>~! ] _~k!07t'o_ NCr6_)~dKƋ.1V|IM # h5B{hUhF]'e ݻpZWYHF^eV2xQd%`#Q:7ɂeTp ,YHLɊ_WYCѸI#Ll愫P"QdՕB٥(Kek_ߧTnyp1 C6>~cG--YyL2ޤv*Y`d>z4M*?Pz;diDasYsI(or[F0]=+ZF'u YzLN2r Yfn(xGHVm]Bڞ dBυ,3&ղj5Dx ?͓0F9gE$ko.d!{׹$ 6G<Hԁx|ߖudr]b,Z@OA '*HU7-d_Q\!0p͌$db&4M"5OoDW̰+t&PJJ gsh/7]=UZMj7p.Lw7 q+qM:B&Ê>mMtSVw@!jr1Ao;(QYM m:MgJ" O( 2~S vԓh'UUyaXOej'T֙hLEo4gx-8UV0ZײR}ƒ6I{ʿW%>(@eGU76nEY((-x:M,6CXxC^ 4搈v3Nn"xrҳ >p Pȉi{Z/q@7Zy82ED?GSE ~ӿXZ5RW iUd|QncH-DnU1)%xvA'eWOqIIrWWTo4:ViyUy;!hkK2KfzxB EnڴT;f7ƚƘd59a}VbùHAsZnYuu"!;*݆9[r[.kz,DX׺<Ί@$nv!V{9),^k'ݴb)1Z2&C]&XqYQ^""B:$iylWb%ڂuNuU'kѽjD,Yewk.8F)qAXC*[(KI8=>hqUaVzmu2@2Z-E}Z&3m-:ؽk:dEGw,}*t\o,AXw֗؉{$҉unxY QSypT+[y_EX` sCaԙRo-x)˦@c-/(L3u뭯N(LY 梴;]?S2٢_2cܑEZeA^y`<%wɸz}HՊOc,Kq!-/O⽦M0b]׭d]!z,X4ɉ8^UB,n]6>N6u]b Fvsb廮E"ҵĪ%N[ʆi^NrHdcz_[L&B^-" zXԱ(yzcEK%U ra}V;Vd:Zp۵5W _ĪHyۂzn+ (uK;N%(';ZVBm!++Gt4<_E,WJVwlVٱbD9Ɏɓk!ۊqbrA@C(B,@Bjb^iŶpbT 8)4LHrf @(+hH~חN1B@94cؗq},xȢbK7 H]7hBE<(d|9^BOYH?`dңKW.f"N,TrA6 }z2,S4R^r%Z~]zs? *ꎷ)?m-f7H,@+8ꎿo/>Pz-ewH*4^:L >l'YQ9IZZ˵&kM󤨗21:yl?Is3fn+кw.Ja3&G ^VkvWXDEZ:#Z0Z.on@Fvn٥5К\l ө^tm|;#]H>֯̑m@L՚6cX].w16ky)]"uk.f͵Ksg vVe2e :7R>Qn[,Fӂ>.Kt"9SRub T]wc +ݨ:ef6v.V]VCԑXϒ~4]јEUêv"Épb9N,r8XB\i)8IENDB`youker-assistant/src/res/loading/4.png0000664000175000017500000001272013260315532016675 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp {IDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:aL8"FD!h|B-i<bi"|tyaKĦ eHbRM@1b[{YTLذԎ"L@p 0IPV](IdJ%hn|T豉-J0G#J\Dd#1;)6}@)a_KI @T5lж[aM@ {@^jGi*c a2@FLAׁFL[P.F0$DĖ_M r* O@GaڢI5h{x?5JjG ׊– XhZ"bDUdF,Z`%sT,M~Bv??u/ 9v6I4(Ci4 GB [h@NNh;!uj(91@@OcpK@G xbD1]/B9ʹ9Rp [t(> Ml-ү@ME 4Cdk^5Pӆ̑33bԕ@rRR!|N*d"1= H˓?7B QfQuQv&|r1l{\@%:Ƅ& V# t%"뤴i C#ߙ(bb#*9?1iΨ6rߏ2WID',0B>$}l2ZJPUA" ~uE Π!(\;HA DD uPR,D+PDA,Z?lBT jvRw{{wvv挭7hɲd*g%W@5Ldlacd1y[{|GpԄy#C~È" QS0nU'HnDTnΔa@*3(* ~(hLeTXcuCT9O3Qt|_#3Ў@ k)Ή{wy_!+ x(5GV\:&.ج Y׈mLRfkP#/K bAzad 3rToZh[D}VڷfhV44 i薜6Z~ y@t,[A_&x_U&WZuː!>A5&%JrdK.cēMib _h<"&b1#*تA&na ek sAd͇"SLTeVe׼k5htE"^FbP&;Yi>c6S3Iw&-hY,+G^Z*pׂP B]EqTJ+]ՕZw F7bHQ"EbV:9{6ⰮeY 9L8%՞7HM( J0 'H* ƀԔ mduF_' {^} Κ7<-6S: ZD5}_RYLV؅u},eYbBPP7F0M+J#Bʸ'y6JǸH dՀ=,5 V&xCCjl@Vsx?,zb{0B9gYZ..ۗe!f6Y,+`;$eH7āxm=oSק (3HW|]8wOpAbuáZ򵪹܌Pad] >) MjEv.me^" {ДS(jQt:l@N1tR(Ta:&֗&+)e1#tE8eJgrE>Ֆpia힒5KkB4*b⌇x#$Ǒyo}'.-A?QwкXV=qDEYx`Dm&jlc,[pL "ʅ'AKVc~GVe6 !2 C| d )wXRyV6I񨽦h7'>ۍbخkm85Dwam<`sP ѓ9+ d]Mh]E>Olmb? .Z6$mQUlJ.)袠 QVZ5"JmEbBJI6iLlx?$ݟ3s !ywgΜ9;*X %BR(J, k])F [Pwo1heTo~spL6pq{ns=T{kHR GH3B"M|sȷ9QWWxK22 тq"1k\#p~:bMO*ܮ$&vē~`'Z;lDxJL䖗+нܦ$ *NF\`9J][mu}E7o-F5PѨ`dZ;}j18vq+D *gAN@[F,ڶ-q =jcM7)<ߡ<H5xAL5&wIr!XH`|1,g)BbWF0tbmiORq/;a ?"{IB$q.ߣʍL 9*Y8)$^֒ BsUi“vu5OiǝUP.o5gE]5Wb"F83 7I':7sksQ[a\v8[aYO}![ag?ORXsJ-83YXHBp}8O_ڊu3?pJ3c 0{ǹ/ +.$%Va{tV-"ֈu=_{tŁbcKI߻f+.Ɵ '&[b˸Nsw\+5$"`+Hb<|]6n|],̵bM:F~jp!6V6d2 ZచsqRR%][H.xt jBRjmbŶJ2KKi( u-K\*#K@a64$y4Em VJU}V喴Jb mu(Ɋ"R;Wdf@,T_&iX\P( b'\! y-JkAa$gV K !~4 CN!1 fjf8dc ,OH(țX(Eܠ }8 VAYH?( <礛\<"Ũ,F=N"~S'SeqN+:`~rKrOɬ-LwVRf77[)WTL6S=0~8w86IesŪ=ZN(K\0> 9X _>"v<^=[eIbŀ1^`^94`F$ ƚ @H!ؾID<߶%]-6#RA*n d+ IDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:aq+l4#Tc ad>6O4H ]K.@!I7I8$m fyFR2MbR;P\2]rR.Y/\&AIZEw $&]v* ))н7c[,$`Fzϋ:P:!{qCJWRU 햁tX%PQ)@|Je)u ?!#SPu .=bir<4vYl[^!6@&1i&]֠ZYl@OΣvTnb1bJ1+|FhL UɭaUF,MROg$ǎц" e1FHtUh5)-ɩx'R;@ %<;R[a_b=JEm+ #'z¸AݤVd Α*χKWHݢCq Wh` {XJS9DvUޯ >mhiMIH=3 /FH] W|!,"礲 M&Ӏ<` !e6U7e7@hW!WX&XcLh2ᨐA]SR;*Gdk 򄅐 ,R0.Ajs0jkFnbX؈bFZ]J*=d(NX'.,IҼ@qjȸ@p3(5stxqH; ;@D'(JB,O--Q^Ioe`XDl-%bvR(rw{k{7ٙ,BeP <[6G>#4[OMwKH>(80 9ѭ(7ʦiK)AEc]aUFG)A!Ӭ~r;3yEwkT|'V >/@ Spo:2[tQQNx05GV:ZW R bs*d] @V3YRJDcLTȚD,ßyYwb~B%\\,]&UYNqӿ,Ndfh7 i ր#:T0ׄ ^WQBo%5"ϋVV2drC"iP-K[fh| S#^eej),1ȪtH)";ΠIL)VQj18A[HHe^l?`{&C{:aJ@ܧ 2ioKl4J1fik+ f$Ic1gd[~`ZZpl_$Q$!* 9DPMB$xғ"^" ATЋ A=jvkfzg fqzfa `X  E1EASf.%hܦ|={/<8Z~Ptq݂s箍a[Ėf!s5iF(#`{w])2aVЋmvg@;XfY9hAkw 18kg[xפ&: Z )PgnXC玷J{me%ڭ(jZ1wmn^"4Sk7sk ev2XY딕fӹg,u⌵5͚aԏrYy򘅬`Cx4nP&[ EJG{=۲V1#M!ﶜeӲqI#`!f+YzwUKG):M42, ,̰_{αf#A*HQmyz~.GFrl(. J!H `X`܇Ymxdn `e:u8=YR`eSh qeymQy6(\6ZśeK@PiLi|%4HOh8M[`> !~UR=^6nglowḩW2ጮ,Q5*U&:,|e/|SH΅ hJ'R%_ŤeavrؘcBUчZ4uJQ(08e,Ee1%GSҩG&vRM+li2VwjSJ&]aulodOGA:Q,g)yÛl1OzD@IhVR<͞QpFԤ5e菳p噃Cmv]+EPfڂe*Ӻִ KZ,Cuݵ6h@g ' np^$R|`T#mZ6ۋ}o87L 7WDClGsM2lל).Myg5k#S جV+H+P ՅQD!MŴ jMXBil-( m)XQ)E6E_,BJ#XP[Ř`mh؆8-^!޻;;;{>mvof9s  %BP(J,E1 d m`2Aѐ L;.֋p ޏMC{| `H d(F1)Z߸(FIH5K*]pM{Wf !#_I* =$3}Np#N#;gX%V@'M{bir|4B»9YD"<'6rK4!r_MeDfpg~OH%V|s[k6[ysf6yʴӌLʹ{=޴)3=m߿ǥpi/6V!ִ5q|o,n u&%y2YGuQfgu &.ꋹT͈Nj1e.3d* X6s7d7|e~F"ĻHZ"6UU6n',2E֓~zI52uaBpqCxң(kuɳbg \:(k|u; 6-DiDéo##X,g w]>Z,i*X(v]ygǬm&W|Qu4g25޷#ׇ:䌵=0*,RX%$~`)jg,TƩJ,FӹԱ ת\CAA_'ulƺ/T(PۅReŅj찮`lqF|~_ yL,׹$V)P;ɮpҳX5JOڿqw[N9_v_k'I,"Xa׬evBE,nۥBTȻ 'tAHy|C|Fa#u{ZRUK,y>P=(aW-ZbO#6}"@+5kyGo9]"DFrՏ$'hC#7YXwȬ4~G.wJZg6[}_Ɍ#R;nGOd&@,T_Gp؂i~!wb>M3 h^aiLI*kܴy*}Sb I$f߁r\eVIԌl̈́<Pek5g-Evx&I7]:k6hlz2!ﴐSRe\FBfuiΔi<ʴ)~36~| 5@4"| Y"ʫR@] xV[c6e:N_Or!YAEJDŽ(dL9sQ¶C82f:wg_c}|b_+fiiT%K1 GJWp),ۼYx7+A XmOl< +B*jc)X KR( % u"'IENDB`youker-assistant/src/res/loading/17.png0000664000175000017500000001270713260315532016766 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp L,IDATxb?!Н}bF DXHeDg>+5xAq^/ x:aL8"FD!h|BMS" Bc$<{RĦ eHbRM@1b[{TlE4 k >K@)]KNje8$(I.d #6R%ՒX~4~7%E7Ձ&zlb% QHRCXyQJ_'0d/wH ]JZa2kdjP;*XOS! 1yd ٍ1˒갧@,Mn5@bZ#p"Mb/&~ȄG 9lք' 0mѤ4X =@H ER@ c‘訫@Oavɩx'R;@ %><;5!Lj4v@7r!~Abb@Mj\M|p-:Gp%xli+sӫb ~C(MUޯ  Қ9zfhgH] W|!*CH9lB4 -O~ 8B`)tG FG FG ;U$VĤ)shPDǘdQ!J`$!u{b?NJǁ9rZ9?>bb#*;0jw>B+}AJ :a釟$}l2ZJPUA" ~uE Π!(\;HA "~jec!%X Nb(RF-l`g%X7vI;YAK%˴8HƖ=X #cmBpiD鱘h(Gߩ|t{2C%39b(ti:HdՃʢ b-Tƃ냿*!l)ӥUޟ@D0vp_h @ 6wN\ݙzXs_!+£p1zYCyeTj:W>A&TJ"@,EvdM","/K"b`p yAĺJZBYnj0ʪvoXQnenCoiC/mC*v9e~,;D!I2f2 PUE3 :r!CDIY*qQFZ1Nb kQ/z0EVANYF$rȰb鼔V gYAȹiDMFLj74$)slj~WTgLҳ 79l~h6,EtO=@J>QIo-Ne7f#bb#̺ i+,KRki"E`@0* œ7ID: "^DADQzAE1E1S.NOOLl}З%P$K,!K d,)Q„v7&"74,h҉Oa&(Yv+v-#2iuj%Ѩ`7ۈw(tZG1uQxǛltJ: Q ʄdCȌs$QqMMZ2886뉬,sP`j:3yo{Nqقy*Uu+է,iwOA=["kodf _Qu #.χ,ՠ9뻔;:}}Xb`zh2H`ϺzCA6 <)@#:KB! ޹XUqB}Ȣ2˲J,t ;=(RJ!CR!ՋK B()(42a8TZ/RQ83眽|Xa83gko}W? N,rb9X'ÉվDa2{z4X(ۂFRJdm+n'Vެe<4،5gE rNo 9YjptwɵYNȉph\-q& ]gyXc';즇X\Odm+ 5 +v>Hx7]Y [DU@b%g|&#/0C cuJY;~5s<"z QɬgڮO}j֫18B[O>3N(k!hݴ@0i!v?vöpnJ 82Tl>]VX7<'c8OeX`ͳCR # N-5^7vG x^d΢DIMBh,eeJA (eOGEXs%ڍY:FMz :!ޫ:إ6Yѭe bVXUᘇWz?5v[ U3? FџO +~rD=7 (24UM7E>5YqwX:muX%ٚۆ!Vb70'VX`^'V-5F,x݈ޣ.V]I>ŤAsX_ymqb.5#Xj)c&\ XcEų}q55JFw,pȅwZXݚSRJM\ֺI _Ī!&;Q|4:HuK;ǝXJO24)ŷ5ϚqM1kK"K+&Gt hE|X\,ݱrm[̾oTdJe"Tj':zVKVn E ]ߝƉ% xJX pb5YB\\[Vpe $։t?Zp#b {Z*Ķ8?~ %IDATxb?!Н}bF p39a3>Uo"kfG d='`>rsS0vj'5]+ȠH8O )xJARbdgπXt_x9y$@Cjg$(.$6x)#Ņ.%'5P2eUt}bJb0R*j@|0lDT< Yjhk>/@}@)a_KI @T5!& ^K=V/RŁ41R0 ~BFv#@\{ $v!x5i G'$BlLxÖP`M(}b> U WӴe:h?5JjG Q MR ZcVB r$Z`%sT,MROG>i0 PchCT@2ĘFp$:*UCz$trD+ ļ#PCɩANbj`XGѪQ ȉ>b^0.rP7s54%|p-:Gp&W W "@P!@lP~M(iCKkjHBPgx1BTu  )` >'MTh2[HlMz0E"t>Xӂޠ _\AbEL*2c1ɄB'!H@C61B 4y6:Ws_䠵4r|v:FTv#5zj}VT!DAt?qaId,%.T;E@ꀋ@AËCQعv :6Q[A XX~J,QAҧPZ ?lDl-`B"a C>W${fggggַ FdEd gEWx3V51]DtOIb~Qq`2i1lUHDTOݬ_\A *6_v{AV'GQ(;@ 9d!5gYݝeu"4E{i-dd@@'vi`Hł {v}b "ʆy9BYwP'CYnj*5A3Afܐuff1A!kU'd Pa '*b1 ihV=fEy3K-֙a"E$d5)TFj&fHVZueȐEiPL$DIِ t51vʔbQ2D'0ʡۼ ?KFRL[@lYoϳa8"D|%&)$=˅m!gYE#4=cQF$`%[ X%s_(ʤ7:-Wl5&mxB({! U*ER"Rbm䊶\mXWQJJ((ik6Q[,MÜ93gfSwҩꮡ7)RĬ~_c ԭ԰*vKRJ71 fq)OB piv 7`>!PKd9B:zG=hܱ5iDt}AډO NPCAIop؉Umb3i[ptc !XF"R=Ca"BBNj] \r{޶QXZXЂk"kD!_3shozʉU,j|8i]|/X=Q~h<}mH-DneqSݯm78+53wTgo ,r9Ú3 Z#MvjZ[VO}}vUl8ւX՟)TtqLs:X#*0^~`<%7qn+" U+8؀ #럏 ۋɊ vQY;lɍX7seg\r^4}]ƳI'럏8Es΅X:l uX%69#9Z^"SƎ:*IIdF㯱`<t_sT3SwHCť +VW{eYX;mlYd7/{%p>?ro`k+VT+2Zc5XuwT6KFnDs-EL}JdԎu&pZ,ossC%E"̛Ћ[E 믵\pbޏ4$4sER|_+o^dڰϗ4[%U+V,hrIVQd?(rNv@,ǡoT "F> ļ-jtVIHrj n z4$?"+~̱GN!zMY8hآFRdM,ʬH S@k5葅D!sĄg5'ݺtebf){-X=XBTe&BC:E%|~ *1]d$tuc$ YKs sKe}:KFg: \ 9R8iy EV_u>h y0fyꅡ_t.,V5 > mb nG$}-Dr^:P%{}]XDDcB7,p2VM oe**l:9[W,@4"q>۪`U;r8'Épb9N,G.Wy"IENDB`youker-assistant/src/res/loading/18.png0000664000175000017500000001275413260315532016771 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp hIDATxb?!Н}bF p39a3>U_P0M$#>˞0 E <805 c 02hF&A&|l i#3 "'6] /C"" ,5bob-Q]IlXRL+HKr]2 ˧4`a&AIZE@,@IL",UR-1fM-:2`&Na^DUme kɰvT8R`<bYJ&Onx+*B'DX H-E8D،$B$bB~2QB[>@5 mbPSz vwF]I (&-1+B!FTA9F_N9*[&E 'nPchCT@2ĘFp$:*SCz$trD+ ļ#PCɩANbj2 \b=JEm+ #'9?9ʹ9rcS+n d9EQ2@?ԈqT^5ɃM=iCKkjHBPgx1ԕHB  )` >'MTh2[H !(診(rG ĊT6=e. FcB GLOCLH@C61B 4y6:Ws_䠵4r|v:FTv#5zj}VT!DAt?qaId,%.T;(]Z@ꀋ@AËCQعv Pll"Wo ;) ^v7ٻwwΜh#"L GWA1񪱥zam3bLcumna[L,yDTx)&CNzoVu@ MDMڲug֠k1kW5j(J#+@DBe_!Ӭu"gI&ʦuk뒪s%3|ۧW JV:A8-(kV DDQ>pCVNʛJ>@&TȺ@lH3 3YRJQĘ5XyYx4 榔%\,]&,}VъZ7vih5iRemsZ7k (=/\&* T(RS29eȐE?Ҡ~H9!U!ALi +S?Eۢn8` ITasS&LS@ֲUY[N#m8n!ILRIJ4u_CJ ZG0I/ZZ6\kD>f,3h^ =P2)L},Oq*{E ƴ3W58ґX""/w-QQLEh dD +%+%ŕʷ.7 A$QЍQABMG43dSj#[TXAXV+H`!s_Z@Sd.6|hܔ$s6scchY:t!{6z-B2`K5hF(=wr-ԶE[ a C/eXm`E_ş;hAks^5蓎wij4uUS: ZD5}y>F d,@Ax'q3@Ňd^$M.!{贂D ԘJ7թ|˚]j'瑥%riE,i͚ÙՏrY3_-/mU&`sX˰IdeEbe]kVF"~z\j|M!40gyJB&Q`!f%KybՂ!IV I7hFfz^:G3 Ae~[lM+d ]f'}6J I!H `},5A;xCCЬ f=,C5A:&޽_K`)) vCA~솙Ҩ<NMpپ4 6SiLs-& Qn ڴ=oSϧ`upzi%_pd58ulWq a3 /\ INzrJ :ЉU)Pt >ǢUSڍ\@ĩ/ VBe1KFSҩꮣZaK})Bo[RC4*Zt};fa7&|AD'Ї9H;3jmA|KhԢ;'m"Qi]C6bI{HRYy "ru2a9m{}Ws!?:YB7<W(RcX5;t^a[-qi"`%5k#éDOlV+$r(hB8M.TZ֓ IE7"Ȑ.> RCQaTXdeCe1a8ZZ/NZO:9>gsZ? N,rb9X'ÉվDa I=B_^</[tb NmWiW|!xȭJ*n VM$g|&#-0Ck"g4 m{W<ߪV޼6 <Lۑy߼ܤj &mQN{ǸαP {nZXu]eI~ z+b"!D]S v: R ˪R} X$O8TcjƎ1i(֝XCxYQ1cƎ1ܬ1%{j;mԳ٤וZWWbY u-XHFY׹ȇb]e`6%V j`Gc.%m[I{2lϓXR,ް2Q-M"Wq8o-J,}NGN2QeڡX.w4lֹ,:bgMAd+_ZˉuGRB[}ڪ/:Z+{`Hm|EX,>,Qjule|~0HEVWdEVuWAL^eBfO;KmPl5U(VupvVد9lK#B tĽ><åZewY W~qd 5m.jvŢVgK&#[kNOܑEZLתZȯ]s\؊u>pCjeGbcBlkBJ?lŇ Haĺ\|k/u!g, io >jnυC@x'Veuf5 ̉vE,H0EgykMnޣ ~ƭ-ҹ[VN-& B^-gE5'~ƪ 3,VԊvYR5bE.3}ŪՊQsԺf᫜X mI{ςzV+o HFN%'VH" xw+oJhI[/bƉEGQ"B,@B41/bKz8Y#BHrf n z4$?"+~tY#b {2=f,cDYXl} &eVPYăB6;>VBC9bst`)Iقt "~X&%7gqۋt8STRxrՓ^^2kKoS4?c-f7H,@+8t?>7ʲ:KF^d: t 7-d!dy eVBc 5sn4 j7IDATxb?>~137135\LA u ;?9D̈$.{N ,| 84|: HU.` wB l"Խ144(Ci4 i[z09J?SC@ dpH=V@{Uxy,tax2+P%ŀ\b=J)j;^9 ! MjB&cpTy>\rBOB[+sӫb ~C(M WM({&*BPgx1BԿ  )` >'MTh2 F8B`)tG FG FG ;U$VĤ)s7:L8*dzbZ D4nOlss!@3Iiap5AZK#g71]s@lDe1Rc(Z]J*c %QO\X҄Pu@wA J^Ҏε4 AB XI,-_(6b>XB|& X[ uJݗyy6YY:e [WlmP$ǵy<۝4S9hn^H)+Du 44ח52lt 17lV#gQhyhCa/͢XsmTvU2Q4`;!CwXWУ{F'ұ{L){BVDF9Y-Cj^M&CIȱ\fZdI)E)cBbTeɚFt!& ȗ 9qfcAbFNtLF'+YvC/-C:FrNņ N=V\#Tj0ׄl vJBO)D̵$!C}Hu-+G6岀F(>)8:&nZO Enr[lg$)gr:R+g}bzITDx ILRI4ؑ~ RWō@ULbIz2piD{=qma|@ gߨx%N} ^֘9ѝs@:6+ +-{Қ5E/}VE*ժ( ŕP+uJWuVeA " )Eb  Üe2I&lf޹s_a@V + ȃU X% vE"h&Ui".=cJЈckOO}LZp48h$ y.:?hEEiVeD86*Aq|vm}oQ*P hA'~%kDuLP[~N*L2D PY%stV㒨,k8gd]u^b&Y7M2'^3/=d(] T`D9YZL~= OD㍨7J l*9FfE[+*5Dl`%pk#P@V + *hB8&S,(LDIȊAR2@>! LR,,|+5c/^ҙs>?lw޽k'Épb9N,t 7?C6ƧW4h9fEg(5ł! WXKEk S|~YGM/bn!5 *e`-MD؜WD~('~J* ZvJbsfLќ- [=}GN`NӜEmG4?Y-cMyN'Jy@N}x}mP7WE# eĺ^' nڹ:[M%A5cul}aAIrdc3 [IGcʃ9\kyY[aT[aƒy.JbQ%ʑ-kNG0+wdbIpN>kW9.lźC=R2#paЧRV\HKƇmxi)XumՐ.‘^D\Edc'hnυC ĺHsZ" #;9׎E rbՒX4χ,e4{^'[[4"O:ǿ:d !֧zǿMn\P.ǻUK K,^Ԋmv(-ҮXN {XZz4HJm-X [kɉU bK蹭VE\r3*YI~Hj叵CVꋬxZsURb5yeߵYbD9Ɏɓk!ۊqbrAQ!b PM̛ؒNfAAaBffkd@(+hH~Dk'Va!B1ԈX8hآVRM,,rB6;Z zd!!1aG\<")z<\BLe&F!+>`WqS&tͺ/X1 ,Ks  ^tlBȋ,yBǸq`y eVˇ_u>H]Hiz&v1b6hnDZb }ڂ$4iq^8:ۘLuaItl_8b8U)!{찞R2Gff;c0McW;~mp`Dk@ne@}ۦvt&b#:%q;>V,c+K`.߉.xB$?%U'EI{H?730<8jщ*\UK1CV ::%:1{VډX'Ép8N,pb9 ?&|NIENDB`youker-assistant/src/res/loading/8.png0000664000175000017500000001270013260315532016677 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp q> IDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:aL8"FD!h|B-i$ Ơg.@I !Ylkq53Jti@Bd钓(uz2 J*>%1첳TI$_ ߍ<#՛@|=6QIX(`4$e=\a+AwH ]JZa2kdjP;*XOS)0,'D.Yq .=birۋ<4vYl[^!6@&1i&]֠ZYԨ+8_+ [͐֨ҡ%v}$seȀjLb o9{Ҽ@qj9B@ꀋ@AËCQعv :A"+ kEUvK (hg!OeV"X bI XYXK'~@3$x޾ݙ  YYDUP |&4A'찍|DL+l mW=Ǣc${D1܏ .Lƣ oVB &:x:c{Ks0(J =F D`PːΚ^r,E{k% /4rcda}"AN3 2d%AD- SsdN&C Y~STj>@fufdI)E1q!k57d F9(Xˋ밊ȘfMkͲ󛨚YfFFiRe9u:~ =y@t9H7$d;MpܯL(zY@\.A2dя4(}ܠDIِ&QQEn1nʔb [4G|1QT{F Hjcmʸ%ʋf"i,@GhR$mQ;Q 4i5)ɓX՚+ Q -|m/ Z5}"Rqup-%s_(ʤ7 .e D\#D mDo2R_~`j^ A-ʒ "]' . )Z Ze2 j#?DQ*hDT}q>;w^ρYΛ{gΜ9s~gdf X%`X ([4t㔡pNZעv J;@}>Pcwh9:ladY>̬Efq8,Tyd8GKJ =sXۮmN3P4sŵS¬hB<>tu 1k̋ W*k4ƃ[ۈ: ZYj&H|2; Y0sawD'o`[x^S{hR;hMwmTmfuN|fU)8E^ l[/ LGQ5[ibTl 2vү0 wJ̖,b$϶lJns-ZsP\Ww>=yx~ژ!M1ĭ,ļAv:_bW`.,(_ wM4 Hw! y~p~nk(ux'[2C!+](@r1ѬD^+`5W,5ixXQ|/`)QKh8Gd54H#sXNM6r*,dTu%͂ϱf( L4 tC\ĥ-pyz> .^NK V+ϢT @T)wᴩe 'JYϪ:2`B3#6AEz/d4+q[μ@TA[NR L:W`Ayz,Zi :Hտ/ =EW& ` 4{aa,!?JW Q6w@MRӦ>,T@!C +lqHE[`@$+D+62k璿 _ ȏ柡*&,Ϗ <`CYb5Q Ӹ5SqW,K,_-Ī* 5T͊ 2pfL"+"%>$Eh/B=t{fM%t"TJ=TE"jr&˩ʆi}o39{u;}p朽_gCKR(X %BPb5/{Bbs*b EX!XF( MN+mbq)׉uwc`oI @iI,qbf 'ru5tPRbiF|K<ȎDnp#_$|uMPb7e-+>gņGR|4],"$Jt)< 8};#K0ڞH%Ws{U=pZb]Q[zsyk$YoF 2-`~QAwSrSZeJE7ӔM#Vz[b!^n'Xpȿ[y4!4iSfi0Gk,/ rۏh)jm5m6Qj(N,ԃW᩻ UE}8C~6Ef qj[9|(7 F w F>.B]+Cڝ4( k?\V׹CX˹0?jBZTX)!N,R6UQ3LآGAdke%|ڡXc~}1 f$N5n d}t{,Ă]%>9}> z*|D.Vɯ;S Tg)IE2-i\5]J;^P}0$b]Mb6HT7@ >+P!O53Nߋ^62+N_ [+\'֓qo#:_Sav8SaR,~05:b!Ox&Xf$3w=bX`ݯOzR+a;Ty:qFٟ ٷ3ņ99#VcuHT "Έu{ 41M?Zq'vB,dyX$mi!h`;0%VX8;JXχ׍,ykd.w_:W?YN+ppB5Vk,dN ??T䰔}QR5:bW\w舕ԈUaBRjkbekdx+ b ̛bЋ|QbA p(ףH@akhH<_7)uDKU)1brc^R2`؄:}_d >$Ԏы yr  4J|YP( bGB!0CbqC8.2sI.,aA eE>~'J1_l@"P؂ǃSB=  &Ҭ@ef =d!C~(B“ 7] v-AW |.$Q6"|n;!= !G4:1&.)k$ǑGz>h] C#"u.#.ֵu<R2bMeZST+b}%ڄIt+:}Lψ5$vbԹ”[:_\ҁLNeeڹ{2nƢU)1 Ѥ=IDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:#Q`#aL8 #fj`l"4>!lǦ)I1Y=b)r eHbRM@1b[{YTL쳔Bd钛)qz2 Jd}bJbeg)v%@[lb$,x0ҳ$0|^ԁ׉5 ًR¾B j`l Úx-Z<ԎJ9 T @,Kd ٍq9)K[ ؅b ~2QB[>@54 (L[4 Puq9l ǁBXJl|(l (&-1+B!FTA9FOB9*[&E '#q D{ɱcH*AbLQ8u)lN=:9uDRGS d:z8W@,FN"qI)%+nѡ8+4H17"@P!"7ҫ&_}Қ9zf^2UAB 4X*DIeL$iyRCH;lp@>ȟ=?zنRvR2P"jrN. FcB GLOCL+HS`X?NJ9rZ9?>bb#*;=dju>B+}AJ :a釟$}l2}%.T;E@ꀋ@AËCQعP(|&Rhb;,,aXZ% ++IbV(RL6cAlG~B{g{ީ{{;{{s,Fqq rzeNjƖ<s#o=-Ar׈Zb#7!.iD q bäӭðKƊ0PDTݔ[ؼZW YEjW%ɚ 5 i9|;r61QԾIBK!3ЎwJ"QH{wΞi_!+ BQ9xbzQP!KWW3 PlR#2S?%( Y #/K1jA> ^la13rej7krfeȋYppS6t3Yӈe]ﱛEvKu!]sy ЃD3Avː!>AO9 bqyS*UCL%}p<"+k4{ ;RbPmT3Q7e٬ȣI'2q@!]Hfu:37Dt-"֘;#=[Hq-BQnC|'Dkj翭{ġL:FO<+}Ƭ=&m HB R } մFJE jTrPI IOI_GA1" G E1]yvI֝Iey[][]U/CY,˃ŃUy$ɢ(, +u/~5+@#e9갑쇨]\,l[d"1jьPGsQۮm(Uz-CRcV`AA[ sN~ Κ\h<+&6u@2j&(|n1HY0yEw㣄DB+>$[;xGIUv пHv+HVnht (ԽЬN/o'֬Xe2XYꛢ%% fi δ~TޚU?Ok V3.5[Ibs+1[">H_L,]^϶ju@s_ߦwp0 ]Z66cc -Xyt`)߯*V-XGJL?k[/ IY@Y#vf5&;A&&nYϦ6eg#xi-wKMސ5& `-d~@A(_́.CFyZ.O\XҸLKB\khָ5ؕHofnɵI:n.W? 6 qLs#tD܇(7āxOlyņĉ< r`upźQq{}ɗ :TJ솣%,{8e243f7"YHmU$/qb#%U(Ik$(f LOwh- WpXtJQ_(ta:!aKlsF}ҩvЧR$]6c ԰"Io6*~ M*Ywo'ݧ u &2Yx0b@fv"/=TiS zg)Ɵ`ɢ*R8[hT_PF,iw[-dE* pPU7r^$Rr>t:^ߕ lOw:{ƛ`|Diaob7w1`"c\7HtfyIlԛ 5Zm5X6PPDD }тGQP=P!Dآj+CjVmh6Mk1|K &Ξt{wog9sΆ J,KPb)X"㤂'Z(&!Sd(>0FCR$~1^E'V ~ĸ?$xC#I %H3J"%) IBY U %?{2Ef %?@-RP6qa 0 o!ћw9MPbr5>8],&v4'ȇ@#$[ƿaE$b"xW8󨌸QwnOca}^%9+o3d`Pz#p=='{طza1UTd]>CL/ h@Az 762@>rEu(&Bt#1Q ~NuCkb/\#Z+nД覬);W"SaBB*$9%D=3(;3!ޭE"R+!)v]!O"e}V oLh8!Ԕ/>g_f|` ˵Bn4aDnud}5'#p9Gv^ʗP}}PL?Tb8 ED4~4#ho!QkQ87hΠi*-b8q.ɅKUgc)uuK FIA0*{w8Nڲt%u ![Q{)^(&^n#6Roi*hSQg~)&/fҧD-U:*`6umgM6[D^gy 8+Q{Yy/86Sn 3)8>dh/ee AaϫM)2=N_DE\AGALRÉſJYHΥeH,[`CwdhF(CrL33Tb@%bR\meYm얈GIZ|zF>i!lyaST`2(1|15i} X稣z| :;dB@6}~Z a79]Y&8k=hu]̾4%>N˳ [տ\iڝ2r @RD] 9aimf( AH v'rin!$PyD,X %BR(J,B'%sIENDB`youker-assistant/src/res/loading/16.png0000664000175000017500000001272713260315532016767 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp q3IDATxb?!Н}0_ f˘1aMH 6Ax(A bg@|.CHgð4 G$`ȠH8O )xJARbdgπXt/@ ILI !YlkqtZLذԎ"L@p 0IPV](IdJ%hnJ toMKD% `&Na^DUmOkdjP;*XOS),'dd7b 尧@,Mn5@bZ#p"Mb/&~(r* O@GaڢI5h{x?5JjG ׊– XhZ"bDUdc$*+qBei2]zBv??u/ 9v؆" e1F p4?O/G]x [rɀ :#HyRGR@3BNbj9-|Q(j;^9GL׋@&r&cpTy>\rBOB[+sӫb ~C(M WM({&55s$! 3!ue_\hT&*4HLO⏃- Bw`tT`t _\AbEL*2c1ɄB'!H@C6AK8J뤴i 㳛.9 6CVW#ҧJ$ ~ K&c4/uPuA,2'P\ J^ҎՃ4+H"J 8IQ'{'GEp(AApvrsEQޑ+׼}[^I^\odYL S[W"osG2{Ā>Kɹ鹘贓1TY41qi]}]|=(yZ ?( JYC:k1 Qq5f}un!ƛn{u/D:2ٻ;SKq 2dE@DC&TM͑ʺ 7dtjw(MAH3eDmuDkBb~˒5FLȧ yqf60#Y.LjF6WZ2522 ' D?PkDA: 撐4sUQ(Cdk\@{2dч4`F^9!6FqPEn1nʔb[Ԏ:%lb#rl :R'dzNTQDx!ILRITLWEJ ZB1IZz6|+[,;yD|̶xzd7WYkLۜȚAڊ=˒e| ޵F21''EB4* (ADIIIѓxHN:.4?A$ *j@AD]]xP.czg?K$oet H| ,(DxY#UY0l縵UQ!e8Vm:KM1WeeX]̘I%+4V2XQˤ%zkǀ(uTښd2!`G-YiKt zR/YB |ad![yɜp Y>?K,YQ`na3bV ~}C-Cbll(2*Bi4+ůtΏ8L3>?lEs^_{-? N,rb9Xt!ep\mmL:;' kMɐ ZK S߇X㦑RYoykE; N;ޏvP7~) ȡA9)"5h;7.D"$f)+FyֺXiZZߘDvwBUϲ"O;1ht+2vV))5) n?*zgsHD"ΘPHlAdK k6B W|g+}^aU+o1lmT֞)E҄߷$k}*k)XXH=>N2 yYۘr\~KGL""tytApՀPcML'o32b޽" }2V'ʴC9a .͔У999Z^bn)V|musrh,飐h'eF?A=o9tȋXOXI^Ij!-AIXH+:щU0Zϕ)b$O;>2bR>jB3FcV bK31<vH)U+\iNr}n*pve;*թGy`.jvǢVK&#_ӜaV{ZeA|תO_8ڎu~pgjeF`()Os{5YqYb5~l{6hĺM]>WC:!|HOOMVM ͡ӆQމUYb]m:D3HLsb;5.0vԉUKb<& ^7#9eڢ1 9ǿ>dS=-nk℞2V-e,d^i!v,~C"_ܵ"G͒ %ra}V;V攔Rc!k-÷:jA,.¼m ? HuK;ND8({Zc&z#:"_E\nTX m[̾+c2As*s;z~.+7bQ}B_qbQ"OB, Ĝ)ˉ~?fX/OBaB&k䘻PVpd__;l })\؜c-Z,d{#EA YpD( ZzB s5)],"SEg a w:=fM,pC:E%}~K 1)WqS&oS Ϋx9Eb]1w} ~| RYvda1K1|PɇU >*G>1=1YcnBտ6'M3{,9JP/ eV"c;h̎k h.R('9[6QڤfW4Ff-PjBwl@F6&SƠ_cr7%Φ©ǨJy cǴJ92 4[}Pf/_*.wh~pV0Ik@n_}ۡvުt&b#:eq;}k|$@0R w ^yꫤ:$ksc iTE:e2] م7KYg5Du!K YR͋јߊ=zUv"Épb9N,r8X(yt H4dIENDB`youker-assistant/src/res/loading/6.png0000664000175000017500000001303613260315532016700 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp PDCIDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:aL8"FD!h|BMS" Bc$<{RĦ 4!I7I8$m fyFR2MbR;P\2]rR.Y/\&AIZEw $&]v* ))н7c[,$`Fzϋ:P:9y#$[I @T5lж[aM@ {@^jGi*c a2@FLAׁɭHB 1i G'$BlLxÖP`M(} TH;T vwF]IZQQ MR ZcVB mG=!9*[&E 'nY >Hl(ZKxnРtؠlV:֎ ?j : w1/CPrcPXZ!LXGQA0 ȉ>b^0.rP7s5sRP}Z_^u/Bi*NjB5ܧ -# gf@+PՁ/ >'MTh2^T!o0M* +bRdKt M&2=A1F"}O R'99JH&i 㳛.9 6CVW#ҧJ$ ~ K&c4/Z>sjȸQIE6hSy s, AtDD 6bPN EAA 6Zb!"lVvi(q@w{ٻkۻw3;3gmFi( Y6F@.^YS5cK-/ImDsnc11S="ۏ nAjM<Q$wn"Mwǖ0ohxn>Ԃ ~@$T&2Ckβ{!ډL2Hk!K1{ȍ#5t8ٳ;S˽g$dȊ(< #+uw nRSQB5%~$˒E,HAuac^(0#YLBYN릊,NdDfh7 iqZmozy@tl\&* UC4󈛐kH/C,ŴBJȆ\GNis;Ÿ +S/?Hˢ~8`\M$r`sQ$)&9 sYѫUyyjF\ ,$iI3IYS72"Vtf6Lҫ'\Dٲ^6 |'"ar<~$c/!$ÅxBe kT 6e % ._5 FF (JH@P#""JPHQAo;+1Yh%,GM Q陋,0(`zV^dAe@VeIjnYџyS 2lȓ%4Iy,5W!K"bda'K {/xⱗDߓ$Zh} Gm5LFy/pjËm Yȴ޵djA8"dH7ĆxS6um2t]ZųHjkK>a.LC\"Qp|n[qLZ53f$6ҫjH&fmU$kd+ާLK ,TbuA6mah%v# [*(Qh2B"E [ٹ}L؛NH' Q_H|h5`HF$ &(4`-Bi/ ޽w%mJݙ̙s|,`2X#e0b/{٢J{h_4čt1n4@P'j%j svGnWFf$r4C$R@8|HH5K]@'c(?Ђ_T >%ƉĄ2qYKH { >9_3b h5>ܮzI4v ʇD#5wfq)̭B(a @r“<8qܙo+߹VWyyUkm(XԎ2`Vz}j+18 g} JOIkhAda6Em5yxB,$7#YKƣSW ^.IR}6.؏l<F+j:cT:, axSw{;ga ?"z gހ\7үg_BgᤄF+gO.8eG :|]k9 QN SJ+_»?;Ķ fQ<01XUlQ֫WVĂntM`'CFqE:v@H1OsVXk>Sk K8Gm3§wz4HYg9w 2]I.Z]H'vQY(>^ߖ:q檀Ӻ'> ,iG*\( 3Nv2)Vhz*\'IEjcaVX ;y R?ySwQ UUߐ3 bs:AܑkUH.מ)W9vbjđq0{˹* +.$%Va;m-"Έu _;mފvbcxO8s vB,:Fl*dNN`FlǵX H;l X9χ%a${_g,p?_9sXF`q_?vnPsEXubvrnw%%U }XAXSHJtMZL .¼#^\B,H]a#~ H"цxW-oVKjQ[/`vDeEFZIU&աZAV,g?ԎыRyrS ֙iu  2F|bP?41%=X1/j_ #%9ij7 hpb__GhBCFlX-Zxl Y eV nށ J4! tЕɃT%?|}uzRUqM,R*)j px|/w$tI}$tW8;h\oLmoQY4r%O1Ġcl!29qr̝Mȳ|$#q#k6Q'-4sCտXX6fM#Ù|P|(K 9[DaӤn9FHO5OJB;fmo2̾f_w<>@ʨ XY' 2vRD~.$ӭ O]h&RpX9{Q%OTɊ&\̭z{S*M{dXˈn}ijFl̯HҎnPOĪ6Tf0bUoyv%⇢`2X#e0$?!3IǣIENDB`youker-assistant/src/res/loading/3.png0000664000175000017500000001273213260315532016677 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp VIDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:0;X !hpa0Aგ~E Bc$<{RĦ eHbRM@1b[{YTLذԎ"L@Ut}bJbegj,n4~7%E7Ձ&z-1 ,xjkFR%&>/@}@)a_KI @T5lж[aM@ {@^jGi*c a2@FLAׁɭHB@[kAOdIlyo?(!-P|-tYkg ;SfTbhy*ɚBԂJo#5Ĉ>AI< J\i T?vM@|;F!4#QW'Z4#S'ZN vHJN}x w2+P+\Q(j;^9GL׋@&r&cpTy>\rBOBW W "@P!@lP~M(iCKkjHBPgx1BTu  )` >'MTh2[H !(診(rG ĊT6=e. FcB5Mz( RV$@O*iAWkFnbX؈bFZ]J*=d(NX'.,IҼ@qjȸ@p3(5stxqH; ;W0/(.RXq,SܤN(ҽ΢8?X\T''N(jw2X%y{I|K%y_ݻwӣ/[(mAA,_ir)R>1-]wѣ{.: <a#r:aDdPa+Ǜ`V>ErN4!a@dJͧ~YvgPP^ː3^r:9~}^l]2 BsA7@t9&RDt9_!̌aB~jPT!K6Rt=c̦، YWmq%( YӈU9%k1X8^BB,U& Yvqӿ,vdG0X0Hː( v ̼k([f#4uYQM6E37V]2DȢiPNYUd#N^ʬoX+Tb ORX6&' eDH.TQIz -Ȧc4 @&VvǍL zH:YI3Ad%w\ZL "LOwLϤ z̜TTWթ0hV+ ` `,xSh(.R9eRӋ_Venc>hı>WG1!n*8^fmes+BKi^:X3NarA{ kە-q aV~j0+:}>Y (uz 18k̋SY<ۯIM,u@2j&(|F' l5 |S xGѩ0Њ;qR E,C,==X ?0JklLSYZ_l.^Y+zdn & u24kN[?hj%Y+I=` qҏ0 7JLV,b$OR6 gs-as\}H^Wn x|X>-k b ;0XpwUK}Z 7m4 H# z^Hc6:K y~p]YR*=γVQJVCpoOKO ^}Ր#sXɂtKOz(V(Ґ,0"=j#A4k1o.BM=]g,msDi, q C-u}X90X yzi?{Iŗ ܅:?.]SWe5;J0&HuU=dv(d^$l[PB.V|ԝyz.)6k[;re֍4QW@ mO*fł|2 0(%7IVv$/8btI< EVSFɮ~ߘ1vVְ2QxFGzx xSYN%I7D:ѺP, PSHjܕ&NgxD&zM܁S[ԘRh!c/S8+٨NsE={l;Te03P?/~yHaw9z}r!?8C4ٳ/)Q~aOƺiءa*v=VPT 6`)k k#G$zbX VO.D"VzSEiхHJEDb$^D}Hv#tE_adh$f}hTJRAeaDض֍ln[~͙sû,c'Épb9N,j_{D J\B_Q"B" Y[ 4ѳ_Hn&J\*U,\j0ۚUg,.'[},<'Xc JU'5^ouOc~1%{J;mc-܀s΍[UbY8 wYueSo?!+un |̏g zTڔX9(wve'V 1T&@_[MHجV^">TNrbLuU&piB;7S6 a[qӃ99Z9Kz+|܂.k\w8 Ug^֞&k:4Xoe6dQ"̋,"D{e *JUz,)*YDډY VS~pHq,>o ̳r%9#g Y#MҊ0/.VخV_VُEXTƫtr444W,U\J)+G[nnMTLb_ .VУꬸP//;GeNE$>: Gzcs&VΊ5(r9A4Nˉ՗jv"׸`JA'V%5R|,x][[YssLp>'Wub}ϛ|+QLw%2C B3V%Xd^`AX+_I_<_azIUnwUkIͱfX a޴jXH]I'V~4H" FX#emdeZ+}RsQR5b`D[eߗKb"As*s;zVS&,~:6 g@fm@4S!B41%=XC'674@,@*+hחNv l},xE7"OHU bӪ5ԝ tUO,C>«JkjQYtzOa!7¸AWT(ۛ2zX:E%|~ !W-F"q?afmamOYS$ ZKspH'~;Gi1K1bPJyՂ1=1ZcnBտU+UypfA-E>Pտx.,{l{9i?4n/R(ۣs9[2F֤nW4F:5HKJ5OXpL85 .9:5'5&WZ},=pqRCPcrsdjiڧ35& Uw\ЛKh7 K}9mQ_;w`gY:bZ@΃Y[j*Sf! 1BH#@H6[oIى@wA9pƢ'GWZ˴̐6|*N. H3g|_VډX'Ép8N,pb9nOȬ҄KIENDB`youker-assistant/src/res/loading/small/0000775000175000017500000000000013260315532017132 5ustar fengfengyouker-assistant/src/res/loading/small/11.png0000664000175000017500000004135313260315532020067 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:8058C76434FA11E08E5FD557B0E86510 xmp.iid:82139b93-032d-8f40-b45f-e5f09361f036 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:82139b93-032d-8f40-b45f-e5f09361f036 2011-02-13T14:05:52+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:31+08:00 2011-02-13T14:05:52+08:00 2011-02-13T14:05:52+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 ^ cHRMz%u0`:o_FIDATxE?P ZZPDAs 0țhFif9CCm&p,tʩKa)Ҙ( "BDx%^/睻=ss~gv=}ggD@0( *D}Аqp"08Zj*]N 3z`5'DX`60 ok:] | 8ǀ'fUK{O[FfS;ww XWy Z``i" 4T4E} IJjXߟ$FI/ %}FҠrˣ?6BIVn4I%͓GjIjOKn<(fIGTHA҅Xޔ]IkIka+%M̉ I7X%VL* r*4A*OTWm̕UbqU"(5@ $5U J괂/.eS&iIN"+!IWTtmVKj+ <+~JzxRV3y6q྄ip޹[gy e!ӼkJR(Iw, (~x৶.-? fTr? n+ȸD ˵k[%wAM,2Z#:?.Oy3N.^ <|MnyjwFyr06S67p uwȳf.hf*=,p0X!~>X˲f >#7<hOޝ>%f/ L=e0C/7#? gB#4LSMځߧ(ZO`ESo?剋q`"jR/#/GȺ m^E _8]pgiF@+ε2Z>\Z-Xn44ۼ3sAq~3Ft1G4 Wp|όFާ5dۯ9/L"AK*CzӽVuOI:_-C%zv}ZK&&Հ]ǀ}ԛ͖Kc>[?ZδKC-ӀxK;n食 蟀% ~oiQg@qVU x4X,t`oV mykiQͧR#L¨&KLO 2- Z)-Ϛ :& E˟JK`!wjkluYLjAЊۇKM@tcVm,mo"[JǬq{`a7.t͗ mr^똵X ܎XoC\\8p64cUE#*\į~Jωjs<]+:u]vν8qK>m8F 18 wg@[2kZCl wDJ<YŬXoB> +x?|tؔ7W"-b ùMdZÅIn4 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:727CE85134FA11E098ADEFECB843FB09 xmp.iid:cafe6ec2-88c4-8647-9eb5-db3dc3624abf xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:cafe6ec2-88c4-8647-9eb5-db3dc3624abf 2011-02-13T14:05:57+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:08+08:00 2011-02-13T14:05:57+08:00 2011-02-13T14:05:57+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 JA cHRMz%u0`:o_FIDATxUU?BՈ h+B3GPk3ih34Ft1$ʬxL*H Qt!<3D}c3>{ι̞}g={^k" 0ȋ x<<:z'`H;L`0[Z=n_s&`-7ْ3C`0*0XeO@?F.,n3xkep(4ZFLLfB c#i \P/kA/%?À6.,zlIi'%BRB %GqIҖG6RrIH[ :IZ(k%u4";%IKf;,7I?VIn"I/H: 萴eITe5pz#`!IX'J^ԁ%ihp#e)i6*zY iD Xjt] >\NÞQIy%`qH˹A {,I ))Kx!-[@k ֫` 7m8ڦ'1wڽ~v0 '; Wl,C6[YJD[`6 }K5ĝ̆&"SPRkD&8-!-) 5[OKRܑOx0mŦ'ԟ~uOgE"s7yPCjY[s05;4WLӌjJ H`%{/{NJ5J~<¦/Wwq< x[:-x2K# <0|]PC5ku mj+ RCZ5? `a7),^hO+3Z6TX'EV_TDLt]KX(SP n^?ODЙ ^em8U^OZG/Hx^< x򲍬 7ΊK[zoib)bq~UsC/ɀVOkjuOʖfe%|JkK2҆o?T`qE7V1#8-oK@>/ӊtض$Ѷ:BښĢQcMAV{VVKVeZF'{V E򫚀geZNzk\1tWӭ~2.-^N7&as\#*./6^0Ia)Q9c2`;50k.Ojhqy%TZdi^gr,6To*\Ư2-Dzv'*6`'݆NƤs3utQQWZ"Q ؁ 8*Wx98`>nޤ  z ^G]%E37kNIai[By6׊JnNMz?["F\\X)-wL% 4\< -zq=7OXnv+~5# w@?3}^fxUJcft,jXQˉ ."cօChig0p.;E(NXJ5 j|2"o|˒Hrk|:pv&$yk IX% 8,i%P^y:[H(4/ yi=䎞ʭR֣[%cqVkitU '{[wJnmS%s~iJĎWj}D}BiIFIK$hվc9Pw'53dm4"l5  CV_ČFOry02>|\ xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:822CF1FF34FA11E0A981D2B3E5140BDB xmp.iid:d9de7f8e-8524-624e-8852-b1970a34ad27 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:d9de7f8e-8524-624e-8852-b1970a34ad27 2011-02-13T14:05:51+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:34+08:00 2011-02-13T14:05:51+08:00 2011-02-13T14:05:51+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 J l cHRMz%u0`:o_FIDATxUU?xWhEhC!_3ih2NMV4V#1"K0s*iJV@hCDȞoי{={wfϾs={k$OA 5N@7whԿOUV)gY `:"?VX3p8Ѝ!GK mO˖2zH`4N`0=s'p/zH0p'.Z_HSgͶ,V~)CRi$k~!CRsoHY$ZY`I$JtUhH ig="VI\\*iU$_%~.oKTI}^ [!i\N_J$='Z&`MV$]SVzzIMFI%׈l/HQX*pV3l*:$uY] 5,tm OJazTR[^ i9׉4JVԐҚ k``ہy[jp6/3M[8btgmSeqO(%] 7?y+f<>&SpنSoR::5rX+ĝtK/]{^J/%JFtqCnf̃ځy\ `˹_(,ք<[mp8p$pV [tjl= V9Nܰxk[Գ6$ӌ*F4O ER5R~ ̴߳f|)SЩs&R0ָVB ԮGn((W_[)5td뽩AgX~k˫$pgWbZCapMZ1&x\8a535LwxhùVNN 2.eJX@qȜ'6OA5&)I x#K,TrwW=;ӻ $|By)o.PٲDOOrG^^Y%m`\67$DE{RF<0 " I zn;MƤDJcڕU% JGKeŀ0',o 2- C,ߕ-dZŝ# PdZFȯl|\iI8-I `*". I lm|][>35p}{/hnj X$YI 8Ycΰ BY;,]uZs0 Z)B\8p[ fbVJE3_y,.Ws"OG6`]{ֺs5utn>g\a7%`<ȹGNp{|CQ5ХtR{ GX |N_Y 2 5m8+J\X;(ߗcDJЄs |9%r hDžIn6[OBUly"2/6{ ?(1}^]6*=o^IUu+n.ijD̚L> vp.(AIR 54>LN [eIzR5s>''JjZ"o />^**I:) yq1nTI\G¿My{wPŸb^X 'x57YZ|VÕ \Ij+IW֘Kzʿ^5w~@%e1Y$-U$J8E.ךt0]z/vF]!f!:aِZr i~uW(!t yI4$reWXEIlτ!;Ip(k{);p(syT(sj'Fg?>F>`4.p oqzp'pŃVn.'y9[iv 3^a-./SVy;M50n-vӸgĝv_yl (D-|=Zw,፸} _ 5F@@ 4&?hd/3IENDB`youker-assistant/src/res/loading/small/13.png0000664000175000017500000004131713260315532020071 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:843A55E034FA11E0BB3CA5F316568B5B xmp.iid:503eb906-4828-444c-9cb3-d0ec288b3ab4 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:503eb906-4828-444c-9cb3-d0ec288b3ab4 2011-02-13T14:05:51+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:38+08:00 2011-02-13T14:05:51+08:00 2011-02-13T14:05:51+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 a cHRMz%u0`:o_FIDATx{UU?ڈj(E$ə4,,gh( d#r==A $&x}Ax+\3"\w9\}ٳΙ}>kooV$jA@@@ y'``ǩT`p<0hcPw;灧:`wV.c9l`pTov8p%E'Vv&KzPA9KIs%5TOtWԍVI4GH:Eґ}eJ[Ҙ4$5JZ yu址~!=ԛZ$}tL_| tmV$}C<P'iՒ&fD`I7[%7f"jU zڰVE/ɽkTֱp{e֛A8x -0$C&~gA4gu;G%pXIO۳<,[p0ԕv+آ(ڣjpЙ 8߬fO'6U%qmIQwx旿a?a9r>`3`yo 3)af`o)\U4Ul43 JG 1vtp%;^c۫9 Y$O[#,pVXh)o&w#ϸ|>;ltYF%Z` C=X#}J\2ΏXpS}x8<hJC{ pn ^| ^Q 3*3$0((̮X)3t_ NXL{S4j~g\nD%`.,ȹG%O8軬x[! }h X[y~ WiaY[GByVJnMEz*s)p;p.s8%v7 I %`.Mr8(Ch \L>RUl\/G .p>g4a~$ei9΄%iZd̚L%g?vqYf{$a)-f|&!L YeIzľs^ YȜ{R%a_ǻ$KOn$|pWzqsGϐӄ>$<ߜݧyI[Wٞy5^*y?`[I'TM8 <1JzIWL$=am/ma$oʯ,, ~%$=U 'PJzkMK2:^e9Pef)C)Hj6m(윴|HMLIyI}a-W/KmSz[xuyҲ +X<υQi>IVLtK^k\ CΨxޏaa08i6._8p.6psͥηi=Kez؆[u ƥKpM+6WOq)kYMa0ZL\qCjv_Y{,Ph-{la/n]5d~ @@ ?|+IENDB`youker-assistant/src/res/loading/small/4.png0000664000175000017500000004134413260315532020011 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:7013806734FA11E0949AE82CC7426943 xmp.iid:5a34c718-0262-fc4e-bf85-6fa60fc303d6 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:5a34c718-0262-fc4e-bf85-6fa60fc303d6 2011-02-13T14:05:58+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:04+08:00 2011-02-13T14:05:58+08:00 2011-02-13T14:05:58+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 l;ER cHRMz%u0`:o_FIDATxUU?B W#*B5Sl&Rrh#:5لc+G~YDJ( "<·?\{Ϲ{ι}wX{nD@vD@@ q0 F͖~/',X//ِ,`08EhůkU tb0 2k[@xҫ 1Lz <ZH%`"p=QO@/V[Z˚mY;ZKIN$="KIM)nouM'%J[i I%> ےgP Wb\< 47~_%ĝutj ̱-V;.h56L;󻠤lD&o<0.=5A6(nOsMhn~UE|[LinN moU"ro8}.tA=wR$ӌJ `% {J%r5r~<[+,컌7&E<8#>\Pe_wk5kMzO XeIzZ53N$  N85QO TRcY2/vIwxTaOn^$iS7 -l%mD+q.٭\:O5\ F^* xx?lv gwsmγ \@m_A TU b(WOucZhZem7p-7)σooI7*G$zF(]،i5EsVw[)\,{p^ Iu%^a6~9$֫%OQB9ҫ$}hFjʲ²c Alτ!;IWULtKJ]Yexj'~ce} oqz p/Ǚ2\NfkslYWvvf6PW[/t. xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:7BE68F8934FA11E08165BFD6DBC958B2 xmp.iid:cf78f078-5903-ca40-a0c2-9c4ad369457d xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:cf78f078-5903-ca40-a0c2-9c4ad369457d 2011-02-13T14:05:54+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:24+08:00 2011-02-13T14:05:54+08:00 2011-02-13T14:05:54+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 / cHRMz%u0`:o_FIDATxVU? [#1Lø#9%QZcY85cSMYMTC0j*iJ HMdlUdoe{{9sޙ{y<9MN"@@ h.:r8@;fipvO[ V)g3yl`pRůu Hy%מ6z#^oi=c 0x0 zȀ%` pP7k^ke! Ym8 :s)Zɒ+W%BR,IHS҇%Pkye#$t*}Hԡ iEvzDl4 VÒntr_IR.+k)x^ ['ibN_I$=#"0Mv ȩKIpP+V "(؇:RVI\K:j_^#ͦZCR着eV^IX~:[ÒJO˹A=Lxmͼtê8 {b <|>c[k& |ha~5֊m1e;5tZOhQ[gn&jט` A7WK ]d¨'V]4뽙A[~k$Pb*3O\s+b˯#/GȺ l^<0Fq&Gam8LЩ)8AeyYplc^ߝX@m,K *'z~ǽsK@'eygV L};{}CW!i{[,FDF^xm)i O78>M% i &B`[@uUuh$"*" oVj궼-4FZ/-Z~ji"; /G@48#4Ɩȯb|bi"il3tL'9?CvC x[9AІ{闚h X$YO 8Ycη c6wXy9cFceTrNQā dy>W̲*CRY'"~)A<'Ϙ Xaڒsݦ-,_9-:qvA;o/p&^s_ jϹZ"qQBzGxi['\y{c-JsmM >,N"k݇RT`Gߎ; |9I$;=+l^8J'bދ~o+&nx%[aoyolXqө GĬ8#@N3p?0J-e`A_5>NN [eIZ5s>'Iz RRs R/>^&*5( {ǒ< !ZH <ߜȹz~ڙEPˊ;z[s-eSF@UB1Ws #$IZǷp tgo_cS?HR;^EeZҜfY (C2mvIzI?S~Eһ%$g!"<+鳒Fָt^Y^l(5I0dǝ%=US$$i.I7؁C5G2kV8v2A?jt#R,sofw8낼y:."B\;J{Ą eK/B̅Wo#J޳%S\xʺW>oFyT.ْ?V<P[h-{qvgv ÿ44F@@  LoeIENDB`youker-assistant/src/res/loading/small/17.png0000664000175000017500000004131613260315532020074 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:8CF7DC1334FA11E09563BD69DB92E6B1 xmp.iid:4ee6aad0-c646-7247-8db2-68c59c02e649 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:4ee6aad0-c646-7247-8db2-68c59c02e649 2011-02-13T14:05:47+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:52+08:00 2011-02-13T14:05:47+08:00 2011-02-13T14:05:47+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 p! cHRMz%u0`:o_FIDATxVU?/†4 hIqHI&FjGMspr*!54f E XQAl5A繳g^w{{9s{s9yNAà @@ juN7Ӂ$`<0hcH]޼d!g)`60 8oV;t18p9pVѹ- x^oi=c 0x/0 <<`=d0P'+1kf Yl83)J%="I+S%.?FOJTiyTa#$H:l/}@ҽT i^X+iZu͒Nk+$Kt$cOIn{S=&V=&D0IZSqM0MVk.ϩ wy岄O^'6A&i xY|h2q;'Tߞ_Z6Z99pmE*[%0ӗPܞ~: LLe0$B4ZMK+OHK@Qy@.oOK@t~_i"D vxZ"t&FUmȂh("$b TCPMA0i x D Ƞ894N*_+7fa=eyAЄ{闚h X$YC8Y&c1` JZ+x9n`:\`GfTѾ.Pi[>Hk̪"OeHoUQYakc::7Q3rE%`'.2ȹGƭ?D$軭\ --J}h}#-Q2+h1P-"CdF;nU"`[F܀0?P;MtLK@P*cqiM.O'%UlyB%K*Rz@W PJc}t;JDQ.3:H6ĬfIM%IJ1k.20.аS<e KYe>?o@M;ϤSu!oYsyF2(E IuXx2UNa$|pWzIsGϐ Hy¿5ɻϔi]m{ԺKwZV '{5ZZ|=ʱw@97KZg'$IXǷ0it74< ~$=W '*RJzkMKsj/̲25 V}& I͇Ԑϔ[ntvE IgYJHG%W,-Ut$\p{IH=CҍPQ /9twb,pfb[ӛo83 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:7E48563734FA11E0BD9CF7A66AE3F1F2 xmp.iid:e5b15240-1c78-a64e-b273-6e21845183d0 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:e5b15240-1c78-a64e-b273-6e21845183d0 2011-02-13T14:05:53+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:28+08:00 2011-02-13T14:05:53+08:00 2011-02-13T14:05:53+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96  cHRMz%u0`:o_FIDATx{UU?˅b JL$@!"ru7ə4Lk45NqLHmʩR a $pCf~c5g}YΙskk[[U'0 *D}00$`0, *`7" X k%r6;hfg^Xm@@F.N)m 83Ӂ=ہ{[y < <>2;wKx;j-pp 3M[4}{mWy+_v0~\';Wxx]0,~#>Jw)k30ʷXc&A+nYdÙ?e# !O7x3aN^7[nJ ly>g i"`-s6 uȳ n!v[*fQY  k__+V,Cm)aa?h't)D} zr[^^5JS+Au{LGRb~Cy+:b4[Muu%r׽`UFB I7y3Xk ]\niyȈ0EQ53LW+fiX4Y'"~QxNךXjveh{mL9>EP=.|Y p\-Fg pM=PWo > WX]nj|,+b BE2+0Ҵ#p-"66R"VSWvS.pnw t,< )cqaL.OsBo [n%?,VIz@Mc)t< Ic:^{mU&c6_cѱwKc2(Yspf냸GN=(0윤7*a`A4>_"\Z7d%rY N8#Qj9^|T"U%u ?QJ/cy='9d/*;3څyQ5ĎjQz*W(rNRYKʄ?Y&+>{VVƔgЎW}D%*u]^kZ,E#x!d!:aِs ~ԍNSt/IQr[?yey² cT'igwT'+JI*.2<Zsp+]g?>A>=`.pl\q~,0Ѷ:ז|+A?]'ZgnKH\x8>9Sf^y̲;iܐ^.V#o#hֲGY^Y؃;Kx *_ 4@@ OfF/IENDB`youker-assistant/src/res/loading/small/18.png0000664000175000017500000004130413260315532020072 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:8FA2BAC334FA11E08E25A1F2EF485B25 xmp.iid:004b1764-517a-a847-961b-28d880f0cf85 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:004b1764-517a-a847-961b-28d880f0cf85 2011-02-13T14:05:39+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:57+08:00 2011-02-13T14:05:39+08:00 2011-02-13T14:05:39+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 z cHRMz%u0`:o_FIDATx{UU?˽ᦢ@ CțL938F1+B1G3K4kRqJW $ /X=w^>gs>̚uf{oV$ʇ^A@@@ T +oS1`l1;77WV.cI `*08we:1ppFε`# 1| Lx<g=f \\ xxZ)b=k gVRzH*u+1IrH$Jj(Ot%],WQʗ H>IwHZF>fKz#b H%mJIǖI𹩷K$m},vIOJzka$ΈsS_IX%YL*󞤋2*4J 7(%C*I*DQju4QxPRcpV%+JjER !in OHfzQRsV r.GDIoX^Js&<fczyb˟ =ZmM{܋s /%OYjɹvw.]_&[8Dzɖo$Ut0ޛ/=W.|C[fCO[.,y!-%%`Ha%%`ay@6 #]d? =2YU 4QX 8}<8nysi^hΤcAyap\-'"bdi^81G~Ay$7'%`MAq^gkI l9r,_"iAЌۃKLsO 8OpKn1f)+@tzpڔjy,帎Yp~RA{r:'\@9\CW*Ch"EHo0%)Q i՞6m܇l::P5.|q p\% pMO-D!tRGXۢz"K0f[G\yJn>KMzG)#a`V>7K@n=:wL&% (a0 &WBc2,a%+Bz@_WPHc}tM?o I;LSeѱ%4\RY3qpAQCN=40B-e`߿ pypnh%bX Nؒ'Hz XR} ^**HImF=UJ^\yY"iHx¿%ˑsOB.3*]yTB^l $>bb. [&1^ﲏoŝ$noo͘,ޒ*z(EΗךgT_b1Pwg4[oDb6 ~?{=u/V)JH:BzExGw% ,q9-^Y޳l(I0dǝ< "n{wˣGN7t1tISqu@wGԗ2r[Kez k.z lq;B …War޳x-. xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:86881F1334FA11E080F39EA505536399 xmp.iid:b1d94ff7-dbc7-e342-983e-8b6c4f7291a0 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:b1d94ff7-dbc7-e342-983e-8b6c4f7291a0 2011-02-13T14:05:50+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:41+08:00 2011-02-13T14:05:50+08:00 2011-02-13T14:05:50+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 d cHRMz%u0`:o_FIDATxVU?˲ˊn@ aqHIF!M6P'1!S%5SH+*Dd+`·?s3/}}=ߙ3煻{SY" ZJ!i$Pj%{WOIPm}Te$-m+IoQ?%VXAIz{#둀OJn'VIGصikݒ:$[E% t-&[-ih=vIz5l=a34XMVA$EI26Ya^ta-%k Hj5Jz ZQ~C WuVB$7Xa4[.+˟$ ;LaDI۬\Ij+ Qu(4GHiYG|l`pέeN6w:z,slpIE] ;ڌDIY 2cڼO|dp*p!pM 2PY\raJwSSk=0[df-ެ43 3/H <]嶄jjkQREF6[] %$˟JJ^`!wRkluib[~Zk,<^y%& 136f]1KKR7< 9^m)emZs6[(K,_l95=19 ;&(ÂVAsp-pU-[p5 6:ʳR -x6/S"j\䀹X* 8v\R" (Ѹ0M'Jy@Jo knrZ@,)q2 VI;_gѱ⦣$4\EĬ98ni㢃[t7mg 5f,IdZs^p©yxLeXzR`I2~X$ŕ^ǸS%ZBS)|O79r^vf@+*/Z=ыB֢[$a_P̕4RV{$]Zcʟ I}|kI{K~6bʳJZhǫHӽ8Q3G'e6-̩0bF߿b<ϐiZru>X(! %I_4r4Zzba1VQj4ǛwrTULt޻$]kU]Yex9XͲFpq)ُcO 4o|Ǚ2\.s-vvf7qaZql~܃ OyB@ qMe>k;xG䭰y$M=j^ ;qg okZ 6j@@@ *r/7IENDB`youker-assistant/src/res/loading/small/8.png0000664000175000017500000004132713260315532020016 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:79A7E1BF34FA11E098BEB7EE23B9FE92 xmp.iid:4a70695a-4ed4-924a-adc7-8f1d615947f8 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:4a70695a-4ed4-924a-adc7-8f1d615947f8 2011-02-13T14:05:54+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:20+08:00 2011-02-13T14:05:54+08:00 2011-02-13T14:05:54+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 ? cHRMz%u0`:o_FIDATxUU?xbz5Z @NC@g(fh_dN(Pk-+1u,iJ{|BDP~ ;sy{9{};gߙs9{k7H"zD@@ w't`"0 Z,52"Xk%r6;LH^6h4p8Љg96+- 3@3?c \\P+qk{xO_ Y3m8 .CRxII:"*?UҭNK^G%_6PI$)ixJ'+$MG>'iUEN SIs%m-IꁀwJz($͉ S?I߶"IJ: $%TipZ#`VFֈhHQX*V\a+ i6J:.?,tU >N \R'I/ZԐ|̈́7Ec) +s+ה ٫V{0aӧ#+&`~5/gWÝڭ'4K#Ro|~GCPO"[*hQY < 6~~TͲ?攅^ߓyi'R[^Z5JS͠=#{ݿ\j<˿F.dtuo2rU{LJ'$ʐV8gp`E+}yQ%|a͋vCIkdj#1ЂsNNĹ2.eOE&A}$&Ö?dXZewq;* T]e~}HXkS-o/P* 1=}q厮޸aG!Y{{-F#0ɰ0<{DKY dZ;<rYU}P: HE@"Bج8ayKiIlfIA%ahYx1 A%aDRA%7g%`Ç$n^9NrMZD/-8p~ vL Mi8O$pKIn1,`!tQiSz剜:f9~xSA9EʼnPisL*}W|T4Y"~)A2'kt=VqTk2ڳv}鸅q$!)pGA]b0g7@\ #(\a t)64oq[T Up% CL:ʳ\| Vr+~mҋxt쉀ہkqfrc4&7ѹc2+y@ZF$7\/^)6Uly[w_'=t< Mc}t;lUzߔ!vڤc~EJNd0f<n ;?Sp.L,n)Sp L_1㚀gpmf e-ٮ݅ w8ceQ{­]<_/iPSʓ%>;@J/\_pӺÌv.~aC-x7tOoEj9 %3=mFs\xʪW>obBj-v Ӹ1島Nh;G*G ш[k-{> pg okZ 6j@@@ g.OʦIENDB`youker-assistant/src/res/loading/small/2.png0000664000175000017500000004131513260315532020005 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:6AC16C9534FA11E0B331D375150F7AE9 xmp.iid:feac475f-bd2e-2b4f-a4b0-36863c07a1a8 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:feac475f-bd2e-2b4f-a4b0-36863c07a1a8 2011-02-13T14:06+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:44:55+08:00 2011-02-13T14:06+08:00 2011-02-13T14:06+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 q. cHRMz%u0`:o_FIDATxU?. l/0@$g(,gh6S8fh5dC0k*qLQ\-+H A2Hd+8;{r=ߙ3睹}s9}sITA@@@  jo&1(RKw;/UV!c3tыV by"Ԝ6kgNe࿖v2zH`4a`0=s;pp~KDjO@Z_O=ֳfpa }7S*IN$= G%VR $I7Kz)鋒+-JlŒXJC*4$ 4GK$MG iUr[%Y%.% t:$ˈs I7YW$^L*󆤋2*4VJ7\+-mjIjDQju(,R+̓t BMRnˣgVIWְtmV%esa?JIzLRZ396s@8 -bU,̄1mREŽ%XIڳ~vTzhfYl4\he;)WTNM\VJ3qW|Zd]q"!(-х)A~ޛ1t p9p}np#~8R̵ŔN~i=-<v AR$ӌJP`H=X#]XͲ?Ƅtw}$pV9A^ |kkKˡ^ajS%nO)H^b-:Q'/]d뽩AYPB!x VTIhʐT "5t10+Q%.x"Q!gbyim8TI8AipALOXDm,Ͻgx/ ,P<$;sTJ`/S7 +|ad) h1TF<0 Z~t n7M%ཥ;ȴ(D vHжBdUmMњCD"bp[z(`*D@mA']3ifpnEh A65JB -LBFSAGqA3Z$6r'gnx7c6[gѱc$4\\YppAޏ&3ME;7JqKYf6?nPwMۀ/ [,޲$=^ؚK_NBc%lZ"/HixI]FOꔄ7t]^Oh#_ ,G= u_b^X 'x57[Z|{Vݒ.1Ꮧ}|kVIwyK~LcʲHZ`ǫHs>p:_^kZtE#xU?CzCt !f@$-z:ISt𚤯KVr4Y?yey² c igwrϔWLt޻$]gU\>,sIɨ{pُϘANm7No~ Ue9Rg۲o=`z؂B DžWcCs޳+\xʪW>kFӭNmN.:pf\48kGYNX݉;Kxn_CwuQ;PcdtcIENDB`youker-assistant/src/res/loading/small/16.png0000664000175000017500000004131113260315532020066 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:8AE213A334FA11E09B27A6BF66489D9B xmp.iid:4441d251-bd63-d34f-bdc6-b2710ed399cf xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:4441d251-bd63-d34f-bdc6-b2710ed399cf 2011-02-13T14:05:48+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:49+08:00 2011-02-13T14:05:48+08:00 2011-02-13T14:05:48+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 [ cHRMz%u0`:o_FIDATxVU?˲"[#* aӐ)rƆ5Nd5T iMYe &&BD k ·?g{{}w̹>ssys$@@@ .1oƸ~&p& <oq?`p0~/y`- ,c@ñ\`6p pX?Ќ trLSέ1%ǫ-#f&Ӂ}<]4S<u:WSx``ნhRyHt,~IG/%Ij*3)3TZ|pIK%KtxvQ|߫$ME>-inIH:¥hI^X-i.HV S}^ 41fO$RC$-"I/K: &ik.XQI+pj#`>J_HMn Vs$5ѲDjmGICN"v+X~:޳ԚWxV5B#y{Ҵ _ |f>_C{ƫV;>Ӭ}fO'*/I(Q^iXGI'dw۸uk|d3p: ^ >`p͔_T\ky&"`%,%VZ/2o#:?&O7x=anfoXN߰JN7yNByJ0&S:ܩjBpk){a;nҩf6{B;>eX0x:p\ :;>8ZB^|`sa^afף LGj^d?Y.3R˿ZXtӬͲ.Oxo Vdb2jX~du4t)pWˑi0E[D55~Z>ЊsL l vEwFƒ$- > C>>Od>h#A'Lӓn=Jb*z~]9Iﵼ/K]8z{!!pB blRFhdI h飚-Ȗw$%p~Gi, 4o1tCaT9 ⣹%ŀ0'j-o :oKJ+t ##С8&4_`ĠX8LC 'XlRvpS^#I#s^#&/1n#a6Γd%R8f=eUn{pTz(HQVk?<%As:',vgҒ!.F'"~#A4'k=5V>Z m[kvsqqˢ8&ࢠI.qo*pCK#\J/-GHKŹ/gJnCEzgD)p3p .r87%v7 +&JX\&qnP[ Ò',~*P%h ?(0}>7A ԭ_cѱ#%m3\EĬp=fx8R([Jq2o>NvUÇ[3g ^pyxLekXxR`H2~P$ŕ^Ǹ3$mjBS )ٶXcC|k)؂y{<'\@M|O=J? 6^qr¿iځ@@@ Oo5IENDB`youker-assistant/src/res/loading/small/6.png0000664000175000017500000004135013260315532020010 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:74CF1E6434FA11E0BE2BAAF0E145FA47 xmp.iid:45f75d5c-ea6e-544a-9bba-5ac2542a0dde xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:45f75d5c-ea6e-544a-9bba-5ac2542a0dde 2011-02-13T14:05:56+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:12+08:00 2011-02-13T14:05:56+08:00 2011-02-13T14:05:56+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 ( cHRMz%u0`:o_FIDATxUU?B ? "4sӐO5Jk4ˆ5NM6YՔS%k2iJ$ HM 9O^gsϹsws>k @@@ P@4S`jwہ/v!gIt`*08o+eV tc0)ഒVkv%?Vv] 6| Lx eg . xF g04kMgV4M>$UrxK/%IjtԍvIԯ&i.4I$͒G IꑀOKj+6IGHIҥ6Yޖ]IꁀHa$ʉK!n"I/K:L:S%9|i)i Kj(3%iX)iDAf{PGbIBYTɲTii}y'`5vk ,x,iIIy%`g\\'pIYB|f..>m!;7/#z L`O8 ^ |i{܋+a^mf)L'k^fׯ:oYG,: NAzuMUzS 6kXԖ'. +:5" 61h;p1bLA %fLxhŅVfbƅ2KgZ,6cYQd Oڃ|L/>Ol>lAU&ۉi xy{lFl̈[pf&0) t1<\F$7\Nrq265yBK~Th@W ?(g0}x%[1Dvs:fYvI;L"c \dr.?д<Le; KYbk0~ޠoKgSoYTn͜/z '!kⱒ^F-X?ˏI&v#uJ^^y:I.OHy¿9ϙsOR.3.kT;z[s-[$eWT̕tRVZwK`#i=| w~@;-%f1YM*lF.Mr/LQ;2̇Z3dZM6RKzm%5>R(!4KUI_48=23`¼t^[vZZz= o Cv=΋smU p$mtCTY`5QQU&5@)yt} .\pz8l0ϡ:ӶU. N/'<b+90]V!>\zʚw>oFSlNE7y.3o#hQ6`_Jq?.\p)h'\B׷#E%nR kroIENDB`youker-assistant/src/res/loading/small/3.png0000664000175000017500000004131313260315532020004 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:6D4820ED34FA11E0BEB1F8B82F38B185 xmp.iid:a32a7a47-740a-8143-a6bb-abd17e60ca3e xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:a32a7a47-740a-8143-a6bb-abd17e60ca3e 2011-02-13T14:05:59+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:44:59+08:00 2011-02-13T14:05:59+08:00 2011-02-13T14:05:59+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 ^ cHRMz%u0`:o_FIDATxU?˲Q l%@ (B#q-j&Ik2&ghS~LM5ᨓ2dNM9MZ fM%Y PLdA]$0A\ygOׅ{3gΝ{JwR,V`o9ަ3VZWjVdÙ?5GtuCYC.>jsGGrM`ζ~~5dEB[LnN o#R/8}T:4~dlRfYʟps}x*x>Oޑ&xf٫/cm{u%Lz,rk͕RCX~{u*b7!hun PJB *?8g;z'p7㗣J]fڈkgjM104F@+ε25t2pΥosqQ|NZ\f Xx">6"6OlklckCLS6|GXvk)*iC[=,%!-F%%܂nJJtS#8$P]ޜ#A%!jCӰ G:kѬjK"" o *N45ȴ$ @RY~viIhk# 2( 2- # W6;-dZη|WR ^%B˷%%;)56m4 Z~ik,<^y%& 1+6f;2tؽ{sp }c^=8& C3~ .*m/} *I0Z{6;ܷ7\>懆Onv{*> +x'6S%!JqZ]$|<<i Vp:6}St)w@vKrx]\G/7^`RSnFpc4 ѱ΢cMgK:T`H8BI"fy&n?яFQ`)%|6TD zV˜ߙUٜ;/hP}oYTl͜y !j9BX/Hi xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:77239E7034FA11E08716DE4BC8314AD8 xmp.iid:093c7486-352d-8347-89a8-0a254b26b83c xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:093c7486-352d-8347-89a8-0a254b26b83c 2011-02-13T14:05:55+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:16+08:00 2011-02-13T14:05:55+08:00 2011-02-13T14:05:55+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 cHRMz%u0`:o_FIDATx{UU?Rn5C{7g(,gh茐5Dcf)=U`dbE%V@hWTx\3D|c5g{swf:3g?}Z~~I١OA uz'o)$`<0YWtN`O9`-ؕJ6l"v0 )s;ЃǀKӊ[:Z zP#; {V!EGZ'V`m8+`5S҇IK:(%LR$G=t>i#͗ @~^I %Ƞ U,I/xD4 V}tdF/N}%]&ioHE҃^ 4.'/N$j D^tF=0Y˒.ɩXI˽pz#`׬+%R} bIꅀ$u[秤*K겺V0 {Pҵu,x?,i Imy%`\ /=Lx-|xj8 { U+=y gAӧ!<$;T40(wWJe |]Y*Bac -?*.ޠMdZ vPѶ:B? *G""" ՛,o 2C-[~tiEu^„ ӊ0H~UL+ oK:SAGqE8g؀sȝ|MX>=5p}4|Qp\\ p%M=Po >W[]L -pq[T?|4TuΕg}.fۤxLFlLہpfVrc4&7ӳc2.y@…In14f=[VixGϛ];oٖB-|=NX݉;Kx=n_Cw Q; QM{IENDB`youker-assistant/src/res/loading/small/15.png0000664000175000017500000004133213260315532020070 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:88BF79C234FA11E0A2CAD3CE56BEF909 xmp.iid:340bcaef-6332-034a-876c-6a0a0975373d xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:340bcaef-6332-034a-876c-6a0a0975373d 2011-02-13T14:05:49+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:45:45+08:00 2011-02-13T14:05:49+08:00 2011-02-13T14:05:49+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 C] cHRMz%u0`:o_FIDATxU?˲Ȯ5\)B3SiMs&uMj2d#85ل8DcNES)J@"(Ɛ "·?sg\{޻;ss<9ϩD@zD-Vqi>VRWZv^Hh98 hƙ[RU` xXvX`0 88,{t-= `89`&pJwg@ ˽. z0h ,.$$%uI$uH:rW0T_FI]IktJHƏNt&w%NR$͑ʿ'鷒Z"nGFI_4 &iл%*iT(ICK,(iM+%ME>/i=IH:"//J 6S_}^ [.ibFK$,j&` 0oHQ VxZ{Tv)iL?ESHT-\!iU|AD&Ӷ*iH o/*Nśkdsq?FKzΞ$5Lxv`p']?c7{JL`WL瘶8ڬ;Z^JB;$9 ~Y+[7xxmK2^@"]F孞[}{0wŇ,2F%tϋt7cZ!dJ;R \Iz6Άԣd%k_N6[y"b |>熠[y`f 0e kߴ*V,!6Pbe?bgt>0N\ -?Cu{TG%V~UY :&[Mt:պW7|P,%CŻ/ȴ(Γ_` Ӣp/%`‹(hڸ6rۂ\#ÖNb"Ӄ\#6/6ӂl#aΓdR8f=[9&{@਴)HQ:qN}9E<>P,pA4'kti{|;:۽V'{3p q勣JQpIsALp{y+.džK8-?.KHͦmsy\| 6?<.%^Lkp:)X,u8옌K@P*cpaL.Sx@ Bm[n%?/V~ \fO%REn#8h&k,:VtZV8Iq"fLދ ~4㢃W⸥,57&-) ,I+fWS5hI/YBVy^|D"'U񒺍( g{qf1nTI;PC¿Y{wPŸb_ 'y57Xj|"#,9Iʿ%*~g;[u4I[[jS?P<;^E֕J<^ZӼΰ&53dZ7Dl6 tIzjIcN^9"뒆Wt^]ްl=S,W'\τ!;nI)sht.ﷻ%]gU\iex9X0 #OsD 'Mw8Ya#m-Ö|+^ fܮ-kB4+ayw?|mV;Lzk)؊;b9.ѿps-|O=ZnS&s @k av '?aat1IENDB`youker-assistant/src/res/loading/small/1.png0000664000175000017500000004133413260315532020005 0ustar fengfengPNG  IHDR``w8 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:6828DDAA34FA11E0A818F5AE194D5D8F xmp.iid:fac0e1ca-2c24-e846-b26b-1822660a9be5 xmp.iid:7a4c2ad3-77b8-3240-bcf3-8d0e93b52444 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:fac0e1ca-2c24-e846-b26b-1822660a9be5 2011-02-13T14:05:05+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-10T17:44:50+08:00 2011-02-13T14:05:05+08:00 2011-02-13T14:05:05+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 96 96 ~: cHRMz%u0`:o_FIDATxVU?˲ˆn@!PfHn3ih34FlLr2~++($Q4)BDšq;{e}Μ9ws9>nY0S6r'g|Ѯ.c-N0˨\  /jYZpKBaeӁS%Ѷƽf5fv=VJ,Zubh7.,k^qy]*);8g;ki0E;55ঘ =Mxhf!5p.}vՃ^`3p~k1 xh6X kR[ku8D!{x|G 1'C, _Nd8'6C[{hcp]7; $C+tZ ; ѶB4ڒDb1(DnuZtZY\!A%apQx1Y~riIVl|LiIer Xg&!. Yt6r;-_@쯖 m8Wq~et Sq+1bY68PJ˃#vc9/uZs-u1.NJ F^1KKR7<Ho0ӥ)Q inZsfN-t+,_lqk.zC qpM=Po> W[]Bn(I?Vඨ~f?Y -Z:ʳRVrnJY%6D 3JyTp,&7ӵc\ DžIn2 ^4q.JrR7૦'3koYTl͜Oy '!jIP%5ֱ/ 8-Na$|NI+='qC'I:R%os3P̀ZWu^(y;z[sEŷHZd8\P̕2HƔ?VS&n-Ŕg4׎Wg*}DXK^mE3xU?CZCt VCjɁ'KRHzO=3-W$}FҠhdy²c i7!;~Ip/Iۼt8>}y`5QQ VܙSq'xqVg.'y2emvj?q0[qF . ~FIDATxb?!Н}bF p39a3>Uo"kfG d='`>rsG:aL8"FD!h|BMS" B#p%g@,EJl ab ːɛ$bŶP<#DAw&a K(.Dv.9R`.$ P.;KTKbAzSo&X"*I ,545?o@W({CJWRU 햁tX%PQ)@|Je)u ?!OEtBq9)K[ ؅b ~2QB[>@54 (L[4 vwF]IZQQ MR ZcVB r$Z`%sT,MROOB6I.G!4#QW'Z4#S'ZN vHJN}x w2+P+\Q(j;^9GL׋@m2j2H%+nѡ8+4HA]{XJS9DUޯ >mhiMIH=3 /FH] W|!,"礲 M&Ӏ<` !e6U7e7@hW!WX& ckOq7:L8*dzbZ D \@APD^'NkF9h-tH2Z>Uz %A}%#{S@qj9H ~uE Lו zG`A PhqpqǪnRGEAtw{'GEpKɿWPKr$m|K ܗs6~,Bi$"r*(>[ncv8F!fۆs^s FL5ۏ!2 L&j<qmx@=?bMe0[ Ays~>/, uT|((7 iz'r:g'FZ /|9Љ@ k1^gw7G4H/ȐQ6LK͑; ;dͫ]tC bDi3%( Y M0˒GiHEuPa 'K J,U&MYV릚,Vdfh'36ʌD^f#4u2 Qmf qZu ː!~A9&%JrdS.[Sċ˗'iM+Su e ~EVU8Fu99U.Jdz /F!AܦCVյݱ#sBES 79fmddJm)*|2Y@ĂV`İZ/A4eRĩ~c6{nA>i#{! O"J-,EJ^6rE䊫u*7$.6%lDq)6&Q>wݝ3gΙ93{~un93}3y_^?Yh=;mjt@sٚƯo|H^Ur|7 ]Z66q,Qtd)_RZ2P=$ U/>Pz=diDa G3IְTUF0禞`j#]eܖ<d%c\y@[O ސ%GzZa'K -^d& C,ley4|7Kކ6<NMss5 $ 6SIu&ɂ9K, ݳ l[ަO"Ӟ Uh$ V| \8UG8%auîJy2Yh ̰I.Hx^Mb&Y5M4'^3/}ȔQ?PJ 5Hsh-R}{8 n$%% ]HdE\?>ћuNr4%Hk'm57@r3Q %pɿxtRZ`'YUd3D0RU6E;2RaBM=|Oko(c1cJZ?7q1nd ,_o@BgᤄPWJ.8eG יt ֽ<KMzTX)PC'V]1 *E`-SM¼WATN2b/1{C WJ; $qs'trN9G+B!ڹϖxbQ;YQ]M4u}m'Ru_<#"ߓE^Cb(7B@i>x}[mNfZ| ,iG̪\(PCҢfR +_ sK<jCkMqZUVVXV_LVOEծXڂIe8SYXV28AMp~cg+֭]I # [(Xm#Z|X8# _k'g,8ҠW0l2'8sX:F`u6vHƔvr'֨g+q-")$4Au5>~α3nHV^~γ͵b-6f~pnf( 2jm/;:,~R-]I.xo+s ImᛍXQ a B/B,H]#~d H" IZX-%m d]`RYC:ZIU늕&աz +(%5 3ys3 ֙ \׉ےFqMҾFJrf n@*+#ľ2byݏ&ф>)D1Lc!h᱅zێ'$M,Y""(>yr^+@YH?*礓FW./fREK~Uݢuz2UqM,R)TRxq՗^H9ћ)uo7H,pAw#Ѹ?6ۈߢlRN]rs)NgȰ4 G$`ȠH8O )xJARbdgπXt/@ ILI Ɓ((u# x3?j(75 k ^J@q!tI gs%ieXDvYd/捻B:DMlDT< iUj`ϋ:P:!{qCJWRU 8ZtsX"n \vT8R`<bYJ&OnxaOXj.F0$DĖ_MP:%TlYJc´E.k`-pjԕԎ @-A%$9fE(Ĉ> HUV0G`dH!~X6^Ar E!4 ?OaK ?P6#ȩx'R;@ %'jANbjj$p (qX#E uZ9W18G<.9\!u'\EU!r,Uޯ >mhiMIH=3 /FH]FAB 4X*DIeL$iyRCH;l0:n0:nфB "&MvO ѱDǘdQ!J`$!u{b?NJ9rZ9?>bb#*;=dju>B+}AJ :a釟$}l2ZJPUA" ~uE Π!(\;KAD"  X >BK $}~֢X`c !ΰ0!\nw渽nfgwvf]OO6 V=dqGWȣxnliհ>1StT-mA}Do11S#"C@lL [yy"[5PHo"M7ᖩ(/h ʺؑՃ.!=@$TFje\`uwBjrJ9&8kǥx_h{Ď#5^p{wڗ{$H/ȐQ8zjP1Xd!K5SL (6B :'KJ)jP#/K*bD)h~la G4K׆IhռbEy3Y 2e596zkyBt,`. J^WiB!EYʟ]KkA.cEAQ$! ({؃OOJœz'5" A(EA=15n{z{g//5UUe5˃` "Z99oF[>E׬egU G;ľG1J8{KEE^OǾ@}9ЈcKh:aC.o7+^ˬ015q)`,g.e8˯U z"1+D7nI{`AAk sN~ Κ7|5uE]pJ <c4j|@AB5Њ*k[m,C,==EAgRjL]eױsW5k2F GvxIaީ1ANaژfͲÙ֏YyYJ.5$>$1Xy+1#=|?Yh=^ϴ`UIAtٖclLcG%-Xyt"`I_/Q*V2#A?k@Qo, ,L={YSCP$+o`uVG듮tِK,U4H`5mG`s.{Zg^K߆ %BPb)j"A ~wQHWJm8OLUĞXkJ8^JN8*6pB7xЌņX Y'AǷJ"YDROW t=f'TRb$"hZI, g%3C}!&ZIe>QUq0c$3l9o48Ŀ5:)1F3 L|%*`?EF3vs`TIf1f:B"M4 NKBmUbKONkZ31WlkԳ⍆B,$7#z9aP]8j27ؘ<,:Gy_IoJAY]KA c'%:+PT2bZEw0\Jp+|C*:J!DYy~)p[P&syX籄E[].unnwhmQvN#k 6,WfuvK*4yq\6JE^iG%,*>^:q檀vw@@1}r(84xVD*P%3 ׋':>WavWab^@I㴡QR'&536F̎(Y|J]nJK+V,Ό b<&ԎK<}b:+ph1S QsmĪ NlAa$:5n@*+#}} z-bpFh$Db)ZxlQ=m Y!UAiaȠZ=B [nn2y0,AlV wN+&pCL ^Su7W}=~N)ARnX]CƥQgFe{hKyM#C 1b}'oQ)`e7e| elBݿC=+7jεs e2!6Hy܌'|9*`}Kl2Fp n@t,SRtbP݌G9H'oUUƲU^1bp+\qk-Ik]5'b)X %BR(J,BE?IENDB`youker-assistant/src/res/loading/1.png0000664000175000017500000001301413260315532016667 0ustar fengfengPNG  IHDRKAttEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ϖ21IDATxb?!Н}bF p39a3>Uo"kfG d='`>r &If8>>oh65 cn02hFFA&|l i#3 "'6] /C"'oqH@CBeĆ5/veJ]^L P.;KTKbݔAT豉-J0G#=K Mb E(}XÐ!%+t)i v@: גaCbq >Mx IJ:L݈)(:Þ4~hk`;HQ,6-s|J@| O@GaڢI/3h{x?5JjG ׊B8Fbb#*;=dju>B+}AJ :a釟$}l2ZJPUA" ~uE Π!(\;KA" 6bkGXZ( 4}~"X`c(,RJPԠ3Tnn/9{|7ٙ6,Bir( - q #Sۆ{ń";D1? 6Ll5voV@5?b2u%žߵ/9BՏCF!5X#gr Ei-d }x{ f9 wgjY 21 UCTj:536A4T9b}Ϸ+x,Z52YˈmKSMU^]ѫf"7 b~ ! v8f%&36+ɩK (=Ge!sENLhzUM̃8 $ː!Ҡ^%m9)ALtzu1^TbOҴhD?"&b!#ت:'NaCjQ}&i$"8FYH`6YHd5)&"Y˝ a "Z7Y P[=P1 L} 81f1Is8M H Hʏ]IkA~d FA (. JPH$xR$]*yxY&Ko {7,UjwU l=UKM005A.{}T3kmCK@J w- X&ij~nGoz.#l C :8*t%TSYLF!tFQxɚؑxB҃F;jCb+e5 LskXbUE(1DA_QHn˓amGU^1+Y?<˃Lzrn ٰpz.L4Q.n{\ PcF NCBB]nըjb`:}Ȍ#R;nG/ȭa?԰2`[LF_ q[C +9ICz2V^ xTU@m[u=SWV')k1<Ym.|C]AgzQ{/fꔍ/i4k`Ŕkkҕ'u@F12KmΔ6m_׃@5ƞPݦ5Ld/͚cd#"J 1>jN] bW<V2TM(&iq̫ٯu.+S`*F 1v+t22?EҨZ/xrzɟaQ$!dye;NiV:(%b#N&vl2,lS A,P -{baM).zleYmG$->Մ>O'4 pWȱ1("er؍t¾MLy: 8QK"t,f_w`eP#wRQI:`_[Z`!ҙƌ qenCJ\s7ǣ)|.k;ؗA^,l*4K(T E)-wT6p-22ܽMs$Tp'<۸5𙫂Uy2,X 5,B KPR(԰N/h."JIENDB`youker-assistant/src/res/dot.png0000664000175000017500000000023513260315532015701 0ustar fengfengPNG  IHDRH-tEXtSoftwareAdobe ImageReadyqe<?IDATxb?9L04`dddR@xIJ@JcH7iIENDB`youker-assistant/src/res/download.svg0000664000175000017500000002013413260315532016735 0ustar fengfeng image/svg+xml Jakub Steiner http://jimmac.musichall.cz Go Down go lower down arrow pointer > Andreas Nilsson youker-assistant/src/res/checkbox-disable-checked.png0000664000175000017500000000225513260315532021672 0ustar fengfengPNG  IHDR ˰tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp <4IDATxڄ 0E7kPk%"V~B" q撛IEQ#c|](%u]7MqKGeYBa63uױ,Kei.Mu]_۶%IRu˲(4M y$qiy޶-H==\Ӵ dYӮB~ 0z8dz-oWJ3YIENDB`youker-assistant/src/res/back-arrow.png0000664000175000017500000000221513260315532017143 0ustar fengfengPNG  IHDR /8tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp IWIDATxb?6p] ƄC2 H w,H@3[+?@%9b b[F& Yfl b?tMb@0unPv TH% > T$W%Á[PM6# E:@ xmp.did:793C84FA7D90DF11BB44E7D84CC8D86E xmp.did:9B8480C4FF4B11E7AA47DDE9950100A9 xmp.iid:2575abad-20ee-1342-a7cf-20fd63a7e68b xmp.iid:74c5d078-c4fe-7b46-acef-fa1673ae49f8 adobe:docid:photoshop:77b2180d-ff4b-11e7-ac80-f0adc28d61f2 saved xmp.iid:48b1f0c2-a66f-8040-8ed0-fa43570ed73f 2018-01-25T14:48:14+08:00 Adobe Photoshop CC 2017 (Windows) / saved xmp.iid:2575abad-20ee-1342-a7cf-20fd63a7e68b 2018-01-25T14:49:07+08:00 Adobe Photoshop CC 2017 (Windows) / Adobe Photoshop CC 2017 (Windows) 2018-01-22T14:18:56+08:00 2018-01-25T14:49:07+08:00 2018-01-25T14:49:07+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 387 100 Vt cHRMz%u0`:o_FIDATx1jBA_Kc`SDHKEؤ ^o`"w0N El Ʒd`a3 fFxwzt3>ނ7;u ⾉eÄi=lvͯL=%0v&۱ |ݯsNT=b(B!ʲ>D:0 <&E@_b\{L3100dc```a``f``Hc``Mu,d)vL&ZT XsBEJ1!!!_#ݐo $4tb\{WAJ200#C +h,r;~100LRlc`` x4.𖁁AF2V? lОy9)' #X0Kvp,,,04 ,,ḷ0F hN hNќ0:  AJ@BW\zuS=*xn7hI$$3!3-a?.;m N1c,2l0 x- %0S $td^p߄0oiL䰊@3TΛW_Cί֛x|+e2ʢD3>vly|тV[Dٷ?8 ~+.r=莒d/B"T t(‹f " $BHۑ:*!{*AMPw$BY1T:ܽJP4[Ap/.|]Ru7S7[3(;kɐJ?۴ܥ879U8H i$Mq<skL`M?ӊ*NT[1;vydO}"G"N7u/`MdYv<4[Lvw{gsr{FjܐZgHWH9=-R H .W^P^,k2,"e?z&U .cLK1hI`'ua&t';nܵ?2wqXuGmW18|?A&nSx÷G >?j2>s?9~ :ڱ_3YT^R?{1g}10|Ӻei#2Jx(7NN $T\( A׎V EtHN CND'P*Ht'\>2"P8ND' DB]^n@'A‹e]ND'X@DwD'-1"0mBt5 TD5@k|OUUᏇ\$ !8$!P{p4y ArAh8Jr<,sN_}5_{/՝ꙩ\/:\>_~'>w՞ 20 wq?^Wu\4~~dʖxu:Y69c|ՏE:3l8w ,x| LK:ݨ!bCfU, Nsա1XL2 (((e1p>[ zGD2L@.3@1`b@g=t &SYh t`N5Xb*3} 0Dɣ(TZ@@12a b(^mCӱpƺ/ɀ Bg֜sIENDB`youker-assistant/src/res/folder.png0000664000175000017500000000130413260315532016364 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<fIDATxb?l.>lb8🁑 "˂^) +5Xf"#h& ?# ?2ϧ?oS$_W @Z8~20{ylV> 2=hOcp&: |x߿1؄w%XoW}/Ɨ >?De6,v2 T*F/@M>30 s2īP ,A< `&@1ûH;㐟I$tk^x ?n>w6(: L*\߼HY|>и##R yD0|xuY !M0%Ղ8R×P_FX1"A@ 7h0O ?FIȄx r1|tG_74U,b:'s05O@@/~:/ $&qEQIENDB`youker-assistant/src/res/app-autostart-default.png0000664000175000017500000000323313260315532021342 0ustar fengfengPNG  IHDRw=tEXtSoftwareAdobe ImageReadyqe<!iTXtXML:com.adobe.xmp IDATxڌ{hQٰE6אF%%Ps\VVviKF?-jk.-l-i>:zO}:yy9DņB`Y -\܈SbøI!:kEl~.&~tCe,ל_0D7j#wAFk]c|ƧHP 3T8@/hĸͿ >"m*`$ȄApșAB)X&Qpj[|5- lG9-@1A2rQvw_Mm`̂Jb_ -Р\!Ml-\ k\rd' T+9lݤUG7΍N-Li$dNu]\FVuЪ wg[7YB]{(W.t7AjW`iZnfqAb6ۻYd=ZDtU 1le0WJ8 _uO#ÎHƏYf gUؠ Q-4j}0RJ:(qtv5ީ xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:1AC3D54FA51B11E09511BC839F30FEED xmp.iid:efbf43e7-4936-4d45-bc9c-7c5df9a4ae70 xmp.iid:6cc3b2fb-75d2-2641-8907-8b6fac3460b5 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:efbf43e7-4936-4d45-bc9c-7c5df9a4ae70 2011-07-04T15:56:21+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-07-03T10:21:04+08:00 2011-07-04T15:56:21+08:00 2011-07-04T15:56:21+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 186 56 / cHRMz%u0`:o_F IDATxbʸE@%0j bDq?j -MbVF\Nùbރ;F2Q:e)#)!/^1"LzoP .\p… .\1 0qU$41ڟ#.\p… .… .\p… q…QA 00 eO;=.rA.\ rA.\ rA.\ rA.\ r$SB IENDB`youker-assistant/src/res/listen-pen.png0000664000175000017500000000452513260315532017177 0ustar fengfengPNG  IHDR44+}tEXtSoftwareAdobe ImageReadyqe<IDATxbpxo'n\Cçdb0Jz1l'$cP4/3#~O>R>@ؼ0WGd |9/ѝ.%?+еK.@u#9D+}7`D xpj@kƀpA:iM[DQ/  Ȑa.T&603K.Vfp ?#,M@= 6 x5zJ"8@]?Pv !!6PBrxa,xԃ?0?!!9À\d?5|Ӏ5EJ!k^|+8 "@+.ЀO@[A`$`)Ǐq``01bhhsU` \ Od UH^q?h) dm\!?yU [ KGȂKPy!(Qҁx -DAx. ]L0@(+[8V€%*@U/ G2ϯ`[ } ] r}q&>PR =g8#$/H|ryrrd+2E~P X@1,5eKt3T 5B,9ÓO?,L &(`Kޤ Pyvo2 s1 o N$n ZX)qD4PH@CZÑ@S"P>E[ v6Râh-1R-,A&QF\4B-QT)ŒA$~=4աP TH Rj[@* thoZXHȰGPexJ pBɵ@s:o.5?Sj[tvG5+U_2{ ^J|Jy@q R(=eFԛބ< =c٧E M/ Xa=O 4)- }ރ6mG*gAk#m? \# Y%n@&&bs >K@&*gځq_d,w):Dd8@j%m䴂@-9˒`mq ^PĐd%%/ (}I0]%i,!"o `{z5DK0r- ̦FYwDj_3*d!U!&,e"$)>j%[%Sg 20TCK*HP;lҢEм&e P00oL "^ ;;5#p =4 dri@ 2d!#=4L2@\4hs9=4H6Of@*A;V1f[8xl/Ђ֦H%z? =ޤVVlP~ 2]tkل*!B4Vįán+u!bM$06UHv(͏/Bo܂8%}VH2TSYJP/R8ԥ bPCPoeW$hxAQAK$Wl5fR0PxEIEFBETAMGu}Zl|ÀW`*`&XLhq oY  x^ fvIDATxZklTE޾(V~h G+*ЪULQDЪ0hU0Fb"6EmQPTEMHPj\.ݙ{gIt;s|wfΜs橹E\ϥx|_ɳcP\8F` Āb *v<r*A|^Bfd3U@t!f&8aK+FfF|T [D6d^u/Xqlr`i` 1Q̱"4^n~So"TEoU}3X6M],:K'mYFی Uz[~{ʋP!$υlrښy"{{ښ4RLO6Ie! g^)@HlllxXM$Bہ~`PѾa l- yj#Ѝi;N`:I`LH5+J(eIEuIvTKos iw6F/Z ØBF3Nt D Z5(>s}IډSgI(8n@JGfmP Gahzl/l˘_ȧEsہdD%6/ 6od-/Ou@:nV׳j6DV'`Pu M^x!t*J:rp~_WN# a,^\H!$E? =֌ aYUV)RIh3uN1FB39Ƨ}dwx4/Lu?jO߅O<[L=$ @h!ukO89<. ɜG Ja{n2wq㎰@Nu\t +!4 V^ R) [Y@ERR=7@\aJ:[fT&G=)aHM_:Fy,BBۡ-nBx iĠQR8pDM!$Bp̌4@ 03 <}em#30f9ɫYmH+~Fe*,݆4 _=me)J~w!^ ։S,_żfHDj,ؐU^^DG1EՀKe@ [;omWfbƸZe\MGp m^M E."2bK3]uߡ'Z+ c*2'Y*2蠫m,O./wO%rT0 SeBL"UBCntT\2Љ8&$rߖcT0eHfO uf6_ybrut:vPg#6Ucx$HsxnSG_o_r.1ѐ֪W4+W4Gsc~:IXn )h+vqX{IENDB`youker-assistant/src/res/more.png0000664000175000017500000000272513260315532016063 0ustar fengfengPNG  IHDR00 tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp =+UIDATxb?6c,y1$?. %a bU W!;b3 9؈@s 85=JFr;\ I?@;\]`¬#2M`$VH-ԣmHQ04H8ә5@C IQ;m4Er^1lzaJ'#F $E G|QP-0HW''Ɍ HF< hn r Zڠ9^1lz "J ;TtrV Q-g4‖`4ɏdh4OE<ɮGf$\epڨb@l֛*."Y ϪJLsمQCm3ۚ384N8fڸ7PQENh)@9ܦ3P ޾B' A ;1J/FP >C$ wbQ &eUBolZ_MOtcٛ=PIENDB`youker-assistant/src/res/power.png0000664000175000017500000000423613260315532016254 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<@IDATxڼWɏyjqٮ[ݎI"4i.s@!`pq!9"!KLnd9!|]Uz_g[󹫦iy$|ݟL?[?|)_CQ`Y&lDж,SYSi'*HcbU(FW1:c;Yѫv/Uqw1uhVMhs)cl ^8ņ;8p81\Y.C}w}3I⋹'5qoJۃ|YPLp[R\\&z-6q3#FhĈ*<|wIfaeD%d4V#T/;$W\wF'Z@r?HMrKPA78겸?Qus=ã(X6wD %j. P HX\KGz__R p8f&zmFF΂j=C,|(C(ƱNT*'ԟ n3Ƈ5TQ[N3\HkrAP幒7h;2E}wH}U p ' u+(|4'-ӓ3B>I+6՘cӈAPvu~AOc`Z>eŁS " |^%5W IuukJ+'TY3Z['D,Ċ*bEgxV I~ŀAsȄEgyTW 8Ybzt|e Bӊab܉QI?ko7&>{eI©1 /]|Q3b㰜F&>_y\^ (1;/] F{'n?ŀncQvJC(+Wn-b@1۽2*?z`|,N``N/mwn&}Gj(,;&%,\DJ^ B>X,N9y!QdS5 ,%>-Y,Vt;3֖b%,k2hL>gw0@'24@]^bI Zg?u(A`([(H=ڀx}x+(K y3S͈.Zz+!id0bE |Li-]cXYZQ8yFp 7=bɜX`cqLۆ3_hpzN#`!G!{UPd{^BvQn~$T+Gˆl%iW:Z2T٠K6\`۱I@~=(yo3D' 9|8~9gH8}7ͻeL|ޜw1G8l+xߠy$~V ,ǰe2'_ *bb"Xt RJIݺnf~K|!qڳ眙3gΝ;eЕ)籰V^CJ[nŽ{yj].!pW! L=K$I>t:+|כ敛Qn#|)8=٢+!֨<>8xsss|iSب ) ȣcүHZb͚580:=uK#lDZŜҍ,Khh6yX\ ԵwuA#@ jD/@ja%u#J$1枔ދ.'bQYr&䄡nA^gW"˗ p.cCBk;X(+cKQ*hCb[EC5}5p)14 )6[ЙZM~}1W2Bc w&6eU ``/ x!X^(d# \h,UP" dzw~K!!rBϢ=Jo` IIaEGiFD'6+;IMYPTtCƂ5V0[!C)v@Hs!ao0lf@2,Pjǀ[45EvHi9R4NSMf=cXX8mD՛kN J<22c2 3H> `)'j8E0lN&Ƚ<VjOwoAISN'av'IGͼi;ԛOǼss $619HӆJj)vZCx啗qw`^SDmM'1+/K ]c!{Q|v_ذGAQATOXFB#f = Dk)Ul۷/avf_3_ Lb6 7kzh ƀdK`+Z-8 x#&b xtAB& 휘H2Yk=J[L֏BȡV(;Wr}#iUFIg.U7~%EN?eֈ4L7Ě<#nez[tQvdLV1]+G(:S8@07L09e/Z." TxcvN B3Y.I+bJW[VBZB᳗qS{T\gTKfјs>VEIh*o 0*ź&B}Zc@I۷N:-,Ds~[R:eGJ[3S*JN-@uCFj`!%^5j}]! *7uɾUnC3",d8[2V%4_ MZJy۝yҏDCZs"Q쉓&>"vfڊR)U+3Gj܋G%+G%)O-ꊹv合>Ъm"JuJ&PRHL h>b=v\ \ ALAc(8ƴY/3B"NX8P"]ӱ{'Y#Y!x#9%%3HDN#Hkz3ښ(=*9WH Ҏ--FyvjEJGkŴŒۚh}՚;0 m$; uF?!=oC]nHf90,qdtj[g\>$L8H$NLDoŊ:C'@\FYQ1s|?+Q`TDv+ptB,/V({y 0n[02N?LU_e:2b=Z]Yo6Uk4j,[;aYHךs6Cn1ŭ*ctt˗/&]tV~kVQ4˙dܬA"Merx>QH3 %j†_ Xw.yCʕ+`-e۾Achh7}AM}c#Y7I^Cɬ"w*¸X;Ah>V8Vޚt zMIDATxF[bXwl 7aE!VlbɞCIIĆĉ131c;.gK.u9ҕtJe;j>] EQ0'\)304@ i4@ ~wEυ2svZcH8/ցjκ6;kgsRJ,+S w)WvJ]8oJur\̳*랆\ >WlutRCAs~e$@%ԤGEQUdd6 !v^EW{u]v*璔\g}3CucQ&[ʧT4dh{䞱:j˔w>Cz_C6:Ҡ+_i2 Vub/0GU:ɏ\4nKZޤD;9~l3ɤUjm1R1wH 3+VF>5ĉӚ`B!I5O_7dw-LD ߔidjscj,G87sM별ʸ)끝x(h%}o5d`W?_jCbIXR f׉5BM:(st_F:W a=hj{] nad'Yuk#q|{\sPMIW2c n SK-* ʸH&b/ Y5|TՉMu@ tD*eU֑g*,0u3k )K f5KGqnvMԙu; y)aiJ{|o"r3hr+sr̩ϵ\4uAsVuمy6N2{CѦefZ8cGK֪˹LmiYܙ ѱMus n2 ]<݋{n0SLC&tY ~Zߪ ,dnӏݞaYιC^YZֹA\I.c7\w¿V,G񧆦vá2}Z* t|^L?>s{9gRhb6P+4]+ȟH}fp$ ?tZ1P)QU'IӚcϠ<ͳc)i4~؃)sc9or 'Mjc4kiiٚcOȸJ3Jc#$+ Yn@̳roX9S(f:ӡEuU'bYΌ⾆0GitsⶋM ?zƶ2Jg u 5~9i?n#cn3YjYNjXZs\2_ښSbI S̳ܳsm[uqL~% >gۺX|)SQKI į52YX-W-)"xܳclQxUs|X##fq5'5Q{>W Y>/'z5^?:NKH H۾pSjI{s􉑚Uԭ6ƞ`7T?˺3X3oI1_k, 5kRkúsmSO*n?cݪ-eJcURs-%1N}dr bU0,U֙2.W\~7ZS.Iy؍,iiYUGۛ5Ԟ)81{?o~FXsN̉4l[ >o="e$=bNM{]ow b4hSJ`t k]I1rnIr`M:@5 j3 )BmM1R3S[@!H̵fR~NܳǨ RՉ9sB3&] Tsw*cHcQBp$5D.[K딢4> v4RH$)S_+g ahaFeiT2i5R|g*`1Cu ИtC>HѬ3}U` M@,@uRﯭW>") Mz]JPWo`(idU:By$=&dm+YE] X>M,a%\@] G<$% i& T el1"H(rFm'M@C,mS>[)Z*9&].`.s-o͘RX9$5$ȕ1*w~Sej!83%?$L8yf5$럣.`>MA_+F/Q0Ҥ4] ' Hm[u ŧ"Uc暟uki4N(P{hdq$K4Ƣ.ĩ[GuiS̵ZuV1c$@@:g.`M>ءi,ާ8kx%g\ Mj=E])> [ .Fpm,Hk#P@f mF]P&nI!5C]^gN?C])usK @cv . GLUsy@]>M$}4s uFn.a5A PqYZQԼ)yLil89' >JH4@ H4$4(9yd4,W? ( `@D\뫪sh}W_}UoϿ211iYy9H"y:DQ5M[UU:gsnݺ͛fCΩ#?~-c8:d0 ]cl؁eu37U@+==~!#QB  ^˿X!MM#H4p'hÆ?.g6ݾsvZn֮}8$,ǂru]fbe\YY9vj޳:S >FQ~kKAC8F( X7:*s!$] 7\6vc/7&B41CDNPca-2A-Q4\D,. Ĩ}Tp֐F:gN~5qޜ/bSB(jeu*`iGR"RU7 "H^ a3ao() u0TpC$@F^(a)RB*Wj61mJ GI`RAAC !dш"/R,^P.D:@$(okrFEEbd#xtuH7uLH85INe)ޔTL (z=^;~> hbANU:Ԋ`ڰΓ(MNQt ZoK6Ĉ[OL!P_ #h{>@ T/k ;66fh:`_vIwoߡbG:5VʇkQ?+JelUzU> Ӂ臫?Zm"ws+)ϝIڜjU <^!"Vÿ>h||Ec3Xcla&>7!턚Z[si+ ' 59?pxp/OS-+DkEii>QKע7zϋ+XKAIENDB`youker-assistant/src/res/unity.png0000664000175000017500000000447013260315532016270 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWII}wUWUn/cY3AF! B|u$N\8pW7x -{k{F첇ي\{-qxx xxlgc %Xy~$Ya{{Qxyk"-*5ek׮ʕ+x ޽k,NVf=zis}?~lkL& ).VUɱ}x}΢]X&(h4۷_x~sLS Txei˂~Pwi}pO SBn9 P]6˂><ba1l;؄7P*3󠇱OD>G,3},CO}>pp皠O%jUAor)x>B "ȨnkJ!UX@"O;~ghUHA=#KQlJ׼7GY * ⊣n8ZZva%4[+ p]Ezr@<2Z.ėb]4##mß9Y-M$S=ҷ|C@zyv.bon9, cp8k.rJ*Q/q8?%?†'5gBe^TYsW4k,VTF%P MWPsG[=n/^1NȚ1񹙄nj@Yt,FE`@7T5w1q`Lq0j AD= teiA"BrI R+R΄T #FfcTȰO055tN4\jFf,=+B1h1Y^:lH6M fOq BxL(g3#2";yC0FH7 p dѯ pV9Dʆ&SmSXa*Fɗ8WJ%vN%)y:*V6_؅)jF9cuC4`xJb6/d_rW $U3a~`H|'o+XՀxv:exq0;>hrx{驽׏|~53Bhk#!p:QG Tv*\D{{8a`(,WPm ˛.ȔssAEIm_DcfcbҒ|4fFI6RYV`gf  ̰p. Xμ%Kɐ\T˩MLJuzCͪZΐz+L#0I۰qπ4ҎY4sSX,3p6ÍM/ &rQV\HOKSڹzB ;HK%: TR4߽8ߠf)àkjuviݢ*'Tt; <8&VW[ Ɉ(幮6Ȍo#9ƛw1&BB[C"/*g,1+@AװX>h/d& i6ڊI Ȃ6"Dܺl2a `+8}"zjACYH6b<.!vG\3lGw:s~+XI":|炰{&{ Xqea^OloKS܆^W³pF ?a{E^<F搆rfd BI¡%{XZlRfIӹ!g ct f̈́aTξhmn8Wۦ5Ueo@gB/ //`gIENDB`youker-assistant/src/res/camera.png0000664000175000017500000000660613260315532016353 0ustar fengfengPNG  IHDR00g^FtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp  IDATxb]0A(~6K@rqqBBAnnn@fuНŋ;@ и~Cbbi#: Y |gggc^/X/n~zI 9?x@eb @Xl,pV '? |:TtYN؝9o) dqZ'av #$$b̚5kdpR֛~71\II޽{w$Q 11X9ǂyX/[}$`@T:IK6\d?޽{ ?>I@&1 /ϳխ[-P~ R |ٳg"@( H~􉑑2`JEPhLLL{@1IlQ,,,r(}t%!Z(E($IHpg-"ˁKϞ?~5nXj\i{{;\ XX<6lbS&MMMgee=|={1F߿]̋" ਫJ}l ߑ@244TCCi/)$$4XA=z(wތ Pի0sssϝ;ℓ'OvwwuJIIA<{ݻw@B~`Rg8N5 ߿W\ټyǏeee}}}ib kهO Es :S 5W^.DTMe t60z-4g`#$6ؔy0]Ֆ(a#ym$ DȠƄ_[|"6Ys`/oDxd.S@I_1%//+L "TT&,XM؂d?w/0s[GR`d@A,P`:dׯ_Cq/r@)o()?n[-4iR^^իW4}t8X3~XcO}"W e;'Jĉ@CM7:3JUUU!\`4 Y` EXXHB>M'_Jgܓ9<;$7(Tf Ҏe{`h$h 5'{i`YYZE= {h_>1 6_Lfbb]'48 F ?r6菀4 Xi"xObAh4@i!y"/h'5 @A!`DJBFA %]mݮ_B?cC3yޛ>o-uiH״ ^])3(+Q"R|(/18wևj,vr9)QM|t|m@q 6#$4 D]/H[Df.YTW+-vuBGdcNWxBh{;d,5f>|W$YQ$fVڊ BW91hhh,iZVex___OOO4#҅ *Z3|}7f"uz^jfC% ;X{١oއA~/`D(# hz>.9xl` hHyqͦ] !D<,)z]G[`weH!CIENDB`youker-assistant/src/res/scan.png0000664000175000017500000000265013260315532016042 0ustar fengfengPNG  IHDR##ٳY pHYs+ cHRMz%u0`:o_F.IDATxXALUn]mKSmňMjdM,Ooo6=BT_r]%jb~HBEӪst]+Lbh+79x ?z{{Pt/ǟf󹚦866 @]*[[[7q旋k4hjnn~"lDz;V`jΜ9ӮB qf#{5M˓D"v0nd2>_Q*z>(d{ @(mRm&9CӟP2,ޗ(;Y-f'_0n#~LnwyI0 c=7Ee߭[L QiUR(=΁7̂IQ"Hm 6X___gW. e TIDATxbiigʀ ׼hS,Y0F=0Qz`F=0:4(0  oIENDB`youker-assistant/src/res/delete.png0000664000175000017500000000211113260315532016350 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp {IDATxb?%Bc444( ~įqby >U=@P5ؼ6C`jc3;U$C4jQ͐}P Ț_c D<0Ҍ/5 u(!5;A& u 'IDATxZ{L[`6lny5MuEժMUKm"ږVZUITՔR"폌>mjc[ǚm-)wz{Ynj<}X+l^;ׇ% 33:O.,,`bbPp:0 q|v=⏫͹Z<[eF9E?l6K'77pG_{[dU TJEo] B_:zT9s^b0S˗/P(ǃA2]< -!E j?r1]x+++T*6mjjjFvPkćm1 ƛTnذ\!ޒhYϱyu$w(ZOφ'uX CRx?H^U-S3KVkx>#51fpVT0~)vޱ|]3h"'g7?DGgQܒw^Fy6=<lyY?7ۊ7ehh]]]L&^ݼyEDO# hG F.Z3ng-zE´ͮ q-.bϻ^Z,RyZ-3$1'Y3u+`(IJ*\?9/ƿz`u6,е{ɗxw  P[tzIENDB`youker-assistant/src/res/thumbnails.png0000664000175000017500000000450413260315532017264 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼWkUW3s`fx cʣ:hkLjFm"1ҤMIǪ`m:hbZCThJѦǎ0睹L%!^س{ַZ};.\i'5Ѐ(BmisGzSvM魛ܘQ,_+%8ȡKLoid~b*Ur\?Gu4tk kz| G!  ?`cr>5$xF&ĊyP2ؗ a\_ TZUm]`ӌ BajSxP e;zCi^ CzRpuP3C邃;?/EB75&xKi\(^jmDkCh9w2NZE(=d"I(٢@p,/E]JJ^#Hˇ0~?AH K(<`_qٜw*)=('QrKBAЍ39ܗJW Ok(26 aQOEιۇ~ mX&Y/4`ʕ[ݍ KY||^ *a,o.ϒB%3mOhe|q1 N^Et~8~B_ w=Keߑo/^?.1 aIQ%/ 0 }bq5JxzJ mb.E:pK$Ƈ8sB? On}/]l{gϸwlA30ktၒ  b0$J 麛5]ڗ"2wbOykӢʕ}W^cKdĹ@e+R!6eK-Ɏū"ٍ˱ZenK_Esӏd" )ۅKa]6RK;!1`b{VX)|iBMaE2~4$S̤)ʹ.T!&7.a4K* ѼGY U@# 2dEa #V`e; 8o5%x-ieQa- k_,V -2l"[ .淒qD `HWJ.k,ᡊ0nᳬg~hl݂LȌi5}+?.nbrbnTyUe(YJmԐ]j0eC|,:>[y eR񐩛ᰙ#q[*$N'i>kg˳պ],%}$;_ʖ{ga4i}ןy n3Ȇ-c&IENDB`youker-assistant/src/res/skin/0000775000175000017500000000000013260315532015351 5ustar fengfengyouker-assistant/src/res/skin/5.png0000775000175000017500000105222713260315532016237 0ustar fengfengPNG  IHDRR5M pHYs+tIME /%, IDATx|isH%pw^qdEfWMMwVFv{+3U I'0=}!푈TUEc3m?WDU/@$\_Tu;۟WAD [k"#֜ DTՔ9 4DDD|4B`?CU8xHT9EUU0 $"0Sn#!)oA .2DZ\NcgQD@dbf6UUB !BiUl;է//D4]f3PbfZ1"ZVU#Zk!HDj! b"2B3f"B df€LbQUf!hk-fZSVubH~ڵRjjˈRJ)@DNUETDZkZQab̧k@9Z/0Kq|f"" ̩ﻮ53PSZ30!I&P QgAS" ""3&`mq7thf<ՐqWk-P`fa]tJ)| m <0 8Ju///f6#1suD@u7PU}~98}k"@ PaR)eLf~Z9S777t<_'YaAvkw[>j߾/_B߾}+|ap8R~ o_>=nny<!n' Db? 60%@"H~]. Ƙs"w2@~1nZ !R^.<1ac2[f駟v>?.x{ZkB!ԖC)%3OSyZ4AkB{ԺJ)01??~/?|1|>Zk:o:|xP;f|9_8].9>|xx_UyP3x?Mׯ_ct"_xz\.)Cc)믿nyi639K)-3Sb"4M*r{w9Ruϟ??~\.z:Zk7771Ɨן/~+y. 0;LۧTyO{}'O Cp{3w9.&f~yz>qϯyoooB `y7h`@'aն!o ڃ» RU i~͕\C:f|:˗3?@!η3b`TT@Lx/0)##*3"Z22\  7d,HXNp1著Os*Pkb~#Sh$VrC̥iMnB !kZ!p\TDND糏s0;j@D?Qu|{{{[6Ϲq ԖKV5f\s#Z)dTFJ)]RJ1y.*3iι0s88D,Zs"BL!Og\.˶ቐO?3\.rwtyyyakyB13}u}C Ul (Kw_2oc"j@?=E@08̦BnUioWC= cD"k < ZZEC!&`7 ۛE3& @UBPM 9@ LWϊ)&*b ФZ ȳXBhˆb APմZ*Ha9gn7kǡFDBf?)|>3s1F@K.JmaT"50s!<CJ#ˇ{Ohuw*<ϳ41FQ>g=Q@)kEZk}ǔi:v/_">}l;kܧ'_L3"$`FRB)E[[\x?ϧp>jF4C.p\j1F^b:' yx\v0ZέFۺ16MSe.LEUqBvw)%Q;&N ^WuYԈ cujh뺻4MN].O9<8k(y}\DBsN)m Sr"l5iM F:!|H1QZ Ж-p }bAֵ~5B-jzͅ8T-mۀ FzU33pኴ5S6$/ V0s 97J1F А.oV L``j&` D8;!ak]Q 7z4_Dd`t_! !Q3SJ"y v1q3Pn=!US-t#Z\6`5=BXm˒0R8@PS@(<#3]=.<)u:SR98j&JDB)EɈR׉<"b`1uoOݖ9Oaψ|7a;Ow:>|.R2v,>ͬ:' aͪ70ZK&f4UK)f"WAԷ%?qIDf hO"9@D&K-fUuBD*ѶEZActXcQ¸ "5@R:Ҍ8r Fgs.֪j`đb *~ꑜ90k+ @1TL}!sH껾0YDMԀ(C 0C>w{&z}|D6M# cJ)=>>ÇZkRr"*bfO0 HH10 Z铙 ̎ǣHnGViMEZ͌U3"v̐M MTke "N\Ji5-83sk'N@5/쨿q۲dA* "d4v C X kʉqыrYkŔ\\aΟC.Kr. p=?_^nVi|,g_OGDVky5sa/Yi.u]9+0 PZ_ /1-].Ua15ЧЪ^S5u!}l֒l 3{ԓRLn&0!P.-=ZkA! Z9 hM9yFm-9w}`ti6rG<fz>U"2~kL9,JSʌKQ[w`/ zgkMJI9gwuʷ@USծBrfDA~ \~$M/cU:)\>jSqju%F$z@R3Ppej}9s@5`VJK%5 qYy?~)s-9 `dR Pa1F,,)#ZU -nOrZ1%5ćCfM @ZZ&{IZ-Rj\@D4 R RkΓr{{[O5Zryxx#Hf D lL߿wyU~|>RBιRVc|ݥb"o~/zzeB"Çspa4 aNg)vmj"a-֛f,rsw;})Ń\xU8 iO_~mf!%֥~2EȈ)_^^[)gG[;[Lu_J)Lx,8:BbIDSߛ? GlY y,85ߩO]5wDzgD|zzɎG~qg߸7Ɣx֚.{p\\x6<e> TC7ncvEsA%c;m* oX ~=]DcŮN_Fw8HiD#Ơ*WB^׮)ɅpApe^]תaխLuьXFcl %4\]jvhLȄF]d @L CLA8(n<ʦdֺzۆ!56ظwSUTJyM8liaֈ@amn[D!CBVj!0/r ^LDjoBa~9ŶSU3 Hk fc캔bjZYu*2\!t9_߬Wh TA:U~X jEXSJxG9g۪f^/)au} VL&xKZ߾O9& CCBZH4, 2J,ZD,%D`9w]V[cf5._cnZ5%M>y.IyV!`D77UZ\8@4QSJ}?D%笪)uMd{@@Le!eI䨔b7we0p VLUMq(Z[p Q vuxBǸ1aH1tZ=sӉw﻾k,Umg,P5b"fC0Ui µb|=<݊h&5E 33pٖ7r9r\"BJ+E+{ "zF|޿HDUt{Լ '$7>t[:2I$BD777Rt~7uVz=_ޢÃ>K)S`\QUV_;|yζQhaf_1h9;)G8M1Rnޣ(r%d777Bϟ/lyFUṀA]._i[=%O"}z:#vNxd&jD N4y?ϳKN[oqc 6h."jbDK.XkZ>Zi7fV ##lVpGvM3kѷ5bѤ:^^WW\6"6tYՏH཰VT-!MMk&et sL*m,8 4DZUf@Bʌ[36Y(Mv-HXVi{6A[V[c5' 3GۜZ4K3`Zk֬9T] QDviTlehLD1v,+E'578dĀd|S0Y0@1.m7 ]}a/ HH0%kϟz ]E8!bwG.-d}SegB%@] !a^^g0"rUk)%U0T0iڍDR•ٻk>~:u(<]0p琭3j+[f7uB,URי4吺5r8ssgoyp7D8ϳ.7zٻ4꯿ !@ " *a\ |>#yUkT~%#"o~2|>n/dJSE-aZ_~ikiܝiYs:M@TJ99f&(sbL)u"Zz|Mk5goZ+87f@jӓ+l}St>_^^yo߾|+<-goX嘝KƷ~qTRY3$N) @Ns v|"]9uD6~\_DX(\޺9q֚SYO!D6CG!RPxMq-3;$z};iD|"FZmsxkvE!jh&fBhrۤ6 N0LjBff84Sv[\L]׼m^ Y(Ccʵfzp֐cEӳ^Rk('RJ!E=j0]{8$i䴥雤s]Z=ss*,E)OL J+TմJaVՇ֮+y‚2{IKĩ>4yldaoz-_nT64gWmd+ Hn֛Uθ9*b'Ѽ[h3ӸF{odvzƹ7_9E"UԱWQMx.!H<8FEYRBgg:v9?|<ެ: 4M"8PJ)٠o3}ZU5OZ>~saYu"M#q CZ)<Uֺz{5/ED08ff̮{ӼYdH0b&}3<fuHMsnq|^gj-"D %F;VK) d5hB)xy~泓oe͠z)S1k];6Vg(Jl.Zp9X!pX|~yzz#DL}/]SlmWupeN'"zzz1A C~MS3Xk-p<3\4qp/C|>?~9?==C`_bN^r._y^@g ֥O^}Hׯ0 tY-Z}u]mmg[TqzLrKQ8s:q5985w]?q4BJKؚp뫈˥GY<O_/"_^xfwwwz9\>> C|,BLTs&@<=#y3ԚY]a8t}S/"Dy4c !s.~駾iz|yjǏ=4vWg?|t:ý}i+j|𺊋B~mӪJ_Oá& )noK+Evy׷i}!OS? _|1~I3 1P+9w -߆|wwb ̧өvۇuw\x>g8$VO8$rEW%xn68Wwfﴡۆt w֤ܿb="ԭ!ŇH^Ċ[z|E]z͆.gc ZJ^ZL~ȳy=V.aT`l` [ ߿m0A;ehl%Vv+a#+sٕɦӦp8ظ y9^ 1/\uE彚/K $B7knVNjficF$=]).OAXRS֬_Aȁ#oŬ*K (N|əIJRּ٨1#R kbVksR3ZM̩vEp݅`ށsb̳hUD,6Rot ;3 LnQZ@b!E1@W7v`yj ]nΗYnΉqϗ a)aG6. 9nhhh>10]E8]!`.]w<\bճz6os& arf(Fź(zOZC޻U6ur93_xYc<==RLjH+žwsQ)v> ]Ğ4y^Ft: Vx0ޢ7.PWN`7rZץ ]o V^|M/o^ew?Q0r{ML.0@@…!`b_1$\[]k"oIGtJ%X;6C>7u#AYf:ec"v+2/W bqnY@pd<_&!nm=~i:y(qDRGymϗ44$@BMG>x= ";svDˌ^y|}&3 r7V? .W="RR0bET yx<( -b(NKs29\7fwLSu93 Q1}8ܾ^ )׵Ȕ3]*R t:^1L_2L.3/OyRJ)o#n[֭(qw=^7$j3U/6VQmjP$$3M3-2tu57Snh`L ӵ4Sdm,[L0Id䷿Go]z{7sTW<([bTڽ CT @~Cm(4EYj j-dg2+P"*^L3^{&([n`1&--Y \#;붊??Aĕ׺ά49+H1dv.B8$5~KnGl__^t1D\Zo)yOuC؞! k~عy><<<vbjx#qG5 P)Őcq8@IHDUϥխ՟l4www'SJr|s5SJwws^Է``)D"dpW4_~v0}f5g8%&, $JJ/8t:~ۏr,u=" + 9, q7t|t:U~Pkͧ:]*yYt̑VQT$֜+9t'F7pZr.dQHU c~L) a"~?~/۱2P+Ƹ9,9I:c8xeCO5z}_r>@C?!NL̞]6" b/idg5š첇T놾=8 ­/C IDATUڄ_"ʵYc556D *xN[{|;U4!oZ˲r;{1YR9-7V`yk&(vW0¢x<3Fu^-NB%zX1wIfRke"X3DC$Z& "=UbR._UFUS< Cooo ?v駟~;Ԕ +"#Δ˴\&@3ƾ#f!DArZܝ̯Aaa畟-] io}w\./_ #Xe|>@]9p?)@Hc~zgߦi;/K~yyBv{bE68,$ri:js&~zz___`*_R$咳er1_at|=.p>j;!3<$ƸǮn>=fOdeY/-\s:~E4^^`3/pTg܆6V3bv/_jیfb7Ypk~RoBkd*1-e޹j@n8k8n@B ][gx-rn I@oN7lۀP.U ПU^oPl "E4pbXÊ'2r0H+'A^zVbRnV6_/H2p~ rZTUb 7 fF@&J 3D$$"nb[KEV[z)c oH)G+^6qsRvc) V9Ni"!)ݼ$#421~nC#af% `jCRy }lKjLcΌS`؅a1*qxB]7 K;ӧ-on)u4 @+.fЏ1@lV2BwRU1+(!GZ D ^C%z\  XܻF RM {JYB<10Z3Tw]32Z^_>t]pR #U(je]ZTA G;ooo,,}Ro&Ү.RƝ$#|\.^Y5NٙK^\܀6<=ߟoOv;ͩjnޞk)O !@JDtVRiY A.x( zؽ|0kW '"H@2RZ7~wK@cG[5lK/u{oVEC߾5u0kS%6mG51 l:rDZ/=66lmh V{p nhM CKm(JR׷{{y]O!u9gcYiAC`2UVUP  sD4j]7$\V7-ˈ1ƨTK*k !]jzB .Rvi`V93\7k\̌!)j^]P!F ̴UfZFUgAX}OW`Ҁ$jXUVnyeɞu4-jURP]iq.<p!וC_J9A)p8*0H MWPh8`@5ZT!uyY}*7R@Rk&21aY< ʬr쇟\RuOΥZ 2`vRvn*>~|]ÝmH]gfaGo|>oDD㏟?~.@@MhK9 D0vubҮlآ޽m.i-v]Yw1*9㦄9!Ood7\rÞ p\܏Rxo^Js{pM}`Rn۝\s<#^r9y~xxx{{{9Rh٨]]fLOCc/`9WKeydf5R2.10 i˔G؀ޟ޶_|eN?1_ s^ Jo/_R4-LtYJsJRmY/?qǷ0 {v'Y.sk7ȉWyаM/"/XyMeQw~sWu1-˂10O璗y883v)ň&c#1)) t j"i*M0|GlBB"o }C5BzmJ>Uפ"^iXrRB)2.HU @&O0 b LLPUD(g R4^I0h!;pER)JH^pmHٮɨ"maEKB`^!$Yomn]dS3U\EUk5쮛\J- sS pYT0ĀDUj {N|ӫsX"!pe9|C&!MTׄsSH01vKhi.AK!ތ#saGR%r{TѮHT3Q>>Z4M z3v;,M3"ܸ,eJ-VUU$>ĈH$je")wq$EÇ}N' be>'auCvw?o֭;x83@Q]cf"ZoEQs9#N/_Vs[)VB!a  `HXR8ݮ{@ZEbΧj=ϗ2q0 JykI|X׈m A%w#S zȓ]glZa9O I/ځ&l}˧B\ƯI:"y6n+MFIkG9æ)qc`1VwS;a`0q]/(G;V@܌%#rDm5%ڒKQ ||+dѳ1trqT]Viw \r_sa?N4 C^y^EHlu/}ݸCUH%>vͲ*UUjEf/VC0Ӯ @ u4 ]RDS^rWo nd`vz1zV{}?iʯl:[-+vt)Ѿm~ /E~m+"*譌amW|5{ߠWiDu-7YmKOG4~Х CH`*"i[Ӻ&c2V92l>tmcyyw#sL=phkl6QkWi[E06v\u+[oMzˍ2ϵlpH6-fMQ^@ET%VyLPģAՈt25ne[m#49~g91W )h>Kѯ9wI^9s/Ek8wLR!ƸL*`d *x::IZΓrZ?g 76К-w ~9oryPu=8OKAp[i5U!r!"/]P TװR , ZcR<@MtkNG*\.ɺ T+V0 T)Vqԙjj1eyu~Lw D@UnWT)k pt F!%\ɐfR+RC1bX/K 1:Ä]Uq!伔bp,u=??ϧՉe"1?׿iϟ?>!Ck\d"-z1[~)/~tRroЗ/_]SDW>/Ym f9|~xxp+S=4g"-Zq7/?b##j#["D[q"sUގnHh~=d!pK):'ퟞfj8Wίq?E(5&ٝK/b_F:O׳f-ojw0&"7H.!@1gU@!6/2g1.@- @DE :MSH50Zu!ˍږ/~ۻiaH)}ScxoU80w!朵wJ$F!ƸIo}ACmO8qfH"ZĆfP!Z 0a+:[֪El^8)?RouY9FԈSJU JHl)x TCD 3R}t˜'2? )z=xww[! b*e^r-C!PUUPA"wwwre^eYΓEB7]RkN'ZxKR >}rvirV9OOO;3if~/3)lѳs !K) zEr}bPF\{W"?~,OOO}]#wә&5AJ/KGDP ʜfw/TkC,־W5g1 /}pO>KixmI:;8 |%( GDv[V> NՉ _cj}7湗hUUK45Ss8KUTi3W** ~zI.?5 x6jv-k5kjc4u+sK7p-oNn f[M0`]m1rGGB1s!!p8]Қ T7ʬ8n#0>GQʶ&xߢ|mMQo~;K˒s!`1j꺔")1iiJøB-RB1 |D#V+2~>E5v^f)孻;^|6-Tya촊2/]䬢**2n}< iァHZ S$&DR1@RB zJ;W1F L !J@b8c|>!n uq8"#!3P )%&r_"#sOO6Yj]Ma0/KLQVU^Jv#*q|RB7T ZbRSj&jn+̐?|;t}wR|@;$" v9/KR8 ?|~ͥt}[vt׿^.O?~Wr~8,>~ǣ_ɷjEӧOo^mN2͵d[9@r1[/!uUr1 B\exu ExM?Vma!\˼K^D\h$86\reQ f`Rkͥ5uq'N3+_DޞV~sO|[n<g$i։7?MSKtΗI1bKZu `Tj)9,V"WC5/K-Z|zyR/U,YJ|ǧ\d;rWb>kuv>yںѩoǣKgOǏ>RnnfsRw>׳?f~[NoVv+mi7,'{'HśBYozM6[W ޚ|\kb{{6m2OȝW6Zz1J_ij~:VI %oJx~&Jn阷ᵤ4 k# pp ʽWb Y begJ.9ᶔtJ%7Qo!AMsEl5>k%P}%jjۗ:VIW)` x ֽ߮!UlC_Y0HMQ{x$R[\mzËecu@OZ+@l5ww UKY*4p,eIj:- rJx:M D@ 30 u} cfޢ[Ǯ}>XJ)~[B)P(w@]G+]-Pk2`rշ:U-EV1*B$ &(kd\p'Yr>IߗTۺJH #0_F[?_^^RiDa9\J?ޑ8rڞYմVY {EU 3RJ.%4CD?n\.|@6\Gad88\<]礞/Zԗ[{g/G ^KF׎r۟"2 [ ry/5~[Çsp$:KGġuo//Okjw<=K8Mp8~JΧ>/Ԝ//y7S=(h:BmC?GLOoxA@v15w)eP@dRj]eY2PE3=>c,a(Ey-.R˂ħ˹.K-b2]\r! BK&0 )0 !&-1dk{Û?z<߁Ա](t;\NyhfsG?*p4Û8 D݊1s# 9$߬.NGHz"fFČ*,E*3P0p;: *\+C;-29o<=- *J-"Rw#Euýrek"5?i`@K}GLS7c:ڀňL`!E+Noo_dɵ:((2pxxx|{0E9t&?RO*zLo|~O?]D><<|Çy~ z5á*Uax~~e)93aɚwY;"pgF܏acbCݸۃ撃i~W h&Z9!UQLM Vn)SnR FZi4 -ȋ_ǭl}sEJ:9G.9NoCBJs7 (/xw4# K^2Msդ( @Vf&5 }L@".,2 !WnWtp8yF,KHi|qa쳔"EL -@J- ZtvSUnʝ*ob\!9_e^re.%D{յ!e<|"V_n67wMk@yu@b}8]?4(2ҫS6gzO|{zp4۷׵ի/'=)uUls5oWx6Y^$3G"a5cmjK%۩ioᷡԟe˥ jv(΄ k gӄ#?UrȬѩg&|HK[er}ߏ2q/-YrD|Dݮ"^9_bgO#gӿ~V/o/>uqhˣo^RooՔßN'[ nGD5%kZU: w]33]A'I'ϥ>?ΞRJCǘySoZV<|<iR"r+T%y\k]Py00~ߡ|_դ"P1\L "p.Hf"R@ @0uK)?Tq&wm_?\%6sT__ǣߴ/_t}?-Rt:ip0 x|}}c^E8a0 3̳-kTg?~d ]k,jzBa~[-]uޟkvG4z/򬼋T2}ai}ohfRO5hm[#mQkJTXl@XjUBbB@4YlE8Bz7)+|C+ DOORj_oF"5C&VQĘ\'!@9`.Z#+5Ĕnmm,*u͕E[>Usnv9K)!wɿ-_06Qߞ";!ig5ɶ/.^YG秗Z=έj&[Mml+ٽNB H}%9u8\BL0Z@ԐCD8/e>U:EJA"n9.LS)0~{uu}_xvbB /sk-"'*žzE(JCⰶvV@D]}IsFcT3?Bf3K^!!aZ|s[T&w;-sZ: 6-DPD1n#ZUu!V0AbLLXJR܍e_BJZ SKfRKRp̣:7yKq&;!gR` in2kXS>Ztm8K7.x<J)8 Ęfw0&AP+ D!a7==j^&XJ\Oy D4 a|D"ZO?= h-JKᰏ]33?r)BjD)%b2e^e>`U__?#rewn R>)~á?_N' 1j?v4j̡Y9ޓVn|rضd-,";b>ݲ,]0 |q'/0-")OsJQgu@ Q63 @ @LZ``\R&e9r>{kۿ|8.öI_cdj6Mkr"5/w a;Ւ\~ezυpQRD@Gg yW8 0%RϥRR3DsPJ͗3nt\bJ?~}NU(, DZtwww||}yZךGSיrRS#Bn7c p*snki:]Ɇe}gr5x¿)og׾,mn]({m{U"^?wmS+Wٵ(uKuد+5l >׻7m$ٞD{5?δDL`I=6Y,Ve"s~\#fiOlvn/u }L-l;b 7[ZeS=umCajZK>?sM.UHjqޗo>o6$ƻ6A{E =ŴZl@t<^fqzb~Bn7.XSSBjsm>?n@U"Vk/NZeP*fC?/b?t^Ufx<>|D(f08IZi *bJ)#P: 9%'R |^Uqj6.o/oy /G]9qJsG;荓eYy7෷eYcιr[emյb'cbxCXJ)9.\`i<Ҋ6t3Υ@)s^A7EVEDl=#![[3AMEHk-ACF=?Ȭe&Qͬװ}ܜS3R1pj4+Dv.!t #6cb(yREBhXRh@”cJ" ̥JK)ZQ8WtT,bj=k(;!oRb1_WҴ֦Z5b 1:7[%F!C2MBBb`U(DBv_( !"zHd˞^Kv/7W;B\ P`D"d@ijwPŪA؋?D90g`8R`5mJP눙VOJ"轨Uޟ^h:p>Ӝ9Rp{vN~}0}< ʊ^a;W!sH)9ݲRKmc#'S]eMVBbb5Np|!!Bt(sǃ 0 Sꦷ&r4&)1Rx~~e&1 p<>>>>>=9ʎC`E !g߿7ԃOԯw}3'*}X=Hm2zݦ9t<x.UK.+"B7o2ϳCOA-l="sjwwUCuYb0ZL|:uYZ-4I!0ϳ!*90h\uD<fSDUDE>'D  MZLTLji**bn!אq}~UJ) 0<)Ŝx|zz:NLX9 Cߞz8;3@n?f\8 "#J+Mji Rܠ.  DC@nqU|ڬ5$!Sc9H @TL(V( ĔnZkP蟝^^^"j+H; IDAT<?*vL/_~駗׷UBJ,)Z\b`ZZQl2qn;b G(m+ON?;wsu-lC 4xL*Drw=Ïc\o9 GrčWnCLF`nQN}MvKDUP P:ʁZף .ݵ}Wz\et}~_#9}ߔ!Re]s}<""k[M֪A"@ 眆cNW˾fcJVA|0ߵ`g7,+ `c_WhJ!lJ4Cp圑ɕa\ROs|~yyq+NZdŅn7U!ۆ֬LN[M myw[sml굯#2h[_$=$mJxW?9BZNy@Z \_B,ϯ/66~5&=1F< T %)%-m1c 1VO`*̷Pj5S4񱨤ӧ|^(xiص=Ezo7Dr^o4M[x<#gnc~*n"@{㠵fOD4tx<4uMvZ=??A1o`Oiݰ,KYW[p;O@!q#<4);*!yRJL6MS1 CiԱ*ϟ?‹l9Jw.ɾ8MI6B ty*jHCny0 {oS%U44 5\r2SFRPZYĀBF9k)1q9?D4UZӔm_~eN#H]p8­sz!Kԝ>goIr?N;ņV;˞TԒf\Y;c Ezex3p.o֊kWJyƌ\ }Yr6G {kQt룷83t#@Px0QtYD*nb6Q)UV_ |?Rܚ!盃y{8g1oKy,^usouyZX (de~VEdnAU0A94MfA0ۋa1U|hrk:ܘ v]W~ϬvYޠV?Im~*0­6ztrEm֐tX0){=ګh5xJmI퍟U/Uw-t ]{Y*9]1nT=ZFD7.T݉q;o_?`l>"|{Bm`?N˲,s>߃CVm]fl^JuWO#7<\Rk\@<#no}(#ɧ|M_v8_ϲ,K]Aw'E?uxȸOGR*=٫km].f~Ps⮬ެup;+3ys&*O>bp0m%̵$FCڪVW9H)H磏S㧇_N_*՘ڌQl,a{b!2!Dva#{x_WǺ?`Ux~8vB85)1SL,h"FG sPOD,cBU j\.1+Hq9* 7Ę\ۈb5R[zeȼL\V,KsL;#jZ`T\ iZS!2hsp:G(U 8a@ W !(@ɷ|LZbh֯_C+$EDP [ɋQv2|aU}q˒p{vxMct+ A:>N/Ę7b '٥ s7i^__YjR~Dۍyof~f>|!E';YX?q[+ݽ¿Gĝ}[R}hU~H3U lMw H@m̳sTA0 =l&VJ| ǻAGMRpŅ゙$k&r>S΋ !_&fNѵ^)l_o^fi];̺*ta{+_ߪ7a-!lggWny}ܿvV{4ee3̳} :ӣl;{pty-]?V/ .T'o//<К{Y= >>"0ߞo7ւۖ5 yim{&@Ou^Zu'bAKafz^j///9St*ON")ϯ_tCvy9OcKC> x䯗wwr}^^A1ff+8?}EW/// "[N!B1@Ȉ<U6r_0LpVPmi0O4;ռ+~˜-Eª)4P3+=^hEd2CBih"RhCu75Dzw9ӤۺQeNxlP4+\o#'Q 㡼_\)ZUTc@Jj!J^-1BE!ߏr֞>?:a}Zs|?ϗaɉf:Mx 0G3 =fYJHaJ^ `YyFO>9ͥbo9qtM{k|>"՚ GUnoooX ryoUuǭ`FՋ>Tf"UJ (Nږi&@", ź.8Qy); Jq"6zl SL)  L bqRrGGVEZx)!3R,KJQ!0eҐBLD)1恐iRjYb`t3&MT4$9zi保ITG lNjDq1^^_`H6OePQ*cͤR[C"31'Ս1DϽD&Ch*5k0aOfK)uk Cbc0Or]K)DaOY2V>>>9er5t/UT~8MrI19j~_H$$f2npq4YBRq2VPAD Rnӻ֢ WOmP  t:m-F6/RfՅt8<$J\/0|RR̄m`!%?Et,689xR[)L9̉91e7+ ј8aCꃒݟs }#~ `<{{~k_ۢ{\>\@mqv_>Z\Ŀb(ʀa'Hk@\<êZ;t΋+2G$~mvB3sO5SE!6ɮ1Fϴܺ}MOhov?vhUXzz*8S]mk'R3USicbUǔ2A !鏚VqA~w\f摒^k _V!a}uz4i2ɫa7{W̖#6C]J1!֪߯r%4߇DmYRfCUMvyyRiM#sh:%Vꤪ!+SUUcH`Mţɒ'3 Gp՝*"0G"Vi ԄRe:#03G12sd؆)e$bԐ6r0ѵX6@2Sсnl*ҚJ)_ܘ9pzx-3[[J)LMj]n7xcr!Qk75!`!pMr>Ӳ)03ho`1< 1x8?|BPKlվ?<<?y!p\ V5vѥ58ux:MPnބY+:8eC뫏2.be_U/'LP+G4.@ðλC ""EC"@m&JD>z#AȁTE@h`m_@NW+H^:J#XYj.GsJ[<uC3Aٛz.qE{0w*$2j ˩U+I5{YV4OjAv!!iemT-T'ҋI|Hra6X^NzzzYM9ncN1 a91Qi#"i 6OR/ixmSBZ)R8@U-t̮߳k1rpe6K)~O:S0ד8#^1&<==˳jB9/m)ExӰWx,Vېx&%qU"B`Җ20[a.!Di ! à Hd1%QB)gt'Juy^͜-]ڊ!fwDE2uEq%ei]@BPyoZ rmiSZ3TCCh ČIB$bК2ׯ_~"p8oPl6ОtMugO[̧ﮌ/ooKΞz2VҜ.Np\pS@-: i=Nf&\G jP ?wXsUY%Q~8+WLP16ğ?}9=?_D W,IʼI|>,RN?4~N)i(Z^Z&\t!F@WN|VU!,znnB`LkgdTjk~p8=X}jw&Q,X;oroԻ˸:֚V qtL9̫ܴC.r'S'?ΧLͯ^YBXK U["PeYwJ.4wv_^3q02O~1DCqYH1"OT(h'".Q9r>#]i592Zcv}D)6bZZxG|]M⻝K0{sO(Rg)CBS} TZaB0 ФJ%pƄDz^dD,@Tdf ikmƬښg/24!}7dir`JiomE*PĖb&"1X7ՅZU 3y R!0B7f*4*ruyKC;?Z믿'_RZcnN{^_A7dv[t16SLuYz+Z+NB 1Z56PCƨD{F7RZV*RJiUjYZL @R¾*1QkVUP)41  /Ĭ@|d B!~9/3"~]Dp9|Y"(~G74M0Ml9W^.kbrq@H[k^xu鮨9wH VWg2b&p:=R& pSBm@)ЗIU4J2CCojDQ)sio 1*/ox`4 AZk阏!k2ϳZa<CV.d[)zEŭ_MqyD=~/%;`]ڟCRvCx4[}XNIzL@X; s>qJ@i7U-ѐs]"v2qpH5ۍ׭ ^h[]9/.QDݚo8`LnNn>:^fbLD=)'/Zkj'>%%N"2#ba IA6L~CW '/wJKi?]GRNhϼRCfb؈mwx$c7xzxZ97nlꅠ92nrUNb,I)%}̥}|É`^~5hfooo0Nv8:Cm70xna/taaXjR "2 "2\H.aTJA%@YnSDCRX.sSJHԍehRt:TUC#(䄈9֪  "s!^_ `JiBn)RyNҪ#(cT0#0mkJ!MZh@2!ASrCXC"#uTY"P1K"D繵bκC&,YSD\>ᄑe )!q;b51V+/LK?r2s6v<P,``"TL)Ŕ!x<Ut\(F"qŐ:`885d׷7@Ȼbͥ_FH*|ƜI)iVo&a=^ZZnI<>]PL4I)EZgP"J\I!փ3lmlߒq&#DLZk?ZB QĵsfFV\n8Q-EB 9f"؍넦u9匁^[("18Oc6=ikt_Z֠61>>:""t5iUTtu[s]40+o>vUS FU^_[d=:E9?V9Z=02{#^8֘ZxvѦs.^7=ܿa;7mf:{GEe?^6vEv>~tU![\__:@qJ> fv =~5V\bXe=j?=D]{߼C(e˝!=Cx!յuKTE|> c,}x>ҙcfꘪ<0z9(3KqC!_.N?9rg&]4d1z18dW3RJ9´̫FbKagn9dG89y[k^znJqaKd}C`vɝDbJcɳQDt}k *u,i@bh(ƀM6#_bJ1TS."o ӧ>q<\Fu\BJ`gЎ:g?ܧrvY\9/ n$B}V@D!z}m@§'?"٘aHk<;E;_$WЎ`Z``=`Y6O)On`^[k!1!%L Ç%(47 >M{wm _\eLN)$"v )gIh:_A՘ {]sNy޴nDH,LsFB][$\2/˲,nAc$=|6|0UnXR<3#s<}jJ(NӇi ٲ H9$%V͜RJR[e )yJWW />~*Z\ת,IJ8ϗVspؚE$IJKm$A7S35mm3$&QFX!?mv{s}_wݬ q]zG \1*#uCDqp]`{M1MPŢӎ!b_[G$fT~G,ua;R1R^J$JqJ)`{К#2*D&̯sLocr(Λ"!߇D,PHŞ+R j<8bzRϯOO>|x{{Îyǡør;N}~U$.q)GH֚Zv_v$̌f}$|}}̜ZgGI2ܡ9C ^%I "BeYq]yA& "u^ R$rRbf,$NĆ@}MI4u RWhq FT#=uml.!l^ jͣvoZ ыw ߮F&0Zږ5w E2>==ESڽ֪j40 p0kkPJyyy9܈Ǐ5y]9#xXeѠX(1J:m[k;0RrI .3z[MSWEЄBݵ֗@{ Чz[Jr}BDOOO߾}_G]>^.h:LaZJ6us7n0<=eX5hMD8 Yk+@) ڇ9 jH,@d(:Fk!QLMD;0g>6К̠V(Y8zxt c9?>Ӣ9vUe7$)2%eR@9Ro= 11;CwS6=qm Ex1)E; qPU%l/^\[9OGr}˕bhf`G8"L)lh3D0]$)3F֟1' K %NaHZ|y"D&$sJ`Bb;$[r)a@,B) ӍC'/>&\G*K:64Mi:e?*.%C]!oCZ.VHf[@cۆd8@G$"A,J|.eʹc$ysU5eO<آiCLGE^8ٞ7 ;~yݢ "`^k+eȹNym+ ֺH #9WWWE۷o/@45SC[zzzNCL\J "/Ǩ-"֖y!ĒPtͷu]eც(5< v:ֽ@7AHlD`!JE,9֞^^^EmYx@@@ S)||.j>w OTk%|މ7,"ڢɄ IDATHJ !mĒRJVP͗$1d7[X;0 >}J9@m[Gl?k{ww{{Cu]i hi "OO y#t8HZk2e 3[Fe4Ʀ?m&?JJϿ9iЏ ‹R{7w)ytxxxv=pUP[5ɉsNЖKkesu]aݍ[=9O meœX2 UN)_^^ަ)@4O/)CBL_~UI#o;g:?֑ituIU߮ enZG M3:2dLh*0 mmdEĴ1yRN^k@8<~z/BNL!5 "% OyaUSDSB//,RN ԝ9IK457wb~x|:Vk-_^^e=T;i!eޔGrY?GKwG "鏎K#fGCjs?zk|D}#3I?Ha6wXv{nj=BDD]Y͞v3%*_gFÌgfwl7s)gQ#\efUx;Yif6t_pq ]>ڡO'pc u+L{{QL@>( Cs)4 JiZiqcP~)]{_6cyWi|y|vYW1?,<%0,Ӕ9y10]fy݀0s\C{.{_.x4Me(B#v@SB,#Gh@8n?9"F6t:b>L5Q]'`C%" d^dh(@E@JAn@SA#@$Dau\D;d8]$O8%DV՚F,w{bfFD>zU;oH*E6Y S"z]z3"fI!Z_ܝ ~AH)k4uDmBhxhHGcZG3Ďۻw%jǔהׯ_c7İ__^X_G&3}] uwnچ朇Ruu'r@b!楮۬}'!J7{Jy,л ߻8y#[/p]t;C1XhYV3%2\!OQk[;zoA?8_eq(DښJ)!m# {B+xg]ko ^nqHH࠽[m HIUez]Yj%aN$LU9:4/k\4.nB 6a'rR`0rNOe8Rv@ nR86n^1|N2Fko=GAZ$a%켬@CtXj.)@kzwk]ۭۛU%\ y:h^lf&Ȁv\Xd"u]|>=<> kkKao7*V[f ti2aΉy]_@]!LFc4|WhJޚ>ï_wƔrm]{'N,Һcy-b!oG> |>_|զOȔ4L$Hmx/"xV$1`O$,"LL,VJ~bP2!zG"R*#aI*4Hh 'a ?#rڂօxDV!T݁X0jGʹ Kjf SYk240ӔSJ9'Iq} 1~Gݗ$cY}1̺37=?4؏/'ki0X?Bw{y;+6'(s֎HYf,ߏ ;,Bdeǡgxe{fA SS콟ˑ]:{czE ")qw#zin³ޡ:n `pi{9h[C-w4~nEޏ(% h#+98޻;1\qϜ?ÇC95d2zXAT 12}9oW}P(,00 >;(fEЦXB&w#/H8@{絔0{cz}#zt)#RKW4_3bRJy|||}}=yRR)5HN@y7 w2W08YPw=M'%2"=v;B0uo eIeDȪnMHЁ9zL̓{18NVĀ @ɜP 3I:$,‰ DXhz]W=)8i>_n {0ƍ]ErT#sk"5Dˢ u]%kjP#`Y` 9{f)%?s]ATjU5vq&avi*/VkWsJeu|C,DDTrRa0&$0Ƞ)& ʒz,#okFDZ[>_RJPkZ1403`]5]5FmպB *ͅ(<\=0n9'D CBNxvp7ݒIJZk?~8!{L6'RNE01i|j`W79w@bJhGw5q)[G 2$F )̳R4mfD+$~ЋyҾBjMzV\xyh/}nΥRnB,w~.Zk;0].iv`]SJl~s3 B  Q}ZCx^d=ȿ0 ]EmyB¤nݷO+.!wE32lhV ݽ# "f0WS`jɅs ~\`xc+w5cLOq`Yffyӈ,Ҧ=ƈ f$ؗHܡ5XAeDso+Yy̭RڝfjJI$&BbsU)K7}7cbAbWb*_R:1[84ݡ~onZ7,)`un۸twał(be13$)ܑ*45Kà벬Rk,)ooښ ^u7SS $4kWBRVw+SʒR.֛m]a`BuK)B6#qLȦfM ⺀0'f2t.\NqtO :4޿in-t;Gb{w6.NaQۘX apu 7w$?Nw ޵j;]nHHdsٝJ,b7:t "E{b5]nq^NĺAb|8 h?C˷#zԚ%+ c`w1JN):NN(!E:P}o*WF{a9gt'i;;=&|ZNPC)idp8lw3\[}gK:Qq7Nd1s_>`fN瓛[kmo\)EK{;')jc=s w*c(fCnڙ%<].y(J4G 6>q6d7͇fWb[Oӑt"]u}~~fqu][[Z% kQCg[OW%5ijAK]y]׸KoFJ=[9jQR8KaWwޏ+mEpa`ڻ##2a"H̎ 9;bt@tK]74ǃ,)sJhs0 d {P2ڀ%9OxQ`#NA}cnprzu} c3bլhߜt4h“Al֗%TDz}l=~y9ДRJy[JfɘVY d;!xr)9vr)֞|xr: +2 qz}{} tveyFi`]T̞A姟1s~Un75NӗϟU-0i:ψXk}!.3{_QqcO,5ڧo߾}<4rZy&bϸЖ V&L潛+圫p* SdiFtU]͍0$ Jvs⌻U:O5S->*m   g9 D7L 12u]"X UX9\طԀipZuZXLaa S|A[;t;ktxV$ z"wKHۜ iBh|(SI92 eHbpT{ƥ"Y@q`u{Eu~N_UK)9pS* (% AcqhZmKeihj{<,⦖3\a$u߈mdJal n[7ݽl֐w Qfzk,HK 餜WU< ueXZ55dK&FG-^+2lj>L6yV,.SWmUk\{sHL?EI4k]e=ko! F,˯7zѬkWGyDec(./ Xp` _j]n]J)T-ۓ0I)$-Kk,9PqXJ4Mn)-Af*%omwSN8OiN'f t/Mv"a&TJy@i:# C!t׷Sur?~Eo%‰x^^$"^1 IDATR.֮Hfj]i\. !N7vn.~:Q^+&aIl⭛67W25UM"Э5:/[kmYjojuA[@29g0NOV5 wNVp㥤d=yރa@7&4MkkOOO0ryY< Td⌒%'1p]k]JAuy `dl{k7'f~^hyLL<֮כ2f %Dص'YynX"#;7!"s ґ? E WP2EjOSH@P}Eӑh$뻒hD4b:Oށ1$M0@»akJ̀c`!I.);b.&awWۼ2LL=QiI6Ntc$"("' XRNH7K\e$a@ۭ'J%Wޙ* !>Wfb&CwpNi];"  )#q.m^l[u2 $fy]"q2 |qm:4Z7<(Q'$zyyl]+k`IauńfH"@JD4U 2!a|YXUNףWXWks ڲ? )$ʼnQAi nP800- 3 47JpIjtH}IN֪Zʰ6Rb.@( YS)Z.u]To1h!75j͑9'U{jmU뺴חe<$!qv{Fjo̠7`<>뢦'zB|OSNz}E|$ļjNH)e@pSSi*%YoxysF_L2a6&o˷z㇧8LLoo7hZΗ/_~]z͖/S.7x~","4^X%%'ICaq]8\.חחOi(Y5l!z}^KSn%0IGe꺾~1ޗfi(QVoo*43&Xp2__ ?kȒRqp-("ܮ/0x^]"'pye9|<|*Ǐ`[xSIuN%5^UZ[߮1|zD6o~lLw?#˕B%w"?~ʛwZxQGƗG}w=@>p+۔y׿IQ޿娼,|wB8R5O(MvbA w[k&zk߲%M$H0Dt0`&D2S 7ZPk]-PgȗNm8a̘HbJ<80 ᐊ~#'@:|A{;tÑi}KĶM$Y mJ  eQDR7H#b6ĂAf D ¿k;q&#-6$FyBw.cG,9kD/׷A62Ȇ wDH)\R*C :0ƒpw̿o992?x %M\L8M0f |jkn;:hAt$i&Q3u,`n Eos"s Q0 $WC@&D o(DsU1@[I=182s@y_aX)pu$`2r 0䈺sSޛ7@7WfCp*D\)Lnm)Aɉ{mPk!bN%%i,}Ma Q.`%ܘkG)ԧ'1"C; aI@ n?nYb&RSoZ#D Ut:9??lyHԌC\z_Wakf$N8 1!:3X U_E-umƌ<775r)ܿ=?G{ZY֪! ;菴g˷ֺY~dŢ 8><<8e]u]ۺqr;/>|vZ-4tƔ3t +ZF&dB_[dsӹ$]Wp0ӶeYej[ۺ*@ɩ miH<3mn*7ap7 qL?ko$Ir ̏82ltȬȐEVVfdxۡ-++B)Jaf |epw C1EHAkU,b&S" $2W?ٍZ*l[(#/_?~L8 !Euɲx-ʜ1$ /oDm$b 1*BF͚.f)G|^]~ΎuTE>~d&Խh;UJٜ[SdPEP.Mû-N^cӛ}73Vvr Υ,Ď%=ʥ3ƌU̺(Ww{@J7>hW\Y#RW+lۊQ\Ap: C"rD(*hsf,a+4PEAEA@DǸMvQ6ǖm&w&&_C1?jS)P:?0 VIt+{tҬplO9@ꒋw@=K8vY1s훾]5/rnڱnv^vk(m2BJɦÉrb\sCPRJiEJq u&hiZ뺬2?<=@K*3~\fnC\YX, B1aLJ9bBR2:R[ئޏ0p)ԪRB1iR4 uYl&Zu|jrs89\ LkVs·DUaTZi34QEtqwڔITAژ73(1pu˚׼.b"aHwkɲ`:F9C1ZcJr8{ <϶&^"ooo-sk97j__$|&bKau)n׷߿/_ (IDAx:o%p<˲y.ZrҸ *>Fc˘2];Ɋ?j)9;ծo?~Wl'c D, 젒-1^ bt;M)2F(x^u53M]p΋p-Ź{\+sW(E]m#fBDr.0t>S*vaƁv9UKyHBP @.9]P$"4w߱[sD8MU&=duK6B܉?ԭd]"wxb|.9 &H^ 6b}K\B g++mN3m꥽SD]-wYA1[kB䢝^E9IO޻CҘYbK{, }41"BhEd4˧?sNɆecV+)roW6zs~ͅY6jGWC|u\ 'SX,˼L=~XUD^\ڥr{ȝ`mPD؍69b5L3jg^vK`#ץ3Q0Lq9$sy^dYXys0A5pRZ(z`+=-IwPtߨ^Z"Z:!l@U5j}GaO,"`xI$) J1hs$ uE9"P+Z2 M7`M9,}w=lBIIڍӧg眹&˺B)8,{ĐX*eq1HJ\.-uDxJ1R) }w_!LG}|z~xx~\.O^__۫Zv^___/_X5uǧquyyy)q ɱZ؊!a0БAReVmHH{aY׵ZEę]:Ϧ Re)*,T5,F yH݌P$>.Tu3Xmv/0ݦZ *+-zCui-YsQhD0HJCLJ^ǧO?P*u5>u;OoG!烒S]LFq #sKeͫOхW(ux|OUIr5Qz9a ײ,KcB bYew!V!!b~=.ZGj޾~?X^D6;F0p{KaM? mDW;{T ;6[-B.ޒ>{67Ehn.9 ch)vGj,}Pun]µcf5*#yh/lœ{ag[? -pgE|V#"dw  \TD˚0"DH TEKTΪ{"ιUSTfBe;k[T\s{(^>;?6k{f e3aH=9K00CbbL X}ӓVYlef!P`]30ZJ)o?~<~~XRik'b<vv:ߔu]8\[yJ> "+<"G;@t1eY !h~N14V."4b<\=YD@ιFPөbcl^{a,EV䌇1X.tZx]OOOyI悏1e9.7GDk)pDdݮ7?x}}:|>]jL>5i߿7z8um)lM"^u]p<(pH8\. 3 lS%)s2ϐ38Ngmʭ(@EUt+!Rn$,zoOCl-yW> [6ܖ""AXXyR5M/Kr`!K(Rɇ.tЧyp8qܭ#3ƯH Q(FRwßC-ݷ3Sjn{1lHמqը!nٲ_ F{'95[Do8OOOe; u}>b&QT(¦fO7r^u孔_yY'Gi\ƑkFCe@Ptާk^яO Eȃ7PDU||kч45dj}Qe"%ֺ&&m5*BC2 tc]uJiB{;=Xs *̵0yAjr:\9/\ [ٖFDTAU1NyP 8Rz}"h՞Yly3p^ER:E5̪lyc[(kV6F/"OOOO) <_.yx+ח>N$RKnXs8r.o\tr>-b(oߘӧOOao.oooozy-8j/o-e]Wu\.<;"]؈6i,5gxJĠf>u]ֺ|͹Ժ, z•P enGA Vf,"5g1(tzxxxxx0T}!եaooo?.pZ9u˺V$+CZYÐpk^0K`$z||!-F T]0r"6_TB(\߮0ҒJ`˹{ Z^;ёRFZAYȳVXWUDZJZNO_Ns)o/}ZKy*u]\Qڡƪ!pɕU/)Rh8zUC]3)D>;2pe0M ӧ^:,埗C~X IDATl4N_;ՅHWbXo%/37jl?q'nUYk1+[! u'sa*>ٹB#Kl6CvP|Țyi%XgǷ0X5RѪ6^<{jtԂv݉wY6A;גUcڿVgk74?Q͕ "378ߓ *pn:G퓬{&lʵ"D ׍dz- J@.B 1}_ynĩd;d"!΄0cVAi<@4}L|3HhL5??.FF+_f 4_$DN2(fW20LkE-Q*€.ѰZȌATRw"4m`pg!jJ`oqc4@P~v,@>0sZZsޓzf"ꎈc,e҈\ (Yu@EE7L 1ֵTZէ4#@ReY2y 3W{n9Q¥0[&+k 5X@ԘL 0:80a]β2xS G0_zC׵[1i@V!Ã7۠{ iY%N>@D.(~wp$}%"33z=N'RuGU^g[ҍt+"7MRx C)EŮ_h"(Cȅx $+UC. 59HwVڠ+d9軨>TTTr 9|$TV W׺^ߦp–eC. AElMv}5KtK)|ɩ]jY $wAɺN>飆2* =,x ⤽}7{ ^`g+эVox$h֌x7Bהؿx7k wCwGI7QHo,r[̼k 1N'P̻nllh[hKsus{nWy:j jN'i5~`;Rg-ܳzՎu.\d{e@[dN}RclG~϶lt4 EDٖ\w{gwZjpyl+lx4Yuwm>vpUġl}is 1O{YuYVYϟ%ju0&GR ]kc:ftR.Uۭ3U,^۳>h bDE-*#[1]rZu{ڪL/"`_6(o!b-jVq*yȃ <,VjwygdeD14 qk{e8)A). ji#@qL6a.RקǪPIs~r! YD`^D`͐sGfF#y_K5i';)J+X~ԋT;19YEy"rS>x $&bV#ZyAqιf(X Vl2!`3B:mU)@:{rLŞo7^,@8 @u4 HY4mZ-߿U  Q1 p "2 çϟGV]3 " fDkȇRpUD`V@ 1ŐZp)8$Zk:?}Yk՜O@ۓap ArRA#Y(mbUvx3.jY{_'ϟ_^^/@L,6z /9s>1+{5o}۷oj,[Jy||L)]חyY+s2"4LH1p.V+RٲF5z>K)v6įlOϥEyaL㡰 9'@\UY1 ?˟>T6\p΅R*8k)|Q_~y&e>??}r;$%W4LJxH0pj(HA`i)"J%y],E7X8?kYoND(|:sf쀈mLJAug;2y>CNj8X`=<缮KΥռ{N~}/@}=w$ݻ2{utwlwcֽ;Ӓ2ݣ` Z?)yZ5vtZ¬`AU&e&#XԼqQ՜˺%TrFug|ځקõּ־w5O!"R2M٘(;:kdw؝:;)xk{J6ۓo;nx:☹5sԪ̆Jc}pT$g<Ɵk;--rcOݯ*N싎=Z/khJnLqåit{=kΈ;-g~:?yZKe("4N=aRKc1ٝ1>%㓁6ZADw Btn<ƆBL)4ߝL+9>dTbL Em[gRɹcSj7ׯ_CZ Oϟ>›<'2C (24nv&rΏ?==>E;g RJvq)YTozqv"¥md$bJɇ@ޓw-j)"|p sސy&\.` ?~xyyy}q\^^^.PA{\XǏ5 ,j3+#PX4M9EC1KR2, R19f"\YeUSJC543UMڦg5&(yY W .xi9g<s?94?O//?- !5~Ă=KAA+Xv}-F2t_@.)\(:֬{ѡN;B}q6Ղ h'K(A{|b@*lv=%;UyWwQ s,K`)DRKZSƨhV1`GN7jC~/ʛ>Aqϔz_-|%{@7ꟶ%²0zlCs&k'wb{ue^Eƛ65\;{&m|M9_wŨQ{TȶT%2˲&@M]f:SRd'2{9 n!;yޭ{5ߑc֊ȫ| w>֒+("\D+" ʛGwq Y:{D$v;k#!t*rYYޝԞd7lF=}i@)cľf]j}L8KyY8M)P6r2,:uG9gYZrs4<1F5M1+NS1l\7NNgۧb**9Ղ`)R`wؙS I4g#K53m!%ƻwTa@ug\ˏUYTȑ:RsvYRQ\,jED=1Sb!:۲!BΐRqg}||훽Deݻ?27!iJ`8:?~Vʲ4T4guP Ԗh9ޓGGD$v%ݞV3G!m8eHA8GðrU"Vft+ vafi^kL3y߆ӽ,=>>2ecZ166JA- *]DE{?i"lk~(V+w5_L~tTUV~j!h_X/wOq*~.%Hnk(J`=HVt⣪#rZ^77vZ3 b{o}URj͈džq?F/ڕ%N,u 1>EЈ8Ctfcls!|*u~]b2ƽ}Ďu5zw.l>,fA Z U)AA,dVR)eEU;q"ZE<aY{  0Var.4#lKlӦ1EAN2n׀+lߛ+S%Ӆ|>[A``b* kK)6t^^^ :Vf̸źZ̒} b ѹ}^TY&&M>83O1.۠,7 F@[){mډR6@R"* J '!x%g@65q7c6]i+ ZD(*%]t*Tpwpι(9k1f˪4ft'(M >\ᬕ+BeXV@G0y8<- IM~gs^'`U }"a88\4i 7p8SJo}Vَ/L[Vo$4s@ZY [k("u]ߠO1z^T՝V($|ֵBip~JC9כs#"N)䜯9Celc:Z*!pZ_u}NCq! ˤ Qyهc"luYW"Hz` !OM1DUoiJmLo4P;nUJ$uY :CJi]eY׫Si.,ĊaGfk0(8;^fV.eSU p$UTabz+M%LrJ)p),9 \UIR"yJ!!*z~u[ᕥPɀ#`pfD.3>%یގϖ/:G!xDp.#Q+UYԬ̂=!̭?0ލ! IDATC<=aK+&B V[f9ݦjmbts~MXuON툑0H;u3_mjP)h e@RBDBB,`DT9#t6nvmfMŘl`3 D""KUY@\w~#~vclUʇ|&OC|mv}:t_,ol?df?|jmeЕ[c6 UETe\.֕2b)JƗfi>WPx,x9vwp=aȱ "{l(i7UJ)La-֊Y34 چa>Ԏ@ED X67ILkn_A-{l8rC=]p{8ڮ65@#w-bJF@hJhq#u$#3lՍz= WU Un) jXvw5+~˲R^vX,4]o7fe< UCDI|Pt(\R"\!H>|DȬ+sxc "U!J^u@ q]B57"V.10ID5{ Vl0U94k~W8ӿ[Y`&d2Πb)( qxxx/Rj!D]˗_G#/0J >4-֪q|M+8i+ϵX̆]F0ÐiTu8YWl|mLofLe]Q p~xؖwnMar@JB=ŚEm d}ׯ_/jfg3'qka;2 d;R*nͪ:9B:N'9gsI:ID1MCj!Iz=E&JF)G+DH"B8BaɂkɥTsLQ{Evu|IG\0>x<9PUy]8glv}GNC~Z-Ӣ4̴4uoz#u؎73 *}9!xbdMTs"Rk]k.{1 X*0ijyts)% t ﶝ֌1x-2k3kAˢ[4Z^2i]yMfox|zzn_~]W몵^Hx0oˌk),op 1b $2 3Y˼܆a QDua |} ,8;7s1UT"%:o G)}2 úyY FKj cKB_yY"L>53v@ǣ Pj&X.;lS<[qfH3 :N'ڛdvgSJD6}OI)@F| !c9/yQr!zrltRf3[1 &Ъ!)'0棗_ =c;9Վ]`+"!wJ˷iCR-6HVR}Bt㱔r^ԞcǍaߗy>χ]Mw;B}ۭ[jh1Bp^IHBQCG"AH . wC 9i{~zD uW^B9EA6{w4zWy00rnڦc þc("8Y@q̼Zk,̄tk?uIr{ctdóEtQ~UCT"뺤tVCe =YO5x,l6!ŶYWu"2mTזK$"i \=皴N D`e $3 g,. wԅ{ X\g[-=|. RKqo8F`V:HD޵ᗼu>}(bv}o`Xޤ{VcuSz{=|(,l;}i`真SJݍ&'&`nv 86y\YU5:4AJ  䕡m Lιq;e29g3*Y{! *{@Ԝ\,"pi}.H)xݞ+0}p.tpߖU",;aJ}_^gcYo 5x\sS<VD)ݦ-ÃM*O<ݮ:Mq7_$dk`DfUػgmiik_ʌI/DRڝ&JYAp BhG;y,a$v-SVK8u8D۶qy@]=M%חO?Ou?v6Y^|!\ v+bRkՆae#0ofFwq?t۶J)k) ^/4Ze:MHw L5ӓֺ/c%"4d Q*98*l4>?H c,Ka74 8?=}5aJNinq/_roooU|~z\.r/N>OM$}dIU՚T#C"@%b(jU UTdU#-oH8D.h9M!m(FLL`bXܿ;! oE&2tVl6>q G.UB4tBd`?80BLipvo$M7Db7b3B@#Nw5xL=R;+ `VKcT 1!"`q~[ Li{qRh1&D2*0n[ƉE-!z^J)L!Dlg M;*9☆4 VjE5d^F0P3ujPD!$e=FEUJ%!0 Լ"9O)E"-Rk\VFUJ́A=T)0i Rwˠf0 !)10G Ɉ  I)9̫wB s+!ZRHE%`%@aRLc#IU51iqbJ1 "Uj<۷׼ۚCmYDy%]$Pv4;GOQڭH.9giCw n8Mp\bJzW *Y t8s&WY`] g0(ȌFvH&@ʹi<׽NtF48[e]7=s1jx-۲->!aL! Aդk!ږ+`__˷WY}N;F-&LO9VUB9eUN4)?SXW͋4M8HTok.HZ T\ qYax!BDHi&R*յX0$&R R `&ʮ\@XϳH|~V: M@1e]l] _h]믿iZZK !p]s^[)yƗmZ!o[]W ӧu[_oW@!x}Wcše)3nwJC^1`Of:wDpIO|| 4]| H]>(y}gˡ HẀ) ز|y<u!VkRNH DhL7$}ԻJ*@ Ad3>ֵ.Ooq.A]=Bwƨ'DG L!R!GDRn~D6Bb2TT`0B񵖑aL!^@-:D.tQ)Ҡ3- !!h'3Y bzzϟBת -n,nۓ뼞S X LR8=-eDfR T3ZlL&U\T]7O1iY7EW kQAJ3|nVVB5ĄRUAгc} e湨.*߾}+Л)1$XKi* iUZDs[5Ja9VȜ!8ju4i>q@.e147PoeaDjbԣ:l: IΟڶ ja!HJ&m۲,PTq6AU!|-㡌ޔu|D) D<zxx[ -/sr|Į\SL1FF į/ߘ9i&NQDdYD)y)B4ݖUl[_~g@m B )ad?J Ԫ!"Ŝs^V3.S1Ýx<4:JWo({Yd7;m@<@V. L%hSm3f=[u@}ԭ 刢mCkuBp1f_.]̪yg2nhd"w䩣I>3}pm5;u޹ZZ0Zgt)z}!,=@ݾs5uDΗiJYĵmCuJ3ۑ9mQ @"t[l P GC$"  g` ! SOVal09@HD&EDdM.*N92,SoNACe6"Nj*"ZD SݮUĤJɹ-N6kVKu]B̚Fe6Y0=Pލ]RHPJuknvlw9{w?"n(h]WFI}ժ*'n4m;x %u(UPTLćM7y7%PWif5'PA=&;f uýv!įgز,C-$%sX8{zjlfmCk H7V Pܑ80f~~Z˧]\C;!Їin,8A @ IDATVٖe;PD$GaWHV'XϷS5Se0\mx~7)mC6MS u%kPn< xvBn+dheتt9 !ƘUUiȡjɝ;f۶j̀Ȅkl#!1π a:]"Z;zofN1rn}R Ck]7#u;|n_};z wLN;6S? fߧ}z5g4h7kױ%B=ޡ{y'c=RM[O@^d!ilFm z{J6gP{ZOczr]u]މH>taR|G9*n/O]z3 CBjhÐ8XEl'~RAAmW[6!y3bd/4{`66 MC)jY?!~ϥn g%"899BdFU]\J10\Jurmr4| ! i찤vNOJSRQ; ϳ|WŴ^_]ݷFޢXW`YUh?ڹHe?ї/_oi\J>yI؟vC겂1Pk1C wɱ!f)9OHP*4WBRL)oה,s$ڀK`RB7 hCR1UADKq/qx}nnO]rۺqqt}ku&rp1pcL1~$>|&KU"8LiH :rwZ;'!E1zbn`_}bZʶ.l`;cI}3ELi! ?|) R '<1 0)11Hb;gs\.ϟ?g}[L->>_%ߣԟCT߆$u$[v Hu:^ok`p::h {u{ݼ5Sz{* af>彾v8i^fԒ^I8Qi^l*UqٻBZ@ jTRRVJ /E#o_mqGY=7R8k QݖF 0 eWAt .KɚE&L@P 0xrYzJ=`F͎[+۽Y$@mYW)4]d",a0N)" c4N-Vx|[Y}c]ܕl}pRR'sp+zҽ?&${cM J&ٿOCNBDϟSղn߇`fY*I˖q^_푗{]k)墪XpSVɪiH2 T8DOgwk6R循2oh&5񃔓(ի) Sщw 9 j߃-vRO~%5 jpgZ 1_둧Q!=M껜z&bU5$kOQΙg8|L DmM@i7~,2ad#<%d)*q\!4s)M[UThQdX[;ՂvPK"f0qY泉Y3ڍ@7n@L͋~@k+6RSZa]Ać ̀[oȈX[q;!SPUӽL1#&f@(mO'!9;$M#$0Zr-DJCb”u%a}u0@:]nOIW#_-@1_#SBu(F݀+ۅѪNuSUIׯey˾7c_ij ؚSHn!P0&mn` ) QҮQ5nC0IR2)^8wM:L]N`Ӿp8:Qٶs.t:9x۶4/߾e14$Pc.&N!&Q"r<Sq>\,E&|j$msQv" ! rBHi i# BH1"F:/tӖMufBHIj @qb !"B#i9!$DÜL|FcJ!u-/|i-A&3?X@irW)r9;='̼ZY̲ӵXrBO?D߾}?˺zHf3)r18bOxsZ Dk \u<۲eQTDPzrjZ)5iDa>ۺ6양hzҁ; z|\k^U{\I1v}-9˒E aO&F |:]gP«RCv=zdtz{}}Z~#KR87P:rm@Nx4h GHLaZ 4NWZH `}{DQ0)p 0۲|>M?Tw% >p+ xMqwS]sqYU;jw@?L!wo,_;}yGWѓݩ뚻ꍁw:8"=`&m Pb f~80?#S>VQ4 1ơ'L) 9x{NYy]kՐR[)z߿B|9CRgtVfЪ@MBhi*ZDZ>1ךs'U=/&ٲ4ƾLq\Ejӏ)3aaqYyˏ+\.u]=W`[DK)O-O?>Ϸ= .\ j"@@b&!bP߯m8 8l ڶ, 30lc|}}?1zgooֆ/eY`7y4oRO?96z`G$]WK@sn a]KsSa1ƔԝOk)x3Ԟ?ݭ~h'ߋN{R`Ϟ1B?ޮ2BmiA䪘GlMemR?SP05cƠ %D ( $LB"Y5?$.p>#a:x[,wI/)uڊRhW!{*`*{`>]B VaDcmCC\sY!L ^"0Iv%f~]kxf7_^TyQ닯<KujMðn y.~ 1Jt TT4N895s.TqwD78F ĠU rIi2gtJ1H >3"n݈0MӴ<~#r\t1FժH+.2?Vnj1p_㏗*붍㘦sbU*T5Lӗ~9Җsuo%Sm)Ԭٷu!5bT5s- 2! criiU ! d{%7"/'њٺbq!FtϺ6 0<|>۷ DğXJ<KAm{c` *~qJBVت\aEVm8B.էu&ì60 1\s=h:,K7ض_ooOcf|P j棕eyj6(>}z_ҘޮZnJ.U/On9;S(1fE%PB1S$#vBqŔqgx 0L7_Nf>}r5^חf^\ǂd/9fV%wRk///jy.˺˿˲(1uY?,"ۺeVJ}<ͫvcf#jhcʼyx'H޹G{L:FغtԭB;_#=;}N>#U}Dtx-0suDU4Dii?C2W!w" nWgvjxpr88¿ EDf# {G4DD~L9Nmo[ȫcs~޻{ZiK-2}CJ GDs`.xhNF $DLf.P!_/At`s@骙RBp".0{"0fʦi8 Rh~ڌ1r~`" ~<0W9gkmNHpq7g?VV!kU- CJ湔a4ÉBKWD!E0, )!zID*5BSRIDyq$5mɺZɗlF1 ð<[7mR+@J4?h*1$FUmz^oB8궭-eRD8r\ vA#5ٮibR1!oloaBõz?s޲ۛL#2|*˲ZJؿo -!0 ,!$ L) 1aNJih!d+!8~c&dre|{2jYs&Ok8dضުjӗZkR@-&w2 Hv%MǑje4*eVMU '8VK|>w~zz2ϻ_B$]x{{C|G?{4_gO˥ڱ4f˲ !Fѥ`t:rWu_u2!~^}F~}Cj00aHPkBKlj?W ( G-"Rnoejp"r};kYN7/GtvfӃb {ؗZ5"3Xu^6 :5`fB> 1jHfAwwD[Ϻ^s0'"»;'47,{6ّ߾GWjPc*;!%OB4NgXQرD!w>ysw!W HȀ*Gy| wV~T;i{havE?qQTjZjГh۶f2u`4NS_Y#;ȰPcRnwYE_ @Ju<- Y-L(`U ֜ ./j-]/JZ'P8OVFk"BH1CH="Lj cc]V1>nRk-ua1 Zjke|eYj͈e>jCqfLQҙUCGL UHGz9Ƈ]gND-*=3!0dy8% k.QXe6grEc{U|HkxAK8 o190-/@@(}fXrZߜjG;M) ?|qZ{}P IDAT0sOhr߷֒|y<O _axuO!oyزzs6qj 6 `5>io T_d|Jކ3Z+_|>k"l3#}QB0(qur.0"byy)9|_".y[@M4 !x&ŀ f3H#(Mn"r_qɾ'um˻8Ta>)HG'"p^ta>K`[ "WU-*Ր 7L^&]yPzݿC~x6P]A:w&_A ;ZuoB^%wMXJ9|BȝLMF׈VG5EYE[̀Jz:Ա%<}c"YLCJ)8P*GC DF 1&jHd CD@ Dġs1@LqŻ?=?0g>~)M?}r1Ң% aHq+`#p*)JۺqgDRD!xm)y^u奏0Sq]W7@f6wwiK}BJOOO?P *YN4Q]7$,7vn0;+#4'$BiUJSL)ۍahw L iٛeY(%gҽePf7^CZ\]p\Wh(cM|aZ_^ x3v̈ɐ`lPa|<q?3;tW0Ύ-vq3i8}15/~ a3d U+ EZLSM-O1=Ie@oެIr$̰ǒYU$ }#?ߟ1"bג;[Tu@xf5SZZX9ߩ93)XuĴR n0@}^׫uRJg%\s.^|Շi !WQug}eUT"ZϏ~C9RGae]h?Nclf ̈ȀuO|4z  "w VZIumRGOG1؍;O~,FFv9 t.迆ÇSk%N﹞գߝۢ߅l?rP&>C{^ުߘ5Cp,Nikku/|ƾ<[o?.OX-LZuMHH;""*[O5Gq|IClON1BDioXDa;e̡T#iRJċGo$ TTDuA7nrZ5hL{OAzC =[ wUr!EcN~\; yێ*"w"0iX[ &Uk@5q`gZ]Wpl08 Ja9o%#;8 |Np:<=}s ,Lc5EPϏOO1Z+!hJ1žb)1Nh0؍hP֫u YGRfbUQT,?xFD3uug7޶G); сnd%oQ`1O4+)lim1lK~!K^ f. (2BH6 .63b@dPjTշץZ8U  UNû)x?WlEL91O XǷ":EAZ+DT窄8D"R@1^yt΢ 楈uemnRv3 ,Laׯ/"37"-eI]c?}Gy}}UPBHBwtU]*jіmٌ]C˯oIDCߋAvLf\f]BDm(k·H 5ix'ȃ !"h1kZk<k4W[~4Mv=sn< 19!xvٲ@J4yxt %f߮뺺Rb%ōߚ >' uo7oo=Է?cFW(0 :/}`! #͍ף LHɂ Lb"@[F!h).f: 82ᯣvxwƦoV_Bu}Xihk+AkQ{_C׻$=K9{H Le\%6?H}vabfjf!ܱSΡ`f 5mU*ruk`fdO7pJHN,zW=%ZL,M5_]DAcO51.zC"f*ɔCXcMIX(P{w+SqguhJZL7!LAN p1>ڊHmy?CDAjL<9g$Z?^z`5ui7 ޏ^DvYNa^hOk~.c fmMx<ieKmsU87]?ɧ_?xyh/e[~"ϟ?]3NK 1fzBL)İR|~|Zvޮ6k?O,hDWCy0 ~F\ nuD5ԥd4ak1@ ffKc138 Z[kHhfU!usNZR#ޑU˲L4MGNg٢x=P~Qub`*<氼}5E{]r>ޔRsRo0RfyOZQ[hmO&@s'"&-D~X ޕl=4V2 \su+Q=?Z#4\UMcdD5-FO@DZ Ԃʇ -9ID!RHwܦb+Έ2^|C}v Qy1RoΌ9W7@5Ke@*c:R1:!pg`H;pZPZ)ۈ Z"`EcCFEc==G'ޯ̦6W0"$ UCH Y)D,!nqf;N̾Z>^뺎fPm5Z`tJ)tS0$˿x.6ߚ; Pc?hPJ򞗕9rɹ5bz{]]fSQ$L!!A)CYKP8"Xk fzٴì5EQe?;Pt7ß-ϗp!e)? O?_%><ۍa&Ȼȩ̜mJ)RJysuۭ~4 0}Lv},-c;:#ՠzUj'ݩn_e]q|sПǩz֜ig|>qךzy@$ !81"40u=Sޢ*C#sʹZV6q '+129Vtj:C Xf^btYe#@VbH4nIM9Qdf*u}7#spa=91n ׆1$|RbRTZiw u^/*Rwfe΀YGDLDa@S~RM<5m4@PS@R ,]RX0@8jjfzOzd!RTX5iM @}X``8ɻ&Y<\c膾#2B#Rt9Y7lbۮC!23\8D*~ xh̒J9]H.B!bw xcWy]|SLސ|z+W?ٯ?ɟ~&I] .i~[Rkk5x<b *H˲Hm4MSSy|OӀ đSB@3P,e]Zɋ ۭ.3.ն#A.C4rd,!e]L @4)B*"Pk]ɣ+VW1Nj"h rJ@.=DA )je F)t9|A߾\.?Z `zxO'$n?KE45^ay=fMb ߖV6!U4e0pLF ȋ7i% LȥcD`?^x 0MdRmڪ-"Jmc.WSM 0w1[oЮiۧ.kEsBJ),P 0Bk?W1M`d[`ZqB8>SYUbjεV?t>i?9n虣WZ "cDžZZQkT D(EԃRb"Dh oٺ˧eb a6kRCHO==p˚cHmyӘz[cK@ڤ*dHH8]/@ܟMB:cb9?-Un.TjoW F4] CՒueV;1~:z| O?qK^Z~ "n(9CmS3q &|z|B _*0?@EQvռui][V0*sAf1oZ[-RV7SbG_dJ1̹84=͗˺,!HA8_'V#J#f39Ơ.#c^aR=;|g9'<H~.vZZ#t(l};%BCϾ'>–Fr'XZu]WۛnrɃgw &m%UHiNɿ./!vƞovdbRjLu=Ve MI]_ IDAT3fR4RJEq ՒTBi' b5Wg읾 )PJݲ)Z܇Bqm Fؓn#34&y]PmfWξ*TZb ̡xAe[eJ!u {F(mRDÃ@)yx`aikcN&89S !zLް˲,2#~JY.or~@[rIS5SM*Ҡ5R%ӆbZmP `$siK5.L'NOu62UD4Qe4"TivZޙk *@ML 0< 0߸>y^BA یZ 7+j}w~|\Z)VRbm⸵Tv}}z\pD}y}!@`uU\^__lt&RJ-[^  b)8_cyAù"fݓf*DLJ+>=?MM2BSu5_o*c`6Bcml*?Aԉ~=+y<QfCZUr9ߥ2j}S rZ6U՚^.# u-WxcxoiYCJSr|c8!G ynRrb1b@@l/oh: 2H0 f\j]eYMG[\ aD@M M]S3mJb6\)a׹@{#+@ڽo oK έ`9z7֤t;sO^GovoJ%pPPr_j+ʘbx{#5q`#qq?S:3};h |"75+cEƃ7EO A85R@GU3ykSG%GL_C,شx/ VSbf[EOFtw7 35Hd D3'bORLy/hD|UCzpCH,6̻nikDqL!9R kZz.x{)ghܴv"{/{)Et}|VJOӽk <u.WVfgIJ,8 -l.LۖTUtmߣ]C|S13u5&Q0A8 @$/x)؅hf0[ū PT^'<]C-& t36f@Υ9 +[ROj\nIsB݌ofR5-ڊ5&J&hF&ڪ)PbpPe`A0`2dZ!gPyN?03(3 \3;nthoiS26ϰ漬mvaQ@ՠ5mԕR sY!WZ___k瑖M5ϲPm#K]=I̖e9M[)[ d No#}ZMН "2#D1v]0R2  'Z&E1Bߧsn^o7Bikm5 hCRTsZd[)yD֦]7Cp|]BԻ`NJg⟣6qmf0-Vi:PqD4OLۜM!ĸ8TZk? K1%jM糯5żJ!` RZ3ooPS^l@zL-д?7W :6CZ%ޡ)} @pv:mFڣ]oB h#)#-$5#~+ynC`o/D.Mh[yB~,\g՛Ot$7hFG5a?HZhŘ+#¯eq3V>p1U=jb_ O܁y뎂zҝ[lR`iZUVz3oufq >8Vő#訤0f@Rp3 b~C| Kɯ ZkbZvGz8Z::!Ǒs .yəǹn]z^jE˲\.r`{Dz}{/+8c[ե]Ƴ_8pc!EDt588=:e8mpێ{zX%/5SL& ̱Bcn;z D#Sq`VZkZKkVKeANULhyuY|biszm{4cqcCvef7&E1 92iOc&G^}# 5rqu] Ibi]/*HAUUO^~ )捙MUr$RQfb2~ H^o BqqdfѫRJ)R@kkc1d"*VV10CSiD06Ǯoԗ:?ԴHky"j("%m5llbDUc"sL)%?K|t:@bNS`^4EZ ?opiliZ.NZq֢8JF8&ỸBJ 7)DvT-o#oG`jFyM{ ~toY~z^+rm@Eo{k~T=mx3чu},{żzjeZ+H-09 櫈l+̥n2SW`FҟW/#R+^}?:i9z]rS4{yfpw/7TkzL!f`M 4=$zlG 91D0 iop?TQ=^@o}>ze!]74@um500b Tko ռ!BqM7Ҽz_<Q_/oio9g"}a?N}8z}?~Tuze4My0o&G7X#*M|ض)xmVE +o5>]`y_6@5?bD&"gql: -&jUY4Ԁb}V"VR:v C5oU~m p7NUqs-`R!tC@G <=.xvo^".VkJljkzVѴjA\ei@(TB`or?M n77/|Ĭĭff֚܈j}og82Z^n`0d "0ݖeZxyǟ~U\kaH}]hn?k OO|f 9ނ9( djQP7^E[{EksYړt mSL=CK}0O}^nة>kZZ5<&nCݲ̪Zeiw{#*Bj3ͤt;ވzŨݑ"%4W5[ygk;|5w<݋qܟ^q8DtWCnz+Mu{rgD$1Ř"]TjM)e$auvx׶iV'8+7Dz̾#{ԕ8N0C2Oihs? |s\b"O}?R>}c۾i!4k Hm1)Xkͽ2GSu٨/qQWY#m;xos#m*oЪ 9.lm[U;ܮKQqe;0Q^R.n WC pNGd-|}38ޯ"h&*hM`Jut:0C癷\f #|i fȌNF8g0pLZ!璒!:!m6iu]!g1Z 3!ĔTU6pcV @-EJZ4d\Jy?_oFHmp{413K͗RJ0:Ou_|Z/,CXikКZ?Z|tlwgYCOqjm_H&ZP0Eda8/k[Ojں#3b*d-u@/Zwӫ:oYe[~k@D+Ca z"tB\? 6- 1oyc].D!_ߙ_=#0boZw auj AZb["Vsּ=!2]G<D~W8®~v֎z(7}<{%>;Ѽ9"b{ S}&VrF/ne ˣf8 ?^38ż)Tt,Z:&uæX׼#~QخqӠ6"Vzl"?s/P[kr9:)%ML >lCy8>P/rξcby-;rcǏ`%ا֑J{ @adد|9s"2G x4V $δ6ifBY| "n>U1sLD3=N١Mٟ|eΎdzO6B-zstֺXCa!C{||D/~͵5 ZPt>7ܪ jll{q*q6C\XŹ!D yQr0~/~8ZSGJn|0e?zѝ{xo-sUWߧvl0ौvNf-\_;gaD%qd 8m;7z /:\kϢBrWw~d!pFU.Kh|"0yg58A~Zom֚,~YDwP0~R0C?Z[P5$a 71MC~jUC7eqOc0ړ` kLGpG#vʍӧO? m^b&"HN3yMj>.x H`6}13뵊.4\U-gH8M_._!};ŵirm-~b:]s\D7nkTf0Uꎍ#?}rt:ݖ_ӧFD1i/Ю7Uo_ut:"yƕߏ%13r 8a11n~Lu]V z/!{}nݤQ79b<}>No7Y@ԤZbj!@ GǩP:d3Pq+ >?>N4 bKHݺAJ c~Upx#Sqn}WgWVw !c|c<4[koooRbJ]l=إZ"w|xzjMJk6\1 !Wڏ8{bk<wimzx~ɻ{8? @ R*n54\.姟k-Ԋǜ]'IJs{ݺi2,- 3xz~֖bt!~JJ!f5L6neu8j+%v"|ZղR[kaki FP&RZU3b.R<˟q<M5g8LpOS?P<+azWͦPWl"qck"UQ0ݏȽk/%|ߐ=X5f?31v ̥lG}tbc9>8Sv5Tm`FeD}<'(iUM=4i2!DhҤ5sBULeCT;ן{rbN_-Efjkl~̮sgz|:J#(%|DY IDATR?D1}zk͕Re]='BUeG^m&9f~xBDQ8O@6 57!6 )v}o`"㚀3{!8\~\c֯*mB.ߦ/ܻ:Fm<*>Y?Uw]筯sO PkeV5UQS R+13xBU575m4uiG@7D[H;Z>r'Oz|z0Zk$Q9?<"q? k^iZu;|ǔ<zi*񱋩:S[,x8J{0MS-vn"K^ۭ@ALZkUYՏw5?Xk޽Gr#YI=w3qw5V*3"H#Q+4R>"N9ш.U1t<Dj8t:o}ea^@t]& QE>OOq|9ҟN?8&y÷5#B؜@ 8vqԤ9ۺԒ!ښ5f&Yx:nSk Gqqbj 6oy.׫s1R4MoM N'Cԍ?TǏPnpۺO?}Y>9N1i>5gb~9Ϧsi p<#H+4CBa_\ zd2SR>,y߾15N b될Ik*2ڼtuwAZ;П_|Qo所ӉCXr8 Qu,",ajV+[Ėzr_>}h_|/1DaΧS`n^o7!jmPu)b 1EH FA "rjDԏLC(Q]Kֽ..CX1TmF ^V!EMk{yycf}sLD3}q"7cDo-΄UhdPDlΉ|{zTjǸGwA ܚ^ }̚xE;խ6 tލ>}/&e* Z=֒s9RCQHAP5Et4k5GxTXTzts^? C]{'mlz׫ܩ"N,q8r95I{A|?R W~iq;jȁyW'y?й~;Z}/ Rz~~_ӧay2&!Rr.b Įj:;PsH-p-1,~==k&8<|1y]Br_CqΎ+sl\vRZUMn{rQ#R)M@=F%fc10ޑŲ>|5q+2˦&ǟs~5k/Z ^^>4m*RZ Lt:innq @k6NӺvD)E6~8%2k@"CdnZk dvچXGލsSHq]׷y][5{TjNr ]o6h ! tIuӠ"KͰ%3J)~uLr׵mY~m"f\̌@=C?Hu !@ j秧˷wj 7ȋ7x-D63'QoBtfX=+>g߁=~uaeR駟yΫC9utzzzi ~#$`f%*O ȱqlMb"C@fqc.s)e|90t^R5$-V+ 2N\40b"MlR1 s^Cnk)㇏˲h)/gG Wʤ "_W~͏ JUY fjmNfnČ|gfEu!уdnoa >`TݤDC|^F<*+~87W woJy?iοV%c%~|Y#xdcOG8pbЏ&Z:"MfMTLTBrz_z <ȈpCN( DJSZ s۷on_n!zӶiq7o!1wz8ȺTxwq]$QZe] "@4Mg9 rGѹ+RۺW,g@)/_DLL":EjmۄUŮklX-)ŘYLYf<<|>?Y}Ck@ g*Sw!fusU SӦ"]mP-!P Z.ZbFj!fYMf/om86Ys.i"y : }i]z4Qm`[ZV<9#n `ao˼Bauw:6kĖuRLLB1硫Qr~׹l1"EI: ڛߩ/vGEq\t'KVPa^cwޕ͈.l=\V/ѣd$[h5bvڨ>hk6%{UpS1FQ]k~'#b+ ǐR4O!pNww31oZUSYx5q("5Ub!T R `_|&CV v[HĪ&;> x.ZkbMs8l`H!i͹D)9 [TKɻ^~̆qLs≋)i^S7Nq<̠pUAD?Oq40 cVUeFYt;3|& 31B@iJ!|:e-jUѾSk|}}}}n.%0˙BƱ{Q5C ˪RAԈR`"t c0/s!J`J1Ru˚o!R.֌ BT*}o&b)@ `~.kιwiH~^x?͌TDkٓfjRU d@d@Z|o_~͹pzi]} 8Z&"MŨL!F9XK }﹚Y߾}[\k281cca?!g?l#m=Lz{]8.5HL{D("mWJ껧/9Ӹ(jY10S]Z2JRgk!%J:Çk0|3yYrή ך79+%֚0FNSPj=H5LD<ϰSњ( }}  jR@39lH$R67pLM0N!NGʚvR Dtї)2[k3 49gl49fR>JR4GC4`l~%s|㟇쏣G{wCgjܡHZQCuYOS͓ Qc h>-I;]4ZpWOIUն!](:.l bx&E1=[t+āt1MZsAs>J5;cƿȳ|pH|#?3?,?,E e)> q)mBn aΐ;>5Q"p)%V)QH@ͬZQMLt1u^z ÇAԱ G{B財eYƄy>1uC6E_ǷG|u]4pJ)b)s6*377J]tX7/]D;"h0tݝAeq"t:yDؾVaأѬM1t*D9t[B rh}LB\GW pm>9/0>f^l5 `ۏoWnˬfQ>3VyY5V׼j?Ji| /WϘKn Q&?^oS"^ D@ )P)%M8v}_0^8Ek{mPw3Rj.+'5cc\eu=\5/[OA}&8o"~-[ hf۷oooo.F3Yxj5s{WxuY[\rVdB fF~w9? ]4}#I]wġk:߁1vIUut=n"Ft d6XM._1r9g-ct !v:m*K3ի!|Ysb@;[(Rtdg;i VjU3ؽ7F>9ah˷w}; j]4 6k53 ̼ӧO`kCD$dB>`D#@ET]O٘ǖ~ A"qQZk)a^ 2y_̀C`=(`` l\NE~L/Mq< ;J80;TEPTb]B!Mm#DSn.W~x;^ɲ,f@GRqeY|sy}z~b~e^sRr}kRBMՒZE 1)9;.9)BI\b繭KGt>/ kDʹR}t],ooԘDoo79iOn]:GDO 7\\ R<.RKڠ f"jә.VTS{H1U'FZzm?u],Ѐ MIf UHCB b EAJ@CtUnb~m j`GI--?jҠUr~mEljC)30o8@u* # h tK#@B1S- z `F۫I `6 Cs.RJ\Zq8'͋jfP+糙 C\v_~zF,KsrΧ^+BT1T#Nqs^ݎ7զVҬ .u}G޷R u/Ou}׷k`i|O2.uɣ=4Ϛc=9y IDATuDn+"p4ZȧUOwR8Q ;?;#3 Z.'=Zr5CJjLB ieR!0!p4o&aCO1%"\[+ifڤk+mBcPwd@`0ap]ճQΟ J " w֊j{xIm@=a}CnQ7&LGK=CҖP_?t%&?E֌!7Oe-*0cuQ5?:nC-'R=HԚ8F&b311$?@T}7{qp q1unS@S؀7?&: jZя(ijvw-"b!ZdnU"# 򎬒&iu3S)Pi2a?nն5\q91cETm#m_1VyICEb] çO!~ÇUD6%!$3%۲Q:3C®=Öيj< C8&K3_.ۛk1>^z}@0КA)ۺfDr93o,N=*a1"hXVcR5σTkڪH$ Ʊ-obwkI[^uuu):[ZZdN b5 AkFR"$d ,k/8 3 h? lH!w̜KM(""#QZUBL.tk]XH @SZ[59%&$b1cjm d<TwsUh`L 1⠭5%Đ0%CL]?ÔB"ۯM]ae50@pxflojf-uwg@ )E? 1DDCp})W|K-<==(&t9:痾?/mFW5 Mt*%؊ZJ^DbjTmjJ &F{(n. IO5mb"_03R¦L8~821:%S껾_TWC4a xbb7xBL8{iEa1oy66:3MjSRZLZT 1p ĤM7V0D49Ԧ_cP Ę5W(Ƥ.2 1ҖWpHmkm۵|NxtKHi:CČT0r^|ZRLOPՠ"ǘ~e}N n03e~_t+˪&$&65?^eN]j"}^qjd(`f:O8ZI!Hv'C6vhաd&ȏ|ԸbuLhn s"W}?ǩ=QSJJUꞡ ہ.}x7~Gv`U|;Xͩ"TbF:~Ļ~&85SU61E= λȣ<:ƽWfR}?^O Dx:>.efa&h=0YxUyAa>f6S7. 3@u]>uup𶵭!+AM۱ SGM}5ѯu9s@0NsLu]}Dj{+UYq.>Ԩ0,vt0֚F;|/8fG{Yݾ}#O;@UKk^CPuOk9C)37qwU5_i8VB1+#e!~nL!Ftɕ$J84d1~-O|fe}>jӸ*9!v#6A55QLEi "gk0|AMkUBĬbzw~oF'I4DTK&SCOķ\=#itBeY$/vVwne$3>|1eUE{BnC[v:vKm8rHVVͫiF!Fwg$!1sրؕ0Ąw *V3WIe^oW lf*ͅV@(ʃ҆|bDOi"*Rt:vo P-ͪ^n׷<_\̥ծH99t>ú~]P\Kkf@`bT6 8%"O/pn" i$b>׿8MTEo]*XR8TPo[""!2N޴jJeSͶuKr€6Kj[A @LNSRz#4Nt@1~45K]cLCJi!m_?J?{3"۫ OjU @OU[ Сx?W>G)XGPk Et{um/r*F/^ۆPNK1kK=gT}E~?`%GF; M6^)? ~`gwMt@] )ExRՒgoӛ}6^8|ZUv{P}좋!^+Ґ)xvt\A6hkDLW6 iRʄsfWBWy<LJr!朳Twxso't@@u///0<2!F/ot68q:;9]c񢛢?kߜ\[j'f̾p7E$+t:UĪCLt"cץs8"<91$>|7Ra{9e7qJܦԟ|~zzBysҤf4c? _1E?~fiu]eS!Wy=d׷ں[ "3& %m-˂fC#vkAhھ&^y/qy9r ]G[o= C2A"bW@t)v0 Pٚ=61z&!͟ ͤTUPUS e9q}=3o7^)NHTJ鞞BQef:uD%u)UELkɦRʪ"w *q_~9\7eN}?.޴-|ZdR]S>x:>}wݲ,60mN0#bY~uY_e!ޗy^\'40s\@! ";Ps"ԡUY .QJ\H|1&߽Uu^&≉Ik5ưk'G*:첰wtc;jWfVm] P GOa0 rqr(S3CFM[w ] H;#y)Ack #ŨS! YTUrCwDc}p00~zXȆbZkMoXH6@$9{0HʣH|>2q [CC|\=]! #tt+hནÁJ?l95:L*GxØaA;WxA^sFw"&,Cutӷg&أu\ rIx\CO ; bޫҍv}#$xأ#k|~8G 3Ryv̓߭a;vgF7A{& dvKS!u!Vʚ8o6ý[kT˲y*\kbƗsZ݋ziTv]Zۜ{vKbw8=r:,ӥf?h/F/Ma(wJR\$1:U~8XY/dv"0nRꇾj{yyISW":T>==¸{ s b턪DYKIweE#0F1C`N-LF& Қ=lKYDRL0"R湛S=?\.n"@`}C@(y_}[E/fv*# r›C)Eϕ7ݬ|1wE*x=t̻L̚ !JC yC%~3Re~{uBB6DDJ" 1V筵78o_>IU}ZUC]O4M_~M}Wz5i@! hUK1I[9gJɨ L<'ˀ L*Uizw98TۭS?ݯ71 jZW@|P^_ty}}E~ -⧾}w] ZUІ4r^F)21kk_r}z^qw}rLQ=8`z w~u臜?n;v&"c1S00n}߷6-<3<}ӧooo_` ꊥ Zޥ" h D[#4]fuڸȜe8 4]^`18x9}1D!@J'9f^ʠAg˖8+=<\/tHO2I I]U ph0@WWeFF?a4P 'Ez KpFVPUkT4aFDMP%F ul[7 XcxRq]c)- }. Cg8CGܝoVVoQT݊]9*s1Cf_WsJ>g]bGE;$[~ʠjYLt |0DZ#"(os"7 7jjWr[۲+tA(m!L o-bv ?%q*Xt$jM[*뢟4bjJsi>1RmuNe˭hN9kq;+w+Xs U[X[nMs@ƴ=w罖n#k1z>Cr6vJ֬kt+·Ž'S3Vfi1ϟeQU^^^<m6pouY 1\7(gDH ~f޹B{7 IDAT SBv]7c^fwu;Ku+-+\:oȮP }=8h"f16 ,DH(?lcHIi:A`ZOO!۝o7rS40 IX.+ sjRbjNc(Yt6r? _]6q<5]J 4tc3[W6&o,VGGy? Mܘ-9ؽ{*)^ohm=ݻ#y<P#Xx\E"3ݖۛ&u=_.Z,㺮9 <^.˲LP 1֠wxε4>MSKy*SH=q]J*($n|Y׵$L8~QDD)뚸(@8wC1^Jc_j yV+Xw~.Vb=yQ wDhmq8b)-I6 GW^"J}1z41QK]uTЭ8^yD9}R& 1C]wŸU.au1ЭI׿nlrvהԭ a臾hq"\X[.C7Tw9k97߆jNTa0 $ ]~cTw`;rhѢt[b`IZbsJn.ι4t}é춦,Eko#<cFKZjkI֘Q0F-QioKݪm̺'jpSƎD^p> 9'H_gvZu]׼Zy||T*+/+;_pM;fmm]xYnz{5&Ԛv,UNMp9ϳhdcx~s.c:vPv6A\@.ROSRзӆIК^\&R ƂjXW~s2Pۦ:oc,Y7u]abuip8Z5Qq>洲w'2w-O>}_~=?*o3[`DJq+E]ˊ4I8I]YقYrރƐ.L$!cSߏO,8˟TH1|Yj?<ϝr:=< ׿DƑy漮60uP.Ag`؂E02}T\2o4٫ۼ}c3K,~W,*Zc\z)hOcDcD9dhxoc;%ANC{]!M&ұ58M|οwRA y*9gc!iR u{ _^䕶M0̆oے][jR2l7?@2 C7ӲId;t{T$s>8"Zn7;c,"(L Y*&PIr!pv<{B׭ub^$f9>̓V 87KKFC)eYI= ԩm?<<<\oo]8_v}7APRҮR9g1Kq }o]9/ ٍsY2}vD.m4Mh!?O?~1RFĺiB@͹j.k[ׯt\._~ћ~gbEtk^?\_^`S"<\. nr-2/뺖R |!v BKt?9==Ւo׷vs@?j0\+EDEڬ`Ts gOpAĵitW#iY}~P`-Dp0Z㜏`BGRBe1Fv߫:"V"(1@J|\J)]Q}^__Yx_kĔR-Av2@}z5 ;;ϳUso/ ք<=ǙlFJj7;" 2_<45."2m}Y̼hK??Ƈۄz wLZ#цڭB Zב=NNpVKfwj^uqΒlńnQܺҲrO=mRT HuUAS1QA'JXCVdKXkYkn^YFR C/d WQ?hu1F#w^&!w:xۘa~A/`tvs:6\ɴc ]⦅9}Ӏ"Z|>k_·R)|0j+PJV:1k L]pV3]S#0h@Ok>r)*k^"kCbuClcTUJbQE In*R5GeQdTWoJ!}||Z&c?z zM)'1֔X%4oBv1 i2kܵN)51yuڪ-*;ī@ct΍Dׯ_SJ>}QsnLr)r̾(gM٫THU*rZ(%1otdcV !9+MhY,ϨП_~|>B|2 |a~)~C-׫ >仸d;ND5xh I6TIl\c.EKtauE+3#>>>>>>:9*???K)L扮or>2kJ8p~|XZ eA[AkSV5I.by8.!1Ů{ܺT1lCcVE.6-5,hfG}Ï?VW"묳6__vcf0`& rh۵l V??R|(uM}ǜ~\. ?O_`~gmj.ooo˲*{Aa6Ï+x_r.%R(`0}EaJ C?̯/6F΂N7\\ rP'>?UzeElc@k+U0󎘍wĤ{zӇOs\2 CƼYTop)dXР~^&R86h5(ʙJ@d'4Ͷ,/_׫FsCFq#Y[뇡i{;1Gk-uھ5y#XZrfBKj5Tuӿ~'#v?!s=Dqܵ^7&[IqK|i$ Y߹DBXތDk䴙Ө-H}2lxa>AҨYf [1B<̣Ti7T!h]8y%.GY?N5ج=5 Ohu,;W4+Rq|1sA%6Jn=L#WވmeclɠfhvZj7CDyMhw8)cD>7ƘyYu\r6;G8hQJ!!Ont{4=#"bwSw62rVp ʼcG!w%`?Bv緷7-@s.w!3Z8?0c)۬ybT%]+P)Q'1FL2fR~YR.E9YUSm{0NKvr~g2 JyT9ھΗee:<.aPm4Lb%#Ky^Xzj!"~~7ZŐ23eEk w[jή9m00Ks< 138@^__DDL1u]6'C?>>zosnz}l^(yy]#Cw}EvegG4tM;kz5PvOeoZ03M"pN&1ԅhjpQ2g^(O?tyeyZe8?zZJ.6MSaR0 W %9yܯջnԮ_ۛjRq<ϱ1)'kdCxx|ZוKkxz 0L bD] !4KVѬ K?wis.|sPJ,`9@ߡf^ӺmN㾶3mYaݝRpU35w05wkUFc!Zk6 bTIdǧ\ eQ9N:Rz[-]O{m Q%(:Vw0 3i8RZ q>ݮ?*n1vܫգsQIYq;{0SV= X}c)lQm 蘽W,* ɁBuZq723LX,`ĠAAY3Z|@Fvz4ZA֦D9іC7m4kÿaGrLقu,A1Z|pޣi眎mRcO !4Ywʩ:#gAg#V+!D+! ZAr݌ 67c)4f' K]J\+ )%ublIkWС'0Rr$hJ!z!!(TvZ"VkCl-fT4M,1tVaOYӠ?-:]Fm2_ag]WZ-"uu1F}*M !P)eY]ιZx:].eYvsZU"ԃ`}bש|>N'Œ 6av6w_hbbVi#@=[F6޲b#zgFY5 |~~9RdVO٧Zv5Yc1.Rtc,9Ufژ73xe͡1J-J̰&д3YsN q|zz]""R5]W|>=<< à}Vʁ0h,KV~.,k7ە)#7ߌ-POiK-0kV kpC7ZWNA=shZιsN9nuÏ>M0]ŸsYWƱP///(MP%!_%SPїdᇟǗ/˺kQ Nˤc42.8SZ"O\E  I( hC50wQՄhMhb7b}(ʀ yV^=_K%CJ`81FiǕTH"3U->OE\B]uڍ1B",`P5)WV Ns?bVf6+@&vǍS7 yJ:`ZZd7Yk6%'bߩu< !tc7hJ@ ~}$[-ceI?G]gL9?utIKB"fb-c a}G {oooUۛ Rx~{{S,Uw5^"B]hn:wK2$LR BP&L6_"Z- ]""ea]{{iZntUwuhməsk)aPJވPy]2Ʈ؝Z]7@J>#9)­Nk.zn_yr.rB}~~+CsJR 0З|"p{ [u")m)H^rsX}ֲiJĊ_ Mf|6N)GJ)80<><(.ۍİA0O?U8Ӄj\x `SMJɽmOl[TvKkR_~uETN:ORp1.xgK7FGm9R>\jʥxZǏ?|t!0sIIo<Kz}}-Dj'րhoyk)`-vAJdRb7Ĉ2ZkxNZjriJ!!f'Alch$nNKZ`Nt9ooWd^O%)tLEJQK4Z1>%\ž̺Z(c`Yk-(-?ViG'y?w燨ӻ߽E[>}Uj۷!,lPgs;&ǔaamtnwJ1lV!vNӡCe#ZDX;;gތV3;Q Ƣ@ob@νDZn7tW|+J5t.2ki{vna0Z-4vh/df}<*\wݕgǚ}# IDAT[=jz]~ [oqw7UgTpp d[헽|"2Mzlm?M 69ݠtMD6c,M!D[zr\ `ԺV(~H*Hj;0dղ m-x0kZf_vy98B4ُAnJl 1uMi[sv]WJљl<*30C;b7IK5ZΪ~㞳E耲Zk>ɪ|^sݷ 1ޮW- E@xRΤYAnwFk"Jr:׫]kJ=DB :b| Lv siBQd1:TJ4qtPιLJdhAaf3Lrb ]fV7Bg̪,oLp&49X,JV:%Ctf_e~g]UنKl4-EE{֦qi+j#wu?#{e!IpMs~z~֣~o-SjyRl9vs.v:-X!&فm@eW&Xt:u]gEcSJts-1&ij.|򥼼Tc?|>1DBn7-a_|A=Qe*\ku]%>ħrw}' ]%g9t)\2}Zv D:v1T"Yj9,˖@5˺̳z78x/_L_t"KFj׶G9Zj WkeH[;àj.B[>:slMK){Mﯯ0+">==1jڪ轢;kY,2#^n Bۃ pXY.*J%5NO[V͝@Wֺo/////o{ܲ,t>kBAQ[3 Zպ믿v]ֵ,2u;$9Zs=}1T њ >Y`,xYsb v#D UeC 6Lz캮B6?ſ3v]X"}5:kهƴәE^no_y)N8As+R MС<]W՜6 RĦ)OvUˡazOm'FxP-eMiCFp`f};uq$"_6P*e2kF6(1r7sƘnJ)D6`!gvF:G]3//",A*}?BBu`jT`Ʌj]ΈǮMwZD6nIKsL)-y RSZ5T7u^4C iϧu[^soyMuvjn'0G ycYJ3EZlI<ɫAq3A0 8{8*U'4:FjaWj]~w>\>l0b mʠ 134&Bl&/:ISR'ΛJ]{ *kѳ\ﲖM~\:.J!kNZ 9ZGWb@U81Ƙ҂i$ÇJkS z5H)g3 ֢1`k[fo%z}yY֙HHթhbfTOfR[E7rB)rjЖs52cZQ4TD֔r) B}?<<.?@p΃a<(u- / C?#Q< t]X__sJ,iC 2`Mr>Agjqzhe.P)7{B̵ghF@~8+ ۼ#6MJ{*/î{|||ݨ֮~k&-gt$tN2,)-"4U!QU(wy㝏Q`~}E/)%Xl^cfե~&~Rk^A;iQgYB ΧZ Cד C>+1ZkPYֹ Z+Vy5@Āf^uZ۟C`TRNIImb-S l))McLSﺡ!Dc,:l9)eYy_e >jMsl:GA\2hZy=9P5QѡAQ&aQD+S.-qTz-lR_ebL`@ "lb`buD6)UBܒ01K6hvdHhM+Xt4,\jThzthXp}A#DDR)B,:}0_%&vwEgѹ zcB4`-5^fɹR<͵Rʢٺ=CMccMuXjaކJJY1m]7v]t"="!X8yA 3΅3+QD1P=ZS0&hLj& ;K)b18[k }WJe缳!ϩcN L[:Kѓ-)R2p1]>xF%̵ R ;缐B {&m5VV6z "oW>iN"jXjT"EDLЃ1%tѠ1kyކӈ H71 ݯRʚRDfJ9Srnaߛ4e~yY @&:}ɕKT>àk"5\qdePTu<"`^n5W缰C%6C@cZV۪h B}]o`oחk.E2cl@T^3AӉT;tc{b!F"ߧ%T~I@vDӧo_`ZVN)r.%.Ƈ˅Y[͹/_/~)0aGXr)keZ~8rJ T0;1Ӓ핍 u]:ȕ?ew C !RMe] o_a/. 0KyteY?~skZS)B@봐0(V2ϕAC9qe*//`/'h/%ki"Y`M8ԜC?k{H%1; r*D @`9mr=vQIx] }%圭w2XVR," UZtԜ1 P:ZRS= (Tl~ԔJ@RZh-ϧ'kqb }߹t^__ :낏}5ﶋI|y^5'@BpU?~OWY`AZef&O"R.R%0Mu:eN-MJ(P8oؼ8Fl::o~ݕ{P8(b"jJTdZ@(4{A]u% PE8Ⱥމjbc``jۯs]7wOkWn\4jh<F[kH-5@9" hb3ZؠsEo 1)d z cp돸êciӯbd])սc)Ո@ͥXk}J _ogwgYf卭11ڦ9Ss zVg%6"fZdوaS잇Z8:%N65ߛFcPڧFA;=f1٬ߝnouZ aU6 )'[ATՁZWZfys9F[AE )Flwucz*\JR#DLLhWN>odP8( u?u&Դ\Y4Sb<)%$ƒ1ĚePr֤޺T2j[r)K8$G94SJeC.ԯZs&cSJ߾}B<}BDPVռ0g]}<`[Nu©ѩU*6W_UD{k1_>5182- IDAT|:zڪnmp=w$5TkCdkH1lBgj&tGB1A\Y@0֩wba 7SyFQ? _|4JC۷o<kkv_~clLZXZp8a8as10*ktp4X bŒΝOƘTqVx&j60x7FDq~܅ ! C~j pNQ@Ȑ}GƐ8K8ﺮ3á{Dʵ)-q/$1xF0OOa5dg& `RKY\23 oM.ErM|u[BP0uY!J|GZӎ>8賑୵H$>=?in)%;2Zc56xAq^wn*\.,8c`/<݃FT{b~jCVD6K?i VD6ة}DuQ&L=xZ(6ւr1;>Q6/wiuj#5O7Z|qUn9ZN5бUM*~ه@6,ÆHVl5ok}'djJ dŘ Z܆ܾkQ͐B{ I9\{ 9%;~k-6䯽9s ֐6X13>?x?v7 &5W)1ҭǰO$ygamJDUj ˨KH Y>EҦko˲aț֧}ql j3R SK,oQ-\o4ܫobRɸ֔>v?-1a!Jjh\ۭa^ Bغwc^MRJ߿1A#)hE*rEJU]袾DjlA.[uT%Ec@(Yn*_.{8no1f{YMsJ\\ !;w8q,wEq}{q!Xkj XkGM3R!6Dpu>LBjQJU5wf6ax~~n.jPu]>.JYsֹ2MRJu 7K\bP lsADg*5Zye}t0rƻ! 6xq!,ߛDb":8D’YanZXCY^yk>}x<08O4^Rb7S_|g.2Mw57 "k荈)ED7yE! %=YY-E$icI،`iZ5cEKYJQcX@J Q65u},RB8zXn743YC9[:qΥ!'.9"}OYTB p\RGks05lntJjW-ծZu!dZm3OƬ,,EΘbJӲ@d x2m-o_~iK5PeXn+Vbt_ꨡPk$W-j>IU!in&+JRr*rAcдxƴRtgnxTa 2H;VY8HFm,N8jM_ [efSY)8HM#%b]o g XkԺ޹R9wʟA"!s ]v^D_ ^KԬ~ieY)Sji 椋 @ͷ T}ku #ŘQ4Q#7jzYwޣ%o#4qcG澡^ݠ!>Vʥ\8UtLzW.4#ZrYuM(,2ߛ5pzL9g|x3[^zO15x<]" ___[X>΄"20wvZFq6!:g+a6Ty),x@%Fp8B\̌hqNP ιN3 bRԳL|:(O3bϗ  0֕.H) תȼ5\Ad5%9a)c<QsNsL΍ UgN7jUXF 8rc⛇)㮄o"Ϭ0R)Z |ku///oooõzs-/߿+G?;M0N'kmiŭWݠ cIzKDv=^_oo9F]:͂|̂BK9~l  )j ;kQMd~<Η˴hVYq;n V混eM]"ʵN6Q޺}ۭ5j!&~53Pek;2v|q<*QJAkJovjׅ ̷V= p.)|:/ Z"CZe20Xˀ3Xc .4˲4nS.)!5VOZ Ĩ&εZY r@IiU/ΤQ71묵F? }pq@"k+n > dL9UƄiR56ԲT.qs{?p5eWX6FE"x>LAd):b RV9U$ee9qɵV ZE9=r-A*m xR`V4hV%ׇzt'շH^Wgﳵr.{.{r﫲~ކ7ıpmb"Xj=7NnIW2[mVaֽ5#=^:@Zd朗\!~4[l\9E426XY/SR`)ǵozdefiq<7=ZXQ;8`@o0`J2Zڟy;mB}ҪW UVƭӭxvZ CwDh1Xk%ԍ$CdU#H8I1\⯏ }>)}7NzMyzLJlIZU #lE׿ y֊H?BH|-DdkEXzę5Ƴ~S7 }̙kͣ:$Z{DzVv}=>R+ζ4s\AeIt߽iB甔b ĸikO3WEp qu۵Rk}kuZ|Y~ݏ" >~Mώ9_8#տӓ6j,(jҘwu% v/@> D @ćv[7z4lӤ֞Myx<ϟ0tk)iZZw?+I`BF pY8O@`:yj^__eO' *Rيrݗt8eKSc .t΅0&3:o4Mq${{l+q^.\ՈCl90pbND˒RP+lcNHLXj%hsr5} yg si  )) O#3[U4AߓW{*;k$胿Lv:U~!x4GX%w \.\%(Zk*K[Y֐vj&QLQ*C$!ޯ)- $Ro}߇0o( \]Ps'--{f̾8hf=hE)v?idVPo`_J!wm6,nͽ}W|#џ|XK3E"7V.iڪe3ԭc76PA}<@lGޔYH3w)1ƩNÔ6i鈠1F-ErN ]3"a'n"; jї(m6S$t詬\Q:k-oBQ㹼ryZc& rT:-Z4M %3ߑj@⌜UۍCf)E}=II<1$Tj *x[V@8;5!m [5q*jhW/9КRJfUh PBnSJ’y1K\$Z L <綧eGf)\>ָЇH;ga}7v{}{߮;a=ڋe)9|eVy 64lQs1BJ w])dS8v+ ŜŻ9@1攒T@2]Poh9m"2z[nt:WSO>nxϟk7|`sz}y}]Rol(^o]ঔb\iR7,RCu8=ԚH 1;Iת^Ìھ.rbZfD1Iw9r)T@J)1 O5,&1!qS'c*`(WC7HpTP)u}םqt qR]JkQdզVFBpZV:?x|!^J8?t߀kʚ~N RkhnDOOn}~=?Vky Oc!9jdPQZWc(8k[SfB`L{NK\јs}< 0]:z@oè :U'9=v5u5gf.^r9cdo6Hi_՝Dt˵1j"NMH@/߾S"2OT/iY4M?^;-LkUl*>5M(eV񻬵KN5%  jRJ039Z!̩7臿4Kg&N۠\:;aգ+O" )n el\ h{i|+7x;X+d*PjA\dc5g"Ӧ|KHF?5%BR-yxQ&jnG4v=k[=YHe`3yj-)ØfPB_%\dnkYE *FMՊQ=Ș)t~ÌADԺSDZY -)c,")ϼݬw/5RY=k"xvKy"#Py:)i" -^CV`6W11+RY;c #m q]3u\}+O5CڻsUX 5LZ{<YP÷7]wpDePJɵWv&]:mޫ@W.cnn) co߾غ?pٜm1WYRb4&B_۷_%9K%8)3(  lYgo2˲|X|.(87zq_n~2ADrO>-~STO.iqN*|WUԧp{HD߾}0*^7]txtacN9*F!@-W;u;3ԦQ5T汖UN`PwAvf~,n˲&KU@{_Jr.}s9$(B~ɩ\ђq~À2׸IV9[ʇD6A& *?IWr)߅q6u~@M(۾VTmל>cG5>ڽ}wbopu jQ7pәc\jJ*=+TtyڤZ,BҗZ1=ϳjOx4z}_7U2 rMVm|wZ2)X&7>gG- ; Hȕkܡ\+nu!вsi$-eҝ0Ns@pi0jM)izyK<=XFhN)lÜlp8T։!b)5Kʙj&bb=tgCcJDd cTH>\4u?yyCH9a^ ,e51|>4zTzx>5EKj<\isJ5y#?wWf+QHDRKL"Ӹn퍙)ٹa2s)ĖS.,r\]B"kj"s#s1.o߾ ]eaDYݘ9g7x^Ę~ӲTv_cǮ*s""|E7`;_p0%oq,@־]h/rx\o r|~x%.1Ree<\楦TDi)^_^v=n3{3sQɶ)o /9as׷Ku]8 0LoozR a_nɰ1>g/mQ[[ ?U? "mZG" ajԾiݼ?`ZCj*-K-l S%ӷVKPɖ/ElX]ri`kKWRQɽ6aoĹRF6P/c]6K:[ҨRjS77c$n#&WZQ]KZ$mm^]p>ժjrD-#c7Ve)YȚ5o+ijJHNa:nkG W~RRONI{BﺮS2+Y#"v6¢Cx5P upe^)ka%KIq^zU գ5/*]3:5R$<]cޮ:VZ}>*Xc< 5ԧ5`+ZѪFŽWe IDATPTUٺ XGd3L+P*R/ɾxO?_te)$U pP>O)9NjsOSnds9ƨmt6a8^.1ˎ5e8x:^.?irJX4@wƘ,pg5pp:9iFQ,wZt:};\ǣLwKte%$O_v}'鵱{EEvPpMׂ^ovQ^1@" !YݑJmU;TKnImސjjRu^SQP6Aܞt_AĹ;Zb3- R'skaA\= 0L|/;*/ͩR2"IOZv=#ւHP䒺`5 hHĵRhB0ιmJX 9kSW= >Dt;3Dd[ӊRlc@3DX/$B5s-)%)w`/[4 ]-5I߮Zg@YXR@Dw6M3ZeQcч7"PJ` c 1Z91\xY矔xs)9 #C9ǴTMx78Gc\&rg-QJ\!GX0=R 썽^5 $ﻮN˜ڤ1Έ&;"`L%9Gc`^2G-c8ZJ z,dukUDz uҨ8(ra~Wex/3 ĜBֈfmNy|xNy=ey]#r>W&Cxeuh F{%W(Ǘy FXmSU1c7 C5Z F\&yL34֒AV<|>L&+C _r<=?ߛ`l&啈Nx٬$V3""%4Gisjd}:(Lp\SrLUccBArUj u}Q \Q֩ιϟ?7WjMTZ" >t]. ;!m،a#s)Liz{}}?ϟPElu`Zk%(9)i#mjZ]ͭ7ZK@~aq-/<(;Wuux<>==etTfgMNYurӲ8nJ\޹X8¥BP@3ɒ/?qN滻ӭ>.H{3x7@t Ռ~KYg6ƅc[!μ0}[ CaDs҈Z#a#ZtZJm-};f> +Rk)"H9]Z9 Ku|-YD+wKue"ZItmE`.X;9֠RJ|KZr)PsU\WUA֢ʀƢ\,"ʃFyV.?(+x\X=tҏxOھI\lD*yew8J7IxAY@֠!$tcJJ4H+g%讎]h j\ bu`zofc(9}PِR Ev Z؃)1H,~Cuj=_EWtȨhM@15O4ֺ!t[]+k]hJ52FH}wޮWM&[v*.퓛[J^/?_ 9|zJT㵸5D{1%ZJ.y @$D@~x]9Et9}E^R>sne}o36]ٲ,e2h,cvG2d6| T0t>nRMe^yp)9[\s%i+@82FW Kst't#}߇§Oe(rj;(FCm]A| ǔVfjɕ \rrZ" R\eNaǜ%1ksEn \S" Gj5眥d04; ErS4˅޾~e׿˯7["Tu݆), |:~.%F."j.9Doa^XJqg8ecL?\J1iiXJEx:}&+{_~Z׮y1^=$a~p\Jq0v= qb9jɥ vx0ԍ~ ̏(㇠=Iۘ$l/~G ?hSgE˝U^N!!DT]n[?dX 2􎘪VǬ50x+k,-eBZߴw]AS5$'`};AuZ6v-"vn[N)55#G5q1ל`a R |wQVEdNe~Tk^_7H[DR)R ڰ9fLus\ivR9\Hm&CskJ)%[(rCCjˢjѢ=)A6V0k'K1F)yuZ\@'_@p<_.ei=@)?Ҿj GO)ŔZ.tqΩ> ->k? Oꀩڿ R5%r.TctΝ1ϟ糖V.HM ߷VjxO:6粤8OZu.Ô4t4.kI2>aqlvIZ:3H!h5*"_.;Add[0uvV5309B Z7kuʐ[3 3SaS4MvBӉS]g(`jN?=]J8OuYNOO4#^g "8%@ ߹@v[r֦ySގmԮz\~<7Drw0|:}anCL1qP{oe}OϥytjNt]vny{ɘi^s}w1ֺR162MD,s}̳t:v-tzz\.OOƘQcE0DCFB;Nx<aD(%FZ-+qYTLJ/RNv$N ]Ps5U Ƙn 9,U0J}lZ3KsR/'|8(0ǥ]C׏YXeTXz .q )庤8A_x<5Ϗ#_!|cLPr))}~_c9ӧѣ-{Tk2 c,e5AWJLDec\30>tp1(R^DHD:!K"29 VЕaʲtio$I5$Uw1<#=`0㥫JKfFH FʞBPURdlk4\-yOۛڞpX`qo߾Y4hm]11 [؄Q^ A "Z&Dbƣu ¹q!b l:ŨF)?/}ϚcKu WeBཽZ(Xx`RnMKVvLi_#mspb} 񭋟΂ֹlk\\u!XDs8/r/q<08ֹ pCס@.ZM4J)33ИPt]y-Rt0 qt_%=>3qz}s^09y IDATZ^K9j- v{s6t]{÷[I Z|>ΝZ @AQĺVF*b@Sh Sסag?ͦ $]; 9<Ϻ֬^~ZU=UcD]F[k@DٔJZcq<j*pDU`k1:DCM$.Gĭ &Y1&h^8>E&BZ sS1:@òzD;,(sYX7{F>x癤J1zzgA *ig {L6pt>XXXJc߰ZE! 6h ZYgEAjd Xc1Vy:JԲLanLM@(cTQFrF0t1*1 ɋ!t1zծ/aYo^Ss;k5+ (SHuֹZjZx #[aw6Fc`R#6*XycݼFv`R)`L?p{\XR|4/8ƎYr.ԒkɅ 0*^?>T}ϰ6ᘙ4{&J2O<R9nR*9w!"xnۅۍtkLﻡנC9%'c*ŨO|Z-s_m<ܯ[ 6c!aBfF ,@[IňquY`w>\*8ߍC5РR$q8cqSITx:3w8[k]J.OX>N<1s)'4#vy>LS7 [A<לЧ,x>!?~g`x!ooq5"<"E[ # XJy1/_NǃwnD S^A`0B'Ynx5;{<[.)Ш-9273\1ZKC=(]1%pFbc]s֪q-+&[3ǻAY0t5y\} .XDBb-!\rn2 qV'3#8?_ݧ4<½nY_|G%g-cv+v,˜K߾83s "O_lt0uvO>ßGO-hdRlSu܌8m~O)'6ࣩhqzއGOh~D"ʩNمh߄T[fn`*cBc5qkv'*ANMU2?т@alrUq f!ƈh +t Im^[Ե\1ti,Pdjm!PUIMU1*mD0".">Xkm"BHj}[1U-KZԪB^)Z %/Ef} n>ɖjͶx@ hE 1u,(l1QH@Vv{7 OZSMޟ';ݽn¤@)xbO]4:iRV 7Q| ؇0NiR3}YǗ(UXv.I7Z$m9G9waҫdykV8H^Iu#k{7+UQ7a~}_Լ!Dc AƘbQÜt]cчuچ4қ|+x+,^:A cԯKPgϲREӇb?Z&vbt[E0*dB $ܫJbR/V-Pje!У]x>$, {2q~3 ya2U[ѭC74-l"o4Mzmsܜs9sκ}Rzoku݃5jFb 糱UjD6 @Z%˲WrgiYZkeI ѝ°tZUJQ~LɤpXTrQ||~_zeΆ~!"H~7vnM+RrJ~^?ogH sp>_qXϛjaUЌfCo~s߿| jZQik!$"@PHsM`Hy NZmB@mRkNgt^!>>>7hj)ZE=6T0 !RJZfƻ "-VtX4%e.n 1+ޮUk0Uڮ1sѹObiY$%Wh *ָd6\}M\_6jkEX1q+YrjCJYa$ǖ:jPLl.o///:X)5nX;lq)%5H&wYƘ*/Ci:ެ9q[il9cQDZUj,ZKu8Zc#(G >&=e{f6УQй|p5YH燹*tcMm*TFª>4xgc~ҩ}^bF4ʊWzaykcȍVuZG 6=` y6( {zφ%_m3ƽ+=`X?lGeQfk#kmT4 >t=_޳PkyY =QRqXő`qzniUmZۤ]: hT. 49luԽ@.*tctϽǴsc+\p[4T!#B[8Ԧb1ݬ=}kIRw.@̦_鳲>Jrqu],ڽ.Hkhӿb-Ҍ1?^a;$=pO[sB~['±ƥM6\5Q aRAĠ!"[>Mw tc2uzOO] NҤt)/KKҲ[oNΣŰnZ)hQ &h5rԈj2M 8wCw \5t&7t~X@6Z<]|] s]4j@޿<7?XT .w=K鹧2Q`߳fwOkJ>߯w7{Dڹ4Uͭn~s|:غ\g%Gݏ(+-4XQ=QXr" "kļ Y&Kޔ-e W WE&Uon%nڔazf~6ݗ8ޝ egF)Vkk-g1.}@cq-ŠV:]dN Zg@jN4mSJ;ocb[[Jic2sφ4}6MRBgtt;jZ "m{RS ^|p *NWFnR8a[޳B:VnR4XY'jьhXz8*jeYVga!(83x}pN{E'JNۻ{F챱i[k9 8Zs]jY'1jkiŸzwra1-U iѷV7d5^C(5V޶sLt>ki^c^|!*6BR F0b[@$ƥ\$eR6ƪ!a.SXg=R=2CjI˂]O(_GX0{6iY Q{Ej`bu.81s5j4]߇9x8SJ q-Zk<-i<1ֈNS^0RA@ Umi{<{?ј|^<1: f0(q Jc~R1r{{3}}4­rb1YƤD=7vݗ/_; `QWJfA\ pJ=ks8Og&ZnWB6r6r)x(ĭygAz| u.Eߟ޹BV7o]Zx0 R*u(*}C(t^5h A,p~|ck.rƱ?҈_EDh՝vJ)%-k4-9qhQ5r޵Rb ©'fg-$" jcs__^ek}%kwl].YYlkIֺ5ւXsˢ|bCʹ.˴,~J×/]}۾LO#. "Պ}7=Y }o>=~/~IP-g cV8xM؂(W`&}"~Ԝ{ӎO l_Vc:IN7"jRU (d{[q/1}{Z',Ѷo?[q!!l[AV9W5$ (?B4h5zT 20wڿ^=&5s;j);sƸ=VP#_{ZcףR&c Ч X @Q<PaUK*%H>Lh/ֱviZX6D9MPZB{cZ{],Zz ]W}>fiM,l;M3ߖy.j%6vNEw~vi_S4/o_8q^#! zip]rgj/:6o+ԭ7|ӣͤ.te~r ED?iRf)eg|Xm>9IݨFw%2Ѳ, (X$Gɵ(+;-Y 1{)9C ׀5v눸КҨ6&X?q֨Reݧ㇋q*}Y9BEn $KˬwLT ,KNp<D$XJaOTཱec= ,yYXfacL)YDJDd-TSLJZ焙xӏ?< bkp8C)eMqKZjLj{@1BZkӏ.Fu6ZF|yy1Rz0I$1GMb *cc =3i4EjEZi`>8BĢi%4X%Z B0} bKriN=s$zk`Ij1v)„[IL.գ XYVZyZ}c*F80ƮX7 "1w"RK"U= (# ZC׏VJmMX o7`M޵Fi! IB:Z5_ܚ{tw=0AKuQTBpkPhh-~YBߣD{78ByI'fcl)s"\uk@TY(x5q/GqGuG5=rR*akf?h׺_vNu`="0b m> ~PΧ BD|Q!4\?5 = D-k)tZ%jRƽwݨ 0"P q;4]XHKac̪` .i3}XȀ\UJ7F~a> އc¸ 9g M=յ^>j4Q!j(ڢdM8g[ i8U`&8o@WxvH{}:v'q'4lb Vrڄ|$ahb/_4%hGi}}$1Xc(C)`3Ea\C<-8jԲrTH Ѕ$XZXnı}uXO50ou?C:4uY IDATBEp~-qa&i~k]Ni3u(h(`e~# aPJ1sNv0* "jd 1s-1bMXe~jj,8'L"}Nd#jӟR`擰[|Z;u׽\ӲOumߴuwc98nK*Jf7231Y4R6tY,KWĺY5lp4%o}*"Qd&@r9;g6KNb"gfncn~X/VS!֤5HN9KFݗ], lt{cCƘE ɭ|矯z/.%Tj^2 J Z<rJty{gt>u:N Z/ҝ?ydB@չ_lW3^XWw^Fj_H5nL{gxW3i?[mI4֭6> HE֖ˆTE*[~uݸO9uiX8ц1&S \ uJS^;L)oQo5wd\-~nn(0.~۱tC?R9FRj7AZkJūME a7 ~4ܶO}iYōln@ZO/]:!ܔkNyk x%=i 9y_7'>Fk[DntҨ9J&_ca6l(ԨZ[SOc*VObﻋSUGF `a])EhWq]MӤR4yeI+}Uz]V,s"B]oj)dчJN"* B +9@3*֪CV/"v}84{;}ݕRZ=uVjM) xMkvSqBkM>YJ^^ư1~XxgЌ/A@R'@R ]'^RV9u]K>UZc ?~|߇!??XjmyYRk0yOlc9F(yn B,cc,)1 s)z #>>>Pt:KA V% 3ԊΝN؇.nTec>^zSY[4ZѩSR k>r89gcڸ{ƅZOOO:M9ir֨nWqjSBkMΛ<ж$QεVm2ﭵvi*F+CmWPٷCiф@ F(z^\Um-Xk~'O>"rk\GJIN!mi驊Rc. ZZkhJ0,_򗧧iRJ{=u,wMɢeѶY-K)VRqZ8HZQ]ff<[Rڷ0f;oIukJWA1kp}%e38iX""tǵ50!g[k`l}@!k t<GmgtR;3Ovt:ݐ/1s]c~q1׏wMNb|\]i[T{2Uĥĵgr9]. EXcw|:".F!,)ݧ{B`;||:ޮ\ ,EJEca9 .c4 e"yx:H7Zk%VO "ڸf`FLwQR<Le<xY5XHre]!yvcf]}4|-sGDݯs^*^M_JwP4yJi `hKR4ع6w BJ`p>%չ"t=p z_[Df9Yr7^Qbdq!1, Rj5被}+"u~pZ Unwxz۟KZbu}UcM캡341# ,pcߏx^PJ醾VJy~~6R(Ac͒Ҳ4MuK$bB<_.[-WPJ}xz:\ƣGkcѩ8`꟰zxDl79~O!r :?ԾϜ}^ evR#Zd)&U%_Vې ̌%V0 p53[R[n]?Qg>܎#Q(B"Wb+{>^7O _=_ztȽ5>ӻDQɀiMy^1vS@@\:#ӛs꽹u0-sQaY# h50նr(LU|p96k7tU0+cծ֜~.ཾ'G1y1X51;͇uEzO"4eYbms^ι墾]UYۛBS)EtD6 }8 ]CfvzYFNXtٵȴ.@eڳߟ}}*Ӥ5\~OB\Jd nG>¬QbR # FkZ2Ѵ̀TU)ĢA]`lrffy4w^.6yUOZ 2$+^TyK 5irkb|<)Ղw߮xޗR7*yXw&r:F 2yI%V}z`-B6z.XRrnv^98mſXn}/1+g_Fh hZ "g = s,23Ptڦ gVlidmaYY I 2u`o9CǏ2i|jUz__q\!Ƨ-Z廮 EFnZyKID%MM7>(;EnK܈5UmT2[W3](3ڀ?ou-w؅޺Uҁh&P=:iItY5r4cHX{W뱄1+A۴$RwW~#VGC^FQ?(f_ 3n׫6AӲz-)\_Q"-.n_ZkAg{/M4{G%Da4Rr~;f7Tocm Z3ƪg-ZK}7t_PfU$jUàb>F~cTW6!8oeb`D @js 3HK\WTضzgEР"&]fa"LB\Z֭΅A(@DOvN2p<ȭ k:BjJ]1m[*UZPA =UcA7 bMVjK@<.˟;Vjk%!Zf`{pxADqh( O(V#""Cׇ݌AD+cݚH,MU_""/U(6!eiw}]YibUȌw[Pd"LMx,yCM vP">==Evؾnvcf,_4 p~a[|Y%KQ>{GZ"d֚Ehn۲@ݡ8Yf84"gbR [eaa91/Ώgy8Ez'!XHқpaUS[_;c>&RF`Jw=vƸsxn7^N!T476?YL~#s 5W1åLbNL͎ޅc-*l*K|f>Wˡ=wvv:]}8HЄ;zk`YSJi!x5>JazĩN 2Fu syBOi!YҦ!D(4ZKkl x|8qЛdwo?vPcg}/pE}G4+U#فPC-/Q?#G;c^E^Umm0 agB$!q|,B!Qk|>=½GCC3lLos^5v)FduYfi2 MHEǶMּFv?XQV #J﮵S#!2Q^PîKS}g7@Eں2!ɶuU)p0倊k-.Pi[`Gki~k~ńPJYuj|>g `aksr {ǽD#S Ҹ 8MsΗeqH!%fZ_k"rߗnܔƀ혶}XU=y u>S,Զ-7V9P+zPA&܄Y>%"y{Ιwٽ(iA* =ٴVT2^=8MOOOIX?QD~?0|qmW9ˋwBpU[#t9a7p\vr;&K98a5MŐRk-oOh44zǁ/!2{=Jizcr>GNo;8y]{Z+ džkGhoG:c?n-zԌ>*܊eA+F`-ka23;uʷ1A<;m}*Wc MRfA 26nc}E^rϚs"@YyCDʁݻ_>}u{4ַ͌u˙l4IHKC3sZ3q}7R;jVAz,y_E*Mo==.aу|m"RZMi@E,ywpIZ} Hd*@w~5_ǬH5'v3t_7ӹA|fX}.xC\QUygn7࿾~'xZO+X gZ+f{,r49w^{潢Պ{DJ.=4輷 Gf-\ydhsw#0aP+aO>\U0%@ + vT@i2q΍C%Odl-ZV1>h2 mRۊa0/_rζYWBocp2UYu5xRږu_niJ!X1m'ǵkC%JKR*µZvy"Tʶ7G 1 i~|k[&uҤTXjTCm08~[54ϳp[ř8$o~~QJA$4OkiR/ RrvvUJ ӆSD"$D{=oiC8 *xPlM50w@ȃ MSO.Xx3X#VhkVU3h1f#ۓB9/"! f>P,\j?hӘ\)ཝt2 z,iG 4ht\. wǶsNhF%tgT-9aO'!ּ fc⿳Yq#|lv{/=] ;dzQoXmJx4c_Gu}dD$.{'ED= .؋WmS}_i/XpT5 IDAT=U}_4ŧ :x߶MEon1sit"raewnA筴o_ɷ"}jDGaiٗ㸷ᰣ=&ڞ4C6ju9svTK)eAG Q߻/JTGfx{U$dbkTZs=Jr]=ni_35rw U-{/ZϗKSz2H_ ч;c\c???E4CuN73+ꖝsaHw˖5/kOvfhffSR%X/!ƧUO.uV6Nّ̤i񧟈zw7|^s.%w܀20 a0'i9Ra"ڸ *¥U8ƬFz;% 55/ >$a&ye1'Z3۶qkt!,pq}oRW&Kc·m@QaQPfIB()A*!Zc TzmS8BE1C+<C^!Z8whzRrνcZke[h:G!8O)0%CCC`]LJѡ}WBR ӄ `!Υ!9"$r9` ]a`!$p$I180}B})y~z/51v1&;땅TWZeYETBDښ787]Ys~_XS{}j]aUʣ̲>mX\k|>$Ӛ-r "P ׺׶2JJ |:v 6 DnjbQxԜ=^=D!B<dHݻw9|q辝~#T \W*f~'!"~D@qKC03sd!bM2k=|r.V\sVj,.blg=I,O%D;XVCԸ7Æaq"w!k>vCt~GC@SaǢ=L<W9fFǝv/"U[ځ^__ẻRr8J~zoXr#pU.YE*V,1UK1A 0<==xCp{zYq/6-nCzMwpa۶("`aO)4ܒET SH;]s11 h'W,pDsά#w(͒>ڀd?m+_11sa|ӗ/_ͥ*7=???øoZQ'Ͽ /"`g-fF)DԤ6!¡E;ggXnb)8@@'D%FPH^CԭsRCAO.d,ebP2"jHOBqDkZem/! oooR+1ڧޝsNUgVJ)@U)%) Αw J) d8n)(#++* m"v#(H9G!#bLqP!Vb9/L* m۶\$0VCM9P4'hGDtbSv_L^kQprMSt"B2|#ٞu](c/B}XK1CJ19Ze>ȑPV{K){ò6w8 )^o RRa>5fuه،R+^_^eiۊ!hW4!wQ0lKk~*;ۋΎh)D ;=jq4+"!oUps; )0at.*ߗݟ H:㜯%Z-Li_LWnECsБ"E C ]o* ˖98F.؆<^!%K 4ڤ ȍ~:&ˍj9Ztz#4.Z|0LlS';؈jR^ }J!EO.TKiFeYeds3a1t_|=l]Ӓ1 ֒so?\弣scLà})9a2Rbe%tY -sATv8"BD Cжmm lи!P\[1N)~5//˥ #Y mcUCR 9?d>omLoo_j.\_NOK)_~yZmϗsLqhH\`Ut.Mcɶt.~^?jiOy߶khLnf@p1BkՖښ3M!gwDҊlqS>$?:?iHm~֔(*dpn AB|.8˪HsØ5eH1X!,PD|MI2NӒ3:dSEX8NcGVaiIAcJ!k_~1 ;qH\UJL1G4MLoebH"/i"08~|}͹|W!*moqPin{LIRIO05"8qfнUaQCYcV{;q1zv@mZj*ɜoc7짨Y1IțaJe8u- MXk1AL0WfQbA>BIwfKޛ{GD`~(#2 b;>hT}frC@H>! .o8'F׷svM4VJN]ߥ}I`Eq *Bo+hWL,3Zn*: z.z/Zt sz5C^`Y&ELQrVmZe>_ޯ~[81% E x>k|ҶMN'w"U2mY RtscnAm֚ʭmܗzvkǝu|; 3.m *@@jQG@cvttg@QPAcC>E s>u뺮۶n9!n{b`̰OHT)BcV}*}_K8DH/&X[枼)7@ -ղ2O+[K!j)hZn٬!i:a-gVHix~y1Cro,;8h_RtK5?`>{>`ߡ60~SM&fNdܕM[bbTfQZ&>aH ^K"}o'@TKqN6s=(n0)a@6kN#@^?X\ `|my+;ԸƏ"CZk4#5x!]=PĪO{ֱpcս Uj'܅[MzbH(۳1= 3''ɮrAPxmx} "TQpd2GS Fs]k&lGi UE;އ]-#$mݑGz4wBk-Jm Xk.-nH ʷ+=??/& Ҹ*\juBFia+86ny^Ş !_e*Q3؁記Rw=Eİ .;Iob|>s ):@@t{b+* #TU6adzYO,9Yof1 eJ)!ϕ5ijO^__??|zO~z}1Co˲+ &̖ jA;EXッàe)۶E5Bh#p>c0 [k P?Zyr`yMTq %: E`z pѦ09d6URoNkY7|p),/PRƤ14y>RJDںm1q4mPD@NJ=Mo;b:/G< `K-3}Ma9 p'ޡ 4ۺ*AZ+%HC ADK <~fnsRD.0Tր=גUu׺ ޣJL|l-8i^[ EwZSѶ܁L[zj)Gpc/cl'zoYwq4o_~xylL)xi<0U>-b|xYzZ姟~R~˗/hW|WRu9J;顡1!ދ~hH?fݐŅ(_BD>~A(3@0JjC نkaeǕq֮a7`vVyv#a9MG#AQfH* j,kl$9lqEꚂCc}A>^]?z#uQ DPޞ.\.kKw+(VO'ޗv910;P``uī=?BY8|:q<,jVq>֝eXce: X:YF?OOOy-ڔ0$X'5CR86;RZ5;MplJEozHv;2m_ň|:e̩#TRTE}@BBp\H)ѺZp5Њ#"Bne#:1 "q(ԒABZsm1Z?(""4gDl\mYMTCe˲,.m[ -1MD@3-B;\hz;`k dbcUr~φs;9Pm w IDAT, >Fk}a95"ʻ? yV8XЈ|ph@圑>圍nG?:X?~Ij%3Nηbu]R;Rct&筈Rz4g`]W| )x[7lܤJTmlنIrJ|U~˲\V3[xK)V1.a<|N1]5 >k7 (6ak1`܌.胝a`Ԗi_!9́d_ Z勁mIL1ϳ0 hN\y  t:fct" #pu QxRJZ+jk0ϹTߛQDbӧy{vDn8Η7 AT]j^_|e>4C~w-CkF1tH,b՞9YڀV(7`Ȝ?7V`!$ MO²li7X5:D-h. {;bT3k)c:fKo6iݲ͕BA9we1\%ͧZbZ#K-Ui!qr*" ҠUr7{Jm*˫'c"Dٛ< cO'[vmk ϿtA+Tv!1r)1aNKLɑt"eYj)佖!0L~E}mb6 N y7>&QIEbu瞺D&&kr>0?shёsa/Ҟyasl]qI aZ@Y]el榨]։GW=pR-ov8wKjKk!f@StR%1&kBg&mjΧMDy{hSC\Y,,p&lai!>!"yn+ 5i۹#la?N {OT/Jcg.U Y/vC=}[~̿>j·Y!X<432`C1hc2Jke%,!Cfzd(>fuDZ<^1w!ɑtdjr,LK۶\%!ٳl# ׇZvIU1EB ^Л뚭oFe]$ُPAFXJߗ.ǽ؀>H ` v-0bU='f[nMԒX*C,Z-yb~dsTV[>dœ=];Mƭ=sє0$hoo pl\rl @Pw  :c? emQm11Vd#bqP0N*BIAv<;j-R,M%grabڬ7g6 XjravraqyVF΍CbHu\;Jtn\WRearr`pԜmW[enn1Q[~n||[YKCoG+;EVUhR18U1OB䀄lKA!hP uAL4n!Kɑwd= &Gl. + ̧Z8IY~^ɑAжez"9 8cS y~/3ljb !bn J-: 2m&^WO},aӟt>0k-RJnc1-fZ,Kܹ#Qpc쓣Lciy}=D>PQDTKCZ[Ҿ 6| TkcjUQu ЎnC^"tRC:SD :vf]9&t13wddw?9sTWUfpw3SUYT%ѝ' n.;3)@j[q&̷{-;+f80d7|wXuy ehLKlW8͊]pvMwGCqHGߕ5l_ѓ}W@U~~~aji3 } PJDð%_W}wG<9fƢ`lIiFvtImE8jcQZڷmDہ)d,Bɹ>ٹ""VWYѹC/G*Jwv|,>U^{RD}ߍ\MZ,D*}`Z[v6CۛU0 co?JW{A! (}rmj7o\k+6F75CJ)n^ӠsޑOE;Gt^5df QU4'!GwX~'"qv<ŧvϣ9a2%b^~u[&;VuQ&Ĕek*!t)Jzr\ry{'K2~OVReFwvC8<зw$?OODto+нQDr[0^.<zv˛cʖGKvݒu5Qk͊mܚh`|8q___чĔ.cSEy-ri,;ˆ_Ç_gz\3D?v5 tqS kVrqݶa7[KBt:Bxx aU]ꝛǑ]>|hM8ix?}eOCiHf1BPxC/8 W@0?<>RkR1{H$Xty{AN%mD !w%0'J#WkĔNy1O<另B>? }h(%Da1*<j)-o#Χ4$t7fÉ*^hIEeVV݊ 8ARNVvԑ]oB%hɧ9 8su]kmjm%RLǯ&H ׄmn~'8Wf ӐiL 7! I-Rwh@<9$DwA z|0!Ĕ8B^V+@ޡP[kL cD8yג+\.t2-:kVN}___[k1į_!|83n7"ID*El˧O!(M5랯Ov2f;<]){.+Il]FKODt{vvf70@nGEI}p<քA{ :CdlqߥaazBpvP5v%9rDd7Tq&"ƥRs/zx&vn.%ŅL`qabLHhI%*+$ ;;b9=f<ꇍ.b'IWi P8GN>4C1P)Q!5VYg}?(}Uu/O{`}G̱9yȦ&v^[c**vHIf#a"۟6Oއr&PYdK۶mO5_=B"me9]ފQկwj.U{ϾbQѿ%;-ӹ0`YSq,/`ZͧӽT808qTZc2Xף5=NZ=x\RJϗ3yw:^.O1|p_vy@]mッ_,_~lˋ\,Bz߸VcH黵ȎbBmCq&fPˌC3UsNX}{QV5gA.󶮕YbJ[sd3cIosژyYmDaP!P[1=??iOƻVDbU)%oR2HB)ATr%g )ݝ^<)佯Hv #MTH˹[ɫBV,a&6 j8moQDFui} T n=BpFsAD ` >XˠUPfvi+.liLDm,r9? `r)EU]e*;RC5C7a}vc,ّvr]k)R#kR!4Ui"Dvׅ~k: ݕup.Rd ۖR4E00=;'aV\SgIl=5/i833_2ޢؾW:6KKsCW&1]>41-H^+XS cvø="d 1 B^z$BZcDw"V IDAT!jI*27@AkGwQ^a=ӯbZ}p[nZC8-(Kv5Z{|1{˜|JV١xxX'xii?{ i6aUcr27 >N힟N4  vw\jt>ΗRs//ƶH?1UbeA.xm%"cܼ>}Z: ~]w`F@4+yɵsVanww~CLTB)KEGLDX%|T 9omY8i~>?M䐔jo ȶ1%E]Ara@_ϟ___)s90Kq`*^6t^jM!!%KahSHeZ?`bՇl#Ƙlfr,7xHi`>,6z6`;pS0gD\ iLz.˽պ,ɐlT͹"C$rגNueʀH)WY1xD!&./(sHn?4`9張RLK)9GU H 9!hp[xYtѦZzU L|RJȀb0z(9VY$6K>Ql108y0uW"9p,:4jP36nEMRg uZ{"&5_la۶~w \7CnҝR6nRkcvB 57SSn.aJe^0R)R{(6z뷯MTB#t>s㜳3drȪ˥8H3 TPRaeGACaau-D}p""t ED-p͋p? ^Ї}xCgNQI&=B2. ɚ\c|vjDN;|Wi&~&+Xe1Yt) ? Sm0tK`utGeʡy%#3l_F6h/nh Q"-ߵV=%{vH~OUtkhw ydn#Z:pc{!VicJU~Y:眃]CDۖzu՜>|͎Η3W{9{[՘ITTrvC,~pvnv~1?B9H(C@hNӔ~n7|VpJԇmllu]-oq7D9D;]N|ݖ-o[mNp*pαV;j3ŸTu*8s w>TfNJ!R]+R#דwr1DXjc4ɇysy]owJ) "(9ў.[|>x~ϗ˗/eۜoooۺ-w- 9T[3A7,Jն,ن4zEΑZ*]/rZ ǡۊ!kOG۶]r8̧a*+@E<(4PbF@$2IA<ǔZ BJ鄨+/2{ ad&ҭBz[m"l@q\3MDmk &Am@.L<]M"⼭q,k5yz˹fr\`kЪO$ּsa!4D 37:Q=!|&1ƛ%Vnǀ\20;Xz{ <18 G T|j/= h\ sUy"974 {mm;RV>N֕ڟno7Y9}cׇ̣}=%cah])eKk~<=ιaծ9iʶBm|Ͽv0i1٤續psUͥ h )L)?r@Zk[~_Z㔆\J-"8ND$0N&9< ߹|J>,aRtڻV:`hhBuY59lFo/pWNۧ;{_Zd?ÇvLzp:,mZ}/B;BVv@hVUчa(/J. ."wDn@b5{_jCDZg)]DNё1 Rekq8O9s[!F!K6ne]sqD\s`j9;8 zX%Y7n{"P֚ ; ||!s.!sC2])arZ*`]|a\B{Vߜs1ak)FDҔ c46"a3VKET@c?EeJ+!!Rd|y?v&Bp4&*Z,w4WnZp>_qZEKcC@8P5P%ֽ?/VQ(ɷowӬ :(*jG趼} N>MQV j ]p&ﴬeKoB g̰0:$n OD~Z8ڑCADE t.|s>zEuᩨwKb_y_sZa0S QEy[uYU ň#VmUו׵-w9#rds"۝+QeYa1NmR8Jcy J k7ްLB 'M@ұU~{ 2KqJcRj0 x;?Y@f?O~3h}޻=`-՚Ǧ,R;Q}Grβv{YI L߱Cq9Bw_`! Xh^նsYbMxMl!늦aD=rJB)y 禂zvh@&U-{k l*ҺMC }hy?n mԽ8!y헱G}37>bVw<C&#lq~aAÐR=_vg'4Ƒ%#W97HXSe&=4`5<1ո'r`pm3tJ1n`<7=+FC;; v(v#\YU>Za6J# A,rO`e]@Ts-1eY(Scg˯-w۶ݮ׺M;gt͆v'wJ)BA[3TS/>*?~m 0D5.e6kR:YUy27NQkYie\s.ZcnQ7豼W^ X"U ;5ڙkY,-:|}?GZ7/lnA&?kJ9?q{~L9=}!%y@bHwڅ3Kݯ "pEU- >!}#`] eee;kn* =PC}eO{a< 랓8#tSVst2\{$7$:j*!K 0z}.U yg= ^WjЮWΜ=ҩ_=,؍)יܙ='{0#ꨇі6XYu \2Ľm?uJvT-t=!}ވVJk!EB1̺jP=Ɉkk=#|Ҹ6TCuۈ|Yjܚi9}TCD@ {7G"m^oۆDVt)6!/mQJIE9;r!'ZZ',$M}׍>K/h3es-[;W͡oDTk_Wն6>׼3Z- qM>xۖ|y~Ar߾|E-4wt9JLε"߯v[EDVZe[vݖ+*ܗ;trs6oo*jjt|:w\a^j1(R1|@WL'v^PVS+Ah`d %9"b7>& )Y ZZ٧fr^RF!Euᗿm2,<*7PE 8֦Rah ODkمP+ Cl*Ҷ<'N1BޚhAՇRBZ ZZm]O5)YKe$+4泏qYY=`dzځ@3mZ{fn+x?NBNj`Dbre S@ĬBUt]YڐIDT8u^;sypȹCd#E)xr xrAL`.5Dƭ652Ë1oy6k1ZsRViMTq,k{{!ӃS,VHZ DaH&p!xi"rΰm\+p:n5l{J) <͓> 9ZbQ+J"vޮlr^583 l뺮"D0Ĵs*{^" `Oh>&l(DxGoFR{BQգHmYp89 XMDwΨ~w!QTl}6J)RYߩNP}~w׶ZI@?p4f k)vdQh73H""!,RPJ)R9d5 ٸGN]qu ]aKKF[%R29Ppm,ކ!ң:PFZsS)K 1~/m kfZ7M",U E_!.~$xxUY,+=3UN+ftauo[QpozG iSj.k[KV ~snrrіHZ߾|0^c J)yGrk '[tj(@}<nRgYU!f ;~&l f6|V-!%#9((֜s:۶nVJijn#g59Vȷoߞm4<e>h``nǚZkmr>Kl51WP*@RpL_"m2x_KN15.V(p \l'REqx;(|m/28DnHٽ.eH[\wtCjmNaּ m(sn s3-B *@sh9RKC"z\xz_;@ƾ!*`gX]˥բQAxQVClq3/z]8Z yx]uxtt.woVTVqN'R\~? vP$Բn ,c"S#\E@ij9[RT)#Tit5cRTjiLI=ň჈buE(ʠH"SOPz>~%޹V{/ҤKϵH nTAـHP, T(9"_3 @!1?4UhNS8 s-bzݚRJ=Nn/*0ϝDk"@@G( #)d|oQbL*~zooPv?DD??_+* : w}'Br9d O{0JmM@)8A ,ߐ4JJh$g#Jƙ )y Xlk@<"In vdY%ھ1~ QhMjE$$$(.*-s;?stDZmd% 7C'r䏊ښb6kB-sn"",ZJB i BACoVҚpS@"̵ A *nMuk7;낿c ȓR .E@4#fh> 0·Z۲0TaRjq΍Sbf:cy" )scP#+9/OgQͥL,u] ѮUm̢pY yg&y :ܪ9o,T(wGԽ]1Y ]K$O@ˑ!T"r0(| UO5*,ۚ[M y\pH[ӭdQ"yUJ-.B 9х5a0*њ!eYs ȖwL4﷛@8\uk,6GcUJ>Oo˿;}z~2< Zj8/)%nM{;9SUVˇUnyS޹Z3!@D3P!8,۲~xy4n)1Fc:yǼeBJ8!DVr)p^,˒!)-|VIpkKTU9!/iN8LSy[~r^7.z/š3` |: xOyη;ZaG+M^>_\;]..R0_/m[_>} 4O0͟?# IDATs.Of?\y,o|e8,2?=74" 5榠.]W2)lԒ Tzc8$|ݕHV]~ܼUnxn:M#*BePaVb9rKkZaVRy(+yǥJ-!t=pyybR@ain=zG1 škяs _I)ڸThBL9šRQ"zR 6 TBcLR2 1^;x '0 .<DK.ŒG3\Fd]1Q,|mSnnpyjp+7LiO7%o䓺_Z/kel+pZYP`>*ԕr'NfpxTB)zך[.އd@ ƌ_iiыEQSZK<5ׄ[&ᦵ#CJq>/>ܨ:pʢ8姿GoHy+f i"2N߿~ƹa駟Χ4Mo䧗?v!_UOt\ۭn0i !! CO]ϲ #^@0+R\HZJqFLBׁ)qD?ZB=-?Ω:ԝO +K H?KmL825fXT0k lؾ&|tmmQw%'ik[.9im8N%0=J=,dt2ZM=dє"?ujSDq 9:Rֻ2&"ZDJQ{?RD!R]VIcU'Z5РI@,fM ,UDO1DID"亇߉pZ|Gi>!=R:a&}Lɇb\J˟^CVHk\[mѐis!4_>Ɛ,VjEcMDz\[N6xԎ={RM oͭR &4i2] ;nk~眿~\.ֹ4+کf۶e]cdSﷲ4>??Z xBRa]smҀ0Vժ\gA[Zu-[[˖qj+\](|l@DwT;7Ju(2P)=<=h ۺ_mX*( D׿ƢRkݖ;!^rcomz-JmfB˲\K-jjy1)%1K c~~9BH**.8*y Lh8BJa26ߡ>&֊.zU-1?Y:fqkp bDDUG@%(/_iEGj"yH>8)oY <}<ϥ4,oK, CDx@,ʅlkVyNs,6q>@P~+<ӷ|8"z@', !yy6d!QZip:#qt;یDFXN+Cf>AURAx X-W'V |$dL p`ib]"DG%TbphPZ!znOAg9k)\kkQBRaޑ\Uk]zD&0̥Hp m3GZ\L%"{:>|,EtE9_ _~D⩪<">~B~G,4RRhKE]oND1żmۺZȑQл<_l<EgA>5;X΋6#ArJJ[ ݺaɣ9v4o]({)*?L5rԟ`ǴݙĤ~, 㱠#yDG!vє?̣OJ"ڨ5לs^Zk)1K }(G+yE$SpfIfp,e5 7eW8$VDZC=`&YS{RH=\֭UgܹZb`P492$0KQ91)y@Zhq7 ": 魫 Ac͋̚ .8lލte+VshQ|u[t?do:>~ZqIDFs eǸ&[;Z4aZ[f?߉$&Wlz{瞦cG1hq/k#rMliH%("z#کB/v޿=UyDE!"AHuIHs3;$\LĬ.%.$. o t%w)! \jtv~NcrkOn^9\뫹Ii |1`j'aR=މai_fi;k|`f;BHՔ)U94v~{\.eY@Bsy ģnB;{b}:j9~uGHw!# 6%|Z9Ҁ+p>GNYЅȈ@0kcp|t87T_k N|:"ZA[^lR1EڤP8 Q#ZjZvt#) *1jUp_~oV췼*OFWd\Z)o[__!c~?Z߇-QO|̦n/>}l$mjKit^{z_0s-vv;v+`a8[&zB!)|;BسۏBWCnsn%]A6;g^ٜU)p{d1QQTkp~Zr~&)lbqMq3GHsؾtDly鎮+!C)Er^ndaZ+, ޘɓ 8}*&bDh](\P$\HdM@YzfJY yîdTa?FA\"@Uv}湉OR+(@~y8qh4N?^Fh#g2eV&Dd9@cfnazvxaJuٸ뭸޻w1 [xUڎݏ``QB-)@s[=EZk;MLp՞ˉhؚNޯ7/[R +-D_ $%"?&fCIyTdB=Oysc/8N0N.dx-9|Elocn]2`Vxޙ( S=((C2(L\zbz:2a1~K)nf)RT^1 =0((TM)===Jѳ=n*|)Et.bGay-gf|} Iأj7vqG; Iluݱ, <伮 rgfrުG֔atc{D]󧧧~{^?|<znq0Ĕ(drTjUXͳظe~^>p0`};GqLF4Zk|^pGc4͈pߍ`@"}d.m9gcIJ\l0/:H͏7A-[RD"& ;~{75v,4٣m \fh߄@Uj^PQ5B!sZ-TVM{}kc, *KH;i!("Vrlc^#sN}хڠ4 0>H>4xOhDp!䬛`̺09 e_\խ7u)E c)L*t9M4Ӑ%*ڃ#*yUjaU|mO·c ,XkD5ֲD,ܞmīJE:B 9X+ 0 Dr^rn[kZTr~ֆiλ?:{7KlJ)z_~~?LνeιN88Px8y1x8GV55q-z,Քt7;JSQTAJ|,iM֘'UYDÄ}+],GDCfKD V;YՏ&%c|OM珖uc`+^NJOǒw ^ ɰA' `c˪ba=y6ՇꏁsN,ߺa+zᑽ>n(7. DBx@s"IEU5)%\j CM-aKW"-9!|Ps񨯨9jaۃU5Nh6XTo쑖n&$jo~aͷhS{cҏm{F,'-o1dlYp Rkި!1V#S]Nnڼ~t: pTv=f\r!Dt>M{q[sK-zZ\R7_L;^_s8vEgȈ(пa|MD Xd- >վ. xFgvÀYf60@cr_~޼6Ȏ(FmMyTMd7>1.9g&=9GGiP+\o*C2Pi'!{C!-K#O/ǟO}e(Jܤqz@3!i U| j 0@Sbؚv{4P FnM)%rz9/ar>͵Bm AD!RV*954x@*qȳqMײ4DskMjn V@D@ cpD^{+@a1VU \0R3()ϖ BTZU{@aMGj}4h{GlHj1ۺn58Gf^40`rϠRqs欪ooo_RK]z}ӟ~ۯ0v{[s>WZt2(k!7 U)"rI:<0Ǡam@FW~16z{G\!݊փ%c}߽+ H@TW@O.8W#8YVB ?ZL9mbv[ #zt_7e,=.x3p[$: 缷EG$MU ffH_A꿊1:\i%z!MΧrdWX6&{o?w>0 `5$/.8P*W 4tzh8-cOFާqջ8 !V*X :hҤw| rޅqyaƥeɵZLf b`#J"sbٍpL)ٚlbJnR~{ψo}MDȹ|KɧIkcQ"K>ϯ_lԦ'm;b1_oR2%ٌqc-Ӹ5Sk"ݒ] wZX;ڂR6=qNTZ>jI+31$ IDATvv8%ס^Kk Fz#l5`wtȍx e noj(yӧk|[m+FEDSBG"@l{F{RXEDK/y+ ۳kbs>9gM2ƽ7kjE#z7:9^j~>bC Ʌ8i4]`=>[Նu2C!_zR֪Wѥ1v;;BXE>-Ln!fS3E4h^J~n6vqm ,x,{<̴p~u]W?vݺUnoeX~n&-9V}6w6Tgy -|B٘Z-kv=."ql͠ C Pn7cr@)T)p!9`k=kׯ_Ĕ۩zLe۳eg +||yަSG`~<><.V~-Xɐʭbp5[k/jkk|1۵{3F@ ޴k}1Z]->8Gv 0CJ Bš"03O1 A8ǵrV' Α$ "ٺBF[m̊JA"RdߗZ00w:j̀䜝>})k.VMQ_T$ӏ?DDAU,r lp8O׿uG̺ Ӵ,wk~Vkk݌9<_w+[]4X|49S@5$D!QgY#-Q ofTm}uZek;~p2G>`Q=feA@m ЉwIU;=Lkbr\tuNֻNjAf:~{Ut:\ƠBJK)\.jV}}r@"JC9Tfe;=:?b*:CVdq UyRkkS}Q̒`'EU({OeOڍ'#n7S-뷜k΅٪, 4?Da "C}l)%܇Ժݫ]j `A] RaBvK2ƍ{R66J`4M`kop苵q׫ͣȑ^ovaivR˒IIv}|͎`~iDTkRj\1%mw.D?q7MiL1*w;P~7mHi˸oBۗ/}Foifz~~z~vlخWuWgMʬ9iZ~o>EbP@%/< p8O/M$v$橲)?_. o5tԘYW:;io۷f}" wU DUn $/BiiY cie T%<"Z*3p~84:r1%ӏ?>N,3(8g`ià?n7;8!U?=WJ1SJCqJQ""Gz\ /*eR"KYKsm8#"RT"O!祕{ڨ.gP)VKɞ<,6U`X`(XE9wyG TKm~HJniIHd '-C˜7waҸS j]xƄd.MYrS Tjmm͇ 4TK܎9͋ N')-OCG</e+7!MWM)BD~y/.O/"|8lfJRׯ_sxz2BD.˗_=<A_Wݖ#>KYrCl4].Dv1&3qoIU/ !%Ij_8Xwι7!%0NccVE3[(V\{h6]`;Բ%JC5Zc"7NǓ=댵n>Zh 9֌a0;<϶Bقhd93*9_k\4h'gզƺuѹ] {O|n7ѼzksJ)7&~}_Q/_.xyy>"z<zg|;)a) }PU˚!c)5xkY-vzzh 1 pbL)]gtyy^8F2}qMq:=ulVۆKb WW1sZ Dq(u8cO8==Oi"(##be)ʸں3ݐ&ZAA- @_D*Uaa"RD"út)ϧ'ܜ3pNP* 9}8୵1Ҁ@M*×Ɣ4\ OO@*8seyH@R¢@Zm j&dieAPZAJϟ s@S!z'iH4|VJ%nEE␆+JY[U\JA6V-e[bfUʕʲQ>namQqrMra0#Bp8=OVB\ꉒ웒&@DmAl!XbmDК2[q)% ɌWZ>\mbOap!p,R2=˲< w4Mnw^eo7h-K>ϛ y罏1v!avϟ|vx:=qsْy`1Yc8ڸCpJ-w-+Ve1؝heҶP}GX&!N[rxl{$'~F"܀c `nW4_d&Tn>/HUl*<$vỌ71x ̭ 7]FRL#b$;r[i^="m7(>xDԑ.x%.sm5Qιv{w٨5=0vkm,C8/n}[A#G4S#S r>qM-E]xa;ya.cɣGTq7 F;瞻0jȦ <:b4TfSj3>g_+薵h)FEg௔byޒ [.wk>`O,F߾}3{AFcLWLVѓLov^,BaC"V4 ^y"Zf-.!!{bj{{SCH!/o׋z oC +?YV [٧NSZ$r)%ϋoq,,B19/}2kvlb_ͷUR%}aBO06!c mY4M!FB,yi%7n| pX m#xW@˥6_V kWZЪQ7 iYs1q{zzz>=Q@&lPU:EZY5|P@VTp. !$!B!CL!8g(12 r %S9"*)%^#Kci T[B- \~TUamjVmHUѓ[""ߗuS&CDs :U L0D ԁƭ*,* , T(Rܠ.e][f>F$.i/ Y˗OM5g(Rh5H< ir)֘D+Ldr ӧϟ>}VѼ:9DT, +{v)yQ~qg2/|~F[RJ?1,%{P4 <.WG"%ʭ-{UC\n7@QJ Ps)KXDc޹Zô{fo{_9 V0sGRӊ;яkφ/F tc =IOA!k^-K[2 l7D&#ZVPB$UzڌōQQa-CD.8tfg^L k!6W&ty<#Cշ=4Kb؍"SqmC!9RJixõFU,O=n< CDzwhİ}\ w q\[ǟR_x8)zx8ǘ\Xk/էF5t<Hw6f|>RxbCekMjq!Y6 eR[p:a e9|)h%3Qe{ّ0]f-9Kkm{+"y罷`v཈\O)Zˊk^>rarCXAOǧfp)R ~-S! @!8 a)X^,r풴L<\,|[^Qi)z_*`Ð&؊wUJyYe^YؑcR"aئ@ĭ6aT@m EsXcjq؟Қ6gYS䏑wg ^A HC~T>RǩCmV[6e,CpjW?!9IsG\pNpEu9*ǠtEDGOV'+8; %DTz3ZQ#x"o7sIX;u0%ªJm4!y >]\ C#4vwهmcvBp8ncyɷ֬3iw d5L[ZkM- 5*Q `ˠl`#fogEks)@Y8gRy6ӭmSeϻo mR)a :`ۙ\Rds|Gpixcc뙷z~0'J[gOV?϶44Ѫ-vl7D g3 0Z5ADMH1aNv r&K0 tyoK_O^q~p!b dS)O{u{`MNSoonӲ,1F ///_˚frOzQ+B ^Cޅл8O^~r;q7 o_{M}>'~s)ng'ZiZ AJ* gPUy|^| w;,kAcrURL*3!qO[+" @BH>}H+Ҹpo =ΥBɀomǣ0~z)5v9r$/ a$2(e.qnVDž!HD@VѤRm|6 ~\W-(ZM\ 4+Rby߁4@@Ø0 xa\ku *KY w0 59p<즩:*K2kyYu# {dra` h@ϥZQqsIZkv~3BI0D=F`yjMEx rF8 )[ cv8@_^_1tz.Ba n7^{M҄}#MDtdCMK)ǽuY+s)1VԮ狩}l=n:8c"4bi(z83D|6,z, av, ~+ˬR)YdqP"­5ra7U~ A7ȡ~lCQ1ăWi}W^}#Sk[B0W_iӧOyyv~9C|u* z+wǫ8X{Ā[fY,rDE0j`ڧTUm~yv++wECh||Àz6i-mB'푳jp] CD]o&|,4Gvڼ#FL{Pzz`YDdMV4|VNc.c%Cs>:;+!a}݌3e!jZ\=.RK&&_.Ajm0x6ރRSeuvRv)qkk, i%g ZU/V!VϏoYhe!fBuPV%7kf1ry{{Ys5 B{jׯ_jxL)icUͭYZ~-B ՚(Xz>yЧ>}tQ_9g񻊫z,PĈvU[U.$\1|>{0 9gZc~w'ɇe#<Ϡ2///!cYe RԻ0D IDAT3y'E{ud0.5p:/4E p8L 2W[߾vz||~iVa10 8rNsxUP "E|;~?b~iLHc:R E D~R}Hf.b>!) o p|EG!$@ly º*F44h.ꀔ(MVf^,0$U߯ =8OHin\ 1 z , rKY,ZNGMHfbb&e^ u-RFֹ*9O J~  K.i .r" ^1r 1ApU_޼ m@Hщ4VՃ7퓟'lu_I|>5{4Mve?$Rqlw]Wt юZ_I&u#>-̝36hڌsk^~L4>}ׯ9?ϖ$s`973n+Ƽ߸4^a6e!hm5 => =PeJ= fEMI?t&*(XH?[;$j}PHFk6ʫ n D`FTNn@C6 0!b@]8H{C@0ˆ$F+ە.~83s+JbAstmUAu 7軦ROjv?OáZk`7jPo,`;,ӧVK.a=朗y{78M̬5NWQzIiGm=`wwp[-/>rv펈5V5b =X=}Rx{}**py.v2O\gYZ\`V2J) hIp'L9h~H1"H1%ncbDGH7y7q9te: 9KxMHs!a-EJ_raB!GXSIRJUP00꺨PrR9fj8TzqeXA34lNVtA~w^@!բA+ " qyuP ,CƠ"f&v9b[EF*Uu]S`{'VJEsZUmއ*(5єS"R1V w6ܻM6i"l[3Xܓ@EC(q"rPQ Yw\pTV13A5)8nT&"1HC9 <BRRr)D;@*&, V)`] G؁4@˼xHE[Pp"xHk+0@L\rMwٷiXk#;@0}(1(*jfWiR6Eu蛴%-Mi暫T\s}7TeUGNDkIwlH["[-2w> P;B眷{)PJYZ[&ڤ.ߊZKkb^"n"X%mHM؀;9n*4x21[KJR31zI&*8ƀ"lP"֬U005Rr˼,RkEdmއ0ckBL b-5Ą&xfvv.&:"RrDZa ' T5iJ ̌XZ4_ FXjI9c\?a<;14]M|0Ce$&M|I/}FB#%YCސ0,ιחe^J?㡴k][mӲtGR/_8ys*]}ߣ?o|zjh{"t>]܂C·pUFvsʩtwKKWdS_.DbrЕZsڶ|R6Bu5efmuz%kI+{7OxH.K0V5fT cwOMZ֔h ]X.oU Lx gi84%YD}Q.4[Z#囗mۚA5a}_LEfo NT@kVMIkҖ)*Brr;}K)%J0 r[&m3-W\؋ ;F E{GUibӲ>v }QḐa ]MzD4MS1֪mx81 a|y~R3xf]oWtu]Zz>>"4h=-l1R%d7o^_Zmqdz$p&ּ^@^ .ۿ{2S翌ޠ~/?!~^H;$$!`i\ʖk}Ҵ>=)H>Fs Ƚ[mlkk= dj˂IFY<(xsGԂãIc{=3~6@HDM=" 7ꑈ~rm&JHyi^5UiÉƌt٢ۥ֚8_J} R]FF["[ |_n)YV#"V,2S1fܧڴ;fw 9;[@+ eH; ?Ẑ`GѣdlUfo&"b<ݫD~c8W6E)w9#bwYnvds ž}KkYMf5l0ZPjvgt:=ZwwT !y<˛L-&<J.XT uHl[gs77#T]a@48j+>hydMeKH͝uB&Ae6oW~sqc׋Hp:hwt8~j}C^|x}~> DtHԪzWii@[m]yy)7lCCҪ"攚4KRZj]S疒(xʚ޾!`+ܕ'UEa~%Pw{B\%x?Y3v1F6ey0Z^;se-My[> "5ZʺeT˲YZ a<憠jv4#qMA@Yz8/4AfdMRg5MS ""PM*(" ˏ%(HSFTЀw1HI1mˍCseceU7C3tZEIj?05퍙hxDlMue{9 cDT3vaM&#Dn bimYt3O?F2q.\xJqZZiY___ی˲;ՔJu@dN(%;k%|XfųD{LhB޴E\~\33U_R |i:^NS-ͥ&lneZf.@יnxkmZ.Ç_Ѡm ZoRlQ̇YrQ@G{TMH ;KD{jO76"b۱{ E"Dl8K`l)E a ]gWEg*>JKr)`MSϮ^ 9ZPM,l^VVBJk1<:Z3nvP36f䀤fNq`ؙ)8wRfwS]ƣHu]M޶Mܽw Ѝ;d:&֮݇?tjpwLW(7r%3?XtCHpF"0:Ⱦ{r|VMK+޽Y|~~^f.W9O]b =*[mꢏ})3>HMT6LJI[R*@_6s(j\@ sCvY.`lk{e4MFD JDK*E˕hSUjMú<,,ջ}]=v!2-djҀEkkQ6U]Ѯu^VT8/{O UUa]!Ftx駟omWӻ;NG u}Hd 1"b~!h'_}dвDmIw΢AU?YD!2=fiY^w^KaMt^/:DFٚT*!_cOBD4?-)νNf\:c_DA?\6 {NE]@vN@;UUfB'jHr%Kʫ=w!fC|Ul:K;iGD!~m#dim}9eo}YvNi/Ͽsaw֭QАCvi۬5[5+ܡ DZ֊3ju~vwnz6G*" <}yEjK1"w7eL?w2mMً^бuEZS*aOyoެ@|>c?}u/N32 D􇾔 ;l^lg j^#9 wGJxvw"@ys> n\d˭Zг²!Zk}ql>}ꙃ̘s]ժJJ뺷tAdX?AvYiB˩*`ZI]2Dh5貪&5+.OSq& wk2vyWw>Y:Kk Y{@Fr\[f3%v 0sjkjv>% /Dj=i@spKB@ iRu#N jk]ͷ뗆 #J JŽ}pKPJ^T@XUf HSB _I ЭiBaۼi~DlhM˜RZ<7hfꢋ3(zf4m˽GPjy?[ rUpA\pZ2E0 j 8ruz5.=**Z=XՀYJ!>xEA±sr@LMvsS[X} ""oz!!uIͷuiKQ%0 23s>D6VP0]7gu8'@}p]Y"zCUFZ!X[_V-jM[l3* 0yK)san"0a~EEjO6n2˶aUiuX3cׯ9frb$}bS%-;u=֯_֒}ιZ2R*Bks132(4E5 F FձcڵKٱP6|7۹j*{7t1q[ZQ޵yvJi_"^նq%y&GШ~[KD}DvմT9>bة{"jyUu4ߎǣaD٭k Ԋh=T#S,""3s>M J)i۾1-ܾoҺwv)`QlVwqt؈{ٷR߯U V1[%fg~mjJ~BDZ(:]o'˅I׈L>̎߯?Rr.}Oj?; JjCRRZ i.h[*7]JM?MEi˯.JBkEܾQgf:}[.1R*)@py=m-)P*xPr&R3 ߮ϿovcԖ @Đv{-TPcUh-de79BUE6a A ̌{ޚ;j~!D8Z8V6s9ǮCOB]彧ޫ$~!y&n[s*uq?\>{q^L A פ_.rOaem_pl!QJ+lcAKmb&QDC@^RioXnyn@XCBg@B8˻ ]2@U"pөϠZt.j[4g! qNRJ5-!5ȇ==HX(n4xэ]*9yihؾ. x[ ۺVK>K@pO^'Lܘ%ݫ^E=bSv/}?6!Vu>6?5X-W;{oYFzjmue"f~ӊ*#ٜ::K|?܍C*y]ujsMtp t0tkJh9D^n< }9l00rI@ hT΁w"hBu}329B@m2FD02s+䂢vWcnREuj|aeb;ÿqC?~k}8bi]ۭc ) **"Hk 5Ak.v8v ]q i˿4MʺO2˯`I0H"ޑwRkf&cl׊>xr yhD%@Կ~}_ED(lsAR5 D| +MZ2"6o_`M< ] DqEޅNU D5cﺁÀ>;EAH!q* z~biDZRHTjeryjFM+e\ :(9fhFE{zT@ZrmBYɫ TTJ -DHӖ |>C ";Vjk 9+]1ıqM2Jn J[NQC?ٹRR1ˢ`eʹԖmK|5 6])ҐPmsZ 8b)9 (nΉMr2u !1ܾ?o(r1r8 ^JsJ nh H,M[QvpFF&)%ac{i 6Y} kAo˶`kRK+Z$H76YF4"ңuyL}mVtr᝽k@"&Kv?kh 6!0nڔtO:%w>N$&u?i5kkw,9Q܎H~# ",sNiG+l|ZJ{})vm^SeYs`u-30-}/ WlH αwȥ}}1FW Gh cњav~R 1EY!mWn^Z C?f}Eu]הZkOOOi[e[RK ۇ[,(ws7q)e]~fֺ^r)y\i' yÿJN|'?`Rldl= wXn)e݅?{$}h+:Ngul˲WL7^|\K;PUB8|[GkrYun"kJ04 6GDRͫ 5{F*a>ssfښJb-UZ)$]YA@(i|7@{x~i FEf"f\iMRURu3x!L>-M Dkr\t4˾; %R]Z+vxǜsKi݄P,9A"= 6_M>#gTZZqXB,%iiR rҼzZԇn8?/a@t篎:~-B-ηjUZ@$#1R jeY;q$DkB0"V5mU šfp!2=2-4vVY1 D!F#]ŔDU>4=/{-IMIs6CPmiWS=nNwl7l;\T%d2m=HcOf[mđV+"TDhb-v-D*J)=sҪDs^fD5xk^ιчB`r|1+hq8FbEF;4Ղ&d F|d1m^@?6L.lbڷ]L@wl) 0/ĮS}?˚1KOW'X;mz:J)Z׽mSo[kZ|<}曾.{2et8t<4f9p~~է'rke<@Dm///6&@&@7aسs嵜-fV];d陙p sɬꩮѬ?b$-Mw2qnfz03ʕ+W'<sK>rOz?w{l3XeA}K|:q9^k섗ezb]{%3nqzG\.-~ݸflj9Ew8Z]?̭O#*ϳΗzDP9GDY~EͧQTsq/ , 7'AHڌ{HavG3"&1E,>Vs i1ZpC"b%u޻fU @u BԐReB?C HA}9%zCYV{u|Qp)ŨF]9!ipk P3nƽ"5E' DN *9t  j6fSP<_6TJ.O. ctݵ۲0 sĵZ-sWh"0.ĈZҖDh͋ eI6q IDAT@η D+ () <:Oq>i~;Oǡ4ɵ$ !ׯ_\."ˬ Ft.zUtu).5~ZcnqenVjVPnOt++X=#=RBM=},G"`H6Mt> nz}#q6"HRDp~#"2&F5&CĹ:~<]k;(ƨʊBD"tH~vy098R 3ԈQ *ZkvysИ{_,D!lJ17I=Q4ӽ9$/7ö uI=J)FT&\w;~UZ Ъc7VՕRlp<7daXQF*ݾbBmmC,'oolp}7+:hsPYevWGM&m1׮]wVn z{Kc Q;iv$("ͮ)G7>Vdyɾb~jHr`OD]%磪T̂K*UZkgw3!I!khtRw]gBՊ$4MӒYdK R"䃈}×SI qRH1^~[17S>X9`r[1vOy>}#ղ03p5`ߧEqsέoߺ0 {`EѥcJ?1h`BJ"ʜca߿'J)Z6 ߔvŋ(J ^DoSJwH.rVhtց@ o)_>cK>_ENS !_v_~hU2S )\u61aѹ `& eev?{P^tYwG TU%j Llv8 _oMՀDEqqв̪}pȕ@p%pNɁdnZ!yO- :7BxOК ڧaŕ ǚ!RE(<"g\Ʊs* ]gXT+7v*# 2%Y @KCatS+@S qvPk+٧ pN5E?^p:YDy溪 )豮Vp),0 lLkZc7ZiBٽ.e4z=t1a 6P!UH}M]Pt "J\5#Kr)Wn.U,0/J4VD C8;t8L4O0WnC.& x<)yVH$&~ ubк͵:P7@?nujkM㽶xnp=I( 3QCPX(m ,wnj#n{?XSO[x_nY+TWc ]9wcED^~9"nci3h–0lIW~VEZu[/3)oܤSod[Y-!jrn N` o*ɭ&6yLx`sjGk~vk$_&+G?kf 0A;eY jc-dk513¯V*$J)v;f7rx=_Q`Q=Mm d"jͰuv3}? Vo릅37˴&iS)sΓ*GRktwmŽ.®io~?}d5m yvԋ|жK~oy^jقօ\>(sj)·~<aR|>3}\._|bv؏{柳U57hq@J%"`)v"wlk}a5jݮcEVof߲m*cu- D,)O %)ƀ ޿2V律UTTrO//Tt>&y_V`a|om'ٶ:3hH##Z{r Է5u込9@o?? ֛;"bkVZP`zs <`!85D1 Z *Win{JYJJ@|>Dye{VEG"3km\J/@ʪ 65j1yz{} H;;œZ saؽO_?}\.?}kmJ^NzO1{4n5>[)w!DsS@k̭*7CZ*{6{m`f1ǀ~}EDVQ~4QהPCw!_[P` *Z~Gi,\=XD1?٢+ގ̈́}ߋ|Ok5_a{+3CJiMcLSt.T%\Jmywc!`8 <Mʲdis*-{O;UT> ,˪l)[@SଙSɛ9P[SxNd nZkWZkιM3ĘRVX9knu0l=V#xneVǷ'(:Kl1cMjK-[jEnW ׌ZqTClvxZ_J 54M|0yqmw ;#sYe)Z2E㖗Zkƭ*޹2M*/\:G9y TQUAR2rmQ6]2ZkR>==׺߯=yYx)BHXy\R@ZbZoZsKΦ!xjRf!Ѫ7REu^>ƨ, =$*.@ %zz} _ݸWQ%<mgb1\5 q C*E\Ę|LHhVyEF3q}WV4{S@s ǡ'ZUi޻.3y<~nwAYpw8~y?Ysb (j |zL ySt#qm9N @3(( =yۼK@}Tp~",nF@`Y WfaanMUU6$RJ.qdso߾O4/|^"F6!~j<w!~󞜏)0ȽMcɅއ38#TTD8g!.}Q1qsQjU TE4py0 [#;+(&Pr)~8Թʭ 4f]!Ҫ"]o?=)牗"e]ׯ߄n['aNtO4nZU=yFo!wJW&|0-mRAϭ1 )QJg5rA?@ T|ly**Ru6gw+W-녛nI6^B=B-궪}[XN3ZCKUyz;ZR\HޣL>zҵږV33:@z` +:i=[Xo.6]UHJO>(s;+)52R5l1`qmH7Dd-8Vwny{fn hNm5LAVj>0Kn\Fwfpk,0o{O1n[_uw]B >y}L }vlo} kQ\FR;G~=`ɽ¥m_LDҸK)t8..Fv^[kRSZz&ctRUpt8-+U@lTJ̹00 6!v/?|%ttn.?\vy+ߞvrfу2}ZPRf P|ynuVyүr\tvH,$g@]V8Y^pxO9]q8,U0p^ϰikaq?|\r΄^D4B$>vc쀽/QC}?F{nwPr;/Py1y}Sj McJj[PBtOPw OJ~Z@!a1 fX -ט.#3+ZYk Mtee  <1cD*X71K޵,糏jfQQeQbi,~ާ}js-VE E>\ӵ\Wskpsw=K]5J9DkDe30 LO:| P\MY 8vz٭Z q(w?rmyn ,@g8k*1*P;V]?DUs/Z/esv]5V-VBuq T8~d 0"Vł@ȭ}^n _ڎ.vjq0. ykV þԕN|n7^\xV<][]P[ Dqy=&hGǬ[7Mm>Soy>E~%fKw?aګrUkI`I<^Ns vwr*ڦ"[osXۡ="XE"[̈.@DZm˲,DwݳsЕػf>?~"ϴHJ*8 cMDY)o{ږ2,Ά[D(X_JU-G~F!"E0aR[/8VQWSέVk,ӃFm6軮3 6vA9A'6@Ou۷o+CDyK7bъ?]<bYvROk"/?|=<|]Dz[JK ȥ~܊xO"p^!sngi۷)V@Cɹ,DTADOk)Vuk(Cx{cՑ߾}cUԁ3Ca?BdKηM=":J)ϗ,ǯߡ:sy/a(c0!]c  ^n8Qgj<] )Ed7s8k #yeA`֫bʍ֖e)/֩C9Qy:i%qmz!@5 R H{VCk*[%ƸgkVxuiv[u~XwzF g&n,`6m 9VdDfjOoSE,5׊DL?Ow  @~_Or:?v[-1&!3 hI[ht|&缪K1[FdnHDȭ [zKbt "_Lb|s7I]#|0"!* !Ggsz2"EUd;*PatWul5 ~#~]ۖ:VK!9Әnd9em"Ƃv1ymi:jh;۞l'xGV>MSJ<2` KzZrsk˄8$b@1:ztm=G3zv?!R+Q5B*}6][c)xn Kt:Nιn Ƿ;U"nG, %R <"\Cw|:!OV֡)%Ze"tӧ/m5cJiɹJ ."Øj[sSjn΢qK)<[>Cg6 wceY5]J`*mܘs 4v`%DXr9w1tx!D'DKkJhkڵ̫d}@֚Bpt+~["*?})__'anHҞjm#?OO4!a76MMJ΍]ID Z[|]ki>%H4AM]itL)uDy^r!3s0<}p|>8+R fpG"v-rl k 6/TQ0 4t(pQ?] v1^O4 !}v c~ܻ{G`V1LaD/E{FR0c)u!֚"C?إRZ~?]QuDQe0F K (*.r~yn.OwӴfn ]fɥ43lIjC9?vД[Y ˆ"!*hBw a"HΩ2EĔ ,@P<_NOP,ӤnWA0 ?sUn *RJV9'08%vK3/ y>z>[5 1FCw3F$]7Mn4A*7nD{nMPBۏ.EdU=wyBr@+d.o-xRyW)S*S;??=V`@+}5)|1c<_m|~b";_Z\i1aRm:~Gq9}*??>?=<}]+r~:ǼƬDn|Q[%"%%rd7kaBウ&A|tC{ 4xG>޻;W؇.:QaVPHE$r9GDK~O!ڪ` P4}?ԉj-XEB u"}19peVDE|qm/,#" N; U%/e IDAT-e@{gB s=>`k K)ED4km ~ךwHk)MHia B @X9*S,3ս\k!>Jqn,%s!!`A$t\ƦIQCqngTsD ! ),yEn\Kk@9:Uk2MQY%/bschb]Vϗs}^u1 KHx^ew!Z(ڐs^Y&j8ZZNbe)-yqC?RJ0 ]@UUx)V,|1ø=¥T\RR{7%emy粘bLTcy]YPy>Qm|?%Gɝ.ڒK-zpt뻔b\rR Oqa䌶98O2/zv!CV[˔3 0ZkCXr^ҥ 9wEXRLFf]Ne.%ϻqOϠPVnXr)oo{~zΧq/_vOxHC*g$9|m.a9Nnކ+R.a:r$̒( (BLSb69˔ˍ'Pj& ^X,ry;W:$XX6MS}r.ǾRHʭC+zk*R?^Ot9 K-զ,Z[4v]H`JRrC]_ B\n>wb臷+DV??}{_en\n&9t#i醭ņ-G;P"Dne""8Z3+EJ-Qk2pGy:aI7S57 v)@އQcn k C1ƀDam2noMbh [j<ϛ`'Gyf"JiҚʆ1@ 5,mlo%BށCdaoC=$%2cvC 'c]]QM,ےpwq7-6T8V?p8ç_.]S,sf_J- b0뺾W%&}?Ck&UP"ck*"DªbL.B<*(:%r7 )uZkdv|po$^nPதHi}x%j93oߠO̪9O@Rrb?XK Y[vV"fBp!@¢\!)7`ikD ux_=<]H%]^~M7!X xӒ˛^]?E`A1$t~;<<1es@TV/<@kܖEEP\HaV\kp0//^O}L,lRpD1 jPPyΧ".\wO^naPDzF6TKC"VZSl'BKK@ @X<KRfȈݾJeYj)8~D~gt޻bZ%ko/]}))9GRښ>mZ-q{G@mc_sltڳʚ"H<_C`3nh52o 5>vKmru4DqѷXo#ԞktlMhhj#2`:l_KsnP |-Y*7;tZ[*;e9qhw0Ƃ>bQ T7C?Է[D2W%Dzo_P㝖.. XJ -B /7[I]x`;D4 Йr+f-4ƨqQLkgþcDU_Vղd描 GdGj900ʊ`+Gv~`c f[yQI&RZX ^Us-MEx>,c PKkp˳Nk|Mr V0-CķR.U })%9D`»dD4C9g@1f {^~k-ΥiMM#nRz"\ʪ"!putT{Q%D:lkUTY#GdK6Evsʒn)+ l4O>Y]W}ъU!DB֚'y%C|J-\&t]۷oT*O[%/!.Zqcָ4X+F#33/y !e0H [[z<kmiZ^ZkO/H SM, BDorc]m]L)%e)ɳ0Aއ5YK- @+:TV[uu!zNS^W3z^L*j%*` Ѷ ayfR`fOWfQ뷔m^@ FBM;BΒk)`ɶ.eia@OO6n~J콗ՌUf w z=Ϸ|͟c /bq0dewD~so#>i \@?x#r}V#_b{_KqKZSys5׾[ DGoȪA9}|Y/Rx[U[mړfk,wMfyfj+FȇNflڂW6,&"s߯pk JYDLd Dc1mLknHXhDL57j|Lqn8u]ǾSBs[ ?YUϧV_+7W'[jˋ(&1v~ ѝ˥OO^\ƙ!v6[ %lmo\JNEdnf[3Du)H+vb|>:6ƨ"2]o-91v_3N'nuݔgJ)C@`@(.Zk.ΣP[A\*" MaQ,R  U7.n]mR*Wڧd7@ՊMսPW1XUAՅ4AQ Jq:usukxA\RGvÐba[rnyv <QpB*0̰2-"Υk TR$)~CD\5l&8#agU-K+9C)ˆ]9]*_sGCirvO}y}HDj&Uh,+L3:CO~Cʜ)PJ:wO/ȴ "A^݃>ҘR֒Duj[SfMRO]ħw'Z\C7fj#b c~4)8 ^@MԥNQ3/DXoQEv,NB佪jZ?] C# $:<>֞S-ʍ!0sC1="ztv݆"-820[+sSp DL o'a\kARmtz9V?J|gyZUfp.z*oooDdRn9W}wt0tzOGZUr0N5iuZjMi/"%f+^ݱ*ҪQ̛ɂO{-u9Ѻ}y0 j.X41)%g&V)&0֬=@ y.ϟۺ0朿}fˋFD4r)@m9G-~dqLڄK No \JE/-qD[cX^S63YXJ;#Flc)vCCɉHLQDˆxi~yy>Ck*"VU]=_qs_`ǜ͆M.Pܶm($z9M9QJ)`QecYƠ B"'c pS# RoC~y8OSk\ؖkJ*mB??/al@8 M]2mOzX*yRJ!sNirr^~7x:|=$F@Re8@s`a=OomY ( 佶8{* 0L'+m B_*R8<@J 1{48ֻy"1iFy/yG  ZnhE4] NPYT=Sn<1趭&Vz^_[9xQhJ[ϏDJX2\9E$bV P@'qqn ú'Y "k.?AQxO64  ;ZH[YJzw=x ~72~ n cu}(h$'*k>o`ynp;P݇Dm1CUDD@܄YPcAEֺ0 ߾}[ z^kΓWTpn8MmgF:c#fC `%m[82Ԍlg?ü}H[R\.j8ZGQixઊNJ_Zk5E oyYS9V^O gfڷRJy {38///vu=4SrB*9Z6n Қ~Z!K=@_װfZ`r]Ii6z<Z q >gQ!Xd]6e ٶ,8f0Ns'T정 [ 4*2tU23 8T e5Dԓ7xHtkiB9CO?lGX ~Oʾ(`0V ZA[F rG\|aNZXDܽ(q2/ݿ th{TUwm|{RƋEr7c٨8| S$B3JҸ;[Vr+nh#ƭ'DKM *y}uhtK)w h0/cTU{Vt+Z},ۖD ZӾ`vya *•!Ü"Q;rol/C;`^Uچ9 IDATc%eYO]kI8O"-CY 'cݳIes/X:c1kHd[rnD@Wn[(R횈Ld8)QJމ%܃Ό !; Ym5@tpslҾϟTUz|-i#kC8zJ (xEH%_/R s%|>`Mu{,}R4n"zȬa}$Ut (s7*|֔R2_g[<6/۶W߶E9$-qe9/'Pu3J"Ѽav~~nlo' "䨒rIy!@E; Z4 D5F栊APQ"q&V, L2dBSCPE oooڜ#a<k-JGRA0cHDjr\>pZNsEr,ZND5To5>kp|mi}} p伷Am q|1ؿOrGB?On\+둿̭)3Į$I;眫ڵ}]`e=Z*V,kLb]TKQxA:t)<avӔ{wvF@_>LSJ7~2 5:_C㯬3/朙[Ni-mӧ!dM]AnkΙUk 'TO9m9%ŮvJɈ۶].G}*?0u)ZKۦOoo͞S)||gtPA:2рIJ0<==Q>;Zkv\۵YLEȇ'#@z^5g?4KNA7W)yr#hޓrkiRPEj85kk)ANsVB_(=gEuH#kqݭִٚ@lErZ/}~Vn7u.s„{°#`zш4L|k3^XfI=5f{ֱ²>pS:d㜴< ~,4þg)!gYowa00 y\΀jUyq`=miOP (P8UT)驵Fz116-K= n"p NNT i8Oc}8?32[FnS{eBN8_/bdUi9έ Msk cֵl.+҃*Cڠ50f80 4FR;эA?wGfCy۷ `jQ" [+>`CUJ|vOg/2ͥ %9%oWXo0N"#;E"(8yd!2| 5~>1+ !`fNjQ]ntx@} ~G(ZVO縜z|۷?~?RhzzLj1e״q=uw;̤6n?:r/1^C7ԇ]$"|bwg#.QgS].&c{#:=4s^`Mzj/SzPB`i^ ()>ܣN2(ԑP ws%A8DɺOG.d QKNC07ʵroBEهxת:G4M%_N'T97%aLj9izV4Ov[ɇ?}%ﯯZk\J1OVuu{bF="IZy0: ޗmSfrήyYHCk|>[]Rnx/lX Lv=' N&rl_o7S: 2Ę &4@bHr}͛WCbfmZZk!ͪq̵l۶]Rfs//Exz~18nZe`p+UU.嚜gbWe.93?ctTTa=T@ Z.bi9%姟pmo4i PDƒ)Ο'!Pb9 !h~vӺ!~W}^;mO:{iz嬭j{0<ɥHUߜsyߥ5t4?Os5gʭ5!bNʭ81_~᜗'"N N17]3a\|ix0Astb&%/0*4mB "i~~~9Vif/ #j8"k*@ZiN-E#B !<ԡ:#58rJ44nZ; 0;.kYߣӺ51+aq 8ψZ$"˼<5΅| 0O|Q$@7skmϹ a^QKv1>LDΧZ1040ZF90C1.n۷T9i۶vn3f -"xۀ *u&EbA8y<pNiqkE.,̍׿ϟ޾_qk8jC\[+uOJyIZ5e/?{~~^zpɑOO:eݫ?e:\|tUw ԍǜzt&B_4Z;nzǀF`vtZ;JùN,:;isY#yPJu#<쇱GaFZ6%ݔ<l$MDDflcb!Fki" nIfJ,+l2jt3}Ãw8ϗ۬Z|p6頟?~zzrΕrܟ&}!݃eib=04 C)ghs<|AiGkb `߶lI',_~U9Za?lM5"ڷ!c!#~bk-ϧe1xq5f5bt[|QlW1-rZпۿs\AptD<a${]cZ.5nsFZJ1JtDm aql1n̥Vjm-Ts)\9*lX T|b>|>Ow.n$xS(chwo~ mP+0,E2󞒽"Z9r!|aVR& | I  7`a֚nJn3Gt!q!6+h~sՕ5iD8f]BDb|Hݝιt!<""۾[79۶{S9Ee'jk%*2-Oce]ƥ2}! Han@!tιl@Cki@Z(> :liW5ŒNS|zyCY?}4ϳ}όGszTu!!Xw^n(?ݧzH~}^X=NiM 31wۛi1H"$w|ܮ{xUn@]AAA9*#UE{l)\rIYZVU5 كzeViE2`&8)-%Vf, l4A?H!ƥ'MBL;jmj``(V8!FUKOdFc?8ܱ[n/jE^Mqmπ K8yeIxcG2M86t:uYV]=#F;Eɣ zGD.xDl̕ 8@(ژk,*v5ٙfPop&5;۶mfrY9Vu=ޫ: fx "@aYeYՂXw!"YU:t-ʵ)!2vC3"uR՝> 9Wr6f@ zuaCsڶ_S&@vqlkr755}ـsC[]vw9KJ}eBk C4|0:'{*D[kF=N}!F [^A 1ziڊ2pժ Թ2;}'ރkM }Beh Dkph9p:%e] ,۶[J16]F=fbsvZNtHrpl(~23j ,oK!ۿBuWhtcmsO9jpuv–؄+ #h #kizr"@ S-ӈ_s齉#Ts"?LcZNCp fPk "5/yߚX.8ʞZR@ @ DP*xrΛ* n>;UՑ RiBs|Vz?΋M**3&T0qZsibHQD"MhJ>>/5Wt-t{M۫B)1I o>-O_NCefiz;YvH >̒,t#J~UX9J|љR *=Cj'9]{k^OjLcGLM@;. 穙hGsC璙U[R-n$)FЄ@ѻUsNz-,I8'_$Nz?0X@@]$"1"Dþ=M3>φ2.E"# i#ҩcH9W˲a_wM%m0aXfYdTku.RUi?}ti`AYOi8G0@ QU{X\VDkIಫCph=#U (j8w,Zxm:zmWwt>,@p8癫e*לAP1%ezeɘ*V1s^aߏ.B-mt{= '7.8iɭ22Uu(bz.zkquM+ ZKaaUksCdZp+RާSpJΚ¢ꠉ1zrхऱ e gD` qNHbq_.0)okfm-=N_ח/_5}: ѤQҋHctU?ҭgǴz斷0Ncw4 (6sCG wu&\2+#"R5T ހGǙG9LvqZNG<`0ϚޖǸnslTD |w ٽV$OZsJ*@3FbvӜ)x ţG^GGgتjmTa!j@/R:z0>(H4)t E5iɖsz~FUԸ՜B)P+:@ Q[r @Hc ! \>GRҶg8;TtMh#'eyFD5H$*kmj$? ,4^k'`hTw7u]BDnсF*ZKjۦ%C K t16ŒE|#Ck^Qx:bXN8:OVLt~ryG_ŸbMr.۶sfn:/m\BmY}횶Vj}z~\.uC3}@Q?X]bȔInȇiOp܃)ϟ@?c@bG'U)VC rΪ>Gj!P_=]o>~jiR_SǮ>i{^zv  8@nn%l:UFѵs"NAT1pQL,w\kQ׿'KKz;td B`BmMrA) Y1siUB]ugY,fqY/h+}ZAFV5i3f6m9,Q C' 1viY\/G`.!qU|>ZN$2fy[ Mźc~ݚ䜁z ^^QdϦ]=[ r^M6Ozn7.Tp{5Ξ yYriv ƙX UǪ*8Mf6t~ĢLdADxw=`W q4M0-҄{^./}}@@Z1ؤ܆u~{{3Akc///m'-^~i]WwpMBh9KD4LZr)qy9 5[:<9ncN4RVb8_LTFڶIP8cLI,x6B?\#0nmaYJH2H#pv#lyŢPB}%qOYZKU爂rKJ="ZmG^):sgX#(`S=K@)ɍ[^Q,ʌJd_A eAy[ 0.8f!=yM9V 2рzqBvj= n q* R1 @PRG!6BZ K[ Y*"rE3.ơHVKciEkeq ﯯ<"Y1,˴i+O 14ML?o+*C!Rva:cطy0OA})QQq$5YtA6yh!eV3 Cr4,̉ 0hE imaU)ߝ>WO?sO?_~GUZ4N'R[%VK#Z&!g!wf{5h}+5|yHl3~rzqrz և==HW:p)b}Y궁x9 %+ xl*M8:TMETD>zKDBlDG~zzʭR*qLyUf&*[kj0B舼#/heA}^e?A?bTqhc|UfgƑtޓ59-;n~J y;VR0"L7Ѵ7sa>Ya;A@v} dpP*w0g#zun{Ur6s70LiEķ7#|!Lv[,9@ٷ;f*]Rf矽="˞0(BDй!Fd\CCUͰyzoc01Su!<|޶MZ3˒۷knu۶8NӴo D0_~M6X1 {: Ƭĉ1n7'`h4Zk]Ն׍9 0D}UzkBt*HH4_Kk6vMYUghgi P+8QQ=VѡT"``{RnӧOExY)F'`aly/_]f Ԙ%g[{FƾmNbam,NDT%*z$¬&{9%Z ,l̃Cb6UCq$V- 8yHORq^(N<P8)| Y 5( mv6k ;i6Sa\<5T NӤw\,mR <Wuʜv(%B ZZ )peQtە[~.0q{$J71*m5,?Ǩ)9 "*b5kA$=v[mYZ@o3%|3:`) 88 0Ӵs( w-0OcUݎCCTu]u5Wu]___?lm#-q*Yڇލc;jsښ:G="(+GǨ!h)4Mw7x!y-$HID>FU*њ9 @Qq GPB}z&7d;/$Elfݪ"/>DWh${v_['&@fه dU0@@1Bd׍ƥ3!BjTź̥R[:Wm}i9q~ʤu't412@R3 ZwtB؏*>@Xq]OfbLv%sqbfiv jh0ewYB0S7Uۯ~:_j3GN[#@Jׯ3%2TEAd)[׭Fܺ})u@hEMĦO|o@t^L~???ZRN_]'*}P$`Ґ֫>u릛'UD &R T@j3b1%I0BD@! #B}e)k)% yH~3CQC ~0zEj  |M_9rz>:qCF11 (1bJTCΪ$t >xtyz&K΃,x?. BzޅI0' zT>@mh42/rWz,:*fj :~)#qyH818("QqC9\EZ.cDmU 86Ze=$& Ao`MέoaC@|`h vciz|}qi꽿OP0}ӏo[]k]pR_~#$"j2/R 9I8_vW{]S ~osRR;産!-PA :qF/|ĬNω!Cb^ZEb0Kx~y!| 9\ۺp |W-~VU{o;jz߶;[|\f^~pA7ʬ*]tLUJ)Zik&r:i- rCӻcw)}l701uT5c$twju^凜9E3\p&":1zNzk5$ t82p²l(c̙cf"dt Xz-r1T9bbȄl*X]^zI)38OyBt< ݥ8~[~׹t^8~TSE?@Lu]0]Dp2B Ngd"$6b%j3uԤKJljTK0iҭ,PW0dh֪jnyH150niW`!9__C Jyy3!"beh@ܚa:SJbA$$^[`HGBv 6M) mۇm3ADR@ECd b!&`˪ҝo1R@lbR+f1 q8x RN秘R_~M1n7 !lֻ0}{YP\kM$8A4HTu^ޖR<[jBJ>_ڪm]nQ G$6@CbJÑcEO|Rom@r˗/bB˷8R&007@+0I;>Gj#i*v76FDϠGZ@\?^}{RfF]֥VL@1hjN-"q_sgk` Lt hÉ;$C 8@62tD5xCL\Rb&3#&֥"LuQmR:L'MȻn's$oeY gn オ1a wudVKY=+<60ƐBLġU@by0p!Đ+ <ސRHZ@9'Ѿ! yiRJnD;VkS0b&"y4伹U͐IT;+Q/4h0&y7D '$pX[w 3wuO&"3_K5-ձmk%kk= 8;*q"뭴^1h]K4dϜSsk<߆M$şכw}45i!Amq']r!vlhp8!O[vB]Ae LHf&5:Z͠5#j) j&~ue?,p~>ه`HC œ2ٟGTԁ;A4寿`W IDATZLU[G<zmiUW@BRtY c$fd*"(hUo!33T0DM R0 J^[/UE@ !r<1Q7 ]p:^_BgD΀E5S1֚iVk[$,ZUzEB5mNLxH9DIrd.m~ޮZg0^<P]`bpC)ƴE#؀z-( Dxxzlu.:nsRe`ȹ)[.ZnG?yc"lJ9~5/ PܹFlR<}vBg &ݷdN݀o?;(~?Fw0#DQ]? :nD39a_77<~]t. To;tZ%Wuԇ*cv1Vj&^;uȷmN{Lڼ\ji'ƨ!DD!ޝdRJ1]/]>{R]fzUY"2!qalmm̯R%?1FBn"K5̀^[5&O`sJ)$4Ku!cJygwLS-kB̞Dr{[ |@~Aa8@3~#ۿv)Ffy)],{jޚBt; w]~RkZ/[RmڏjOrYSJ)my!xrrYg4\uy"Μs`1DŽn7~G$ۻ[,!oVp CrNrn7I9nS B;Q󛯝~q|]ٽcqcڡwkAS dh 8rJHRTZͰPF  bLtBy./3jNrͨG}\R*jOU9hRp`z* T~`갅x~W*#v"bD+RtNIvDN1D6fX-G!cZWQ0D;b]ֵHfOn@)4|E@%Ƣk){!: nG  (Di0R @L ȝ w`9aL1FdLbfkހr PUbPtY+^<߾uq>Jk"h  41rIT-|@_%";i&n#vFJu0W@Hf U0EpB` ? D}'m0M8nuMo6w"뛿HO𢼀jvK Zq`Z[j{U1QDz)PFܭ3:} u^}S/KmĻ)Dd6_[;Q`/Cu ?mf*}s>O8}Şw'vwx@0"wZ mI~\ t/%7䎂Db1f` `]DV&N :qWsDԻ"HiSQZlzu /OeKP!#r-I{ۯDDbu]۪^{Iݛf^rqǭKDȀhbbSǏi Z74%0e]O/{ HGDə;wIQѽaVJpaomvoJM:ǠniڎB^L7_^G/׆a@o%kFC>hEYrg7f~r|eǷ/;=z[g{'7gcTUJk_%v۽'ݫp/y;p\tkwϮ,w/>Z胓JDisΠӡRY ]kK)akЭHƜN%ӢAdh<!R{vxt|79Q֚,Zo$xa%Ƭ}*Tʍ1?uD@l j]0YC AC_xH,P@opA}4_oKkGo({?̮p8S(/0/mN@!{+ 3^86u[tF0 ӭKELz.#`mb"`Hm9DymZD@VR )g k)fd)%jf׾m/ZZVQ@; >,X?$; Q)cEڥ]n7x)EMTJӺl!HAwu,# iWiP T.nKk$P@# áizK⡶5FBEU zAd@)ژ/nA'Ny#"l8vJx;ٗzݡOOO.gߛy A'74}wݜLT^!Fxzi)k3  ǃLJ/Ny0ڦ5糷<5J/_`yڃӽՙо^ ۷oÁ8@ ^{!/d]QA|,F#걹<Jt,퓲rZ'(î>3 T]}k9# LGF.8}3kp]UzZ|8{ܐ'CZ[A5cȆRJy )Ph 9yHQ`)眉i"?iJݪ//0/yTIN!nR1` =ExU1ϧ'o5n36ݛI ,2/D4@ED r;2$ bJ63;|9`˲V!˼.˲gɖZ{v-`ǻضLHomnW)=fϔ: ۊc$q:ݯCwϸwn;72jLڏ9g7B;ıhFV[4:_J: /k6@-i:?=pEx<===y5fΞ/ZkU5"tr9t:}P1?m)am LM:/VMUCzM1<Q)-8>?????~c?R.˲}b1uYBJ14ǝ„jkFקBF+Jk(1l!G=> lހ܄DZ/ Bb}-s]j; %1ugnm%V/OOOaY-Ev:*F$<͡*/Carr+4׌J CQaL|>F7yR]槊< >5=r{;ɍwfwqvy.|k$>[ }9|hߞ{%}y83})s&hn6Ⱦx HČ+Đ8@3WL&[ueZ)S6$C6H#h* ar)SMZvO13%dl]a^r9{L|yc|,e1iF|\ 쾀l)J^jwy}̵5?H3\K)>0p=u=KYHLkoMjad| 譭CR~g"~U>oa:Z]PUcuy_rkݢH9ZbjÖ d{ī1>}sò,ۛ1ޘIU9CRzmhL19چGU>ȼMUT8Ĝ^{f mUv) T0A:.6[kn4>q k] LsJh4o1]@rR 6/!F(w5m^4 Y[V]Kp:LXz&̙S)nR>?yޤxW=}$ds转NK&/C{tkq9>]跂*O/*yѹ+YdMg .ɲɸׇRo7zf[wكO|[>DPJDgkpGN4/%w3O猅.D5fdS@9Oe 3kK0~tYֺiZ;@{#Xk1qRZEb']+s/,x׏{SyہJmi7{!drWUݻGoJYk}ZהzӓeH{֍!Xx<H2<==H#i*|>1ƬB> fZmK 9]-R:ǧsuH[ 1wCJ.G"ɼ@]W rDdm͇'_G^#qjwG.Do߾粫횁AV8FxHԴEB];1L~MBM7]˸)e{o!pJ1e93UKa17ԇLM09)^XuQ5"J1rJ1E{-ꪦ D;_6ũ^syMĝ"Vm^.˲ܼy{Ct8Rt!R`"3uQGzt~yyxlM. c'~1_ l ,xsNYU[eRkTOT/8ֶq@n+l] i:=]W51fQz9#Q) SιԒC!J)M4YwDa\b2RS9w@JSJ}`K'p8u%yYJ)Áf ^dz4y]Ң}Ym:B0 D "m+1z[.Ϸ4rzn=[<׿ySJ~ڿE|>^a|>mn7wNH*"9O21@HT8>>??}FD<?<S@ eY{;sp+̎cL!r(52!˯bJ0o`1!WWU{zv,1秧,ۭzGyY(< w 9KJ!Zm`Ohf?~\AD0p ֚ipB1"q@!qHfxO͠BLC4L_aj*߾b~߲G#לr@{x S)1 J@cBdG$j2!ǔHi׵kJ0ψȮrkD@J/ d **Uk"sp]E#(BL1rN_ HD뼬x巿<^oM%=`9㠽[o kwƅA51H)3x@JQжzN[uJ5fJdu]Cs+ 9ܼb|=????; nioq1ă5p[ad17o{Fb_ujO~C).h{t8J@1:T(W8%0MS>RJMziޔ08nˆ2w 4P ZZk߄{y4?s!&گy΃Uvǀ[(=^cK[-W-+R C>`^٪P9W/Ds2})!p^/82s=|ݫW.i i1,ӧ>rX ]33hm6`*@w`&b Djﭨ "pS !0VQ0#LzMD<C05.xB˿/emr;x%^? RZ뺮aS ]˴A-UH̺Hf &jz C;o7t~} !<=?^s01~FURMq]`y.}7\o7:n'Ps8{N_ TCǂ{ޏv#m2ћhߜMۀ?F$pl2!]!#}tw cGik5o{ ꛞ.-͏E_~oĭu:{H SWCDMTGuq>cH&z5ip?9B`Jf4вƔb*Ĵ5pNnj15U"4 C-uu]ܠ.T`)eA"*]f4 Cc*!tނKJښW?!FQ]ʊH sJ160 Sd&FL1jWE )/Ҙ02#h亮FH2it._+q!jLp>?ə)K^z #I $2{>p`E=RZkUt:62^W~<}XIx%?B;Fs?t0Q=R傈amY}<E7Q#J 5]\)jji^JY1{ož9{o0.1kyZpp;k !Hk-]/**j*Qbށ>ɏ.?Oc !xoXj)/// Cb 1uyYu}-0B-D9s0M<1]ZdCòm^unz[@kWS@`By>qŔR/#v,1FQ|LCH}po! Q]jBovߧڌ!0Ch*)oRUK5RB#QQ8Ř7S[S2/P}9nl^,;0-7Ap:ŘaM)!|>iZ___ iǜb__hO9Oί_Ty  h8DZkNEOu]ښCqtJ v J`O{!Uhѣߠq?*;wG*b[G#ԏ^{P@["cwV^C_^}i?|ٵ{@cDW~$7=a@ &fbt""}Ba2e)oY;LgDz=x1xtRFw 0 iC{kZm湷8 aD1(1!O!ORuYj[M%02! G)3-޻mMPML?wN \WqQ)y]ߚ/}]=SCj`r4mf ZD{@4Ј] `m3W3꺂>]_z.s" R)zr)-FNÐ}bC);{ ƀfֺȀ(pgn-MICL`@ SZ1t3 _~ѵȺRZ1 #!y6bjbFL"^Mjd"Kv|ވ;0u]|>>Em[+m}K B0eF*Sxb@ aqDQuQ|`Ky=ЧLqG3(A0<@8Ht0@]\D0NaM 4A% z{m^x4 L^Wu#"(B !0@[媢n=yCxl\꒭N:<,m]kXk_8o__ 1N\-jVj]Yj0t]T4YJ-~503dġuYj]*2{_Lr]oW)=āT>NNH)<'!#nR]\e9?ڶզi,:?Jﵖ,:2ǻׁ=S;_~]̍}kJaN\.___u=Xk"x_sǺ]P~Fc ˼R߽_oV+0df80MFC)9a |]rɗA) t<S;88J叇i:߮a.kn7Z~?ײAS8xFl[k |uFҀbq3@ i D@9)`ӟj1 32ZJm4f1r˧*i~{k0(?ώс<A"2rѳo o_ϿqxU$0!D!J%qrq2S@X6 (HTZwjDL"\o6G?Z)Ή{$hHr7ܵ 0=zG;7-LG4ެz, jzz^H{ڏ4{}_I߰l<6չN{@zkwucMrGܝѾ:]Dj`zt/;kM 8BP-OnUˤ8Ȉ9q&`W&ե朱XA|w!@@sYJ)H߆u%B]2iCB0ϵi;_<1H^nm3C_ &BܝUSfkM:"QJ݀E6 C$"Zz; 0tl5C)? H:!b)g=oWT3{orTg߉D$mΰJbqݤZ)Hi_1蓭GZӓW{sA~k Ϸu]b拘?x ĨgĻ#[׵v/Zk/ya~z糪"b{9%oJ/('pLӔ!LJYt]{ <Pe_/sVE[7$96XIN N痗1iAۼu[k!ћ4u]/N-,@Ss~߀zDDt8O"kiTSC*@Ljf vIܳ-M 2vFr>R_u}@"@)qJ^1=|ި&p]{A{ I5@t0M9YZucJT-8)* 32ڲJYLBp&6*P1|C#=vX^Xӽ *1z1uU3SDTrgf3C(։MkjT~!FǕsL@[' Qr꭪B뇙WJ.0w:|kP)ŏ+SRB rrGpict<&.r3t~hK?P 0;ŚY1۸ jD40k "qJCFlȠ.W5.`ڵUXWX D1rt^Ė8|LC8n1Z/f6O=FU-˲nɢ%cBHBEj0AVlޛ~L~~^ߜwvaRq|wWOoqjY8ׯ__ۃ;d<8vΤs, 缛8YS@!0ڠ5Eh̢0st$)0sAV aC)54z8b1XriRS Ô"4#;˗/_|^.uEzu1ƶνq񬪭r "Z+t<=R|pyet}AZ_TAS/"sFF&ؕ|~Bk"Tu\{1c=Rl!u) HWPB11#h'3"Dcleuȑ""a%6zu#V14d]N1⩛)aLx30P/_?LC@"*y)HT@zdf~]hEix4M n6P5+ Y2zSܸų+6/$fbq꽫4W^~?a<OH,dfe(5)(">?Z9%Z벬*Di`f'R3^o[m ==wbskPf&逼=ѥ#YB{_^/a4Sbf]_q|~~Y9Oc/KӬIݩcf1L(]a]C)FW% )x{C~3 AǑ ~ Xjˆ fkLL/^y.]}~C-kDq[IDATcJUV0Pp\B@ ki f/@8P$䜟___wL4Mps7V/s)Vb4糧5w|CoL|e^~^xӉcZ+0sGR4DAŴ {C@d&f 1: 3_~{{~\"[J9 !#٬JݚXK4!Ǵew ХwSdN P*&% ͵ "r@ BL B4C8CAJޅ( ZTi1F@ ZAZ[jp;& 0Ƙ *^\K!DT;"G"P 0rι\ޡp:֍=!J[0LD *gYW LUT0UQ)**ٖĬ` Dna.%椟?[Y!2(#^?O/>teZ} rv^;REd{_^__ϟ?ޥ0Ώ<|n~Xufq@쨁0 ){ _NUs|-BpIO0^ 3s 駟ϟwwr^]=UKWe]bywEvsBi*51Hv'tӔsH&ӖѝDToR9G!ZVSS4E31Q3=obD0!7ڐ薾ΤTS^V5tτمbwwQ 2]K"B=ݢ "jLB4QBd$r9Խ^l{bAmY}lu񥻕54ޕZTT=cqs\/w q̙8oRZSQ+.Cb.7&H w @& )bXn7]b b~~.kZok)j5p") p103P9t!'ږ.W0gUR [b4MgEnx8 (`)%LN_CneF4 d)u}1!qr2LJ[MTKIC"4PBՐC "k 1' Cc7!2h2r& fbH1B@4%y'N4=tYE R@zR:(Vε7`:<j)aMvQ}{qL`UzCb?CN0M?ϧ7\Jqȧ){;9ן~PɼOe-gt]/kH2N1}S<c=t>O:@m^0a^ׯoj fUbz{{e'k}}}-kAiNOc_V[ Ŀ6^@<ЈLzx745)UK G`>* 7A-E{ې%owS\b{4ǸtW#!lj^c>'""&NysLv?zV7R/}MUozt =~">HǾ! ]KJt_k6qRw{{HoWS-$wʒ?Ls F ۔JtXR x`=+~ Jw!Hr|m)WRzQ ZiPi:?=9z7̛ge4~q.ޜ{H8FMc$U8MoɄ6䞤CNBYZ{yí)jCN0b~&V72C9-{z䜇*R=ћS{9Ni:\s޻ږK[fu~ b1)Cu]i]kލ ~y1U]? "1F a]^{,ZS?MZoֻ>z۵,UC@H ArJcu]Ժn&VkRufQк*0tzڄ lf*UUͤxJDsHvt8yZ!')f8yPM 0Ę=YD!:~TBP^ 91VmkߖgKGȇA(`m #iM ndF$CyW`Ο_rʵqȺB 8!jnN?D.1e8?)̷[Ya.]Z՜1ƵN `qt|Gr^'{LMԴ;cGx$|1ۋ{&ǟ]S\cz{&\H "!N},7ABk{|Y jTUݴma[1(@oziDssj`+|7=t{_v^tڛA֏-LSJ!ZEՠK'+e_.˃7F8ȼvv^ZnWEuOI]7;ɇD]Q3UܙC*s23F"!ڄ) Wz !`W-6ސ1dh4>bŒx^EC j&SxwiYn1|a8w۟Ȝo;;FwRv[ 7庮k^Rz9E ϗ_16`ຬ$#Ec"rإ@th Z !e2B0Dغν*ǟ{JR #lTTPGV @Bx#HoD;4lu q G{:L5QW;!~)5s^`o <6ABQcD2E @!0r]zo+>@*" H!b]:XB fhAk텛GmGt1zu#u1dzw]WhB0 dަ\{6Sp? _bI < SHCFstz@ @#CfDÐ(/v1[g`@3t}!̀u/Wjj1@8 vTM^{joX7_ \3x8\\ںP{˿nu3n=IENDB`youker-assistant/src/res/skin/4.png0000664000175000017500000111403613260315532016230 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp [CIDATxLZɮ$IVx/+[FIFH 6lZ  4B͢B|,Xo9|s̪Hwsks'cQJJJ^WwK6+CzGUGjIwǀ/rH Ϥ9gU4>xS̪/\힏YuޚGA6)y)ZI+U;cs)Wt)Ees7()͸fe)I)#+ZkfY+9>(/(X't]o$pes=xtpYnai8QZRƨ 5 f;O8>n/)cjy;`;yt/.88?sJ&sIH@wE5n#ox B1rq؉|lutP mw 6>~L>[Ьj\Inc962y c^#WTFVό9"iS Fb 93ǔ)mwݛVW v4̏]xZ@R#tȉR&0Xcg,+dP+RbkV&k™Td PrfeO0H-/իji%58IUU#W30.JQ+mJ_^j"(m$8dyB5s[+!d 8E7zɚш6 4@ |4vf:'X!͈R!&~՚F}Gy !#C& $[\5y (phFhWoD J*FH>mz*AG|TO;AԠoNk$xHb鰥e; *q0Eo12r~h]16{L7i}kT^}Xa|lL՝ܶq&'|qϓ`m_TF]Zx$SDOAP u-{Z]< v-_1D~|f慝 MJVM WFp)/r̬ۚE\P>$([Cx"I#HBA nBnjw<\`a<8[c<ۦ Ɋ0`L^I }ih Rk'$b쯼uSXq,p/T^Hi>Z7HګI*T<SYؿbp"c+8((B@nb.pSf(¯IJGIbB(a=QU[k[=]% ([;פr-(O ƂEW@ 0|i,Z|ŝF4"VKoFt+~т}H2Cĝm^DNy$MO'ĺosOe?= _Xĝw[0ӼOkS 6ym4*i@i9 bQ*긿"oW!\l7Q>!~7/qLc-ă* "C+ A Akf /UPRgJEWeȯ˧ܟ⢖e().FHڏQ; oZS=v#^]{r5a"my"aMfCmb%rŠMBE&B4}-0#eWCUjuΤ_ %=3e8 2CI6) ?>w%O[A(%%H4HJ0;Jt |]t%QI ?`5/Hv(_|}>@;@#S8OOoPNLi_[`-pvR&$TӨ|rOjzp^h 8?]qwE s$\C$}mʪN]R)x"m$ pSGJ_萤 Iy~O[LQ {`[3S! E‚I /r}_AЦɍ!c&G7c<^&`.auN0Y&Ƨ@G͏݈Um"2Q789f%yn%N5u_C"Iퟤ"+h,SR@̹K%KUAkjQ`JO GK ?c KD"4Z$hXlE, ΋aƱ3WQ'7mn^Z&ΔdjD^ P5;nY4R!5Kˏ BPEHt%Sq+=%tgx%E(w1 nAP؋d y7 +/$ Q%Lu6oU{FN#UW"cX ٣s7}c3M1Ci*ʮL S/A_4N%BA˟*oȽ_ĄJTd$@e_4?IӥzjT:U2z@J㟭 " mzIN Ӗ뢻 A5 a ,[uL yƢ:ۓ EGYe΢feIGB$Oňs~DŽLնY}P%1 wP-1,4 <lPWd)(F^)F7SE7@p}MeۅN;Q'K..Rx,6;4U={ :fQ.?0Q(U ^C";T:pZ褪pY}m 9&YV.bd"ɭZg j&3Zx=rhpcc&>XJ%l_d_W:{(CG`i|Q6[Rh;>:?] _Ǫ8?4)[:51=$HoK.vѫW)'5ܧmCXVA&/=K^v2x׆~ ~/VW go^T8V0FQsסpIEaxǮNsfG,g1'Nk$x _+2 XR[9tT 6/iF1a.i='0^&cqDT+Dx;:Ɵ ߈klt*֥RޭujtJLR-_nt0kjȄ^ Xe䞈ғ#q[<{Nއvh[ å@DADvb,|pP 6U,kxDbLӟIc_%GhYăJ/ʳą*tNe514 fotWC/>zx/ =g-_|$D>AU=ACU};o MP#tK_?CDAT8>hй,jQbtK.lRz~^KW}8T^Y6G,WN y(K b*Ν` @!8] 7~ο5-l?k_;{K-4lhUj!1$ ]8N4X>=.K9" ŝ 5%rPAE H /YB:h Ǵ Ǝq>(L|99]}l/"D)֚MDxd^l@&PBnP%bQq)I P9?tX[Ѐޝ(TlTաgǮ5ZCNԻ_>oX>W/۫X|R%-yJE-\Odk!`*|"΄Z8x/mq?8H,*M;ıo?%9!ןFw;g*Y r/ʯ~WڪfvY4Z%B9jCݢǪ]\i.bP6饛|"hs[P4p%ϐd\ڧjeo?œ{S*n2Ծa؉AʗPS>lQuʜsej2Nt1<]@_>PSx$AL_^]wsڂ|?DA?1WC2WV"'(*f"X.S>ԉC7rDp]^]=qLsL?Q?h'rVT}gɋC; 1!@C6Щ8r4ADK_`~y1 Cŝ8:]w+f$~g}h4:{RN9YT2KՑgPK Gexҙ6.VzWGRf@C=TOZ/0%H5hɣrlh([0 :22WẄ́\wHd ]WA~£L*Cx`UxW(KDEaEd G?)-;gFLJ|Z}S,Od?0%NZ b(]8)kLypWC\VFQ4Oh^Ne|que[9ǫ4M?kV]eI^Q܋{ 7 s]qW]vnݬ̻,B3;`' SwDZ]}:F(T =lKo/xHG p%H hmi -z{_-"`4q%$W53"Fn0blCH YXX"c$ol}ߛM5snVu#d]UȈ{t+?iNΊ_ fšUG_SmNo]Q;@bH:"n"\ &FUBH]ы}4ڎT(*3"GV{f ӼEǘوh3ɋ6א4-v$|(o?<X-3h+3ת3k]SskקI60x{eIG"_|}J?Oiq.gX7csL%lY?:O#ƂiyJ4_%<=3])aZʀ2LrWKWIʸ t?iY+0{UUYr7u. zP5pϖ&0[ZfC.f옫b#)*I$ڱɢ^z=h*Ԓgl(g,uU ӎ͔gdıE l97rg/P3Vs|FPuJ$޾_j@d,Ӫ:_iO 1ԇr`7ۭȳU_q)`"| ]Ğn8љe?@J:,l.ޟm+ ﮬqoqY +OrhASKௌ\S ?9Nw+1E&.>zr0]A=en?QpTpG=#*sUVO*8fXF+msCC< `-(>~9o`p[_$cx|J0m:q6jPIs}3QYd pgrՁ@m.<]ZOcYC?wW]8aтJ@vD)‚1_{:ݳz~YخMSOU':"K7_W}؇/ڡM{7wV-BF!YD.Is{Kי'%f䩪(M~/|UVYNCpT~@!!Pn=Sڈs79I, Ôsfrs[\W = r2UtP/Vg#:fvNYrVSl\ڛ,2d| ePՓt\~>,p=h s47VLגmwe-kioOW%uO~| 4s@O[ӍX >J ?g8ZssGO5vߍn[,H 1>Mgfb|ݺT}X߯9,Q.VF;I]~(8(Pe.0L{ eCjΒ9% !>E#rr~o)*@2NE֜54bZɀ0EPAEUϻaYvVS/*_n1ؙ`.< k xim'2#Ɨ`%8.2x9Y1͗ZDjgܕt 螩kZ.4MC)Īr/(7Aظ7å1 u<8e`UÉrrLG=HZ9jTj}UB?cSj)$}LYa/R :5hE-7F<)L|̑4nȿbO7O8hOO7HtMלAk~\fbd6ݚ,:{zGPhu,=^tL0{\r]#`sqӠ0ίͧYLq6M3;q ^Q'4m6To#):K3D&e8[{[ǀ,X@eAr7gd@->Z`/@ `j^Z7 FΠ)os1EgR*PX5ҋ̈րԹC9ڔ],[M /R4FyN6OyV]LʀCrojH|Nw]ȣˁkbI^)aX38Fi`|UQ_KT_&@oh:V,AeZ39zM4yG\^qiR?x:^ް>enq4G}Ý3u  q{@q5O.N}L ku`}>5q)lu@<=M'L~As(3ғDy2e1Y9^lL$J2-A INqr 5nxn=C JtA8dR.cj5M]MtJo¶S] "5I؂[6' ԥ.(~?O8m}hqsP^w.a Vr>)pxOWZgL %ΌdR N3֎拂Mi7u W+L׬|$5rU0rcZh vxlp2, |qY m Ҳiw9Le|!&oDրUfJ':4wʆ4Uf)\iǓl٢6ϬRg1=2֫3=o}pҟ7X/Сx'43dq?2*%juZ`;Ǯ ߄uۣ%Md`D+/3#7՜hjgUQ>4|1F\4/QlS>*OGKCvf ,Yz3G,kO:lٽ qsGᤠS?|m=>Y "_:~FNz6ִU^L%A. f:8RGD﫪00@J@NŹ /V} Lǿ??=V*˻i7§AA0ATz<L^]TwQ|lmNr ?QP.Ev*ʶ"FbI3#NvךȒŧe:S/!{J}ۡȋC0MPUя[я .K#t4rIIRמ:>vam),C'&皶v+p&ãJ(iBTYP{-)jS˘y)k(+q/W]A:7P(y<ְ*C0⼗YЫpw%r9I~ƪxC־Y@(sGcc"_Rڑ-ro SymHvPj8&ߙƖ%qE`ܺ|&5^ƾf3a{nACʁ˫]? ckx6fx݄u-s8>n;⼷6<͖!:ۖ줧tΠ/X*BA!-H j V{%FA3855($V/8yg-̩?(^D"0G :*&rk̔ `i}M̳2ؕďLyߏrnxwA~|&~K(D;S0}5ġ>4gtCt,2+QF쬓k%aƗ@UJ@7ب 1Ѩaslo10-G$:ӼX)_.Sq|C4|J.e)f,?E|)(aIWQUV -uϖ~8$[SoEjBn('͌Kl65o߸_{`t04AG8qIsVTqՅ[s7 s3>ng |8{HmAt}`a˷} m;Aޏ _ʷ2I_/L@%_v. (^đR`CIz%P27EsM;5}/<ӓwz&E$q>_v^[sVz} 40"!0!BrK )@?Вe-$!ckU|߬Ow{תUkY_ ]+Z 跨R9^d'sU5@L]MtѤQDvh[ Ѓ!Z|-f%j"8t POEJ3@GG,r& -Β҅ޡiM ,j\S rX eb꫊TiDlACeH!}%6n!5:L GalȡH\HVStD VcVU? |*6fz\򅮠]^`J WrV?cfbh+*[c \XOza7v*H+(db|*HzB <ÖE9V#\9k-rm_˚lF-thMT)Pp ƛ#G(wB}sIEo䤢| "&?l<Y :jQGtʹaWJ mkpCu 1~+ٔD8G' 4*cr*])?uPi@ʗ륩ڄIrcB2?=SvM@Iِ / ЂThRy53YC)$Ԓ4nSjj=Dw_ !/iуz{P1'@[rVW=km_52=~wNw5 X*'N ޓYm㞔u ӟ(sxKb_VT\nFYj$i]99U[pGA뗷`sm0V`r!KF+>Ov}#!)6h6ݣO NgwV^$^+Ֆs铤#rvAׅЇ%9x(o*ҡ)\9r&`oJچk 0{[tՀ`!u:ϙݡDVvN^*R-tSPg39 >-SiTʛ5*b㲖,^1BLZu A ainh"E$J.CTmcOk|8ڂ`Ht!ƈc7\8Q j)@_Çaڊ2HEs)NLwpV4u]6m*XJD)WV'tkէ vuen 噅]Z͘Ja*L50"ug<33M\̏gYC{ˊ%5 wۚwSe+5LUeN)Tɪ8^:L|KK*\yPhox뀞YR֢ J*(|@F4%||.SZ?m5t[qLu /u+u< J ӭ$kFI$Ԡz#8ЩkE9ZO60<((YAqwy/ʅѓK2-t>N`2&|ׇ՜mݟବ/Yyf$WAn$$xjZ`j/80UF:~_.) W6UdmQI*i|Ҡyu| i HHCh|T[Rgp۪ƽ^5%O= )Ů^zCn{WvѴR3xRp7ݷk??WF=+X֜lȚ(uOoonY_IIғk:ay%jF<*-_aQ~ wo՟>5mS>>>RqBfmbQ>o9@"֞ÏakzBH1h#^[3Ըс[JW!쬦avsCU0Qh!&ʤxζD ?yIfx_|"FG9W?DGkfXDp4@8u7E17ؾq|ykax%-s>+>̡p-T$#opGl0,U`v -P^ܱB?UJf( Ŀ!xA\qFhkኃ"+lzk# @ZXHHbI hತ 32_5bQJz\hJm p00mt2 2r.gO~/`' YLȒsN//xj(t!+wR;>|m H,fCI1AMyҨGQH80)TI4ƼvR"&]^ s yhmȱqcG46Ot's"?mwgK$L ӧϫƼY^]ihy7&1(^B_"qt(7z&y0Lh=PBȻRqH' 1ck`ˊ3&ZѸ %e6K5D;65瑥g*Іf9y"/vSsʥ-4=pI 35R8[sQUy#][/$("zu#dM4[u;RDcnt4^15>{%=#|N' +mܿ)3L&0) 0gFla?#mM ^U*1ñmD3([Ԧ6XV]px cӁf(%[P]تo 7U N­d I?p`9t5LHL*äF%t+rVRFAj@ Jh9Ѓ4ujQi|ڑ5%2  υcv@ua@NSvdNw ]_L3-jfֲG;W3wJYTgy&f;+TqοRZ {( Զ &4L1CF3 SΆ[q?s'eqcmWTU|yP}aH|Sa I@R,%x; xu혊䭚 fJF/ ugK'3#(Hǖœ1>g\<*`LwՖdp Ţ*VxM596:"Zgjc i%U8&j? yIlI ?ZrQܡ=``Bvw87aDKH6};Q>'X*zl}hDAq"|*|t9Z|>%3 pl碤r^M 6"(K܊(ۂKN[(OZQ'ЫbZq$ڤƑ(+p%7]F5BgOu5rgjHrlaDQ%s9ȖgIsa̻{E.;EU J HXzLu">j Q_޲n Vx5u 3lƏknnvA`]]T:2N?g|Kכt烄7 :Ҙ)!E'27卣4mUmCRV$8sKYRޏ/גq'º񑭏;/tpi|$1i{OasψöaX̥! ĕ.#*4a= ~HW~?6(uq}n_nH݊[.>35!+lL{*L-aZcԱ'_8#KIYJW1.SPdmpܤR& l++a3lcE-lʔl_/#̬ Ew CtwcQNݩ,{ * |h!\>2ET"Nэc3'E[ p^O2?~dE͹ !u7Ft׎'a;DKHD"_>*r@ ~^M  ?}y*ۮ,hubh)pUCZΆ鿵FJ k$B0AתɴX=s cVY:UEt4Cirz@٪{L'鍘,ӵvlAf&1UduyDWV>~EpA4Qn/Mq4p$}ho(tMוt*4OhTfZpV&{/0V,ԦY=h#7-d\݀&;X5}Cg\yCҜODtrPTy"'pV6xՑ!F\=uSJQ[4u+ݸ55CVG%ݹnZr]\Z?ӟsWT *@W7d{.aw*fg*= RGM΁HU>ğzD,Q"|xtDXV_&Ftѓ %!<άM沗ak@.hQ))7y@Ͽ l+H2ި[bgo)7S~z߾^Vӭ䛪6o׆щL^;pg_q`1~^:imjwob?LX! sHRТN.8{yG`Ƿ^0#Ctn1UD/֞kFzSK4O!f({#&b3NG ٙ١폳n2T#Q8]Uv҅7eM0y+չɂKUw\5htHޫI)=T]ősT-MR,dmPLhctrbۋJ7 ,R) %7uݏK`6CS,aO^`4߮7q4Ӱʹ@ڪ9 {IU`u08"=XN{X- R`t`c1tk)K=|i{]$3R0(ا(UM2ND *`e[RjjLԈګlQTZ]yޑ W;wll.ZڙOօ}e3bInAXb-N:L9Q.jQXqqy*6eyp'-o+︬V#:28QQ[ɏ4lEpCC<^L"]lP }|hvДb[~BQcRq$TU-#uRZ( ꝫt^nۡΫf1\T̶+TKI\r4Jx_1ֻs =jzm+z~8m^h!:yĪ&51-U3V 6> ʴC->-\-?girZZmiΪQ= **ub@Nٺ^>-!YElXJw&d: [C@;R(cqH[KV'tL[TW/or1uwK_h y $u0GCR=즻Ǹ1~xxFRkVyiF0>ϝ9~.DfkvxFZnƸSvcG񫔏r]%: 6cfYt؀r]ɷ*y{PHÛK59FrhH{"Lmj4Ab( ϫSua:2 3d qK/J[G@LhtW옐ѵUrwJeR tI1 d޽i%kӞ`]Iy_YJs]1i;_l5y)E4})F=D)3ө=e mur%,XH.R.5Vxx@  #l#-hC;^bt=BfH$om&Ls-9K龢fGޘdqa;H3eOJuP IH.so q18m}adf $(`s4W̰/_K?\mo7t:D`uDͪURC!5F q@.`*hwcQӌIXj t'ZVitKMv$:  \aAekPd Zㇵt]WmsCN4 ӕˋ^Ǚ-1*6(}RūrmWۮ#IN}z¤e:^K| ùMWk(IMMW%Zqoqi6F[t 4i0+ĘbS ^ֽaĽ/#}otqBGM^?Fgz>_Vn]+&1oCB ?=kӶSFք} (Uޝ;']9qic zUCփ(>Cr$h ?ǃ{N]/oN.hRLJ:,8<%pTJ%Nԍ0j[@^ړܺ!i^W4ڕDr۝SM쥖ihtz-=EvN !zN3W j1}|=ׄy 됏>qۇǥp3}q]ER 5.P7R7|rT\<>kSN{uxlR),`T]dy](+)5N^1:\k^֘#*2'Dl}24+0ͺ@Gu̔aQɍiZ:3u.T HS`R=#|E?hVFƆkddI4:_O>jBUsNT 1O ֻزAsVZks1Gـm2n@n!At}u{BB@?@eɢ{g11ߏ|Ed_G:wߵW͚s<(uƈ+WgϪ*hRYgBҤLSw4K ,ktE: &\6TPD mI6VJ:U "Rw$'+?)55P<.fM%':RGb,GH]V$(ZOV~#rW8p@ F\jeEa=_x4*%XT7ݑVmQ1e,duΎ"j٠˅Z(|-.*R)r?;x3S}F1)eƒ^uUD/][_hjPe0ڒ]z@WZ6|#-Џ&Jه&FpE0+gծqXH(K]k- 2d$Ik)=(oh4^eX eYHW鱘a-|>+~!&~XATEtIGOm o#_![\V;ꤖGh~UG9=(jMFd r?ėD%>S1f #ԯ4`:'|n.+p{)L RA*oX&h[Kidڮ7~xt{UCdzs5 V1vi{~Unf1tmHߍmh〉D-3A̸S@@t:+Apl_U#_ @t@;*1cNx@Id' }MY~زKFlli \ZL٠KkfFa-%EᮑeXXN5hgrq#0A)mp/x1KIWtO?,0}TJ;G9tR@ձ@\#|M618@;PnYz@ PM)HRL-%U5ÐW¦q>2w"/[{ `$\?Nf^dgg\nQ>&w3)U4w󱻖fI8]V\OAv?{\+Z7R*V9kR&ts+޶ӽ >k.C=Cq E3xG)'T 0(ݘ fOӦ[ ﺧ||@Rț[a{yZﻇJOʨ}9M JKx]tR{ *6U= / S([NƱ[!זfGMܽh:Lo$x^U./;FH}G`@ߎ/aHj zͭSDP4v[L h@UJe%DzuINUL>%=UWnJÔ dfOI21ʎ[Jj2Qh&h0 M<AL-Ô'q7t*C&%ȥQ ^K By 1q>z@{b%ڌ݄8 D4'BS14-ꑛ.)eE:`Ún/2TNŧ千w5/?(-5c]=GW ΪrѪEL<0JWDT)`NfրH!BIu#xhߠG'}!zI%gqOޖpe^uB1y/g3(\$ CW8").vsll]%ta-NL[q^舗,uFX+J&੿GD.9m y+Qus"9嵣q;Y $H yBds(P4ɵڶ؏;kHajl:34G#vQr|A^xj%_EkIuH*A4XiR?HjgB-m\ꩠ$Č\T$V5b$/`7C>eOW -'>S gnCYf=ys3Y ڭ>);DX]"0+w|> T &T RXJ9PP'TÃHIsVTY*s\ A#C< |6Q)@=^:]=Lk%ړ8x5zv-h[&최(fj׀ au;rw8`fNz񾸤J<+:ǻ_004.)_ $I *5D\>b\W7Yɣx7NJ|^yƪj #4U4?TL,X(iOTu46*=7LA +'Wd?qNs #,.z5A7[?r<(IRRođ.$#XX)9`Z]bT7(VԽq{t߸C^[U V&nOq9eޚC+uEٔ.Y,__i[7HwhҗH='X!3ԝgBjJ(Q"Y;etrY2r#=& -hBqؔRO sbGbK[T)t1o;U-覆;d%^Û 9OWnCgY9{Tx*@ I-rT4sfRN\HyR?st~30m &>>3xIppd MF8H%ILF,s*eBz@bt9$'R|?tb 8%WyuԨ<twYSrl H{su@J ,yr0%D4Խ `@Jݏ=f`(f =(l ؈¯6x`MfmFQn5]:y`rҕyUtΠM`cb?,N3$}l9$ U6Ve\ޭ,9t 4oLRx_ $sZ/LA6eYz.mUUAP2MFb2{[Zz% %UѕG+wڹЕftÕEq[𥦩vˮ*jDE3-SA -c (藕aΆ-8 PH>^ӻ߬7“PBt㪘ޗVHP϶k)LhJ?WdrJMyZ3Mka0}Yqc=>"Y8Kχo4UT^[~ShB7)^[(:wP;"QG 9\hF`5|0WU"Qac& O5PPT.I+ )CEG(` z[J/u>l8 дm#+ikH- qz{DBcNW=ǯ!biR:#>DU-)vt-'~cy_ï"g/q Ym-ޟqKJ͏؛3cq.M>+IqޅK|>M[}S< ֭4I32 -M'=>XXD9m8QpR gbITfC;zwMn,4e48\ 7B˳}m%&d&0+/c73N>a[# σI xǬa5'Su/@-BٚeaGBs }.i˚:ܐL :)I% '0>NT["5dʎ$w)"nYZ:d}{EW( Gw3~J6)j(;O'3_!@΀IT,a | M(Z) y<n\!鬔˚f[ <`i]Z(D}AΖoyk90˗:9#XA/η [sZu(Ⱦ,a09 #S^$?&K2&uw/y)4 8T$\ﺢQ_9 &Ȧ6_, m)~f|5tV&+;\9$?3~袬J~_q4T#Y]I՛򀪋3:l͋m3b`!rQDw$OTGrC}p&::/h!^.*MU@,p1W wRJCZ uJ=NKphݲa_c'o W7ԚS'*WꖷYc ֤#w9uB>Ȼ^b@{wrŕA#-zT>mC.&n2P.kIL2U`D!nq3n̚iT<+H^7V$x'*D]"F7^M Kp(V Q'.B~ vY7터'KS8. Jm}d)[v^>vG<Ԡr$uP3!? Wu^Ef>TnŠnwRJu*Y,g7ԸRm'@+'lO:p?Hwٕ'_rCE2R:J"jj$ TL[L=oą;a3R o7ǡwEs7*}^^('VB'Nj$`?=r6HDL',(6v2O@lǨQZ^u؜!-4oӇ}5u#z+D=8͆f ƙ 3)CS7PTA ]%u)JzΑmcW%G@r(Xi`؛F4$Guc|I=OЀhJf"FX2y8D΅a P^bÀO J9 ͒*+UAH*c]"6ViI2Fǂ%èAl2IzUKnم6fwᨆ9tQ4Vv(^anp[FnZ'Z0:bOTv9 IJl%k?̗| $ å;Mƃ1gCAMʱv.Μ~fkr9mNKs ]r=kQZ`3{y>~D0JT_4=4J.PsemCR܏?pM clvr*C԰ad!IQRv̢ OJR(>\#yY{C4SG:w k`5ս `Dr_+8EDJ# )8[rJȄ"ZeMAGdHVʌp]mvWYȃǫ_h+czwO2"˦E)᫶Lڱ$y܏JA{OIֺ|QŨoՅ;PvۯKii]"|krx-e^Dcss{iXL͔«9 xeɕODž3fpRK KłP&O#] pL! _*Q!%]08dj4vsrDvǭļ$5h;`mݩ'Rb{H)b1ga٤A[5Q:$9O:8if[HUD5$[ӵ`KWX/V?z+ lSHvY_٭c;%̙ ޼. |zZHrUWux5q2:= D.T05A.k2SQ<#ٜ*3jjMN=IR`(e}y }uۭx-DBHOTJmMVQԗ UK4&x+)vOT$4N&-q `JF (U,"hY(C ,BgT!4ӼUr4lI<4M,?=W3ih-MR9KElMnVfd 匾VYI5_Ëܸe># g' Aj%ndf)m#fum,Pm zUYSNA(,T #i9R[` &wi4 " uc$2S2j0rOXزu E`! ENAXauwx(N\ȽPpAt:N r&d)E퉻S%ԷHFQ&(2pZ_P4vу8j7՗W§K*Fgԁ֦w;ʄg^ivtם*(Ns>&i> $X8*8QeOʨo,& ]jĈUٳ2%C:Uȋg G< eD{>44S`zʾ>Gt>1ÓC!JCa؟ վV˼arm$Wh>hD&J<޶/V3c9CcFNtХPP3`t# [8HIq@*Yu7w?Yi'ߍ/ܲj brD!@N` u;O_.MLmNZuH .?6&ax wmT{&p{STߣlJgp[I  \\W)ܧe? u.Ҟuo2}y2N6K*yBB̢N !w8̥K1", 0W!dZL&"'5@3k8L\1yx`))$@ζ[󺸍ESȧG9wALGJ W~惡q0S6hFQKiPʵZ6Kb.GpUYX"کJ KMw_>p:t] 4o=DC9.wy}:P. y>́DnFz@˥8FQ4OY߫BAHyj,3_'*l>L1T )]>/Zd(_CvͲr Gȡs8(ʳ*ᖘS(kNmƠ=x4"[ T taʎs7#0qQ "nx 岖;-n47"5"X0K[qy5?{T paڼ#ub[̪rG/u,oy)\efP\i \5fmN _t[FZprNG%Ck33JOgpj1Z{-S;c.MF?H;x;0׺M^˅x=|:zlOAχ{6;+Sv4d&χ-e/i >AHQ;Ff?d8`/iXɡ[a[×$kl@d k''o vSJ[L/Ó^ڔ1|78>ˍ{jOF֖wI*R2F~]UWUɵ4˷?)KIҗsF&e(7}y:x^qCڛ;y %KU,hq2qjq74>n=<jڼ+˙OG~0z4*s_oh`0Yg[(tO$\g)q:#re*IaD,3&XcbP,{!.C} AB*El5Y$H҇nȆ}SSZ6~"~ݽ.  0QnK6 A gjBS ЊAn& ɀ=𼡱xEԲ dDl>P>H%YoV̸I߸e*?Tl]nNO1,4b~f,`fZ;.:7y []eƨƎ:lƜ.~i5gؼ:"54nf^UKb>WL萊*LqJj(to_"񗒠:PgC~c4ԊAX\wjbQmH\<^m%pdu|-n $ m&< [/?qe}aT+RJJ6VN |z9j. I+5m R$Ss5j,+'x)G|e_O}ovH|Z %;AT|~Qu(UƋba0wWvVfjԄ䬠dHNJ6\=bl@ %9$BN1?z?S5:lnPz>K yV&_F-$Mt!~ӞyġJTG+E8G ȹL=QacA>k7bP31j/}(y $IR;$GK`)ʾ}x[BЌ Qȧ~NʹBu|׶)j9g:\* -1¬~.EFKs>i(T 4SL v.褡LH%+y'209H9\hw|^)I%4{i l Pb&L:0ZG1aFM* *cc0fl @@afΤ:"G9g*%5\.n ƍpJ;yn}iíf`^= +U~wkгo9OC;) q˽UGr='xߐaV:< ?B$Hkr@=PoGiЬu7{Km74b׮n0Ē8a9cdo(vc:HcKp&ΒбNҡKԄg Ff9o`Ek1J ?Wlh;/}2<2R!ˊp߸Û<7ʧ3XoῳKT%oĂgl_z&.)$)Oม,:gbCVfJbjBn ")oQk9Nܡ:XC9Yd"sHq2g/^"v::̎f+^J3c Ȓy5;g3J & EWD-UN3' E{XfX"ZJ'yX$Pհi\Ŏ5P `(Y,Tq&RضcfB @յ/Yl$RZX*qxSFs%K7-짛jw::z"H}PX-u_ǻ_HS?=lKs א|R JuÕ7jJ} ݾ ͗t~yjaWAgA,8 SfeV>/T '.l"* /4?a`Irx"3\n9!>< ySdƺ$rO kX` (zPCG?g倪 ʫ{iEw]rsҘbQ}i lD 9'6µ # /H6S9~Rs&< &(uJ@-^N2LݝϷo$^. ]L`FKy Vx;l:펧o͸z~VIg㙋! ~ZܔK? o)I\50 [ȱB`mUܕG|u? _RK|xy[LU"{Yzg5Sľ%4p|eo~MÂ͆DBP<(b"j, hۮH 5oOl pJP%̏Ɏz8 H|swzcL9ٶrwmN+O $kz'WoMIRg>mn$%sjJ'˝|7~ܦ&WU-Hth=XhP@{m xwӋ BONAZJ*I *wXOTo!;>TL9ôU z9]+E|^GB@FFq" zl #NاFmFu~VEBhy"a(YݽMljCZ\9.qs9Goʇ~H}N9u %fť\`nՔC,ɪ~s];JA44RNU-뤴<j e7U4p! |rσ*9|͈n]Q;xȃ=.gԁƓE}y .LEz5)T&\=T HuIJX \*Fn )h.r#Min1@ iS.X jrwЮ ՕT*-TzٍrٟQPmUܼ뗘L{R,˘OjaY$Bd*?ʊʋ!>LOy-I8ʬO}<+p .|ApnP 2Pj%~]JMD:`LwZ.2ߔ.ӹm0^JIdx IbH4,2JS%dNh-o&~ݗꩮn;pKJ!q*!Ƞ 4IgS5){,ȤM]҈ r,ƺ\ʭRe]'b`Q^H0;<&lrybOB?7~%mnSj=eZч\L&Y ?/sҟQEz9|x{z{QH^*^#M_N yK?^G ۀt}~sh;b߯DD=-A0{z@^z߭8HTrZPciÎNAX`{r{yf=tCjDMH,z=pH t !U?ĒJT~t3W_LLVZjuFG<> m}\S: ~#VNt%Tr4J0&Wj8Vq)]h6<cd2E.>l=JvsNࠧǝ)^?J XnkPK yZd%[JK.;GƮZ{›|^VYB7D(zwyvQm([5)*qt33ٿ±{¨9=*`wä hW0宫3Et<Ōƾې2jns~S/w KYwҡs>PxKgNA㔯*2qP -^ueU=4 ~r.G9PF$׏`IkB#D߿顤Z7)2WqZIZӆWLt碲 A -乻$9:3"ò'Oݼ鯭T7.'bRpjBOgc~RXj!؇(fz:cRGv`|Ir)WR"rB{4/OF_5C$uLd3ֈ2c#-L]vVAF&Ԛ3WaTd I-Ӈ:$ OT&,I,AiB7˃J+DֵVK߭Q tu%2'!{leAE^!bd>utGc~z$F "%xWQCXUvQZ~ DUeRPxg0>kׂP^ӊV09?QV.Jp]$q\`s9M%aؿĎp#c6ăDhEU{&o.ϋ0nSHSɒN]Г3+Zt])8#^l8#"z91%7w^X %dT/(g-וOC OUrܟ;<5%VvYUQ&czA`$w[cEsԶbTHL.Pzz'&b7#V0_/Tj>* HS  :[?R. 1L UE1} %%XlB |qxvAqvr.nqN;j LF.5,Y)|`FOઑ7(J3B@=ri 7[6_F %^ a P|T`5`~<Ũ-v-gqG9q:k?P2Oh{)΀ ;qu|P@joԶ8@'0vz;?j iTM^)w0ó>Jw'mt^di )CƓ\ē9WF2֎}3+nxl:X{X lIlۖ\UDOqw߽ !dHg K4Ѱӆ46mZ ٦]"LHeԱʹd|ߘkE>{Gz90ow~շ wC/ 8]}+/y_R{l/|뗪&xk{Z}Eoď?37ȇ[$\},첝_L?գn?35i,|Fn;<R7__C?c}y("y?|gd\w?x󣋟б'~)\ ᇟKrrχOHg&K/~({B~&ʦ{c1rr3yx+Y} C 7_\1r/٠wr7߽jϳ4{xSI|FˋJ//Q!T_C}+ak]?~zgz֤g&wɛ7_ҹv۾~Xx;Džܦa+)>\DⲼ헳\^?ο-?sԏrywpl_/ͲT[.E\}xQ|CU׏o;8j,loO$]Xߨ,>f%:\p<4jy-Z__B%ǯ?OB,%׽<Ҡe_hᷙvK}ne#ɣdEŦe_Jd5w\U'ȿWwyefr_|}k~)뫄Yw?fp/Z>mRAֽw^Btw'wyzF{+dj9̳rdݪSiH&ZH61,@WYitwC6tlg?̯ I1F\(:pOv#/ tV_5l;Ł}7j4oxP%S_1dLsy}`҂<)As0fir2FbÍ\Jy۱cP)Ĺ hպ(aG_hwe#X't}J1j/&̦G5{kD2Y B匴eAXXJY*mLri1R֘zgYt~WHIƅԈA]SJ՝(&Nak45mڶTĠ58[hB y5`FYM|VoUk 2'q~)s q-\Ӽp4^,fM8 KG ;&m9;Ŭٹ2] ?n6 JIV$\ k=>Eoe4>]|T%ӠтoG&Ic?ckP6!_v 30Tː$Nj6H=C'ǰX|vR GRwQIASŒQ9K'PkcyxS5]^e{,->^\|i>cN/d1OF3Ϭ:,DIf$sB8Ύyyqe.4mr>꒹*NGsKd QCLqUjߞ,Fs}I{6`r;󣒾?nPWA2ѲvA:E)uNIU"P > EGH"K0UO8P+cvflvIFBz5{:(A@Ne)#G.dї]1ޅ<)ADgP}o`jW&T|BC1!z:ek"k%u_1t^yQN*֦R7*)zW@q(XsdS+RP,aoe ۲V=T<-t>[y>a0cojݐpr4~Hw DIΈ(c+AEd" qՒ$0H򤪩8ങfJ␠ -@@vkgWLF*W jK&`)9lR}BT]+B; xT0`c/5A{:TMD*Og)c]ΙաP5ό_ahSn5+)]ۨ!A?\lUR?ZC}Х=U0&gdю9qG\Vyk6}RŐ^r>A$;^=i=MPz{hs  G|Ї#- Qݍ^LR#n}Ä+<S w+۫ b~)@`VI N7P^QyMW&UyɿT _]H1~Et C0Aǿ/;`9\[.7WrJ1ylc{?b^7MIx ]*:OJt fv޷xMϾn}ku7~~/[p.}ZKbvzܓ: %)쥺#hÿUw$uwBs{y ,[UTʳͶ~-Ƅuul<"eš{C@ a>36ڷpg !澆m7Ů7KX{*,&ol~l&Hx}Tg{Z$mv&١}-MkBO L͍vV+μ|ݿ(|e`OD( 2kRǤu/C*E {,q3mLqW:k kaf `vT9𠘎kҒDq>l ^{hHVPc\6#}&?+^}u6_%Vfձ'F+s RULpu)M(0D*ƀ"T_RuIPdaʓwY{Defj^{9o@b&)1$&QfH"zS@ze^IL[և_4aCx~Tt,=È+Nc?O?1θ&9ɊIޏU,e~B#K3Ab`PoפG%woy E= ty:WMjS G` U ;Sh.nZRJ%D6=Mk}]Ab-|])z#:EnumWڪ{<e54a﴿}ƶfn(AvHI#\J@-euEMu{0uOt s~,. ϻk r%nfrARNF^/ﺻ@=KڕI5\*eI%=n:ϡz iYo+Ħpl:TUѪkbuhny9+BFzy0bk\*QtSr@|V# zhTJSxRKj[eRztc鷫ݱ%N%Df67C+WL랺{כu1%mrwl&s-VSOBbvyh˜[CE HB$)Hm]iM^r^t~,tWͿW~zq)׵‹Ё[{EMDD. `Ӏ&C'AaMG?-l.m%ARdZzjx7ĝ[O0#wr^9ʟ/mv >Qt[S}ӿoQRDWJT6T7LDU2?4NX8QCOHǕݏ~JȤ_=E]<֌-KC''h1K I:y*AT<(L'IXfq:PF ̼ @N?VѧLFk:rD.D *Z/ˊd{^1n(U)G<ĐȚƩ{n5\JKH%MUB`s^ԯѕ~`o -eս^ Ay^;^h"mq 1+W_yyl{k9nl\cS҂wvG+,ȾXbX8WD RD3:kȲij1PvZb[fȣٙ*Y t!*qU*W*i 9FrN)k(^ 70 MYWbqr\bHq 3@g7|Jq6NR'WC,`κI2ѨB_;؉ &Fd $׶<حU@FH<2wXN b&,^&0I,|&A3#Le`>C'f2)䳪לbʄG:a|=:#D2 #&暲@k(0tҌ?Ls-a3I 1MWNotr &nU(v#_h+@A*Xdҿ=$+$cRQVeoNۓ5p:6.sЉc:ft5*Rr DP@I;b(vj,A]AZOG"WG!^,)͂,fk.5w"65b0u;z!zꛋ~ϱ8_/}Tf J?H ~,Pl >qU , G?T& Xa p1+]{!DXm^6FAcXw#TŅ+1]qM629ڕ>~:P2 w!wmXb*]hG2.xyj&DQlA}7ԪәAs)2çEWc\Q@-zzo(Hݬp\Zn+n&e3{`62ic'l1qBWj?v%%VS|y= .X;6L0YgӨ$ѳl^NybM>(x3/{4b[=h='`~ȕee)R1:`lHvk,S3 Z{8uk o=\"}-%O6r' g,F@ycl%(į?HԴϯ5q1;D;T!JgAosaP{ȺՠA-J*nUH_5C =k\ޭ$U?0rŀW}$?\bdpWO8='FUGmi7zNeٓCnvJ9 J^v7F'rDuG4dTݣf5*n*lbzXo)HJu+ҧ2NrAb9QjbY6i A'Sx x 쑩CTtEm)bUVW."ߨ*(.6aY_80\CɣYH8!N=8kfi2Q90]Y &L )8JJl>"9ꑲ$WCG'G@@KiDVAoƺlju?!'R]OTv ؼ=:`b/ C3Fn<ȯID^T<j9~KB EV5}JVQRGl4fϲPTY m8PB C )IA>❂\Qf %zw UO @t`cFBӞH,o]e킗bbb2eu6ωOxû*$aY'I%03 ۣxr'@K5A}ӧwoĖ8v=t#DڦQ>e'y!\1 ENC ?Ctp-eǢW6rAGa1&6%&Zя'e }z*g$M:HaRe'K^7R:˖^Nu6+Pw`KF#k6ՒF浒c z\u`sxH` ctIɼ<6@1O5[jn]=Vž\Ձه]sEea ]K_qצ(ݯ{/8U}UK $^bw3;f Ϳ/79֓΃ _-wɻ첝-r&–gZcfB*ӎ] ,ّDq>̕3)O q$[U=>CvV>vp G6:YfʁQj*Bi{&h;oWNC DER$7ȝ]bTʔtz *^[ ZUyB=eG&~r ֍p @ D ?S!}.~wfOYgshb%GN0/'PDҏI%p?Dwj)($5tC,&Qaqb?)`I (:);4DYmfK*L8.3ӶbNI ?h*\ajI9TPJJ`[̸v"<'8 L(qMluY_Fs:)d9k ȋ98 Hg2+%Dz\А+ᨴ C.֟k֦ٜ:bH$1Q0IJ%6''x쾙I* `>ԛS{(XO9'oUp6O#!Gs8e#Y~v, xFəitg~s6sMөXddRcBEc1 W%05.!ezz!9ψRQ4$\aբ((?*61r81ST$Ya-T&(G)2h=&!nEMG?z6/LSH~tjD L%a>hwEh`oЯFq<09HIBVkXo |em.Gxm kơiZ>));b:`? 8',M(> _\,5y*mE2.5t!%x=HFa\†t\aq;^B`Y[.=R RFn)cۡNj >LFB( jA k:y9U}`9Տ}X`ܧ,}_2=ǛPdڡ糆] qh0n`;XGɼÈgr1p٦xDLRBi?[ϸ7OG1 gϢğ&gA3#3gx)Zo#Sx(%A';~}Õ1-7"*:1NߢZi y4+L 3<5ɷn]-gݝTGvq)\xOJxQC &Rș 10'yrp2%g*w]"hIQj4F{\87Wi %pSNVJ(aysK#սϺz$8F'YO*&F`Pr V몖l' >y>Z FJGV; %!)韫m*H|U= vݱ{ɭ=y=2y6#,Ͷͽ*')nŦN+O Tuu%WȊM}沜b!)NnAz\<G#-C/[Cws]HF} l1Bhz }>cw߸Ƣ!)z%${3i6C nXRם0qU m/]/PYXwbiL ˜ᰈpf|=y[7PBIw?b?UiU%e_XYeu\K)=m~?jNoW7S oYEoH¡2j1lt=PCCOߦ@K*14E7=;OѽkKtD&F?jp;v3'{3J0vT"@Ft;A"HSv~. ?Fp` Ǻ^v4 'mfJYL1kꡋ_BRʫ5QN9R1LFU}3MpNfp(}Q‚5E5,uV!4OO>K..2zεPL/YJ M^ȡKu۴L>>$M?]GtQg`7bh0wbgɫ$F(aG^ПGC+GkNv!efDZ%'y?S(}@j8U-8MDFhB"HP[x$얥l*I6`*6() smpp3Bam+I.&sVU)Iʑʇ6aTEp߄Mp킜jR퐁fBƁk㠴"nahpmH`9ͮUVCzyh֒ AYͲڞ8vE)[d/,,)x۳6Whɣ]yK cK͢ǵzΤ9岄\zi͔M3Jv(*i8|PwvRD힃_$r3s2xM&e0c2'&`niPP+ "ɏߩ9daΪ3@;y:j2h˓G[7}%=:zb|e:|$`tw*zBUpPv^M F:U0U R_Ŵ=s `JRڗ.v}?fJ<˙"ZMo޸Zبd3 xo77"WPU7wU@H=>)F.N9և[芦(Rq#AδA@y>Tzf[¿q~1MJde!nAimB `e6hyV˦,_{g%|$.݀"i=\ Ũ􍓜aW}R7\^{Kbւ0-ji:YֲAݚ iѸe֐ bkݯT6=e\!A+56+䭏.aQ~ɒXm %n{0_W=jl pxXLA{RҏؽܿW{lJAZWr|g3Y;o|*S֡wԄ0m 8`gXk"*yTܰ4 8TH"r؈xIXtM3^C8x=Y[D]XVg"_^ڑ"~ތTԇpU]^ rcR=9o㴷gY}L21'{o+3 )}H!Lh[J9T]1ĘyF)ow:rʁrªddγ$#OPfkuM_iH/}LUQK t3B"B2Σl|sdП$OYײe],txT$eh9ENpWJQJjCU-lSq0N}Y?ޤkruL%]!QŨ4-R糲 4-pX r~lsB6R:Xh h@_"/MYԻ#rk0 G{x|JR%=ZIv(;dy tI9$}ͅ0n U963Dfm Aa.g?AuwHLуJ$P9L>Ԥ,^TTvRW*Ym>HC2l-ZC Ǻ{@͞IjR228ޙ3a$m 4CwOL,_i}iVn*HDTe2Ft ]|^.hFGI9$1Jw2ueT+$Sk"ZqhjFghqnNi9%#`J8Ukd`~2ߙ0&ăx-FJNb]9Ic iH O+<ӰXMxEћFwDaϧdh*20GE 0|t{m^u4T4QT_%h VO$DAb꼐DKF!l@7ޞ\I#ejh>(̞%SG6gHތRgD3K`ǐp֚ga+' #\:SNw9;.97L9B J=AE56O̧Ýe fJ`ɻݍr?0;r7=Q]^glWt-B͍:I ڏKޚE<Qyр?eGzx | e){8zE/gHZs=a,Ѥ lԮarP)u$*o"[u $U0*Uhu uiR-5蔳E^NG>)Quύ;յc+M\8pvϨ'e'wJI?kъ1_8AlPv* ߺP[fp3B9hp.0' %41G3CuϾ-tt&]܋>zhAZGr' NP8gtvo㾰E&v6taL\'?ǟqN'eUՕKytD~C6h?zEeD[a1'П0HH Pĥb:L 4G-ϿF=':9c-}дl蕧h&IOJ4hRy7Vj"GPfngV%OJTW2.Q{Uh2$] ^YY$n|)ݬH궧Dl`\)ˉt)Xm ϫQ,ǠMWD;2 br,[مK|_V-NIА ;KrP! ,c#h )dAzrU%#eO R[dMJ҈@sC\ |YEV$k7;hq=07u8Z-ӯʺXqkE,=T. Q&.7J=Ɏd'mC|pm(^ &,=Uow0[| Pʧ] (8mG?J(( 3f8 `R٦~k۲8]Pp|{R7PR,ɾjr`n }Hɜ{JGK5 zӶ4t`O칑Z;C N7p594(M^$5;>4Ë܊օ]YM žyKe*!Z.}<9\ٰ(]@Q)$V&R:b5H(T!MoM зl]]]-Qυ4Gnb͡}I˰Rg'N0\nE?s!F!e\5}`!~Ե~۔JB (,_ڶwItuAI > f8M -FaWe9m:_[qbD*TBe{:Ь3}wneJ/BwiI➆=%z%Q /avs[N\u8kԯGњU?+RUgf&X)>*Gjdh&Y:I6Gg/dzOR*!d K&Z|2Ty1*'@YraF +52D^0jmyeU(Z3%mEz/JZYLps (=HLIQz QF#4w_! eh+(̴}n(cӁL62%6IUA9]}c}s*ԝ؋B>4,Zp#(>$4f.iur痤؝t: Aٮ% n>/ۮ+5+ pIs~1ycHM+UX[JyXTm%W5̑GH..A-ܵ_|Z \U)ݠpKuK)iڇansY+H$QܴTbZyf"#c@ī{Q44ubzPv+Y? rWzӳtu/ׇ<欵%i̪;jM Yh y4BD59O"|uݿ1&dGOzTn{詁.nHrGAu {5\lx~j V,4۲KcI*dF9!QVB'a;@X G]J;6ƫף7樃eH՝S T#JyN#{׳@Nmp`# RR༣6hB>(%Ŭ* 䫯}1`?(Mr8yV01 r s$%Ž=b,GX }GӬ]aH졷?#r=۫&;N34aYWAՋYI܃נE=ЯZ׾ ɧ6͋rt{`tH/`CF@.\/Q8GFT 17Q-2%͗}Ar!OEU-]R>8Af bMJO h6?R%2#[J첁aK]IŞ+A6px7f.yq)O`-yc܊0Yh?F!1i6 ##3=t5˖ņ;#0*U7֨ukM g'Kk F'~&>D=bHo\"$wQG %m>6s[Ł=nUx!{Up b]Ý:Gn$v]XnoXaskiD;[') vmǾUwejza~sGhdw^-ޙՕ>wu.o%PaDIP9ڪE.ڻZ"tu% Z4z=\ɩg(c}wlnvEKsl2oK}̎NнA?A+ ?5&$UFڵ{!;ϑSKUqYfx!h%YJCWּǾ-K2ݶ_ciAK-/x+R2{1GDj*A`jzMӒġ<'u/fvc}'5/yZ\T,eaD~+riXd[)еE.m[3CG "<鴤ꗙ{ob:#OE[dmx[hߡYa0-z8Bk27E?*ݥ ah*Z ϸO4.o5c#' p]b/6'=r5Ǒ=+9vA$%x,_E;o#Lː$=~] ͍ V&ݍfv0RA5':EdV@aڕwHN$*񩵿*ڤ8y:s*~T̳7U9q\i4y}cG=̠g`CAҩY9SMb1SMR3HC]uyĻuC2c!C*a&#QV},b\pHra PƒDeȋ];2#BAl;9{RxfyܫTMqL70rx`-I(wY^5(Tr%P-*n7{|3fFGtKdǍB-w/aJv(~lր9XVM¢:2Gshh)Mx)_ZAG=0 J(o kـ*>\X;ǜJ6 J-g|a__yɣxصա!}#NAKlz譾Qmağh-A%jw pNEEOFq P_9-uIl(Fhv!@,~b{=UH1橲WMlI>ѳϒ6JyiKY;opFvp٦~>+ROp{sBR݌PT'G?JDx~!+QESaMҥO'87c0&:ʦ3wҼ0QBJ(Ȍލ%3~BVMMD;es1Kɚ :'Q!΋trVy--(ڄP;zY5=ag %9EU '1t :H6MHr!aQ"EZ O݂)>j"hkiFn&ZSB%~64 L()+)S 0PFq|b5-.VPJw.hE$l|$νΎ ݖ^<3qʊ"3dCUiD*Tչ2cF,A` -:d~rͳcٮar. :׎&s<xPlC>B CXiQ5qܡuQᥧ5)oI+@}.! lTE{JVKS$іq L̓@N%{7k=}3ɯ-hA}g&N{NUpZ]Y9nnv }C[ uC0 %\NN%nUSСqOo1GD~ER@#NRx%;J|/l~_d"yw%O?"|6U{Bu 4Mr)=l??ܾM}$bЏ2tU9!+#rP0t3A7E'-ο)0sjNsp@[̸PVWzaW\'Iwwkt-SZ:ogN8gZO k{}\.^(-7qGMlÎ)rs_G鼵B@@5Ao9תmی5R8D䌉+!Iooj&TOHyr7>L > HULkDҳ(;!@f\(5AvYZjP? Ty }5YPۇ2_S{%-s̡W\ 0cZS*9HT-9OF>܊,BE!wyU #x@ g@*{,H3d5ts0T7bfj);(*x9]NӬpRJCf Wm9͢k4Ϊ nz­CIY8/rAEՂIBׯ5vAG6$b~ly6cujyr@5_&;Bp7BPxc_C`fzJt@q&xK-ͭ'Ԗ uV)פ'j[fd0.꡻,}{,6P,>~]R._ϛn$2%KI /~C@(r;^~Q:^O/d1OIh =Suw՞ˆߦȌm4 ZSp p m3DpSlP/coG#40TQ$[⤈+ x Q.|3Dv?5ٽz1SW~?O@"ˌ(3dc>D# $/=*8h<%-N(C}n{BMry BXW ۨ?R;!sditV?OV3Q">ʆa!9cmicԃqCw>ղPJ q^.Z0p6G&@"Y4+b6=P/f9 a6+3$5i'i , qK(ݩ67B;KK|sxG~L%stC\ȰcBcv杄8Z 㓪I %GWWrVȉS/wаoM<n4'E{4KF>fU*q(m]v^:Hȭ'^[yd rS?@J>8pjc=rݡ?xN`}>ݵmU,ʼ,,N(b@azH(ڏC)4Rɩd@`𾿇IGy 2ÃRwq§4' [*aA=Vx a.0C 5Gs^9ߌNk=T1bsT trǝXnLw-y#һ=OݽCt.cqxi u0;JX82dlغX2:!Ԍ*ZaOΏNa 9:"bE:Qi7kqQ~xiV-P]7ܓn6 j3Zp^5|&'`#519ԅDYcy0A6qZUufS;"#QYCn6_mC3+#r8EA(01f0j8z13Ybu&*2V:8ȕuCD7l]UK\K aдr +E=Mڮ[( mWsRo)mB>d*L0qަE-eOR'yاUH;WY7(@R)ԘdLN8Ux^ 䊿&Eˌ:fVT.0z}:uIcٮ[S-5 2fxK8<ы/Ɂ&+ZL)='MxjkGYXcl].iz ѣ %DҘt*jr#4eL "N<@S\W?i]Z07]TŒS>R.wU/G.-j&ݲ_>^}TpSw}cwTh=dذٙU<$πU]4S 0pzxe(/0{B}rN:C/c巤6'󋇯H@c1&4@ُOv\ Z{z:pJ๺ w Ԃ!paʳȿ8i 5R;~ Ӽntfw0y*FN098\<%jHzv)9Yr'6zfdk¨wuK:4wZ;؃$@9pH3Qt0G"IsB0CIC` sMC|BWyiND? (uKT~ԚB@,9_[Wར/~NO<^S-aL][hB6sBkiH N032ZYX#qڮD?*0ըUY͗~pKKS]zn"D]vv@I<Sƾtrz ihӻ)k_oר$O)R<@I5QU_l x 7r8uhI1 &1E G9weI Ţ&; H1Na'IeS*~pRs;q1}g?yvU T%4WO*"$e Sn䢏IiY*Ms:٬">aA 17cy ^'Kmi7ZRՐ[Ќqa^|cZ Kb"C =sJJ\|ySDGz4c%Q=iW;MQv.\pZ8b0"'SKs0c,# ܻ)O~i^ܩ@ D샆90䁉 !@G|UcIZ#g:DgHC Ѭ-IYҀʺ0D>i%?t&|'Y+V|Ӭ9}??&p֚Oj⤤ {eTDup8\1oatYt-I]%^ Ww:s3Ɨ@[׫[[7񹽒V ȉõ{tE-;Fnۗ/v vSόy IjSy=7ükZnt;~e??g~=~ٟN9 蛔r97t]<)ld0WdmJq=* [+ X%Nqr{*i3OˏwZ)`1 d˿\$F軩EВ$/]gۥf]Yw"gs³H_f~Iw.L o!o  K{zMeaɅ=rr9[ T6׬1M+6 1G3YJ)jl{J]l0*k0e .P());l@<<;tPpЃIZ*i' Mf$GZaz4ule?3ǘjUPjJYpM+kH` 2ܱ7xroً@W@az@]1a-V$tprmQ*HCrJ~;x@xG74M{A] Cto9/(!wZI) Ϗ?U9!h#PbLJ~ G}ϰKU$Z_r$eAtXuUX=qo3G<&x{7H^w5| OTi)_rp;yһg]]U/ bWKDAG f-T oI!V.S~R+x@En|m6.<^Uo[+VZ41=wxQ}siÙ˂r@kWMQuŇEE-;:Yy%C,&s{3 ZxhA'3O.XeXcS<-aiEL;dgǟ`ɝ;y5ag1P|r읁Q?2?{?njG[r-Ev'j}9M*F*Nw%Rɣ]G]yA.TOզqE%Z3C8?ͺC9Nk$%2%]|VdRGNJ-0p[+xSFq^FQk,8Ș3TDgzY^*x'cuؙCX1-C 39^iA| ~MuܭjMlN%GD8MJbq[,+;8i':Cc$HFb觯ںFz5f60QlzJ@>H0ؒ?X[xn X Lp:KۈX= %_^"b,W]Ud8 K$&N`?=<qəZ(״@orio6=FMzaE9~){+Pe 5rQhDQgrܔ%^ާq#VZs2 7B(;^4@֒=QRBPReFCG?].:mdp4EVm x7 RY UfC>xL2w9Eo\U_4kǞŒS걊w(6J Cj5-yϱÉW>Ǹ8C)dQ9jQd=f]QCle&y @0yk&2i,ʦ3Pz.k%YR`ŧevLC.wN?c`悦R<|ݧI2j#X5|򋛶qSgMYp8.պY0nUZS*r)Twb-F @54p H* *2qcD`q8f0>Y'ORU4S,.k%lڵzG8E@%ToV>L GoIU5-U,ɱ\BH>hV_>PX2h1^Yn+"v>[ۑKԚ̋dȆ&"K#3g.:yPRsy [[̝q͇٤^yËT?b3лgM# 䉁n.vy%tr=I0:A@i|Os_ĝm j=Y$$UU`ZN7'!E^CiUp#WsztII~<˺^SCU?= .tÝ󂒏p{ͯri-OrM<ؾGPV!K*sVDÍSs2-@ WFF'2̃ wiЧ>hGz;/7_YO7z0[)Y]^*,nKb':9MɇH1)nG)>) 󎥧.RG ; c[!,;4=JAIQtLɽYX)ϑ/G $: b?06/r5 xU~_qǴ'A73Ho `[OJUX88EsX=A7D2w}8hK1eM}YUz_,ףMfǿH*m.Ţ4pGc}lqMRBkZlrX!=YTGnJ588-1.1)Xs~e1х>sE{=,kqaJbG{y\Q[U&fn ʐW"?iʦ6!"Jq5Mj~ t VוLȷ/5\5]7K{G=Eg+0Y|dt" j탙zaZ0ЧN P\ϛZu;jpgB?:[Zr!M{̷^{?}Uo'(8a^bϧƚn֒VO%(ҫbٺvӑ:RSzwڮ>y?1 KCcGn|FxA&ѐ/siǤ5c~7|6O4Cw o KcMU>ś y~0mӪjYL}Uo@h>=D۪ s*,9$i\QC VaI§xd?(8))4f E)7i&Sͤ6we V[Uܓtk~}*x7K]㌮\bu0f!Tw?H]#dF-q{Ȼ!?wzO Me8s1,z݋yU.^J=A =":E;2,&%)(ut0jeҮ0>i']qLQ+e5fdHZ =1dn":Rxh+48+iD9E*}PVI!alk&V·  2?s);aZR+љ-O[!--8s5 F$I0v$Q eLx-ݥ4.H8M3f&R|qn*Ի~ʸ a7yBZ'1PO=Ǧ+ <FJHj{#%{ݮ g|ȑ/ <5ƕRͣuꎮWJ"{@^5+i+H݊XNYSnՊtũh]KٷQO]z}?OD 5@ETg0Qg\>!2s34.H~:Np,S/_tLNT*ԁEqj+P,rC=oR@4.$Nf*A1dդ) h7IqaK"_ET\Ʋ9~p,-27Fׇ{:f1{ nh}D;G,9Y=zLXq|x:Q%hu?H\=A7ˠ<p =w䥿Z*ay7s~0h<P|Q_x|ft18Ry_{"/Vŷ64wt@*vn>'^ ]K7a|֙kfxQ{ZGi"FD:}M%wM̀45;9W::c!UkQ]rWYfKq^p!߷#J"6xN](0D'+tRz#ao bFL-#LKKK?'}pXKr,,+>xփ]}+~r+;Fa41Mup#ht^ PB='69um" Ѐf<[ڶ\cwJJP- 7&x"74{:+cܴmIz cy\ ._ZZIG.ʳ~mؿ=Nk ZybX)\5m:!9J& 3]0)q+5G1^.CGUzNud%|UU.KhC35be *>/C./]8qs<+we>.~(ZyG_,#5%IT]f҇1 WcG-K%䌐f*PcDSN֤J3Zn F5U"ꟽO0'+ѡp$u鵁LVP#~zj7EtO Kav#eflO2)+kU >`RXp"Xm$KhU~!qщ%n5e~`G٨)E"54ʓ_TuRUDOG0x@̮}UʜWRP巤3Vp7A޽ƈ gHE|na0\Vx0,[0Hw-^Ϸn?^[NQ~ ^X /Ý|:ރ:=8i0ϴ;)';̡Ֆ{)܃`^Zk*ς ,͹nzd2J6>Y#@ix}wDg*c*C> RA0ƫΓn)o~C&\Uψ~ *=4hV~ԧU7:D!HM??`#]NaFqT#>Nd:b5s]k{-_*_g'wHy#M2l:wew39fv]Ffa)EPpY_:,E[W[ A*aIJkG]$:[pVW]Pe/'Ζn_U9ŗ uN{sV~RyPsO Ux-l (͜^H_t,LuXrwk(Xǣ6MԉX <=SkO/U82CmY4?LA?Uᔽ  <,*_/%'`%};]"x[taDC0jfv>eW͈@dhRz%y.Py4u N(5 *93/Nu7{]&UpA,ه[ρ\n) FD3v8.CFyˮlM+]eQ `+ؽ3ڔ2_a$VIlpTS_hJ@=6M:09܆m%]<)HPgzw s3NV~4x,qF`P )F`rO "ϧZ n0^N@u]Hr?/ӴZvOұbMR\B%#S~of_*Gʖ& 2eX/ɨylO3$6ڿg0i1hU,QWr`@ j32ϠҸ0ݓ~:i`>CZb*o_cO[iAmڒS#p#26+x5[x0Y^gmܼ6X R(M-GfPy'pKyp6k5e?7jKiZ!ތ3C Pk >xUMĶݜǮk6>o6c 515X Y,J#k2 YnU%x͎&&!Bq8#rHk+A,i%,w˝f@]l"JYS'Jq*V2bZ_5+z߫]c4Ntɸl)Xu  ,Md̕4$%!(M^KfCBkZ6әC8zl(@_|diZ9Hs n )%$j.J̰WYj`d!'\,ꗘx%.)BQBFHW0bi $#knZƦðb#`Mzd[4!3۝G9|Yd(& BQ%1F9* $Lf0@HHL2(J.+3s~fe㼼y_*n|I悡NYm= >34߽DIiL7> )Lyhv M?!A.b%0M\Uqtzp"V%;)SWjD%ϳL=Ci RtJr%'z@MS&Ͱ.24Q86A~:5y42gS@19Z 񨢚x&kdoRT LAD8eT|6UP#\Rg4?}i*!%TE+edɃzMq;MM"9S0NjU!?%~ dC.+)?q= ܡWCjb%`>-a{JS6YIIyr)l';g*K- LVVL+ j%Ul3ݒ u=*V#E#>6|>~^vI8[RE!*Iw[3}?1ʙުF^SJ+{W%7xz:vyV*wb|?Hcřr]yEuD ) \seY4FvFĎSx?K2;023mdtu21t_9+,1 јmwG?to @ܾwOb|.'J 't*qңF1l@  d@0.!|ƁOKy&Q'R'hAӺ)!i؏: )Iq; FHWD}Y(}G jg60 WĒ %aô4ޢ@?WMG}?;n~kekJ-SP5RMyT QE!5'(07ntOja׷-TE-kAvHv7Qv  \B$d~IvW^{H˳(u^&(5rIG)Wj&LUJ xEڢ{G"T/r-d J( -"_ CJv>dk a,H@@KHX=R- ךjW25*$W*bv R{s* 6BN6"UcJ,K?rq^}j٧4ͲvO_2̲)9AmJ_M! c !Y'uwsM:q: SLQ 7`b!I(&q7;ˏFj8)B똫B/b dgгhNBs)!)`3˼QCiļ5PR'*zɒPn !6,XgB7m& c :ʻU7NZEtin(GZ9xgRjj8H5U0*PCN@R!Gb5{z݄" OH36룓:[-chOm1w0C -HE7؊1xXr N4`x2æCx1a>I>OБ1R1S$G7eLUGbpU?4ZY"ÞtYN(/+ #Ih1@]Ac<Cl)QHlYl9n<3"Jy I-!<#R[r(Ci})9ع,6(jǩcGc(DC@@ &UCVUjwі?^ ԡ! 3rf/Ɔ"a]\t&30s U҉1s7e𖊥sFg8&9wETQ夞7s>$쫦R1>mo?g ݭ~K.: ⢞wR-%ѣE/ hgAnUIERZY`RTcwTo$";ʿl!׾ρ0 vnRN'Q#Z XJ|OʿEU[r)QRMze"|XXix75K=AV'?&IŖbǧO&g)pq%nqoܢq(M;̹]xvT;&"UѤ?]D lvΠԩ$Uli)y4W1rYC3C)#r))㒽5cKt&c9sCY$$B:@&ug4Z+C~Y^%씪pFsrA Q\g _-T X!)aVņY&{AΦ$jbrôgL%lR)YbX~UڕbhGv?0%S> e w˾˪FUnUg**,_"hj]bdaz%')ջ#p(PBy-R*8 ya!"OR@D`^x]U hw,VWT9US`JӍRK#d1BOJE;'zUٲZB>3,C[=Ťo1.Jt.=ᐴhm^~d6;S+/̮A^Fx`ȦQ4(v927]gf!b!yI'ehc eep1ab(*z N+2%Y\ȟ16Lf;iA -0+=e3*s-s~PgZ`ՕP iQJT]^뜽}s'Z^PN'>}R) j4Rݫ|N0-}UAp-ڀ* e>_d,x;#~-Tc7vNGDIp:J]̼MomX|X4=\ud%GwsIXK>i~&>G¦^{&0>NuydRMKXU-\KW` b5m"]bwk=p+[7IWa*p׽p aYS+Ga 0qpbEvr$ S%9x Rc. q;ZbyNq|sV_:u?8I*e@MMK BjV«S#Nn|#L"v/2%0iza@N$)lvR] O1>5uR{ݸF! lHj3Lji]9Y0–uAhMREӲ'R8U68E?%3X'&>E%7iSM(Fp`JUԒѤ]~Z4ʬ'{1|#s.G!jMOmOx9"3)?19WC)%٘ksfP1IxJ)n5eCԸdisg~>gjQ5WJĆ(NA%3RZ0Q/n凘>%/bQ,t7s ADi;™4CNMQWGHQl "֖}0ǀm]hNI]U3 0eVΕpi~T)Te1ghj[C%8x D.+m*!Q8"NU fWNNa2D̦%G|Z3? L,,&YrR_T)?!iT+k4)ε?LEetQ_IED*sGL:T,T;EY}Ҡ(iH!yJ5isÑ` D$VJuh GL;*BG`i[UVܷB:5P,6Ccb(Dz18T8 4C^ReLqE8Ղ{ P9|)) &9*(_Lt[V# "G$C WrrzaL\M!I\:irՇTLâ,qR ;p赈-iCꣅ0z `^@ q,[/o>"@>&$G x9I2^I /+ctC\W0㔟=./9%4_c>rbV[J.wԪLJA'R+S6 . %7sUKf mWuqzF= ɯq RaӽTTnpn|Q}*z!W+LPd 4pWR[:Fž{ ['MRH@t1Xax̠$h8B$dhk}'y(B +vxUӸdJ+ijT A9и}8i*'t|1  Z"+ ߱RGO#,wi@~gL Tuv14CZ!Y;ag8T*R)|n·CS VV+n\ {8i/> v,JJEY昽PCi!_VG3c( XfA*U@] 1ԧlc?JJD렰>B!K   EU|i̅*4ˎT% L)0dJu,b'r=ZdJ(`\s7/WI:TԕC Y=<Z:± K--nGMGc*zX36٥P&>zo4}1s{|t8/2,I}Xɟ*.C~zY\cnyǒTzھ|ݍ>B5l?ˀ+H:LXDh>&nd:aUrz mЪ(^wR*ǰŶ{Z&~^~+{Eڇue\ d@ a4;y([Uc圣mr2  m1Ѓ!ôlHxgɼaZapҖ4pL3wKSg|'*)iBX8鈊Tk&~Qkb[RnPiPZ .vjgJ|;A L$BG?OA d L-9ܴnsJzAGvd4nY%K) Χ(3حZGMc0rr  Սf,1򖣍*7!/ς"#{:6uՏӒA0"$T~4vrF߷E]hVXa$FC.}.L@jOYܽJ%˲׿i<=I8К"r)KH1#өO(.!o)YcjL`2!G2+ FWwɴW_;Hdik)\T#^2W("~xlNr}LE,|UY޿ֿ/7՟Ϧ^V[`$^ +[VD{To>GEi2˔y5%|'xj쏩44 S~xz(IUp5},|b9`b^9qA!>~Bm_/)~lj mIjLkB,H])2A`{6i0ٖ$(*b'mj(ȅdF>@*5,lPNp`.1p|Rr#ѨB-y4I-]5oUijףjrٗuO e[px)WRV*UeևL1Y4ʪn*8 e;YLQOM._b+$M&BCT+9\zKUt@#S5MںКHfaLL:p=V︢ڌs*/|}A)I0P 1?~{??+#a͠(6qn? hJ rpڈ,,1nn"(̟%| T-S@ڋj"?0.4GcL|:pL%!#2c'I nܿQNWH~S($z:NeO<_x4E?RRn <uokm@nsľWJ(\_70wͦU]o5>u >N%@ö}FJU~ }Y{Y ğP{î[s-P6KϸuN:շZsC Խ%g xr'u{*J!I6ێ-zXz #*ʾ74-Od*>>]?ufV- U8qjm&NlUKVj]&r`)>qd#iig|^HJ{m6f[*寲 $LSvh7b4aŰ"'_˾&0&̈Xܡvd!#DډM%1ԏDoYHN > *roUO]; {&(x˒7%^dėc"ʛz1l*^C™(/U!<ojdL.C%&ف(/9fԓ^>_I*KL2P$=y>`z(C!Lv>C`^)]2}I콡RIZ/&Hd.@7jV(l=ds[obpjMYPR?9z"~ ;:{p%50l8!\47R&)۫yž%RcV> Voq./$.&>*I~BݭXkt9[oQm$#@܎[zy;UŠ'|ۃS/I{82sU r`fJo,uw,;]-quwzT C|ľhY薧'5DO럑{ѽS.kGlHغ$n;YV1=p`sf?<"h`P'ؘ9FGj@bh:z 풵Hl-% } 'ҙ"W4lԋ=Ӗeaa%#L (%il'a:ֺ&IV8hG`ka\TeT'@߈S@rXev@ PH%Ða@~WUI{ [WB_W?I=9P ͮ&Nm{}%Z=! PTU;u!)[K5U\JJ~륬mHz^:+I&t5O?ܛj1FuPJףoa*N嶀RI h2&EȎW<Dn LPJ\~Wš$b3<}s*8 b=jv M/:0>$RG[M9Yph^IIW)aB.6mF,@3^a9̐]Q_{bDiz@"(OvA7.u[0ۤ >HxDwf(ݢ*KQtXԳ$<y{'<4-/f싗jyb 7B߽k6~x >?{mtJ [^)0s7,), n&K_$kEm?#|t/d恭3Q(6_mp!b2ߴjuU䓳KeL9Fu㞗w:= Ь^Mˣc8 M9>IF9W9}+8It*=Ծ{V]Dme~د/}X}0( ~\}SVR8bTTUܟ5IQ;_T~9: $񵂴UWZǗ}ܟ1Tj :azm[xu wRUd?,|Ow}تMdH]db*~ijpU^N%gÕvP완zpȃu=w&814ċ:]1 WYpµ'z=}&]nXɥpW@^"9$q#y,9SA];6Im֛(#HEpcO$ʃ6zp5r7lWdLaDCrg8rF墌b#T t %3׭@?rwlᡄQ[o4@IQ w~ |YBjHjy/isZJR(S7~RNDBsd MeJ.19*3kʕ\ph)kV@)q%'<$R`G֫٫9 TVB*$hH =umwYRk:Һ2 \4T 1ΆH,Оs7 .~qm$B)Mp)J:{@/)!cjsKNs~w”)N|x{xbrb.,r׌1(bL3~WFi,e3)ոJ(N0 aZem9wR-ì@Գ!5K~3G$n1<(O;EsRjau>NJO''ɎqMڻj#C{P,{%i-4Ag `Å48c(]@pn>>6KvѤ(6[4rϑqںI5^4HUI3ݴ%;LkyR 06r:p;oQcb{蟉% @ˏY,{҇{h'M) K<§w {z>=,&)Ҷ>AXur%f{yMEi[;m+t9溨G~Fڝc6[:+].;u56IgչR&b!_J--)O".yrdpG@K\P0ď6i.韝D{g2iY>؇8k/0_QIFR ulfS<=]4 a`.tLnD|R#%?ÜŰr%+e4 kLwyʋmiĉMeٴ„ =zqe:;$ʁmTf]i$<RC]@6 0_2"fE&сRPvAM#j^RTcUAFR(N6D[3)i2ɦ?۟~FR)>^(8>^q". H,UBŽ,H1һp@Sum8O%K=q)s|v&E |;V۠庥~vC2r$l %Y`eEY}Q*qB/MJMU 'tj\k@[Sqْnmv*:˵ǭq6uTcjQ0Ytc dUJy@%>u^bPÅ*"AÁʳ{  5CU4OdGWC[0M;Ɵ~p|-p%Ascd'"P``~*7**̧:ԨpWmL×;2-E`|^.꺁<]|Q׸jvhh5NSIu0)sbji궗}bsd_.QE.FO_hVo$>G:6Je;*2/E=AjM"{S_\5}j,0|藺/ |7g%%ƸOZTC*,ߖֳr1禪4!0VlюitNV+sPMZS-2_n,v8HyNl` "\U2aZn%sԲzp`k*Jux1KVzNv߄Y7LB.v`+\3n='Zet5ַ)PmΙ4T>.@h8VgY)4A~= j9ʙnkN"V!! )ci" YW% M>)Z(.*oI?JL'jv]0֦*iloB2Ei$E/.7RO_IFG?@"wвb~lǡRS*LCBɞ `1g7<'W 5%_m3 |#ɐR|xgq?wg*~Krټu6ˑ 3+O1T3IQIUtu&C9cf d}s6f=u B K1L &2!$ČT<uJ .!Ԏv%)t3fl: rM sfIJ>փڷ׽֥bh(1It][,m2`0P,+ ڠEQGc,&APvTkf̓++y3$N%h!րS/5*rjhT+º,$6RSxBC]VI06M) ZQˏ_Io &פZw`3 =JP4ʮY8lH oW溾% Wff@efɱo$? nG,KD[UXl.J =l>=lN~mQ, ˗ٟ?)ɿpL)򅻹Zb\\5+}p;W' $Q훢b@!DFaًMQ>w񥞣Z}n6OodaZӆC(V bʰ$A\RbhT%8"fVjnd2 u QN)J^DH$nu¹|OJwSjyuߥN)5 yY3C}[=N^LZ |mվ3ڑz#ʾP_7Av~uZ04ڽuND9RA:Eٺ?[P#=azx kO'6_w-Mc߶ʣYxBX1-w&Ӻ=異`T 6K-o_Аm}Y3jiN*7) H%(ZϳєEx2a}| H4 ҂+`O_${Kw] nE?$58,=O&F/_eD]s[Αjd?Q08C_tsծBRʫpOzy|oZck??Pkyñ_J4'No|KeQތ+r`RBo#<Gch~ڱ棛Yb?jޗIk`B]rqw޿O7>RVc`(jQG7ZȲ669-qC'Yz]Hz6mLLiy֮_8@P e9d#/fJS47ZefdL0Uy!&mڙEm\R#ىji{G:PjZ;*ݙʵ'pV_54NJ2aM+?'7r&ˊܣ7TKK770%ʴN*&uХv8|Dm2;0hR, 0=:KKScMI-bƐ}\W]ysP/%5dKeھB~I\)馥SIO7$WWw_#V8)o>72/MM G@W -mu]cK 6NB++Wls_]6iNu,OAIP;d L PqFǐsɞ1/ I~`TշTʕ5$>>rW_e1_w;\JP Y\X 5R&(Ss)Y. 3Q5kdf϶M4Iu7)ђT$SzM9eDK ?3yQKC+H6{fx1w[߉4de5d77ogg~hMOwIOl rCmRGtYY/?COD#;Mrř'[,<7h DƐ;lNáQeaIj i &NR'Xu51MJ[9xWMc^6Wޅɣ>5F0Pt4 7[H(ЁF'ID^ET!Ů$r"Rt_xj@/z|*@WݔضU` ^6DiO\]S}'tnjAu.u)xñ.*vX' , UOy!ŕcXM΀\.@z"p;o8vRMݫX-.԰^+v¶?H!es|`Z۱$#Pآ=5QIc}d/ NVŀZ!1D @v9V5QshƋ|Y<hNǘ2^:; f~*#y-8Qa?Qi`*!9{z6_xE}T$6 8DgO,lsw VtLՈ2DcݻӾ8[EٽNֳ(-ʬd 8M*N*4&m4UB#A+XY\PZ+\IfxP{%A4sZy^syq\P%T¾kDbJFk;P%Jq 1=y .kipj* =Uq=T$Iz'G䡋8rD45VcOUBJm</UU&iDF.v^U]*Kiy4hnR̺+I6rt eQX7v~_(u}/QvQ4I/7vS rvZbmd]!9dA U5I?)ftx2+f43U쵇X( OqB,))mi,e)9>뽛h$G>Sg:TOܗtVK9;96Ed b)?6LQe%sU}Cg qRaLHNAW`)iu`;)dL=ܒ :!9ʋf6^V4D`DVğADP {0RoGa0 Cc+0bP〉J*f b]>] ԏ ]-mR`\F1z\^ʺ,!h-1Gh\ (_o NjRV`Yȓ$Ӗ4ǡR@h$DB'p:wt MJz˞F^T47M}ZIN?Q)1t>8BEޜEYƓ <MQSIUP*,"f1`1+ ֺnڀ7_m7rɨK s mO`U]]67D v S[\5CP8{9A#DW%:\3. ʂ0ҤđOUwGQ%so&Y0vIRd?3뻮3ʠ7 #7.]Խ74[MluM]RɧЌ^GYj-&rLz=]$)Q`̤?ckީC7ĄW07ǝ)>qGM~*qd%ﵓ>Z`maߤZ1skyuUUpey|vS]nC~є1II(]a|'F? ~O !epޔ\ s~MfۿWiQﺇ)uALx?#'< De<~L7]$^]}i3w Ï0Cyӫ"rP+L}V`axׇy>[4:a쎻q_[m:u6MIaSro8S5r^b ' 84ӻͲRӶ.HҷNөX*ǘqӎP"h|H,9oD\Ǝ#(PJI!5;]n7m>$JJ<0ὕtzN$7o\y>? v2w(أ[qzC /Y/w@QmgU'YYγ 3Kc1Y|$.y~9gfu!Ψ-fg, 3 &l6QAq 9hIפ#!Lul2:UX˃|m4 i 8*(XPtPt$j;y$hz:`k d@mSYS֘d(Vіj8 qE,!'6* A_q%HzT!j-f]EYk$-u%{B7Y =9ESe9u |(T$3rF )SoH&㚩9#Sڀ|+ dcō* HCºfu8?[o#K]9&{oenRh H77 UZT- bylê6pP';K(*xmÑѬT@f["+*c -C'5b<1k'˸U ){ī"53x w'(taRUTX^f"WlX>h~S%q-˒Bb.XrȘ_erFq c*)Bɤb 4E=Jw6s)$5_O4gܸJvIsRv%,?P7RG}`O%:] 1&/N!.,"$B6^HAZ/XIpJ\M펃Wݍ'B &cBecF{q@۬,^;zCg~g7-f@fJk'W92ٜN'0'꡾.J,&Rr-^i,hS]ѪkLkͻ:HIA+MW]+? ~Eł-ƍ;\ݨO@CRF' s)G:ʎWU X:VBv_T͂ݯ+{v|cFԊMjP냵\V-@T0|qȥW䲷@Rne<>S:w:=Sr ÿULE6 W <= MƔQ4(b)D<@w *<||vdס…=蕠rN١9tEDU`jG'Aa_:2bq#YAIFO:x9!b%U -۰.G]?m/_~d Ʋt+C&žJP y%/VY6+$_7U@(ZliUELQ k?ϕPc֒}PpJ4idB FS@"'5trKܺ, A%'zv߀Pj us6]_}{=Ms$^a?R'5K T#R&CKt\"#m"9ptSINwĩ'" p9h\ Co\Pi1䓥ΛO iC@,:/5^&ZȳYֱ{K^)%B>+.N#|tY`C0}Eޤ \sN*$鐈=g-/gK8Ȭvm/TN(aiwDF}_j73DOᅴ%ʒy|gzo*GRqiAr7+Wi؟ld.9>g 2PWG D6KZ5rI^r%is])y^ag,0qO/N9ZjZz4TNOU_;J3zLBؤYH`hU~d+:~+ m7>94:{3Z.W@g=_50QNkX,Ew'M8"w{HmjP }+KaOI?o) gb7tB+X.Ծpw|(! 6Q{nnoH}}/Y94* ϿWiE:; cuRWxPbjzeaN I.2$ " mYvDr?rUMj4B~URٶ>xwD(".43N̂D⊶#ejƳS~IjˢRʤDPN#aSq:9}1RQ˟aqn m ݟ=Q/)[Puf>*tȁ_9F[$~8AiZD0PB:Ԟ6i=^: L HB@)gN˥]Y6g,"ؖ7,i ј?NҚ(hLP(r+s#Z͜,.(@bIdYd$QiE\k܈T4~J9,qf*]*֠L{)EPxK!չN⬼ѪIOYH8{5=h9Hp]{Die"k!ߩ.{]XN T "Ft8ߌ|״ 1+^=>$4Pv@C@g,z_i>yv(B[ ۩?s"(y|v7~BroEyZ_`F|vki gÑnTrCI;cGvÒ襾,OS5>ksxBo,$__w39RO@)K;O&OwN.Nhro%J=F??DOD=~RԆt|X.g_PXp-DBG$O8w9SY5WWۺ([HQWlגljS|+?/O(E9NP90zOYI};R㪶$ ^n!+u#9~0ރ#hR|?-'(qH4KTzs\p0'0F G DO/\d%?NoXσ9> ޴[9t M %TyDRFT Đ?C@vԟXMTNN/t8t6+^$DŽNtd $)g#yh4'G'+2d?^q?<(uft: և}^BALcx/ VxS͔A6Xfh wWcdx1gEzY{ `evo.RqU_gw0fjBIIJUZ:Zm+@}~= RAN^ Tû]\zU v"" Imd }0W\ ?JE7``ǙxZ,+kjb.|bCӠu,x8SXY֡cPY4n-bW*9?2S6^ehC-F9}IB!`hYI U\RqBeӥy-JP5ģ I6}`Ql΁;%Ƒ,o[wk洑zy^% _-,J4:ؾ `%NVF =mBA>AP`F%}8)Hd Ia5>.r;F>xwD@Jbs>I)M>bq2#1hv'yG'hi&``窲I-PCP˗6o)uK'5کRV@BjgJCȀfJ&RkfItQ5WrOy~>ԆآKъuAۯR=,-/ε^کh,>%m M iB*J;wH3x`/<0lq)k{t d?:םjyC Z+9vv"$=(B <]gOݧ2zV @}틥^8W ZL5ux;T`υ8 շΌMbnHo8!gQf ?Be jت~k X5-R\ KIgiɨ>ƵuIeꁣQv%:s5<`N6y1&,T3jcE 0iުB3\1^]@:1NJT]љV5ZL) xA|n4bJ\m0Jqُ/R~JHu k e lE*X#?J6uWU:.0ruS&Bde4(AL^ %.sR׊m*(9aN⚲|MIG/xcy-gvHc,h;F}Mԣ{a@8A^^uR2o@FcwAhFXrpDA3uf$:I, 9KqCa޸ ?ܙMh7S?PfZ'9Vܥ5[Zb:qt^F<=Ÿ4:>RΨig 5a.ERsʤ{E ş11N4O%];QBa6rv"V-aEDw,WU/̛T"=Ҟ^}ݭjE'%|;=H|&)oy1ݐ7x%Wz;CN()~ai~pgE6$8>u9H13<%Z##᳿K\1>|&$/?WЗ2Sכb(%d䧡k<%OPUSٟm'QQ m~zjd8Vy(=,"{ yQMU~+[#Hw=!r[zR%;zU?\ p]y6ɍ9c[5Í*Fw# fA@NeyW˺5_Vw&?K!s}0yzydD (ŸqRť;wS>kQ0 o$|ޤ U*Uճy8 3rF<cj9*2.ܨvrZ|ԬYMxּ;z$Y B-=ʮOrBOv+/T!hS @ H<-7Ӏ6M>Ez]]b^*u;CŦ((!_r@:Ζج]rPV~''aث2;h!`~q3-(Qc]A+7gwoǣgiU[g}n?f׋J B4c ܀9@,&怮sNSNRƥ *kɶi` u(EjJ+=ƓJ`|l."!T%zU%QM祤֡>PyV 1.@K @B^%Ѭ)*ݕ$]6Bs떹vFW+B3Sq[5GSJ*׳ru1O IsInv6b31T mFLZBcŕ?"h}ԥ~vH 0i!uz.-&"{V^g), -}(Ժʮ14:CX^]![Y:SxaPH{ZwH\::eO*Κb,>p!z: a{[UNk( Qhzk_WV}XSR<&Q=9I mRX‡L-[$8$ 5l2YtHQictu~Td*W*ůꞔnm|HqO!`y1RyuϮ`AC~rCHģlI"9m[K9vz0Eg֒_`W=,ں~7U3 Y$.%tOp٫e㻷Akx'yh33 N*ʶnq^T,?"h<j6Li_'W[s+ q mA;@Rui` ݰiq } SxFN$ ѿqMR?b$:ށfv }&dM/8$C p%$OA~=ݣJ4H;Oq|VotG^i{'Ч<SkvM~zpeVz+7 g8x1}桀e4~iV2]m]NC޼uw۪:FTVOl1}r;P!غ>钼!i@mD'mzݤFI=q ޼wN#~zօЍ6E>$ f'a1ţ=dިI*/s .P48d?*m0=,hy\4=LGv냔 %(Vt (cnsBϜ+͓#(Og  fBk-/;+ $x=):A>፪ l[0%3PV )3g{#NiwRЄX`89.%Sryu{Uk#70,h5"kV4Hb3$A4,ۚf ]n(yhVtQ Ӷt'?PSKFVHO= T|rx4T~!؝0)., -IaX!ana7+bv9t|_U=yy2Q_Ap4⬓4_ X)t3l1V7NeC)ZyRd詘XVE~.2KP*PQ<rJ=]Λ4jfg ,  8EXD@VE^y6YRb-jQg{-$ fqHGZ,o.$W GXLk|K %O\Օv)T"|Q ZBESbȤEh4#  N)j<2VЦ0Z!\y|I4>~gBTjLƅwrSPTjiqj`T,& j*w~~yMêC!/ ǀܴ` Y}jQߙ c_*TJYNFO3˷ȶ"am nF" 5X#T`Ӕٰ-͡?.]] K WWkH E#x4aE_ a % O̎C%4Cl2*ƣ1+I>1O$Cjpfsg[G 'z cI.W);Pg_\E4͝Y`@lTiefITB=ct/MF.Vd3f\?ߙK|СЩD~m>?6_x5 Vk\v)k?/`%X/D sSHJa)yV[+~ta:bb&DmްPV̪O=`^w8< \vU^|aޒ rzn&h$gTߘ,GW<֧lsCW(+svTycȓyB[)յ| =1MiQG}xq^/a󽂫x`~|O~L|0g`!^g1 í桟=̗]z;|[ZQb_@Z=(Ox9T4H_f@?va/Bnۦ@GOׁshb<7򧖂URIb94 Q;q[IWLKL{8 =P}վXT ⧧jJpB 9=?NHBɵK=RF-? Xyxy< n.fS#z|[lyw}%ȾA/e)ˏ~+"0F)Ӯ%pʗI(Uxn>%:We;"& =7 3H5P ֡%*K8O<#m͢ ȓT,X),B;~^Gx-~`!Tm`xt90kzٻ 3`Gb"jWYNUN;`P.@T1]kp*'|0P2rJ]eoRƯt iaJůL2Lw&/XIS*S3ǣ"Njz5WF$3CWY&ZgoJfD[V0&|je bFPOQ@) &"P5>4+Ÿ"3N }psȈ:It!SuNe ~M %jlC3 ':!zJdoڏDf LNηo\1OFҊ\F>牳/3y+{4I檮]w|N- UUa&E8[3";媰UtJo^F pWUgŭe8,1mP14MyI/D*!c5vNRtg5*nih[8JJ/HrfaY %X0oRt]  >ᮤH(} ˈ|)]%!n`clja"[@ipnTA#%@\,vb&kCA%j9~U% ((Q(hP)7 L: 7Prbq2ߙ!c|^;ox6jWPAVPnVMr=P NXLs ihl O;ㅀz>]1g-}q@uHlۉ`_2_>eKg:Э,&kU E50K|ACDB^M%Tj5chcҜ2>eO:yF\cJĸO3|TAk &GUQ [%c7)5zCkZ% GR3 I jB$_$Q2 #s ;@ˮ'F13|x&"{t׏}tu.@58 q*ߖաIo`jͲ/u'K6.k8Pqz {OֹI RIف2T\8.3P՛ڜP,KP12zK0ęmZ_Dhx)I ##{He@!ס}_O*HP4Rr;."OgH] PW;jlg p_dnUٖ !'Lj|JJ5 %@$IϤ'T( ^yI+~QyA xl(BR\\4DR%^b.$L r]7AY5#ˆ8CVR1rz2/I u; l.%h6RXQw9~^&Oz7^jg*HW? 6@zaN6PHv"Y> ÿk)lu0}Wj]+wf$rB<>ؗ'K@G[]hpُo%:˳3vݏK =O3_NInr`R<Cx:=~~'&uimjMu=L?qR򛺮'pjb(g,NOwD9懔nMB Hm94ggV*7;eU8G~$DC)%Rg g'8$*iD ^ I,_|$mo8=H +Ax˩Prᦆ^Cn];aB>lrs\:{Id-Q?>00*G .d)kSPTa`w@゜X\ .^J5@jˣgx)lHf!*'tiS%v {C0?be lS!YrcLٷ ?ņ/-];g~-gyŽi5ꄔ5Pc.W ؅RsqߟQ* oZ3R(5g}3~J:r=W p%rBy]|:E1͔ʤBQ˃?z"7BJwwsI)#Gla?,3_UR>K-}?oj7@A@.cfQ@0?Hh*O@ VyP )g}9<0\]Jeg̱h= зU#uj_[R䡅@zk(X]xF%Ș IBqLؒpm%hh}adI:aldD7KlyFV\0LX-jFQVQT$=0PH*_ZC8"=c -*r CM$H@ O[ث(8uNo5qa1Bn$6C-C39+VsD|NcniIqIQ3?h?\@ eT `9W(`=Neu·ȱ QI%ZMdcQcyZwx!F,`fl4?vC!*vjcH,9Q32HٽkPfR'-%$qEIJeYM&&jA(1e=L#B!(iӰбt*&1U`-;9MUN'*d? $8Bq1JjC)GըK(a4HTP_LOGZ'?ٙl Ek1lJ*pc( hD NM+S KD zIC(TTx 4L7W6eGxei0ʎГɺM_?/Ԫw:_7ZtͲۨ|!£zʺ9#PT8zPԽ'(e+5´(cC6_pTNV94>m{"MK&$e Q=+O'`]U=ٯp+VI3?;0 #֏t(zKr1h~RHr5%O,?BǍ!LRu8G5jj_|ՋcCY@v5hPlm$رZ E,H ϻ[}/>`^woɀfVuH/xn8?,|Y Zi7p6,Ncow*v`@a82(AcԺ>$p ;>lZhgw[P75Ro48nR˗PcJ<4~ (X8p ;aFLstiiyv47"EeQ)v|uHػj #fM 8pZ?Td+fg8>~j|&B}HvT;uO=Pwbz$`ӣ4NA{$Y>QU`.f~̔uRy;䴴Z\%7O8)UWɽyY&QkݦPSbU],ގln20i^Y'y}[0\`_T@#dCIDCyRgFTe`~, DڂKJ?qL"̡ 9^1ņ@o2' s 5[ =_a҉|@ֆ-%X7ԀO@i2|*5v?j*yKk:<љ4M4LK,d3+#0@Xko^ O[]5=Q dms v=zI}cY!(mBG٠EueA#zgO?bA+>p9G`c6Z>o'usSdlOoxAuS<~($Ijgd[qP͖bw̔-,6X(ưcxPUlw]/Cq;uxX=F1[Oz?{;!xd?<YOUo߻gC̞?o @d\q-cx<$޻Gmy@{R55pb^I=*.wֻ;MOp^$J<ƻNGtݠNy:@-$R"(g6uyT>gjqztl A#;oqxk=t3t~y(fwo2Yv{ݺhkci|fؕ+aeeZ<'tV.9<.3wʤhe?Uuϝ{ht°T))^Xnnc?K=9H=Y~sKhO/۲:"$4U3vS^}_WL}K->~<;iNb8+`"b(2 f[e՗iG+xR*aPX\/9%Oe[$wIa`10y|HNkQޔ`! tGc(^U%G [91|FpxF[0 Y[Gܹ$3 _bbӶ Dfv~\"¨b/7 ӢNzKY-0 S5\/,s«]; 64J9&iAypg']cJ]勪0.,T JD9-e-2cc愚%6|Wg -KL 28qV= ;m6 l/y]6`?}S!|DhFo@+ߤkH<,8-܃u}Zаo8JGt r淿WQ7Ϳ} ֠ǩF"{vtCGW"pWu9g"A3c{NY7_w#Iia .lPI;`C[u K-FܤPvӲĒa<9#O*GԘhq8aPb\Ĭޢ:OW2g[D]߰{5nRC?<=ިލ;in~wS S!5{u!A /=}ҁa_]yPRp޾|aSd x]M~7Q`ᅮvl R#:97mI.hGo?}v7ן4>Ez~'T^޻1PVq/]%h2Q6O4;G(ȱb`ƛ")[6b?J [}PE^Ҁ>->%?3cC!"g>3e1#1ܚOcË]?˞U@JIѮE  ӽrXSRY0쌴m.O\~=K&\d!ԣ8c_J@T 0c,8MREA)b樎xIx;ږ,{$Tc/Հ'2q/b fU6X$s%q4LG2b0<('*G6xZ43M4,Hݏ'QDn~6^0L_pZw m\p5$KɅyԀmu:M0&ⲣP>v3'hJH)ۄ]ԓ6׶3%?A=;WJ(mO*4[Z"S1Iئ0gږej,];ͧŲh }ȅYtWN'a?nʍu?bED_•)/_/|~)RQҡ`NvCpvʵX%O.JUKfG,,CP$B6kb,.f:*io RIis+†BӏpJэ!_[%]5ّJ*SC PaW̢W,>Q]Re$?|*Y00tC"b݊LZ,sS!KNS ,n5 mv3_%x*gd~a,i,ާ%jRLkpm2Wf č@ៃj`JDl@ r@|F (}ٺEЬ,(ުs (^aYfE$A(ڕ yFgO_rBOZ8L_61П%Oi(TcB]~+4XeTS:Nj~8 )JUo,:H.s m KKDS:[lz!2ke'5odeDǎ~c1/ Hĝ+XYbt͗.dd$߆F-Y9tנ:Uzuv?8kÞ!-Sfi~w%kR墏x<Řr9/;πU6$R1#k h -#UDоr1$A6CTFWUrЀ: TwJ2CM4e+oGȂC eq&]f@hVL"PѤZvo]NPBHA/ly)JYO͒Af';>%|J,Q2V"z/;C$tЧB=I ^##wRiIna FG7o-ezfhS|9hx Ɏ1Tj;Kc}d"-vƷ>Owl=n<`dtX!jwohN p}mRVb~|Q>*av䢲#d q.߁4=`G{J>m?RӁg5{ [U ro2NiuUOs >ArB⾜NE1|`z9/5}{YCf~|(s9y\DwE>MzL~}jR1p4uXFY} G??+Ac퇛!sw{[8X[;I^M{rH'.+k_H9:4bh5:1o>*0$-JNm ކGܿN0<0lɌÛ+IGTS*z,L'h%xQ#zw>G6E ß9DHN#0m[z{mBI7LV%|C?o7_CtFG\x^Rr=,z|po#v9P@>!=S/TYyiagȩd" dJY~9kd99lJ W%9(vR6?Ihe2ƚ5uHdATW<ԏǖmVt{g9yY@IB0 @]g1a(:1``d02HW{N3swѯV[p_UDIp獒J+ f<^7\vv &08IHd6n.\5)A*d9N4!oѾd)-%뿕vgC_O& gA=bf56'eQP mHl*?x?ZBN$rlcU^/Kf+5(#h.{x;oYc/,OM(_9=_XaБcն-zrM)QnMh3$Ӈ Z̋$q8 C:lVOR.Q4$tID]աHbhښ*_^I&Hp -hE>D.e6G*;1v63,\ZU"H5:QfU~4(J8Tlj_'DO"}"̅Vh{9 A&jFXBhX69%J4Z}]B*[%^Gc]|j0lNWRS ymVRqC)Mg>U ԥ7m;ѯ y`[[ $<MeE>h$FFǧ\O*'xҥr EߖA_L9[)>D hϐrXZ]'Zԯ4D:F‚Ԥ]I{Sq|rDU)gT㾻NhU&p~x*~~!ǻf:?38=s;*G)eq՟QK/_gyw(/3zf(ۺ|p?JP{:d?䵻0!8 gy;_e'h ̇~Uɧx؄=&ر4%>d?ˑWJH$H~0\ڝ/RԽa|ݏK'L #T /6RGNjj$W}¥r'W6rg-ƦlOm$ wC}럲[i\`"]^WDA$dA9ߩr,>3Fg2=bvG8GUV7{㶧iĝ1 e-&-b*ܤ*zS{g (QrJ[+еQ}Fi%@J/Rt g=ww9w?$GCH6I,TToUI()Nv#jdֹ<;䂘پx}&?~iBÜj.f*FJ_)rʐu*E˙]qŁUAQdIMkfؤ rJyyZ͑uu5Rfy%n%hw[dif:ẸRu޼ p`UРf[L:NW!tA'_8Vd]2r.@Cλ$mԓv]ʍ5t@M-A=˂ bjQXHV8̒KKҔ#P$RY~hV)nD z-DfB7׿j@&VGY ] @ ݶ+;wztp N8Lpj* f,*He;LGN Q/_1QzT0q`$>LbBmDR)}ꪕŜ\ۓ$d1)KexIp_R4/% GT:Z΃A Sf90xPp%d:#)[=UA)0jnƪ\+P\(\搊͘l[dӨO"!Q\%~ͥjeP%$]V$\]]yv%᣷&[0Z[ Է 2&hmU郚x,#{r<}yͯYT0TQ^.NhH_:;YDǏRjG)<P#[Z \En\<-P(CnR$8 [8TRY}C"K0ɯ_^OCD E,*@lrn SYpiɮJ3qiT%7L#+M!b6mkVbtn(olb"A@k-Oȯu%Y!;5G|.4-ɿ{P/`l˫YѰlzXGS\CϭB%IcEʗL-A >ђ@<a12rX(Uê 3-P?ˬ{Ef7Fv]SM-W(,pdƋ\\ :[ S[Ǯ>@9 ҙ?k2HVNh6^L11@z y QK슲}"hZC > ^tT?TYjy,\+^+wv]k(=#Iy2##Q.s"y(i`΅*^)Ϸ6IR*aA~,)u4&w)iW&= MwۡCiYp&=2]r8+U*Q6>K*W''(IԊ#3q;j?DPmxaݣ/Ҿgk8k'#E'I%y{]Z|˞]ۢ5B3~K]W<.}{;=qoog}$C_eUI314@ソ+9},ޥۏr6>w@:w;6xW.Pef|w,_\7==,㑇t\'NJ!8&(>QmϹm4b%K $'TJf/I+7g{hIҳv{嚫[1tsi{q^=f+R;1 4!qf[vH k) m釖03TUzZr''6yh7/b J37ek RIkˆ'|߭=TTlnjV:ga%dw`7@ch2߬pj"Uj y P D9%hyyJ<ZgDC<*6ޖRU3Ὺ) z%GB LǐޚI SV̫ Ŭ3 dt6;i >ի~ٖ*{Ajzy1*Eth Đob$I"vRdage(5?񛺒8V˭c Ŧ1TLPN*a#BhMgTR=D$`{P#)$ T_6r&VPtu%35 6ʀ*˧,6eфZ ,1ljq >̋Mh~kє0jsW#2$2)+IgknZwO?V;/CNκ]#kCy-rs~쮫z $JЋ°g,U"}KF-z!dIJ@MR* 3 t\&$k6W~i8;~T1kPYVQeG#|&VWPQc4W*!O @;HQo.p*=XI;#NH yg@Рfk*TBZ#>Lz,Ψ!{1GPEc0sϛ$22ֵx̛UP2e>[?^^pOv/C"EPiۑkLϨH%mj5CV޽*c05C"()CYiych,uP"uK~B*m)dC'2T[Ihkb͍14R]bIL)cKQޢT# fۏ m6P FoqX4nڒ%U=aO % ṣ!d txQp$'bk\rB/ӶL$IK[镮a_S&..$2DvbN'IʍPԡ qHm{ɋ !dU~pMVɶ4S P*s (-{R:H o_v@6~S Z)(5 K@fN[Ք%Aڸ={UJgW\ P#1]*mc 8W"<\1,mkLjX"ݑϱ Cꥱ03ۈrOR(,-6\ĶjSn(5t1VU.wPG h3R G]p$]V\WRjOqYRwqR'bcZqt7>hWz !L?Cg iXY2)hO:#|]J7Y|RNyo`$<ȹH }xծjPî#o͜;2)'^Ow %*u4@L ٷ=Jyͽ?!!=NB ?I޲^t^ٿ3(R/iNj_0Enƙ\S.@|x: MMb\Lx{y@i%$pD6gJ!;jb<щHc/4Ĥfrn B,&h5@|rZFpjmTdAˋzƈѧh.k+=Fmׂz#ޞǣ%hJ`~B%|n!D7'.(NmqvG+.wx%sY9ĴWacS t ~Jdv,o|_ƿW$sw7솑j%- !쌴rmq5N̰M2l+N||R#IYdɠKIZ-U D7jAfD-R}I?jsP7fh(빪x]=Ծj'<(rAETp::3$>Ǥh>=jU]Ce:;* <%L6?x+=x^z"4T0Cͅ{jVG:qb IŜ|ȏbq!2<0aH9_˒qY~k] Xz9Z|D+s>xjlEd"IYI4 3OlVҋDtd16/C40Jo)0=Ok7$u1%oث>˸->Ƞ2Ms #J<y#"cEuL\iKU]IjzYNg+ E!b& y,%?VUC4e %D$sArE3۪b(Rbrr$* XF_}y>o2)џE}wC]m}u bP~68.8,x- FNS3o,hji|ru-ErԺ ~VĠ&]JPN & påo8LWo]E u`c-:W9Qr` ].ܰEASCy@⑂\z Yukեbr! U`3amP8p(@ !Lobث ~־ 'E=@D5<ȟ(5" .U }:}Q tAOg]Yޤ7UmL"?!zo$>H0]:|^0Nrl 7;W4; ;UėMKL$$&Q=E*nQxLIgY dS゚"%H-_5nS]I5/t{Z OᾒE1lt9Ҽ3>.vFpK7qlV]G)Tt pM?=K>ea;A2XT@Eg9pmw`Ui*\}L, *P9+' CMkWӸt//ڿ鍘c fL#_ | [,Ri[_N@D&0GV${["  !1GK)F8)rHW(|~}y:>_v`v͟wl*/~DaL$N@6J +5d>7>'Wn Cmy5uI߲sZX))v @Ҁc$\YB8S-ig$$9NPbHݫ\4b {&%b~vyɌL~]tt8( SNBuߢՒpF3"JI}`@WJ7v_/?&F$~974JVX &_<}*?EmU5cf Sl?UkOM@0-I +a/P0*sfD% qN⚆jl=μIY&2qnWPm#3dLE7P ǜb eB_0>f@~ /t#Ajt Q(Q#׫+D԰eY;,EEW0L ˇr_\Kkhe$VTUB΃nM%1TB -N|Hs]40G>Ύx71l͸ ) cJԣF<=+3 #1~4e,1#I| XC  e_v˩71LYXؿwW/iFPu|5S~֍"֮_dw1Dzh]}/XҠ1q >] UXۅ1ъfrNNЋƒQOe#eZ3ZX:BtW1}*daٌ+@DZ;dcZF Jٮ .iƪ b\JנycX,"Hd+Dudwg"+tP|:yd+8zFMW'UEG)}=5f(ϻ@f&t7>nɼ,{ g/RݿB^>VC$ nA S{g!N~XYQO{ϧ|pa?1HӸfw4?ovcuٝdg[> up0煑_Ouc&DI8S j?>-ϴM!$պQSx9HxdΝ#dj5U;L/J_?Mqz*4SI 0?M\ „G{%Z')핃{Ѧ>9̽ԡ rꭗ5Sx<ϧayշoKUSv('frS@3c}n +uߓru%4j~-&j{\Bo.yS.r)uU"w5QRX^Q*%C JO,W!*-.. +t]խryb+] >8)uaI%ܧ\D~$ڴo Yۨa=*,zWR_C ]Ҝ41ѿ4kSrCYQbu3L}ȨOd`yCǡ`ΆU[2kئ<(bCrMxZ  T %'^UCd"Tk1| dMeDNPBH)7dfQiW,Xz0R'X`avSg^@_nimЀIfFC:SFbhSĕRe+7оC*R*y`23pQ%SD7n,4L+?^ d6{Y Dt SBÛO)I)c.tyRU? zJ +I[|@.d?쓁gSi>AsjkOigRdW zT;kCWbCAڸeId.)cc*9rRHաaSiJuciMIP`Dò,) cJC9@lW@)xQIhyz\CHQ=AvEE 5dTV-men\l*-aZdFRe*z.V PK@+r]Yz VVE Z.pZ0++RnrK%)W};1]eϨH!O^Pچ]ГN+@]Np])EEwiˉSP>gOFʔ{w/w@zNUx5Q$eJQ䑽\@6e~Lb#cx uR3|:P%}~]ipcz:.6`*ǯ ei ǀ,|K:CuwDb@_YzSR>D U=6k;"D$$5I3pO }xnzv+r^^*QO[<ío-QWOy>?UM}zdOfP~ҧ wP3M[] k?jd9HG^%9RƙُDі'V/+gy0IO=xT7=F^BGUVC7/ue R\^7ծ~_7m-UCA49v[(7Y730w2|N*6rHʟ/r$5=rOh!+Uټ ?0ɅsmJUç@^<#Y;"@Iq=iwp;#O$I$-IQxG;w%(VAVt59U3׺k9Kr$ zEbzx'"ءe56YߘUD› {U IxZAM %ߩ0R'OT">n5/[|W8ġTW7`$ΤS zN:Z  S@hڽ=?㧋[?qU$k,=2O1> f$. *xef2@ݘu8n\覤9--$qL4EՂ ?pEV6**F=whV% Bȹ"-ЦqR &L*"HAĄ`lGyi<)dfXRÙ+T^f3L>75D$͐SM9z9RM%'z6r~xoCb NU mwr! ր }}= M7[)GM9o֞ 2F@AAs\ HaI:KB[^ҟ_vX~rF*ox0>@yrsm,{LL@Vvr3n*JΊp&f1!7El\0 ten H?@SvX8WLZk!_3u 빤ڶ4IP1rpy왯GHU4Zƫ_sVE ~ >i8}K'=:f1.W<#"w7L:jif.=Ao]Sk@H]C EZv&dpY|$/B K sༀbD>>*֐ʉfk^~HNmܶ"h$d iYv2C/Dz,5U+ #r@L%)aW6Z"*T܈\I++G#;V8ImZWat8'=\U; @v #DP4 2hF6}~eJ@4u1T_1=ޖoT$m-N$_|d.J3Ea%K]d@ܪ W:PIU~vıx [-RJAC`\F/y]&|2D ~y0lˈ\ΤbztI3*nb\ O[)_ Nv ; q3g|`WvzdI O$B]/GP)ѣ4t琈/g*IdY_wC%G|=ߪdƱ<bC9(ǃ^%󣡈qz\HMypCbSa{]%&|R9}). |Ӿ\ˏaD0>rew<>JԫKGC=Dn~>_\De_NY%dɅݽn< :#m%'Ne'ѐw;.7ܗmFl8)t6me9N?hAό8& v/\U~l_ۍRELGNBwla~'wby!߁ / :HC}\}#iOLKj4RnNL\hqLV{z66N+ǧQ!q1M8PmύF \d$6QC$dK]JY'SV bQVưjږL,dMC[KR6 㗫/ Am?r"qSsRC{3蒌'һJXܪ؂qIcffZI])ḌmEOOH0EMno_b<}7' Esٖ9cq\t"ɨh+[b[n;?XqQOi#)dP@-{M$" ._zO*PEl_+o71cgRzIߖߠ? 4>S:cNw^;EIq7# NSrw'lRiOD6TҮrm~3!O%j?nKh,=%Ɲny>a|D-w.5oWD=\yZ,` GRXXa[w/պ$ف\1E)a)eYn7\!R)LcVKwiTW[xsU]m0ohr2߈>+/iÇN8x,M9)#q1[S/_}'X0і}UyK|+݆=gV[Ttb<3Ծ{4rXi×g] '$FY@{déY22TOjq xE+_5֊zy"iթ~:D/h#evBطEBT`vIwi sg5~Wd~#-E5pwHBV9%qR%>L3tJTH:-~1ĚeK8@Jic[;y{A0}CV7ރΝG BURO!IdzX$U9R Js?},ޏ$1)PCf%/8.Z4St.avQ?[,eCx=]Y<o!9`:y_}O7Pќ]]8¶3p|NAG\QKy~d):e"wzеc{^%2@K] ̶|ΡĤrÕ a=ܔS}|d/? |:;V 1t.$R$;}Pυb Ϝ»#Pq[h/VR_~aS異T>dk5Q9{)%>q?IM7s+.'9_ʼ(O :z(RKG-Qţj,Q^lMOt2_~tyɢ~XeU^C_Z)*.1a,Ry;lfTEԨ#gH8AUJI8CCmxeTl1^衕#^(l9\Jd=*)I/TD?sR93Y^Ͱ$,TSbg%VQz(±GhS梎e\R6Rѻm] 5DU_V+7jۼj:3Ap[~P 6P1Ҹ&Pl&58L_[wHin_?Kfhs׭z ؀ X+"HA4q-cJR γ,1VUOg%HA~5 9ّdVn6 .f%3vIbe`"5 /~1}ܟ᰼~zu[D_DegHgMY8Z ^Ma@N\;Ӧul͸GDIG WLdX)|w-2w3@zH>B:MO4'&wz!R wjJ>,F M ˦Sd4 ` Ԯ1VxSAF5c 31­`x|~Xq #??3"d.=w*k:F:1,^OJfeЛ]>xB 23d$z!-YPs.pcn_RzQoՀJ K,qtO^s(j⟰Y_UgV㳺J ]T# N5Nl|8Bq|(||6rc&&ε}"gjNn~&o!<<Ę6|haA맫M;C|ַVm[C3NIPB6%fJZV[y;LOxBCw8"TWj=QPnjOW|ܟ˛DL/:E9 $#q_.; T$YD;UuWPc幆}&H@qGwwl|>4M lӣd<>5z'NƋzTn[|=; Z>,3 ^%ʹ){OM%{&e1=6#>3(5Us gE4IkӤ4u#ƕ3w)|QLQHY.;bqUPD\ QBsx.OXwе p{X^v\ՠTzHayǔ9 $ ^dRs }>~sʳл7y>1 m$ts}&{EEx+Q)R2+IDFw:(" @ϢZ_m$33hV"K/PJEOhsP ]Ʃ>UWD4agWM溒23)XT)fjl0Oj =Gj %P|m@MGrIOlu$A,C٭iJd Zl0Ig3%:jׄjm[w/ӷ=a>Vr484LM3{%S9gvhi+4W+)[MuϧoW_ݩ)+byj*EARE.$;hS tU:9Qq)͒l1Q&pdZ`:$ MVTT TZ*HŶͅYhTtS `H[4QKE>Iwɂ{%]u T\ʜ&(*H!%jY$S!_|d;c2cfS2k-Z+T` iDUC>HiU>)[b -Ǯ E`TPH?rU ,^fޜӲK|iI01E ??I-VY$N\.1$rǐ$#E)s䋨̥%iM>T =~`ʣWb`+&L![Фn}Rm,X$H uЃӞ 0l̀t mJ T6-/s/gUÌ`:,S[J ! HDS`Sק`9܄b!h$@mbmceo,y zV7fՑ$K,]*PB/?Nr)BA&+\q6MN{TC=fjCPĚ-tu%бdQQUn1(5U T 5yϱ#D-8/f~"A"jSXL"2PMtҊ" ]NylxYHT~fJ(oF }X8Wc\>PD! 3OtZ0lG-$f-?i%ez>QzN9O/nKd'Ցwmy 8١?PFLvh#X=3- שYNcY )f ;A$JKUp::s 4v\s8nI:{]Ru:fɰmq@']gJ{)$Ϭr 0hn\Ffⱜb9{"}6:ku$I>P3%ˣe v҆lyʁ7z)ę 4uJf?R#L4%T YϔS?}Ek,A|+k@29W2Ky7lTS ^ Rqo?Lg@+>M[NO OohNϠ}͵A P,Z/+˞{3asaL趹lҬjtqmZW5ŎQĪWhS{$OİY e~ "†}cB̽3Q=<ѴSqjTԭ{ߡ^H=HSxeai6Q4PP,_Jx=cM-Ģ\*| S']Ւ&6@ W9ǘ C*z,# KP!9.SnNmh6Q`8I %U Ktɑ,K4$4O໋FY5=禔(J]_`^ ˠ,F-q6e/U$˶T|J"1&.ˍFo:jb.b궛1|d,U槛KS^JHNQ\{wwzG%U0=usO $E5@+9"Kfd2 ~[ANEI5Gؚmp)E9Qw4MyvbN֟,ʞJS~RXz' G ]?txcjپ rFcFMO=p Չj()Y܏kTM\bSU3ASMCՆI(T6Cc>nlA3 '(uN?ME`:Z@Fˑ2,[oRԒб=f,ڲ!;.A*@mi~+Ep[V PRDlk5@#Y.Ŷ?UKZnn\uf( M* L Ѥ](5VA_T_o^%cO`Ƴd7h=.1v5PR(Rࡲ|lܘoo!|q`h\{~8Ɛy*r}ǵΚ y],V[vmLX j0:Fu"f!< Tzm6 qnUHͿhU}7ZD\m>Dg` 80;{lS67K*a|SMt,1M(ʰ_%iWY( WoMnh"a/ʊ$^g-)[;RaCVz/J<5[8w3<[mÇ|6 w⣊zi\/tja|w4 ݏwp Y9 5Ao;X,g*JaWoz^#Ҽ.`N>uku/;X.H"+q7mfYF?Z q[:G8fdɱI f:;9=HMcTǷ=ѥVts|'̪O@.wOyK w9ۭs8DTm6eя~(0Il=#(G ]X0kݝ?IX{L~Fx(jYpg蕓rڇe^3@ySX0=t'c1,f Mm3Sg77VpÑVpJ7n y=ȭ-^@c48^P'´{0iqAܖz$-obš@rrA8bGc_LM'tD|M>5&@MD3}/i)K r4C_Qhpɖ"9^g-u԰0TsIN.UՂ΄& TA72$G]N[Ž/2J!uRq"wE/]wA|)uzk{YjRӗu|+fb(ySt0SLa>0KAz%1e^ |:y _մ,dx;]wz&o0]щYj^ٟI pդ\Ck#L 8dPvnsqu U&-zԁl*PAW^ӍMI2vՑf^05V}R@ζ???2d͓+RMƑuW0::`R=ꗕQRG22,5Vod&Le4Q07jhߠ!H59DQRo*-]N߲r뽐q uK@S'|8-ɮyX%%W3ly' PWvfzgN{UrA^rȟjG+;QŃO7Ŧ^kwUWX-2#ۘ vRJ_)L+:-+'4$?ߴ)S;"="x]jbSz5!y M B|U$g:1\|IyЙ? =#?HY%a'ūw X%M#E~Uq&iibpAl5(Sx8OZ A.<՟Eۨi]_#TumiahGA5T~W0-)fj|h]=_}< ֜.lҥ/ۨ~D Ra9" hbܨ&/,Q R[]K.:VГ17,V@E٣w n銴T< ^gtn-՞ Z8h` 02IB a'qg 3lm*<`bLH*g!d|_jx w2=a%IxOˊPȩ*p:cTZJB-V=_qKjW~waiL6z6= 3+%ڭ%)`e|ٷ;~jZ/kjlr`8 /!wڜfj%G{Y.K="Ϲ~j@!HBPǘ1`DW ft;'O=[ͧR) mߞB߯~,f>&?;H>8ΓCū?γ_>]O\YVd03z]]\LQWf&HV1nQ`,vir׫ Qc<Ĩ&2b8IjIijOf >R:Ei4 jeLf7|E^E5mH{.I{؏f3v۩cՠU5n"BVG8MqB|xtE0vAOlpQEidZĹ92!׵k |B=xd}G17okgSCG&cN]s#)Rw#j:4cJZMc>%Qґ'qЪA꒪dca$cPQ :3H#ƆO5KYyA );/%!ψ48LIK Zz)W դr筆LqX.oJ i-iy˂1 FܯU]F+443f Z m AEL+ME`'QWDXF'v#5琦 ߂&B"Š(1_HR`ǖcGհ]DSr*uzDP4@S<{ ʝ$Qs n6s'U U>='9iEMH'TnʩkI; @{AkHJN!Mu_܌4')  ͡W*.nfoГ!/=bwze/ YEW&k0ՆbW@l#F虹_]2YoZl&"Yq`ll{_##SOTtYcQCʑJy_c,%\I?KS@m vN[):Z]q^R̔8lz(ϊ>> aj8#,4ei9%1MʨswT8̒ibt]:Yugpѧb}.>&.]?Xg9G?^u]2ut~I] M tק{i6i0:aґ3zQܯe'f80'11S]U¥`n#dbmek f>Z5lu.C.$CӸ[bf7#[pt4U>9PGkhWOVM)$`Q?28I[VTz!W=4j3v%r <v *fRN塪D#bR18e9l>\;XZ"3B?f6xT1-9^=m3/ 8RL~)> U}T >U O?d9shHvjY1- &`t"zk53Pz'6&?2NNۋ+d K؎ш2wd㏽|*x)G{29W[͢GU#4B(u$Oj rUW cF3hEnY!*TO9tMmLv%ELXyPZ_UCVORPN:5C´V 2PuE2ܗf}:j7\siq J uMᮚvroѭL :#'.ye%w.I:"s^rKUeh:Kq̴絨^y '0 h UJޔTi -фC(Uӓ t2 sSvH&t@|Vزm*zfSVb4CKD%it%Nf-4zP+)-]QD4!YPp')9Z PH:/4l:7 }ɘ,gn!!]7edE.t3<>Unr-OYUs0͊9=nhσw(f+zgN?ՠ?eΊ).Cg5ha.)ySOu=vji]^ ?>~|{Ynu[ip_Lo\ǹ}zݦKuWV/!*HF\ɬw QovDև[0}w gzA_$L~7}XouA%'f|n%Ӎz]ji{K|)GNNj\rOQa VZOZx=L7p_x=5"]x@x_ɧ0/ 3^W Dr{>St78y 4'Gijr\?kgwdkhnN] Lg`'RUAT` rd*p+ d펷ӃWn vub%/V׃)R^  mOm?,Qy%FoE||}BŻ7zNKˣ8 _&CQ!?pQ/ }/Cv ywFH5$+e%[T\cVann{WCpQ.Rݼ+Kcj@|2VNuyYqZ1v~j@Au9g%gv|Q'^nc+n x\h/rY^VC LuS 5p]<~\:tkm|W'LC5/\x:<肶=b"UOͺGݳNOZkSZI_ !I8 qytrm[.sL%MT=ďu|{^t~_ ه=t{92Zdҩ nZ3;T'եUNqA4r{n8tn$̅ؾX{:cЕ6̡)WEɩQ1_$ ~:zk|S.?u3#&rX(SN\7IY|l~Z iy[p9t'{0~._3dvMak=paU+^RFyxfW &U=,5GJh|=9+Q=Z6} l<̊F~b׏ہY퉼\-@S}ȩ{?}Ծ 0 d9dkź>S^0ht(a"x@u,7\mJ2)Z JdiMHTӍH^¯5P$Đ\D ȺXIxb13]-uw_ai(ZvSJVz9xNқoN.r4OQ"'ךpι}u.N]8_6nJϡd:Pī޸ֈ &Rҿaf}Eڛp> rY$AҀZE,~UNFAyiP`ʂf0J9q)4SCrk⍅tТ3EQpY;)YRh:Zd %$_%,RmcC9h pdXசaP_mm-4*hˠ_ٲMEUUv 1>S$-l+7mgW 6l 8,mn)>::AB?#߅@MlV(2 PtTVQxH\NR/Lq{RHW/!QD5Ɉ௢.598BW<U&c] ~Bp~x _ooM1p8/k$ahZVWgvs:JS!e$T^k;DeDrjmS|C_h!~ x謏F*hZM3M~h3 3(L8h<65PQ+]q-%mA% _'lQ {R #-0 54s Nl@$(HZ`?c!F!_Wwl3yWfa^TiXRV?ԝHރ%+U,+31Yp eCz+KHhuF%8{#3olv*yus+W(RI3ɿנ ӁCټ^/*Au3l(ZjbHiٙyX(߲и8|yA{G!${3DW"HZiQPj¨@-1Xsp35׭QDl-m?v2YV:LZք*.koTZ8_PefPDu+]*OhNDNbgtpD GLm KYNR$rhny,r_(u%[Ac1fdݔ<nA|/[)ͅYO ]1FwZW|G^p7և=BFUz3rrnD@n >@Z#(( pW8]J99Rw:k Gir7՚p6 !۞u,w~ZCr X7|R(/ƷCZ0K#a`zxPt7Ip'*i.·x=N8QE3H x;?uENeFuv~*E҂r_w3sel|c{JlN CWoU]hGVl=}Fݮ]W_>Kyo9r噿x.(^ˢ!>lnu~^}xTR.\_ϯE ^1)3NC IO:YLq<0?O% C\WFIwǞf㰑wUs?+)@<ܷ@}?p ;eEʨ\sӷr>GWx\S%u`J/}IHx? T݊oمyҩy߬K]vpyT:E<ӪLJC#^V~KZ?tE`cr>py G@1OɆ5+r'YҽI {m,Ky(a^"1} E7n2k"ή [3>rkBvy&Q%mVWtRpT}xg dtOty^B=W+bdžy~CAH ؎hJQTzOJ\W@U\^32!@X ]d! ղ!j4i_aԇsB_40~ (1d{ݠ ECIE hw)_r3> wJN!܏r7 $k[]pjMORڿfq/ZXV_qKkQf~DHԐmC/'h PDuri?,;Ԥj-Cy8c2&ɱM2VɌ[<  P6v/xX* Cٍ4+dc}Ƶcc (kJ'OQ ;(-~*h ]Jqk)77t]Pt>w$7vJՠV)`AŔ@v?=^\9@޵YqIToxTW8Ttk|Eֱ'>񬯖nr1vr>~hN3Đ6kcxcj.ç=s4J[i=N.B6)C7i:y Ij$3#0 /fqxgKwSQT/P *?/3#9h˙b&;tƶ!Ġ<gr{ϬH:1jTl])]7z՗8T"Fb[1*%k:ta%gP#>8(F7msV'4 ^f4TT ֕ALKM[}{%9 #uh8JYI^{z{hh42!=5\BI.Xt˶X>ҁVؙF/}@GCHY#}`Ph}uн=<@*9 Ch+%&hh O5qNMC ĬaLDߎۜɊKeO /Љ(q&.f)z8MT%GEF`dShj}7_9LIKar\fQJHS,LyVBS4f8 ɑ9IsW1~HRq鸤bTrߔZ#57 sG`_Dj|ۛ=`Ag ]S^*p¼F4*E2I[KR$YϱDwPY8;g"%QlKwkAUbin̻xg=^=m~c-ތ~Vg}Nod]1Ň͆iխ~f^ͼ)ĩ]v˜mml2&Ͱ&4,DRx,j24ԕɆ$w[!Y˸!qՐMo_&*(7XO8mmXZH8cTơ]8͡H0:7Đ$0 aΚ#a.cr{F* ̄hY>{rmw͓VPގ0g R?,#rl8Pcr瀔\@6zzpouz9޵ ]V4 ;2|{zҿu}.mꬮͣR=+7ard h qwyJy 7x~m7R^q]+Q;YVa#>B<48#jzׯ/_y>p)k&jQzӷˣ\rY.,ܷ+[]-t|+)oT}~J=@~>v]k\ұ] '5HM~ܳὤ"دh464^yh׺=u/β@5\k <=#&@6ܫ%q`4䖗2X՝Om9\t9#b Re<`8{A",B rul\;J<6R0-)ݷlT1dOǍ(]>.Ov}PB.MC¦aU.wBGKRI Jg.n/ "Ud].G6§vívՇ5d)H Po( ͠@'ެ C` 2M[Uh#,}.9ȵ_jOaFKn<8y&\Y->B~0F^0ex~dȾk^eD{V{*% !^*8؏r\*)VA:o  PIgy g2c؉B;:0@Z"ݲh[_R [ P.qng5 NEug9<_ L  ׋C"Һ)CwrZ萺񏙰@Kpi)`f$+#P~v6!Y>׼UВGُ^5&5n?PPɧ|L#^_$>: ڙOFBN Wj[^ f9l8ydƜW#TزWV2(S1yx%Bʶ Ǚl]ًiKlBƈZg*OK2d0AutKs+!1$$ձe<;´I]YV} 6@Yi|48 qƎ@sv4ƳgT5lfBяP6nx6CMCWy{g҆XPv#m*QrG_>GXƐRP\K5{vgnqc⑔ķن^%goe߆yP_zun'sLvUJQX5bdh@L6)f >OĘuJ4^zS䬥`MBsX˦/+, IT_rk&`x4RbyS˗5MbƈAdԠS"U}FUn'Z^N_I吽gSmޜ!6~Fi&BMur\+3%$:.&ER`]pB "q`7K'Q; )Xnnmp>1X, gmI̞!%%<+%:U ʗ|Yz|')59(V_4Iu *A+W bӺr ZG*X @%u;1{n U}@ V%ܡ`@u~m>A,ׂrT"!WT0* !ķ"@Vk+ϒ傮[qEN!cq4t!1nbyZfbjXQä&6+Ts,D룤[s6S(Fw)N'<~寋?PdsPf]XS`vUwsH.z!L.*J>57uא\>A'DՕ3HϾ._|H ӇnB*QKI/k(I), nf ?a!3E.cfEF͆|.RBEWe$uiZпx-t~]> 35!a%M/7[")õkm8gJ§2T (eG{~-|Z O(T;%?9)}73g0Bݘec0/;:qrB  QӨss6{ڷV8jy.oGP|2߃ΦB hTRU( a26X1VUCڬlyf6)S-*顱0J%i"뿧MPVE:5TE8 Th}LQP-HKe]J슆J(.m0AJՈmF0Ai2zHdPʹ):'5@7{y4/99j̠@ X"d aH)"R]v EZJVB1te Zs"!}ro4]jX~? :T)JTg_aŷ8 b RdAr n_kR3U+źI܁h:tYSA'fˮLkxIT8Ы+ÅCeYv.ך9r¦c?MYbrɩ=0LZ't QWgdƘe ݣ).][˹i8nAپVj@R2KW$y{Zk.e0peol_ 20( V$c)IJGuƭ-JɬV9E9j4:w9=.am/΍*?c>UU;P~iw0&{K$<(L@?)Jh'cqc9s_'dU`^׉.5yzC7#8 .6|? R@犏?}}zܰǝyʏT,gGlMPCp\'*>q ]0YUa{C(fo/>B؎AU߹Qw^랦oU"Ҭ55Ԥ(ܩ-N8p/Q@g&d:pu%_}\ht_]Hr)G$VD ٳ|7yoi-QkM˹K &,0 Ȯ[Uj \' -Zmoނ:@7G/=ᆱyD[ǒRw_)SPQ;dD0>iz9}( Qy޳Xz9|qz;?$04_VT?(eszbJNoUh" ov^j.+k˹{=aŎLer}Qn_==N]_ϗFg1n%>>FYGX𨜤΋SJW-lpOV"ͲoIѲoRr64uE_Ve> 1H/ۏԽ}#q ԦyUL? }UV=tC =(70n;yO-p'<)ۑPR6lKYeI ujV&ahsVO5 g,^/2N싖wEVZ# vԐ;(ݮ#߰ӊܿ(wef)<  77zyL!CWzMӶ#Ol&Bx7#ॴ#p@CSy?v1&x]`PԘׇaQ)B+;l={CRF*pg1žuuչsv>CHY{L!lW/|vp\:`iݓMۉd޲ nss0?1IR.E'ܻ>۩!Ba뭹s~vB &GDgO,1%ZH8^0Y׻|g~U/f {U9=gK)U9\e L M6.&=Fnj)>A P-sC)MAa4VǔH{ 51FR%E COǵf*ER_gɴR^O8t.%+Q./r } IBHng딏˲$)2C~A챟5"J(}窽 H-U w'D'UU}B 399e}ҫh˻@\ 2p!z;Zv]\$mx:v,1,*YQֲUə(2]tdO]jjh(WFz"TM儳] GMV8&',ʝoۋBMEV~ cx~3/[&'VZE}ވF? W&*C\>_ֳ(/[DXT/Ɗ`)he[ehr!qkCVyg^իil=!&@66%6CS48|[u>d;Q 4ڳJJbrspԌHH֨S]s,Lх~ץ\Y{/F>…N^?'i׿ 3`f,>!fiVnک:7ۜu 1)赱*UlH:;sڬc3U+bnޤI'6$dIIvL %3(\g9}gr+'YUҺτgggOftʱPy74FbiQS6!Ums?<#s5OPeSW&^i戀 Ð *%R^bKE; nqNf ~ [B_Y|+P%z}N؀PBgVpzK)T7.JҺ0Lf?gQ,<*xĢ^z4̸ )SSHW" \dzU SτfEߘmNؙl9dG95\Hj;ոֳY^&C@ K: 4?%8cwȕd(,EzxR#bQɒHd`GU]E),@YnꅜԝyOEFpP>"qra?/a9oN W@@\W)2I%[JqLbZ0I&gࢪa $UqՄޢ}lQ0~$%^[1FEtzdқٵ(3We $1f)͋D<^jvo88CŌO㪳#WRhO$l|YC& v.WWD\ih'1"~Jv} Q1eH׋<ءtWYn?OpyS?|{90fyE(v*́܄Dɒ%G*o zzKSùllquEB~tA2\X$~yFKsL_<*^O'(7'^K'=WW, 1ӭ"3 JDD`S)}`z #Ct4k'F~JF~ 2Bmʙ>$if@+NRcb03+Ri1&hMXxezq{2)~ǜ2's=gD޿MMLnuҌ?~.~gungkM5^'39,)ZVY9_ -_nUcKH@yR|ؿ%|ߛi0&larӇlp7; `mqU(-=`=^[0J=pZcbY|vH绳  =\.Xu۾enëLz/ꛏI\t[?trWqp9U5U'S};k꟠%ܩ3"U)ܿ/를X;Vdh hhnDY_~,Ҷ,jeĔ 0*QVR_?Z6_n~RfVrJ8&h{xC# >v9Η}tMuN&V1d^UF&!Q@ɲph{,Vv=$4?P8H}\GŚM:33}yRxL%Ydm{:?!IjbxB])Rp^%v`.h7My%D".q=o ]xpfȊ WV,Q[dϑց9[9@q2̠RYDLw^B*K5 j0puehAIIn:0Ȟ D9ZqAyF's~`L=6^YSa,o|樰f`TWnM=d<6#KFwx5 IO@ϩzP/(SPAAr\.uYB9njjc, R4"" DZ:9i+KNAyJ e I`bsP+uYV7 B 4_~VGC( tWyv6se|w=fb%n+R%|?NYN͉iK.0#zՒ[w:Yk2 j_$.*\ۛOj}C ԯD515[27gw mT&E_KRT2Ŏv+IDĦt! &gO k8~ݵd*fbcj EDFcq34̤ץ^}ۢ2XWlyR)38 rM UJ|ggM`&bf&\r!h~.e#r"\i2TjY8}JשchY;I66͌T}ejwÑ>$-ӡ,4FșZjȿ%,V˶easvZD-H&2=!N:;zLvoE5AL"@)"IMXT/js:vWł{>(IńJk2u.j|B!ckPF6):-F-PC5SuT8bR$c,W{^'h5Ւv@o"yf!AY ?ӣ$$mL)ݷs%8eUȸՇkLb&^r,2Ie5"𧲘\:(7͗S(ZaXsA|^>rU'##şXDyy+9?#Qu#᯾:g|M ' tǚz#/T+^8_ WyiXUI дzNjo.f#jGw-V\k5bcI<5B{N ;OeM+S@c)cPxe8r|;+I@ 1g,{9YֻԪV=ckz;ߓ=L5W~||=s}Fݣo<^Id*nc02U!_ϚΏsm|#A##C9)NW[u6G\?8J^𔣢Z ^tq\,`hpqO;-׻0**V2F p;%p$¾E"#fm>AC\UNVx Z.or:vOe\_q+srwfpGS𪏉>xm|=W_va ;]7-$!S^jq봆|vȏ`oE|x??_}7U'CtZjТ>(GVD$rǵ2Zr8:8]~y׬/ËtmPxڃyUz)s(#lrssh/ Pӝ2nh+ݸب}Y#)p |אgARVt_J#Z6`Px!S}ZK)3#lxCD+7TZc{MAvX}gx]ڎ/A5==kU-?` H%åZ׶=EpC9~;)*,`HBp7<ܱiF W{ɹ7<yAv^n{QIalc)> ?NzQkCma0}W'f >A w*o :7됱xmIO,>zՠ>Oqv΅{p%JᓖDrYLYT!piƈ19S; ފ5h;36}VNgy &*ysWҜ/:َf%ϻ+k}sNLJ#)/&oCI!\v=$)<Tn2 u9ZbO&7to1vjY>  |H^"7L°fF1喇:GDEƐ@V֭K)l.(^8gjD}4Qi&n ~ir܂<>2bn쇎w@Ŝ#~7?dSU8HEe$( YhFѫx|J-)w≮U-l_֌:%o Z=0Î`mg.!d<w:~ hmU""58U)+}Te&R[E^>qa :9w^H'W&MhJ\So]R-iBPv\"&(C7Zʢ?壍K'Wj^c+"pޒ>^jPnz¨ % h .Qx%k4*U gFS\/7|]lw{ynJj17:Ùz璉oafm$k@M>cj^Oo*fx9*@mC{9W%3lgdɾ.ݨаs*">ƤI DlRFtxiif6>ez䎑v ^gAsyJa\/=ꫀNsG"t9Yis,o_+۲ލGQ-͙_W!9ISic t93Fa̱|vVeRrs*f=?`co4m%;xMzSAMVjHb}vT(,'39Sq3Yb槗 ^G;.3|泩jH©8/R7aS1gGR+F 3}7MqWTgilG0}.EbƲa LnG !Lj$4䜯sV]b4k(KqחJpBTZ[S,/F$HcJBAZi٢c9 L!>HG!9s%|ﻎ}4%ra:Rk8a,, ~ձ; ,,RʛF& A.MOBS̼&4LU;TRWts+I} d#-0;tGR<+w0ȣC-!cmgλN^NdPYɒCu ZV7 ^.yBN%AKyWF+|SU1"qnui4b %DCY~u5 D#w3&~Е11\J,sj64׉j 7htA}̖Ff"1\^O0k˧"^Xs#Qsg6{ f]1m}VJd\Ye@]QV'&3!NM%3?5h)xMCbFt?>T`q?T_vǻ[mG`.Q%3[@ÈeUwPdV9^ )᷏#쉂bj wH 5ET{%)Wc+@Z3FZ _qۜB<}M㊙@wZ0]]cx=Q\ nHir׼.؉1S^>w370ZCN>{mʕvFw4iӐYpTR9ߵ;(e7HvwLkݱx?hÉ|}J@G̳[cش|NB6ǺrA~2p%G̨PC`:kǐzj Q!3WŸz(g^R|MdGBT9_Fzg9e+ VNNC+Qg>N_0|1?J{;Ë6'лxߵd]Kw^z}4w{xS/~_^*j%  t#Zg}g,Q;(G,שmNpvmmIb{yfVuh@_I{iWY_eJxyAtn/} /}l/ vM%#0_wm,JyV  رm ߜ/ye6}'{.٥_Q{٧v-ɋθW≜ۄwQ,0^1w@AG=2dZ^^vm/fءb~E=ceyR&ڣh6ՠ#(Pp! ?+v^^e vix$%_OǏ~8]gfw,C*9ٜfkq( *>k.PE%yi'c(.<mFu*!_=Yk;nfIϙMSa(0E|wre&_5HS.罢8E.czs,=pKW#~|Wx=^i'V 65Avo fr'/ C7{m1GK`zhwTm` YWP:9{k62#?)&o93-wOg8m1lM=+IxVL6;YLCMLUb$3zv<[i9knZٛ%^bs.Sx0OB,0—xZÎAطEG͒N"N$Kd_- d![j''ZZڇ1 %: 2yFƓۖR{NzN]O#([HʤJ* !.?؎OR09DBy `+&Z](6B;׵}>Cr%sN<)E#;D KL x./Gux=qre+QGjY~s-gvدA#P £!5\\; w֡K<&7˺z)4ܭJ k^5*>N.#h[Z@/@;IwBvY2W4k5B=cLє5`pl ujCKB !u|Ķ9~<.6Jj!L"t7АBu'/DF􌱳ۻs+dbsh=%~Hw:V{lfH[@$B}c"9'[eģA`bLQYb'5\ vwiΪtxA*#]\P јF#: 4LET u1Wك5>!W9+T3/ٍ!&0K;Ǥ7@0#,Jyy#~A04!-1` *\Zse>y`]-k$ZjHMGM/#_kYg[p7CL$}/m*c5ƒ"iq%09nҺ0DIg3{扫]m,%Jx/,J]t8덅`cHj'9+wxgkγ!L+˲zdIm9\6kف;^_ hOy? b(~(']&:?lZ$O^)\O¼. ~p'3\] xEz?5't\S. lc1Zfvq|2J\ {7GfUQ/܍9>Kl : @ p]AW0HV+KB0(9&V%H+ovNRvHFXuϙ!O.Ř D%G5yɔ_jwC9eY.{;zZƎ+EE.ܦ+(B&@h1pja22A.ЀKeTWH`%X6iE/TnOuMv WTt!ͩ˩ ٱ[AģB#yx"1'{g~ॺkr-ؠN rx䨿{NImۖs}3(-˴, :n+.-$:t"@H@@6$s;b*f1ZkG8sU,T@+4((͈I(wBo:Md$OeݑڊL/aq\&v4_i1If|}e5`9/Gxsfb@5'G,ȻY*ns-sM1`[/eQpz}ɑ`U NEY a?J4f#k ͋oa1TfpdTVϽZFHrHNܨ@`4'4cFeyfmѭ GA'A:VC4:RP\R༄wJll5 AIk)YbHu}PyKxLC'D q}IfN%OR S !O$}>$E)Dά)lpR "ocUrvSsmr#'s-PxČT FN$jdbLaym6&_1}H]2i6"- *UhI"Z֢  "AMn52cx-d4- `R fO>afc|vE5R闬bkG^?а^+=޼PLǣsoL+4{mn"E>o&0i5jߨM]Wg(HRW-bw?K Ι+ߢb 1r9# dС,@=uJ: P޺YA2Ww!p,y) ߃kW?2<<{{ur{j}2ڡER!aL視R~ws7vjGQsDqrb Ur򴣒?\?.+ )R,Cgx Y[O1Um,a}ܫ" =vUOБs3 ,ߏOr3JX?)&:S`m|̸b`񲹼dbs+k8.js~Q8"qٮ]2*&.4ee |.br]Yjݾyq*gз{\)+ˊԽ!YwÔ˳0zf=Hpϝoextj YJӟj4(Ewk9ϫh^^ sujQg.e[7O>FCWc~SX2{ey.݂\`o^W-nͱ]K۝OK6mqb"ѭC;B̜w*R9R A^wz Z/`J&Evh˒6FoJw3s@-r<&˸H*eXu%G/qˋˡHu\rLѴ߼;# PQ2Р֜ndC.۽[22>:۽csa*$f?yuVgEsۻAYs|TQT=سo~[D#Upf\]g\6=ȩ2d"0:VN<$7F}:{gS{<8n&*gP>ّujσy~haNtn6Zu% Lcٳ)4]tҏ+:dA'̺O~KSw2/⢷;Hv_tʀaώG^Ғ2Γ P[Q pCLC哬~pW#\E&=Mi{n|oyrlxs~}^[DЊQ'g lydA_hgt9\lq!c:e>fr#; 6 KiR!6qS\ޘIa^flMm.vGTacƎǝ 5Ԕ:!HzRظɆݦH dzle05m԰=ޜD]1n4O{eOzlyj UOR ۏ!&E.ƎU}zBeAESOМdTȧy;+KٚY/wTHפ#vo{hzɫƛ{)[X\;6ԋ(Lb;;j Hc9@lH2*Lo(D] *むEdzFc6k96ֱ7"(98`7!>_5|Vc&W=ѡhRҩYl&ɕ a}(<礜MH-bFغL2=!XP|A|A46Ի_%RpI+|TD{\oR|t0f?X}ǧb⃀=u1<TɔtZa`?m^yOpe7 c\_eiA{0\-qC8pCv/G{Ni~7IɁ1CJcdL*ښ!k:]P{*9rÄu;3EH:Lł[|p@׿A.dc ^f#M3%m!Y7$9ejt3@ďI3(P㙗DA`rPFmCj3` 7H ;~YJ{Lv7d~ؤhgL-uАb{I`c7f@m`܅H^J yk{HQӴ qJAjSF7gܹ( ~ d"__#]JQ zhTIJq=PPHጪn&+M4yiY]Yo۾Mc&S+-"B+v*rvn<|>0?.4M+kϹL<._ao3yPh*|r*Og)CCeI>[m)v"&2f~4`j.MKk'%`A h;GXPS#)#Ħ۸7|j2P [>!ȩH ]RF@}&2h$\*Mb9m~yiu a:F/2er \tc@:5Qn HD F"J Y|/M:8MF<H:0}Ug+LL>jp3-izYd[_$I2")^*ZW?'9<@>"7qHWOxu'% iUsdnKo^i1U ^_A_N*5}90^ *_>zvFqv3=rNr,[ aGџ @QlfpA|9[2BKuw7fyz-0$pa;e<>jmyO?^Tl?u p =o\~^NnHZGSYeE-v{]{t нP]_SD<>d ~ulΏ}+azT(,Ǵ,WˬBUuҮ[ZOOOZ|}~MZXhޏ9$W 20pw|sc,#.)٠CU.3d%![sq3wh  ;?5ɾ98n/:xa{z*E<[m//,5˺DXr Q<(׭_Α$cp P4[K! @[ ͡ճ־tZ^4)gcܻVvsQ%FpߵB?6[া[KnAẖ`'YoJ=?/s ֐nH"k dvTwuqԜ6!69dr97.gǂԽgKl~+*mxe m֡{ee|v+1h(()$n]v]K3) ߏ_]4#4V:rYUھAi9)VNή60 euoϲ纝6,ݩYhMTrxS4;?| <sM񛪒'X4d咥wZM**-R@3W2e ?Ѽj:;@ytR?˹Bƪr8Xe SdY][f )mĪj&?a__5aizFْh%Rwcq+{?c EbYsj/a}@rEgoZF0w,ƅcC7Qr.(yVu1snӹa+8LuU1 -7RΨM%σyNB GOO;6IgX.gǖvKvQ DRY^E^Lm# ZE |H*İ}532zvcF[vkءTtVg|߸*V[ TD 4W`Khߐ5'{#x Sa%O +yu^: 8 =u^;-Bfb2d&Í'7` %@F~8vYlt[:创?ۏ0N<}FxՐ}qM8õ!j8tqW-s%G:Y}_MM?cY} .?=k/3*}RLʃbk: F:rŒ]g|SG[ŝ ȡF.h:CB~%?n28~ Kyh 4O :2CCP:j!J}QVAKz,G̪xD%֫~2ߍIq4x?bSꁪugBM.*(wZ7kHyH),;,q^,YM&7_%_$=](軛\T mE40 >)DZ:sM8gxnIH3t;ngկʻ>v6%HL*y u0JT>WK(I҃%PŌ"`\H2cR& jRJI `oAMeTzaJp?oA#GakzBbTQix eyg>h_EԐ"wL%tR? ځQl4=zD dT[x"کU|;lrXjOԤET3 G]X97'Uq7*UYjBiG0XBgV[+>feF<,@gnd6e.{GE^LvMT|NyYn> ߔHҳ,Ճ w Ը+U`Va! (N_s&&6\ku!$caʮJv\72tk xsr6QѪ*epN|X/$<M[`r@QH,gYzyDqKN|I@K G)eyWȟt0ȏ]0Fd0&k9VǤ(>=ȴV7h@~`r80M蔏kY,%QS56Szrg&'Do"}Asċ*#m4B sRyF Fg0y%Af& ]'PqH|ĸCG9_i௥1W{bMl~1lსfbzCM/DzU@y.!yBS3?3a.(~gvLA rKu21S(u)PI̼z0^!:O@W4J xtg9t%L@\#78 f%P H| QP1(}jQ^DAQ:nJu{&rwtB@2/v}G>cq9?佉>?7N׳ h8˛Tcuoi|ؾ륳 eU2ˉa'b-eMȱ_eQgr3GծY/OpyUf]-g}y-i˺;?Q,>Nwt~5q螽;X唽[^x$E޸U\v߾8&hJ6vY3˥iu;'et+Rμ9O7kOB7dBl.GRnz'ѢY77'dH ;T'2n b7yE:(Χg2g}h-W?/)QM[vNEؗE~SRFv3Ն&ᲪC?[ sUi]ËN7?E=?S齔!6[ Dڰp͊}]mYݜ0W7?aۿoWwnۻ=A#Xeü ];\ 蛹_U7w:,Mev>*Jlo%Oõj]J̣ (;Յl0t {&w JA~ o18c[ {6S:qmBibt)n>tgLJ@͢ wp׳B6D#s=zLaO+Kv qdS}%DV.Ohpd\:6Htxrk}8rJtWؙF[ݎHzߖ<7չ_ Mn8s牡玑Ć0dg4a0Ž7iz/su J&2~`2l΢]"QQ?7 {1K<5~@!f"S,^}'(@̿}\'tBcPTi3s\ WM!)~t3% rNɵfШ+C#&ɰ^u̚7!&5Mz$nbmsu>P =Xi(](膺0q'|Jr> ^a2( ǹt& ԯ=ygIة0Y~s#XsѣIWv7EoZ7WkOQQMP\UkkԻ"@Z B3$1VS8Bo\+f8PסigP08N!NTmg(GS`H>:ʜc^z= 5% A:>,P[hty{]n:ZXK-߉a{$ !O+o~mIWRRʿPʊ(rkm]TJ]@#JfЗ7 uDx6MghbZM zOs`:F"4 3k`zp'aFZK>4 !PƁ 7o(9) /OUM[$Uzp\e05|w6-"=s}$sA$BmtUsPsFΨ 쏗2/a9\<Ξ`C.KUt#U^3nj aGmu(3 /hF3,R Gl]?O?wss ?Tow9îE.X<%{EE8O* 4%E*|QCmP;ew6~M>Qp JRIl`i]×EHBgP&!ȩs~9ÇlE4H2H ĘqI#n<+,027m13 GogPM5>̜(m4.S53WΖ1:Ƈ'Xrַ샩KF*ԓ-\|-i]jFYllk*++|=10%%lb@?d'ƓEclj}>db%: BD/Mƛ iA Ke 0#GBg2dzM^pSNUm>0*;$Z#󄮥#+ļ`ޜ#s0&-X E\⿄H > fɨ gƥuf+Ygau|i >KP$zsI1:} Ч:ޤgI񑤑 AJ#tihD=OFIQi`x+MQO,М;9@dK(d 54sќX㯱rRtW=ڌb v;@$W%aBBsY@!C: y4d3V; u{xlT^ r>ZBP?Aւ\eiw+a8(z_Sv_sZWKd9 ?| |L?jW fmtQ-׵f#K~j8惁je50?-aoIv)!t)pf}7Tja g#9 0Q4YJ4Uc[retaP<|lZz#6 R;.ƕe_]T@- Pxzրwo)$҂G#A3;3VK:$!4e DR=r_*Tկo}r؈q?ſz}5maK S@zLVr=OMP& "$ +@M| ZS| +97L\^뭏9y"z܇i2TJtRҼ CP۰z2L aЈ Sm{D g2XF=fC$}]54^R6ي K,/TT6os$מ2TQ ~5`Vɧ]g}" _o_eaݽ{K\C_(y=s GZo*ox_eD5hs|%8g[eUP3-?9UJc<>C^6{N.0=ᝮ x.}Pܳ2c|hf8,~z”K~M 5"YvaOO0)t=ܩ߀$VيwC~-!Ȕ'O~a~nzor݃K,O/=gE}%W窆zu.2 NO\=2Vn^dY.[xA'wTU^ s~+l`,\h{7) d7*hZBwiҽ,~6n1Wq_Ѐԝ.rum֥ mQgUJ~W~>| ?OO?YP@$7y80w>ł^ͤ39NTYjL0͵)sgͤ!45S .qEy!?alkfH,dR8jFAO{!%h{JtlGxĄU LlM/J4Qh|qyШ&Ff E>:ٛǫyBb['UJyG%GzCSTgS 541QMde1Z%=np Ny+eH}=3&03_?" Aq\J² )1͡t%mX͆RX~(gvK֩LŌus>x!$8<xՅ$"F>8)Y[1Z-ѽ tθ<ѿ5r0ņ 5[-A뤆A'{ۙ!N Q6â~8_@-&WThATQvNaPLM:Un BtSaP{v.:)sY d&TҥhS%$~:96:9ɚn_Y߲uLBeA-rDW 1R5 r.)ɫ PLNWuPpYTɈN&CYUC'w&Pҳ Eýd74$ovsPBXf~u\įfp.&W *d [/ڒq՜ )A򥣕z Y.2>k#Be}C,JՌ .Uy3Pz n]G3s{w#wm#"5E7f}Ga=@cg3HdR?OG||׿_g 2R{2pl2kG6aw7_d[Z#~,U6c>@:JC6e>𺲘P)t,0&uȵ QQ>(*ČJ9#g4ꢆI]d8v%t E4ђ*J ~!$)j1$-Qw͕M:+z`Ǐ~=W1?cstl^>[{^GOO}+U);St*V(ޡwgVwiYrJSL[@0#(߲9`{4@_(3qwD5B/1O]z̔xnP=rŚxyh5}^klPcxΏo8CkED\md D7BTk J#f"h7!54Bn{6jy0sTURU<]+Y6vD[Ɲ_y6y. ^Uε\NIe!!HqsӴ sX:ٶPXT[# (_N C%Mf"(3hhv?o;\*;v!O6rV>bY*0j25g8V!_<L QECyEsr{,뺾E p:L7K^/J^槲.~GOeׂ3c4pδmy v%9ᮒxa\m'xW-*iX@d] ez$Ձ%qդG,rYt,F<ݧJL- _pUu',E0c2 :LkrkSPڍфfT` k˝ѧcb,Vʋ|CIm+U볘XdI ei _8ON>w C 36fr_OCn@_cj;7iMɂT܇x|8GL7^)~8W/Z7m{|?西R퓈^fl+y[oho2=;x:Ӧ2=Z&gp{?hJѺ!>Ll?j2x<'C n NO-W hb̤ϛoZǙ@O5x??)tyxg<;?kH}߇mL+X@)徜36WGˡzBl^f#L㕧M*yT;mOoOS772kv`ݳI˪ 9t%c]%,ZB93vPUIj4r9mnyzОʺye֧{8?Ծ{Uar/߬,RmLٸ]./=r/9 +4Cz?*f yʤBhjm咹92Vn&]$S O޾tO˥ߜUUIa&#ry0oWy}V"Oj7y fR8y/]/ܶ!WַB).Bj>=9*bS@| r,x:c(?)p,qk_Hey}@ΰk)7>Z"sjr M߭ߘFEb}~9ɨ/}#lO`e`y5Jٷ~wy.#!x Kۭ[n99uϊ|s'YN[ϤDiq:f+^}ϡ}US7uٻvuzM}7~/_^/~~;kdC_FɞܿͱYПƳuaN1P9~uq;+jZw ŢBUmr捖;: 2_ۺ8¾cn*yyp@F݉,օ̾NܧOe^׹=[ؠsL3y,ktcL|$ Ј@aeszf~W -["RߧlzDS c̴܅#-ԝ)x+ , 6I32hh,_i%Jxu|3x^JHqx3 y,^*as 8}&ݾc0`W) up}u?}`4vWWMñy9] `P5-VYh0@Sm~>\ܴ57LnA Ad`LN^Z4S e5ѡ?b0GN2k3U&D;dz]Eռ l4y!EwӮsHzd9yE^>{@AR8V/sz^PBQ@ HGuty%ܺgU羽FzG.=k͐<"?D-[,!v}F^A!rjw%Xmj30C~ */u-G/2lzACNŬpXlVDa|йt)#h)b.-raC7T~ Rlko`b jg.k RJT>FS6~~4MrVc.%K{5$-@}VT0 N^$#FISh9OXe*OsHb0z=[ݪ-QnN2TI]rԹ9vP1Ӡ?5 ~sy&Xm<>q.yYM83ٟ,!!F肬I?L#R)UHBs~E'y zE?3pRjJ S-PcHs6 Q`a2)_щQh ,g7hܔUZ/AkO)k{lL5&% ^SW_Cu[]^f6gwtŋ ")dIGɈ\ ]O.gf͂ 䆉E;AEڇc)ԕlp;P{Tժ';@LUBm%!Չq`r1lNW 5~hNe5>/CEy}gKOt43HVQ( +Vx^a*-L,٫-ZH68Qc{?3LxO?y]Ϻ$iFh$%,PSDiF@rO=~R>Q L5kOcf .3ZWs ϔZʊh[V,M*(#̫Jqg~ݧjecщysj,w0|G nu|2pJ'U 7cd8Uv]Lk)|]CQL&xԇ_ C7~5E=0}̿d bs οr"zڪ'9< "鿆;?FײM4W8[)/;/-#Mgie^4'#oz-GY0CMq*pOL_+hꮁ逸V- 4]>,S|46Y!WHlGwh11l-I˷uv CYV%yŃmirz˫Q:5埴ο>EU |)'?A|=|>֗':_51\c|Ir R?m/=LKh;?s_;H W'z|uz͊Y.-wC*>/-+r #nBz~ z+e2ȿe3띜<+}v7H?5Vly|$^. ñѥ-v4g:EfWP#ɾj5M_P^U]W }xYiam61;oF|~S۟fٱ{NÙ]F^_- ؿk,C] CCs$ WkN LUc&GHщF:MOeжlwyd=ۅ%3YzbugKۭv=3r^}@0Z a^ta;+~,ZUcbIY7~m:9wE `;?|k^(/m^oJ͡}\6]##lK)Mm"gԯp=s&1H[d_nC?5'jr#=VsaEÝRZ. Z qk=#nv!1/ˋ}G:ܽagֽxھ6_h^/,%P:fW ÷`nHqc/b΍.29[U4cҔ7EC_C8hdׯ--?EŽiE;c{Y"R '+3 .upy;~}ӽyPnm{@ylmv}۶fg'_w)C{ }017s2Eׁs X55ܴ v wd18+X6f*H>ۋ@ 08ɷժkπP5K٭D:1K,~ ~!¾@JdykZLkF=M62z82A*l|amXOC W9N>ՋIfq?1wݱZNwbȦW|5ǵ{_gި>E l* ?7TՏykyIf2.b&o^ǟLd>ӿgH{l{zz`S@&C4_U=ʯ9?w 'gsvN*0Ѝ]0-]Lo3qǬ >zs׮A= {-\AQov)5 +i(? xw4C'jFbV@wbo">3y"aG( ,1Mz+](zgIC5+fT-e:SȒ#pĖg+ m].0sG}uF2QɎߣ/x+ia $!OD$nU3t'jQkb^ @Np>+Nd:Q}ȿ/,{(7T'귦YS?JnrGJEht*4e'&U=FT0UrpeSFYu}>('##1ڤ(φSnb%#}e«H}~"Ox\ߴ<(_&jzFpĨyVE>31Mu^­Dy4aAR#*HbEt5DT9S.|E{=J3ei%հ:"+Yl<'JY_@.&񨏥H끕3 _b~j* 9bpGn1^ i rݱQ5M#&OH# 븁P&N2GӪ:˝٬T YtxA" f\&MuI*!uM)d 5J5ĝF=.(?WB5%>=d eS<04K,N &UYԹԵR>̐'GL@ǁ%Bˌh!vyV#-%LRr!q+_SU9X@j5f I2cT#3% 2s+YSx:=9E(lJ#Wsɑjju -AkTkh7P$ ЬCљBle[$kr}4H^5k2:M0>Ǟ* tGLa3,,5pО{㏿G)?\Y#5qC*18}sۮk/2t$EbzN-QӍ:sn2:gґG'a"]Ť#e}R|pEY7D:YpylQ \ 봙G( -ٟZzh/ĵvjƈv޶Nial3 cI/MꅂL!MuS x9()M^9Lpv]'؏X8gĪǐkѡsfJ B3!ON>jDŕә T_.?C/)͜;\ ]ՠZRj{~AôVDu7Yw j7CrUCOY/73W=&FxSsH&QV\뵁b|ȻYd^ˠ(GL|Æ="gλzF C}I$J>SAQ{{FY(^vRͼ=<1 xxyߎN ~VkAHQ狿z B{7kP;yQі?@sʿעu|R%{ 𵔏+quy O;A)ȩkz:=nw},؏;M >=5렋Jh\9x>VZ;!(siG!Lvz :a͊g@9NIM)ǒ{HB"AbU-TƮYa"Q_iq)/Zx}}G4X~W|l^y}e0g{P6Clt_퇶gH: S;ʬi$}j(W2]ʵf mV&.ׂAAԒ7ߓdOQ5 Jp_˦50J8fx4@yKcBh.0xO~LyC[WdN]:8FUM(\랺rAez0A}C 9$A7G]WםAe?j1sƌb N 2o7 2ZAͤ9` h>IfP=X59ؽ@Od4*Dx϶m]E.Y.kkZUSaXcG,(ԋW %m7zsAEO,aȭ%,*Q!.(r DrG*g:oM=S;4Q<%Mm:&Pԍ#3I#r:6"0[S/:Lcv"Gntż.=l2;%2ٲ TEU7k@ّI-CKk,$m .@HڦboMn`·uͬz;؅7rs" Tx4V$Ф%7E.g{Us9CvFnJVhOc4J8&{l"د77%l1Z2r4kyi*R,F1yϾ̾ͳAEv Yoo>R_S'XϧDtXK+;m iwlвeR- &Lc3fI }HuqUI]LY  8`BuwÚEwP*IUǧVhHфi7jȴSg GHIS_:wU xA3郦|2t"?kLX$? د.)sref>$&%R+|<)0Csl?֗21axU}Lz057cC=:Ikfx (: *p^ςiȴwxh{B>!&'L`xL| 4s>zCO3Ql>Vq RS(I7!QTsz˜.1PLUm*[VfX\"P>u= Y0#&1:8+:مӇ]\5ϘGxR$b`!`JJH-ӎ1K55`VQx,LI|S+ 7`,m9d'A,eeYҜwO TuԙdC'P 65|P- xrG %k^=: S~Y,M쨱@2파0 ]@M0FCt Hs]6`%dekK_'Tv7enƙ&Lm*Ѭu2L郖#鬛b1!b}K8Q*m2,q<l;wl{=Lpr 6BI[#a·P{L,]mi@dXI>Qbv3)‰ iPVδ Eom(Y^nw NTi+ t[pߑ+(C2x<2te# Hn\|lR=!T{ݹᬁF^h\E6ěA {. 4vb*2̭f3F H?C3Dޝ"> 9+vEM9L,bhzTV+x0_&b*Q{%!NIEzo3y';'Z/c{x5}`u 3\^q17uL񏘣_ ⏰4~X׵LbtdL. S$`ug|]MӃ~M➜%u.?+ϟ젦t˂J )!OGI< d>iOsJ*'d%^ >Y9ɟ3 >A(%]ܙ{*zyQ!9ﲼ'˷u҄bAeLv>ac55=׉װʇo%Ρ!J:b򢿟+>.Eׇ+m(?^sޏ^~xJ7B}*V'$Cen ?Y4szہ D CJW@g]6򁟗gn|\Ԑ`?i}Ŀ"ʫ|r?CJ93ľ_u#.lјCV@ 3` >Js'/__VH'r~{y  l6r J A)dx`}rR k/VtyFпPH5JfAѹ~s|d7~H/2oakWZF*eyh_i?)}st蝻 /%"Do箷޿}{?O?\mN)Əվ[Y6dMR$b0}c+4Tr몪i>?=S ;zæN `Xexn_c_vKd<{o5b}SK&KAeɽy\C;) @Aw]`r29.+^t!˹BүQ Q>^PVrK[ׁ^i4Zuo62rkoJ߭6ϿXckj00xW/yi)m9 n-׈+ΖЖKg{^S* ]e]^ĩw5岇 xzk/U'ζ.PoA @'}eHzWVj޷\0#ݡ;=ҿY `1qƍ]R5|704ѧOQŠzd9e9im,IQ`Y㞱X<ӷl{Xj? >azs{&mJkԹ$-ŖQNR~/af ZP\\R( dFm*OO"PVC%8 H/kR~r Zs7)w2!WΞֳ.GΧV Ηv) /@P|?5cOs)_ [ v Q.qc# Cjr/O#O{k6ǹjOѦ_>x:inBosc2HI/dKM):S]^\Rjxb3fu܌' 8fI쮦CL]T[҇zt>\{߉ rY/ҵ%[}UBΰWUH]5~zB[U-giPSRoɰK/n NڱNjcbUvP[*i..&wlV4bE)LӴ3&{*F{TPcLzjh#AGFG'KYdʣL#SPsK4~FNYԆ>R&d劤ObOM 0ʍl/K͢_r ZpZh㑭V 6ݹ[<_ݟ[, +eXj'9lThGӈ/|{SA6+b!y[~,onQ-L!D6d# ״,mFMlkvhX/GX V}_ԲRrU$X#mOCr0Lcӣh}}#"*5D.&'CTK xNaX AlMtj&H Ckp@[KA%Gj͐qnY3#G&su6$49Ibs+4,G꬏:-]+gn2zύHg,͈Gh̲5gќ:*SE5|R~AL>Ӆ7]Zgr8V5s{k%:5n!~|E7ɩC{|OF~={閣I"a[.!!%zx5&>pbbiKA3se01$~E-`1j<&M$*TcɉF3RjMƉi)[P6x'Hb:{0,5t,L[5 qԔ!4༾ABuHQa& z}8[{&wy#Kbx8~Yb؃Ib c,/}}}岾vp*^Z`K~m_sW#ȐB@,Yj!Em~^0] MVkpEdjrrk)v,X=ayE_ԨIE׆05 {ʋ\ 9,JL<EeQTP[|#hs?:`Ď:sy5l"㒚#ۨ`JX"KBSuse:< VUGSxW>CQ#ŗg>t^gq^U2Q@͝k=Cwlq{T{kF#gN?x;N A.GUၞ/;LoʨL-A~zД0}c~?>/fdX7qcUQ+vև'}LLp .P^*[8ӗX~86 ?!5Pa>/OyvxTp%7g_ >ʮb׾4[nsyos|agx=E|j0Y㢩HyG-t}^IYvהܷ/ tS|G#=ܣopGYAOc*%i?ȎK}PfίOOQeeߞy1oudvO}G~A\TraEWӥC4k`ѹ g'S{@K֣[K&E([,+٭w(Aj׽9r=wzy-.]_jZF)Ƹɷe'ԜŽT7U%iZwQOlqC{W߹.7} _/ctu7weX](/AByɅA{#Mxhw+q%-=?[0**bcO,9U6/#x8|CZؿpX䙾`k%?YȭŸЁYj?8lG=+l+Rnf)vaG7*"{> lg?d*>|Χ\St5 SeSB̓'ޚtqU$^AUH(_Ð?(A,~|7A7w ~é.2bYlzIN eL<<.́Kt^$wAemTkҺjԿ՚Qxre( VFD쐯Tʨv[RONzPg&͗ѨdR;s_5 >NNu)Ǝ6^6m܎^A 뗚a6tJH C-wzJ|?Cev@TFTDdvϫ*Scnmv%8W96[6{uMUB̪#}IAS;7ƥ*5&bޕ#U;aF5]5&_=< wMh?` Ob>\5K&(#ICasbmtӀ I g ZX,δ;cyE9Tfd@bg? WFeHwpXbiBC@WׄYiҼDc BCҺ2bRLޘ^VtC:k%njMUxNFЌf2#vD!@P$v٦Kv@be5΍%LR*Q-5= Q}4Y 75A)8d벼ִn`I04M$ZU*뚰aGxJQ=ώE_ak fa4 cp 'lӤn [RXF,xeZF@lg[jr_KupRGSN-E|~78 w_mgk1fb|'LP[9t?5g"5#G( sAsvT*<5Ծ-nkX%1IBD0W8/D1'|;ԓOl4Kh!g. HD73ƧMf_ m O>51es& ⭻͵e73^z+V\Qv1vY+ch砵wY^eIyׯC=P Kf1@"EU,Cu=4 umޮ3A^ K3"ʵ';"z񁪠w.Xhk] tIZR'@ɴJRs /צFJȁ p|}0٫jF.Ȳԥ䖥;/ Rp 'O@On(HtU^HYB&'rV(!r*lzx c :6WQCݚtӋ,sl^NQ^aeܾeg-Gly@3gB8_ ^O<ߓ#.OzS$=t '=$4k;g?գ~^3Nj;/ {"0e2O)p$|":G}r_QSݠ(Ύl=. Y z|h@^$ttG=tR>F&+"Y9ʟ|?='fC7ʠB'M\E_u}F,,hm#!_?,KyI}ش+*G5̓MNHv)J>/=?#N<9Ff߽5in2>>}<?7uY{>t. bA$_xSy;lϧr~B-sIky`:m]~xk:`4/%%U%9v~θ9'>Ԗ˳%Lzۯ˲|n zDn}va?j]rlKwu)%igݻ]4@-wz_!k 8')Nr=_n}vMf/{զ=Ig(N[):K9u/$ fi0ٝwtD(c4):2!GŽQ1TxWU2wӶ4i# /J[[wМb"uȋzM{gmo1\ |}6j C{exR׹`c% Ў"ÉB#8ԐQ .5.\՝]?9r5rhM CVge~\0E?Gd3|ܪǰGc<ŷ7mq*[!2+GS5cxS*8mQqO8V= /jaӹ II>,/\y[ c')kX%#e7ǡu5d/HBR^gvvр~yH9)SV2-}=5j\ue /d㟚l<†z=+omQēAKQ閔OhAmZD2cbuW>IH?rwPB r.Wcw̨TChЏꦞ"5hLNb.爉E6W7t[m+Nihf6f΁ױ\X}TQ-IQv_(?U@VNg1PsYW~8㻺dz5 h5G&ݻR4@ݤh!pg r:zV"JIQݫg W~:swo-acjsxgi6q US׃XN _>65RQ?DQ.5O8sQ4Yӑ#n}E aQ(edc6X~ϾC,[5]$TW΀I_3>>qzL=EHL톛<Fol,WD޲d#=Q5<̂pQ  rW( qv!t^Utװh&}d~얟zɀZ1EekT|Khk=±\(x׎vBu>y)FngAն3[%8L]SmI5h/,!1)iB=%yFvZPc\|z0Ꚇ#SQeb]{ M2t#rd[9eJՌ H2ZsuQۏn@yIp RHۿvE7!Ϙ Rr?&n EW =0h];JRP(E|و}h yek)C{yt~0II-'j jzF`Wop2kD>$.QτT׆Fm@ΥPsJqh*>jh) es˹"-8_[h>7qF%pdft^='7scU7O!i adBfր-C(ho 9~wr3A4"`m "RD@&3 4 '?d  n4~֗7웒*Y +Pka! 7)  ^M,,3<t̠?tEV|Rc@Qv +\-0[K85\8Uf)l4`*^ZT$/[x,ǚ6| ?*KJ$u.Pl,P &F:Dl}bvIsf fh4 KO ZslGu{sOUt_DF{Ȝ%3ah?}NeVC/rB&c~;k'1~4$:LZ*4[떝p35LvIkHqEN**,tĚ|y*RRBH2GLEALEl+J*XWp $"cZXJV=⩚VX"&:ɑ^ȋMOU p8H2Q0C0}{_s!d^^4(  ܛGyC)F({ԀI! +% r4> @AcZ0"L 6SBŰ\ 5([86Q@z_sީ/X"][i*녬!i)ID|MHbyBC/zKa`n~q㢺2Jz UkzR'PA0ŗ\yOr CQvݹem|Jݕl*^e/<&7&9ji! E] &{}?^lvk"+&՘r4AkTU|О?3L>[_6KsWBϮAYNʓ 9 `1U'F8 xӔx/_:jNҲZRrC6| O3!-!j X,Dۺ /b#obC?1mWJCщ,rA-N*w$%9rP^mHIMh:"QbU?2栠%QUf'2ԱE{b["`WTOfeLzX̠h/~29xzCzײ\ýb4?SMBQs"oQ'٧"ug HE2U3D+^iͪEa4r9winjй" 8p'_@ Em`M_}ÓZhڑ൳ f''>\;n.Ok>uePe~P)&-?k X06g=K58*ER>GkQeCid!i kpd0DV>C8/̴D͚[bvh\z?qs~Rk]JGO,rΤ|NtN+3* ULUCz` k-W4*st,؞__Y5ºcqzf97e^󯈐ͱ^rk2ip$7C(Ɉ%/H )?.=z8li /ɏnl߯tJ{pc@Hj ,%@vgzTqS3o{zY_^*~=ȷG *~+.}iUtM7] j Du_}[6áhyﺗnP#.ގλ"󰮪r;L v՘*6c/ ~n6RNO;yWӹ:1-qy:#{vH%pܯ EAvO$2mZCYá8w/!!E*1yUl ިn\qZJvmAtauˀ8ʣ7rnYGlɐ6uC/$'tûDޜajzn@LwP PV8eU}v+9ʜCf} ~ם‡VRJ®<&܎ˏ~,};kד!f C}}C >)BPou4(ZWo'Ӊa8 Q:!\J2/-#ϽH [T)?y-2ZLm1;2=Ф%! ZbO(ve=s$!x2Ð9=m|&KJb$hŖ1xr b%"mL{23mkA$[3:S>0SP K,7`~؁{LzRyԕ_VnJW5a,ߚt{`&{kZc^.NYtu_i?IrsSolWc*U vXϢ)dޚ[hı6GSs8cbϢJ-/!mn՝0q4}> vkԫK+znQU QD#t|H'goҫidI:J`4&^`S8GZiD)WsG(gs0faG/LGᰌ *A(c5ȓ%(ː~/: ARw\*jYaϓ6w @D!rdղ*6*H# .a}6\ODgLhS*oCUJ(3 ]UYA#QMF6tG7 DDzQ>!y,~!as\HYF3AH`gl^ {=A_Q~읃V3_ _]U5UE.vd(̖)[; 8ݖ'uw| K._ssQc@@oR(Wd*k$q$5SV-, aɮ4ezorɋٜ̦;Cz[&W(拭z \s ׈?H)T0|Jka9^?nm}^ƙSEM[9\PoLcߔ&}KIIy 4uעy 1nWkb fZ U41R8?fyDLP{.!L1{b 6=)ך!UPDU;E3\RN%'7QDeR`P[%쯖I]K:XjW"Ai u~i5DEQC@/duuuW@߃\ݓZrRD$]&Il!EbQ^E.m9A$i@|MnCBϲh%X8/`TB/m5 Ӕ,%M髆 $6Ѣ7R݂h T&R2B 4?ƈViK̝Ad$:8si}k{ +/հ @Q !IMrkG(Cl_nM vF|>͉2Rͣ6U y5 mh}b; p2V#=HuD*{Ӑ*I9RSJR?18*w+*0䒷"#Pn$|Mz"4,pߑ<\V [/|JGPq_]Re\BQP<|yslljWw= ?NU 0`зºi TH:7= dMᥨ\5Q|YnwPmJ9Kwؽ Ŷe;>dݕ;z<}CVoC6TL|1}ƕo2)Yʂ[-/:[[yܚ WR n܂݁=}(2ٷoϯK'(*Ѥa]v؜Q%cQ6}jluWFoy˟/7mP}_˾ M [GaCkՖ>.ʭr:@޵m^[jTL1: $SK<g~qAZyxr*֭c,q~=e&8ϼ!P 3@^]tK*=7fiZ*E'O]3 3!@'vs#׶cPS6gfج,ohߔ 瑥>r!r)~v 8Y/mIboc8 OiɢdqI9Uޯj^ y;#2S^Gy3#[-tfƮ?TkʇsL_G==\ϖKSxaJ{2G@& ##^!9E HXN[byBVY &d 4DZɦ x FTE7 ))a;-ˍM ~&gLX.?O&M|QHeU>;זYU裀׮ -7`yU=kfrNKP6Tgz[V#tfN}Gg:.Wt&xE%;]T2c'#g-" N't%BiS#&= '#ɓ?^lvF75cф ٤ Gw<*N*mP4T{4Dk ]ehjsatdqaz'e/X*[HHfpr5.Ҿ,B]7rU-|C! H~$\IOCu0"/S (]pa#FC_pΏRZ2`4,(r 3@]?e$GD#i&w.#2c^O(HqZjJw-FRA@)$xՓHP%SN)/6A`AXmpPr5l\;|__ܲ 38hZ0-է8cF`? hsb%51l]ً~Bi++LԳ4=*b.$@lRGU a%YӞRIZk&'.]Rw j{ktX,3$&0 T5X7,}{IWW7ФBM 8JY-"wtF,}z&WP>"#Uej/NkfYuBrF\0\uzfjTdX dTE݄8ӀFxd1;i:s5Jc r>JnADbL%g:t -2k 9m|NLa5S)*cHR!k{JQ鐝H讑5+y | tL)*_]VDɎ:sr!:տN~G(S~rË,4#j^EM a(!f"o)CA&S6(4#fs|l<\-%fK&-5fֵ-n|l53#efP? 'P?xF a B1'ѫA36W{1էqAu߯鳚[m,G2TUY_Sd hX~gW\+7/ù:%z%?q:#E'>Z6VNtiѢ=#5e}߻^Tw`=T_Tu}p2nn׾}y>kt?Q~FpKŵ](a嵮_--؝;vz wǑ* ͦ޷?PQ餳  Vȝpݝ}< r4f 8ClswG@n¹UUC'i2NƶՋm9[5CRב17;YsߞW,)\ckxYCmj\{Ḵsǭ{?A1Iڴ~=^ݶAw)O@P. jtRUHq7Lhrحx80/ sOQ>y9|?O3CLPcjb^yumeN[SR8<^u+ W\'MMVGQVy~jOrP-˹ּɰ4Kؠ/c//u&(Q&Rjeuw/uY岔dSQn)x%5\zN{=11 9 *0>ٳAzl1 \^OI8rd*hi`Q]ȅ$\[.dDY*lW"]8m C$?_ܳaKD Kvp WR!x2쐾_%0qҾ+Գ}"yn|& %p ='m#@/j0jzT+dg2xҟӵ% qC%kA= Y3Wzn>zm"HQhs(?QL)G>uB)l $e) Pؤʷ11|wĤ SM_z46 I ήz_8s ,cڦ~ߌ[.mԔ'Pۻj0ܠ8,й7n*];3#ѫBk$7w TI#:n_rK trf(>`yJ[9v ٰҦKJ(]N^hU1y3=eFN@]'[dN* Sؠaǵ($hJaU9 עw[ .2:PR:wR>|e wz ˣ |=DZD݇XL t7"w tp ?S;C,Z% $Dghbkjpoc`6Z?G ʊ+ иZ2fhvtU Gcf h3g68"eNJ*lpV b~[.`tD Txp e%L|4+tGF ZXJP) E4Iʓ頎F2 PR@Ne!Kj.7N[VIZEN]֨.:^$WԊȄBXs*9+v/ '$YNA(']EW$pk@_{RC5O4 QCbW; !#7y escR7 j^H@'W);rY@L- j9t똣L(R,k.w|7 &kOKz)LϠ ~#yXW&+O $6 j]jSPF8(]]/Pw>X1/E܇X XYvq5`ݬ,Qtlhѳ>.5Z!}7i-5 {Yh;{D*T MQ8f}9@N ,yym=vDu9Kc.$[85&^[e&iwBVG7j|̅TyRg(1U=#]pwM7AI**>F 1N@iS3jp\]N\tˣ|Boï&Ӆ|}70zAg{֩ qt  G%YOw &QLCR"g^U\Lx[~OOHו@7gL}TStvz-tIFis!4p U#% ][$F=iL6eoxW:@r;ݠBQ\qw/{Y^ƌ ( NÓו`3(0ԊK+{0!OW₅rQݙ#Vf mUqM+WvE~(qFT-f93YVeDfM ?HйtԅGaųYc_az'^j0@> h^x|2= Pw^睒P?(@oǔ2N 7g0uG91<ͫA8,thW?~W5A؜ [P;. c}|R2 Pu 9<:pcܜk.q|G̓o ;; &a|pc9E7_ͯ\ Xy>*"exGC.[URw5{?1حOm]Qv{Sr!+C.GEU/?$Ccw/* s$%&y>*2* SU}AAf Fc;ypWnf;~ ?d@nX>A/R~0`snS.Mjǡso%vG.L_RcB5Ï=~Aw*A@>?r߿Whr׍"wL&KW!#Vpsr=˟k.vc̵l-X0lݚCM #T~̻އ] <|HДL8a(y ?L+aQ- W~@LB'@|;0@C)uӎoLFQvx{)G8#Wqae<%(~ +)NbqlǶr{o?H-3,x2wZ-ɱTy>Y6J5 &&Wv&TL}_XȪ}1#GQ!f&;OdXPzκŏ!l&{nӋ-½@X?nYFL0=JؙD-y&ūzqH  :7f?uH-(8toUGBZL e?7"s*c S=TZ%Il*_o7uڄP|U& I9՞,?pyoVp̗\eIO=7}W M6r?UTkTV_c w5L%!;Svm+@ /dh5ڢHcd:7Lj`v5` .@<ҌM5Whj\Hmu4e 'b67jOUM)nfꍍ1F8bXRWN`E )W@S<ʝkIO& hP.l,\BᮛjQ׎{VuRd<^2we҃2"osVteѲnl#d `  GY H u <,!ZuFFDf:N֩9gȈUlvCAjf5J&HBSa^Jڡ\鸃f`C(S .Yz zFJ>t=RZ\蔝G =U oX8vu9}> ʳ@cz9'N %RKǖsDefJk6/is( CMLVJC1;fvP$ë54Q J #QB؏^g0m72Lס .bcK \8G^ e:)dKh:GE RKL@h-)xj>9eeFI!1qIMM:0 3g. Y1}GFTXv|Xmǧb5LɈt+aLp's%9;R!<^>Y;G5.c,Rc} Ly\ߴN]"1THQrePbPM|Q/o162Sg{܌8! EY7(rѵh1Q)'yUM)RG-k)q*;F2w5{eϣW=+#&Kpޑꝶq́x{ 42iE4jD,u&>RrdFGC,VCx RhZho_H|AK(Y9YLƪ:P+@ZGL
    QCkOLA J6njR|?oY9.õ5.HqYר|j5:/EGRnA؛fʂ8_&D  f:,C1ԼxPcA(goU%v@+%CEʃ3fM#1a ӈ5Pbu-&UŒbcXӶ d锔):{ (|_rDIί]+Nӑ |a%w#׭s̵~le0xK=@.4~Jm1*P#ҴҥU0e^a`VݎDrWQ[Xo6Okd>, ^!Z&jY*iڲI7jzz@s,¨!LbbٳHTi*B nvE@ː>0p+)A:ܢ.2Y.gLpt9&2캟v5MU2Ц6ג fg*=d9dXNK&qtn*h d1d|͐LAfJќA-\3/pq Kk죩S5F`}HrxכC|.!KfpU?J/*ϰGugJJ_W#$y9KrgR8Ye|ϧdo.{==yh/ %&@w$:PD/B&r 5=xb^RoZ% P!/ JEElrozгsz9 ~HQXNj>:h㓕EƭҶ6'5]=^ W7yy~Dž7Jgdj9vO<:eA;ߵ 7{^$:\9޷qo/pY;b`*e=lvo2d F+_ |AV3=8|]C([o_;v}g<3]^j2ɩy{/UWQ_vù}az_xqԇVŵ}{T_|SSss|>]7î{U4ýC#*\ƍ0GnWũ}>8}U(,T qҿ'ɶȅU7O=}`<p }(7 ̳?*s m3ݱ\}P U;MS{pe;Y/ms{f#mH\s$.-Bi ̿p q8`m) udƳmZMa7un}}BRCfNnw?Nne6pw} Q>sDO56qSq9 aۍW=49gȨr"~wzUtNl# dE#2ˆgG#'۪/Fjww2]n}~ͭ)oOwܟudRHN^*rJKy\1.p[` rS}m;o￸k{ r;Hdh)RI zB~2@u|,Q jRq"jto(";6Vra!Sb<Z\*nKN ѿp-BƝAmK| VkrZFPd5<6dyDڥ?1|cVU9-5|xYÞKS~OEY}!*X(4S:@"sC&I&&XjOi @ Clj&6G{ѣ@H{Nљ5D$̒Tyk㘎$cADIeÛ<:95Y6!zUk.(r>Gĕ,#ӏ1tT;wS#Ȝs;BUː@[*`k(^ .0CY՜˿mM2:й IL#`ʽ*#3Hmy꟪l'؟` HZkRS+BtiU:7( *$=Wh//;4@-gT]| ZZopW /ieAA55M]7bZ /mSJ6BSl&W@Z!s ;?=geg7}+4aTDÝ.ְY2ϋA#+RSjS c64ޢcZ1]YYp$ *E&fz`rQߏ##SpdM(ňUg0(g+O-Uly52Gc\prm0,Szz,ZE'_tubg{<X7FcS#,ON1j"ɳ!*Rx U K2d=_:| 9 A@J;e0aRւvI6$%#.t!Isub]y* 0:dtI|giJ 5lˏIo١C,p&< 4 TY 굿={2 %X6,mԏ8{VǤ"FF@bFUmOaˋY/WJp}B~X2 hX`&D;,ejx!jl76:~;m,R*R0EyRf~*af#grǘS|zs]|,čIJAӀOG%Գb¤OiFt12$g5L7S;cT@џQm,ٕl:ؚ) }| g)xu?6RM )P&NW@z {R xZ~0 5v3hٓ~$ccĔ9$o@  =,pJI\'q̔ϼj3uQS#[ Z9Q !c+C!a*4lӶ'ⱪm~,EAK9]٧5]ÒFNxA}6z[f+ױ+ae2Fc^89ꢬa_ï}˲8otZ_YS )wŠ:L#ibyS,"Lա%犎J#P#I.i!A#=8b sXBQKf%aBPN]a]pnSdyLia:bAT:{ M<#2Ɓ>FُF)0FOAB4e"~TO:B=ܫZ_>UV< z f(v7 5A艟P%*>rRT:[m8'.o2Bt: ED, r[{`g`Mol+!|}QRW i'$C)ox= w)/w$Ͱ˝2PEunOwZi=CHh_LA_u8f ?n|β*G43(A-dGڜ / ǥnI}̈5joӏMYax.^.Co++?Xl{Ϳhz(AGP@C@l{yT YJ."@ [a:\Kug#)2ure )cs|TOJ~yAY;MO=\']~i]=&!ꗗ?uGߨ1>Az~~ta1,(E6!\ {#&w}ܫV WsʯZ Y k]w+]|asʺx8kW\8woPPpy.:v0p!_?Vek/}7P:+Q)Ҳ^\'yVLǒ[ ,O f>;J~iVwy"$`U6޺ߛ \.Lq>+3AOiM*ў~>B;KteӵM+SX¨ќGU^+,ٽ[?ܣKs|SU{iynJx_IL4GV%JYINͥuKҡvO g{U^)sHI](ްD[d}A?0vȔO?4wEQKr^z_U$9<`I=ݩycx/`#t膗ye2OmƫϪ?_C &yU;\F'e;ex#=rݧ:50҅-xl;nb،PXyW2MH5NU]Iy*sUOgHAhG=CPW1)=I%ZgfGZ7<dre盟8k+/+7ƿ{ǰZUm}~DP&蛙p yR ņ_p^m葦yivcC9R?7Ϝ?`\׌o֮e [lܕV9 @(-wJ0v[nF!xdygUJu9Ƥud%R罷̈́K)Wuȫwx%:x+ h@5eeFp_`ژ0+s2Rǐ]Zť^ 7vl>!AJc8^G.^E~ Cgx:|xݳ3tP5 v/jqbj[}uXqTuP|"[(LtjC R^5 s:-lD;3~ Wߝ&ĜDl0r UQϜOAdC?a^O/2*Ւ[sw7,-Jesub>|S7y;<#z\C\ѣ>&3a^g8yxHFP3rbbM(C+SפMvV\՞ Ct髱%G*?Y£.xWe&]*xp@󧭉.&bQ.h'!O. ^sYKwR7R|Nl52e:0'Y9bvՋ$Q6S]N)kq![N"gz8:e l{ؑtDV K^`tpI^ᤦ +mP|T3: /l.c7 !J!JrhsDTE))CJz|BoT\[+_P`nDeZ$vQE*0p d: vUQhTg T3a~\??=/Fz0*w D.9It#Sŵ.sa~D8xfOЂM `>/aU]`ocܥXx%JYf=cC|>W?stm(Y \mq^k?r5j'Lr B7"0F؜^kg *8J'5IS]TvBhvc#x@Tģ2exzffP†!fUMrZ 8Q@oͧ|uԟ_SLӡk2A\5ҳC)sm;K]i;S6'sţ ֣쫪Zw(]dc]gԼˇ}|SEn[PK< 6llG>B;6F`K1KY92Nيm™`7;bL,v 8. yxo>yF.ih|M⅍%b]E4F>%j6?O@26iq+AoJuR$sHEp|In'ySue|#HJf1/ӯz䳙-`>"IV`Wх)%kE Jt~SRSo> œҴԶO.~"Fx骗Οp8ׅQW/h0L[qXLkBΪOVY.W;lO a5\Z}3=dĎ hZbR,+Vq)I ,26#Kۂ_ofڡs鼕3Ĵhm$[&ãxVΨO@395(d}1Z1qS:vyg}]@Gb&n<<NY8*I'C^8z][h5JBO+NOlJ4J,]H-gÓt/Z_2"cgqAA7XFM `Z^7?g~;0UmvmH#֐|vh/"+NYOmds  Hs6'L+}?l6FCeolS͘5ﱉ/ 6A>yUIen7 ؜ L*?<~Ǫ*(ýſO:tdc2lr ʫb }oߤZ/` #nHt?^:Da ҍ=Equ׽s|iGJhw2{sS\<7ovwk (_ݸ x"ؽs/ڮͻ^U3t!gg?}l/_guo2}yu鞆sB9^摼ͩ}ВZ~yu.;zE7UQ RpbmhNuxE ;SUʤx9}nt/yY=PТvWܔ<ڇoT]Wi}Y|ΑgpjK,wH a{s_Z:6S?n]t#< ;s cZ驴"H=-ϛ3dFɸM@mhaw?ܨR;9yoe|- y;e5&?}pylz@,Gy~'mn/;~euNZG6˟i:jh-QQ5sܖī`1^5duJn\a{9]z-&8 X7<;X{cG;PKevsieI[CwWx,-hKN{pj;Y.`$#׌ Ќ]FO56W-rzWar=OaW;) jc @8Fxwp?AQCLL=U~>\˛m_^R7:o.Z:x`~/G/b|8 =kDZu1BQl*r,Zdkw4ݫk}EYQ"x?17FpxYj%|Ur7zuvhh@0|27 'L_;s1;>dDХ4JjMFC"|dOORϾS4rgMX_vէZ#:wj٘R$Ǩ 2vO}PiTV&UsTMղ(r4{6'7DSɵUwa9hsgp6v .S8'8Ϻ4HIu+C]lET{UΚOcEvmQh/NBq|=;$uZ%BLkIb(I 77Hhk31T4!:ޝY .SN )VȤn 7P,a*K袐CD[C,Ƣ߂AJ'G=J^ny3UѢ|nh'>9G\;P-`5Oj47:(gk9{/}Q5|:FuA6!5tx^T55nC)%vyDK,:{l&26>WE%5Fj;Cs^g bmhDfCJ@ s=fɟ7m|ܸxL2DHnB-l01B7_33=[׶r^ JeS6 alȟXy*UбԚebE;sӜ"ջ>":65Ċu*t'D>VLl)tE%G?@?ԞtOFSɀMY؛@.V4˲5;i@y;zG r  Gı6Gh1m;[SM|,!6w< !&ˣ0UijUVa, 馔A#jXz%%hUE 0tM-TaN;*#~Ks!JIzVw?5;':S@JgD?̻ 8'XH9bِ{颊BXE-$XJVVr`r:Iyzj'_;C =Zp%'8J*N?ؘLgu'9ۜPre1ap(l-̀l1jc)(߱H9S7UY7d^5$dSV]j;*gaaEnO'CLr~13Kw\':St pU#3N@ vidmvt"wɂP 4eqSLS8ṔU>KXPx #V CkӖ͢2?vt<Ԅ8b~rD*G@験g!LD4 %w! 6rf*#osA̦Ȣ.ۑL&N^M>ΤuMW{)^w `?fS \(Ec|FLR㔢ds Kڨ1śzәf"Kg`>L >:>1,S4TSiV#'&ء) y6V@9c{ uWcL6'19e>_&R2-cʚyRw@tߩ(hsy@O;: l_"SA+QRB #|~>pv%Gȫv:^Q抎؂aN>o`܍t|==V@J{Ls5O'v#!(LG|S/_=͗sLoG[ÿ#6{%nūy1>kHG=R=?0 z`{FݔCjaN>Qu8Щ{dB^,v=}߻͓CkQU.,v62yoy9?>0È1/* ۜq}b^ =}vCvJ+1{[xpY'))8nw[vZUPv{8#u]7Ϟm"rGY4DoK萐2q=l-w2Tkʵ&̻NנKMh v|1~,uTz$jݳͮcMMɳZRp*'y<7@G6GoKqUKR~eUJEv%2t_֟dҞNzbt Mmƭ"!Uӿ.!;s6w>b₼Ѣ wf'f47ancn܏tBslhu?qx͸+Pgq߃x=QunsoZŶy~NjKc˛?.dk #4_čktC'k!@ ϟ?c#.ó iMJ /-@\uԬ:c3`(sfr_Xt"[򦠤+{>d^7!:R P܇|}{ S-<]ߏ#إٵmx~y4S=SwG \ k"rB r5e"1[vf[i\c~@Ruw!ㆮS{ǫF{nL*=rO,Ȝ- >fzԓmd,J?btV)/jt'R?"\zM$ LbP[Dy)1Kg}V`.+ xzRtu#aC6;ln Ri\Yue1ꉏYPxv#gQLgf5v\rr=βZ$0r|?s;w;ni v]5(}h06W9 mA٨j6פP*7TaU$ KRz6g0wi(j`:alROen@xX~"5'˹0z(xڰkw.dyoz1@Ly"|8*l]҆^ sIQ̔HHa Lؗ=%{ՙXޔ!zǸ[aOuzkt*[UIpW}ޯ= jcgwMtR٠NCxIM83C|Ĺ=M2"œZ 2Ė$tl(Gg&>PUgJR`IG2++O~{9{z Al+- J_ufs4\Gn95S^;+'bÔ"FaF 0љ2DG%i%L;6µ[|X9|}p7~@X`u"XoUyMr]'7#ۋFuy.^1qW1sP7;kRӍ 0gj|w.zr5 1EH":HԷmd-G5~f%eB8}9r#F{JRҺlP T.`jSyBVgt"[ x`ҦMaĨO.Sz>E/H<|_څlE 6&N7T)s0PUرb-e3g ,jP3dҗЏ1@iYX$-acS.DSyjVGϞS0ɏ?ȧ*L~΅ PyD)]-k21LXT!O1YHeUrtY_pt- -鸤VK۹~'Ѱ;1A}22MOAUATyX|Fy,[X3 =3|s(`A&-rRN^!2yy"_`j>v# \V6()a#h݇/l艀ݕAKe0*j1E ׌niHeShƔx41Rʜ/8qɒ NF ֹ9U^6_~hW y`c_|SN+]vGeϳg^32BageYԕE-UHq]u~:_`*{ 8 sne93 򞌳t?֫VurWeLZDQFf|XbYD|{mm[kSؔ2nf2[8&+H7NY'tShҌR׈[>2V7߭S<($WDYt%#dl9Ug9ѩ\t\JQѮ. lDрRtM*8ʬ <hb7| {(8H8%k쉦EOzP> q1HvѝC$7ғ&`ԚYeHPc79Ij;v@{^K1MU\ϣX9XkDhf)]"ppԑڱdB"vLܠ1ɬ_3hfCn)$7qfXϢ%_dqȷ.u0=K.,lfYO<4r h~ƫ톢JDi jIF?nS k!(eS/!&}a KMǃ,rfȠZkNJv9?[ˤ2+L岉^QZZ-&yKTz#OR^%A>L׽bhV2Po,a_˃n[Ddy@xL^y4{=nolc$#WZq9XpZ1$j_@^oʏͣT.r|s)SKF{ʱO*x'^wYRל 5r=wB̳1o^޼]f{~n+&N#(-ԾlG} Խ^y (O~]:;zL;O?phYᅦkۃwrޛ#{_ڶ{.æ@}y".>WYB}ac5pdxt+ٹݭRWg>*ܽ0P CYZ8_O,aˆ*  ` }KVѳgm{!uF{o^Ԭ_0쇷vAyiv4O`V]g?adL S]8te^\GtLFL,}F\r)U_ N]!+ C=+I6"]{?`O<ե{VM2e x*A MU᏷KgqlhӔV^r9l|wCl(3ZQזu,odG}^~/?zMQkUsѥJ7:c7\Ac(V x՞;uU=/k~{޻= Z-.Hú:JF).[cFɭ,~|}7j ce[/l-{8Y.6}T}MDU'3H@y5>k%klk Ox?hMNXFl PEx*6ɉZ̖wUlHF!!v j[M#UPzK&Չb UqUWf*ZPnYMl we̕fBLpñ|>JS~„?SJ{n@*™=|OtP/es1akټ0e >h׸GxN),ZF(|v.|hCNnJᢋKGo4.dR{:dI! D67h.aV%9T3l U2Q%GG)[GPK44#afi".~^ǃZ͠-*`ڇƑg`;Fe R-^sYn4赀c*B>>j:FF&`s>e5,[gsL,lpպtOyCjG j 1 yaВa15CⰃ4DSQ ЇaҞ!܎>K:vQD[Jj.M7/>}^`k|VZ!h3I$D(fGSd'q.%4d`g}jUaDMw;1&QjU#1@ 5 }PcN8@˛U5õkU-h7;拇e 2T=RV9THHOt5تvdɮ)ǖ ^8&}65;@v:%e0 Y>}* [C=*?eLH-T.eY3dW krED0u:h:XUx2Sۊmh^&!MjMsd ̆Ga 2+0I\}&%v!-s%Z' Ͳo)~K +#EM7 )u=)gxj _uA$\.)EQQaF`Kݑ4To`Ƞ1 L29!b=Į|;sFQI5~5O-:0'"tSzR6Zl~ 5Sc|b}YGJs *ce(,Y""u}ɾ11ߺe֬Ǔ\ڊ sgaqŭ JYg*~Oy)!Iel4bPkm&=)v:Ʒ u?3F*IĒH2v)+#*DfE"3y:/:&2u ?LQѺB깖xHGɫy_#g2\&$іdVKd1*uG9/Y>,{%Vq3>jqrBadfA'4I2hK`YDs?Du*誨h.Nԉ 1=r#C͍h+Fk0vA5&}$賮(Qadf/ n̗GA~ 30ʏ0~HEaP4PzKvdgQF67[/ .Ɵ-nºA}j Y :Ay _nA 'J!Ƨ,=XB/J٧MA}oCm*(3rC0*ojOr%yh hVɈch4Wb3, qc@CiM*Θ jmY?go]W"UYJaBRtc!iǧ6W/;q]3nsBuU38`u^CYjs InPQQ]3m2H'ʩp޸Y5֫A) R%*T$M2Hfjxg|$Q@8! j3F6dYJ.MQQmt*$0+ޠEʧ ˍ&݅ Vr0Dm2K7)X0hDB}X~ \d7WҼ) -x4QR9YɎbJ$0IgM7j[(Ao-|>P4(`R!i6D㭔A`>iTYH8 #f|@@v7ehO٢uKZN5?q._%7/YƓE_rzZiLd 9='/؏I<86O&}VIxIuNǤu/ÔyTcx<${o^4Ȟ*|`шx,fWz_G㽶mI^~^&&<@izejz/VH@N_86JU {C;=Xdx ly8d OC=l)Ðt@{Qcft9o1&D)C8}C;GX4coxծ%}^Jb;c<Հ1PG%*߽Gt>k;jY?l~wa'e&l@uʷŨBq-Xns~ 4Osesro# C's)gZ ex}jx_dʼUneCߡNzokC̒od[Y٫k|[ xqEwKH<0ՏKQTeY#`̔5+ݸ8bO=bƪ}%UN=}a\ X߰e~f mV ɔxD]F[PKtF=dFnۍs3%޿*ky=h <#~'E^3QJ?+wk ܝ 捶<2uQۧx+7\n#A.}3ѷRk*&8u#^vOQɤGIK]69ׂ؎MQ fܫ^$2.L р22X|SUTepb񅰀_jK*# <9#d6pS`H2I r?K| A-ujI!4ѳO ϩc3{<,:uv:^?VҔ$+ժY*Egl擗} w]v&'tBF5a"S[عґꙨz3oػ5 ^NUMO#ZQс]I] *8ᵄq6:xQ/E~l]^!vW.6o/@$`N|j5yL=XZӏl&p13Sl^xRy#4!7ܮ=LAQ"Z9STq H՞.E Ӕ7{&P)dK ;8W{h<&Y0$zwlR Ϧ&Bҏ;`?װ1H* ME(EG0EiBJjK'U +3->W?Bʮyu% H{8?S2EXI ÓՕs"Sj0dM uHRc"bj RNX,Yկ}_o͵oKhz,MX o)7vRBoTlsAjzUk{'@Pӧ{㑱 뚷ė)y^Zsl(m -uRZRGr/{ V5 ?],}2檚A h:eQ&Z^3LF+01} h _M57 kN}PŶ eH|SW뛲^ee?/S-uzu蚡0"fZD PԬ2%ş<%yߴK-2;>ymj}tPgpKgo)>!ȐmrAv] ɻLШ.B$(WDRXɧ.]`'Hn`%UGG,+0rpsc/;NQ!TT>kDp f7hDXU V䛏j#I5?d.tIKR,|[ag(D?~D7-`S-kힲ>?m8!A50:d 0)ԄJ1VT6!|j:.=i#dJ4DRZ^BpPiYMV!!hMLΦB}9s[O2ľ;9vqWzvY,]HF`I "19"썡6 X,m+,7|VL~h5@onؖB!jaGأ(zg1)PwNzEb p:r>JQ%P"N`evx5m;6-$Bkփ_L:h1?_h Fo .j 0nhC@v-֫Z-1%}eQԛUJ0xx(ö۟۫'q3gه@HģM.Zb<߲ tm52#6X:S"6:hZ4CpS?}_-[e%tί @P_2NgYA&g5u}{u=xFyuؽ=Q#d/)  Dges.L}Smέȁ7|g$%qJ?Q,0Bu`H(\ZF[L\$182<`/Tk>}) 8`Y:j6gQuӀ"iR _#۫i KM/?̪AE8\ԛ'ӏch2 enk 3@s5nVu];3@?UL[f=3wd:玹2Qf#\ IZؓ-V-cڙ&[O簵hH$i3䲞B}*ض=33>S0t}m -wũK2Ƞl> qSMŕ3:b>AB 8T^.-[eƑ) kJ,mNADs[k F`kg }Vhe;u˯Y>NEhߒC$NQ`*Hg7YLUz ɣ83>tH!CEt񉵌-rQƜe5E'&2t5yPmbv3TsR('L {3+2w9,5DfgʢQWJX}sr AC.v tHUQngĚe 3e> (VZx}9}џУ^.v#>?on$NQVfPӍ_i^_}ȟyGlY]wVNk;ȿ2!opc{̻\'˿wNfsy?(L/ÿV$C{0 3y,.2b˃NxaWĥ>p8r<{;~ z5:z=?U^v{ůˈiv{;1@^QWRrs\ 4@.:u=<<#]qm:?V`#W'P__SwOjܱsȋi+c+㈴(b(ihck0,=CDr 6W̆\Sqx:m(*!yxqq/G"U ˸5Xa|F)_3 38N;r[dG9T{Mi@3uNmF fqy,寋GaL~P1soWS8±7o)?˴!uT#x8iv|b̓s>C WYj \7CiYRR& yw:g(i׿;Mrʲcm+ٺoyƏ/_?/WK)&e覼#dA; !YnxHEgÒ Qc [UF7J7*TzemWr(F֖SkI~gOQ\;!T{_Jp^ir(@uW_(<ɹïJXz#u n[~GB]nL{qCN(܍|ţܟnU|eFpLw}2˳кH.;b@ؿcJSXidzi9 Sr>i yLa!>=/(iە53;`/ՓϼkFC7!Vt\xz꼗 O3 yw6Ug@fB#k#hKCŎDG-_7`c4^Mgs^<`SzV?FkAG#i(KG+|P,n y ?Y"6q2 to_Q݋V}ϒO83k6f(2=b:YTds5b7}Ŵ3+9ݘ+!F% Vh1FεTV\;k@ rT5$I3 ,ICk0>ʤf\ UpEm 1jH??w4g&O{)6'2˱*WHЏAtx1{FdI=pEZRۘRTS- 12 ^!BՎ>IدزvnqKPrV4A9{Uگ1u%NcN "v01Qv.RUFN^Ub0_%L4!h͌]+yB쓛ڲN ^`h%N˰#<ȴAL kur0B/a0(e=m]R6$5:$0 W2tAB?SDa*pVi=2ntW_׈K= }&@D\(Ԛ7b~u"3+ȚSni>p9(#n>L ?B^9`a_糟DZT :;ԢfPNs#9򎑳=UtbH{BƲHj & dwھ2L22 8  !@T#^ MYCgFvROn2"d'j-O qtd6wTW\i(SkL `0Wψ)u(r\P}:! Ƞ ŶB㝒8Z3E'LQ7ϴ=FTĤivtU5mcø9LE$3&ڕWiʨ 71& CVzr ,t3"q(9_ %F "m6Ɇ3@FJp`0kNIK8B#n!Z6&~Ti@2p}N7(ŰahTo" !\^-orυ/U*t׹hf'f ;}?5̲}@ aTQ 9klR.zQ䄦]n"^ mk}.H}^m.3Y"%ZkA}L&jw \ %)>f)Y蜷iLl}X`qf?&EӅy}2O`zԟhLIqxv$RwEV_3"4e s77*NZ~@^_Qh u{bxӔsx+}0ʅ=be#A`;C(RRiW74#)v]Mҡ.vOLEAj/YwԢnG-ȶyǍS E=cG_@o!<!(zr9oZۈQ_\2MƓIv6M:8 /NUr[f=Q/UQ_ZEG]ĢӜbU^6]U?@oOze!|`Te]ܮtnɝeAR65⹳x .vSNEΏE/^p:8n9]V~x΅^]u4-+O/ZO_i Jp A!Y||"?Ubn |rW2蝹'9 `2 [@ Hbe@;].SwǗ{w>f)O[8_8D~n~2ʳK/3N#ťNaVQG'ޭpDÕVqɔN-HyxP=bdظwłtĨoTP#_OtdμuN-;wrLQT ~ ➑1|4a RE4!ͶP_w3lEy|S]Cti%[[d~K4Diҳ0wv9uq⧦utGS\s rh;V15,\!t/lq~jj-頩jSfF-'霖p[S&Bqz^}`L/g .46)tjyGOew\aKTFmiYjF?~V)q{.]S4+b7a&6Wo6konwHms>'y[v@?}qc2gѫhtËk ԫZ%IZ-^;dPw̾Ct54O3,rdG]@h61|5h*# sR dHF"ZLP4@fXƈWjY@0!] #awt09٤ z+; fpGv2e!6;Wl JYsSܳ\NJ,F@̾m/~(.A?TcbC[/S4y7g[ h V{ 7jB]K 4fj0&!"L=d- djjU reu}IS' صH/vM˦Z1~'(cAL陊6jYm :TvY_[lUِFtuդA\R[N }I6t0ea< ԁ41,UgOﯟ??9oW0Op)R Dc4TO^ ?1DŽcV%:IhSdX43Ѷ!1cѧ> r'H&MlF9K_U, e N^ԶBrȮjsu. E@0rç:"?qn6rƦW)ڊ2TJ7]4եUyW ]ux-ψs,ًdzJmjjdMq^`sY (klA&ݸn'~mMƈj=M3WhWC,ߩ?] ōR~ĕ;Πojn&0eŒOjR5}d,z77xl7=EbGXM8߰86:IͅN .05O"e !$%"e~a1KʚМݠN]Rʮ3g^E.KrvZ?>' q - UMޫS9K@߮`wZFڭ^)F0*VMspG+SVDžMI$!"\MR|aں}3GYkOp2j ~>&n>DްIYWfB<qz9d>DhC*g_ KM3,T킎g2I˃\l>U_}gMM_ğ.19W!W3Aײ^y%%lLܦ!\7ǟcFYkW R,j&GJQ2SkH2gٙ0,pl֨Kt UjMJldF dP.4 ?F% &SӒLHϐ"cc&ܰ&{6-KQvJń:wԍ|R7 <ʥҪa` (~?(o>i}\9)װ,UN*RtZCkVi. Y2dnXt)mcʋ|_2c %o6@{c={7z#=x '}tHz=#\DuEu$fW_qWzZأ͠ ֎/GռyqsE·VF ?lηC;8==8No|k!?~'}>oj =?>$QAWR6O\Pei;l[`nP;}y5W|O%9ݦi Lǧ8=58.P˓n>.: ((/qB6C r^UA`T[9a@se ^J.{FB:ƾ2.dAj?<9J{apNӋZGY}y:?vo5NXvm(O)vGCQ°]k#Ak22P~HM.~~_ɗ]Up]%y I.pq]mXЬ۝K7u˵TZḎ=4]M'WjFfzdSS54.,|^eQu2춢{iH,wUUS_`'.Awp-=bi|\~7L=ۺZ>v?~]A2Hb!Ԗp{~$"n~;n~edTgrǺZPf z7E1@9UB0Fqz(x T=r5-rh?k7w%O\fH.ڲ׼; v?sTw[4KGdߺ2cZJ^;BN; W~H_ÑC|=ߊ\ҋT|> v ֔o tKYԇ ^FnswaN!g潾 >!F2dJ[;|<=xCo/6vk٢ų@opYd T1؝\R- g?ԫTVN r5LG$3bFF9$@t>մko*/7<de;zV&?Й~jП {՞1G W1^m kVv DJسã <3OA=%d7`41B?Y=vP;q,KUOL¨M.Pa3`€O)6痪>JW 'uG*7c\CY?Eˮ WAJpYvM4gIr?6M~zV6kshЈQLM4mɤTnKu"P,)d/}[4+|4;d =MV1lJI;6H,L%z}Hi~fF.x}d ,l~]*D[$X(24;'mʓH֤dD^%jiEnv@5BL"(jb1`o%)By$@Vв8UkR&ɏ(@6 >m{|НOƵkذSf^j.T2g֔ @BJ4E r$c.&{ʹ6U):McBSDՔ-dLaEpNYޮpl'Ǵt#. V׋lj'6WBCj.Rt~+BxQ "x/>> 9dA/>"'fA9%ⶋtmo`ο/ˢgʶ)StI'ߪ­"-bY{@57pUI?}E|/7yHߐ, B(>e7. P1j>oƭ\ݤPiZS~2OԗIHaGg5n~+{4*L键<;HFKR5;gO*OCwh-5^ #M&EqS1S<9w|戍 t4;%êFFj$%MP$q$K) fΫNe0HQAIyl\|YH\~R H L9NAT~1t vRy '\PBYy%:X< y dAk'ϯ拺YiAYg07t:9lM9jʵ.nng̽g 1\Y}eh$B-s1T2G܀vQ'Nj{b$_q倓O{ypHzѾ+.vF]3֟Tg*N<Fw H}Rvk4@Mυrpy}ڞWg8?)Fn>{̷Euv?HͲ^q{I0LL8|Yzޥg8l$w٠7 ûyp/oڅL+;eμi. <Ye}z9*W?Uĩ{:Vj'3_۹(N_Wk)5#dmi[HGRksNtmZKz'E*<,MC;uoZ-˻PLvNJ٨`4'.?@,)ȑgR޹ {%Vj hUۻ]0Ʌ=SE^ۺ[%Y-/tn0@DQm.+B9a:gn-VB8;oLU%m ĉ texT^r!ڹOnE]զKzF R zNq`?Ya?1@\A =`n(R]I6[qOW~Ua7Һ'+RgMߕrP0=$r`;Rq.ӣ?B9+] qބ(PWNA6%{ؔ{6Y`fwJwc=9tvkUW=&aN e5~_-e qGbZY)IKLpRxP6'*-u9Zґgav(޴ʤ}EdezU67[_ hˠ>TsDpVOXo]7sIU۲خڼŭ,^{jS0\mK3%^E9KunX{%d_Y |5uDZVU}4d2)GJhp꼂9J0Rt7-5V47_I4 SnZ(<@ Ǧ'U97xy.7鄕lVȠ\:9|<MjJ9n {utCU^i1ˡ_nT4;h7*at+ZD J)nM`ٳ V|/`U _,я^X`vxN5z#'(y0Ϣ)KLx5C4+*8{#P6SqPW0'06.S?&6;#J=o ,,2}2 œDd?eэ5.$SX[[<0QLyτz8gs YAe PÆtR5$7!E]RWA C_[gp'2 _^,)q'Z5m&ctm5x 6Ji3vf*չ&hc,$ wip}`sͮ*|ٞ>,tAdk08˔De5e7&=(Y-9cT*@oYX,)4 ˝a`g[q#g}v)8cRnu+z\Eƃb|55:䕼jZQdYNq iKfpГEh?, BG񛘝s7¥<4H-zvJV0ϥSOtOTë|,>M[gjnꓠ*AJ&vA}B1(ͭ r~θ/P /_hr@M^M狄E26bZPmkQehbaXd5j&RS5ˤ7h|_mIRl+C]u>Y'@tɉ^I&2KM>E֞OtO8ŅYzT\l?FU\i-$T5F^i\dsuIZfz'zv0FbX?-PC 4}U]ܓ0Icmj,h%4>$xOs-ϰ .􎫙OB}X5ƧM{EAuEv4;^f OM9*5Ĺ Q`B$6(4ڤdXHZwLvǙ' 1=1 MsL^ju 7 UU2ӘiZqne/!F֔V7ab": ˆGUռyU]5u1H9IdykqUX r?׭ a'g;BE۶1Rru񄪺k Rx"H(ReӲRԃx _.~!N$]}׶չ />%/>u('VRTIMP!1 ݷԿB*3f&kd V:wŴ .&)z|@eȮp{ZiB[ԋZ(fCZzV\NeIP7w`AO Z]sÒ$,G ӨtTГ!*jxxجx`aLi1̨ "tFOUZ[@dIAXlR}Bg@p&#f%TneuZ(7rkW{a),RSCY*_wu oƅ<[NjoM J DD%?"& fEF'CJS|ʉLN/1_向eZsY5b%d|Y7"RSxT\-,@D_&syQoo ?o&¿O"0ſת>i~$:A%%hjV*iϞ5>VJ31 <~~@Y z||;s…]uKݽx|~cq̯'>Ngr@7RCݣqCzr{4,:_0<2m{S}/qqyGI|i>??eG%~WFǧ=f{yz?s-.dH J?Ώ5adrxzuOMm !ԟʞ'9i H=h[-; 95̹p5G'wVryy |e : 䉩{HWPqG70gѽfW:=` ~^^`^W0olZrb( y/)uxQ ~kdndux)M?˦j"nVߢ1 dg(y(L®Ww{g)H-T* P68mto۲{GnǢM2$.__;pa(e|e`Ok6wZH~5B)ϔ=3OVy&@ãHbπvhl7Te+?Q,2nQk9\9 HͲuWkׅ>dRYD`UmZ sj_;}|c|9~oxC/fu-\2`xDɨo,xO}Yl*SUsv<SpAme~Vd%ɳ 3ˍy<&Ǖ2ZG_ĩSNһԃBe|Mܙ~M:#+޽}#m/,G~yTMWnM~7{\kfzh)}}Q<ɂ!C&zT%pgwV, ^7y۫xe5 mB0c2gBr^ l̷!^ؓChuPeJFN*т)\@^Ea9< ǬGJHvbLQV)|fSlorH=z@<lV1z)ʰ3~&^&,YU ^$,,O['ʫ ($[$IJ)KZ-xIVUJu =;=.ˤ8ԛ:1+ \z~1Ȯ=a (7RQK!R_Iqy"Ȏt$7F? Q N!JՆ@ gHc 9] "Nq$T?U,Yg3A]U)@c rۋ b,kyn3#B|.Xҥ "d*!Ooi/ c{f %hiUц[R?)0CUA2LH0m ABS-9E7.afR))=EP#ͩpdv54QJCi^ ,׫xauod`&_> A課 JE!ڮZ;!ǀ J ;iݼ9`Uޫ})J ٶ1Du쇬y˥Q+`P{pň^{̧R;S}G=ԅtRkUB=0hv%e>/'9=]nqgF$8W_V?5ݟvՉFҪJy/4uFO산_B6l _ݕc- TWPno֫vБW jOhoEE>h7r|Yߵ(7˯_dyx~|?z2lfW*SB80J" UI~xcR6Ӳ+nE(U-TjsЬ(*7Kp lz+)&JW7uWXeWWijM B%k7ٶK: j9Zs1 FN}Ӻů7 {+ W`[_Mɦ|1*69xu/Nb5eV}j)uxuBN9#Pdy9}W-zS*dF\R"%ԫ?8Q yHCr49|InIM9yŕj(y<8-)`#Obߪ^ԯ$%nI5EgR"|) 7,'3ɲ:ZX +r!eZTDlsѬ4Ls2q!@R lZ)@sT*3J\]|&זY&e"s;1\sȮϑ)^4谸XsSk)+|6,\*V:n|qoë\3y&D({uYL~~M8#jp |EZ=HGn ʃBƧE]a;Výc`v@š{ljԊ[n-e5nof}= /|zt۟х+Xd~01m]8h_~5#X{u;}!_u@~<#^nG0/)Z "A]I)G '2'^ B,>AGxre t/N/%7eI1*g~_'$e%o?O/LQplHas-=9 nB`UV9g ;Lt"韯j1'հ'|zf]h+Hݴd?wSRJ bp'3hm ǂ-VnT/o;ͭ<"[,F l֔-aQ jдb#sD߹l|6[U2xF9TvǭE!T3^[0tUsD9^$rO9y$?"uOYX!b?e[h>|dX|\2f53YfRx~4%q7-렸^USE)-O^qaxgyb>ījxsU{uj@+%_P՘}#&-g?XyKp%WD z)&jtːBX!dk a(I9OQF-=dL).gEAoQپ8;3)@$)ݍ:x|7eG 9 E3 %4519,1yΏⰝ qӾqmpi STV6f4[)8>9{V%} [$4ePHU5V2PHAzp֌F8 mY 8KS vb"Cw 7uTM18y˴RmUɘZ?󶟤 XUeef^jJrڪ+Cp2F&>5 %CF-{Z-:C@0jOo*\ƞR[I r;yd#ՔܓZՖ-6d"{NGr9㦄xN)aή~&Ŵ&xtvjN'.3ت9Uڝ (4sYR_U6+ Lжhro??W~tK>_/i2~ls׻|nY¨@Q2+ti+2 EYYsr&'I %}dE KP˽ o@{p!eDVĬ] S&V`шk6yD6bAҼDK&WFbC)r,η:A>ve^Zy]I{0W)4XFR52ebU_誁;Fۅ"&gw]wA p֍L>f'Z(̒564>_&ŋP&XNX5, uѲCR^瓧uQC֭ߵT >3]׍͹ؾ%J{g>^sJ/%q(|~@߷BcPPo?O~Y[=">VO7a3@FFvUy.*χ!I|9LjnovtMR%WnASmjFUxe#TD5Vfؚغl_H>/\@JՒ/{ 9wL0Z|h\sЖd dİ1㜜8Qe~>yPoL~!#:!X68Z52eQdm4 pWP>E$)@ 1G$",a'hJA*ؒ\8ˤVK t̹&wnJ O72)П9P o+hXYKa< Ga[8SB3[},_R߈-CWoRZML Ajλ6XJr5:B0LAyC-'2(iHR0KhV-tpDJ̓]UR;X2rf pԦҜy3,XמBT 71RLŔxqu9WNisWȩmG:MPOsIȪm]:VOKbٖ:[ʲ< 0V͂6iJ [V^Z=)eBx'fܥTN)GL2Cumڻ}c֍Ԧ$vHtsHEtWg:1ìd4_Ae[sЮ<[%,>|c䁹"59pHZIx;*1 e-4$"Q~0_z@kR)Dw6kL쥄dvdkˑҕK M `xG80ĪO_ZC=:v_cq=_ 5öm?l?& 9rW7RUe?.^* NwTHUu'y|@pFRڞX\#޽0r'Wñ'^z[J2D0]NFC x9O̳)m5N]uztV_tπٻZ,]4uH,1C@Gqysأժҹtt{!/s Jf}HM-?^><ՃU:3:w٪'x>Ɨoϯ۱+x~8Ja E(x=[ײImdʿ-IXy~A⛑X+(|K bڅ]Ux´]%_9_;MHgY#|u[؍5M]vLY%Y^3~YM6Ș3o3/эʏ b!2)o>Gw ^&܅꧐[aB%wcͮ!\MF7үTehq1$t?S;K2N"jiC/Sr؍u36S)tbE08|j'j)}RӔA`u֛M i澰: {ϱz5|*@$ۀSS;f:bGb618)L!Y ж׊Z/O`o-;@%8->$F654Ru&9&fGRW#}U2SP<5"EcHZ/f"_--~ß^ω/4ᵾ1ߢAYa?CX:.KՇ夥8յ9m6_^Ib٬<$ͬLjmK \;y@T X0Z)!f$g4g"א00Mk%Y50Ey׉ OT%4ǥ^]^y?{$̹\!˘&V:D"13Al `Z|!@9yސd@Z֮|Tg-XVzJI%3O X`@`0JCsnef<PDCA&O`(:v\aJUTD>fzAsx6'uMs AZHc30)a>:CO~9覮a}C*m-t'imGGzܨU |Uncڡd|{zǼo۔ܿw@8#BSjXjnn^Eo5+9${ݮ)8aplۡ'8$ִdI.2O W(،m>NN U{9%XZ 0B_&cpwuqjR*6ʛj#d2wy:K1GāIRw~˙pK)t`D< e^>d*p]6l-ZBaO'L4" L 9lLI!_ z&e>w 9wWf̏"Ԡv(]a6%mcD0u2bFFoMU| ^#imAgMYSW( pP-,j)+$yi4c~ -燒ƕ/H(,tBAO 1>oק BeS+@^k}810zi<`,߽O?Km,1K#kc>:獧ʡB/_ ;V?OZ>v ݄<`!CoA~ %QMN7F A=1%7sEcQ<ΰgH=h2cn`;K,iY2@_(?߀61!aoޔkFL&O_'5 $QӍs_9ux'0cq(Xwv5o]tݓψ\/ݛ,r(wƢ-:j RW׹w>ї޵ŧ ?E+0]cGL+:#4/찚1j(x Z,th1LF Hj=  KƞPkb_Zև{ZAwvqC7㦼<]ZEđXC7aJ*Ձw#Ǐ:e."`Y06ew<޷O}sZjv;\k5{ߓ*= qvK):ḱ:\ce#r8n|[WC,ˁQbNŲnY;i9sU@.$uqTS.7 )<&Mv#8i<!}ydm`Ʉv 17Lxxț߹1\K-4jV`_';"_f- bJ3ۘ3$S' QQүO)\!,-D'TmŚ%FRqc>[2D//%hKBŰY,e59\'W˧VvIy=h qH! ԧ(H*Nit$) ɵC Mv Ψ;4"wDL/(o-ɀu$Oy# o@OuM?t 1]m B:7 kÚ+VeRyV8 ͽ~Ȥ%Kdܑ$L7 ٸ'lAJ]HQ ^*dm Ek)7^ȼ ˠݘ[fF7B` OMV3= ϗ+xy^UDa:S\{ˮEFLFpPʡk\gM9AC1Һ F`U(0TEdC.:uU ׃IrCx<7e50| *S͖`b(FsJ^Pf4)!{]5/ȵ;jKU3IAj\_LL{ ST`jX.P`-,CQVFƎ*%\3AԿ3T]єsBs;V5х7 TLd C /(aQ6`R(vޯa|@Gk9=eHH=1N/|0Gʼ~@D2Oŵi_rop .N.&}ϏIϾ.#8Q|\C"8-9ޞ`<#XEB%Ɉn9>O',xg~jű{mjiPx'Ѣ*ᆎ<`MH?)ſ{;>UhWD`n>;xˠP{Us✇{}*ݓ~ ~ޯOH#+qѴ~/BFԟҜÚtAF;n"yx_A.Jh(\{ZϹ{ֽ5$AԽ(<ݞeS{nxi{M' eSx6wh[Ծm>Щ qzp`&p?ȔF~\}lzSՇY`'`2 ^ߺvh[?xhJ4=ZoZs\nޟ><8% rnoB6 :cpF0|_eD۾}Bg zWa%]}]+r`?W^c RkU]svc:slc{߷o?7pںI~B?*?;'C~4,C4\F4JH!j3ݬqykn@];$_<@VM/yQVqqɔz04*nms[՗6-=!D *ש=rcM} t;DS4馉琖m :"Q3&}I:1]_Uw/{@?c?Y lL'otYGgݷuݷ7v]ne[v})s~_}b0Z> Yܸ逑l)ב-{wp<ͱ[P-z9Pir{X&{N<KXa`r\r*,=$%šbݚqww0R5Sq7wJMk+L/N=]X,=fH`M1)Ov^Ĥ,TTSRڨZx&u3mTҵr4KwH,IW^*k*{h^(vєBr)0Q\UVJ N@`~c|T@3G< bJge}P^mipᅰ.dʡJG *BQ5owdAсеV0 c|LԶ6@YB#XvBw^]uH[gWtB {0US{ u\"35kY0 djnkaI>I&&PE{Hw3XOj㞲-X"c~ {KE$ծŋ\a4B~W;PT+"x' sl.}Vv᷊ U7#ƣ2bPױvĂvojрw0Vc _S֎㺲InxSj4 AÈ䩤5k qZm mRSAݏEe `zm?eߔ56X~Q~sݶ'pM̉.y-9=!{pE6療Ų6Fm%*f @4k1sG0y?xow]]sToQ9kM"7J}IXX*[]*Gl%53Q= 7a8TzNezIH-T5QtޚB; L7h`!d[zpopMyG SDBÈFz*J PhijEHftvpN,roOZ䋙 Q#7*cF)2]n:W^7[lCd!&xEÅ*Ph:uMp}MAm VWcW隋C9S~3J&֪ XcrD=/_UWN^U!UTf}iXG.vrDA% ME "}1_%pu9<Wwibu8&6}O_,x_y.'(ƵkDHI1M.Iq*ܗ{1Oah/%P#ǽEzzrS(VQߟGIx~sc=ws\xLß)N=-i) Ma .=徻ocGX UVCBRlCDfBbӉ C!yU .z'EmԴҸM9KEfBv)EgƉʗUv襤>F4%5iXɞ_h{z\jJjs$vrk,J4&Lk$hnoiroJ0 M#a('O6hbD ¨lL1SL9Wt&'uKFՖf[@<1]Xe&EmPNl\dFcɾ%MXs0*LAE4=~ [&8kIf]\J'$3ApfRMfw(aU$lu3`4@m 3[xxF*)t&%@Qȃ󄐳p9&ӟIBє<`6K >H2'ne;  Pդ#LZX fh;1mkBa\9yϳR6ƊyfU`sLYˮa%!'.þxʦ=ԷA8xtw/؅Rw(Gs9ݖk?^ג 2fBxza2EתG:s*ϭ51ectiF2!G%Ǐ upYC[[*Mm诣<;YRNn.Wjk>CVc!ܑ9űu.L A3yHM{T?o(w;0𽑳#LCGh`n*.zw퟈8 $/p*.[cWW^ӵ_UÕTǹ=iK!SC4غu\孅H?sڷә:>E״hN~}GƷ?zO̙%[w-R=ͣ,o4z\_AUJ |iGʁoWT$Y}j1{e^QO2t^B@X70C-w1ɕd/s'ηͽ<56 i+߾<(8jr@+\YtՓ|QUAgN[Z.L?} L  :ͥ˹p=Sk+lRSwK'5@⪛1 /,¡ lLx q? pOjP>f7u˳}Pcw۝aA#4:I 3vC; $>m7"F hSΤNr㿫 (hSj_pd,FcʤCkuFw*ٽX!fbZlli6Y皱W6IEZxC>U`RDZ2WgOO,p"6^\n}2gcP Kx$R £66&*L~I )=bq4̡E%R19%ضE{+OVjZ1ؓR1Iy*j/>B.pfuIUڎF½v<:\" 薪zjkmR'+Q2 p`}aTfu4=. }Sj-%ƹ8 e$T1|\ 4ζ &&0, N8L`^ {4_:z'/GSA,*ڨXIf!|Nk_*fci|_s[h\4e -’~ǭT`q73y`b)5bv)= q1lRomݩV$Y h-G]Bf]Ч))DiҒ2-ݞUD̿PdL)M(v/H3e;gb/u4c*2W`ʆ0)}fH`F@+@hFLNgn{7 3J~6vu&u#M.KR1PuՍ`z:r Z;(5;>(~m2•!#S'tW߱&~e{0D{8`<̒ؐ\IwG][N.X6܆6;Dm՟[F0꣮.wMr`NUK.ザ-zBF9q8pUow@ө9H)b˅d2OEab䥫!i!ܡJ;CB.-bbfEE]47Oll캨[x =fgYe6+򘛡5>[ g`EMܒD>d;*в3UA}Q|5o)^RN8,W {IDATxA@stK#%lYX8uNԩS:uSNq)N:uSNq];@Ih8*@ (P (P T@P@(P ` oM ܖ;aQ4 Q(F(h4FAh4 EQ(Q(h+عca]@vv4FAQ4 EQ(F(hFAh4 EQ4 Q(F(h4FAh4 EQ(Q(hFAh4FAQ4 ``]Mᵲ2X d @Fd@FQQ@Fd@FdQQd@Fd@FdQQd@Fd@FQQ@Fd@Fd@FQQ@Fd@FdQQd@Fd@Fd(yحb)NM&{VFd@FdQQd@Fd@FQQ@Fd@Fd@FQQ@Fd@FdQQd@Fd@FdQQd@Fd@FQQ@Fd@Fd@FQQ@Fd@FdQQd@Fd@FQQQd@Fd@FQQ@Fd@FdQQ@Fd@FdQQd@Fd@FQQQd@Fd ~ KX62x=+ F@ F@ F@ F@ F@ F@ F@ F F F F F F F FQQQQQQQQQ(Q(Q(Q(Q(Q(Q(Q(Q(b(b(b(b(b(b(b(b1 b1 b1 b1 b1 b1 b1 b1 b1 1 1 1 1 1 1 1 n]IENDB`youker-assistant/src/res/skin/3.png0000664000175000017500000054415213260315532016234 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp WďIDATxlZr0˽_Hw.BJyK1]MU>;%lObXJtw>G/&bPBCf,{Sǻ˙lb޵B-@sWIf7{:H짹asřYZ'M&7ꧾ|:k8vBºMw @&uypI^VU2@+[65f[,~5uMm$1K&qL7AIObW':W"nyzK%/<OwɰߐkXm$ߘ& aE549ΆZ\Q톰m_X;y2ȎVCu9byI^)W+ .v]}ȃq:meӁwi}6 l+jD遅 y1q\Lٯ5 $HGc|{? wWo~`q^2.k R2(i \ƻa?P cV"1R0Q$4QjUW`dHÎy/ojs ﻅvޥo[Vc)mM7l@`r=An4k D($iH?!^ *7jtL_r.śdfNGo)pO}Ol(2 +-a >7HC˾+} ı}B&ғ@Z .#]u9DpO=AppHl.N͍Rŧ|B TR4nrlQ;zx{m_jXll^(,LQtM<ǿ"lSD ra>&x";!GkB"F Q{U%FD/?2cOt;-K 5iZwmF9B3G(` p v4zwWe:&xSJHKA0&`\PW5!MWj2%(:!*,BY,3db`<cMo}&͑WjaƀkSXEVU9ܫ^YJCqSG*փ^~!&~5`'f*t=?"Q,z*u!Y7zs:@'=Wspc?r,Qw{1S:\\ӹyayB.He!? `=?gt'}kY6!DGxMЌFułp,)f5f ` _DZ>EHI] ]ݡ5hl= ¥Cؚe0-eho%>CcYX5h#Jf1L.JҢ{ w68Cꦆpe!Afe?1Oly3|XRL%jɃ-H\n9q #™/<}`nڈہƢ07=cEϩy h48dj|\ 51I˱"IUϮGe3=R̎th=Zԇ0UpW+oN_vgcbI|vS,w݋2]MA^$B/CGJ (f+e?↑O&ݜ {6m;ͯ1o`tMȤF[[EiԔђL@B[SƠ` 'M+Fܲp>D@=h׏x衬-kU&tdeV9CNEr?qlCRN$M_Jt8?SpMQJ@Y^D eLc}3 bTdǻqNV܀9'nPGa'8P*L;I7PǢ7#ݰXKi g>aK}Ykye{6?{3pw}BRu<ȋAWǏ期(  o˒u: S/% gKZ 9m UvarZRzcPRtTKC&G Ӛ_ kV`(' J+R-Ax[:t*el#=i]1h v˯'L nJ0TlFdӭ K T7GFE !o~Ǡ}֟,%J2 =XU|yBŔ qS<.xB 5@~'V̕$FwQΠ DzuUAUUI>3Vf&=nFW]\]*x}+Ir8ʏYQU;\+UraɋqI).%\Y9!eùF֮I(}'ZbPo I.N%.yV)UƧ m&]͉>WI9C%H)AK=T),t{H: U@ZxLT@~}<Z7C+3ըCkz[XF^X Yf`r%JfQQ 飼))WZjEq)']ڰG 84a?3To0vb:o&BXN )sޢϖ}+ppuIf/>ֿ|[&%;[j˅}$Nrb>e}k J/h0&'QQzE ݃8c\[ւܨ"COw-n)flΜF*i.IN1J θUW$\>' ͛D=ɧK k+!cɴ*n\JtsQpU;+|1 ٽ4ّ}y;Nu\( ]dҰK-l+G6G*Bjyb7YEp 1H8~h4k@{6.&xD\:Pj#eWi=9=? VEz%?%;oFq޻ˉm7![~o/ߜa̐G2qDh5$j֭+rQI3֜'#դQqESUW<>j78畼i%-=yW'b<az}yּ<nyy\6<Z|r%K򹯐T%yT*oT6; ug*U6G$ D߯S]h?a;kcьRϹ$ɛ`6-].uhД`!U,> U*ۆqtb=߯cw4|TW;g=U85մ{ d8Ix`I@z oaZ`4&룚QvT*9qF~J-7'9Sڜ­nY6M-eo;Z١e}vlߔ̽{럣gUf.l#.тUE\J~I7,h֜EBCAL82,٧D&E$A!1}.E }C\O{]ާw_A߃ ]N5'Ƃ. dŨ9N%dl*_KvSa ;-jw]vNO"z|**}O '3TbM7VZBU\.7E\Ŗ8=K-mY7܀C} \xYo.氝-ԧސ_gtFvb,5{GIlG3;͚)$Y>!Aʨ_om{*}r{2T ,kYΌH"/L htEΜij*m&cR从k)`Y~ }VnBǦI dzӤO bB}By. RY2d  "gyBDuz URnVo/b5< amTU׵]8YXqpN^Цp1`FϠ_k+lt-{/o*8JLe_Pv^;nТߞLWUgS_UTJޜL,F¨Z=8z-7Gӏ3_3vwuw>q{u\Ϧ~=秪GɁ\!u,k D#=ЬH0L%MS2Pg Y ւ*):jj4Mʀ2)*IFsʳml10_<xpE5:Zȁ"Lt㸧#{/ϵJ~}Kփ͍9dcK%`AbQiSU sW^%7^ Jji@I]; 'ӂwD%2wX\2,xԻ ٢XyҐ7bY ޒ>A3Y5'Լ.+גkp`dJ%&5QVBqOqǢ:nP~Y3_pO :?/ۿQs$&d: 'L;QYkT)9˼l oqZ!%Fc&t^HoV` ݘ噶^Ms/K}WE{'3A&W#lWX3Qґ'lM# Q*V CQޢKrq8#w*\PqF= ^EP r >!çGFV5xgjI0Zۿ\>mJ:UAʸҗs!Ak0m4 9ZlQtE:yy!6%AÔzS܉(0~U/_=YsOvwꈚrj";7$HVJMaaʀ/齚*_xP:{N(Fl!4ck-߈(gbzq֞%B`n]TN췗}VtΥ <iENW$)|kWZ\h@R:!WId<-(EUVxBx=3> H|4dDHv1Ŗx8UL !v=xD-hޱvie>ρk9ZJ&D'#3R43 ¹lل 'Y^vC*J8b„(gmlw-|ٻ:9l$B{}&CGMzE,spiz}]K&B,Dz:ѐ "T5wt(DIg'l,}PiO/o6 2=4I,$9lWX԰]F]Q܋6f0 j(%8 o;q s0vj4Q2Cۜޞ%̃˲fO`~DNqjx*_%R@d2Mt56J˙P>vU9oLhkpz^s]樆:RlɄL3`z k“I>$ӡ|' ?~f,@:op{h~@{֐U[#2o1~荰ckʗ{-4`,7$C!:pd!mh8V B^P B$K-%qr g2s!dׯow*hEsnWDd58׳y.i`t;~^ekD9doOЬ/g$X;SlK<29 hдh kc'/OU):بEʏbMt!d,R'hޟN0'q:ӄaJH~|l[sRK~wIo_V#|ooϯW $cdE< ((+gsM' QޖO ഛͰMHvFqrζb2ߧۦ&`%s g Z RHpmţ $gyVT/"Ʊ7orn6ʼnZAhs*L7UqIBTnh9v_~A\\S)xܩLG=lhr iBOwidJQ`b$<8tK7rV7OS#wR.#!Dňrv$\z!oϏ?\,v,?!LPSQS -ʼnBd5؏`JHsfbktM.:b?_li,""$jWĎBV- ۘǵ0'8@C>,Oo"i{bV-ʹho &5h ! m xwF*42xM7h?JȐPAY,wFCF#:v8Ow D<6 MS꿼&qCeP3^%`>"HDsr"i.ڇ@$4[ L<#c1Jqv׫iE[ISei\ 79[sHTHc\,ĴbKPɔ*XqfMA\Į9}H)(MS֕aj.T5/K?FcZ6UECzxڊ9!d@& #-=q[2񋰮WN,t؋Jqr_&<qÇ}Րat!R(GH.1ʒIIDǓ NvOn|6]nA|tC J b+ɝt.XI4.+ ( eH {8 FGw/xycե82l! ub(TQğfOqS·7sڂmNƍ^n\A.?U^ؑ<{sHa ۬Wm9 PT']5NM*ر@\4 5dzp]bXd 2I5c$#\wPmD #ʩ:ތjo5uQ4"s#[ Ϣ%!dư‡с}4^\-W/8a"x qxlm#aOnd!dԤ?9=t-ac>ׂl[z 'c4Z!o_Y(wI~= $w˓PYKoɂjxGz?OHPx<ˆ$ =)3kn>rX/gS^OY?A72K)oUfU\ W!pCX1e6}Gj3ܝ~~81Jv@{mS[qh;3 VAsFM 6>3 &׊dh'k>bbsv4%_Ƀ!HƫV6ip Qb D]ԆzSI.Rb%DB͛md^7hO2ŒIdMqcP[<!FSL;ߦ(bCw+@& #ԷCAIʘ ?sAv%h ^ؾLh]{dSlR?qX/(Sࣃ4Ւ[b$4BA̦@ӷre[ppFnzMn\S\ ?Tu n$QO!?5dqOB6@,)hc"@2,J9XOZŻR^~B+`MEXiR+}LqY]SSW.@H)Ƙm<xa,̠/|hb6eT"TjH jf^ҕ6/:L|ӥCt!v֫rWrxr?]" ʙk<I^y.Y͗jrrIk^I pSbFv7_KNU`U/r@76:~B2ۼ%#۳-i/P觗M^ !hPųh(3F*s7"+k/U(BٔڽW&1٦s!=̝URH|?;/7h̃NJl"!@%:_AyǗGiku}X-L*{ahb4CSo6lW5,>2{)=9QUyT+ru ZLz"P!$+J*2Vu0{xR4T_rGtӺ|CmնVR{)ޘp`VЙ բrE:@(  #ՕmlɽvYsf{]IH,S㹜_OmkcmUtg\0ִo[t} gE}XrXOuYnCܔ,)nehcBV:VpF}:Fw$ϊf>4y)}.no@U1 1-Ku FO1s0|uDzBh@ٴ0@co7%pgP8}8BhXVU \mމw=N6Gs^j7d ZUqˎHj;[c^+p;qnzL14:zT|&a*aW Som]Ue$KmU&Z:)AB%nշ3bl 7>E܅MAF$*Y[:P%Fכ)c-@zp̈61 r*YPJePf.F/7:0ٰJ1l{niY/u)eӪJwFq</4j/P:9L}[\"6"iRވ ;<<5Lj'K }UO`+@eUk-%xB8R #u^?'yr<bm7C63|Hld&Gp$s`KkV,LEXsH7V|nJ;Y`N}jk*M֡ۏ>@l* y]5Ru ٶKXBp8 h' PlYjRl#+&~Ul :Da\v`!܀x9'ajn+-yDmX3+724]Ve5gd*ӊm: _ a}RWTv4]pL3 # "+SmxM_A5A] XdIg4O]]a7]$qXò cl(D"o8^0`9*9~7S` V ;Vgt3juݑrкrWeaئzp~.?fLB aU ֤Vf 8⡃^B,GG\W.(?bT1Z?ceYe ӖU$ۃx`Y $s^fS'# !OA(Az͍8ZVΦcK~*T-[_.eG=X %?98Do:YVܻ ^DOpԎRTi$.n V*NZz ?^W֎oO9U$\} \RcZU$\cΣ*=V2|-ЎlKSi`N=.dj"]݇ ZIl M: Yծ:{=ba$k(6];9fs]ݗ/۲v):2= Ը4? ,mhO~}vfA%+AZBlC)0aiX;M8Xk3rr%*Qa#6:6rXqeU.hlbys#jD(h&PބOI-~S݌J%ˉrnM"e_!֝[yn /h> 3p;H8`wVPvoM4~nfΑ]l/r3Kn_&H F^XS3U"|9_yTzǩ.hFeRьڍP ]Tl8c f\e@ ~(JL?(\N֬8!|W$UyXV:K_qFp05SEx8th"-Nm7ShݰrE@^*Q}QHQfPzOr/hhtqH)s;593L#lIrgV%huĒtQjQ|9(\{kɎhH׋\< %xXԦYq\z4e]"ѿ;?jS6XR$nr4D+ XU'!LMX y"X+')LUQj {s!rDކUQB*錅>UWb,LIVC mFV0𸋠E559+ް*lTJ Hn;lǑLYTGm*=!1ly#Z٘)"I cQ9NI="ʣ䞸݇)xt*Tb1/W\0 @xTiPbYǮv)qP]u+THvP5sx)A!MGg[.WhܓQd)逸AN>0!&a{j'$"vC/8ʟ}Cl,!.p9 [Ht xs\Y 2D Z?Um7V91֩L1L`l>EaECJϬ(#ݭp^u5Yhs̤9_v;DgPEC#pe{|n6p@u>dV5zhN[ u貄$Q|!fWvaKahjQ븻ryӺ_=W^+ @ٗ57v$Ul{lּ]uarĝFBʕefelxZ#:۷S'SӻE*G΀qhcIoPW~`YqJqbr0J6cjF \p''7%۠HDLѩXC.Y]:7I2jW} J`Y.ל(N0V8_H r&6lKRCy笿ZQ$=7$w4 *O?ЇzEo?GRDҖQX jdn˭KMY  W#,Y/I9)5]K0jB*fNM<ՊF&Ch2^ׄiso.A9vy7]G?2CuQQo09oC7z(4#Lj{U1i^%|ڄZ;3kzK 4>"z|'Ms5.Ca'I čFD&4'Ix# EtVڟ쿰FI PJ"Φ*z;\YtxD~ڃMOeobשD*ӒT,ciJP*< īb5Sۚdr@ew=Qq=Mxdߙ \~ژ$.wNblbic@'  GNwNtq^jG>bNxob5rA6@D,G I@/"Fv5SSzv&Gop#?Ҙ&QR/\%oJ3U;&Aiuh86wF|svQ-Mйfv)se *utqJҏW艅CwlFS5M7 cP' mVyU ޯM;DYqz'_Օ672_U!b!O5h`P AoS'|xu^GiSq*5{W 5@V\ لQjH dYZDMUiHɵ̍4W|Ǽ\sпiI+$Ҳ^xSLិE ǫ;F7զR](dl/0;x5NjOYhכʨVրVA-]̨[ibr9&!o-!c$9q(_ Xa $YB<5oxo w~%?ߟN>O6??O76WGX5С, βPXz sQ_2zixLPR+ ~)G#CruxI{7QD%j%ג :{›?vj HJ,NLU_f",0SS'i5FPғ.› CQ~:ü ׅʝ SFfЩ_cYZ:yVdtZ.<':yD+:Ǝ$pAI@ާo E%c8t&QXf/ňŅ8Ų #ޛQwMYV컢4N6Z^+MCkKv(^:s Mԫ1j|cդAB^cG! tMQZ"c/;6\m0B Y(({@QV(ku^MZ3T63ҹ=Dvkئn=A[«nDB[08Op/dQR>m>nl2>lyAka" Kb߄JҍY*B>8ׯ5ι?Ͻع9fc>^@A*}ꚮa O 9=JzPUpNݣ%zϊP#蕆NjWp?kF{p>zWPrƠخ]O2p5>Bc$Zx9䒰j}0(we؏2S} M%J 1um4o9¨ F}Vkъ ZO !R>)m֏=ZJ E<9AqI߾ьʲzG V?Qk-H:v"'xn4 unMyS#ފ@B~! )4W(Ù\y9!nKaZ'3էc,En bֺ}MIl7p)PA#o@%3ƕ=Ln4Ͱ6Sg&2+'ݘ\Iv d?ElF+;a4{Fu쥴h{-FcZO2ګ^f~vcJ cEÆqׇ&po64;t$[Z;lO@spŒV 嵜eNb9tξ;cEYwGc';˗;vAj@b(KuM |a>~"zHM9o%)hPiJ&zcSoo:QM횲5ؖC@(5VI4`-@a/_zG+⤉VdxlYdn IAE6`pnIkwa:&061,WL{K=:8TbgN^trT@\~#fYZ b[G6eZnBJͮv)4 0{:(%[nBmW;].*Z7XgϐjB<ҞfkpzdߔAT^׈ƈ,ӚgC T BVx4qs-' &lZL}*\^@yyP Β ݣ1uGjuW|6ڍ&!e|OǵY-^moTxxZZ> cdzQ{"SP)k0^N';sqw uEIݔW߳AC>Xao H<}( c:jP,P(k@ ߐ||Y(N0Na&';\Oҫ?ݗ{f0h| 'bT`9)ϗGu!rZ"rN=c P|!M'C}gi|oHw䇉w1rxܘdV>,DWSĥ5 F!E\=58p3*O)Zdpo)Kc 96 &YJ9 ,"2vR3Ѧh2T^c&]jT>Bs}}*חե4(PJOE-+oM|VTKSN~£Y.5)I\Pı;|De;4VTZJy*÷|qTw *V$\A=,3cۈ\$(eSI5rGk>ll `2AQA6]s~Dޔm~Q?ԛsԣB]졒ZPJKb<`hfH/=!co?F{| SN 84s*0Q]O`̊y.bF\P:5^|$nYrɤ!>qW&|c?MPuEaim𛕒zV/[mCKE. }07@wF|K04T&5g(}.;HL"A½>7ZrYXXkl eة O]G <\][q9ThQp/A#o{&b193ߖ>g a)u%JW~ 4u]yBԄJEd-SDIuױ,r7g&OГcN"fCgNѽz9k_kfdG YZtUUk2gYF+}3nao* 7hoAh3Bw{B7{>kP8X2_C&Һ'y^/:P`{](+}V{ O}dʼ2Of#l tf3Qlv~kЗwN,&+y '8<"%ݒ"my~@fLj@͓N啈O=M49aԘ9 .L*:6hڔdVfê[fCt$06, Lֆ鴼t|y]UP}f< Z2t;H5C:< eyqbj]cJC!щdosjvEd<fj-jhʩJԜ;.쭴dF /OIeՒJZgMVE*m=)$Rˍ²*v@TVi#͏4mNz%^3}4n*ϹGV>]=D~ͲjF f'|-Q/_Z΂Jn|&j޹}\, )A6ԇ8h?=({% e?06`{IX;MeЊOs>&igDkhF}ˊpFԺ~ i@}h}V9UI֐9~O?&3ۆŐI$A8Rn=](nI )Z/QFX__ye aޞd졙UB3ÔbKpӹtUef=EyߞXJ-$Ukp`4Ih90Nla_DTu͜z;Ǝ3m23U|Ц[漘^Uߤb5A4N1mb%>̝fչ/R"\EdwS/KAVː:FK@GSi'.a*lc}N1=RH&Iӄ5[` rkG {8 d5EY ub6ź8lUEɠmRsP*`?ܪ) ɛ+fgҤ1d-wCԑ5ZQ@]6%hkgp]}g,MEzC{g{c ڗ).uP%J#˗r]/KM'c_Ro`k4@vk]rMe`2<6X82ZOޙp_ΔM϶Y֨ǍZA=;kauX,^z:tQv/*d(5?@w9rǓ=V--wsX:X?G]YҿC2eϥdGwX!X2{ħf f;mo$34+s̆~3P r9[ R<{4w%i HzN\.qO6lsIsi>2'Y<)r{CڀC"?О5z~gfV c~Jⵔ/z=im֙dB 8O67Q~Rו<Ɯκ^\|8E_وG2;>.Fi0Gn885 /4E0kAC@Uޒh5SSRAQg= $a&RTͽlbvps,Qo

    įO^jn0mE]AGJ yQT#)&6u3N,I2&}rF(DtjdtL)nH飁ՅcH$7tl4Z<^Mj ,}4Du#\~*7G\Q >itlτudSdji`V8jrA &jj6.~[x#˸p0-o&yFM0?bd"~vS#7Ա:uI5Lk^Do)Ns10׎ b77ZSEt7&:"XR -uc0HcϹHrY: D8ˇj9$HlVO+El"؀Y4$K^.&Uw#̞zf1]'Z:;ҷWiqkˣ $[.\}o(1rb%y\\Z\a\ z]-ֽl7Gx2xrgś9s˷3•{Xu}*b(֏kh*ZJ^PUusg]<>rR3fٺG8Oҟ:ʘ׹(q}.z9shr352 }}00雰-ںo$h=` ;Ɯg+Sz>tI'>=pj"Snl7Nܗݛ?Db3P7v6qѓ[fªd .jFMhe p|1H0VX.sȦ+[}896/usvjBRN'!qd w)9jx/ : ӊW<^*}Jsѯ5ҝ&F3+a2Lgaqi Η|f?Q4ۗ<|Z?j3)-;L"MZOl:?bJԣV6HKek(#( 9-"?e`ʪ}sLQ l$U)ׇjݷÄ=ѴM@-РE% '+P4\?B󣺷f}alG} 85T1ZNM:ge2 NѡWekY.xebn˿捥shU$_l"6rFV=t-6)/Rݲ|K߿s5}_IOe:{uAm\FYOF==4mư, b);k WN"7Xz!^x*cM)"\[Ë ב+֚]~o-Xt`;x'џ!pGY0^p W&;^}ǣ@>nKAO'۸,kG[tO8 F`j'F/ D7SZ.0d3fPq>PS_>ͣ Qz~A^dCy"?Yڿ`ww%b|Bٚ#ϡ?f&[ Hŀ鴾&囚4[1S)stoHppep|wTnmy*n3$|XN2| ^4Ss*qc!*ʦh1@sMrbjFP_F t(Fa>M-Ns'jeVbE ſM$g?$<`4K${Yئ9Sis/9ۇzɝ#Ҽ Nn"c"`XL/Ьqz&KU6R3͉Tws!CV+7;*"Kv_=fQI՘$%"`S`5u':6+Q,=gi $T{:^ MZE &lo&|ι8V0Qq:0jA"WR8o9tڷ⸌rެ*}.v H"}*ohCy(eyRr\""ӐP:Io,-VB<(BVKt'_wff^s#tYakH&: ]RɻuL̥U&"X*;oMQT>MtRc/x{B^g+:sTc=Vzχ[|vl'>Z A 2:Gv >>QO6ƶ{^~dĦ&01PiҪ3Fhu]M5Tl-i8]2`GV<̪+Bf5ۧ9R$ *%F:챳<La"LM ,cTX,ؓ#㗿U5J θXհ#图^'`ÝvsiK ~!LA.Ub}X7~y kfn -ʹLX8"Ý 3ɟ ow 8&?\ų0}k9Ň|Dw$26 {HQ җ@abڏOpxqj6';ۖtҞNE65co1?A_2}$zOu!޻\ϟuNG\9cq>~՝柎Ya!p> O.#1_Gaj{c_s/̓QK#;:2 DFYw:T(iare9aX*mR#rQ+rޱ!dEo E;RPؐ{&) Pqnj7(5PT?6*qFȈ=8'\K[U堣H ˾̲;:u`:ޗC';'4rFɣ|.3f@kǂz@F.@~K~ k>'iD2J 3݃發a' q= S2M6"U1OXuk[GRa>q8mc2L8FGl>˥0%^dL;/CjT:AՓx%q^I>J:pPNռ2 rdoCtȒF " a̐VQp87CiCf :Z(->Nt{l-$I>ߑR>_}HQ[ְx߿,?k ӥ\31v*@|7v=r𜽠cGT+9 宖r#\rqwq KxX{T>Ơ'Qţ,VO0^|#]z9܎Oкǟf!\>??I_0~:?B˱>H>/M$8҅ch^; =e-7'GyY:9牖ңLxat_" CnxcNgWM4F{s-q|ˌSVtV"&['SLjD~)Mrx̍KO5 ]&iʵ>~w4L]ۊ1"(FҀPٵi8y87@]f46+ԈS_NW#VswѣEg[Fjr6 tċ$bl>[!a@J Ѷ (C YBpt:%bee2N%sVuxY\ َgi9v0 2`LE6!Y-g6Kn"^Y[kL:ƽ`慶U.Ry ΃f;b]:%0K<<_}Gm]5x-'x{=XxyݸrW-'\(3jRvY\x )5L07{feh=Ї5cc˸4`]*,bu<no|8ڒr5y}|})뗿T՚Wqy28|Fvm3S^# d/-|z?l?icur22:KT|<*>E}ׁ?b1v+(?&0qgo=8Z|!K(~{z-|!6~L5.+Szw?Jm4 ŸYpUyk)k 1WImDB>充=~e#Z+i+"R~RVY)~g:֏_ȳ{w{|g뽵~D]Z ^$Bҕ魍N\Yvoi|rݿ},CַݿFyF[ʅtw4_or𷇛s-:2/Ͽ/d}4#s{4_~Ͽ_9ͯdۿL:.Cia?D֓oSOot_T@ τF#GҧȪ{ۿ_&#}{?|%\lNhuNht+Jp{Z^Չ亀q.h@30[FLñ;r )ngES^)E7qP/o$7W4zwU7.˷k"ݗDFߵ.7 W$i_$ bWn&\| B g wMR6$}w(g,(~Kfw[r6- :u4-Ͷ< H(G׉ s{-;w-c!x-eZ|{2b.$|kd# ۢC|/be'B;շNٻ$w'ے%pGF P-ϷG;Z7{Zۓ]XݜITBl!7}sƙ:oGWWS?RP$[;ߦ~>Fv~˸|`脯77R|Ҩ( PqAE! },V0&%&0ь2!ZvO zά5PyI:Pb{zh$ 9z:aݾEZ=`v_ngIנF>[3@n\4u1G،dvA&7=I'qZWU;"HHx{m+* {H4ZfbMB $C?ի1գ-Q0-YWD]^Ä́&[ ΋_/!` :hSxDӗVv`gh F0g2DD?ڽ7ԶSWHy wɚ0m+M{GX9Z6n+喻2Wkh}|Ϝ6뙺Rr31zC7L镝 פ-ϔ|VAN‹uOtxo ̟ʽ~3Mn% ؓr%\Jݝ:|ŝ3V%u°ś{OAvpNX~]::AAAy؈ԗmbP$eK;_.Կ]7z5 Q6xy1t͟@ Y[M ~ 6"2v8 l<0F01³u}Z|K5;-yGfgP{в܄|TʿoIHXk`'"vI` woGn*^U †2}*%b4K~Vo`PԴp HΪ'2d ~>8EV@˯째Hl<7Jڈu7LK^qDԖ/jQA*Ut*\S3Ny0b@Om>1A 1j@5vxݱ(a-_v 2VXn7 H`KEhвm\_D5WC;g0)0h=G,XLjtc=3Vh0xmb/TYah[I9 T"*K oχڜ?\l6\vl 7BFշ$;{<ᶱ!v4B;캰mB:vkڠV= C78X W[{3YeY9.7 "jVO^Kiä^(k[jVj4.U`5]5* #L3_ Y})IkeM %te?f&/k}2*#f9E+/'p45u;NNT iv/5&*.J–(o D=A=dTv5Vgħvp3vϛ^aՍ?Cce_o= li -@޴C#@j 9-cvnBCp.7r3 ̧6vΑ໚q:M@6;_# 鴒@6.iuXfwN:B lt+. (xY O -jqLd@kO?~3L; ᑩrY oʘ{*\ܗWvt<{Ny,Kii_L2-tMj~%c=?3HmD\p&e;m~̯tHX^N˱ Vz鶴 Ϥ&IðsӂP<F}/`uڭ<_OVݤ/?Nx8ߑgAYqweP{8ߧ1ytw6ڜln<'* Q r߷}˖XCȀ*{Z9q2U\&ѡ0k I9 ZA߄ߛy56lj5Ko 8>QE?K$$[Cfo_>Bג:97EKF*tU!?(b%Qgߛکpgso:[c[6$p$'mhԶ%{R;1HO `~q\5!ߧN5vMsڱ7(':͹wfN9gS; (LΖ7[6U{-\5ʃnު`B] ?jΗ46.$!p !0cT̆#lq ÝW@ŊT:+ 7hz ܨݯfP`A@Pm+",`Jaֺ8^zWF?Dw'Z"}C>v}q8[S+ T#+ pEj[[Nv3s@^OqSjQ};2?jB*,0uCX+ ñj>6V@"_Gq'rL$#lV@Sd`@'7R:Kk G$Ҙ +?u+S\>|IDyL &ƼA`s'"0%^ V|i=[vz]0I>T wj ʱ b˟BrB?TY!T$Rؗ;\n4u X8R)7$l"a<8$Rӕ *W:W.7A,~/^w7@'sjx3hS^d`KֿhHpgs{<(PoK<׸ᾼ|]Qt/HtULw#bQ<{RZڲnoҳ֙PYY q f/NG;B6|g>c:U4Dɤ\ <Vn)h"̑f:p\=&Tf+EIgieu9ew[~r4jhFb١Ûxh7KrWFpom[o+ =o8ӏ?107aTgn#z < BcO3n Q3ܜ&=ѪW؉7k{%,-\x+"8i{ v4 A8FȞ 1 ) l<&#RP:-*O^"Ē`@ܽtlMdE?iJuLȁ+#[BRTvΐ}"&xA=*+t5M~j2? X: :N5"t^+Եl+޺oalwp}*7*w?K/;l Z~A-2Жm ) ^HZR L ZoCEwm+kK2tJ E@kVt.UM߅(j'e2MVF vceMDU:DC091ъ nI3E0c$Z`o5A~#-SY[.uCX!ٵ1(wA0\,JC"t; \pė@R<ʘ*R]/JWл`>^m4bN9} ٤ ;esq )^7xM oIX^in[}Un5~5 6d`;CgS6'ޞȨr=[TKqMK[? O)+A̱JqfgJtK_~w3'_w;+s3IG-߳p޽6YOtGKĺ\*gȵO@Me8;{zR}}YlG6@ e QHeeO&]'{>y~t&wx"N;1h_IL<7Ғzn>|g{2hѶ#1te`w0%fd?󃑅PA}U1zcu@k5pľwiI[FR@4v[k˄z!Yv0vQi&u WFx ~Š>6դy0}4{7hF98 @OTC'h(լ(()[ՉDĆ=0ÀR접WWi׃v C?ӍDs'c9bvוsidkg :\= E;eJƧ$XR )a:E5Z\ y%m?M/^biЫjbHA?23b_>c` 4`n C0!L!09"pllY}kG~vW/"'ji(HMajUcSr_{k+98Z:uau&Jj=L)R+dzp`tj8;Jw=MgC2:tD &4d܅R|4L5d5aB4TTofև%cI7\/3׸&pØb,& #l|A{\q7izhu mX%jl8ףq6TF}ybD!$xpAnëu /U L77T*w3F}3J'B[&ڔ6E?ѦDF9BZhڗĨg뼂9w,yrkڗF9rS2[63Ɉ]/̉~E=ĵ>7^5D'zCczدPW:6uAutomfluܠ<|<[~KM%XX"hҋ(> #^?vժ,څg<<_eeAfvTvF߃eţ!{ ?:2l;I w)L-]P%H:F'<L΍~i_tD\[۳@x!=#쑡|+T8WQ콌4~؞Wk[k4ޝ4{eѻ_A4;hX4%Kl\m)rǼN\0z?W1rާrSfQFJ \"(jRgWo!6KD=|fWU iHWrëݡְ]|Uj5,!cuKn*SEe!/D7FtJ,OWkgKƼxžWzB3ֈMg'M6&8ax'h} si}QvPc}H)P/tBDpkVr^- U$YTPdn$ހ862$$xڻI;LI`i|q `oN fS|À.(36j&bYRj<%G8Ɲv!7u\Fdp2lTrEw#GE`1FNCql4/!3vf5딏 PHop+| T@ DdM19AEA>OaX8:\Zt@}Ta`&dYڶ갈TKyЁ "󂔳T<.^@b=\3/~ 51JTFd7 1TTHua8Ȣ&.˜C QRc ?0Y: [:t[_+)eZkJ)u>Ɣn3teu+ ۼA.;S_37tܨՆ@5.B;^u}$ bCn~zK^7XבJCϚ;jվ>U+[ֲW5EMlzyvb夾vߜfxɵusIӐzT #gSi_mO{3,TMܲ?RDŽܪ -d:g_;G{krE zv[kH+E@DzP0ke3mq/(]xr?wb׶}=6DI)uZz9zk&ӡTXᖌ&Oz:7͏Gs)1>_f<)#eNs;+>ّT"C{۟Ŋន6_0Nep5'lG2 NRǗyI" @&yL,Yԣs{Kɺ޴2O+{R) -{쬲W=z+ &ɷ?Q nuzwu,]kg:>_ʍ-8ۣaNpbm34-~*KGN MGl#砶y~צ׮Oe+)Nx:tkr5SQƘxa1k8t=A4l}AJJװ!ص$:u ɍ :AfG' 9NJ)FU:]>0#DLV@ j:CJfIpP% R #9ɗ]O'fk&tFϻ ֢G\_)ѯvcsx.Dz}-nǽܵEa>{V N1/~j\|Nιo pQؘ i=R Q.$chH64Bnކzm|1 aNd,?V@)LjPh96LN,C5Rͬ=읥,WהW@lwd芉6)̌>&JgAp&>̋.HMp[ٙ#zI?~/kf8d"IS[':%K/mwݰHBatm2ҥl: 涻_BئxcC<j㻫OiDl@2D{h*G5m x9A0t FqsЙu<wx_*FYlf|ZIOQ ePhU]yЈ!)TXyBZCD5-`2be = 3 w6I{<|;2:io߂w9 p>?}b.N 5+#<ܺK~FHK+o3?'Ru#?:uAN:Kџsy\Ҙ@橞^խW_: m0d-<3%7f8&8;U7X ܑc# ퟱZNc'Vp*5}f ծ*VD7(Sjmqj٫R8h4\UN o! ZVu~*5[A eNUp}Z*D}6eD]ZmgvKPF[[S´NbC]Ce)14I`z7DN89yn}-Vyq HK-eyZ9XYɈshmP_v?m4I˺L Ym{>6¿c&;[ErBabşdMpL--tWM!Myؘ&MDY#p+c )ngCఉtaRZhB%,c;젋Y+srjg G6S+A  *GYiєD)}rSXq BSޕ3ٽb@~NɫArOP&a>5 ԃ]呭R7]{xI!WA|Dz]tK1 aL6JzmԻ.󺷤M") BŢ 2*V!5#OkZO /W ;E*z($xx雕=;} ՚@(n\ X|/5t,yԝ0xnş= ~F ooj-׭վ~pMU/S졧_L4Wzd[rْ7̆WݢgTID2^: /BdpgiY}x1_{;Y&_p:j2"znYvrc6 n۫2ޱ,vWHd'E*0bWݓ]Ś[{k魍NZ / f½F><3ޕA œu~:m0x+SGw0:~~<+F'bvX"]LQrfO¼C{ =i/ R'$]/ХEfz nO\ߟɀK+~y]YY}&)dl߸Ul/h2wc?wQX{-,8]hT–_^>$+g+W/֋. 2y3.$tKoW{;ʺ?Qo2d=^&5u˓}4Pӝd,wpF.$H>Q. MڧłoĢ͏դ[KkM?*S`Д>C(U:mA,b7h(Aގ3LSti)bnI&X䮱Rm@)[ۤqF'`ypX2a$Az\SJD<XENE{ Ƴ k3T X=MGcAxL_)1:af)z@_WRc'L"ohaCENv}FCr4:g?"lsڭ=33QDx?JT; z#.ql]x_nPa%eeXc?L~ՊbRr?vw5avH\W:k[("OOʺ pIrI$Cxob;Z ˣcۑ~g `TW:Ċ4afK)(; DKc kxl%7pU+P۱{phK<CЊ閜,-6yى2x-Or t z"]uW`h&F!dSID{dWwD$}`њDOZϛNt))%fQ_ԽԗOp̽L YNex6)D )7'JFe {}_>g lՖ>P4tܶU2`a;~Z lzpj"ǼXCA`h\' _3DF8N _<Ō`< 7i@KWAo"n)1Eb'{Yf[:V,KnfNw3s՛;VZ|L_>+';s+?x;̨6:QM sݚ vB -#5"!n;f˃ȗ#ۯ{.j胈 h۔zGȕH .It&t[0g ʺߒrӈ_֑JBRwui꠼j ˵txOX5w]^YcP0һg?:]Si5exn_r݁ L[|W?>wRz|/ɧ@ww L[-BOOw8PevגmP:t̪/0+C./^Okky\] o]B zON8i Ҟ[e$t]^7,>vG1UL`Y̒:)c N]ToMVZ񟡝zk5 sC5X~g6ÀQjN\٪Ѵ!*:N“<LKd[{9LW1e 5AO kc vWdLɴq\S0nZ *5&h=%D]23pC/q0YDx ؤxa}2Y[$U80EF;UUB%*Ք<1&0c`Ii3k1xgJ\Wp)/N= نWɭhۏjѠ7%}i)'6KA"okG=%@l2"圝A7T:k;``0log n+w0MWq,죐aC PVC$Typ}{V*tm*de]+C[H&9*+$T"^!AQV5vVuȜ־7lqN7m'{"Vƪz+V=D.!&pj- O| hwC`HNGHLɩS(Ȟ~2 "UxlP"QP)|痒ה:c˓pe# Y'1b, syzRPO_ m145V2Ka"`;]]ѷvoiWق}b+_ty$-o|ms-QOW [:%U`5V??0 *WKmKhg8I#Wޔ/}Y8nfT3%sx&WL\Gzk.RԳ \<Ttg' LPͻCAu9;)y!:@]]2*#>3{>=f~$xNpsdF+Ep_/v7_A&ɗ?=wҫ]@} :!ҳHOϵA$;A< $/,}?ّj]U,gkѾwX_^ӵ򊨶/8rO—NS)zlOL8`AiY|n`̭KKzvPu^ M}MrL7d ;t>`l4vtk e}v3My^glf~C޻!]X5 y9geBGˤ v@@%"ԃ[rNWCࣛwu|u!%vdK8ݼ3wTx@oɧ!CIEcU`-$9uRj-7 rh ktru B \&x /,+Dc;TҬSJ(`D4^~dv{Ln(}2_c Bml/СND]+8Q dҙŪ9bSph] VSu{T`)4S=HxY%yf'QժUUϤN>j^Z`15vfʨG\Q`"W=U3zfhK}3+j90=]B@jZX@@ ͵QM,;G(z㉪G\z;ɜ y ט%wɿXj+h6d ~KGYFN*'s3 Roj^T7l^W~T̍Y+Z*9}" kG}䒣Gd{:s]iA|= +話NݕY, z7kʱg |Eq9vwC $T8̟_foM4R5Tί Q> h)$xc=m)c&Kp\M^S6!Z,rʐ|0!<m,xś1e#SP&3;vTlR{?(3͗otIlr搗wS]߰1]{&_>ޓzyȝvnOOw /żl_,>zѽ?]omG۳Co"4YWҗ'-uOY#xՂ, c@oeMIתaO{ti@H~ƲCND5 :Q;*YI]pyV򄌆>ET}tj{,n':KĄȃPuwOz{Ww S2pappCF=JPp[}K#<|-z9d%A؏4KQas$*UPFy~IM#OPmnn\X)->b7͓2#V*$FscH"TNj,U&1> &&{êq >P~C6iVRc⥦Ft3fz7ڙ>'{]JȨTAohv.Bf  Pl⒭ܘk2iRKY> ]2RazB #)Ps+2Ir􋍬lYZ蹺 q_,Tbڱr N@ka߈$a%w'u4.*'S8`<X>Pobn]xڠN|=\wzH{tgz'Tp^{\$9SW<_~gLj_bg=_m`٘PY-o?yyu_kˢFщ:ﳉ/٘AZE|Maͧ+BN2ϽYB#ys!zw5Y׻+aL~U職X/e)=ayϧ{|o˖|.# } Όy_rǼW c(9mwuԻpuElD3݂gIbzϕ-7y!=:mދ(>+ -HƳxyqJz_'g{|e>lW-0I`zy9 {g7lUt{37O7Lqh.,{fxcPbN7=hs0Ù|$?:CF^+?pg+tہS9D 5utWÞCGypF6}?2.צg i}o9?)[Ё޲v:+S rf.}(MX_ļo(JXRJR:DA2HOyP)kH-̕N$) dt1H&`EB<;A{\=DJulpz|Hqe40 U%]<:w&]+Ҍ$c~T3D}kKǎ5y`-9AI.kWr,'Wy!L4;}֒wY9eOUT%.\^iel6bc jW$Rrɺ@EIꭏ_Kb>v|*`!5,%|l`QbX>*4*ކ?plǁ'6#~ΝbvbV[R~z@ƱgCc:U ηL}n mrgioټep%|6ӄ9m[e*Y|_C/9?Ì^8I(+ve8.7Dc;vʎ[x8bPm˅w(>o>NcA:d˝)-g _eOe}sDsCx" [O\Z2a<;R77Dgu7[~{*t92#xv>@,V~/x9 ?/lzOŁiafG#}bct'B!\h)Lu#=gl3y2<1WX8_&QJ3OpyX@L RaYBy zp%5Oh(2.M@xtF}fM=Phu&  ; N*翂e=ݗBrY=tP^ Reo{#;Vw;6Ootݗa -gZzHAk i4Ŏ![V =ͳ$:M1(1WpgʢLxBس& 逍g=L!%zV9S395~)x&l }BzS qlBՎԩvR˩ɛ0çXT*=EnHŽ*x_&z2JY6M9萹w:ݫ!w4@ȵ0lBu!C WyC&$88DZN3ol[g'yO#9͐h?x(FW=5e!RUz♱S5 o9\T gyhlǐZ~lFUU(1VNfحuFRN}`tL&n q\gN)ģꍖFa8+hd{kZ$*;д9o DoՋR k^~pF9/ۨ)[@6EEo϶\O΂x'2s2|5cIkFV␲P?ԲԄ=!ӈX-70܅a&NWuljU;5(cUF7'Ui5rA#Uh&4  ۳6u%mɗ4S~h8d`F:-  Po!e B^IShSMƖ3*kzlk$K2OG ?6:7mU$i\V˨7'dC"4-#^~o&+z꒵a|mv=Z.J9mrJCX^*ɦ =ڊ/Oa:X#E>l)įXXzܒ5"7vae>Tgy,n.d,$IܛJ֘}ە.r$<+ׇ= \Q[Oh*!Nm98\\rZN1Mmn%K[ƝdHA&5.*Ej|-^#yaq.-?I"=я4H) @OeIUt{h&GG<ݓ38պ-T#8cߥ~մm{cbQ /@:cJ[՛7wU\4\W#bZաj0ZY.HȻ#ͰR SobJc:td?5uyw&wgL'^Dm_9uNwdZo{d?w⏓@?u=L˪*xW.!+*&% ;*8v@>u/{Bo,p0Õ^ `G'}WH yaM<=FǏ鋏dB Ǐ@N&|p,c?LpGkS< 1Uә4p>f^\~T{,zMzJy$z{:2\i ŸҨpWmB|8|sе‚dΏE^f򆒧R9l뤈5Z2:y6 r8> ait#f#UUa6՗z~lIK{s2QL%P4>#KJh7kωcs4#1"Lj&);OUYPp;xT̰s{i7x{e?d3_ظ4 C aD'/ULf=4cmLϴC ðGF߁y`765uu!~5h(bm{}~!,Ш^8hVh ܄W+@/9yA99uA" Ŝ-Ʃ\MP XcOQfLC$+0!ܗMf1yIlIaq}O8𿓖+( j^qː XjmWqCUOrCk8jm1&-WPPq@μIy er[F(a"Zcj)XoyP\+[Ə]*\ģȕprl嗊* Vو B؍mܧ' W}XSo G.TH;hU.0>'SZKAsQ,Т&ɮ6NԐdG]:tGCai <ŢɼT2Ji-:H稜'־\$T˱}).8p/:*ꩅ\.ehx:`*?PC> x:8H0HF)*Z^iTA{[ONA-pM Q]4 > +=r]Llϧυ?. |>_>q'>$|&[_eLs?Hs'#5/εuEsM5=|:7EӅ< @اdfA{K^iFNVMŹo` d#ƺٴ.̰*Gk>ﴇ!EAn^wMVBô҄7KRO[S"C$&3%e5-`a)?36z*)^ۀ o-|GHʀIm^嬣P=(Jq[-0LDq sԃnS疐rq61;{`+\D%3IQ+ܶow[\9d"kXLȸ TلTy%*)/CQusy m81Z$ FJG0K3 g˴WJQNsǪoC#P豪Ft;2^TbF`dT <\+kڊfQ0Nab]OAjwu3dԳVU[)oYtC<0ɟ" ?J|Y f9I,$1h=*2%f iBmp;DuL{K:eΈv/o%gi;Rli p$VցEo֕i˘b2rB2XSr1Ƒdɇoaڹ/ 'SӲz2_eʉ?V;wf7dGEC>- ~+`]m+wP^}G©p ?Rrg;yL}~E8^_T\3WZ^Pxw]ˮ>^O H+@H&.Ę ?`끂HxNO3=~f劘58Igl`Np[)Vc$zA T<^a0' ~XLb"i)崩J Icoi}wgPvL%$դ0rKc:9 }cZ)HS;Y&-zpЯtjk[Ĝm,!2~苻: @7 ~ SaEQ@*+Hrvw#`i_o}|{[ 4{e?koP[fڸaƨ-ռЊ:wۚyO|_ji(uCĭWw"[Heui*yra:NF~k51ʅ,Y>p0E(U[Nɘjm G*LwꞼoQZ'sN9[J<0Vmoc$!h 1X\x(mJU$/wحQƶJ-46*RomX nZV$@ÖETȍD#}>x&:zs-O#|&%PĩS+{9UmR+4RU'~z߳Md"s;GO߿wɞA>@Zd{{S)CۧJovnc/U.hi\ gf~.A}+. O`x4>S/ϟ >.揚? @e>,t3_cGcX>O{ZéЏ燏Y#Ng]J!P@xT @xsn_.Pk g]`j#<<7 Vme@ rp fͳ0rn(03}RN7D1ς a_$k WGrB6{x8CK~jf5I , CnzSvwlZX#d&8^Rmd=*AG}bFZlKw=Q61H$+ 2v1{'7;1p^y(ED qywϵ,p/OaW; ǫC1@O_F{AƯQt} #afpucirG2( ^!r>)@cm>-OS->ph.O~lt<:?|>#쨌z5Tj@,O?.@\Y;Yo}ɫz4",|P%YG6_Wll L?Ƈ{d% כ (qᬺz<`X"f@4C\:i+ֵlLjQY{Tt`3CAWiE9sk0{>_n;!@80x +!=#Q{`mюluz a%]!-U~:i?_+&H1 K.c@tws{{Bqe:f PPVL2[v5$mc΍ݧv3 ەBoc+n el b2PbXt*!|C[CݞӠi\#4!䞪y# ?J<-)ć: 'i7֞ZAPp؈kڥ_f2a`: Ab s\h@ 4l7iMiWbj\ZlΧ K uP:i,A.Yy6+o$!T%LTGhݡnq; HL7tGcs߶:8m`UAO{Ӱ3έƑW ɊjǢ# Z^yG;J?ڑ!A} JRy @Fy?53iDLw*wk~+{ԷZS У鮾RQ.9@N:(xd[ȶxΡ xZEJl2V蟤ZGS p$ ǫcy8>~pZ`iO₝}-ۡ:.Oe8KfqE8?TtoXnsFlsi+hDp£s=QOe +wxrV%ԖV`懷&xv Lo7װ{ӷ+ؙ8D?~H=4 <ßCfVUoZ(ronp=N ۈgmR,Jy ΕU=l\KhcaŽiڶVL={8%x!?c냜[5ƃ`?ir\Z4gekR*=|1_JEY0 &4j[ K3SO~td#H"Z#X) /b5sK7\E#HRhB`T˻>I6@PD7&q*7*5WvGdLˀQ0kA^e{XhݹQh s|Gè$q>[RRM,"Jͽ/aba/PZNh5V瑋<&R8Fϲ{%ku?Xt)2XB }[c@HڳKsв=1M&FeTG]!XI"?cL60.9@7 rӃh,1L L~JΣY򂸕e +[Y'zؚ{auDghh6$jhL92Ef-(VxۆE(>3rCςV)A}w:{a-ut)$D^NWѦJ^EQsBPD|5eI ))oϚGU<; Dۆ3?7ǚ )&GYF "t𖘪 Z58R[, t":o`l]C߲a. l'~Q@{|IJZW1| %47uVu{pEg=%.ѱS6ܝ*<rк{ P([lTCeק#gsd{1%XlOwu @py|h BMS [^@W?N,ݖ,-c92ŏ^x-V=|{4D¦g+ ekV \Jh1+|I oKx\-E4u.D].е ˆNt╅~;+xp<$m\NȤkCwU={ߩHcrIϻ{ֹpxUY~ooݟ6ˤ?ٓtWư9NvC3@}u/S쁩2s\ @/tŵ=k-dǫC_xh2rͅ:>%?]ˏATݳpyN]?822~"{rT8OxEz'G<称CNefD<)AJ3%h{|&MS\—s|Z襗|| oW;?.'oa^B{?߮y`gg~Pc2/2}=P4D澁fFVXjJZ=T別ަbE*V fC'0z{vCL*n5z |Bǁ(ӽL8|KOJb>,tlϧ9>FAw)sIM|3l%{l".^RzBdEp9"AɁ Վ S3O65Aѽ)nyË2#C" =b/?hOI!r8ȆƵY&lXHb7 ?M OױEHV2` 0ij\&ªO0oRH a.i mbH_Z4A;2`:F]8f,FT(I[`/ӹ=?7&ӫVJS^C![la dˬ)Cuor6,vAE~N,?ƑqdǼ л͐#c"ylJy-]UH=O@b;4ׄf{\L1Pդ+EbR?/C mbX]Y[Š>$|]tQ㒢ono`$J#Mo /DޢgPS48^4zcH4ooN{랛sLu鮞(>⩘Xǻrr*G<( o;==0;v{jUe>cRz|HOv݋(2_mux _kM<3O%դG˙Ty;Ǡy2L?}8T=~>ON2YLWc9s-/s3|?nw:,s?g$OSiuͻ9E(NZO4OlO?-|Uz}|Tq=L̟?3ƟU& __B/_/ezQ2wO~vocfo2Wӭ|Le,@-AzXǃ$xϟ-#$].oT- 76dF"F!L5 pƅc2#{E}^|z`Rł^2T73#l1!/#M 6jRp01;!J^0 cXp4z"fw1t !B9 cz1k["07%L16.z[ C6o*w&8;cmx|34 o}÷EӒ,x08Y.lr rSAGHp]AكY%_k.dPFp MgsR/>!W%+yֲe^US=gt=5RRbe7C3(qh{p@2Ð6>ѐ8ӰqtxZvgɱ@2'py鐘Z=LAntC{'N9ɖ4-T`wOIdЃ=P{`h*<2s(9nPDF{{dcq,",]WAH<:E~ d͍imԳUA~ +݉r"Ŗ|k-?A5C-u1 ձWqpLj(`K&wo usPj`ry/TCt)@nx:<pWN 5=h>gwH.'vck2=̪|gڼ #;-cj.ɞ;wĺo{`+2yAd?NSz>ALł}=^ͯ႙Pz̧Sty  ^tnaI2=]dʶx4<0ٞkM :ZX+:o|} bR+?[.h8框k&I;]>OE5NZʳI?IW@5(}r*+RŸI叫碄oA"qC|_5l{C߆-0Uiyo~e߿{~v@9Wu#_;__g}^g+P]0km_ ,U6ݖG[ڱTP=% 7GkM8Y !.%iLC ?ѡRClc>hDDžCBW;iIX (/+QKTxuoG[CA͆oSI|Ş| ɘ63gv#`6Zh'^@|'a!w!`f>LkM+WLHvuC{?3\/a*W<~[;ax9޸26\%5P<ޗ8$eTTċ67 h8RAOEF_XXW1q'ٷr~[ t?B" P̻>~8Ed%>&> Fy4>:B-ǥԮs /P),ß.Yns.g^`^j7l yA&3+xΓlʸ'g)AS{r(rzW Zi[g+vm#}2h$-׷D;2&f84%_KjIJgt@x<-r{ڥX@M &me [&C! uC\ޢݩM;L *蛥XS R 1v1;B6s 1e6i7cͱRր-JugX.y3Uh p.#ו`C3fw\3ǡYXqۍާ]4,j`Tx@`d;YvH+t[ tqpv8V"C䣋z'g;Mı\>p\<1TEQqRnr$+r4:4eo9yk]t>اҍj{QR:&YF9Aiˢn 5vvܑ p^Hbh)+Õ MEY꠨=wO }]SWuvʡAQ%|p}ZU='-¢ >.*w`l -p(Zuĥ`2vavdsIֈfs-/W*Q6슶^ZoV'{g頬w]eZs<,ws1e50=^Pdzw2>Fz܁3wgG.<_T<=.e&^ׇ p:U^ {0hȣ+c?|<;XsQ/$4R}L_/m_xw/Ln?`gwK> (^ z(!Fyom \.^O_%޻yA>5([rR>@LF-ɷqߢ/%N2Ud6.gIń0q׭ɔQ&b77]f5K׋wf}5P';ocMdZi3M۽f)ND@Be/Oanӽ&F*(%?- pFZ? wc^=G*,V4߶tKC&2͸GYZ-v꘎rE8^טA3Swfd]olfur" uґBׇ wWp)Gρu\ |C;V*Q jм̯hNj/  ز 0ӳքJR7”{^رA5zD}CwPfd\坢rߟD v}'d{RuY8 7M=juτ|vwk{9s%p<ߣՉ >>J<=YH2UbLw!nx,ﻋCz>?^P*|̜8O #/s}͏#2@O |IC{P9"":rm {0w٣㙚 /ig+/?R-? vO]i9g=u0=:W$ءgèHITwF̱~5HR ^+YjR=@Sc݊!|Sn@?E0!a SDR߄Nܪh;VX".):PfJd~"ì2b f0RHٱ(3%7Qt-I9 puonq gw2hs|oENe61wf ѦW]V2-_mtbohL M5# Jol) a"NzqUt7aUDupSh%.#1Z- ۄWI8:ѭpmE7W5B}P'Etƒ J&'/;̂"ͷ/p֫IK\w/w rRxa@uƄ "l3Ksiʌ2{ߛε'C11 pAsYd g,$V@myKh%'3KALy fyiץ|~CG˗eWq ? D@@K"v&\CEI67E'"m {QRĖG!" ZZO @P%4=*gt̒.l8ȡppu1 Ow.A[5kH}@0Jwcm"'P!Hw!_XSK{k\ 櫑8ށ{&޵+3_5~xs;.9lhnx$Tt\'aZkO@}8N\NǞ֑h=\yf&A[JU\\м2A/r_E2/ W-RQjy?-U}E}@ l/|>ut}(].깈|SI-?WQ?H`}'sׂIE~R|ZeT$d{KghQsQX9(O$Oa4yA+ϦpP˂Um[gw@ }&km6a{(sܳ+غcgVD$ĜȁFW23 ; f3f?i߳ ˯Ǻ͏ǭ4Z%+!EEA->)t 4Fi(Z=UFXd%80Ya9PbLÒ碛}" HC%7.U1|Msjfwn9ʭ! 3:x:%م>@Ӕ#q&D 񠖈#wio",qԟ/iڟ>[&TBae;w. XpW.oR+}B\{Ztn-׊*# &̕V[:vȉUU?C>^wHTKK멉氫] HI=[8M(DN=+sU~8%9uo3 0[i褥"0PL}AmB vMNrR:UY>$뺫+8:~A!RO[=vܢ 0 m)na>۞VVs,6T,|оD o۔&-ǡgd| "Y,:=߷$Tc'.AIDKz"kr=)w-F`[-ΗC%ڜ['FyLo&!OWǞB +'GNw mK<4c޻N5X7wl>&f zFox'!\KNl58{"?1^`wr5?{{d-n z$=__hͫy-@qu3Crdxz2=wfȕ<g }b{OyRA^ԓ_DqEڹf ouO!-'){Z{|90˗+i^?_`2^`9Wr V“Q#w!:wh~z!7w~{6,/_'ׄʞ^nJ,NY! Kz,:F4GVWaʃ$8iDi+Z~Hbp Y ےƏ٣lLǜ%3'(q'ͧے?6/"\݃BF =wLG+~C'A%y)UZit(/W?t lK]v=ԁB.ڋcΐM_v&7Iveeݥ\&>V2jq1 Sҷ@e@5pCK~k :#l>aX}5٧nH N,K@ CFoۛ΃!>$4exR`4 ӷm1,Z))АyFj5Qch"53EUO0) 4"z'@6i趹) li;4 )\ Ry')T>?SWJ>\-RU<.J"j݅]׿^DEq<7j0_n ?:m#Kx/rlp'7>69pPe2 )_m>C>@O|]~3ʻ3/Mr/Nd7K{W4^$_^}u;4dM7jywg)4{0ѷ#s2Ax`j=Nwqus-/%±ofz?o}~ q0@oxؗ["{-/aCz+pyd=}jyknՑ~nz |zLg1 O`.%N26/#̓9=2ϺOr?;m^QxFy9ZUdrY4/=0{JOJ+wI(NEM@fP.`PP۾R\ʣׁ~*{+oayS{FBwQ,7[~. 1ș I%pF$3fޔy>OֶO&0?\{y.Q'-8RASxrL:AWZFrG꘬S7퐺~A ~Hwe}%Y atE2$w{if"` Y0MSԹCL:xn B"zÂG]X6-z OÜQ= >){@ K|TlW u3hA?7E!5J3DoOTsq0+EP|L%.l jGN[v~ zW<af~ [AdS-S#Կ{kQ~5\¯V7{aԒ!ݶ@O5F@߰qB+DxNā,՗Ÿ/w>EhR }~B0?38`Lɍ0M#Xȸ:$1?^|@cͫ>eM5A+vg{}l?W yݧbvn22)!?o[`":=iKraW# Мwha@kD`D }t̝"hZ/E.w}x'}Wu>\ 밆hG#RwX o-(xKn盘+ޘ/ wkyEyؖyɠ#l1wUE+L淺mPj$)Ei=?P2#OR_?j_Pg#}i>]g߷> trZ/kF0Q<#M_(q1ϖwsH_Np:A?YISoEgE==&S1nDz?]hkY:[ lrJH;_4䎣R"۟# :ǹNSK_7W<ߞdtIW\$Ι`sKvkx\aƄkOX<_qzb T L,Cq@j2jj sݸ Qfo{jɜhxw.sJXښ͗i1 5O^H$z+1u*ާ8*1!΍SH8е1cģR`wD9aE\oB0wo ~'ajz+E-BsgB=|˯FV,VuLRz*` qwʚ}\"L()H7ͯ_?m1TƩ0͡їLd [ B$C@w->UowtU_w,8C{"ZI2Ge74բN=  . VJCK| L=~ݸ@X5qAR4!(@;vj5ՌKkX,u|Äh _]RW+|CݛG_`})؝Hr5oz*1F7@kyxn| N< w'9M,h޼#v#$]уߟIhTq ٞ!{`:A0wq*y2 T0OHu}J@ {1ʓÅwʺ?{/s6MGeW( Ng^Χ}iZϸ \ !Px'*e$աHO*9>Rͭ{:dҿ<?_ E碞fC`7KP;_l_}2TPcsskr-O'9Ie,|*Wg:V?}9' ||dܖ/b&xT}^1WʅD.*nE_8ŝ W䳧i(y0%>P,].͎>*@gH ϿWd{R psR{XO2yO,2ƱctS^V__knpO&|BGm2'f4$=U[ {u{F)9oUCKR@ҽLqʙhǝRaCg4UJPs0VY191TSוݝ(]'Xtw7< Q,YoeJC% bձsA $0%'Bj3)/!Aλ;/vnm5kL:󮓨A\?{GuZngX`m_}%#!$Ɏ#Y8ʟ{E8h\ڰD\q˯wOݩw X,^nЋ69RXbn&LfRC WMpUDݹgOkGz؜eζfW6p`DbnԳPZ:F4C~CIsۣeʦ-\*I#vw¯<˹gS?T!b~/np6'}^wD\͉;_;¨B?wíw0߳ 7C{};ԅۃI `#Ta@c0u$xy.7K{ݓ8z(Uad"9>ַ>xb=!\6L&]$t3ǞA%>r[q"cVEߩz/QgRj%joy M~-q#.|%.<ݕ!ghANtu]m-]A69MaC^Pg۽riBf`\ԋpUVIy(7&=n iK J{gi>t܀<ԆC)\D]ߓ }clЇ Bȭ <5E6~KnBk&r%!$N΃׃ӹv{ vv;L{{x罣`|rc5!Se5^gLtAf3nb+6V=5z-p:q;CV٩k=t?GQ->X\3 OtfV/EH^P8^|@*t_Lpyğ\]jN<|;Wf¾v k کrW-2լ7;ZHJEdt%cQ`˵2#r/80L> G'`}B^(jyu8AȢ/}:IG;3,9P^*ekE1>+Ė c4L ]4N"Wo@| +]*aUDž^׎jsW|J#slu½;ӕ鼠OiOlX쑤lR~»4 i[3! ?u6 /34_nLYٜ~E)TFj)mSr,݆TŇm` "|}PJKs+{<qWͲÈ>~VM5uㇸW!R8] EysN5HuWߋ84`=_oC!v{aoղM#Md3׀`m>\+QcY&vזŔ Dǥ ?+-dɚhqJO(,87C/C"$p@\3QݧHoxz_(] =W`VA[FWR=Q돵X# pIvX?Rԋ坈uºߕXys' cb3{k&LߓI*;ClyQ8'#%5[ޗ#~aBAJ|Jgt~ \6w5\-H$}<t=1 OGrے=ǠE^%'2{xp"җ*;ÉVNwjV|>U|O}kr! .GU9ߟQ /ιA?ɍEwCt#2^B@l;i|.C28Kxg2+] I>8X)՟mG |5j-mE<;ʣo^ԣBWT"|^,.OmNpSEŽT")O~!91|?4mPIh*`%7xb$jaLy]O2wBq>19ln>aq $ Gr,(? 0mFa&^"󹂴Mvs+evB5iOYt蹘z]}| uJ[#vWs&MɃM7*|H,xGQ޽s,*@HO5($c~oRa60s @|&N<`rݭ-Ըn{a10#Z!] H=tt cin_0S!u0}F0Eu6l'w-Cΐ14#O `٘'SuN !.ޛؼXd?p=dJ Vo_cubعbrH?$Ŀ{} vPwvÅk [vK|{q/Szڑ7C4/ʭyyֈ'N=sJ$@Jz_ż^4`%w%VʝQ|eOԠ)E"'iRzk\=P}{b z "=P-wGxrY+}yDX&]W!?9ˉ\Ψ^2d>Gu|3_IrrMIcvx9"},p9 I:ЮǕ_3 v0Y,<诬o Zf46R6u^6hY=$ԍҨS|8ф@LQoo9fHզigs,2grw;\`յ$/0L?l߈{7-C}óS& c W8 \sZT̄#NVMj*a4~U}L&`_B$`gCSCliR :wM,beIp6۷,IΟQ!X{F6R}r 4#5Kh$7U3۽kfvn4"B'o lg<Ş` -zoل)D(va+֘NL6\&m;=CRq?=DRRמ J/a-4s_=O!\)Eoñ݆8ʜ>TuU4tr]Wo?zϊ){@0#a"xs$2I wSw/o:EMŸ)HIdps@. rOʧO靸!;1c=̵^K'4aݝEn {3^?W ;ZE8σӝ$o#=tG{Yyc,竂@ R oºp:.dׇrW㾖 >p~{b {e\ |.EMIvt|gl㱴ŸOTy|x& '0kg*yhyzY@EA+e廖'Yr iw,?sY '.XgJ<9]D!"xgV;sJ|M k`=kờA uߒ=3Q!/%/ABNz a}_ΈxSa}z_*I&C{:7hGQa(Yݓ,˚ ~pdv thk]&yJ7fDAss0"-qޖ6lC? #v5KQ&6}!'@Ywcn?GG[-(jy{8e+(V Y2k!0u erS&˯&j<}_PeCl0(/k>J[`>; ݄w%DwLr9p&VaE`My{$x>';Mr[lwc|;gp'߲#@wHOxbp^T_ PxZb;0zxHޅ*g ;;w{AOEyo@~|;?qdV^if Wjw.F7r'0=d+̎Ϥڻ{~?pdW Ԟ}cb/XGa#Ec3 _,bWc3yް sHz?_ݾuT R5SU瓐+ ц(fN@㉮y;;{InYߒB#ݱ4X2#em."ƲDxy|9z">wѩO}ٔRo9_VZtw}"tt 4m<|W-+ک(ge|U6ތ=pDBX}BbᏤS4'\r%kԳk۱ pUuɱFw GA'{ fkj,n @:|^`5UaatI@GiZJb x<9=I}Nyjn7Xn9G]bA-gޙ{ Ĉ.ww:ߡZ~>|֙2퍛令TޥBNUtIth.Bo}JA yXC1Ża׏gWui]}Z XS:`u5/ dTǻv7H) B&V'}P6siZ&ӳ]tc&zMk_"0GN Dem6>βopFޙ`LuauYL-?|K- =dz}-ceXN%>8bOv_iCF$E;Ž`!v^|ز"yl|Z86hnCUi-7D[>8a>Hǰ=0w. W+iO'K\Rh(cZ$xgU=C/@w8G֟VkZ|{aHE&^"]δ"j-E"MBJjR'\z!e+d13`;VJ7jPɴO9f,rb#o_[<Ɯof^9ڝf@miTk`Mۭ~&9?8䝙/j\t);si%'WC.w;{^6<gƬwnZq'M`El}/ ~fҿR;NlnpiށkCIY-?ޖr:p^) O8}g7ZӖ&ەzQJ2ꙻ/Wy<6i^q KѼ%Ip|f}kqc9d7Vxߐp¯)y)K|=%<%ҫ}%^Ꙏ?ܐ!$nC <\;ۏ? I9/iyw<BdW ojB'xx;W*ųjix *'BJ/kb9Wg=1ӹFMGQ+NWs>;l zb%w8_ CY5#Zd{QlXD{O} ;Srs O2} HKZ:MEǸu|WˢntЅaU1];2mMD$"LW^]If-H4/ KvsZNj TM;juҙ&jC w6! Ne#!E?EL(BKo:/P9 XK)"7ClԸz1̸psUPnG'@؅KHG^XwI'Rh@ 87Gh:l-Z^91n7m?1mz&\ӲO kk؋mg=s.u^w>/\ b&/kmVHfٟ2 xήp'zmQV0>'3,\Q(/3s7Ilc:9s_&Nr4dGKx^2ݏ6TCF>Lꓦ#J? q^EܷcMrQ_04^ VxJ(:NūZ8!>V[Z y0#=Y#5]5d -Oդij"&tDjRy ו}>?LԪ&GktѮ:XR¾$uUm '60:6XE~saͥ*Ɠvm uhG~tp@ 9M&[j Yl6ˎGUo+[9jbRDOa{WrMⶾ-Q-PnG3i&z(to,XS(VY),oɟӰHa-jdmQF^WGX{.?AtMYN',ڍH饪G$D˅fW?Z% z9owu t73q)&=f&=-#c$q"yߟ默˔FyyST.9ܱ2_vY]'xߐnFn^!VKn5V0S<0ƷhE |KmO{QHx?%׎c<>r?_G%U'҆W YBP/ϼxI H AB9c=A3g=?]k+/;RUQBZN?o[I#xVlӬ`R~~Z槣iRo}vg4ՕI4OV0<{oq Љ?Ͳח( e"8Ka]`GLUVz D%b0cv:•Q)^ hHBfp|jx薗5L9k ]:^4A[,M[=k$ab'"jJVK[/CR{!n_tȿE|rd@Ri,ŠhHk+åg 7DžbN{ɩ'/!ܚF@ }ø][G[XoRfuV֭b\5-3],el?~t e(~}*w.q^^k{>W߳ҌpKM/Wj8r\?/D`5*/-=-=NkSt:,rWEr!v9V\ W SRN'{HBw铴{AP@BtAng7|]#<gޓy.bEῧxz ]r6dtdeK5uYl{#Ta{cʞ = 4׎DFp%E~TAe3-&;"y4ĒO| . reS+QS/?:_C&K6ttSYIunG3l'[?)k" loE PcfB`W鱗$nu:tDo)bɡZP1B+E#t0{lO|CFE%ݨX Y0Rb8p0a;DDpJ훡m@LkMbd8wML2*2}ń$u-' Yn-0,ڠ[mg6lpVe-V- &SiCz#xʹݴi幬oԍ 0줽x'(Bț II*tmJݥJQ#^* e6pN 0ݓE-Xk1_ !dQMb"edi߄o(#S{©!CfHp}a(8N5ňaJ;÷БJiBͥ^n j!1aD[p01X4J yhԸ=[@@T1LK*9oR"I(pX$V\*VxH&6y`6/%6NOZ@Pj3%nWڳ> u8+bF.//xv0ӹ<7^Cmc<hO,Fl(.Ǔ0<W;_$5g`rI\~ʔoO\QǠ0X(Ƚ\:e{OW٧#1eud*0u/;Mh_[o[=iKr߻:|f̓ŹUSKnD&6T~k|mKC!&+j91;'@iX*b@8od*†O,7 A5 L׾C%r(?8`{QݶXOR,XK@^7Q0#:z,ׅ.eǾx kH/j 5,-sH5J$*S,m+ԪYK;-}ո|Q"_3 Rh$مk>I]ip9rG|׏8 Q)UPŢ>ɯBӨ ^4v~u S')}>royV>D}\0 -e[k-_5 O+jGucƳ>izwze,] zַo?mzzAhF7?MgdW Q#HYX# F"LP-Eɬd'auT|"ʑ|zKVZ/<+!>hLe!@<mqC܅jH0u9e_)%쒆r ׵Tj|A.#7/2]S #z-AW W*x&•h<%DB؍jiGzB? 8w=w]$L}U=x_nw\U\.뗻\Zݞg-ٓkn>{)^nΟW]ȕ 7c^E+3^ݙm#"e[l>{9ݞw3 r\t}-B_5ujyG(`wې= p7dz/I#y\n>>F+B7e_p%ÑfM2z8ܔpi|(*H6Ro29j 7eBw> _Ky0](i ^$ |ؽNd;by]ڱ@fO=Q#WjO{=;1>ѫ򈪨g#K}<7Sq(kT<_9luB 97dDܜ |8Kbּ}?9>(x&`#P'>- p/UMOcbNûJ㸁A5>`l?M++5YO]+Mjg$F-\ynX(… ;=x9.BuYذLhT ?Fܬ$˒yREr@w%@[vh3@V~*cYKD[F{^ ZEn95ִKu(N*j@fH܊5: NHE{6A- zzCbaڥEŇ.Q؜]ᯝ4*!<L Yt9AC)[7魧 52ݯD 3J|p6+ +,n9} ߻WRV*'ev o='ی{Tx߿l,OpI!QЕ  sH%ܣGUrE`!aS JvJKB$t k&M+ "x9z=Gyc$s>A'O8iaGz|&bߧD#͏h|uj.7J>z[k]S _!T,àMGXNĴ`^{[Z:T$JrMd."luM C/!ڷR^,E b95is9l9q1*7TЋ_|Vjdx!z~zãDbE<(_tō]nwu>Ms;r\:4nvK /Dn}9vyّr`ʮnׂ9➅uP|NJ9f)v3=coxk\>T9N#,ωy$<|\JA|}d狣Gct~܆aN_c.;m_`O=j'/O7drMOGXK`s%|͇ٱӥ}+N?9Bw=UaDEP|ef忻Яf焧$SgNj;@ϽDZYZϾl3])ƀ9|i3PW67Mu=-,p~$BBOU0)%Pu}՘]˿C5D@L?Û ^KZԒ\T(Mv FDoeABl :DNk%dm7 Fݺp-!U6q XE(.!n{:3vKjf']jUPۨ! ÀG$T\%mý ro~B6j4=WqMՇ?LaR?OC0FΓ8BPVh13=B>ZPKmYE .,^J29L%q_0 v֡tD:A] 6Aq BXN"i&YDvo/:>T6ޜ%ߥӴ T.>*҄e*p3L$sΌVZb / Rbt}gQU<$<[!Z(:xd 5u Зr 1XWW?h`-uW 4kڄ4s2]C FzyY,,❦k€5H֖c:6hRʤ>t/;  SYfr?guB &Lyd ĢTAkƵ~{Io~n4kU$5gx\ix?n2,9דX'>/cTQ/X=+r]=Ow#s+v ;VҮwffEGDFKzٻ]<?E󢚹Xt7N7 7wŵ2_91%G":~K5^4 (ߠ0*絋b0_J7ey;U>cyZ8XuOHȝss \Q9O@н/H6H#}5x~,@\әY-`Ǹqx>Itz yyyXt`[o/~,i|ǀ%ʭ8gqv?'OqAX<Ϻ>jWC_UKeղIЗ@)ycҁUڲtVĭ5ܑN(})kem1KoL$(RÒ]sٱbgXzUS0uk l5΂J}xu%%ELd2l?=&ֽ1g3QVG{;ͅ7L>b!"v)3V7oGǢ6kTBK.+13 )(j Y<ilEu/&Z𷒝m`X'-*^"Ͳ/vBF)h܅:~kk4KgQviN2އR仞6I<0ɖy էhnQCL`"-ݣ֦!.aJg)T`[ZK<|ŕj+w&S:ǝX].JcQkH,D/,4M.,/4Ao;oҙ'-iMbKMQH{cAF!)NlӗRt9gQ&#Tp!!k Z-̦X?dXJ5{,VrJHwg,=oilF?4 G6HG~ HҿF MBa?BCG% n[fK3xc2ޤ)h IU.=V?n珈 Fϩ]x` ɀS`UC;(.P^dLb`+X:sqT~G{ovcy1חq9zoWs}͗Dn/-IyXQmW0nw@y8fUiSt8xL;}b183wROOn׈{99gM"7~_8@{ܿ(Ta~~y7čsǕzɂ|vvcOrL`%s1 mOβ'aonOkz|6on{e ς_L73qNj _ U ԏ|?/3fl]RGϲyXe=xR~${7ߣމ)D\"h_zA8_ ?9̹LE6oxkXD}vޗ߇ogǟw{?>~g'C]C ޳:;Wٱ JL?wvxiq,UG['q|h'eSNSخȸ)'.uevFWմI䮱:w0ZP% \)F+{:-T%I+De\T@۰hRCPA {/VTr~XM%p\UR$>m*Q$nAgH%%-6 Xb7q'{{hgwg>lNd.\ѿ(F Y݊1]vQ<&Rƃׯ|tՋ-/dK.n6ԄNG7`J]h` Eo<jeRb2gІ]|r65Z2j«gPLW[Q2e y= %ۀ} wQ*`k{5>NZ9b5R":L%|B;!=默rsؒ}RdP9Z}W ]r(\I7|Jy9F0.jG _b @&?+Yg~D7coeQ,֬g[r:Rtωb;&u+x6 v;Bo޺j|귘#wb?(N?sQOwoRN})QrF:GTN{K0?HM=oɵx5~[Bh~uW/_}9R ͱ\=QMsNXzb5&˶tO/g{2g|"d?Zim)+(BKف!eN A!Txr,ixqWhzM,\*&=oF zy$k+iWV?_jXLf/O錥>]|qH(gO?^|HFưߝ)S8X{w° ުnߞ}$u%POS83OF{+m r:[Ծ.GP>XwZRth+ēA!\#͔-}&ɿ66 MиNcPSJđ(J:IWHqMZhEkMka$L@C'Z.[d14K5KvĎhSK{Jn\Z/-\vꬪW<XJ=KEH?-k2A-[@K[P<)0jy3ޜH,+-}d5 J$ze1V+ eVsYHHZB  ]c7'8Zt 2ϗ*2enʱ 8lVwO489 oi`*. `bQb``6JV#o)=F3YlyⱆA3m afkFF1ƢMY2"1zl^I("e9 z*Ɗ$R4aTrKA։!Y_jzhMES^+`nYr+GK[tXJwRLjv*UHz"nb˗vص| ,fR>3Z!| JM{E~,]YRYPP1⹇ؕeFUX< 6Oz 5Һw*3Y%ùFlzCv.BIoiߐ|mr32b0!%%o?i|J|螶t<@W{T _x.hiPxc\Frf0·b%>}T/M/v9ȕ?_?෵AqWzHܽyHxtϋ mhWޕWv=Tc`5Yȉ&g|M7k2.9gsn"%po,"~D ͱ.9f e>} ښ7"w}#+=B<̧H4N̴wg2w_e/?r#YM;DU~U=FQ@ KV=a~_.: @<{+} w\JaKDzsEl٬:dWMYZ$13>8gEJ̊^_ɱueRW⽹rT)5T} |_ucfm)?ziR^/ЪK}S? yS~9ߠˣUGm0KhMܻj9 ,Ft@&UŪaߓeJJs~: :;s$0ZSo`!2g}v3YZrw5\w5x{sJNp:'QՀ!yLkirsjRPC݄&Iqv#Plڙ`?%%Ec)_neYzV5M' -uvFZ.ʑ܊ ,bPS"</R7A%h%ʴnwVN>ic Σg;FK{TX#a72Ӏ.⿬!a(@'EJQn!]U̶TQQ&Kyh4)dNQ//z?߻#B~_$X 3N׺`ԣsͧwyX~Zzy rŮ̀}A4Wsѯu/u=19уú]ޫu9viՉut ܌8Y|SE ~4.Gv y8O{Ti|=};鯏.i9>fSƩǛ09ؖJXxF[dQDmDϏ!>^{1os4z.*fϕv۲q|==!)yuG6,r>|,5||pk=n^>#z=mOLIפN cO|ۓ!2|ȝ ?.R@wF #_!q. lNr~g4c/K7'A<~; ׹,yn~ʯI,:}Y^IQO&{Yopy$Y}^/4BpyV㼔џ{ ~Qn<^/OʾCI}8}K0!8^YFcs_l#->ƲB326 ,eYo7/RMɀe=TfT 3 t@fŇ*zQbWqK:&aICA3=R;/y={8)O3N>$i^Y MF4A7!E0[ʌdH;Ͻ=o)nf)7 㲷h_d\ҹҸs݈!Ie: f<|Oy;{;G8?m 6aO;kn8p%s٨tXLBӼFQͮvŠa‰h@kj]]@WH j׊-d0i-}WjЃ%u'a:)0"Fef30*uW)]e)⠩1 pH#!VF"J6ҞDw;%wDX#ÍkD<93$`d|8Nsfj/Z&59{uUGnbtYvTH6K.@.J.53Cq\)Rf<-FȽJ' JtIL9]"ȞR`X\ c_Hf)_ʦ>IxvYLWǢPc 8xF)8$~éV,x6Bq1S#S~Œ㸑 NAVpv.)Th:6w_dS7_D!Ja|86w_AP vxk+\\e4\gZ?c>>=T7Lދ'G\^#^I|[ ̠E4\̴ pٹ>\dܠyC2OGM\=}҇q-QaRN>mhҔ>DC6yAB!:F5q|%Gl|!IBeqr%fvN$}RlA2BXYBqr- K13П {N=i/$3Zi޾_ l^ې)^IvMQ}#G8l] rv]HB‚-?77e[)ϚZhf_D4_0 m ; \3t>]gߡ16@[2m**]r{ط\?.UYBAJѺjʉ1XY"cy[ X70W^FSۉ}wQ@ Zߘn /(xl2qŁ(@-a VgKFT9c,bOh4w76h]ʮPiDFbKl~S= D_^7GBa=qaNA*v% tGa.89p\ ,֎AZr F7&^/Uw"o5aU 0,^c=hǞxk7,U K,w:j~ug(y'TH ʣt~*Ǿ]gZVm cB$}(d]P>OQKň֓`,n ||.wOWlOܵvOJ=_:Z^k+Y-m}'ĜBu+KY PtQ҂.e+<7Gdߕov2`%> OJ=}N̰WoQ !0"<*al_w\x3xsncO-GuC8'o Q4=mz4m *QQjrc I>=4 `@שF uT\!`lYh5 _h 0~.8 ^EXE1`sDfHdp0ە #v8 4Mt [hEXͬ惓=l: 9[MbG573oDRgL}}=&pIMy%Du 8MV0Nf g;H3[pm ύ70uTW(Dq@\,C M3G6E= 'X.:xY\ -2wlP⌃ƌehr )C^qiO6B hoPF `e@ b,'~v`y֠`b˂)P Fn}H8Ma]{^"M M<MtA XM뒽/BMf@e2:y,ǎihhkdWoxS\ gԎԾ ooDX͑d :Ш: V SBF֐]TS ipjM8i8 Sy a>/+s |Os~V:1([{b7y;u"zumO@Y+S@po,a0i]g 00r ڞip @@׃G~ϭwc`I`)| _ סkAw0# xZ2t~ś ca]4ųuT< >*t_f_WJN~#C/:5B%{/ mF {˳DB ׉kĥ}3 _L_$ ^|I=,2mO+.XUf] E už&JtD 7ukelvTۢ$KV< enO P=7o@ӰW0 MQ$UD$}= }#D/Br,L; Z2kEVO! 0'ןU\WH[c@B翪h\ ,GPap*o]a(?BR ^f6B3Պbx. =_yg@y𸐲o7G8~ڍb߸{B>6F;/$BzZ镔.' e#o)iy'(ӯ y%h|%%Iphbe \+3ӹv%%.4HhϭaN/wI.SZ}8U; %sG6Cyѽxd^W,Y!xQSti[pOo^W]FI$9ȂtM&i$#~'X>d{e>JVKᛝ ͇}Y`0-uް&`iЄ~`JXj5uBWps&x-2~z@o{Б׹aG)AYi ‘F4w;Ц1(Kϰ(8؍Ls*% M,lS&Vq:ZAc!cWNz4X;j#=Z%/PM]+!. 0S'Qsz׳B؃9(6qF/0ÖaG%z9M}/: WKq"<؋}Chܗ#~MpF-e0 W- GXkhD{P\ Y-|3B­xu~!:{€ePt' qpa/j1jkcە*ԱP;{ZBŘ!0RtaKCY'9 8"B j}XdnԋcC.c}F_mn9ϣAGA24՝CS{тa_٪1.-JQȂΈY##4ƗMv+<!e n[yaĄ =#ً] ΃(JVx+Gze7*(HrI<mlߊ"h/MXȾ)uLźͬ@O8f#**ů.p$\peuhGT/BcK!h.*0TD 4.%<40mW 'jO v/CSt,TVH%3\7C؈$!KeOl703qp:{hოWEi]Q%>~wd`5Z->A⭅pԤ?a#,4!aoNsZN [{&è5UMBy |{㰽E &*blV8PTRSJ{鲶/Zu| $g_=;:A8!MD~E a Y|Q6 ͕4OF"{Zm`w M?&8z^6ؼK(ӭ-3Xrz?bsP&YnڸfL8V݅%Kho1DC /`DL6uR, =p*K֌ L)Y` ۔9P!{qy@CCtRœB%B+ f9P+"#yzce}0G2΂a )N ELA}2~?Ob5?KH3`ʃ;PS]sfHK薈~{@NfY |ur:,c9&'@Fv),4vb̨v4ɒłchvV'H1hpodg]  Gr`"kFC`PVf$`| aKi{x\ְm5qc)pQ0^ mQY|)wUcզ佖ʾԌ @=t$Bdv7vGRP+{(X.QxC6 @(DUAv`6q}d-z5p˝y Ձ! mA@/# cT42u-!0 !Z j=:vM`WI2Z^,%2^+Da8*AQ]t bI`_59=2lqGRe+.>u5a{)s3u/Q~4ܯ$05rynb(- 朂_<+(_iQ.|HC2FNOzw)ch'Ơ.+?:"cs>͚pyա#! Dg9 tZO8&n$.vgT]o5ֶ;pzcb{w^UC}oxp׽rPegG@fvfv#ڲ@.oc5~?ͥ({(^ꊭjDB xZȿvjd %.oRnk<-Y~:ńyל$r{tvAsE.s]&ZxR b1/:0ߢ9\@P\.\Z] dv̻7ʯ { ј%]`zppy1/4=7 nK< ou,x=.N]$+-D ]yl_/FwR8~(p?iȷΣ1/KU8 3?g `=`?Ou7˦MY.~-~*=P/0N_upJ=46QӰAcϲn;w`~OݔN=ӝMDqEq7{Ȕ!zU\pEDi~C轚}#ghbn] k}s``8pls`DhGZ<&{QԠՌ8hw#GmF愿BwZu4"j-[lt8tV ؖ4!3c':c7 j{8W2 …f)6\Bl񳴬Nc H-nv=%WR<3a8qqjsO,0%c9$Jv=9FжCo*%jS!y牁Xus=;^.V|9ZN-oSo=@HÁ.bnp'`vI}ABQ=Fj5 {Fe ՠWexi IO)>mc x d.klc@:LmB^,o]^\XuZRt k뼆8תa@Ӈez"gs/{SS!Ke@hllA9PYBd2Npq_RPXO-L5 :pq_ޤ,,lHc,K`nGOEv0ʎtEzf­V#u8eă鶎Ua:2½ΫI:U  gr|A:(vqn/g榝c:؛y+̚B#x2[#)Cs3n1H{GJʰܿmy: \oYZ'y\[i]+g(Ah{oޠ^ !,^UᰐKޭ^;ŵ8u@l4C2]^sa>sr3y#58,GgEo(pp:|oOS GK/xN5+w_0k}X_@zϫ gCX/>*_E .OJXkkcM0.R&D3dpyZ, &𴅚 , d>˕<ȣ^/Z<$?VΥF CX~RޯT.I˳>a+O~ۣ g'P^NI.>/r랗S|=S" t*od~*y>d^oC51d0E2A~ީæ._j;GivFǞE~.bm.:n?1vyw;O%8JݯVDCM.s*~.PVgQh< e]p!Z K<a+yB߱@>v^e+oOӕ8=T80{yi7`o#20\p;t'`Կcv7:0Uy|d58'"r!u &~am6T4@'Aڵ.*;bv#R4R K^n2&0ϥ-X-6?soV AČm~x+R2P\/}|Cg5O@LkziX,e-U<^K`{Z*`~!V:/tClbw)CH6W_GFt1 ,h_Sn!aͺ8z#+q2\ .h'r:X>"_I$i*3~SFWɹ v@]+WbGS@eז;~$ ^iZAU;B./:yr_ Ooe@Vx|y –Dɫ^WM_ '_k[^_!UqO0Ɨk|C.V|q_!~SZ~uo+Q=36$y_^(?-%^j|Y-A^9W5Jݏ). Y}!_s%Umq 8t͕\UC{L_DϔDϐ^g ('3GwY#\PevT'yǾokYB򬯗ۯj_귷_enňR^ ӾF?MnbޝK-̢Tw^ag|\גr%c_lAb9\ON"<0J0D_H|J;gIx|M|PӅBlM/RE2w$g>DR?La\mQOM;_ybٌU>|O<$> gqSN/&Z?mN^W|O%}>߮||  tHqOyl>|7t`VPӕrǷէ Jy*v{j >opr2'pz:=^o1Ms|<Gǰ:$B8dhɝߖ^y}yς,\cʏVtXtٿ+|mo5 0Lb|"u#+\i?6 5sm;>xQ\x/cmt۷xz6Y)w!^Dr`gdGg#k;πM> hUJKmEb.Nh.!l:b1lטrG. 1萟C&jt{CDW@ 8{+Yq<{[J vҲʡխ;W;w=ۖ Pεb׾eԾkG?!vڰGWtL 4ӹϊ﫤`"F`7kc:X(+U@k^FdDZ?nh0{yvٰvpɷvmMu@>8$,y 2;8( }hfh800w,^G׳y| NjGbm>D3EއXt p{40hϠ#d p.޻' [`՟ug 7ew8Uk;,{zᾟ K)nݮ 9^7Ll P\%2Sk(D _zPb^Wz֘V]_PTƴl5J8?JbPE 7(.Q/<$nZl<|:"aSӟȘ\^??XfǞ4,ި.TWEVy.WRUl*(OfObD|*od'0=*m^V' *(+(4\*y^U_xu!=;;*Oc`; ^*]ɝݯ-(i yp*v~yJ'uW})&AS{\7?|F̡i.I{(:-R%^@yh[Kq}(?)Ϣu:ayXKȚ˾iNiH_6zĘ' sMRaW?58^vJ{Fx}7ٳ센 O߰=q({e WgO^4>|[V>89\c{S1UO5 {d =]"zק ~HwM9mӴ#1ԐzzEّGx;үxlL"G^T‡vWrn<>oR1~ t^ m og^ u5{al y M >s0[KRJs*>k x8w`FB{v1>|L9s #k[ )! J= ;<=cIa nҠs01yE/'5:ȵ`׃hu?RnC{toλ"ʴ1!SW,B`!m\VCQ4t„VW51:NxmIL:pH8,sݭfќ n 7dS-"-,|n`9a ύw{@S~F yh`پ H ݣ#X/.Ji1wz/.ܲXՋ\oo9¥]@pNS'Y.stV Qx?<ΘOڠG+FUvk1~]zb 5,z&/ kG4~_1lCyX%v00I,#T xpOڇp 9Q ,,&%,Cmθ{Ď6MJC_C?~4tq4/92kΠq> .oj`4U'Vmz2>`a>8`B\! {y1+l}k7D#:xMQV.ô'jIP (%֎z /z~!Ԇd -IÕ&QabJ2PfPZk]+v4? `߲)/5ATvd[_:}ҜQKס%VAb_sPYݦVf,%sC;:NteJF\1Z(V],uq6>66F5r֢:9u>G߅Cycw4&؇Pn]3?\gfйrݙË| |6cV>?r*{RXӿWp7g_U;`z(& Oc7FʙlK۹J>\Fp(yU=?sJ;cJï/yESzvFU^}J. g{U$OI:q WO{>U5e^ӳR^o ֳˣ+tE?eZűi1' >? G;*x&Y} '4HT ~fcj;*ȍGvWu6矾Heqb_9q+ :!z8qC[B̧gPuR?o3=6wg υCMmIz,xڎÚg+U(/bXVxyQO_bZ|1]Ԁs)#ڀT}X3u{7FzbSMBH{w!LZӧ-=>lybN&"l<[Ui] /Pi ӳ<_([rr&+/f>]Szx%L :j珻?_lO|R_蟯c%ŊkܼD *Ύ,)<;`E^j2O~~W"KiW4>ttNaC5 <Z2]{Ev$ܲLy9w~:ϟTO[(UcH?!_KuvNO?/NOB0wK[=Kam$Us7 ͻ+% `z측1l=Lfc8=Cu~|mAKr rlo%Za3žfۡgnk]7 wv0&)'z GlȦ5̶r/GyD\G}4N ;uZh蠛GzXp@]c {e6˝ B}[eA qͮi%ᚣ<1-qaKzi}ZĶK>;Sn;3G0PmV>;:ޭ,sC[Ul9X0s8lyG!(q,}=ԃ k )c(*SYkL '%Qڸ+2;AR6r2^k h1V\MG{`Q>5y ֘h0{3Fu܋̳0A;ҌXF_j`>9[(+(mh{󑴣xYp8ԗD`;*Auꕹi,W0.Y|<䈉tcf ,d^vhqƊ?}}E',6aEHsMhr a>n҈ L& =&v4b֎ v8PEnDq P=FUW AGoKW_JVE,B#T|QDE\phA:{"2{vADS "9ri W nos<6.`R #wj`OjwfA!KN8@0f1-ܙr$)Q!yg`-S#6 ]sJXl>@֣L3E=65 Zu7=h.܇OCS-]m yUQKVUO;vaa5?HZTMPOLmq5G3wzŏM?j`>Ks=: 5 qb$ ^z{loݞ i: jsģ@/OH'I ٱ)5aP^wǭ x ?}_A0׹l&"f硂3e .-I@oUF2fjq@6YӦʯ%|[U pG9 Y+X!*UMc~tã.ߔ( ] *]d*+q-\SyJl=a=7, p/7*啢A'+/3pe"8R?|H|pbq/ՉnjSpp OKCWE_Nq5w^ 3$xlnNV%A^ ʓƼ*GUkzc@yB'"V+>#tR`{(?I;m|О1}y ޶(cO7.;Q#mg26gR](ֶ՛/'SciMpj}h&Ŭd+_0t6~ Ŏi3Υ$& px(x{@,5'ER駨><U {k:΋Cߋt>4BmK\3+EyɋVDOY}Əi9Q2s 35hS!㗒k| pyqȧxiP=/R$ڞ5֓V'+V6G;rȧc5F6ϧk~ i(4\zRATnXSTU ^(_-wҦoi]4t^~9<t^#ỪweGU?:=}{y>O Hv^q|/ ~o;bksӯp@|v9}3A[1.qסsgWS|a3Z2,FqҌmBE*68z8#U(PI]CwikւaoOO 2M6B=JM^O#K RT80G0H+=6 A%c;ɔ(ȢFRPGќ-aӽ/Bz?>qs2g'̃nLS.x=Ы$$O P~"M$GNѡix7ׂ򧭄{iweJoqSmǞSys:<Sk{{*5VW*-̱Xg(ϖfP^Dr 48UݝzO~nU͸? BV烦8hJS+Ql%OMc pAU _|R__/*^p"g9&cy+/Z~I>`ur1!{IxQA`qm[˦o%[@L\>$IngH_CY]0nr(xg/{g;8o6)n%,w>¨F>#{F q0fԲ>gΒ= K3>_v#& zMqa}?obZ&ò1&N;EJ;ꖰly69Լ#wR"ᛦiԟtGE=o jc0Bp bö$#{z5z 4#l{Ï#Wc nIyO"0RW=5xp5@± ٨|ӞB*K?Nbog .L{Bժ?)`tU1|4DHUѳs$ } B0}֏V"¾^X/P#&Qs`: pTe-68FEC=gcdZ>/KFh]\JaM5/` Q42`3#C&|B{(h#JhE-1Ϻ2#ٸp/væxq 9%b6/BWRi {϶@h07+H%D01IccVA p< VALzm-ޱ@M_+'8"JJѣ#'Lipw*vwMwV`j%--1{;ex&C,@#00RL!Fn:'':;DSAtYn}lW/[ 4'l3,\z^3 RnIJ7h\y;x'=Sr([mx\HCπgCOFޤ^6 ŧ-|3:s`<  SUkPo]ɸ^1t[x-7g@? ]/7g~eLU:X[=t|i c(ug49N_DkͣykjODɧ#~oxv[/!!LgKE_T;X&N';mΥ0=ƗuCUl/9Xٚx u{V=EVUPcTocO˰!<777XgۍՋk=놳I-NcζlhO՝{c {I|U +m,*C^*?AMAAg|orYg>vdO}PXh 2{Jy3Py@#2h ?G=4?_5Eh/|;KNsξؾQNd+r`_Px?`;'24ͯx,plQ(%L8'I~ Xl?W=EPoO` ybd:yz̙BzP`޸.\6ql8yEnLg+yV98F1X 4ë.`{ g؇;`K1ku- ρ>Fھlc0jl#l|d{@k¸eڎA1ZK31 P2K F]d.ѡ fr3yF3C[ GAmiGK{Jmx )a )pK3mfY|v9[dC#|W;ȿJy$hgzۄv9USŪ/(r{Ppi`+W 0Fp+M[qs00ZQ$ *`#уu-ɒA&J K&$GR#_^ )U3YAգoF:eq.S4ﻳnVTa9E"y #H B6<I*HG ߐgjQn3Lb0Hn >Fu%[!|_[2`bx"j\0H4lT}}gꦀm!3Eb$;V_rMdD[(~<`Da8˩&cTzgd8 Fx" ,0,;EkCQ T fRUto)dBg}ifom aܸ~QֻȎ(E1GLuRGZe=ѰvѸFMDD_ K`L#@#y{Vjm i hH_XP+q*/o# @+-B4.. !멲v|yۘɮԲExɥp2$zCkbP}I ֿWiGőZqc 4 8[8s@ſH߲  {[u9ה4Cf[@?yn ^W? 6~;l)jdzQӣq)x !pW(k 0]o~{vw:z[@4Wʗ ˺xi{|kYb2_ Եe6u֩ d{񡈹յ?}fZ`.P>?]$\^dryN߈6\w\='9|޿k==I<Ž qn?2^vuiO_} XznN) ʿ Ay<~-OB~ fJx\uP<*::(l jHK#G4=#c3jfΑiQ MVݖأ>$D08B僂eo7=GhoLPb %dic5^.ǎQ! cPC$*gPOl!8`CѐAL)|2,gSjvȭP.JFIvV i%?*E6 yB@}V\"Xw'_a+{2A ی_nS5dR(VXVZ%Ԩb]2UsuD}kɱWK;6ddP4`;d( 6{,j裯5`ISpq2yX/UHjW(=I}gQl*^@Wv Cʞ/abE< hA'k1]<8ci]n 1jNʽ5-ϳ"Z?kаl pcIp3)d|5֑`0gV_# .SsH@޺αE-ʔTUb ,՟m翪}˾cu%\G3U>o>L|z|@oU~Z P ;]h~QY{iv~$|K>뺸֯ -yTž>i~ԟ"z,x=6X7.^]iO9wބ#gʋ ?FB{vWy4~Gzx:]ްYƼ)yE9>ħJy^ ]%^RRp{@ߋ=7_ʒ58|cAy#^UuUF-M+!T3S ɽ>SЙVJ绯Oc/pt8럄sݹlq'pޝÛ|ޝOk65\\Q?bݣ^Ä'Nz|XI 5~TCj%.]ϧ}WY"ﻧ+,TlB{M21֓MV'>PWb &N<m Rй%&>dӿ\gOd^˗-ILw9o^\IYo >߉HQpv[&x)tQ桘ӑiz)Ji`|s'=}l 'O&ڃ(]ǝ0~'yM[T?DO[x'OּnFyճ@3׃ewPo9x˷ #R>?{^*^yD(ǁ>?%7%ڞ%TUOV_'F_`/J-ϸ"OG!AP\}h*Tc3~9 HFV"aKnK5U!#"23fZQK05@,x63^S&#~;?B;c1wY BM}bj-v* +cCɱaeNCTSMG;g'-R _39kj*ȦN6ַ>F{t FXzb'J^+g(Ǧ}wq$+n#9oN-B[=\q\po O4`(:sѭؽߞ)^F]v^|2 ,[FL:V` Hx`̈́/Bsv)\鰸&cGa64o;9]ءy="HN{V2s*=pAXu33Ѽ14K *[F+BEUS&fNASA2 B$RFw5Aƒr/qL>JT[- {(>F} ^oEɃn cgԟm2߀鲜^+*s~ySwܯxךM.LtYAU/ؐr|ZތFfJ]P7o2P| (p geA>hN*Oش/7,'oʹ{;W;}`o<}`T}R׸Z+L&"?RE ~D13HnM]E)(ӏ)*鸼q<njs\jFivE x '\߯%^zyS^/Ŵ?h@_OKWE Yq,<6Y鲹:`񢯗?QOCs:< T}W"x<'_Q헕뫐J_%|)D{}%S~ڝ;Pw rs9>G3n0YϛA>.$׹vwg|US|^4l;ɋG (/Qyԉ\!:^ۇ0.!bxܫ ـ1I|z%kVJB!<1'~8U_ }M{݋U[S͸,ܟ?_DOaRwkko%n~:ORl]3y O OyAE^]_؏i'ɂ)1'~N;7ԟn&w7S?e9~<@.F~=T}Νbz_R (Ϝ2'wOW}-@ڠ罼"YH0C VBl,SZ"j"ܡg,+U1V?aAjސ#ANN~1xݧh.JO5i4 ż#f/ОY~X1: a,3#ǢoaaU˄َ2GtA_;2Qg;BL `Lf1w)Nja>5h`MF%q@k!:Vn62EmwlKk A4uS PvUH=tMicx,zO~ &:,m[u43J{LbtF*xH\TBa0RZaqͿ0pF8ȲM> `e=]K5lKلV˦U5̘%,4u_܈4/MCq}lZo\o12!5 ӣWQF/Ecv#FCL..HkV[J :[ܲC>R`+O(()sq hl`{yxˍ8t_cfpa K(d(5TPaai(RPUEzo|`0]e\(`qzS8<\m c P Zjq08Wϕːƣe0FlltG3&?>IVC71:t;jýyƑUwf:۷Ub6V2v}R#rw{T]EP- r3Ԓz`p3KUorn%}B,acsR N\*P>k|Ί}e>2,K9X k6} -9Zf$(ZEpM$ˑ V\_נȾz^(߲xW$ߪPxX\I1?ѐ+-x5غ3RCX#%j<1-*:8 %PgFN_K #Қj(W;&s{7_C$P L2 ee[(KSQne+#uGDb%dR.IL3#gX;ʐWӸ8 [A£5bH-ޑ7b}iĭ>.ъ{_2i0}2Mm,M`e l@m@ q76f"v>̼ϱAyʬ*D,q略Vw/U8w_2QԵ}1:Cg- gE ϣ~ABM<%\^|ּL*xޱkK ggP9l/~Or)luS|Ӌcg^jL R95\k8#?Ley^oV_LNft?C[yjys/j%^DVh\-/.O0=;]./sp|.N'FW qxLDib'2;s6=mݔ (&y&~e&BQpL7g5s݅&^꿩1ZAy~\98d[4j<]l }=!_dX_o}W/g| C@RQ?WK|;]]s b ^#G~vl) ]@|K7{Y΅)nquyo[|?٠f[|qNDۅσP] ZIpk]%Oy?7Z:j 4RVS3{7[ZddB ~M|j;f~ )W>Yk |=CjG@~>l~ cäk-4{H ^.z>KPF?v"⪾9t*%h\?G)A7^c -8lg$?oںUiō2r MFC@˃v퀚dw` ԰ހb۩($6!`TLJ"fq=E%\1f2> O<*Ɵ̿9gM,٣ u$X~qsbjeAZ3 גT@W}N)Jz05wV5Yì >L{{GPV֨tVЈf̖.b"gVkn{ #DkkzTfz8.x6__e’5LP>*v(ŖJ5}v%C VMC?*8{cfj ~n9.v4,uEn$ƺGc$HUpHw8i|.GwB>{i[7A2){*L9<8ڱi11=8+ܺvtehwg5ՒlQo>>)nbJ6Z,'/W8zU>Kƺ\rMp(}p818_cEazl]ve W/iGiXA`[BAJ׃!ɩ.]RѵwAuJw'b AcruhzQh}^4k#B-mHݟ+Nq7>h6I1@~Om >K+ZL|#9^"0Rzu`cّDb҉cPAuds+l[ [fX Bq #-Ui y[Q7I5z]l ץ wЈmêWSX_ S!cSOYVسvbЇ,eh;S6=G/_!nJw)0WEߡ鋻{k'^? й`Mz@̝={;:{El^9Qas: 8{E5v(m@Pv^nCd'hC&l 2Ŭ@j'0oH$ew-`XqDI6RɼXn`ypG-0=Bہ/uAx GT7(YM9\,n^RPu-ޅoPx7^wyl)G-f/dd" ^.&T]#):^t=-աYn\-9i fˣ`뫥z/WMk _=[^y,è7&Zܞve}s"lq} !GXߞYN",^bOR|Eqw.rrX:٥?Gq6Ns @ڗ /rXPu̼BS,>nb> L≣e9i~s.+\F)%b(vœ<]ks|;KK`S4/%o2vkϛh*;16JdaìwVk*0,lBPu Ϋj§E+Q)\o:*"%LP)iѧ4P&;Rq\?طZ\As18X웵{XN`F^PsD׉hcBu_a0$Kb {ë0) +#@:#Eeuw;7kÈ"a,<1aX%ZLd44{{S@ R A0QFl5+ y؏ JLBhsotَc>GvB.[mƓ9vFHJq}7z߬g菓BGojc^g) SSS4hqJ-њ1O#wS8nBQ z>S*}wĐX 䏹~|[#07y?p;Q0!७Bm; smCh0 {@U'=dkyrEO9jpy͐0ӖPa-\pT3 ѽp? [+d)ZL)Y@}th gp{`Б qG=~|փ ͬ 3iEIxa5|0NSNGG@Oˎ#l@,U.=m)&unn}dc>%1ehgX;~9/ЕhaiR Tei޸"xvf<7fdjRv7BnP99;/C]T7K :fA>ax.پw F}"UX. 6"T Ybx0nb}I_l潏/Xg3u>siO^? yԪ˷;{ww *6?_R{ezƎ$aqy7Gq :_р>?rXAd?:Yu{6u%V_  Ś>ϠW\ 1}?RU| xaߎv%pE4! z%rRXp ;G}k:|FkH=ؗ !<ښW˅hEVXq L O6~\ޓROT;+LӢygz5E;hЯg|b\+yb2/0'{}, g$z{8;}5t358n0lzǞ5 О9 ܏ˤ׌2r$=]HcO^m1[BFK`g/QL/O׬gy!nKY(-t?s S9$d/`?XkS_?|ֲ Y܋_>u2\Hy`/0:4=j;QӶgr^4w[2-:'!9mOro&ݝ_kͩ ^?^_H\lό3(^g^'kz4\. .SuS^.V֦~5(v#\%^ϙAbAdj!F^w|w|&vAG" RH 5uCd/Y@wÖ)4WfFPU@?d[OǓ-$7ނljb;fmUWvܪnĐ7*1n=RapPT8ƆTOERfoJޱmwMDTxCt ADRSwkȞ|ݻ|\` -oL 5SUϦ eh¡Z"hw+o9eиYQ-Q @dm'"<є΅i9B 7sƎ](d`3_!jG±!ԎU~0"B0pu[QF|CV# x #{8Sw%ur*Ε6-wG-D+ l Zr4p6EÙ!~5g;w6R'a ;,1]8&wD\cWŃU* S698z%\yYV.n4wV_ⴓUg083]2?($ 48̰`vuaaN>Rr͍g!V c`*(L4n5W2i D`V=b謱p04anvgbYh{f\gpPR`;:k5 ed1jhce}bK砡5uTzά 5rۢ˹Xm#_| u0TbKڒ],f\??&= "s &qY! >e"pWq)( o^̫4ЉrH2(D`Pk4!1 R^~nx7I(m|;\w4m'{|q 4!dV#Ś]-__>G-~إ^㛓|L;J6sW d͌cŠ7o~?^FG臠T:?p3zX IWX| ' <:`g{"լp ZCy S>(Yꮃ-Ûw~15s$ ŃBꓸ#Ž:V$2Ua ,Pyy|'񱗣z"(I֣LX oX U;?ɾ;GXx`;y4 8S>k;vzRu$$Z%8lOs,ug<@+$C$2%rcP>H \ ^O;ٖ,~D_d@>:`*aRS=}¹̥E2/NJ3|!+GsU( ,n3}"ϜVOGze JHɔ|b;׽L%0lmL!rxm )]mTյYs=9|+l"8L$.[9:tj?װ b"lOߨ@uo䤬+V7W˺e@>9 -L(Un3!vßmǮ ogQ-hw(ImD` 8zdq_{W-op'HJW35_k!9A *K!|kx}!G_m-a,::@s9{><#wƑ]-&YnPSzykIBrҡ"_0 2xT;F9Fccyy9;X>̝+m\x5޼kV]ξ Z9F̘_o=+` ̃KZeycڳD]Ͼ).5DØڀPyYݽ7ߊԩΥ6+kH~] _][nvA z ?g#4Sq z 觽 =44ь1VޘzR(4G b&H%(}G͐շ>^(0wgaAZUϠ~/~t !j;x=Ty.EXiW?GWШľ2wØ P@1#.dj~oofk6wq# Gz^)\ 8xp5\݈wGV#r .XuX#8#z'?ٵ~(?KQ}#L>!S+#yGϩ@y~~EF|(n^DDw>{Xrg 4Ae^7bh/w[p'1O[ό>}D)i'|(gA:KG> 7KӒ0ҼѸ:2Ae'+-/5@kYfMg wS>Du~-y[Ge9gyLs^J!®-uJ/KIu_SR^^-~}u" /S3#=͗cLL[ߞJ*LOioƗ3ܜHf{ˤzΏ3*/gn0fS;eai9ѢiWkzZ1oU2/)t-zdVySKyWvVފK<IOm^u$RnpK<#כ~|~SFI|yY[Z=!&~9jU9%/Vװ{6W"|y6J,`:ZWDlU0*ʱ6 F&!ĿJd@C(ȭN f\:u!%qa^|SRbef f( jMa@L:"T{^0-`O4A!Kuq?cTl*H>4nbo `0)swB_8S=€E85޳BHsu6T. #=\AbG on\Ia~F'ca9a$)Cؾn40B 1 1FM8 衮FC%Q/%PPXJSƌe$N)XZ-]LmoopNz6FsO΍VD5B $=o4{(G"UoJc/Ḅl"sMd[ćL) qmdq35^Fz|V^+Η.{xJ5tD IbJM<${uNH^&w Qj{]tw-$ou2I!;#y aSG"6W{RKcYifqoJyG{05=#Dd.?_HE1Ug>egޱ}]v^ UStT𨠼'z:ۗGpyHzaH$'5^%G3f'H<N_ {`SHX&SZ=_zzPԥBsLZXnɴR~8=}=ĮP>ׯcWˣ,K2SZH&,g7m43 wB|\ <Ϋv~}t/=<#Pz,&ƿVIVHnkɔzCb)U׋ ijGˋ|r/.d ОKT: 5^}Q?@9 545&=H<r4?>E𙣧_Ћu;uL]e'^D.:McK;ǁ&u&7u ?b>HKZwJuI;G<ey`UiOh.c\|ob?}vpLA6;#À=aw]s:6ݡo [բxE"6RUmWVca_Pyzcۻ0\{7 *aKz2B7J6PoĪ@Ers -0P(rӎغn7z?Y۱O jؽZ}"h!"BNGOx)Ůt9gg֑|Q[ ʃKV8o>< >S,X<>apP\ЅG7jItʞGEYr-aï ._M.PYjB<5 "'P[_c8`^!M}R||*L>CmAȕ $ -1X3WD`4]r6bEOLbY`@HfG:+f @EV~1czUK '`rJq$r8lE+Mulf[4}T|tLD.D J);MO^ۧ;VC ?2eA1g^lYI;S>U{n+ BхGdӫ~ܩa4Ulu[|?*ld)З0wplr혌42PXH/WO+|u 1FcH0 EƮ$ ůL/|anw `yK?x|8'QC'l|Qʧ.bG'`颦Wڀj ܗ)db '$\wU/P'ξYn#CrR^|M[i=0."?s Ζ YIϢuQӋIP~9#;; ,SdR-٭|ٵEsmós~hIߩ Q_Cs\[t;۳gsz-K_VKuNL'j)8r jטx̯EQ^+PVţ OS6=CXt.JUt|mX< l`AtYcX*鮒Y%_ΰ"z]i./L@ۡC^p|2t7.V W{{5=Z ;?| ¼ |ڲH.4znq8/` @1byu6ݵ"X/"pxd |akO oEI=S1h$%;%8!v98 I"GUAA0@@r3t"&tj|),IӋ]T?)RuQ0PӚ1r*ݻ.h8*bμMm/`m`@UiS9rD7~*>)$g^`ow59ܻEqZ*}" yO.umM=޿[O`hC!Ӟ_0qA(\9i3.~XoNY7'(PNp`:U!W9{r?$^` t$E@r..ɋD1#;E gZZ?Xi8ew+ql.46$ .eJE\mXI)[UL5d.9w)>yW%K8p6#r}8ۚ'_T4 w8 ]Ș.݊cxxV*SՁzB[.H[\' S,zݘsj8(a\%Xi\.8;Yd|E^g̲1_ұCC3{ˁ&8=񆵊BK(q GFmӷsE*^J9^{'ʕ,zaGXLݫ**ϩvRGAq%E/IԤ q^IIi :$ =+Pr~<=_(%yˈ] I~c=&+Ry!ryG*ʾAJ@yu;ìG2-dK^HV/yV;}^HJձ +B S?{?jDtk [ g$)(oF#9Ą'DMF$:p%Jqr" y y1?&{`DwlR 5|sΐoϤjtxƾϥ]|(yTw]FjSAi{F2Rxb~.ƋK K&ګYS&`$B8,WOCQ`q"6'[*W+=}g~huYKA:_z*|N래}~{"ɼͫk%m/kq4Qt[)7+`؋&Hgᢰ~j~/ }H q;|wOOkP(GF=:5oQ!tIou/e`cU 0wXE\`tpΛ[C ʟ/(yW3!%n@m]<1Ks?4"4鱁-%]v2mF[Qsah4 Q:da+s">@G:p}g'`Nm8x#UkTЛi|8An"mpgpmjb-?.PzgJk/*RAqٌ\ct>,رL*b^T/S Q1}kbZ:rWo|+'*;ibL A>P;Tci0säQ;_) c:}F؍jP08ٵ#$Wu0ݢouPu4{pA$|kJ{?'A /?:r$fm]\H@3id[͒*Bwg:+ht#.C%4)nД2 &ArL`#3@;(F1,Vm8S#CVMԺ8׋iZb.~tN닂NP_<./B#PD/?lE>-/3+y>{aH BGŵ=7!wlDv4.\h|?m0hnȚ \KnX* ʐwyafvWYLخ^ ` 9KE o0=9Jhcr_%ȌΑt^ϕ˫*( Tf7FH 9{b]gRߚ >(2|EqlO8J~>{?\L.d39t/%\J:6Hwf;nLylR%{]d[*e6_OΕ'1uY_˝vd+(u: k|^kb5.`hdhK\oI<& 9 q;fv#.xE2^FF+B Rj~Hh[F=(O܉W27 o/4$L;o!!ߎnΗDKWR߯7`Rw^yߒwA"ke0(˿ƾ[ ʃè7 ;Ͷ2Ah+MQ .:ăB_{3m㞟ik7 BKnzd ԥNހ3\􁷾5 mŶ \}ޡí;yXK3 *kS p4P,{6E (-ՊCwtxgp@G,@wNGhO ^4UVi:Uٸ@&^Sv|#VwŔ{XXwU:*p5IrJbmP֨+o͸z[Sܯ6$qo-kʃkԄ]o䠪˰f$ȷ,j>Ӆ)ùahD,ҥNTS#xѷo%NeAs#r$OwRĭ{3H==lb"~R,QEzozɇ2vaJuT*m7o=wdh){ v>7]ҧO[9ڤ+"" H%Pw T2MqƱ|{pÖ0@^z7!)wpaipJ nx79_Ҧ gd\'7В* lZzÊܑ/C1ʏ1L&XvتK6Awds[(|+ 49W(|GQ޶ȗgcp=)R{\oBTxI=y{մq= ]qu@aV]Ui}P@5s 06c(?6g lThVN' s:tuǰ8i,+RSR3 WA gM Z:]i;SBA.uT>ZY K01 G2c ݕ2sd Ʊ`-_ES4<-@G`[' Ցs#bzRG!$TV.ExVzk2 (p\3亥#` ZC ^-N:s:Y`$r݆X]+l03^ o*/p;>~ŷWm[+_/nrT;`O`x§J-H"xChEMPlϞp#ȃCH~矣mx^_>gP>?.;*Sy<:qJ/:W>,2o(ʗX0UR]?NhG 9-q /?Wfj)`z(y\UkI#ȣ^b@Xy'׼xvƜN@Y2Y?xO 823>ۼRrH|{(]2g y^X Ξ94KY'hO5w3Ȟ5fV(33q7?u?vqML_%F6@bb Ky Ӥ<zpO =oؐ_*_3h%/E(4B93,`^3Ͼ~~ej&<8S/5(ZnB(i?S`dxGj H>$ٵ^ဠ)'_2h[&G>n֖ I;zGhm46͜C=_=nYM9E .!X. ?2MhzpHu'nc!_f$L0qTRNlerq;޴uw\T𵚦 V fgB֦62oo_M( #k)nqag{|ކlȲK%))y4%:pM4rpy<4]x[`7 ԡpEZ[)_@E3*C{@+DtqK}=H5[L>ӡz`mHbsH<~ )&K{璊oHptˠWBc"SZ,A)6|f5' #q2ͣC2Buo[B"cX [Zsyw=XZ麐R$ # !\J*P/sjXh%C>Q+fܮ5~[C!T'OlHre!q`—Н#@YsTDse\x!+Dd̺sNi8@nJ ReQc=@]Y2jjcaA[MƂS(+0{Rͩ=Vў-&(%=!ć2P ?}#5ܒƄZ5RI@3H8 \tٲ[8)M7 ^jD}r%(.s!poף[*;Y?&xwC &l ~G!oVW _.sZ.Ԁע 6W{ܳ֫0-n^bVoVtNt ӛ=pAh.D (bh⫟O& B*տ\ O|2/X1YrMOv@ R*p/.Ds9ku#LTCTV("͕;IuwYX6KF=Hc,#иyI|]P =y)^Lf(rx$PS)n^a^p;onOd&KD8{zwZO ӳTlH͎RJ;7.;wh8J=W}@=$kd< x-uv!x&歑$;ە`<煅611 `ZN10 )J~tvϖ_|{}?X9sY<Պ߳< s.+pjr<%>uiMcs85edpߑaTSXG>a7<:Cf'セjT{x<]rah9c@PW5lMOE՞(U;ƩD=XjO9.c  oOq*WӒ:D?eix5&ܰV*hg| ZJqccGb Q5V`t0 rETyh;$QԋcIJd;;NkhHMz>/-nP? Gþ^w65$2cӆ/YM?vSz{om!^/RinErozXo$wWY#tүN}]DҷD[~uy=.wl p?7/[]o_^&7J3n3e9y3׃q0Qs,Snrx6g @+xd ^;MyҸyV'ugT}9ɡx5L-@"',dK?Vd_HzO.z`z̫Iyk^iQIPz6_ӷXYq'C鞌u /5H Ws瑝NO煥ABv{}AsՏ}z9|pOE.C"y'H\>P3L}>=?.%b{WgyO pyM`zfM%zxH>TC7 ]?/Ez>ͳB)/ϋC3t^5/ Pm=m]a:N~8R(R"^ Q$Zg#" ]d}w}%re% t.ݜJV4x5AqĺзH1'Ms&Dqkpcꌅ}JjȪ(eldUQR%eڃqL5* z|teS}1 !IC|!|RxШrp8cIp"IIOGLޜ\o` (-Ά{FpړduwS"S &а)%WT7JYKP+m[sM8L476/` /.EnGHvԝԧU4uv5+Y0Tr!e TcV2F cf9 RDlxQLji6AVWjN qd`VXes&VNS[AX|Bk| Oi{/Rg_j@ǛweEQ;3W7"؊o}6QT )ד_s֜qVJ (k WU l]sF!q_⛟:ʓ(7ypT&rkt 9_IFNE tĴRS[pGwɓCxGL s?jr%7V\8iSۨ-45iVSrVCW@RPGƛUF͠UB߮0t7)VƈPx{/iZ-U_6bq4eL{$G]2T]c׏i߀>Aq/iGp/]*o}YXOcSܟ$q!z.pNV ܋b;/⾪+Atѽm P#&l?kInSM`jS8QXIo[-s|P^YLgz`x3T/O)O>K59&g{J oNKy33,ů}yOgW9k$2Fq&GI$Pte|b}=:cpyO ̩dV/:sѡ#CY:`ǐ6JZlOa}T~_R0'_t=חS&2lhρu_/j;_t !5= #p*c b}s{&A)yy5/BA2_7gR R,C wƾ w^oϤ 9<0 Pث/K$TOo;s i>c݉s9,g<3_wUgb k&sBP8]d ~)Z'̣ЯX{ KY}z)ωHOWK5_QBïg(SUs{Vz9b?xy=|v_'\WR(X<[ܣƲOܞw $.g%"zNÍ H}*X<]Zt iâ!d_1H)&q-@֬s9>`Buӣf.?Vm|,Sxiuw%%էpOAyZ0W^I>B:R/XYC؈bo!:?PnjK -7G3: i]ub~D~;L FQ%}L ; g<Z%Cӱ~koBq wFCo\=N!<ׇbzW\X ӣˉK`us}{iĸXЗ*@wCtiodT*>l4BNE|#>>Xw\#wd VOW.-CB#X6GWX0 { $13Ml FGQV;W(jݙ gSApglNZ*Uy.bšH3G5#ӆ؅\E="$'ssdDuoî 43LͬZP_a 4$Ep- zкGPI| @t]!":j+V,2F(xS ,"ߛGEc#'*-VRk}FJa¶Alz~\Dm;%ADy*wܭuw8o~(FoS+Ql ?FacO*sإa?Te#t`ig9 ”~=PGYVkԟltembb !t8j-лt: gl@PɷlASd;j!zÇD V|J#FNH@9#cf@vxZg4:'22i7QO$lj Z`H%T_m'x*S&tl憿kbT>Dgv#"Hd#BĆR+B%GzG@`wB'dMf]t6n 9ϵžо7_w'5!pQơG6P"Q:fx= BǼ鑜_C*leh)i#Ӱ} 7rg5ahJ s:dObm O M/WN^7cFLbІdQ*q'j)HITM;zWLS! >[^W 1tZ C:4KOQU3ɻ}Kj6gI^wBrǩ &@tѡ)Bcs(yؑYm9mО bre&ƻy|w}5 &Y]|BgTx2u9}Je;r&O*)0ץ |lXC}d@p}gn{[?5'z1|4eOD:J3'ͯ?;r ?yVz8C9Q%깘˷ %c~F*~'yaS@?1 tzU4:Bz {TPLNBN㱺߳<:Ǫc/0D2[iP|Ry/'+:>(^ߓ,@l?N尐] m~}URb$]qr iۍ+˚X$(jYTU}] #̈}W[]/ b"obz?S'# g'ysypGbs OJQD{ڨ ) c[+/yl_EuN|<Q>B*3Byk=gW GƂiʉ"]<,?l=yΰ&MFyi= [ sّE4b7wgW= S<6c x:ړX1:>Kz]<" O8/>YܼY ~ y{Qȣ'R2D0=BD6gәi%u4/>H"q,l*T=OR<@a s H ϗ`~?Up|&'6ѩ{^?L6y'Ϻ?BJ—QGa8h]8} Ŗcu y>[ QRfHG l z=cjqI@A5g=Qb_;M̗@5[<.n93~9x|! @/ߜ-$7 p7/%io cF|{iw?;1ߨ+?$J4GQ:rп-'B{kflix?vmzXu'+1nl^&ax[ie@cGun.ԚC#E .tj~8!%R Sc[MGm;ù܊enPRs~,8\JV lCie({ͳ3j)qy3<'E]l3]ڵQU ~4 z5^RCWsmr_% xDժt2TB+ӿϊI`hoH:wx/(8)P_~plU)XB2eRHq0vC3~mn#:ۭLū荁zڱ ՙp2e Ar@G\"+7\5a|4 LI)B jA\#$9<9-f+#$<EnDt)0>v}\y2-d^@M AM+QzUʹJrSQ;Dʜě) %omI`q/NfB:,\DSW{ޕ"ip3aM r$ySnG,廴a͆;]T 2 d-kdò [ ےTߔz̪ f*α:YBBL. *y% ;)Qipa GK6T.VR؇fH_U^Y_]`js:q/zo&cTz?C*6^| P#Y2U?3Ym7gאzޱVO: ne>ξag{ uL᥎_YEϞ! 9IwVߒZY=t;~ShB*x~*J<ܓ |B秝̿Hv?<7Yx=I{s?*/rm2l/<lD<%ѳD]|"Kݩi$33 Cg4<'e~fV/E 9( }R0 Y/,e4f5=}r<Ѧ's,ˉLu_NJAsg#&~zKgJLx֫әb-O>-.zN*g΄vf_?=y=Gzߡ+iC׳#z腄Kg1+@yr&(9f!}+qPC8r'*'2_}hNnN#9@ބ:K5|**WNm^B&su[ f/a Wݷ+>,\Hr6#?$٬/^.`M~ribskuEMOzoqQn$ॺ gcZ2a Rl^Fߥ8"mIM(ty(Z ":1_~]RA~GQwѳcd^ⶲ t}:z4invoO T2ݹA'M(pgT_ݸԵ3RLB3J$jV8U@G^8@#ڡɟxw*"K.;bчJ4k&%55xǹVHa驂nER CC2SHTrCuv98'js7~5{^!%Rec1Df]଀ yZt'+ܾZc Sڒ#lj:KFѠ'' *#9v9u `^-2r¸s/;\B^Q]T\V EtH*q(]IB n9;h^mvwD"&2B߰݁AR[F_.x_-7ce?G9nϻQ=7gCa U"B7RD?R9+fZqа nσpbz? Z,w^ED_jow e7 ^x=wfj.W3崚^ӟv6?G5Gh*5|iG#(WERެ+A/UU+֓3; x;y8(@/b\(+vb܀IE߉:ŰZsyCʁO<`GƻN');R0O#Dw.W}&U2h=5Όَ ΪsY=ht^g-?33H f=p [M$z}H;͋Ӿc1'xCeX0g M1>WA0J֪T!MWuN | -~(wGox6]C5[a2is_1hAf^8)#$"9kۢ6ԣ[ k%g0r`Rq6b2 x8G%ր{im\̅"hMEc⪝W,sA*f 3Fm:L :3k-o^\뽀Pՙ}Π-E%]_<L'0 |ϸ4 @ߜSs `/8?7hӳcM*o4: ;]ۈB7۳r2nnE(̭BBVYXrl,ރ501;*$8 (tW+,mQ 6aVJ u5$B@Ѷ[6e hHe\@>4tobH:$iNmt-Љwk|vO.7߈!u ȮME/G\A_ՎLlB5=unQ4z${DΎcF5Z@*r@ӏؐ -d#$$δ7Mvך_RS˃Ң;\~BQmPY5WL,Q">< a }C c; dwaeh*yhXU0os;"q0,C V4\| ,p`d4ۙhZk.uqdEU$j}#NVV)x6>2zN TtK쌭,!̚:<3#nBvrf2&xs Ra V-`c2z3tN ReN#AMN-~ `1aJ5|fX\GR,&a[Np1,9,yzf̦[8yZժ KʰWy s y׻rGaUs}9gac-AY>pWURw:v5Qx?hV<<4]nle `SxnG#\${&Fqʹ=lm`@DBpmŖ*zn!pz c9B ;f,]S2/%ō7"^~=FP@oz/R)~IlZ'KW_OG_#[xG_J<\ L!Z$&>ͿiEؚp1 /zx A3CAq<_6x8*}4zR\;@ ǧW) Tw$ q0 0/CVxq!B8bΪTq֏G ܗO:w;fed5u7N3S"m{CBw1P+)KYW>> (⯧3fo_LF;*1u1L{Og#uonۼpy'sx́L"zΝ:Owt*e '@S:ngz S}Dpwج#'ɠ|C>M'o|^ >ǾH?QWW}Ay|M#y:n槒|Ke"?5=}?e<N<7!I~b?p 򨀻Ț6Z3-8>"OkƾU/I(' ?}2h,m^3En޻=ڭ:K6x4` [W6}9# hyde:^bO_bV.UaM0H@yּx섢@PBŞ<>ߗr?E-,>H=ii-x:゚;P˱,^'۵PC{_L6)ϬeY~ŔKb_OgY,~bS)pW'ʷpysگY/3~ O_Le:Az;$A xP|:}&YK-GM(=7'@yǷӉ ԫ큰x&|;?.䛚oDO+겉d+7]a\.ϲzNƩGI_v)PT}.yrU`.y>p1f 7MO+Ku<]azı"I Ws_EUr9/jy$z2ދZ+ʯ82+iey>V =({\Hd@7Oy8l~ywuw;~ߟL^?Ϥ*|N|i\S-^I||8?Z7I~LW~uNKy~y/v/?jwo`Əjj*r`0/pR%n z]9KbѲ5MrqEZ(lsU:'ZYdmy䷶9UpN@38I(lP8qu UAྯ/Ŧ@ <1j;Lo;,lXCٖhBߤ=aqre@WVesG\XMS?l%-s#1j҅cj:"Hi\ㅃ46qVɵBb,A!/ǩ\rvI~_f vJ4֊AB5ɕΦ|D_cuRq)#sT9A'*ϣJJ>{C1[R'hMy6fHFpn]ńbrMD b f9dꠧ?3n:NjBvW/  i!p? $`<ՊI??ĴH nH3itz}Q8ŧL>?<('6&,nbK \]'<T\< ,NdOW|S3SgSi>Cz Lȩz{Bn ):/-#gjA@< ?/RپQЙfQ? ПgZoK!-wO'p8 t|!rox^.f{Z.TKu$xT:<xxãxwb- w*yldK5mED/S{fe^MT_?&;?d Ndpk-Du/člR5_>CgP^e:B,'&;DzOȤ*f!i ԍڦnmAh Wn,tt.4iD*h˛`/<@2|Ķ} Q`ڜڤ2mi}fR ]TpOyUh!v9  Fwtc+<h6y(G k.su2v%6T,}?:ם}()$=07OX^peZ2àrl/RZջC+AM EZ0(6f.\;?R" ⩬tl\|zO)E)Dwv&:+c 9%ibFeiHip\,w%xM5bQ ^Gb=1.#5!rGy@!Ɩ&x]ukȨՔ |rrS "#3XȈaq/@-չ{dyF0;S$^CǓ#ϦHi=9JÃq}橄3ĀlVllӱc^K oR;72@Cvrsq$-vѤ.E`y 5 {%+P+gD_M%v+~tmA I}2 Qp j%bT>>HϢ-Q =F[ts1+ry4nh8Td!Dƾ5hZdϰ#jz o<ꯧ:;N6&?E|֍S;'.'5n^~9,ެ<ޗnY*^(ھ=W}WTٮ&^Ժiʫg(?F;i2|-/o<fֿ) lh@j1nCQ5,ւ Ҧ_Xip&{bjiz#I$Vfgf+>6 )p ytWS+Opy,|;ݕc壙 wLyy[GWqϙR;>}쳌0aw7Og8}%g?{{$p/$x6EOu' ҹo&( E^wb;<)Jx3F@<.7gcJc=1g|9vm?*eωA{Δg~P'i/<r\Ӌ'~OdfO/|q'w#g2\l3_8Q,/[K1#MqxYKy'SJg#~"{V((Ҍ%~KR.8/D yFޙlnuojzV<י@JyY8ң+9䣂|OX[M"׋zt`Pzw?IOˈ]?J˩$Zj)'3r@OPԫJwf  aMfU{X]tޟzYB||"ayMlFy:Ѥ1ctsGyԣh*e"Jkš hbsl3\o 7L_Bە1M}컷0[g{RSwB9{݃ eRyL+݀G=':0cUOr-2+(zyVt5nsEek"bj9}֏Wj$  ]ONڥJAMݜZqI,F\2$)w{d6-U-͎3A cɒ1&E=I&(qMK}YʮX CvWԗnMhb[Je/O聁*; A{.uT056ʹ;a 4T}vmIgf^' +掩uyUkh|7BĢcvN>ZUq7/c* Ohm.4C|՟@̊t$y Ȉ7LwhnG"`*sy|'ay*ӑY/Yǩ1ڔJLZQ_J)b Ri.|:wmݺsQ"C&!m+_UiD$Hi@m[;DŽR4zvNCۊAXv$z7m; 8'?(DiX8F+SCT%à/ra (0hֻA)a@\0&z3sI\e-3 .GeWygpTYϬ,*:ҳ[N\+O5Ij?9gGs@wCKqFny WҚ3:Nausc[Hk~ ֛T)fTt}w/sR 7ǑVL6ϚrRmq5:X=@w G3!{T2< tpG9h.J]@JeM %bCH`EGcw 5QF֚5_CDu= ׫1-D r|)%5  |n}R7| s; Q@ j>{ڣ0HʦFabVdcc0VM+xi7Q2]Àv2mh砏L:dV|En#}!bJOx‡lx̐}#uZ(q`T1P sLGtahXC@BM|l4[OcH=TS[o&H~/o/LIwZ."(_zk6=wEjhm=x5UGP)\^MLRUkN ;T]MцW3* ;NWd;^n~nzyv_w֥g'/"&_G#~;Ǧc_n~?kor[럛/'yo =yF`oM~;qvngV}I.a ( OX0}A|>>3?I ^0SU~ItwOf)<YgoLR~Y|Bi7O L3Yg?i$3(Cb\Q`z|/H ;?"t^INg7V`y &x}OH^! ?n-> vgF^V}OF'qvY:ۓk ivxdoy=ʋCb“Đ7P<$h 7G_SxIlEHz@ltؾ=IO`z}ދNwL/sQ;*~Oda{:W,~j*x#[LpvoNy9~""l/d3Hz_OgRO Pf1PzZk<ءhN:=]]e[>_οNݓ1.gg剾sq"sKU>dO yF%}A2 5TQ$\m;S@bМ\c6fUd.&[ssCBPOTZGqHcѣM4&l3lpNګ,h\_s VJ$=:jl_#8 ͠:+^m9YY(Y;;{y%bn|Lz@3k̰j1Wݫ C(;,u$u!ZAA}*em[cE$iR!qT\!CE9 /PЩXpeD@v{raxc0z c:;NۥrIee-x^9ު6f/rX0.{. 4֞AOm:4]PJc4^kPYPFVGh8TXޡ6CY;]Φ1Ĕ@0G g4rc{'t, {R@F=Y/YӠ՞In>M-mh2N6ɜO/5q7xnGq6֭iԎ{6h6 %nY-=|OVi gӗa(@[5&Hc~ORZK5T8!j΂9V_;^^>clZ,6{Q(C:ֻn0oOLv!S1,ٴbY%ǮhPˑcZ9E$sX ZR agxZvsȋ$G)6$WH&Y%?Z•3mruZ2`?湼]JDKߢzWnJ@3*GWdeŬ+},<"5_xIQ M.i; ~Ov$O&;ZP8U_ f`"Ă44dx^xk` fr`\"7k#F_vV84utX*/MMOx.Ǫ$GSF@1"@@met%*ˁB~ >RlͮZO]r пӾ 21WQc}$oszd엊/ _^C=eND%3 m0t({=1(/ $./~ 0!BiPM(!%?©%1>ix6|kӭq| 53 2U `~"sџ(i1Fs ;<'zyh#n@pyV?LVכY]Orgvgt^-EDG t'{f> (Ȑ'~/#!ELy= y*I/ert9։._HrNX6Lh& 5`9t%d^z%(y WI"d 5+)IJz|;ͺx,γOP r8'"$kz a4΀{sC/X~M}){ 8z\~,E#]K!."Q~gLչٿ:-|xۅƩ;kjJ,ܻ4Pߛcnb}V1S9~!b0K.åz._])^_=) @d= GYXgJKA: NJZ1لO8 ygQ"wLNp?0=C>=,eIEN;^vޔ[KH/-YF!xGN;tΝvy~QwtDKVF}ڻM}PZ =IWq ?cw56~IA 8^[' )f+0v3=@c.sdiRa;]vTkAu8 ^3\cK&yjl)S^" 頞X䂷[ 4,,y{.Z% K`fD\Cu5{s,u1 DWs3 B}K[2+h.niʡ5pj&y Q☽lPGˍdU7 +^A#]"lpcmX jZw#0 ̏k+~y]1uw0g:Fgl~i"RɊ7xj0,fhW\1k_B^4 )(%!LTCrFIp'EZW)[,!X}M˽J(Ff+KB58\-Z- e]85(IB ߍWrr)T;zъGx.[Y-+;u{vʦt!)w5}B֩ی~\Fxv$|5lrA~jGɕY8`Q#fQB|c8Ɂ`9=-"x' 1%mЁ|c$^Z_e:m2О"I5K27М霐FH@S<SG0j(80U5(p?9sIENDB`youker-assistant/src/res/skin/1.png0000664000175000017500000045616213260315532016235 0ustar fengfengPNG  IHDR%2}tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp CXIDATx|ZnY:?ŢHIA @#1wwf/aKRNWTpwgΩSbb7C:[7$i7xoX0,_qb>Я^@Ivg巒~aX:@=.>~D/,Oz_-.Ka\2[}D۞/t>·..ˣKGY\Pδsw~5wk7]탺 CKcHfw8oReC'm5R6(Egf&jL|6-k],Y었Lcŵ[ IӋ #m9|,_#L:|Sob5Y/ExqvfDݎI8w3Ki%jҹm\}~OՂFݎQ|AA ~R ANl3jG/\Q'=*X|y۵}D NKk_Hb}JH`2/4Xn+G>~F~^}J|f٭chx !u;mXMϝy>µ݄eCr[—A8ؾmNi[f5I$wzl)T4{˹]|W_u {' у=z+L/̭nPwt@)&. 5&nt('gd0_=;3LfD6Z[$Z)#Pb1j5m "g،qfv¶t=3sIwY T7AO94P/jj Š.(dDy;&SHnLX4k)^S>ʏ yd”4ʃ%LﰾBѸ70+rN_׉>mOܯFV mXfyȏ'9u!}l{\G$uyZ9 e=pCvEYPzhel۞}"c. q㜎 0c >>sȇ^HtgPёLi8cWX0#Fy7]dN2KB 0,b .1xd8- t-ɖu\xp:MMV7Qެv%N WQ|ңӹ9|G]w+# ݰZijwKSt^t]%D҃;Q&zS^LTA}п@B# 밑9zPBne p`_V:ϨS*;In:ş0: P #d 72tP`R╱,~84@/vhSW YF:*Wb(>g=qB@3ߪ}$G';A#`ve RYݖcHAs3Us!ܒBǻ\ E}.1dWږɔDfHkP@:sMO1ιqF'þpFO_awb{vw \}:|_k0\oguFЫ܇!6[8 aB:jS O[

  • NIFM _㹄w}XuvtS TKض5#$Q)l$xRVmҌ^fT+9JLz>ҙj&#irV-yjR:lVVy[7t)}<PW9ln] ސpf&@>6L;&Sv. aH~6ǀsv8?]u"k]]Isd;KV ig$DEFX!7)VĒPYLz5k\stO:@CŶ1$vISXPpaE&%fܛi5%H.C>/gE<>uR؏r] ^]ĭ6(ѵ3IS|AZ.oeHaa"*!Da[S6݈Ӌn WLPm n֏ב Gf"ݼ;Gy_gZ&'<;>Fϭ<7W!c(|.rs5mHqFi^dӃYd/䷠2/I3JsCs6*, rSBo48E4~' 7ȬMK!ďW =??/ˍ!Pr"رb֙p6-'ّ&V"٦ ԤYhJZt {ZmPų-p3vsN 88 wNTrG;3.apnO4ws " qnuBnqFױh>"|}QiʝJ'ϛC_r}Yq9)\'):Rဣ _pKesVBx:cI:զN0OyUWBUvklQ44T㓄_ݍ(>CȲ_ ws]\B!\wYeMWUgH٧}~.SZw7m1vM=,x_?z.G[^}w~BP5&P6Kn'fgY__y!7xfsXoL$ X;Y3ў.E}ZM ,]Yᇋ|wbLү}ƊvNFK /Z30& ( r| J 38W!<#è2!ELJ4fJu@?QJ}2*R&y5jKq: e%_HO ’ʖ'8)4ƥkI) U(<])/!+t<1 L% j:s狫I|j6ܧSj4'TǔƑKB^i6`xFUrjAM}MmnB3+Dnvt.{{LAfv-Ԇ(/햔R*k=FVռjOE-A"=g\UJ7D= ͧ ZW( Ijb%RqOE "CMec<'IȆU0r$#AʕI"u 06\TΎ#lHVNt`Z7ʸSWm~cW]@h _x.M:.I@k3K M&_ >'CXM:j aj0ƴ9Q/n:nPM/5X2{R-z]xD)~2֓1`f*;]&7.6V=q*!T3$"vYbT+Z8' 3roEH'3 wzPynϵZRQ/~g^Ѕ3Tf n<?(tҬ'L>?:t by*WU۶ RNF?q3SuYWס EK`r`|bb7iYZAx$SLjd0̭V.?s+ &)L ^#b9>dj68e:`x{d=X>vq"E r=^_wdyO^zP\b̭gʛ5+%Or[{+rf~ĺL*UxiN;l׺F?bF*;D\ץ5L{oCvٞ KZ|Bcjy܈v4Y kmNNY]+hr;a?>t7GuO!fE4n&PTFi(Z{iJP*/j*DO0F} D 6YΞn[LfM=$"xJH%g#Jt+^]*|ةy)T+yLYiNrEk/jə6DHWƼ(>VB73\V3KZ- Y%8ōLo@T%(0m)wW,5@-QJ?^P,liQN!&!65{PRSPj ɬ2,Ѽc'L)yID IPČC%C&+AJ(H2iW8쫬$W$8WK+9}[Czzl B4Cқ^ wܦ@d25kaRu5ͯsi.%.䇬T= 5V LnsUv'ܦI $F~Z(s㈴o0f@w ?Y i-7؛̑X5M|(-jق92˭Wd($kk( >q(kcu(kԘep$Jo,FF=?Fl>ߠ{\HנGTGn^kڡd*f[tRҖTfΘ^lpn2,wHt % MGxwݾ*7~;3{.픉Ԣ]5֒;E}3 7t.ȾoIzQ9TjP'0Ew_ dv:j>3,*K!lB6O3B94VR<Tvba;W }0(0G (iKUm4 z]9{K4t$74y@8SncG 1#o E\xP87<=4.$mdPG"KT‰lT Ǥ.k:A~Ã<`+92 /%VE2j *Ǿ]!$=9"*5&Q\gmXkNjjL:KR@0jһ#TpO6P8+m{'*bD=ULq J6آ>}λ lΰW z$&GrVkNXʶ]YSJ!^O!!aN6:)bvX!O DFI+Mjx*X͘>e~ C|u ~GuC(4ȸ9wy6Iʠiպ ũ\3xZu5~\h拒8&+JӞZ0bTZOHfeAz|][!’A" AC3BP< 3Ta11Y}-Q~ݿL&R xM.Jk`vvtv{hZ׳/YiT>"I}vɂ=Xe9/FNڤk>视slޏ1?Pvm,9PG\g0?8kI&֗%vaHn G8EH$2T%cpH8鱠i\[u68@KеdkT~ sde7њ8]b1JtֶT{hBb ~`Dg3_ l2HFRD|UZ%&*LU`B/~K"ZrL[~rH* Rs,zZ;! Jn،C>dMVP e{0l.SvBKɡvI>\|.jo^h͈N|͟1}\{iɲPamdkڳ:s9hfcl$Jqtuzw9&Cqȼ/ alvXfݞNhgd[#JItDNRʳ1O ; Jf-Xz xr]+3qޓMTyMM3Ha`co僛M%uߵŁkbR<峕hfߦJ.ԿNS l$ԡ`9Ne[pHrZN2(IZ^,e^uTi;$2`Im7~4'<(q"9N>֝Qn-8xˍF/_@f w<<٣Jt ƘxF a&MO śfG^MS, y ҳ8G>_ɛwQ0}CDs-[i|~HniJrf}ui;*1*BzvՇD%+z=v;lWSOv:ك!o.w]&G^b2;Odnȝ `9GìSՋTI呥^_40C`%/ σ,P9)|[FQraH'QrCjJmS5Gml^5 ӹi.gdF`I;qE.Ĩ,6"o}Zt9OMˍhhٺ8M-uH|2O-S#<޻tj̀ lvRv 0hJ:;'.167LdvLZOQTLnCM%e_yxtWEkDp xst~ҁ evJ+f/yK=CD`χGH<{|p4`IZɘ75t ťVq(28'm~q'KS(.h|0at8!4j ,y1'[tY|q7^- 74>%߻+0t؀Uh78r3K}?bOiᘼDD'{{P(Ur,(n)l'2͛BD@-@. #$js+ +M :k>sjEBorw֏i9dl֚(o䔬[it@YA:xZ/L%N&y3])Ʀs'oy,7G(i3,?KY ;.E)jbZ4+hVGI 옶EO*I!4o:r&VJ`OZ=[}}QQ % +Fm88Ҙ+$#4!Iyo9:{K݉΁1 Üo89 yN(2`_L%Oۓi)pR\I}X5TL܍r 8#[쏱}`zl3Ӥ/!3I_?#D-ߠ^nO޼Kv:skH!7zRhb\VeIAk PQT0lrN 'PefHƮnQ_ }Z 'WxHՠ/DI85z@sXGǘNz=c=|w1<7Q0ZuN]uIo*@M cCREΖq}toH<6V.o缞FӬiIcmn='[:)Z7U?/wh#ci[ ~;N%C̪( Hv5;ݥyש%wDv-y(W %o+OIDm ~56nFD^h%p^ﮓ,ݫ?8.Fܗ@ lv|F ?@}B ЕF)B.ŔQ4`B``*&K-_h+H5zNEtA>u21lVtI`>X䍘_fǞ7(r^!T?pE a DurF}.B*v'`"soEPGP=d8G.2^^i{H(×[lX߿oRSOh<ީOCo+ւD@ ӎp9%;Gq*vdޠ:2?s/RS5N0MV}BoZTw|~^I0 MenQ]ktke$LusI|0>оwt%byx$\FѰ5iں#!h9QԲ%i  4㊱aq߄.i܋e%͞H aY'.½3At&6W1jG־uHm1|\q7fJoHZW7r`I$nZ߬)1RlxӮg}u[ =u!?1=Σz¨%N=sOrx2CUoD؞W @f5D:+q1߀ϳ)j\yEzmt0Dr*gf ½Q(ɜo GTPQ|&ʓyoễ~|1ٲ.WeOX'%j JK'6*Wq})$_Bǖ{N-4s,q xγӲ4*}*;6 @J;"oy$y@3Nyn纸p/`@v+,w#ujL+~|cbu dOWԾ!ZV <Y1ad i9lX*6I`)pk1o %{́.*fM^/[|"?,D7?c-\Th@*uϮ0H[{PT|um~>\×[:9q'yշSFڵ~0QtpK;J@=4[f6[  ,Aۡ_wՑR+~Tr~V)sJHSMB~=/^D3l}JO!͡vQadx )c l<6=< z}"_菉 A1OVKJKEx*_Hڃ2O_(Z%X.ZZ/ ~nԬ$2CĜ6ק<9 ZYQ0qXDjGܳ ,-2φ4_+;Dxa?B3f=)M>*ͽϷ\wGQs V-ĈL֧6r) RXP$ɖr~om!VgjfEVՖ6gTdZ))nt|Lb6OxH D(ۿJ5Kq/R:J@ٟZHI]z'GQ+?ٮOCT:O.]zwA ^(Ń|ޣf%Cf\;~]Px QQ>aUpR[ ۤpOga,SV@7t5sZA;FujUY*_A7%]`P% YNnxFtgKp>u_JMwMQN@*.(sTԑmF<+4*:ԈVurYm<㚩:ڏ6YB>-a]#nf/oHM1f;.yGl'݂BgRoUdExjrUGyKHj2ْdt %IҔ2usߛjCÆRR@*GH(kQ !RMN|7xvV}](RϴZSS{th -JH"cJ[لui#H~?uծUf@(>ܞFEd7 ^ȗD([ו ~)Sm!O`kkvͨ >AW*3tݟUJ;)sN 8ΚΟEwY.}@%8-kQ_ZnuS {2vts>o @<gQ Ͻ%:`Zzӱ9 {cw8XJXYUpwLUdm|>"͖ogor]/ 5E}̜\#)T-f az7[Dt̛eS2|{[IzfmXZXI0IY״z[ 6_/eN|mƓ"ignYῦLA#UP*_Eڽn+W7gI:/5jT-_=nH oK_Sl}ZbcoA kjo 95:hLa$+.an^0`œw|fike~M$Iy}MJu@3j0K|MO6O"8Թau&S a$$KjMb은`|ӇLJ-w}+q@6sGe&,eI[);wdBsSpHVa^M6 ]Nۄ=}W Pmlk{+,YBh5C~%>xD[cΫ.JվGܿgs"d8\GMwFOZ'ѵC\A95_cۑۑ_}9~ ֳ!(K{!9LUiЂo8~]o݋&nr7!8^n{ous;(^ d~q9 mf7X?Y:EgJ/h`V&o MU8ڕmNuA\*U_\$5^؈c#G`=5I8χ5I$[*CQ o2\ xb&M{ '{x\ĩQ&:KDz!A5>2gF=v~s˩pJv>A qg==2}+#mą)bWe];[-jz@CYd}RAOTj+{/J<tU'CfGX),P$ziZ4Ǡͩ PM,W8ЕԞ#nbiOHEz]/= ~ID:Hh=z\Y ǦkFEP HLGTj|U=5!9(ϰë_j{_( 7N@&ewDQ#O!?O>3A< gk:%ρwW K7,sp) _m"A]گ(WTҦ굵JiKCiʜLZlKS!Wh.xsluF,ZTCmlϲ1%[w݌WWXkɵL Lͧ#f"ߵm{g_o^z<ݼo{'w:<-O]FhTEgj>O4gJ*YӘ@mRXWH:\4 %$e mT1 +! ev9А4)DD 1-*FFi-Ptk(n?E -Ӽ@V}^c^٩YA[^idl^NhL\ғquZA>Ou UFz{tӺ)I{!}4$o؝n\}\ѧ hak[KuPA: ?pY]AW 6o>t';1du=[ҽ7k3t] VA# @_訧CxFm|5i[XϖSovsj<+M輯D's'4qkOȢ܄ݦ~:([X4 }PvTB}޵l"Gs Eh6Krtܘ+,*: ǕEed6ڑ]-c;Gac_(mc.maq+N KMiN5r1mcI-q]E9DL]Om;)@mV5~i`s@" E5J4 Pv%.mP;!П5 ܟiXV"@v`EeFxctI 9;Ė3t?߁Q3A]o avK|uC 78:sKΊOwhwUn0caR,_?"iRrT0Vw$χflZKU8ᡊI+ :'+'Yg!Ms:E}h[wG)tX۱;Vy< *k1JGMZz~M&j_ԓ,F\ mZ(؋KoM4X&wͻjb9/%ѷD|ۛ3KRx@uudzהּ}ZxηB a=4.up$x8J4ԧggۨ{>QRዘϝY) Vˏ*]gwfWizm8Z/ #S jL )ўy)}8 y-ۙ2%,Ym:ɒJW'S9O,I;m͓6{.ݪxU[xZ_=xf]OޅM:ߞvSoi*d'ivER阣bf(9VzohZ'O}Oa7x߶>\qe +7{ UKg]O Y6Sk/Z/G{-XJ5mRZ#b>(/#Usgj~RZ,Ugb8B7~F\_zU?MyQY#} ?Mt/5=hGxr~}楂d&bMc2H>MXlosZ/iXojV'axpǍ ^_x}|9[@£ߍq`8i$i͖7ao7ISϯ멊S U֮XNuƮ/PP!4m%Im)OV=Ȍ`)B3t-P#`8؋whшu-X;(}?hn8ꕯHvl-h&<6U&(q4 oc^-!=SI-_lyzR ϢG?>_ߠh ۆmVl;/_ <~]|}6Y*rRx-lydz9S//Spq;[~?ֹ. ?h;0@W(yg؛pgy^LH~_%atK=3rͿsCxMw9mc80ml{zrQ[^ }MVF c*?%\셳T{jyk2ŧl¸rod|2A-;&\hccyLicٵhrQRU, 2Ly R_7 , 5 [t p[ٛ|9ڶﱨ;%TM(}; p5Dz%0n9\'hcښsEq=Їeƶz01Xأt_Kju'mzĨqVxtdv"undbQq%W{^F,O/_/B|5|u2P.7;?eb4XJ!w9lbp7LNZiwG(g%CvMNp7+Ex8Oyo{6=|p8gݧM6y?0 3k^/pՈ{=ITp.gZ# q-m+U Gk>d~D7W@ov 47E'<.]%zRq_᭔h ˥HkQ>}˹~b}c4ߦ<>ڥ%3RMA;V\sC:*Jr2.RTsI&W:>us/?)[ڑN!BEsa#CՅfU W~ڄU%`Lσ3N iJ0{p9\y&جmxR瞙?Jy2![E|2#̪9G7{0-eЩA砏3y ߓGAdR~9N{'7kXַfaO"^~|FŠi≱% .S/f@|@ Z8^%[ruMNП'IB7nx|D-EctK`ԃ.׊P7D `w}λq. !}x j32lClŜb@J^Xׇjl'$d] zK̙ݬ)bNfjx5&YB4R.>$8Nە\z)>#.ANSC+Qb5lk!?٥C9M3?*Lu6gu 2ntͪW"u}mL<êe`n`@zi3brEqJ;a h?du|.|i /w`̉z!t#-s;SE#&(w 98<0o)l)Va7Vm[dA9Dh,0,lnmh*^׋xM'Zʯ¼:?A_d*+U$ڦ ц|/*N[l _VLk< F~=qK{OG5umIX)o~d-4Gzݝ5 m|-^ Y<^w"7y4r:=|SgY rKj׹A@ݨn6jwKDe1Yۡ7ހuɿ^.a f"gǬ{"<ׇ.X2nC0kq\]^csw)CY]2:tH+#=95+v\B^޹vVW$s25#'5VʴU vj} @'Fb03C=_5!z4ݘ.0T)sOU(!BCrJ=Sd^K,r]Wp6g~}1>h.oQhKa~p0Ję~D;_g3 ;|Na!keMF{!2T]T 7?]˃7=J>Ҹ7ڞ$FbX/cȋ6YlDL4P}\X$9VaT{TE;_ ._? Mp3ǏI߆4pʴqi'ݢ>܍Mydo=n䞢jl@A@KbwRqw;BbT& }HJr.'7 {WWZ\b>ꀅM f|S M1W> Q,S0?9d60Fsxz}Ll>nLKc쮮e$O}qE;9JyhGVMtLjYNir%#gzyC>Mf7֛=@|iYZ hBqLȜ?=afoN40ǂ/*XNAi%#N^20w'Dq(/hyA*oU F%ZRFaj tC9`7SҤnI3-5y#ҫTYVj)uQ >( I r _޸wxaVOBۓ/$ǽJNZ̗Bg9th:~yƜ~Z×꣊'zj|?@,__s}lc~-h 3e,y=!W:z:6zѢ˟?#չB<cBI-y_OY}t=8?4@z^>y?_a'SY7)aB}ۨg y5? &\Axp_:zB7+U}^f'fLy ez;L)Tna% og_pbR(Yх;n+6,J6=g˫Ssޫ|s >݆.M6vn2O"wޯvht|KƀI1-e^0I;y'Fp3UFKY+CO*@ I֯54plƒ)yzvzvp!t2Cb %* }6N*wRjOP߄x:x28O$>`SfϳW+7t?'b= bl뭘Quلwd_ǪL1[IYd\5}Qgc~Ri\z@-j³)/VI(wFWjUk{6AWgl#%į^Tq\C.@l|,6w =|쨫c;W6=2چօqeh9YKtï % j҄?u+w1@uc`^fl.EY>l]\?Pulv-.,%4藖6F68g w9`%a1w=ϼbk~ w|va֞]]&'imqL0;tv".PL_#H䱩?YLlOo >";1Q.aL-dhGuCnuiMh@ᵴ*L[ Y+5v{Gq*T瑱q{i xA5>3t} aޱZ޿go|ٿ@9yr]L]AQ|dMQZ̯ubrj>AnuFȧO&zVng TF_>ۼgxf5|>՛jG_z.kyZSJb)qP2̄CJ|8[U?ckntwkt{xn|4Ʊz i^yj77M9Mػ.6Uub՗u!_(rK]#W& .bn\;/F93Y/Popq˹q/ܮxe p,66ݽh|h1^2kG|eDP3rpEǴN*u+#лft>McгD{kbTW7Z9H.u3~I.M80=u ZSBK$kjscח8gB&Ot5X\{B!S@-un.ÔJV}pY?MS]+ULcNKi\7vs-|W80l8LP>/ QLC4v$I<D-?*H@A+F QH@vUV=wk鮮pSmn] /1YDFFXsH]"Q,-eyDjS'VLBf;^Ke ~TPc.Yּ ESvNJR^%t+5c+YAZ4i9Iݤm竹_À|lFl=W za`4k&T)j*G>Lv: Q`ZrݤV? nc݋bF{}| l `,_*5TrZIKD?h.@U s?zDEu7~~UbZljŽYq}VDF3) *YX8-FfƗް8kF)i+N{hؽg挫tVRTO4ͻElJ[u/;`Ϊ* xۯzaMw-NUcعЦ|@v`W1!7RoKJ|1xJ]onmj[MީGRT^~-lp'5r%p]TĽ-}.w^'=U\!7-Xe zUps(*8gua㛢wdY>\χb`J kW"5lS~;GS4͏?{ig4l\mÙ06-=,j_\@"D>ۚ'%uȈF:A: WI+ՙ莢*m D^X;]G]Yڢӷd[B ƚk ςZjqEdW 8qEu==̼v4KLţqjx`ݡK_PWŽk2"N~D~ aSqO% C;ct\|h%~ܫny\hc xV?/iàM=VЛ6v䓿Hd7Y[*-e&Pfq OdݹLŃ:NO<dYy?0N7\B[EbPPdš)Q&WڍcR:רB_kNiYZWdڸ@c2nf5eE06~dj-/QL@=[4A0;tqlyb0CRcӎ+N 3%Dq"i]2Bw턬u%!\L36 ĿD'n;^QqpU]6MB[&jgJ?or -~[;Tv {ܼ]|lx-sy9?4 &Ѯ\h'I1Aͺ{λL{q 5?qzn馥F Hs6(b-33 H-@kkbQXm+Ю@@o|6bzxS/k0rA'˳>b-U. YEёsl])ӵZUo:nۈ ӝ\zȡO/;uhW r|o#?oz-@xCW.fK-.NfޟAvBfD4:M鯖/s y6-4vT㗐$VS@hm>TWZ 3H"v;c 9LIMtzA_1: ?%0v)]SR{Fln777<3xc2Iєl⻙ HS4 vH'jӾ/di}V k(A֜O i>3wIC'QUy5#ehM[ wͮ0Mς sC#^*XZtQfNK{2ïkFғ7:'/yYO |2{;a&3afL |[9;*YP=R/ds@eaY E3+b11f(WقRóʝi.𞈀R~uqϒYutDGJOay"GcatCgdV;YJ=X?ş~&$>A/>P _ɺgNaVE;}'H2 o2ayygο2)uOUVPx]"SLL(ñilpXZdc烒/5zA 7*wf+(gښ#qK1"}ƚC W-lGl Y1ѳ&430ua(H\=r/'WP/=%CS$?{].~Dzd\E{H'h+J/0T?:ֺ ԦW<ꜿ 1f 7:cXxOg'ϥ$'Nk4 BT试c,$TА @ۢ1N..*qʳ WK#*{ǖ3\ԮygV8X^C小A 'L@ķ#=v 8g>J#O2b$!i*"9۩+ω7rJ1nYA2%ƛqq1X,&~@f {)4NJ4c5/_ y 3ùPC"L*Pg wPu<2rc+|T}ʲSC$s!{r_+;lN+lHeߔZRWCuLjhO7L| 19ISVf߱@?4đifUZf=_ߙ3kF5M?wN6? ДZ.&d_0u}q,G^M -{CbPlzևK^>mзWome?B2$^E_NyWA..I "k8\aYt1&虗US\3vJUd'9y dhxN Q'Ʀ$ڧ?m"LdpӸXmcM #Ke~Vg /8TE X^;Sq}ՃP!dkzvXt5 q1WF)D6R~O{X~N$ۧT^ [/C*L=`AKYMgbBڧ?A!EE?2Zx1ة)2sC\@5/m ys Y*G'#>5"DHfy>{ ='G,/~*^]H{vxr΄p9ƫz9zaV-]V7P_b.`/ ^1%5!s I@iZu덈W4/P}S2i\؏W Fsg }?~jB',l!m諾#3 uDuoI P'}ȟA"M8#?ՙ5D=^c'bgg睮~kxc4pl-zO3VI]>G?%-ɷ8Td (J:!Klř5EH(;R S3d\ԡlR*y jB:'$&Xu?3Cx+͡J႔`uR)(($ 4j<-5T>DGEO!{~<2Z8+~+h؜5p[(j ]|$3 ^2rL,x5):'z-rG׎+(9;lZCu?PqzwL[m{Cc31ἰd,$Ol"ԺA (EBhDw@/ H"#_'I0;ًcg y"Obw t?U 4.Ow>tXFDt'賌S>]MJNLT}>F}ZԜXB2*sy&$Łzڠja>oXZQ9]Ђ1I|: kF~?E}':ɟoq&Aj vz(| IIAk$iN%lR: Cmm*:SϏ&)"p;(=a,!wp/CxtDS 0fMHEsW.e}gسm1"tpn͵-Pc{Zg@I'3àWl 7JHue1Lb>}hol3 VIhRfqlxX7P4TAx *=ܞں&+o6CtM`?,Q_2kMΓ ;u0{ǣ; X>GuM̠=LqoǿwQx?4vyGSou퓑o ʕ", *NM 35\>X:Y+€ WW R!) 3w+ w"@ښ ͟PZM4Aå tR0go& X'Ê.[~l\cZr±." FޙZME\&32W٨VCGz$7GlMVR54ʟD5Dvq ސ2".ezq܁>Za^@;蘟zJWqp`x]vjhڭ$N}k;~r3 %kdO7v5k Yt|U3IM zN|>V_ww\ڞTD Ə4tt$83wOx +\Y JdHo w`b{)Ee$I;6pG-6J_Wme# ʆk~`uzИsV*WP+9[l?x㼌} }\I 9{>Yxlu~p+ ׎_"MWQ'(o*jdQJgM8ν#EO >iV">Kj7̾:"{߃j p@C|&٤*׬(0/nlRёu$QS5ܫ'zz/j:rsoף׍%xdAI<&aZC3!,k/}9 X+u`NSzN΁()(5p*pMoH&\0bJd\< I 0@xt,#݃>6t*HN@ +y3{$H/3zlQG4'Wuic PW$v;FaDdN TdO=O ZxCpilSҧJ<SY%=wIiy{Tap*8{?/)Ms c{hLD˚V36[!bUU{I2gNHhC𔢠~q)Os6n\E"̒`K\M55.4,u\қݨ9%s~=u])uؤ+pk=VIb&h$a%JԳIa$G?I˲|R>N@|9;LY*qn85v۪[EuǾnXts}$P_̯a7\Mt(q;Ƣȝ]E䏇bO n~?'2ObA~ml/c/lUrjߣ{vG䕵 R~Ew+A 3`~c.ySiɁjCJ0E |u֫صSv04ϝMQoD瘷xAxPxt5eYjhEf{n Kyc˫^!@o=<{fiw:C:Կ7/*>{sP?˭!NNa8"<l/VWCS|'P@%XljAu L,l2(R/aS6!RKj]#[[ h 2Q٤&&pg@>IUy>d*-v\-^ 54qtrVd}kRT}%S]0l~rs3ӯ[]#|;; "|9E7{pz,ϝŃq}2b Gm3<: ѾAxTݏ:G;iH4nx˶ -q$}Q9Kn?Gu_)ɣ[M>? z7 %c 0XM ]a!^^ +NVo l3 !ad0yQ%`ӠPSjtfz$:/?,oaAAߐoD:4vy<}^KNhє:ҭMߙUq^ew+ו(`(D.7]{*\Kw @6D0~3 31foFR×{^6/(O֡in0ZQ^.)q5>E5$Ir=' _{ myGxpYCqЂ&bR`떲n|;X""?k`p]ĎJ fi1ل+Oͦ-]kJga.jl0VViR@I=gcn ur%sR^էjj{~p'}.zआ r#/*xZ5F1ɏ>̎x*G> ( mP4J<D{wy }`Jd1} m3Vb!zF#5?MaZ ڬ/v:`"P瑯;TRgS1UoB~k(cX;3_ 7ƷÝ27%}}j׏􍐻X%ŭT`>^TIvӫ|Vgrv){`>^#Q5eWxG[u IDҙu 4n~#jHaQ-ΰу$U^V &ՠ7Q`F/&U-9ofU$ 1P pVP441꜆a~t;]htB t+waMnH+1޴B$AϔzFLq#A iwJBkT5>sWVU~_{80PA../}<`P%]WyxBԲ̌7;Pt=J8' ʧg}4EI##$ n s|$W= x<eOt<`}d W:>Oz>6ȀWGzV"5S|ZdJzd^Xk!*L=C+Oo%CƈɲyrS3"ʂUP_[;S <+[geCSLty$ 6N_UWR䇁$QO%AD|t^\ۍE<={vLp^OSZ>TS`}dž6صW.v}׌-v f{ysoY =B$ЎO+k1|e-#N`hʞH\7ik6A#t*!<%@Y'(>K_:{!;S/tz37a2i4vﳌFMbY.ܴ!g%}oǰƔ!i᛹U.OGWuz[v NAUC;:k_ `'EBb;M-qz =AYH 4 Λ7.+ SPK%گ>1Z2ksI[Է+XC۞F7^ [QzoώiIqg"vKTA9.d0I n`>ĂxUl<  tPP ui/gw n1} OϟyKtNu3z?0 #;򮦂 Nڰ(t̹b^&֫ez$POȽZ1O<ϐ93~9$ٞ8@xi^QxBx;P2jWȰ 0?)}WKЫluѷ F7^ƼyA4#. \WarQ^Lj l"zKLy`@?)>,/o <[:% j}ay*vyTz`'+'㞭!XUh5T)R[ dS*i7q`UZClSFO%8Nښw܏>?#tPL t ɸ|pWofyUBj$xN3Mw0ԧ}_ϣ:u OD#:TO !"NZNgT*%KY6+rh~]Qn4 ?Q ~(( f}Sj2Pk¬ *ti$+/Ǭ(YN n4?fU)" ?"TT4nh\" }+ԟ;j /hl?PCal:|h͟?&+7E],{̓w,i{ϴ߬L;b{8tvX1'W} 嵗.'SUHL<韷E,\(N9973eBۙ|7yJ% t}=1ZU*A_~?Ȝ΅ aZ,'mT4O-wzs-@doT>TM֊[N\$Sl"G4zVsnޟdAzox_tRCR6ɭ:¦.v"J/Ag)@x/нM {7Wyw=˾}v>_RLA.~JÜ7,m oQzraae/Pθ/]{*ղYFajկԚv7"O]'S;]REaɍ5S8%M{r3w&LW9fdQ-Co4}w0+W&{?ธe`ۯ:꿨r*>E*jHQ}U:;;b6<(N]t .*Qu^ڥfO~$PgCA#\PԴW@p١x:<)bQS>IX:tRj %ܧ?9:i` :}i)3o1oT_P$CARtyji:˦Lł\;b}}]%N\crE4hO,xpAm ѧA.E5^Zs]'Uc^MO̺}p>8=(5:˪ZRUc%4s# hTD"hL?4.\@]$ ڸTCgi6{E/}1EI'{:kFޑR5Wj/Gx׃TtOk@|b+AonEN zv +WQ1*GI˺wBWC;_~ սt`r.Ha^5_I!,PQ?s,_OA|HvR]8_XJ]N *wNY2//:nr|ްlx #a{˄P //;@;xz l>8ܛU>?Ȋ;s){ިA$}d9rx!Al=$^_e[/&8]#8_$ii  cʉTœ M0ΗlbaԚns{ & So1_5Kf5QM!`sZF?рRS{k ׳MJ(9d"ce*JrxqjV=hY>h`5ezA1M) }uD ^01`椇-gΉ߭ Kԇv^D1rƯ6=:?$A*Luo_]o"ߵs >Alj|-v!a>rmkQ4 *…ԤN<1HK+3AOI*qmZM0rtzFKƲ0d#O5? ٘xY{.9hU&΀i' (] ejLdFT/t$xF0\918 hr',0#I M_=,5D uDg}R+ dli?A/ v^8O{eakVWE+4?d$׳{w`9>VCSr!zt@,Qe\玓Y-2]5x*xͅ߀EVځYoIT,<0{jZ_u7+BC7 O>ro^E0_#xߘg=*ߎw|^ ^:=jڣhQ}w7_,!wb%o2?Gj]_03Gr#wL=H^{vh=A],C\?"6 gj6Z\,Ɛّ:vp69W6̢\,fqK3sZVlHUTo{KKAvCaQ̰a 3 Ԋ}%} i'l{~Bc|{j Ҭ4Tlv f/yz$MN<'UKk7'D\3HGaܺ?egEg5{a#+RrwaȘEciCMvR݃C2!]-9z(:o5hM0hI\Z*@c9+ԋMvrxSt %S)tSV(NS4;bKZCsF[O} -A "j%mZޗ`}g~@0V[uܾ/Z󚤆:ǐ,RCC[0ꃆAo{ P?f޹-HIPV:W)0~ڮ kpܽ%M#A&b>6Df |+\i(dFyro!Zh7!;u44 ^]xtz9)`u\;u W'}gk8}+Ht›$?|ףUG g_&\9w s3b2}cG4JzzY<\uy`upp|N:s$=U~Oߴ$,6>']"z.y:%6ý sw){! ﳫzǐtv~PG4Thb{/8YXU []Թ}"{/⟾ʒL/?j/wp"yr{U ~'Pvm u7Z>RTxPFP?8YAhZ4b{XJ]x&Vt~v<$w=d:i O,d9SP& ^fZ2emY`SƌVlã AJ`I!-ns{Dq+/. yy/,ɇ$CjswEk+ӘDi>j|EIGwe(\kLCrЂqOw93= '53ZS^?'q…wYu] >um܁ Ot<ύNJ'AN<7; czNrck1"wvI--wq*7} z6bYEv2Q0_u\%豼Y^lL&,y|{!rh(x~1N얁lM\ix< ,<_OGj>aΩ!^C= ._`ۆjQ#u[ij[wIQȮ@?7]w4YyPL]gUFob|.I7!tEO0دC4pfg_ .i m- Z: 8fN4vQ@~,6(;eXϋaqg:~ajX4+nNvgy'ڣybkrMsbh=50rq{ }?U$~Y~]La_n"A:d5\QU~&xkýx{E77/_sSA3Qރ !ww "@V_y#m#_EՑz7 /YeWl#YgЯe'P=Ľsy}HPLX('tfF ׂVѠ! PEDLC %E~I-].b+^v2?DZm%;+, 7td֧|AZG-|$8bPN8}]~ȏR 2KzMӾĮ*)A?3awg`mdezF_uŒ;:|ֵ.{/wj۱9'MU N>n[eJOVlOcvx T@tߡ?,;8w=c (Ȉ3N-#ܽ% _O%GOu_sv6"ZYeW5Ub ~"V:w.vO<ꢊ4]+cq  6oR⌼wa@#R"XyGaS\WO"C< mM?9R<kaµ'ywͼ&,|׷27f<Ψ-(YNd>-gn3j<27ToxE@/UwV0'g?w|1SB Qk\{}"oß97?ecXg&tcVq/Rgʲ y׆[o|:uИԠ"UAU:jW4߈{WrT?Q{*y)n,jofW0E'ͿȍbgZbgm|Nwub{VNw_p&߷Gl#<o019J0oq}p>k<:n/3Gg[}g.i~p>F{\_o,M7@n_?hKǫ\e{k_&҅ stIm%aI֢32Q(Bn Bo[p"U+ 㻀e-4TDo.^¼SV7RS>%o0^_ @i_3r}( vz[_~U9}5&#ۖ tf瓭69?(ntbFh<_"b//=b<缙ZOmɒ%25mԭG>F@~3"%"d-3Mqӛ*8Rrώ}]ݖkAj޶XoY{? ΧP?}xߒ[~{$Ojo~_χon/hc{S׿'8X7~W^tKznT Ib9(| ;o7>+}ĿyXYM}9Mv7a_럶wK=--9b@oX?#Wuۡ{>G/#= oAmF9nC=B8'_~ : __ŶRwȍ=o)V7C'6~TUF_Rï3nϩ$͇}~=\/Ya=,,Aq>SNHV'Yac[?BA#e0m}RPȶ(+[lȿIlO6xmlײZ~%k+ol 9ݠy9@y{K~IԻ?F(ޱ[}$;s|9$n.tjTI?!~ՍtA/gȮQ-)3@A"Y] U٤̞ir<&\2&7CWt;Ϧ T6C|Xq4Ph?9J4Vɷ1VYj~M)oS)!LK%[:MI@MLBsl!,uLf;ՅB jGYg-,:ckiBS͈UDZE Q6e琔v{7?.']L2p5u:xu8 @.; Ք*xu/*ÙR wZKzYɟx+ Mfd:j"IrTv"[뵣s'ԷgF?4;$՞wTߛќYgYT&pW -ccAbBpJLxCd|!NէffaJ07QM- I6$Q@QĻK䳀6Hމ:U5B!XCnJswAq>đi54dvAP%Ŋ1͘36n省|qK :xHWayQlE,կƹV%ZsvR?2=lŴrO=KOŏ^yfjn[PMxC'r<^.RXY4hdDdr5QZ(L\YƺA&3 Wz9ɜ qYb2#u=?2ىD:_ll9?T(N(}WWp@ GBx* n*,|{/"=xx9JD gd>p<כkcDz4$kdOÁ'^7U_{}T_P!1 z]=;b䙌{̼oz .[,q&Sb X9Z5U,mfի/YrE*l٘4Mn^×̞MfWt_'*GI>)j %V?N*2msQHn8 efA 2`1AAEdpeef ]rLQ+t.5VEcl5O'Gk9fgXAW5pln g/ UDEPMaq> XA7J\ŊieM+aV,ZٔY([u*)DkھfX;N-E;,? K$Ee?<~׵kqJ馩ISz۔ЦA=`?(cP T\ZUwЖ1X+*X:5U!m\ 5TEE46T1X4qiVkkC* m)$MO>٫Tu`3vwcX؊-®a`8Ss 9469b3#&YX8NP|Ex/}5ԋ.D.'ǹQ܋ݰur_wjNv>^auԳu W#>|oZ6Ni'aZr?ja^CXf,GlT%\*ΏyȯbBF\/L<7+yΆ{<;,O>l@ےm<YE /g` g}a~z9_j? snNj*AJXTujI_OWF&=T |(x=JJu=Y푛t %K\*M̕t`0,/VC?'cZ"G'4d2V iQqqQ,0 \ڸo)L'2^@/ߞ&?A̐#`>W-Ǎ?Ja{ 'eRCy1!"Pmȣ؍S'_lcsR\$z[qr :@~ XwϗQ%z^e9Lr]b* |^HӐMhkHē\L(#E ZĈX6&Bpbæfc㴸/Që ]ZbK#u]i'AkғX%ϽQ_rz>v2Rɷd6=50JmsBV_(C J\3fOrcėL4u<FٲC/Z~e||?BtolE}CjY9Ap'/g^$i=[sQڣ дٍNݪ i_ȋvKٳޜZA6@$k+h|nQCrSL7{5LR ꭔ01i 偂55thqOL~ OqV% aŘO]y弮&]ᐉX{R}e䕔M!U2K]g gOK?Ogx~#O/H%닚qQ$\{>BT{kُ)=IL$͵ipw{7 ^gjCz5t0K9kӈo)۝BB0>4JUGpёwJ[{,xg hzX';ye+`S3f۫$O鼏h$4HGs;P0Rk/;@Ă13fQurg!NG8B8)q~^J|3Y/,yיӇܔ ΃6(5|JUO!u_va(B0~4ei>]B Pf|j݌#|gJS14_!jxrms}s1zQ F@FGF߽¿A L> 1<}u <~ޣrmڕY&K:vch w~Q/S]S@'Ā D^Ǖ)Nj#lYD^c "]E"?-sj }QXrwٯ (*5B#:vn+GQۙItM6CUT-vPɘ%sWCĢ e^2K&WSk'^L$KixxQcz3jnO\Lo4f+vȇҔ#%)wO̟u L=opL%T'^xz*`j&5pzR155E?>(SS_i@ 5a_}IGPlGM+5Aר`Jг,NAMQ[At3<0~{,-70Ba<*FAo{h4tj 4APW!T]dS|xЍ O3Pw0IԻ3Bbp[,̜H,ɹe"˚P15SbW >>gw_c "@7*AD%g|v8?F9Ekj~5e![7_x! k`d:4Xl8A*r~D ]Fs(vMRo$(w2 P';ˌy/O{0L@oʴ3Kls ;CQzG݉҉hy?~r>!5i,dWG_~apZ@]*\\~4ɂ;KROFBDY~rTh>XP { zKä N")Z&p\~66#fd /dɸxy>T v_Hwҭ)k E-/Z5mRjo_3 3hg)3DdWCΗ+gI`$0.ݥ%+vw{/oЮ3Z>ekw.48(*|4r zǯ'[_ M;v' Oԣ^>GnxH<<8=%h:iWdCc7\=)HdD=*=Udy7; ="Bx/"?BOWL= \8 EZ[P^{hCk/VW|9\V-U=GDk+ /NҤRu\+P{'0ay& QJùc {|e?5w?;>6yF =j5?Bgf:1ʞ3oɔVwSQיu#s?gP/gK_xM¢;C]ȺM)u.UVЊ6i j(^sϸy[sd6 @vvpX`eKlޞxOR1jKŋ̬H uJ݉Yu7ﱿy&F$&b vڐUUl|.SkDś~j|: +(Ì1udw |ٞ" ߗee ޟns&.:K)Hfh54QP:sg.'eTK\ aj?ڴA o0{FD߸ܫt(6|([uן]VE.>D;vB|Cͼ}m{yzs㽤za/hZ=iNbj|x9=/#%Y]cW\!ת2-ϐV ~Ghkj1~9$|`ʤd5W%Vߊo0+(jNFηWU$߰r܏lIO~+p`y{Ս*B הl0AOKm^^uPɾ h.'ux"#n?!{<<8mR V7wQZXرnc;?9[glz0;ܻf#h#4d@ʳ4qt9O^ffD_7zaiQׯ-Q%3cjJĽV<`Z|ezsYX~\&> M˕ /NmRP+I.2 v4COv噗EU߱477>li }aթ(fpjd.ٛD {U! VS+Ev(SAyIGU/Q5<'/ִv+ LږQ"3 9{_PQv{ FbsJRI|0[;uqwE5F c+ZN'kh7 ,-[CG\?sNlqlpsjc+.`쓺z'Z0V.4% zP. o,۠_l('Bhhlc-)v+½ keIש{[y%_eIy)LXL(O6Ě曢~{5uE+A)i?b8r'T^K( p4s ~>(ԴKzz˟ym߽gS>f׃ W=ݩWayQ:DPU |y۰<*/Ox":q@-ܞ G-Q.Z+ާe ҧ,Ty\u}l3M<C>*7ԉCtp;^l_ϋ˺@Cԏcw~}~u߀'m#rJjSR^9uoqfg&3mC" z)$ǫvaj>Js>yh3Mil:€aRˆ/3]bKp4)h6vܞ1E-Ҽ4,OWr /2G^W-KAF2~U({H^)lHb 떫$7|:l]p 7K֨Q+4ua]y%2*Es=,T9A vt~>OYyj]Φ' ]~`&]wT0!4>D~y|1o&مfkS`kKAC7`drVo l 'v>uuRͰ7lM $"?YoQ[Clwy>['bZϨzSk:e0a\@6úxUzQ^j^\r0(-zL;2jjQvc=ZѾ5f3qS 9iG|n((7̽Q'/;ܷoq~5ZUC=o+[{켛7A/`躢ޥACѴ}}؁;xO,.=;QA}ImCxH=~S}uAgP֐Nus-?|X,sRsE%F&ɱyovxƒϖ cB]gx \l:\B_c5^q^g`oZa~I%-(U?̄x<>(sxĽmxo ~d`L|m6[T:֤p+)?tVAd˿Iͷ MLCMw!᭎.`ad`vߤ] ?-SޚRϖ'2N"#df?4 =^4h}eM ҷh[Y7Y +2r(lQ%Ogt=L )| MyJSOL ǠP_~?$}PCӅkDXGp:wCuAǖ>5DQ!wq]l_O+tೖ|8f+c4rw%|tP7=+{t>\ V`tO=+JS;w%FoJ ۮ gZ^8۸5jaUB !iH_QZ4>-~0_-*N7tCs>/>?zeAqNM_!!׽{2ۍPzHw&=Q z RXn [zj9nS[nnrQ$S68I|ŶK]+bb `ZR,,DalI\#MCB*JRk l4f^Wv4r(ɝ-ŝ/ЄrF'./4e)(2rh)63=R!qʪuHЭ\4CtAI[q` 0h,8򘆯v} ":̞ÈA<NHx79wTaU)靍>&b'\Aj_tpep~C"=QE''͒T˟5C 9r5+ Ajz "R _0KuQmADlD~ߗ# A?w=iw S~^b>8a/ Ձ*_5"SP TO=Mk+GiGD9 |srզG}o7x( OpߥzX9;(=J}/,x+fX!3ĢbiU@yoP{d[ٶGFxn|rmwQ bw/&ڟY M+Z8Oi}:r`p!\ϳ JR Mٻ"BtFA ? ˗0%C.GPT?1h AI xteWɩ{zO(2f M;5cpq'RgE.X86X[ڦ׵}v/ϬXӁzK4 _;*8jGUPjP&' rnl0 5ΞT/= etpg5dӷ+A@}EqUL,9OzM|W,o@cP˳A?O2#|075 Yjh}C\Cb#N(c]AQHCOm3G{>1Uo`u0- ?.hMakM| N RI陻gıu~mӪUn.4$>}7NqPLGg{-5ATCkU2SIڦKk2{/}Rw wQtOݔp>E[9V_Â>;E5z}k%Wߓ T7P;{ *-p94 4}T=b&x) 5ͮ+7@u+i":]]1)g1uNES4仮A,C.S4*}XP{|f'.!eN5mk4|G&V~Z'L'uONEt'>=2A<þ!ʃW<_g$\56 7P/z~+As>lG瘗# ʤV2@R9zڣ@GٳE3[zSJī%驺q_]fB}w~zxRzȯ!,=)!(v 󙩯Ƒ08–d8=C~vv'>{㐈'ww &؛^412#;?+ճ < 3r/j?0;! aqO;΄['5Ldm ,g{Y {`E%. y6pk Us:,0?45?.ϺwP>Sy Y~\_vd N壋[Op3G>(|*gMžRpΗsH}uj~2MqF2/H fs9G AwTŷ/!^)Y(=/ݹEO|rX?mv8a>Sw={{`T~ fx<,=aYp][oP+'n6TYC _9:Cgqo kZciXPCA|O&}@8: AQ&D5T=96пK)>`ճk5o.?j(51YDYKS+6Vb`DwTv+t2oI ȷ+{z:w ^߼;\K}*8'L% 74 E=Õ>;cUzwk]vu*(eAxT* _ yryb p1*kymIBS:BfƘ,k {^8Us:>g+/,mT~C.*8^W=]ե%Ɉ~c07}f 9|-?̅;{sooFIM$g( =a>u^vB;FZ?2vb<[gu˷/srP{RzBcO{S|@n-GAN^: Գ$;ϭMT?31zgs*`w }Sp04tR=?XIH%A~qMXT.O"4eB(w WđdiPh*b ŜKYOT@y L19k;.濐I z?=?E ;Yp{$u?PSI<;f;Qk FYgkX2~F%5o_%;P~MoB3. ^{Y~K~9ySsSRo|UfϩʔG1uGM#;6Do4>+SE+R0ՎdIS x~ܞ{yu8˞!|[{/#L鎊f%)RcĬRV6CodYܫZZUZ/}r'@{D牅7-o^mMk6"Ǽ2`X٬qU|,468+(gTEd 1<ז7{=ihs +zߓH*cv<DyV6yaېaBmL|w6<}Ct2u$"it >1,.N{Z}c+7Pl1 ebzA=ԞEgZmԍ WS3P/ ؿ7oţuw5}=p| FNbZoZyќ^„0OK]̽덋{v~A廻^i(|x=_kiPƞF6UOW2{ 0_tnD :*>ɠt8b"){C ¦e1wk$>%ʰK=",b~Vqtͼ"0Գ`YKXRPGgV{4Iv#G_9$2~Oن%"9hX~' C(Zs.d6=򬆶si>&,AoXF*5hҬís!1iecjXXt^7R%Nk3+q紋.HP{gH"_+R+1AU$fzœC2Ģ5vjQCF|@螤.%a TM'S+"(a8~f0YךaPf!zܗ6Ya=|D5癱FgnۦOG% rRٺδAc ;#W,Cx*ՕjGYހ__lFq_t/jx5DC}E@}!:wR:s&-r 3z5. ~Ui>#D([#wн﫱|Y+ #<o7zM!Qd"W WvI`G} 3x:IUXq`ƢX,sxdȽz!2lӏBg9J/ibTƿw\vFtX ˏztB=ypӽrƼ&׍^z~? nxhvAsE}w>p虤99(}9dam^@}Oqq zSMCa7^j w_qLVXn3N90ӑGfpC-4n(c7h not<ZHT䇲KfqM m2^EX&%}ڂqdٛ>ϬU hVR^JLL%2h-6g#1PK{2D}?MAx0,*=Mޏ0X2CFC w|Go=!%%K𛙟̿ӶcCB"8 ,Z BG2I ͦ?Sه<72;ma5 r2d2@J;}bETCKq{V=V>|nk)[=.BQg\#מ#߷+)sschD1MPs'!Uf_R::ЬE!}z/!% Gm@|Þ ݺ >xqkypNjQ'u8;gοۍc FpixR~fbkCg ۃ'EܕͿmmב.h'IsL=[RYl+MOKע筝T~E{<9.kzT_p_1K7 Ta ݂ Ep컾+h%8ꍽ:<ؙe]-r?iNarn'u5 .BVc_{!Kh4OA%8zlz!i:~OyI a?٨ KP0y̽!hŝ*׋ ba,l<ū5vYmr*.Y7K:ǽss˯lE(I@j@m] {YŪS]Эs5_&zmvH,ſt"sr]~=Lw1nH K'gu:sܑ7%'o' YJlba;{Ka aSA{}o62?p>BUF7:IY5Iҳ1$DH#[dQ`vxbgzu5t9-=& ;#U/:e) Y + GТ){y9}9x|yg{Mg׍51~z?^q~zFm披:?DxDaۂtŷ3D,}z}U?7ڿe?^aۗ;+E9rCކFP_of۟LJvS!Y)u6?C4G!聲|;?b/. ec>a'4k؟` ρ.M噩oLԂ`&?:d'."!)N"gېcmI7P+ z8F۳NyR4 xH#%坍jY;L&=@ni.Kubx7,mIPd3xN֕"pn3ʮvH'lbM?Eي>I{(DBُ9a[`4iXfT yuo,<" t/@pb6Uwy@~[XS'nq|޾t~ti򪱓p/i# ʓ^;&|x:*Lqx/B0 0gT S;KCl~ -Z˱w,iP݉Y0\Qe] +ze>hu2'y~`\k(5ܺY5+Vņ-$IZ-A{]9&F{&IJq>AqOkhEsBs]셝z!jwM\Yv\.K[}kvnit Z|sϷqys@F)l~uB\+|7:/)q^mV|94Xmuo}vw@ x~~JN'|u~wn؝,g:|'>$j D1P;yUP <>m++v! U~3 /L3iؑ;뱂z\73`<}(|kz2SGYC~ g-}/rV˻ۣꕲ% wɟrvn?k'zXq/n\t8ݢ{C=z}+;>=?ˣaC˥K+xߊu^)QzfA煻SG`H#8}yR¡(ng(#!kyJ4@ z٫הbjˀt7PKHXL`X&=kZqο]vBq7ɽn7mL.42:P@Ji+9ً ~_QcWXoKߎH{^irRE|ٙ7ekC XayVn$LJwլb gj$g|暶\E@Br&xM&y,ܡk$QsQ-@T br@:)zl)}2_?or<IC&5Ď5HsYEX5!G~q=|? 3|)ͧtbjw2PAςI|۾G1:L3JG5tj&m~J8iϼ럽yeSqz#]rH2߁zh|:pz?#)ƕͯz*tmfAA#^s knm~ڐ;NO6mPIZaqG/D3 p"]#5ݞz: Iv*3xԁw9hxE.$ϩc7b= ~ghX'Lcx9Q,WT|1T6ʫL _Kᚪ*ϲW|tXpeQ$ yR`awT-+m$9+^^0ԯd{>Ko .;l8ߟGBvKOq,}-x\A9CxjW;[ww {;00SPRcu.j/0[pifw{[ZbΊ兲@}(X]S; Fm'yVA.`KrF[ߢY@f ERa%9u_RB$ցClJvh9Qٍf6 j(D<؎z,,{i=[@[H ^"L/.8$_];ih96ɵy " *,qc鹒uI5KEExr|dVμΕ+=C+i.S@0O/ytZs$Gv8OOem|$L η;$РzU+oԿG߫cs*G @=Ut#<|V'#,`1*X꼧&x_gBWe -O7Tg{aVtd˻ Z<#v< {-Jo(,to1fBԻ= t@}֡x^F <Da? jST;o&wX>T0S4 iG䎓~YayP.Sfc^g[|)3A;hk @Qn: B/ JpxOqʮ^/>AVFz@^^%٨h;_wաY!~c\Gk辔*[,\g!o8kGA8%B0:w4Rq֡9kggna#@5ho7~ٻ&ȪŸĶm}8োtp~OSLC[> ШIjz[?y}}Fa%o*Ie8j(UHjɊDI)b8\'替|ɍ H~`G[ԫ$0f)t7:8lF9wWY7~لd;Z +ir'SP 3JWkpU@ldw,-5,;1SI؂X"{ӠnvkYNZ M\WM0/8i/PO<^~S|vxqh7g=b#K}}Zȓ9zí{'>c:![ Qy]$skn>T/>d OͿLi  ,ww'IOHT!y!Z REc)=覺@=RI$\Dx?Gvܠɪ+9ē'7[y'~ /I^E n} f_ϗg!W&ͷ;3;yP8{spT1o|TQ?pS\ ݝp{/5^Z Zis{l<[9|SoM3CI}AnNtxYVtyޥĹw'LYvS;6]J2: =A&=rI(QYB MJd8wi[P[kv²ŽfVQ[@Jd.k1TlC梓M|Q1kKcR$n Nxp CG{7ώŷgnw ֯wnk(?^ #aymHr 7f5~pP2QtWSS+B D8ߩ(2VC":hnl Juef˷ znNVtO엳Zޝ*i`" -=S߁zH[< ޫ?`rǀ(}OA-ؑvo? tfS17;PXZ'aϽd-ϯH+ץ|9ͭŷ!jBsY{\[ԛ&]){yuٙƍɀ/gN$l׌j^,9Ag}8PV(r'|;K+E/_LQVtO๮*o@{1tg᳂qe /+yB&u?k 6eģz41iSmdʩVՄCx;P7A}/rO/6z@~Ɓ眾QtE_;4?|5bct|ܟw:t2_g?[y˧8?};O /l\*_#KT8ixsɅAzLDuf^瞠$;>Rjn^3h,}FoqHȶ)pIvĩn.CmMQcZ&Ypb#=rO[4N_58*cuhJ6q;$mQL6F]k"~S2tR"~lo᫞@~|;_!zYtpzf?n _.ņ=.i #o,j~"=&ʛr){Z.)֜q=(8jJi8wg`" YFSH*kCMuܜ] xq*5褆∪*Z|s>jDT)q{{(RzTw(xuٍ-K$DeЛffJ`Lf*dv?9'yX3`A=~ہUAoAx/!02jzzs""#Oc'.ҏ}ˣ _#4SsPV˝0xc~d hk%"墒`m71JFv?OnŅנ(gk1ۦ5C`Y:`|i%%D6Kbdb`r@+:0cx˼`דfUlnQ4.`Xd\X"H>2xDH`ƞ<,n`:2!>̘(Vs q{e=*:m0scICT@uXt~)jܼ)]S#45)ߠ G*T '܇}QKQNlw-9_Q' {.N-X]|] z2ò60h GH+ 0, %sܖ@MLӃ5%_AAV)-T[όQ9(.NyM]=3S+ ܂00Wa %6dd}XZt#/6zѬ(V9~kBAJd҉S}sW]CqّD梿(>(l-qm톔>M3¹_Z8࠺Crܯ9N=q24I;Ono`o̐bs;1ٝQg6Q9SYipk>dIv:082ϫ_Jg7{`A>P=oP5֡m_g%=sBxe(F%tMFluO_*-T 7Nj\cVPOBݓsGT"{rfq׷[XABse@X)eqcyFA_ z:{s[ sKͲJZR)WgPO4s_O_̓ H6JH`#VN_~KPYNţK|&_E;SosA"H~Q1W*|]|$ݙ^{`Ǟ1ƒw);Ɯvy($ުc홻.6+ҌvwR5S22%|@pВbZ-Wٔ7Iv{X7CxMꡊd8 }dQY;ċR/uaK+-v^U'ySje;rqڷ5mJ#BjUhfD;7k] be⊭' \c:&,e; 9fH*S-.v5d8ǵmTgJcDΌ$,'Ltf !7b}tq~>wK~~xtTee}mYJPEuY[;C&uHQ/R#wE{*xI:oH!ϸ^KE\Q@@}@f[ ݨي^8frdso]1ؠ *L!Ul`q/YF3@Uq\( KShpkK {jRNGԚ P\Ktl8Sީ|l0ٙҦw jho^QRZ)czC4Epy7 ZL&Onv2;b~px,<{߱^){"珩򬱿=p[UŸČ!kէk ?tޞ|4ʾIyhgN]{#|.G>9WG^>OPo ,xzS>4eJmxfӥv`x=PǫM9 yFMɸ+2zP8Y Q~tBoϡpIz.uK\P{0}V v̝iEe?p)\4:{ jО?b b&G IN@V23PYفz"o/ɻ|A?}Lb}EC4 {Cjy7y٧[*}jNҁ.[C}c\;@EjS\MBg B瘡ų`َ슈Wi'{.rGc,YsSR &+ѠǨbZt腥o99SEjdI/'&U廜hr Q3KeWkL0Zj4h&ϿC/ t~%"(UW9B f]O?/R ߛGp*N/j(C<ۮ43{d!}Rטu&\o t6/9.*'ZmIDZ/:z~>w?k@urV__1/w^8Yޱ6^qC~N` 7|+7j?|"mk'遠{ =cT;T+&3Pv(ogihM{/ P7MLqP*YŨCJ +>CMW<ͤx /tI<Op/~xQ}S'CSƆq\*}Tig#zzzz'7zP$,v7ZG'bP Th.KUSRI[oЗKEl2` ڈU"CB;$!b}9nn:hw`.N"d1+m*cMn4,]+ =PV8ȞʫzOn2b;]0קs:+e@E-)J2&9L ɏb!\9ؿ/|t((sm{U:imuI♎YqrGM5}k/x9qx_7 %owz){ xtZKyc<7,{=. k%:FsJR^癅U'Y0(dݨ=нa># 6~o>DW;?ɻ(۸mxy -μڟ+z 7D>9urx&r`o wp,z&T/  ֯8cM^RfEߣ`>?枧ΈͪY8W$=~̔+\{Ֆ%*Fi裬(p7ELyP I/e)Ē`1!kQe~RS&|ЀdiV\e,9Nܫ>k2a{;ĺ( p]pw"Ͱ~VZԐՁ)fi:W|Gԧ&wzσi.hlͫT2b}>j1|OC {GQ=ӹk(dU5~ZޭBhZDyʇF!154vt^q;Wt2b~6pxą翹W݇%Z4U/j(%os&jr-)fɔ5.&I]v㶲DCyr~,3=Doo@sY"*϶ǻ z8Q vaAҦH,ƼXULV7r' SI ڷNy`~GClM^ةYt7:hcG.f.߈)vԅ噅b{G(^N;^t&^&gOk:|9I2?5yp::-op2s'WU^ `o;^ɀ⼇DЃQvZ!MZKj+̷c;!+?ayR>uF^&z"8DsuA_LJw!tga#Hn|N/z& ["}7s5y/9%dq> {JTidGbNw(D96:8@=5jvy^FO.ކ##_Fdp/XG37q3_k^ ϙpXܳsЃ/@e~}3aڤ6ol6NSn˃ b: a͝bűdU`R: /alɅH2]T @:u$ (\fnduaY:SPCe:nu;p7gɭ1}nuSL-ҾM(F 9zA)_yƴtz4#Y^N$3NYP[s{p.g uMVbtj޽!}zDsY|T.n q1YE6z;Y84 `ςRTG};yu!M0?O~FM6O{.ul1Ω_ "^`zs4|&r7U5w0`)ӡ2,p;m %@έ>goޓ\7`ӹ1IZ*W z:e3slc  ;ʾ>{amx>6}Y#ŷ?qOyD-L=t|9uCjtG?Q/1'~_PXxkY3ʩGH3սOe=e7ŋa~2$*o qZ|yP{%G۠}VQY}g?ɉVܡFΠm)T 2U_3߯g#+z`==.D~޼z)bONr|k"|S{ /hzGrEmΖqL8O<{r؟[p k+Z(ٍң{#wd]~b}H\IRf8fn&3nbE-~v>nQY]ֻywbu;k\= <>fܬ 0ةO]vfw0}=w݈g{Sw.O}B"\[;ުPJ;\m!Rڼ3īAߓ1+ٵSSgZ)#[Br;L Gho@d0!& |#y{]JsNЅx6P\0xϩ4 &K &}sDכX|#nukt=ΉaZW ʆZ~p௶M4s-n&Lr5t{ Dz GnF.!E*җma7Po4:(qkQ[>`>i<ڟ$?,{[j>*"h_xtO$>/hW #=3ʣ}%t_oDѯw|%4ttڽ=wI4PٕJ[䧆8+r'otp|JoͯO K8|ugyҖq~R滆?$$zz\A=7Fѣ{Ag5T^iL}oA965xRr_Yu?Or>82r(\R_ŸؘWYW0aeC'; F݃댩:$=GLfgGُxy#7twv'U@-ONu?G*?*WPVŝH-竄XS)huy!*'Ec;LY\([cOF0|[!;t/fsЃEL 4! cj\K[{< Ǫ0z\bphݯ׵g/r䦋ixn&\]5s?ՎR Tz,x0Iݙ{v<'R4lc%[Zݻ1!`Ջe<|~VGݱK: JwL}'E62 AW޸įJu~^{H%"=//n:?(P/'*푭ƆA-RuԷ{ܭGұJVwOvW5t|uxQ忉Rt Ûpw:8egTg^j(5eq~`ofy= _U R g|o<ۇLnhS=L#ܔ:u+S /Z=t֮3촳ϧw#hjyub~lgmힺJaoNG}C*N2@ĝb;A{fRP~wx{ak2C֗?kwK^ ة+r۟lhN uu5~ay!m{!p}]zH~ϡ>E7ü#_dPt/9_5Ă_=<\_w@)u"4^ix(w\>wjmMp~ Ɇ%XTyEit>$; M_ !,<Ӎ WuDc^mDЇu3|| Ÿ ϲzgBu$?,=E-4$XJJ0z ϊ )f}gt;*5UY+|p3Bŕ@qbI-vFV>Sba־zeÀCzD?̺QY:WЖ_fjfk֢Z㐝RFf2 ׷( bqTדH*ʐEMq7mm vTA GACo m*K1Dus O*vOPen~)y]6_no1ƴ DߩqEͿW8 (8H"`@1.}s2.fRLȮBvyyQp-iNHꑸN@Ԭec T<33PMesj ƅC皁] a~[{đ ,.&s68$xlC |GtiןO`#b|٪k-MCso~4&E6-ώ~V=J0Sk[ѳ%]1,u?:7m;D~VO ퟺp|HrkhTHqe||fQ0;CөI2r2[}e QwOO;13z~:)>xz_9 `?0A:M Oc}z;,-~WijzlsIC>_O{i=AQF`scP/0Zv {սy˩7}_(YzuϿ!p2SC&ɀSh4!:hcnyvS,/>@U㋂}B9hOxCVHM::c wt!?p"V a@}&Ʀ*|LѾ=PfڪYn依gqFBE"KFkAdj;R^N>M/9tw;c'ր?\7: |9Y#~t! m0 80zdvF9>!Zf &WKzip8q~v'G TCi#TEC y``KDwnl1rĸ [PE8w[<;KL!{/v")$V2҈_54eX54258kw|:M.[Cw] '!!|7-ܝ^ }W47Qk(܄)>)<9#a8lq nNL.nnͫ03EN7  oen ek(X@rC {}:O̯ΰ3AoJOZ'??Ig؟N5  >/OY)gUTX^CdW٨WL$Ro{{2hL^e/:|4^^}qsmJA_!vWjQXg7A Sx7ǼDz&b(v.f`ϵw3m' :`\ldJSUdLaSY =;?; zdc?h#a$2w¸54m w.oؘ*Vo">Jѵ\lѡ~ 4@0wlwht|Mo?|a>IofTϚO|z|tFiEzU="|֔<+m{rl;yՓ(5>A/6ϕr elיS5gPb*鹞u#R,?ffٯU6-YS.G 2<Ծ®x*܊1A= -Ոzv=Ey~ă~ҳ)_(=G?\ne]]t\`}' ځz>uarF=:=lVO@zyPϻ{0gQ31O듿kBu"%x:?>¿Q?ԣOgGM?OAS7, m,f4e_:ϡjN;;זB=̂o,(e\_׍ji.OI+U&Yc0!YS*}Is 'hǩs*x.!opO87 ˯(oqpqg8A4=h[aiT{u"z#cə3g=-AۧF\ Aѻ^?o5%qK'DFٍ |:  `%MCJ"J46H{5#ѹe|8Ԙ,|i"!'"eu7—=֎¶Eb~$#`v~4ƧQ`AQ (r)MfJ6;VOAOsj2PHoBGJL/it] _3E-P:P$}7 t4UC"m&NH5^"PGtPOCQc-GHNLLG9yMZ]V-Ciu+W'7tgm~^{8Kܠ;s6x+= 8p?'O32E[y18bD~ /KF{0;#I35лJ#|`0O$iFHqj22&mnި.}مl&t۱s-&#c(IʈE`@t 8O]XU?,Tm##OUThXpI ',VK"/xG_>Tpteg#<~Ib챔 Ҝ;cB_Pkhv/^}}h D"(5of_fK8x苞+f}K:gץQLF lH~eԞEM,͛?\Yf$rXȌ$b%K(+6h R g(&@pWr!E0WLА%kZPwR}8~Rۺ Dq +s0j/bdKv ܦa*x h-?rvcRv9ͫ܂mC:ډ=;$`H nU-n=?B ] I?JZaDvYNW*&k?x3g ؼ?q\Ds=CA,y\:_"~TxX'4vλ3=_OP˼iM؛Z UBi3oZ@AY̱LT1Ҷbԏ,UG΢]EkRb5oh })>hU8#![5J%+z2j- ZҺ7rݮhg\t |*}ah5KWr|V`*9ț**ت"V[rv-OclShSEp;rTBe/stiR\8yζ)K Rz}6ɦ\^md}U =}+ࢴs"[Ǥuuĩ~Ns#,Z)P Obr 34pf$p]]]/>/Px?TY^G~9ϥ̔VE hg*ټpo,c&HX(QafSPFp^4 E]???"c*}=hMQϬJ5=a_g*ie2HD<ZZd>$=ͤYsugR};Oj`pҿsqQdžO O"ݖOGAjMcQ5 ?.[ZǯB zJk1gW-3ԅ&]ms$oKA'$7@֡)Fޗ2L~{PzLx/X'q4n0Mhcϕ]?}=mx^'ɝ~ f7LUh"8%aD S E$6Xˣ$v_uϢHW*3%`q D@6vլm du:#I4جbC$&k"b׮Z4dCG+ܗ˥HY՛KuUw3E Cn?ͫ%Ip 4uiA*Hb *=]H융gyIƑ,Kק2;4]EY%m לZMTnJuy1_Z\KB̥ƃ#H*gCxEXe|u6_ٯsgL\"Ml^WP}̶}l(⽙n Vk]ǿ0ow0ݻٌ;mF*+P8% 7B'¿}ŏO{-*;#V8LU 98__fURռiڸ/iKFcndOyeM ɫJ`e w1%]'䯠NMILCQb&ISEp@l|hU;  "Yk 6RS a08͡ (4,jI=E: Hѭu K6:?AVus#Q+ uXD4.&l$f-^4B(f|V s c; ,PeZESp L*R&]HGUXj6~Z|q+D4@H_(p+JJdo۸k 70_DftJgdebRUip{" źJ/,_` CQĘX6|'WY54K#0d^{E$?4[I)y_@spf7޻F{?q \uY,yo?F5Z>Z Dw;ηәU??[7ޗygzjAfOdɕ9{vd4HYhS5] + l?2"@>cyT>k^}vo}XH;g ?r'_0ˏ'Jy:1#ft>-L/B`wb6no&0.Iq& 7p?m-h+dP>d$7s(B Muc W0}PްoQ~kRd3J(䁔7 qp yͅ5>` k,5&巖_ U?<*Ǖ1bx|gY>Q|BY{;Nއ x& Mrxi2\輪cDb7]9qmv& =_ߋ<3G+P y!nc oNy^/L.Zp j<\Z$ttx@qxS&;٪A;N2Ay.ս]OTU \sһE]IUGtH2cNÌSGPߧ-29WJj3̚x^ xVyr蠠<NQ߇W{7S;:8FB.z.8WqaP#a$ ?t=_vOI碀5]S6Ԋ_=)%P)02 :|aCaz1Ǣy0:O_RA,)}씫$s·$C6QMQLő.{5j)^-$]^D _C.)2` [ɠ90' ,cKpgQ(E=0&Ԟq{ހ{JX*+iB09ZnͥRGfNϪ?;>BUfR{ySx'1&HdOǎDZU+.-_4!8}aSQڄ:sqMya``3vAۊCuI0L C/\{1/L9#2$/G3ReMuQ08'7*[_ɡ'nT*WULD}8đ ѿ1z?O%UL0IN^HNeuL8 $^;ӢdFmPgHt)~1u©L˄"3RڌlnJ "* ;SȪR0@iPtM"Su3*P'>8~4EC^ʣD+$`Z-E%Bg1tMȜ#Q)\oR`]-(N`; tqrFS}GXפpFP\ɑ0*Ls=cvJI]c;P[15B44-, hI,& _>tdQϧm!my߄j%~|Q"e<`_2:GH\tN6v.mEp=|Qyy(#_51 I_χ g<1;kdL.)J$W9g/z}g`zvȲG €ǜ%*G3w>1/Z|?BlE?3U 6{Q S/9.BAs#]wә;/|v̟햿s@~% SO P:?Yue)i\lu\A$oM0}&g4"Eojx=Y.b{Wg?^|: Gb7_o9P>%cs|?;,/ȋV`f =$0>3::r4)#ǟts.G]SY#e]dߝdհxaXGQtϟ+d?w5s./_o #8>od{pC x^8upA|,Y!i\Ӄ:8s檣/b놏_% PwyRK ?Ekt>8P~{{>pXۄ w _&=L;! \~b6Ў1oF-K~Bo{^PF3c%Jƣ="yKT𔽜-I[|μ)@g/.B_CT ݳG+uVlEYi(Jn@U\1}4\ 4/~用vqV3PI}%'0[1(I.5X:RFJXsKQ7>bKX^7ay"l: E4C, QĤP,u63П"E zz7Q/0jJJqc\5bqOloyefSk% z|f 㶽7VTNl(8}锪3:^ EXoݑ )w;i0S]A;24̦M}nhsipFA]O :OE_ZPAB4teiC^4|gM~،uW1ooaT{5CeЁe0?H;j!E$ $Πj2׊`BC 鵤Q -q/"[wf60AI7 %]O?xRF9-CKh5 {B_ID]KB V \WqXGG<>ϥXbhM(o !H264<P%6ͭŠX')N γAšB%q:t%6C}}$k^RuSܓBMut<0m`XjwAĪRefϲR/l'3,m-'W֥\}!ßڇc4C; ?7l Owd "Q+< ]ŞYQ]:2GN9xF6:7e{gDcv]^Y'KD4W Y Y]s]jXTu)ȩc 5΢f?r%§"ѺtS14|~aMekM?x[\|/š;F:ĂDo߉}7B! qRf X< !?*P>AG:>SQFÁ,(僐č_Ϙ 臿^'=0zSq)(~s9294?g %;=5AyC9*50{?aG!kD}12@2A_Xa[s}#{^\-㞘~izzȲRᐣW^E%z;|L wLz=8& 8M(HV_8PPB{;=HE#jy?"i%lqND~=Nw;A {? x!Q_*;72睑w} k>CTG䘵qHT/=l4jm[7y͚#Q'|OlY^7mKCx2#( -T=0Qr牺;sϋnP_͝~ 4oaǡ9|&Vߠ/`pJ~y.k吮7Pɵ<Ðws@yC9cWAeV WCo|(<4ZMe{tk$(vc,*fך?8R!sd"Rclaz9>To |=MZqD0zFV/\ˉsۘURL?"Bҹ2Fϳ4*Lw@KE*4%M+Rȗ 5"R(+Քdz& .L瀒-yR ]*h^Ne]sɻy0=j\( 4`e^KACe]muCI\E.-j̏o mͿ$٩HcZ\O(88?* );"JW Y^!AP!bO!q^T3Z0n⪬<0O W0oj|T?+%] un8E-4eX* 2gP T P@eg!?䬀itj\a^~a A0';;ICf3m ofC#7/y˿Lt۹IhY_ʊ:~ an/*T ~!N7O$_au*}K7 й4#swTH@A4cyv,K &`ZSq5lh Y| SpEpz ͊~i_4g-)$zM3ʠ~KGe1;&h\Rz| ,n9CNHDO8p\~)pѷ |X^wn\PFRClԴ-ŤGykGO^QG. B*e~K Z $*D}uE ˋm>=Pl/Tw:#hwb9w 6+*Fz\Ս3ǷDog@mH,\UC  bSnEJ]i:=:EíwKLyҠO(8r:7#ѝBG텎{<֠| { 18̅ڇX< 4v~w}= 3XgG'7fJS㰄ߙa7Ä}h(Cpdj\MqD+J g|'y=3+Ұ@xb|x?Τ|I<5tQQUI>/,M*c6} B1zܿfa|9碰sU7i ʓ4,6m P6*w Ge1XS/ LϨz7xBz`|*/p%Y8;?r3QQ;lDLy>),~+B+J碴xT3 /Vʦga<=ɯ")e\@ D[Yc?lLx;ٚR桅\J01}#y=(H{"tB΃=ds}{ ެlOfR _U!+3\UM"G,h|;QŐsM'P_g9Ea>!oeAmamv>/6 p0O1 y>q`jV=M.,BY> LϙmA :>gDj,ִ$VBGٔH>ӵn!)Kr)߀]3CON?pX`pyy _FWXơn@yPP>Qtg0C yb7D_=bwup@v?15ͿN:s˳? 7e?;=m{7$O݂f}u2`2n^$i?3:;^3$ob\ / `Lω ]>uFjKQH.1i[Dpb,#!31=|BtJ¸_0@,]jIw慢J-2eRy)#yA*9pGd* BBZ9 d&BQ$1u]ə5Vyh&eJQ*%gznz{ FBHb\u,xs׻ߟd8)4g}Ku~er/P2C-J: VHI[%)&I~QI -,Sp n4jk y{&/jGܿ)e""<Ɔ/79Itu1NEz:X7^naŸWrKsŦ"[FU2.b 88 E3 $U'Bk+(k Xb`ڒMj5%g(ߛ9LmvSZ]M_E Y@5H4hH$`!xTQ&QG!  ,Zׄ$E.O/AWM *+ZJk\-! M"ɽm=XEJq#rjHy[#䋤aHA\,ާe׆CZBi !RA#(=Va(64Ԡ<#EnY{|*(i 'jP9%c} nG`f`8I 5Ms4޳5Rޤڱ9;Ѝ54N1N;7#Qm:eItvVQ6P/LF!gC?)Q.*az|qH8GQ 'a#ˎ?9r9dhPůAz"v_YT MɹEAm:WS@φORS't>*tAy}3n[٣;_OAT_*qE_/EU3Й Ȃןs ߹\FDOoA\,|:qԉy"≯o\#\Կ/Vjsy [=К pa2|AgYqϒ(=!NpOBuW,>OX^ t&k V/ Cx%?Ϯ1{%Ղ}Ӧ'SNn̔ݛVA;TwQރ:/;EFى>J.(U4 %|=y}>&tGypp?.5`yxzǝ0[Z~ǎ,CyIm;9>;M,A~(Vغz!_( *x< :+3J1kGhщ`7eӏ7}2MAؽV@s-:Eq#W$h(7-fʇZvuLKgP1k8 MXDgQ/40=vx}(zP>Cǵ4&^@7q_\?U =97e:)%z†c%z.LotM~{PޣkHUF|*5S7,Ib؄\)WILB42 FcU%PVFR+cŎ@Z)&q5rtz}v bJ$DQ_Q&#_<>p1w+R / d<Hk6yh5C&}#it`@E ժ~e/h$o%#Rh}wʂuѦ Ԯw*j@ {6c[kV7d:H-'%EiT'6`RD>d}S_EJk bQ ~}WulmĤ#J E\qV*r8+O߁`|)۳~i;yN?{]m|F٠>+?ko(G%UX;qk M܂;엇(mfSixMkE։Ph7ʃC0v: OHtA#Qmq^9ycX\?1FߖJnjR`U$E;9baY yL$aֱOhY^x:)vƫf?՗_O'N_R>Ñguܟ}z%nd&Ӕo3pӡ_ə:󚙼ӑӬc+-l[!3l: /jl 7d||D `;oR@y}3:/|/f[~frp2PsÏ|Q6=E%93^|s9Bg:7_iA?;zkn̤%UO;1xA;gjl;\X^Ӻ'>{ f<%A` tܕM$zֺ,n9 SI;I'ag}JdPogэx0!(1_d*XVd?#G5>I">s{ HRm3۩’p1hz~_f7G'KZaS8v%zF繢t!% ٣{C\~CMQ^A{NG ./ -}.x=;: wc?,! ޢ@yڀ5Ugv]}5Cʼal[((sXӀUwxt^ Tgk(A緑?Z e ]z@uvVJ p:TkTkG~DC]ꑓ`8h~Ղ6=|U`1Sޅ-~LJw8_O;E__SI/ĽկdV(v v(!מm'YVS 6XZ > Cq-@tX2q_Y8N _NQrf6II=MIC)>WRm" 3m Tzs!?O@[cC rk^oy®:NrĒAaX{BAh`S7]+ԃq)/' k^\`پ!lRKCECt\1~ڨ\PX oD)8-% ˈNxN\i E+?z8b|OfZS]*+-U^nKZcPĻ}!wi5yg.o8ZGUT[y!CK|"iTQ4Ⱦ5,'}v:qS;ݝއ~`Ʀ:3J~p_Be`lDv?C]$&¶SioH[+٣;K`>H"H8t]5Lz] x;o,8 q <Ԡ(Kra>]4V;+? )`};+lOE KD :MQw E*QZ*JNJ|35a|"&vdm't{"i( msĹmV5>yvTr 3-Ў Hml3O~@|h,m}ƉC R֌53pGfBm=wHTq(GrJGʜcAlVT]:\ T͐ZHI?SRw2P lΈ͙:nM}!y)_Ig20Pv`ӳjdrRlW(AퟌDp}x;>;t"M$7}DLV"mDc/OnG4 Aew8q&6ډDyoKi^7%QQc ĦiNꭩ?3Ǯ;H?B3-;^ܭ^sh=/x50_Yh?_Sbg[<* ӓ;;<} E,V.0Sq)| Wƣq3:to_@yp{Sw|y|\ owzy]<y P_hϊTrq"`|RZsWFrw {~(ӣYh J'l<3/d3߻qI3_pDo@Vg4Vg=yweooBV/}PKw8(ZH$zj9S`zB}.5-p7=3 YXS`f%䙀$EJI*hʱ6fn?-_<~Ƨ)/IFZғ׷Mz|D2U (g?~PW*?t~|',:ִzGbP1/k71kcs|t)S|pȋ`(z^>tZ@_P: fx]1FB v8I54 ؅C-]8`\W߿hms1ʼnDoF!_@Do'q_,QI!ei >.خG ЏQeX1zµSQf%'ʵ_"} GTIEca,+DM}pe _l"4qgV2'H,ॕFųQP^MTF$XMlf}0z9vPy%|C {Òt(2&:ROOIf]G 88"R',js[J0-3TXt)ad |rR7y%|E{1Dax hUPw6n4,ދ)DoI/|@jX3Rl/Ŕ>:WP ~XџL2s/EޯG]/epMMOɾw!UZ|Tʧ0|el)+\^4)Fx9I9;ӴmLn)yÃYZxd=yy7yOQ=ҚpgPĶތǴztz5 믬lʯ'%ֺgamӁQuQ. I Ћ;>e}^ۙ?L|X#U P)M\dv_O #l.oy~ (Oz6w(Ц(^g⥦h}`dCֳ;SQ<]H#Sj%YaLCu:ՔAذ;T+mS؏<);#kRr "Gc&Ph8˛_smO7MDe8ʰqz:! ^ajNw+`G.!4"Gz*h"իʕӞ6 Y&V+|&l_J 6ihƥyIGuoЙ\|#5b^w<'`=v>u)]oj_\g42,A)aȏw} BZ{Qm!+$j hk2X6ߧJUAoQݸ_E/;ma_76o||[S5xWWr~}_m`{y>)Xng%9)(:+%T|%[]د]@ϣkA܆3J͔@A Ym|*t~``~5K5tiwȺBQ5]BVϧZO@P _`eo 3;_*Qb;@(*{I_*j%kʵdҡ .0iz[P|QDS)CVi EWf1LǾbWz&@K%N&"#Z&_ksR`r rŝ̯kp=n^kS C C}KmX$ ` Wª.`+ḚS3A+XEч7t9X.o0n!K[=RYl_!Z^łΗ+A`qQ*u7*h2;}{D9E?N>jk?Xa>ʣu$#( CwV~7ɝbnI]A_7qLDA:xN ab>7d&a^ Y9Iepb1H6x6mTs_PD2hx%/waG}SH0:ΰcV<]TԖZNMMNF86~l ϞJu #@睳|=e)A~wEI؀p##$z0C" @i,xB? يt4H_W&1B'۾jb骦~xp[ ViY>Ge!F?0Հ򩆼'طT0Z6XQ/G#A+\6I/xPP^V6'(8Ti|Z|.$Z=D{#_o^|y4/0d?}Wk`jpa~b[y hr2)#EcD߾s"&zJ`QzsjIBG27H$›o1q Dbt@x??@y~;;Uz ~۽GH"7&D^ϡz>fd6=IAyd x9&yOFgYH09N`:CGOugwY gEͿ応&x{7j y ?4 tyaԩNp哪s;HA1C(ޅEپ;P=΁iB],W{DX=(5^I7(=9{wk/zSON!['܃{A~4aj~J9G@lQ'^ %t>rvi| yk y׺M~Wa\]MTQEoih~ X97DrK*KBdKPgjX߀Y +=1M2&.s׺5] >4k#8):k IK6LqEZ!hکTVԤҩGO򈽠<RJFxt$!!.OcA(t\{l"M }E{0֧IKZnZQ,@h7V~УA4TE14Wz8wnl"o`mqB1M$, x|T݇6ׯ^5}ISf"*:P?}ǫ}؁+1tOvx>Yn>7J!4NA` 78|&/GY4Ը_j7޹J??II 37xw@hlxբ8gjpoO cqAVy w=$e^8v,򊏏NOYNkaun!&'z?i%,Up!jS;+ } *U* açڹHab]֏.[qY0adan=( si3M`A GWj#z$;eZAU8xo0S'fܕC{^T:Yv3mﯤL'-;}uˠn"a9&Ue LGL&RH9RɾVZ|?4b@{'ܖz. {)W;xb[Oe\Qu}8ePE +\E`;W[nTubS2ўaf@+.2Ay!x=Hu^?AYNPeA ?rO2ۗEDz^ ᚱxrjP~[8:H)Pn,4k"%+ ETNot\k< Omk2 sIB4cX [e=(3|~ȊϾE[wU=Nj=~ŒKBm}q Gp750kr8 ױy(轡=uɉ>5F[}?FE z{ 7h8+t:YjA\0J~&9-܀*>twjVv}-Ţ^-q9{t^ )Qr ?^acK/NaĦ7{6=*?^rZΡD .ceЬh/5O ;6ƃ&@y&%$eY>  F=n?y &_K>j VQI.G(6g(FBYjI =X* :߂ŶI(+ ^mh mKWzΉ֠5_eȞΜI}vUP}*MR#wd.]g`pf>]F ,f#[!;2 ;JêD4(]i4ے Mjv!^*Ы’T hWCnJ+LeT>y3{xE#ͤ.ߔO* `,rhϟx3ZvsqNyƲqvRfЪu1<4w(}A ܖ!3z8jZ'C&joZ%q Cf2C0ԭ):|L!Ӳ6k8[tIccYR$ *wZt@MD]U.`! + |@vox qgrO܁ EoӖO-ўE@%v + }'i)τ C(*-_+3)խ_9~3Vz.)8v^|Cݍa\ijFM1PW[(7~<jy-B&}~ًա3S3(ϑoj7/d?왙LL돏l*}qՠ|Vž~%q_ޛ8A?j<z{x]*PO#F0=c8۹Bۢu3ҟ/ݑo%M'GlU ^k; p[#ыp@djS *ōŽ`hf.fǒxBk& ԲF~oD(*cu%iTJD5[dP>DrJ?z".U P#>?-UMEVQ? lL26TT.lA9dˏM-֬cJ a>ISWI奅őWz]{vawT'dW ~@3&̚j 6+ R I!xeuh-MUW.|$i*@7,ǢvPў ˆ߈@|/?.8{3:Q Zzxǧq,oؾXeg}0ٷo@[gwa6$(fHH}9̎k&,E|=T1 Ct>*0hCi_\ʃ>[pM_FH]Ҡ5EP"Mj`'TѾRCVH= l3OQwehUb|<(u $^B!Ua46M\U5 omSzE]T;faRXE-/#^iOi #wkHԽRO@ h(jҸcƒNK ʵo";\P{XDAOX3T\IG1Tn{~<؅D)PEC7&j f5мr"JǠMɝeD .DP5|`ȕ: pDщNB,0D:tN\Gy9*CMS[ ' #VzLGKQ)i@.?}pWg04dYUo.t1,,Nu0уiG(D2Jz=~iLaac[ Dkþ+m>6$qXl Dcl2n#AfcROO#Fߌ?)IٞO IocG/.,'Ar_UE? ړY+c t|&D|2e/-y>~i@ޔTJ7P^amP $mƾ*%{w0:= +0}O 3cI4sG$;Oe^H~hVO\H E)(_Cy,̯hd^b{+y~^ vXQxAշxK(w>Ld!kW w g]8='?rm(Q22]k=~yB3!0PazċyƨdG)d^y>C}nIZqAiJ?Wua+$w9| Π-Z$Hޗ]}aG%3gŗj&겞Tz%~tᴃ u; %a)O`)[ rk oW򳒀nӸS;~Y2l`Q}|5)܇1o $mعk_lŸo E%G<!կviun*`[Ca ݅:9N{P^N2CIh>ܰRT tF˒0jpM$M~4}2Ǒ5aˀŠMǙˉ߷ DE2zS.ADo'`*J@Wt)όfX̗{qeG359xrm5˻N.Ra0(2CUӑgl>3FeHP~Hgn>+|d=E|? ^hIyDtT_ Z 8;~N4 vIBG">G-s(pc=OϪm (s *. K 6|6 CS^7tk'>sV`ΣEԯ)_\P'\ǓĠ(cDA o䏡ҾPڌΣ̗[Mc xyK"ucN>9izO~n;O{tR?WIcjyy;i -L߰v߃]Y{+m2i(fk~A% R V)0[ݔS?uggRao9WR4ȓ& SVU$"?uy`YWVҒ6 F%Q %rCMRA>TuS7t!we0E 0aÍlܾ5(vHmě pAMK {;@w\@MWi cBCGX7omGSSS`jܙz[`=~aTְ ~I5*ឰf4sDᡉDG uOE=&Rn|% Wu$Z5Ճ>tЄ8h{5#uUPj8e? #켺̣l'2U(byᬄ򚁪1~=GDO( ! ʃ>P x9>Tk篅gYS~P@pe_ <;Փ$S[9i / Wtl3~~FJwN_މE>rFubY H1sO {Hx93LlZ5s0}R~%7-D'0=/$ճ1yړ9&}sL\z9P$/ k)C90}ST Tx=&^C:q,k?~zI;u6M_VFZ ^B`zo<%8et> \ ۂ@Ikf?F7埯ː0@#bc_o; -5@ybV>aT{3P;rtEǢBۦJQY zY" wx3-'V|~/xTr.&OA!ސ t1E`͗zpyB[>Pr.9Xq>ٯ?qav]= \5J-Mg 4!P?QV/jy8?|Q lz[$Zu9g~MyH5(Ǹ飝;.\yfZ7Q4nh0e.P-z/* UE!Y̎eul"BF($%P(#V Z1X L ij5jtZN,_SF q 6; 'lWMXkwG!qOޓA6dMzUt42?NkvXqTH{Q'O[ă| a 5>Ai{">RAGpG4#ص u&E ATq4Y# G^$2D׺ ڏ{TA4s0ACPyYAFETyx;(=A:8=f;OL~ϛzU{MO:8|QLM cx 6g?,3;v3g;FB+t7\3>mF9(_g>˅x>a樚#?S!SxQJwG|x=z߯\%v|$õy)T`q~媕LG< G,gS܇/=Bi3,b./zT Yd@{_7|'5fk{ZL.,G.$BW2&h >Qm\]ϩdEq$Vuk@Q~W*ơM1nPH31CxCC$7PL>;^ONK@Mw rRBZMLwEwh7C݀k#c5SQT{⹘U=(Oh !rD@2~V@;%f#ު^JD12T8/E4&^/2?̚䌩,_l ,}A&#NEjaչ*2kPr wㆍ\o4A:W#Qzq#F71H&K3{tJ2z;_0`7In*m8L|='n@_-Źc ]79.5xƩv40:@raWLoN ЋOsaπ^1}Vx2چp.?-r@QP'!nPU+y0wy~"#$QTBvvTO J#_ E"xhl#l X,N 5 /P@ڷA%!fzjFP>:'THV ߀7 TD~~ފP|T*DHB1jPPXPO x'?,w"+e?(=E YQd%ŕ U`zZZX"ר$Ki>mr}~D- p%2P#%M#q{)QdSkH4jR|w("aba MG @Vc3^J]9C$Xan4tp+E"vHdz>FIPGKCA_N#G#A?uˍdss~dUR] n :'C{7ϧYzJv.Y_>w~9uM @^DbϿkͦD9\y221=(7O{>H>9H_qAe];wgsO鼨/ {t^ /2 _z oyq3.Հ ^M]o]h<8zu`c&,s/sow]\px_}(`K,%Gz-o ѓji]C#qI;r|L_ ?Aٔe`=-LR`\k%6>f/#aMq_a5lK645(Jrr^ŀ5 7]ƾKvBh;Tv{ؐ3+og\ugɶLC[y ͩlG%zQFjgCie$Dcڂ\iAQaSbreC%9T#N_|bY3Aqh7RP~d76e(tɑ'Ry]ȃ`S[7epj_$n>eJtj(9 x @T>(aНL-stkT-]aA[2j_|oMAÙg_T.`ʵǑpłBO/M6ޯD{ia)f)eͣT&fMU/ .u~6sUkTJ#TBZ:_ytsA=G6;45GLoRx^A:aKHnp=Ū˸:lu_ԩ2!<; ٯbq+CخTsQkF:,ef拱7ڪytoilũmtbm*+9wТoGq-Ⱦ,)Ȉ}Ρli0KA/ d)vЄSK* &?ugZO,w l+H|Ϧn'C$=l|yJokRLs%*_z=Bz{Sovװ-fo[%}|-tD߈4Ǝ R&nc U}PE%0,+?0#CX;j/+calC{9t:-Ǔqs$1Z _Eż@ Fj/߷aGEw.f`.0 PND XU31=Hsh(ͱcxȻwWcwN&%a5vk=>v;6;#x ~?E`EO)QFz*l# 虑¢TX앨o?ZAԫ2Pɻҫbs]ඛp%ʣM }H3Ts!$`u`%Bɽ7B'Jt(͂A(yZ1)=m3 2g4i`g< N l*~y rgC݅rahR _+Z+x+(8ۓ6s|rk%,jd+t*D@$i]\IN3z>b/l;Mh[F{M@;h8tX3ـ+-`^E0mhtI;WحiO oϸ齎^"X< ؽV@G?`.Pë-5/~}s|f}$o|HnW>p8`_PlȜ-Merj]PRlYYGv49Aد(lT Ol oQK @ÆlVc{u؀%g3apDzb&5#f$p{=wEV:5nڵ(ȭ6G1J%/f`qȕIs/puCD^"ѿo ɾ2+(?k4y0"]ZLޛxO敯P,8,{6 ٪pVc|yvay>?]>-wθdQ'zMџ3ӈw~=~LrCy!_/g!-k߅4tȆJ?Vj}xίtjQh[<|C%b,^R*h ta.|Q5}Tw>>eݲQhV_&>y,F7_dğT;)n̠e/L1/naė^|َR,x{ ,#7䨦%כ۱:׃ ]-?{ݛ޻MRt~_?9BA&ػ+vIDF9+Ѩq99_0tBJr,s"[ kӜ">@|L w$U0d1Yhm鶮7زMTp-2[Q* GԚ8&Jgh¶h,lk!D?,l⢥ԞCDT(dlm7 C,{z͗əS~K)k$_]iFߨJO7;Ɩ)׵yG+AGA}}xʎ~ߠnJ\{܆k<>J$# #y!|i;6o8[O77i[LZ".~1eJa}QSwzEt|ZF=3B6%Rj:%\)e\tFw-k7h 삲BqX { 4;u+ne=dStX7UW[A43fh$\^:=npv8R:ՈX Ae˨6‚ꌰәv?ú x=joJH}/}sChEJCt6IIuz~sAqa Kⴅg k !Wk% |?Ҧ)Ԣ뭣46L߭D U+ai䅅ܩp"@R5iL SF-eL4-Hxsۦ"d;Y~s*hxs&eW,sExWUnx< ͛P\1k|F~] 27teS*Q|gco4~MS,EjJj_6GU]V_i8r}}ȮA0=trsκLLgtK49ţ(IN4絛bÜTps~%˂UYKV\9T<ԽOjK3ARF`Z ?0Kc!Wt|;AT=g]њz?LYYEj)Ѿ|y.[]q/遙|aNw ]Dq;&JAKկ2 ʟ뻾g­jn~col_Iq'iQ&3!czuHzmamwݼ?0g{#߽~ecR=v6{k!/ug<'e*Qy@LU1=W"U" ygO8L?0jKq&}IjQŋ?GQQKKpdCVD۝I%<9 x$wX&,O>F ?f7dngRg("GyWӿ ♳cXJ旘~%Rؐ2C6O}x׫~?m}Ŕ;`* ׽F Y+ ӈKxofy*dg8e]R?{"ٛP,v ”{|`{Ho ~VUƇo \ww}rqffPD qj}s sRQx`mw|azΔ@ꯖ@N$a=mtao.p:4> (M`6nb6V8e 9"8^Gï@ Tms7GQ]-75[?A`u7 wB^&ӂyԈ13`0I%/n0@_-QXNC;W*Ѣ7XuX=,c4Q߲-e%t,ZƮwPeezY%jejТ)f%KKz9?3?6ѹC*}ShM˝fکL-ԋu V~ڶ$2sE*hBC8Hp˷|GglGϜ;WLчф#썕*QV2 (+Rjʔ+{*:qbzbʹ͢o~Zl]6=e^ ŝl+9x#HG-LDɋ~OΔg)u( ޟ%Z%o8oj2p':\[8;;0 YDԼU}}VkРv󼰈_/'Иxppϲ2`_QL;M .э{moyxU1f:o 2{3 ]}Wnʔ'}E{e5tϭV6W_V} |}ȭ=U  M #׳XVO~{a:,}5zGʝrw] ퟏ|z8~g#{$ d-"MH$^TB$X9\D?oTV.GӼ]Ǟ}=]ʛc ٞC m6p0Oc?xwm/5\lxP@mM^. :b\$EPc~ͱfÑ*fY k z>F<'(?{7t`@<|yP'L?McܼMhU >.v Q~@܀)%_)|u0-}@侈c5`oe7Bʋ/So@C[ev|/%y]"}B.u/WD@J EZLDiTމf',(օ|iM| ӗIUlw}"GL*?Z5q[Lb4ƽ$Zq43=G~!kGRƨyCb`gΦ({gR+Rۇo?0.֑ɲ!u̝VR!vd:CUXCK[4v 9צs ^hmL4EJ~=K)^Qm)'1UYhcqptc.'P,W6A>-@kw}Dx zO"_*d¸䍊>XDsjgèN%1hw`+v]4Z0lckm! +6F=hg&[wOȾeۯd.*K9guәяt~&* > v(!x/:jQ`0m}9R=#/5AC>90^Qr$96wi(ڡ Նir1۩8/g ̄ h0Z u-R+):iCC>;Q7Ѕ8nSVoUfdZc}:<Hil_;B(=\U.ͩg:B"K5U87֠-B.v1p#jl|MG85R8 >vXZE$P-d_͗D<@Y8Wb@fobdJq7^kێa3w+PUzVal Q5GCA|,u-7.h6XX,ʟk x {#S}̦g^$4u"6Я,#D#L=+mT~&xH<{}t^ JL|-VKY_l ( *Q~&3]٨hѐ 4"{?6|;tuk|WnzvȧϊY׿]=kKm.}MU:~j|tzr=?}[\>1y_q{.$.?(ڷkv1,':r HCzf{7d=_g9:gqNy|G&]v+,Zs9WrWM/ ^b~|N,[󵥡#kN!Ay^(/BK=yOj`UѠY;YQ_9)_AG-zۖ2g\yUo_mvguS k(dNjlhϏ"}76< xzopdɣUV>*#^QU&^o/U*Y2鞰޾1ꗪOY;X0 sF}C]q^ߛL^VU*`q|/[$=WK=[oeyy^NDU{.a[etF:/Ds8lr0&?u"vV/\;?L7(kn(=nC<1hʟr },0hA=cs P7V tfj ]q>aT<$_USQQ pJ^bθi`|Ђ&?ttEDcqe[:Fg#!0 q-)Vki1PU<`d{M hCLS/LM*+BKWMc6XNAr|&FލH`za6Toz<:΁`un/a4DK+h-y#egȣš';!jkBe[kLxgiPs8r!$TNVxJQ5Zok~W<x .ÚG{vn=l{׺wؤ%!vSϳv[K>%Q$V15!մ1mz8_PU8߄ڣVaDmc}N@e!͝6 ch@"|R> PX4FFlZdql_ZX|!<}ҽ!tDLh.,%EA CP>se㐻5)-=1!wAhZ%rwY:*I窱)kZH׳A`x{3s%jl9d?9ÛV6sK+ t UN%e"o{B>y(:0\W\R!T.}`D?*#jP|;ƋLb b iR/l:_X?%31MЫ xAe6_Љ-:[neҀ+^}k$7e72t2HBx4]7y> 1Nl_?c\D\hщ߮F}X#~)j|>$k-$*Xvs%Z6*ѹuȥ9}DaZ!%WwU%Z*`3"d 9.={W[GlfL#]gAc:OI7;jp ;G ʫz0V|AΫ]9+=Th/?Pc?-S$,P9K]2/%-By>)w"u6牕R/9yZCCy*eI|c KPmoy~'yߟ1mwJ J_yWaVv;b*оcoOЖFfT&:tg z]=-E._3:W%âWN?X8Y4݌O"Ac|dhO9t5"uϘL>&7[l1oB%@|evzNnFV!N>%RF0g)Gu4.>vf_P3pd} yҦd$ 16~ɾEݣ~Q>ẏ c]x}׃{Jo /E:?x$8I^z["z0}7LmiqoWuޡwыbnL+%c&I$'vp Lv7 "/O|I"TS6 2,%"ZT}UN%L9F )!> \Ѭ#5\6o 4>[Af'0*:sz@| +a,}^R 慛FXqك~XE4⺽L~@mOCM: MBN3}Dɕ7}Z//uO懠sy_Q1tA%Ubz&C耭4,]"6?{i ?Z O'\24&::^ *F*Fd!9R.Sd$|ZMcⰻN8]p]ieaqbq? p$N/_U@?[ƣ_^*^,;w'zD9r"}7+ewF~F!.0[ܧ[U"/L$`oe Zjb'DpA8K3dXVo}0􍔷},mE J2V.ǐn~*Q(c]78Y|,r@ظ!Q4OO .yýVƒX~V8u6ƀgrBŮ(̱H_ݾ^fd/ U|Lpo{ػ:9ezAlA`:M|dmNnoCL0!1n݇EE2Q"e]U,ڊ5/GL@fQ'8tLϫ{L#f=$!SoNP^P""zUYo$$'.M?wzVpwa7ۡuL]1;/*C 'u ݌) ~i♠Ypۜ>QŚu{nV ]DOD=osλU'F4~#6~Sܾ>ML/X-:&6WnPLo ʦruɁ8Xܫ_N\^_g'4CY'|*Y(/ ܟԽ1>=Ӿ^-νɱMjY%QVioww泬OG|aA˿ t,3/$P^4nU8 9.g׋aiV1Wj@::08kP:sbĵ"E y>kǬz[spGfpk3Ime:%|Kyy݇4 ɦ]RQM<[qz)Gu\џGL ^N0=uVTEFγLK(zY|p}_0GF>՗!x|.}r9=1.&@Ɖj]E;0BUh4HJ0x u+Mη n/טF.0?WXE Q?5pDF[-OeT%&bp6c+q-;pBD\=gp1^'Уk/RN u.=s"D A;DK4h ^W ?ÓU%#tT]]8so鍨n}]);TAJ鄍_.Y{'J.}9f}_oVA3 z*^NZp8Qf,Qu?ZL6ZAmbhO*Q9wp5A*@1h1 ?Kn$J`8A5X_7F-*GU٣Lד؉U('T.@ch ];b,W#BU8~vN[y]M\|-FMOh+~4)fsJ,Sh*ZIX,.77J cAIF9^ʗ=\rщm2y]i2h ^2Z76;=U7Ph ~.67Uk^cbX1G!HSy,SڢH ?t\ >Tt"k{^0uaұGCrCmt,x=ԭ&N̚] ewSVeqtJ%ZLAm.B;,Y \aoF p?< i΁5$zrW8cjq"YeJEUhO7MMđߟ|]k$R}f-rg*Z Fμ`.tF>3Ů%r*ߪZ15T{gύ/O,dI?P}K؟trx|c+oјԖѿkUO7H7&=G oLa#~@1?riâ d 5{+A%#צߞdQwGA'6 {|{ȣI?,ńS[}:3"oE&T& ɩ#=R[E+M?qTI6P9㞞Fiʢu %M{Kqĝ0ӄ5$M$/[cKw/R:3'ȣ~}}v[p<5F%0ľů=12Qq qt"Plgʗm9<yjyaoAotLY,FsCp7,֗<#xr?eaRx٦W0L&DINqbWDvz,.lh?-g:vY1k.;l/O_<{PӱR2׽fpO ADo] QN$K ^%/G1b4֌.FgXsxX -ȱdxoe*<~0Ҽu 2mn%>n{3򢞞xP-| ,Q6(qCDIJlx`+#g*Mc@Дɤh2;7ɜ!>|[+OB^F_\ h<55+?9&sA=&C۪!aXtAbqnLpC GRDt,cv:&t]{rvix6nnFŸ {<Ff4 ߃'Z pPB̤q28ٸ~;ps|(h*1 iqh~®ɈYl76&۔:7?=!I|yge*|k()A|~F[)>[Q߾/^C)ΕO$J#nK>;$ kNw 8dDX֖s5yh#Uz ɗL>I7(9T`f]r1{l!$:p#!Ϡa@6|/`S,> E9~q}9!YZJ[>XsؤzW;vǤ\!6HmƃXyDqa9{%+r=9iI:NzeBQn⎲ͤ8Ri6ӡN#J^E=MO{敚ONoz.V<omsb*BX\ VHQR#A_%R_Wɯ7?|G7u(y /USD#9ھu|41xGU~pBے]3~$H[ښZߚ0@)LIV"qhjq/վX+VSwpoɦ& /s:qI:IMyY;}yeٸY2:kGh,x~.S4wQ^} I+ς^Ⱦ\rEF.o\dpr7{~?_ENzS$e0'ynUBc%~O!lhA}g(t26]W757ہtAت.'v8xzUE_e /v'd;^BŽw&WCu?ᓚc&y/=\s1{"&G7g~ p yg?9g=Hݳ=(wiw< 8\]A %aߢXSӔͩf*2aŲTN:Y/JT  L["t$-$ #U-ܣAr nh`>eإzPMd0So1WE;z%|^hBHdX,T]q$q}J!814\Tk67mMQWƨ|;%',Cg<jX'ϴwKWCHW1]Q P ]ȿרj}kJ I=K2fBQDn2 Y]_sFZOwPef)~8rmٱa)y=/77x( ij:lr} Π8@lS*5][.=xl~,CwBbQ_pu*:@8K8+aߚQ}ь7 6^ߍB@V5~umWC6 cUd MK],بľa2-Zl|Iz0~3nM}Rf=D,b㭣&\ гEs[l&PNg%S$O p.b̛ꫭ \V V;?}r]ށQ]y>2yσ< ~^/Pm*gUE~XM_Tz#Qr8{@ n2 C߅X5q%LKDE\Լ|WcBC N {o k ~HU'- J0fm1 bG~BLvY4LTuUokxo #do+i[5ee?2ALLXUܮz:8qn^lj纏#/;j/qW;pGY=ǘdȖ=!*uD7࡭68SFn?SHzGw㽪PLd$'\闋F&EtXo#϶ ~=;ECLF*tsNwѢggwMT=(i~(g Y^2ܿ|_Xh2ah?]~9W g[}=z~qpDA6 g﻽Z|2={tFྈ>Iۊ^!(g|}a*C)"O1ׇ]Dzz2-瓊?> __mQVϕ.T F]+*y7zz~?Y Ÿ$o?NbI?aL_]4@AuեY\{Dh_~һ{%Ա\>;u1n1A EM4}׮Eŋv5q7N˼L U'dɼ1}( sʆ.l7<*Tpv-d@ϔmy*qF知t}nv9@9&# ~ ]Geq6 CO{l7#@(Y?xnZb5 y, t>?|K_]V ˄__>ng̅b $g-c"@!k]J>,>k|TϦ4t#DL/%qͩ>ʃ1KP͛FC|=%ܡ;Z_kQo)Xۭ'hNB=:?ۡ1:[`"w% o]V:+a]-[ʺg&~(KDAH>լRjl!WR +d[ +4}\q9a$9skǐ4 ~Qjw H<OH/pĞ}A &X+g^=MѺ)7DBߒ;uEpP BfȾF`NїUWVjk־0Ā U(7ߴ1Qz#\d^uZt4[V-JX)/Je?T_m?/s>EZ!Amْ΋(RVx:9Ys/X|(IQ}PR5щU܇g9jhLQ6 oUK cpK=@],A!Bnơ6şRBĜ:կ;:a7BJ@WWNgV%Ml Gصə<`MQײ=0t{Sv~ WBP{,Tu]UU| Ge7gEgl`)Q0=[&>|UWA-ܕ1y$uU?UcћZ4:+ "asr|J?@ZRZh8M,?JI2y>ە?q$&@Hwc|Ru}=]sRDx;~|Scwɝ'?|j}yjcC)E/y^bOs) ^KCy~bq+Olxz?qTƟ/O<ٕ0'߾czP5廞?r~>j w10׺RsO6F@*W'*^w}} l.O> >AU*#'^lot/SV?a1wEj}?DoY;rQ$|:Ky=C:Êk+ǣFOrd<5['*ODp3ǣ4-qUU ]~*no\\ #bg;ѣ˗yy˘}|G2]M<#at%GgkRDɟa%qe0|vzWӳg9W[ 0tG4ys{|,Awzol ҍW,%9DdaL𗄨D=#R'ߊZIC=o"K ~#SַbX66a˛v(F^q*AYB+=;:ז0uo{ g6sYX!9m-#3IR܃>{YHtn\Ԏ6ܳqM`)XWʸ!õ\8!h3I\,1͖_Q J#O.PpXʘ;`m0ηT e*; quoF8?聿:`w6op ,SOo{u)uhۘ~ΧfK[Lb/ŅyzI({ZlVfnSk,w7#W[vַH\Tjr ,vW\ ]o۔@4A6bwճX5l1W K;[9.|%6eSJ;A *=^~?TT0=Z|*Ht`oz6};Hz@ơq(P;;<ˡ'utO{VE|"w'}?gI| @(mջ1E )&8=s(ԆB0_4K{PNo2砘"e C˼d^ DO@W7 {I9GH"О N'G<8YR /*'BHѻDغ>sy8op.y 7~߭T kx0s[nnzϿOC輽Dre&D΢̒oG)'M#kg?yt !y׼+u8F~'[ӓ< p疀(qL{Lb|}C_al }k']AM1M0}ku=@2 }u(Oj^gLE[<_˟GAB@紐VkH~_C~?XGCd?(L 6&1l"&Q򨘞 yIiBx\{&,?_%5.M,HI;OԱ%ty9s d&1ධ ѡ,L,C\ z&}m%_5$gy䒨ro^pgg9 [A)( 2 #%A}R?|@P1GDObQ);+y6lXͣv'=APdV/g#zQ_΄z JݺW]D-t86<ԇ|G 条<޻;bSo8L?[=Fy~Ǿ?j!C/NX=!&WMD/-4uXx7Ce׃ i|4(oQDBguC{~P?2ϊ[HQ]G\(N#2>jDAmWQ%ZXC~U`50=jR[LA&cPM-@5`67K$B[Yt8cKp2dA&[r] cC/Q?{Im}f0[@Yy?,韭]F?K2cU}9WWk]%d9TŢy(h8Xy(ih?O >[_`?`zAKj@4j>0s?!ɕj1cCM"ѵ4m5X4~IˇIPemj9)+a#HC~ A]Y@,8ݓgU`?d;oln:ؖߥ1W;lXLzءp^5%>$FGD}Ēc"50ܚ˨,6Ff湔3=a`0Ʀ潓jաlyؼ+Z!HEʦ/!?3~Ό.%ō`z{DvC5y')mg9٫\6h2h6s=Zx[4e ej{JS8@d)P4E9h*0kC Vź:z&Tq} JIxTDfC;vBa)Ul+Jׄ _Qȕ..yKWI\Zx3텨MvP^w3#jm K%kuet{Cuc5O'E05i 7)#kCBJWxAh-q|GZ-X Pr4 Q:{0uc'P+Qv="QVQt^)<$d~YMoy~睲O }nrܳƻo_9Ϣ,~_7!y׌?yĵ蟺ܓ=9O|Z'YxWbzp`U" nzOt,?^/Nh@׃Ay]^SwBDYwT UίW|5f4 5]Kpos6&ؿC{h DU(#5}bw{Y| s/Bŋ(%XӣA=rdAϷ &g!l0}g$,5,"7Vx+vr2(C{R:?p0MtxC(ct>Nt4w3y:Ch65k _` oyeG`FL?~1|u@ǡ߿dor76«bgL7ecyO03u/=n`}w ]qyKwN}s? C(EڴtN'E0&tE)?[܋Le^O~AX.]L_`UM{i!rp"kFEJ qzvq &$ޅ&}eG 5^_7RIrp 1KVaa,WCql3,hu`V)P4}Īc 5o >hj3#>Vɶ[&X*dj׊m a/8u(}YM(")BQ|ﻠhiy'M0M8&jlQĿ4QC~z¸1i#&?p2?4=Մ{D)q!EK K) 9 ,/9w.~_ _)Aa`|FM^.l$uy=` 7?7@3^&7hx[<"^wQj\w]Ooǻſtk ?|# L,TkJq,RҦĶ _vD^\UWyNu`kMоDX(2 WdjBoI `vpSCfn扑@f`%1-c,̕nlkM~^8S8! ^-Xꇉiރ~|S}ͦlDs80lVWv`|"uF%{q]\j*IzGb4+赣 xTRǴ&@]MvX7@UlAx=U%V2zy-&iask)L6"!k݅-"]pR%*Ivp}L$z>Z~ZmP779%,a[*[lIɄAFCx+Ra&V[l͗U@lЀ^S瀬u\A?}T -:!WMaLoTe *^jɭMs6dnhd1oWHm=ٰBT\Wm^^SNbBg3Uˋ%Q=w7 9n*(+c\e;&-SO9{^eJxvi#{H bDϑل+Ӄ 奏lɤEzT5i;g%~<',Xk|ӯ ;˪W/z6P"(Ǟ_Oe4 ОX?l N?FowCN/M]':UߘŃXw:Jy*ޞ>rrOn~Ɔnh˳A2osX.M$z y8zAhpMQ|[ޚ1}6g# _oc>^}^}cݥ˷Ky,1)[3ys/k %żaibg ]U;AhUݛ8" :V shq/+ 3h?\vl} tE}_W/ lqO,ޠgӳn)Y;~^#KE2[9g'1lͳof#oU#-=KfeDЁ m|RйB Y^6܊Cm#$]:>}B%yデad>S7^TsUc]6P2,\] {kXo!D 2t>&!˨ӧ+K0I( vT,Ɋu9h2z#GKR:R_b@ m4|Oɮ cͺ!Fх2k']FiȞ5`4`Ζ6y`@;nd ceD\^Sp=ҒiE:PMF m %M4. : kRzKr@޳T>mXzG? n~yǎG\oC˶7;>xn{אgj;@-y@4jt:c72ˆ=ԽoUFd[\~—)޻H*j Ԟ?|PאV 9V\ȍJh8S^JFvk)?r[Hn&ZKN3vg5xbK:QI *C[]x[ɻjCd_aSHP!@W~CSP24C?nxyhB{кd H,駦'(:5F٧ ߳9(,!bzT{a?iT{_? 2??G{yKUC`x$ _/i9gG ףLPWmHpnz$uy|?Ig_^}/'5=YB׼ھN<9F]o1]ECgU֠꫟O7-SlsCO!ݫ%y??#_1^.'3?mbA!UcDvDPߓiUV%?!湈Zr 4.+ 7(Lp#fݭeT Lʂ,LvwxF5]@y^ʋey1PЄ#^OZg}K0f9p`_omNr΁S ^D>SHIǣG=>lzts0bzpiȮ5nm5&;=د&(Cs Տ,#O Ŝ[L)5bwv0ߓ}n/ K iQ].?u' C.O'fun'7>:Q{PjQ(ئMKqo:hǾ^z]@F]F]l}J a59A+o)=)lO fCU$ 5BU4ճAe. g2:Y 2 mjBho~njnq"yΘbTQkd v/t;ak5 x'pW{kM@|+ٔaHzC8ϘEdK, +Uqn~"_{uZYZ/aifzE|)iX^+BHS[DS6LMLfIeAcʹo7 .0aLGsؚ>jJf<=g Mgh â9b J{|Uti?g:$~-`vk /ph&4Zc%*Q d E/;V>7k#)A͡].U^;܍+ႆAp8N9jdG~3ӳC(ONX5 椎BR޸k;N^"3xktpRvp'쯮M)\O,j u& *zLM +`ekM@;L~^u豈 YrڳAO*ap@^DY__'-Xy2DsPs4|BMSZ# 8[m=jKIԹYˢ`!|d8#Spo\>X*<}޴ Ds _lpm}z rs#ro>F5톣"/A\be@zփI/UMOBB?h:{_~?#x@ӯwҳ63kATnZ8dJsgţ$Vxb3v 䡳FDv:P#7}ͦs쯚_×p_=լrvϼϪ|fQf!aB_kSW^4~ꯨZ}ʜR/$\:^Ȓ%x#("_#~v׽߿z=Z6,Nr]4K%#".B{;n]eXOS׳7oWtU 0?D{igu;xDCӨ?H+TDuWscL_t}45͡Q@v^XpcF5}fR0'{|~`Wy4zRGqq/gL=*_z^ww"7iz{) >О*/|$]>c5}COp F>;!Ê]VO,ф@9n10'Eɚzt)DvKwSK":|v,6 L$zXz[c(D8#ߘ=>w>ŷ_>_vx<#7|_w_;jGzPL}o`t햱a. Mb{+Ot2(fU ?%Ϯ vq:ŸgLjIбf7ʝ w \zj[̥e-/KLEeo8.!LQ4>JݞBE{{ݣz6Zdxs@3 }Č/ 2 M˧RzY}r?I kz=J-hڐz9H> a57pkS7!u`҈(45-|.sNpcU2X3`wq٧R)*F1Q,=sD@?-Opqgg]ާK2z?Q6 |?CS߉-|ds,m9i\ v0Xth;oeM[mqŶYQ-Tzaו?,2f5溚uF }bs\:ﲄ/<7rP\q:X m]I+ r-#J\d>q {v,;AM<۲p6 #ח6 [>r=/9!MPnR0 րۼV iš|eY*.!86p!dj'Ôa T6&Wb]"ź^8T?_!?R0"Q|,C,s| A/T[d[$hAGW8o8{lɣMBOe &qhRn7@Aֱi\F<}%JmrൻZ f2S̀~Q9PHW4Z a]sS{ 39`e_C[81ھ+y}9z'_^3J 7CY7]Y,|ٗq2ô%N1c=6TvRpmq5I3>YXŬ3Hbs\?j#@*JC\,zi31 (N*Q՜<-+Q+]Ƥ?Mu]JO*wh/+3%O#3fp-}Mzy0/ȫk>j$Q\y_~'llz//;lH]H ?4k>Ksɒ2X\Ȼx`os N|~|نp#}DNG_ztu>El/qv0~âl_%й7"ZW=gӯ {?8F9e1= +B yļeu _ݚ7co`MU?ep-og{'X|Zʧ7Lofs?/'@q"tżg 2gLMr?Zj[l)m+ cepu7,cvχi sB0r;'" Tn(JDAK^Uld & ;a$7zk2e%Ff]ݘyhCm 'Zcl}|q6J27x\U1E4boN g;#8[[Ű>EK[zUiG '78ZgT+P,Gd4J{ g7k6WRې giJ%HU,g.trȮ8R"4?q[#C|%5aMASAWy1>3DK.yUy@6kM^\9Ģh6#>q>=罩?H/S)POyӮX_4khe.gN'8.4ZpR2t;V04E2%ݟC`!9ƭRɡdaϟ4t~X'+Eي ^ߚ֕3*Q5➷L5w t'IUbgJ~GMWbju׬0^/MsMZ$=%B4몝D+i7FAj~Pve^#v$\ЁFɯ^3u)4_x xhkg( `__xO6yA׃liux7."z<={ͦ@0kt-bz:*Cy潏?j~$-='E_}y> G?s;վ`"g{-#|j<{^_j\OPΎ/gO/_‰E9$ad..WE!S+t~WM%[9=gqvߊ_.sR$jlA5{M"{ȫ~ٓYԷ{'W5ngNi1Ϥdg}/fXQ8V)tq<DM88L=AdlDhf揍͐ 5A[nr?T|r\ef%C䔃oVC 7w w/(˔g <^ΆMh"7(vB0B)Ϫ|۪+=LCW߷ &0}MLխ'1HwifM"GE`GbznJy]Fia*_de*/=y3GyWRg^h sE׽Ԧ'щ!51D1(߷#kN%}ۋ~w'z fL[05wKJ%O> 䈿61hoXR푢exeZ>*6jf Ẉ:>пLh_t2 `S@=GK(SFȰ ﱵXǷm^F a7NGg]TMc,'4Q{\ۧM1Y~::3G9,YhV ?*rLN1VC|o^zij NrARh Wj`&"u!#ԺGi]"y33 EIRk |Le6tQL|1ş8K3,F%=ꥮ=(-Z~DܟJv} ~ UcY,4?GWw~3t[ߢ0ox`82(S{m="wtK~߹gca@ݧuaQy$㣿= |aԔq>C46[W3,wJtZ؉vFbm1iO)AAfT?K ;pe}ӏ4`Y:ulamWV $uBcr09̔,^a֢rs s{t(&R$4JgKWO 18_|h`e.~Ӝ@njYFZf Le,H'M7(%,vm52tDjL{+#A5Q{"7[vyjK! S0K(Y {v9/OiݢA*BE6^xR.u a[cۄÙ/\עP{Rn.-~kS7%vbf  x-y*-As׹8K50U9|gvR226VvW4Ӟ\uJ4YlAZM*Q"E]wO f8T8'@[E!Zw?Il0 !0;wz.G6[dn'4i Ɠi@EV)t9j}z|Lt; IWc^e7ׅųƝ2uZoW(ʀ p?t.*l綶ibzW?_ ׫o /3ݥ+q\|2_*+e˯?lzTwճ%m`V _d;t=<]ZNm4+nxas{ίW=mO{sP'?I%O7_BH=Єի'I~'O,HP+果{B.3, ֘g݆a4Ggbvs3y9u$/ ^4lo^({@ _F$:_WfL9|;jHZN^r^'Rrm2{+"obOtZU75@zdVO*߽C>c_ `.@'yu38+':QUtssHQ2 ~$HVz?a,66?$s;;{˴|NK ~2U 'a%sF5=Dy]0xݟVzk$zⓊe0O4tO9i2#εޛ27$Nm4=M a 6/unl!`Wc 2\WdPGwĸzc.IQHG֋%+ jaZza]%VƳO;6k{K:#p|5wx]v #{i߆ Ž~6KJ=W>{1#ʈ` b  $v[{J/CFsT iѦ t c5=/fuk&w{HNh/ |խ]eh[^ƺa2 gSi~Ӂj)ʏ|10,vG\ԡ"Z2pr9@:grn >n> ^Mot8:gf J+Chx?u9Ѭ3@laXDl>#V[Oʵ K젏0FF4ޭЛ7[`7oGisvFk'F*ſZɥ:l-_Ө1LJr^V˧V>^uNM(cOll*Qɧ}\ZSx`&8AFdض3Jv}.GFi{h/@.R\ҕݝ̹ DZ7^cF;`cmLXnBM,]yˋ}Lb: !jRfI-O5p?,l%a2$pnDR r38̈ sjB:AUhJyE-HN)@m>s^ξ-V^悜Z_t&ɝŲxJUi@1PUnd,U(~PCF+Qߌ nߙqUNnakOڏb7$Eznn@“h&zaֵ+@XUG؊,f^ņ)uf%\%ʹvౠ̟,(lv54|bc7mߌ*BnͰh`}<+~ٷ;isM7hʽ:jP7U?Xd?9=zdN?^ K _͍?:jz%]ģA?D,P޴H64VIV/M- g99Sj&ʑZ d9`2{|^ ~i[1TIx/ {90'~UOO 6C?;[ƽ5ߪhxGKg/q=ϚQ^;z& ΊiĔ&*\G9=O^)k=U|ӉV1 ^>Up/wOu{œP>usF:knEL_>ۍ놟F^u_\PA /ow,\T轑~34u˯W}<mΥT jqƅ|i>WV˜w2W MrYN4>k= Up#2^:Y=2Lm 2lɼ8Y}?0Isor>y~՗͎H)2>\qm@D̹ڸӴꜢk;swVV6ԝ}{ª~=H*[Ӄ6죓}y/꿜O,uߜ@~drjp{ǰŰc:!(MxL.c>^ a7+!?KfDhM<ovsyV@;EoH VNX.D r3^kz!W$uѭ!xx*ҽAEB2F.`;ewfH¨R|4#[ǵ>hљ-Θa\ R3ef]a߇ #|(IDATxb?%ؽ{7I&2...Di޳g@!@q(<=~W ~_<ʼs%%~? /^ƫABL ۗyxq `4;_Iy:hIENDB`youker-assistant/src/res/icon.png0000664000175000017500000000335613260315532016052 0ustar fengfengPNG  IHDR\tEXtSoftwareAdobe ImageReadyqe<IDATxb`^oR, [kϿgDa9Fu1b|U|aL^dt\Vܒ K-vI# ~򴸻P!9A5&&`x  Z  p@6) Ca4-) .tBAp<"RQ+B.kg30<_ѻFD_FLoou04WZEiX·)R p~'g)k*K-X’lq1j<L+\?,q&h#IYo*u!*]fLT h[+)L6Ma~vv6~Eb(zizQջ7(xo= ٓ( * ZDE1PFmӄ5M&~*300;_g~ɐõ~cs8ƫ׫I,Ĩi AB krT痈$ =H5a: /0F|- = (2lYv5:ɝ/AŊEv<4>Pg{^ lDG֩Ndܨ% '{_2sS),"ν&ccX~+cdX`ܠѭCS5&.tl=Η e2I"^jY78twsT(-L7]+9{mzTQ.=MDa~̙2\4Dӈ4A@e&7Dݸ?HƕQ_FH\4 $ Z.g:s6i;37y_P(>Jj% z5 G4kT3W0VIת_jOC7dB.2 $ `'I-Zk,D*7M3(1mH$*n*>8|!TRuB󘅁`uċTk@VAn-1TڒF7##o( p%B*Oөba!dwV "(f{Bz&.I/\JX)E-A:|Ɖ*@)'Ҋ3!m-;XKg'nϕ"CL p>EəN-M)53rU? IENDB`youker-assistant/src/res/underline.png0000664000175000017500000000200713260315532017077 0ustar fengfengPNG  IHDR҉ntEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 4IDATxb|à8$\ @CÕChPAl4QQ0 F ]pIENDB`youker-assistant/src/res/cookie_logo.png0000664000175000017500000000341313260315532017405 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp \0IDATxڤ_HQ:uMgVZi>Y3Y$$ 0SH$^*2sO(%tdYjfLEaIjufq={ٹWe`BTdhEj +؜"|*$EDSbG&cH)$!2)9$jD75\L!R[ͥb ]EbxCO=Xs9,^fdo iQpz):Q\²+Uwu&*nc+=!n;aj|n6.M+L 0Ό_X?N57G0=;'Y˳Av̸h^af@zI#oedXCL cӂϊwBwa8WOafvn9URSَݔV ˪ު6Ekapl)u>,)OIMH Bl:?Z=<&1 څŃd5jWrwŁ4*%owZXn ٯY !^i{_b5ܾ32-~ƛBXOuyt&n{k›VGcm};"EEv\0:>_|a8LHqm7Oo2zż}Ր'RaM#<-P$e7-䄽P* 〕H}tiw8(Ns.&GI9oR66ZAJci.WKۖ!Fr+ Y<d7nCVoaF'IENDB`youker-assistant/src/res/arrow_up.png0000664000175000017500000000211413260315532016747 0ustar fengfengPNG  IHDRx tEXtSoftwareAdobe ImageReadyqe<niTXtXML:com.adobe.xmp  &tIDATxb9s&@1 Fb `2@@`E  Ĺ e@|LPe  `@ gq/ 0A%z g`@ƀ X4]YIENDB`youker-assistant/src/res/minBtn_hover.png0000664000175000017500000000111113260315532017537 0ustar fengfengPNG  IHDRG(tEXtSoftwareAdobe ImageReadyqe<IDATxb?2`{" G^n^m^{DY #HX _?V Ft""@S'NPn/I `(Ԛd_fiaq&2rH = B2@ ,H<ƶu89] d`?j@/ %:!Fh 1AAC ~?oAn`g*zqY3|m4 9O1.|#?9Ӌr PJ@ #+E-nE* rbEI$ńD3?$dE17./49RG ~O "f%KAOLlN>>6 1Hj Nc1nep }[ !4 :lTOh~BӹyIOIENDB`youker-assistant/src/res/theme/0000775000175000017500000000000013260315533015510 5ustar fengfengyouker-assistant/src/res/theme/ubuntukylin-theme.png0000664000175000017500000006231013260315532021710 0ustar fengfengPNG  IHDRxxNcDtEXtSoftwareAdobe ImageReadyqe<djIDATxڜ;hQy>l # j$>JlA!" he0`g]G0AI$AR *" Yfv;;Jw.PdCǻ4zv{Da.ϷYE`!̀w"0v!Na@CU4i+D%*—YjҲCQ4Ia13Ξ#d5P;g)%;gjHE$%݌lD"BFKŚ_qK΂K\պ#+FHӱ,CpD`c,,XE4*eeA>_lUIe28TΎݴ4ika.ػLv粼b'.}# 3X*4E|.S:ųs<V"ΓGIzt9X gcǩ_S<)gyIuေbYV[udWajl_du]1^ź5W+QUDPmዜ\G"=$dDggWj_ʞc}|Up,˳*7L?>,-K m4miG7щLatKgH IB0heٰ ݏ]ߜ@E `"EvA:=8򕏭o+hbOېe#EErm&AhPRlE0$\"Kn}7XıQLM %™S<]l > 0{MBq I%n aZ)a5Ob=U{SxIz6j:֞#UP]g1{'K( JJ:es B 8W4] dӟCx{P-Tڎ8q\e Wf/x6)Q8[f???}=@ w?2V, QQK_LOr|滒_.=2_W_r)"SiX]?4+MRO_Ouͤ 9=$F͸\< W."Zo>14woCq{tύR^EBBR)%ŅUVg!yv7VYoSoOæ˸Tը#T]M7&ZqSǻ'£_M޼ZuϐϏg8מp ͥ8c#G?,C/ ,bΗP 85u{^<(O xW ߺY}lUguk:kB]+SX )T0*[q3$fAbVa:fnq?R˄1dqDB c )r[G={={{oĘ쐛sm>ł*ǣۤlfյ*pn4kyp*֑tHaR&0m ڗ0=natR.%v"`E3T`2 !"0MQr#¯AxsH u.0$u.o-j_U( qj}evpX ֔5P?y #|K\,tSC#ê6DmںD8>}%:צa˭ٗP6<9np+!.mɫV1 {=lVkjJwFΝZ>-U$,|ۤ+[$'²򒟃+h#bKY?{_ Bl-H>3x!~8OAlymE'LE8%]xM7] ^_"s$׭л)R jURţ&jR0q}hG@}$|*e搩N,,lOepS8X=]Ҍ9 fzܶQX.^PxNl^GnBu׶ֿvWT`,Ewy3GFQ.L6"5h}q8!@{݈'C߭M$bVV>2|Ȍ(0)''O_2Oױѩ`E|8됙>r Bu-^oCpIW*\,!6yk߽wfdBy<8:VEJEt:Vm팎8Ze(NkQh-"bp|AHL yd>fC:iuc\ݽ?Ο[6ol0CUuSMĸJLHwԖ~WrDHZ as<@jG"֯(,M#< ;w˕'a eB*KM0(W9GmUP8\i.Z*!$#"qRϺD ߜ.`ݧIV0ݚQ.Wq)^l\+uCO!ww0ixOeoy2Q>vB0U}R{(W^Wh6Gqeh~C<񗑑RM.bb#? 2.AȫX!o\ةS&x]cVb70bёinآk\yfJc[(ǟY~bz)73fכjRb=]dڡ f@0 CM3ӥ3dS%71#^ps(xaҢKLm!04}< X=ӾglM5z:OaKj]LnCpG?} IȻXMی)SbnT$@ 5ugL-ŶM2"LDo whUHvq玣PT:Xo-sN'&3`2S bb9&LBgg2X+u}f~5%M= uӦ$uubN)FMEo˧_X8B"̸bX>{Y*7m"X6/ 2-[0j4VrݶpAy$|Z,sd)+,9vx1#b[+1O% zH8sōk}F!w'PS=7[wϜ'Xmބޮ_Wμ KŢ_= Xw?IatݺT(q(3<RiU10OBx#\9T47iZ)7e9wǨmv;Jp_m<)>Cx}Qr#T<#2_fMj-8]`5K9= 4»ps/s/N=5wL EBm c%AIi3Y' bs/bWI"͂t$:Z?GQxޛq}Ocڿmc0a쭲e1+BEGdp>/~W^˽os`1S3'#lgϏC$(V=2L;QVW`i{WcҖ;J[DH?V^` N'}8fVkyyY0O@c_W YarohCl|9(VbGW Či?`*`&Y<D87۲QZWyaV0r|}TxヷݲۊP4"ZYwEqIEޔ06\=^E.9,ҵ_BHL!=!Y H,q+b%=ൄtVw{̩<0[4?$;K$ .qZ3["\Qƃ-PD ܖShubO7j,9߸<-ڳ/&G)VR,&HS^؇4"e`JFծ]Yg8 {vkv)ޣW ˞ Yw}b-Ɇ_=:5S> /K^&a =ѐYT )Ƣ %S҆ Y7u@n`,VZe8Gtg_g&Z'UevoĢST`$3hjVleЀ^:Ɯl?e,Huw"L{h ;,(-_c]ۼ=is^^gs;njہlp7:P\DsRER%QF1ZAFr^[/-s4[~;! ;i(Y #.R6e˛5ن`kՠm47ijG3ˍzp+( e9'IT9cG?{02N\xaU}+OL<{ll̙gAڏe# Rɵ^BOt֏ГɜKEJiYp_,t k í`asԆIfMT_A_] i4%"jzaevFAcCz2ewmR հMl -n@llL#hޛr<µHwٖئ񤥭Qe0lMMTġ^R3xJ&?*'ƞmޞΫVR $6I<GSSs.:\R҆ܕN)ʒJIw"Y@Ky9Vگ`8F}]J~V)0-T(7D/2U8f!XeYz5~a]̮]<;BY'{ꩧb޼y5jZ}\Ud`"窰N+(TH AGu}KNg視8>, ^, qNq|bMI]xxꩧPUUe`ىSI3|\pZ‘<Յ, ㈐DR#,"Uڡ׮(ͮpT[!iaz8NK Sƫ*12F1Mqj:%~XPiT МU*3fغu+>8-HG˹L(' k(xRC -31 muLtDÎY`U^]O! aԴ5//rzUsD"OsL&I/ =a ŬFLrZT%`OkwV>O9L&eoQ~ne*g,>%!)6&2Dc'OR.@P,IJà/E3!n%.tR-q٦?Il rQVkVK[̌4NI9$Z" m\Mbx>.y#9AtxRNIU*Zqt uRJ&K2i (bɁ2u2g *ڱw }l]qL\4 ubA_/|̹}_yP%]C1<2l_(J|2`'TuLu4Sk<HYb#L옔zOT#;^GdxEEh}]_-m ^~8D/ϲerd~O( -5:J_dɢˆ$&w.*$԰@XiZ-3ky q4ӃoCի2ٖ}ሣYx},4gź͛TONL "p4G7 >Ch:WRjL_@O[Cww&Lm01c6,# Y$|ؑEA $z\MרM:|=heۥ==ZHL^ 2UKϠzSrՓzñܧ0Qgu&Fթz1kLSyqJ,Eiy%.5k!L[7#rK F?ֽ $[|+"G:^v@ E>HciW׳%MM;dĈ:%ylbųyg퀜"[0tEdQrL FBRMyŬRn ^_@LWg_jŨ'ET{*8PTR$OvEZ=On'j̯kFp_k[>ӄcXI`3睃MF8ObHD eѝ0^\A )5:=gv6miDŸ_Վ{*;ɖWABmͣϕ/#qxZ}=Nb4iLYD铨B3'TF-;;];z:H ?a".W8B/lBoχ%eǗcz]C -κ(W Y^'XC-xࡼ6I!uLc75MTնʊ {9GS"w`8Ȕ\ptKX] ර_5_>mcl\˿Ux1I%O;(U. cㆵ5WǍ?_%p aWr-o7zK)ux:XQNʙKt">{NRۑ[/?ag_^ {BLMt~/cĨq8&57)k p *$eጢ߄~~+3ޠt#{lQ'gŒ'󾄑Ucqdƣ%ՁGo^z),z$]rh< $m%Q0 F? m$WTsNvcxE9fNE߹ N6J,s g?V30,X+ICi/d/[} sAu\;G#1HުjS*&w݆N4#ȑsVi% O☎!!yْ/1z!Uj=hGd9%x G[$zgAY\KWѬ_OYh s-1ηп'8!sc~=OٹFNXhs3F:1'N `+B>[Vٷ]KLB( D,/\ [ pEy;*?& #gIBGz^~=kh%]<9Ma &~^Y+*_mU;˻pO8ʂ"1 7hXr$Fϐoww} VʢtrV%gn)}O9ꇱSuc0np$z=-ywb,BO|MB-:v|b aulL kF|",1>=,2G$zmۦGpøWOib%xo7^zlibnl{9m`o}u-~wMø_b_>xbz7! W[ Do$ g`t-*"u?dÍ_-@cBSEr&M8˱ږq/4Ey* j BǯQиpob  )R<F_ B+po}݁66oZ.O/co? YcW-EZ>7}}!SL??\A~?/Z7q? sO?O_D1xgc3O,X_]=o]} Xhq JXXC^$f,FRx&B,+d@Jpot I VL/ UoY80d(rT.y]wW76}s8S ɧaUZUTo;XpHzQX`.MM.ǧ<3,TGQq񖧅q~/+dڠ&u~ \ܯ}[ݖ+qϽ.#<_>bHDyg+볱2ݘV .k\=6}t9;-p>Ⱥ8jXljlS[#e"\q`wӫBM±@=Ɏ۱ٻǹH]]chQO+,כuMojvV}}IIxꁅyML¼a((|xQ>{&؁Ce&& wU^iLS%YrA1 5&:$R PB6Y6!CBh8t"ccYFnь\R74sg+;}S=Ms/O:>_I[7wWt7ajdr#-i2o:יge2a~8}DQtb)/ʧ%HvI<lZ3^ xD@bd9T尀JZ f1vy]PDha4aTe(|x;uHhR s0" ]Jd^ t I.ztϐ*%<35KsIPckC=)29\:QF9\;dvЫ#D U k{`RS,sHm YI`M<|>Wˬ! ?/h 2D7 9 umZQ\)iK̷ˈ 1c9ov΄J!Z6iyBT",`eY3bUpGXKeL9 1J"so׍P(H .ّD=غYnwDyLhY{Έ;0'QOn݋PjW.5YN1> }i}W٢XyǗٵ5zlT1ҿFdBτ挺%IVδ ҋN y[[ڸEnћkPDpw$$1F:} f \ d!yGsm> EjL=]vL&!G B{HheXI64D#11G&qMo\Xm&Q€V!=h?f`B*!I®d{σH&tUKN7Җ(G0i73>bκix2Z IŔ!y3Rš+}M!Rl/k(ԐYa{nȤJYtSSmHu G|_ z؟'!3cHvM]qw(($WbF@>(z]W4ϧv_=`~eh>|#ST Cܷ̰И*^6wb%"s Uila'/eYdҼG(RtJv9nw!{WXss7^M֋ Q^V($C7f]Kx٣׌ݤиYW- RfCj09ȉ;-"'@q \K{&9br쌲+rcʷޮZ>0,B=4QnPW/-I:1"}s6% 7S/6l릹*r9uR 4 vx|C7\#g_ʼn ~$i-FU2DLsx|&dR{B`sn1R.(|iD%Ρ99{rH"R70 b s aK?zC!-(^ H qF-FdYIgF5]^vFmvœ󘤬)M[f%(\5K<:Flf~miKmGL"3e:}H(I(U }WS3Fc%XrC(~L!H^+}7j! J6ZpPP1 6)bpZjG뺚}YM7nAyƵ`gǃfr6RN]jATE >Rƿe'&mc>M'm "|i'*:B1C4źfSX lI^+R! g!?騄htaE%< RP]˗m]htwnwQH'by{Nh Kw8/9$ v)'OR #>iYbblR;۝~ DVNU$a*|Df⹽[lYϥ( xAo8]ӛh:>`,!t X&HFLmRXg,38c1"c_BuU@{)YIȻ]RK "3X-s=2e $rDIa|Yw,8K'_[;L%j)_|1| mdi)ﳓ޲#0NS\ᮅ@` b=[7 "iGt!@d#k4]/2O}r뭷⤓NBss3NTË#pOC9{7>`Jh5kwfϞG;w.^|EPT+rz[}ʦņ>msAsytBeH@j ?OP*%y9Ax5cüTJ@聾NK Jq"%1DFЯ4Itu9TO=p4#F>']'oqrn 4qfNJHwW L>My FMv/^3g'jqwm9x\S[<'PkB6X>$@zMQ4\51Ւ享7aQ}1 0Lcӈt?5rtMQ1VQl1.K ]',0GrΖ&epCKj#.=6%%#R |2Ѣgc)U_u{J%,.'" pp &Y#0t^*lnTRR&e>K)}&rmG9j(E&7o0)aI}kWϡ]IQF4x眞x<6͢+Mz{2T'C)9M\=tLRu(afD 5Y8,H)bjHIaRQǀl]H(/7V4@uju-`H[(;پ{bq{/lQXB2tQq(YIA4ׅmy ?t?j [HۜgGPM(L._y$̸/K7#|'/Q'pꕏQ`' Of9,2MU16A>“J0uK&nNӄ[%\HݙӔ2Xk׬e tbesCg7 PL?V$BXヌʪ*3:ɍx(G+EvTB"-iR֊FC&I8bfsIG@}b#u5c^Fc,׺>10zYIW7q5>ϐΦb[* PS^ŒV0~Lce'[>>Tg`#>mNyH%AE7p EEp3um0~rK ZWbD=ƍG0 OАSl4CJwt-+&В_AE&a8Sv<TU8,K$ ?D/l{`vu(ʻ\"1QnPLT QH`iګqםwb0똠-,m@G7gF *i*c˗~r#zzcOB,W4A jiaBS;h?Szd9䳃XnZvնwxǀѱn*vciFyPv0|+jcop i8XX`HTcZ"Ebޝd'M_s7/^yuK9¬] TԽv[[;zzzdc3,jxWQzl6sΜ,`%[.<Wu슷uEl]U֡}zln}i MGwߐ (ly|0z̻i!Rز, rbv$ޅ% 2Hl7);4 jN94$(fMV:0.UL8oEfǘ׎ȬZ/:gᮧە ,'΁4tHK> ]4֖!CqՏ+9^֊mW=;f;??kjD3o;Μ03Bۅ0Kҙԩ-b`P˖+nqPT(VR1QfgT%" "6g.+W{P~3 O@]U}Pbʤ8}`:9 2*{ZWE8sga`Y?}os >Ju+jxz ՟={3s#.$leW@))!:pӁdvl; ώLj^O[7;S(twpt$KIUEqdcekUۨoPq)Wپvk ӽMH$XS};N+gGrHL˒~/Ӏ,,BԔd\"*1}C j2c?d_x*E6!d)):Y"C؇O D%J=BP2w 8SJoR3p)!K4EKǒs(QVw;8Y4GT~8}>mB;;.S "AkbYE㉒eiTLje kEN˨s )[gBjOBz'P=͌S:@-IRZnܳ9g1*ڨ)%L%񝋾E_c6i  оa=6ttcΜ0kǝL3++F/2'n3M?^ӂ[+jx+xu"ut㤯8_-oaiiJ-Psk0JP"ei8}I$<^VkUS_X?[ުЪozMzcj;ά2_0-J`I[J^Mfjb!yB4`((%*fl?RlS%iF٬ 9 fvLtѲNnbX/f>ىLL\w+g^/Seu+f<ø tEӇi=G^HE6Zt,P;nvCHPdyr)-nCq'˯ cG3q?ISW+7܏n; y Gy.yCd\|zg8尯b/#N,>(ڕy@P aURsFfTeZ]hP߆9FXgk^TD*ث!/kW*J#J!14[pU_D=0<@Ϡ~x뙸{qį';kpg`n9'oc6Om#=g#Sȿ_\q 7_#K>p/G'{yJs粓PN Uj\׭>"< v<t nS?9hl;DwC͸ :V={_1nf3x6hFE\<Eka8b71yf؇A򂩇 Ӵ>\Spʛ-JO@+>a14uul;.3Mf ~|񩘲qu{u/p_'Z_їq̩gcxUHyzL_ÎWtKM4ޮ ضEhNtRGݱnOr`3T{"~R/&¬.ǎQzӗCo6x;ѳ#|G~5=ܙH#u*Jzڙu6t'ԡ.q~MRHY]l}Sʪ'J>R&`ACzjʸמCunY >OQg3}Ӭ{_3I|L(Jo40,ȏ(&EjAPrE96 mqF6kRwlc$]H;ݑ@tMJEJUUU DUK5 '-ڜ"V%[y[NU([gSk} ֤Qu-x_)+2I-F PNQSbcPGS֢QٍH}pL,Qwp(l_ xiǠ lqd0Ģ/A_O0yWX7ڊ8s󖛃n⺭uTRNʏ?os#-k#DSPx }ʟ^ jFob (;O?+ g>YD n@g5wCˑ] 1*TMedՒi ݽM>KMLb *֍A>ArY[$KI_ǘN/#mRDža(wΫ{#?WȚio86G*N$ǍU+ Hz%c%tCdDr2} JXSS[ǫPvx1O~Uda!T}z1] KZYDhfm\'FaZż]]ݜt ljV4u>Th 뗿T|OEeXc'w_} &y|_y CvS{1dۯ\GN!Dw%݋^!\jd׬D_ n;:`d׊Ɠ Eas*PDd&8MV =v0;;xC7b]SLpXO߃[X^wcB.L w8G=Vw{gP,CەG {g~q ޮ9_jR.Wla^R%: ֱC{da|]6ѵ9iTMv܆M;Y&"}c0|Dؓs"eTn>T6=1?4ܳd &dE͏64OV7V1TpPGFi\LR;m]wk ɦ=q_.E^Fƃc >9{sXiAW;C6 /"X|Ð2˗.ه᳛b3W'g<2iGY1oT_ ^HnlcNA u)Rrt^x#4Đz$T:nz?Mbҁ0բ0L_>jdWg {JG:..gNJńL,y=Fٗ-X, !.7an1F.;ǟz} O=>HFE8=pؙV:w .lO?zp]CO6g#7.chbB|T"dϚ)Te0\D"8ܭFpD¡[ҮIpk IWXml223SjII|ywg`Gn;8ࠃQdF{mM^۹Aj)Cc.UijLT>/?2tRJ][4~0)ӑL.Ud~qJv ~9 a3,fp aA}̈́I^ABM$#MHcP]t"7sqb/`Ek+mey9qکjd7P`yBuXh)Es^ܥP(s2ɭb_r:u?3k_~ep_A~;xgA=]k7Q2:!(GEHTsn1HDrJw0=Ag5Ow簘CGy<.Z̏Q++vƕW] ox ^y#?~#ޥy5C-uQЈo7=|{wa ,Qf &4oN4HE/qȵ-u]S9 w՗{Vℓ|}8K/j?y33#.0Xhi";'uYErS*20'"OEsõ?- f:E<Zw1Uu]I$#U|$BW,6zi#LZ(/KrxߍwVIKEH+.'p`Ɉm'vQT2<,-^~Ncf}ⰅZurҺ2w3{MU_}6BظIKQ*o ?i|dOqdΜ%"@ "@A%j2:ZMMfӻwt6t_2ƗHp3C >p? $!lԡ'q;M DaH״bhQgngd ~r b:[N&(g̛u2((Zpaąŕڅ7t- R%(" TJKIk4ixbݸybնD ^`(]j/SS \:tCi0$vܝcku0YI-\BICN0M_}a=$Mb|| /^39vi vHP"y`Ax&A' ;/֎S]*& v@"22BIXz(u`YʥoרmC_ph4:bA¢q؉z XgX\Qb^||3 S6fffOQ[<($wࠣ| ʚT*crEFHj +!;[74:ͬER1:YYID`D͝ &鉭˴*EAT,r! /_{9݌ޮfLO'vCg<a>t9<XpߧcQ:ڌqliDEC)fFEM]Vl4$jG(ƜG6y:OXnp=‘DX8BlZ7E u6BId$Yr"ʴ,n}\GAX[T@```@gaǞ0hmmB[hVQՍ6PDl*Bvs#*} ήhl;klzm $Q^*᾵ xsXdUtct"&s)N9~V?8tx2o?Y t;_ށ G{X(dHUUVȂCnѧ}j":VtW b~׿ 61 tpW?xVmX?C'"kXBv 3^B,1|7=Gۣ}8\U/US,g]'Y!g)&bS=A~((-u۽テK_ad4b[_BpnrA^%iK`Az^fnJnIImr(l<. J[]MIt9ӳ3+I>l T'Hx$|Un|~S@e'~a\N۩mrKs:Y(r"TD^ cM(y/ώB F,TZSM>X+^ }mFyt',&!BJBD {gXgzjؑ%I\Dctʈ̿etfvuTȃ2_0-O/b]$\/f'$@.['ig Q'GW/u|^Ң9g ;ćVthyp dVfmhӥhC40x綺nsG 9&ZS"Ѫ!f)m \U^R1Rne\-RH d h~KJU?~|>>8X]qffF/!.NPgAbVұLvZZYXъ'{sAυKJa-6;.A1{KVevta:$ҩF9T45KEfܳzƩyk!|x ͱ5iM!Q~˳LDLN8y`p}˞@}Xڊϓmpocq:BrB)1:8T Vk=^hMsߣć4!yuLq8j~LD:cbk'ɦFg}#U@ʹ29͉X8\vEBaIm8?%a"Ǎ7Y7#o"A8Q&8zvY>Njk8#Mk}zu)ϐŔ U!K@cb+ 8wFEsK8==9θojE `_pvLOO ,\v7jh2\~nb O>OhjTݴzi8nq 9:R{=5w V4d$sS=?Ùk>x /xyƃصk76i~MxI=0>PrjC8y_ʫSS胩FJS![6nĺk:jqةJ|znKO }%}~Qzi15.qkإ @:t:vVw]TruF2\\dǬsjjK uw(ϿjX0U/z5A㡌z"8_o@ÚqdENv22JeUѱ {yyRёsرf7cV3l{NoWh5HRh^bXJ*+K}ٙwx~{p8#C^{ɫ#rTsExEt_ WU_noKH d!JHDhQRuhqvelHh*THǎ̀2jpXd+{ޖ޽=}/1v<}[|9xlp՗Vo '9[(Ū$4!H;(: ).r5o+ßdpQ1% $M}\bǿ[s-6?vKM׬T;zq'Ȃ.ƴGS̖s|n0`Jm(+闣 IkR5oݚ-hb/`+YbΎ3"9)׌2>tݚX3IRi.;l[flh*+f;Ȩdq[Sr&Ʉ4A},}UвR;3*]Gh*1ɝi&ԟ\K3 H/Db PʹNI7e2vMK7fŋ+!su-R>3aٽZl!YwCe\ed6p跖9pghG;hiEyf"B =u Mpc73>@̀BՂ@N 4MOdHEP: %° ZrM&Lih9נ)!9m [તBVnhJ!p2 )+Him ~Tb#刯X2 Ԏ5w!bفj 뉢"@O_w&#G ;PTX/nAqa"ʘ!tadQ,箞Pk꾬*b)LuUA"VdTPf{c31m^q!]y^SQӕN"M϶h-I`LMwljº fnO`Us{^TTTҫLt|D%;K -ZV.G8ҌD,,ŏJۺ#ss6RdrV3pdu+ BdY&k*DҜnpC OSTgPv~݂0-8~QD͝IJi[[]Dm 2[x@YXm"m~چc;I 2aiU}=-iAYLAJrV/>O^J߰gE3j|)tvu^VX% E# `X׷sLU9HGt-CVWȤ5AT]1VwXʘpjõ} ݰ)U]w'#Zʼn* F.E`mvMNRF։4X;:QV^&qZܻJ?y;A3I88$=(dw Z*N( 'V^ ~z,Z Gr3`GM\_ 77el~M'־)" ( @>A#& ڐ],ID6%U?nktѰL9݃}zA\ ~)8$"Wv) OKxxnAa/zjL>}i{RRK B3"HCmCVxyPG)Awm%//ثr560ĐbFjn^MWMcjQZ1elJZ]=}^'fHX*8ٱCO;qqDRt@Hz79 0F`pk&V#HK] eojhd~t65f$C!<a3ǎE/wD0f= "O/EGkm ,C[R5yM#G3vlE6QUw`ƌhllE{{**ܢ ʟ\{[:4:R.u>A9'~?vT]Xݷ,f'\3zNGCa.4,x۳D,tvOrM9(F8n^W\1Ol?ySK< FߛD4Jhݚ@z=8tNlDmx\>bE*XMm+Uv_eK *Zȱ4Ƚn3p%`7f w574iLZ :a9IP,҆}KG}tt9{D/?95!O I$`r[.<|k'}ܵ|~qbDRy)rBPPCf͚cEg8t>h~rz]NS\t3f[zd,m)̾([CxC2ڇnQ #p0b]-im¨2g3cf֕BiYE:dߥX|wI+6jg!bxrNT:dk-a3JA tծ#QX{ !MH~NY4RzĸͲԀ.y+Ҵ:%nskӮp;7q ugݖkP{ES._s2S4JO.F|1L{>xRt&ŕڰ~dYL35;jR z}'iݘT;0Ud C:ɺ ᤅ :)ǕNj6iwc| M 0uf/t<4{H$9z`౼q͘9]E*GS7Uq1TAcv18JzV '5(4~d iX-UJͲ(sɝbs-o苚~Uo V6~aBN:qDXr5AZQ3!ӄɼ j~E%1 FKĦ&c谄6.fㄬU/54˹fG3B8|vQlEaMǸ,quB460e14{ǥ38NS/4I#P'u(+n6D2Sa(WԽs):Ot`'< )-<Z-> umus%;RDžPȨĠ_5aUxHu@'&jţXr5:3k[`"cs0#9Nb&&%|<闘S9/C2u *wİTYHy_s)0h"}*G(q?|i%չS`\ݞ1ܷɬ.]_LCZ|Ҳ/'Eh̏@6>Z"ƻBr=m"ƬO|X>ys PEg. {D tPk 0}e>X\"Kj|=v|#ǣ2~ґ̑ $zy*)+czRU D9)0RR54`QfU\UW\X$Ҧzr•K2eEEґcGq ݛ5Ze&M()Szܖ㕖=p6Ǒ#=JRΟnҎp>WsJ #"sJ QT,Ƚ6os)S8uNεϑ5rxMqcK@j+XСbӦ-vMMNm[19V7vmBw[ K3Ϝ߽4bga;PRu1L[+n؈ߝ3kwQ#f}'GPL*7;=*.*Ds[L+@_GQR1Nb0:f0)i O%Nt8YM nz(945cfr55dր< ]cFPl:*IBŦf-jl;Չ B^58jKF[[ȏBqIqv5p~LCndyRY?M#ܬbxRd6c:׭ 94Z6<ͿE5_v|a2xiO;־k؈3,٣xlJ-[8båDŷQyX˘=/%N4t Ae 0D1Eb*b Nz6f;¬Y:V]&<k~EK>.$7Қsqٗ =44"]6} u&**Uړssg#FQEi! C +J'.f>[WjԱK*JP1ZBD%!ΰsM>GIHP'x+,ёsןjKpe%|(8AW@kت#R]SѿX s*sMΫ7!Y0#F_n,H0˴̯=R/d L${ )t!dN Ҋtj|KR}8j#M7;e89`0rny0Uab;)bF*zQt""ojQyJTȦ8ӧ$ʙJm v#P.q$-آ1/T^Ah͸wZ,w"_WC4 ෥^njTFuq'l?:7JpC)1.OP` Su"-}aj4Ӭs|oGP^ck?$߿ <>tOr#[йbo'=k/2k cd}l wPD02krd_ #ߖ#SEEX3{q߃g}^9\ۻS V}λȪ/!g8OQ@RXAΦ#~t~}$aTLF w Aڎ?%\҉%2 ͈4FXC; AOGiw' 1ıbJdbHbī{9v= V jYa+s)`hҤFі+6lgRwkBiISDr3ƎOu( ZRЅlțo}vYZnJKK(-+C)ak{?BJopծb^r,MbʬG2Τ?aR W;DEKM>JÜ\ Ӛ3gNq%NbDLq<u)4_[__7<6u*=L[V]l%̾jAtG"CZ*k1,,B0Q~Y]O^?'F08t7P9FZ<øk?W2KO]rR=U T6ߚ7^9e6sY3e\ʹkϖP_H])$*>8An x$p@;=8s1e<חÊ,Fr Ulc}*֏JyU2Eن:Q"*{0F.}ҹark=2WGQFxAsk4cǏc{1sq 7ŸWϝ7.@9{(QwhOrge=5Jqv^( GvlfJѕiN|qm݊NMEZ,^{^޴ g_2[_F0'ۈ9shWxO[2 )mjKsJ.ZR4`RLp,-' bѳTW ¨+L`Q6iU^zDt,nN+V&Oƪ A䕖fUǶ3\V&Gm"+̀ cUxtս QY _EU3ENQwPJ7Ҹǔ8q]A1)-P r)G~A?ixGN⢧%̽NeKtv~dq\`T3X3X[S~7]n֓\d vevQ,UͰ,>mPhӯ.>pHbPI.b;TPZ=[7W [ H1s()n^4(C`VlvaW!-/&Gx)n=єܧ~ldD1rOZ_o&EVk4JQ$;TNqG O̥MeVP!,WQwTT! _8/W刏w!'L%YwN0 u,t9lH&r6$˴%1" fn]C5~.< {C;n(T[)[pa lB(VGZM30ݖ& fe4xJE ŸkyX%@2|աy [IT,zT,˜I XjЪv M!ˊ]شRKUu$uL }x/ i1.7)Lp6O ^;]Y<} TN)oVőYuOHͲ\w˖c#8ʬfLWUޕO)Ʃ|EZ62.ОFV)KՔbXMtJGSMvViKm)!KkGǶnnsIYޝP):g4b2p0c%a42V\b$%C$0VzHՀA!2mKfvW. c:_xӧ3.^sĽ,N}X6hu+~ +!FG:lrg_eInj΀ҶV [n~2xK̎"^Zgv,J]GSG i%[ʪh Ǹ[bR9vۜ *Tr?6~ŤoOǺOBLy%_K x>^&_'6^t"L"N!AFKK1_2(XRfѕb#iTXAPc71Mre〦<|NT(<&&`må1)DbeqぴhlB+qqv1[\9 AlIc*H v$+.Dr+mdG %C&Q.#. n)BP Y.͏{M);V4,Gާx$t6H耬ŸMȺwѴe~"#Wx}䆱ZvNiN)԰y3"0vsd#kZ`%=M#R6CYJ JFʕ[D:Io 1j[5ob0gSN%2xsT x ]lZTh5bv{[8=f( XΎYye96f B cı!Ӹ]N}$"rl 9+QR0jM"@p2+)tpd\,srtYK _d-.CӤ!=X2 szQ S8_{>~2 JH'Qb_bun1}漳wcD(M(p),}ȭ^.; %E8h[[UhGMMn4 aBem2ҲDZY4֌(;vqj}.u#9vĀʲrjg̳׽0"53n85TM$t㴣@gYpٌ!QZKL$]y}7 +Si瞀_ mļI¸C.ۡ>r缴}yI5uWĈ25J֎l?Az}S樸.<8bLQA4.yK/p3X^L-1Ơ.AyYЂi1 IxIC;[DO:17uc{ ĶF}:>սƖ[аm $cƌBk~86W!1+ҎU_6a{ ՉVoн!mªu Hj~ 5EVVm¨aUxeg Is/5-vS׼vf^g$C!C86c+2R+S1؊WU*sj)qWauu]!`U Qf2\/ɰq*R C=RX؂^%M0|YEdgDB0J l۶C#& 8iuQn??j;{cdJ&!|q+HRUڄsF/tTDZ)1+դr-F<Z1":죶lu%rhLS:b{A??2̀)2ɔ Oj%%!yOmK LkŸC Lr< _IǢ _2ۇE Ƽ34!&_`R"&&y%rx2h,OxREZ񊻄tU!rMcTAL]̗t YPYR v#ƪpNr*~;Ù+0NntYmԣ:]ƯaА;iy?cY|%Tq0& =<,|3VVWJjR@S^Iޑ$a=n{2K)WҮkmK*,LAАkY .ѲVT]VGrڶ,@*YT\"G P0l0<N8߬R;lKpM6tA;8ad ,aft]wC„i$B[%I=Hx씤x)<w)UG̓4 9xoegL*"M6I5Ob u_q"p1;`2}'|>[4>p8`y tҀറ`b^DFzNb^$Ȃ_Wy\]Vat'"@S_7x*T,tGX\\OQ1I| Ê /'gAoC5NltҌd&T DAn ua!$Sr쮋4i::1{LV뫮'&v:K 9 +r|O+JI S){$V&!?.LjU wV1xyhCey& ^G ec {aᮠ;cGՌAI3gbŊ;}|G aLKB ;ʹ04>&b*@~Iq!z:9e+IU)2UKjIqr4xI6ܖʨqN[DKQM/WNi=UmZ%#*gЀb v"*a^f5.t6;O; n 6M)O>aNFD\A>H$@2L'GAرFUM+i"KM G˦/ a<4PTb%+xh|<@8FMqx`LB9f}1lmf%(嵉'~55cMuZW|JxjCEFOeU7;;SSxJHKxӦMX`B>V>#'i"h,B-6{Y cO>y 'B7edbM- Cikb`LwjiTmXU87.&zeDRoL.LR媪Z|4۫r#y/to@0ݛD7DQa3WsViГw!mtYq]VS]xݟ3Q%4i !n[8ez' +LF #O~{'Bɔ +8E7]N,oG '"RZzZ|MǏۇ͐%Ar"ыw}j J aժ5Yee*F#x!#G&6o^6 A|ra{YQ BeYW"H4 |Ya`1ܴ^"ȑ#9@w.\C&1o}},[B3k$HÀug9qbо֎C%6 0XY!i.FX82Nup @Xφ/Vq}w3PQ}L}~G&GeQ*W%ΚDGÐPUJ 4h'LH8=A=E=o{XQlPpW7xEڸqp k`U_UU% 7n,+Jm(++Ha67 *.}|)3/i٧ƚ.tQS]6q~:O88V5G`NW=u7zgs.L6śb˜1&T:3pUw!U^̛#!>CEi7rv·ԕ?3` TZP0 ;%4W i,S*(J(/4+t>S %S],#&Rʑܶ-SQ֢@t3NYNRЋ7Yİ,N졿竾@֠c$b-xPP3o`˪%|{L /ŝϼ CO#Cm@b@JJ/"$|e>U=)u|Nvd&ﳓ ZN h;Sx%;"7q-Rz]l9SLO@P.G5nS\7o6j,e|GX{-0z>|lSs.hqoT^ȸFa>ԍ!ZqPFTb JUPeC]ɢ<n6ә duVʽJ '(((b26{iO_A_r9M{ٯk;/ 0i:$p” :A%:e)J [}^3zLEig+ZZ4BDcOn)Z5l j@I?:{1~L7UxxEho2ɽgY|XTx;n9a`?PWuV&y'§ByJt0[Xf nilZ[[J`)&HgZ:d`YJQ Ux"cax@yE TR5^Wܮ |}v7QRG6E,k#&VoGVq%W_E=Vu(z{iS&H9ZL,L$I\K뚭Ҳ o}]C;o(۶E[>7y#&fsC7<&lÏ>7x𷷉Pl g.=o<4Ï<8gvt~ qs&ǭ~{¸+D DlٟqX.i.oG[ǽO݋}F a}ࠩgaT R#LJ7i]rKw$ HsGBPMMtxY rd70}~ |x~^! ΒK 5 M;&@I BI@koQPŠÌ8s܏QG`נ yY|Eޞ`:d:Ʀ&mǹN1v8̻VdnĶ-TOn$Vf-~0#%.Ko/Š U$*6Fqxs=^zS/FKjb㇧ n/6< ;KfœqSn[vWK\-iTiq?`0H i;f̸CX.rth? FmEx0W#P|#v$ 1s^Iˍw5In/[ <~N }^F܋mV6يQ&Ғ?S83f=ޏ;ڡYx8+Z+ﲝy); */;E{;p-gj^pcجV: YqJjܐDŽJӆ5JNPjy(\0x2d]t}N;I^\-W+ߩ׈`C\Ec^>ZvuIy>9Tn"S2$jMӺ!%•@i~h)Mam+ڮ>A=b+0Sy '.ֶ/ivT(lm%cIah%ՙauxp~mOϿkb%&)}RZY[Ll`7_ǷFluc;.zϗ-`W3œX7O@pH"mh= p*v(l؏ȁ cG#d$WQ{[\k _ 5¤\t!}IaJGŪf!<4]RB L1nG!%45rG'^XbȶqӶE&^a|jV% o/?dЄQ"EBZ&/Vj;@2h|.,2"N(Qz EwR4 Er@_"4 Cx#sCA(T h9s:+ZPeHOnƫWѹ̜亱NG 8LU/M`s bVRIm/.p0Ôk `F\LEbaUMn &6ߏ/AO1b j5#Q0RAaVIhzGkD űf/vJLn:uݒpJ]H>H jsUKjD#5jk@/=#ο^CĐ}1S$?e8zJIS?CC)ڋ0x4$>/Nĺu\.|bF,ÑSOL6K ı_>^Jbp㝈L OeX$x|0 ~/6~Epٯa.3Pf%w̷]<X(81h$->Trc“a@+,u„%ƙ@wm[UݡO8=(Ënq3o_0$L4QR3E5g]10̩ppUߩ3ۈc.+>B&&̽rgf{mcP]^: _Y| =%Ѿ.q=b[bAAj\}pףC+ 2'1pϞ1È;7]9gνm QR(KfP9 diTtgN>g銣@צbF5Tq/<|*?HFIa}?n=ơ{4Z#q )e`ɒ%x?bMHTG~s O^A+7&` Os'6^{X0jDyW܄&C*E7p%>\q 80{q??O\w8WO|[Hnr *+e,Me|sp$mQC]넓X NQ|zyr08gjz:|v~~< /_q{b뾻GOF_W{C5x٥98Ixsj SοEE_'mh„;E"7J@gJs/%3voT"ך/׋ ߣ=8LY(q&nhH 4O<_YU!SP)Jt *)D<҉HRCEy nF'(_E$nNu-_WA =S%)bv7Dyvs rwUVS<mmYE%$ g6E==l3!:Z$8&:29fBB;r*Uq!iW-.L.R tER{l;ubÕK؁S#[=LfkGx(&])nrӀ|ŋqδX֛\X75lYr%CEӭ3 -6I5ޥ< D>pEע.kZ"xqQQRM<<8AqE?BXWg5 =ŋ?GbOX-ꍧ{5S\]_ؤCVQRn}o?{kًn!S,_1 6c&:Ýkf<piV(Ue=J5UsMy[#ZX(2nj% Lj">U(-qM,]H¥bG-A?ٷdǀ\pRN*!~}nDh+3\jjIENDB`youker-assistant/src/res/theme/HighContrast.png0000664000175000017500000004733413260315532020625 0ustar fengfengPNG  IHDRxxNcDtEXtSoftwareAdobe ImageReadyqe<N~IDATxڜSMhAfg̦VZi-zxWP=)EQcO"( Az(ўT Zml6Mn$;YiA|07{ߛ20S#$G^eG I8`$K 1m`PZS*A2 1}\j3ڇbz&Vuş+c!>E SIVR_bR% =[׹Q[ԍb,[Ga9"NesN2ҙ\WHՈ_x~ o {lA MRl at+W nEaVxX||48~}gfjE0mzޣZ0'Уrn\~EZfll7:(vB_f v0Ju˲q<_Jߦok؀0gS5a~B uZk C^=YC +\Hv2uR$"~ g#hX"[lR&$J@R6~[HT"UX-Ic$d4μyoTV as=lj YQV8(,'*مQqͽQ+XOwa] g/Ƀ&2'Eyˊb/HiEt:'bE~;HK]^I&/dlpD6V:Xmeg!b];8vҒ9t4 B[嬋\$F'@C+{*,rm}ZzkJS}ITJ"߳3yYf#ʡT=g@~ omHk66PRߒɢ9_|~x vm8J~LڎASMd a{ r(>ğILg2WA#vZے<åR)@I0itjKntAu09]'nܭomsx֦(MimiS*PQŅ҈QnTtQ+sZpłh[QU""bqPJRicuxL+j! ̝9;Srujw&lgRƐ&-?Q]!΃6mYA(Kk | G**;oUp&!GP4`g,8Lc1ɂWDO<I%̽# 0jm&)[6z`)xLVP7s8z O9~i09tGdue3kf6-m$jg%Ӿ ;)q>*Es"0#`];Z pÇ*G0Ǯdkt҆򷨧 j/'l뚯2Lչ`NJx8XƟaFȒBYRz Զ͑T+H°bA|1#!¦1~t8oJ.>G8zO6M5uxχvy$l00phtr^5 2$;@h"Oi& ebgBV(VHJp2o7^U6(b/_Cw]2Z/mRFd&nd2 .'rhhHa#2HƖ6}M> 2%;UHl#o`!&GJ*@νfQ1Qzu`133? Ul!"^)j_ʒ023%o[SUBڦƿh%bVn?#{NNr gI-Cެ46* bLm" D@MĢ4À?L]A# h !!BdMj@Bmkj)BI-6B;t3yνw-1df^߻޳|n5R](5TjY6!{-Ն%2, ?rItXГ.! BM^gqӨiB#5F#wFТ S0ea/i!D:J76MŮcH^×r\$d_dA׆z;snao+PaE_)ي2(3*CDLӠ SpuDҐ>X '](B*ytnlVtS F0 "؝K;stnvaǗKqd'2 (Vx'5R`xG^PJĿGKC%wEn}~aɫ5ʺz4nEaw18!>֎$8{'0񕚔عfP6)5}bobEluv?ZxlZOסP-n؂ @{_~ށmxÍp:3O/EA#yF%pm8U[?C}q<ۅ!eNLp[Rhto 90? PG$zr7oEE" M+xbY 1;N˥I!6p_,Gg#/a%wL F.-O&DH9WBavv80 Z➝VFǚ%fx>塦 ȢDy1m2JfӅSq ϬكD^9|Qn9V,_1nUVVo$WXw[hgLT>u8QSÄ'Éډ<&ƎÇZ݃h%&hGyy p ʞzqaS2a8k`g ^ΆĹ^vE3ڃ(o޼ 7Hx%Gh)0&-uV@Mk08Eg:if bIҊyD4BBGrwowޛtܙeow·sBGlw&zu4пmvh&b3=E[<[.pS&u<߆RV\59`i9tsj) һ\ϹхER6߯"?kYGZ^POw5y2mBǖ)Ha$N0oh}aqB7XywG(;eiqi1zF|y("@i4~ UDA232(7l32,)\:Iմ|yNgDzg%9Xգ B‘\gq)BGiӄ(f{q_/H4bYP`]]ZkC]o춡6:G!̀xR $ ]cD-&lzf6u%ϯp!T4&)w2* &?/$>|Nq|phQo}UI~~Da&6da*E.&VIϣAdbMEi@.-5tPs)_A["x6&rcL3 ぬLJFBJJ*ĄW;5EI H:^ f ߯9}1I)/=#ar!~CNv&t*TOg p ~ϰy>"hy)-{f~"#ܵ cPrG FǫM܎4Y2{?"_;%8  @(uWc㞣z aPuC&¡gZ&o }04_Heb=a#rǜ7.EeU堗aj.ͱp_HIՅYJ'!i.ߡp}~񘰾: (;~Ѿ[-%o_~ Vt72O#3[thL|kt- 1rh>a@*"#\ :rA&ռё-|iګz\I4:+.Ý'OƟm━5xr\<݄wMDz굗?'M}L6l!Duu]AR̘o޼I9yϷb>kti¤>rOIy>Ew#tT3~~(iGzY8D=VbNzsv{Q 8¡^ֿQNB́Zd ;amɄ }B6lM//_b{J(Y'=9eg.'OJ_p}}¯cL/6LKg"'|3^c(Gn춋Z̑֬~۶FՏsc-0ltu8k`czX&k-yURܥՁ^l|+ÇD[2Y*~gΠvr'%D}TSu»pTJ / TTZui+ڌgZﰆ7C-䉋c J ȕ x_Na>rFC}xKъS&r|9|R*A+**PCW 6He62Nh}0],l_BsCL1Lӣ*"j q">cjoh\^3T֕JHSCǤW鱑jgXj ֠ȒmT6wODP)֏!j7bbZ)ҺLU|!RC`ydbZe:IK&˶50ʷ٠.bm)^tC~ۊF 9gT2!KSZJ 8a<8(]똡Gߠ<T:HCTH$$GDO=GMsC=WM08k^j+-^>X]1TOA7唢n娚+E‡f*_{ZtfBqnW_YdLhZҚY[bdZ.l0Xۖ ) ԉ^9$)C8YmV` G$%̐ `˝qTݻ;q#âz4@ɀi,vՅlHmM]I[gL11DM'L/ "@bf̽c.Q]S=r:ToPXX61ıSD"*qE*5Ph-pX*DT}!;j}TB1&t.ӻI3]SC AK ,Qw$򣬤'߭þ=pI2TsmC1Q`Mhd`Fx}G_ĪG!Џ@Ы}Pb*X icrM\m!%D֗gKS\cJx"0j0 5,iT(m"LENNi1x@[ZM3_ѣ2{ 8L&LâǷ#n2~>t\?FR1q042ڵp M딮zt`d(FbK j4wa]ĸD\_EM`#._8S`8v_W;x' vv]+y0R\iG7-Dв<u|faue 9 LȈM[HL(hi4 Ki'p?|mf2/w9dqĐ%.WYnH 1HLcH,*BOiV<ׯVR]5%pIyKH^=7$SK)SR5ePgŜ3ut9JW;K!pj*.!55fo=x84ݎp8=0M|\v MHae)Ԍ4DKm RdIT.3%YT&Ql0="IS~ij`/t^ln}e *,`J>N6at^}c*+* [.ЯF,0WQzZ6%k*g%阼QĞ+ˡҒiIdʀi_֜ݱctJ-p8WVTThuqb{pnKij)Β+,%SLKм!d/7NL7h)L=+(C -?7YZ̸u,޻mbv1][%n_/(K=lIܨ \WyrPcTTA?9bHlm#q6BIֆ00Fk#G9!pIĴOې|o䜏28\.~04nB1(D}9#XWWmkލ=Q;!%-MYQf97"RHCB me`DSDǪh*ZBֈŹkLP MQݱ}GjGLԿC`iyo%δys]S?9snDUY5vK_WW4S6uˆ*:X;ISubjΝ8qni$FcZpӉ0/1`T?HKM1oc nߏn WrXw_@4d*2t@==<9>6}rNM<̙BnؗKWab mi")ELܞT^ .,"#ggw?.\oVC0.ޝӷ~(>ܐ *O w`ݧqZWIꔘ* ddaƜih oOÒœ%׋o\axOٓVs+HG_5$pҊ=}`]ޏ' -V<K} PuF{׳:zM[Su9!xְ nX䌌X%k}X3ҰݷPig%Xc(xtУI;ywzj|)m_;xɋb_i+s+:8ocC]#ƏMEZ 5-v w+**!hS[ryq] g~^ ӧߵ$)M&Gvk= )$?3dK6BE|> 6uj듷7m-fd [Kk[t*]FI5QΚu+1#+n.NK{OOq5 \d~{5&脑g La"K..iiRmڴk׮E}PRR&fa=JG(@Uv%Xn`S:;:J۫͛7OMW?ooq)̞=K//>vLE}jw,T 7/NˊDm/.@ZFFFܴZXX9 {o۶M1wTu?{\sgiw@pL%dB./wVtƌf=x_a%F.XO?ُ}]3ZO;I^}o(\}ߔĬJ!2"HB$( ѯ_1 ]?hG*kUJmK$>n(sdAl ت.}adCIxPɲՊ^pbe2M/V>ڃӧOOҳ8r"O"޺^r9E1-=}Xt)t/.ucC6&1XsyrRؼys`oho"u.wt,uËU^Vk 0k:ԩKJI/s$s媟AV'{/ک%goDffߺB!|_o;)/<|BnI gK{DY=:!5gW!#09+z0v M [2+Vɕr/P ED7F~47j"U–a]_ IDZ??oKxġh4c"G[njڔǝ㾼ch}6X@#6I[zz&}'7+12;gO0L{uL廘4~<)G|xd,Y{Z+?mڴ*1)42^LNLxpqhsYUZ0.7ބAQܲd~OkOole6EP; V?Q\'^~A敶=M;Hp&7<⊦2eD=܃C[X-~~ߋZ_XY 5z>~,ƽmKhKWL&͞3ݳPTRi0| ppa缾աPC?ƚָٗ8ڣq:,Z:k"SA#W)2gGoPA]j^)?D[I4} xT;ɾ=}QY"U[ZZժZ `ܫ * *"[@ R'e2}߻d>;g?wnIa| }fUn@$1iE/ri0H-z$0MEbl: yBZ8lU&{"!(݉Ҭm&Av @%3gQd6*JU 7# 5L+To;mBZPh.nT#R'&z HP~"zCO-2Z'PͮaW h즒 nw.6, &ĄV>EO`'hQmW#QxLBq:Ǯ-ϝcPP/ <=iDKJ1{U[1(eY5)vhNT|O>?Es(cFX|v?d/,B0GD;ܨ<܍fSUu (bh +U'L SE%bƝ!D5˺8-B0$ loQsU18V--**YB# e-*T8 A3&p*Ϛ9E%!)ĢqӰPLuX>m%p +Q@͕'vnInY'2lg)B$FHBct`+a 4cC3Jnu\33Soj\RUx.;U5xy,DbW7pmL4GT~T%Hl*E SC4Uh=X.D 5p3oc*WdrΆա1]uGh57 Bd5M,b!SNK) ~p.qЖQ;Q=CR[Vפ* {dzGszM4Pu=LbKl<=hw?M*p6*$xZwP#֌~J1[ԲjRdZyyBHRϝuNhV>N ^M$HSr -LqzXe#} #||c! MJ${axM3Opck ӄ0ԑFw6AqM\VAwnk[.0nT_0 նApmNr.̷id{T' a#,u 󰴰Ү5 RPf{e+*_-|-! GV>S8f"-LQ-!dKjp"">PƼn/LT{j.o:#pN 8z8ѹ0L]fƕΧw.THDLH1q}_C~ Pot3Fs DST"n"şAtC 6}ptDNI4b^H2’2Wg@ʘ؇`s0qJx~;(pt(ަjg~"WmP!pD'qSPfG:#WhQ jIm06D~BUפ HBd :u !h{Љ=-fOGىVꅿ}Q]v*w5j|'|¤KsDMCtzw(x|a>5j7Hh=;[ʊ?Ña# P@@[:AS,-;dD.ƍx^c4n_4 n[ӓĬ'3ZM=a['v{Dl.ZR8,_&|lF8tYV\#F;kq^c_/ 0nT7!'w {]Gj8M:[Q۬0oOEJJ&Ww {nG`fwUT1JT*Х{gA` 9D n  =j00$5aeV<EVH|."[f!dEߢcllsxۧ/pw_~a^yذa&O@Uf v>KZ_<eg6[0' ~)wMlw?h`?$,O2 hJ"D, G #nm`7+ƼAAѰ 'ތa)b#0IC͝eKrNbHK܊;G_\.P7|!:a9bFa{,>Z*ACLpƠSZ]2n*Ď;ox߇5S8/iB~n*32--|Ҟ9|Ibq7C;Bi0LHb ˓Dak O.P3* ='m[vl8$fDA5g@( ׭`gCh|h#t ?BZٺm*:gjR Zʺ*ĢWXz WDz"z06OMMo bU43 +Wkv-Ck;ʐSs4ĩ2;y~̈́'{kD&"&jc:ҭfnvM1r% ̑ ϫK+"6m= V0h-P!{>>;X[8I| 䳯Vݺ)-!![/"wL#YƻdPf  J)ys*+ b<%; 3ZziwERøhi1ɫZ >˄zVL ˹kº 킩Xb`0C! }"7nZSپj>$ ·pܡNZ,΍̧fa}c 1RC*1嬺K%(GUC([iZHP'M`3}n$n^ǖaC m gU<ӦH*v}da@% s u9ޒ64ȵ"dQ98A:!e&b3o`{Y|y ȍ63BmL/8qjRbUcb sФ WX1&D/Pe؅Q~ .ΫBS))y!ħ2@|h"IJ `*b q&,.\7ut].7u(ܼ#+>؈o);Kj;.KNMvD;C+%f*& EfN}L0cP3g$qlo脄@ #v/E\n1[*7 ΡI<vi_P$(/E16蠴[UUO?ɩI< vKDHabm۱fZNS'LFf^{uN8g#{*L2GIq;aemv!J)DJ6$1q\ J#z v$co̕e>$ /R\ >Q g9ǫBPX14:\"&5\rEdgd l՚|EXd̞h֬^Ů}L8_1ha$"Ɓ,Q+u"tAaD{ޛ"ђ%`* ɸ$_?b7r$|\΢2-$01't,qMPIE@huA$5ä~1ā17? dANѵkW<98' q#'\!&{/9Q9.0O+NƁZfTѥHVocX7N!j/>ˇ?qĝfdEJz-Rb>N $y-Kf'$3=sv|؎9$ Lտ񨬮j3a y |'UGL׹4yRM! `w>WHbGnHKѕkj9sD"w_M. IL*B2j'̢=vm l17V|EDCU2E3ϬPeiA(J`֔FJf*B^֖`W(T&mA@Ն ,CЮSQL?wڒɂP )?,x@F~Hp¡Wxx1y\N(ԃ [ID8U~\*yVZJeNu$%7N]x;f>$l:"1!ɹ{p|M>NO@}Py);S 뛙*l$ODGEsC܌jk*wB~VsjT\PÇƈ$L r LToٱ]Af~Sӑqkk+cNX]  ٹܨoJ[Y$` :nM>+lĽ!bg_dAs[f#{&xIsϽ|uQkƋOÁ-%;+qc܁̱w1ԕs?#O쾘PSts%}W,Yї݊ ڎ+U0g[h.|\V&#7Lv1L\e\~&"ux)cMx}uC^cX%Y׫ @-24G  T&+kᛯ$WJݸN MER \94۽W< 9EFXğ5 mJ@EUL63ppcLdϾ2qˆ۶eG1ŧ%f}ŧ nf'$u?#>[gh)`JaA9zFi"\DX:|T)xh4"6n`4q&ZHJ (+?8&8y+yl14@ӣ{!6=q5-YUS\} dgп_G‹d"$b0Q 9YlQ}ص[|9T,h𢢦 ::nL$>ZKuspt3=bPWbrWfh~vu/V1L,%=wf[-p% W67"wƶ=mCѽgVGC2y TV,9%e"- 1(lmQr0AIțyܫpdM2dڊ;0#W {b^׌߂. ?vSza}3b8MqNo&b\W#>1^55VLz;k O?6<+)/\!\.;J eZ(= [DhݒƍMe5v_wmƜ9O}%f]n{/}/1 S̷ $_UkA/2aMT.aG zQSS5v߂^؆ PW.gѽ(v=%d?*(ڶ`n1QagE| 0o&N42_P (0ۍ(1" 1Ji'.,x<eFikEg)uX\w0:<=m_= YwxLȮQUkķjk֙YJW~ 7э4µʺlm^s|1i=xt: /v,;̺2=79b=۷/GUX2xf7U'E*-  kgΜՂ6/D0t<ޜm  Io|?,S蒁&~P~5Z̎ݓ"q j:3 ;NvS,{ݘܶ65J7w@@B&¸qm:2}9eTf;3 ŢmH&%kpŗWOF)Pk 8rc(12M ݲ[pH߲S,MK{ǯn o$GTh'57L7 \o]A'GӧiѿXoj"tZJXmyEnN)KsyE9n=<rPIdŰДm6/- q|ǒuLݸm³%9 ^7&"Ui<F)ݰp1޴i7k;/E#W߁= XJNEbn:8v5?vϰr&L*>F`Onz!p?W*q#at7;vèm=8@сtzݷE8|U䆯07|d/nVeb)N&W(wMiVH,DŽkY|{:x?_K~G1N77W.Μ5Oz=;;dd1X0cpp^7>Z7MG9 X=5 XTTp( =XF\t/: &qW;Rz?zeI xvFV]%(6|(R: ӭ-(+/CNv7؈ki#]㉱Ux5Љ=.-=+9}5d2 EZfꙿxYx&%TsmMtĶ"Z@N"pdp ²cF~=@KUuk:|G 8%g!cG++!)dܤ%- Stfqk؈H$gCt(F4?ѕ3Na3·")Nn!xرmIXB|t |;h_ kԟsCtʛIQzȐ![-]/47RJ4]>^C1v_pYl|y;.Vp󰵎Y]zb;lL\TX W~͎Vʋ~_Mr@fC`m{iь7" Y]t~>%W$왛mƔb#/'wL?1܁((7pb Icrs%ܱ*fe]cQu΃x'`d0i+b=5mg}6 ΰ#ag <8 ϊg+io-/)|~xu`\w<+9OU"6mf5%U11Ln!+ ,kz㓲J˕B4JKK !M94J%5Pd߳ñ\ S]Ѕ~oLSݱcUIENDB`youker-assistant/src/res/theme/disappear.png0000664000175000017500000003412013260315532020165 0ustar fengfengPNG  IHDRxxNcDtEXtSoftwareAdobe ImageReadyqe<eiTXtXML:com.adobe.xmp #4IDATxڜRO@tH /zӘI/n\ꉫz#D^<@zB…p6m;߼iL⴯oy7~?kB0͕668CCkm llB["d 4ȀZp}]Po4p c; V)(J)louѮSwۘFz.K`p$ d`^Fc3? @y04E5|Ox_ QTu|]_ŇE.q;@E)+u{4lɇFws (!.;h|}iM<>Cv$dtMNfE)T.#LdY (pM)Q":B3 ) I$q|XA %} &걧^"BJ]ʐ.ADifή sv93F>4D~No1\f$-Q*\fPp}8HjfQ2]RF֠iJ&#fڨ: H!4[Z )TRǜHFdz: @7kZSQnvIädËpi7Oh3!xۻT?k4LVJ4$H;9cgl(2kpfzTLvpcCɒFo-6cHh׉&X\ V*IhD B -~%"YG pucQBH7at*U$, p/x}^ !Df-z),wu pMjOx&(|v6mӨPPBID b$? */jRFmUc^"%xΙIv7fwgΜ9߅!9&_1c؈rmVݤٴܵEm@!jT3uLĭwa^ JlIXVE* 9\es$X=I•z.KgOL =y17X-\8έkIyHy)*H /a ٗPU.k B3Aŷ8vݟ 'p̌I7o3ɵ 89\s ɽ>Wdۈ EMwsRjSk#5[XkʿQk§ c[|:蕝^Gjp]6[0vK1Ng|b{! P+5IH$|^*~޲P852SP:x.WYsv! ѝ3u*&_YE'j""'vbHW PB# )RƏȆlꞝu]f,s2%)al"m59f/Qaqr4j;(n $"2*(S ;ADZ0tuwyyg);WGgvg~8Y/ANq"F_cuqˊ8pʝ"JvJE=c㸧j$Pg2j"Yf8:@wh3dfjA]`hLMΉ̰F{<FggxΦ=Uҽb%+/tS~ l66A(.4oa:!@ݻ z9K #)M.(G[%QgO'0!56z6axO!Ϙac>U9O 'r i#z# Ю8z:}FQ bmN[n>| $)ظ,j6H+8T>c=T3S#>X,t{gAj:ؽ{w@+*s-0i]";Tf@ͻCKO +u7 ycNO PQIQV^hL hQZœyta(& ipO9Qzn Z7oPRSq@8gc;9]zp,<ٱ^E/ 44Ȳ-=MԀsW. {Rp̏@xP¨1'garf}"rp1.džE.(tw_/W-C}]\}N BہtxBu:,7oi-b|rO=[~xXVJGelq.]~[xߞr 3{B @\$n>wѶԯS|ui,@s.|:΢W\چ+䯁;pn?y&,+]VB+fkJfzy&|ŗ~haT6P\l9#,HDn~bԭenDPLkQcۯX/5q9 %~S>jdg3ph %%~?#AJ&E'| *+b$(Ф{%<. T//֍kWzƺg}*+8pXi,uړWg E܇1Yl7ߟc.*XQ YJl1+cp<8Z瞤UY9OW5s)6⌎H qJwRj6*r"!_)h٬Kbewu@F%Q^3 52OD#ܸ ׭]X43imbmHc39} Úga[s3=:w |'D0<|3=2ǹ.Ss 5{p׭= 钐~.ڶI v%Ȧ pZZ)M8έ6#N$#c02H PAzE9V. FȝY 0ʇS3GM%pWjDۧ 샨)i{ҥZG.utYtt#hD FVKtD!PY}r>,Z<2IIJ p <*!4 wqF jPޞ=̴\lp߂xT o*g*D)RbFhq:X TE0a'DWi)@BETUŽ"j) )Oy2 &=d/0L` v2"͂+X^WCch2Ί( -KfXPU1%{C,ݑn./̪|@sdS9UP$%VUCqѨ|&lm6Nyk Md8Mj'.I#7bP6*p+{pŒ`yWErZ9>!^42AZ!ۓžB\-.Lݸv)G4\$gKI( ѐ3h&9zd%aqHfk}8=wǝN; "!Y ,.;)PmplJJT?I*T%$`#`@tw;ݝ=!p\n=V GWT`i)]s'cmJ*xz|aRܞum2%+R$Ti&,"J=cT"dJB[-!d`:ʆM9jjN,dXFRUQ vudmܰRn!(]FBH.V ~}/ 'S<)ꐙ}Аaݞ#$,9O#ZHB&S&ql g^RvAָ ě%ER@Bec*vJJF\lh@MpC`'GֽYS, )/Be iA# ,h`k4QcW-^mLX 5:+С10ihVW'[-*FZ5Fj K;qɜuzt(rqcNx)58#Z. Klɉ˼RSO#Blc~7bM,r9ȵ`l4LL| 6AӕM+1 曊k`an;;{GautV;pi8y ش̃7@Ys<  pd[-kjؑr}֊̆. ½os ٿ-ySnpZ޸nW"}-Yޟt<׻}G`Yꖞ503= ?~%.|[K d3M|C7u1Nc9 7oByS 8j刚Ɵ 0;; ?y4mFX.bCown2kԏG`ҫ];)ݻ0 ; PEX%l]K- ?7vrcFK/Tk鱷ǎBOg4z6vu3wM瘰]Ss-pͿ;n"y$rTUU5hhj@׺4<̆%L#1C}`W [;=f5Jna?.>[܂]^KОHbnjvl}#{xitm$j-fO8K{]f?zjkWp=s*DD9quxb,W斠u/T؉9X^+÷]Q:53_'QY IaŅ3]]{GwCT3QώsnBo nm=ޞ.XβxqTzz;ZaH'w}gTW?| ץ~;w{ v? JjaL^€V Bnd`~WӢRC vqf f{[N)tu8{jOU-,۝:5zAu[-Oi5 EǀBUӻ No#Ӕ^wbŠKqßA=RbrĐd& *Hq z¸Ϳ!2ڦVmlQ"!Jոv8ēͤG5%5]-MX a~qE-q u5'$9'jd%}Hjl}u0 +l7T"ф֗G=̜C}|g~흝0PN`Yd OG¥ gsv1'kW0Ȟ=ám`žֿ;S;&6Dv{<.Q17#v3 kE+)px[aqj$Ea+ښuYyfH]>zoU,H#bHG: JpGh"tuUu#8x<.tn $S,j ^?`FVlrz_/KCt"d2͂hD#&ԡFXv2fR$(Ndѣ~Fϔo#E{VxK\a:ozf\Q(8Y6l_Cx7g< $Y S"N"KbSl %B ǟ0t ? 2ytr %*0 'Npd"XsEIS3592['?TNN\K:XE)[qũ:%ȑ0G*te&dI%I'*"s9c4ņ[WT&E H!A:"%$c-$pJ 9UϋN(,CIZiVc$څ;e]ߧ=P,̈Z/c %z _" dYurdeAIfknņ$UU*.kbDKgKXk!o0 ʊKTSl*/2 ` DhfbF耊f1jPNN:ՂҊK0%uv+V$+ j$"LUo4}KsGNQBzDOiB`V+gr#hECe@LigF oHQqFQ'2[,`cLPdSpL&~p-æGĉCQw0|! SXr!aWg%N״RIN>h0 k^Ȏ) Teo8'O9+InIH-ba 0oLN3Wnw6֎{׃x Cرc}tK%u|ΪWUjGT質e|ߗ{^Z˽T,gpqF|vfGhV{-^H{3iE9%Iz"~bumla{~ w7\-Ih3C$PwwR0.St >+έ W3a{gG90nJMQLjBv Hs.a*\bN,؄)M4M>Sڸ[1# TiBjZԵӴa TJ6m{JmNI=Hh4,HtEfV$Ǯ =5a0X]t9^44Hez0\˒g7`y/:6n%"!if~N*sb2^Y^bB=oIoDav`l_2+ׄ [5)IHEHe= )=_?FކGn߾ɲT'N&in]VW&m^8 Zseu tCʀj 8;wo^n VX]TPUB;ocf:q zk-7VW"ADP;P _e ƃ:PBldmI6uF'rQ,/=uvSYdoWז4m ve,fv|&g'䷎7xab,i_Dkn]qϡXh{{G; kˣAPaҖo/ ZQo~Gpu(`W_E0]h/pYw.lsU{aؿgz l>%x`w/߽s$ή/ۛU[K4yQ#w̴'"5W2 } P?W‚Vhm2f+>8%Sov~_c1kG[;tuw14'HgO_7녗m46` s+V-aի^xfvu9 z:bJ*=va'jja4JM2M{{ٚϙ'ݻߛ+jme~u6,Es ۠rDuIuh(9\LA\RHcA.؊`S`ٳaSė m,,,?o?-=WMr$@\(h̵`H"V3"['+9[}} 5#+pbJ0j?NC!ZwcJƄ Y 0^՛3B/f/v7*;Lg=7}Cj>Cϔ ypӘ+F'+'r/_>se1%M.b͂5ӢLڛQ'<3]X\c4(4ي^UR\Cd/SP<;?ek1TԌ#l-nk<[C{: p!3F|7{a~y gf= c011;wdtU},&(7ԴelMUŵ7&H5=9O[dexs`i2nܼٚںM1ZA} Y?F{`b#sMe,.>ٹK F]pxԕF~`|l-Xs}IzMTh75]1/(f87 wX)md86 Gc8v(udtHRWmG{'Ţb548m7ucdo`ph~8[ɧ1]/*wxU֠\ 4=x|'ǽthnx<5sԭhٱف>ohh{Xf!(ۡz'+X?xLi[p~};فc3s0SD.357堳u;s-ʛK\ct6qi@ό>4n 6Ca)V;*x{;lEc+IW[ҘmX91?">o>Q(:j̃9C|f0ڔrB5\J`T$>]}ϼ #M 4pAJ%?^SWyÛ$9IWQDi\-G?[YĨgu͵52 /`82nӅyOe?:EGE qs<)MA4Su;ٳPLsVVB+`jjp jԈ56>:"fa KSeI[Z;:[硶n[dT cm"(oN!:!1\2Sf+}qMAfUaq02[ =0#^]aqVV`RX,Flڎݪ:E~}llHPݚnl֥7J@3˘*dKϽopetmsg"H9T+#?KAe2۞kҺgQ8ܯco#'^=]ɋK}8 @6SQמ&N"`"B28>0 2'.!T0q2՘ˆVBx~l>?qeZZ9 )5L:خYPAd\cVV%pE2"|D\si7w2J)b$A)pp3މv7 ex, Y';+ѝ8.!ܫPE"qfF~[09斅`&Ɔ&YJ%^zy''X"`J ,TpPoSw9㷸d΁Ϲ`Dy '^[͒!ʃ/[0Cni9*ub!Q0P 3jG\O2|f4OE/I'Nng EX:>Ju]-eȴ\f#hTT\\wxd&8hDŘmDtk]EڣuQG4H0Sy]=irH$GݔAi?:p&ՓtJ `WWLhK+-;ղIuQkR+;TD wT+=MѳEEHv]gKxnօW4S^ s 3T$\{sGn:9s~I$>" ]sfbU !+@mrO@rP܄Av B6mȃ.t=J,vGG+Vw\$XBQ8l#eh i-8rWbb|_}0!<ڙZ F 1^VA fuQ_WW|^ s1a,h.HMTg!>Kb~i]4KPeB# GiAp 4sEdulJL&+`\l;p54mF*8;Nõ `$\"9b؜T]Fpu 효9]>(~FSk ~xM o <-K F"Q%n{xf4ؔ½Ama {{!Mv@;E-˽V6ױ:L7YOw7Vxݕ6U_j$,{XE: ^wWxI I6Dai%&HmEZ\م  Bŕ.ąFvVPE[wHjm y]{c3n  33߈=D6K|w^ +v'dWÎA%oXScDڳu,`1AR>F] !G%<¨>Ă flj {頬WPcgnQG#B8R&N4] x+#D_0HH6iҪ x5iE'Ly k0h <>8uR,ɳNX ^ 03pQ!46eP ؿ8. ޷Y5wSRc&F|AO(b@Z8 pvp;ˍs|a \9sTrpE7ڏbz].hi!덝Mͦ2iK'>Mw #p<\xx>·n&oڼ@u ?p^$s0Y믓e?:z8/a] n$K^-4*3yΘ ӄXE#P!RAZP4?П?FQ]DTKԦ%X*UjtNZ\C?^8ɝ9s>{Zr$ԪlBF:XXyjTI>U2뭠ď1^a6r"߼ZwIL1E֑%++s9WcOdmvC]G[USg+}c/gN.s菮Ob xC@6)*$HxIJ?mA8y*c6=t[ ֈ۬]g`Aqzjֻqiԉ.Kӌl]b#l&xJ;Mf3 6z&m{9 a`2W.6:jZ b:T7 (Ny=7QNQ|-;?ϩ<')m<oa hd#ӵ$wMja\&G- xLB "Fm 7+PfTΦp.76]ku3=V-[Uh [~.<@muI%SOe1iQ+j8-A3i3>zM0Ntd6W@zMPfS#U|J~3Q]\α 2<>w3Ev U?Z˿gMu5x_ `!Bk]+5}~1:h袲H"Kfs]b*U!|Enwmˆ62qE(c%zz #9foO"sXwQ~:U2(ڨ Sى8*Tg {q)uM_:Se.bnO'ba re̕ک;,@KG7>cѳWy>x6@+ sҠRI~& HDrMSDaNXN{8}(Τq*0zvX9 :{,ݽrk2 kH*GcՅ76egvkL%G4Qg0 Zd(q}+3ٶ0.U5-m=v}!v[-! iټ/ԤĽ˽5եZAF>=71Al 9^ Y0R[ڍtlkǵ0슿[ \t z'g~cVT"]3K'LyҮy>t#* '%']Wl"FGN_Al"d:>1dgK2a6 i(C:HXE,sl<~O$9y39גB0QuG^ϡ4_@\=Yj9_n 2k5୷9G`#~K&7Djԥ }0G,źB߼ڸKKD_YԻ/X/~OD6uTj5}*^]ҞzwPxlu57<_S*oݦoQL8wFʮ]sl;Ǘh҃:FO} 3̌yih$b(97 Z?Nes=gui"4Ɉ\nFMF8{da9-=sO$v3pmlzaE8EIG}ل"кNU ^5m1hokE1{Hk i$Hvkh+VGu{vv>bǹIV mBPJ)U*P^r$&\ !h9r@؉c|{wvfqThڕy;Kb}؈F-O|ܐe5D+q |rܖ FWSΰl_sFyfsiVG'e?{b/x%?u?2Ku߲QtXJ*ahtHrD8l;7͙CD"o(U=‰<ោ=ry>hxp~,vĕ0Ui6'͇槝$YWV'#0d1;!@,F<ʭ;~9r+.(G,܆lZE|U*d vsh"2"e g󼍋ؚ1ʛ \$F4+08%QD8YǛj5T٘nϴ2⨂@5n?\'ވksN@*Kk] 9Ґg1nb6QdCHGG3S(AwTGGllnԄG7"uMQ@bεPyXzp.?zw2>ޚmܾoh^|ʡrd#j,5XP"x>㯯wB*2ԭ] 'N.EmMה V&b$c>@w֗jm"1TxrΝ)b'T?oHwQb>M('λy6>K/㈅shVz(<\$=gר‚Y&^QSgЯTchÊR{t{(mn a۶%.MZ 1&;jr*pZlDy[)%"O*HFX~kVEYSTI,mNWEERw[$bQ ]C\% sSnhQc7=} v(m5>YqT+S)}LLN.@4җAssZ6kWQ* 뜀Wy᳑C8 w)xk){b yb2y 7bW3x/wg ;幑Y\7ZbLeNlhh+V߆֮H'K*Ζ Ee#EplIwP.(KP [8i dKJ;*Os2mK")ҤXB_PnT=`{Mbhm( J5rReÎ(LA;uQj? O'NRIcQJ'n022)It;gT!q'`O^nV<ֲ"U.I^4L۔}AKi 4Btt 1 뵵^l>c{)ߎAb|YY*wB6!O|X-{K.(3+B.EhZKPGc|wTG@%wʺ1^'~Fyŗex7cQCq7^=|mOLZL\PJ0[ Qi!(wBX&'GLI,Z܅|&*ͫ!QQiqQ}Hܓ0Y ,y&|V, p,'Ŷ s 37̄ c0:X*_n" O+|p4ʉS4P?py]xG&J!ιdn +;eG "H5;>),:%v9gY3&'>\g/F*UM^ᕾ>rO?m)*\&}5W`tdW_{}=4n_y&:zNlk m]pgq/n~YCw.AĭJ0OPZ6h-8qdi*rӖAU-Iow]66@fZr%:IZMmH*T4C]Н" ;-J.NwEzдPGi3>#wRRQ3nDVy[~dXhD+G!ИPQ l#m[ʭyi˹TpjXB-Rبn7kغ4ZcQ ", @222-rWp(7LV1>".ZcFx O_UhE6Ϙq"%Ҟ5w+D?>[-nm-Jp!Hڀi~ : #ql~EI,|^z%:\oᦛ~HГ+YAb3'{a2̹ `kt.Sرet^㳛}+|}}L$@iKMLclE=Ůz$ ҉nLr^~ `Ӌ$j=ת~1i*p];D|AfőM*́24v+?j}+jTXuVg=6mAkkD5ܳv ^\}7οQ7KƚqG\Myƥ>,ɢsA#Nj*mP*O0p>S0 v~+ /j*ܼe +r|1hh{ځDtp&'f{8`~uh 2TTXXV6Lw9ws>Com6ECTŧO)jU;~bbcC8o .o/\&ʋ!5@3܋ Kܺz-^;p[s~TVi1E޴UYH8JJp=Vp4OL`bhpOd'ixB HٿHtj0cql]V=P[_FHK:κ-LަM[hQg*.x\! dCTxU jKZ* M4i$޽d&Ks&3r߽wMؗ班PpgF+O:*w쁳e%)Is^B IUWkkj5.lcJlj*z*4}Zmu3 aNU<\Ucp{AHSYr{7µ\@53(iR($T.<].W he1ua12pރL f1^}w1IoH~ZB^=!jLapE4Akds蹵GT38p)6ipvӧ%>zrd~K|&ӤͬB#fG`%AZ$ibet-00h *I #0*jݫ\J/:A0wXFoΤal I"6 spF"-&ǘiJ" K,Fμra~ t  RAn/A'. s IJ授rLZɈA_}2=wn)M 7D799Ĩ%yo$ƽ6롅ڐ!b )R[Cs;WR4i `FG2WvLdM`wİ"6X]Y3NXgWd_~lZЛBs!\j9*kfG ]3l* ⣶$!$!UB 9E+U/ N T)M+\a K-MxMVtQiKFSI=ܙbbTX\- tq\V$.)>w2EW*!3:!3mpBlZE) җ%Q'-[wǤ}6AC IANJŧ?8^ހ4K[z; 8)PlP>G4UL[h.vۚ׏d}B]%5r;V*#E0ч/)lIt\^mI߶͓HII JHBA#67vէQD{tjȳka3)2h*5*%T%wY-7₻i3qT%-mF)pt[`I ,UDU6ě4t!FR3 c/*[a>mtr*_9s9^80]}}/C%s0NYo<"Kps7dرf{<ݰ W*\ ,*AvCRBt "=כ B`ϔ!#+ +o3;<#+9nnb k̨P'ӯ /-䐟lTUD& ef`/s $齙GVJLõfO4Nc(T> sq;q1s$w-M7oy9f}4(hɠ{gpcbifKMYa;h`v/(-_˒>.N~rҠ<36dJɨH<ƅr-MPC>cz{P^.bg4<wjKȢɰXEݓL}pi^ߝ62Q20R2_Z,Q4*dUV a;Pti+V}t9L6RQ)-c;jS\uSg|\Und5^Q NMʕ9jq/ hR4a ][^'=G_yH{q2av=nد ¬uF u3& ~1Fy#Eb!'L%5 HD̥*a:2F# ->?Nؐs:묱 NkJ! <+ P3@quuH];bJqYl vi&/-x # 4gqMh]W^l\D`(7I{OefQd1Ihr'%KNB%U!@{Z)=}ƠE$BH#)ҍd֔hB043'ܹl&ep5b(|yV 38:K9h}5ŧ C_l٫kҩ$QKo 9x~BLքiH$O!PuII9zzzFﰗqilT,nL IJ&S=zߣ[=5e&bg@8mKWX&XMŹ0zy=or5NZYeIԔ0 9Rdzn<8 *4E2u<bI>Ћ$r܉ "+5ИWKpu(~E:aӴszxv,E(V>Gric`Ώ>4Inɗ{kEڲ{i9EA>2.xeV ˙DQ^A$Q8|:MlADCmK?a7.YGx x\1ՄӕLHl[Qsl5]3 >^eO~{nS<]ӟv`L2tDyijj,^XXCS 2f,\+~ :>u/"Dqѳ5XfT-6TH]]iMVtX'Ş}9R wT a3]pSU\WMs iˇt'#< 0&'~5[ }r v~? liiCYٸܓ0?OGyuڷpx(+%|}NNnCE"16{+ACbZ9rȜbK u8sV5Nbpۯ/%W݄ ^Ig}A\߆[z]D'f#7&J{y +Jaƍ/QM. 7]0npee5Aw"$kΑvO-lJvqx8EN!(,Y#VN3Kݯ"|Աx;Ѻe~xRë 0V!Lc'p9˪=O\̞-hO&l3?ŸPS׀K!"1>M[H/L:2<l~=0‡r[;[ to}QZANb meݼS{B1it,Z@㻞?j\x^A;hzF`}--w_>;~ቑI),g_޵{&"y}!:⇺нĞ^K A);c[JBT4. >8dy@s,\tRhƁ_kkK";+[Esm {~ 7+nϱqrƄP4mՊH $]-X7b'?]|R@G" 0qdRqd>ZQpµ1e]'}p d~9&_ހqsWdfb:XB8q*XׯࢵuNgxIσ͵]SCL"E4O*9,eR=NJnr?tWyg|0!6?л9"?OsT#*}^Ί,^qxGZ^2WCc$ItvuIl1vɬ?=`;p͊_Ld\x}^ۿz}n %ڼ%o%]5]5,f,{8c͗9e\i nOh1~5 ;Zry7>|4+|$Ļ`Ba~o"Ҹg3ye)ktX Ϭ<4]US 39*F s]~U2bII"~xiikC!O;o8vl@V gɹ-3R  W΀)WȂu?UOSK?Oҍ^ vtWף4Z&/Ixl[3?ghtӼJk[tމ@О0Z;]F*EO]uThًWpq&^27 ЖDeB޼o=𰋏}Ru6<2mTIg۪و[* 7&h7n*qˇ9EHk&G+lnStPES>hٕr?6FF 2i[RDX>d,zE%c׹'X]46]m.*[j|_l՚TJ_hƢ^۝gҌgk._LUwt?cgQ%zTȥs[,ZsNpe\YrX<g7.)ɀϫIL2QQ mo.6Gg ~ie`3ع6uUL brڣ)^g|u#p#pR ,r4VS!z.g#vtue,KoZl ~NӀI继a cDXTk?skk7RwtI\H+*t5>H#s κ15wјU(BM5u[MAd٘9ls=͘JtڠݜRs hx9rKم_FSS;_wKDSY%!VC7P!]c3}f37ZlUԳ̜H}bbt"  R#'xd6t@#^]bG2Zw 7%-t*=4vdϸRoPY,܁PƖQ#-B*7dyՖM@.FWWO3l{ P}_NOӆZLNC Nl){.Z :n <49;OYkeE[^0ǽb-q Uoȭ>⑮ZGlIV]TDB.U S*vZLZ!L6$V:P܉/#KGS]4[ݛiiyZ0fkZ4 YyE3AA15rs\B=kԝ_*E؈=mQmZ^I z Vye fad'LRfABVè+8?=ޚ4dȒ@W+Ӥ7+u:]48SJ{ a kɠ&@}O}W03VE*@#1Ϋl^d54#;):;`dߧ&e) zM(e(Wy_P+an>/U}dhƇ5zX|DVoAuJCKu 2ooӆogD{#!_H6do}v/zo&8#̀7-{ JeV8+SsR׫,Y(\\$UiF=pKH5scKd64 ^/7uJZtU'BJth6{aNPHC.M-}JgSl xhhmnH:oRĿKb[/T;ٗ0/jN.eX;]g4fUHkdil5Q]EZhz A EW}l]ZiV$v":,M(k2jd&GZ.]uP']MIMWp &pF ^'cf|Wz6omcҩj>hQ1RmM2IK᫬J-r)OLa}>* 9Iui0fM,*)Fq0D1=m },hMQPޒɌj'K~v!mJ.KLWrj6p[qӗeiK%n12Wx hGXk˸^rt#Iuiz ی Pqƒ\GvUԕq&a6.SOVu"# #& /}5NnF gK!rd?$d#F#R4KJ+޴IҵF a& [IHYU_βrb>f<~)ÙpɥxcB1LGJqu^284I> #162BfaN;}$3*-XF,XZ3ChHxt.m  P$c 'D 4FAA /RDhƔ 0xl̰o&+Ih:;ɽIml9ɬGEȆAR:C_5  ]=N3]gr3 T֣m&mXUo&@+Iꏖ'Aȱ4Fq,yM'20?`9=3wc:o~[mckq_Z fLRdCCՂ-ah,x 4=gR/ I g at aU_Ms,4{5&PHdBr@bπm< 3ɔE(x*Ndv:w\\1r~@?E# x7=I"q@~`x4m,$_~(M=N[7ojk6}eXbq,[ #`Ѕ3^HIpuڏ1ոdj).Yo\ mACE 2gL-f|59UC*6(sIҜT;뺄YVHG>*)12Wh 葭+?MlCE$nZu\O\Fȗ *]Y!:qg! a*k֊U"Ii)oŠ*\"mpF{LTWvNk3?1]PR\PET92" `Up)JhDά#[0> *7U˩**ဇ%aR z8wxMƢ=S+҉h׀)4N"aD{=%AƩ i  [! vz7o_]!2t1ˆ Ⱦ!8mDu~J3514CX 3˖@`ߖ x17p=Yܥd1pdqtU`*ʕS-LY [!X^'^imΎƲ\~*.v:ХS&9qOi\/rK-Pq@CVHQt,.hc7)&ngl47Q,b|HIZ?$I-y1.2B&UëT#ɡ%G^z^WI|< x%#ů{F|,7`̙o+(?P47T`:%5'?mز 㲭Yrp۫h T[]4 z0\#(К`3+o:c1Z RB&,F6Fs;K6j]҆H;L#I 5mX7loF@¹^/cvݭ;GWR#{= Ŧ `0_}e!gE4%iӔ.!G]񊒐#QBY* B8l6n\4$,QY#*{3>tƴBJڨ"5^Wf1U̙x°?>\ΘӘD&=76y>G[9 )-rR1XYρ("19r*̀xk_\+g͚5ພmA/%暛FZ ,O8N9Aisg͗( G2dV5tݧQ_P"N@ ӣ@T;x``T5r~%l5?\.笝!tsC'CDlCL'ѓ (b!k/BuUro.9$!ҶM7"P\5<9pGk7^iI" e1Nu4ٶ6mGdRYۍdgE*[AhL3T.nCZ{|A%Ɩv6@6'U^2~:_"v|m!?ar=G(\BhyGކKϙDuc/.+,xx(\\ie=娨B9.{ԏ=dmQh)0f07{Domb?>|5FmU)>~5kOq ^zEڋic40ϊ ] (夾 =N!>:tN  -=\Dv\lJGmcvE{I .%WLs`eimmad8~)8iw!ĉTF&Lƴ]$FSfk#NBI@pG{M̘cɲF de8_2%EkB6z}'Fh(?񺑨Sx~yiVP+K0XV_jf̧ |q U͐ZZs2?fƭ$Y󣬦Ԟhťdyf2[ChWBU\p&[ qk1E AUy vP/FiЯRwth@:A=Hph-fŲp '$Td2ǨzuXp=7?dz 9bOסp&.x8tE")\x xj\8gs1n>m@iˆwF+!q} n!<[#fħm-AwJezًUY.#X|ցKsd]s{';LW>Fukpҩe_{>cԍI$M!ՌxmI%nFYjh|r{҂Bb_E]s! z'׺#bp':gׄ]/xijj/h{̓tdT$ ~W+eߘYu \5HN HK Q2 TQ'D<UTflpJ-6|pL*Sg^3Flwε I$Aè?iO;&#t<?y_46G$vCʻ(YIږ~&L&GpʑaæBI׊9*`ێ=o3ZaB!yo]_NٴKr fOD Xp0~1zjRZ :; 9nDyyՏ4IȈD.P&]4-&+-nMMM%<^\AU tp".=(:;+%ߛ\VrJ^QUb&w蝷 ތ_ yoq1xq9§o?'.1E”d 3$ cGНRBfFJEe+Zq};> V Us* #[}p>F3z e҇SP4-N_ }u%U4R5_Bpd>Jϭ)418/!rbK^xgkǢ=Gf0Ӊiߝ G<w+1,=Wݷ^7_{E2ch38lr=x7q؏=>^9 Y\y4/s/©ހ+S?lGBxzr5O\g9-\B-kgVparxAk,tAZ\̶㵥`pѷO['9(i%$J +TU&%_Iih/YɎX=m8[|\=g|]ze6&1u\> V[ܑmmj1\^">x}&e g>O/Yk;tZzȀZ*OlAV+R|\åIVh4/nGCfa2ʝ `;RXsLZoQ MmmlA$H-@)M> ϛAO8*mԐKotPЀdgP=!nW[[vt$5rj:$F$ދP).tXU#/ŚkZ ~{g,?GnJ,wYˈxGnj5fZќ8+noGbŰ 2<6K,o2 +q-86ZZ۱5#X^d:d @ m>ȃt;]8|c8F>k(r2L2ѣϏJ4.yb Wv B&';m#ͬ zGh7ƭ] fS`Sy4\A;Ì4tf{GuAҶvʕ$=2mAB\BҎQT #X Mx#w/Z[I?#Ñ9'g1Uܔh*JFYFɯfBHEzj?" SpɴˁBwptT^UD2x|ݽ0bS`pB4wAnYBol'̔bmlJ#Hp(ơU-jٰ[?AB}CkǨOn ߅ɬsBsn@i m766EC GMS1ƣ ò^z&]ܡlWxH:+TV$ܕ+H<7nmjªkKW\V.0 'fX 鰼soY}owpןߖsY !K?1v[R+ ݢq/} H3Px𤋮Th;\_5sBx*jPBvr˻,u)f9eEp>r %W,Fϑx2RO]GW _UH¥+vV V(?f,)V|x|E#L[}bk_ů_bΕ:?Ư\~~:k6e^q>Yފ<NK1 f6sy8jL9Dgx/qމa.Cc!^$׿>jw憫/̺:虘i[ƹtD;B&TU' qY3)N:P:?G'S;gs#h@h#h{ݝ!ktLT`??a\bZ"8ήc>L#oI vL @Dь~ ]i?ӂW_|4ͻi8|0DּH-pr:>t. ޒHoE#p'6zڦ|?'+AuPmUXYNEI 8i+!gmyp'2r '(xD {UL69K[#f,ŖFG21k}) |t磅.^ݭ z 1 cj]&MW^Y1cFKWJU7flm+/Qa@>o Eo!Y$E}]{)(Ik(Xh8rfM`'GY($uѸn)q4BצG{\!BnKJ`mתѴݤ˜$0+ czSLOP $H]sp.c_{݉( ^ˈr`Q9g= W1ԑ9o.|Xr&'҉d:,@i#mىntG}> u}bXEGB2x,ttDŽ3 L%-˟UW>/'㶇6ٷb 72e[;C<>b,9ck~֎+kSAYux۫ NmXw /ͅGUo(Y;R@QZVL,DƖR& adin} @;D ٠?zfmwK AV{}m}bjHbcG@X\o<^~ȬTeey]m0ᬋ.Fø B<%~wFҴ`7`}#+JuQkwuO~ȪpA;PZQb,ެR<\6z,K~L 5bnkBu-ؑXbS1v?NV8x(1+Z>eU⚏Yin8]G5nsIr[SiW/iÓq#1 ܱ/.Du?c2%Cg,~%Gs~]-Wg f-y s;u%s+%yo#7H IENDB`youker-assistant/src/res/user_proc.png0000664000175000017500000000266713260315532017127 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp IDATxb?01@@1D8 "DDD8qD0`̙En}O/_<.e; ((..0666Zx1XF gœ:@RbЁ@:p.Ёe  - ߾}ðn5ý{+;rƍ Wy; IDATx]UU?<䏢2CIi͉Pk04̚iH!daHČjNX%Ā䲺ĺ}wuw{}.o}{o}tioo7 K !+hGC^.k}I\~`VP#8/ƺ*xIYA49Uk/+ I~!IZp-r(?+|ޔ|'6{"$zLOH.XI$.yK`mk8=w 5A:8fEtFѱK`$8aR02zQOY:5 +8bɳ ۾y``{ti<#,g[hA;r[傣~\ R`]f?󣪗 4zDW ƒ6>Z_-?YbZޞ!m_Q+,IgS7 M tOG`D>p\H҇ VZmy6y fV3r$bAU˶n+pz^V׾Np8 IZ07?Z>2v3FDiI,| Rl$T# ؾvgr^OjG! Ger?ʟ/L8d4gɌ:jXH]ߓFc`.'R &҂ix к=k,F&}cg*DBF'0x'cr C^ AxMd%{*U&9+\#} 僞FLaO:Ѩ9LJS5UdһɨV#&w71]( Bnߗ&zN1z$T3ʐpϔEdj%6v6iru4SFKW_rEGd 7+ {P#eNa159(~8'hWq ±2k ]l*Gv9q8+4XYagE#Zڠ(>KRU2e#ddz\cEk,/ Б:BIGV-1FQ~F4EakSīm$mkv`;L:M^dt.R\eYSl)c4㔼e0y>IE!o]_ftC&d~3s/L-c+ l* lrn)#ؤ([㑎F$}Iجg ѷ,.e)%2?[NZ_qU)%߂iR Պ_\I Wjy g˵)'}'\5Q}c?2Dɓ_ghkm?>r ]V8Q%=CNzmDJkA_(ifG pg?ʇtnђK9~Z5hVj F#'\Ӽ};Fv]Ѐ_C]Thos)%(CqckO)ϛ7xkS˵RJm#r^L(`Y"AZTY)#}ŷ2(I, C*^>Ik3y%Vc-UE=~[~6({߰y|Ka3 '9BjK #>ز1gDz7>GQe5yH<`:|W~ޠgxAtƒ΂ g2^n~yh;V쏟p{Rw m2H2v:r `w[` ΚCm*F:R-W6lm5lF 2%>m:TY2cI + 4XB=TN&-VHt󷕍DwÆ4 1 g:G6s}C b)}+߭6;d\~ѧ(HEwŢf\)9,a:29Y(?_Y;42l̛B4~4p;th4uel \kF'LLǵ}ڹcKHP;d{B`HG@Зx.2.0q 2bEn GhtO͵!qM0ٗ ˵\7 89e v=|΄* 9ԍ'X^V^yl^Vi$ *tޮKv1'S!x) s%jy6D31VLUyQ[HQc8AUs=m lHkD#,g}*뜣8O9vC*˭'zXKDO/џoiˌD/df-FTd¸ |+u8+-qjJts vO ~ ʋu.| .wޫw|8+i3^Ŋ;M&ڙb %]4E6OZ)D'+gھV)nD_Mnx :]47q 8EK*:4Zug76pyH?}0_j,΃M 2ǐzL68"l]Ӄåy]K`b~p 52O03l`_]CE&S>g8  /OAt!ذ_Ȇ@[Jjуju QnJ;&1JHZX;`.J 8t FB s򳂝mL, kՊݾN~3׋u"l(N6_pB$cȲR{P4qp4$lA2xD:-_#:0 U/'j4}0^k.ՓҌ32$V\C*X3k6+URszzڮlb#6ےUV[H'"%$ĕ\ w$D.\h EȘ5XW9mO9;mp6y}}x_E22*ˈU$"?И +ѓqJ1zqJ[;K>DHO:aj'eHTD1Vd2X._`RG~0J"1 8{)f7}eɞ&dF#Xȳ5j:LWQ 1P%V(QˢDpnV;4IBH+-8(ܑ8;ڝr6gE0+zy DENdc?ȮC{27S*a>Ed<5{KE.)9F>.Xd2bө'Zwˡꂺ2cD»XqF-W鹬F)>d󖀩|& >.mXFF'vM6 C@uSUB>&'LwayE{VF @ODm(I\~1ǎiYC[Lѡԃ&h[ C:K[\8-:`Y*:ID,L̦Xe^<6)P#_fDT48@ GC M5R#[.RފC"mRH~t#S2$E_v=#>F-ue`H T{&!;#Xp od`bJVdH KHp59NjgAY V8Foa~a]06_flV-,R߉GAr#")z|Sa݄dz7K#K⍁hq_Ws<2e݆  z !jDs,{.?nu>fW1WX}ZHï ذc`QӝͭFlVPMog(enbqr 6$ 3&Fjm>Ҳa9pUtJz 0gQTRfkV@IOQs~Τsr(Irc= @^mv{Za֣(S|pʱP螁c;i>$ Eޓi 7oPj "G2*n}9PVUPǨeSi$˭HޑD9nHaPqLg$wH@ &>OϕPR?0kARg鞣wa֥ k WT@45RE I #Z D]DET ­ r.;gOfTuML~<_W qWmY]@9DA[|TB Lrr[3f ..4nNJ3:صLiT8ܽ7;z8kphgXNBE*u> E( Qx*ԀS'(3~#xrL ĵW|4bjx5UȐ<5jȃc'GL?NrIni79*D]V0os',o|kتrq.oc.8xrbwL=6->?fm]+YvFQ32X76 Rw3e8ir0u GY`y򫚅%%cS![11> rיrX:E\Ux_]'6{*[wV!\Kc:}#qkWL.(_&*TUZ80IXU{5ğ#& {R qՖ5ؕ |1,`]F2Jqa|4 ykY/3&:u=`֞HQkŃňۺk[b[.q l>0V^nŠc 붏˱Ef1'X%sȃb5˖Sʹ@Oon زSix-= +ḞDC$0e2= l;K"ϱfй/ϧBMx}6|V*]m/¨c37bծyE6wN CJR0xMҚM@Uny)WBi]uOb}LLb%֞3aH0Eh %02P5! ,%NGDL=r83fMΘ-geA1-7doOU*ԻxJ}*uխ:6p@ZdxAs7<cDBGjӫ{ m@w=z:3P Z[;Mɞi1¤2]YdTPzw Zj&G9@+MB_m`'w406s`$U}WIοFPЩgfG,3a.V|w΃ExpCt-lrMfOY7덋~)GMeeo}zP(Dda*A$5L,RFpE/dLFsBpP-O4!ߊqyx)ꛛW5Q|g<"o{8y;/׭| fD1?e?[bxYȍmG{\,_h7ROcnd ޓZeKw@8&JƢX T>Wm_ /#¢(w*1?Y,R5rṡܢ_楗a)R mkID4+2!Krܳ: o,n ϷNL'5 I"I' +K7mI&,e)r߇`Џ$i0Ӌzg :zvhTV9Wo6HHev(ٿ2)~/.F&=\V  &t9cf[*$6a ' ax. F$;^NgYr#k!@b) 7<< u04PDgcUh BMe;Ғ X8u%8ui 8{NVm4 [ PADp5MSP`TUO7a=G-(+JNjy {H #ı_ ՠU|ηmgx l١djV#g~w#Aը @e0c]\D*2L\΋rv-GOdS`ͨP!EiʘDaf\Q_giHtC`"JAKal,qT)BcTi @h"AXT|(TLZU_ r5K0#RM-46tv.qW}4{rZti6|ϟ9Z!#vY4UM{"DYfOGD=TL@"g:R 06@'D׈805*y_~ /ehG8Q6( tMa dQ4]|3CR(W}dMc*t8V%7ص,ILc`ä(aA./*쪑IpMQQQdgհ4FFcMPၜ r 3ttwUWuU~U]3Ӄ?2VDɍq*ەǖY ժ%9K%9]QP8=cƺpd$MXH5}>Q8 ϝtfrubNnD(Ȍ^5`A@7jF,{:yGY7A/}Q;/^8x߈1FA\[łFGHx6۫p5Z2tѺ01g Nq?a9 Wd@(YrĘtrRUј,bKn,<>(Ou, 1 VtJwqn烰8^mJC{%|ā wȉl/C)_FZ鑿a1'2".9}xr!ʙrUXɭ+qOܮ\7n/?wt܄Tg86 Xa*4ryOD鴇1ϵ~CzgF^/;Ƕ`s^VHCbz|ocV{,l*ŤM',]i}Q\=BTN࿺ F98/hހn}VvK &7=/usb[{^NâߧKMhr;Pu+ҶCw$x1˭m1XÇ;"r~:dLכeL֡>IJ GgE q\ͮ;l:uUϵ޺(>GѸocI=u0(z.VzCᶌh)EٹH\x+M67=f(s0jV˴m)],.'#j; T)XUZd7 W q#2sܑ%*׏P9l/08zO_anYQvP`ٮ&Q§s[>0.UU3EκR15S4ΎˑlT LVXCNcIXvb)x30zJ%s?v!rjesi\d W"1 ;149n0#U3&ƼiXq^t1ctc(9Of7ހ[b/ M3qadHKX;tGpt .G\ ď,LmrbSZ+yݰA?֞D4FA2]\+~nl%Ibj%꽶s$-'gS1sÈ8OG1ş֜C"*1h2h1@:1"k~b8}hwX;N6j6QN.ꚍl[K*b؋="y=HC-0q>"/Bx$䑮3o9Ք7}p}$(X|tQ|cS^h6jr#s(b+a\F__ B3wR`zd /Ȳ^ *"،vdhm^u Ƿ.s&2TMrZ}T:̼%~Cn}&;q'}~΄M"u5γ~ u3Ęo#ObhbxW:'!~6 }ꮮth-|V%̞b ='d2haЙ䐦 }9ZT°$@}_ G3f/ &W(\ }jrybXl֬˥T=v>՘#hj5ʮQůvl˗ ]h<9 zwC@Q1۬\ڼv2!v6H7A$xMȩV OFc"w)39kl_-yCd*){,u}Sk[qt{ЏcI x j @ߗ˥o^C hڮ^up(aLnFkY<{z\cWT?нeNTٻ .09v?"G̪bxYNqu$tLgYtܦ4"x|,UnnGz|$m=DD8%<nc# @F:wwd*xg$`d _.Efyj^ǹYW4iǰmˉXi^Oogkk"Q,'5'A0J4.FdQ4X3bC؊ ,aɭ |$K;e=h63G*ִ=; w uYgD; /j;.HˬAn ȴsg.fXďgB($!99b~b!m. YN4\.7!(6Tb]i.f رI%~l,آp΁1" 4Xs9Ek;|8Yb^2.Xbkds#0gh\9H6f6 &#"G]( el s/QMrƕ~r]XȈ(W31 o M}0 !xN*HbB_?gOfAoí4x׌SQ G餴Q"Z"8@)F\^6'% IJmo uYlBg8C+ AI5fD=-#wDcz=7o@ɏHϣf-K=ׅ4NDӷ^sN st̳")>)hw;^01cŶ`uc3Ytr>JP Xħ$Nbґl;M1;4&?- XuF]T& 5O?riSF% +I#[p%|&R$;?2A|Mq1H!@&:HwND6(tayiP4$zL7Lė42Z5G#V˭JMk R(1ً_bWVYaVIY`Zϟz޶al?\yIvQOhz0즧. 7RiGd׆lW; :\kn2Ef|T邫:ܽr.&Sv4F"r}Kk?,.0)leoZRarU޿ԭtـ@ a K2CPE& YEucUEDOQE!@"dBN/Wݺ~U;My ]Uu{s<qxhNc4x+4U9A<0_TZ]2߫am拫v~5⫽=8~#[:LosomK/NUż]GxED I~Wύ h$ڟ:_^ڼTԓmhAt|ogwr'3NWRg!zꕚה:L6~Au>^RG"gͲkƘ4ʧyS=uK QV9՟RҠv2ܰhQג'_v׸bk^Qhxq_xcG1//&jhʋ+L"KVVL\-[[ּ!nr0i)8u)?'P47kE T~4@SSAŎ/ZS Vҙ~łtmk[fcS lw( AL!"*yԲZh}fΩ|=N]cNڝ=mB|ao5v^tޖt ˢ%ӹGn36$aWDAk$⵿sg(jjiְ#ӈò'b[A,\uR[Xk4{+W¤}F6{ȩ;ziʂ"Ғ4QITep7SKiKTWn8662d [R0pY<2q궪;u^3sJc':/;sЙ?38&YdVU>8ji|qNt/", U^wx < MRP|ezQ)'},5"dnڰը3TcƨN}AZaĆ-).q}[sPE(N5R `q>۩T$)ǖ=xS~eһMw5WTVTlOXeb雗`BghL#(C$JuV~!)`o )G%2:}VG }ե>Ͳk]ےTTx/;%J~R9T|OY-^ڸ\ nE{KhKBo?)E7Cc$|t̟b&^}fc+AᔠU&ѫ}xْ0?5 ,= ?n/o#ׅwvۇ_m* + v{P ]4=E@n}W=Ll#kK'TkǠ1epiPay=}3a<< M2Yy}ympGpm$tu_fFr<,}1 o?6/QnsL-ߺCU%5ڙtRPlOW`2LЩNDK1Yg#TWEytG2ކ@B1\5*h|7uރSBCDSφCMcXҪ I t85aٕڬmM! <*?[%\3>oA6_ i R6Ry=?~_NJT||YK-r 6p8$ pH~Dݸxð|LD" Hu9?TwݑG0 bnܐ>l1ǡiX@c,fI=huaarTSx!=NYt Ag(5U);>sZ פ}w%8M;5pqЯOH%pW8:!q$52e1/z|^p.pvL/ØN$2ݢY#ejA䂍YL<<ݻBhNФubL  i^ ʾF{#Azg/R@OT_P*VfvY^kzq;vSGG{h5H!÷| 1 ~U:C2>g~9 4m-"udm,7r5YE-v?9M sUgf6d ( |Q8/Dۼ{sda 'æ>tHE][;9k>e/ rFU{69bE_yZѨz^iHǨNO֞ ^mCӱhq8±V5m+ r"]ʸ2qryY³(s6GBمY2 9 GL (*PaZ8Zӿ KNIBEǩ~Qa! ov ;eox5JL,~r95=%ũkE2.ŶtnXSf#Eɯe)zd:y`0&N#@C`pk(NOp',Y7ɜ#{O#GpOqxbR% "o fߛÿدm΄SsՙZ LT5+i#!0g ސ,:a:LꟄoZE, ԭ0jL{p!5LW6Ҍ5LĎ?O\cs02O_C2r٩zfdzAW8Ÿy024TPlk]Z,啓;C^\Oƹ;OP`Bz_'K%6>puP]1V!K,=Dwn?wBLh[ۉV]C"+ ϙ0QX"7/ԻV wڶ>\6{5J@*G6BS/A10Mtn{R8~<}OFLY GZߗCx0Y!-IZ&7svqx9n.^+o…x<E-H_vG^3#;+A4OǾ TiU3Iy PmS¯X{Qܶol\_ )e4Y(R'ݦќ܌iiJ((yx/7 ŦͿIkDJZ-2)k<|xԖr X$ RT&Sܓ<]pH=˟E݋3K1>ډ{?&.Co|, Zn¤.#9 x{`OET30!ʰ-kQpxmd6SoFx˘ Ӵu8Gh9HFI{ ,ҥIbtf3iS(w$?̯טQjU(ZY)LsE;HyRŶbыc#4sa^Io9Hq[Ø0Jm dnSeFgr" =8 w#oBc R7.֞zR9ʸU+vjʪ,=5 (\klT$]CpFQ\N\7D{v+QjdӠxYNإw/n>p3Hb<_2"C3Z>`;osA=A g&93:"A]L)}25#;鼠ۈIfdIǞo^+&ܖ thkLxt0@Ϧ7E[kď\ wC9͝9rAuZpw6 ܖ*51Rx7=w*`CۡbHBhl(mZ߾ם 7e<=h͙C  <2ۜ58Å!ZQu(!4ij4~;{`Ay,>П@F Ey3iWkPC锹X+^/E9}X-SEfMNcI;v)XJavP$_W0?5!1;DI\I=WEP {Rd"L# "bCPv YR〡1Xj#(='ApǸMVӫ$#UJbn̎}"L^ ?4h=OտYLeƓ x<w[$w~HҏҎu!F=^-`^;ުj0[ 7IC_Ĝ71)Qd0ˊMH @٤]d2m[qtϟP1 &|lL!S"%h T54jbfq#9:OWLWH6=+i!!kv'tF<O<Ǝ~2߳vCA@M(.MQ' GcA٤/XLA3tBx-) ^wЎm߀a /=br*ϸG( =Q 9t)jEe g$0"Hd֞e}1+JF|@ E: g%q>LJ "h"BI#LpZBk SŬ*rdn$xj4 =$EwZIx/5~D)'ϭs4=t-h /ÌDPJf'4?SZ8Q'P F U xE~`_iO./FGa lN2m n6@0AV4 -6huĝŇpl3fl?$΍N]p.6 %m̲?9 !RH2yͬAFLOf㎖H&@Mf1+sq6F̽1O$<8q-sex#I_ùbvt?VByKMw|Y687q?&>wcnb ug"B,+[pzEId;A!ye)xNRx*}iVQ]yIKb&Lvcu!,A&EYw |JBd &B/=gE)bR% bx3 yn!5D2 MHIB Qvq~Z60^i%n\ +#9u-hG DRt*/8)Eizx ה)DrI.؈SH:3%%ila qEK0g0 k%RpvÁx>NY5+`hI99|jL"Ќ3}>[#tDf H1a`DDBt|T;of6`LC@b&gb4p;ˉM˂RD!謠c^UAFkh+= ɼߠ;n#'҃]yTY~Iɜs"X:ofFsP7#%aYE߱It&FacNRWSZ< !vnO!mşNK-Si*P{*2jb+wjO 0MYgBl2)E7F(f㍜IeHcSIFXa=LorRTJ>ԝޙd57k;.I}E|^EB9^k/I& sl#xlN<;5ۥx'AڞeDavc҅LT{1Nh-JHFPɅ]hDv[Fl۰㱺8z\lhS!'ԥI p)LiAv?OzHrav.9vѽs 9zX1'X&F'W>|.G?;_V[yܓ!G:n E^laXbrQN3GL|w䧼{L@YYϴpgEmq,ʠ*,[ӐS#6 [I0]A,_%?y 2pzQ̹)$4QλC,.Lfh'lsiezxp. 7ǂEIBh M|<3QEw9\gOlxJF;R;[~617fA.L!̊Ep}ܖ#Ī!iai,a-z40@jڗ3J_d k8?ӧ6xi-S;.>n6# B43㽘K`;I3-* % xժSt`fGԕU!Y94lB=0XE7 *T:,:P[)>Ò]wNpeԶ6t}Kpn5 %{劔z$v )0#5S'$7NgGe5n9V3{xK h=  cQ} -%OXETht΋ƞ?ӤA #VXO qF P?C8M.~?tJȎ IENDB`youker-assistant/src/res/version.png0000664000175000017500000000710613260315532016604 0ustar fengfengPNG  IHDRAAtEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 9Z sIDATxbdHŀX7dAd`Dc`bXYd?>OlH tw"N,!9A~@98p((H @1.(n%H! >d1g$y_6P-z\ 0] &hA l$Ab0+N@P  bZiˀ`3a%>ͱre@ IJP(z&:?%@M~ױJnhbP:Ilܰl->$E3ހ=B ,@aK'0 MPvO%&ۂihrX H[xa Z@x 6t2`ͼ@ 'Xփ H"a?q74FS-_#e$[4:X E|XB+A,DG Gy8 X =k? }a@ Ѳ5<~`=LHN !S"rƚ㐀7ZѸ)B_ԢxG0Ë%N5zXo.*8"Z!'D@yr@Kkc -b n!v A|oȩ\I^VZ \Sg-9"[<I "m3@栦 ٛ ʢo CkXHOP$mb%"r)q` H£+f_k ~ ?U$K 8%44C z'ԋ!̩LH B3 T$F7q'<d_%I6[i* ߉|d;, r]M8baEg߉7Yn6;yPIF^j!hQRIq425Y(gI^{bџ=?'YM BhR<{ pe%&~_,:ǙnkJPZ TNM.T90`eEE0Q`nX#;fno?b}SpR}=X,}I%$0izQHLpaAf m"4t6Ѣ 6&I%fba-aAl:;js=y'lF{{C"{u' Y e3·Bϵ3൰^aiAyo`9z$LzT +HA'Cn 84~r[)f9}νY-CqiͿ26KrF~M2B%Y5ʭ !JCηsem!zBO3[:1t(<]2>eҡSFPr*K&e,ڱԥ0%?UCӔMbF6BjQA;F1K{bWf远Q6PM~}DNQ(ߝdDb4Sa0= V> } W\I %'PT}t✑+nDKnЎ_t+@J󆪬%xؕ2cKݚL [isٱvJF\o$n*/;$8?KDuj}%.Qa8?JGR?RE_H<4@ee3 ;,DsnL- ÕqѾ9TkIz dBLK}]ѺR5K^N~ZG17$UPgѼ1V;iIENDB`youker-assistant/src/res/bigfile_uncheck.png0000664000175000017500000000514113260315532020215 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp IDATx lTEg+V4*UbQ()4bʚ{˱X~Z5 8Py\hoW4[`m8NKPMP6>G(p8ԃ( ' ǂW20j|\L]Ɓ<apׂu d5}?YEc=P/Waؙ`YӃrc!^Y-79C?NP1\VֱW|>:!Mp~\M iՙƺ%`.חw9Bb+^Ot"`%cc) Pѷk@#]U^~\r$wʺ.0i`&Vph"ƺԅe?6Jf"^=}n[؛Pfn@>e%?!n;|Vσ*mw(LQX,-WoMw*a}de% V*+0 |\h&vrS7(gDX<[1jdNnk:9DS8NoktL#$,ϲn-Nts_Zu0݆GMr{c]ygIkXKlSݭ\fI%gTBoHVʕ$0{헤C|]^7qRS/7无t-$C['y ǽN' ?Z`yYcѩ(i8 0'T:lʌ],lmC跕o4 !Y"?J$@"q_K(|wU}Bŗ~A^Ϛ1hǤ|q Ks3j'tP$֋B?U:P ʱJZtb[pWVIH&nr8#9>IK(G.-Bn4Ȳ![On#* ܉=OgIDATxb? 5b@6Լ8Bw/ 0#{4TXXh1nIf$h8!V7Tij812DD߿gXx @ve!6|cc*Ug3 ̖d`cgc4c;ȭ 6L3)Axa0f`XFB&*A@#ägd"0yv^x-@cI&FjDI- %- 5b+3 l,@6 =X{/@Dh@b Vexp2Bcu_ c /\{6Y?o6zlY;0%n9[ # ??#Ag3?'3C4; $q-ÀS0>]e8C_1\;ad8)S ֢qRS5C&+1N?}o(۷K؊H&>oCŖs`z`JAO6\Zkw/5~@Z]tG/[OgKEt`4_<$. P8飔 >}c"l'2 l. ?y7b08 FI-5Q7I(lQ Yͺo &;P5DաhځTE׉ _~CĜ8Q\-b5mZ`x qwRcXpސzS \Ϡ(!;cpBr7"!c\ U1 U2b lt `AC oٰ:@쉮AՑB(- QEXd N l;,~0,%h`-1t3šq= mf:q0VJW•<2w*܊D8N_ X_~7/@Tw~:µv)ۗ ϡ&ۼ/| r]؞'+jP0[Wzp= Py{kK`Hf6YX\  r D!gɰoVmc K1.6f`S#V p& *?8擗p_zC$J +[L?2L%p[pC ZFF?bF)A!RkA4-@%́ H1mZ, lZ8@1W7!BjO& ;ci63"wguי<6IS2tԌB$ ' #[ ()L CJ;$Iok5C=zottfwvtv,3vfi EI19ݨ8Ӏ65IQر<KR{\_P N{`]iD {v~a'u (?I*A8 H`A,~{tvt^_]  <cpY8)d:u4) \O?l=3夜ړJC h%fYk]_dZ;9pq6+FG+uá>h;hQRaq~=9Wk.̆a0 Аk!#C0pD)q>|GuҪY?qxEaP4NCeZ;9g4 ߨcuM,(|!@ ㍈σ0(G5TUS#)=;٬NK@Tlͧ(2{789$tĢaNKUʣz2+aoTza^Rp8a38 ~\p^"F_=}p:]("'#LMן( ZXY²oF`:P_`uvF) N_G#?>iyo;8]6M70o-0MQB -P*Een:td6lf˦.L4f3e5q&#l̍(* qqd8,{{o{ojvmwO=9_3pmW](U#S{KW+s`Dz9ħ%,Ser͵%p\+2h: ;+ Cld}oȞw?8`dG,A&}o[{ԙ0=d.,Fs߀A$&DQT$D5`3 L?{z=@cCەݥ,zΖ MM^kܥ~0o{%cS23ƢR( ?qo"h/V.psk;g23x8<_4= 6#{o̹IL;UmFnfr;;a))l넘`BẆƓϗ?p i/JVjΘSК/rd>pY%RoXS[[]g}pQ04L kRCIQA[74,^mWLRjǁU*^D7twi/E;[s Ե6"d8, j(כ6 (sד+O$Gn 1j3#CCd W|R <5L9[lzLAZJ+A)q /$M`+,}*e0\ÃL%FQ.7̵ !64D "`o#=h]aY8r-qY^GkHC<&w,˹_ѠU7n<_ز rןYl ȁ EFFb*S+*Q.W`@Τ>p}fGf6;vg޲w ֜y 3^_G/͐(AF:ڽRzdZl([!)_\l.FN3n{^]dz!| M}2jP%Q2S.t@Nq'k＀Jh=sj"[dmWCDn^jkp'd$Sy%qӲO닖kNj e=%FxX;TZ /\9:oyN#Fe{X@UE{ VZC-z硰@(ؖ,EMQ1/'%+tbM+SOBpv$AmU@QӶ+hjW{ۍmhxnUβMk`;h1Y-]L,v*[ 4S;qMїQY40,B~$Ƨ*hvV`a;{K!%0BT@;¨ޔpcpJ+yƖ3x3Ntl'EXU`߭`QBR.E"m巪n8=cM1""l^ 'D":A4'Iy;”-j2N*Șx zEz}L~@ӭy5BTdìMxA5 *bL) } :;`LGv}x0Yҽy)wu:ⱑ=[ ((ةCY%i5uHyB^^4zT*Ţ%K+s_S*%Ms3=FyI*.Fz#T5z!^A{wO9}ϗ'\`@- Dضh^VW^.vW_ȋv )d&bC7F?n v AȦY|OE|.bv_4 odn3f̩bh0M+b11Y*`,_'〃mBojQp<62w a$5H^Յj[ Hlm;f l' JG*5bd,!K!ȳǃ?`{h7L$ͣ^ұ @ޕGU^L2db !BPx6ՈR)*ZKĶj}Ty"'(R"EBBȾH2I&lyfd; =Lf{9?f a `g]1i04""Į}, z)Ջ^>8zv < 깝e٫p5PJ|_F"/) p( XN\O&a.DZz?PD6G'dPs*<+q&N-ɬV i_-e! Z Q?>5L5GD+H;3-9&~z?Q(S+yKI{*1PəO]b e.iky;_ͰA:bs*``E&Zc fAĚ%̿3 [Cl&=%U;K!=&8LPo'?{46T˷<7^yxj_bHQkg7.\d&*%^37X}5V:&(ʂSVP~j9#ˣ=mtLfq{]""( ̕;T*عmDž0#m+5de0 &a(R l-իp!$I:C8ih/4s@$K= Z-sbR ^,M qDݫ+(Gf{(ˣ#=d*SS1|jLX,$dQr f@_$Ɔg* < ]LpzUώpq -KJ((H5Vĥ¸ ӊ7 s)ѸȗwI#Sl\uyxͯh\]+z斚J93xfi`_LOtaX3@Ldqxωn玊=0,+eFG'3#Q"U [.Cm="a ~vv]25|׊&Z{@J}mZƲqFtju02!gF3qY^]/C\Kzw`"Pm1Ί]]$ /~Ճޤ0#Uikб$X"zM>]19Hٹm:6 X(Ul=>둚 :SˏMYwkL<.dYu[25XKn餽xO,&ʄ߼˨4wYn 7z(Iѻ? #+,E!E &b•HZt"PBR2v\%VLs>_O@cG_0>y~.C>POϜm$Pe7{|^!֑0<ik{M'B-2Ry$iANcҨrv'uҢYY1&u"mx!m4HIKZ-:m ؊_.Xt}04#3@#otŸ@ -ڹ|QM;gȑsϨ6c-LycK--DqC"ht:54С՝NF\BuSsB .BX8IM1PH=B+NnNgO34FD+D e<Ѧ?U_~=^$IOoҼ~zjT_wrr 22N=T<ڛ, ق5}XҶZ#vr nكT}:Ҡ &0YKpIkG4FB[S$  |h:x>iI~6# N*,n@<;jqV|~>u6;~fS@1P(Cf¸:,.%=ݯ-J=4cճl8;O1LbH:֣.d"`/uxϛ LW@Tlbw ~NP޴]¶ӡc?6"\Z0XKezM6N*|{ج4dΈJ8]`WLO.>gҝn{dZғSfP vj Z}UdylR^Wt;/AMS;p>pͽ1u]ҹJ#8 I$1gV -g6ҋǤR-UokP̟_!\k4xf T6X܀>Bv!XY4F>=.xrϐeٓ_DEjvlcl (kʈDG؂ 6=8̮;} 3ߕ-Z5mك\$|,A0Dd=jIƒq3i ytÁՙHE3(75N/Qe"~PFOV/FsFD EjYC7Ad8 MQ$ NąhUR 0[[&B^=%uD;=.*h@kr #!Y sB#7Ɠ-=́Xxn:x1qT:!iiPy[OݤNN@)/wJ vFbLfz# J%ܝM1ڋ= kr)9W t޸:m:Q{:Xv0A26sӳdroG685@cO3hwˣ@&Jy^[ΒǏ)Ir yp~!(-fV] #&cCJk>ܡ4E/]%G cZ}V=,u Hr0pKR2&#hXQ {[J QiI"u[ X[52IwgɡdJ'3:YVE$`*"71+U=ƠpxR k׽G%ksn Է8W!?E~mԥ=4В3n,$A?d갋mF}SVyЛOwkXY1uٕP:wk79 l:,k, 4u%2$?f"8q R.t.KeFÑ>JJ,MofxZ~2c:Κ%j]`$|HO'` oZYR@ WZzn &W Zq&&A?k!QVF Ο]`c·q J)i2_,L9 dᯗA{X;tW^6ziWw;eWBq=gJ̾C`4vfaHm0 ] Um~,&vqHDX* B1k?y~9QwB,Wa$I8[w=$9Ȧ9|\\E\VQ=b9 cc 8o&M2^q M,TUR*PkحcTgɊj]NE] %ldQ?5]aE4%LT©*FȒغX@C9iI0nh F&|vurjv:QS9bΐϼb7;s}"PƌWdc#D<6͇xA+]kɱ "FN[tsThutw7Lӝ|O+)kN|쁕bTH;`cת^xf`c)S!>!]2WHm\k5ͯh/-Z9q"bWedfэ>unZe)gXEtx)Xuc wl}UGBeOꑙk1D%iS OةvWCT jڧJ tV5g󜝁fy'fYdCB";/NҊ<ಘol@?ZTrŮ`9Bu5g}DQ؇؇ 2U'3-*\AqF&M9`65հ> Keނ[?|d ˂'{SH fA!i1{ М;5*W,ՇJ:PPuĖ[; &^,_]_C_ :x&WWLF"D| %=ڢp`$޴)b?:_6-B?=Fpe}H/t4j:%b[Ҍz# ~&6Ok"ݰ{4bZQ_=LUO@#j.@Գ-e饖^t-dρWexcBʣ4W'+<4Z}7nIt ʽV~e Dž'cՑ:@/ʕBZP2}SCTסO5č?i}$q0s&3B~؝-f>Z`0( 9my{b1tTW}FH$ E̡2^zZ?$$\6 G^k?0LdC7lEWK0x6?"+tNvU>ЁmqrdjsgS6k[ #b"gv2I+(@&[\HyA.@_f( mEA4 A:-K{8SLQaJ/*`0C`2` wmPxQ/@{Weudd&3 E`Zm-Tiڿ-}֥hQh+ (CdMHXL'; LL2d9sf{=ܳD%@j;#Ng`Tp@8ZQ #hFE>6g$e#9"-&kaz$"HargM$5Q | Elsq=},/ Qlvoq׳m8ν?;YJQPH4m<1g&zv>RIo?#]Ylv/_f:7; #<c(p9(54(Gٵ/g߳Ǜ|_u'ԓR4*ܳr>u\&+e'oߎ;|1/m;{Idלּ ^Ğ@'G 8]|m\Ri\ݱ7/*.;Ud70W/v ǿ}-u!akUГPyKD4I/]ԓ (Ґ@N\)΀')>|-lׂ[päym#T5_Z_MMa;wJj*\WxV*yp\o0~TXOv RȰo ӦO"#XT*Wӈ`Ik2.Z86E6&4wv>31nއds?<+ΰl\=R[~O gfrBq;)D"Jٹ{x)zy {ᮥ S;tJz)]\prL9ZT YW %t xN.^"̚ nr0/9yǎ Bf{^h=}\_8d՚Fz^O%9Hă%,M>k;ljM+JBLt<geWz;;-&\ELJxj1#vdfeq+Ѻ9 gXx2 :N:0v,;>"zwE>< ÷ w}6}{-z,38yqlƩT5)?ef35Yy'ncIyS-HCĀ ^d楝FƵ$Ua{zy ,kDqs~ᠯ.6H +܉&̽@P !Aښ&N̆B&uVX%j)JUjTΏ)LDLL/\s=6Pt v;ʸ1%7se*3`vslx*{M@,.B.A,+u2&}&>ߌ*Slmi]YS_?m{^_LQpQ|hz%n`)wsu_sQ%VL Xki$Vb];%q89@n{ejT N1Ltϕ/>3X)N˱p_ &bŪ9.w-mtnwxTXr\9{2OeZ@>`u΀%7C뚹.&tpĈ9^,t; b.Ha=s9T:(}Wp~~C h!J!AAzPͽ'nCrdMXO[f9KNMԢ)8u$7ǽ7-@}kd(9!DiaCzreUŏ8{N}<0/ч1k[n`{TK;܋Xk9i)2,.3ByeB K*&*$`{\OW񴱡 ;'`{TVS8~$7dJP)ppʕ`8+cS߮KfL ʢt՜,=|)j\t)ۇ2r.5qL egy4JIK'^@ `~@㗻!] gL0o[a}ofC~/O;v]w~mmz㥗 ^ޅlskilàH膽N"C,FQ1ki]ayST");—54h=[o hI\ 0hWkWi_@IѪGgyy(+/zo %:qrdKF/bCoĈOA82ǀ39V2Qkts7E`Ҁbrgo$6=Ή<{ I`jmBGME*^"ggnlT4)x>_Q1c=xlHɥ:}LBeP8)EХ\jK~:d "+[K vQlբ mU{Ĥ Y!kDS-/(i^6'ŏZ9zMJїhҨ1h:U d{>#$SF#tX/kP'a87Q 4UZb.|&$J]2ka{FfrR`4N\՛Rs$k5؞忂KQCԡBN>djrʜn SgBz~J<jab4RF8)N·.6RdJG& Vc\J6 )s@V>yse>;}SF5xS8-̊n7/#Qz̓+6/=ђXdSZq Ǵ9sœx1EpcyꈖMe_ہqEaZPy.8beaR~>㧛ƻn v\hOв;h(Uqݸe+T7 YLb'};I|71uQl8emA[ L)%& 2_,*ց6voj{c=Ξk{?_ӈƶ]qT ,ZLZ&Hk0S LѨpi'͆>q{ɴ؜S=L)nE_hdX2*\ĉf+5Yz (lN#ݕ"!SݍJZˌ۫!p(5665LMOK`Z]S1&?}߃v]0+8vk`HyfnxrL\)ԅIq{EDvTb+luWځЦLKpIzbBexsa^ y_{6Paw cgP 1>oߨYcbT VWWa';#~D]SYnC^w=FҸ.橚xzhӀN8؉ɉJ&*C4`tHBZRx`*z8=U4q;ob6Gl_] g-Pդț4y2 'bfvwf Jk8;3␛ OyKLqɰb ;\Ta[eXT%r@<ʳWG $󒫏WաɸNSjqk s3pb_MK֞o֮77E.g[pfl7cbQԏ-K~{:g[=8vs 0ф3LnncXPQc5 7 Ep.:l| ByYsp {.%,Aּg}:Ytr9>;Ym5%{`nq^c94JN)drZ"fԺ녻zo~T̖:u<X32_})1;/ r311}`d:;lނ Ln$rK5 A|ȷo[ؿT,sGdXTAhu ڬ *YIgFciռC&[pBf kV׳0,}Qxǿ[z{v{|ĔJw=_Od|5d")f'"[Zւ3'YlvL6IRD,P;R:[: |QD(f\\MJ\,h׷c?Dzj<5[oDxhTA&ivw;9VbGP\:#T S$!sB"k'st0pD/ TلzP[S(c( HRU^[rAb\V63N!0` iOeVwglT1}ZX3R_W8HoTRX6^m_{`LjkPUy+lnz;0>=49.i& lԇO ;ab>cET!QdsC<(yqx-iuͮn{r론*G{h'A\ʻ'BE?~uFD18]15-gBJjZ'IDPʥ^X7fqh!eQqm'δ8g' XcXLgb#8~h1Z`*Ve ;VC l7Qyy᝭U?}ޓF&Ϝ5Vs,긁GSRd<=^Lֈs;FI72l{-&:F̿K !ʀn:&!);/j]V|YTxBk ` WuMnxl \hE\ iNYU*2Yls͙fP d['] CR:$d ^d}&:Fvyخ>]rw "kv#zJ$pfvk& bbp7[m0m~;f([%ܵaj_0jȀ-8 gj9҄FHlLyEakw-}^wFE`1#SH'X<0bȁ:84lŸ_# Q(TcRgƤ? T '3^/ ;I!QDRJb Q /]!5Ď0llV` Ns?}L4y 11ю+4+E \f I˰[p${|ތ7Ow"ѫ<.?cxYjk̰[p!01Tw\(G o.PaF|H8ֲӇ[h#I!Ɔ:L@bЎl{yVSFI%^yZ )`f-_#i ]"k0<{px` .Oc/A,?(KDX|8FQּ5aY ,W~CdH">71mֳvp?9YҎ[Td[Ύ᫅K{>WD9?M. S(nQIZ VZ2(y]`67&ks}o4ڙ"ډvX\3A P6]@[㦗 .Z_:dx&')D"×=b p6{'vb ¿o vsmv𬟨&Fl~ \/vt;zʖt4M.xMbvE#uB E\p͐IIENDB`youker-assistant/src/res/others.png0000664000175000017500000000430213260315532016416 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<dIDATxڼWylWGu7vHJW))P @%D(? 8RU\"?JPBZZӒ@$P9g'{fwݙ{AJFz{3322 Ѩxp#V5܏? Ϯo=uw[۹0>dj!Oy{_z \VC!906 ->㒢ׯ\Q"C=,4oZF'RE2B ѓDSQO'Tk0 #8P"zEE ZV S_)VL%P-TH%Q͗y[U;{bkv=XrXZ,"L@$aAdxj&+Jh繘 Η&%ؑN]̃9{!H^`upH eaȘ@"⨕ .YWY9wUz_ {m %!b̏CJ"ɘ+Ld $:YDG i@#Vu(xdhpA-O)2JU2^E\1 <sc(f4Eb5^dBp2pG<+S0}xh~+ ';䉮4b=J+-04nE2'smGJQoݎGw0^VϾWh HfENhpQ~J5ch#%F= ʌN G,B"]Z]⵹y&5A֑)Ji!E+T* p9|ox }xl! yKuA~:Y QO> FЌM|J g4MLNNK؟Bب_>B75 &mH)kK×3cػF.gζ$ H0(Z }c0s+++rB3w Hpr1F/ӗA'OblCU t.zcʂL* m ݃c13t982^d(ܧ_^̘Пq v leN tk4KMiJd^Ɲoلpz MM11W,ת3% mp ;lh~fęsSMr8_Wj gC gصdBЅ0 cFo\c59ё[Tu񟛥b~dn?a,.ȃ-¡O.EPVORfcҦZ-8U{GH%=~t +)ρ5ma,j,| K1(" #i? 'QH$(.eN筵C6BJY9bv"䳳!G.!6~S|]{!9-ݫc}(꺀aقI2w" H$̕"psm$V>3K p1yV 5M˜ cEX[FWe2y&#Ί+ҚFs,,:ir&Ř!t-5@B$ɫXÄ+3i˾Unr-P)eS3/c<{`j.eN9-@x$NAz29P^D6#oIh><[vG&8 òjbP%Xa8L+5 ,͸ JE|s>|uFb0[0n޾8|ȸjtlwI'Xl*"v[;,^1TzYXD2 AZ+xl7ݚQJQ|,2 U_5/+$\%xhȹs8otC>L;*v$d\é^:9TnW4v8J±}lHE=xNy:u4!,ZK !f!s2'CO4ŝ.`2aɇCT#&}05mh-6zÆfc6EjBZ_xu nY tQM TeIENDB`youker-assistant/src/res/camera-default.png0000664000175000017500000000707013260315532017771 0ustar fengfengPNG  IHDRV@WxtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 1 ]IDATxkSZK#rkAAT@/<'OL4eZ:iuݻ卜I$o*0f&Ę3cfb̌131fĘ3cfbLMz/Ɵq||Ǐ~yzz/{pl߿AGP BPGӫz=Y\? իW BX%Ap! 3.]Ҙath*Jx?,W^Xba;88 6IHy>ye 3`zJ466Nۋaf eƬm2&lP$< 6 zW$bXa&)39Y\A¼7o8ɘ{{{6Ckzzڵk̆Z_Re*)i>??O:7Y:<a;%-̠%833)pܡy!xB }p$3̗$YB1jm+u7Zv |#ME`|jq [u2>>BsI/S T-?Qd4lXf0fMrzunj2?Ôsr]bんMק3:&4I5'cbd03tJ> Jҭro8F644 $kjiɶAU,GFF:ip4Fmt"qxxď[[[~f'7GGG/53rhpW3@588W[T#uU!z.kj/;3-P;w 'Ubp.\q -Lk0k&sf%όH*шL=-xQ?Qw +9r&3MLe=ИE~Tr>0z4uRVu\.7*9K"zF-T)"x 'Jse}}}l4fWO!o>;::; h~˗L7nTƦTKkS)FLs'(aߨmR8%Tx13 3Șwa43%&Jq?;y?m1ؤ b".Fhlc|RtzYb~.ԯ/e-9O(Zx°#Z|"EG&zY. g̹^_.F,(^6 iq`zzJ2Xh K4_@ȴdGyVs}F_~PݰTW^lj4g6]GR S̷MĘ)T?#2JKa(Jl>yI;I2(5)O3. æ.jإ#`3F->6e.=6R444geY˪ ͜xA dؽ=[R,1fh! mchktQ8Oj y$, 6R =3i,hÂ6%$Inmm---2U%~h_,m~~>i]15x$c:E*g(6<&t3 `x$`) L4h={ -;HZoY^xa ˑjM@[zԘ' 8=/\4f1ǏL8.w燜2fM[Dtt6@bi5Vbsr)T_쐥~y\kb1EdW $>,,[w^ENF٬| ?aATBk-gf $~e2q5??CuŒ+Դş9]V? +y8?6V"wpc'nv^nAfNkEYܽvGĽ^Hsv!-r&H6x6p;YP"ZS-d#ku^J:Ymd}H/v+m4#S2 IiN5iO(6 OWs8i}|*m8=Nm_ ἂ<q[W2"f(VT!VX\ǢC_D\LuoӍ fT}@~!1s>R?Oj,`U1Q]r,̙W0~o1BL/k޳*o?҃YX8̢C :^kfpX;:23+F@-_ʝ0}[T[+՛}hUPvZQ·'~Y}J>S?I-jƂiƘ@2Qk+]$JY隝E3œ+m2nNː_w'W 5vc]3 i8><UZ XQ"{@eLzeцi`q߳Eƭ-Y.sLʴeAê\hH5M4v^C/K(Qwd=X^D#lm:"j|cOl`YMsn{VDMX{}_ޕJhh1C!Df%= 9P$bzN@lDCI#}7_󖖖N30 ]pn;gT؉?=9&=9w4 )'crʁR1?p# ;[[[!;J#0-e.8sۛ^x*k6j$[AVt{Xu"'MD"9ϐ Q[/577JCd1$3xpN bw0uk+j:;?h:&9-cIPt+MsbɰɥƧdG2 yn )`s$kpVtYCŕ.9IENDB`youker-assistant/src/res/manufacturer/0000775000175000017500000000000013260315533017102 5ustar fengfengyouker-assistant/src/res/manufacturer/CORSAIR.jpg0000664000175000017500000001072513260315532020712 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!AQB q$"2#34C  !1AQ2Baq"R3$t%rC4DT ?/\y\TTv$NA:$:A8 ‰drxVjuO^EH*ON5UXmg,W'>U: I:tN΄N=;¤)$Y%\?*4UA{?SW$dR2JӾUx,/YϕNH'mN4A9s:$N*I8<(IW'ʍh^ƧTUI$TU^%@DDDt 9,>ts|_wSs`k'ƍwEk#:$֒L Uuz{":ل=a#[-l|e7a#֮9+u!WbA?HlH _ܻ}z/,y5,:L3G\2B7IXJw'ER`CܳzcX@#*Q?:"6H  d\侤Ik#Ek'%b Jr S"* 5{m=A9NQ$FiY%V!NS؀0 "u(pև ʛTV;hp $2JӾUxoj2&0D1Ӧ/0ɗ[yb=aKY$9 pMZp(6Mp`>WWzTU[eG13@`I&L_fk⩽k8m3)}%s\l0RBSy-spĞWHdF=X;hN"XM*1f6&Պw$tU(-syOk)lH"#/0km pHɗd:OwmԴ{%5oNF }^S|Q"vVfO=xMGR57R~3Ȯ# t/;{*c.mJ7-WYY#qQYq1#Q&bZ8 ʻ%Zz:̗Dvm=d\[;C' m1e-enWۚnkչQ/8EX\`?~hX8W)6iKg 0ݕ ;Zɓ8F1Dw, r_$YU]R(K bZXzAtUnƌ!x0Ki:4q6~edcL6ls1;*l"}emw}ꕦ8{d]4먩)?&t߇]".:ݿ6N-Ejj/-xfÏΞAEś`]D+9mjپsW^i:DuD>?(16&F>lAy[{P_baRIwX/{/o=Gn>%q%+9IFK>"ZT,tW F ZHS,vB{g\)3.d;9Hg^grl1߫錉f$c8W~=\*q;p vnFD+IɠA= bB%XrRj1xM1]aw˧1N 'y- F$[[K,5]i3{03*;lݰ*R`Z E&E*̮T51pؿk dhz?x%M5w*ۇ 1mͱ{ YCSĢЍqa0:.ɑͅ%"Ui[Uhs]]h+Mʋ~p.Lēہw1aBYM;^hlq9iVGfWl-f764̉=R퐜$MwEK"7˄BFU*4L kprKwT*f76C5.lE \%nM6,/+I,R }DWBhHdo W&6»HG^3Sbê@&9, 04mTߙ-َRiپِ9H_z BBy"37Ycʌʛ⏨63Ҥ |F^osxl=ܶ8'r˾Fez| ƻ:Q^AY'sSuH'mN4A9s:$N*I8<(IW'ʍh^ƧTUI$T>ǵO=?O|o>uZf^Ӷ+*UjN$R h:'DrBtH'RUqxQ,O* N֒2H%WFKt{ʧUZ'Tp Н ǧxTE$~K$FH/gS|**FIUzwѪyouker-assistant/src/res/manufacturer/AOPEN.jpg0000664000175000017500000001165113260315532020451 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !AqQa"2B$4 W8XxRb#3CDՖG(  !1AQaqBU"2$4D3Tdt5'R#C%Ee6 ?>LWy3 #xLIT)N1:bLTĹ4 Of_~FH"C@[$H7.ղe&~Do 35f=8'LI?0)L܉\\bSr`2\=#EU!8 B;MnTc-yUEA"EIk3NhQC-JNLDe3 oX֯z{:VymgDkA{ @Ug U=gyލ^8|,yu^a{"xyzuu,węָ/+n>9띶Ir#XRHX^)eyN7DLE'OHܣK%bu)ԥSW'gﶅfJ3}زr#r$*ns69o>Oyj=it~LU߸T}h3[QL9{hn" #eg SCURf (;ɎTn |Vˤ}%IhohyDl 8/_+-X2@ADa('/SlVL^;.>l pQ;Tq\J̼˷6멹/A?@Ho-ڰ$J] J3qoI@"Y? $]}lؚ*l%(FHLaaK6c\Bϡ3];L Z@a !aO }9߷M>7R"}TL7r BK6oysz%e_407%|l&ЪQ:h6a!0̵ovdS)o[ۀ/\QrZ±bB'9c}ni,k-rG/j)~VSxr+qn~*[s7m[wk&o_^:;,:ۯb?3b֍ɉ}@X~7יZM+ w>[U/[޹.e"^!zVkdJWr<$KbsK+Q0l#hDb1064N'$ nq$xaB(^LixE8#v,}B]BZb~`@ԻoƓ,;VIiiMl8AZ5NO($_(alHM\l;hkxM< 8n FKrN%OT L=HK-y{\ŝ^f2P4#)̥M`sE7)HV՝3qx,1&ؑj~ֲ蛆ˉ I'RmCeV<"#]j7OULryF` 0 ʣi=O fVA(O@[58n16l?8X %;~_>8aewt7SlnYu˷F|ݜ J0V+c k}.֠Y֬跤jQ Q>9[k P*;18m@"!z[-*s0* -έmKA 0m؁#:bmKU3MqxEtRL i2 USH4Ҍ81cJZ2w-0X)q|AMcj;fFɞ\ Ydamي:mc L a#dKxt̵N62o1>yB@[xfۉՆԬHv¨K,BޡXUcZphZ{@n!qR`z*p pnR>(!+00Id9Wzo/-,'5> A-<<#l@ G)W;Ƥe^:cMsI1V7ߪ MGzZ:_PdLPp/rfUNϣUX54K0S\?w?/xo=w{/o-J6ѿ%|-*-HEBIQ>2 fH;'(Mˏ@Ŷ q/XئuK-chM,ԔMAM72]2CX(ɟJXZ5:8GQn\ ~Pu!#˟X@ SynLP#ːtwQ"|޿(youker-assistant/src/res/manufacturer/MSI.jpg0000664000175000017500000001054513260315532020240 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1AqB Q2!"#$!1AQa"B$q2r4 ?ǓJ-qW&j *%i{*tM ROH.ӪI ARu#%CT8Pt5J~jiY_ATs ו4j=:&Mz})'PRS$s\ @TrH (@\`wTOO? 5UYi4Uɯڠ9kʉdA5ʝH&>R t)_9PrT]yHP *uN9$ d];GR,Vr*PUA5DM eN^JI):uTI/9*W.¤dj:J2W.#SU}0bx?kp{ysTa*f榤W8P` l$I` >Rlx9crԒ7)n8D}W/|o4cs@ۏ>KFD>X Ts΅J=8<6 qrQ9X]3>ܬBYخQуjZ!Ӑp.[|RJKU-F@nh4d7 K>3l#hv1}V&vBבٍJiatr$,(T/% lKclt5O<UyHNF- d\[ʑ?z4n=}oP?k\;2aorX#x4?n,㬅w5sHf KW "ew,EVӏK>>xAW+TƖF\fQs wb@v.k<ckš3r8;B"@1 Ka7Lg܎+uR֖ɰLř0'l}V384-`_jc8{Wq ]mi#SY#!"F߸[F[d$;7^eR]nWI~ u3྇,pF1[)w)Cm(˦qK5Hsϙ7CtT,2r~mWPGP"D"L\b8cһb|5{#$ofh$a,yM2 P;Wqno!үXڨ剽)K A<]+oꚋ&-"c ϶@0%^g<.sࡩ22,B8ӌ%:pp flY~̞7+y[X\vH< V >pp]/SYj;o[-ع +_~Uj9q¯`|Nц?؟ܵ\c(nuDzqh$xCl"No$aZwr;1 A@)V6{[ Nlw.N,"=^,qNT¤۾ G سAdV៤шS@bc D;[:լY^ͮG&J։s%qe`Lc0RҞC*@lb6p2>w3[ιۮwn;]dcIK2qIvVeɸw3b<cܧ<;g]l\1d,A ,XN3.F%N<=}bMxWToTr>=-7r¬7!/-®gGKmlvȽ_j&_r<+5_7K|ٓNʢ^}B}=4qu !9Sy-1@}gQ*eKɼBeH>r]Xjl:qSǰ 긲Ye/ cPC1b@F-hE,-N(KjQtnq-1LܜD ƻoT~Lu-=Uߕa#w'\U-5}\v2[A2.Ka_&"v?z{kg{6bIu &u)ɉk\Tݮ݂tݺrh#,#,#8vf]ĶNgk9#i ۴'\Bμwdr1V..8:`exѳݩRf/v^ZSt o͋PtxV7[UW]~Rj+N-qu|yYiͲy➉} ^/sr` \U$a j䧘*w)B٤^o1n.Sh< ?4:y~ꪭq `| sxC׸{9ƒg }ľ9{'˰8"\olPܾ.b6_Me”G7X-|0DDy+=ˎό `^&$k:/H[urPr;>D|gq.Oe(<$9@"3t`]ن!UC;iJmN6Mqr2'!]u{[KFaW)ZBMX*Ymų'xiR^hj%&ݠX;w|Cf'#S/se-2!QbrW&vťj;dfJӂ5n ܨ9<+ydZ鹑q82]CAx%\#ЀzK};`@W~\Jv PIQp{yKS'nIڦʣA`Fy+ksAȂHſ2뫺%ECC_8[08(-b<|?֕0S%[Y[Gh00 »C^PUk~S~QѵTl d Vf+;xn N? mƦx$T'D.dOҳcP2I⥃pZ\{Ampjdͬ]U]4TpUsRP\ 7m8uU-KP SL?LA⾒zyW7iY_ATs ו4j=:&Mz})'PRS$s\ @TrH (@\`wTOO? 5UYi4Uɯڠ9kʉdA5ʝH&>R t)_9PrT]yHP *uN9$ d];GR,Vr*PUA5DM eN^JI):uTI/9*W.¤dj:J2W.#SU}youker-assistant/src/res/manufacturer/TSSTCORP.jpg0000664000175000017500000004217013260315532021070 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:01:05 13:20:46]F&(.pHHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOU_;?㜬T^A:09羹tq(c\a mܟ"SG'r YM<eM/deMy~N=[.,|vܶq>{*67¿vQ\+ 2/mc3uN̬M69 nX}?yY?ns602bj )u=vG卽N+\\Ƶ#Wk V׼r?S^|No{[~y/uDгU[NWzѾu.+ u#tHř^g,i??4g\7ƏEsxɷ qcLZaJ1KH̟"?Pr՟?̳IoSS|G+:wԾ1 ln-ŏ./ Ӷ3gdm8LX8F2'Ե$T ܖaߒMnyG\׼߳t ?)W?jv8N1Q#@ϜUoPϮlʴ{ߕ{Ǩzd&6ԯ'9s8wH]8GҊ7 DbH݇WD5X Ov֮oOQvɏ6+z>ԺUlǶ,րf 镽-{-ecN\De _#?A^˺,nv;coEIu.<X.N#EaKۙQJ5zq䇢)c|Q:G\ԻLp<)ƪ̫@?T}Q-SO;z&z-"YZG_^DbY*30[VګelѬhkGIg6UuMǮia|lվt'(HJ:^[ҩkX3?Uwi)~xV[dn *3VS0zVF9L˰nvkYѤ쑎` Vwæf~CLMos޻{*67¿vQ\+ 2/mc3uN̬M69 nX}?yY?ns602bj )u=vG卽N+\\Ƶ#Wk V׼r?S^|No{[~y/uDгU[NWzѾu.+ u#tHř^g,i??4g\7ƏEsxɷ qcLZaJ1KH̟"?Pr՟?̳IoSS|G+:wԾ1 ln-ŏ./ Ӷ3gdm8LX8F2'Ե$T ܖaߒMnyG\׼߳t ?)W?jv8N1Q#@ϜUoPϮlʴ{ߕ{Ǩzd&6ԯ'9s8wH]8GҊ7 DbH݇WD5X Ov֮oOQvɏ6+z>ԺUlǶ,րf 镽-{-ecN\De _#?A^˺,nv;coEIu.<X.N#EaKۙQJ5zq䇢)c|Q:G\ԻLp<)ƪ̫@?T}Q-SO;z&z-"YZG_^DbY*30[VګelѬhkGIg6UuMǮia|lվt'(HJ:^[ҩkX3?Uwi)~xV[dn *3VS0zVF9L˰nvkYѤ쑎` Vwæf~CLMos޻ 1 93 70 1 72/1 72/1 2 2012-01-05T13:20:46+08:00 2012-01-05T13:20:46+08:00 2012-01-05T13:20:46+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:fbac8e27-375c-11e1-96b9-84cebc0057bb image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWN*5#BӟQծlҰfQD ۟l)LE2ƿs~Z?MS̏fow9,$iA7Ofoܿ{!|7NQ/⵳C$pÐ&ǖQ 3,,\ߖ{OqTfow^ו<4KuNrU&"ʲ駏#.E~j~^-ms."LDrqe'<T7oOy/fo܏C-?& hs~YSSqTo_CGC~uǟ*Sߦb𛮭N*_+yE,{$/ckg3C(>mԴ7P.m$hgܔ:,a! ȣLH}ťsQΉw4UxR~bO]}?6c~`׵/3k{pyGi4Hb&ĵUE?Y rd* 5$nbi&b)nc׼幦Hﵶ[15\O)G!=ƔݜnʟN*ֵ(QI1'Ê@wF>m.uv5;Fܙβr?#}}iOe?<)j| OZLtߣGّEoG_Y1WWz_3[c^zzm S~g N;?.|iSCìWj?k)Pxeɞ|k:Ⱦ&yf *8[#f> Ca叝GɲbioѿJsQy۲=:\mMZRTn|_,!}moV E ,h<E3&ͻp)S_N*}gVj~IqN?aٸ\}L>~]6M_VId萨v2*1_˖nXlϟKt.Z[c?Fc5O&Kؘo*M"H#D?i_,yGȨhw|-'>kմVS8EiTq,p吔2k94O V0߈P dp?2 'qlbPѿHZŦB,{s#ӏrpNUis>q;N*3--M,m섇hLJ|UvV0\Mf+?=j/Eoo/ؿ=j=O0' \mH4q߷/<مΑWQtD _ROO,P*>)SF9B}S_W2~Ư=Oj$mQkz?w#˕eYQ,Aas-55\%\UQN/UUZqc583a,?,B[,F.)~zԵpk55mKov*N*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/LITEON.jpg0000664000175000017500000001173713260315532020606 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !Aq2BQ"a$tw9 #Dd%7x: !1AQq"Ba2t7r5u8R$4D6 ?M+d\ԅ1$^U)|Ժ"M{}R vRtI/I˯0&.$Ң%r`R:eOw JX\ԅ1$^U)|Ժ"M{}R vRtI/I˯0&.$Ң%r`R:eOw JX\ԅ1$^U)|Ժ"M{}R vRtI/I˯0&.$Ң%r`R:eOw ˶tWXW#{x=/ml92A,HdzڂVU1|mpW&|3x[/6Czv2a4%y랛{VFO/ߓ􈁺֗ë{)cU/6>eKN&";r&mI!tt-t|&ĺxs>xS-A#ZDv2+W,5ohDv#@{m7 9c(fAZY$xqMD+U^ YJ5,%aD_-&- 5.۸bCfCb#k}Jo=]۱dE!zBD IjHJ=(UǴ)۬Ժf /=&tU;yt "CpG'\ɢ|89x0 #H^Q-vXՈ_@;+<5:)׃`=,*ro4f Zӎ([͏e y ]!~C>5* Z.+v!T[HJ'C{YeES~q諝3savɉW/!z݈yݸ>o}*EbXI/5)E;(^X&p9DDH,Yw/ 8hi8 & >qFº `ܥ01D'x:OCNM|-bckҽ,Vr'+G-j":J=+4?ݿ4"7ci1dW!&'i|A0"81 tp9s[FM7 q0șZ !L/n2 `ͦHG/luuCIw q11ˆsZ;u:\L V7o-/_yu@E%H&yUZZb5m"£XTK/骸k1&8Tk5{Z ꦁր H"=\N΢Y;JoDIpjKM-Rv+,v4/R1lE|pC5{n[\KmT~Uq|I &d̲g6@db[:c% #d[?YG/ h>XH4ŜfA *z3y)P1c=VJ ʻV m!c*hKMUmxJG g%rzTmWoP L}gcaN*~eU?)Oͧi8kngo+Csk{պD>~ϦL&OXv(jgGOciKRC;1/sX at$INۂh.Wn 's^oq !- nm3!4Wz"'W6RT71YpZy_X` ā9eRcwCJb٣VD5%Jii."%d4 V5JNocM~v Nj\b0e:㙕i 9 F~a_My#Yj]oˑqeW5^//oZyL?0P_afZYytU /ZұduA70xRX\j[őpRfg2b7&:rl"2F_8bʃ?)&m5c֑ؒ9zNuX.bV7MdY%86IV;_F&.Lɯ$`|F/C>Ox^-KnK6_)_9#亵#~_7ſ6+նE/aJdj28嗏 =d Gq*.D/݋NYRlh힘p$@1lKvб7m9?!#@y-u5+vDp I1mG '%JV)X @1/)|aǏ '1R9*%NYi꓎=Ў8q=[gg{^:ص_=tKtxYWuorKCNyd'%Gpzݥ8kyˑ%l59&6bav_ q={V^ZOsvghDHl:0~N..@Kl̪1a@b:""G4"$q q<;SW.m:ȷT8I͗TQ3 Ϝ队xa{ڦ?~^lmpRّ&St,"V4x\/°T5-\?RBx93δ/rVK:]Ȉca09t$@Z1k A㩻FraMc f[5=Q=9d ?2n<Ȱy"Y<6ܘ"7=$ :pEkEj^D Ӝ38Ecq5qq7-5Ns 8!JQw!&| $".by 'g~ox;xrM2j-%()K@xq%8~ݿkl'Sɹ 2]{Uȵ]wбi4UɯHSA5Q"MGK)׷AU o%)GDAP\ Qa@RrH *(2W.E(Tyjбi4UɯHSA5Q"MGK)׷AU o%)GDAP\ Qa@RrH *(2W.E(Tyjбi4UɯHSA5Q"MGK)׷AU o%)GDAP\ Qa@RrH *(2W.E(Tyjпyouker-assistant/src/res/manufacturer/SPARK.jpg0000664000175000017500000001233113260315532020463 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1 AQq"$2B%aSR#s4TdtEeH   !1AQaqB$"4DT%&2dRb35EU6 ?FY*F57:b1F?xxtXJ|4 Y#ӿ,"CXqO-ɀdEyQ"}^]J-u(kDo 7YMrta:b+2U1N谔&iA7"GXXEȆ)[!r=;D%(YHCiy%1GLܽ)lFly+誫5?s3!y`*riɘ6`p* < CmCH`ݛ/i6tyAU+)*śi>#. AHoX|R5H!A[=ݭ4jԊ~a A4WhKfót-^8F1C nzR{\_ZbX 0s6 e\fL p~ϵ.̡s3,}2xy^}vBMw ݛ2P WA;\u[ѻMxY-I"MAJHQ M;3ᦉZ{`"E !`!wWJ,fMi<ό.2 nǭmh(t5wLn?ź]cYO T}ɤM*,h\p j ie-Ϥ-5:PLYI_=fJ\<&D6=*kKSjadlWtᢪwIj>G>_.O1&zEfлӧ 񧉬ԢىCu^p'far剤]A%Q?FBƘ@!iFXiQã$P~9FC-ܞ-?Y . h7Km6rR1fJHazV6VMk30&??x<\yjO&bU du27N,@|HKpM]z%m'0u7WvmnZ]j-Fu³s^$*W/Gr& gGh/ ]=0$H8LܠBϡ4&-m'2L|W|і*|vV\[Ú~ZJO4xI^EړdfM5ȉ׉54:mWt+:.jQug7_?'>aG:-1kVZīV|p>!(:6) z-BkK*ͦ3'Z)޾>IgP|l_[9 m#2u",ѹ\Ym{~X&0(JEf;3Ԛl+4@n: 3u-Te@ !ͰǟU:/`G,D{^y!Ϗ[UZKX8rQSC:=`[fǠuvQ"wzpMr'cQvqE fq˼5It#DuP..CteB;v0Xn[TroV OK>8+H(~j>xn??t_.}x}4#}1jW>bVB]uBQT"(U<'eND` #vծu |Qݖ_}>^pO>PuX17mDz$\9h&7B|h_&=4"Uۭ!wi0FrT -^~W I<ԯJ&0$Gl,JjXKSNqqMI">R/UɕP8CǍ*e 4;.ݵ wWTqYGԟzL~\L"7+]F=ts֜ jQP Lu6)\(t"U*k\=Z=Exjr7W.Վ] =2O:u6̻t&M-ǽ5*"&B69v%JdζDEZ9.HOJl 7=R1Խ?8Tv9 TG@[\w+v)ŨE=ud3*l{n fέt}ٶ=Gκ8íve5y[" Z ~/ V.V S 1Tw4zr7.UUYό\y3܎4zP[dCUiVTz+ʅ;}_1go[릸隩ZobM#"4&W&-,<ݛYycao<013"x˔8u)%44GW䅘4'8M O5֊spB_S{ u֥iɢ(/#mo\﷾Zon<"m=E< UJgM+4bQFpnZO9p|Hc>%?wgp\մ >8]7ZF(lfDD _簜/5m+G-/".e RPL|r=8ua~ wy6l-orõzA8 AdobedF]   1! QqA2B$4%8X3v(aSDVHTd5&6 1AQ!aBq$"24Dt ?> < 41C4c_˙]Ɩ: ;_SEniR)Ta5uxnwCWyA<~*Wsn00_he9/\̇r4f)r(<7sJJiî`sһ 1R qC) A~. 4d?(7q0NÑA[TUsMGlsPO7_p"u<Ѧ{wL&O(3@PcndMXs4,vnLޛc}dTHmrƦm4ކUt~]_8Th\>iMr|'hv D?= \ Y~K?P!= /ugpL;q'uzKJ;}lSxև}KhbqXXoɡNJٚYymóK}}4p>S1v7e/c5ذ(8_OY}k8Y A8KW)%N \RpbC ``LL.[^'C65\Nk*T6ĮVYd^`hb/-۟:mϠec3y#,t)(@eF WGbӥXޠ7?}0vn(vk8*ӴL+k9SjHbKbsFE*c<„Cim'#YԺ1*F+eIRL )g$99*U4dӈUjԞ8UztQ7sz:q}4(rގr>Lw k_ Z^GU4T鴽\ef8*)SNLeQK0Ժ/>KMTFإ҇:%bL.,l#b3S?ͫǶퟵ2UHd֍IkX,$~$YLx,@ 2+i0*Ԇm8.Acd cpgHm%ÍL]^d;r]YL2> %?C2C X4ŕX$,6`#ؘyR0ꇇ¬)N3ž{Z}dV4ԫ!G%RG ك=`iS++ZH5]T8p+m^+ 4R3XO98r(& 103oxu޳)Է7+ԓ 6IYJEIOV~q 5 Xs 5Zp,Ye"%꿧rˬdTd.l @ӶME"gqT( 1[,MZ }4ɎoM.pCt&!@;GM_Sa$<o^KҒxw*ߦy-S((wp AdobedF] 1!AqQ2B"aR3#Cs$!1AaQB"# ?ǣjGeѿV !:(oPQ tˡ) .+[(c,NøxQ]Sx2m].Po´QQD#~ʅNe] O8VxtQX؁Ge `vŠ"Omj8to#~F纎!T/Bw;(J~a³~"\5U,SF}J!;Qw)O¶Qw \.aQL셨v#̤.ꓡ #/BX<9e2{BRIvry&{  ^Ŭ h~h Y;d|Y )QN$r%9aX\0_BQ}H Q}ݶqlٳl@꬯G*yLs,uc9xMZ3X 6,ĴsK}~vIhE%Z@}umrZ{ajscݛ W(oܟSw7-$2V1ҭ.LL@Y1rYEWlz +h)@NNN¤cp\j=f-YE*3'n |eNcJϋ K6LCyǠ7a۴ru%-dvh:^?%k,ym >Z^tbTDM#bz꬙>? [7-Fp3d>?rgcqsGeFOIK\eD(yHRXEmnZǰҜC`s07&`10h7n^]ߥiM/\A*b9aZ^O_'bk5'NK8sr(&Ij۬1uՓYm0?Xio7 %Yg r+ȹ WDlhJE BʒI:-+Eu \CM2\g507?XXG$%3ƣպ٥QX?ǔ[,.cN[Zlׯ Ԓ;J ` +G&xS<QG]:T=NtӮkUT8kFZ>`G2}?i\=Og.sySa'_~ܜ/"-U-5B~H֗nirJVL#}0\zdl.x4xvuӨr--,/bĄ׽K;'}nݣKN5T\qO䯒N?ֹĺ?+E=Tc.%":~_;Y}Q|hG:ÕYۙ [DM|uezN69 XSNo&БYjڥk특LA?N.-νbrW4Yt1􍛅y 75ñzF߉Yajo2 *ީDud:!,3!2LjĖ@}AvoSԾX7vJTӧdS7T'2m].Po´QQD#~ʅNe] O8VxtQX؁Ge `vŠ"Omj8to#~F纎!T/Bw;(J~a³~" ;,p mXӰWqx+l^ Wqˣu'!,B7=tQߧ~EBS>];V QcjX.p𢻈[byouker-assistant/src/res/manufacturer/QUANTUM.jpg0000664000175000017500000001023613260315532020737 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1!AQq a2B"#$b3TS45  1!AQaq2B$"R4#Tt%5 ?(Y^LЅ1H=*)f=P"&| #Kr(/"&W= $fL( +ːud(Tw"fb2ʁW?t!Lf$tJDT.HI.J9$ȆIxB&.h$"JA =>XLUS3"&c )gˢ?*D.hRI2!eysIi 4 2PvBzeO&ijXGH W\Qe~S=I2xӧPd$B-J򔒴VI$6xlmKE5juT2, ՍHj<NkO>lgsm4ี˗al2ERYHr*,weۈмe{f_Bӎ12Y{{>}Q}/gRe?cUT%HH3clߒT OjTva%ILa u '*5Wý7Ot}b[HF2pe;i5\"Hbul!!y ?Y7qپ5oR`{)⼸RJQ$)Q9D/Jt;0S|'jGOxz1&hu/oQT6'G5ȹKd)/,O-6[p"Nqa*8M`GO:n8lm4`'"P n j<++zٛlZΫ뾍)A-Ylm4k*IDjMCx#&qψZxlV{p녬&a=]%3Ιu+(+)A+FK),1 {tZ^p\ChЭ"kbw;Eֹ:٫M6GiŮY_ɳ6# &ٻY:~dZ\$}r#z345[3qd#Ȉ쥶rjMGwR6*QQ~_m2le"1:mJ BR' #fp˫n1dX]Y4KĀOl5=v Cń/CڄR+h]j5 u ~S @gmooM˷4dm3I_Ck;q{w*A=m+jN먲-pɐ;>%_=!\ |6tG57ێ0M!8C8@ZsaKHf+W/[zM2mn!n\&LjT?J<؄u}exbR>Gu6j#Zwڻ-5lGjի7-cރLMEo,-ISy Q,l%х?cjrћGudz.ռV}Pi\?4tP]Z~o9x)VH 3w #x~0l+PAz<D[9q~*; W>"b_FfM`.#Vi +(jgITP2z@ JюwX Σw:zw %fn)R痢?iDvm:O??Ւv)cG/t|sʊenh*Pr,Z֬Y-pu N>s5Fa1}{/ZԧU@c@iŊ䏨Owcb i9o_cD̬jNuUu3ЖDCwAVWӎŊ"ŏ@Zm(UfeT)ItN'B!e4nӼ/ԀK ~G9x:}>4|`[`-&uM8mKyAq`*O],!M,4;ѓ|Ƴ p<2䦽%ޏ|pJkwh̸dKMgao$¢@ ʒ90(6G[yxWГI `He)#fE ^}= ǫVб61]`6}rF) "-9U& Rp(Wo>f[1>o^*H~OɎGڽ=jTW[+XռR7mXBImHafd]R%9sBrI +˞L3H\ѦIE:{*};3Myouker-assistant/src/res/manufacturer/GIGABYTE.jpg0000664000175000017500000001317513260315532021005 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1! q"B$AQa2#D34%rCcud5EUF   !1AaQq2"$B4R#3Td5rҤ%Ee ?y6bIGrma(m`Mr4GɄFk{n+ݺ7QS:ʪ<⊛W shÆa Bn |=yQ,,>NrTͦRGZOL<~0N`ĝHg]oYkӏQx->9j(~yт%fEq#WIZJuSHzuHJ N@0}(0*`YbX0h ˰L 960o }E`,kN+an%jѮrggT7`ST2> VǺ)!LG&$'˽|פI@-xJ7T,o7`1@dSr1Z&uK\҄ewԕcNK'9 ϏrQL11=ueY*SAŵyi퍨C-@tzV>֖gJ5b K?ьث^KFx+P7bWs UP_P!Djk0 DGqRXIf "0ڲJX̞ =4[4W6jT-Gu{|.[umTm'UATZyd)91圶ˀL$ ^%=˔ʵTP F-Z$N)+(P%Z4u*VS\Ŧ@qcsO+0 ˰م!o}] {]8qOL>L*7HG/֤ޤ貔MYu*αxA9!P o{oX-QE"3BdorcZ>i15@4P?^WVZ=__;]jɶ)e"1Cqlx㱖Y[f#ȘC\DʮKLJ4xsoeG-]NXѨ7iss&Fu}nrZ{YBBO7Txy[0ǘ4N+ԗִS=%i9.O,< >Xk5IZt iEivnѸ'3P4st`0SO/Zl+7<@ 9R-5`o:=:ycnBe Zh60xs0Ę\v=X|>f$֓f&}AJ7|\PWׅ~73mBTLږ0׭nn5?b)^R)44n黢vfF-sXD96o{X{ZPұVߜgY,*G҉EfN g\/ްlq遑xlm0k{nMj71tUǭy Da*dҐxv^ k)|]&2CkidDBw^hUʻJ`0h<1DD[K'slMi$st#G WVO0YmtؤgP˓Z{˥-exn>C2erY 9NHu] _- !>>:OwA,3hcE*n"9TQHm^LUɇd CL z6@oZ/ zzz|>f+5هɁG&FRUg0vǻv|'ٿv :8z>93?7|15 '~RI˸c;v{2|Aœ+ڷB׿ֿxיg|Iq/ScvoХ1w]n6zm7gxu'q{q:޽b^M_>F6&|.ccX-ٽX;5T|⮬[#IWtӉA巳g6sCMٷxamB?s˝B a{sc컹_ofzx״>UuOKk'ɖ'r~{ܵ + Dl|+/`=x3n+_W}k AdobedF]   !1 Q$aqB#4D A"3S%2RrCdt5u&csTEef(!1AQaq"2$4DTd5r3tE ??rGKQYގR*֍3&)j #-qYXl4jtˡeQ XJ18eg8 rT=kZ}管jb(D!EubVĜ?{ܸa|Ʈiw-Bܥ5Z;øKo[6ӆ1}șe"kD*8x"dϬ'݉h?z@i#=D2d>`:ZwQb=aW{z+i2O:B iPM"6VfJbD DBGHuh=Y}A<>KKv n VxA_%$T&q$&R#X.rMP E1 bS]`3t(TڲceB<ذQxޒ9cKl2 IUu$Ո0°L؍O;tw'<ug^UGMo|}EG#;W֟G~i19 8 \le{SؔkDOTi=:MDy5w >T :M2sefXа4" طi6{zW}8dD/NJ:o(գ2+6_! h'cin2cHݣY$I$#*"Xp| J8$Ó\Nh貣DƥzbTRh˞AGjdL·@˙N+GǗsRyx8[FU o%?5(ViJzk/*IyXҞƂ]w$n9y?'j 8I_֣y+o'67;'#QnjsS{Ӛ+ؤ7yr}2G{aIY+^I!.”՞ۙs3NE!a(HtI~,4e1lC*ۨVti:ޯoRrI)헾\paaw=&_Օx8$N3,*o"FhG$p.ݢUtM)NpVZBǾ5&59)Y?0crJѱBF;Fw``FJo|i/!.06Oo[Yq1rqiGvGM4y>ӂ(xWo1:GTj^m*o`6KLOJD嶘n3w>%< ʽOa^9o+c'2p/wҷvTdtS+5!=2d9 1(4\yg3>RV;Ez]EJTUrDPzTRRxQsnkӄh%s=.cJsh[|gyY/ U6[uuxģ%˯&F=}/պԙRR7 6k% x@$P &sm8-HR5F洅v6j$N/sJ18% 6nEDlTUmuaf͝+˂A:Op&/Et)9O*S M$ryG&Խ0U"8G8t=!(>4Ss3%Crd]jaAuo-Usu^SOq|tqp6m7b|b2^?|F.[_ n-55YVNYs|q/p#}[/쮑ochH_VՕ'~,b"=y0%I`r Wg~nIj*DIAss.LMNPytcozw¢XpN1SBp:@76A"7r]ٷ^}G)hԪM)TbnoVZU|儢AMm(L.v7 ;}.PJ yJn.V5^Vt!f=.L@gyüVTZtMT_Q%t+aέ VeLɝn2_RJ9;ivZ(zjN 8QRjp۞\򐢁5w#@%jsso&[ۿ8U3^:~ qh44H{Ki7xaX[kpj ڗnħ%а1:d`l3}mNBf曓Ƭ؛X˒!yn1+,*HGkC~!(FYzY9ys݋WHgRo M*lC p*h<&p2j@==/rP7ȼ+}v*{RtjñȨ~E&qC<c\w@f VT':t9E"C>D,Ss[.#ʸ$i]78JhX0;A|>KKv n VxAnkM2 ܍:WN2C!\&/X{ 04̗$eD=emRjsN&%Js5eȍ!9~'5R2?y/ċ~IozI3ZP:GTŒ]` RZ/RR @]`s`@GI08"0W_:2oiIY*LxWEJ#w7` )0{V}`%< kZb} rx=*>c2q|u_7>y]Y>mո սb0= c7SŌx/Rw5'"2"lt!i7v2]D6(x><^.aaBStՏ # ysalFvgb{&9FCTŃxؑ>ef髂 GQ\Az)[Q{ 8>W$T B'/:џ淩wt>zYwvi!p{V%youker-assistant/src/res/manufacturer/SIEMENS.jpg0000664000175000017500000001163613260315532020715 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!qAQ"2B a#r3$T5V9!1AQaq"B2Rbr$53S4U678 ?Ǔ*F8ɟ 𨫠 RLyAa:y)L!%uCt4\ Qt0MЀʤAt\`wR)TUbHaLTUa{)p&}< 0<Ǻ.\(c \`@eR .\;G xc ZLP1rg0&|**0f=A>j~AsJSI}P .|B] 1.0St 2].Aԣ놊|<}U1G}lt!N5rDS1t3<-9ح:I[T[!N޷s=U-ȷ*RѶRe?x/-JeH`o3+g&RFOp1ޝh{Ii&Hx2?P3?ɄW;z&ʉgh*=VnR`@::㶼y/[h鵪<-*jM~) )(lcV.߶FmC!f {=U;?(Ei7eƌ4y[R~`['[}+jp g!-IRIIGi\%(2(܈BLB \@1ʱNj,>UARIEKE'q?ۛkKdTRKG rJHPL u'oUo=J=N%/R[h.==N )N& #ml/-}'}mt0SFӫ]3NSA[luHo ݗ^wqGGOѦ1FL-|#aXF"\@Dk[8;R_0Q/jn.GnGr+ O1 [2Ip'Q@["*0%8znR;{StO6x%נ3IxfK>F\D>2!1CVrvݽ;sHV>e9FcRvbsS^# D%w`H@̀a>c~`KZSY۰9SckFVsՍU*29LC t9:hŗ@M3#U25ݩfJЄEgLf  Me8 :HԽ0]Far]. iݬ~3Dd!W[)hFGզyE"m?vg+tl6.+܎M%ҋ(Bd${RB{bqM|ۗV[w>5?.Gv<$OV\!G^50`ZDY" c P|T&`}z]vѤ>{r4M]͋gkHW& ~TJ6bn4@RL[GzD9mrN1"kPUu(1E2Vf1@>2v >lyArV_Msh켙lqY'Ѣz7 GNѝ6BQa#i\x#)ZD:2N¶)5li D[da<%Vxu#xpR̪S)ӐIr'1ylI 𖜦6ŻQ[h{?&6W;* ߴ 5\ub!R$Qvr4!dDAH%q{틳Րf D7=VFwg6ȮaհfC̼t5#(lRLHX@ȉ>m%$kyO"ziˆ}Iߙ>-J @Tt6<27kee]=[j'"IP[9nA]jfIv\^ةq pFr4mf֮-XqLݻ|@5˥shI=D3z yFiTZ1@ 1XikJt l0}#zt9:Ɠ[[UD9iTZ=gDhݛ@~Ǝ4@(XjqL[*/P؅*f:t(4&͖ɳ&l%M::iBvdXL󉥚b9/x/{c%toeHwⴶPCqSE7*C _Tdp b~\z𪙕,ca ꘏5H>/q4vfu*]q"Q]*F1̶&Ȧ:)jKw} ^}1>mդʯE&~C og¢&cKA300p= r)E@R7B*rJ>hSodjeW?E!7A3QWA1 P tR8BKhsa )qHr\4Sꩌ75i2@ɟ 𨫠 RLyAa:y)L!%uCt4\ Qt0MЀʤAt\`wR)Tyouker-assistant/src/res/manufacturer/MOTOROLA.jpg0000664000175000017500000000412113260315532021035 0ustar fengfengJFIF``@ExifII*i ] FC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222F]" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( (:ƯgiW] s'M&ݐ7mYtPI Ԛùm%1OタhRG5]^cVq7vzW5XϦj77K{y7שK-3[G~j[O-nJz@PYyaNaIb\5 >'I:-zy^׮U(;],R咱QEyXQEQEW|rפQУr!>0?*X;~Z\v]*9qrjý#gZ].裗ϓj|H񭯌OWBp[ԟ uK i5glO# [> լ>*isBwNRp{Bҽ ԒZ]^Rׄ!-1GPkl=ocQLέ?iMR 4m#Nro7~TV:ޚ=M &?`cXĒfrJG*s"jQ0fu{9lyw1́NL?\fX^jWKmcm-8?{o'򦱬mK $oׅ芣JUw!t X hB uckV+rwgQEdVO,|1\ZC,+n 1r0W/ 3K4a Gp39:ݏsz(PUSnV1U+GUIWWPЃtK-5cj3xn;1,[F>ۘHAzм&/sxbTk:#;FH?]ҭᢕJ۵bn<;ۂ:F4Iדh^}.iiws;wcSM-GN9dGgI#6>rN:a֖)Yu]}ǹYZ|~]c? * IZ N_M ;0s .20W~׺E텿h5[ -8ы smW*xU Y)X0=:m7S5JE-m7/#3.r@h(M@X.,ґIrIWqwfD^ |G|Em[MS[H.nĨd$ɐ^Y֦ܪsWjF(4 Q(\Rb(qF( (?youker-assistant/src/res/manufacturer/ONDA.jpg0000664000175000017500000000626213260315532020332 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] 1AqB !Q2"a3C% !1AQqB"2$ ?&\˓_'T eA5^Ȃ:I~YE˯0%qFƂJT.];Vi4し& NA5[*A56(kP:uQeAϺ^aEPJˍ\`wQ]b)ql2i].M~PkʶT(j=lQק{" ta%ugA.Š +PtSZd [*su\/Se"$ivJn͋6D0vz:oWUtSnkw{S:.(C-䀘<+p1ϏG 1I&7gqMz׊KdATrL{2Pfx+b 7M(Ԋ*M(\b9O_b%ҘY+xࣔc*;O~㾌_OdF/[JԔ]]<+6-wK<^Xtmj>wD? ;M>GG>?㛰3rv4kMn(dH@ e[vgM G^+s$ľ({aԗ3 Oq~Nj/֟"P:1bfw7Kb%ؾؘIX>bHJsc|fmH̭tMv >%3Uf|ml}{-z}chE_TVZD"d8;wx-TkBgyQS(>5)魸  O]i ñ>az1^Eݶ$9'dFfq cp)Zi˔derg=n!z==sqzC.bx&"ujU"y\g(P}]o[*qNuL+?CYKoJ M 2LY3Rx@,fir cwO6n-FCE3H4C(I J"ط8=Mt-;ȰGtboVL)iM2knpXƢ9Co\lW4k]qeZow7oFnoNǎ쵕1n.|'&Ưvls -aD,=*S6i4し& NA5[*A56(kP:uQeAϺ^aEPJˍ\`QB)ql2i].M~PkʶT(j=lQק{" ta%ugA.Š +PtSZeһ\(1:וlQ{(آ OuBDPEK>΂.]yA+ 7.4V2rEuʵŰIw 5PbuB *P QD^.Ӫ-}՝\ *Wn\h 4eB;O/?kayouker-assistant/src/res/manufacturer/REALTEK.jpg0000664000175000017500000001351513260315532020677 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !Aq"BQ2#$4%a!1AQaq"B3$2R5r4DE&6 ?<5mqc@X0N=ZUI4:6Yq5f ==Zљ/#&&9xIjV2f!&9x;4#͉4b4ZN| }fs _a^b}ӌTXwdqM @/s{6pӝ)QJnetu$kDk"{Kݠw|iQ[kЮXsr9Vw2iBu(w W2zsQ~.,K=9 rCǮKkhzeey#6 AU٧-ݔ+rqCխImpui16Osŋc ߢw)1Q)Bq@WN&Wknw7W wCsclnz{σU9`g0 ؤytlFP Z8&D&oB4#f/:DCip߽zW{dDZ+S#+CoVg75:xUtjStk@=VO!%S3?6Eְyщ4b4ZN| }fbP\j#UHQ=!6Y{w[y$_Z9~ĶOlmVfy<ֹ@r"wfu'VX  }H\,- \A!2&q% ![L-a`ԯ3oD [|2 DcQLZNqHZ+D b8ejOoke(2@L :wGK՗K#)hnCwu=Ym5aeM[q2О3]2E:uH}ۘtQxw*c+?*7Us>~KpOOMQ'q6uJ9E c6r>wPmdi%de~G,%_MJۂ J=}bi.}8J<pc(AoXtߵO/]1 E`dk&sPͫ$DPwU ?*f(o Ydb a52+d?ے݀pkj$/fy1>^IOc@X0N=ZUIBfp'ˡ$J$ w9iYY:ֱ,9qǤ5rCv2۟#HZ5U8L{çi݄)֚GR*N [ ߻s#/mЄZ 8NdHX:lv*!^zE6X#GhJ'\o=Gf/vkJԮYK:mi#-rk-z{0ڧSV3>GɣW1 c oRzkeDvԶTph@^֑$PԁB#Cc3{4$9@[C41cbk+sÝue sW/Rz1h})pi1ӎ6qSTxi3ķ9v7莚:>p!PfMNt[\rF.p#7h([d~TGA[1 Tm Z Eglt 7xՒw_?uQ~?\YulmQ %pS+5(,u:*}CWk›j~>[|-o,Hm 4i<s6I^bb}= -X3'h nY$*94 ᒗkdekpƵ% e5I."(7xǻJZnMj*Un-Y4 *p[Rv%,0[J_mIYҾJ \;ԁ7a3eu<6 WtJ Z^<-H?E-WUtM6r{Ȃk+XYմi2R7xGck6Xm21(ʩZt˄7* &YqJkb53J<\DCǹO/wUW_A斗ңE\VxFo~{\yFb}= -X3(nG}y"qc/&(%l7/yeͷt fݩVEqH7"e ~RV2k͗2 yh( =ɢ#qh~jϱ񞊪H7UzG4;{vv zĉc m [yrN#F"XEփ5^T آ#ۦIZ  o@&Dz@-BsжzRtqDzeQ>.qt7.Ny|Ι.}-`f_.[ y  *l3 8|D{sbjA[͔V"di~,V \ q1I^O؍n P.rGQDIk[.|Z4>!O41"RzGPN-]IaԌKG KP_Dww`wP>duu,ǭ޺t/Jk>T-t6)'max;5u'Ջi8i0,rqh oN x`erI]FifBhkB /K_H|*?$ݭK$J1q{q6l\J; ԤL?}g 5'OZ6`Cա-2bcXhDF p幻+p2ѭ~1ҥJWƶ*R;kQIoZ=NiҒkCNq_4&k} %c{B<ؘO_KV/sEݠ,Fa'*f },8~g l̗_fzB$5fCf3IzZ{youker-assistant/src/res/manufacturer/D-LINK.jpg0000664000175000017500000001214613260315532020525 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] 1 q!AQ"2B$#4tw9  !1AQaB"q2$R#Dbr34tE7 ?Au)$pq8CE˯Œ!pBLHt)13F-&Ό&,!8A5 ar&|0S(I~p^!C  prl4Sbg W:Ky?ef7<^2V6K]oP%PyOE%.eqdxZwe]ukiPx?x2D Quo}vX.}5#ZP8 ˰or6mwn7,`ѻr5lq]) *@̢ L/Rۥ|S֑Jή;*)! Аt>8! oQh3P RgԾkGKo@dѦJԊĪ+8؜BUIW#J%Q2"x6 .?psCS9x[V)r-nj'P8;)x(CcmY-erTzj ☛57H [3ZXBQ')[KJ~H:mT_h(w*z Zzo/VD^ڇ\B;6ջW|ii_|C 5J*PHf+ԑՑE~AW<[M˶6dkӳ#KD3O Q͵9"TApll}/2W2&#H!gfF4IejǑ:jAS\ Br U jqu6L7@TT0oQa $ I"۬}OUjROT.!I*at6wk0ۘ춆6nYlԌ.j\kWrŢ)hokSWuH?)r7)zG&lz~Ǹv*XOTMIJ.'Ԑ7, Q iqzQFSyH ,ɲ0(Y~Lݞ8#~@z먤'mI. M~7C-1kc)ci ⍡WR'Y] pNզyOSH@Q.nrM.ҪkmE9TR1T֬J@=sY{L#XP{fHK_6sik?O͟6Oh6n=),λQ["2/OE]TB- GyT'iӎ~R/y[k[m ^C)t(*mx [/QL˕9 \FHUFhZ2f Sޒ0T0/k(|~- ̸0' BT򱯳(ҊWpL mscpI.nwr-jC@"Č+xxejTeLTT-sS':4Bp]Wa\~RR3'_h57]~v-i$K3@ sӓpR8TR_Sr&ۧy${gR ;M+%CmsbzE%* DEd3c!{;4wq+:4>G.w A;#@֝b/ͤѪ ć(!W=JV2]!I%L}TVw⊺|l B ޫۘչXt&nemP/#~y_eC3!Ll#WMH2d;e8xxܼW@ۭngP\fPBʽ:g󅎩vӤ 3nZ +VකBO6b3>צ^!C,h=6m{}~i}H&x(Wt+ݢeU ~R`CW!3r&hKW܅/C8Ƙ*3F7=՛W1YJ~bNQ>꬧T]뽉Dm&Ԟ@ݣ2 8A}aXM{㍶4m UUȒ~BĤh$FNYݵWRʋTNc22RKudy4}?(y>|OXAQs^Q":_rP=7,oRF'qr$ʏ|P_(L 9q#6%6R?R Q(ÐSߕx'[^ rĞRRJ(7/.퉵{h^Zⰶ1 d΅lD}&`19D,תEeI@(&pz[ﶩ6}v6*oE "aRSS(~v7ofDM,9ԑ{;SDrzt*$YXgd@J(֪)g69w-xu•5!{L ̞ǖQhSdI=S3'8DݿEg!WcHYdפU%J<B!@uZsNf:OPwآ7::Q.kj~{~Jt<-mn$ISZǩ)=EQB\I* ;nd ,*\r^n=E {>6!qJf\[MRj0bKjuҷYKom$Tⅲ3!b#-xyS:TA ^îAw5j%J7؋tA91i L4ʖUJ'H!~oUۻ→̃).-8PFp]†H7-;ׅ7.,ݞFh'KM2xS&It7=л!5N r hc:0 \!׆#&݅ `A vaL%!.]xa 38-bDEˠw}OǏ鉜7?youker-assistant/src/res/manufacturer/UNIKA.jpg0000664000175000017500000001027113260315532020453 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1$AQB 24%5v7aq#3DdtEu&f'X"brSce6VƇ8 !1AQaq23R"4t% ?G4 f,ZϊQ[$+k*V`cUXzO&:]n+Yp-[rպB&UZx[$%cZAfk[Gm=UBM 2KJbSFTdfťsN9 m-DH-Kqt<Wc@'=쿽?v^nY*~;Ry{jb/U@]a9 |zQX8ZPm|9QCg6 dݝJEavFqu`qx&NZiÏȍ244mbHGik}} Gu|ъPPL5hyew߶ڮa3rE&J N}fmj=5v{n `[G/(Du<} =KR5JQ4#?-YE7ҿaU ,_EM+>p𼛼1ݖ{|ީB`rڢW5!,w]p h.SjzWUaE>H)@?T k"@ i_*X`XkK{o\ÇnWV %z@cR٢{,^P=󹿒DO6G^˄[| mM۷~ua/Bzn j5:vp˚n2xl A 3g( MH[W王bJor̭KXU쎯7T$5"%M6yJÄ%'3exhM(hWp| 4%qAo.$mI@Tzx]k_{>؜vRR_1cH=H&z9Yepr:KAMCËs*;/x§qO:l {瘨ݻLiYi$j[ixc+ TҐ #xg7 |H5TzڶuI[hȓYsP9i|Ѿg?VfEQYEO_h<=΋[jǛ[xe|ީIrڢW5!,w]p hkOɄ@-e-YE<.0[J^hbt=xm{ xV-[qʺneAZ[fFT&o`+U[h9d{֎j fZoQKY~f^:TcE8D׷bHY\,ŞnƠ M2zDO("W{1;0ng;{o<of㞌y?\m&hWڣu3&5#ulKFѨr{Nڒǀ6ϋi))9)9 8LO(97p^+Κ]7i8]3 S#fO%&[2iv\ ]]Z^c(,r50ޯf QbJOw%v_PCau^ї)v 5cwӄfx.|~ %z@aX0iu-"a{jiV\ɜN]|XE?n@G_|6GWی9Za/l5Aڍc Dikewpñi)r#PWUpSn="eIR`bS&[T$'*Z[},?QxC&^>bc˪R7 %{r1w Ŗ]&ٻM&PWG% fmf ;,K-J6HFb7&ZBxlTGf aY%RPX&M!<EJs+kx>nËgZt/}#j^T7,w]p hfd:Qgwpod%{Ob 1ҫfbԊMgtR5EP3|BMH~" y_8J[ޒNwq%9 ari}C5`c>Ʃ'5׋$fz 3KĀzﱐ&DOb >mwz-~i#9<>^ %z@apXy{4ŋcy:]kfQ > pod=P{Ob 1ҫ5ТDZӒF~&5_%0㍢QHCKd % #À o/(>3bNJcJ3Q)*9cGsi[tV_7„EQ"Qp@|4USI9w\vx܏S 7]+'=]E% }< Sۉ:g 0,?%X䄷BUr.sqXx(.m*{)]K:E:1ƴLAP5R@C!aPX0iu-"E:>VH -tmUr:-=PZxSx9k*6:.~_e^nhrG!ŞlٷzGN}©t&c#\ZBhvŽ( u4f8h*ƭM>4b/6pC;G^jr5ݥP@>U4$k~&PS[Sg6TM{{1^F|o^8M֚kjqyj?\#AkoD5qk\ߛMz{`1I%vջizAEsV/:(qP@9zc4RCpEfvT_/4CZ)mjR(n"PrjS ҙvUM!f)**!p]pyouker-assistant/src/res/manufacturer/ATI.jpg0000664000175000017500000001573513260315532020233 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]       !1  AQq8a2$XxJ"b#3Dd%5&7(HhBCs4fvw)9i* !1Aa Q"2qBb#5Uu6v7(3c$4T8H)EWRSstV'ghI ?|ŷw^՜.;ZrhJUKٱ*4AmѬ&8E9f!.l 4مx )cƔ+dT GzwDXƼ ,f1ʻ}N:NJVnM a3u5g!%4,10;M#o6y%G8|] _$C&14I|X>-Iﷰ`7@C$Ciz :DK~o`pGlyN})}SxwW~<D/s0r3xw;&0ΰcK<|\}>xM"αr>.{}S?b;M#_6yr (Ae>;S?/<9hAe?JM&s/<9hc >~2wq 1;A_u'Pro廣zRWg'an~=`wL\_ YTf{l2F{mMߗ\jW^{DE Y}L :#׌F;tu1iRl7N(0Zc&ўzwajW^{DE MG+̂g!s:ЛM(()ʖ*TauHiCK=> %-'xw;a5qNt;cCh%JEJ 2l^ml6 kI5љwBpJpK*eLTLgj5'&uMTTՆ22Ж3M̥)S:c;L rfi:&]+{ߘod3eO&4| ?ʼ<5/TV,1X\FXʗdCmK7zW-rmF+璭l*nk|nk?~D,TE$^r$Tu&khQ ݡn|thݛPM[izLpUҟ BYNZlX(m֏Yg*rh* Uo5}ighmۻo Օ`~y8xe< n܅HtǦPԛ9=է4Wtdҕu^4hMZ 郭<٦[3MHz '{iٟm9np~R)(SvѹPIQHfhJ;6T3Kӟ\L}]i$ܺJy'c+*[983nL~LP5<iWN)ioWNns"DRG 3f9ZY C=RFȑ=%.Njmg[FYPtDm'q_/%Lؕb]2S V-7V=͕1i՚戾rݤ;nL,B^Kei$֡*`ʹ@'@ .Ў0OVeܹ^Ia8d\]bʓUu/(Ԅ]ּy9fтWZkLmRkee1V Oh9BLḛ;.@'[9Kz[ S̿s=q{5|Uŧ9p\ ̬SUfZf8.pvUƶR9tF 5LyĒI]:Dfc&'bJҪUk_`s.vrK#0Fϙ|/ᨺLԥunoW̥f`G斠POppAoN9#Av [Nj U` Y$rHQϑO(2^#,eQfM3uGFʂ7T T(i\SI ,}ҵdZ9C +@YUڂu$+fg)>gy;O>ljn[Sj/ mTksJML锲J@$hP14ӈqf ,e|Ս8Mk2'ad%Kvbm|K^4"+nTCu/Pp^,L2@e 9@a⊩e'ժʬU-gD{r8 Sw8youker-assistant/src/res/manufacturer/ASROCK.jpg0000664000175000017500000000700213260315532020564 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! AQq"2B b3r#c$41A!aBQ# ?m}#2obrQ-kADQ4tQoը_Ȋw] }^-  62_b)kl] [F8z7h19B(ߖ(}:(7/E;OF.>g/NE@XkAzv`vhy5.mw oZQn>Ej"çEBif~aKbGe ;;4W؊}CVѶp#!ƩG՚ (:bc5؍3/#[U(-#7s5sgoȧQaaȓ%+ٸωR5In,5*5TrƪjsV'D uke:#go#0OuqKϿ&$c?fЖ^)kI@G#MEd"jЊu)抝+;FVlhơ/&y}\jN_Jk$ I}lݲ(M%w5 GLOvu%_^cG]?Psף~aKbGecs_.zswӓI Fdf IELU(u ïAۜ Wo+.&n+Br)I~-!$SI˷x<PT=]\5~ ]5L#xc%LD̖ )lǐi(:HBz֊yCKG4dXkn|N>ug HYi'%츃EH*N]6r׎Ska1K\ʿvgCUT8o>=!AxujC2yY=\>yŨn.7+5G 聙d,FmX#Ip.S9tbLlj< k@̚T2MOdq?|`2N{DXf2v1G_V^Y&፝֍LLkv͐)Ot-CUcl䯕a${[a+(RgҨlK MX$C(AuI-e5:Բoj=AZ׳FjNYN"R^5_o0x %lw'2\V^u aeVu6VS<_ 4Qkb?"Mw%)%aVs"QPVH9,lo?մmしv"kZ "٣~BDSthM?Psp"4T l@h쵁`fO[bj6qѿAFFDQOV"):z4Yt&9k8zw* 4vZX Ӱ{E}᭱t5mkeݠ~Zւqh(ߧP=,O5; [;-`@me=٢Sغyouker-assistant/src/res/manufacturer/UBUNTUKYLIN.jpg0000664000175000017500000007071213260315532021443 0ustar fengfengdExifMM*bj(1r2i ' 'Adobe Photoshop CC (Macintosh)2014:11:13 20:09:42jj"*(2*HH Adobe_CMAdobed            jj"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?#sݣ1>.?jûe8a,ÿ̇;Xtklъzx r+J<1u-ѕ[??ɻ-QSRL!F )|["۶D,lҊGyy@Y)b5lq]L #˄8IggK׷%QQ~8|8Oڡƹ2hq12f.9!/)QnYnYNMl,Ҋ<ơ"& (xt\b< p{K&ʼܳJ+c"a6e5^^8a!DYblH^ƌYYPޅEϤk4үregGiS7=ԩf~c<3O׫ddOF×#˘,X`?R=[seB?z}rxqkY0e'Ⱥr93K[s0_['6#*~\Q懳$N(ʍqpW~)&Ox.ğ fdWd:AХ[obvoiN\3W)}χ6NP90y<'O#b?7NqgU}_3W]m?o{g+Xg'u* < 8A\ga-c/K)$RP_k+ntjJoQ0 .C2d(rgw9xF|a)×N$qѫ]tkM2|ܶ'NfC]sKLT#Z1ǟ)ɏj|IX92 {R[cZ4:vΓ ={?ZXu12|6||ѹU8Fr`KoC'zeprQ(T~oZ- OD%ZxhqN)P&4<< YybNX??Ǝ\Oja}p;WL;vܸFZ[7/޵:ju,~[Gܞ[u,]"di ű$9#<DN9dB\-5#C GP8? '1Ǒ^R@?[Rޛ>3˟.f122U<8I-nԃ.g6",~ݏ$Ƈː.sHp彏J̓GRytynsQxhz{<5}zfC_=WzzVnA¶;H2GmgX_n$SPΑ}%eWsC]tq6^Y}L[;K6YQ|Qǯ-ӏ+XYg{+{faInhs$q23sH|Gj7ÎŹ>_y1 Ik|yiHKc;){P 4~e$lthFx0\eω r?~Q'YpU]ugˉi~n;mˠܼA?ӿr dK'qVzc2@<ϖ$.2#!26IħRN(Ҍn%VGkUG8 ~'~ |/ Lia?~k_·w ֒ƎDTW3),ɦs1YwCL(mnB2!mB'QR~\0NwbGx> ${x i+VRU|OD޻\^X j|c{߹<n/{m-p\Qc؏զwIܿ_d5w?T]?M&$˝mIv)SLYDW5'\G.w%LY'4ZoΏkj_3gP 9T\8sͯI.ԿKg_?xEW ŲGOTLqZW/^CvJgXPhotoshop 3.08BIM%8BIM: printOutputPstSboolInteenumInteImg printSixteenBitbool printerNameTEXTprintProofSetupObjch!h7n proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMHH8BIM&?8BIM 8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMKjj ubuntukylinjjnullboundsObjcRct1Top longLeftlongBtomlongjRghtlongjslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongjRghtlongjurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM Fjj@* Adobe_CMAdobed            jj"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?#sݣ1>.?jûe8a,ÿ̇;Xtklъzx r+J<1u-ѕ[??ɻ-QSRL!F )|["۶D,lҊGyy@Y)b5lq]L #˄8IggK׷%QQ~8|8Oڡƹ2hq12f.9!/)QnYnYNMl,Ҋ<ơ"& (xt\b< p{K&ʼܳJ+c"a6e5^^8a!DYblH^ƌYYPޅEϤk4үregGiS7=ԩf~c<3O׫ddOF×#˘,X`?R=[seB?z}rxqkY0e'Ⱥr93K[s0_['6#*~\Q懳$N(ʍqpW~)&Ox.ğ fdWd:AХ[obvoiN\3W)}χ6NP90y<'O#b?7NqgU}_3W]m?o{g+Xg'u* < 8A\ga-c/K)$RP_k+ntjJoQ0 .C2d(rgw9xF|a)×N$qѫ]tkM2|ܶ'NfC]sKLT#Z1ǟ)ɏj|IX92 {R[cZ4:vΓ ={?ZXu12|6||ѹU8Fr`KoC'zeprQ(T~oZ- OD%ZxhqN)P&4<< YybNX??Ǝ\Oja}p;WL;vܸFZ[7/޵:ju,~[Gܞ[u,]"di ű$9#<DN9dB\-5#C GP8? '1Ǒ^R@?[Rޛ>3˟.f122U<8I-nԃ.g6",~ݏ$Ƈː.sHp彏J̓GRytynsQxhz{<5}zfC_=WzzVnA¶;H2GmgX_n$SPΑ}%eWsC]tq6^Y}L[;K6YQ|Qǯ-ӏ+XYg{+{faInhs$q23sH|Gj7ÎŹ>_y1 Ik|yiHKc;){P 4~e$lthFx0\eω r?~Q'YpU]ugˉi~n;mˠܼA?ӿr dK'qVzc2@<ϖ$.2#!26IħRN(Ҍn%VGkUG8 ~'~ |/ Lia?~k_·w ֒ƎDTW3),ɦs1YwCL(mnB2!mB'QR~\0NwbGx> ${x i+VRU|OD޻\^X j|c{߹<n/{m-p\Qc؏զwIܿ_d5w?T]?M&$˝mIv)SLYDW5'\G.w%LY'4ZoΏkj_3gP 9T\8sͯI.ԿKg_?xEW ŲGOTLqZW/^CvJg8BIM!SAdobe PhotoshopAdobe Photoshop CC8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@jj     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?n%[Kgpf$ۻu+#jƧT!h$b#>!C hO0ۑyqլm´CK)R¨ #teVbBon)7I`̅jw|}W,;g8ݥl] ժԣldhn?2~g{G,zeTD?DK~\H}гjP(ޝf F׷{7g'#9~훢HYݟtb&ӫ{v1m`h[cdv_ь~yc7g:ſcZϱO+rw/%7KſM9?S|n9]L@Ga6[*=-ɉ}=aQؿedv?k?7a|n=;˱/bn/(l$e;eoGa7?MڃnsgNv;#nK>-i_q[jNaow-?Gd|Flٺ/_pA0?;?}ɿ;!n:2)=^Fg_Yt G2Mt3UzX\~^jfa7%MTV hi.}E+7t?|+ܠy15(u8cQznwŷ+d֢ cԭcuRjjyU)dEduVR$\]\Y^BD]Oe4 }g%ͽvҠea t{|j4F-qs{wE *k{y-l[r 摏Idc,=55>#^l}㟭y}aiin-qWUz׿ABM߹k3Khsn+f(s?B-[JcHqQWU4\Hn*,n]ǀ/9_ܹ_o[lZY"5nBASRhI[;nͻ|n\v!V `QEKzM2"+sXu/Xfjonb{rf?2nqSpmlABT:D>umi{Qr僀ElWLjʭrjTg)?;"|<͵nnh6+7.yW>\ K}WM_lvkk͚{FV]CZ{*[R}>.T5#`uf4jAz%֩oL.J/XPA!tF>^r/3/+` * e?:xNb~f<[uu ODOџdKs,Nn9[!@u{'b8-څj*z'_ݫ׻),R ; 6lηFO$|é2#XIb97D VV %k W0so*o"GR]XUYXT2 du紸X!HxM`E0>?"tM5$?S75̢|xGmCwŨZIvWpc}6k @Lu]=sIy7 W;C=i76Y16y)wxA?1aѺ/9_IoSV}?O =_2Qd+Izɉ6=N\T=nI[o?C[~ܟ_RzۛӦ<ਛ!JZo"Ii)WrN .H{s={֜.\n0," *وH_ʣ̊tkyf}K]m..JcD@gws5yJn?9VGYO6>iP)\lIHa}"nCn6ջ&]4h^H-FըT){q,VuHZAt/:{m3I(Ym5B|MlO u|_ɹ?,A{$*XA"I*Qnhn `e|"D%Q], HHGG,N aoL\ϼs'n@񓬸Ҷofė?GY>mrZGm]u߽tKmVcSeB]*r &KkK{˹+HGrK;8 1<=cuխO*Gh 'fO<]_Viq0$,^/Z1K;g3߷r= 2\G,aX8+BdmJA?{忺8{~ŒE+K ; ӯH1^DXе־ca''X}.=ntܩ|qK7[=ɀXZ%1I}̭GW*ZXԗR4eG5ZoO+-VL~6 uF"3 &'e'9cuS-ոؿgӴ>̷{[߻~}ye\ۧՈ(T ꠅEY2hi4YdV?ޙsߴx\7 BA,+Iz&u'Tx&6("jܭ;5dS\ulI,Yf$I$}N@bjOKM 5#T5MX1r}&̻%{:C 1gI*",@tAn[O.m_CkM48K(,M|j$ޥy 1xSxsE1ZVr 'Г#IuľZn_t7޼V][ "p2{tDGm;.#'Yiy-I0Ĕꌖ?b=NJO_&\|b㠓!,UTRROwԮ~<6c=hnfel#Tw?LF[QZ;/'2ǖ_i,ZY3$^)uJ *6kӤAfj/GU6kWEZ(Q!e2MGQ E*()}}>{?|o6w,mͣm#༁Yziڗ9HIqW_;+r~sr^2HOlS4 PC{ -u6ܸZ^I㤊(!|Mc$xA ßq^O7ԛA$I-("~% }[}?~ڢ7H6XZ`"o:KBP9D5Ε\L++e'e$y (TtBdY#?I"pRT#D>GmۅՅ %Ѳ: hG),MJ;HOEO^h=O}>$ᶢ]؛{ci) ҽ|'+׵l;MbQuf?Rkc$Pua˺_/o(ٿx獋Ṟ?+'[z˾Բ%)_мzsS]\~}@qi]rf?1m}L-@fHR&:[V{ pI_|;kw|^{XmMG׮p&C翜Щm,UZYAk'ԨNgsbuiUcOGIGV̊UhurH9O5^lb[quyn {QrE&v <,eV /#5tZ؛pT`SI2Tk]S26 4T3FgϸޓfTwJ;5̺cg/mhtV2Y^?_R(kݺH.m-1 Q/#sFf|HTْiJSQGQQ11"y@=/7>{1M-$t=˶[u3$u*&O}s/|`d9)#`Jr⳶W`+Tx_,'LGc]yxqYH6& CwF0Rd)b W[v?fvkkiRSI;ƘP ]Ϲrg,nnoBP%=kcEUg+vGv. GμhwUUѵN_?WlhXc Y,K/,K)'qQm!/ԬAjoVUA5nɼ[r_8nW&w'QPR]+crR '[h28ە[ fJ~ J4 C%SIGML6URIlUkc#r8տ'4֑]cHTTi8V4=d{ZlVsG*4r%p#xJpN< ˩b5ӑ`6>SB7Z}<s6Mזl+R7=]cʇmmUzRE FQՌ.ۙsfasS 3kO['*u}հK|- qfv{O:}.Xi/vgX)BK\켺z %d3>9*#~$"' nޟg/vf@Fjv? z`}M|2$vFR9e)OCZjZ9gD9֦ ԅ$ w!"?꯽W_wc =ھ]kZ7x<R,` ?q/?gv7ME XuFH܈eܨ֟ =N譃aUQʞ ֘ d`P܍7 d_Gs?5\s WSE! $dB@Y[@?H_2Cʰrgs<_Q*ܼ$r:+3C_N6yMa;1-.m=5Z.>5~縤y[Midx4O19F܃ǿK8ۮ`BkຏQo,Q ^^m[qrmC%Um5%5>++K3dAHjrUdeS ZdKh 0P# KfrGyMDu?{_m.}iv/*33Ha* ~P q_{~;Ol\𤬓 5.d*eo`%HJsV†F%Awq߶ r3>."&@#_{==l 1’c$q\xfs||ߛ:}:dRdĈ3{xb]㘎'YYUqE5$. =-nbil#pҡY[u3:р(v{9cc7ܹwhB{U]QZ[SJ@%u_[{u۰e`y+5'j`V8icyG>s.=PS8aYT.)CVRk JyKS~\L3:i1H(NA/[dqx܅rÎEt*#cFOU>kn{%2h&кu)Ǯ{ ]odI0-k*#IF]LA<댹.$(N.zB-NޚoOYTSS:ϿOEn\AjE-U?_EqORe\ʀ}S[<}Mr*&Zz%@ѭn.S'/GQ)6}jղw)g 7DmA8ų&J w mm)]V~9$!$Q+Wm5uOQi#=? '(rTYtmlO^yRq{ɾxWOq_&hϔˬf}ݶ|&"woNE~O5YUVAHTY6%KjSU;͏2gdU60?Ͼwc7(n9s,"/UCx7:uI@j&W10X"|x{Wql[s/.n$R. Œ Y&B t<{&-1TR#{ 9+E|z)Oc!O;6^PM i"}]bXyw 2̲=PMȣĵxnCܽl{ȟn6B|-nb";ԎC+xI 0(KCۛ!jPIUKSG+0USnj$m<*ud2Ȥܓa/<cVgfm0NOniu4juCPX)k/6#gWg?_sL-_ :)XmsFp8w8i{6}9omakSŌ=*ܴd0 ['xw1%3!aM ̕$VcLJ+xQQJpۖ>^>;;Ao2r'5=0Wxة"5+pe!wr+9(sv P9P:&/`T:˨{ Wa%ˏߑ&H%ХA@Q&0}8N"oܵ/ډ_uۭf[Y+GiC#9U@::F&<ɿ+>ڧ3YHPg-:(9ܟs ]MO(0NGȒ*u-ՀWݭĹM)šP?P~&ϼ#ejjqFYj*QT;44 fwGlq{- rXgP+QHQŒCY1,Ɂ^{Uo~}rOqmX1 ID_S8QY[~=Su<Q*j|xd:M3F6 Ci؟['n~q<GiuʖG$Sh@Al?0_y]M%[-[[so9m$=A pY(XZ]Tzlfr(RO+ HaAL/{d8='s؍_%eDd)+mes3L`dQc޿^>ҡdQyHJHzaCBcf!+I#3Vc&Y):9%b_q{eygeٹwdH6 HE`5$E.c߷~l7Ƹ7+ɮ%cS$4{rZI$M^uQ~; 2XdPlO|ӦcosӅ9|ҟge/_3_fuyV]("=/Z&Gn9uONk@]W5?sv7p<l<}Ws\5fr 3[6#)|OPhjvJcڹᬎ`lu̸쵤U~3y2ޛ }kY=(KwnHJj j衻yeǻ~nCu<=V:F$yً9*EHdI9ݧ4B56f[ }}ofn'm%ܡ -[%Q# HU@UUI+k߽+m=k=㹑\\K 1"R(fwWQ-=EmeLT4qy+'` 9(B$*1s0<{<}:Cy$U@xRH͜|˻6vo养=#(ݛ@$(ɖ)ڔ 5:d1WQNduh.R¨5?]cR[`H'syD{Ҍ HۺW^eTD'>w{r!y^Iuz*HElKE %$JȆU\GzJVr!Bm>Jb<ǡ>]\){uQ=?ZgMo q_|J^v_V37?"gZVajOn1͙jj52Vi"ˤ ޯofvEǾ}$ , Cw?_y(4| GUM;B%!џٌVBpxE}/ۓǼc~3CCuyݢijIY54t5-, 84}ʎ OWCW^wg64mӷcIiK j,M#DNo| &|,Hįu +fXʎr:%OrPmTw,AcQ@fqKyhQcjۻknˀUU*1U$P)[J VT *o7ϻ=A!/bC=KG+qZ2~{m>n,G_BHY-e(+YU4vN%dWdFF#UHqT`G׮:zOY#I%69$#?,ݑdFSm"uQ tvCULfB ]_#Z&G?O/ .9f9AkܯխU|=K\pXQiRXO/_ݺg7qNodfY÷2D@W57Dt%nnQ!`U_#il[;([Ъ.='}v}nMID@+HМPNwEf%BQ11}/o0B`cU\SBG: ~C\aSRz,qB3*X=bbozt@I?O}$/O^Gmީs:$=2`j|'F_U9XʳKYSB;sz(?gd_ҹe33C:Hh]MC88=UW+0LhS`-LWcK-wۥC%C-@?,QN)}佴m9ciocEEZ BzY ^-M5 4M&>h2`.o +")}`BA>uI٪UB)ٍ%oo>@$"7g\֥8o&K P6$I :X܏BM;WP:fa1`-=>ʟy-V{M޺ٹZ8Q^r}._|kKc&$8§uvxTUv#yJI~`=\|_>F*6ȋJFGM6SEdԞ*ڪ9E)Sr+x_'ojB$T=cFS9B ́r9AA,'?UpMcj2 V`"ꍡik+* 4Ay,~}o}oi fr>Hhٷ.`-ܥp''du,Wd䧯TǕG#yZ:v09|/suOqyu-,F•_BZBP|2҂0Ҿ\ƒ?}+7yy vc+h!0!,A7|R}s䶕f;T-.LS╉-j]q;nc^}[dPʲߩ@0^8bk۞g{˗c[5g,#!I>dOE&^#>{t5i6S>7OOb(} gqeRY)79$hN펢m^{qses)lNQS%I:y&޿ctg`DY&SYjϛʀ CG zwݏ:A8׿qw?S/'Sى gZ ?wL[JHa\ 6>Ѯeo.3VC=4_P*q?Z5DXRX#1CqK|),,'qgsep):2CѣL)$XG?ޖ}x}9;UK~Akǝ)>pR׶t 86#ߏރݢo8n>>_kz'aᶖV!.&I)/ @%J*x m@ͿMqjxH*j5ZORO,r7)lM.l3 3ZF#|S_Vb:OEGO:F̪~9 Yп{ߺP?AߺI?W}u<~׺xu^׿{ߺ^u/c=tE}?}}t{{^youker-assistant/src/res/manufacturer/ZOTAC.jpg0000664000175000017500000001433213260315532020466 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!AQ"2Bq$4& aD% !1AQaq"2B#$% 3C4D ?'Mt8Zuj;jA:H'_TofI/8"]!շ :j(0]?-]?OrHy\6"%keL^"E]1;"G@TsQ/XN*Vc bFL44!tBgzJT V4cBUd ?-qP>W6i䳭VۢRyHVŕc w32!L_&na[LYӻc%s\WekVQ5OuM#<#0GkXР~IqˋHc1[Ҫ׈-/P{5 $yZPi) ;gOk[S+xvFԍ;V ݓ"la:8*;N+9,+#ʖ4Xs::Ǵt^/-VC?pF/me%of4UgWYfeb1l٫*4ԅfYzOctf̔ۆ8m* bS|Lux]dSW8uJ 'ݲ&:0^o.nE27K8b} Ǯ2,FU"8$1懇8[ĮunH+G:pE^?O毹 IO$ «}g ɪvZU'RaUqU/$2)r?-8.[{b}#mדuP>G,,+gmīmHؒ9s$  ;* hk vfrŮi5,X 7#B? hz4DVibc\j}IRDR՝t8}K@C%vJ/ 5[#U!W4)հݡ Nm)E4ḻ?V;Z?>krm 2%tW]$_XBT" Ϩ9Ph;xkL"⿋LzO1EZZʎCy¦ثHT€j"Y<={KڞF_1^M'AJ#y]S&/Wo,`&{Jv1i,)|:hcH1R<"}q +8z9|AvWyBt:Ue{wȯY9^%p٦1-ډ x)(ɘbcnboBR//zYq$ZkJe mˑ-E ZjE܅駒e&*8o.HFP3,D.B&RuCDpѯw>MX  D;[vʂϴ\KX" %vKZ䵕q>69*/wuqj`'u,!ɹ|Q3{cͰM2Fl1k~2"=DCV!e{@/qbLO/Ʃ_9W6&euZN0*hXhMűje-*Sg6AV^ՠ \C)sM׫؁Ω dMOaJ$lc 'vvԽ辊 T꘾e) OQx GN8\ }['K[c+yvq|9J"|Da.*ٺcOB1JA1(u06ᶝ0x$`I,̜E-l'xwfYlI'6=D(#,= D"%@< ᔚACU۫p}=aWrX6) +ڳkr`ylH[NƠ!|CmOu@^1Vz ;zҷkZ|e{I^τ;}RCCqNTlp)L$DY \uQ\ yv(~򯒗78Z;ȵm|D/Ar/QZmvڃd\Hc#A8c&z.3nV,h5>gI[*q$=H^| P ʘRc]g[R"nt9[>&i~((H }۸mk\]V. ND0fI"%0I~/#M u{*؋vo{9'E0wo7@=;JYt.[HQ9|+6,X5D$Y!!^5z??1¼%-w%p ?[2[M)@<pwE0DWk+^C]-C!Ix3Ty efnm.tmc1,bpƭHPjS8DEy%#$ZJmR e-= ҵv@&4g{ N<%խV^4x??ӎXIZ4ip9 8`XB~oApZ9Nˋq m'EtjTn^1@a%ۺON\y{Vd  ɱ\D;3 }$"oޫGM.}"8V&n`- 5%pT< "-`GJ`V?N|T'mm0b;OXE|V[/aw8! H$pYZd8x3>6G;l̓"evğ&R(s|\ڱ,RqwZO2.%r5T_bpQ~v ʻQLʭejBI#F{a wqDGZ51mb`q'lka$9DGls_cbA.07yɭ\yn5v~)Nrx mw, hK{[""ddVμj ؽ͟((acħm}DķDJ%k۷rgoZoaw"ST HWk?Nus hxkzt }>*(v&̹ǒ[K=V3նA+V'xN+T/Z%(-^!BG }m\⹯!eeMy0x]kV@Ť; #;s3b˫+2^[ТlJݠlloj~e|oBi&WRn? G۸m6NbT`-TfChZ̕*#V m|ɱ,[ɉb n/o.~රl~\J>yM28oI,{]1RZ/.5\ I-&\]i[asнϬk`)u%VŦŋS&l'` µ4z4b}bv :Yt--,٥V~3J#beP "#LPL䛽JQRH>O)Kϻm)x|G&wl\SK&|)[#HLqsZ_QHs,XpY->Dݠ;܅駒w'_GQ+R %jA:ڥH/P{4%^JI0|^Ќ Ԁ歸)QA^hG~?vhyouker-assistant/src/res/manufacturer/ACER.jpg0000664000175000017500000001146513260315532020324 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1 !qAQ2B"#$4 DTE!1AqQa"B2$r3S4DT& ?Ld3a cxH&{"f=\H&}=):{0KCrer07$X ːvvwTw1Mi2r*) ĊR apE `#0”pI/ ɕ˞‹ R 0ܐb(.W.AQޙS7Ť?7g+H&cمg݀\ç Q$Po7&W.{ .L1H .(r@e\`waGzeO H6_\XE;v2^]](H.*J?=Arϊ8r,>`-b>G9NaErm3~cB'3EC1!¬:XPY^AQu]FZp?K @+PineoMcMz/mlpkt[[^{Q7J펍(2!qm)ES>vk};M!ɓss!BŌ]F$%F疵G:[gWɢЫ|-5ޕFxOڒ7-!(SOi5m˵:[ jz;+#@Os ]00r imw4!Y9,Ći5ڹ=k-ʋQb$2 5 pr[O Jk @7Bz0Â:|wn)Y cx1cv \,ɻHѭU ~a]P?o9wigH _2q_Do isꡭ@ck#nC'R:P_啤bQ i52w'Dq4-Ե}E37j^j/Zz˥J E{q'pM2msqf|3UBD-n .[WV#}5w(Qۉ RP)TQC 5%J(fTfVg!DxF]`j\7,XB3^bֲfduKnE۰jgSS9đNO&-x4Vֻ/xڽ>/N gs!t/lRS:fo!SdPd;U>1@Ge樞˂h- ,__'qM PiiVnf"\d4\KH06]YS:+{ə+l ZnSVڸm ˬ\IGR{EP56n]d273iK@J+nZginS FTJŽ Mv RJvWUvnPi58&Nvb/h/\6Gg7bZR+Y1+$K2$^O!IPG?&J"!v>ھz D =ڎNj\ʞY~1;/:+رrƀ;׽U>,LSx/<\yhܭfݫUρ0=C$eE0q JfF(,ؑM%BSŷPSE`n& KpĝgOXDQAkⱝ uV9sLrem>*Ee{xM)HdZ~x@,'stٙx8b-HʡHIH pDJ?rl t?Pju&ddН}ѴLl 0jB"z&90"=x̒iQy(ck-S.ڷ5T%fQy@ ?b\ϔ$NMZ|no]hល٧ґ܈'Ӑ$Rc@9BqkJsA}? ^Oc$6RtR(e4nXc!KDH/yhyM cQ*P^Z;|Tv$F.BraCߋ#x 46f% =^Y%lM,ekwGSEtwfO\fەŦbPi`?7 1[n^ߝň28et<Ţ"@*\qmЦrї-ejO3Y U o-C$i# }26ڧg9Hn=J~T =ozۭ%E79G ޝ/ Uk!u:Ux;5;$0Rp? 5RRnl\?Η1PR1/˦ &aﳔOSv.5]ܺ4aa199*D-ї*fϼmceG&f7nmEssʃf>L%7%/( RfMxd YHFֽ[: ܽ_=#%%ӥdera$?47ޏ#4'{?nktB#ˀ5+iq&Vq%1W'~k 2+gˡ},LSx/youker-assistant/src/res/manufacturer/BROADCOM.jpg0000664000175000017500000005522513260315532021002 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:02 10:23:03]F&(. HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJ\_֯}CS֛]%?hݾ.yuc?}bdSE͎&t~Yb'GcкfszOh/`~`B ~ Lq] 6$I%$I)T^0nVa1z_dx߮6Շkz9Y"n;Vo6qbJ}%♿Ynǹ =Anmmk=޶xj8ܸ=}.&<ߚ/&oϮ#Lq:=[1ELcYٯof^O+qjׇC"}Kw}4K96i<\7V`욺K~;]/hm|PVf3>7K2>>L`;v};ڋ I/"w7;tfupvE=V{]k 9IO^_UY]1*[KA/3c:Ljq}85m5'nqw=[V'T[mnn26msV(M -u>a7܄y(DJsiPTc.YerJUzGs.ķ3!+"Lѵvm]OC7ulhe&"ֶ<lvnwt5eP=\maݽ?خT`?bcN&}_鹀f=_UzwTgTkl4 k]m5آ ;ًǃ19g/ю7α}Yj32zYSrGkCvA?Hlz_[x5߻OW*븍`p*M5UXjnmc@h.a0?Gd2C 3CAc,s˄Vx.o= z?Xwbc49d[Z[=XS>Xx-1ޭkS19V92_d?kGMT/ǮȍԽG7?eԡ~=__/; =a{ݹlb?G/ٿo[zgzJ뤾/6~w.'& d8q8K;zdqb89Og?Z9ü- . w-4Sg\;ϧK/ݷ}G5ޯ~?Yԭu{Z^ևu/߶=__]GVgWFDu:~}=o]['h(gz, 1ak_}>wYj,-꿶X`D;Sgt1(l2&n_I+T,?(?m$z^FnOڽg^hyavYUbѱ+h]axY%ij\&Qc\_,ZNGWH;C!iSDzSPYC_]ԕbԎ(}wFgPʫӊǐǺ+ i {>#e~_VI: DTʩ$ꤗʩ$ꤗʩ$=~Dϻ)/RI'wꤗʩ$czݳփctwȋTI_Photoshop 3.08BIM%8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]g*h-7]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FL JFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJ\_֯}CS֛]%?hݾ.yuc?}bdSE͎&t~Yb'GcкfszOh/`~`B ~ Lq] 6$I%$I)T^0nVa1z_dx߮6Շkz9Y"n;Vo6qbJ}%♿Ynǹ =Anmmk=޶xj8ܸ=}.&<ߚ/&oϮ#Lq:=[1ELcYٯof^O+qjׇC"}Kw}4K96i<\7V`욺K~;]/hm|PVf3>7K2>>L`;v};ڋ I/"w7;tfupvE=V{]k 9IO^_UY]1*[KA/3c:Ljq}85m5'nqw=[V'T[mnn26msV(M -u>a7܄y(DJsiPTc.YerJUzGs.ķ3!+"Lѵvm]OC7ulhe&"ֶ<lvnwt5eP=\maݽ?خT`?bcN&}_鹀f=_UzwTgTkl4 k]m5آ ;ًǃ19g/ю7α}Yj32zYSrGkCvA?Hlz_[x5߻OW*븍`p*M5UXjnmc@h.a0?Gd2C 3CAc,s˄Vx.o= z?Xwbc49d[Z[=XS>Xx-1ޭkS19V92_d?kGMT/ǮȍԽG7?eԡ~=__/; =a{ݹlb?G/ٿo[zgzJ뤾/6~w.'& d8q8K;zdqb89Og?Z9ü- . w-4Sg\;ϧK/ݷ}G5ޯ~?Yԭu{Z^ևu/߶=__]GVgWFDu:~}=o]['h(gz, 1ak_}>wYj,-꿶X`D;Sgt1(l2&n_I+T,?(?m$z^FnOڽg^hyavYUbѱ+h]axY%ij\&Qc\_,ZNGWH;C!iSDzSPYC_]ԕbԎ(}wFgPʫӊǐǺ+ i {>#e~_VI: DTʩ$ꤗʩ$ꤗʩ$=~Dϻ)/RI'wꤗʩ$czݳփctwȋTI_8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2011-12-02T10:23:03+08:00 2011-12-02T10:23:03+08:00 2011-12-02T10:23:03+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:0e0a365b-1c8c-11e1-ae7e-db667b27342f image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺZ4/~SVtǭڃ0[g'عm邭s1aǂZEz䕪p@X8'};ifDQaZ+(#t/Ϸ{C{e+y#̛̲jʵZn3 HwC #[/ T$m< )?o<`*2,)TIP.yE5m9|;P + xl~`ZjPEOF=׺Bd_c&>Gs1;{ M_7E>b~&VzYbk&Pt#EM#~?c7(]ilSm=s6srEQ-JŤHמy 'v ¬M>ʜt]ɾџdC{]/ٝsؿu[[Q6>y; MYO$ Uye,z(fb Q˕+0}pr)k}mK#\cUR:x##{t$P0~c?Ʈ9_{'k`viS~Acp&tcu;& %=%d5RߺUK;il7oI>dvG^Kl nͅ׸VM5y;yTF H{)ݟϐ4{{!]Wlٙ]K?5{nJ3{K;E1YT,T1K[Y]=)6Ԣ=je$.vI\UT8颫VXrs.d Yg}}Z=} ڄOH4̔"ʊOHQX{Kn,/'x|{#ߝ]\+}h#7av6jITtZYNu ]Pxk?o!;= ~`ؚÙEe4@YG 8z Žv/&fN>"0__蝕_Ը\p3kcwک Z6NdX 'F*) B8 tH~W"sw|Z/GtP^xuٲ6,߻nd(s4{qMX詄8*:UX)=; :T/Og~a V_Q%YDW`C0P SRc)=>sޝ{ҿ*;7;vn{das{bQbTU_ܾ\Łkl5>b \$Y[y2أ%R;Z4 e-K){Cg Vtw<a{ VaZO^}}g9܎Fض8!pҵBgA2 ͡ 9{~鬗e&;c's#JŒ ,ncBɊ,tzJs1UI׬wǠc)_Mu"S{{;}yt،^ic0۫id/CѪ*+᭣#DtyZ7-7k5]MF<eݿ~w^[ڒV֝%kr3{jus|>ωaҽj]n~^Ow'0LligIOT($6,J@#z]=٦×M4,֑M,oRđV2h+\?O )ߝ&bԵ`vuÿM7,j=2{^h0|v>HFHh [X'V>ru˼7,C$VD]g}ǿq^osQubexβ9Q.-փQ|~U-~@?,aˋlޣVⲔra2remH6g-zJWf$I/inwɸo)J j4ܟ>{M5J˛;}H;$lXr̷2biDbɲ'\겿zl&.d|UQP&kjnhmgw44k歐>x;'3Ҟ{/&{Y M0LIJCA 8,%-7km];;iRIDlx)ғ HjqsZ9i)#*cɬ'54~9kq?zkK=0.%  W ^{v&ev[?:embYu;k%^R<,HԸ@{X䜟icS ß^`oyl{>f-wPO$- v"  ?W;S?/V;S%tWdMzZ}Flgggw7W^'ܟt|O;ga:Sk77%3d9W^VǒǴB=퐢iU_)#^#˾#;/-ۘ\mV7fl)*o&즆9MW`}׺m8fvN;Wz߹Nr=)Uw.ms+MRvya2\n7#8G6W^{'r-7K^ym>5nsbS 6l#CZHRZ rb7ӱ7P6$NEUڪX+eW8+aO_2kߺGߺ^׽u~{ߺ^?4Zuckֺ|_Uz-ߪ=zU+JyR)g_ߺ^+QࣗQmfY0k|SQ ZqM&8MW: ^Ww%[Tҿ\C{q{3y;n|43/ʢњ]k.ꓮƫ %"/#jm47-ݺwRbuf\kjںҮܘ )3QSaްd#ϭ4TcMj| l־?{GvT+u!>ӤPzd׉:w9hg{|Y$-1FbM@o2:.rwLsvkvSb;5kn>ԡ)iaqdx) CifV)"<"xv+tܬ/ W)o`1#žJ@y--jH;=}4.ݹ*pn[7Ȋ967 Kǵux3v٫ڽ3.zpm)jWZʲ]Jעxuj:J~ک}wtsn ī$OllMK>%mA ݣcQ%eqh6cSqص?su}K`:ZsNљXFbx-BAVOqy}?<{s%<7%_x\;Hd}e@BL/)A'ytҏ`~7_tkӣwϠ| 7kuWW׏QݴH<_ѯtqvuߺ^׽u~{ߺ^>+_?ɾ?ׯ׫WM;)|z[~kfVztyhӧ<{Hu{_ߋegO ~_ [V϶υ-t Na~>ŧgO)蛯youker-assistant/src/res/manufacturer/SYMBOL.jpg0000664000175000017500000001100313260315532020603 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1 !AQq"2B #$4D3cdt%5֗ 1!AQaBqDE$t%u"2b45 ?>\Ff/ 7LQ57&/V};RS3OvHBjoN&mG`R:"~^߆lQmkrQE1F"ri7foOpjJw&iA\CR^ MmjGZOz-mnX =&(߳DNM1FܚbZIS^IN Jy9JB$?yT4JPdIC'ʺү+dan` xLQaz 6( %͗)Fқq]LrWƎ&)D囵8 &՘r`6ЀL~8H D͗0c&A'؏i)KRD:'-}<)+Yz܈*kT Ïws>;[3ЫGrȹ1[5.Y+2XKCEIK,ye~E =)ClQJ!1Ci7Vv~Mk+ &UG d%ƦαqYm[ .x|th"%غo4vQ)lWTmfdT ]m6QlO5N` 3=E1Jb@OV䃗 Z7 d^mӂb\a:+T? })1i&PvM$Qp 8 WWt@ XB-hx2ԳIwKhB{|#qAKUxEl[E&-DÔ ~fiG `m~Z#6C&+~JH&]V|?EVDh&PTk$[Ѵ9l KJצXQL7?jQiM1]Iƾ>ִII!-ztȌcy)(=iw<0*t@R 7E4}oWJQ G9)z:Js7?%_թq:5tqWrr.cv|O㲊qKc2_0)7/΂7EIU| 6o?5ʆ65yH4HfD$"trlCHdotpse R*j@C: :~oԎsg┿Ү,ǩ ӧ [9#|fׄ GP\&(LllGDE9^@kT:ks|TjDA~tgⴿ'Ί.)aS}w9%a*@"M_X*TѮWӾ^_.${Za1F6ZQϕ tIP[J<XkI22%eP]N;XW3ȵ\Bh_?XJ'JNJ9YaMqSVߺJʵRVY4FN\ȬLl(S1.eQ\gZ"KzA)5<7 p e;׳tu~ԚM}<3&'wSC>+g*>ud,1\侩ᮭ띱j_8T7QK՜T6zEznթI&e TQWn 3@ÇTxpizχ1 7tNq͕p6>H4ˎ.Qe4R/i>6 "u *R&{j s804ŧ!Vx jSO +Mc%vXcW*&rRڏw"7"@[s[/QR 5v'֛Zzv.XLл; RtҜHeJBVzd$眆U]Vj_N<#;ŭX0q0 gXæVK:s^m 8y^[@&FDj}R|m;T5L2_̬M] gֽN suIiVRӣUKy -T"""}!--}4BfY\6gtl<ȈI C›r1$t` @;Y'U9(tLJ ٘w M*W $rӡCוXt[Q{ATcsHr4E2>t]g4ZtOR"VBRKXYشUkѝL3Ytw:"ùxe%'IRVsNIx!+@k8j ܵ,LGa`m5EmGPUhɦ(}LQI>bѩ)ܙoArzw Hrz`57 #Ӱ{ݩj?/oE(`(oj ~94Sri7i'LSyz5%;4 h.TNT/Lr`6Ѐzv`{#R'hVѶ,AT^o٢'&qjnM1F^$)w/Frfʑߴ5!ʅޜ.LNvuD ؿyouker-assistant/src/res/manufacturer/CANON.jpg0000664000175000017500000004665413260315532020460 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:02 10:27:22]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOT$RJ㳿uvX qvDN1̓˜7.R'֔%׺~>3qm;{G=;S`>1lnG} TO/ID(8Ŵr&.evـcgzFeU0LnG5v)^.n|U..tY`UۙSr-!Ż^9yؘmkm;XKv۹V;qd7 z̈́WR/nKm}MvYE@`5lN0+uk.!Sn\Q(ˊ1'E%O_~ϧ.2Low7-bX(kEq_g?lȳ}cK<{?Ř9OH/ErOMf t[nY!#(:tyk0f岓zrqp]Υqzɲ0Ǹ}V>YN0)ʴ @ß[/GꢱVU"u͗9TbZ C@uBA~LHwۊG>OsDچC?W㾲?`Uik&dUsu k[}Zݸs%u?uJknue\%jng/u06pjZ֒2:! ӔXDx WZ袎kmac9L#u0jN5ƞv45ڱt][N?Sͣ1OXkZ>}Qms6k jcOډ?Q$3qm;{G=;S`>1lnG} TO/ID(8Ŵr&.evـcgzFeU0LnG5v)^.n|U..tY`UۙSr-!Ż^9yؘmkm;XKv۹V;qd7 z̈́WR/nKm}MvYE@`5lN0+uk.!Sn\Q(ˊ1'E%O_~ϧ.2Low7-bX(kEq_g?lȳ}cK<{?Ř9OH/ErOMf t[nY!#(:tyk0f岓zrqp]Υqzɲ0Ǹ}V>YN0)ʴ @ß[/GꢱVU"u͗9TbZ C@uBA~LHwۊG>OsDچC?W㾲?`Uik&dUsu k[}Zݸs%u?uJknue\%jng/u06pjZ֒2:! ӔXDx WZ袎kmac9L#u0jN5ƞv45ڱt][N?Sͣ1OXkZ>}Qms6k jcOډ?Q$ 1 93 70 1 72/1 72/1 2 2011-12-02T10:27:22+08:00 2011-12-02T10:27:22+08:00 2011-12-02T10:27:22+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:08e90667-1c8d-11e1-ae7e-db667b27342f image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ƪx)i) TigFX@` Ycg*K14I$v?~|v+{h7Vs)W;9M#NU3:>>z+>w|m/5[F tkط<9z ciTmS13]Bgyfۦn[(Se}j>ZƗoE 8/{qg;\{!Mo6{ZȷӼh^Eh|v~잒"dxzwx`aXTT/JrfL^CUUA1Wx]OE5bSε8 "c1{[ܱ{+ݷ:\d6B*cԫP{cInQpC%EZm\~6oo iiy$LU]c$jYQe7zvy[%S +I= y׷ܦ~vtECj ) H n#@>{7{D޻C+d3V!=GɵJ~'tj~nr7rv[bm7MbHFEXBҔ|(̯; ckەMf2Y",ƙzr >O})S]XI#2t..%h !^Ng%NGtm]O2n{oz)*%ߌn h*hY($,hc769e\Q°*GBq}kh۟pyo?m5@`#y݊VBM@zOU0/ي'UP<-'᫷5Ng^8ώHFǏm75I h5sXv 2܉wZcICDɧ,D ̱ѯ`:ϴ>||7G~}αVț7&*e%VGA)$y4.A_%lHZ ~i= b֙ 0IjӦǽC]ϑ(73F#GxYD@Y!sQѼP_ܗa;r|_Z#;D8(S.Is4+W_㪆8I^@ 0Üܱc_6Jq>ej>}Nv[\>_il֦BЧ'z*Lcb @:7GϜ&𖆛u^-TJK6G [-c+ڰŨSٯ5i6ʒ>mA%JBc!wRp>]nS7VMFn/{nHX MDnLVK5>9ZGueB6 Zú+IeDv /q/x9E m`cYVњ QUB>3-ן˿ޔK;N ^Y0[[em*T/U CNuDy-a I՞U `YcnyeOk)dagIg/",2/|H?#;#zcP&u=avrn 28:hֶɬI(q9GlӶo0[]R9)V2c`UHks/|_Yݢ_GM$1VYUW$"?U 2n.3:;1r Pr8x-W%ZVX5ym[pn-bEI U`A4hx̟x>cڷUfxPyיvHѭ 4~|z>{q70O#JF+$:@F.P>݁Sn_cW3'՝1xɚ!nꊪy$I!anشkibA"@bbI Neln`9r6y$7<11tGl,I>lm-7U|}W~1[ok𝏶j_CͦbzGWFarfa>){P?BȇY~@:'xؽ^mț>e3?yilV9Ic:H!:b{?eUwƺz1f oTd!CMO:ؽ@1g$M[[eF-[pP( j\L>7\w\Wrol+RY+pPwwFml&'mG}O`q>.fR3caϺZ$0FEQ@?M׹rw57&ۙ%I$"]ܖc@XSsG'ٔ2 E"#ߺ =Pɏ˶{Eà~OE=nՇv,X|}~I^^iN>:rtBhzg;y-uCԣ rt|G#o' NZÕ>{U6a@.P%|hw;P]dӎhݟ&xRC MQ+S.<HV$ /ݹk)B4z4 gN?)^F׶w]f %I/ ,QfZb@#t_~[(>;<2-  p-lު(NImwv,o FE RqRwەyחl7).vIݖkXI ŌNF$P[#m7g||=ݛ{  i}~WI_%17h?%jxNM]f*)B<0STx}7_f齾d۹>ͪ9n4%Ƶcy-܆K/b**F$?n1/lc(j~1,^;nxba-uK1Uw(U"gV0nlm]z5JK}osf$\ռRCHʥ]YIVR*>V$޼W}MY[K# v pnZLeMeluiҢf߽߷+ ]X@AA$Ϣh~"#X{}aymn7o,#ɡUTXM yӡg(`Mg::-IG_.[ E;VcZ鱕G:U/vB/AWtR2)P#@O+/ܿgaorԍ#\3 W^[yT:HY$%CwtE_}[w=CY4[i(䫒}[\~?ީUVLiȐ*$}{Em""rbRh AdobedF]    1 !Aq"2B Q$a#34 1!AQaq𑡱"BR2b3% ?M71H&ړAn>.H/A JQ$w +~҈&4e@mv@zSjfi6@HSoݩ4H&A74R yyKP2w (a@isFX$ڊ+`J>)>^fiKm^T 71H&ړAn>.H/A JQ$w +~҈&4e@mv@zSjfafRyexD1穆#EOصx-[Ԃ }ǐvS"FS}5sn2ߪ%((^vmK{OȐ'Kuv:: }=ٮ-5_$|+a$ўKxHn"7W׸L8?|jy)B4@5`YRZ)+pL wCfEy5_rH`a'ػ^}8-ڃɊuR9`h3$fܒQM$NCv=fכ:vZig ?7ͮ9i|bX;Gָg qR][׊+ZU 2:k) Ԙx'TӪL-DZfxe{"iCR g.@[Ht* !_W,@]W Kӯ2n3m5s_G]h\]r$F_CM+"/Vݣ )9<0>ʍwmWEEPb8d+C36<&PI8!U1JER8IP^c*7% v͙OC!au[~U%PgM1fq:tдI}Gf-4r:bi4TZ8uK^d÷RcqkyD`&fVQVˉ8[x{1Kľi?P8~7vGٓO)<Ŝwzw]dh9]7 *vv @Zu+ǣ[xA+=%(꽘+$;\>/^U2Xv`;֟]lR@ɪG#UgZX&bo¡FVS?oQnĵ0rʼn-š TS=ʜ?2+tgWS{/Zׇ]d/26O@ֱVPlZQWc]D* 0dpUMx};%sp8;A}Zbv\%HZ:#anPlUkOm0A5g +}gn&y}=l#fiY;Ǣ$aqcfX0meՎR徭ZWę:DݠDxy[tWVRYUqp{Xze((/ziH8ĸ|#k3inN].T#-<ƜE'2jz̸UEr:-bRgњo]5vrG|η'=Hm'b*X[X:4aћ-J2M畢@ 4^d|>'4 PWzJ'.]mYp'#7 ) ME(cq88$b ڝk1A+ܲr^B'.53ZʸTgH PP#F/T㎢ۘlj':;.A-0PR #)ʩ;oޖO:^~r1`fӯyًC5g;d2Ko*]>tS#A@RO-ԡy³zY= wk JHޤӮQ i*qfh?Վ)]LK~a$ ֊-oBX%n Ӝ.,_8lN~5!%}}Ajr<>-i)+:sSC?kH|7+r+!&IH`х DGy$C*d QS۞g69͍Wx`r/i?_Ͻ6fDJ/=n[>٩3`I& {%xђzNRp8k%]mޥbx]^f5_%I*\B$~IA7F$R 頏ڐ]ͥ(_;Z ˿xiD K2 6PA\=ZQL53MXjUɿ)BA7ԚqirE ~]3&d x !4>r6? f[ZǨ WK2C >64%%ju_}goC~9Y#˂"fc)|bՏ=d %$\Zuj {k\/?3Ҳ]~λ٭Cտxv&$R^;檿s1k8`5?uϫCC÷];DOnW\ZeU=I#Q ٰa\xI[>iaɖqeLJn"Ŀ/0c[lsOk{?ȹ/>uJ%.k \%o7taj.z6UX 7N7tވݗdkykb+k0tL+EuGw 8 x//J92KgG1?*VSuzsgsSY_[Z_Q,hgܧ ybAكb"d|e/\/ǯ!$ Eo'}:?kTξ|SlpmSBv[.sdgn`aǒdhj׿ᶯofO ė\,?V/l;G¹?ZzLbT .it-*,Nf XvYp8Y5C֝:jy[,:WgW/WH.s;4{G<.j1>iJ<_zUJGˇ_S+jUkx THƹU]կk`z<ҏ4DPcA 6I(A(r3*\x> 8? UK)\GQn g]U5ps\ ܉OGtZnXL\4gyK@c)P=#[fb` fmJ<Ќq$ (B\{Kp@w-<ҏ4|VxW @ۣTʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]asint]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO "㶺\տCٿ/:^K:*;UWǒ4g&)<}))hּIVpԯ#Wz%ճ$]_UtG!^-wJ\+e.(\79d8dž`^}u[Soq{rNOI^1)S4ȇ7 >]3&d x !4>r6? f[ZǨ WK2C >64%%ju_}goC~9Y#˂"fc)|bՏ=d %$\Zuj {k\/?3Ҳ]~λ٭Cտxv&$R^;檿s1k8`5?uϫCC÷];DOnW\ZeU=I#Q ٰa\xI[>iaɖqeLJn"Ŀ/0c[lsOk{?ȹ/>uJ%.k \%o7taj.z6UX 7N7tވݗdkykb+k0tL+EuGw 8 x//J92KgG1?*VSuzsgsSY_[Z_Q,hgܧ ybAكb"d|e/\/ǯ!$ Eo'}:?kTξ|SlpmSBv[.sdgn`aǒdhj׿ᶯofO ė\,?V/l;G¹?ZzLbT .it-*,Nf XvYp8Y5C֝:jy[,:WgW/WH.s;4{G<.j1>iJ<_zUJGˇ_S+jUkx THƹU]կk`z<ҏ4DPcA 6I(A(r3*\x> 8? UK)\GQn g]U5ps\ ܉OGtZnXL\4gyK@c)P=#[fb` fmJ<Ќq$ (B\{Kp@w-<ҏ4|VxW @ۣTʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-04-16T09:27:57+08:00 2012-04-16T09:27:57+08:00 2012-04-16T09:27:57+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:acba8ddb-875f-11e1-93bc-952fd8ae208c image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWZ3]1Kkd2EQRh2PG2$"dy+"dI}?ؘBUE#4\.ʲvh 1ٷi`-[U,*I[ks4}>7+O؞Ӯ#;l 'oỰ%7ʱS=TG'Qld]w~o~^ʱE+W>|,x$kF*A eai-om,x DYc9& Ŷk0E!< & WCOl`z!ßҿFjݭ_? ֿ_̝_/|O rGUk(=J);坞03/r@igv]k{IN@B+5 Ffzr/& @G\֘×/5U!X2;P|x=zopǧ¿.,uO66YLD;5(>ȧ|kAv|܁}G<;S9 gg? ֿ_̝'_/-wKwN2@즟1v O5ܔ'/4Aq_NB׊/v9<lxAQɚW#o'y%Lu2DvdN[|YeKv^|Ig1FOCbYM7co՜$y"˿iчOu//\}ﭼ=.ʶKo/ϡRq8oq@}4+1/tNJ3ԑJ^L p}|忮Y'-KK4H:A%c^J?Lާ.;TC=Y|戭c7TdC.M#F'7qVG<_? ֿ_̝_/*"?iJ♤D=Z& >_h0Hyg?ϒt{uaAʚeW4W.4JF "#( 6;1\>r4ZLc5t-O;}.h<&#9>jơs{W0ƼyNaha$D7W<ɗ{h't>wfQԦEִO_@iJ MV\DoH?4kPJFH(Se?d3Uݡ#>$5_cK͞]EΏI ڽLtgSr=ݳ.ˋ!yS<_kfFydW_EnN{3wx̏sLؼ»R%խռ`JKn8c" le!GOa_(iq^XP2 吩H (@)c.P:갈u+8nef@WY,n$ů&LT+.o%eR iJLә"x!Q!.P%Z-O# pyN1dihpb1MerVUWQMI jrQP≱iP$݋WL(O]m8uq8ٴxlO+B,!kFo2dws]qWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/JETWAY.jpg0000664000175000017500000001363513260315532020616 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1 QAq"2Ba#3$brs4D !1AQa"q2BR#b3c$D%rC4 ?<970A7a+&vAGf.<ִJy~M]ntkTC0l \F["s(3, \o6buK8^DKzZٵ7U("D/BQFS)!@SJ q5@#Lzf)DIP1@i9WfGTA9Vo=&@jJ'ڽ>;).4&.8B-=34@(WI]ޮ0w%JeD466K UB}mfkS [7!% uuҖԧ{Aփ!yUȬ1- 3g)s"?ìVutH$s7|vrU,\)Umk{zc1M!Ug\xc|t<y)'mXA־sy\@P)^f/c+ÌX#nuz)}ƶqՕA /cFYL@7:` a0噱^,ut_o[YaMd9!䶞كPkݸ?ɹKWCGlPr3ru7rL+eQ V]xԸ3avcqxq(zkfT*7A{{hz=a\t4Z<#0!:Mnmk? >L gK\Z;"JUV"W( *ύ% jMRG^ClY9ȬšA*<l*X)iPN)#J۫kI0LZ9>W1-I_:̚o p{?3mRO8*Aj21.8<Ppݍ&9w=Xagb|-^Vv3Mm%ȝ9{@WA[ ;+MO?MLE`V.#>2ǟpo¯KjΟA_Th"ݍ<^$.5ʒ `D$9U]J;2r1qg7_8?#ia0"TjFNB <Tؽ@u֖ÝSHC&Zz*aV i +ʅȍ]]Y%iz)YO@؀4D=!ᲣP4,Fj3Kbw]B/U7Qx_29Ms_=DQf RR@|Qͽ"+&#_I &c*c!hCYZsdc5v tN& W)tB@&Fd25C([9\c1].ʨ3Upb2 ͘YZbbiR`(#eKx}L#%ވ0kjqAjZ=bP,zLvwa2eU XMVYԂó]h?־]>=n 8f/%`nry~T?~$25Εl RNo pyt2ZpJ QP/8=l*UU]PZvM|$Zkv%yYƒDn>F2gR+Bjو糸OǭOمns`إ^i`DBIٶ6)#'46疕:qRO8sbUaNRtđ6EⒺQ\ʈҋČ\$8S1}Tߍr\Ijuk >~[[|'^@S$]GβSoGzYE!\/%~STҀb]-~4X8v)g|drp8K&IOGSMENغ7N_=0,8sL`N1T!2mHcm^H9jnܾ:}n&6CX]#.f|MWѯQ-לe.eV: 'TV\^"èc2CtBLw^`)Њ8ո^asF駋O}`*H#.؟9Tb^iWRS5?::ޛP(-fk^#4m:1D v5C ,"12ûg^jѼ} SX_=GEG UlT.+Cn4gV.W =Z\|(g <܇(#9yaіliIE%Nl1ϡ6^SWEZ M2)<ġz$˻zbPKߕZW5 =L.hamb2Èџ@p<RtoPsVqwU=n.LܲSi[mܒOߓ BˆF n&]- FyO}7@f5Op%lϵ1չhg-iL {Sȵ iv/^EӋSgE.B.1ԖDn%9L=Md0|%* P!3e(frId٪X`L;M@taRp"ֈcRdC@3P0ÖUz'#zNUsMj`9aX%$IXq"QsPGHU#R,VDV"įC84ޤ:Іˠ+妳P!E!N}>+E6֞c_\r7LpzyB)pVɜy=ZU;nrɨVLNc}KK|q\jƩW*5&c$uU z_.#-7"9v~Izb.BE'S$L1\ eLDʌyLbοrb%k HW0Zt;o(grܑ̳'6k){3ڂ\Yk]Vz٘/ k݌,ro` 6u%VMIVlv~C7=x\_YM|w_sc{ww7Vc+S&[sUng(ߣozVϾ |;;_sˇ-XwwossiT2/Yl˳}8{nމɤ&C&9w=Xbb|-^youker-assistant/src/res/manufacturer/UMC.jpg0000664000175000017500000001145113260315532020231 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1! AQq2 aB$"rSdRC%U& !1AQaq"B2$T5Rb#3Ddt%' ?LdB&~"3\L>):J9&K!29sQa`!sFE; <"}_&i(XB&~"3\L>):J9&K!29:#0a5 %S!:ri>NFH4{XMb#HX0MQ6A >H[OLÊ9CԏH6& Ldzn(<&5ixLB8 r0j3oB;?Z0u:a. tx/M8a&hL /nm6M,x^EOD9)yGTٌ4Wٍ~֫DzS%{vJ\߄V#:Yiȗ#<@e Ao+"OLxᓈCGQ҄E$g+~r깍:Lŵrw*Vj~4io1DMȷܖZUֈB,aIv-,<\՛7lRc5%_~bzǝ /UMBKiQJ3'fB}ͽ0jI}ǽemXuwUn5cp=K,G4Y}X݀)eU)nT_ƫF,-.P@d# yvzT6FUh?('֐:~ *J%ߟU>**N#w~i|NĠ _ >%a)>xo%v7-z鲎R0.R-+&k eS($,|uu?הݹS'FD#k\rwe4T4cH#cp՞|њT݇(뀢KQWHUĞQ0jx2"&cL3mKӄ0vY/͜B/]ɂٜ!e߆<0!ʬioBuԆlƟ>Mq-0_+C-EyA,N93H^{Ixԥf{8+ۮz35Tk>wr$?[PҪv3jv 'xBPvVnA 2t39v5ynMŢۣ&j4 ;9uƭӧ(_PSYPT32%F vۜ. +4W5%4>lt+U[QvNڃwt#dtuuAbTbȸpH#ٛJ+/Pp'{;: zXn7䏝zbcXyܬ:D*d aoEri*~YrM@o}`3/UۍvEsaZۛi˘_Vt:Y2sF̂|CU6= HcC "jΦժ\tI(,N ?00HX}KKC58 Y;%֝7/r50 %+J6?5/{v-\ Nt(P910a>]nV"ݭ*ҰED&af/aasǀStrړ2L Nn<2WV} W9GͷY}ފo l}㺓n]oYFZ]Wv{{d~G^R_M. :=RdR 81L՛N e:Re݌ЅgaÏoc=>\\;MywwU/ZP 4-ࡁymD,ْ[ &t# {v‹Vf1G0 xhRԺg,9}D}b\4_֢~%-Q^PvLҜX;@ 0*`cso&YR[_ld.p`,XY7uF# = ^c2=R =$tTPpպΘTH?넵tb77QzrIo R.aOXq+X7?I)Hmaq8zrrIҍBzNwcɕ%]ҐHᇳԅ6{1|V5t=YS4XQ5 rw/2\A*| `FT:ҺCh-xkqzkit`0 ƀn3ǪEҲY<'U`m>936ԭξ/tW-OkN#-9`wZ63:'dRڿ HQ9hė:"M$1+kB21L:nFL3_?k-51ҵQ)-V;8 Yio+6q9VŌ>䬎~q oΟ`(N`ki$=WNFo|7_k(fTv0+E6D[{O+j][)vg\ΰU4% P .|^t9wVJtELRY`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)KmC  !"$"$CF]" < !1Aa2Qq"7Rt6CTr+!1Aq2Qa ?t(JR(JR(JRB(\HXo~l284uQ+ba{uMv;LT9n{b%)`5:*\-)6XA#ϒI;I=kxC&cً|A=w+fȢ/a$Tq'hۤkǐwu-%:(~5+/v-doUIYZݕ %mAI JGՀ@v]oyKnB^"s 0h5nw7H-ηKf\gFu%_Q^SOyO4m!Frp2jW足.\̹P~GE 2#V<`eݔAţ6= 95}FY]f+UMo6UJ{AR+R4Fx°nQ5C0؞{)3g! %ޮ?5%Z5h }5UO-{<_)J {]w6l~fXn6*N^ެlE )e+[ɶ =c[M&˯kLn3VRA55/D&t&Йv6qC)ܼ"Sx;zHg „Tْf7abbO~A)m=UU`#3_|-`6HIuRMcջFnoim.q:*}(oE_<5;~Wr^jiȮ9[( ؖ{^.-H-%hZOOj?iH_NT~QSe#8,l0aO }%)QT;($WLz*yY<;n}Mk:/ }u֓}8t*TĠi9wU:v`a!6M! JGڲR (JR(JR(JRyouker-assistant/src/res/manufacturer/TERRATEC.jpg0000664000175000017500000000750113260315532021017 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !q$ AQ2B"Ga4&W'w 1AR!BQaq$D%"24T ?&Q5^L RI`ID1g|%8y"Ts + /.{B%RN "g@)A9TL8RgR"L@"Lǒ&a>hC.aLmXQys(’q8`F hQOwo ʠղe?DBAg1f<3 DB(sHeo4 ‹˞ЉFP0 sD{}PNU4oje4ɝ ̮R(:]GDlե;<̅M"p%L#$uKOlb8}iAVE}_UwWƁAQ?C}V@1Hx5A@Y)U?<$H2ņP:8ћ/iʪIRG. >ۦZ%T̴{07hp[ nKrfzI2g!>EiF] 9!6 SB"SjLs]TtݿRW$ZE\ds*X "\~1ϭ[Xx286{ Ia|J̌ RK9&7 TK+#!קdQeW4ǣG)J欦%D (0Ale3ʁ9hM-:O*hЅ iO؏w%hp.M"))ķrBBH w'ր2RqՅa=.ECOLSƉ2.KLxyT'B#ȧeHJ|mH1P"~O$ӼlI!HKo2ϚTlޞ;*fna}RB- #NU-kO&Y!e?&-/?5n=[!<\څuMgV鹍S9MZX$>O&靚=4Jnc?PL)= 㐀FQJk8zuֆwPO5ʚ|{StVyTӬ Bm\ͷt&IN $.)8L11\]ZjPwZ Q/IvW}Uzަ$)e֢ѣKes)fǵ0 `#\{RN4}DMU.dO҆uv7(3KJ4tBFN3d{Pp]`7(o )=/P#GVGPlRDi>h?Ϋ8CQJWwYoooE;G7V͢(m% ;XRwO.lAI3 IG҃juUٸn8Kj+w'eByXJͨxQ^WUZ?D(eoaD 9۷S2IIV&!@:й,!!o*$hDI&ͿLab-{.1IwREKSK5(Vq2a!EkEtœ[%{%g;@qMXXz/׶)?>4ScY+zmK.:N= 1n'M¯S'kV[Ov) or>ebhK2АЎҷ*=gUl0kwaނ(?hrU(dyu ;-g'geet/&~)Z$d0b$y"f3>Q<*9h=)'3 ayr@Mv [&Q`)y3D)J&{ y&c0I4!0Q&_h6@(aI8n@e# ːr4Jo(Pj2Kɟ!JV33H"LyD$Ja2AaEhD ILu(^\9SyE=ݾ'*youker-assistant/src/res/manufacturer/LOGITECH.jpg0000664000175000017500000001227213260315532021005 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! qBA2Qa$Rb#3D%v8!1AQ"aq24$DB3st%5 ?NQơH'^GQ G٥73Ƿ;WfOl/ȶuUn&=#ē]yNw *}Cp^`c."fpH"zg7Eڣm-UI`5"2)\EЯBD Ģq0D;)'Ut٣Fi.Oq= Jݤ4[2Úh㌑nq3ȝ'g+ LR&=YԷ^\=F3HX{Wp殕w=>No-h."8!7%1NR) Sh D@@,WP(:j((^vwD{Jt@)BNڎ+:9|NO$g^FGd-\"R,7'؜p9[.MvEYʕ6`;3΋UzӬ\<&pA>j.s1 S~u-f쨓ITLx`ڏ$c( Ɨ:i/;Ni} "o-t\|R0&2 L=KQzѵv |r/ F,c0k0"\u #-X}jz]۟n!Elr/Ԛ.. 2`3LjhRpZYꍍIf'/ c:\FN6l !X- -zS;్.h6rנ5*ŎQx˝3aW%Nׅ9Yqnbayp=o׷swW݊:~-vsGc,ۋpLj#] "7 55G/@J;"| LSx%i:jQơH'^GQVz!ޭ%o)W" \a,4 B>,G `Conn[y P~;:ﹾpFu}aAYH-EXMB,Omx%3ZxDP}nL;xOjpscnXn{lzH1[?kg G.dcnEmdC#L>^ ErJ$ 63 GB„:I$Q~.zpWsEvaZ.GǤ6TqNGfRli+,"܈T>7~錵cXT n(A4SO+L8+ahPr'$p*A^YV9׫V(˱{f"9~Ŝ!Y^V :q2GDͨ:-̔m . 2dw.p%@J(^vwD{Jt@)BNڎ+W>)\Lԋx=(DQ!ld"[ݼ:A|ַ&ӯa OWW(W1+ºD9㔮=f`aj([<,Ƚv:F>B&8S>xܻgj^82KʉL֡M7+#>H|nlT%Y)ʧSh_Mz5`tۦ g @`0DjzҥJi2YdlFmJҡ-8ATJ pK݊ͺwV ekVXWs^:Q*Z5Vں["մ<$qF2 _\g#,q&'"wi%KStM=T.qW+Xt%b! Qf1o_$t@Q(L51MʁG'_HS {DV_pyY^r""Oѹ/T |"ZYրd hY3gQC%f1~rrxXk :Q/$d䘘Iq\zU .fԱ:]kI|6=D Jb8R9o^}-6~೽cK}#jI/ĢDJҰdd9X>oPpcZG@Q>\V7jo_i{HV] }q֋FYpyZ_p+}GoP_OYPUQNqiqqAyCLDZ䁏Q"e0 [RJO1el!ZNޅmvJխZ/~#n crH\J"&vH1BlM=Ҏȟ/S ZNZN5Qs<~ESV9 6U8Q̤ر\fR =XCfhUs`6(b`@@ Bb"(RI}"O(4J%rdRLD[H#/ PFT#.oH\mkoqL<خ̓aDD;'pnslfc}h"u$Z^)5yP)=Z{ Kϩ lS͆`n#fLЊۑcy9~͇8VF&eby9FcD=rBmvnpIfDSNDL`m(U_rVkDgQ2K֑ Wv5\$e[qun~8I*Vy$̪4@jM^G[n]5~[;E@nJ+ zDTx`+Vt)?ns<;tJ f$HҦwuێ \ wԘr7ѧÇA!%}ᣊ> ZNru1R ׻QEH'QipE_yy{x>&*az4 )%A4L^L1RK-5G/@J;"| LSx/youker-assistant/src/res/manufacturer/RALINK.jpg0000664000175000017500000004757513260315532020605 0ustar fengfengJFIFHH(ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:14 14:01:45]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOB߬=Xfb˭uKO?tΕ[mf;]qNִ{J~ 8B81ׇo|A7h1jf\%q]+~YΝ,E2M^:y]f'87a󽭫D搿&\^0}?Yv 6c1g4TwGWCWUfׅSn5S=~~sTi?:F5C?in6VP.pɭ5OpN _).A8+$x_1weK5[+{[i9y%?[zNOX▋^8l4:A쿪Ejm c\~{6? FC.)Jr KZUz,\ &f;#fZe+]sgsSV۱:+/[c7Ui]3xuY.%n7[-/5RZݭֳoZ?1e"Uz82Ü,<'v=Qժ}_.pɭ5OpN _).A8+$x_1weK5[+{[i9y%?[zNOX▋^8l4:A쿪Ejm c\~{6? FC.)Jr KZUz,\ &f;#fZe+]sgsSV۱:+/[c7Ui]3xuY.%n7[-/5RZݭֳoZ?1e"Uz82Ü,<'v=Qժ}_ 1 93 70 1 72/1 72/1 2 2012-03-14T14:01:45+08:00 2012-03-14T14:01:45+08:00 2012-03-14T14:01:45+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:208f50b3-6d9b-11e1-b399-988578345a81 image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~KIPmǽTW^8\~ީOn΢#w|>g '~e+ou1>_o:v'-O6C4 e!aR]W^-rxK?YIi7%3UqZ[%O$i3D:ԍ$WN ؛q+?̞lm?ôIiꪶ%,cQrc?.$Ml3ZJi8}:?xySye)qI,RIV =!|l- ܸ|f6[_tmqY,tm,D!F_ٽݶD[tiM)Rj]@KՓ[ kGLLTn GB5ݜvvW]ċV!}:fek߷l2%Tq7O4}w[%~9f ]P#K|Xu|Pᨖ2 $6|ܙu~w_"xJpP >wt乚 q$/#H%"@p {q^Tgmt',?|0uo_cr4%No𘍏Y)2KG"W=R8 9vNT"nb2̵UK~cO]At otn}-Yo6=xu+QR¨\@q:;63{Uu^km|^`){GM #CE20P/qe=D3'Ėwclj5:gmwwXWMoVŒ~B:MMzQKdk)1չ,dOGCE;JyX O+eEROͳoq+I6r#$⟙7FXެ̍j}( zmk1S *5[y]smͯO\}Fcppd%#AG&N*&s܆OnA$}>}'n\(' 8෶5JM6Tr*0պ>-:LuV\xB-p}Xn-fHJ@?exV[Kd:I4ϥ$M:G 1K+qEj^IdXc`UZ@TMHlͱ5wtyW-81iӊ]EU))ndA<+b3Ld?hc{W m֔Ofmay䲙љ]Sd1"g1  6}\&wm/)xjTL*jZˬvݤ>Kix"SFty½l/!Y71X^\wƽ-{K-04ݍ}I* '$SWRѝexR>^mIT"eJ5;2BPq'3ɶrFEo-~ڕ0|T Ѫx`W7ϊkf펾ob]ok7S9xܦ?63umy3jԧ#yxC2 '9˔ydwdVP +UaV|*z9 Ý9{j[Չnw&J KB2p444k2φ|{] .J9{O'&58UiQGOGvh"eW~Y}nm2N z@A(['ieDEV8ݼ> {IfNCߖ_>͝Yu_dzҷw6SE7U6+p2u?eZ:JXT5;%w\^&<"A2VE =˘,_6ܭhrPxRi0 j|F;?]vvc+۝g֝y4Uϓd2:} QHx]y(w?#n[͛[rĖPZPP{_߰lܥ˖\5(!I  <]?;'+1}7Oݱu}}]x .^-8zoϣcmz2$tY 1oG"V(V@~6 1\T:0گa[@yaHLj>ޠ~)]~Ȯ\r=mǜyNcʋ%)s|f/OMw3:ga0أ fSf.Bi1S*6`Wmi94k{>4+^_r5\"bEf=9r=Mz?=ֽ ^Y}Sظl >ٴ`r?k/ =*"tc!O'm{}$ԂiUzǝeZj+heR(4#:hJ*zW|;휞S_6:6_16cnw3Fշ:buĐ(C"grm -VP-\O\sou ڙ$R*`%18G?+zq{쏒uw^a#"dirLut8\nUpX^Rl!o$~ g~S?:佰tHZ sٚ Ef豭Ut)5r  E\Λ^Ѳ],єBMԓ<ʻ{8Yv⇪S6Gn7pu[0~ﬧjlm'.3mn|XR>& zH 3 ,Q!;m{庶^PXjV.i\Ҿx){gc&Xa;[9+1>`u?k٧Gb#FVCB/xc_ߞIu5U+Y _Gct^?i1=~o^9~׺SsJ@ }׺袛}~Pghk^V}oҽq1FH%"'+ǯqDE {BOEz\|Q''$:Y5=wO#ou"I֨=:_ʟ.AJyuߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~youker-assistant/src/res/manufacturer/HASEE.jpg0000664000175000017500000000665413260315532020443 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] 1 !qAQ"2Bar$4%5!1AqQaB2 ?&˓'t A7_hYp$pq"߈AVȀac+.PW~<~Q.ZMeɿMFM D/Aw,_8Fvr d@Au1`(+E??(c-&p2&#mb&M{ od\ /|;wU @m˰x"lܪ̽G]GU],Hjii>D`):Fqk6]4j3髟m5UZ)yZAYM>V%WZnGF[6*Dic4M5 9||ajtL ,V,͊Onve )ȧּovWMS\ˇeS|M(TxP#CQ ʬiܜPU\[.]6a Q_fK\uԉb~ܡ@j]*NZS0F&$S`sOoVqNRmoSw'I|F\oiڕz˪z~RA5U-J2d%',fpOgUG =y[C$8Ւ&7S ;M!%}U`P*Oy%L*f!sHbf=`DTzL;8-u῭LY&&NiUCiOGTP֗STLF&A㻩 MkWWuTm+fdQrI7eK˷ζ+uzܻBRK.r:a=Er}N7zrT2b,2VaY& ( UyC`RZƖI),7~V6Bq-ԕpssm\Tnq6_tM;W e4t۟*UUIk -Qrf}~<~PN\6N#V%*R BOVIpug7Gfѯ&q*lCƬPjИT-*u@،]z^-i =w,R}?HjGk?F#7vZuK,@e+%gjTWjb=PYfmvҖu]7,p1'^͒[?*JIpۂwO$L U3 O%?8Yy6u7&MZHau#+o^jW|u~UMiĿ*M9Xjzʚ@F*Jb1ZbUJeL|!|PB DEjNR%ǩ.`B*ժdө$9 9'E3f P8{/lK4oލO#;@96Mg5Wu:^RJ閏¹Z v}%]Qեk,ZA`(,ز+e =P\֗be5\n5kJ\meQQz:IMDÕ̓?,h8bmiݧtyqРm!K(hp{c=u2P5Ӹ6⒕rjK*Y@7k*PL$(a4e`!(*`M!}9yO#ETD)%^1}1iy,42fPG]>#.[H1&Գ~UeŽTP4sC^FZy1\h8ro~Dq& ]÷ .>Q\*Yr]l 6eb< OǏ6EIw 7@bwB X AD~.K(.]a,9.F2rz"e;\ 1;߄mQ| otBDpˁ%ga.B D[ XvDSv?youker-assistant/src/res/manufacturer/ZTE.jpg0000664000175000017500000001215013260315532020244 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]" :!12AQa"q3BV8Ebu(!12A"qQa ?p !BB !H@&45Z7aƳ)϶DSMb -:6'ra KxqG$pA=,|vLY=g&Qm|7UM&K2XBmJI9NHUG9ˡX9G? 70_VmH?rz31:jkY^feႊ!G;7{nXҹYo> )y+a%_~KnzFZrFSd +ߝDv2Smj@OH|Fڨ'<`kt˧;rqLxyM{ncux"0$6o܅#8g |vx>;=k,֫笓6KyhIR֣:OVV%3HTJ)WB I#8#*+O6ӷrL. o~OccH,V|MAS=ۖЍ>L>HZWfje&%K%VP%;qg"&_UM 5[Yju:R\R[hAINˉH1ŸkMtO76w K$#Ǥq[qSiI8#A+/VKʥ54eUŭuKh_WZS) }"@\fnMMY̼dii:}}ZTDMMJKґR>"ٷ vvsہ9yYr}GCsepSyjo?^+ߗlU*AnFY-_uO+FK\EuNSSUToË!\ג68tۧuA9 vھ?&5S~۹`ƮUgIv/M9}Bzzmx~mvó!$6#Q\J:Aii?Y'N7:fٜryJJ^\TmB6W?_ZkɯRO|yX_:Kum9nIn y`*Ooq}--Y or~Mb9PR$u!S~Or? *i7-˵YDXjm6U> #@,V~园5/T\%0hm@(+>ɝ55lZʹ]թ¬deBuҒ(dzf9*OXveFBeX-+n(()eJOVtM:e^e5S,8SN0?.u8 I]/EYrDhHh/ ǪsӬ??ڗ-hִ3M2 h8+QgbpQz]n׍"eE,ݵ /J:&AЃk%J*UoNI4r "Qx#(F]- D5Mc%gd1^ݷʫЩlԔ)Shm/1+vNNz#>{#Шجѩ y~.Y|nӭR8>آ4Im$mh‚r:#u+&[\&ff]yyPPn$)+I Ђ=#෨vMrvH[ų#*QJ".ʻ2Ӳ̸. {4!anVUۖeRNv gLf !BB !Byouker-assistant/src/res/manufacturer/ASUS.jpg0000664000175000017500000000750313260315532020363 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1A !Qq $4Dda2BW#t%նG  1A!QqTa2B$UEbr#34D%e ?4d+RS\ xԈI )ALH (HHcRw")‚L8oT+kX5a\\CIOQrnH.!R U$4&X2 0A" !HT"] DJ0R4]boՅrq5%>@nEɹ HTЙb$5!PwxPR"L()*ÏJҹvIۺV[^-۶Cd] ՎdN9ZG'* ygwq[>l^f[ou MjvK1& cu>@/aU#ϊɘZ%76*EVv@-}Kkn 6wIX 얶@. Sf9 `L;Ʊ)owIIhT列 fλ-Բ<#|+,qx¦]Ի>ō聆&lPI(ʜ(5!*^hsѕѧ.7dyU}2OGgUp"[9GIr4L6e3\WYd@.@8ߘ(f8E@~`IB&AsկS}EmORVh݄ƛF6.BoVɓ,nI>j4^鄊Rf߱峓N &α[`\٪p6hpZtu\9 C\mMLy+f^%wGfi@%'iε83#l y;QLj+-4eRcI?u*?2t/:upvˣ|35!T:ę P hkO`_7U]:wcJ1}g]*^kԯ)[O|?~^_6y;+՗y֧ ^ʖe(*Tulh6˔e W0ŚaaCrIf W;-mɒ'HR)O7Yd6ȡ0I_xަciM-3||EDO?zC{*N%5Ѽݒ]K+.em6L[C([TǍ=w|!)5U 0 T[]ʵ2hjJ'Hn:|[.X(%SZTY=F%XPDLfe~T%:YG^|Ikd W8]SuGbRh->Wgȴj\Ӣ`jUz*p#iU0C{k피YaO1IZIݱqWDbwzpM_fG>OdJǔ0Z?BPL fƺiX&L?+xa` pvυn57U?XSk_5>q7p>VxSl]Z7}|nu{oP*ͤw_"ɿ[*ZJ1;Z 7qđhCYՇ9->Ҕ6~{V]e r-Nk% ]@n_([Z B™"9 !#3[Bf2%B?(y Y[LY4t pifѭ]F*$Laa!\$Y=`ux^e5C ck!sN mx9-2fm$Muc0`{8HZV,Fdz~&//?BYvwz: wyj]t!zw[{WdnF[¤` E Hc! ْGL6 y46j\vhz͋0J}:ԯ~)I^>'>..Քmwcx"mϘ,z[\d&G|Ǩ͢dGVV|vUڞɶ%6joKB|χ{orFVCn"üoϰtZ;,W>W]0z?}XI%˵}ЗO lYD#9?2W<Pr:J!chvl34J%2nֱi7wVj¹\U 7pܐ\CƤ@H hLH e@a@DCE\()H&raSzMi\ZŤY rjJ}T‹rAq 12 ()  I jBrE PR"UɇuM7qrkuf+ˈq)Rw .M AdobedF]    1!B AQq"$a24b%V7!1AQa3"BCq2 ?y;89OTN h0v0v>hA{Cq,{z.^V-u ;8h.^WPܮZN;.NÈe=PA;{-hrl띪ˠ 6 #ӁVR7bC'@zywmdWսv)!Ts B_"cI!ƤQe P#Nb|Y_lyiuoU H^}\6N\<$uF,{ƇVp̾@;mV`_kcҵf7P{gzLwWfar&r[#4fkHFiDb b"R1U/.U˗լB9_ R5JQMI\iO Q5UjڲpQ !V%̠?ߑ*B5Q_Nc:j+B<*M/ęšg:20X䱨/19;YEy{֨&14-G6goSu=35JLz N"T/hE]fݠծp)TJo3ijl1׌w8VV#UI!(zm*>$pcP9)}|Nu"-i jO񘮠aWbG *:$yBbҡڴ2%H%^7}u!,=M3Sc"7ѳR6./@K[U~ɝ%Q*\|͔=+p5b8S ݥks+Cv)puvZ r\.pD9)CoVXo[ްݟSy[jwVWnH&U2ʏ6|x#̢El[gRɱIOu6ڳ}Gk^Rk 3Q|JASb˟?Hxȹh|o1)ޕ9<&PljG c"\r}8ʷTSqrrs**EH)f~4I5Ur?u[b3dJͧ_^ύ{ 珉|3*Q^siw=+p31FFVj^֦mkl@*\.A>LR""v Xuݪa-D;!-5xc"'y2k Ss1G:|s.6+ƝyC+nÊF5&['2gl\Gg f1G"|e"0C`|c ~ۢ366 :q9 VcW9 5 :g8N2`7)LqBC+vY6}^ *[^ͪUN]5BVṺc֎lrK뙺S-yk|RlI$Ҁȉ yS^%jTkFړr0ӯbY4+[GV4P^~ڴj$1 6~!_ uVRT9Ws#sMҦގuWcjvU@i~':qZ6HE>K:]J!–8Q A~/9;s%*'r376**}R-juw|RN~X r̘D@E= =/qt)ofg~ )uh'Fa{|oOȸةg) Q N cyted "p\_19"PQ8kr+צ'CmU`ꉙ͞GUj&37WzZɀF\S!_PJ\b[V#.ԵBIwhZgLFWN l*y }uW&ŷkvhk7ӣbld|$3UB:17 \򫛡7D@ 7~}Hi5WU ı_e3TbUWE_&0Y-r9 ,zq)Eխ1xUi);>u?Lǫe_LU:k7|<HeS0=ȍS&ϓ>G&so^x}pq4\p"ttкbņ>ܧh1 U 9V׺o͌֟yQy`8*,G=gػ?` 7uYuB(J=ig䟸YbnoW:J)Rnj^lz-sdwg˵zV͔s}y~=4rM5NJ:'~&3ɀXALF5n ;k[PZIw*ZRY4YnUµdjvJQC?l"-JˡO@uKcXͰy*KjlG@X?Ɗ"vKO^X)6|Bҁsi(D[Mu@%,܍^CkBj)DQKQڱ`p],^ dɓ:%\S$WE ^49LSuGW{Q&(\ݞiZp۳I;6v!`њʑOwCҨDR$fSP8TU˵Ng;R0ΧLPhgSy)27#1#>&QQLx]w \zvp[A~'apB Oc$Сr)nN㮁 ArR=Wt?youker-assistant/src/res/manufacturer/SOYO.jpg0000664000175000017500000001657513260315532020412 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]      1 !AqB Q"2$&a#4b%3cTdE'7*  !1AQaq"24BRb&r#$ĒD3cd%6( ?y6bI.M6YF َhMϷnq";U&_E3Uq€ k82 +6x{5$Hg!—|(>#ΞDž liSרf_ud`h?lIgCOa ־ag> ^^H4$6mSc'Hx)XF-%X̂^c` @0ҢMM=r=nrqb;r`(B#$p=A;Zp$!UMZQDQvrń(DTF*gbMjrdW.yw}i&M3LTuӥ'P#ÛYk.,J14dNZ8Z'EVHIi~M:ͩr|1M[Z_LKav[- ^GE4B qsW;2kLJqn1z5 QXt=9y&AvZ[  KEs!@FSX^Ieɷ (eJoX)r[x6OS~b+K$^=ьXR BPCfoM`š5&lc]ebQu%H|:opBFv+B(_ARaV@%&zMɚg_,vA/[l%7} h(d!_W@\@P7Wq\&^a lon$Jֹ4mDT"w.9 Ar Z0+DUf~dJD1@Ht wЊj$fg y$ڶ%.S=_rORJl mϵZԢBvO+R+Ss:1WyJƔfy_ -{52W`zv̧ײ f3˓ö́Q0m:]ÌɩZmD[ :;X:F,4 ZXh4Wc '4ok L5,NX&("]-BAeퟅ_ :=8.KIVeͨq)/ę"X;(K`|,RSrO9޽M'?kH̸zav/w[Mw'7奐,:)sbsJ b%j9W&)%b,H HD )S ؚY9Ґu숨%~A,OR!D}S`{_~xYn B#)_G ʩ.a[_WMOqW$j'AVLhm/2S[HYwuhbge #sKXxE28pr.D'y|{/ If_p$fT9!WMY^rKMkE-1ImZd;Hd˩z+IJ)B/`f!N;&k1"(h (JWz;G?™k I}Q?eh^ 44 QɒJ䑦=Gf'k)%n'R~[ji,v6:rִ;˻ 1|O ޶]I ZlillEE[ss,{Y}vzByT= PG/&%ZbX]k)~uCEهam }oY6 67/[Hk]: -f#ƺ8ψ.Dž; ʙŸ6* X䓔҅G!7\lo4s)P E{?~ʶW2wE/@'Õ3+(h>mďvnY;/CE Oi{֪-)EH+,IfSAmJD1˳|y;)7+lPp HfR3ؼ2S0G{KkKi6a0-M=hyϩAMFZ]0Ԕd$Q!RʞQ=!sdReG%ByRV9,S#QH " []5INKg I[-!8 䂋Mc*jFDڵzgP%SQ\jljPJR&WZ,FwNaJ8B(,$O@g8yFsL9x^&2Aa.xqseԲD2P6XIXj#ey4]4vbi5xqRӒGӲ kƤN !+z` QLS&V58PqG+\haiV [@ټ';Eznl_꒫d'Gd3|BUmOv/ 4"^jpFL#XTK5L;9!MT% x=9a5D1C=ĀbIuj(Jt;SFKBJ[eL`H*T}@a rv~2DUu7`SyTɉ`'^{ZZ\m̶JN)_ZJ99VЅHT)yf#/pr~}춌ґXd5_sʛnG\/0^Yvc~b{<;1,/i|?3?{U9X|\x/*Q4'ۼo,ٻߵ{Kv`׻rPjv\'u~Nf?L&/Ż#ѮZC׏qxz=zÂ,7x.7.{kslc+N߷?w+˟16^y>@ٿ!ΰY}s]^zip?+c}}vu:_'@x-x+|Wrow}֊m};uNٿv`g/ܾv`>g"wwٳ>[4kɠOϘ?gOp|i?}uZ4v'.zzX\*kpzrs=~coyouker-assistant/src/res/manufacturer/TOSHIBA.jpg0000664000175000017500000001156213260315532020701 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! AQq2Ba"RS4FW   !1AQaq"2BR r%b34DTU ?&q_u!7A5QWAQR&T 0I~n^aJ.aK n" =hS75i4@ɯ 򨫠 )xA^ު~AuފS$PsT7CE˯0C07BJrRL4SUbHaMyTUa} oU? oE)_9*טR@R񂛡Ht`|)G)T 4mPԐj%moLO_XKVssrg(Gi 8ٰ}RpJ#- Z̯R 2F\Ӈ?gEkk??mmwEQI25نAEmGKcEt[LIߩK39Av)D[ci:;XiEQfͳs V 4diFhLvTSt7~PߌkT=B`-_3~LAXY4Q2wOs)sK`J;&DbbOލmr_0~}$.R(&<ԅZ*\DMY$(3Z5e |$~ƝmO;Ks|YܒWh)*|نTݶ>\jT]-'[É@'84G2_d$a vr?͞`ɟY]s|sBւSWq*P0v{v( |SƷLU+:+\YL'!*Tp/?Qibdq)#0:$:\RܢP9&mԕA RG%w+ z2׷X%R% +E {0(0֡AgI߿s IHy >&=t̮(=JR0 ^Hإ'8f}ߖHUNS#%1ȠSoE;pZGeI>/)n[μ~U%R`MMh@)"Cfe?'!ly'UgP'_z7%mYo Mr* aJuҐ2Mf|?hO*U Q|h|Knq&[,hQ{5G/a36,҂,JVA DA]ùu`tV;6Q@ 2[t|_lm :wAUMJX+SRJGhx7_M|=Cgs؆bGU(CHj]_svFtǒ42UN"+ʽ->)zVJ ya8z9zMV+Q"ihYbx4}ޏ8R^ @ryYVpzu}9qH9Nf R HH왱2[n=ܤ:e}w)H^q%q"6"k#zhm E <BzjZ:Ԍj)"SZ}fk6M7܌ʊ*g- G Bю3^*OQnϪ'T'AhT`Ytو;Vɷ)6g¹"X#lי#mNȒ~ZrOo7/pQV}#Lj7 avْ{l:-o&MU+k:7RZP P٥&g|*Sv6@3˜5ms*"ҘߌD*7lԝUu,&\ >S1ԝunfTj$;YR*y/d0Ȅ6 f Z>*1TjiW_u!7A5QWAQR&T 0I~n^aJ.aK n" =hS75i4@ɯ 򨫠 )xA^ު~AuފS$PsT7CE˯0C07BJrRL4SUbHaMyTUa} oU? oE)_9*טR@R񂛡Ht`|)G)T youker-assistant/src/res/manufacturer/PHILIPS.jpg0000664000175000017500000000752013260315532020717 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1 !q AQ2B"34#ar$Tu&w891A!a"BQq2R3 ?&ɏ&;J&#&<= .!e4gaXK"K #X sA])Fȼ [&p2cIұDIADItBDKpAe~ExAVȀV/.Wx}Q/Ʉw 1;c4Qb T%6,jOx崤UHNZ;-R2:,T]َf"lO}P:7_vҽ>vd/I csԆRZbj5Sw7g#&߷\).`]iy^bs3UC)O`|)ESfȄU10-7NY(mIEQ7NHוLZ*ީY+6Qd"^ebbXh\wgNY]3lJtk\rs@ᬖQx6HUiyz#$͔pgm*8Zn1e.9%$@ iW*}[zu n\L >ABIkr ZWuVg Tu9U;YB";8U z~c6z]^{ϋgއ{(~u:GVJ~1Rn] xL/Ul2Q)T\ 3v.//{?ǡWJ]ȈvөNztNrDTNnD{:W_JY2 #7 1ữQܛ$#pUpRʪ<י&ۮ(ly6}d/Iqf^wci_U.=U]촒L8UBL-ͮ̊&a$tkdTՙTȋr9.voAJ8FrOm\eU0Hnvő\ cRoŔr4<*5\* )dQ4$> mtS4< -Tҷ_52?V{|& U7^U+հ')AO=C5MNd`*g'*xERl&( MOGӴ6دbl^2n~JG;]IF_xgډE1:imbgL"'>&\LhDm-jȮwZJ2#ZUr)rvs5a;b%J?`Orvd/Gye쿠K'J(e*ijpVrݘNt7|:R%Hm{,R0 2[.1(AA$L[&yXjZGZơdu.8XԈ+d$eP6NTsϙblZށ0F\֧*tJPkדteNH44%愈.y~"HZ4~y %Chk:Ա(*oH[ZJRz]2;$LЖ=QIŒڴrwz uaf8҂6JjnvʾH iis{SK'3m6v#k4}r(Zy};y4%d- cIgI@ 3zqEQ}m>vߦ~7-n+ե6WZ3< B(FY̅޾I 6 JV!AYIAjŻ3$5dd.0]ggI8'$~ds) gdBQc5RE锄WyCLjjm6,X.S<3&JTgQv{t8M.JPq(dv*Z;䯁<ϺK?焻{t1<{{Gyɏ&;J&#&<= .!e4gaXK"K #X sA])Fȼ [&p2cIұDIADItBDKpAe~ExAVȀV/.Wx}Q/Ʉw 1;c4Qb AdobedF]     1! AqQ"2Bw8R4v9 a#$%&:J  !1AQaq" 2Bt$u6v789Rrs53S4DTGI ?M1q_V0Mz0<0MGс _/ a^l O.!A0`xç(`4„2@>('|QLgF_V0Mz0<0MGс _/ b:! vܕE+LXyYі 4;N6 Լ MK#;,k=+ cwB/uX0׊"ӪE?>:V@1Qyi꘢)S@Jbf10&bb9.!A0`xç(`4„2@>('|QLgF_V0Mz0<Ze9 R9: #&I!1[ߥ;ՇRW5P7e@6C<DZDLp8(.Fφ"ڏ[1O(| 'c 3:+b;k֛E\4VP:kjPTG! WT1I wme3(\,t|ET_?϶!y%ikR6&Y~Q5ܛkm՜h@aL/5M\58ru(tTڤbjtEE&8ɿOs5V-23&C;;g(Fj]/\m %H)I6[ԯ[7t2ZJ-.Էy-|vVgdP PJuhWL 0y5Jsۘ]\ri/|+u޹u.[[˰K!( LscNw˙=ҫ 2cnJ>kǕSxl/.hƓ!26e/cz e/[;Hö~W n7 ai륉F=[ktTC)hd\pLɕoVbgz3n4LL!JА]*NM(weHyg JkU<8?mvzilݮCvtM^I PJĤ)!3mJxÞ1<;u*ϴvAX;|L)~^q~ݿˏ_hS>Mz鼿)a9[EB!}xKT$rpEftb“κ daH5 L a+ww32 3VW} 2 tVdVW#FXm۝\6nng(,Z8g!^43 sŇe ]Q-' Ϸnu-_Azwkm*PZnz=A!M4fR3;Wg; eTvGlks{urAmXӛ/&<_ߺ~OW括y_#c7lo}_?sDTvFjz Rz^,3 5 Q8 D y(ǡ9{'?~=kMQݶQJf "%6[5%U%,cu݃^}W7d*6MԫUZ=xl֦t*̐Ysomo+3[URRfteԒdmo{rF kgIĤ+x-ND9#n켥7 tƉZn2F2Oͺ7̿\o..RRS!!$T Xv7̣ۤw [5Wyaoj4UaC/BbHq\i|Fw9zZ.7ZjmBےYZ9r{c覜V׫ 4jmĸU\LзNe '!2 g(J[Sۅ;K1-:2*xdCv]Nbe}%S>|g?n^|;B}b}r;cO)cy+*k!w=$yBlfL^WD((P2ԫH2M2ݬG!N(NSۑ՜9۫3I 5,&e3# 9 GH cZ˸c:T@W jW:uG<>8ke%ÖSqc]C^65WYrfjN|1"R 姰w .ZѠQ)R)kK T%A23\Օ4{SwAlʖÇ()M}BI˙#2vf }-D.oRT Ιkz:&1!8Ij!h<n`<0-/t8D5T$02$AQS!-ҟ6gv䎔h_Mmkc+m^:@~E\̓1XyMߵΠu@.V_GĻsi4t`95` Cף YC}q8|R ,Y+^--љr]jʔҥNu֫T'91۵nd%;cmx޵r:pHOT_(3Q2g('|QLgF_V0Mz0<0MGс _/ a^l O.!A0`xç(`4„2@>('|Qyouker-assistant/src/res/manufacturer/B-LINK.jpg0000664000175000017500000001102213260315532020513 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!AqQ2B a"$#3C4%v9 !1AQaq"2B#3$RcT ?&X&B *j=Ը"Mz{(#PJQ$0snL.”\bےJ ;”zS)> *U@ɯ7kʣE u.^):vRpI/*)˯0&.(Ң9tO¦)J&yP*rk) H&K)ק? AuK? r)EɆ)K- 4N]<)G2oR[Ϊ6ϷL -<[\^V9s`X2ӔgT7-X@v"WJd3_C\b- Bv<фpEYTǜ}1b(6_l73[% V1.x AݭQES+C6Fp]Kq"Vv[4u$i .'K `ΰĆ4iwqm7nTg>@^ӾPŞ̵ۡJ/f^[qWjInM6Fav7G%wO*WjRY2̙k<5>Ӛ$AXq|?pZ9)d|'*0d6]H VصssUnuku67.~}XZ"qU{iδۭhIY2rDZ蹰o!kk[ ? ɛwh1kKcxMPS#R(JP3(uQ/ZwtPdwt]c8qEngnmBUN9G  #"*lN *Xs()mP F؞Ս͌:>nur5oL[Vsd NN.aG+п¶W /*?*_"/\v.Kn}S?e$4CAql=vG7JM:gʱ~q|p/WҘs%4!2 neVwش6Һ3%[IM}.rf_Rk#Ka㏼e Ļ93{: /XX&?]FW`oF x\Bҫtvp%*$6j"dÐݜEdL9]U2Svp%E٪ j4V17'!w&HB)$V="?wDvF?x@J!{$MN_p&,rd"C}js集oTN"Fƹkre-r.eR֫ > }ipU^ :]${6=Fj[.TH7F8Kl4 2F>E0<0B)1vM @}+kj28\ik1+%EhJfY=G\N>K.W*Uү*NM}ԅ1$^Ur){pE PGH.ӲI~`PܙN]y(0 )qE$)ˠw(R}<1MUi4ʁS_u!Lo וG\A5\H&=R t(_9T7&S^aJ.L1H \QmErJ=)O?LSzZM*THSA5Q"MGR Oe~;)J8$~ ɔטR R[r@iQArpxRJe'Sޥyouker-assistant/src/res/manufacturer/KINGSTEK.jpg0000664000175000017500000001202213260315532021017 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 q!A$Q"2BS4Rr#DT% dE67  1!AQa2RqB4T"r$dU#3Cc ?>?a>lHbǓ P!30C^)PfCp`zs )81V -`e!8=XR ylJtxP0z3A3ĉ(y0?/41Na˜5i7>p“a . X9Յ.pgĬ7@ҝ@7pl]VJfG,r?l֓JQ2:]>YN)le-Mn8XҲ(̚4#2q4kqpzVrem :f-7[.9Hn=xxprNSf3O]q5rXźRc6J*ǾixWH԰9My%mp?D2r0T815w:;\Ig"5QRT4h 1,oqN7k&7 'xtawBʊnJ^lWGJ\lp iq!i1ۚy9]E,dTma q_i13˖khnM/gn]?XG!7z~|[x1NY]dg>nhT0mjo*_P*&i#=C Jƥl7M p_?Vp[lJ8eYc판dMd T.D-&m*Ӵth,&wIe+aU JY/kzי!d>~HqGhP#UDNo"*weHL ,qV[Fd Pv'HTv`X(r6 +L`~'DRYUTΧ %4lōwvW|hvhM $11Muw6s=ea;6kYSCh3#ye=Z#9~2O ߷-9Y1<^-~'ۅʠ"@,$SNt7' uroV &ߵ}Zj`6WIrL0[JCuE66[9=<X)|g%5 B3f5gȟ5PXŹe2)yYI!Γ2Wmհ "VKp@vPM8au[r7&vJYU~ M5e64Yɤ;|-V0ˬ&v${> N%KM%8^t}< tN=4!@ç)Aqw}sh.i#<jshnXTPN߷_dXrcȋW1333"LCѿ&'pyZ﹊{ie;za;KѲi8(C4g@6Vvp<`hN!ABp8qO*8z/ [ē k $8Al[R@[Il*k-13^ {DjGGa"1)Xily=eWPZY%RޑXZEw7-nYa- (ljrlz3[? )"ux`8o`%|qUNd;~MT2UƐf1ơ5%QWMM$ YeT,A$"bDi2_n+leZT{1?6z,CUqYu2˭MUMF"2 䕝ɤx_yd8btN$-܋3hV2kJ lO~R؍ړLs'" m+kd8$o%2ຌVcow{πL>=u/4{a=wؽ;Wnnճx|q53·55ssC+<7aOktFX0z3A3ĉ(y0?/41Na˜5i7>p“a . X9Յ.pgĬ7@h?a>lHbǓ P!30C^)PfCp`zs )81V -`e!8=XR ylJtxP0z3A3ĉ(y0?/41Na˜5i7>p“a . X9Յ.pgĬ7@youker-assistant/src/res/manufacturer/YESTON.jpg0000664000175000017500000000746013260315532020633 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] 1q !AQ2B"$a4D% !1AQaqB"2#34d ?&ZM~T1H&U$R RA5𠏕 Ou)GDϲer)D RTi@iQA%rAJ;S*~<5MܲiWM~T1H&U$R RA5𠏕 Ou)GDϲer)D RTi@iQA%rAJ;S*~<5MܲiWM~T1H&U$R RA5𠏕 Ou)GDϲer)D RTi@iQA%rAJ;S*~<5MܲiWM~T1H&U$R Rd,v3ǚ9ior.,_y:b F4`#S&Xj-޳rW vrˆq)!2D1M/*")LsLa:xR&.$ҢJ:vTy*jeү*|ztt<6I9fOIyceb뢌` w$m!RO&)Hb=[nՌqkH.Ċ%έ&t 9[ 5p4ȱ20uUa9o;SV|v35f<ЕA`UqLK18?T w|N" ,eA`7G_ d9K0_<_Y|kgٹ,!-K*Lvn;e Ӑg6^)Ubq:0"5ԎܟN Wv 8ɵw9}6V~Z2ՙ0@gZ^>Iu;jcgX p^2ҳ»o7RɥnV3wnwńwisW=܆NǍ|- eIxǿӍě KjFF^T|ai31Ʊ黬Ɛs~Nݟ.w&o"A9N0@z9e]-K*t:U"!DxJkQv1Z#iqWya+ÍH`KPD[B ApmjُI^/9C;l"` -e8F[(I  r$[ !\w ܃ˁ@{?vw̝Umo6~h#}ٻQaA˹ki̶oY4W&*B$^U*)ztE PGʐ]CI~P2uIK4 4t?JYi4ʁW&*B$^U*)ztE PGʐ]CI~P2uIK4 4t?JYi4ʁW&*B$^U*)ztE PGʐ]CI~P2uIK4 4t?J_youker-assistant/src/res/manufacturer/COLORFUL.jpg0000664000175000017500000001763513260315532021044 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1$ AQ#Faq"3CT 2S4t%V7BRrcDd5Ue&68 !1AQ"aq$2T BR4Dt%r#3s5U6FCE&f78 ?H0a=;ajj/;!{ìy`'´ܷQb{G )k }\u]FŐ=۔Dtai5d=v` r x|Р=~VOTpE`H~ptE`9{c7D+ߏ0;B'V{Nt@:=2YgU"ne8 &~NHvi黚Ъ"m3̏DhT{{%Qk>`oJed]'s,Rވ?So:zcS'z _8A*:Kg^}1]KHʏRt:`ڇS)H9g??Kr%0 MpjX:eLk;z-LLZ,nfUpPPqREI:TɵwBX6(8VMI8WlάDzZ4C\)bx$UTvbcI6WƘ5FʌdkA2>b1͙S3J-dr| .]127^yƴ}dĖ;z:1d?:g2'U*UzbC. r]'($t-蚾F_T5tҚl &Sq"ɍ R.A0zPf߁(}.7}q]&\};+pRg[BJٻ ;jI. HZkhjc{mhSUڌsA?$UPFyD^򧩨i,'RJ^ΣMvͬӽa2:%aNPSmZΚVuVcYYrL/ջ +bg=m$m11Ueo44u꣸ M(@07÷ӫYN8K#(jTxޥwiT4ŻwmMی p}v :FWj1`hԀ^4hQƞ`4S1Df$nt=(Jv )e`im_5{};ݞɃ)l#eM\;OUQyfTnUN2pWsl[Ҹĭu&\❵-- .e&''٭V99zkoJd4 jO B(DfpafatM:+?M, -֟NfԤ5hKJX%-@̎ziIr"b;?0SKYuJY(U%O*C)nv1#=r)#̎a,z^lZT7wM^U34'> 86Rr!R-F^u>H}0s6dj/E*Jx2)Pyʜpjpi'DiSZb{3j#dץrbD UR>Vr(]VW,$iRz56ۮ2xP ,Z{G`C-9'J[A)WXLK zDӞm*7OwwS MDžjU/iA-) )Y 6iRaSH !8jBp-ҬHѥӫy|,fH[MK9<8TTA Ȯ?ph#]{r&5n'u eO+q\odfSn~Yg:#|8St3v6nf c%RrAU-]ͻ4 &@4˧jZء9Wms!Xn'޳UK;]/*B,[\HsVwNSPfݒ z&8JDح%h$dg~/W8u"bU_5dd ܷ댝޵pt$o`$1'"` p&=JWݠP*WEM95YKuM+$-å$7DA= ȩ$$KJo,9vЬ"NҒl*$ʉݩ@umÏUE.m$d3-Ϡ/UiO%X&\J#ueE 9s(ϭFe ^uع;% O"qPӺ\3 "B,LpѣZBU)(@|qn9|# ,E5UqӫmR*3RTV3Iki D#Q3∝eÆr)#L 'tq!_^uy6aW[.h,ޒԎt])C*HkƲj5B֖Ko5O>.A2d)Hh@g]Lu\LPdN xyAY-5m}LMPm6΢8~KJb@$LD LIה+I6Z.:=&ͤ|ez{*lM3+!ÿ8t͐,Yo-I-]/>9隥^NF]FpLsۭOPdGTVʁ* o7jFmӽ.'u-?itDN$#>S,[ӘLjnNkJjZ[֙Il i= ٷ RD=iS/**ziY n Z* 'EL=bTra">Ͻ &Qm BL^e ̿i^ u,U  6YYXWXݧ} 6faǬu< shڢ[a<CS *ȦS+Pq=AZT43L99<<QDYrq;Cf⽋7mmjl٫ξHjd9 CS3G@]Zh-5f nRx!CtӍց`yDjf{vWm5Ev""+þ34Zh0#vbOL":%EzCrWVNVvZ!UEJ v5F0$pZ=sYnp%pfV0̚"G!b2?ZF8qͣg3?SkюE"sjlቪW!1n;?z%J)OdmuͧVR I1t|[TRr)l E%K7VtbiubΡuzՕ&>;Ni#P$U/Ĉ B7&OKv7JZ0Sz]zw7#i;.r%-kcP!ZG}SQ_*$N[(ҙ-+Z{ː5k)lvcΔ]j&o| ڻMFLڻkmds~K!Ӫ(uڬ#lG&Xt'a$=N3jџ hLWϡۅe$L5*J ~k4kg呎;s9S1s|߃ UM"ꏓuէ5=THl ҋPjbZŋf(ƓBȏ^:mT^˧`2xaUhQu2;mL^yݜ紘Dx:rNqϑ^|?7ݼW}ϳe_DZ_Ґ|/ÍGD.cݎG 5iIPHR×2ŝ7=i}z l}\>Zwj˧g7c[mz lև+ew{;HGT.gv>zG7cx{;HS>Z.~8t~'`O4`gHvw){5GpEe+<rrZy}7Љv5})k>5;ka˼ m\/Y>4}Lѯ=ѩyŌw{FFaz9,vhсtg?IZWґ4=CW{-ޔ;aʪ:P"PHq{&KwHk-xua?h]aq}Ui\' ^QC}Yʼn"Q0<Da)!zx48PnP0CNج06d}A8{c#!\dd8FB~youker-assistant/src/res/manufacturer/AMD.jpg0000664000175000017500000000742213260315532020211 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 Q !Aq2Ba"$C%1A!QaBq"2brD ?L9&* NhA3Yt  _Yh$pqrr( T@Qmʰ">E}SZLeɟʃLV]"&cB&} ouZ /|+\ *BUj[d 21HG񀡄J~<~j.*8rg>H (Т n.aEK !.|BJ8ScZvt-1)&uDۺ{ZLg!zuA<5D淂e`j-̚&KrRRۚmmՁFHvC2N[tx#lҽo_w?ͯe\"|0gJZ2q4iP͇'*x j5OnaQ6Yci]9>RĚI+Y JϮJA9+ʡv~ ᬁwC-Rla S`SM\\ `~ps"z_fnq+mz(vEp 8&㿋?B~6c> |efi7 MWvƶWkʢ\}tJ0Э; u*RֆqŸ=`]¼_WlU9(Z=5?A;ZLgM]0~dQVknڒ_dv}JȽ/ qB(RjV "]iۧn[p5c[lvݽ];=dUrpE TTWAN[&Jq @ [Jȹ[-:_#^&uB}FHX͕nʒ".(}$gOW`t-i#o&CmlwDI39-zw-чZpHN2U bɵz _1eO%lV_ԃ*Z 0!1jTf-zC20TT(DxPS_S=G)/T-]]M=2%ǜQ2"l |iY7%ìḿ3wI vJ 4>\[-:5y"6 %V8K[# OA`s=ە1wyd.?!1,^؟f3+0/& Gcӧӷr^=<\}i')xv`gyؐܘ%:^E"4:0?cxҿNcrMGHpwzVe{rtXd:3AncENB/5Tʒ FX%֥kU?eLecӅKv,Ӫp(T;5ݽ9]B-DD51D#n*5 S/o3!yG ԋ_'JoKHCzx ̏U|ho^8ֺym}zO.ԚpJ'd)`?x]q&όRʓGcjcNDXbìSy10{}7{ ɨJO i,:3M;Cut.G$7#̙ٚO'*1XC`ooqk8ʧ,ckƟݕG;ri4s?JSؽ-&Up2A&|+.D1QD> \÷->B.\!* 5--MǸ<("~aR3->F-&U\19υe(f? 4(gۺ|" vQe±E˟%QFB* OǏҲ1i2し&* NhA3Yt  _Yh$pqrr( T@Qmʰ">E}Syouker-assistant/src/res/manufacturer/ECS.jpg0000664000175000017500000001037113260315532020217 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1! QqSXAa$2B34TH"#C%RrsDt5 !1AQUaTq"B$4D2R% ?Rİ!rAt9asFu}\m7EsQ]]Uk,Ԑ,QZSLIH\OI>WVDq0<-O |D?o6FIp'4.tDcx[_2K ͅcln~e,Lr2LL`re#}YW[@E8ܱGr -bkwo&rݛLS;%;ɗ~o7#n44N[ iʤO1}V%H׍2TO7Slq8R%^tP=<ؽSlqm.{)qz.uLp68RW /)^P}>ؽSlq6{)wz@J׽3/OV/s+Lh+MJzޛ|EB.[ZcGZmjS+j p6|eiݩO[vi~1V+s+Lh;M^JzޫUD[ZcG}kS } b=KƎ3֧;N^M8zeigiݭg\K*/,p .8ZB֍CΊ.+@I6h ۅah 8jqK5R .Tn}dԨXF1&)#FfPY}3OR {P2g\K%-ø 2Y9^KWZ\ԔohNCC<+(h0c֩DAQg5H_H9}kFQ2Q`1hF*0 X53g_cXY N&ceﱬv@ q\ŝa<-h^(-Er]z~EboQFVq8W@J4Ĝl]|UmMQ[>eִec.H)]1_SuWܙdK.P 3/Sqh/~z\/X)].N.#%7*Rf:U,~j3Xd4E(Hu< ʦ*Gol\pJ@>ъ[qXWV16j)ee1h%ӅqneByul)"LeeM.nݎ2b*"efM|"=prsTs0&"YD@?IJ9k:%(I94ˆ@w=y?SC^5V1L;1I4) fUG!Bqx,fXj_/kO]u:P)0"M|hPi@B%1-(RTu^V*^Ou7܉giD>Ya4E-t8M7s5uVz?Ճf:($n Ta<_*R@ZItɢRP/L%Tj&502OBJC1q8Dt^D,؛(oֱ>SZ>c X,et򡩋H2~ђecmu(w!;$ʭwPLH۴9aT Fed'fQ$qx4W)c]^^۽rxͨn\I[q'Lf3w/P~f\ ~p'0lZsڍ\3ncN{Qp4ANA/2ӞjGBp4Qp@p 2 Ew,2nQ8r| 5Ck!.hI=g3JiX5Bk#.I]6W^>+/5`lӺ^&֎ZqecV O˼k.{ץGK-j|R6]/ޓO-w]zTtY|M1{0PΓW-7]zTWl&ՃSvwL43:M6W^+^V_Lj]euwL4/]j+J/+/5>=f =| ץGJ헔Yg0 =| ץGJ헔6r 0Юu{l*]+^P|SnioW Ar| ץOv\kۃ7k겎 Q[L9h4M06'6wJw. 0n*Gvi icݰ7?HbKVcg, Q[L9h4M06'6wJw. 0n*Gvi icݰ7?HbKyouker-assistant/src/res/manufacturer/SAMSUNG.jpg0000664000175000017500000001115213260315532020720 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !q2AQaB$ "3#4%5RcDd6H !1AQaq2"BR3$4%b#Sd5U ?>LWy3@F=rtę4 gO%< z܉\08mɀByr`@Hd,Qw(LrQQbLBuf<8'LI?0@&eT#r$ys"C@❷&(I 9;Q"{}Eܢ2G?DDo 3 'LI@}T1@)DzRkש%4˥RIIqB ^D7_$]'U6-n=Hfں.-ʋm4 +D}.urm@"IRGm i']}j_tjbR6Nm7i>q6uy>(|]4Bߵr&5j3ب49ĜG:629ny=MĖTCjW5QHWF+6>)ٹm.-vTrqY3߭Hԋg,IZ0|=u,a Wu ɹlܲ2RI5Za@}O 0;Rpm'U*^)2?y֝{}S[&Q9@(41 fp s EM+8d>!:\ekVkTLlTj[EZ奣9s]',Q!L9RO.VIf:fmW_m>BnK#-/\<\bb[Z|ax6SRm}0_&WTƕܫ@Jo  nD1X/"yȟڋd66Z֑ uWNT'2GݐGZ̋k^W1.4qWu3JGtVڕDiz(BGIYGuIM/&X9Mz.q銬$QwV\[* N`EjWkxӍuZa SJ&G6lYhPH8C7C8rZxӵȘIXl%ؚ""pڒSs>KQ&rG4!03zr'Az]OsjU\B8ZVBJv0"/U &TD9LSRA^4ܜ>kddY"|yeIW30vmro8X@tzS~UMV֬SAH)4e䉎W~QUMxAvfNJU|FpÚh,T  ->hJkm䇎nzڦ|3ӑq Lk nDÄ5##%j0l\ɡ*Kѻ: [`h& 7eUqt@p3ƞ7u)=B"-Y(5+1b3C9C. Zl2M ]Z]u3@@ U\ى" k;Pֵu -Omʝ8]} 1}AFhpRQ(d q'چsM>YNCá1h59ǍҬ67v+][b2ie忄|;04 '((}d73Y}HNJ=DlfZ"H".8*졳T ſPJZ:Q~[2E2z7VWXe+Dt[:]eG}?$&_] ^BI~S0_Jϊ;۹$%fdԩ}8ޫ-_f2dhAjmWSRd&?O+RjؤsmB꽊,/8$m>r;4c&s &"00oOh@@ i鑑Pƣnek:V7g"dD<Rc㺓GT:~_.IhK KmDeoŏkJV-lTtZy ⱺ2o'ƹjZ8-f[s\|qXuUN[27ːs+jʉBrd'(V"^Nݍ47ҡ4nUth.mVьi)̳}#01h9O4* 5If4ȣ?Ӝw(|&F/)*ŹJK8iEfl9Ø*>D>35"0ހ֔BS OmשJ^lJ eqSj;b;\Cj2ZVnf=Vq= Fue6Iaj#"ώ1L׫q3o<>rBypM`Y!Ȇ);nLP#ːsvDv!bEe&~gN1:bLr9ҵC<|MΕ+NSǰ5sr6Ӄ _ں`<f_[7b^s<Ko˻M`@!Z܏4wݶ-_Zi!gu:PPH3C,zk;?meb͕;.'-d4I1'GfzsT9nx֕Xe'DFjҷא8>ӈd%QNTEkB]M[t 7:V|ݮzٟ^gZ1q)eU1·]W"qrȼˏ_8>gg>6~AڿחV}u $o*#.b:l85Ly޵ZZzv w=WZ8+*y?~/Oj$Y/D%B6.aR.REâno\0WzDaqI@0F*J\$~" :߯gE]Ċ .*"tkd2jI3swL?]j WaEl$6T&nUEE+RQRG1)Hl oN20#kr}AK$DƫJvR~ %qԳ/E=j?u>(XFn ZXM˦ةmTLkWڌUg8Ή䮶ϙ:ㆪDDʪJa]KG&,}Ωgķ= VjE4Ov~|/q/̴2oM6̇6W"2taTsg-4M*l :*[?Ӈ- Ns/t=AC2L7DI UO-CJ,FmGD`ԛaa3 3& .z3ԙ;)=9W.:n-p·&3rFub;A}IUy9[r%4*3x۬sU#cLp HUW_Yj\wj3:Fp۽Y 8o$J )oZ$c\,->{&DZJ_}KC淚*o%>Pe֍h*'ԩZ TCsWe.Ҏ|J:CHEQ gJNDyDUmugF᪑**:*K8nW,ɇ}ڪcĵ=4%P]Y[mTqC";)_%rUMn+ yg;kR O8A|Qzv+N1O8A|Qzv+N1O8A|Qzv)4/j/Y58`Ɲ AdobedF]    !1 AQq"Ba2#$5w8RS4%Uu6  !1AQaq"2B5r#$4TE7R3Ddt%U6' ?y7c˓т13oEs 8&`Y7ux|)aKA̹w .c ,0],0v1\˗pzՂ3)1XݍVv2.uӝl+rhXkdT E]T1P-ARIu5d =N[TMJ[җF- :aS JX~uheLG?dz޺̔Ȓq6*,Ί@_5<=<tx? bq[MK 5YARŲ>YA[Q=jr C S Gw>U* -8&9zl3#H۩D6Do;xSgPjˇ;.e^@s⿭XU ˟ԗs~+X֟ρZyw[4e[lnjesR(9jY#"ζ>nh߈}?Ü9ӮޘZZP +T+4gmWɪ>Nm{3U4.e.C1W&ĕ4 'gV5Џd.)hiRЍ5xnd(& $drvYٗh(ǩɠF>;Dg[Euujބ\3J5ycfl#wXRNRv%FgPZzL2.w%l*jYRԎ*6S)`ØyG`Q5zHs?fyK2m#Q =q2f(!|~ O8Ea gYǹDvb%M' VxP^pw[z}Y2:vT};@/mOgy1n}9#bWM̒\c2 C};g=\iQ#A 1 =6<olm M4{ڊnUm`*-;,bkL[̝D͹4NR ^өQ),Aϛ 7]7Ĉu^]/1DKv^`rP˷kegoH;ew1}o-<~?bS7f5K_tDt712o5ZM\ c~ul8PZ=cnÊ@S5 rĬU9W3;RRxPoGo\⫭Ss%KHJXythjsLϽJ<_h #  w0Ȉ̌T M >|רH*WD ZYTdE*dPAh5g}uLyQPH`:65#%W>^qXېc| -exCP+ ^E :pWOM)\-=XɃGlvJxbrFӕSzDqJMuJ\ 7d`́UΌn)H"m}_cB!2u@kzG`(ǍH$uYk&]+Wau^U;q+V_0D`A2].@e@pj/YիDmѷ;gV?i`^;2!26:ITr4 LQ{9N!C_|g;7>O3vuWa};rPh=/Shd(իO!0D7fPb6s5Q)q1-BH ]UVN.ERqYAQXҤbczpgn{GRy$;Kx{ղǭ.+-e{΢|gPlZjlXQpN&D &`?1%h~P&G 9ƞ!eՏS. AyoToمX{&.dKI.zl]V0"̤EJTM Dy89\t[*QݍؕZuG]!g_,č9Daww<ݳfelmwM68[ -V~nm}˺gDѶNm1BB12rq*"ˈaiRR=qqO%2V}8*Nt6<ßY̘=m )nM`I-Zibj:Jk1F&BPDN#d"Uń$$ ٩8j&ԗM0ŒcQ`o7۰xN~=Yl 0,k:i$M#t`S, MUZc<"HC0=cyzW~1 kKu.wEɼMG"XyZ-Yr\T:O HXFޘSdŴ)hΞ.'C2y<ßSÅk ] 6nk0 '==o;&.ds.Se+{)d!\̕==/V+,$KT̴L&b .ޞZ-e b5ʏU0Pa.qZ}sXV[Njj'ʮة)ՍkVcA&2J)T" #5M1&0p[tD/17 @ {ڴij+y+#z:٫]MAUǷt5ycrDȸ I83z,NJc ǣf).nΰ9y;EfvRRMkW*r2qCՐ8qb}ڟvsO)%bz@)d ΋lLPϲ]1 Wy;C|/$F >P6c)k_vsj40H$n7ypzՆ-4oi7as ,7!c8&dW0oF ̀aYwɂ ÷Ռ702(4-e`-{dˆ_?ׂB5=pzՌm{},nyouker-assistant/src/res/manufacturer/COMEON.jpg0000664000175000017500000001735013260315532020571 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]      !1 AQqB$a"Xx2r#%789  !1AQa"qB 2$47t%uwbr#CDdU8 ?!O GzCp}se4,{8lxW뗹YQEMq1Xaϒ] }j+]Xl&%(J' Prux4;:Uyr%GlLD q?Ӿ}#Z]f[ΥPkwMjƧ՟ijj!kW" SEljQJmvܖp:׌W3S(8$Q°աm:㫶?V所'c{G[}XR$&R JP0*8\^FѦmd*"SIv]ܘfHND&IRl SӰos[-;zp:wJLq{fVon,Mӷ8<5D-b(ȸ븚 ҚƖ[]}dӹy[Ҩ8+omDyk}n{Ut`" ,"30 IٛJgOn-q'QeNj8 $A"ZI '>dę%5=³ob>W߹êQ >}\\Qc1;ggO@4NU0ä~#8`/<akKχ40tF5YmœP0G܂b3Rkp"HfTU#%MvWڑߐl+p)wÁtGm/EJYۋ]E E J9L!<^ℰpˑ% nڝ$6w$gz/ BkFr{P. c(DfR%)b]]A}-ƅlUp}saBk|6̥W`We\1CxW] 1U6ӑh*N濊4pnUTu>e-c?61xF'?w}ߎ9DGj)UʐJ4SDcq2_c{/G4O5)Kkc}#JybVj;jki{5F:QX<$! D5er3K5ؔʀL 5 @%PP/(Mgܯh r_[Hu_< R)-/6LTL.Zm[Nԫd!@'$!,gO$ٗ՘-ˠVި춛SLPLr8bbhc=Mɍ+Υ I|gT,)Y+ۧ[ONHv5:k{w[mʳ2L@`e,YR5ۻ[5T05vV$Z%AP5U.G>#bTAQzGզq..C""z`0l$d"( HVog>y!! L?FUSӃA %j@+P11 f}#(!wŨAtlKRj1)g*X;:*֥fɥ7pP1 ȘqR˷'Pt ?u-Xo:@fZ$Dφ9d' ARZ+\ZϜ2d]*QuťxtuxA4guɑh$g8-Ρ,᳧9[o R96@Tݐ 4\W]/*ﭒ/3{M5Q#X T.v~h/cn\_ȵzΖ!҄ xD@8Dc/9< na eiҠ"PHcuq +lXR< ˁ℧6sַ"ڿ_5Q<.d""qmy"D%QV/aT\lc2N#Jm)P]"QSjcψVY(#% l 6շf,%*<>}YgSq;8n[sHL2}h{щvKOc:n,~bvo ]mZ/Xw_t!$s8=7m7zC:UCLh^;Z@KZU5$ $GJ5fLݮHR#ׁɚ4N& h*45LeiGo[S@ÎY8o~2k>RYͶ O8#LAQ \Lŭ$-lR$ߌѕwĔYM5 ĢLA(+tUB4PCQN3}X򼩄>39ÿ=SNֱ+ 1=rj<Ӗ>(D *5LY(̨eRYsFxP-6jW KhG+P ũ24E{n"/Ɣ[5ce<ǧ+ܪEw\6%ypUTH3IS!XJY`\RnbZ[%|2`3|(,kS:yr2RBGUΆu2&_W D SBc,P?omw5T^(hL c5`RɏRr63}K%+ӵex%@xDD% [aP" Au]4cP~/Gw m#k^tH>K])q!&^)2'ro1#fơ&,ce5^NwgC^|cYe0j J[/QUea] fH@ݻPaH礬6OD !F\rc'z:s:^2qW r!UHpզY0,܂sva+6cR$YnJ;IdkoQHoE鋢#EOQT^'탏It( N?GSUmAn!)JSndCLs)H$IC;G%LkRmzO(pRƪ~frRSˇ `Pz5IA3Q1Լu-])[re'{L~,S ."S̘!w;=E2ɒ!SQ u  .;T5합HE:Es&.Gh9LWeaX-ܺ+U ZM+L:p'!2#3ӹnb qUL.4r}]t,g>Y?]L nBROq+4***,OegO`.9MR'j@l:)sqV$=YInȠ ?d'Z=?P:nCKV% HS_,.UHX#fLa,+JQWn@Cg̨kDeH˱PŊ{W-[XoVmTiMc .G጖Ey1fE  *!պiԆP1ؽnU J;ƵpiOR=L ,g lc*%Gl:TK~X5$T4bU"%[ڛOGl}|d6_`e5ZWֶv,{K2D{ ѫ{BWʭcw䓁-!v\<\dX ]942!l4]4􏆺ek%PēðD@:*zVۦh䠑6GMBL('^RrHYE]̇<U BTLJ=Iz#ǎYnVdY CGa#ue]vfnR]Bs@s _FYSy*1P/,7qR%+Q])wCYVM:*O2#(=-MXR.U[N94I)<1+)FxN; "C@~REXM6X*hJ<=!CU)T-9UbTI<{ 3u/Qۏh]_l53R9AfTw ɡ3ZьS. ||_'U)b|9oqv ϛPjc.TJRotʄ| h;3av ȕO4qEQ0˽1D;-7{YQQ9+G.B5MЉ2_մ7u=x>Dd!at5}Wb۱Z0۴#Kt)%SdeR %yQl6qù+6%LI 9#!"TC+?+.RKe:j.9S>(y ;}#MGؗtfQ ..Хvp<0BC!PƏeO=BnxYn=j.ɨIe,7#ᴟJx ؾeye(9,>8&-Z;'N% drH L#D1Q%|')JN3N8~P Tlˆ@5ruf\WŴO>2k~m.x[--V3Q$,Y f<&Nni~ιM]='?m2*~Xb^uA<8:.<[(V1G!<0xa<0xa9{Jp Ghpp}:^8>`Ɣeo~7A:`yixN#,1`࿇ߡ cyouker-assistant/src/res/manufacturer/MAYA.jpg0000664000175000017500000001606613260315532020343 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1A Qq$TVa24%B#d&F"356v7GW  !1AQ"2aBr3STUqR#bC$4D%5 ?\a57" ~L']Xݐ`5{"aLL?h9>Bmӧ!t0>8>wBoiˣ}!}t1CCw{*H`u{ ;g nҮt[IPy} "eΐ{zw:g}C4= ߧiWzCޓ_ggO~Ү['C ,"IR4Ws{'V?Ÿģ1SegWsm(+4D$jq̢B9[獔!<q{7crܾ=%a˪ K@l [l\eJyً hZUJYY.eiL7[ 84CUGD JB:hV,089V\e٩@elqz#Px6_>xƥiylaMXeNmM,cb_(8?A/ \8reպTz]K0dO,wmuf7%ߦxr8x/NT5} p (N'|ʣ*ש5y?@GG<|xs׉tTs4 5-r`aAN`Q,bb+hh B~4C%A4J{@B{?IBWw+i^ڍFت)9% mPFh3IgcHBDq9{{ΛR YPC,pU X;N\3*+E^L>znAÓu9|ej3OFxKȱlGIb۰' mjeUl6\uwa9@ӕ QcS w.w8a2Q5䶙~ՎⵅHp(,CtqڧSiIms 468Gc֊w.m*urĕ+Ch%Tq@Fk#49x0B$Ћ0w_\]CbcƱ!JG^ꜻ'Y]F˜[[EZMxݒMZpq[]NؕG=;K¹$g6.XaF`cnrR@#>\N1k} winC930Oڰ)BP7 ɴfWG bH  pJ6Yt&==TJr@lYC0c7DATbǜܝVו:zP!Xk_kp!\ZPG#oN|'iY8+o;H< ]/bZ2)5 ^V;ҀzrQdGli圎L0Z" hB=7yCFbCZ ehui4.s9iCakll(6ഇ[ 1/^[jtP)h $p!tL 0C)Q01AX#Wȣ: i6`Wv6K j'@ecԕ՚l\' J;%1eT˭6[QĶ,F qލJDO>q@*bRA&M8cn>0z9etΙ9~bkQ9 kaUs]dh:g*[ysb'xݾ [4sRۜ=ڼh5k4iAlHKOp' ND0C-usDmqx ̩~V5HCiijZ\քDU`S1 q&`XjNY)4UhL$T qivS1N/mر}S۔z9}0@e 3gx-_ޛ"vβ9֦u BS(Kk6dNUw"q&Y9e:me$C(-%B\ fy~i%dS\Ygp\b3~&UcҿiހD"UmUQI<9^D8ק+N5!uadp"0)x[;m:IIIYa#˸macOoC2ЙvO&L4֓PT4Tb}"xg4dEY ^}cF68'mK8]վ K/=ݵ"Pdt7umm5FJu %*O*=D*QFH$M@J)RRI$Й,G3$i=j3\gKǛoB8) d:qnM:Xi "Ԓ֢K~>P1l:ZȜiEuzm%`=1 E al J- f#J0ߴ=jە̵.qz͑xӔc!겐,b Mܡ"9XWyyxUB2ʨJ|pjC\\Y)-fQ.sIn,D0w65V0#PK$5nhVH6J9\sRԀ*-%! PTAPNiq6YED[ͩmuO[N$ʵA9:a(CnZ[VOӚT:IG4I{b1r-V:;=C[$.>Eظ5UdpUn*ބV<)KA]&ԙH(`ns8963=տS4u- η v DU=-AgbLٷ|J z¿JZUYB-\,+" 7tpm 8ʹ5Pj%GGeQ5.A2/Q!2_@!tf@J.X\fS씧E4 I#ˈaܓ 8rU!Q=.atM,q"VBVB Dm ٰ*wwʭIfW{%Mym8tT.9UlJrjGK.>1 @ ͢0}Mh!ĮyLMGrS=!-]ꂡ0sap5\T;bmֆ*^RqPUY~R%Wȵ~*9ȂMtÔq{ϲl+gTS&af4mqg$A)j F_TӶsG o$v% WMj*= <}]k3c5U9Y[8!/4p=[,0K_h7BG%60c~}s lis)M };ѴQPiYpc$ ~Oy-3{d{cj{2^mV60McK2X[LmPG9vjz̆Nnq3"ъٗ h6홷LW9g6ir[IJ*$ڲ Im kGЈ(pc<jP5O4U\ T$=S@̲i"3a miaڽA=빚J^%oms'2qLSͿrI7$s70|&^ʳg2o jpR 'nP[M5`z,&Tp$yzr;bu79NEج29Ze6dKJo&zwDȻkue)Km5W8L )YIhUQM>ޙ2/&@$=Yc9SlX9`^[ J^v?(AɁ?+;_T%SiJl<男oiMS̮*0 C-{A9exE15DADxq(3h -q #Z,Z9X;-b*mg\"dl+ƣƱց Q  AnI`p Ĭec2S736.n'd?H|m/=W{*99oˍ` @+,,ļS9\08x1M!TЙ(AB0ˇ )&%|! 6Q"'蟱ل!S!iNC;ހ=@?vV?^# [}^-R$H#TN+6t[>ϰʼqUy{*+D":d G95T$B2\UTݑCOb-dށ|o‹dށ|97){7p;|߄#4绗3<_\@&?M#SNܮKLTٱz{]k~GM}Q;rzh;`u0jR\{uO~nOMͷ::{l.DZZ~Tڧvpw5\eY4SR{'EߓEЏIڰ-g쾖GM mK잖WMsM`'كF#=4?Q쾒OM~LD?m?uU}vOKQ쾒OM 1]>O,5zI4Uw=~+]qTٽ$Su#G47MeޒGM^o“BKWU}C#E&oI#~=YDa57" ~L']Xݐ`5{"aLL?h AdobedF]   1 !AQq2Ba"b#C$4d'  !1AQaq"2B$Rbr4U#T%3CtE& ?M1qɯ0G1^%eQ`t `^l /#N]{0  0 r`G|-`hI3# v!4s' `^l / 1J`P0$(0Z -c9Dr30VRq)j%-ZcG Տ@ ȏ1O(V0Gk4`}nE-vmHKVnMs<C]T-gH BD(MىLMb)Ls9ODՔwV L {η AFb|pህM#kX|_{7<\Mb"r3}ܴԙnDf=-<,.LPA-<^R'Ԫ8L^q{Mi=˵7Ȟq#G.d9ׅQJ}zxǣ^=II2.A__{toPzp,+5/#?ǿun}6ܷX7 M>?T*`x-TEDԦ)(1IuJGq  }WzEXl_z2"y1|bl.:մjRɣoSWq^in ^Xc: {0{kq΅iJѦu"[C{Ѵij0T(;Hk̞2+XV9(J  r=L9c{ܽ HGz]+]m^ɶqSV0&K]>R"1}tU zڽS3S2%9%1qID£yr%JerɖDuß|F#RwFvFnӷ56Ne*W+UPHcÑC)fOp:q'(7%BSyQU,[HǦ9w*\Sn;$ :-+x=׋0On7{)!*7BRZj~*0k"aZ6R.FfcIC:e OK+h1_nNG]4fk-aPHŽpNAb!i䖝ZI4S zDp)qЗ)[m.d`pvHFѩd%kW2qW;:1]x#DƕR8}L<6YcTۻ]FVK4:MI"ۍN}'!A6(ScVE;19OƛۤJwFlN JPӪ-B9b5ݺW\I3âY9c9".eDd(f%IH#!'\qH,)hLn# jz.S+t`3"Z^bZD YsT|iRVoKĶJJ@'fX h/,٧zmo6 nv̆[8y۝aN̤XVTw h80T`@棿BܵQމ3YLfz5u7%>k˘(vDw% vmj?}obnq$323])lgTa/M:tqAG(cԶmWEaBxLT2H1 6昺eE]t%=s28Sg\*?QF6d?gݎD}6W}Uʻ-hV5lvKsXTͮeM+D̪L[6d&J  :UBiflK4 33Rqs>ޮВUGt$]$ x,KAm*ӧV-tE;iD^Jv/E9Uu)Z:m3YMkO.cD>Fl]A7?gJ -ҧY(wKR>!rtjTƨ5Y pIgtmi-Re-N%Á4w&_4Uрako9U45whRTw6JFs5G GkLy٪:*nBt2u&GmS&qzG VUYk^Rg cK;ZK!=QP{l/Bc0)%H>e6AG*: Q||iN|jBpKPGQ a6\6ths >]J8t&c8e{ŊƛrD}Ƒ҉C"@԰ik[ L&*@Qfݧ 7\'&IF1i^#rs&H$8jt#3pmHخW{,ALR+CyVtHd {3nmO+E!XmuwFX^J evlBmмsT:I 'js99J'7 =)j#tG)v%fjZ[`Ԧ0 7Ԇ0LȘP;|x֯ږ޹&@IBx 3I9;3OQI?nn&.^751xh-yIRТ0/ x31uKIHŚLza15rfRJL gl_m;TVlJʆ~{6T)+rvUhxRB*GAC/zO*j8gdXu+ , x,{b?1{N_~Oţ/*MmnzIE C&N1IKE֛zE+)9T̠lr6%vP (˾&y#r[tۥjE29#8/GDgqZe xUi@䕒W쩿ݱǶH)\QKu&5.N5hҧ8%Ì\E3m7?YM0H1+ʫVy.&X<7foWu_ݱ_w>ƍTFw[#{kxj?ѽ_;H䝕)k[ t%ʌ/4ixdKzE2 ˓`(S1)qa+ے]oSN} Cgzbkoki~sOҹvEu^r\]ӚҺƕL̗zj*i#gDDH!(dP?Od}m iՎ-[JfOI:cI^ܸ}uIOL;>Z,l2m^\:4?HcqmȔs:uT+~ygxWb񒪟Ww`l|IOg5&%^|;rԨ-Qw!)UEʡHhJjX@Gb4wV[xL>1OkG(Ʒæw rnŧs_"JБ3}&6LfHҏ&aLf]VT592坳qU}R?sHv8 ]"X(akEZM1'&M{<MGՁ&^4?т yy&H$w0PQ9u CX 0:ç( 4„2ˠzف,Iyouker-assistant/src/res/manufacturer/CHICONY.jpg0000664000175000017500000004274313260315532020711 0ustar fengfengJFIFHHaExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:01:05 11:12:21]F&(.+HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO7]bl{Xʡ_?rVukxcriĥ0Zʫv?5gK,kh`iS{PqN݋ܙ'Fz!uF!3S\U?\V.F lChgcKn[tۍu6>m4^i6zVczBXH_*Q>OE6sFn$ YnG+]xO{r-{kFq'WAc?n1_e `c`o~71ϣcy☏1?c"eQɓC1eun- 9i˚E4fSCUMXD]_Wq/e@&YC=kZֹ{dt |/}EhK?qӆh+N)./uy00#LևDa;%Ճs?߹iOcZÎNj{G]T;:I]]8ЌW0oG^-r0k) qzg"Vv{=/Ju[!?gm2o5:lٲz.{F]ddYMQB2WHe15;Q;߸W11rfM,cC?j~RmhGZΝб}캗ŕ:.wKyT:&{o̤gS[AyvQdw6cCd{2 [ѭu_ >(Sv S^+%+k7S߹Y_;g;_l== ":;@D$I$$I)IKɬ[Ss!${cOW{GvFjIr5r&hE@Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ .Photoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIMCF]sunplus]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM G]FL+JFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO7]bl{Xʡ_?rVukxcriĥ0Zʫv?5gK,kh`iS{PqN݋ܙ'Fz!uF!3S\U?\V.F lChgcKn[tۍu6>m4^i6zVczBXH_*Q>OE6sFn$ YnG+]xO{r-{kFq'WAc?n1_e `c`o~71ϣcy☏1?c"eQɓC1eun- 9i˚E4fSCUMXD]_Wq/e@&YC=kZֹ{dt |/}EhK?qӆh+N)./uy00#LևDa;%Ճs?߹iOcZÎNj{G]T;:I]]8ЌW0oG^-r0k) qzg"Vv{=/Ju[!?gm2o5:lٲz.{F]ddYMQB2WHe15;Q;߸W11rfM,cC?j~RmhGZΝб}캗ŕ:.wKyT:&{o̤gS[AyvQdw6cCd{2 [ѭu_ >(Sv S^+%+k7S߹Y_;g;_l== ":;@D$I$$I)IKɬ[Ss!${cOW{GvFjIr5r&hE@Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-01-05T11:12:21+08:00 2012-01-05T11:12:21+08:00 2012-01-05T11:12:21+08:00 Adobe Photoshop CS Windows uuid:f29b9da8-2b78-11e1-9c1d-e060394baa3b adobe:docid:photoshop:f29b9da7-2b78-11e1-9c1d-e060394baa3b adobe:docid:photoshop:14e7de70-374b-11e1-96b9-84cebc0057bb image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثW,6(iH' WK?b\.ǎ=yhVY\n/颳 !7xG9'T6WZ~bi^Z\麎{{ftw5ZIH14u@o%1n,ЉvuW بujrS-: (-C]{7)2L{)khnt T^H*9!nU揕Q_m+es|mL!Mq9!pq|6áCsŦtE ~?V'Az]y[2"u(ms=Na;⬿Wx\go5ߗ:Nkv06DM,sƲ(oҮ* d3],#) 4JmBe`*k%QAKTyT~M^D,<*%^ mqo?Q/vk7_%77)bc ,l~<+PBCW.L?ʟtt'˿w,M?a]i hKX$8'W"*J?h*l/ nV[#P mg}|1C҂I_xػ$sgτ6I:^K> *KdGi]wrK3dI`|k##J5,Zbmo {lb$ш xGO1qI6+IO(~oC~ӯCx|?l_N>/|GM*UثWb]LUT&ڭj0-ͤ5=J07E$(H叐j -e,6s#󹿜Z?'%8~=8jf5GN*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/PANASONIC.jpg0000664000175000017500000004312713260315532021125 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:31 15:41:54]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO'Md q˪}7^u4GtZE^n|eea? 6 ׈.VGdFSWmys31؁_꾹 .7]œԿ{U=h\_N3z6FEXk[[m5UݻT0Wh*u~kM7w/  m^=5:=K_u:0lq=RmnVu|p.tl#"(Y&QC<c&s\:]2n87b9Kd=6]z?\հ]i/gge*14{=n892;<}0 oL}fqAI6aށk]!HY;psP/qWSO.*eX d˽@չwI8bVK/45pۻ K1pZDht S!#~/-V qF^uӬuL"#k%~emů>uORYv7vQmW.o[MqV7:վ8VkcgmRϞ!(*V-0Ag? nUEキ6pcO5r`u\~nٳf+ Egk[\ lw.uBS,k{u-5VpzU X۫~{\75 [@xmPzc*6:5hk~uΝw@ʩgӹ\NkZ=K9iuח gjsomtRݛZA yCU_w^dkȬvK78Z~rrzWTʯֻvK=90NfC:թht#BSu۝Um$7nnKK$꫱g.S:p$k{K[Ukxԝ{nnw[]^KqŖVj|w Gu&6 p/w^QRIHMC~Lp0Sv/VIL*X+I)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]asint]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO'Md q˪}7^u4GtZE^n|eea? 6 ׈.VGdFSWmys31؁_꾹 .7]œԿ{U=h\_N3z6FEXk[[m5UݻT0Wh*u~kM7w/  m^=5:=K_u:0lq=RmnVu|p.tl#"(Y&QC<c&s\:]2n87b9Kd=6]z?\հ]i/gge*14{=n892;<}0 oL}fqAI6aށk]!HY;psP/qWSO.*eX d˽@չwI8bVK/45pۻ K1pZDht S!#~/-V qF^uӬuL"#k%~emů>uORYv7vQmW.o[MqV7:վ8VkcgmRϞ!(*V-0Ag? nUEキ6pcO5r`u\~nٳf+ Egk[\ lw.uBS,k{u-5VpzU X۫~{\75 [@xmPzc*6:5hk~uΝw@ʩgӹ\NkZ=K9iuח gjsomtRݛZA yCU_w^dkȬvK78Z~rrzWTʯֻvK=90NfC:թht#BSu۝Um$7nnKK$꫱g.S:p$k{K[Ukxԝ{nnw[]^KqŖVj|w Gu&6 p/w^QRIHMC~Lp0Sv/VIL*X+I)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-31T15:41:54+08:00 2012-03-31T15:41:54+08:00 2012-03-31T15:41:54+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:e35da45c-7b04-11e1-873b-c4fd423be6eb image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثW$0Y&m;*=rB2]Hh+#q1#PAUȥv*UثRHy"(3=QM $D=aH#9[V"0q̏~99~ tݧؾ6ec6{TE*>RT18YNzi~dB'޸ e}~|G&Fa\5יE&Ǐ,\=1̫ӗ=tĎ}ךn.y~FAndZ%~Tʣأd3 edu31m<ϫ3P]RXc~cUT^X36,y>s_q()hZ`Glmdm&oXsĤ"j[,݉O}\??" T5 Ͽ77[i2s?ttaD/ڵigLXa?(Ǯ(WmWu}7Z44ӕ,#(+0_n9qCeF'/Zə| ei%ޙ<$n&FP&q o☔GGL%&T̞a򯜼$*Y6T,r:Utc.zY# Ǣ+lͦk˾\nUxgh!S+Kgݸ`I3 W[.=_ cT2~fj-k2Gy$G"a'2(|?y˖a xloZUߕǜ͢jw6Z)@B;N|s7괧$4ipC^#t.CU@;W5ˌJDDp8 oqWGī~"1Hׯ3=>|5|˼C/i-ꞔ\$uƩǓo2qщ7㟜CMR-]l UCW<`ʸx'τM$Njq+q3ϣd0 /Ou-RZ!p]:W.\{k82r \S[Yuc|%wiiOHrl2KuSUzN*h );UIZA+@cm=}nR7buDm"ti>/RG)8ߖ*y-p+S- a.]TsV~A]Kd_y C(mSM#}vIq;QXѨ?kn bմqDjj O|UN̺ʹ1](-ڊ7i RQx 3^zS UN*X6E b1TO+yz@#QC*F>PyPӦ*WP(H l6e&P-OoYFaF? O*ҴILeъˡܛ-Q B7dZ}Gx&B)Sm- X-Ŀe*N*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/ELIXIR.jpg0000664000175000017500000001346713260315532020612 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   !1AQ$ q4a23SD%FBRTu&V'Csdt5EU6GW  !1AQaq5V"2B$4DU6 #%dtEeF ?B]݌cBv¶É7`Ml8h`vC<^8vC67aFɷp@0y8|6BCw;p~ >.t/o QA ~>t\xu..R Inx|yp\n>˅pOesYn|O.a[;U)F41>rvt%`{A Qm1f#nG&t1rv-ҧ<s&/gKtqe_DCXu+fW#N>ڜin+?k'aGop''v -YH2z">(hp]}m.4s; )cOCy .~ ڹ^:|:&2;,D"j+O(S+dAUlc L \.9#cn;9'+mA!U&S>Zm*r2S$v\G#cnl'6Б,9&q0rnP@6B_-E rxi(ǶO,ܭ '؉gI_?Ùn>MH da&}sC d~ZM܈pv2BswM[/b'p{WWtBP6̧֥pH(Js2{9N_zc>rէeꄝhkgH=[B :u-),њNtNTXi ^$|DZ~+~4_43Ν;ռ-Zۺ[51U&,PR6Q[̩]YGΥ (g hTN, K?gN.'Aꣵ\,l*RyLĥiIT*Y96ڀv)Qc7tkZm2"w NhIW+,]T5j{7q$Yos+(̀Fs&mXw9Lר[,)OeYn,2C NQ<03!tQȯ+yvڻY Rݟ eB "*ClVKu'UϪ=6ZR@$z n*W G~.їFjƯ/;*YJۥjNvpowsV})%׮NՍu[jP =EHk9.JKm4PsLweL_:837:huw/"JwV7V{˗mf޷`-Me .- |KԥbqfrHJR91I+YVXm+a~ֺ ª4J3ҫHhH ٣-fGCigC~\_Z1ͫ@-Aq*bΎeu[}JP%Y=mn~AV/AZUK:S$rN3g9mN zjtiU7M\-6`N۝McX3`C-'m.ݹW3WXȸdjЅ7AzqR%U4y\ /'?/25sN;ƙgʩe-)|X4W5YEjU{κ]˸\1q07.BS6bl?DbuwR:qĐr&Aq!+&*jG  pS ZT*o+WXM%Y R -P-5 0-\Ø MJ$8 st:pB^Y`lZ-UL6&v"RBdڮʣmM#:~x^UoSnݖ%az:$Ự*dnʫE)"b՟[/HTBT !MHX*ۜWFG O.Fyo3({1{j-{Wj&$8sN5#82?,`ۆsԔ:{I@Ȼ+I#oׂI(wtl"n-=9Nܜ@q8,` Vx_tAPHKRV1EW)Ab@Udgdp6s)\i)$D10QΣh:miDܤ(>(ׯb_‘Rnj4d,$^ o&9JX%FIQ(]Pۤ,JQP 1YC2sr""VX>PZ/&!EjmvpN$K&]+Ƣ6B^ot˳m %;ĀГz^BNNsg; U,YCtGQĎDL|lxD>wɡT ? p !yAWiBO $,WF]S2mUkW (* A*m t2m#jEX u[Ɨi۳aGhYW3JgjyRXF[m"3Ir4&MO&4j*y1!&վ o^^pD{,QH޻s7}ψF87o ψC|( ~Ig![ʷYvV@iޯn;9?] [@8/QrpP5?"n^,` =xt7KWb;7mx7 c+FjDi!₿0LG1GWN0SLlS'IrG~,l ,V5\O3D7o1!<+&;xoDUwήf?ph~GKGތތ?5}v7- ~Gߝ?f_/v|^ߚIl,qGK= z3z3/vS_;Kb">#ήzfb_/׆|^ߙKl4 vuqt'[ћщ|:㰯^:wM4Avivq4za[*~9 :Lb8h(<#,Q]љ? KOUM4A<%NľTP=WOKyq'ՉG/FdžTn"k.ӫb0?}m ~yͿm_C*~9w3^j&fuLSGA;a[aě&I0;!Ğ/;!ě} 0d Mt<>![!ĻN?ACH {7m|(youker-assistant/src/res/manufacturer/XFX.jpg0000664000175000017500000001242613260315532020255 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !AQ"B aq2R#$3C4Tdx9 !1AQaq"2BRbrCDT% ?y8k^qK'I\ G ~ޭj CҔpDnL/ҋ Q܈ ~ZQL{Ui8krTU=I愉J@ u?-O;g2zia8`/涸@RNC9-XI[%Cok&MTّlopQ=Cq0(}^mtvY'#X*6-l:_R(ގp0kV卣WsIW" ,?UB+j *ZCk o׫, {,(CW013:1/]ܮKxiEɆ(Ҕcr\8jERq2sfq-D>ZKd1HaU;oLPPrS2)9?(kMuHDIġ_2j!UנDx=>r7?< 1 ⩞_]O5/]ܬQ (UL"Ry،]J JT\bGb!Y!z2`N%J)y}TnVEg~LOw{B{7hF[ab{"w6tک$X79L9o2LկӁ9!5tEE'"qxB4Q#=jt7uYhg hrRؤ^LR3\ #pvFxrQ=#Bt/bI[7ݷ7rЭ:za߂21!-@wf۴u4`=s؞d;9hyJq\WEɿݾ=@SL+1M6< ֡LGW'iFH'~V^Dy)VziSG8QULQ+Q/a8|G)z\3npMP?i6%ȤBT(UNi)lKPp^G僖{cAC?KW\ {{4 0m!qQ;os@Գ21XCm$ZHK25ݹ"i[$QØC],kfz6utwOnͥ8k8٭n:ج;,GEL^J_Eeo\e[%V1s͇WT$:Bx;6Cu9\SOakb1|QD8︀+wȾl Oz4ةp倥 "?p5I!N=ڲW(uTR Zbצ`'=A)q6괦 豸hDK B%IЕG("tR2&( 9*L  Qo՝ʨ=eldCAV3s:k[ڥ *n*SѨ_PkGW @Cի+emHCi A譥Rjްm~PXq۴b}>1 ̩0BCq"Cw w㯗6m v-Ҝ0v_!؆IHxx uqVtD;"":C˥טJ$f! ?ۂF:uRז}bX^=+xX}R0066FK* >Y.T;+t$AP'jQm)U /KɫS\߉D TBGeT2Es?ŃZ4{m:9V:ix`)l͉ы.iϨ?X^ n;W9K|-L]cbjeXĽ87":戃+*rcZʰPSӱ]In[ny۵r8}t:&AM:`]E}df%ti̖,oo|nGi]U5 kVE$;9UD9GYV#rMz\8|J{,lZq̣kWuĶjҦd/mJ7(J.5*(Q!9Oyas[8Wq`v[Y]7Z!dfTb2%=8e5Q$!y2B6@EI ȼn,.j]yCM1Ll) $Q>$-ʑ| akc-CrM_O`Aػc3sU[I+e+}N-57}3$< b8 l諿b,B9 ao\B G\P|͋jjdV#,-/ǵ`w ]L׏雽y>y_6+m"pYsu8cPc]]1d"y?́e /FCVx& )oj'bI[;1If)youker-assistant/src/res/manufacturer/HP.jpg0000664000175000017500000002026413260315532020116 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   ! 1ABQq"u8x9 a2S$Rb3CD%VG(X  !1AQaq"2su67R#5UBbr3$4T%ႃdE ?}ոm6ܫR+c\'\p'FSm9io MBB)U D]4Zt[P]U 'ڈdL>>vbt-D%RTdR":L!S%:b#L}tFwʥQOd" >׎ޕ[ų0r(=L׏Ty<:$֓海mwsa;!}Q4;ۧg% ۛ[-+{ʝdH*,=N=R.}6Ŷ;#FћnԴ5C|p:0=IGnFcї))"R}"Ր=6j6XDmb`04njMyg[xS-|PG$0NY+j~)=QISr2#a<˗FQ '+{s&NN/_fE~3DZWQ2e /JhM!if!!NԬS29$2"Xٵگq5~w~ɧ!P ' 1/l B,Aԩq|V+s($L TsdMSE$߆lzcP3bVL2&g9'~>㶔"ǥ3 `:%kXՇN__t9kWi>j~4ֿlzF;8&O+5չsQ-bpiӺ&CwT {9h䞞bOg|G[i}K;.N@%%o2v(X8J8IX$H#IM2dUThD(n DOVtWUHK>"0øDL4MC}#0x/6a}V ,GśVH[CϣԊugqSddN3,/hB]w i)ֲGR(EWZ\ɾXukPjeRup#yF=NjJAAZDÔJY l[d : r@j3$`%( u].RBҢFUN)?u7@dz]W]`^'RzRd?)R=OiGNW/dg%'K׋e3_aP-bpRt=}wJڎ:[T7z*d; ĕz-,!.RzI$ڂT?sC('s!pQcE<~JgpZioS+hwו@΄)z$D=tj<;XSf7vIji.I'ؓYgǖ@FٖZYaINJAZDϬ9K3nLWsY N2Ǭ{n<h[ek0oɦ;(3M_UK-ƄfU)}ý"YTܶl}hR%R6 :2[t%١Y@M UH2*Ln~ S'㚘u22Dt݋ 0(0JR;qVbфAm.3WolFnj*ַXvweeZ(ۆKgvd*PJfsSKڐrwu\Sk Y[ 71#|eB9`vXZK%@6uGeGeǏ2:+X D rPqY,􅜭$J8<~T0 Σ{n^8-qpL2|ɞ`W{&^וdDY fnM󐬷:LhMcYQ=546.f`BcMǸ+%흟l=vC9\9L̞\[]4s4u:N ߻qrR v]ۛ<xK\{pd.\֦@UGH{5Bo iME6ʜsH3}vTxË"FDLL)͎yt qPŨOBaoJQ"6;;NҌ"%+bq}5Z +I2II2`j#ؚitbr KVjbIfV282qomG- c |&c4sFq} 교^e8П~,jE8w}V;=,is#G'zgF&6eg'OBdELKͳDҴ/G@blLW2e$K˛G !ymᵅ称IpҮop\Dvԣ>Ρ铪5&՛T8<NCI7SfP;$Dpl:Ynޓ ~}SYR"gM Ȧ vἕske`AnNHd{d61h}{~?o gq3csyOnk?$b$9upI69 l92ImPݷe2Hܒ@<ۦۆ1Q|u.< jKd!:RFkoZ:v=:N+ΈĒ6Iyd*WIKɒCLլ^[-i0RP)kP soP)!=UH4aIfV282qomG- c |&c4sFq} 교^e8П~,jE8w}V;K?AeQd=19 ũ.fr@}껐 AA )Z/\YO6T1;ysktMKy5HۮȁX'OܝZ7֨vUN_}GU R \A*%&da _\f6صdVBfI=3ӈffeQ0V.4%s`kqR9f FQ϶3&mPJ!# J@ILCcZ[=s"pTԐ0$s6!i-DuǙb$+~ zʙj6V>jxù /㏓ HHaSܖU7eCK\l͍ h|{t94_7eOMTLJka9 jwv?]S%P~+B7T{*gS$קO_˭]_m<pl̉1T3 j`1R'~iF/Q *~0Au@4jO0Gx"M ZojwgT$+Nd85>ov{/ߘ3Xkv9TƝ;.I][tXמuMjqgo6͐pTu*LrgD;fwBZ<)I')# wCU|g~(3ì{ûZ©BXZaLrđ lD dP @_R6϶V҃b8ԁ9fb?Q~73 mSL(/Y$ (K(u;0Ҥ- Uƿìޅ$qŻ O9.&h\?ME\#4iNYs 2q=w>ZqR̗/!u{,[<6c`4 .e`@Vv+3qJRul+t&̲yU2#'2D;׻{yޜBR'|O+ zItCiʮmO躼1co((\ˋuꐧwhqLTZ,>*qTVꞸuZ[rHy A~?J)XI##3/|~M7\aBZNwGEx2~tKJw~Wgw5 jUԨY\1"":!k{K7H ;$8wk!ӻ[4iČn;%>jOϛQ#ӈ+nge>gAƶ|ڏ7Qk h#F AS:) rvTMT[ J4l>ΑMD޸[EdIlYV`͕ laQ!8,u3j &iXֹ`m*(1դ1tNr)TSIxO ';F|B7vL JbM"F]|ҙL)qazr֊(sqI"TKؚT;,0sFc)'BZ %Jt&X;+{bQ²^ ;f:vza #jnDSέ$1OLk Kkm[s+ԤVzG'%˅ʙ>AEtf= |ܙݙW'su1ȒXPQQSb !,M"BBS@^z@l,w+/PUOIWЦ@br? %U/&E/Jgwpf/H/ *6d刼3<ܸ]3̰&%j%C(jcնZTn9jV.zrkbҦ *dHLp=vQ`]Wh gG.yBqTB_=ʒCdH$=6攪V&o]Y钡L& %_: @0p3[jLL[msP6Hݢo5<:IJnlL2ƇPjS zZZ]z #FGUՕx\I#ǻ 襺~&5r{sݙSi[vS~0& SiW=:Q'['| 0 SEjSi@䤌d (˳2;)zsC߂1 i:5f{aO1'oe"q/pjmܫ9)Hv"P'X薲zkRPL\qVtZF1`ܐUM6I)*LJsI v1]TMEJmA[9H2U39l70om;(sF^qqBЁKvvW脒 Ƨ('3:[flͷȶ\/J瓷{QٹCqQT5'%RuqpiԐRA܊*aڢXqDS 6'X"S3dGG/NԄ?_5ɫ4\0 @G1.YJdvZvZb`()D-vFp{ƺ @2$LAj)kvtR޶rty 1ʳ&AQZĽ儊]RUwa%uMOfe!ol;ѶwVX>28i_p,;KUcw-m.FB"+rU!Z{[d5ޘ=ژ7Ӣ'"+35S:n+hHJIA-R2 ӟ3 4mT%<5B\h25\vk1s`I/gjV4'qu,cʵ@Tꦨ-Q9)D+ݛu,ty%S*)LxA泣jq]ҽV] i@ZR&%A'd;qv[b.Eb*y|7{u]= +Wjkdb]1 bөkj7 %C)'TBg <%Mҳ!ڪn \9W/4LcHðNZUg5bd]+KFԡSݙ=r;;&fVFMbD:jqwNSd̥4rG9L %BZ*\kwV b qc=42=2oɬQyouker-assistant/src/res/manufacturer/T&W.jpg0000664000175000017500000001323313260315532020205 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]      1!AQaqB "2R3C$45EU6V#Sdt%u8x !1AQaqѡ"2BR$4r#t5&sTE6 ?y8b+~9`z'`t ǻxw{aK̈́rX`FPCX`0:˔00 @`G 01: 98s8aM<0N# w a _/`u(`8aBA<<akf6U^rSV2c9Jc0PK d~A~>`cYFI# FȲyjTD'pI^BH)Rc8)3 DG 8C({k1Ɖ zUWLT)M< 0ꕨ ҡLNXj VL48]=?]6s>"}a KD*RJPveKpf0iS1WƒV\* :d+%: P`, ǯ1/e>(?=VXU_7qߗɴxwѽܧ| oc۩p$VjJ`*+|a)TXS+v3PvzDs_Qyx`##ZR)Jtp7-e?T^U $}>iF&\7Et<4d4veB--=Yǡ1C^i"چlnm-X;2jvb(qZ%ir2ŧ8oJՌ)?,)*B;DA k٨T10EIhXymU[D1;IJыaQ(oCٔ*x^brҬ8U2O^[AL mvnZX1٘#la7.LU\|Rp['9*[-'vɄcQonK{q1P j2o=Mfőt Fۙ&>WEJw)RLF2T۪vXm4{J4_f ۝m&|gYrXl@Hi<2^49F1)M}!:0@F ;p}ClH#/JOYQ`b{fxaumݩw\PbkVLjJסB`?(DKqwj;#YYRq]49I\)):g jzMYΥ:49)ȮC XEc6uEgp֛6c 5V>|"⚗ڷDz^]ekuxtB '=5|+%Uh |DgNT]GA1>zG4J#Y۴g~':Mb[yX4Ժ'jksc eJkCZ1geA_(qǧ/=ioQuFYn{-gZozǯ#߸{|P;đ,@.SG.`Ö^0<*u&\ `5:QZ15OX<{岍% pyV!*{d%eR1pb6aڅiP|ͻdW /zW-F.RuvN%7:H4p_JU,%`r!'-"4"fi7s|s+W_4k/ʑˮ}:ؾD~#o,sw,^_&.Z _ii{HS e eu' hp.=2^q̡Yez=A*@ٚ`vao.t&Q理Bj_A$V ZgEn̕kdq|*=H$(-Z zqFu:ZgH qS\\o?C@i@^۪li&Eݖ“w~ Sʕy,1]+ooGS+yRbU̕RE}p nVTo+O\qS(N=mcTbxe%f\Mqju=ДgTf&T`-m"K[Яeu ޖ9?fl2r,)s1Ay;Hݥw"1q}9'H7BFi)@1.-Jk-ϹsrjDF,3dwB:>,VQ%6B@bS'oVڛ  *m)7X؝$kjLe1wWw8LY,79 @ȼbŋʭGӋj?.5aq}ŏ>]hMΫv..e2[o&U҂e.;y(y `vV- A A#Qn-ϰ!4>zRġWZ{w'$X_zy[߇/ʫb7eiJ#%V J u SEֽ^F\ISq䀌Ft}=o2ٳd?t{z[<~bHϒUt TuDz@sc@D2 qvMrvǴArΝ۸|Aى-1cS1: +{iK$R)lGI,}vH}n˔9;1S(^UJ Ӄ̫PχTp8;yA>^ءZc?hяRODC!ptLV2 r`gtWh+ ӣrW&5LNTԭu%ՠ cJ A(d 8=p$q %FLt:F*lw YBرuէF1Q+eዥYF0yx~e_yS-ؾXROp1*{Lg{=VUv U Zsr&j¦Ā"N " r|jK伝fiQAp% [in5-Βfm&eQTu(ԕQ.7Tgo^L@moYqˆr;~^HR1L(z<崋էsJ+gNZupH8&u#Pz:*R\*U Lr{Kq*aԘSYS2rSOֳPGhL![ymqc)iueK\QZbSP04K1ὗ"utͻųwS| f帎Z+/ dV"BhB:ښh*UUj%S?ԜaMP/g{6dV;4n͸jn"WzK1: 98s8aM<0N# w a _/`u(`8aBA AdobedF]    1 !AQq "2BR#S$4t5ar3TU1!AQa"Bq2#$R4 ?M\Qɿը*B`5D }&6&$~t5#HjE 1`7k,(]f{"}ޟ[5\ZM.G&V5 o֕&jrJ`< <<%A4T]!T3L4Ɖݬ9w=Tz~lpQi7kZ& ZTJ`ѩ)ohOʘ.jJrLOXR9wQP0&vˆjGR'5Uyo˜kEM+{[9 rD|tX9+~Ʀ7GUʁGr ̾o*rĘZH1 1rį_nICbtsh7m1ksb#s [YJ1HK8w&|GSy"kқVOmG;4bEoٙ\mFc#UB v|v ^\8 | kSFzwNMGuggma2"Efc#٦W"9@V4F+QvoS5|(D-rsZSJRRg;m@J"EPM{-zU~#CF?tPpUfZ%CR9CԈG^QmZX*׶*j\@xBEi hyRUTMܹt3;Ȩks%Ÿ^wgwjl-U0x(Js}}J1ŽQm~vq2:K S qqԒG1~J"d#.@4Cmd xkDNsZ2|1V)M +i4$YVP=ɌOn[q TS6>LNwnنw~ڒ/٤9(h@"M$]+VYEa+q\TS9=8\{ia/+Ai?b%Bs*򤼿k'AmL䄟Ӧ sVR(oVi}|5R3"+ S ljX.uΏߏtx};/wܜ?=.+?g|zQ2]dw5bQcY 5jKMJ$N华 P:Sb@?^G}ImwVDjȸ%~}3vmy'To!s̴{6r/ A"dՐRs{wFbbtl{\қHUz:TU٢όI[HP!TOAٶ]GEF0 (=Nx ]uv[.uӷ}1}sR17WW7W#ᖖy  贺aRXhH˖|t2$A*lK8 _Q lN9aLD(p3A/m@r #f] sg uPZ oQ^GwmPc"߶%3:(`fUIͷ9t6cQ%9׎_ijia44NҰkJ2)T 8ʆ. |.]Ɇp̶=p$3oӴ#mƭ_LqjܗJݙ?ފ Je fjQ8t|ƚJ1 HfZ;W7`n3UOU(}+{Nf[]7 w!3U! @>^ d٧N'?YasJɦc=kݏ1ajM,\Y}" $E*B3[doP:l=`OT?}׽7 cU fH+ʇ0"$֬%,&Mv 4hA05Ï $V!TqUdYG9r{<=jU|0:Geu=ƸYKr-[jHwpfҪ}"&2}_bjɧ.l/vb#yϸYFL5+ d5(*8Mt%z Ag-W[?Ǝ/u=p>- u[U⼜9}$arw܍˸3s˟3Ȍw?UpA_pO0!t}×v!4/qJ'iV˔htQ/k]b PKMDFL@tPć9"YX2gn`#1)t:EӽUOO⺦0aZ⥖~|Q0J]l#2ylYtzDkk-%!'p%SI(#Tt!SeD3dGZ+rcJ, 74D)a΅;K * J;DF18"1Zh$qBҮEy tN̝ϒڍׇU >;p&uv `;[6MBh,Lڮ m";:3BcNl6h/d'R{c}e-7k6, 4&sPU7kJLx59%0Mm SMINIk*G.Ԋ*ScDnXQHD?Fj(\MATjѭ*%0M7y'Lxxy5%9&K٬hCR(f NiYaDr@{5#ީ٪࣢/!^'ˊh}I>ˊTvpIKX>\RyL=G ~z|BS~SC,ς9hŧU~ou$ Q0Z4T?UO}bKP%G-"mf?R j4TGU CBړpy*~/WoTFj/youker-assistant/src/res/manufacturer/HITACHI.jpg0000664000175000017500000001365713260315532020670 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1  AQ"BqVGa2WiRr#$46h)I!1AђQaqT"2Ee&Vg)4DGBRbr3F#f ?N=%ruGSN'"'  #*Az|)G_qɑLaR‹fRApu2'l)%i:@Ufm?13pgi\@5Fr&ghQ*!G&Rsq ̜4'F{`qhjM5ǫM)UΞ--q̋ ωYTY0b#amXiQªvitH2O+fpb+Űcm@wUr:_cq>Ea?.,)q|t.>k [ް.42k{ bVn46X8BU!S=9Lx DKs:1Fc"yBWM8ߓ0K3d`r#5@`k$Qh Xixj,AG N% 3Hډ6uj 9%&S'j[fWb)lh:]4δ+e;@S=pajp#s2nA>T/aQ2C6 h3#FZ8yx@0S+kZc,(]ڿY rVy[bucX %0l~a>>D>_IZN.Px|XE㊭݃AnmªSct.iϊ:m]hh>T\aS{*94k#qǑƾ>L/`5A8J eh:R. \c{SxO,n~fG yƊX*%8' `9$b)DD~qJ<i]eJ=ԃu[RAVbp`D_]C}.3I-!zy0({=1iO ńEUǏ_pĕ\ѹ9V}̈3U5}TӓD̝ L"ϑXfKv$y7 J\˒6R#ϑ2.ZǒK:1aI DCh0f^>3 FuddɚS6gS."n0O (sǹX6/ZХ… by3#2%T+.ϒ1ybCkNR)LP"H}>ހ #:I(m7^dJƃM!R!izȑa)dU"=Kp :ΐ톽ǣ3ӬۼeUĆi3-rmzLܝPB$k,쒑k7՗64aS]=tٴouٕEQ82LUWCkS#d,0ivĎ:d+wݯ9Ƥ҄Wa !M]1m"9JHf(x\4 q+efN" IcFML* N;\iW[3J[g;cVk49γVl]dM)y(sENlvkfݲx:oMf) d$p LWa+ĕ\>9Y7$C]t%K%mSXo4HF0Ʌy!I=(\*^sLDD|͚i l}[߲ZA880gG Quޒxjضu4g]4Z׷ml *RXm/zV9Ajl牔G$!R>`6i#KekctQ]a͞^eȁLЇs0dKdzv(REDVxq[S0-Hӻ#K]~ %m^!ad-*$UmjqrNNS n!vF?nig*^(o}3kY6n3M R5aXfȦzܹ"(s?g샘s`me&Q73skLֺXug\Uӽm]+z>5HL+}a{k0WvψQ| M60sG$'W( 9!pYgS(Πؚeϐ>lN "acg&%:AzXZA@Z)LEAɱ^gx̑u ˭mY*ٖL%DEEFv&|v,mj sAɻ=CuUXdC[`olma;䶓mN@;OMTD%,dD[0B$RSV}jY AdobedF]  1!qAQ"2Ba#C%!1AQaqB"2 ?ǓjGeɿƒMVʅMDz T/Aw,_8Vtr( \@Qqڱ `+~<~U/&p2A&+eB&FM{ Oe[ /{:wU (ܸ@mXʅ˰vuE??*Vj8ro~Dqb&= ]ç-=՝\ *Wn\h 6eB;"kL0E'B⅐HmVzI}kAe:V!i" pM|W|3_]d򶓇'`uiD -!dm ; uD]·&ބ2,0PLH {S%XF(nm3HF 芝{^OPj$/ r3Wצ N$q4j@K7/Ӳ!_zh@7ՠԃ @,%;đ XJy,*SK!'-Ni)1Rjp/@4fU_#t =±HGNݲ6g魻Ge֡ԞsO  =6G+:]@.XAQ.?i"7ǫb[+edy0-ssJ"K:K}~$&0~~s;R@o_+'Ec*ȫwȳn asGmM$4嫔5^Yi#!Zh |^pzoSs*S3w;8RZ($buYk+Uf"# %%ٍT[N+Jf&\`M"b!q4K0vn2;rHx妶]]s.#T8G&sc&9ecXg>d+j&\.MGQ-b馢N_!ۛ,"⸌DeD3-6""?PUV!҂6 >k2&B e𪔲I<L⸎]$/潾_ڱ9$L'1N9)J1Ip6mes󍹗\w3,R|_Onʮ˔YK[liji74h"y~`m;Ӌ\YC<`_gE%NԐypFP/,_fj-EaA@<336O146fye"X¢Fܖz<`GM=ijPgw3p$$ȼsbͶ5N(n 햘L+Y6 5>L+dF_ȇlFˎϮV$ XqB%cT HJ=zr sjIZL]36:5d 35n mT]Xs*nN: ibnN*2ڔ:oH89!6c+2L1EG$/շCR,hB>x?_j-JI7[v,s!2%I4TPꖙ^ P h!^iwphw?/}U|[#81m].MPo¶T(n=lSmKT1PDżi.^Ga!$uOisj*w)oY8.D5@e㖙A1a\s7ФOj h)ohre1bv%t{$&z1 05'_+m*ۄ(sT[Ne@[ @N z4.eV`ַ49S$e4k V9Uo=f[xΦHE'ɭn4;e;k*wTyjhu.,Mf"hk0F:8:cݳ(PD DX!:qUg{I( XF`Uq5'iHSFמ%x:k-k,/Ǐʼ{5i6し& NA7[*A76(oP:{(I~YE˿%qFƂjT.];)VWq˓'T eA7_=Yl$pq"߈QTrAc*.Wqx\^ ZMeɿƒMVʅMDz T/Aw,_8Vtr( \@Qqڱ `+~<~U/youker-assistant/src/res/manufacturer/ETRON.jpg0000664000175000017500000005112613260315532020477 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:13 13:26:02]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO+.^O}=/ 94;Ӻ[]%}"[+4dYc+-f`kOؑ-> 5 wى}=הƇ๯o//3wC!}tǷ&6IٺC~[(p5Ya/uVϦ9AIsUɿ%eYS9́QWNmt2cA sl}Nn.-EyqJ A7gM++ 쬽:p52ݾ_՟:nc9 N}dVؒ#̂AK듮W+u*14k{جt"Q>ѱ[]wRݞq%^`qhtBqfhs=Gc˽7i6?z> Om},$zVk yomhupkٸ5s}I{ЩV3}ޛS_E_{1ӿH]]ͤ6I^mnYo}S7[Ŧnó&{kyYe m)m$zҿ9,os ].mw3~^Y__W?_L(' Kle-qk9iiunu]˿B,~JY@:qz|=?*Kf= Tl zks;+{oޭ~}'w[ٷū/],k.Knum,z?{^1Ӿ}?n J DoN/TI%)$IK'I$Uun6ݣ#ͮSI% !xǨ96Cq{Y0$Iܩ$ITʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIM=F]sRyb]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO+.^O}=/ 94;Ӻ[]%}"[+4dYc+-f`kOؑ-> 5 wى}=הƇ๯o//3wC!}tǷ&6IٺC~[(p5Ya/uVϦ9AIsUɿ%eYS9́QWNmt2cA sl}Nn.-EyqJ A7gM++ 쬽:p52ݾ_՟:nc9 N}dVؒ#̂AK듮W+u*14k{جt"Q>ѱ[]wRݞq%^`qhtBqfhs=Gc˽7i6?z> Om},$zVk yomhupkٸ5s}I{ЩV3}ޛS_E_{1ӿH]]ͤ6I^mnYo}S7[Ŧnó&{kyYe m)m$zҿ9,os ].mw3~^Y__W?_L(' Kle-qk9iiunu]˿B,~JY@:qz|=?*Kf= Tl zks;+{oޭ~}'w[ٷū/],k.Knum,z?{^1Ӿ}?n J DoN/TI%)$IK'I$Uun6ݣ#ͮSI% !xǨ96Cq{Y0$Iܩ$ITʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-13T13:26:02+08:00 2012-03-13T13:26:02+08:00 2012-03-13T13:26:02+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:fccd5f49-6ccc-11e1-818a-a659f6cdec7a image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Kpo=(;om2 #c0± -/o0}ǻ$Ttl,fgkJ}Iԟ:CmOzt_ ~]mWy/ׇqu)m{+1тpK@o-EKmܑ̀]'gc>}>Pgs2yN⦓{ sW|GUV6+0'2DcpT5S'Xk]<4z:v?O1o;>˵rP!vr}@)';o+];L[wL]ِIGܻ܂%6<IiaJiXV`2y$VBO<<}6v4X+}%H.$m:@$.:++{_X>mWۻW;GlX홸ك6FsZ>$cʎG>KN||=wgϝ=., u$׭k#+Ko&, *1#6پG&2fw: v+4}{sk0o n讆ϕ{1a9Qȼ9&KY[tVBZK "hԒcqP;(}_̮ #7>W-ޑ'ne6>?ڵɿ:7nc> ݥMUBhf*qBk9o{yRĎ\3xnFG%MA,Cbi|}۲:b6뽙׻|m=1=yjy5c WB֞}lFql3E*)i`.Y`|M]vg^nk1So'߿;g]$)gSC \~E96gøNlח9sPd)m bu1A$ZE|u*{YI!9"x;Mi&clڴ)~Aaz K_œW04\^ ,ͲT[EwVG PEc~G}@=d|z>]uy{)v[Bi cD>wۆur{ZXqv cg;'6Z 1+ gY` AaEkhlW۽Zxe#ƿVjp H55i#oql8(2 ز+7fXwto.d䕥defǒ:UvyڹbwVD0ZPb0(]9CIלmӽq;osf%ތ;Tor^߮L\2FK) hY ^y=^ptQ'Qm5 )Pi+[o۵n*;&4uT?ymퟞZKIb 11ozsҋ| ^h[T&;vhZy@]Łҫ>+`V٥ҷ݁,ENݿs8f1}͹jlQe\ H)5 /Hg/V[h[[ >Xk=*铣Yc:-ո=C]6:ʮaҌNAW8s9 gQ!fըіFoV k*$kQIXRjFOW?oW [k-rC9 d}˼s'+m@yV8Օo55yrKd'!xHڨ΅Uqq+l(wg~VKq=Ԙ,-N3iGZnT_58k&}2V̅}2[I?y$۹Si Wd]o yG5m0^ҝ`|}z|nN=a֘*¯\\}]l*3}3,NBJ:zLчAʩ#1QO87?gB޾qw=|mwٔ2)oUĖ^H4@Ir NgdLm?yV;8oo>O/{ ._??֏vx U_ 窚i: wWytL88˼OzÜ-#3qRugm^6*+$Upi"P".'L-/4nKNY"1UF[(AXT:#w74[>;yrx/z/;˸*kxݛiV*Yh*yhj њ3]I׺>ޤfl&vI7.("mlH,K&DV:QlO*b=m̮>ޘڟwvGٴٍ˸sjZ*tZffU]VV]ԞCo7~xRf崊R$ǘIHMFO7p|UڝwMvWg:f;vNUvnkTZulf}OrM=ESSBdm iZ@nI^iۭMo I-c1ʫ$.a% ƌ8punx߸x%keğ{dNvUWj2 S^5pԜ5Fz?۵ŻsAuxQMnV%Ëf#=Ɣ!$Yq0f~>`xwn;v. =O}cm%FG/7FϬYLlt%1GO2cg:Gj7WoỦv];wN725qr[B N!\MSk2xqȠwX4'j-a'i=M} d =<*ٴ.Q%.Bو$,Ef?5eaw2c݃~'휎٤em`kkWTsX2e7+shզsnǶj=M5®#rq\\FTx0Z`tURT]Gw|-Uds;Ko]c3|,Yb;uAM7`%0mD!gBQo!^ov&e$^ +Jæ«bSKSPmMOMulS"3gpۙ9}S3[5ZXV5s'#銃4$VM8|4jKyjKHݞ5y<>#0TduE:OfE~ꚏK3dOy>juV_ \Z}/j~-5x|m= uzO u֑ȷ67>SրW~ߪz֕?:EO~t1״/AaT+юSOSׂ^п,~T @L{kmm}ᷰmfi1&.9I~%UA]5`AGPUsԐ^!2:RC)AK]%Ch{2gnɴvR`mH28 *դg [%j1xLB8)ȞQ>QBte'2\˿޵ dS<^Q8-FqhƭڹL*ZJxii8 aaP Q(bB ,XTJĻ;%ً19$RI9$s}#~]2^7zv1;=]]lSI$s-S+30o,n^Բ컳s[7D~{r]Ӷ̗ck٫!+-6̐O/1ku-xh,s}*s2h$x/zs'q:6?Qv5vmc1X^XNݿg\/]LZSn. $@n3oEjًԽ!]NJَ ߷j/>3lq/;jcTg~ʸخTbd9ޯN ]Mf+2Z=ѻ#=$>@Z*õDzezgW>Ùwu'Q?bo֓Zִ55'/ҺH2f_GӹY)TZs1Ծ?SY,:5G6goPeHүOI9O :QV2qCm8k(v2FE=NWs }-{.egV̯G:U$T波nFGÝk[K2clRgMnWw%#?1ڿenI%?B'CϿGhq[PZRBQ`nqI5㴓Z֍p:IF1RI$TI%)$IJI$STʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM 8BIM@@8BIM8BIMCF]sunplus]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOTl\ .cUhߋ^='%q>ikS.T[9=koǯ&3x"~fc5g{j.sco"`DۦJgvCX:sZɟчԬOgڜIA'IJIVCc9K ?GCl>~]2^7zv1;=]]lSI$s-S+30o,n^Բ컳s[7D~{r]Ӷ̗ck٫!+-6̐O/1ku-xh,s}*s2h$x/zs'q:6?Qv5vmc1X^XNݿg\/]LZSn. $@n3oEjًԽ!]NJَ ߷j/>3lq/;jcTg~ʸخTbd9ޯN ]Mf+2Z=ѻ#=$>@Z*õDzezgW>Ùwu'Q?bo֓Zִ55'/ҺH2f_GӹY)TZs1Ծ?SY,:5G6goPeHүOI9O :QV2qCm8k(v2FE=NWs }-{.egV̯G:U$T波nFGÝk[K2clRgMnWw%#?1ڿenI%?B'CϿGhq[PZRBQ`nqI5㴓Z֍p:IF1RI$TI%)$IJI$STʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-01-05T11:13:11+08:00 2012-01-05T11:13:11+08:00 2012-01-05T11:13:11+08:00 Adobe Photoshop CS Windows uuid:f29b9da8-2b78-11e1-9c1d-e060394baa3b adobe:docid:photoshop:f29b9da7-2b78-11e1-9c1d-e060394baa3b adobe:docid:photoshop:14e7de78-374b-11e1-96b9-84cebc0057bb image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWN*UثWb]v*UثWιi%%wvT^*͚8CmWm7JOmPvv"8NcG6illSj^sտ uF;+L@HCGpxRN_~<_>~= FXGԢ [ Ž~ qQ2?D3kcyrP5]+V۽̏? 22+Il }L8mæy癬T(Q8;+J8?gG_E%@[g53Xм?P@䙍XX?dXlzlģwXc/Y?Iy(88$h(l2kWb]I;qV=}YFݚ"TYKs&3^RәN՚_Szwڟ5Rf;'8*CK{wz?kCf}b>b8]rFAVd?UP܎},uI.YDhEσS FٟoM̺:HSl-^\ѥg,]B;mh7 9]d0 ja⢎\q ~zO'鼹5cag`9ǀ;?Q~UDzNkgEuvi8L.]$mU>UU :MyH#MqlMllDpFQ0#LqEAz^z{i4Px #RY{kBX oS WvUMJR<2"'"^5^Cdwڟ5Rf;'8*CK{wz?kCf}b>b8]rFAVd?UP܎},uI.YDhEσS FٟoM̺:HSl-^\ѥg,]B;mh7 9]d0 ja⢎\q ~zO'鼹5cag`9ǀ;?Q~UDzNkgEuvi8L.]$mU>UU :MyH#MqlMllDpFQ0#LqEAz^z{i4Px #RY{kBX oS WvUMJR<2"'"^5^Cd 1 93 70 1 72/1 72/1 2 2012-03-05T13:41:08+08:00 2012-03-05T13:41:08+08:00 2012-03-05T13:41:08+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:909f7134-6685-11e1-91d2-fc4f58cca079 image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*}SMGd{UԐdPAAYp忥lF/ǽxsK__돋=/d1?>,{׀;-^WA#ǽxsK_O돋=/d1?>,{׀;-^ܾGOA71I#tDubi@p&S6/N*2|ǪR`nI.vWSrʿ]*=Շ宷qn\K jZƛfN= lh!u!zd r8&גC6Qxa5Ivnia%ޡ mp);nɖ0 [ c1~s3͎,џEuMm&{`!_y6fJz oDq ݰC̗< *@( jxTt4Љ/.M&%:/d΍ԿN*2G HaWW3ʶ;Q=ɶHD2Ȩt5?= Yy_۫Gk 8xTÓ\yXnR^4IdĢ!AbaJ ٓ fOcM[T5? rj:jʲ|?*(6r'S#.#*0Fjz.tTܧEp5sj q+k^guo`$5ÛPrhńCWRe?./d΍ԿN*]_Ujש>L%9cV%3e99(ԸbOg^Pq?{w(Ըx! AdobedF]      1 !AQaq"B#$2SD%& RbC5E!1AQaq"2B$%#3C4D&bcTd5E ?y8kd˓ՠ3qj ~8'՚uZ kK5h.^>Յ!8 72`k΃&3> xOja{-' b'@,#xgEs]I҅-($;髕- ˜UJP:$F)} j΍K_^- rmKIOғgN\1Ad}m$a{l5yfYIcrAY2"%ZfҪ$zL%)E2P(bp~A/@V4K`0/<,Oj$ FX?ypN3?iP6>[ *b&{QKͤF|-87LC‹50VDSkNg֡]A51eEIKs1)n^P]2Z3Jf:8$"Qv3uwzZu_ Q][U|gcߣٕ[iy"̕_ZnV1AuBuPZ*sXQZ_ {`aGVC!b@*bg3 mV#roJov$*ya% u 秉4G.+OiCb4ZN< .N?VXF ٪ Ku.Mm8 k=x]2#G`uE)/JZSB /J9DDhYVei<3T|'`vi $Ӟs"tR7As_;_GԣQZ$՞Rø4g8tGKR "͜shV;ֵ5EDȍoi Cԅ,j&\}C9w,VӑUKSMܡ\ϒUqte*@e+rd zoThJ) 0xv.-lOMLqߺlc^xYKg}uލ^Vu!zRrg|۰A@`=6Ͷ@ pK )(ۯEUk)K~e:˼ G<)q}}H[Gh4y\~ᅗx,tLFq[ f:Zj+kt-1weM5Ӫ9 R%)jLܢ,nG,Θ*.ˆleAF!vaV8X y;/^(l5,BƙW͟3DJSdIz" :HPU\u5Qvc=~^mRY )!s*]Hys9W_0k} \wV:HeS-ew8%BRG/)h6)ע0^RG^j"]rir$2(y86Xda?dLE2XZ0+xxg<:YaNp)r9ТR` W"q(psw,rҘVd;;ml{.ʽwAYu-|^HgW_q@zҩ P֕V @9\aQҜ"yMH QdmMBb8 /I lĵCnv oo\qkkrֈAH:a.!܄))Q%PG$n@E @#( y̲.W@Ӫ2mv l6='Zoe; @Z_GиEs`k!bKOU!- qV+ܢ)VPy5<5MSinaPW:iw]+}AHSk[AU ]ţΰJc_1U) .厌˚͓f/iK8P2Qa齴a⽺;k \z̯ߛ)8$C,'WZQ`V)Ϲict5}n1 BH/s6p9)CeӧmпW58̬&]*r+ָ_!6`t!Ba+IJe&_;JVHiE6_ $]o"tbXٶAknmzcl⍉Xbv+T}'H%RB*ͪYWĖx4#zƽHHX/-Uտ9}n&=sxAA%P2Rٰt=E:Q8W {E/ԗ,e?ݪŅh4ysC a=һ,UHQ6- ^ eA(^QNbZɢ"QzUGLqU~gA[%ȹ wy2eO6 3q[V-Q-jSڎTEmect ;YZM)j9'Y՝ ~{d,!k.ܲ7RBr4)pZh!3 GqB|׳QM5IT?BE1p;a]iR5B\dԙ=-ZUKQ[ƯV:[ݦZkyEV+opHk'$zgV?r$VlZV0]1bMZ@]e@`KmQes~vDڕՆdVJ4B.3~2TftBQKEBU4OJC D@*ʛ*$C6qnukͽZ~ {T[p(kHZo [k΢.AKh:E(䒰nbYʨP%Ѫx=},M0Dmʷ۞5_.W(%<**|vW:BK`i ?{ԭ~~$w2l\r^٬ũ>vp X }_lE̙f6$%>Zس$mSmoU034=*Jf!2:;KgHfEO'qp `m5I55 |N08Ym\pӵuŝ[LʜZso_I'󮵨W?2+FU8GaM&VMR.|"R' *Uo D$wx4ܶmg~9Bw+yab75uHA\D'#GȠ3u-цZ<ҕʌ%)@iMԤ*䒅 o2#J`}'rW"yBh t.[WVɨDx&ZFNgPV@d+ A2ebS4JeqoJiy# KX;j^#fTDF1PEP׻* ̩*U[cJ[9H#ư)UXS_fK3"ⴍs.sؑA e٣t:[6+DU v)NN*x9 @Lc+'OD\Ln9ӿ/\)˿W*Jr/8`f5-cT .6uN)-.ۚ% ,ZOQS} ,IlC D fJm/) B)zQ-&?6sîwe꣗]VtwupjPy;bdXs1)L9IkfqI,PcW)1LA:%f+.gk#uG$GUDVCwP, ˨sbݯ(J7d28bTNcx]j,/-5@B-DQ`ғ۾|i]C(e]:pw~~oI[{h4yQ-]-Zhzp[zjZ *O"I-C/c{1zJ|"#7r(StdCJbR%lLXd1w[$ܻt+LߩMQFw.S.YL%}],bvi:~{Eݽb-ęeZfčm,r6>f˾;k&R?YL䝘=5jCØy[[\ĻH\\hZ,F;-ST2廸ڙt{ZT |-9fLZ,?+wE*k9wC DZyl/nwbz}%ƦHP'xV*A ةO K6tzYCb`wa x 6h#3;_.rܖkZh$JbDVvi*jgIV$QB!^-@'c˘0nY>%tZ{n&"Û̒Fab]|#!Fh @!j,JJ*1-p 4:}/*Y*qU߱wo,Z>S6r}:P_HLd%~?D1Jg%cMYѡFJCa:]z}' ʑV~C̕_Id[,}:`pX-8{Z8ebnKxw:/y~JQGa Ȗ\L@꺔Gg7>G$5jo/*z]gs'su(ۻ Mw.` a-isfcHEH*(VW-5}@SPu8]YkHj*IN)0z[oHTW08Ѡe˷ܻɶ}[j~8w23ޟy}/K}OSrq k7|;𾋣}>wǓ_;r'ps۝J_|_z>=/Uxj\\_e Ty;o//~/kXdN?<3'{X+|/>5xVS}ڬX^youker-assistant/src/res/manufacturer/PINE.jpg0000664000175000017500000000752713260315532020351 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !AQq2B֘) "wHX9Rbr#%Y1!AQ2BRq"ab ?M+<\NA5 A5ENCM|<ԇ]CRǐ`PQr*,NcJPt@{*WYE>OoFevV.M}U T Qu !&jC.cI~0v(t(u Bb1A\=+'2 ZM+q&SM{(MGS_5!DPT$;}:he,qׇD)rLY]1mODbr)|]xZҭ;y!_|P(dw;̘M!ftXBM,f"&9mc2C/D.eJ((̮J`eɯ^.QT1H~<<,y=DD|"#E)TߒN$qjwHeiL[{9MG}=ūon`Q@ۑg 3[#i7:ثr8JEREnH؅^}nbGe = .87/4ڑ7r84\g;{lX&l1PO %3h9`B"/:?H'>18?3ISƦ>i.#~\1![1ɻlɦF&ĹN-28H܌)Rj) |-k޻ULm-džw/;8~6Y}*N چ,S>`lWoKDZ;gaeN9O9>awg޼'bۄXWcCZi+`a!Y$qljS*dVg{֦㔓7g/p?d|p1^:s}R@,hg =G!!96hp=(eNփ)q7@J B+taeowyήxyv[;XS.(DK<3H),HP,e%q!G5OJn[&~Ok4cM*&>)8X"p_(mT(d I:kl/T%P :Wm-'WP/c?$_:Ϝz=q:yo|CT=uƜtYn/l^`_5{/OOʷ"_ߓL@*E==?-Ư_籽?t ۹'ixgO+ im܋4D>X H~wm܋4:ݱN~oX-(۹ /hubT?KKnW8wOfL^68BPkGKȵ.8˴^:v'lԷm.>%--8۹'e?Fc%hhv3:ױ]G?I>[w~88Iv؆Rd;960L0[&9{ڪCiql|rWyTD 4f\NA5 A5ENCM|<ԇ]CRǐ`PQr*,NcJP=\pQ""r@=8ܺB~(}tԿJ9&SM{(MGS_5!DPT$;}:\JK1SҀT.^3(wG_uZ|Nyouker-assistant/src/res/manufacturer/RAPOO.jpg0000664000175000017500000004004113260315532020462 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:04:13 11:27:05]F&(.ZHHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOD/]oS:+ Xև=5Zc|>RU>K̿nY:6K5sm5V}[f]n3Y~uvC}%=4/OEo(h`͋}{f]zkks :}{U>u}kWc}_}!Y&kC:PXmMk'褚}Y%_Qݝ ykfk欻~}yղj('mUhv5[wؒ)4zmXp綧Om˶CdoDz3wzꤧO)xzVT/1^5ny {[{W5>~SכڙI eF~/?Wrt2%fa~ߠ$%.ԇIf@>Pe[oOC1^C݌g;_\gkѾ}_G1\n㫶γ0hap53]_椗s hjN_<k %K,jtzƿ›2n lN̆dR&ٰ&>ͭ y>UYAtًU[4">++/]8G,͛?:k+Yҩ)-+jێmn9ib"\)VmvXX 7ܺoKl9yni۱i{/=eK-de6:3xk750m08:-oB_j`7Yg}{Ⱦ.ot?6^O?wMߤIOTI%)$IN_}dwAݷpg6I$$I)I$JRI$Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ HPhotoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIMGF] AtherosQSa]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM v]FLZJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOD/]oS:+ Xև=5Zc|>RU>K̿nY:6K5sm5V}[f]n3Y~uvC}%=4/OEo(h`͋}{f]zkks :}{U>u}kWc}_}!Y&kC:PXmMk'褚}Y%_Qݝ ykfk欻~}yղj('mUhv5[wؒ)4zmXp綧Om˶CdoDz3wzꤧO)xzVT/1^5ny {[{W5>~SכڙI eF~/?Wrt2%fa~ߠ$%.ԇIf@>Pe[oOC1^C݌g;_\gkѾ}_G1\n㫶γ0hap53]_椗s hjN_<k %K,jtzƿ›2n lN̆dR&ٰ&>ͭ y>UYAtًU[4">++/]8G,͛?:k+Yҩ)-+jێmn9ib"\)VmvXX 7ܺoKl9yni۱i{/=eK-de6:3xk750m08:-oB_j`7Yg}{Ⱦ.ot?6^O?wMߤIOTI%)$IN_}dwAݷpg6I$$I)I$JRI$Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-04-13T11:27:05+08:00 2012-04-13T11:27:05+08:00 2012-04-13T11:27:05+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:2dcf6774-8517-11e1-a998-f15f6a1faa8a image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWI#*V[*V[]*Wb_ҐAryF}!hyI8Tx퀲'屸fpZCh?[r͚Ga'mMDr9q<"s+ON}û󯐒mN_[ӥk]BBg?j9Pq ^G|LDEFo|95o6.RH3B9XikA[<TU}Y"ʡN'x-´ír.G*X#qaQ8]o7Li`f臏<*SdH0\n@8%CMYKu ] 6P+;:ʮHEj~vG['fX>KH$%YPRz ~QԿ*k VG1 ߉*b+,_z|kuq9)JY+ǖ!:Ɣ?*n~ BK5**qP=77^_G>x/慗SXKX^Ս7MO~/ޭ-Šɥ[454Fc**%?B;~O"]MUÁ(ʀ -&Wq_8w\OG}/)5y"0E/!(؂K=>l!o:%Xj`t-k\74Y#B- :C~N/#cIʽ?O/q_ύ1N*UثV&|2wh?zЯ5?`=‡b]v*UN*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/AVAGO.jpg0000664000175000017500000004346513260315532020454 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:30 10:21:38]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO dz" >MѿRLjl5$ގWS'F#s];?+"ߩ~Vck1m)]G_k0)1uY:Kf6^CiH;D+$9}y ]n!k26+e@a?GRAaXJ~wK϶ʰs`oa;uUֿqiϨ`hV LW`UoFj˽knn3z2̽n$DLp{tM6^*pAo֏Ψ=7L⾮e3Zk,-mF]}[oQ^Z[CZ.2jWܱώR"3 =R}3!/ |zpieq_X7 bd1ٶ5OU3־[z Ǵ뵍ݱ.=Q$>vB\p$#7o84g'Đ=j/[{}(ݾ}ۗ?E9x.\斕nzo}(̝w"%+ՅÃa) LH*?ѽ®~zxY^4WK>ͻ~uY4u4G{Ϸ5#"ܜ ᵖ̐F~IOnIsZEϨ5L4LŒu߲F/_O3/*ΙUY间.Γk:+cSM}6Xv5yice[14sO8{.?(r"U,MѿRLjl5$ގWS'F#s];?+"ߩ~Vck1m)]G_k0)1uY:Kf6^CiH;D+$9}y ]n!k26+e@a?GRAaXJ~wK϶ʰs`oa;uUֿqiϨ`hV LW`UoFj˽knn3z2̽n$DLp{tM6^*pAo֏Ψ=7L⾮e3Zk,-mF]}[oQ^Z[CZ.2jWܱώR"3 =R}3!/ |zpieq_X7 bd1ٶ5OU3־[z Ǵ뵍ݱ.=Q$>vB\p$#7o84g'Đ=j/[{}(ݾ}ۗ?E9x.\斕nzo}(̝w"%+ՅÃa) LH*?ѽ®~zxY^4WK>ͻ~uY4u4G{Ϸ5#"ܜ ᵖ̐F~IOnIsZEϨ5L4LŒu߲F/_O3/*ΙUY间.Γk:+cSM}6Xv5yice[14sO8{.?(r"U, 1 93 70 1 72/1 72/1 2 2012-03-30T10:21:38+08:00 2012-03-30T10:21:38+08:00 2012-03-30T10:21:38+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:a5b0cfe5-7a0d-11e1-aae6-92eb3a8ba4a3 image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثW\0ZHN )cA8Ds9 {yJm,d1-H՚C nz45i5]x̣#)E:ǝsƿ4ڄWBX?9WX.+iʉ$dz+> 'Œ,dp Ge$5œ=??v o.[_i5]yK1!xPI?ܲȌlMN;K/8iu]0t(YWt#F@nU(K1 ?)CX|9c_'W?>M7ǜn}Ri>Vh8O##(daphD7,CZG5-SMGF^S"U*|ry0DFÉ2)лwDZҧ!g?8<0D:^w5Myw'0)l(?TM?!|ǭqV]Mcolq~?w?Z%XQw%V5 9yeB%$ HߋXpF%kN#,3@^]-^Q{;Cv17MJq9eN-Nj?:/5-;[hЋgEB! ҏv5йg<\I/̔1E?WWG8|Zor,Rv.LqT/.Iq䶫5[LTٚU<֭..ĒE3IWٵvPWU޵ws dF#9Z~X/RׯjցZ&h AdobedF]    1! AQq2B"$aRr341!AQaq"B2$#& ?NI_OfJAuOV$I~`h\ H@bsN4H 0 Q\>ީS`WŤ@_UkA5v'$ ? S$0q`4T]x$QP 19$(] HTfbiUɯ*BA5TM iلҐ]CՉ)_80*W.C(fӍLW.$wTx3U㫻\}zFfd \"dMRŪUӢ2zF9a)@Gstg2Z:vv3ՔcR,+m^gF<\IU4"qFjDȬ ;s&]MR*!D@8.;FpDn`d ݖ'/mz<ӥHZ 9ьDDtK"WDl(IhGjVJsR6G {#T!r涭ץJ7:z`F^ g؈0(ww͟E.˜Z ' T?0` R`^XNC!G>LUYJԒ.UU"cfHĒ)lz_%GY~>) U2!wsD r%zL0H1T4\EiS) S{C1.0 +VW7L:AjuGnˎL)kQL*PN3gRP({ WⓛmS'5j?:jiKPL8@ب}w4w> 񮛫^?鿟q'/nXOu7LCV׃3Ac/eӺ[:kb %՛>(XN(FFR$.}kGRoim(*aNыn[_GocpwZ;V׶qi]71sZuW ~,>M[Mdnd)[niZWHKu,gݑ29%d1BX@L[ǤqA|ݧ?,Z 6 Uf^ {-wdwE-cYHP0(;$J>LW `.j 37o=k.O19c<4z`d^6F^8-΀Ʀ'G}5M_Qb\EJH!.VX}nެ͎H0=/1!8uciJ:r:Ehf†ω|F]6e)KY:KDcPJ|^}ێ| a|{OU5ί1ߺN큫tlVVhmL2ܺN*#,[lKDJw59wAKAAh.6X[R+{{r^uμ̛k+.qnteqq.$h,]_2/*?-E;lSjIP+ycËӲVbmE*ـ{{3ϔ0D ^n=o;BZē% zZySD lhw<յm҇I# 2_V'>`pYLGRݱJM73k-{ jK:ZfnVJ۳>dM]GtP \rep`V,n\Ԛ. * 4E:5i׍a TN0Mn >Lkq⋂]:mdշIJ](1! ]})c+*;sV3 Q A<a1 Lw]CIp/ KnwZӲk@gkX$iIfǴ++RbLlLI0] hyjݷڦ{"#Y MX]^)Q{R%p(PřV/)#62~OxOne_8lLr *F *&MG݉4kOH.ĔI/~ +^!T3H NiƉ +@;*}<lXcyhrkb PMx`H&A5a'PbJy$? ˯Ċ*'4Dˠ{>? x,ZM1 51QH&0JQbrM {0R zz%$]o(tm5;;mu z) (OM'N\ӭJtAaƨ_]"xfєѤ= #YižկnuGQx<+7ӁM? <;6aw{[0K*thcGP0khq\t2.by}t͜%R;1@Z\}WK쫪^ܾst=FiW=?nE'ȓXE ~4qz= ~|= ?iԵ7ws$>v >zx?@Ͽ6v[)P&|:{!*2\r2{締Zw:+hE.vb'Ytց g<z;G4;y߈:|E<4Co t߉=_LJcoդ=H6pa ly`X? MOe9G y;^t=ğ~XQ(z tk>>TW#pGҀ (^|iKec EqazyWgRxmž/Hݕn`m*Ӌ[Ƒxg!0fܷA@Jk QBm!gۑ@w_{m"/ \xk[%~}cTL=kU4;-B@AFap= ՞)c-e%@EHPҀ,P@#}@c㦓>.ݍc.ovEW%FюyJڅb$8W_zf*𕥥hrB-ۺDęqCtCRqn 7߃bt\׼)g 5mnnopGХJ忊?~k>?ӵ/kWRx2K$clڮKRT/#kzaaX€ FoC<)imnSb$Q(htP,@@94uP@P@P@youker-assistant/src/res/manufacturer/SEAGATE.jpg0000664000175000017500000001040113260315532020650 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1!AQqTa2BS$D%5 "#4&R3Cu61!AQaB$"24qbDdtT%Ee ?eY*⟳o5!L^m')DY|)DYPhxqR6"m根2~ݼJZ [T@lv<ԣ2sZElSm)"ͼD(6(6xQ*RM9|&O۷)C QKj\ 9?nuN|_rSv(͕ ~ͼԅ1xDYfRإfB"ݡJT؉/'C$ feY3f)L巳g lEhJbxpr*rrϣiTpܣ ɧ/Jy^3]*s3 [.!+E`wVy;lGFX ^s7x=] ӄ5eGznK2,f5c 9Lp0 $EG 6\ݮT8NK49#S\ÖQv $9P )WD$H̚\ljz1ΖAKSYubV|5IoAѸ˓s/ؘ͚.LK]k&J(ɵ&׺9 )k-+|qKI8zL&^{6U)6RfJ"rEGKbE|N5K>v? ?0N,ueQΦRܚǷ1Srs\9D[ एTJUK8A]%a#|ϓ ܪwOs!za&3jq^lfӵI%K:[^: s;xm3yNDjFύ>6 >ҍݨ.Fv~mtٙ VYCa%R‘jhY P=9Dvxһo/ ֽ( gC͸6yDZлV ǫdcqL4ߞy\r1fPgzDP$p-c @ƴV[_HzɚMcP>d-U„PE9j;JUdi N04\J#*bi`n`"Ѷ oiu/ nDeW;WLAHdzQԅpgbZ L& ;TTϴ X2zπJT,,[[sAM#`I 3?N+(iMTNxx. e\ʯA9sg DFeOH5#GBI,QB!@~)&W҄;r/͑J9|Gi9ؾҦNh""#%Ɨ./>AFMC,F򼐫5좻sԒvJ9MQ[H:9o2841~hV^ S_P)b7%qǔ,ET2%E4@;a4T' nAS=`֭vyxtԬY @j]X(ngCpq̮w I80JmmF`tw,q?cru>N)!{,yM%sڕ+Ҋy5VOGi_Thpr1rEcl: ╻ 4k5ڿG:2! =18,9 q^k`m5(K¡k觾xom={]w꾟KCCM[/Wz郛iSb]30! z_J&CE PaCmߌJ2\c$pDIxߊ&a/;:CWpN7$!]SM\>%[Ilx<5I[Opp/eogiw// y /%yY೼0q6 Ѣ}SɑUg_)kx. sx.;9ٿ> wwc/3y߻%&fV0qF(o }a7ߠ3f>uF( .{}Q~1\Q^oM{0Pz]G}I~4%TLaCB]OԏNn4.uzC M*Wy bo%9J"ͣ䥱J";*=ECÊo_5ɓ P@Rڦ"eO۰<i'ܢ݋youker-assistant/src/res/manufacturer/FIC.jpg0000664000175000017500000001114513260315532020206 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !QqAaB2XS$4"R#Dt%F7GWH  !1AQaqT"BRғ$42#3rSDdtU ?y4rkR&U&5\L_ju)G~0u#^&e0TP\]<ԣΙT7RI^T 95) cxL^\`E. 5~J`d: ɑ˯XR SK2ܘ *(.G.jQL*bEү*1#@hsnP,@ 6(i vrm0stң$ SvLQ^<bD]Gg1Ym.aJ.N.+(?'bC_h?vH~/K֙6\>(.NF^Ӵ{^-Srą0&yU+P_ n-[3'[*;lT!FY uw=`Q+h:1o%eD'$ 06[w $C.i7O5.I0fcvvOsⶖbb@B{Fڦp & RD{Ѻ2xl7.{`֝⸑rKd;D$WS$ (wFn]cvo+&efVgM󕧴k}zɫc0$`"Lܠ@GboE;6?z͵1Ʊ~J-e+7sv&`DGPm>V>h2of8Bjڻ:ioeӍ>, yHX,:oGT lWQV?z8=xߩ?&˿TbrܭI 5cf#[K/Yf7kPEk"g#"CD&0-uG[)Ig  `JZsnw[}+X[Um׺{{׿ko圻vW~ן?oG8dzdo跰w^pܤiJ%TGG3O*`5U _2fi$ SĮp س C2o\hQM`2 ﶎNTVֈ'zi*q8[_A~Y6~}^ƥS(7O<׬+rb \QiQAr0ͰnrT\Li([x8B葂CiJo%An&XC.C F6޵ۓnKmדw3t"ȶf죵liZN6rH` ;qngsSN;F1&$rfVюD̹ap[ 'w+ns61/IK6y*+s <}-vvoE 0KMn=Fjsj wV'W}+{m?SI7B^@7A|gnc1Fg[45({i-G i$ 0ZC=E Ϊ5X|(?7jrӈrC9wt> rzo0-q6%2WuHP1Ρ]CY^h0QelhZnZOsVVSr;l0 ژ[Ծ,nmFSUnR"{JÐNm1<3ÇS; 1&@p^t՜Nd_qWJ`Y6gȬemJ#/^!m޾[H@0Yfoӳ̜_$Sư} \.]p017:|Y3O6{?ꬺ/. Q #QF&+ul@|5v}?;37YzK2 F6vr U<Ibw61)ZZdU_)(@WTGc[쉃`VT5t/c)锃eR}LU2=K'/;&7L; bixژ[ KZ [8Dm;47o:N'c62Niܘmbgl@ $E)wR3:OZ@ٔɨ*O./ƛ۸.`kQ(ިwяI^Z"F#OHf6[1~[iD4KV[ AdobedF]   1!Aq QB$"24aR#c&!1AQaq"B$4D%2TR#d ?&QZ⧓?t!Ls g$"&c )g"\çd)GDpmrL= 2L5H]Q$"%<pxBOo&(XO&~B$dIE"LǺDR$ϧ? DNR2O.{Bdj.IEJyr).߄MS{[&Q LЅ1$IȓdDt.IOd~se!2\(0 !uF\(  ]*L9`CF?M/ɌrͳUGQ cNhѠiye4>a̿u:|mC+}8xDaoB<88Uݨ^iI(70˸LT.L#k CtN(PBD$zcIkKu/.FR#lތpb(؜5OiV>ѭy9=\DPїf fP,LTNa$GMǪ{Ţ.fZ{Q=k[SiΥ/(*tާ+xxm!]zזqIĪpI$+.܈#qQ?45+ugeUL <$9:]oytgn=Jቕ$w1O+]Zں5q8-;d1Θv yAhBPiJ(( @B=i`Yy%>-*v#F$F7J|-j$P_7[)+ߕ?yp~.};6&?vfr1ᶌcB1چa,;,y!t.ked)a⁵sZTT-J:Ka;Myx̻3h>^6w`!Xv{ B-`2>=Sy_Եzϧ#W6>S{acAr"6#!0r76I'&ܱg'cә-pt#e_f7h7P-CEzPۼ;""(DTS]QryPlԘe. #$^[/ O i@Kth[Ɛƞyhfv@}d&%[>a.9& B< +q %iD*( \jwuY<v8`N t/B a4^}Y0Z}侚UvH5ϴaUgp΋?t[oG\^G\`+C:f\W4:A {yf}nO3l[Ո_y #y\Pꂫ6^Tg)a"LD$R${tEO&}=2V7*Ds*uxl 嵲MT֖,H v@rO[ f//;gKdg&=a֪lHuDb?v8gDanv،A6&AT?搰ؤj1ĞLG ť2M1-Ԁw늰hF1Vj5F\(a|>s&\<#(>]:*L9`< cH=&3]H>);!&DpmrEO.{Bdj.IEJyr).߄MS{[&Q LЅ1$IȓdDt.IOd~se!2\(0 !uF\(  ]/youker-assistant/src/res/manufacturer/ONKYO.jpg0000664000175000017500000001142713260315532020507 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   !1 $TAQqb2B4Dԇa#SdFHcst%5Eu6G !1AQaq"23$%B4t56rD& ?4lɟ#xLI &88&?w1.pDJx&eAܤ.~)[  DGIPbU5ዲK5xqeYm\X>\TLUIsv9Cs"ʧtnrB{+\rk͸z. yeX,N.2s`[(s٧EB9 ^$%=rx?az}Ҹra0`˙i\a0)M n % ԶeE,2'+D6n _[״jڶI2m  ₩9Q7|vԏ+«r/Ky=M\SKy=!M/@4ODSKy=!M/@4O')fM# N߇4]l}-l~I\<^\M5wqsm,UMZ7c<9^$*EHɜSN44Rc҉$|zI71`GmG(e'6rlX 54u7Xq>5BL!RuAF3kmMqo%A>loe, ?vD 2GgMQ؛zs_&7wUj/%x29 , 4.NP'Tޖ01^ɴ_V<5Q;TyLx"/+,TLjc`Z#daRoerY!&)TSI3N ?Setrb8#R0>Q[#MNWԇLT℗4[oԭdV FjQ-QXN2gPJLpˀ@sI[f=w cͣU+1bӥԃJJvPiI*'4(floi =uXy9C( FAiViH= G{7{41mzlXwklZcF0n.T bᴲn"lvFBdWr©pS-"S+Iș?;q!|/Dt1XS9|.v K3va0kĄ)gZjI򭹛T˵zaQ4\˱Y m:ZiMi*xњ'6FVjj:ɨioV@͑QHM0TjAA/[WhN2i1.n5ArvQƊ"9[I.Z;J=gNQޙ49aX"muf OovkoUo7SUqM AƩDPuiHzWS8<90Z֊M.B,)?c={GS_).` !b A00Φ:rSd Dt"|^Q[Z1/_3AA2&UtAjƲdC#}NNS Bo Y,ٌLdt#ī/f kJOoߪ>88Uv/, Cires eyA,?.SVK^ă`>u?G7@Oϻcv/f?E漼$޳<)խO0Lۚ>*h,6/ێEC͠YB2 qB`(e-@VRSh_33.I#8c6fStZ`_e4b,kM7\JS牳EV X{e>x`-IvSUDaXQ 曬![zYrI'gM+w[+]Uu[𧅧j C>+EtʖKTº@}A$e}n: WK87Z3oT%rIBa=EE-ɉnQt:<Ȯy%qQYq*: 0#*tY2. .7إ_ZSg.^twŽ+ãn|Uq"+~* e}-al>|S%JkQk:$}S#1b7FHHU,iǏ4`ʭhߴBqI>d-cG}T$GG}IZ4Tk#WoSq5a&9]r+S}h~45gVDXSK=w<jrd݁O[Ft_Xמ :k2O0-M-ٵM1ZXOq,}:nVx\_*,*( 0&4[i^֬mW̋Q+{cd# 5w晈؟ )nm?~&Aw&M,!(SI}M#ci 9 Z։ΧNfR(+&Od~̈́ߟakqVIoېy«,  AiW9Ԛmpڈ fg l^fKYl=e-8bn}5yTv)%*G< $) $phڳӖF]1D9 {?m*UWba֎?˺wYʋ,O[8pm?'qSSIXkǣ*?ixYTamX $*2UQ9m:%fl0U۰dsC|v{'7[:^-:+?÷9VQXTZϵinQIMbk )B;>^Jt9PP׹Lfq[oXwzeŽZٲ]D6J\7:X,]Id#/+K)ɜX8' MaRXlLN 8l>) *i\[Qi%zW:G豪3Gs/?.n,>9i;cuFs5셄qrQ]2@y(c3Xx,"Z@CG>}M{%2ڏ%>Խ$rMl'<\TߟeYz徖UNY:mhu\jœBK×Oy0Qevj#ڂ\b_7GE[[v=0ݛ0=0ݛEvoovOΏ5;\`Ƿ'G~|kl>xb\vvOޏ | {ۛ۫QrL2xkFc''Y'VSuݤ#[%5nٻQZкð7nm{&xx%(g"Hg5ɦ$>( $LK; ~Pp7)#˟""!`"8fys<RD?z[&hy3o 3AgGgBO%O̿(8|r0Sr`3@r<h"| T youker-assistant/src/res/manufacturer/A-DATA.jpg0000664000175000017500000001211413260315532020471 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1 !AQq "2B3aRr#sbS$4Td%5& !1AQaq"B#$C2b3Tt ?M1ZM~L!Lm k݉5 "&~TuOVrdh;lCbdrQbaz`0-Ab9tp|QڙQi4@_SB`bMb)j>-Ȧ 0]CՅ(ܙ/ؙX^ -b`4p2=xWxu }p黔\M1}P+ݵbnͪ Y˥nE.%TLu cjv$.~ Aгa5$*VrLܹ@QA&9 șf ɨ.Q0M}=UlrML3Qe"I4(%!C1bDY1;N޷ L@d0L8wbʳI)= ē,%&. N\$,ޏ*e/"b\,Y{:f鄥HGǍUb%|#KF11vbǔ[S #isܪdFMGTI{#.WĦǶB,= K,cWth֍\|y+EyC h_(˿9R27 -|0^7&ku~ϼ:0M1qT+_xګ!fZL:T󕤺 pN$FIg}96q_S|`ZǏ>䊓-V]k-#P3ZW߼,L=OP859M"[ieH̲ uF))4M)2h%]%TirZ j'uz#2._erhZsi. 2N\~`cuf{8p t}Wk<5:Jijeۀ [AN])j>A:Ju=KN-q-6E:i6@0DjY^>klEeR3b"Ғ? m[]suyϹK|NWσY=ϧ?#>W cRuUj'I : l˸yHj6NՌl$/y@> }W&ΙKEq(lUcԉM-j svzTW/jv44}QIwpp/!JPQIx{tFOf[>yϧJtߡЂ4z(VʬfVʟ ,!8*0G2X/Ukl[V 23%6l}a0j엧܅uO3 qTAQu,$5uE94Ժ%-GFC4۲ΩG^Ksa+afž5]qB=i$5$py^p"31KِM6fk?oIw=llUyO.SJI4b"\\N;e]5"8hУJ=ZZNK5UVCHޟ)qs8k{֖4^Ϫ+3jL<"f.l|W06kw-zܵqWn_zT+Im++$3˦ɳreܽYR!CS1&k0[{`v*t(f5Q3twZ.]9wNZL э6F!f.U.'M)8~ޟ@&/rL_> [J P+65;Ry ~&4J/M}\}vw>x ꚦZz iA1aCTQmx@~@W,Rk4ηseO)1b];փ1z`Gb ƂZiQFo$GxD26`YPDzlY'eըuMˉjΟV"@WL71UFhXM$]1íKt5g5/l#5X<k9<7/h;-J1-lQ`XGsCB%4f)؇g1IA2L^e4:JDw0!vOxK}jG͔jwV;E7 /`:g.~ lկr,"iAXabbqx)qIobzIO4rj[9ndAdʢJ`L%9A iek.e7w{T/ GP$CQq=c#~O>&$$~fb`)ʮ-QRB=+yN 8h p'92bܺޱ Aii4icot@A)X*6O0}gX|Z`F.$cޘ3Z%y܋9WPdH%_2OS.M fG~m94(ˤ/*_͑l\艦LFYHhK7k#(-$#v À?ű1dv=գ!G+$㛐; Ϝ|?Iy(Ȟh iTA&9D~p~~cl_*aßս0t\=&rka chL^IE0MG݅5`# zz%Ab#^‹ lL ˠ{ŽȟwĽ7rI/*B׻kLQanE0M}=)F~w؆׼0aoF["r2'1/Mܿyouker-assistant/src/res/manufacturer/MAXTOR.jpg0000664000175000017500000001016013260315532020613 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] !1A Qq2$"BS4aDTERbr#3Cst%5&1!AQaqс2B ?<sM&! 1oF'aw&%aAPr JKq:`7`bWA>?̓r ÓɈe
      ih/̵#Qhi3)cu$v$vZ;1D{6ژy=A!Htwc%R@P 5$Y2kPShm07JnKC1"s6A#whu5K6,~V {UDt5ժ:dr~ ?lZdr=;Zpݲo?+"# Ա|)4g5-}' r7kU'i<,w+׈Y>|:qo9p)_{;<O鹮T@gpguk EoM u@F &[2 f=vnecW%zA]WUɵpy:d-oR64n.PZ+S30.ߤ>mVTo]_ZE%y8[a ҪBҪNAλru]RdQ52T9@D9Uk\p5k,h˴QYL[:ѦlheTM8dmjj4(Bg \11^<}BϏWoջN-C\:&΅ n(A"ЕJ2!EcxǘS.QZ ՘o$tm6tTT$r@m9;y($TJUI"?,F#m|Ju/x/0r CåSH* KA'EM Ӷ܆uA+s 6iC̠ZhD-[m՞5id=R-nU ~TֻH^-.}hP6oevY5ϳ=@"[Vqh3J Ҏ,{e189reJgf4"uXf #$6NΫ_-[6rqZM`pK2r2)~OX@?.…R&|؇d_󴟰q2t]J cp(`#PdppFR2U* @2×خ iT鵂TI(Mf -i05pjQž%P9#i q$q1+vKjxXETl9;<"^J~2Yb;sʧa+;<޶@ŧI];a6΍bŃo %_uS/xON]`eK/@}:>%Ҽ" Tɳ= uOtaܱ$J;'4Mc}V2a?^bcQkV5t-[R+z^G\.іfa1K!>XbCoJJ007Ej?c Zt=en"T5>?Bt(~„ >`bV V\%rK6*/?YDMr?̓ryouker-assistant/src/res/manufacturer/3COM.jpg0000664000175000017500000001043413260315532020306 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !"BAQ2#$ aq3sT%x9:y1!AQq2Ba" ?a= V(^ 67Bae жѩt1mlh[Yr"65r֮aHMРjXryCt7e[Sq2cS9=,?Z)8m&MoX䦢G'IԊkc눫DE#_~m—)MlhQU!L+vBhognM/w4f8Wv+\$z"87D= P>A8ڝ[ڛYtgvD{sj{ZU;{f)|@t~٧٫v`z@PlnRÐBm*qXw#Kjb wEUO$ v[ elTG'8 J @sG( QU\%ڟ嵦cYiK-o.35p:dLu j_Koqvh%KMrڏRRbxXٞcGlHb 7>Hfvbomgv*E%>ceŨhǴ[՗s8ycUGN\"穧;{N(qU7ci_xZmHS8#\21u"x5Һ VlCO&C%ȜY ]I7ІX\sbct(^z $ee$mkyXyWΌ r0%>A#,Q]wK1+ `@c ~DEaR<iuc==k;9m1?:9]s }=IiQѰ*cv׊㈭$R)Sm6Ҧǖu7u"gޓԛf@tN SJ/=c{Ҟ`4M귊cFmLV/4Gdm)Apr'<]7K%Ond5,J;7c3r gpQn"=pdD*7&Ef.킔`&Fa(=s/ʫnic8HT Qz&RJخ޷Р=lqAL!r&ho1UӔ˟K3\CĬؗD Norg2ENu!%1T99Q1?wOs"'J`:"%ʃUv˹Sw.tSPVh&!P/yGznxxfBq`cb  AdobedF]  1 qB!AQ"2$% !1AQaq"B$24R r%#3& ?y:s% 0G1 }A:~h/P&d_?ӈ pFPClPPz?NOŶ i:rt@0:\sA:q+(x GƇ`oaA% 8PPze6e { |[`֓'D շbg=Ks*aYÄ6$yzȌqt&r(<`I#qDzplk];TOvGqYKNttER^!_9+~~-K7|S wBBV-Lh>8#&凄hDqLeV6|ɏ>`x΋RFqIBbԾۡubm 2D7/rZ☲(, t$3#D{aNtɅnC%0Gɚş{*l߮ߵnМfw"Nh{-=cΥ@篻IVl5ZsC \]gd% 'RgΑlE!Vq+l@5z98\CJIdغG1 d' ZN-ǻ9z fDHsuQJ(Laj|vy'4 MKC:CaiF%MۥŐQB|`A=NzW)za|2$6p&iAPRA NϝvNR|>fwlUI셹Q*\\3hF9X0FauE}IΧPs)JlQ]ԭʰMT.KsRHbXq2MP{6bDFul5M]4ْٽM hq8~rͭ]:9jHL>KJ-> γHcV[F!uٜI&ˑNUN*՞ue:Ha!*[8SUܿ|RJ@eoUi\I*%,P']5s3kÖHF8jL5M9#UYRXa"p26)YB%J&-FwWփuJ2IĻ$ݻ'DnuRֆ2-̳9Kg_.kFJznCnH \S\´-nk4ԺBʪYylYbݼ`dU  }mRwL19Tܒ?W)0:# 24ۻyyI͑_[q[X,)0!2A t4Ekt򊐱WeW._^xȵϕ)|@LҝY. T}Uu>T:#ČHbp> b`i x#_Ѹ.}ڙ2EAΛmX#[/,ZYJ,hJ^PǞT8g_+*#g6FN`YBs$'*q~YyzϪ,ڤ54)Zc$ntV2@b\EWcobwҭzU*mjZU$n2I{2?de򊔳`V`&YvՖNlyju؝p'Fp&&m[H)@U_LU]aX@V&xD;p_`nXO)n |A罾TcIFމq$ dV?EhD>jΌ֤Ӫ:@*K v9N&0܁Ϝ I!.3=|^ȣ /xZ[-\ѹQ _G !K5.oB65 5 d+9H&lni+?3P:MW¥q&KU(IIr{zm ))(u1932v腯kgV5oX4G]`u[{Om;6@Wx$BZ9FBISP 1.g@s~)D4Uj Vԋϕd5jd\䆄,nq٨h棞2@z$=8Dhiw-㚁QwAW}K]O+qט>ȍ$3z`՛"I@"hVi^ZYlݤEvnqU?E*{@U.:Uo * [$rI  N-X̐ݗHJ]K 靸ѭo6S .m-غTVB*),&Ո WW>m*SLD Sx+RVlAS^4 St *k_S$' - I yVXU lqs.ҷ*'TOTCd[L++ItAmR๞W99VVpTÖ3 5@.[bn/@5H2]&q&VeyURl]KNI"HKNՌU&)DVHX)t5=\X[*uJʃh ˷Tݚ9')Ls-ǯ'TL;s{c^!'NN(`ЧڎbngqJ]dNl֖FW}"qԬs6/WIA  i-5'^b.*mRww+ d>s,H;WKsIJ}38R;\hWX[s.+$ MY$f.}̶:U)N*zX\Lut#XyWtJ5lgg92)3C-Sh@<N G} Ly_Z"SR׊vC/d*d.K8'I"*!d6¥R]'bGz/u dM. BɞqI DyhsYce^ݛX[\UO﮹-%JSqT%rgmbt\IL` *gՎXqX:o4\ryLj 3tIQsد y?iv#FR=czK"؍i'LUdNSvI<3[TAlR)e\-y[mɬM^~;-J]7R-yiAEIL({w<7v׆xglbg3gpح]vd.j\ olZ$,6`VڑZ11R%*B[jP\=>*~拰ݪv3%Nʴ%0Rw&lQ8 {yXmSMd;YkmYi'e6"IEP*U6 ƹfi(s\QU="m.^lꜪyWj-M Y4x0,8hnor2<݊bkFٱ[3h18[5|[ gd+X>ui'VuZgZ"_]wKi*t4XSA9 رL i;=ၶ$J©A65]BtJϽ&ɱ=w]vr+-EnՌSLע0.W@N:_U5 )m~S*nb{ޜ3tMCe|آ{!'NN<)F" ҧZj|#Wҩl*)Oş|G)" dFq_Wmj6 },Tݵ6'DVחh ~G7JHDIM鱥Ve|յ6Ԥ5g|V$bf@"I}ۛ#Ƈbb5”lDsYY&GRbPly}˚!|p'IˍFDPLS]P޷;|&軭ct\ +p ⣜ʲ\J& ĸ cioݸABiUuVFbclȵ2sIˈlRXR7tm+gByIjy%҆Y%#Xzða:w< Q 5rUU4>aCӣ̙V<[-B%\?xr8#D߽Mq֍W:j$tAer1FxĊ{X;#y Hqisb솴9: \.9 |<N쇂 C0Az0 yG((\|Â2`NP@t2=pG }>-^kIӓ# ˉYC>x }4?{} /r8#(!tN(C(\~pPyouker-assistant/src/res/manufacturer/MAXSUN.jpg0000664000175000017500000001174513260315532020626 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1!A$QqB4 a"2Ddt%eFH 35E#CcTu&'w(8 !1AQaq$4TV2BD%56"tudEUF7 ?>L"-&>!91&<+LbLG @!1@ KtqB4eֈsP)!@B`NǗ؉HmɄW ZH1&#ԅĘt%:8L2D9ˏ(BB YA `ypuKl0'cD6Pc&YcJ'yU hGhꩆT5K<}1^ }ko/⍟"@vkuz ~ R;uZ[GF{ίB L>UK9!||_t!~ aPO40rk*}ڼ#FVi8U &̚H2(Hd,%Z[m"wP> G*G|*Ymls3tNwD07uZ`m[h4VӑsK V2ӥ뽶ϘB^^%r%:w1Zw?i]fmO{X`X8p4I׹xT([u_5oưTJdigOvC*v[G$3-)*Sjw-b'z2ޤ4t/QU>BpoSGl?8)M,7b.*֘pZnwXwLAi +mNOK9S%Z'ܪ`le ;ò.oz?fZrK'ݮ\`6;9T葭;Ը)+2jNiZX.=0u܋5 n9mkƥM䤨$$ yeJ{sB.fDlalZ$ 4HЪc*+ЍW)/iIkdFL+qb[S][rvոw3t6n3A+`B"C"mQ I4an l\i9Tf7˗ \PviɤIQi5G0`:9UqO֭Dpz-ep4Gί媃*vSHKM읱.I$7'Qu01' |瞈 -,Ҭ)AAH}TIGw{Z#akT#> F{'{UԄ2flV*".%1U{NV5pT nsW˚s)usB! rz pi]Bɉ&>wt#m6'r7%ˉӖ_c=ܩ {V=8Bp%RA)EN$9X 2yd9'`_DI<bb8-3[bMA|+R>(YT9GQ>{,[2g]=SxdYYW.D,J{%t X,43n4c_N]H1R{6aN-_kyi-MUʎK&&ʥ*@ۑsh"28F|lCltpa ko%NTZ5ߧC}S4+j)gWN U usHQX̝+h1 #i$Z2;֦_x\2bQ{rŞ Հe6*/Ds4^,Ёɶb;y Z_Yi+TVHM"9QyE1V32& NT)i!I%\.J8phtErFck(t?zԻ kW6t.)Rgc$Mr y_7)i'Q<ʛ5qEo;GU|Ebb4. iECՔ\l./ŷ͋MEUμPdToWeJ7tVI&@sȆd]%C ţ^_ydݩw*]64mW6pʙRʝM\4g׆qc"'Bp[ql۪fkS_Qor$l -hsSeC|#8"G/W;,fl3d! X(Kmm&RK6#i Z=PqRUe2dһ>x&F[r*D5a0C"2^kL5k˽r:,^WLҡRIM>q\ٻ E HX;ͣLjr؆?g+?,9$6Y©*#2h7x8xs[=WIͭHL+OwEg|kR"L=rc7joY^gտF͊* MgO((:4h㿸;I X}?_aN,Kv<Sk9LdI&o)`&i=ŷ/h Kpvޑjd+0xtsztKO zB r `vަ4`l=YE>>`vަ<P% zl,"DoNoSp]hGKvK._ N ӟ hD?Ւ   l7~hDtdCD| 08}ӟ K㥫%}CDxYS%5ݧ?7-{H.TB۶h(lh5[i:S: AdobedF]    1!Qq$ A4%a2BrDE3cdt5&6V"RSTU71a!AQq$B4T5"bt6 ?LyN1&4&9{9ʂ gNDbBLWE>Qք>F%Ew':CE ya0}vyjW _{lИ% wZxf Xd-FYw{~T^o\Vo>x6jeSӾkZ覣zs:c?UFvGYGJIŎQ*hm'?"LeMLGu58.,MTa:&T֪W2wl]攺9:XK5}A sO`rVTiʤ9%Z58 pG+SU4NȘ4L~]<0@nÚfLQ+Ia V&= 80]Ke_0]l`aûw>=\ WcjyE2vQ@5;5q7i>p+e 櫤#ozgW35TSOʺkm֞kN^'W<P '#wqpu8p^5[XD˹=qmgRyd@ % K]DT+Q7xam&_fuyfWWRVUekUM-NiuygydnVe*Μs+eUF% W`FTKT5D{%l }-:((W!/s*#v`BѨs~K׊]%%--#r[jb:UGGCWd֪ʳ|n9o,/}jdWClU*eT #&iTY5/dt$~C\E}%;ś!^*<ۊ($7ƺ$T 'ti*`/ +Y.mkfEܭR^ faa oPS;O(\GֵFp"jŷR'-vkmYz ]&; =qA&P&G֍: q˹.# ou~ACnO R^oC+fm+l&^<Ea@QaOUPcKzun^Z[绒BBD䗕Z=pB~zc 3-{md˶Wv ӳ*΋q@z5`Gk'GꢋrVX2:e֙7Wvcy[2,.ZS'/7T ,3(mcEuCuh|e.ey\)է;ig~zfk fJ5XOFZrSҖvr62$ft0H> (Va'71M~L&ծj;W]O45m(v?OjXu&aKZuc,}Nj'0Ax!K&J] VP=*Tj?γQ[QV3ZͅYʆc]2yd5r(aYb  |$+4!7.icߧSò0@~z[2+nW*tUef]lCN1y'MqǿM6 -ud+(=V޴cXyRj 64I@<`?KPP %K]ݗ{~n`dbK)7ț+P׎'FGn;a44tV,1>3mЫ/8R- ml 2 "Q#!D4€ eszF\n4Ԡin-Qhv# ѣ偍XDt쬱V>% MIo3WiG`C91Q76N0}`ZHodXd hO:v[/s&5:B1ďd6&hS I$X11(KnD/aAǔ"U-r0@ A^}^_ |L#8aǚ!Cc bLG'`$w!#,{eAPyqaKhD <x"WWi_youker-assistant/src/res/manufacturer/DELL.jpg0000664000175000017500000001104013260315532020317 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! AqB Qa2"$4d%R#tDTu&'1!AQaq2B"r3 ?}sG?HyF-M9KO;ۖ "תEn+PG5n2).75(eW3ٮjN>F 0&g[[pA/7E2(?.s~GOHg}@[`@QZOK"hKe$nbpN%o;-wK5I|; CUD-L&u4p)ed3n[u?{Ѡ-a0n\J'#l/cbYLeХh^2ۋ;L]Z;CDyuśgeAXf̚/7^f dm:,`,yե]F }7W0s4gWwC9mʸ&8v<걈(3ݥ:qR-5_pJ۫MVWYBr /UL(K /YE~ag'3@!:9C/qV+jG`npF}UT2fQ , ^_JbtN&2=ťt3rmڮ4[ݛa[ɐ] #I5RC UV(?5XN%nr)JiOV#QH}<̞j`OwѸ݄Zo gy4sáuA[iç`kTrk)%̡nYw{9g)1]domr\"aB *[nKu..B=FF;{V n [ljyrRIKh嫈nG\}_{"_:/ο%X//}'Wc̍/=^mO~1x$ 2[Vn0zQxGbR,wl ҴQ5]U|dgW\t$pdu\]f07Vw,EMC%h % P;6zUv֭e/+[Y/,f l*-jq[ ܩZj!I)fy%mC]bkgJSskGa;Ynj1\N}Y˦8n-'Y'`heLZv ݌Z  DNƥiW-[HߑPrG2WPF*VmJ/ڦfY{*`4VCR'i8'TEt뾔F|7s6.{9g)JHșERJҼ&</idiQ{f%r pO c[1",kػU5pT]sL4'WgRvݏ sˎG5 0ڼðݒAo1IuP9R~Ot_T~;1-^2-a83eIB[͊gՃJj8韲DlU2! @sf,ӝʒ:˜rŹ[5|諵^}K%Y _.f gAM[aՖGaҜµZJkw. `] Ԩ*]!/.'¯i^Hߟ{qnM:b".ݤٙM0Y)(Y[Z%%9P*z<<@m!oNp8bwlZG^M#%4 _},*_%`5r]jvA.X3R1YS.|_"ȉ㭮L <Ӯ}>Kh嫈z9F3*e^x0MSgȃ33P`Y)ԭ]4 uiH<Ŋ%*U&R)^Wt_RȴсW氻Xmm]|nj<-}dNO6 h4WZ#ĭ?;)NF"Ƽ jU~F~0v/ZDZ@:fndlfKh嫈z9F3<f;4>DemRhE}gFgWQe^W)QS,PMP_o%;*X% 4f6YS[#hd(vsvNI3 ^)vw@E[uZ{z2;خvv'_TQCXOVqjS\:SR/f*D^ӆ{L v0V =`P ,d_&%wk~r؃fEJdQq#MTiuqf+O%btG ѓHQ=0BMKqLiLh^e͓@oo[0k*Pu%UDvOEO2z=OFv9j94[s_6cHݸ>nO2ŸY(-M^k)^M**{kn-ork躃RH%*~Ӯ6Nyouker-assistant/src/res/manufacturer/PRIMAX.jpg0000664000175000017500000004204213260315532020605 0ustar fengfengJFIFHH$ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:05 13:43:13]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I9bI$I%)$IJI$RI$Zgַf\ыKir˧}`]R^'n:?9L1,t5'FBq?8@ xs-8Oh.7@S?Xlߩc sߠ佳V4._z8qQq3< .wT}FWA kcc[o&e^?yHevrnr"I]_c9"r3rcc|1q%S oy $d{/]k`Zqpnem;v7ɸ%V/VNw2&b7Zzė3oUvt@i> $ju^]z/ :H;nxkF Ԁx=2KZ1qzˀ/tw/xw_>~ٳD76/%1χd':?[n&Ck͵79OYϯ+ZMtp2ZK]CW]{u{!gV@#աRS˒Y8Nj!ӭV Kt,1ro2̬r6e[cSf5U-pi%Q`TI 1^_0Tif95;2j'3w+ͻtIt:y-~WOAee2X%D{u{z2Mm;J?q1m/.@S~#܏WOK镑.vM^Dz'eLtxWIԾu*ss} *  qj=c]S>PkCCAi/($G"3rqˋcW՚zo-C;d47{Ys~sZgPVDZsAk Y B]މ"gf8\V8Mǯ.tnbG[ S*՘3j]o^O[DN{?*/=[=I7HC& 7 x2|zI:I)dI:I)dI:I))"d)$d)$d)$d)$d)$ Photoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM;F]eyfn]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM  ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I9bI$I%)$IJI$RI$Zgַf\ыKir˧}`]R^'n:?9L1,t5'FBq?8@ xs-8Oh.7@S?Xlߩc sߠ佳V4._z8qQq3< .wT}FWA kcc[o&e^?yHevrnr"I]_c9"r3rcc|1q%S oy $d{/]k`Zqpnem;v7ɸ%V/VNw2&b7Zzė3oUvt@i> $ju^]z/ :H;nxkF Ԁx=2KZ1qzˀ/tw/xw_>~ٳD76/%1χd':?[n&Ck͵79OYϯ+ZMtp2ZK]CW]{u{!gV@#աRS˒Y8Nj!ӭV Kt,1ro2̬r6e[cSf5U-pi%Q`TI 1^_0Tif95;2j'3w+ͻtIt:y-~WOAee2X%D{u{z2Mm;J?q1m/.@S~#܏WOK镑.vM^Dz'eLtxWIԾu*ss} *  qj=c]S>PkCCAi/($G"3rqˋcW՚zo-C;d47{Ys~sZgPVDZsAk Y B]މ"gf8\V8Mǯ.tnbG[ S*՘3j]o^O[DN{?*/=[=I7HC& 7 x2|zI:I)dI:I)dI:I))"d)$d)$d)$d)$d)$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-05T13:43:13+08:00 2012-03-05T13:43:13+08:00 2012-03-05T13:43:13+08:00 Adobe Photoshop CS Windows uuid:909f7135-6685-11e1-91d2-fc4f58cca079 adobe:docid:photoshop:909f7134-6685-11e1-91d2-fc4f58cca079 adobe:docid:photoshop:ef3e3a7f-6685-11e1-91d2-fc4f58cca079 image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?ZUثWb]v*UثWZUثWb]v*UثWZUت7pT_i'~\~aZݎd#:HW+^^aAt}Ysd1^C8Wb]^uY|".  Rٝstz8rGgxokkW7Y`z[SU-b1Yf&L##~{|.M tkgu%V@o\^#B2cC2OBirnegD7 ;`ѓ#͗x8ac/I?5|VfwGqdFR6#/WVbL=͏03܋/5{-uDf)"u9Fy6vohS8VK+_C{VFQ/./':xBb/i5y#5.O殧zg$"Q~(ǜ8jzŦ6_kNrps5_HK:#Å~g0uwO MӜ~j͖>vL&Nwͦ ,mVhj8!#Vп,kڗKAeN?PzF5x;/>\YL7tR4Ol:}=L\0ˎ/ &q-MNUxgW? 4W]1/r?S{SO6O:/c6ڽ;\` [40Sj:?z_#=ZPHŸ~ir7ϋ12~]KMn}FXŗZRr4$=q˦㘕]l_O,"\Szة̺-[""ĨM֤lj8#T p -HգJH 2B1٘(/]=MnjT** W陇Zjgῧ"徑收fscuiDxTmr:77]ِWji/X AdobedF]   1qAQ2B !$1A!QB"aq ?ǒ˒J NA/´QDxT/AnwQeI|Ǖga-a-DK V2r7*+E=<~յp2҃K+A.;Q [Yt_0qYE~!EXKQGRՌ\ ʊOOmEew /+JK:A/BDu]yVvr߈QV@QԱc+-prS[Qz  `̢ҹ_/ujoHg:z.=OǾUS y77#çݞmw# z95H]M3SOP95`9CiNCD){@CTՏ>~b%u ¡~" pۺ.K<;o( j (X@Z9Q^b)_\a/,]+nXSp Me)3<0 9ǙcR ͫ aT;ݸx_F-~:֎w+?<xiO/.8ٔƜ' ڍ`T{~9l=N2dHE3h{>U"XǦFUEkt`+ ^ٙlr[uu(ӣ^4]:?#woG 8sYX1oͽs*־>e fK)"\ a&#(1Bz[%Of0\2q/c V D%H>6&Cdb]MGȶweȹV`3O̿S^H3cĩV[ӌ^.R%U fHfO-ڦ{q>Ǧ<ߖsOb<>&c\Q*jFTYL:gNSb1yHk0~]rH^S7F2MtyUS>F*5IUQreQrH:4W4(rčwVŬdKcrUc3q ɘV_x'}>3ȷ]8"gh~Ls)cslӓaIJh,ҏe#ۊ)ZƇ4 C 5+XJ`NQ*k+w,O !?8Ȅ-/yTV3r&f76)SB(U[S(>4m)՜`((Sl)eG($S^25(*UYh$zi?͐Ν=:Jq?N/fIrxϐYB]N\晳ƇU|uRʥӊ4,{7h5Ĵ:jZ1/#)a8b(-+`d$$XYUU qSO3i^`^EN SեDYٱfut5$9l!9^/ v4ʯg4?;)ontjJUUuIG}`8 mD R= ki2ƚR36X:)Th(ݣя ]cE[_~{j\#i7%:&K'DۢS%W+A.;Q [Yt_0qYE~!EXKQGRՌ\ ʊOOmEew /+JK:A/BDu]yVvr߈QV@QԱc+-prS[Qzi-].K(1; ұD㺎KPmEA%U\Uu,l -X`1V^ZKWq˒J NA/´QDxT/AnwQeI|Ǖga-a-DK V2r7*+E=<~յyouker-assistant/src/res/manufacturer/PIONEER.jpg0000664000175000017500000001063013260315532020704 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]".!"1QAqa3br(!A1Qaq ?h""" ""}Du^n[l[06@\X$ѢCGzS]T-5GR>hCb׻DeosG:tvt.\19?d҈OӯYr+.kQn#-\]$k[vۢW_S7U1>ZtS&ˬ麍w$y_ߞ TPYd,e5S$pvoƾz[CT._DmZ̯E=]W$(Acw l:{j(ixp}glT -|mp?E\]/ jJ6SUA53ɳG s?}>w~B.[/u6VrNb} /ACDkkki@4d`oQ:Qؤrk,]SųOey 2冺L 4Ǧ=_<~ WӟN-TX28 'W']շJ[b_٘zSDͨcK|0ϲ:scYYpEGKJ q o}ֳEf=˩M>]ȯ,DY$LO%^DzCZ4~纴tl6qf+|I!{m+I",JܙTxڝ$-?pg4Yl*x9ak|GߕZ ٱ AdobedF]   1!AQq a"2B$%U&V#DT5  !1AQaq"2BR#3$4brT%&' ?M1%M~l9`aM<0MGс&^l4?݆ yv`L>~wPPr  PPr`GF^I3ɯ̀0G1 ^) 0:C͆u. /V ]{2\ ]`w J 3JPFF˫+5@y7)xq]YEq]1ڃzb.M5iTS}bQsT嗴Hjyz ģv#6X,kּx^6Po^Kkj+Zܽ`;!XU9NdQ#TI'1J2mEPqN)0"E ?zxz")'cc-p\{ B=l#\qaP=(z#M.ߗ .$ξ{de8W ۋ$F? gt֍5̩UĊ)P>!G;h(8tڴ**x092Z~O< 7|M&bi3 ;s1.Q\da}4^U U#7A"|Uz ' |9n-w$8d$J1S:ocq9LZFj%*hSPdTP v=cMg7D ek9^.eʋwƂ@])Ǭr{rVƷG(sU*RPk"KlMaٍMe\}kfN'Sb#9QwyoN4e(uQ U"B Z;x )bj&Rnd>^^kkP:=ɪ@sP޼g*- LN}](mb sҧ~'X-mm>ZDpV̙ysH$xuϷ""fr>a#Qõ>/ 4ϡ&bcF 'VWG)iEUGf!ϊ[t}&'3S ^AL:;c>Ux\|SkɄ4L*t~߬"ŵB'EBe7/$ȹW.=/b=!Jt֊A'궭YynGe\5uؼbe(u;nLUR%! 1{suB/+VY[ 0'yVcPBԏ7*@LI=#" HvnUbQׇzXjꕶ= } H`}Az'gGrO7M. de+dPbQJ⥧( KQ4PW\e e LLQvդbJۼLd|?fUNEN6Yn-s4lalc+ 13H ~~ЏAZܦ 4BeN ^z{cZUlvC21]N"C$ZS{׎ x +opV s'Eyl_2~+)n-RS.Yt ۳;zrqxzNg>nvl! Wpt eb V]T <~^*S\W]G76GrH2:9v۾̓v֤$ڕ͕x "<ck˻}*+>qjrNaѪthAyƺn{6oՕ mojE@ 9aQZ@z%W@C[V)[i-Q<2f⟼''bKi֯ItGNPebxù.חGa X-j-^(o9Obi`eDW]כ Y7JZ;;d1X]K+}M#YI3¹ "Be@&R=Wcd?eZdyS/HWTɯr5Ԛ*JqHC0 JVEuQxE4"RÈkxrtY捾LB{u@,s11!8ֽ $am[S> ?PKR^0817Mm?)%;%J`p*J/N9͜вZG;=Z Lŏp`fkql2T:Q,K,/+\%?ǏЬ{zϊZtA$T.:!xYj =AE[T"W},g~* )өx?fĢ=;+jdzjĩpO(^%-UXx:)ծ~OE`.T~uw#,i>w6% Jk=FH "#N}J^+qZiiS-O)N\h\eN|w[|SWf<%4e1 ҭa3) Cčv7/}mw# 8br۷hw0kXǢFlmMid[/zt=9>~~s1^c~qÉ?WO uW) JbŅ;TFyI:ϥ݀`VUi[ZΤPN#*Qw +3I,JW E塰o#%Ii Idq k$s|Y(|RHl04UBl詰߆r JĬ9m]$>;1:X"89ͽ9n=_M&za$Vg"%j\qiV5L; $bq@䀠Jn`jMݖn^-+pP$*V2! [Ls^1v.zA\ 6yt:0"x`(v+ܥ#¹eZԘCpG%m㊉7-7=a*K$ߴZ Ϳf1Oi Yi|>%{od}gSh3=E-Hs5Q/mLF@Zh\08->CǕfSmK‚jgYPTH q*Wݼqq;R!Gd)!Ta2-=ܽZ9b7#8MܭY+ֺ+ d*Lu[ A7N!VnvmRݸ"\0e0vJB\enS =IxN  qXKi$4eɓUTmJC"޳y ]z'4Q:xSDžH:TZl&3FvBG/Uٽr}N.ʚhY.ОtM$VC<뉹9Z9bghydk٣OqpE[sTnpGiTry"`vkT~1Zj+fT"RU.xQ֫KLUN3 s Cӊ?׃"G+Fؠ0i%$/~ْ~[T8τ4ںQwxnJѕbB TvVĹBS}8>r.G'̨aDL첔R},0`\dW:y1u:$7+TB)Ö}PgR_gٌb<>}+i)0D v [ѺA%  cD:S{Rtk?J*"`p&c]W-3D]"&0rk` C׻ lj> akC`f >w&PPu - `u(`4„2V<̼C |t 芴c>0 s5›(x`<0M|h P}!a׼0#(!0a 0 = {-`VLgF_`b&Se Q`t a]2_#e5х?youker-assistant/src/res/manufacturer/EAGET.jpg0000664000175000017500000004222113260315532020431 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:06:15 09:59:12]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?4I%)$IJI$RI$I%)$IO4v\:ח~7\cclcSpˇqpqǏo+w[oO7V0s)gu[xլx`s`p."arOj&obISWfS{]\cls}T@.>b@hj'Dآ37!vYY_Yz6% hkH7moF?21-/e?9-DxjGA# zR22-,uKM‘el.{\ݿIO0򭾦,?{P篤^4C]PҎ۽G>}-hiN8'{0'| s(Y?r[]bſ3ٹXok r5bv~FJ'1ِ DtnmĹėjN:VkmbeѺU.n 9#|dK|"Y%{^yû;u uvH!|<5-N,0g֛w~gU(˫ҽ$25B`>4ܑ̘a8VN!#ri.8Ly81ϋ>s&"^#!!Uk,9{ ]^QM}skQA LmSUѺuVRqi:y& Dd?*|3hrr1[ab4 1ΐr>ǑUM槵ihU1ᆱ`s2IYV7&7 cW@-'wO4WݺHiJywe?ZQ?8Hk_$I2I%t$JS$WI2I)I$J_5_5_5_5_5_5 Photoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIMGF] authentec]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM 8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?4I%)$IJI$RI$I%)$IO4v\:ח~7\cclcSpˇqpqǏo+w[oO7V0s)gu[xլx`s`p."arOj&obISWfS{]\cls}T@.>b@hj'Dآ37!vYY_Yz6% hkH7moF?21-/e?9-DxjGA# zR22-,uKM‘el.{\ݿIO0򭾦,?{P篤^4C]PҎ۽G>}-hiN8'{0'| s(Y?r[]bſ3ٹXok r5bv~FJ'1ِ DtnmĹėjN:VkmbeѺU.n 9#|dK|"Y%{^yû;u uvH!|<5-N,0g֛w~gU(˫ҽ$25B`>4ܑ̘a8VN!#ri.8Ly81ϋ>s&"^#!!Uk,9{ ]^QM}skQA LmSUѺuVRqi:y& Dd?*|3hrr1[ab4 1ΐr>ǑUM槵ihU1ᆱ`s2IYV7&7 cW@-'wO4WݺHiJywe?ZQ?8Hk_$I2I%t$JS$WI2I)I$J_5_5_5_5_5_58BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-06-15T09:59:12+08:00 2012-06-15T09:59:12+08:00 2012-06-15T09:59:12+08:00 Adobe Photoshop CS Windows uuid:14e7de79-374b-11e1-96b9-84cebc0057bb adobe:docid:photoshop:14e7de78-374b-11e1-96b9-84cebc0057bb adobe:docid:photoshop:84691d4d-b68c-11e1-b9fb-e49a17428440 image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?.*UثWb]v*UثW.*UثWb]v*UثW.*UثWb]v*UثW.,h3oz7/5Q~=*BN \,8z~&*-w&&(1I M<@3~ikf$@n_;yf=r= 0[f^,V-8NG밌?\t'HKYcF<3S .\XebôG5h\rigD|EO0h˷d }E8x8poy;&#o2egM2HO/ɚeѴ \VdX~!`1vvyvܽ.Ktt v ,6 %Zz^*ϥɈ1tY06#-U^-kV ou欼~S25Q^BWr<>3:6s}k Mj[B0᯵pN$OF-n9`<(Eh~)йz@`UAgWvĿO<6'ʡ&Kx)~O' [?=e.{kReK`T}=Έ pAuL5ecGD-%Ԁa=ɭY|tϞ0&!^''i=lidq'_OE^yrMLqSI~A&lb3ˊ?@}.> ia?%'S MBH[7Fp@)nFqv??nlg.iLf%_uB̂[{iFw.YU(͞-1L\FRጧ08tі,1L |X. e$F(Lj)EG5Z`$u11>/%Z wxfe+ę~?ܵ{E1cI߳=N%mo[K"Ti$B#%[nX 7!5yeOfU#=JpiȐ2Kדsk͡HOYAS:jmUIΎX o' @/N?ҏ~󢊏DXWy!m)8O<*Y擟NX5F?-?ߦ.O;˷-49wvy*YIYj@yG:\7UУC S}acyF {K1<[<"<#28n_W0쬵;O^D&~ T1\Q<%i m PeIf (9#ӗa*3>fGFO+/l-7cRy]2qB\Fxz4˱<}=m|k"eDnR2B,q125/a1!q<\jm"I `r[ ִS8BPsu AdobedF]    1 !AQq"2B$ 34aRr#C%&W!1AQa"qB# ?<1sMC) 6 ф?`C͉cdPw<]Y NC,`z݉_R~ J"lMC) 6 ф?`C͉cdPw<]Y NC,`z݉_R~ J"l>E sUFN5*@a1 T^8i8jVJT1!}f0CKI6 28 4^^FLdIEG.ChɍXEA%I뜠"bQJ2%!@06mųN{RWcӼ2B"@.8jF\+PTO蚚7jS 3`T5$ BV[6ȧ7EeskyosiD^Ju%QCUTj)! bgPOPvswnNAr:Cjh"J%APU*+)G,$* 0q~,qn-vTNeȎt,:rvQyk*?GVfnV<#7?\A~K}"laZWF}El2Rc) ':B]&0s14qi^EuՖGifƠۗ.W 5{ORK/QMb%wuTRP) ݛz9r9O'=y:S둭]9\r])j5=kр mT2 1.@ws!Z_Ts""PRὺmx5[ &uK+Zg{TޝT_V'^)ÝRo0aldNF+Q'$m/dW *_Ri2"fljIt[m$,D>/Y*SL۴8-IzL=Ji}ܠPT8GV~w1kp7+<๾\'|N{>Wp53B:i )cv9m-DWgH?6ƙXJ?P1 :Höΐj:ث{ S"ua!LO2e΅ɵx,='*KLS!(%G<}pڿCg;h[BMoj}bNǭ aߨJ&nӵ ng%j(bFh?߳|+;ʯ2Jet?3+uoVo}+x5ws\c-^Rrյjmm'dKLzpꥡ6tX|-{saWu!U:)&2>ۓsl8tt<>뜧r ,nf|~U;*]uon15m.Zuin1#J05tU"fW#  E#8g!soa筕oo$nZC{];-c+ۨj;kQ{[>ι֕Sqei,wJ>Q MV5oWvGw޺ ')VLciQ8Sfq8ppzg[ҫQcjҮ,R[WqKar)T|RFE*D2A  GtCMcYNTL]Լzr-išMyﲛRJIt$bM+&6eR"(E,|)]f4uVat,5ҵƐUηjopXAM5p^@R66ĩwi-#ʒM3Ӿѽ`5ռ WOnۗm1W$X+@V̥LiޯSofrvZ9ܹ 弣)8>]nx\ nl.1|uզ&#vGId Nj)Jm+ӑaN^S `F;1ڪK(rJR{^&([kNwg?uMdOr&hVi†YqiTY^**n?7ٽoNŚ&8҉iԨZզsCTŽeuV`5:`ٍ֪Yզ"${]!qyA>\21dU) 1JP;/fq̪32), *cBU4MB2Dq0[;a NUq{KgIR`eԮEC+XJ+`+j'3_*e&>oN6j$)мouBj EZmTǧoUF6]EJXUNj6B!$ C{2"T5#n(\ueif -KV+]5}s"ՋQ2O*eHss 1aJ`iF- Ď3xnnnB A +Vup )kR"Rmh+)SUHI+ '|oq@{y& \op5i4ށP^\Y;]J8)~+"yRԯ/,XiA` L%<,{2{==_f=MC) 6 ф?`C͉cdPw<]Y NC,%jPO]ZM`aɷوe<6`C&bt6z0hyy,z vA˷1+"u`6`rP{+PO]youker-assistant/src/res/manufacturer/GAMEN.jpg0000664000175000017500000000776713260315532020453 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1 AQB!q"$ a4#ST&A!1QBa2q"Rb ?Bۿ^?1=xjfTQߢ7!8q2FԲ7d${-*B)3R}`jVBK\YN߮S2" Qt9 QÎ7ѿh!'hROwߩd#R_D*wnwOG1wf"ád"t Q5,&EY =D{LǔX+!=&W1VS;w~cUL10!aەM/>^ st 3QKW 13Oꂅᦻ߂&MD)b_0b(˿6V,|ȥbBpGoI$D9cM`$ 3B&i{{X:z%*4oۜwWkMmn;<ꈓjSMu&H@Sʭ`@](!]#j~9Ԭ.zUӳJZVUTUCYcG: Ñqk'2"(o5qM h8e=2UH_o@4WE8T-Q]^U@/0ۙQ&+z~Lubp\߃ڕ4|>fP53Ƹ ;[ӳ!21[Rգ7UBM{X&A=XɆeMP/m-XHjz^9:K*Vd]z/6:k(a4OQ+KwztJҍ'R0R.vtDv_jh}ɳ?ω,@}P:ӿJzjWދPμ\'/G?~߹<:?jcQ8< )Uڰ$g*DذڮUg'%e57dyCfFzx_z5}{ӨpQrBsȋ$c|̃:'vIHKS jMǻ&x%6`(櫤 &sFƾ}flOmFնZ=i6n s YU"rR.*(^Otc(uEw"" l(D4!P*e$B{eҭU .V_iᧈU>9LB{vK(yƠ JW[h U<Ӣ 6հ4c)'BC˷=iMӧQb=4*vtL3|a1>vjj+ Chn")-tm ›wZ{Fn(kNx#UtB29놱C7ssj1#X-OcʎFrEjI8hӊl5W?zv"ϴ동2;*R%ƃ#|)Whq$zMb6dIbt&zqNZJ66GhY(.½ Ss3t)Q2΀nIMTa׌5/gRZV ئXwml^Vf%A =MڥlIWJC9Ԕ&\l 5BnIm\h"T&O OrM6=I1/k)# (*J !Ni<;zixc cV8%=:-E,3\ļqi\rJ7"(Vl1T%j3Xrʫ @<}_Pŭ ':k{>?#0:uM PPL磸|e5 N +IKW|dDKH}{pOAPf[Vw)B#m*2hSM2LBqZ ͽFӞg &NGUuz:{b3b#CcixjԢMYD fmwINvC@zeӲZn_=r*JxٟȦތ2nu/q0ͨ?Uh0qF( AdobedF]  1!AqB Q"2$4 a#DF1!A2BQaq" ?LsLC) >XPF 930`!`t(9sBcmee@=AĮ|<ٕU*8=UY2;JdKWqgR &qLmmV`6<}/{pkig_n:zx~'+yp\]]V4٭Uɟ,zP!f>NB0L.aıd91 \%Pbsh0cP9rP{1+?v6ex6M7[A U -ZZ qq=K294-RP5Ig`RP!DCag mܸnR3Qg8w*|=+_imn/Z[[}j{wbVԪ-u\A4(9ԭXpsHXPJ @>:G㼩ž~su.zڮ;]6jv\wΰCf>NB0L.aıd91 \%Pbsh0cP9rP{1+?v6exow,>oSgLJۦǜL:}'ilքo`K_[m+A&-I+՜YE񩱽o͈X(Ofc#p{TɬI4릎v)In[;ݽF(@MGVLuV\a!&CsTRZKs pIm6k'$RggbVRUwʙDpQs:^CԲdK̑23gX drJݟ px 0([pW&.79](V\>;%W Doe|NR2ǥMެʄZQ=ź3o{Vߵ I{5YKg]A\ؤR; n3υU܈\"*xBf "7QiinQ$vbI3V\:+"T\m]X* Fq\CϘc*f0 XT\J('ݍ^>j?Snx:="ϟnICDhGXtW=XZfլ5(+p@ SHLU#DI]hVxWeWUB!dx}@⠲'GVC#/v S)RZe)J;֨+/̚;}Q? ڊ&䡆!k΍K΍` ҾA9DP j,1_$(nJj1,NgDUDgN]H!,U= I4o*pGg () _*":c s&^V #FYvj6[+Ke9:Xu Q.L%G6U,?(قэN0$P=s=DrYU%G HE, x 6h\U( -OW1ّǁb]d+KbIJǁU&RawW ~\񯖞񏖺{%7cfWc:򿧌}?ަD?;tt?8|/:ileֶKjY3$Rc[eT1E8&ZreLBquR5"n{ Pە3+}bW];[.2ԷDy-HrW'698J(=~8.UAnDWF`RϰL 5|MAW˚>gd Uwd!܀M`1|KOp?*Lt/s;*l%q[kJ#6p)Le2Q" 3* 3/;bD#P VP bJfH$6 ap*WFLZN ): _hm(Hضw% aaeYTqt:NUfRt@΍l$TRIˆ`X7HTV"zUr儢D^A_%|DIf'Hd2wu PaHC11gdzЧk̾ef=i$ALv V6%pt-k){EWP<3 V֮0=i.m5:MVҲxb$y\+%cY ,-"y{\N<ٕsS}WbR,5:!ej6mS m3xligJc1pH@8jQ8lRmB%*:%Ify+9D6XkHG֣ZU Zi() %ĵ0i&ړ\eІuƙ#1rrTbYΉέed~l*eぇ&v! ,k#}X`}0\щc0sc: JK16`22rbWyA>~l?youker-assistant/src/res/manufacturer/MUSILAND .jpg0000664000175000017500000001124713260315532021064 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !qAQ"2B#a43C$5  !1AQaq"2B4$Rb3%&#d5EG ?&XYNLB IE FR /v? As^)GܙN\\b\QAr@uaGze'削oV,^T 01$=ؓ\A3.>^~R %V!2 (0 0-"9rŽO &X93a cxH&{&f=\H&|)9{0KCre9sQra@aqF[,ErՅ锟&)%53>]i?LxStIOsEHC6kzZD?8xzU")Q %CQiZfLu Cgzz:dKIyŴ[x—TJK!QRtb,V r Fk`G柢;uV_20J=dm|&ϚDVHѿZvW.Apꔰ퍊%BCU@('&ʎT$rAӌ^.MN Lfڅ0'<*][q0nҕػepѫޭ `nX`> ۻUfr1KaLޣ{Y%wT "@16}zWYmeL" -n&R- ExLS hetquY|"mΦiƐ: 9~WGTS/xQ{TmL^qhd/|D#,˃04ݱkVn E- u*f'7RX@! tv.e{01 Eɩe՟-d{κ:n:%|}xb׆k{LBt^"Ͳ4¿DAs-)ݑ쉻izq[V%!ц wvnJݹrmKn0cФwJCY鯻.Zj5rtZF#bPZ_+'wQ|. _7ݦ#=jq -11K^(Uy$T-yrںQo-1("@>jSmI~Z osű}7c5e[Ƭ1&Xv~njcr=7_cxڍ52Dޠ^Dw @f&6҂ce DZ2@oM"1"+nJ 0qsדe<*$ehy>$kD-RF @MO?~; hkCOLŐt{VVMiCٚMu_ݧ6;/ھONzW=wywvsMUF̷ۧ[ěnWϯ=85 [4Q S@^PJ.$14 *  -3E)qjA8}TKntvrvUѤ LI'YR{9+}h(b Kwʽvݫ{b`12+(bZ] ]S7Rں$gz5]||@ vZ|(..&'əJfSfϤ ԊڔЪ7d `."8LhƚƵs-?+MޓgrQ.VԌ.oӼ~$op/]JH[FS+UDTJu) ;ӯh3J jp]L,736<[чU?֕ϋRm\!1ͤ{[Ď. 5Q2Ǘs?H pH!=4WAkmN)ϴl~T"Uluh=T\ga'Z]ߧUDL9!VRdpbPaÃ1.w-$kV"bO`R+k[k[*'[Eײ k)VFj c(?QMG9ߑw8UE`,#g=l:WK(tC++Zܼ| T@mDmLEތA!Kr鯦R*^ސD6:Jϋ[ilTa|5]F8md  ~M!.onLQ e}hLřZ1ٛ_RFD}j|޶vam3bz6su#[L>/ܾ׋Ymz8E5`B߭=^{ i00+##Mtj;ڮhEYnjVQ=I]p/C'OCI#YJqhڤ]7̔Ɏ n`0o|N3~l]OL#~ h9Wy{6nbfV?𿰺`$۽AH!o`E띨0M(o;t(ST'bfA(|*Tȥgra4 L2ch .2I4lEyh4{+kٙuN"ǒUcK:rZYp$\j=^jYs<4`F6Y}b f osM>!\۶ UaP)pZ¡Kž"V좡U,6vt)kVX3e޳?agVD0uͼ:g\N֚[{[>3ۖ]f&곂h(QiP )UNn٦}>!mVW#.Hr{l/ Q 5o]:TTK^>}gG ©?|VrǭH=<ڤ5e/JJMx-3LuGT ЧGD{e0l'~qIݭ9IZD3,7YqNZN ] |]3@jru%9CTH}+)ӣNERBS@Ȕ B)Cf>f.ToCj]gZ+V@]F\,Z." /yj/ ,P~XA8yօs.˺;D>Vq}R2>730/1VMWe)k@.0՚&w@.ڳԼwf٥c,[W9"WuTN+,H.;g AdobedF]  1!$ AQqB42RST5"r#3dt%&aCcDUX 1A!QaTq$42Bdt%"5RrD ?9*O;EĚRgYGEC;_S$c<4i>S[2K =ć ifXXMHtzf]AдlF>sL1);CWjˆe{GYGɍk?B'Z0W~)0G սPpS`~R}ϛ#2MmU&}P(k)1&Q&ĚzSk܀LKvvJ7&elL.a ,L/L-b`4](QL/MKd/*M|1&$׊$"QB܊bM{;)u)F̾8Q ׌!E逅lL#ˠw =ik&^ n\u|HIk֬ DbNRn3[Ɯ CM.mT6b:B{pE.k'c Y0J^S;&o^ /qϱ J:XTD$jG`l:Lf?*zڕYWO.uy+kB˫ͥlHl^qgCFrQ9md@@f`Ao@S2fS8&޹IcXF7,{c/G]`h* ֫ƄК۝@w̒alIA f 07.Zңa٬cry?qS Ml53>+d_>EMו5MVy=ӏ 4a@Xczʞd0-U6빗fcgѧ 5%+w3 {)FCg&&)4+`GOE,Su1|ZX40^&w03>_{w[D^cXfI nI M32٦zUBRDS& Bo/'<<.):㬋!LODJgLM>~$z4@]ΛqQ o(Eg;JϷGb?["""'5M|=u dZ^^q~m(k,Y,gqFEsAQUlQsIfmoNvʖ5$9B|$5%edYA''S$IѶ~sNU ?ZLJzTqK0ky~0E}_[דTnQ 6'liaZH}'^R\S7Qڹ.g~H^ÍDT>Gk=;bkP, mwg!3۠p:!mCHKH9-Ҕ~.6qMs@lRĤ>;ÉH%|ӝ^9{ ] Hkx^T82IQ&Pw}8c߸3ҦE &Rfˌ(i\On!YQGR^>QSBbMxMb)5-Ȧ$׳PBnL냏ؙ]xX^[іiAb<xi'QٽZ6G=S}aI:`!h۹1-{CP{$ñ aZRm:c!A0֌^ :lLQI}@hG %@Tɗ*w?/youker-assistant/src/res/manufacturer/ASINT.jpg0000664000175000017500000004200513260315532020462 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:21 09:59:00]F&(.RHHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOTY_Y=ƍϵͳ4@$7*&cg9=I*=sAkϨ{nեmQS {CZl/q.sx>g2LgQ'tNIhgVO*8#/I#Q] #Q^_~1ŧVHk>Ncl?VS0s}'NO{Z,.d{6Viĉt5Qt= E>}X 0kƀ\ NJQgO~]YuuKCkQqrkū*cldaseExxu~+޵t$r(~NUľǐց%W#W^FC*} Cn.;X~i%?U_>c5>Mn.tUF7hΑ_pv0;Gݺߠߡ z-yw<.=WDΧΫw2[knl?}iϫ=S'5S q`Zݯ_c|}.8YG7icBR Zd:>$Kx+ %jkyd$6m1HMf8yt"s6QY[%jYkD4<I?Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ @Photoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIMGF] AtherosQSa]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM n]FLRJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOTY_Y=ƍϵͳ4@$7*&cg9=I*=sAkϨ{nեmQS {CZl/q.sx>g2LgQ'tNIhgVO*8#/I#Q] #Q^_~1ŧVHk>Ncl?VS0s}'NO{Z,.d{6Viĉt5Qt= E>}X 0kƀ\ NJQgO~]YuuKCkQqrkū*cldaseExxu~+޵t$r(~NUľǐց%W#W^FC*} Cn.;X~i%?U_>c5>Mn.tUF7hΑ_pv0;Gݺߠߡ z-yw<.=WDΧΫw2[knl?}iϫ=S'5S q`Zݯ_c|}.8YG7icBR Zd:>$Kx+ %jkyd$6m1HMf8yt"s6QY[%jYkD4<I?Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2011-12-21T09:59:00+08:00 2011-12-21T09:59:00+08:00 2011-12-21T09:59:00+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWN*UߙD|Yգ}v7')*8x+-]y/Y|#d5{;K;i.K{hTwfj2 4fVnY Dd#C^<;ѺƿCh$ª՘I"Ƞ4 2vb]v*N*ſ3lt!~DW=={\)QJ~.#6y> q$z:.=ռ̶$S,U80a9e?Flx$EjVi[rn(eއ!O8X'!H46]چsf  ҬaF&F4\кOk6ޕ[E*W3"N*Ng -̋M-? .j2~7E8_'z>jv/.=֖ & KCn@FFC œIwG$xC$t:i嗛#tI/YPx]G j9-d֜ HpI'-jֿ3/DW̗m#ͦj;#8ErxG&:hLDk!7r7YU<ͩb$(dIyIUV9ggR1H= $h^eb/ !+Py(zGrI3ᅳ^kɗyV֮Hd!gc,x%m58yvk;iV, y'}35zT 8_~B5Դmn!Rus z#a89~fTyMӗ^DER&Y^de=6ɊBWWr[?_) wiK/5Ea 4N _$!8O:QyKvY]l}Y##4W͘MPLMqz /?-<}YMmdgcL8aP):O 'ɘGy?imn70ߤ#I@ E)GVc .D sg~ae?tKx㼵dmo.a 'eLEtzC˩/4tB) +oo2#F_c`D'77dK744M„aP֖r#$d&=m"S֯ƞJ6t!*Bipq rV Q2*6F!T[ƛ`z)O%KAuzTM) wzzAGT)JTqk*AdRN*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/CHAINTECH.jpg0000664000175000017500000000750413260315532021077 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! AQa"2qRr#$4d%5H 1A!Qaq"2Br4$%񂒢#&6 ?H٫- ) \)큂o :qGeE E1H&p"U)ep 5xb5r!B"e 4R @3E 0M$T.(LBh(2 J~2LT&,V Vf\(DL fArh dtR WMwEA W/I8*ڥ$ lP<ΕB23B*#r9̝9G`ΜY<%Z{dSV;31G1޴}/#.|ǝWkIS7:6Cߨ5yv c}WUSUV}wL2YZyZ٣%/z)R(JJsJ*N`!RMꈍ9ڗ'Qp1W 58bxv(9Q azi H. &,V Vf) %dtv.C=gl߳þ1s~;aVD [9po޴ Es-uEny}\Z򜒽[o:7xE7J&'*‚=Tt劫TZwbo֫k۴Oh[umb>}kR5vuR:-)@ȌzGoWK<9v@@+r{#Β#T& .30W; tѩ]#Zz]d#:/ڊjt<;w^1zUuh]lwwsR2/)@Aj#,==b  ʷa٨ݴĞ^icF8 k]eSkgYWݫTc 1R$x Ljh`&C8`&ԵueGmۏ;W@t7fv»|tvF =33t}5b>]FZ,HJTna1ZttVZ>k"F<$A8n ̖^tgsZ6 P@6`ĬūJg[5K ˨qKX-1/=-Fԯonr3a#1@vUm[bt{tH8:mYl#\H'#0kj&P|_~LvxárPw=_ڽuHQd-n>oF+HpH>F5}sG)qWlf.ĺ#15#rDdx{&i}ݟ0S}N?/ykʫUsuS\a㴁MZ[=q_fV%:G6ذA!f AdobedF]   1! AQq"2B#3$4a&!1AQaq"B$R2#4D3d% ?(z@PZ2۲&jN˶Q\uFn' 8v]) 6O_9FwFUoO~M[Trۨy׶ <hPTiQMWE-\EP&Eu^U=T [K~j-8%( Rr =~^:Ʃw*}8ʯB;De{SNJJ=Ӊ>cYV[EZLMI4)Z8 ܲbʞN5 < ^'lӼc-%FJI5؝ыzrR~ef^;:ؚM0%bN泵*iZ=w,jvBfU'Rv1+a=4{+wz(._O$p++>~u= ;R1|:p衶@M/W-Yhr׶C?[sRU(@k&SuEeڼ㼒JsaÖvM@S0! ޼޶rD+ZF*qTJ tH̹mRcW,@j2=dͭ@ĚWDp2Ǧ,>B[$Q`SutE On7^73``28X}*IJD+E.F L!v^p,ΓAzSod:$& YqM-B?!G: +3/YʊTe`"R@ GE3̓)>wQf.>i?TVꍖlҭTTr[*]2jr;O4nFkv8pY,"zRzxp.bPPME 5jjWّp:>mm`~ 8ԛ.͓@aQ;sq{0IRf޹ qgn'j`=aظeBl!nrFpW-,U…#P8aJz#WK5 [Z/q8Qc?8+{r^N]Qm^LjWA̪(-AM?~qG~ o}.ka7x*{i+L>cf)Tݷ9dk(]I{nA˛TR뭋HƤ4%Lª#P^*@rzmG4GPԔ$#/g<`X/I+ڽqNJY'2dIҁt(oS%s .-XRvػL*JҷaMuN3a@:ث[BRu7T-mW$`!TsgN- tvmjWbgnd.gk-92^Lhlh|bLWܚ[ͳ?ES-[dW[fX% l;#p[W2}{rQ-md࠴̂}483)~GI+ hYm^g|ܒ2&~!&*4ʉ xז[ ^\td-#I%5noH*>Cw@!ct6g-EjO}bӭy%2tWIhŭ.U4lrc1+*mc ˺Te3뱉&6pKЕzQU-t'DeGއelӞE*@B.r>\nVRna)b2npTLE$̷v&Hzmu)W .7/M iiMYr'2RBJQ7VzXTzHvF,ۀȚkW2'˅pYџ:jr' FI ;e3LefkU`]ڔbӕB7%s#,%MɭeJt31d{h+#ˆ4p+H.wq3|]sWaXcM&B+_L&5LR_͗]ttŕ]Y, )=D᎝=Щ{>η-({s,Ҁw.x=*E5Z>\ǙS$uj(ywARBD0UQһi<ݼcZ9ȵ*1L1:_[uOXLӶf1%R嶀|'ۗÖ6\|jaͧftenvMS^8T|h˘b|0BՇg)T+BB 6bq׽#$+2/J*СVOZ5*ƅC z"p 4"\èr,eRl&A^yg&!H{M=W7z^58uv遫 r_E"qN$6i퉳p{㟋U=ߙ*0Sڸʟ/&SDﴧt+PՒ cylx'`uh\J"qs<%MSBꋕ`\:ϪNw[8E{USZ"֍\ʙW /P2j)@1*H",PO/cJFToY-6[M2Ԥ#vQ-M9Lqafxܸ$vGzݙ"țI^ePUoG ^X{kpf\YpL[\M*LePU'.akՁ݆ taL!A9CA˯haFPX`0(ۣrޮCmU^Y#߮ H%gGU#Tޕ *75&-6p)lWnZVrTgT_1{pbgSE©K:&g df܇(S3IOJnyj6Qd[X\k TZSPkz~a$3|r2jצ *)93ϵ7NmGsoY)Y35T+rmw e˹JkݶfNDD xAp(G^a4 9Gǿ|s/y̺U?o^e}[=~zY Bi1ȧ'M|ϕ幤ڻWozPbW0rkc f$A 0A OVv.х0tKo .C a\ ] (᠟DZM1ގ_v0M{1& 0MGم 0Mzz u)2_;~(h9u (k X2 PraG &?youker-assistant/src/res/manufacturer/TONGFANG.jpg0000664000175000017500000001140013260315532021002 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]" 0!"1AQ2aq#BRb$1!QAa#2 ?t()JJRR()JJŗYEe RTt>욬#[_c:%f_CWo#KAHhz׉%(m_]i.~i)_>xsLk5nvJ.jn6Q:=}]sdMV8]BZ~@ujڒV =DZ);L.9IbP-~9#MCl6M |||T<'BBGG4aU}܎.(%J.k֟-ױZ6dJPV<#D#4e ;x&JTKiu=Wܭ;bCG*u%. hh8|]썎*L@8ԥuzH>A$4h/$ńuCBն~ y+ UEY\t-KRul"{kgm"M-Kk=vڵGG. 'qokzuw ?j5U'g[S>i7V+wIYsZAvo$$v{'C]_ԛxܗ YPq؝ԄQqj@*H>}'Vm!iJRVO 4[WM.夂Tz #c͞fxK\xƗ?';l}?6[qؔ%F뺵c08LIhY_yr4CwR~QfM3ȅ!VV}ĥ H$(> 5֥!) H@VNVQ_T90mQ2 JA*SoSI]_dOC5 !7Lp$]x#^KB{|}׏D əa&dc$e#XxbÄh?Ϊhn*^;qMcihuzZelֳhkv^%GzN3b?MXG)mf;d儕?jGE1,9ۂ$$t2put2}m  pvTC;v[f2NZN.T!?. ֽVW߽NE.މq_pŒ|I$Mzg|qg&7I1R))G$Hu1klյ-( $ u$ҔIR()JJRR()JJRR()Jyouker-assistant/src/res/manufacturer/BENQ.jpg0000664000175000017500000001375213260315532020340 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     !1AQq"2B$5 aRbr4%#SsEe6v7!1AQa"q2B3$4҄7 ?<-qKi cD٢X)D~m.JQ|?^|ZR$I~{~rCJ0L3D510K>`4ڙ)}V{ZN^T 3R<[z\0P6 Q< HB~ K&zgSӻ6Pp +&S2l v'xLȑ+JΫ@Eb\ʕLR;?GCj,{i 2DpL@ăr5`)SV2>o&b1Y. R R .*cnNu˚S(ͬ|.mre$@Fts9WFQ? y>`5{T?њorIݫʁ_=ηُY 2$$lJ0/xl+n\#Z*Tg/8XwU7.TFҫ&{:A@njQRuV-hM:FYľ|K*n~MJH!'{5Yz/{03vzS\6"*Bm%Z>L`R!jT N*aF"!am}oזƕgh'uZ|DQ.d`fh0Z4~I+ܡWۚYHz^WK@K0A֢ؗ\9. ?G:hc\; +~wӿ܎ZYuJ$Ɲ1ǘآ* S7 Qc*q9Mٲt{n :\k@c\U{S _vmܤڨ0i&2I:n*^[jhPUqkqmgl_) PmXT pnT;i~E&YX5Dmz\Ȥ 텝ۇ85W#hc* 1 *gf7}mC"ecwm\*{=#i}. ~B*#fD+8sb:zs6y*~L a1֧ܣt0MIv Śi5K,dlot:y ʤThKmNτr+G Tg>(cQ|4zۻymOk2ލq%! '50HƳٚغMЦB$`= \'ZLQi;yP+֏ WZ[W?)W|ڲ[-b|E^W嚪 *ogng?{IJ. йoW&əH7 2f|+nGFUk0Y+yX/2U$[Ήo[bw}#KQZ3TslXط9e04iYls/ ^Sڎˁy1݃!ZX0x=NzX]7~Pլ{÷{$YO6};tir%YXAzY,kjSXک2}6X|W{xPfj^hX Օ َlgdV~^aTlBȗyKH5 (}rE;r֭@'D~h)PowR???)yzֽ:]gM,b]oHX }tv۴b.P /ȑ{Z~w)\ƨDI0T|Aߝ"{G,ͥ;zNx]al~]GlM1C4Gh TI. +_Ց*TbW8x{|=+{_k7&L^ 2lSs[ =wOKu| y $ $JSK=_-HD &@VzY^k6~±Ap+h(ڼ7KkȮҊ$Ε&`H%5g0,̘31E!1cvDxv݈t\T2IegDJJ p $8ssaQi(Ç X(5V/;_'~ltO_m.*FфUlu3}N<4e1ە^L 9aGoon:sFSXđGGɛ߮d,V.'>w7ik .OH>&Zӥj:ˤk 4h O.7iR4sAezֿ(FcʼnTÊv-l<>تu`$1 0DW݀MǼLlpašE0E0q\:6-2p\I8via2`w/ݴo$:+j1̱X!|-πJֵIA"^.8hMǮ}]N۝~oxDKͮ?2>+l`317v Z{xݕ'X )ֶȜ[هiW%^鵺^9q k*nr.=m&g-6_/Dp@MnfUcrU%K6 PG跃gYn Fd:ewZ4I ݫ ʷ܁'Kg>Uq EB|(Ӵyrm H -Pʫ*B,TX䅑Ka !PW8!ۭDDJǵ*3e{LӜNSGmLL ZVR/ρiȻ&70!m4(Щ0,Zҗ)r@*ɝb|$ Txd)}ɼ#txn F]{+(FAwk hБYz@"V̸{01˘1J"PO ɓj<5S1\'2/ ?v&:R c,L.łXF\,d+4>2w?&?~uŸ&2!O$lé/rܱ-]2Zځ<ƏcFDUI]KFoa*:p9(1]Eׯ5{=:\r4L-E{M-b̙JXP<6.2ܪD)RcːHNuO<ɸI Ҁ[֚1KYL<҆72JZX7'4͡2uGʲ:](>9xY[G.FCCnIkж eX VΈupnUA-q& Tkw!YD|^{<S̹Ox<^/y~fx͗ڊ}Vۭr|վk^\*NʌrG`X/YY$ۢ'TCS8~1-Z]弮sl.O>0gi ڛ~pd׹**vvgkFKx$jZ:˕[tdE^CcJ7tnV|e+;9F0⻸Rjl$Rr+ ]ke˦$0檷cܚ?à6¢sm,A^g$q3$O99Ȣtɒޥl#㽁r.Ԙ]K!.#d=>*~ʝznsM75.$ѩqUN]Pu $Nl䛶<-r]ɸ7vzlabIA<#4(1[ҺdQ0d ;y"փ^M:x̘ uZ㤵4DƔ&X#fDy}E\Kr H3҈ =LbbH/C$ rtYPɔ)k(]Ze:5"]ܷw,7$ iXF4'cLτQ`:D4y;v&G%rI1Za$8⮞+ 2 (w!c^[B9j9& \%UqT-MMDr$Na(ymgSom'%ko""2 ';9" Tg҂Y3GgLsleB,l7n *܌Ȩ);Zi*pK+b>Bse̞Yvv7}N疓8_~}+( %EJ0V#oiR 5xhv# _2컷$aSFX&]2k]v#ZMN y޼}Znk2Y$y!ҲNȪHr[nG23*:Ѽ ^'sAj_bI ؐ٩VÓM79 ~p3wcg1gR(-12>Mc fO$ZR@MBʈ/x|>-)S$x=Fd{&K%0}QL>߫Fiyouker-assistant/src/res/manufacturer/TYAN.jpg0000664000175000017500000001222113260315532020354 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1! AQq"2$ aBx34Td%56w(8H  !1AQaq𑡱"2BR#C$4Dt%6rST57 ?|Fk< #LI(N1:bLvC')sP%>I}B8"G?"4 $0G TD|(Y(L9`y3@G?Q`1&ctęOS:J|2pD.~!0D3G-<8&C q ,G =PL{Y&c3݀d)3CG?Q`1&~&$ϧd3X$Ľ]:[ }B8'G?nHLw0~{4ے~f@HCxhioJfn,Vvc^y-]-LrʫskԭG;1MX_:%aJnR+;9)p<"XCdyx/YO$C~5llx5o]MKٚ._U>YXR ݦi_&hTz?0ͫv"}ج FJ+rPM.M5uCt 4l*,nX"8Dyt(гj2TZ>UyBo_5% 5%,41 0Vr9hƍ5zADN iX7BDbg0k7gΕӨd0~b&XGWm:dGNNT^ڒ֥IJvaϒhk'iϚIstKPvbcmZaP*4?QXVNg-L}4-r?2UOj;Vg~ϡEeV+VoWV/?9^gpZ~",f4]Un 4<V 

      k=Jm%$*ekIc ᒆۖexJ)҄K0 Φ `֚,2vIdS\D chѮ\("o$8l%|mb>bAfx-j_Z$UboksrRio?m@uaRtaŰdun";pnb՛=1fAҘ*&p<#i^;:r(:/(G*b/Ʀf@Qî%ZϸGӽpɸ` %Xvxg_(F.*4Rm#Y{@h2YbU%CV}:{fIrJ^Ԕtdp=vּWgֱҌy]՞EI=óP5*ښ/: 2ȉ\nnb=Iӛ]=M6"ڑtkFVk\V6nyiNǑAi-RBTi cԥMBq@ahaں*(5ǂpst{DS0p,/zV.ZWR dORBd%mLv\I;~kRw BoP-$dTii$Z[ej!rv'D$quq4!I ~"U1 bm1Ҽ)M͘cF<Y[VA ^2k;holEKu' &Hf$v2Ba;#Gk޵:s4z=ow=FDPihZ7eʹVVBQum#gԴ)$P@Glly]W]b|=Y6O$>_Moq"!/~)?hQ|F`y3@G?Q`1&ctęOS:J|2pD.~!0D3Li0BH`.A։PEQlFr(g(!1&~:bLǺ$3 %:u@&e\B`fÂ?VX?8I)r@H/byouker-assistant/src/res/manufacturer/DTK.jpg0000664000175000017500000001222413260315532020226 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!AQq 2B$3%aRbr#S4DTU&H !1AQaqB$"2R4%tFbr#3DTE ?>LWy3@G0>Sd1&c:bL:!)sNhbf_;}Hϴ FH@O.IC$yr@Z$O j.ɔNP < #LId)N1؝1&~Ĺ4 O3/G$H#$Cj` v$e !<P{ G'rݵUT⏊SOR)":M 5J5a ?;/,;rsZmM+~ӛtIl+@/Je.@&To{]kQ%Vkk1hJbJI=RӖИe0:U rwp ]#6AZ;vJLOaSV-tvBfW.RP@vrD% f0ϖ5%JKO)?#;U̚%1fS Ee+qEi4AV1 \f멑6UI,42T$` #|yJՓzĢ%R=N@0F,厛Lέ,3:A9fJ&d1- e&8T;K&tÚ9ulAN[@gT:vݓ7Fm1*nN{SWG#ݩ0MKx2A}e_ #M(w"wS!QԔE2FDHAH/o]˕_=ćŽ3ʼnҭoH&0<46߫u67^QwjTY/xMsW{nʬ ߟl(Ǒ8~Cwf))d\}Aջ0{SVB84:W?6ͱdˢ1NF{;-myDf˨M1 Gr]fWo@CGJ (u,xՔ 6Té0"]+:֏@<5;Wpwwڻ{q72ZKnp7_F.sfQe)p$ktAV+{vCpՎDa8uA,f^zsԵo3;KptS-{rXy++hq3(w7P vUG䛃AXuv5qN<ޮȌE{sa[Ni.-܊i>psMUšʱ*U8rqd⊽ZZVgi(YFCaчԻf$L} "2G dD{}жZms7`Ԗȭ_em)iη ݩBg&"L=1^X\t߭< sr;1.OgX=DR`$i5rݮ]mɬb叶&L"D`Lq%,%&Eh !U;Ӫp's H5A]7Ѳr[tZի74Qԋ@텩I0K 0^9۶`Ůlpy :r U]!֟ޖf u*m $Y?67qDo=PjSn̺ &O)x;G1q兹ۖMG;e f154{=v2Ֆ9}o"½bE(ErZ—E)sln;96T2 9 I#ߚܼjI,%ќ4O`o@p#U'TdkGymR\rà|]aCy5i)2#݊[RV_E|ܤQe2uoHx\ᦆ,D D:b=^n&:\Q)>gLmJtXFb"L#8VdV'=I)t] Uuf^;O&"$1.sVzhǁp0&:8e ém fKt뎚f$#jJ )U1)jE3(yf4i&m11O^Ϫ}ygy`C6wQi,i2Se2LP5Li&L4& uFۭ2ԚH|ItmZ:ZHYg,` kIRjW GϿ {!>={/.@|A_Ng=.?7}29)[P>Xy=6̸LGk=,k-3g-(M^u|MJuIjcQ}Rg^Vj6 Jn܋SnD'RfJM֬^?ޕ tP#g^S/.fTC5ZgDS Accu~^3h2 Ff!)k]v Ƽi^_o8-j Sg̛Ǖ%9'(x_@۶`F0Po|ʳT+?snm|+;J۶)!ҿ6r)ʹ)%L .>zThK(^\S\ ^W?L[h~J,P\8 vW?{–V`Tܟ>6Xmmo:XƅxJ6Qu%%C%M3'Ө268D9kO&2KGKFR4)ИXiH50Bi$L T錰%y*OVBeeW' |26'3MNJL!QK0fc }J1UI-*l;\G($0YT0;1<pJY`ߩW@SVY1XǺ% )rBQ%_ j.ɔOP < #LId)N1؝1&~Ĺ4 O3/G$H#$Cj` v$e !<P{ G'rd'(LP&$ϲ'LI@N?Ndb\Ӛؙd#$ys!0;S˒`2\=#։Bڋyouker-assistant/src/res/manufacturer/QDI.jpg0000664000175000017500000001456613260315532020234 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1 AQq2$a"B#4D%R3sTdt!1AQaq$"2TB4%DdE&Rb3t5U6V ?F93qi` 1oEs+F`peb(2"\}c M=;C.bŖ݌l4P{0#bi?oٌŋjmѿ#xb(ٌV"Qфe,E;́,14zw\1b,71.i`G~߳9jrVZuR7MQT搎~rk2w}l]LDz۱`cڤ x9*ytF͞maӔZ$P\;Sl!AbKkxCDrNTRIq)3H%^W3Ha=w*pL"fO:c%ՕEO/"J3J1Q?qڧF?NVYt3~slA&x897iʹ]5מXl5S,ಸO8px`np[hE>ya2S!NW74 y|b N&RL䴳dm2T/1ÖFvUFQRg`@Bq ^Z3dJxP%AÉF C\>%Zbo-IEʞ&zmeY٬q. 5d\W,h2Jl`|?X\Z)O9cЦQ*/o-H91Xas)oMn^Q+UNYNM6L͖źes8mx"]2Mɜ>Eed|HF9)|jW≛['ʬcM_𥷽go:ekK.fɺk[vK()jw8$L?(>>1-4gy*T9}Jd2IbQޕr_dS+tTH_aT39?4g$%#4cv"i Uʜr$E;p9p (hs+H ɮtU%UouG F+߫s[ȉ u@譗|`5oEXϳ/貛v[O"T## ޝ4k5eWq/zVTѥ)*ᙃn"nI+Gdk"nF@pӂjbIMP G*n>2E"dT;@iJ_-I:`PT$1pUT cAx6Hs3>'r\˯Z?#[m`-<0n@nPw%)ugu!SA/9}W{@mc J>-x `A\oA}g3^]|QTZFU}]Tf1) g,j-.y"JU@rG+_{H R0Lb"!KQʝ@39(FJO8wQ:m# .Igixۍ&PieWMYt(Qb$#8@Tb7,~a_8%gk ( ,-8!#Io >l5Rog)g>.#/p鳨#FιO qSI'*?C% {Tw4Ym0H=t Rɧ̤8%F2bO{XI?GYRXr)LV+bؾ8#!Ȥ72(N*҅R܈m!N(Kf#HL0<]D{XrIzTɬK0,#8^9և sQ8Τ snьCSYqo j~!P=PVRSQxQgUq}y9*]C*PK%^ahf(jyoV=EOy.O4|G>3dG8+{wxvrǻvc (iIEvGy5+dpr?LOb: }fVbXqvցU4kȇ5JIqsp# 찘wKK-eBK֞8QȇhK@vdMQ?n:I,-t}s4@?F(S5KM )'BZRA(iX3U'T![CՊEY֚tIf[4kMjM9!Sf\a J̕X< *U:*PPJ RX^j GH!0߃/Jk%Q]EUzQ4D* T.2hёQV#iTB*`<pje. -?ӭÌ3 XZwUkO}qo_j-i|dw[[R9Z! m)\ pEJX؎\Y.Adș"J68hl*k;7(%đpjixBWw8׌vܞKAv#e)s~,4KSt(]I/$^j٦6ݨ{8!\Q. [H8@Nt(O2~_ s2gMPבK7(ܥ<629ftd.7 :s`ʨ}f!<^G1l,;K!)E dN Yf _&CvQI]GoPS#ȓwn6;JQ8Dպ~iKZԙxCi/L=vÄѠ+9Q ~|m+u+3"ﱝyL%y.h"A ׍iQ.1H"+xi`c(T|JU gjd\񎬪7aUDMcvW ?o'>'~sd;pmN };ݏlZz7Xo E1\Q}XX7z0exyy%&x;}sON,@`qe 7c=;ؚOc1bv7@o7c"x82oa~N`K. M>v1&1 X @n6 zw=4b7youker-assistant/src/res/manufacturer/OCZ.jpg0000664000175000017500000001064213260315532020241 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !qAQa"2BR3ӔUSs4D5 !1AQ"qBa2R$VbrC4Tt& ?ǓJ,qS_e!Ls uIdA5]H&^<ԥKuCe9u$TTPd.QLw*jتiW&B j=T"M|R yyJ:$ $r)FIK1 4N]=ԣ֙IT7Uү*NM}1$]%)ztE z(#PRtI/IxR WX Z l=pA&Ψ-Ah8DmrF[@;6#\k:ˀ'Ol $/T7Uү*p^fyy{0.'T'%̇F{2e;2Fv)\N% D#3O<5TO,Dfq  < 7992$.僜9'-n+D{ᥑ9:2c8#k!AUqKq-?0~ҨDŽ's"?;0Z8*W^*3s*,k174K`P;}d$b?L gX59M,_޴Vm*9Zy&$9nwq:iEQ&%#0 8pCu>tg6n~q^ xϬ R~V.E]婩bǧJ*ۊDejoL'}V%|ฝ' t\bV;cߦX]!8 I9#[:%FF{6?UmSDQ[VJr]_9kc/ޫ0"=P |,9X %ב?)s{/!ڇZ32]4n\}$k/%;>%vc3dtLƀD7$Zb JmpO䗯 }%}X}$|Xz]q~rr=}x,.KR eHT#0RYQI0׾ꮋP9h$!OK_2~DPԪ(c݇O ßo/ #8|ŋ&ɞ?A[n?x1iczSRrK8}JX.Uү*~:)''nHf%-]r`4_mDxߒRDS8,/m{mir}k-'vKCoUvѰ 0zql£Ǭl#8S qeݗmC'M;;|-~OnݝgN6W=yZ?u_3`\J8̹xe3O¾"( $msSorT xKmbNs[vwXڴ_+5b_!_#8H9xa۽SY,cn3K &P:^1s/I8ec>?F̑&ؚ=\3PT0] qch![ǹ TG6ܜp?Y ypH!zr pǑWSXfH/OC, KW34JDl#hnǗVV:]Pʎ4?Ti@ Ю'V JKKu[;~}?bI ]NеaZkjxS2 k 2*a,B1bYGb rNE8df?0GTD=5V~Vy,o fx z1t(?R7fQ|K6x,q=Zso2VDmKTf֬ fK8I&P! e7Xr3PD=$HnDCP ٯM`n4Fn6l=oQt}GUتiWjnm-@  cvH@tĜduIdA5]H&^YҢjnHW572$AbKBݲqh#5 盗_N4LKŢOh[4Z6֠?AXr `ikuI(Ų phioPꗉDF-_I2dm짷=݋DM5)KH}5MUi4ʁS_e!Ls uIdA5]H&^<ԥKuCe9u$TTPd.QLw*jتiW&B j=T"M|R yyJ:$ $r)FIK1 4N]=ԣ֙IT7youker-assistant/src/res/manufacturer/SAPPHIRE.jpg0000664000175000017500000001673513260315532021032 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !qAQ"B2#$ aS4 !1AQaq"B23$4%bDRrCTdt5UF' ?<4 Nv('_vlpG١5 >VBP{ a ^ЌPrY2{Џl-f/t5Ѐ#6$Q 1d͛6c,8O.\t9Iަ7!^TzJtbodKԙD.uGQۻҕM w+*BaU@VYve`K3[i݄o,&_l*UĄ*G|9nQI;(Z=*0,o6u2!HPh#e?cxKLK/ܱAm%xc҄ȕzK%`Z<=GˆJ?kޡRMB6 qqےb`tpZ+@Mټ@;b˻;n4%3KPa:Z@}bJuE,);v.3_`}mNJhkEǐ&y(#jr'Dɲ.KUXTބC=;-*~?J9\94{a }lt@`h G72*>TPkJG|"Fbl`6g]J2ܫЂ d@Gȱs-ACO>;?Ǧ(a$)`LE錤8l(^P8XV-י?m˦mBc'qwAF+.zMߌI s:G) n+7ksi6U͊82/92_\Y'RzB3v]P&8c.G ) ?.@_<&wRSk _%ΎEpEa( $qq(Ho6e,13$wp7dW*nB;P绰6i̢r>%,إq2x|8A;E᳿]>]/om%¨r{wG_0Ĕ4G}^Nn{&Z,Ia2>gWH-& Oi"*Teڤkȃd%O> l3{{lY9U d'"ǜP6(nq2|D u+3S۠1 Of fT,>S 橄 `D -> ^bLύdv%o4' TE 6shiv: g;!mu< arȪCCw)+u7,{[.ב'H诱V7`OdE)U |}q7)|U bj岚tTȐUw~y+s *x\@,j%rNdMsڋHI&L1㌦!h^+-RKۙ,Effzv'H]0˾l1e*d_gk=Dy|SU$YsE8TC/mUpgr{Ӗ`{MvYKrZIJeH>gʍp?lG*egJfE?CI۳(GSz^4*P!ײ;io@6 oJ K™"\$>2,`P5GXɗ{և7Y i:it 0ru!A:eڡj[ٹІ6Fb$R,=|{ZsŝD 7m,aRyL2Mi}nj1܏Ş[G8 +["i(c&Lra0GOrُ|u3mQI)najP.fa\mQԑ]{eT?ptVq+[ 6I+hk b=7>ZS~=meh ^k2[nc}6 bt3l.aTe7#"Gch#?tPH߸{/TCjQ!M+v7ED7sc2X)l)VEn$ruا!1m,_N̻&V-oSItj,'2SaLT`*s,GVU .QSS Q n;"܉ KKj|(ۚ'@܁$lj2THP)Jii+4;c.5{`k6{{® ?]#6鍞]ug'4X#VXiD(O3T&W!VoLQj;n82I$65ڮM*aOXj7aL"P,¼YCLFZ5J{"e^ES< fX̖/HAظ0l;XiKُLi&YJ ̘PeoI:mPsJڞ$.IU+S17yȇGhceZkQYھ*&IlHvw$ J^#38˶VޓS5%48;pd};jz/SݯM9Zmc}L@٣'bV9HP&jkLJ{uW"R+)n:XuM{c4UvzheA~:&6.ISڕMl]1g3j|9.JYA82308g6k%JkQ*no\ ܄ᗅD@fIS#KY-%o8܊4u+IjtfD]f#շ$H BaZr D<}p'[5FiL2.؉Fc1%YPV+]9&P}e9 `xB5RP,eO KIQbl 98s _[8Wݒu~6_XN8=8^ՐHgxLW0^n-J)ƼAPr3p\uD1x֮5G*%q pmri/T8{7s^]a/v}}CrJe5|L@$Ѽz^W{Dy#ˊYk\O#oء2mSZvgiXko5d.v bu.~fVlܘ(m3sFq.1l# oWl?Rt1]wF6d*5T#˛c=ou6F,FNX$ZK3$`eˈjKC dn:ϧe2V9XMVlJ\WBq$,svf ˞j]h#;-udZ0L15WF6Ҫ*s.1> 6Զ~H2@pݴz3<%ЧU%UUX{A۸¢tEVMDS)Plc7+mnhGXN4\(!5E:ڔӖS&c'i7_NY)%lͻ62h7lN --)~#,3iEHf޸/Q>lҼNٳd5sSY^Z?={ |-9# @TZubۮTҐOWf[8U+!$~I\pl7B۴;M)1yc54LJbdmXda%/KU$ +S@#yzl"|a xӛe5SqNFJ]4fe\II(nBrD^yn^)<-/˃z+^_&:5_ <m_'wӷO)jk~|Wyq>dB¥,["jDkVؕԊyP:x$ ψq0*eYn|48^\rql/hD3:v;%.B䙥 4C1/"R3g)JeXj7‚ա1Xr4#(!ln\@tF 4#Y youker-assistant/src/res/manufacturer/ENLON.jpg0000664000175000017500000001115013260315532020454 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !qAQ"B 2#r$4֗8  !1AQaqB"2Rb#$%34& ?y6פMZB& -J`vSѠ0]ͥ(/~C$ߘiD Sd G.(LjbEWMZB& -J`vSѠ0]ͥ(/~C$ߘiD Sd G.(LjbEWMZB(cym Z7x S JSI^-P0JGD&0gծ_^QmoǬՠܫaeC2"\'2<iT@QX9#mtP`ܫaSQ7jTr~nT7~G&r5 Sd G.c1Dyئ\wgq2M/O LޕSKKXWYf_Nf$0c)~Ŋg֧3` ,l@d7:r#n\bSd @uHH§׏䌗&Z'gWn(X86mF \sp3o4˳eu] 40yme)~Wy mUL˘̋OӐ@-.OҪ5:Ou>2;5džknW}THx]I^T4v#L;r4Qh5ͩ8dr# m@g`M;vAuifNZvb{<U%TC;6zg;&XUPZgM9*8$ݮ o,o(fJp˟aV:d04ML{ Q}Ak+[7{&+$6)Ш%sYsOM<1TRsnJ"_z;OBM.?揱a'룲 ? +Z'8KCoj̥Ur&H\Q^eVȗ3Wc% R8p~_mMo|8K`\uܘRGFwr ADқD9aPM{Qp%驱'Rc *%/q":ϥ@ªGsM(?&u=@K#Oqh~Hy#gY<* nmrٔh)@mdh ZP}w" x6 =G^__ٛ*?/s\WMz^Iݥ_ /#B@(K4l0dA"8ҙިͬ|Pl!.ЌpYTuw40 m g-JifwTڹ}IօݡxWA=?4mPmש q.Ib}*z]IT,TnC#HH^ ",hjH^(Wh5f9稙1˩c=!&K.|yr;VglMal.Pk]Uj#D6-H87+oa0U$:^]Oye4=J0re/?v~+?Φ-qEon-" H誗MR…ØVX%Q(!Dwm)m! ̺韚O@T@?/)w0Y(t o5#VKQ}TR2 6߮]O?h=j(v5}C(ϼ bA}o na)A+=j-ýfO7~'; G`4~z 嶂%#?(j_QBT?gr8+1a,xFصO0+;ѳ$̑@$iLX*S*g@J*GӘ)kQ6Naj~ .K'(g[ kx:C;_ҬT [*}vejXԊԌܗ7ID  v֩5kNkU&`hv^~LSx(jQɿHS7TLq`z4 yy%A٨d (a`4LH;٥>^~LSx(jQɿHS7TLq`z4 yy%A٨d (a`4LH;٥>^~LSx/youker-assistant/src/res/manufacturer/NETGEAR.jpg0000664000175000017500000001054213260315532020672 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! AQq"2B$5 aR#3% 1!AQaq2B"R$b5#346 ?L.8? 5 ϻA3'$ ovJAsIO$Ah\$QP 19$X(\LHT |-&XZ\QH&}%D 19&L{R vbJy$EJϼ1"i8 2ErbGR0fi2**BA3*&L4g݄Ґ\÷S$w0*W.}T3H NiƉ + =?o5_/oKp֤RE8*^:W9<̥q<@2";ɼɼl\[KSm$RzcV,L_2R eX:(x}{nUuFQJLeTʈ$XBƕh` nߍ=.Zݵv4N1|^DD0f#ΐМ+z|k/&VYxTޫdrM%Iy3+&hEpgyl˥C50JSXqE,oR,fYC^,RǏo 2"' CKz+@S Gb~aMd _ i1,4 ףQ yR!qTo6u|ݦDF$. (QQUރA֐ GMp֨ƣ" vȼɱЖ /NzSշ^LϒNIi?܌qޭ{íۍIJy"Zz ?n涟 yycE&Le% qBdVbz<\ |6TI\Rڜ_'EJWɾ]rUF4ʨ)#"dvWp̈OC a.ٮi#C޻ ,ΟKNd|*v37ƷXylNƤ.;vNeۚF!fHà:;y, xi@V=s5'*tG%2C㴘cǷGk\\32R9V]c~R޹rQh]Z:R>uw=H.Ah> UiyL 4#f,U(S6ͻCnV3 81*j9=1^gi,8ט*u} PΠt+eLW *=| &Y}l+ֶ䄞\[}+klj'Cŏ7GN(q;;+]^}kfQۏ{MHPGc2i,BSE1ʛ, cLa(6y7Z|@:1N r_X?CMP-՚ZR.].9V { `sjk_qC&+{&{/7(ܷAo1BɖkB[w[U\д޶TuChh0S{:/PU4(Eµ~fpMp >Y 7Ɔu5BvIwoz[^8J\H\*2hV={ (K\ H+pdžl:?cm-Od7D{xִ-_z돡b^R\Tt b9UWk(T*ݎsŽA/ jƹaë>U 4y~a'.}6VJߩnԕzZhaMLbSJND@[QL%e/6[&w(K,K=(@.[HLl=\\afewm|&W ʤV_S6 v>f]D :r.3کgCosmϷka:Ҳ2&RpDQ0r ^ZEUKcfk@sh;ie(M -.v$Yr"V`D aCE/ۃN~if}v.$r%Mu)83^ ܗkI'DvC-FWb4o 1nlߙ6;n0GH| ݄WP^M"d9/͗Yܺ hzv鵢w{{VJa2RCU,}p,!bTYaUXuKoK#5~_.g ^o- |fw|N^/6J공T}Lӽ!ݨ$KEEe$)v3f|frU⌂3UGɌ3FgwNj$j"jaSnu58~|= !Z k}X'(-R%zD;Ra#؟_LV@-FBZOMDP  p}6n#9jKoBԱ\4җ/,ArjmSp}w~"NW7垈Gt ^%pn88wl.,|,nLX$>i~H&}I);{1%Ċ*'4Dː|JŤ@? 5 ϻA3'$ ovJAsIO$Ah\$QP 19$X(\LHT |youker-assistant/src/res/manufacturer/LG.jpg0000664000175000017500000004537413260315532020122 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:02 10:19:25]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOU:i8.~KLYcc2\~M\讣w?\CU]2^kmWKoW%Gڹo(|G~}ku{~ϝHg}N*RvIcc=1r+ƫ&k @y1&~*K̾ߐϬ ecC+>+zy'$'AL\>u:> @%뵣?bwEX=\l 0nygIO:cmF;k基%zJ~;gMfwͶ0sW9׬-$潟svgť}Oōj@t躗oCN< fQa'x6_WoPiYx.7eX\K^ۍ`7v /= 5 K+e$pvgԵlEXg+X3~j:fvM.~3Xcuhfo^]oΚ׈?fC αzhy8VsjkymkWU[k`0x \dHr|<>󞹾cY?ԯzGNkj~\9nLcm/k]a@}_[|?k݄5<pg;9R\ΐ]ZA@twVՌޣ^LkX{u˝{ױs؝/K𨾢kx;wJC׾;#2+$;]>pY}mx{Oq=zn#SUM[4e"xwF] Ld::Hey8FÐ^yϩ=Sϫ*1DH[i>.$ms!_'?>1~ˁ^uëzǭA)JDDRI$I$$I)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM%8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]g*h-7]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOU:i8.~KLYcc2\~M\讣w?\CU]2^kmWKoW%Gڹo(|G~}ku{~ϝHg}N*RvIcc=1r+ƫ&k @y1&~*K̾ߐϬ ecC+>+zy'$'AL\>u:> @%뵣?bwEX=\l 0nygIO:cmF;k基%zJ~;gMfwͶ0sW9׬-$潟svgť}Oōj@t躗oCN< fQa'x6_WoPiYx.7eX\K^ۍ`7v /= 5 K+e$pvgԵlEXg+X3~j:fvM.~3Xcuhfo^]oΚ׈?fC αzhy8VsjkymkWU[k`0x \dHr|<>󞹾cY?ԯzGNkj~\9nLcm/k]a@}_[|?k݄5<pg;9R\ΐ]ZA@twVՌޣ^LkX{u˝{ױs؝/K𨾢kx;wJC׾;#2+$;]>pY}mx{Oq=zn#SUM[4e"xwF] Ld::Hey8FÐ^yϩ=Sϫ*1DH[i>.$ms!_'?>1~ˁ^uëzǭA)JDDRI$I$$I)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2011-12-02T10:19:25+08:00 2011-12-02T10:19:25+08:00 2011-12-02T10:19:25+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:aedbd568-1c8b-11e1-ae7e-db667b27342f image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺU߿5wE|y/u2c7WWmH"ࠪwo,e5BYL*+k1D4_PuH@ZubG$PQQY؛diͽhDw~Y1?ʸ)k25.UGh8q4}F:9ڛ=ג-Z-۪H& MT:k5^`<?T|T Q3Z玞0y6W&ExSLhXǚܠaɷnE.#*|9tdCPʶ펱ӯ{^׺uVRUt(**"RGRu#ІVVVVR{^뗿uve:f:M {Q*ߙJm̘KׂlC r%Oԡ&>{-e/qr+]+e*RQO`1}EzXK dE{ecpq(|C"Cܣ-Z2q>_YZK{5{mj @0-uJ$2,B# h3N}/c1j)!2HܡgdyWo;KXcx(:GYxq~2%@5n]ew ͯR6]Ёs~tTYܽ7!8U18`zb;?%\v/rI4c>ʪZVۦjۆIopʬ,񇍔_:s׷{OoܛۇIѽ5E"'J:Q鎾c]6m+kU۳ CƗ+/u{qdL Sq`޷}i{es,Ɣߛ{ߛdÎoɈj)%xhq:jXY*upsMQ%QQ4[M=EDOrdNF#@jg2:ѷXO v2!;[m*h2;';MouKF}rZx`=`tg_t[wd;%x:vɛx|dbn j\=÷ E,5PG x^"oqkZ׽Z: d_ 3m=7^&N]e!7;3lc:(C\y]j3#utsy'1]˷/R%<0z9(y*9;rU#hhTmʈ.}t!1_ǵq SblR$MuLk5Mz ?v|ZZH)i"ryiI;i^VX۟v~oǹ{lS~o]-պ{rTn:Ng(<$lf˦Jd5M"6=6KV@^=Js͋jMoZIVBl*[c{Sv_Y}-鍿״kwf{w5.KwoM*谸RJLP2,|Eu :9{{WGl̻IkoEm ĞS)EQjH'[+vOPਦ?QHE]U r+i0#61- .(f5E>=o# Ro o1x:lun= 0A6^}T=j >'x|gH W?nي]ۏ'ZrI_z=mzWw~( E'ۙ fW(,y)J$I +>®!T$=׿xuPbeDzHW/Av1*1uU)GWu3h(SGVHuXفoo_Ͽv>x}7m~_W{O__%_~O7 ZMDZ:CO7v"~&[D7W]Hs߶^rN溯VVEnjm^ڍ?+2lȼ5*ASs^{m r o\QӼtF IsFlCoYU|{CW%5vݙi)7j<Ϙ`z頎GZjhc7d%f XO<21DDp*M] :7<׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~youker-assistant/src/res/manufacturer/NEC.jpg0000664000175000017500000001032513260315532020211 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !AqB Q"2aRwb#4%&89 !1AQaBq"2r4RbD3%5eu67 ?L$\ cxH&|":R BA3쀏u .R %dCrer!EɆ) - 2\PvBʞ?XE@?t!Lo τG\A3\H&|0 Q$PqnL\(0 !qE$Q+ Q֙S݋(rg) H&c )ϗ=Ԃ!J8$=X\ܮ^'2 XPD*?|Sv-;è-&o}ѤzZްa+kZ~\ɗ99%þ+Q`RTBa=kۭh %܍#CFifu- VRB$A[,rPt)z>pAn$gn_Wvc{Sۿpk'ňnX;:vmܕȝSZҌyor!e>|j~״4`0EaKLiL.sot5 ;٨5Xc''@F)BZ)É,;CBk.j6Y׫S;؅Ę_D. jtJnxouYZE>:.'KOZ6! ~w*U {\ӆ ي78ʀ,lD=*5*J`04޿=F:쳩ワ_m UIt?5J͖00,s 1+8o!kj@':yLɪ6Fm9?Upj<!ެ#L4~m^#=inZlqu4+Z:[+Jk]1n dJ 1if﵋2N3.9ɒa@ aE"i\%tZ9317!v+~İ•"W"?:`*\N>=ItEdY96b@&IcdV&^9ULWW.A+{!ąJ;0Q;Zȩ9?QڮviS,دxU]]v]pJUw5f ֝!0 G gGuc|)p3vD6 {|<~v-/17] 󅊙Ҽ=hhkp.EFO%,(UB\G k@p.&/mK*T KT̋m#hnm lv^@NW-4[mG}cT{=Qojhd:U4 %VJ4{je}|%D)ScE,y:^lH#Iy]+V/;UЁ+3փa_(}G#38੒/7vkČ=b3<ݗAwI. !jF{lIֳ LZ1h8kyl9GO2@y!c~E˟^xu:Vu PvCU<<~1MشUT-GsmS[\ZKSg)RaLP]8d8+Ggs+9GHZL#.al AhEOR4Z:[wjʦC::($j|G08wDCx%[0i@8!wbI2R:F倷> MDM3Jj"d+/z|wr Lu@^R r(_8@tabeb͏Tpxc9a !ے(_r0udqxQtbU|<~ˊnŋI^T 3BLDuȤ1gAs]KȆψB R[r@eArri<<~1Mرi2ʁW&~B f=P"L{ #H.aˢI~ܙ\Qra@BnH (.W.A2&)youker-assistant/src/res/manufacturer/G.SKILL.jpg0000664000175000017500000001360013260315532020646 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1 !Aq"2$QBa#4%6 RCvJ !1A"Qaq2 B$4UWr#T%57RtEGI ?4? xx&d2_X9F(9u m7C!t<ႂ} li4`#x 6 0;!ka 0]CŁ0!7AA˯8`ECl0 0 < [`I'D&VSW}W+n!Nmr\y$ 8ՍCjv̊T֡O=(o27U+P*v,u 2J5:0$$ل o$[l8J360)aBq8F\˘Vea#&RfgrUשMT31.nY:Cws33 \.эC/l#t]6 ]lA>?م ވbt@1D7CoWl޺C|E #;gܼeROUSATSUvć@NP)80.tz^͓mԪa{N)TɝSPFU@Hf9۳hwcMTmB%h@Ab{1͋7qttJя"abuEZ0*RFQlMw[Ǔ'm%) {W;Q(JSuN/&-Y/8P VG|9R+ϣ/Qezw9eq oIo /oW4w8誇;sݳ7XqKv'a/c1W<\8i<`pY)Js* 9b.֊{C9@!S=Ͼc:$j:c,P 21Fg$axKn%[l{Jù448#qe6)A@YS;1C0BP0+h4Md yȶL-#)ϰ#43E&{F-TZe-T-Mrv,)S$OݔoXLBe!|eܮ_C6'v\ƌʲ*"`D&jJ-3B]44 jPdj7IgUf"RzltOV#sJP5EA.[v{!#ΕLsODyz45"Nםj+#O {VY R#sPf5Jr-NHVHoI=UCEyU}G %+<9 ]&' +}d7mnIntI"B-ӷvW[m*ovMJ䛜DIJr(.M9tyYYUtLZtԐ%4)4 sFDӎ3'ࡊ[wۢ<$IۊIwqΕU$5[*H N^Tr-f _cP,lɇ ]3ʕkYoHV9FfJrntf VpN Ϋw1v%ܪ:);J/ c&@2˔ ;/GDct+jkOˎ[O'0$InDM7" 2"m~aqBPe ^"1d6rC&F4 RZӕ5R5 wM+!rV/6$O mzI"HBgU$FDʖTIHa #j%O]LlSi]CXoG7SӼ%# :$miR?tr>mÊ+X"Aj|B M)3:{Wj ruu{Дϛc=stx"PjNEM m?+$$I"zޑ_ɱ4LǎF<qa~HRr`87 -kvIY 5W1Fx5-~*N`-EINbQH!C&-E=`JdtɶUi/ ip$V1ҢVm L*' re̕Bi[n,HJ/ѳc E NMnS ˨s޵Z1"R Lޕ-*"O۱wFL~e{mN)tݙ-\Y)吐91Uk,14C \S;q+ te. kT\|h6_Y}}Қ /*0QQfJn2Q?@)ǣb'%X)moJ:MJJFQLFFFHRRa*U*+~;=fVjQtI?apG"[3j+&=<NNsbٸ ٳ=+7]帷Յ[) ۰B SHx4)UVSE،Z DP2c LjۃZ3Nx|6fW[v[+vۛPokD>24 "FC>JJ4H֊\ּJ6DDy$2xq@+֬;NTРJ˛U\@dWu(1X[N2:{ε_XN=B<@lyb:[k4ٽgZlPBˏ`75/l43yW( lÏx kmV+6]~!|a/Ưwi ߳~_Jכe}b8q~X0Wl44yW(ʸBl7 768/l44yW(?Nc/F-fLα%82% mȜv#gh/c>K~>Zaq ;EZʹ0ex;cF/tayi政t_%/Z.y=(eA_3'O<.chsǙ!~-+oGt|>MƱoͰ߿`z+޷rxELn(c&V0Myt<0MGɁ _ a, 6 ]y.aMi].6x`wDZM1: 95!k̈́j>Lx`}h P`L>dsPrt l:nL(B9t y#f/z?youker-assistant/src/res/manufacturer/KINGMAX.jpg0000664000175000017500000001256213260315532020707 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1!AQq"2$WXBR3DE&#S4Tt%w9d5H  !1AQaq"$TU2Bd5R4t%7D& ?>M$<{&$ӽ i iC')tGJ3/|FHb!z` oOh]D+t. % [BK m.M.9 $w|"bLgP'Q'XFݽL#5}ɬ&$5uL!_<4 |}k򝹴;0=˨-v͡OѡE;Mh򟸷T~kӀQBgK@AK VҖ_0d)8\(WmqV]mm0Eȱ^$_Pm]*ڨF&bcq%{΋ʪ _SM.ie}` p<7ejW$LUŧ}]ClZzfKmQ\tn{^-o{r̋e?22v~Z\EΥ<_Ԏ-F#N1qޓZJs]z֗.#{kRw|ɽjWu3 #vzZ_YJy*ĩ1ay ?i1޳ZfYSd:guԲk{~RJ\ji}"n +Xċ ~ QdZ`EV"XmN+׮n%JmNR5wuBє75SOKo jٚ,MXlb|.pk5B+cTuLpPQr|Q*!'-o:WH5<-9Em]0ؔĐg'%) f<@1bav٥E?zjT?T q;maǁ!n|w ^̚mquAZȠWC4-7$l7=/|Wڽ~MlJW\_c?{9>Hu\a\;m|xxrxv%sU[hRӵ68S%LCo:~h& 1su?= 7Gyou圡M\3JOS>n'0t\B,U3fU~JH*KMztH@[X*&@In ɣ"h@k{.+I7s^apAߚ4lFTeJ M,*U);a(uIZA%ռ[146@ 454wzTTbrsrF!UC ,SW(r ;6*5˥!M)w9c);*.S,NhT9<̀4ꑟ8#r&h)hdXij~ʃ`֙Yq<426 }/Hy},Xܾݗ Rkē\)a\ތ<59ph2Yyɫ 4X nmKcx-mt|>GovMpnٶR'9'RͫXtS[1j3E93qY ŝ]ک];\$w@Xu)1)p=>\,bT%LAB!z[Y-?έ sgX8_}w1ܺd/ML+ IJ:BCaCx\6xea'oLq&790;\Q┩Fj*;޴V`|2_\vl3hͲă9YS4ki"IhBZ9Rt8$l_z1lFp~LWj$ڴC{Elo?6'=,_ws\«%M:A̲^8VcRi۶|r=ߡk3Cyy5kUʼ.Ug{\NhpN[[*Wz%w%:Z{)W w:<ƭٳYJ@7ҴcE98f_cܮTӭIpDo_6[p[o$mmWW*Q֥~ᘼOD1OdPj8(VC(a5E)]22Qἒc(6%{Îl(,ǖ$s#سX#N"AXc 2 Tϩƾ\2.?uO1[1Wk^vsBwQkVq (Cדc92![; /NCnЧ-JxSлo7~/|gO1[1U ^voJ_, Lм4{Ҧ*k7m=Og:gkZ~,]X>[2gQr_Sџ_-9d0_8Hյ]_xg_TU-hmY" v" {/:e dܡYM@F's,'.9ȝG$9Ml|5sr+]Ei I6ֹGOb6Ěwb:bM#ց:bM=Hde1.@&e؉];,D/L ؘ #ˠ:ځTH܅z.ղhQ؀(1&XNHnNOGR?LK::P%=ə{B6"GN@ z|6&D$vG'!^youker-assistant/src/res/manufacturer/OMEGA.jpg0000664000175000017500000000761613260315532020445 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1 !AqQ2B"s$4#C%1A!QBaq"# ?˃_t't +@5t D/@uN, -\:a,DJ%KHV.%/+E>؋Š;\1;tiXQק!}vAeH~io"| b"Pq,l"ZF2p.xA^b)F^-p2J g= eӲ .CKgaXKca1IwK O6"9;Ym%"4J7/wHL#yȤ%JS}XÃXbXQke5YoHc KH񵴧i/z4&R)37cH8EIP-2F45,hN\3Bw6^$ i-@Th)T(I1 1yUE0RqiBQ8sNz%%b!ĖV ٷ4y:&{c?d}UsqtrQJ4§_kZ2tFJP5JAKXd2N]k"!T9qԔaeCIp\>r(*Ns&j AN=J4k% KH3*quN녝txs}M?QϣNр0v"97n IUHs0M1OiXVLRFC3!NRxFB\0zCmRYgSÁ=GWjҢG 2ls5+US΀I5&2˜kˈ%sݼ roDZ|hqWZ7)RNp APHS[?1eBXa!(e4YxջW3Q-L'CmE\\tSkHA)72bK̛ UQe){WZU6_(n6U]@JU9['=:s"MebNlE|of^7e4sƛ˙#=eݘbE:(򶊔f8ym)k,k I 3eTHGJe3SnLQ\k>r.TDq\e{o,[6 a*НJov\DQBI KNjUZO0#!3'>b-4|aXWBq9տ!/k,u5[ 'Dp6/<ڮ3gf#'T : roşr흥t{vd^d(EǛ5 Ex^9QbؗΛO ѽt47( OC;dͺm~eڻo%qm%q>훍7]YYBϢHAIεXtDtyDT&jEK4۩F[[WO,YXq= guz#ܤ'166V'I}mSV*i0:5}[8 qU+S/Xǻ.q[Wqح;L>-&t+u޽uiAx禑>T:>CPeOg .=5۷d$ O0|086ˋfvkEġTi:ӎN-ECPazP[x!r_Шj(m-Cor#}lWZt|_Шj݉} N4>U6Œw%vA4wn?,S9l]IKQPR/B23.)m%/(^^,7/;/גn͖~rMYJcT&D QJѱzvr"rI;.uC- d*g-^B^3۪&x7T.U"' p?1&_92JOfrFZܜ.;zp/UzY9ҕw&:Zw+Vqit9< [= ?\fC-lm}7-ZT@T;p 6?%rOsYkGm:QFH'e wF Ϻ z{" :˧d\.w "%%c+"NlEbi. }Ѐk4Q}p(k]; $?4FvpPU(86-#Xtt 1w#b/CH8pk]ѥbD^ȅ!3]%Aıiäyӿzyouker-assistant/src/res/manufacturer/HOMKEY.jpg0000664000175000017500000001115713260315532020604 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1!$ AqU QB4T%a2Dt#5&6V"b3cF) !1AQaq4B$D%52&6E"Td ?R,qGOSb:rJ_ˑJb; }Z]yșrdzs(0ʘs.U8nL:.GC=iftOo/ 0a;eI51@l0Փiـ:"G7[N="RЏe%dp}V`H<lwÅ eáf 0x̴nU3l,3vla3`dbl4VF1嗦WسGfTJ' qU%|#g+s͙TW~@ʦ+)Yl.sbo+` f^ެJ2v9;ג~%8ALV`,캘̺8ՎTRˀ 笰| VKW12fy0 ȶ5 d(uc5XоbVpCh!Y`g0U|ɚek$(ɽUA*ㅇ(TC5qjְgc9t$+!|.O+юC *TDImz0BS0Yg"!sK gh€c汗ہϿKs ME}Oe JuZدCݢs6tD4IU$n}T0#!8GsvQ}-sHbN<8lYD-M}4eJ<:Gk򓲡X0PvvjL'[f-̞SeGZ jwNgPqh/[oT(R,[1:u*Zj=殲?@6ޚN+ɬ.xܝzQtc†pԬ \[ yj],˛Y;ܜ`Lo[ u}c*}& SyF^ `!tCQ=̦ZɅASJG%aFr8!.@OGO,! y9BlZ|h*ǩTM?ޅ nwCMZLK7Φ0ض*K[HLM <5gA˃AB\X=HjAp~V Y:n# F:m#Z?'T[&ʍ!(4 ASd Ä~vQAyى`%1!a',OL,iӓ:g0rTdkOܦLO2 &A(OW3\{apzkmpVLHγzIb 6l0͝JNƬ(}~_y^|$Yzm`D >,*]d;7oS[Pu=aGjN ?ӱ|ISNy0>Na+%\jeӸyhO1D, F,mx@p;MH+n{4TIZA1sr)]=gOH ߚÕu;,!`j;:i[zG-0\["aaoE9l0| C?Ǚblr^vW^-v#*Z1*l/ ƌlfK2]b7i)Ycx"yr&0idR&V.EŒrC\v|yR9Ft򝙳fDFu/W{쎤)NXokX:* )BF86%.f3x ́ʠ0AWf lC=jS` ar'+nKӔS F_ jxDYG˔,0<jK+ẍ́v_~5~oR6[l:3=E0ΏJ(!c O*Eb`(z'`NJ^<Ŝ9Fe u [ഹBEceɯ^kmZks-L!H_NVS.Q"Mapagtҕ'i'r_!u:h&;K."dcأ=&q u(Cd Ũ5ѽZ,1g<ʻ4RNQQS"ȴY azZ s`PY4 /yH f\04DZ,:oÅ9QI]67?tyw ״ݙI6'ak)2VMZ ;1`A"0frĴGq+éϯY^0LW=a!qV$MxqH14&fʃ\F//ЪCnqY쎄S0(] g!^K`'Tcl]̕30e \G}((?|GC He+20ψ_[g+>[PÍl8Hģ ^gҸ߽iwesptf+uzR5=(FGwIv`?'.}K/mnYU,# =}{v&tX@ʍkI_j#0_<9eI!yH4]{z2/q9UPHrm8,~j<竱Hu"ڎ׹0}K Ta19c݈Yf,q7k99aKʮK<Ηɐ(]tڨU֭wUU+x5|1L8q&_pʷRˬIGOSb:rJ_ˑJb; }Z]yșrdzs(0ʘs.U8nL:.GC=i AdobedF]  1 q!AQ"2B #%!1AQa"q2BR$4%56 ?&.qW&-H&Ei{pVM|5JT%^ %Jߘh$1H U;DxjbŤ[@H$~Zn=8+H&*AwAP%r4E*DQAErY [@g8$H: BDLw~NLzễ+&FIb}\sG\dVq]"1 TA:js=sSkGۻ,~ $(zN,y:=0=W{N2CJJ Ȼ-M+J1 f绝p"X!J11ND8$[<ښ69cqn,h67B }bd`yԯ*Cyv!/_kRLGg T^P[[HޤW7U+NaaT>u{-y{fz#K2ؐ.@$H Z7YFȆ.qˬԚ:N^w herdZE=ˆ58pL,=Zvغ}8٘]ǩL b*#D>Dux0~d+g8k4эyYLzenəT w~E>K;t[s-큑`F\ m4t?517Wh\<0 )3WU :F7. Dܜo#:o!Νwnv9Gq$B$9ei<5oǹi/^[-Dg3w1%S+fTk+19RC*ku}l6qߵX}SI;#VX\,6̤̏L*AsR#oo1Z֊}.Kcr9ë*.ꛖqBU`U'UP8[4CB#c^W⣍)0\Jk}#_-nعX ռI & &/>xU$#I #m[`i:GdXR+iJI]$VH)]K~L? ۻ{"%y$)I2_g}Q9_He B_jϥgqprrꪳQ?q SAE+9`B\k nHp048puGƽ'܇ "^K{ nCL+,[&4NHZ4Jb'ՅPbyy-ᮾϸ&`yxho lagkpO=XwJԂ[R%x̝+RW *2E9&5E(K]*PC:ziS%1'0pխզe]& \5WuN]U)x9ڕBq?Q0E Z~>*qNmfe2y{7 doz"v4B& Ӌ>D҉9D8LaausnC&aeļ0W '8=SoFt@hfNӃkq9Ju"O0:\ܛ|Dǧ^ZK[&Ogf;fnj Rؼ70ݼDK~Hi4Z-o7?QU J!N *[6Jc9q ~=k=RWȓvYk_1;ShP5֖^TuD*c8ց~RmVRh}.pAl P-,;H-gc@3ec a&]QRGVx|tR`JIcyiS! O~7-n]  bb!31XFK-(:cӭv5@mv)*~i6*R5 ߖ v o_ʐ]÷D$s4I\ D) 6PQ\pxh?^MLRXkyhro)oQVMǻGi߷TH.ݢU_9j$]C[hj((]<4GJ?)y,ZM 7hBA7+H&ݣoWp*I/5 W.DQ!@h⭴H W.#%OןSyouker-assistant/src/res/manufacturer/APPLE.jpg0000664000175000017500000004125013260315532020446 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:02 10:24:49]F&(.]HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI%_6*sq?kI)z>s4}@lYlb7J~vr^0@0 r ,&[\ˉ:]  emIIe:hNI$TI%)d/d J_HjclɹߣǯDMU7~FV:WLms\mrǟoJtG>[]{}?"qK_ӕKKE;2z 3%8uuKΗq~kCCZXΝ{4֬ǃnZ [u1INLMϨ{b,i{%3lbk97ټ5cEI$TI%8Y?u`<]g4f]"uñ$vEqԆ%;.kyp Bޟ#T%7mϟ>XR͆A70%U#C{Aӳ[tۙݯeIJRI$TI%"ɨ]K<<gPH#V|BJT mLS ci)JD-*cC!:7Pm>kd)ڊM|#;Qs,w'ߤcyc|ԔJ9.$-G>uw>8%WRI$Tʩ$ ^#gy_,*ntg6^ѷkEk\AWI$輺@H._Dm[0A֛I$%I)%I) HPhotoshop 3.08BIM%8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]g*h-7]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM y]FL]JFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI%_6*sq?kI)z>s4}@lYlb7J~vr^0@0 r ,&[\ˉ:]  emIIe:hNI$TI%)d/d J_HjclɹߣǯDMU7~FV:WLms\mrǟoJtG>[]{}?"qK_ӕKKE;2z 3%8uuKΗq~kCCZXΝ{4֬ǃnZ [u1INLMϨ{b,i{%3lbk97ټ5cEI$TI%8Y?u`<]g4f]"uñ$vEqԆ%;.kyp Bޟ#T%7mϟ>XR͆A70%U#C{Aӳ[tۙݯeIJRI$TI%"ɨ]K<<gPH#V|BJT mLS ci)JD-*cC!:7Pm>kd)ڊM|#;Qs,w'ߤcyc|ԔJ9.$-G>uw>8%WRI$Tʩ$ ^#gy_,*ntg6^ѷkEk\AWI$輺@H._Dm[0A֛I$%I)%I)8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2011-12-02T10:24:49+08:00 2011-12-02T10:24:49+08:00 2011-12-02T10:24:49+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:cf644b22-1c8c-11e1-ae7e-db667b27342f image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^So~ϑ6zB]ىH9Vvlk JwSe&f$M2$Љ_ zoY2ŏa1y ^v%f:<<5$i*?;st;+6s_%PrY (h[~](^}LQNz{uQb򽟇ٔu:}IuF߻~a_>FYmڿ6cGl3Uw?ט<glTJSQr{ |L 3[I27MoUéUl|.+uo)Um%4VT=׺Jt;&pg`&M"3QHj/dg l9 5_~Zoxϑ;NdnΧ-S/u^Qg:͎+2;kyleӼ3:z?uu{{^ߺ^,`&2(vwl E>\^Ӫ$A{8jLx9zCO3gߺ@O͂ywrvN^Iws>Ow! jڏ DXAC4([{(_(GQk{^)8$Hp?#StXK=tRV%-WS-DtZɡ8b puA {t5||ԠXϼɊr[sr >ڔ- m4FSǿul".m*\YjcW'~MGqTR;IҪ",[.+GP۟zRj+wţiXRvb)5Bd%G~lUKt)MIOczBF5U׺}׽u~ߺ^.")w~œe]B?]uovH목qBIRIihZYUA:{䕘v.זkߺ]y7ڏ[~J7` qϿumsc"և#dOĿS.;! s/<^>=5sjaAM읬iW⿑yr>Uo^>h6Ou~{ߺ^ߺ^v6ٛjUCWP kh&=t[T Ik誠h9>J5YA.kJJH-{u3'o+{*Uu m?O8׺GpA6}y˴6ܒ< I'{1;V(HloM=W 2ĬHԿͬo㫎%HJFY@'{3׽u~ߺ^JF-<׺{b;;menB ]6qS@ 8)bIBiU--1 ^^砥m|?pk"yl5D9 HUᕂC"׺L}{"Ƕz >>S7KaO%Dފ?~b{{'bYU6 Z\!^n`}tY}ӔԒg#2Dm=߻rKACUJ:8CK,OuWιLWyoO%JKQ`Xҟ1$8)ca3k {tj}u~{ߺ_ߺ^|W_!mt݋ 7$˃hW$K"(-{{^6/j)vSɵmU%-Qv֛|."<#ի_Qɫ<{^wM&dvח'v ,GߺL}~ '604߬}v,˨Z10S}Oԟ~=|i yuGĵtc.b󩧓4Ɋ0#R _.>{^ϣ x]tmaM׺w׽u~youker-assistant/src/res/manufacturer/INTEL.jpg0000664000175000017500000001646513260315532020472 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1 AQq"#$2B4a3% RbdcD6Ww8 !1AQaq"B$42Rbrd%5(CtEcsDTUe&6F7 ?Mؒh˓̈́Q3oc& |N8&mp]a%P@c P, & }aioG=~FHzCtSP=#q阧( Qy-,7c w>$xLXͬ#U݇aq ɰmpt祆N1EV-'D^<_#A!(p{ zѹ.uw~7u=5lZ^Lp?c(^@m kwu> KP ;Z ST;Iyޒd9SU00NjEi*sL̚^iyyh 3zs7ekT>'؊L@@RᵫKޖ~Br޹/w#UJ{EQ7託̘}X!fpV>ֹjt\VI.Y#uydYz/^m"fuKݐ!i©RWKV f]T-%z-@RU4=Ԣ끻 Ukwx?Z:vِwG]TZb00U(Î.c6jյDBjri81bAp|XI^+5ZMؒf&,l1 ս֪ f;LeQ%cg:zevRGeQ(.{.;%jNKLwKyysHm]AUѩYet1mc4+Zf 6[.J.]x^Qn2sJkBV" sۏ ]"OTPɑ0.˶0gVx^0QZ1Ar mM/)fS*W Šԕ)p=@nCٷ)^pMx|QVe˿6+ ^ۏI2VüRс 2>M-a\)8lL[b&Rj*ftcٷajtl1y_1 J~ka$΍C"vJz+ eeVy3 XG=[(ƭQJӮ>#iɳTM06eVE)fpxBŒ!Tv\IfJ]ĥ@+],rp/%Q%H%Z mF=`b0qr|8s;11sϋs>Kn^omw)<} !ۮmH6JXg-vF48?H*$Mm ij,\MM4cYm%2lK)DOWMMGdۉrޘO&aJì+cES&8z7ϗqH^O-sc t&8d&7CQ/S abHtb YVg+f*ۘn"L* f!n;DEm@&3XkMdSe1%LyC7r"!ݤ]ij f&_LJ$ "CPtNʮ+*ZH348; |bNyךdPt Ƌ *5N)KIa"Gǖ{3ZGv{GGQXc+]꭪5q]6P9.&.kKdשiiGgv[.(!fTVG/ac^DD6У^;_Wf̙E?Iy l{wk&`x<t;T֟$<$qsjt6JRqGHs&ZT}..;jW]k HnV_zŗկr5HNQTymk77Djۘ9f*;(U_p]K]]y%:&n1`K5w}$B&P8:N, Sp y]U)t%&?0'͋:ّ.ˁp{iN>z:W{m!3kxm?PMƌ!LQ0qs(C.2}lSySkmkVSHF:01z{Pd44*Xk7; tjRh >a!Ȓ"ͻUңXʥ | ]_řq_EoRx d钥!Dbݧ}'#E'ow}o=g$/?wo^t/fLüs1;9?vIPjǤRy_%BnrY # - #I\Y|R%1=_76K}"emY<'1xs ŠqttۣP,Y SFAx@;4QR=b>tLxbczrLIeʔ9<6 s5=iwhG졸sKZ;KUMJ7>57= Z;^OwHfXZ>mvEk~#)2t̨ xIdFcudhSXR95%%$g^V "P ߄hjZY 2&''EYѦM 3Y8@ Bv* W%ҺJ&%dWʙa4/Uou/VeowMyg*-1Z4tn<,I6rGA:guD2՚OÖ\ZWٲTQ(dnӦgl!B+ynF4bu"Z!Rjz47i[TZ+h,ÙMءѯ/l}B|O矂"·u\}?Xk}^P1܄"'{-F g@o }oh]8k5~VM(K\W-|9 -u`Y FA8X4b ]Grn~_6y'B/GAh-7рybvKcui4STW8'爋$SQ,B&"\qHJ ~DHcKmj ;$w1 ~7ׅi&nU1wG0' ?M:v>_>.nϓـ*y;9w\X_vOwN/?V'v]=.Tb1+:^⺑5o"o7t)YavӑEyʕ܎äk©(h̞S˼ONMC~&zKvTXoOeHB"%3&Pfe)nC'zmZiݫI;Jw`FF{/n\ѭ6l-E'2=1rgQKavMBح=l|I}ak!󄖪_UgG[5LLS83CŠkOoZU*.JΕPyKD9~ikQ;VK26mn3#_1EQw8xLZy1ݗEͻUV2ʧJM/I,1ek7Ѯ*B>o wB飄O uK֨ett$i$=&x> k{\XU..2@pF&CgȔd'}YP_@=JieW K߽jۨRaZĶvL2h;>W901tڕJU@fo6/;JW*{;/00/^_U\"TZMXfP\p\bX/] Aw6ۦJXRX3 bRd'nZZ=~+JcyxKT]S!Gޜv> 6T:j^lIt ,5$ oOY[]&n䄠yʙSqy10.\S+DL7B/c2th7Z=# ߈.y-C暢9 . ֊v 3p) >^kEbkڄy%X!/;kG <1aN2~Š \ػmoӃCGܭԹk[ "46qjR?p04MI-bz(׽% v_THWvM)mǟc81m1޵2IaM. wQ8hhBN7 YZ o17YwPCirYe ï{.6~^gj@]RLT8wG9|v=R * ݘQtH36TEmUg4j HJ5רC/98ə i^ AG8b%g~ Dx ƆJMj]jfLM8&aO!7fpMv67Xo䳂 863Ã)ZC4i9hmJƪtg0a9yjyAaMs, 7Z=YKu6MډO>p#LCh\M^Pn8zTz|;廗OgMp!:WkkQF5mxD8ME+9zuy]ŤP(f{Q4%>n2ѽ6ӺF;" 1/v,F>*W,,  } YOY^FI`QqkvtnuNtiۙ unmRCdN^ҙL0lL'x_n+BqR"\>Q1VLO8KS|ظ%;:Sp.t OS mMیDZH}%ܵ&ѧ)vb ]efYKP|@%xMY]*2̕ax |Dji$kUc5,l<2|)i>$0!wdTƚhcwm=ޢHR@q?DY_x~sMjk.wFR (V #d¬8}fU0G͉Tm>VU>P< aQOqOBx#,ǬFJ5!i-Q}$K({bދAtݟ~gHjMC (zHyn HJuߩuU)5ǢJiS@ HfMah˿>ɰur])-V]O[ؠXvS]Φ"f@Nڥn:E:6E !/)Ch$1֧u=?RSC,ytc4Դ뽬LWP Y,uUn"QX16\WMvY f;nΆZζ]I"l(ɵAw>AZOY^FIeɿ (/_>Ƨ5|a;~v\?kf[`ڟu{xay?JaOƿɟy]γo{ Oʃ ns?!|o5`wւ~ݽu?&=^}nϟ?N}K )_T|#nÇ!P2~*U?c mwEzZ.8b8`!. 7c w>$xLXͬ#youker-assistant/src/res/manufacturer/MAGIC-PRO.jpg0000664000175000017500000001101713260315532021061 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1!AQq "2BR$#4 !1AQaqB"$#42RrDdt%& ?Ǔ ,qW&>B dA1]H&<#JQ$0orL\w(0 )uF\ ˀvu(TwjزaWL}1$&b="LyuPGH.!ˢI~`P\ Qa@Rꌹ$+QLT7e¯*\) cH&;M){)tE ꠏ\CE)GD2q$TrH *(2W.ԣ֙SobPV7Z$];g{Z{tY 순"bN_۬M@D {"i&݄;r, M7TKPdMAwMEʴ1izxlBhٲI-Nή?5;XS'Fkmԟ B]Oi|׈^QH'l 1dӍމFf {?<3[gF%S6|rFܠct KZg줅eR%f}dZTc]i4S&0Whߗg)q >,婸5#rnMۚRv'p6S 9v+OגF1Cy׸4>&Y:WN3[KB&y0Mihz>{ndN N\wD5&zc en}y=PCw\yܲJԔәl\fO'}rf\D2iG ap"a #yF`s^/l&SћUNyڳjɜy6%$@Lڇosu@iRUQnH%G;U.2s$9KfЬ.O͸be*wAZNFmzHTgncd{F,lnah/ F0 o֫g<x3?Gd6?R_1+TMi&F%ȜʐƘ 3H<1KUkQ^5B]r|[ wBVn`'?0Lr'yC>N?<,gxvlCz4y=K|Uz>=v1Qc/=B!U:ڷ"N,|fĖboLt$cnR -X_W[Zl͌mfu4qXaK uO<9Vo]\eBo,es,A`w1 $o90/%Z_] ~s o [$wbEXwn) +bsRs+fۺ>Uff:zp >Lr1?yyÁW }kit9k3JSC4=eI%˾Ԍull)+Wtc*=h-!ݧ!3eB8yDNd_8En:oOfjSfxzLL:z>_;jvw,7Mҫ9U{H24LeZੲ~wYAdX[> }JR|yB IaZ+5+TRnڸywv9m,%,UlS(r V7ۙBUG-^Q/f300_^geRC΁jjzTN]4ͥ"nJc};ʠRT72hš %umؼ \2FD*H)bJT7\k]Sb I#Mqo]k?c>?wlG_w](L+bZW&>B dA1]H&<#JQ$0orL\w(0 )uF\ 9( >ObI^T 1R0LwT$R RA1Au .R%uCer)FIK2TPd\;G2ӿSTŖ rc)a 6Hc˪>Aq]K$xR RTe 0\`wRZeO-&yP*HSA1RlH&#K)ǗU}Ԃ)J:$ Iˎ&.˒@aQApʟNuMS{youker-assistant/src/res/manufacturer/CISCO.jpg0000664000175000017500000001634113260315532020450 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1 Aq"BQ2$w av8:#346 !1AQaq"2Brs$4783t%56#Tu ?&9Cqɿ` AٌVQ ́ cQx|oь9ADlm9A2˸<`GzV3l*n@brosA7cn(=Q iǜo-!~|A;_^żn'<1ppXp5c>t1zsç#b~(NSr^l QN]>(|^ȫI \Q8;U*q]\@D(EB5D "0v` tΪԂO@qYvW $65æk!O vtWI*9;J(dgܨ[/{D)C,5wC*:Mw ˠf6K>DaPR[I: gP~Fcy:ј)|"jdhXWfJjPMI"Jb JP,3薭^f=#6H*n5wedªU,3ϷFX.y11=}!DGiYA _C]In8d~d%"3gHХ_?" \IYJ;9\8}"bCqZkh65rDKpFrխ+j   }r{ǡ+yu)\-4KS b%OVW:HPRe06E]MzUԦ P\:[Uw>}/++LkA7[E1`qaA_n jOl,F-7uYk6 s1eqJOu?CMjڢԹ_]cσ_HXus=h^[d╖m(Z.cg"ڈ\ 98p6ajgUӟʔgI+/ qI3`Ǿ?#o_a{fe}N[\qJ==sa)a/*?ݜu?<ܛ]n,1hTr(EMiKB%d=3:%9M@CψG5ӑp#VM3U>vj)X90#Q}2ԍ-R6h)!LiJYeښYY0E]n@,g=1lV[u/d1 `mVb{(ѧQb!x!@0AEN\Q4{ycEoݬ纐y9I$f8lmxhgU{hrk:Vnf#+&^!Ȓ jK1N@HS'WV+kPA9J@ϗ:%m#U:w_{276Оmӎx6WpuWm׋d~(cB! LobC!V&IHD]s,BY,闤ecϔZ*O_YT'LDaW>k}&(7JC7tewDc\IOJ>2l xvᛀԝa| s*51U4#ՏWD{hd>-o D})ePnhfjAD($Bb iwʊTfIzf֞ ٠!9;Ub吣'Ohm*'H˥a$AcˑQSVvnYf9*ORSu,fN=~ohjң6nfe rNەOn!2{ob{J-ȧ//wyq47S`~!]s;)a˳,bO j߾?'z.?;1>nwiW;.^[a 䟇~E.=7cu[kk/:iҳ\"ETZ- LsۢIQ:1AVeC`n@<(p'oV=ou7P6$5-G`y̒1">hzdwK};*MLuz՜w ȉd5iJaea*dE(}>S:|N(S-#z>U&CP$vN>fvu{rl'RD= é7֊tZթȌ1)8?zYbd 8z"jFjؔ"nŻlޚYrz\}\juAJj *eH)AIPLɐ(Ş~/۳"Z <"¢j!ga\j`QpEJ/&C{8]/o2* yI :uVvi\p7[-{ MR2oo%UiGURȭLJ J72WMT=0ō/=.+b Db*N$F!*|^H&&g#-f%,&%%G ^eK}AߏGٵR7Jj7I]?g"$qPM}Z^P^P_#y~rͺ쪒zINJEvԄ.1NTbciQ&IH̞Oi9;\ 8z&ѷHH%-g% q$HL5]MгNѥs0\V\5'#cS$%:/"Xcj* ?:^?(-fDa0NRX1ؼB˵Q}q"ˀNXE *JKy%dL95}QmMr}Wrx+ol9NR@ȸ<]R9ʜLL͕)]P9}}|u)یKJNLe3Og%D%d+^y|N{ӂr"Nݹ*lX^lY"PB!͗옡+˕+mK,&GfxU ]-,ݎi lPR1Sd=^ZY ǑI#ʨpE `:*2RQ(:Q`%dGnq+5ѹwj9E*Fxx }L$._W슴H?JNWNiJ=[[faYB;2Y+sFDָo H|xYAN*Xt["Y: 9NbկͻЕƬE&0g)8uU+;Jm\ j+2 P`6MjZz-'u@O Q8 򘉟 }8[+4᳄+L$HZ%$) VŇ?tê\6=]:䊰i+),VB!݇+eP`۔Vxa^5Jd~PwFP!C5+ @Df\㓸KbPR5R.URQyJs%+xoL& ))uosFt1[_=m=@˕S}W+kt&3HcOT+"EX9wr8X\+oU:XmI\S.H -]Zݔc>-,gFտ̵lD$ ]?5_%,8PcYRekv`Ku-"%3 xa陝qS->91n:{~ H(JUOfB`(am,tͱ!ƇiJɭi`q/.!7>FHt [ӄrWÖZMPiT' f^"k8 pp%+yO6슴:ҫEJU4ABuZz5J$F*juiT! S8)$*ɗD.i׫][LVgq"5kFmlHMt۷W7ﺭ!'쎦x%oBaqQIpٳ' NzJ<'i}ta1iSػO1G$āu1R 8J.QV~AȀ 6GU4c9d$"xypaf[+{d)X)%8 yM*?#ơ ``#JZzՑ4ҺҒY91D3qoҝQC[ >,RqQ".RN-RN!DJY7_N<ΙU X.q癌g;+QH/rF*aOx{pLzCͰ2LAjP+եZih7ޘ#AC@:&Q9*RܥI6wc|lTNȜSAE崦.҇ 6SWi PdPz^ޫ7М57^1Ar]hi&Q) T0R\8#c]Mљ idPVo_@ \!wj6|c!<^>㢫0Av>ZN)։\ڵ))#Yy%9b կ8Ɂ?3:emkLcHD tKs)@GufaQFO([Z֕ha]o=Dg2 `0_ˢLS2K>im)f8е*RLJBY5L E[ph`@Q%=_A6zp4{fTDi tq]azV5 i7a| 1979 17x;#pA7lj7`c{ 1((C2`퍧( 7c#Q9w>`OWmGyouker-assistant/src/res/manufacturer/OMNIVISION.jpg0000664000175000017500000004123013260315532021275 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:31 16:39:32]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOTI%)$_SzM:Ts} 乭-@DY4E~^[>!œ2S_ 35z8K~>ܗoȠr@2ÓrDNrN'iF~נIS}[c=Z-1A )PH)$EkzwNǕo?6\v ,ckfT7{XN3DƵ=C'"T:׳`;:m!-5v{twbcĶ́k.ۚk?Hr4lدLp y\pf7ٮM6353zWnVџsiV׋jUs[_V߫9UP6Ӗ{^N^a:}w{ zl) t:?GɊyqN9!#DY}Mz>{(<12틦?P1r0gL~0-Hsk?_VL91攱GL+?u5G3FrQ=%Gku|2ڟHbP67n{zlu#кR鹌mWeko~p:gF}_*%kk;ps_{Okѫ}7kgl3Z#wE /Apcjn\_\<ܾaLRhz_ܾղp1 8'ޝm6:^ѓokwuީSӛS1׻ԲX55VeVFVYnM\ NDZ.ӽrqKif5K=ZMȁsY?WiH䔌#)HH.~7.ۍCFg {7 7Q7]WGp8=hgM7~otKVmMc7X}Vçﲺ?@72vg wTI%)$IJI$RI$I%)$IOTʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIMGF] AtherosQSa]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOTI%)$_SzM:Ts} 乭-@DY4E~^[>!œ2S_ 35z8K~>ܗoȠr@2ÓrDNrN'iF~נIS}[c=Z-1A )PH)$EkzwNǕo?6\v ,ckfT7{XN3DƵ=C'"T:׳`;:m!-5v{twbcĶ́k.ۚk?Hr4lدLp y\pf7ٮM6353zWnVџsiV׋jUs[_V߫9UP6Ӗ{^N^a:}w{ zl) t:?GɊyqN9!#DY}Mz>{(<12틦?P1r0gL~0-Hsk?_VL91攱GL+?u5G3FrQ=%Gku|2ڟHbP67n{zlu#кR鹌mWeko~p:gF}_*%kk;ps_{Okѫ}7kgl3Z#wE /Apcjn\_\<ܾaLRhz_ܾղp1 8'ޝm6:^ѓokwuީSӛS1׻ԲX55VeVFVYnM\ NDZ.ӽrqKif5K=ZMȁsY?WiH䔌#)HH.~7.ۍCFg {7 7Q7]WGp8=hgM7~otKVmMc7X}Vçﲺ?@72vg wTI%)$IJI$RI$I%)$IOTʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-31T16:39:32+08:00 2012-03-31T16:39:32+08:00 2012-03-31T16:39:32+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:d8c5e77a-7b0c-11e1-873b-c4fd423be6eb image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWN*UثWb]v*UثWN*Uث?O|ZĖJ_ִSC.HӶ.U<@LE(ߖdMo*PM?)擭UwrT,њ[28X6&K2DcdyϾY.p[ `aNBqey9zϫ\W1t5-C FB@$Q=fF,..]8e\IZ;v*^]SWgIӵ2s<)oonDݙi>f~LX8ш7ޕy_qӥ_'i1]hz$]C̣#JSÓˊ},a9Hw e~dF/u8ӧ]z uL."iS1_MJrd'q_eX&oS#\`aukq1x_UvE7䙍Y/2v݉9tyo~ `i?ހ$Vep*TK4yc__]]tzHfY8/D>T{%4=I.)z$/ٓ2z W*?Li;xx?}G5-Huiu[e在V[Ecr޻˩,_?N>̖ˠm&x8F8:1*[M>(^4Zd-0_c-yhZLqYAHc$UfLu>>fq 4%ҮnoY9I=f94:*FJ ]חc__Ҵ_\oݪi|oJ<毄>%^AѴ4]E{cY*.Μڟvsˬcs CE.'ݤ+(ۃ?k{CMoSoDxsxlrKtFTW=o2dK~Z|kygooĞ)BEQ\͞e8Og5>4e;cA'5un-nԙڠHe/ɽ0o~f`vyȎMԌOa=3o {_Ru=TcwW? l#[Sˠl5Ok+'PlOj]@;rGm/:ysuaA+}9V[XH6\JBfCּK}s(S|L|!TN*UثWb]v*UثWN*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/OMRON.jpg0000664000175000017500000000730313260315532020500 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 q !AQ2B":$tu'w8Xx91A!BQaq"23 ?L˓?v ƴA3A3/As] /1s* 0vZ "O?6beし&~'(A3h(f=X:(gو_H=X,_9c8r0T l@`쵁1.A+E> mŤ.L NPgQztQϧ:zYt$0sp"Ϙ`؀k,c(.\;0W}<˭tB sEݮȧi 9ӳF"J^W"aN!ĴzR@1k*שªT*jo5i-(҈i%ŭ˻ҳ=qT2_v Vn=;y~mc~v߮jQ6Ֆ6&WobJNr1%Mi¦Pr:CRV!ie:MHY ZeYi~gAci@H'RfEy߿zJESp;0r[QR1cI6>h"df_+!MwJD@TRfˉ'B%*$LQhS(']Eo}}rPvkkK[f{2 uŘOE;N#v26DJe:wIm{8EJF;oU^ړ{Yp7mmMiao{7V5]<][WzwF4/˔+'wgUԗpwGvm.}]m{hj[Z)$XX5N#Tf1 ɟVud ;8ekr۞[Jq}7mq_#|hλ^M·ܪ쁮Ɯtkj_D^SFV;\!-3LߒˣK0b!,VfL>5ŋUTĆmTu mQraNVL7⯦Gi1K̝ovjepUmq[rgWnhVijUә*Ew/K~e6gJɈKVNMURF(*rP a2hMq4OZ缿ЫkTɯ@VsS+SlT:f2T)MpT::чsK$دĕ=}<[7:J VRJu R9C9G1V4yKǔE]vHK+XKnv|9+2E[\\"hW͈pNHs>k6mt{}ɴވK"iY:ܙ;sJiS>QakKDΣS_jԏfFNoMWFQnuARVMhhKǺ9l݅&´!nүKR?z6"fJi BvP0eO75U{XMAs+ToKIƐ&6czr_sӷ]I{-^[b햺۵s'ɪU:ktQ/$}FW@DC62Tm|ZLp2݀&|LǫEL{1 \çBK>g.\ -  22:x፱yceɟLcZ V b OV .}\ [;-`@eeːuf Ob1i2q˓?v ƴA3A3/As] /1s* 0vZ "O?6youker-assistant/src/res/manufacturer/SIS.jpg0000664000175000017500000001733613260315532020253 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   !1 AQ"Baq2$#4t8xr3sD6V'HX   !1AQaq"2r$4Bb#T%UuRD57te&Vv ?-3"YK.!Һ^T TZT6rl̼jկ.kMWK&ؽ3G6K[{CٓǏ>!1CFiZBf \vE(P!7SZr#x# $W7!anvlYc=^3SrIzKQ'?hm`( zM"Q5 Uo_j4-&<$l*Lm Ye7 tVdU!J ַkݎF 8byu]6}$(l5kOjp˜A' =22~˜l$Sht<Y+FApBف(NLn@|tPXyb{TS:NEj g5攱*x57l(wp"%P;x埽f.hu.]M_}=`H}p@jhx41dy .S1DJc R:!H3VL'>H:8ȐbWTrt4G0>|c>U=uOtw}]_k~g׎9?_(鎰D!GqW{LAՔQֵ.қoǧ5[\3:fHG{Lr.N5;<]D|rr9ObXF1a`3iƨNA;pVߊcB*nș' 휁TT&_*Bo $9i-0dCfUG7z}6 L.Y4؍-@h?Eov)DjXSK]_^5wG µ$q@d+3zuJs7ݿeJXIs;[I2KR3?og ([neX'5+/ J!:gepVnW`=ZplqL0 =elwb?,f9Z5> dDpNC1tƖ'#%G|mlYU:}j$fJ b-1_QVV#d=gzJ?ch}ԩUIE*Fc1Zb Ωh-xNA:X2uag:A" ghUqgꚾh=G^D~ވ, 9\3<>M+T{pqrX35du#Tr2两Jb(DRqB {{Q Fy C>Ѫ I{쓪sZ&v0].Þ7sA lqI٢ -VЩѓ ⳵! ׸xXyJO7N.vՒZxuK9 Nvsd㾒V2:`˜0 Jð9[&sF( 4sy)ΥS{%RFH%Vb%lo>^~^:$bXyͨd3|_O0ƕzr~'@3rm ڬWpJ:˚IP*ɋnt|9"Fp|vkJj,J[l;[mG匣J]]<|f+h0"VxZegL""2ZLZ?TW]H&JL+ 23 CJ1XRĭMP)E8Ǫo1K[d \R_wZ@uā0wbHE>rtAyA$d1ys9㩟=b't/:Kw٬zԮ&pkpl ʭ:ګWz*()XrK-g ~z֨bɘm W(r'z8nڒ3W2nʒ6"pJ7*#4;I3`j*v\ b1"d^)|ku",m6j˓IB{a7;8xiE)}g<$_S.EPSHR );l/y|2K!'˶$8[cMQsԶ:ʀJ(;[9MlICCp S3RA#p9y=yAɨY*H:f%S3ʜZ>(_+1[}b]9%2SFߏߠyDND~^Ӹ}ܬ%CW&+b,Yp &0YU@=H`N)0zƲq%ÚjT jdiE4u3c@|ΜJ}|CW98UtVjeZbk&TOiD㗚lYByqxrߦ0&VvY%dnxR zK2andZNQon5f :rԬU.j@J ۅ(q 'f1an!Ʀ-6`g(ߒBȒFЭ{r\>p+gm;DP5]`P+ Q2eW F#FY,|ȩVJZ#'DM,!:+wfO(=L'r"I)E{#CU۽?.|9ۆLG~DN R,AFy0mS2[@2`쀏V[ui>I*Wt8]VvϮڑ HBd%)=>O)GU EmRykij)-ܺrJ.0^q"*[7GWBLxXul1L9%9U]QdC<I݁l&b\?TIn|Hz_n֩4zɨ5x^\Ѽ~SSgU.}PwkWɭ,ؾ6jL$eI.o"rD}|5"p$.`=Sy(9[]ؠ݀JmٔT6yɚ7ym'0L]C31r\GD'MhI4'_wOYƚp k.Kr¼,]ݫ:X6wIR(f6TA,&o`"C4OA( @mtMvYx6+ay&}բis(e-.N P z. e)Dy=| hbԔQosH PR#B* \XChi4\w24I[@8szcGkf|+gwm>ljB,jR]+#WC~V1w ~S:+H)}˲. e<&:ˠjbv6͍,4HmN-)rQe"xG' ]`DDV%?^|CDZ &#SX AdobedF]    1 q!Q2BA"$a# R%w!1AQa"Bq42R$TbrғD%5Eu&V ?M+$\ cxH&JR RA5PGH.RpI/ ɕ˯0&.(Ңrtʟ/?uLSz-&yP*HSA5RW"MGR >Au/I~ nL]y(0 )qF7$+@e(Tybбi4ʁW&B *j="M|R y}K?eCrer)EɆ)K1 4\`{)G2SޅI^T \ӫOԌbwCۈTxaΌ+n +o˪~x}Ҟw[iM[Ui#*1P8oiٮi\LA z,5M߂eNJ[=UۻܑJ<߷eBͬd]# 'FUH[a5RIn cCۭoKZO/|{Պ^{G~.LAl3YH>=bxv53~5P^[ ػ+vfuwX9J죐qZZZA~>JIjǤ+kP.Zk}<76NrS1ꨌ*H`mX_銪˕Q#EJ\M^n[m ;ƯO-r23?UL)%khxd(/{:nu,A.F$in81;K1ˤgI"@$5߀kTyCl$0$"gdUcK7$<[ׅ<^/ *~=GCp'ѝTdgL$)-kpY`cZLG[jޖ[F:IxvGp-!^E3i&.P{$U ⷻúMn&i]t͠9Tk#UI#x5mX  ɄBzJfP:̠Y'~HvZJg ;z AWoGסǻ^S-߆hvj̓s WA'GJ|ڏs+?>5iBշ 4a.%-m<:aP)54u9 +7W-Y_^n(w./9Tt%U>Y6\G?zY~ PmߛRra6KP4wWW>Z5+Oc'k/[Vp' +ߵY²uc;NN5X-wwSĽ,omV @0۟@pnYf/ EX&<+`?WW8|Vy,w;zT{̱d#UV4pǏemoȻs53d<猰쉾)'݁ENu6Mǀ)D<=Hwʚ{(i|Wf2r~Kƚa Ī%1m8KԱdivS3"Z<Īp#˒ `i$}cidJbX/p7th(Dw/JTk -0-'#dJB+!|,ȹ }r=:qJ3c&9}1Tݍ0M+c Bt)xSW3Kvkt^ ѵgqL}[H^ZOC1t&<ظp]Xyxбi4ʁZu J-W7&~irm7Xzg H S(LƜm(ļRrsͳ ƾ2I B@%<2] WN{ˁ) >>ll|RrXI![$~@+BJ̱a\ `\ԕxdvkǺ[+KWEyi+&0EMD06;D[`jӺڞ5X)qN?^ޝQeڛ5:'/KR2N$J "YسFo._yPExaOCޛ-8:dQ1gǘM@2Y;xes[FJp#Jo?7slƋ9s 5T:WSP% ,+ sm݋g{nc@`ɮYY=#'xb+ :]_PH71ZGq.$ AV[2FD,68rl1c҉+JQRB])U\(@7C~?x(d2E9(" i Nʯ(q W@>^~8бi4ʁW&B *j="M|R y}K?eCrer)EɆ)K1 4\`{)G2SޅI^T 5RMyTȤQk蠏]C(_9*+^aJ.L1H \QE;J<>^~꘦,ZM*Uɯ7kʤE e._/E}_e)GAPܙ\ Qra@RnH *(.W.QLT7youker-assistant/src/res/manufacturer/ATHEROS.jpg0000664000175000017500000001152113260315532020710 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]"1!1AS"2QaBR,!1AQa2q"BR ?.!A!A!A*mnOx22I㯍b;Ud\u&^G$Ƈd;!p۔[,N6%[=;vAKg\=Q1s>/ׂ3׷lG6ٌxm&ȃ:egp簺hFvX!)$Yr5>-tG0FQ*.fN#FÀ+.nTTvH#XZ"xO74!",(ha.qtruG_Su5֓#*ZZVÊ8HZ u'$#MX~lj~2VE \_Xw.%J4Rp 1jRCDu'^Z)u9..3IP.ݵnSPXLM_mƂ |q|#vZMԺ«uT*+KL[ͩaH8 eEtYm6 aIBV|0.it'"af;?ͅ{28;7BnQ]gPRx@F;f3gWr\6Kl9'gV:!a^ս[>J6:|=:|=Jk/OOP(>O>O%B?@{t?@{"abT /Of%c<$!"B$!"B$!"B/youker-assistant/src/res/manufacturer/SONIX.jpg0000664000175000017500000001227513260315532020512 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]"1!1"AQqRa#23-!1AQaq2R ?t(JR(JR(JRnuSH) DI}ٮLhp'W yyy5wWޖnuxnQ",cm(gn *"wAVIHjbR2HQi won-fpۇ_{2 KW==Nh.o<=·#VZu~gPȄXO )98Vg-.:SQ恲4OsajCgJYRe /ɳv8quzK30h'69U0ӃwttfE~#uR{cQ +GZ-m7#a27%Dei;ꖘB+ȴ猎A֖#ߓ!Q=uCnq~䚺A\0ja~UuIڬy0nlMm/+Zx tk=2/eŸS iRq$z]<}վnR{c<15#Cj[',1vy*BUwA$V5>;nugoF?>XhX$;m4p{W~ҖK=j\7˩Zqk;޵i (r' Q+q9)#FMr9@FvpSGEDXܮ7m/ua[a-{j;I{v:mʙu $WU]{lv3m + s 9S8з b-iCZQ|#KFض({u9'fʃLϋ9@ fκ]v[%]4:T1=c:ˡ-mG)6{Qb i^# %;qssfjXVEn"HS Uҵ{׹mC"_=tE iG!}qViG%u651[Dt>6"ͶCs.$:džII9\wR `-F"2MSa' !]WtmEvI IKVϽ\Qd&Zq\c?Edn!8T0`pTkqSHr-EA/nse=kvnOjma`Y.,[6DgR )WVq+aJ4MGFsѬRLG SR[FIKHpVy*,T"psAӺ~2W+Hc!26+'ʷ*+iN}וзPPrJVNHiy[VM H1[s&/kENrqv8ߊe y% xDm° sV]& HqB<%̡R %D탌dLS_ek[ekR샕2 n>]))JT)JQ)JQ)JQyouker-assistant/src/res/manufacturer/PIXART.jpg0000664000175000017500000005647313260315532020631 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:13 13:25:46]F&(. }HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?}ѿ~7_My"Jů}ѿ~7_My"I}?U}ѿ~7_My"I}?U}ѿ~7_My"I}?U}ѿ~7_My"I}?U}ѿ~7_My"I}?UFǡ^vV@6dv@/ǀh7o?Мt*1}>[?ދoumkYEGX[?)v^߳vQΦWТtۏiUkmf(nõV]8url542}>7aM+ToΛ1E@,kCֻwl#@Ia xeb,ͮ.I*-?u4o@ԍS%u]u|OsyrX=Ċ,gfob1.ƾk'赩OܼӍHvS֏-`S-*Tj#CKòddexSr>׌:afVuaerCӣ#;ҺvUYp ΁w_Xz[?Ls TfHQ&4.?sY1dc! ч3. 79k\{9\.(c?֞i~gˇ$ rF#uOKQ1ϳ\G?zDȹZ% ^"5zL>ҝ]0]sdocK {Ҷںkec7m.cK]>[/[_͟blZuMږ{WNpĿ7VyM f_:l'$k to]Ӻ'7ن)}h?YnmX\wnC (lȩ;bw??+/?p敜ӌv241{|ڌ8L=.GlYsmq;\oVο}$x(8'gE/؝kd6Wh:/9I˗&Crx÷ 4QkmbǪMncK].;~^p2?)~_'ٳ"n^dzH f_:l'GV_Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$`Photoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM9F]N-Qt]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FL }JFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?}ѿ~7_My"Jů}ѿ~7_My"I}?U}ѿ~7_My"I}?U}ѿ~7_My"I}?U}ѿ~7_My"I}?U}ѿ~7_My"I}?UFǡ^vV@6dv@/ǀh7o?Мt*1}>[?ދoumkYEGX[?)v^߳vQΦWТtۏiUkmf(nõV]8url542}>7aM+ToΛ1E@,kCֻwl#@Ia xeb,ͮ.I*-?u4o@ԍS%u]u|OsyrX=Ċ,gfob1.ƾk'赩OܼӍHvS֏-`S-*Tj#CKòddexSr>׌:afVuaerCӣ#;ҺvUYp ΁w_Xz[?Ls TfHQ&4.?sY1dc! ч3. 79k\{9\.(c?֞i~gˇ$ rF#uOKQ1ϳ\G?zDȹZ% ^"5zL>ҝ]0]sdocK {Ҷںkec7m.cK]>[/[_͟blZuMږ{WNpĿ7VyM f_:l'$k to]Ӻ'7ن)}h?YnmX\wnC (lȩ;bw??+/?p敜ӌv241{|ڌ8L=.GlYsmq;\oVο}$x(8'gE/؝kd6Wh:/9I˗&Crx÷ 4QkmbǪMncK].;~^p2?)~_'ٳ"n^dzH f_:l'GV_Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-13T13:25:46+08:00 2012-03-13T13:25:46+08:00 2012-03-13T13:25:46+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:b3a0bc81-6ccc-11e1-818a-a659f6cdec7a image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?s}u_e~ԾqOsY_z]{}u_e~Kd?%߿/=Zh.?>~2{@u?4^gc?]W_R=g:V? ߿|Ld{GO׿gyoGUWԾqOsYbէ|3+_8',^sGAuv>[c/~ؿi9; -1?K?׿_z]{}u_e~Kd?%߿/=Zh.?>~2{@u?4^gc?]W_R=g:V? #]&~{}uݽu׿uG=uǿq׺RC+xg^oΞ}{Ekӯq{޺_#Kބ޼tZꜽtx6"+0cqMeK;Bt1V|hzbzYinhOq=\_W|*=6~|ij:,Y*|cH<{ ϸ󒳼|?ӏ=kFDlZJ.ֿr FjM(\'jsuBO| s#Ro|_SwmeMuE Jݕw,o1E2.]UDXe$0 ob]wܭRHU֒s>Tou\j*m)]rWK+b"{!ݹAedq7CXs\+\L+e,'?L> uɎs SunގjTTPo޺X}Z Њw#\ͬNkvƼI<gY63FW`w?IGR#qn({"L6ގ-ZSp{oɾr3\nh!5)ZLk.״K*}2 ~,dvtw7 >cfo R,Yj.g 5~x۹ꡔWφQW5fʛͻ[_^70GV{5q0׊GUbNR)1S}EeV6)d*Aos PtIZ,b 4)Ǥ.7p|X]O8lWgisoU!cOJZ1Y?qXklT8+u5)㪘64Բ% T$T۫7j1ފ˹lIoUBk¤+)e2n\, .'vXF0?ըݷ^޿dg{_nbOmzJRW$_$U0tom{ok-psh_L1#, j+eh0/q*@&JyҔvO *wG 3.micl;V\vA QV! ;o[wÔ%[k:K|L_ c'u̜7&r.۳-Tg @Z#($@?g..߽;ۖ6M.Cxm?Oez3+B*̌551Ԓz=\o\'?6$k/n`֏XNQ)gϞ{W7ɋa̐[p־*ʅ,Hу  p|L4?7+Kj=nzw\Jד{jmʼgr9ZHE<f{ $^{y-ٵquy<*^B*WֽMݷ }c3191pF3Dn_'_r6+?.Rl~q`ZFZ(ފ |sѤkji&J Y^eΗFbWR" d* i%$itfo tm;O 6L=^wn枦H1RCΝc[~9;mX eH,%3#Du]5 |~B]^=ɺfߔMǿ^ž+"jڋKID%gl~{;^%R4报jjkP8O\"w՞WrQ42xE+F*~X|o=5 lnjrXܘe>#E,㪫JQYԧ\ g7/+{]]81-jޣ*pX wؔhAP( =QiPGӤQpcyR[)ZeĿ{OnOtQoZk^%l]Fc#G-UDP($>S4 m#(KOGT]kktnpS7Eb,I2?+.?Qhryu6xb(P3)a{o*Yr_z>9y{qʎ}eٝGK^ثlnFlU*,!X5TUr${}}oi%$,bh0-:9nx6{yf[u ė4Z/-ovO%[K ]Gɦogu^fT(+MBrF+5 ȉB7|ļWvn/d^vcTiZI{fw7ncAwwyb4$ +/%ٴK6%F?iu.xq +7_W(A$8V$Fo|}vBm eQSR|_+{eϴۨ$I(eIAUgBT+_勴{Ǎp{-3no-2CE*b9ћx1LBQ9R$b.H9fٹzۑjmv/(TW̓\r}zͽq{|[ZutVƀE(ƴA:O|Q[ىWp;urM-'UoTSeRdN2I2YFѯ'wc^eߣzw qw+[h H49?.ϻOw>qGj9w<[f [˵["LU.CcӳĔ[yTW=\C&'U]c3JUTY7&y] ݯ6;[Uy$U_ԨBxeutn`VﻀivU6KGFwF.^dJ PPuv>M3=]YpĂuW\OtURji*gWe1D5sۚn;;2$-lÀ"UQ@=s}/ܝJV[_"p$KokgUI(&I^=>g~>sw6l dcyӚSA-LkV"dIur=/fܛk-,xʲ R$UW%}~kj'ݬfkigx DQx'M;Xv=˨ZTBs6;]C"4{|T] F DqiR$&=J;rܹqF.#AE@j|"٭O´cNr_S7~䟟A?˯|Wyc&6u_Va2;z+4MG;֕m0RB I"(yλن6nw.#FIg4Oʧsv$yt4 3|W>&o ɻM{>?1YJ|WNm^%)r,<.:9֒+#5Erߓ}=4689M|ztgg<ǙZ<?@1>}<ɞΚ"isuT[Q4x f>5>Z\ wQIuy?2kq/Mf+Uz*&i)sP@?q߸O6|UʀөCMs_3W3n_Fx|P^]xČdd [klQ$fq1"IEJ^WMV[Nvt{mIu7/6 1ny"g)|CAzT}RT ~?c3xNu_U,;۶4C#vֆ2p}iܲ @'$`pM2}y֯d[O GO7ַ<2u hi-HkJf`k~JuϐU ڍM՘L-M XK[ }߃]ڟn[ }37k%C&;uU L[z?j9uϼqmšHN>=6l[ {;SRڕv㯍/N\D2 3嶁$b{{u۹?d,Uuemѵx0m?ZQ¨ԑ}Rmvӳn^&(+5D Q5Ҝ=8tY+#Qjk~XL|5[[nOYeGE2͕T韜=NUYvKIXBDXc4wOwm9p'B.e?JS]SݽfuzިX1w 81#~܅lr,r[iuZ~Qt0/d{;a^߇mu_km:}~FwDrTɎTU\Mk)Ovo9Oewъtуm sA҄)VI~=Wߤy{T==Ne/MKl T|#'d)d#̔{2>[v9GĴIy˛c6$WSAhbϣ/;,8v輼}]nmѴq5jvl: v4ΊU w~ܡm.fIЉ&)pJur}ʮ9Vk6(U5L1m,P5DQF ANK[qo]y ,Xw iǞj<ImcMm$ԗ\ x%+\t'=mpmv3G"b8 OˣÿW[ݫ{#v.I smi4YbTM+V:y/-O27g3r(tt&,rW(XW$H&?0=QWtߝ/SP:S+!@8Ɛ{,F5ѱXqƁ5P@0:M|/^᝙$k 'bvNo~?#Y&3rTÖѳfHWpfȥ-5-i *~bu${/1u}C܀Ȣ$iyj8V{+(78i.T5|t||Ãjudufɟ=-2[wFf/vUVMA7NȂa āDv?36qodWut *蠪m#Xmq9mRTՎZgtK̲n  @6}H{]U_?(A]?޶\/?*eſ ~漧ѓ.?.?GklT>L9l?>v-ٯ? X'xsD/j)NMl?gUіp@Q5MGABo&mUl߸72?o?>6|cUGoa@vngIemh8ifOlCwEFխk~v>ُ==LVmHJ_5kU? ĒtGk1v/9rb/5|L6ſ+)?3At:G*tk6*_w2?_5@m\.mu?>~5/'ω(_={T߇9r`潳ʠwfR=adgGا]9;ͳʠ OO3#^S߿MfeP}{F['ߺ^׽u~{ߺ^׽u~{ߺ^׽u~youker-assistant/src/res/manufacturer/ENNYAH.jpg0000664000175000017500000001100313260315532020560 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!qAQ2B a#"Rr3s$1!AQaq"BR2$DdS4T% ?Ǔj-qW&!Lf JIn=Թ"M=R zzJ9$I˿PL3H \ѦIE˰w|S*}=~3Mرi6ʁW&!Lf JIn=Թ"M=R zzJ9$I˿PL3H \ѦIE˰w|S*}=~3Mرi6ʁW&!Lf JIn=Թ"M=R zzJ9$I˿PL3W U]QI!2JubOnŁ3( 6mDtF9~l5šFf}-CZ "O޼drG^8p7-;uޝ0#zet ∆ku&Z[DcQ1GrF|ܮmKKQMP *>վss!3[9 VPshGi7&-.%_o6+rA梂1agÂ;roFZu*10.n?$޷E?nִ:\*~ -.TaFT;W8K,*}gK~9v_)(isX:Z#ui5: e/%_{C_0c5k|^'c:>ާ„ジ6[HG9U1nvR'SiNQ=Mix~?xx\cJ:*dhPY>Md}F]/ŒF nT&wJSaANfKzPצ0<}(j;mQAHa >奜|?Gŏ1MC?&:-W?< hx)@5^\UӺu\#I9+r 7ղ~ߞR[='& #cF(4Fz FFV~|+kET bvJz}T%ÄVlz*kyؼBfY?FLzA}̝k V\$L/,w6}%n73-W+:L1Nixd28O\[i&ScxKa27F{ x¨zt[mJ7k}BU( Q;w7t}p}*1.Fq>Uꊬ[ kWCҥm{Y3#7/䤑d>*Љ[^9H KklDUoP\r&tP#m7.,pK psY?WOrc11ͮDaTzּ7*g2\׵>v?G`~ 5WbŤگ*k <@y Sqb%P*Ux4MӞ0^LMnnӇ=޼ξNyk{b30.h;LsZ#EaQ5&@D.WRX 7 AJwo<!l3Qpee|0qqG"Z;^ܭ;Y- |?!>ִvI Fbl. ELi]ѯE2D:^07M$D|KVa#rO U= }/:-|a{{&C\ia&NYY-LkSE3.s $:v;mq(`gq4J6V=륾qU' c̮@PD"!XgH̆`>'!1J5.UMF$9ퟠƣAH5F' pOXJ2q [0,?mntGMvEU:cs{˄}#Agavũ& 0z{GE09cX󋑞2Z57)t#.=]R]}QzV+._g^ߠPNcĞ+&v'-LA*$Y`HMnEc5sUVKx{vk c ⍮hۛSENLj'Yzmz*kuرi6ʁW&!Lf JIn=Թ"M=R zzJ9$I˿PL3H \ѦIE˰w|S*}=~3Mرi6ʁW&!Lf JIn=Թ"M=R zzJ9$I˿PL3H \ѦIE˰w|S*}=~3Mرi6ʁW&!Lf JIn=Թ"M=R zzJ9$I˿PL3H \ѦIE˰w|S*}=~3Mؿyouker-assistant/src/res/manufacturer/SANYO.jpg0000664000175000017500000001403313260315532020475 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1! AQq"2Ba$%  !1A"Q2 aqB#Rr35 ?&䫎4rkc #LQaxQ  {xaMy1TrQ0LLTraGMD'oҵi4h41L_,GeF&L_ovLPš<) b0*aƘ /-ʘ 1* >Κ|LN4ߥji@ɯib&Xʍ0MGF& ?Q㗻**N"5ƍݑ3;H,]A:P1*f!DFg J_w~n 1@Q\s>bVsEXQW^1LN"ܦyDK`0ʸj7vQiP 1?Y1@ 99g +c=LHHćQ(e70f<3#OQ$SI_h9.~98^)²i)O>u-'[PvgMbL˚"1d+ u}P~Lnb Y|s\UT_ITJ_]Tm{t6i9ᑌ/`rbIP/TE 5jXZqI'J*htnJ72q 5Bu]hl8C(8mo_G[^]vGvV1͐\'Sn#bK?J E훼%9v+ * :mN #rF؉E"ToJqӉ4! ['Tz $V/{[fuO]6`c GG:wsbo񛒣gkW!:AV 1U(2OR^M,TUxk0L?1 *}xp$a#Z?k7~ Tnq5K#e}WKH#J$qnZnܩ4l닯*Y2&z@)к Kr @;B,[.A*>ϲ57ݪޭ-r4rm$BH⹗zQMEۋ="u܋/*MR5n:Ximw&\3"&&.B!b%#{UGݯN ǿMO.s˫Sm挝/([I'pRnAI&eiCFUX5Dy\gG =W jl:a=vRw569]'騕0 n2; c҈N:/sH{#%Hkׂ0ACˇsHp-.)h{?u_JYwNKYt[{g+A(RhxPN=ػK7w;~t쳘JrdL:dԋL폌 U CS f!檿~ }kI}৅ ^Biϸ` VO;)0195Vݾmt5~uPEԆf[e;tBڬEb^&LdS䔒w>iKB `nS~w6vLH4vMo}]ra~xT0K$NAꕩ Pj}ݫvYpc~mTVHbRKCVS/q].#.ʾYMg.blOTWur{}oEcuV5؀<ʶc)ZR4zjh*0 ssC͑%ڭG8p'I& ~ 紛4W-455Hq8^ܿ:vC7[󡖖I4V7UmfrQ@H[-1VY.cct0CBG@Tq ^tLSw}Cm۟SŻӭ(..ɻgz(bۄbOz4c-}pMr'NIE u0 5L=-t@12Nj1{}VvS{+4w>N.{ڦs-wŢ~=s d H^ӣwKr'L7$$4)fR'.cxE[C@ >*U ?u]ۭ-Ħkqb ωD¥din.n?oQhPinV@ ƣU%JZpWxWµ u}#Åj']'Mys]{39[e텁CsZ5T ;;کeOID8aDZ_LE,\ L'08[:Mo׎X"ltdN9>O+j<&M^F[>1Lاd`8|<:f).\3.wܕ!*tQyjڪ*p@@yZII$KTBwb6؄6,h{}$TPJۿXHE=#S3{</Jq a$mũO egư!a W\|=Gۻ6;H #$0ihk=A1k߼d,w$V]ZqvhR9P);AA/): LDc!8.cTr^sC;p- ]Ȁ fK=J0㭭k ԭ٪=]k3\G0#LFG9rM{埚jSį[s'E+XtK&m0ZnVLqqAne>P "뽱hӒ:kMn2#pDG9F%5S^ܝ10 e!yCDEĂNPʼ_q_!#3lVW$HmռiQˀkD$C>В٤;ɂM99Cmƶ<`nS%4R|88rՖDa0rN[|=I~"]ãFAM+4f=&{ɸq;T$Kޢwʖ9*di$FNM]JK%R q|tFXUQ+E|ntE.qBYq{m;}d&.pUH:Yh[GWq1 2v<diTQa1i鸸 J5jG#2}y)53H' M;]v k]rH:In#IkSPFl5].\5J-~`ocrIJZ{;#֎3rwT*W!P($# @ ZALađ$~c=нܶnnepF~% ❏adJ+knН@Fn˭\l2c1Z8V(9JC_9s8} %1oא?Rmom+&{xlK1$:&Dzk{담r]}˒ŤnеVhh̎2848!yIr s|<⾝Hdu5g[OKYMcdȮ1kK[$Rt+ƊܦƦj3bOZdtauVRT?2$F?q |GZYPJ@\ 2kO}g{NZFm60uHls!{y>@\\366|ZMk-'#?mW:WNdi52y)P9.-]VK n^ƏDžl~xysqtyg-J潮G4=DL]]a$~!H5qvB ܖ0BPE"r#f#3K (>XdtKt; k<dfҪ_=8slǬVlōsحCR5,g|Mz5ȅE*U:u/UL?hF Lԭk|?ww!pvpk#8#j1`1h^H5{;khlTZD@!T Ș^Mru I=`=@"3l2PJ䧈N<·Ǐއ;?}chyF%\FJ͞q%Sre A)f%yʗtnlyQ e礸ui:9'~#ä5- 86HV%)UCem^"NL<o3$8xyQӪ?8?ijyyhѧO4ׂiM~XCLs5vTij? / 5+DpZƕBu5e=jA:`pX˦Y߁*@\Sòi<,4EDѣI2ZB0JsRSqs+&:{8I*r½y1TrQ0LLTraGMD'oҵi4h41L_,GeF&L_ovLPš<) b0*aƘ /-ʘ 1* >Κ|LN4ߥji@ɯib&Xʍ0MGF& ?.4xS%A9SQ˯aFTÍ0^4[0bTQˠ|5iJyouker-assistant/src/res/manufacturer/AMI.jpg0000664000175000017500000001001613260315532020207 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1 !AQq2Ba"$ђ#4Td 1!AQBa"$q2Tt%5E ?M5̹75 4 hCMb H~==<oCE˿hjTY NcBm\>ZQOљ^F&0rojNhA7T SOv" z{5,y /ߖ"~ԩLHv|+Ģ2ZM`22Ђo٢ A7!&!DpjX_-E.R)f 59 rjWE?OoFey;=_Msj@s,P7_[$h(+zcAOJ6SDC79,@@ BXv c!v)r3= ўZ^U_} xmZƗ[8,,bJ#1=F)aiRR Gsŀ~]h68J–[6$i!~aW"""NgLeTa5iE@n=+\SV$eT͇)X9 qËZW9e"2SKS,XUfUSHf>auL}=w5䲛y$R"}A =&*U _͔[!=tjad}*\-{3OrF"uLW:W i@E1ERszpb(]Yק_V8M5?3QlIlĞwwZX^܊$dRUF&r•BnNs&'0|\Vxc!{':Mnګ=h_8URֈAEA`ѕz#*4;ƟX<ɲ4+"@nN{m]qJw-enKd~gܟy&E7kZbU|w䜏hk`3+95a VlhY nyC.)W Njr:VRt D1|hߘ\J,E) oZpcucZtBݴ5o75DĮeSQ3:"f6JRϹEmRx܊Ψ &4ly{Uvk4u;gǺI2TbAQWPB!Xv=†(Lo[*(B D3^VN@dlm RTGMm_uoHt;:icjd3X4IbY"LGB+}LN CxHPk볕}7rnkG) *rb6Q\aglIqtz(d- UP2gC'[$Zaj׫K_fI+>$G6cƴw8ҽ*6@Tic1~YWKgEU9aU=j?̬ʨUZw.U,QJ 3 ݚںx=I3{N| _aqT֫I1I᎖,>@ 6L.Ki{;tߌ̱s_`I`-JԌ>R[=%ݴF2G(swQX$"J:z4F9 dEXW5D1%S8b&_agj7Z>A Ց0"V QQk5Y^F&0rojNhA7T SOv" z{5,y0)/ÉF#z͋>2eaX J+jCKhi)LHv|+Ģ2ZM`22Ђo٢ A7!&!DpjX_-E.R)f 59 rjWE?OoFeyk8eɿe9߳ERn? NCM=C.Ա$;~Z.]CRR@js2h">ԯ~ߦ?youker-assistant/src/res/manufacturer/IOMEGA.jpg0000664000175000017500000001302713260315532020547 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!q BAQ"w826vx9#  !1AQaq"2B345uRs$t7#8% ?y8J1N}s9VP9x`>4?ъte,=Zi\d n ͅP"W+JrMht7kot93N6567vU`\@NhBXYf'nEc& 24+iI1 EHwo3~cz zMM)̽mu\Т V^{CL2004 :ա('ꈴjt@0rs# f hxC./.X[!S?HtS=+H+d[ v(lѸ\urj*e|Onf6)5;9p4̸:LSR]zo\ܒKY i+BTĞA|hOxzuk=*röDϘY.ۻn㵓MQce:j1#Q>/ՎLQkDqmlkXTr #!xY 6@02T|oƓG0{J\ڠ1'2N|cIYBI]2TЭL@ѪP=:0rS@C[P:X) (X d PPrAЏLiqDZN5: 99h CIYCz(oŏT:ӷm1◊td~N(՗!wxj{DZ>lZŏG{ ~ Wf'>(ή6oTf PPrAЏLiqDZN5: 99h CIYCz:dȇbU?MS,N hNJ^*=8V^~r᪙ǸW%k=m$'J52-]_T :浾QbӔ0iBAuB=0POw٥ i8cP/^^&3悜0eQXA@~Nj¦ڡY * c/']uU_g]fz.)e2^mZt 9Ri`RdBbr~FR$mŴfOfiƔUHܣ+D\Mj/kH#^s)#;|mxz--ґ.kԀ۠K]GjSI uOx w"IЬek>F4$;_Dٖixx}+UmVӚ뼡jyӘ u@L9d0, jUqP 0@]c U(/TRbqZ5릝QWZJg1S숕ڽu-J_uSb:Q @KbsD$۝溰gtќ0PЮK$UPTi˄Dype϶, `V{`(jZǦ|yľ91/Xm'm1/|QF8KUM8Q,2a2GS]W3D&CC"٫n6 Ct+W^\ڔT|ߜu;Ic!yxdNd=!a9ԑYiOl鹻6M-z`NdyD#G~/i9(HL3QI&aFvKaKgSt*`5TҮ2: ´{Le.MF;%X71T7ҝK> Q wI/g!e\nywҎ-TL̗scܛVs^(]'7תwLꘒ $icΘ̨0jn[ny"zN:Iu.^6e`,('X0F\Jo\c_DZN5: fjb齙{-|y\珲͎ RRP"r9 6RLvKH;kd;'Y& ut1XZ,emGgج<ΜsB4UHշ)$HS7~@R"q2=2Q[D^(7%= j(v) 2t-SG .m~# Udw!/Qadz UgMy 5L kl;N89gO^X1lGwߚY ei *X$)@RJED74ޜ纐`ӹjr=镁^7]e91.6g~X{kf.Jf1d1b fy[ Fm 5n);cc]M騵W-]Z5=IU'9f-V +(YlOt./ԜVd2xYq&5@%S>`)C$c<< 9r-Yvv*x֫vYZ:W-Y$FEE'\LkMscg|RټI'7攔2ClCL _Upy@7kՆjZ?ϔYTm_`׍īɺXjޫ򋦎D$3$)9FXsk2*!VԷk]hβޥF@D2! Ro*WYj@t`eoͭӬwS-=9})r#:խzcOw٥ i8`Ѡ0G1 %e  C`И~;}ZG((|R?)d"7 x)mv@HSScš4)eu#70qBt5SKbQ:|(8L:=n7FI49OMzD%zhJj2"FlVd\N=] 4>(&Xԯ؎0D)XQƋA[ AdobedF]     1 !Aq"2BQ #$aRS& !1AQq"a2BC$4DV ?M1XM}B׆#E0MGՅ50uN)GD~9&G.C 2L5LT[`4Pd](Dx15MQi4@_f95LQatE0M}?Lu0]Cӻ Q2_8I˯Œ S 1#@ >i>? MS}ZM1yP(ل)a0Mxb;$S}X]L_o3#{1D˜l݁S '_viW%ev̲rN:jUo;.0+S7vܛ\߉y,`T'o=cWu-VJ{X 73%ao[ qm/C @ÞY5}rфc9"~Y/Qrv"uh\6: nQi,'N"$ ݢ115LT[`4Pd](Dx15MQi4@֚nݯ&lMuF[7n)Ok ރR/5Z3]%MUHs7 z[J6NSO~#fqKejR T|RviWwJ[p{Q8)/ӌvܟh?FJ?u=*nPEۣ!UխF-EfsꮓJ+!m,4]%e5UU) {B>6&U'N/Bw:N=O4QP)/`vx={Co(n.2{WV5Mnetgh@E0 ּԎrTM*!n1b1W6%,-ڝX٣^W%E@G-1/;y )}JlpDZ35ē(>ZGtvlQHVs8rVDR{gg1 /)9\늳~ N#+Ư7!⍖ yB s#(d'qLsmڥS4Ͷ[.C]F b F-y/xxy{rrv=v<˦+O>ka .y{i1Hߗjb`kp{ztXđ%U+TdhR4H'%$6k;M`swB-ۙ::-c>-(s oVr:Pv8i Qێ\sI>[1n"ҳ*›" #n\_>RpKLG>a_ TgKhkͷ>ڶ={o;jOgnE^.#UD:Gq}n-Te2ȁ&5ȶjH!_"Pjֿ:FQ70ݹvÁ\ԴTC?-sፙ%MAUݝ߫+s]z6L)#Vܗ?*V\_2*1KJ*ڽjpG@LO۪޼γן -z<`B1 @`\8E[Uqrtŵ 3kN3n%!Tz#86@] nY[ζWUg懕iğ~a1yڏƼʜHrlZ,5-Kp LC1:/m?gIkdN#k"qċ mYT< R9َ{9ZV(-Zit00ûulΨUL(\پņY# 8 Tdwv]F\fKn/n2vTAoZ98Dv^Q7úeܶ?# zCgo:`keK\̽8;1__=|m*y:[e.!knU5FttH@MBGT _HhUPT tOusAāCȕ+>ŝ.ss~ܜթpqqpۭZz?"*RRgs'CaU_{ ̙ڥUDjP[xp&yQȼyfA>EQL#yy4 6Fw Ų0=A1`~Sk:d;[il3 8 xkە{n~R>̫ʡ=7Z@JGaW:#?/L#̉\kkokWmA?F8ݼV%'JQ[9V7rlD*_7Ipߕjp^a:ʁܫ1giY!)Vcwd{|xpWNNK8Ck }G.F[MaQX-.9??⯤Z5-Kk MzʚT#uԵUn:DT >er[șM/ q.ZnZVmCx@Mnu@e8NRu$tS0=II=*tdO2@3e IpWG'dn-ʺv%F7'K+IءzÝ Z9bF=<}ܵzqƕ.K2,l6 @v ŗPq+]/}؇$׈aFIrL ˠz݅4ȟo&-&rk0&1)|0$tG vtLP(/}؇$׈aFIrL ˠz݅4ȟo&-&rk0&1)j>. 透 zwaJ:&Kv!29uQa`0ܓ"$raG2'ቪoyouker-assistant/src/res/manufacturer/LENOVO.jpg0000664000175000017500000000744113260315532020613 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1!AQq2B a$"#4%1!AaQ"B$D24q ?Ǔ(.qW&$>]D DA3 ? NȒ%˟T7HӶW.AQ#TArIo-LQH&| 14gӺ*As%=K( +>!(n;m((\]D DA3 ? NȒ%˟T7H'm(D?MuO u:lFӛm6r*DQQNUj3 !I2a"c?^_^ȱ7ȼ7+#ыѺDh₤¬[j*}XیٹUmn_L]@崳dD8Mqsrq#pl#cg19vdk^ -E]tf>;&LwBOH.aӲ$I~r"E ש0zL=`Y0x!'mSD V%S̕ϗI@@N',+_VĸB (!BR5\ijf%A3Q˗3L4HyK<~E.:W#''G39|:N=x7or-޽sOӥ/jujUɢTgK\$ @C7sRDpuw{;.Al`ܝ7zۘc8Ӵx87ٴxT{ZtcE{lBiޫw^whUn^K[꫖0?5QM@OkqG,>SwQ]]Waygu1/>Մ;Ab% @}{mS{ܺ}emcTԷ;-wZ :2*YiQ1x伪6/!-بb`.@ :XBusܷ)+',%t6G' Y\;0Wٿ+5==oV۲{iCUAhʙEI}`JaM lNfk10#̔"I(n3oay.Lۤu.4 S$vnfuMogh]>*Hܭ6„U@`e:jzqؾ=s*\#F P-%s:>r,,Aw ,҂8Qݜrg"9G" y]MY&z6oȇ u?Mѱ ;M5EŢӝoJ* JM1+-ʔ6kֺ'=L,s~X֖6tf#R*RZM՟[iyu sԃ YbٕJM*KEyTRDcZ?ᝎk#1n5B%B.$ӡ Br7.18~Z^[H'Pb۾۰qsprV^ͭ tKgilK|vs9ี݅^ZAIp~Hv8~k|U[ #9T5X.5J]f/K(ѽ*ڮ>ܚ+G+"{[嬺}.°-^_t-p*mŵh1Ҕ]2j(YO 4Xo}۵a\|v719r_kE·vͷwN}٦R,gU:ymR܊f]5mƋ}܈MCs܄SD^^ ~O!0&8F-ML=bZ]h%Gߎ)nk?=PaG{w3 4G.IIyk;}y<. 9 <2cD܂*tʘJ-JY$#N$P(0%@ Ke츃Y+v^\'Sʖr!LB HwQdI$|fs4i.8:Շ dܳlyUJ, S:\Z2IJՀ !fr̗vi2i Bp8 cU$T'/G+Ayz0F4ó !M˾tM.,iT3*:)g>ZDôCw]wP=QeP%W3A9kՆ8F=D 넘HO"AG"LxD{5_l W-&Q 3DF &L'd NI:vDI/|4T\H@DH @rO {ZLyhrg*BA3M Nɤ>ГR t)_8@h\ECt;h@Er?UJo,F*Ug A3H&};'0S$PqRs"v 2<$~>?(7U_youker-assistant/src/res/manufacturer/GEIL.jpg0000664000175000017500000001145313260315532020327 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !AQqV a"2B#SR3$%EUu45&F7x!1AQaq32B$"b4TD5 ?&-qG&z76Q)m. SܨSSR~Pq(7&G.0&9nL.G.|S"|?F)KL_ %LR×9dIrƽ0^-@8l^EsMn.^˜:b&N;?T;~EA!§tuKN[?S; F; ӫhF#\To { 6r>#s})#^§t 0Wк{~Ϡ v0:?v_>ΥC `{G.o}QSb8>"7̨@?r/S;@KwVsܿ֜FΏJ{=6IɇL -U4io+ntfNo-P1ia"JҮgqH<R pIC1>|գ>5p۹|NR3uz@̙f{$ keM8\o[^v|$\XR5F ybE5NwWZ'T>1_I9-j6RR.ح{B䲻>!tsrFeM*T$wby.)UpxFƤa/7 uv'?Dj^WX F:EZ18u~?mE^3FcS G$}hVYуƫ3Iؐ0g?@]vʤ^TN#@of:R- G2?TI`rL'%Hre̱mG4n͛6Xcac0)7 *&*ycl:q~Ia|Gcx"ɜTwq p B%jn h}`Zԗ);X(K̳(} z˗?a7rnX`ݚij%n{^vnd"s\tL H8'o?g(D3\6&˭V}:trCI LM%vlTk|xfm~ao)m6ڔ9-XҧuQx.s.ZթpۙEZvT&0!VWJFM>uEҹ.V!d ykNl Mpǂ?I>UiygګzhduR`Mh/1d*SDo$8r<[ĺwR9n^H#oxeVҮF7Ֆo <~yA'E&Jgex;LblH3Pԩ11Qҹ+.lKci!}5F Q2tS .F,&)]F]𻷯Ě&ܝ=Jd,Mp{!,4b+ B|v`o]NjoE3C*oh R)i2ۂWD.L+g$ Z3I-0ta+yԿG п{ @/w`1=0SяNVLS!T9cZjR #LJf;>HB0۫:DT9a'lN6߂D1"Vܩ R6~Re ̥ ܰp̴7޹3~m0L[f p+Ko3B$y;C]!RT!y\KT@aR߅e1Ҧk8s$͜p &\Ҝ[0x{ʵث)Ӈ`b6 qYX_L,֮+;ԳMcԔ_5Vm8ܪPړ=$dnȝZWFCqȻeS +':@g na.C>G2ԃ#T*j# jy{;A9@j!W]em/fR<<*1`?wd)>Fy, -@-4y Lg\GXN*Aq5ţezjԞwZ赘,bjI*Z:군9Bە:C|d  4PT({W4Bvw\ޫ ɵ\hH_Ů ߧW' 9=ʹSr%(WHTȉ`J2bH6Չ!!jڥyB캘[i@X\^זN..u-p \3a0ۑG+Ck0g#EfV6"aFj^Nfgt^kTk::]4e@BbMt_zQn׶:OC qcQ.#,d0cp_=ޮ'3'f9#0 Ϲshu*1ƽLU9\"id]qdTV{J\ٷ8sR5D .9f_ל[m1S~yTźU=fוMo= :Vʦ7瞏Ѻ^U;vpi+Vʆ7_`Q=fmו-oN 4ݻnryV=g-ǕmoO}p!(Qr|ԡ6nGΏG~`; Be.w+1 g/,]Y8B-C4@/„=ʜua6WjJ96ԅ1& )LhpR&Bʘ.R8&KA29v(00r`6Pr9vx<1M\+ܼ}BFk {Ը)LogrOLhvvJ%Aܙx”\b \T0(@ QLx/youker-assistant/src/res/manufacturer/TRUST.jpg0000664000175000017500000004531413260315532020533 0ustar fengfengJFIFHH?ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:03:14 14:02:19]F&(. HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO1 G/]#auGj[-pp%cߟn=sObO,qV>32Xȥ[pm;\}qzCeݑZn׵cا!Bˆx⌢,d*dn$sqz%Yv nڇ/GuY=_V-eZᵢv׿vWmѾIJ3pwѹ9R\SkUYc 7VhW:^p T$~JuRXmt_jmx=[iӷcXSiL[RSԤ`}|9X*pm,wnC3*=^[%WW}̦$:*^CKtoCTu[i!Ķ$m$^/Wu̇ -KwWK{Y:UX6/}ew 3:8|_~]f;ZL<˭-ZW^Բsٳ/ٲb{ragV?ո\vƹD'/MK/1dJ?u~\uG\RXwR/uX_wb0>߉77s@a lٻw$oRvSrNVݻ7~ÌԦ>魍h[;+Z \\ Th/PYV]ydͥ{'s[ceF~G2RF߿{y%40>Y?/}t߉sm cˏK6ն}dUޛ|c?n2ZeEVq&^kLkl,ͫ*AmnXuֵ.l{*IN/ɧxxQHcke`36-RgC3wec6Y]֏8]oaabpӛ!l>ogF=b[fEw4m˫}ѵ2JTI%)$IJI$RI$I%)$IOTʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM%8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM=F]QH QIq]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM %]FL JFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IO1 G/]#auGj[-pp%cߟn=sObO,qV>32Xȥ[pm;\}qzCeݑZn׵cا!Bˆx⌢,d*dn$sqz%Yv nڇ/GuY=_V-eZᵢv׿vWmѾIJ3pwѹ9R\SkUYc 7VhW:^p T$~JuRXmt_jmx=[iӷcXSiL[RSԤ`}|9X*pm,wnC3*=^[%WW}̦$:*^CKtoCTu[i!Ķ$m$^/Wu̇ -KwWK{Y:UX6/}ew 3:8|_~]f;ZL<˭-ZW^Բsٳ/ٲb{ragV?ո\vƹD'/MK/1dJ?u~\uG\RXwR/uX_wb0>߉77s@a lٻw$oRvSrNVݻ7~ÌԦ>魍h[;+Z \\ Th/PYV]ydͥ{'s[ceF~G2RF߿{y%40>Y?/}t߉sm cˏK6ն}dUޛ|c?n2ZeEVq&^kLkl,ͫ*AmnXuֵ.l{*IN/ɧxxQHcke`36-RgC3wec6Y]֏8]oaabpӛ!l>ogF=b[fEw4m˫}ѵ2JTI%)$IJI$RI$I%)$IOTʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-14T14:02:19+08:00 2012-03-14T14:02:19+08:00 2012-03-14T14:02:19+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:208f50bb-6d9b-11e1-b399-988578345a81 image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ޛ1qryb'Z`R SMM2HR\&v m.!5 +JZ㡍 ^emY큭&]HL+R+ViP+c՟kt?q?_gΟjOo[zqս][w힣K)f!-jieeji(r(C;\Cy76EH.ze&iP~H#H# M(/j O~b..T:ӤӮ#OyTjzޝ{Czul}%}]76/x߽Ux(w.lw Q,%\TY,nZH*xfDetRR(hz t)^׺u{{^׺뿺S_7cc6m~ǐfǘ[P@,mUFHH*TЎzٞ;lW77IhPZi9"]7ee`A n{VPhhH #=e66 yUXCQZ0 A0Ak7O۟tvwivOnTxH5mN^L)i MH${ȎTg]٭w G} Lr,8sX}Gs=ߞsعYf&- D (/"P@j'⿑s\x]{6Sv l+68٪d-S϶TI$>歷qݬw DsFV* Ǒ>K|7nZ>^l;g+E4dQЊ*~D4&[7_OON}^돬6xmTWmr9g|8mUP و`tPXm $?:6v7<^3{ӭdޒ.CrM8'A嫟WҸXeӏT*1}˲6vfv?wm|WXowش3dV|^xr4L:mAkKztf>`2;fm~ܞ/x}wEff/e4e\}Ue -:Ǥǽ&q@äl{ >2lѿ7/7wf !.2mc6K5ڒzVUb=Jgi530d{K|yE%>N-WJi%_qViymoմ7U |}z{~VUovo/ ]| ۻ+t,t˃Z]ŷVh&d*4t@A,:-A$cғlJ䧞=IS'ǵil=6FO^3{uQN$`;7] K3c *(Jci:LuO= ߝѲl9zQ`[sTT9ǝhb xBeYMow P3׺ sxo}G}3mnڌVu{ֻ5MEV0-n9!s\1s&ź‘+*悟{Cۿh#y~bZe6m#,n* kzNޓ`;7n_f8 -un.M-]%%SRF$ob.=— Do#F 5:'r(-[.a)2"ʉ* VeԼ Ҡձ=Fk?1WovJuh \r/[–qأoU[wS޻?.~ztKM?A|oبjctU:__':ޟ%r(7Kh#;+enIv|YܾrY9_2x-#HP;ګnF*8bL?ݗ-:gо;j_0QXlAxJjEGyؒI:SgiuX_"io흺+39mq{rbs5\oFE>Fd*ҞYHtw7TOT:vnO𜾊;^v/C=[uh캽ל`my%EI5Nvhҡ]!::_Dco}Cӽ=Yv7O ؝K'S:qqa:IIJ/k|U*o[1o/%ƒv7 ꬇enw|I =ef?=6׭bY+bZyfT~ j:ЩQU>]Y~?J7owo}`~>6n Smjl7pf)X)]GħUuԶϚ~P|[K؛w&#pcNOJ1Cn)2*嚧Pp8 uj{|T_ ,nݻwOw`hk[/ J*Zwe&X{^W'O#;ِ]7_y&}uO5g4F}aWP#=wv-7T e!xug {Sg!{l=ܻd6o☆z|3PM sы`q|Yjw#b3rn~;67IgrIx>67YCB/lVRmNݷ XaT, HxTw}>{Ϟ㝴Ykg-]zt/=P,:c7DoM[]Y͵2Q_QUU[G5. QήRGɇy)1*]k*;~6>ȃrVL^JHAƱrIn4滛کcqlN?D[^MwN]߳w\N_XXrx\KzL,*XQqLum?gTOxoQ3g?m\=YE`6Y-×t)ҝd2V>X3{z-ܿ'Ι i8}6{+T,fFUM[I,5, d_W_ui۟^lcB1˾sifnK2CM> Ƕ( Dy)jR*D2h[[^z; ޕGFN'7ٗdUazͥ9 JRIT3VI'ϭ s?5.CQ孠"z1Fg6/]]_C<wObbUTFާ-h;xUtb_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~youker-assistant/src/res/manufacturer/SUNPLUS.jpg0000664000175000017500000003772213260315532020767 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:21 10:11:46]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOT._}v6 { {NHfu9lcdjzzRz7 d<2sc$;#?/2[?%$H)$IJI$RI$eWв#\͍ C7\Շ`wale2fӠc,k{k=J^3x-w.+#zt{q-5?ZsR rOO9?.CzBݙ,6.f1]YeCeY=V?;uluHVW[k`ִpQ)X 8( 3+fc`ߗu˸r]Vm~7iSe})̩}B=w5;]j}SUyOրA?Iԛ;2:Nh#kacm;'"pwWu_ͣ䞳zXG2uM}Wέ5v?{1[+-y;cD-[ .-INGD=[Q~IC 4rͻ䳤}fqsnǾA`HU =.ddmύ9n+FnMtsb}CwmRJy~wP6d}Ƣ[[_cƷmy^o},3nUu;lf͛Fȍ~$Uw⤒JXG)> IJLI$JOtRĞڥ'NJY:I$Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ Photoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]asint]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOT._}v6 { {NHfu9lcdjzzRz7 d<2sc$;#?/2[?%$H)$IJI$RI$eWв#\͍ C7\Շ`wale2fӠc,k{k=J^3x-w.+#zt{q-5?ZsR rOO9?.CzBݙ,6.f1]YeCeY=V?;uluHVW[k`ִpQ)X 8( 3+fc`ߗu˸r]Vm~7iSe})̩}B=w5;]j}SUyOրA?Iԛ;2:Nh#kacm;'"pwWu_ͣ䞳zXG2uM}Wέ5v?{1[+-y;cD-[ .-INGD=[Q~IC 4rͻ䳤}fqsnǾA`HU =.ddmύ9n+FnMtsb}CwmRJy~wP6d}Ƣ[[_cƷmy^o},3nUu;lf͛Fȍ~$Uw⤒JXG)> IJLI$JOtRĞڥ'NJY:I$Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2011-12-21T10:11:46+08:00 2011-12-21T10:11:46+08:00 2011-12-21T10:11:46+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:f29b9da7-2b78-11e1-9c1d-e060394baa3b image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWN*UثWb]v*UثWI4yw>];P{ MbhY&F%%?/YdY |ۡkiz:+NtRd:Pvj/ei@[H^aثWb]v*UmƧcG$D"aRRVB v݇ r}_Qc6YKb:Ox̷]-CDcOIZφ>ͽw{zHK>BX?|rH^l[_,Yj-ek!DFmfG'2t3(mU|Klp~'.//g5W[R@k1V5wSb%u]N*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/M_AUDIO.jpg0000664000175000017500000000660013260315532020722 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !qAQ2BY $a4%5I1A!QBqa"2 ?&ɏ&<" &#Fh~%:y t&_h8D" l@Aٵ"X/.Wxؾ [&p2cIDIAѢ$ǧ0ߨqH, =<+[vmp 0 ˀudE=>/VɄw 1<c+`b=Pth17"\C 7BedO/.]5^ʭ٦YfR)R.reNIw';t;ܔ%ecƭW=lJR=Uj]| c )kI4IRJSʨ(il׍SJu, `$;;8ĚULQE*UXjuj25+5ʬ0i4biDgS( TckPQ&fi@yQR^؉+S6S[X-%h6eK4bVqP'}IL$|IaM0G_5ruҙ6$eVjBnAeG.td9M'(-?82h f]OыjMNyJ^{0J.Tvy(;mZ#SQ`e[Iœ*Ŝ &TKHT e-ֆj^ӨnMhuaYJ3%IGzc=ճDƩP9zRJs{#NzVˮ6&N.eH;-Fz픙w$Z]R!Dl&1oOvb.R a=TB4 z[eQ-fW$I TI#FydbˌW{\WetگR$w,! 4Sg7Zܫ}ɢvܶɨ]Y(v^pɾRim(B9RMڊh:ZDW n綆o_%a-Ts^-~*k@URBtM[ww0\6Vy[޾)UL?:wY5?"9;Q>Sj-?tӟ*^F{"o,S &g9-Pg qАHߊ*OyߐEn{Wg (᧽<"L3*zۦo{F~Pz}=oާAn{WgO>m/e3/y?CPe+?'S>WTo ?j𼿇J~(e(T}|9/C)C%UK?'yG<ڧ%x@<xJ0FC4d>y1@byB$DŽV$zcoDO$nȞ^\x-;6DK: "T[d;^L}P1h1:4DF.!2ADz'!`Kbͮyp삼j0しD'"LxEl"LG&=<цDKtAfLqELjAX؀kD^\; ")E|youker-assistant/src/res/manufacturer/VIMICRO.jpg0000664000175000017500000005307413260315532020724 0ustar fengfengJFIFHH ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:02 10:29:03]F&(.zHHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?T۝,1i~aoWNox}۝,1i~aoWK~qIQ?ޯ&Ή4'Wx}۝,1i~aoWK~qIQ?ޯ&Ή4'Wx}۝,1i~aoWK~qܖ-o]}P_X[_M*.{6Wpۭks/OT*qa;swuY\zRIŮS};}nrk-vaemUٷYw 82L^iMF#F\PAWOw hÌLJ9K7;b^.6)I}2wkkc[+'q &+yin]I%6f;,u=7?#JH^~C۩%;qGtdaZݤܛr|/7r[Dp6fA^I!n":zGR~);2+ٌ;[;w~h޵e_U;7y%6luElQausJ960c^fي 6J]p\el=kT)s2k^kC^3ZڟwF ,>cdzXzi>wܬ??cm?"?X9+Zl[|'.~&.UOS)|.mӳ艹_Om}7{8S?+^̒󑑳c_4dTm w߯fEgҳ'w%[6?z~~^ܿ|9}h>N&EYX᭩-5 ;}4jr~wUNPq}}]}?u5kI8;o+ۗ~7z]k{;wZ^X־loe։$u'E{HǞq}"w'np2RֿO'^Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$jPhotoshop 3.08BIM%8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]g*h-7]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLzJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?T۝,1i~aoWNox}۝,1i~aoWK~qIQ?ޯ&Ή4'Wx}۝,1i~aoWK~qIQ?ޯ&Ή4'Wx}۝,1i~aoWK~qܖ-o]}P_X[_M*.{6Wpۭks/OT*qa;swuY\zRIŮS};}nrk-vaemUٷYw 82L^iMF#F\PAWOw hÌLJ9K7;b^.6)I}2wkkc[+'q &+yin]I%6f;,u=7?#JH^~C۩%;qGtdaZݤܛr|/7r[Dp6fA^I!n":zGR~);2+ٌ;[;w~h޵e_U;7y%6luElQausJ960c^fي 6J]p\el=kT)s2k^kC^3ZڟwF ,>cdzXzi>wܬ??cm?"?X9+Zl[|'.~&.UOS)|.mӳ艹_Om}7{8S?+^̒󑑳c_4dTm w߯fEgҳ'w%[6?z~~^ܿ|9}h>N&EYX᭩-5 ;}4jr~wUNPq}}]}?u5kI8;o+ۗ~7z]k{;wZ^X־loe։$u'E{HǞq}"w'np2RֿO'^Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIMhttp://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2011-12-02T10:29:03+08:00 2011-12-02T10:29:03+08:00 2011-12-02T10:29:03+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:56f21e22-1c8d-11e1-ae7e-db667b27342f image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~W/_?:co d7_7;?λg_(߿'֮|Me'•?Ͻ?u elQ0>.G jG.Aygm[:P>0~-@0m}y{?u>_\?|sooCuZ?[ν¯POooCuZ7?λggQɷ߿'֮|MeO[i?nW^\.@go_|*{ ux`|\Ҁ}l j_?lYm[:<_ /.@u?e?un6-ѫc${$W_S}#y6f_oBh==#`<|o2<{w7vmzLn.OegZFӴ $,YU-{3r$V DuAhghyq)-ͱQCU[E xyb_/_};^ܛno/6,Ԙ}`$<& +̳U7[PWE~iZ?P4MO=v8v~Yi^V%ҵt9,!ߝ[%q}SGgzbvFO֙^W!1KREi$,3cq}yLnJ;20 K 4O|/w4m"{FR'L&(j;ű{~6u?eQy YlR=5e4IET+ufE77|ߺzhE8XaBK鬎h@~?jk 휱GW3Idzhڰq 2`@Ł33}EnĴ˫(e2 s}=4 *#kfC\,)q߃xSuް:rlxO/AiOzAUX}v־iˬ~o}M{_NN&}']-ipO -mZ)lFO}O/6mͪ pѼ<}9Epn,9ESMiy sdo-`f0ju}OCNCy7 V(GEa5UM-{; N/h&nzӋ q$S񅯦2Rʡ'{=~lY?AL5tEd5uj"i/^g]lh#:#ʰT@Cn6޽A۟sy?3s;m$u؛j6':u2SWfRTd֥sgn~~}ivs̗+D2h=@FG¢V GQ?*+7{&EĺΔԇKcXz :Ck|~8>؝)3,7v/t[۟iz;( _fMQQCBLe, Oi㞹ޤ{Ne6F(D.feFԎB9JԚt9c~Twnf9F $j2NELevA"=;!+s{pFpPpborY*$JO_7_*k[Y6Cya6vC7iFr|:z|=d$T@%is_$!@wC yTBTEBWQiۛ9M1;k2I9*@'[F/zgvc->$?CiuEGclvYrݵ ROEm 8?\N) -5[OJdi:b#;E]QnUo~|fڛ{ /N|6s}u&W5>cf2l.{)ߊ(/MK6{[ywsFu$Wb.1]8PYrߕ6gs$ ,r1 IE4ԚMzʏocn =7򷴱_=Z}Ccebv= x{eY)`OK(|{{msSq4DFu2X8j6ܗ[Imu4MtВ$mP vGRݴ+f{7vE+ܘFjDf(钥4 2 [5Nwqy`f@JM?.kHo.ExF3[ŸfNO<7q_{N+s?XvvuUowO:q6J{`oκ9}-[ ntQEAV*wC%)WIm7}Y[F8\\!1:@8S v._(%2E)Wؿ?zr|wN;c7uۃq*R#W >'`H@bdjfZ]ȯ4^$ȧTQz6ܶn-YhةAcqL4w&oz6݃7_Elڸ4ٝpԋ*A5TJQ boemn?P/%HX!`tuZF\JĐҺX:d}jo/{2ùh+hr͜M6\.C/VjQ&JI(!ru#$+&`C*=5ڵP.ps9ZK]51~*H4~I'aoo}㻲gm*.ĨppC/I)jja<"0.eiG[fF&.b@dcF+>s4䕙c2bIa@ݔ'Z58=i{[7>G4gogtݛ=WSY]݆LF2'y3OSK’!}-DžQw5@D.悺J-: M0A5*@uw)}C>w3ݿ!:?1{i#wGjwNX}ϼ{c 2[KvC;X~ɜdXLtp'Iw"ܷ}y:K)T6tHJU閕t謌x%xu{"Y0!ָU>Ɲޟ\L`w3cfhh捈92 hVHU5mWۙɷdzLX_ި}:{{pգ6f!zW ]=8f0k9SbmuAud0eW ӥZ6Xmf PO_ޏ1r\5=i^[r'||oLG~uvbz#d6ЯgxUR}EfC TUol HBJ s&[ZuaJ̔TjT}iՇ2mfZ%Npytq3?)~~~3]y}vf6cUl\F~ejI2=W}TEJxH Dl J^ 8~=5FmϪ@ۭ,j{g{w-72o|1EUlQlڙvvwA#4{imC/(XQ8'u |Qcqc?>}`;+lv..6x]>emn+huc2ϑU̔1=l䵞=VAO/4 @J+ъkZ2 4 tJ[om뿓;/MWۘ_1T[glϠ[wmMfݖH2Ե3=[$ !l; k.3:v!`B J(ShR=f@!V}Γ`Uˑo+S{u~f{w;sζ7&sph XUp~^B( HHCjD=OE m;K3W\u,xt&Q|z+'$3; G<+3q](E_b$K[\1J zRʊ%RѸ5Fj4ɯvw]Qm$paSB2+NgM5MO52QQ<m$,k]I$c[4DlBM ;[}]kv8[D?\?6e/Ͽo˟~]9{u+rߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~youker-assistant/src/res/manufacturer/EXCELSTOR.jpg0000664000175000017500000004532113260315532021160 0ustar fengfengJFIFHHExifMM*bj(1r2iHHAdobe Photoshop CS Windows2011:12:02 10:26:26]F&(.hHHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IODONއMޏshe{ vx#t̫zUm\ǵZ#]utRM(ycQfEU-sq֍)Hs7ELS~#mź̈́6朊;~~.eQtbjZ ]Wcl˵>tNOȭ[]c6[9]b0Mӌ籮k⬊-guͫKgEӤ2JӠ[5=fNOAƳhqu;kfʚ]hG}ƽ+5Vzl^n]*I{\qABl{eE^3ԉ{^H8lg{]iaW>tNOȭ[]c6[9]b0Mӌ籮k⬊-guͫKgEӤ2JӠ[5=fNOAƳhqu;kfʚ]hG}ƽ+5Vzl^n]*I{\qABl{eE^3ԉ{^H8lg{]iaW 1 93 70 1 72/1 72/1 2 2011-12-02T10:26:26+08:00 2011-12-02T10:26:26+08:00 2011-12-02T10:26:26+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:cf644b2a-1c8c-11e1-ae7e-db667b27342f image/jpeg XICC_PROFILE 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)KmAdobed@F]      u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Բ uBc ( oz*S֚M47:}9׽uZmZ+/nuDxu~Nl.rw&qDc'ȦJn Ey(NleandQP++9 i] +B|@?"k?;Q7- aveV+tb0/ệP,MMW Eqw Doxѕi:X(Ej^ܬk>aBx|@bm|nz~QlNߘްٹܽjm}2mԒÏj)઩Oxm;/f4\ j50QZduo۞/n3+Rx<|^12ޟrAH }P˪Νۗ|gZq.ur=br|+ƕ!5*-g|wϻm}-ۼ2D%MEG{sͣm$3nЍ󾻏7ۻϧo쭫iu?~}DcPlviS=D O%5e?HBM c]+a'16SS 8FVr-pTmk9:l#^?K$]>X8ˣVr#ҺqW%7`m^˱Mp7`mmfj)^Fo%,pʔX9$+oj-濺JN0*@UɥI#uIg%ƈXq~@*`} }Wٕ&hTj0Qlt+`6hR=S)23~ܯ+KenE%3PsVH#F $7{E4 d,[{<.lO_5c^'l^R0_m-]!')ű#* QOkk^N;WQhÚS;/q^jضq}PxP5=͛vǎy݉л#nّb${ٰ\vG)ڝ9v[*aj7<)iH;w윋q70acVHբ B*iGD{򽥒 )PNAJSye}>_@}ożV?oOxi]NNgϬ~J}}+ٯ)>ۻwwB]{ 7ioՎlDeqcpPmMGM,)Pb$5L\*~$qoG)1č&D5n>Xܷ`S m6]ɫ> i"~|mKoT򝫂_o͵dlnݛcjmU^95 }>^Le5 4Ž|K{2_7Qf-KCG4CQ $_lYxmUg#B4)ANπ'77T¯Uڏ{}옷\mMv.Kj՛)u01uRYzkfxm6CY `d3)s]Y" KJf}Pjk1-NM=GNzK“RR:IjvG6qC@k.j{ϫ{'~G&I.ࡇzo῰ݽۘTlcpSdc3bB zX᭑ܯhl,I-gT5j rɥ* t˗vwϺLZʅ&P"SꋿƦ'67Ŏ鍧va$Ϋwa$؝mz'<'%}:]F]WP:N^s\mo./YX-9 ,¢2I:EGQ<}6n'+UIJ>($Sý{l(6퍡mnt6Z~=7'U  )55(5]ls^K{dgӈ^yj@rjr3.F [&<0z(_)o9B쯘!vWgq]nޙ^vm>s %DY)W3M(C}?eg6QĆFF& - 8U5 gvۺcpCJƎ2h3Ǣ[n;+Fn={~efrmL&'uݼ'C%Jcq42VGP\W$ͳmװmVpSOBn`6.p?t),Tʔxi)ZFر$fB\Iw;NgbY*MxytDX@`~^߲mw{]hI>Su$.|Sas᫦1X{S\%ԐxUVCQ96[c!;jM`qǧK3 lڬUHyS W#5VRˬVְ}ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~youker-assistant/src/res/manufacturer/CREATIVE.jpg0000664000175000017500000000740213260315532021010 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1Qq !A$X 2B4Dtv(8HSd%5&6FV"cG1A!QRa2qB$4 ?&QsL j(>(3X23Q&{(0ډc_|; \%XR"o[ (X<rD~b2<"NQ&|Pfef<7 LoBQ.aqL8 v]JӸxl\I=6-;ґ^H6r~n&ѫ-;ґ+^{p6ZRkO"uk^0p-)tZ WU͇ۚef_=AkۖEQ!׋  +)Z Nyf+`@rǝ{}} wa4nڳWi& Tp;L_Z Jȷ*I@8yl*Cpw[EWO.ž:_FyaV"~2ē}880Lk0@qb䫻42;n72RO%*(M@zul 䥋mÞ? /EmZW[qu_Q&tMMSUGMvGj#N4_.Ph1Cw׋+(&ch*{* K6ܕA=?bhTb"xY%Ͱ* &,]|ߨTYI|1q=Dl +|?An 'ThJ2թPͣv0_nDs'HNg/q h#q7M ~dgX8| [/ˈzHy%]٧y+ݣd&?ZWtުEMuk4I<ͳɳa|ȉ2~3_~4Ͽv@a\hAk=n|AAr',#{4{s{_q]TkwckN*MVZoJQ5wɐ'!6:N5Nr:\t&8J3HTTk+o4-֝M5iyLW}I`jm~6Eg$D2TjTMUGxJ@`vCjOsUM]ת*&K9.vvR!m]ޮJjvC[pɤ[*z~8OxL9cv|;ΓyU Զ]%8^V8qUj Ȥu8 E2J<6P0zȩO6 a*+Cu2M=FW5VCA;jᯭ9Fp]fR&}JPS1e$l-kmEQt{lgQ{c& VFNTѶ^cg89JB"=\av:Cڥ欠PZ⾪8kWۙԥ]c\n&lӮ]ͦEuR&]NU`uLEuJÈj#34ݫV-* 무ռ}|=G3LQB.3wބ<஑X_OA=5Vyi뉄(]O6 T'g.J:P)&aP[_H}}=Ci@J ;ڎV'f)qZ5Vmb=bϷdΩfehS:p- d:T: v4cmPoJz}f҉򞍆``7/ɀ =>;lD[9'QSSt%M(n:"Y9If 4vle7#tiŞPv(`Lup/}ZQZzN#iL|ЧhBU+Í Ж$rF 1Li|54{:#:hOA>SXKbK=_)/1I}3ɓbilZ=m_{(97by2lX-?sVx2ذ2lX%f#Bl=Yc2lX%Y=^iwbJylFDZR-.lزrX"l>qz9a͋^\uc2H|OS՛5.^\a5cjԃ4رR˂,.} -?֐xN͋*!¬cvAt'D3b•/c^3uSs5fŕ͈eLy3D2L`$x"nDބ?\wj%~q@(ysaJ򀉼yl( `Wd7g܈e;QDAID23ݽDK2 P*•xP@ 8%x' #youker-assistant/src/res/manufacturer/QIMONDA.jpg0000664000175000017500000001406013260315532020674 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]      !1AQa֗q"2$4t%5uG(HXBTdeRDE&vw8x  !1AQ"2BTaqS4R%Ub3s$5#Crc ?&FBcxoDuaě̅IL8xurB;!̾;>Ct4]P0E C1K< ~ `joFwJ<3n>L=\HkvBG?Y=k.dtYut7ݡOۃM {CYS:X,i6HO$b'Y? jdy5d7ݱw _t jީdYu\mۑ7pI`{GYw:=`!#j@=v_t=k$?;#夠W@=fXu?;#˯@?'y#;$4AdtPIojz'GgڼC:H0kE 3O=b#^dPHzGp|W܏j'O~vGIGv#no.0=vПϤ.:H+0{ۇPIȐmBMa3DA4k>vwi)(*_CW3,N *bI:oȱ2.&+5;p5UBd&\TՊCqgQ%%/8HI$)N9BiYgY&`<Ӛ/Z} RR h[UQ\ uOT:뉗r\ P6llkl`~g4+?MX' .CyAȧ%l= p˪lפn҄ݧaudH/u6Eu-5SR*we+)F:hMȲ.YwL!?‘#Ճ=_;d%1\Ut1hr܅j\Jrp296P(TeY@f |]vO/U3@H gpeF\ vJ4ݴzUR=L"(Nn"|s]v+LILWrMe1p :XͻSz3;+O %`qEąuuP&^C.kr-yWM36\urZJk#9ɯK85|ze"$0 ;4h*ƲlivZ  qC?kkƽ* qOZ#f7&.r0GgoGOCw+=-]+ 2_S(HT/YUQ XÓ\eS*z%w*ؠTThNU%eE4x+Dd Ex5<3tMSt2.w:D8@B Z.h.qF ֢EQu`ٲ%i(P8Lו,Fjءz"Ȯsӄ9|YDd2R:+̎R:A&IH9's:rvpPM򙮓Lr56+6~%_#p$~ٕK g9А0@P[beYm*kv/~:I]t Ua~zte%7aY 3 K8M'JYfֺ&߲j?݉(8P45J4g;Xs|[uC\=[!*.#NZKr&5Xs ]Ncwi=5T  L" ;P׻ yɧ2*iWθ1@rXMS̨6Veg -A`=' 3KεIa??ǦKʲ 7>LJʙɷa;Or;t.ק(싋ZTE@~3kYp3?K$Ee94ydZIf5ץD^Qş%'MOs] ȝu;7`3@f "4ܰ6~(¨X-@Qty=q°H;\' }LEmHClCwSgnDjxvFVefRh rPd)gH}ީ4/O} Wo2q߇O;cUOR/(NgOQ7u~1۪8 eGx6O; 2ئv335e}-yϝGX.l WQ؃Fcl80dׯ= Ѷ-r4;ʣౘ"n\>SN)9l[w>_BW|l"N a'yoD/wc>[=UE-++Đ*U‰ʄxqіQ%e$6ƓT.}xp+s"($n-[uG|E]EWsV8N#)S<2$HE)ͦn8&ShKd.}J)#'rMH@)vc v?,tXyE1L _XE ;x&9{ ;x&9{ ;x&9{ ;x&9{ ;x&9{,Od?q8b$- }T!?ʭ2yJ@#?u~^?~9KŅ%O>۹[Ü5a8 NΐxG8m_~'EH`~?2j7j߆i&#O+dVr>G;~9zDߤ`ᧅRG9RAuvl~˧uԂѿT! =. ׬MF .mrBaS>s uioÕ B,}.#:S&~0iӧrѿTQ~γT< 9>v>TRgjm^g`=v:GZC=Bd*OmʜMMяɿ΄0$؈É7 8W4 AdobedF]    1!A Qqa"2$ #GHS4d5u)BR3sDUW8Xh9 !1AQaq"2$4DBrst%57RST#Eu&V ?Q z #xLA3d%LA0JL}bCBf(9͆H "QZXޖ[ RTX9YFNuqle(%`IGc5Sb<: LJ%}bCB- |2Ï80D4j$D`Su`օ@ai!*'5ŶZÉQi[_VITH-SSEc b#(V?;S[)ugWld3?"PW mW0MqPб&L>{LjɏҁϭEe3CZGMy!g!!wKHcc#Z 8FO@R]Jaȡ0N ŏQ'OiJ6jJa Woaoؚ# j 2<%B֏_^}xWLbxJ/h'~t?F`0~`Kѧ^tIQÏ/ջh5FHn&w,m|C}[3|Mߜ^o8f~m˭3XeuaS3!ɃW?ɶ]GNJm>SD_mqlGZ<>K?RV`jﵻBB&߁2f{;e4sQP%( 40pfYL{/`uG{ϭ:I~@eZ> XNl:fXɁͫkeT;S {~V, Zg.cτau] l;J_oN w\&P%?)*q'd 4pa|"u+gӖ.btZ3lF,`;@X}x R_gc聤9[dp7ucB|U[ݘ@K\(4R "y%$HOT q蟡sVo4 ?+u [ʭn?k\ngb1QAf?"w XS$Siͯu,r/tj/56˰,|u7uU~#]vug{joo>*OJG-pϰ^,pM퉾+ܔfYU v{yx0 ;V@ngyd_-VRrp*)Uv2ΝVl$L|Irjq zeOȍ9'k#DzFFANjf>"+Y˧(k,= r;b(UK= APs :ZpQYjF2ڵc)nƩ!f# 7"n6S+uR#~ U4ifV6"6؄,:tϋب|Z3==-QY䬫,[u—ᵄO@)&3e7_NaŞ6}BV\z'8}aN4ck^1m̰xZqMG?N%QLmW׬́$oKT)NP]TY`J]"9;0Sh mSCt[V2 2j$֔03 G_kkgtOg}VjEdOZڱΈ/>,*y,lF.kٞCMCBmk-O3KmLe44(|t39Gҫ/-Gk<\Y25ZpȞu%LeBv_[O81:v#L[䝬\U\ɶ~j"5\5RF@`5=[^H8F1ei9gwR+#讓IK٩|f)鋈Q/$e|mΌ~V~neyDɓm3ɬw+,kH3a)KiHt=o~j봵Sw\ɕEgj±PP5j``,k| U*X۝jԚ+>awJUQ{5QM"U7Y/!Y9H//ťF权_@!6Y^>>Nsi'!W*Q}HQЊzFuZ4c&JwX 5rs@G"$$8˦59l,z`4F@M0iA;+øܴ l_@b z #xLA3d%LA0JL}bCBf(9͆HCaA0BhJ0!02q$xc"cp:( p&,8gN! S)|X0R¼ E6(cQb y&*b GBTdKS500Al7"Gpa"Så,&KR@64A-1E/youker-assistant/src/res/manufacturer/TAIYANFA.jpg0000664000175000017500000001266313260315532021007 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]      1 !AQq"2B a#3$%RrS4Dt5' !1AQaq"B23$Rb#4D ?<5.8'HEN# ~~Ax٥(/PܙN^=&K0܈ 42ژZ5yP*rq1" ǻR+D4"'A^!iJ8"K7&SxiEɆ(7"H%{Rd2Ɛ) s:oG Ύʒ" `ݣ;/ͱ@י~YU|=kO}{w{]3{.\fTM :Yl@"m (Ю^CM[PCmȌs NJ+/ v.W wL.÷.!҈pjdovJM.ns',Y) dJydmH ( MqvmWK@og_} '}ko!ԑ7OK܉JZ-fRP63L~i:Stf!|oŪz/9OR23[Ê֝:逷m%(藨]&JJn!nT_Z>j:"}:#Zz C$da?LXxK ^+"fɛ3q;ۈɕ$}!ƗhD=E 5٭}wR0< }%hz] e)#5?%+榅,44e+Vాry+lXMlF]=s͠xp<5i5zJqb ,7q+c?B:/X<WƷc.-\ цӑwܥlELy2yj`eJ |5"fb:8AYc2,z<̭g;c}޺.x@mMd׸ p1Gnr~NR&I/4n u3u02$$ d-|ɄCvq!1NtsF2Hej U(X(!,&Q^x\xj!{e]ߥVaO7."VY$jR5XVRtN^P\!(ˤvJTUGZVUbTGCa7on {W/rr'/ڍj/I:Ag_.8HglUL`58ӎ)^\V|$4jʀ ݉Ugg]ZԴmM7 |f6d}a馭2oNnZ2Oin=[$roXl^5ؔw'$sT P06vtGuPɁA{8Imc)uS)lZnrv[FR6qn-ثo mu<%5 R:U;Lh0nuPְ<ڂh1Xm ]9鴇4d愐Yy$[v^zƉU͈+na˷wmg'~S =O}f A 7W' ?z?twu,z3>V/O3 mڠj$վ aQrDgBbwb$6B:_~煕kؾj&6mE \h'$$+oknEMt/$\&[E`\7c$~ވ e͇p(஥#IoLhR~G|5lrfz3.2a Yq'퍞m#pW&t%DJJ'~̀D,nLpbzBt7[LD7y[`|mQj)V*+W偕iS/gojTԡF6gc;x.zF?HI3җ=cRng^R^YFǗy$c'Ց5|EL̫ %X{֫PR-+#;&"Z{- ]}+-=Wtp&J oUխR`0P!p$5B^ەSp>]G-f,m|MbrJao-cvWF*#@/+XW1~`YxN)?OݩoIW'HS {"A8K(q{QOf$;Cre9x\b .(r9v۳ݠA7/٠;R~S V*NN?V7A8jEr(qQh# >)GI0wr (0\Q@pP\/٥锟7youker-assistant/src/res/manufacturer/POWERCOLOR.jpg0000664000175000017500000001165213260315532021303 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]      1!qAQ2B $ a"R#SDb3C4Td%E')  !1AQa"B q2$U4t%5rd&v79 ?pDL594?'bA&، SQU@&AE?K ' % a ~QX鞥C:e1!ys)JPDxct ̫xw]qf1+e5vUG\fBYz1J⾛ȈHc 4hT&a.dy]OY6mwAtCJB(HLFHm9\kBֲX͔`]O*%6Jd)Ī!t$kivI) qnZLY5PW4$^?&z[xۤk%;=$X+YX[.wSʐ$?݂MۆwO0&}Ƃ)'M r|+dѐvE*tRC4VDڲֆTGևs4YN(.3D(G(2 jT ܛmvh? n[FNDY`wV:qDE=(}܄ػr[B {4qx0f=Q\tR/m47!?FIpPҕ+Ã;:Ƀ?3aG{ː+Dkc7qNeLUߙ HIZ?qM'+[zXRZ_b1e Kq#F'h{nOy~c8.Hඵw1\Su7NfG> %]+NduUjRM+R*t:un(e\m [ϧy?m>;Q'¯KO #Pݴ+QWpߔ^!NA2$BP*2\'v%W6k/ z6uG/(hyg 鼭A' l$HQtdY,z*'3W TβW"^ r8TgDŽ6yF6};1+*2yV*g;_],Nl۠ &ņ:ƘwB/\U"1ȹb}e-'YI N|_EM.4slE dB_ !mPҺ}J^[hk6^\jVpgOڣ )Tr/EiTJ as0{<@ڧyvSkJ%%H;N# %Z/NY'/@|7μ$"Sa!6o~lb;ZM1 ;3.S=Y [2uLG~!{P2u4-sgϖs=6E)ZVK&КZL߅e F˛V9q .loԇ4^-{N|u"$ rw%o[gA5HT@%3nAZAP'NA0 rf`?Tf(ȳn~chȺ]нթnWVa2k[2c::qجnx6ob"ޑ[(ZTrsSID]QO Z-Vo@Y&O#2z<~J_POnٌ2Nq `. cAzBEc/XsmL(J-;~u, B .*@ac3s2Z$:2gM Q}(ОZFI(u\D2d 4>Yi?rC~"Jxh"A**$hTo'k+Hm00|ZDsFdfa[.OI:l32$smޒ? hv\Paw#+Ln^6[p[ٝI섊i.5y5D Yߋ*"?ߺ}KQy$ ,7m¼ka4&(|?vZ6t 4HǕP];@@n"F ~|k0yrf.AjƎD.[Rִ6,\lֻ6;6Xg_Edp !޲i͐9xr:&Py#41hjv]mե׭ ޽)s{tl7kvNXdյulO_w]* m*Jibd,!$AQ0ēanÍSĄ)D@2zX1UܢiQɯU``uɦ bpM0M| AdobedF]    1!q AQ2"B#$w9aRu&v8H  !1A"aQq2B$4 btu#C789RSsd5Uev ?xx'as#7u7y?)YDz'Fw3|r1ީ'8& )co'(*Fރ 1;ʳ7 ͮfFT'$)&8==y["tii|r[ JoU2Mi17q $"Kmk.# +_nPVN՚k8CAEv%T!j"f)PRH Dv\T}AP=)CcP#Q$.p<©o{6ߚ"2L&텪蕬R8 8P C17eo-]^ ZH 8O|1hKӦ] j/pF:ӞYK Ow8ϡMN5Z)MTI{TJLܟ:ck/?.fdQ)f]g(ΰ.# *D  Q0ٻjq9iն=Nޔg Rf}LrxJg~t&om8GU%x)eTSHltQ@S2TE1L)~Syt(vM1J.1%KI L$~kT;t-lӨ**BfIr# d%Mn5y6֯s2*V`g˟jnRbRnlpN&-!36`8Ӯ]BiЭ|ٕN lj22P滷؍ܪ]p j;HRPW0352Y{!L H/q1U9bG09krV$2-1~+zyxlZ0:[> %}OLH9IP  VRHuSmRKKŤ6.r]6i!W6ĥEkg.ݹeVߗw-Eҙ*M#́#V( vҊ$@Dd=W#67eҿPS2D3aa(WfA~-J{ZEl9_JyK#/LY>g1y)l=KnQBVtVk݁/E%7$) r)!,Y;˼n֠(2. JH3S~-~ݼ 4+KU3.Kii!_\LĠMXa==VO1Lj#$1~Q9?b[y}7K//ǻ|=xy+_˨S_w*;TqE{-BOe&e௤=%5;{욳_޺>=TYǥyxp{Oܟz^^Lqi]➢K6ghg\+%CjZL](Z,)IX$) |0wV]/ CT$p塢~K{Y'AUiu3.]if eVNW&ڙf&%5FMF:4j*z#G7PYVEY͙rnawhp١h ⒤0R#8-qgv#k-zҨH^jOS#ժKIts7ʚìqJzV2S\@t R^* 56@"EJW Yb֌Jq'3 HTkwd\{nY5ܸԮb$J@J̥NY'=2[ aoyຐ媂;R3/vjL)DLFtHUڹ.+oEQ^\) $eK2S#۽f;YAٶ莜񽮥4-S䖡JH7I6$SJqc\܂~*'M+߲kZQV -P%qaլnNdxRn16Y@L0#+[mH-JK򦹔R›hDD|8tjnk7[^`ޙ@lHd6yRPQ!R&@u5?kc{,#:d, ؉L؂zTPFAtivI`}ϣ$'Qid\T{M'YBGLte~#|ET]Օ <*+ BPv7>)RJS9J_h|b5Ld6 Bq<ڶ5Zi{ _+F։i$JDʔ5(F<4}*pb\g48LO݋߾ݰ;%pTA@m^46v3.QWa^G+7S֟3ػǽo7=teF=~h:r}l> xO1rOoDγr?͓&^9/(-h܌Ƭ5U*DxSӤZ:WD&D+km%bFg$t:w"=Jt BT,`'2g/;α6u[&+[J](u?D'wj;$D7nd&u2\μ(RШJvtb}>UӷF_QI)L9q_;2)hZSR+LFb+p:I*s3]rfD類%n)[@3:xUJ:9\U4,7H:uC \f&Ækuv vsKluU2_MrGd~yڜ<C2πܽճ?~RUx]$=漱xebxnv_q:-g#:}Ӑs C#s{dZ®cQaCR9ennò\{niqQm!JRuiP O9H|yjlmjT*H]iY\ P"7mm3JRD9ox~޻yjiJR 7GI'*=mTL/zhp%OK D"[v-ѹRSm*[IrIP3tZ*(z{) P @1#v n*tmڒ1P5P16o-م5x!+sKOOʙ39c}ڍULSmF =B2j@tJ%:-ѽMt7R¦> qxc>S=oU/ifltp<Z`|YFHD%q~J] @00:}g=wSŮo/᧎YO1||KiN`ur_t0l$g&X&/@?YIRr9DBg e)c,Vg 63 zO]3+7y;: (_^W=rtέUCec D@vϣh[[I$fI$̒cMy^7\N۽Ҟ\OTS-A! %% (7G ׈`G! 8tL(CP|0#炂~?f8/"i0rk#C׆Czx('as#youker-assistant/src/res/manufacturer/WDC.jpg0000664000175000017500000001107013260315532020217 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] 1 !qAQ2B"$% #58x1!AQa"Bq24uT67 ? *و*B@3݂h& ى4gՄ 9ӧS$?7`0T fLNie ʝďJ.v y,Z 3b  ` :brM a'HtĔIM +=Ĉ*Sr"`@re;#R˿݃5^K,g, $=&iνH}=XIR:z1%H&=2EfS0o#t.>6֚rWp xj9&}'b-3ܲK]d ֠(NL4`4:{PBDe?AK-k俵G}CwW3?8|88OCeصcѦbdlG7֭|).k$[eaMv;qdTd2]RdYrIrdV[;Ml: .ˬ+GhiLv:ůs[&n5";|=LܮHuM+2CDY.\DV[Z9\HD·GeoF-gN)g7L'iXuX^3@l"!C?ԕ:ϥSSM]Z+.vGsSI.v]NZ+eQ)奔 \ŗ;AMxWT:I ;8K6*T $YI dvtP6ּ8.֝]ij+xڸKS<j@RL돁lwxlփs\4$zb]=<@ޘiKe&[Cp~\r.}&<:UtSˍ-& LSXJ+.#\<[Qzo~Viֳ)qa0w"S1-:~@UYG~}Gsi }Xv鄲K I'hAP72Qnmr)@z!Z=cNʤC 5ԽZjSN͘\wETx^wr\ngJm2\,Ǎ[4:|^J3 L-(&mFRAFse~J( IS 4b[؁B\$xR&k5<9`׹+e-WxDt7U !t&5(d4 sziFG&'lL擫7[8S?{K7 FМքEI+)AMJ.EGHCF-6 OR+B]kv$˺yCo~yM0c^)Fs-U4IJ`fCZZ!PT d|i{˦k-rQhR0yO߯'BI7Q`ˋLUJDTX]X`: eŵW=?ⷁ$g/ kNϭ~//9ul-pmZ&kfmJ-g[ZjDR)h4 t*~m6{_E5MHkyno帒1cٴ/ ΐm5O& J'p-3쿜qÎniT3 欃8edTtg2_UiqrT*nL6uIKuxK7`p3")k-%q* 1J^rhRdV?OՎK޲[ҦS8#q\uK5O!6PqS-2zZ22M#$/*W"HI$CLX5I{W蟑>RYo;EQo۱NnZΞfܯ[uE?}}t̼RQuSoүګ*'|^aw.˟g0hbg [N ^&&}J8ZqmD"'QL|4i]i}YYk\ ^l?\;xߎ?*u/+=L&@x?C HūD[pѩe5 LA=eG$eI;St(K9(kųϹ3c|;'Zn:!ȾMO+S}+k;2\ZqiYb"dW#0A"ʾSQJpd *]Dzy0]C?œe2[م};t݉o}4ǘQF D6Fɱ@:KTCJ^HL Ӣ*#NEk{='u{~^[.r&䣀~Vmhl$F<0xB0n@9SءS%A3W~ATbA4g^NI>$Ν=I!p羘C4bsNX$S,WTv$xTwfbeUUgM ׳iϧ ?j@sOF$H~*o`\9$AP"Ӗ Õ;)݉*>]Xc9`pgF! 4Hu@3Oڐщ)*W{T3H'4E2pNwbGOjyouker-assistant/src/res/manufacturer/KINGFAST.jpg0000664000175000017500000000776013260315532021023 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1!QqA2B"$ C#4%1!AQa"Bq2Rbr#$DE ?&.8_uATf *$ TA5I? OeIO$ƒ%JטT*NiIW.#RFj-& 5TFa M uNI^R tTI/(2T]yH@TdP%rR ; 0kab|[l)vv8zRI`q$8ԛڶbl"lFn%\ƱYHM77l:-Iz+UC <|k&UX/KX5ZB=с841lf}-_룽6/oq0.kKE10𤪕U8?\ZKΊV+8/urtj+kw/7&'14VLkZѦ ^᷄j@]{SKw}t˓(Oz/&MhvAW]z׿ի% cketZ:Q(e^ͷǙ)T8ү[^p5NIû ]aV͡߃ݷHA4=> F0yd7lb.72O#9BWRV:˙Ȍ[kɒK `20+/l"GpRKR*bq=  q۹B-ַXi VEM/ u#ix2_&jͻ$kmr"1,C'SV9+&9X f[J@_P,VՉK>#,`{#VbՔpbKh#Q.̑܁S`|o2T|KUK^d6g ^pwz$Q-sm|v6 8w+fT2hAqRFQw`W7ڇ(EvtfHI1Nw%fjR?F&oS$s}~C P5P&%?U旒y;3ī1JF( 8*{|}'mZyft k HUL`| C{{^iq1~wvn^ &-p>_Pu+&=us;IL*i{HGRV+[poT[?(;~ij[2$bpLqӸohM}~mĵs]Z! 8@#clja zEPܼtQo]9~n>hҥ#qkVᓉi-q K>/3ۣ2!gV L$e,D O* h%O Wƿ~;olE[YC?Ζ][(kOGTb.1MIm?*/UMnW];+0.btJn!5UYPd ٽbfCuv9Kp a\\Hn G[\eidvpgseׯ@@+SvJ Wr dpǨ[^t6^}m9Fm'0 s~cEel:G r&)yf6ޑ\JmDr@) @] q!и=Zg+ʧr7)dq/Mo,H_37oWT_0^^@*q\3Ҷ;8;V_A[V ;#iQ9R 0i@ B#LXteUq RF .%BlBDo=A'wYe \˅Ǩ?w$N)w }r˩(5zkHzu^[W亿v?1YElsdTNiJx -\~ϭ7:)g7,Z}e8c-}_E=ٶ~=xJ%~unN9eUKfmw~]Zmv_]Mw_]?ٻoʫKժ3gS4POv;mߣU4Qm[,sDv}a;"9vZ>eO>Kꮦ8\@voorr<L/#|qnR+E76,s*C\Y;=C t_V1.5,w-sqT( (N][Z4155goYGqa GǧNQ}O?3}oc {l!ͮ67~ޗ1a5dz_ѭt 'ϧwլ3Ov~O}[@~ߴs(u41v. luMDo=A'wYe \˅Ǩ?w$N)w }r˩(5zkHzu^[W亿v?1YElsdTNiJx -\~ϭ7:)g7,Z}e8c-}_E=ٶ~=xJ%~unN9eUKfmw~]Zmv_]Mw_]?ٻoʫKժ3gS4POv;mߣU4Qm[,sDv}a;"9vZ>eO>Kꮦ8\@voorr<L/#|qnR+E76,s*C\Y;=C t_V1.5,w-sqT( (N][Z4155goYGqa GǧNQ}O?3}oc {l!ͮ67~ޗ1a5dz_ѭt 'ϧwլ3Ov~O}[@~ߴs(u41v. luMD 1 93 70 1 72/1 72/1 2 2012-04-16T09:35:02+08:00 2012-04-16T09:35:02+08:00 2012-04-16T09:35:02+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:65807ff1-8763-11e1-93bc-952fd8ae208c image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثW'NC&I?ӏZw'N em;tmmk'b1=@!,[w 0𭰻_̳]IgvԹ)q:_%8K/O8ih-,+)g[K9-[pZ~ q/?&Z/7,H.? GF+%NJoӉyG˾fP~!ŋI[rK%\%wz<6V7W*8"DNNiN*@ew$A˩F"PUs4bk$zfCs!d}Rz'厓zm_ZO\Ge~S]WlQomoΐk-m4inc.Z[CrÜNoַcaK-ﴉX$v1Ky+3Gaߒ-uI'o%Y4.B|gmH.Xc8'yeaYo4rq܅^#r>xD;LOV("qF#v (/yc"Mev(v*UثWoZ qWSqW5d8l<AXx-?o5cny?m?2O -tXam#dV>[wwH|'Տ˿ú??|0ysH?)$YwsGFI5` Ú7?xGs]qWq8U}*>ws]qWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/MARVELL.jpg0000664000175000017500000004417613260315532020721 0ustar fengfengJFIFHH IExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:04:16 09:36:14]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?8_?R+j[RSG 'R+j[RSG 'R+XX.gct~zqSIEhQwVhp ))~IE}8$4y C%='/]KO.Ȯ]cȿn'$>1;RSj[RR=?|~UWw/Y'qcˏEy~~OPvNK=)lە[z5d6?t]ZJ[N7N w&>W[nnN\ O$[ۙuovX8T,>*$[淽O?Z,?r uѩ)ﶪ=cbCy*}']ǡmLyUݓl=of1%9}Keu,ed\Zb6=7l `t}][j>lNG`6f?If I-6}]tk-65m"CD5^Fs^@ -X]OH`Z7;ԣH[\ůI\NE6<[.%6=F]I.V&9s i2IM|N1ߓ| X:ie $Ab_vqC,w k&w[4oPc U[p3:}nKOseog>g;g}I%?zyg$Wd9Wd fP<7{a^ï2U{lŧt*]Qv̈́}N̏bC'#Kmc̻1׶v{W~Ϊk Ѥsȸ3+#*}L/?亇Of{+kuFc#OΔ+'-Ĉ^㑍] ixc/PET[s3@|%E K='_Uzgfc2,hFcfnG=r٭oy캆gتe7ﱕDo;w+Q*C ^W{^Ȑ[yKiw8֋OD1;RSj[RR=?|~UWw/Y'qcˏEy~~OPvNK=)lە[z5d6?t]ZJ[N7N w&>W[nnN\ O$[ۙuovX8T,>*$[淽O?Z,?r uѩ)ﶪ=cbCy*}']ǡmLyUݓl=of1%9}Keu,ed\Zb6=7l `t}][j>lNG`6f?If I-6}]tk-65m"CD5^Fs^@ -X]OH`Z7;ԣH[\ůI\NE6<[.%6=F]I.V&9s i2IM|N1ߓ| X:ie $Ab_vqC,w k&w[4oPc U[p3:}nKOseog>g;g}I%?zyg$Wd9Wd fP<7{a^ï2U{lŧt*]Qv̈́}N̏bC'#Kmc̻1׶v{W~Ϊk Ѥsȸ3+#*}L/?亇Of{+kuFc#OΔ+'-Ĉ^㑍] ixc/PET[s3@|%E K='_Uzgfc2,hFcfnG=r٭oy캆gتe7ﱕDo;w+Q*C ^W{^Ȑ[yKiw8֋OD 1 93 70 1 72/1 72/1 2 2012-04-16T09:36:14+08:00 2012-04-16T09:36:14+08:00 2012-04-16T09:36:14+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:6307520c-8764-11e1-93bc-952fd8ae208c image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?FGqWohwFGqWohwFGqWohwFGqWohwFGqWohwFGqWoh1Wzxk?3ūIZEvU> uRqwh4[R. AdobedF]  1 qAQ2B!"#4% 1A!BQaq ?Ǔm}#2&MǻGEM| o.~\ [;-`@me˰w"?Ť].M NPoZQ{tQ߷P vhI E˿0P%P\pxh)kl]ZMp2&MǻGEM| o.~\ [;-`@me˰w"?Ť]<1֓ z\-& vF-)$&wZLd}끪8=^<<EG{WkvUoÝw ttcG.tC }q"FF* Jm2UpX~]c%ҋ26NKkVDճҩӡr[۪Z$iL8rZ3GU &ZA]÷EBK? g.]- yDקSE%W2X7Adh;qԳddEڷ`d2*hy!X*Ujz&=_)PHpL<C^mmI~g-D}T.U(E:sm:tSZuތ[OG\ ' <?\?G՚w7(t,T$5eJcXœEIY>T yVqX">c6;2#)|*Ɯʛ`T߼W}ݾs]) rGӣ oI=;1Rjiv'CgnoI#?U43%䫑Y~=!C ncE둩SR{Se;CNNtMG $XY6yHK-ӧ;gq;êFWUJXӻ-Z1ݺ8z#e:d3=D-/f0d Ƃ̯%F֊q4=QJ#bD5"L6p5-%GnEQ- U}17Xղ]G|coU>gE%*Ʒ@H(JnB~nT}WyZr2ǩW#|J?I"TX;T=,W> /yU2|A܆)B[Կ6[%"6)vG,[&.pD$O_OJX.>ۨ]dc4.ھ]+| U<-QU{TR2& 6fןWebmずzwGZ.n9=A] nR4Ƒ&xIR*. SS-^`s=`~ ߙd|S,lt99Abg<3zd4!H@FÁxpI%dۦf\!o1q>Ace) o]T=ȫC";(W *#|RUxb+ي)% oXۭ$7$rP#IE#dsAeW!B2j '±7y!=80K0fqۇXg4.#cDc(VJG+pP̥q0Zʭe^韀y; :q́ oSqn:0Ec:z9x/gJaݍ5VZ /o(QFe!fF ꦵG.)ią+7ZcMŲ6lV&"U G5N\̹R@N"J+!|* ܝ_ӻ. &[y#c`RAd ]ughl\ڤ$qVʔJ MLS"u wb?Ť].M NPoZQ{tQ߷P vhI E˿0P%P\pxh)kl]ZMp2&MǻGEM| o.~\ [;-`@me˰w"?Ť].M NPoZQ{tQ߷P vhI E˿0P%P\pxh)kl]youker-assistant/src/res/manufacturer/RAZER.jpg0000664000175000017500000001566613260315532020504 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1Q AaqB9S$hY"4xRbr#3cD&WH)  !1A$Qaq"24TғDBRr#3b5ႢSct%& ?>IDqL;dsXM??8vh'+K7yq#nw~j g[xǯn|'z|}с13FSuμAe N䆢Ȋ3 TUKքݶ^@ۆVe Y5YHD3ޖ)x#*eZ@l$|xUs.ʶ:}Q|ؖPt\`C`ټO@>nGڑzT˭HCG@s6X&RX;-.!iN)ܧ/$YɤV)KV@ YVn`-ۑ5*R5-D@uD"f}hZ||غ:v_=%p6I'c:co`&f$ p lbJ(ѧwd>Gݽ;IpT]%AvoGTeB%)A[ZnLm(d;n[JVىm(]ЭUDyE)U.a路'c:co`'|VLO϶0ӡ{ ,81OI ꡶Ư ZZIGKlrPKoKՃm{F meN82đ,=(yGEO=Qjg7d"I8DA܈hl2Mrd:+v!inu B\.yb SѤU7NR jzEʉ^HFndDag[:5ʧYnmBKfrv'lrP2" P- hEhE~SIVxl&l>II"rL]"/PGSR8:v1]s.:i4?PZKwh~O:YQ5׏6o'g+;(gYoS#HuGhЖZJ Q& Գ+aUV6^3p]6rmejB5'pum[3k LRCˉbZ)WM}? 3!&v͚(-rcR4g5bȉ(7rΗ\LN*hXCܘ ՚1ȿt* *M*jZ5ʦrfLܐ b3Yc V\j -Z+j̍+re9,ijRtI.K- Klj#O4pG/2C!QEԠAU,WCx&VD- ڹJesaK9,GDȺN JYWsIv4Z6)c^ZbXa;o"(@SNNs|7=P[Miu@%(t N=Gj\&'jl!E@bzeSTRgvԫSBn5xڨR?&36#6@zaĞns/޷@bGKԃU'cnm:1/lGٓ iFT0_ԊSrWmUv Wl|XS%s0db3PZ>A̠l$PQ-}h͎& @?}wwI$pyU\dXL*V aV䝵uJCbؖIpBC%*zy\)-fm͚CnM~Q54&%YͻY',LAKo8)o-2+~5_Yy5cX*ow-T$sTvJ~ʐ  '4SXAk*!RWV}5$3!,[iyv;Hi(#j "j_q|J>_[K*V6 sLzvطjCc*Rp#ǿU+M_7nÊ1*Bժ;YIJUܾrlaFR,0PA=ܤj-g|UlKFDHbUSQ3Y)fIt&ȶV4Ƹ9Rm"Y6ʫI[r,LPݤ*⎤mNTӑaO[FY,r8ll+)'6%2e$.46Fz=fј;EbIߩ뤌BU@')H< cּ+6!2=sRtFP\HɖlI32L/5$[ف?#Aq>ohѽh#1@;Md;fW+.X}MֈyLBcہϳ辅v+.҂^* WfKҭ[Y1P;Cá?=iO<"aT%Xf~jRp臛 #enp@;] kAjGNw<TvVevGC~jTd*o633D @@Np+-)=R+ZMOg>EHj6۬mG1eǝ0xtqG(Eу%K x܈ijMjLkxپE+7jI9וYg)|,9J=jx~'U|zծRu7Ix5ej6Zv7Rյĉ"o)⅛y4߮ioTg3h iIFFQM[-gl8ha 9L ;Vo6-Wj$Xvme"c23n˃N#њs0ss3hqmf/w'Cz~||X|-{@9ppuotQ%vRPy5xj_܏Xz(KxxL>hu#1aOMĕ 䚚dD 4o|2 -zҬ}nқI <Nrÿ=δ~bv'1˻QN7!n_;,[F sm`$mbDGv,<%tyibJm[+ij+ڱOVjiv)uT_PP RS3?T.脸ЅӲ)(Nq4שׂbo+şWV}VK`miv~_}seXN}e9b_8}GG+<%X+ؓo?O^~W {)a pou~>k}`=_wp{e 5؊oW1!:?SW ?8p{dݟG/;jWh=O1A?j}Gd 2^~ق:W؋0> $&'TFȭFȚ[NJMdv[_^hS ,5bcH򌕪ZJd/aƞfp|4ohyouker-assistant/src/res/manufacturer/AOC.jpg0000664000175000017500000000756713260315532020224 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    !1טAQ"2IaqB#$DT%34tHYRrCSd5՗Xh!1Aaq"BQ23C ?|s&fhbM%F$Z3F$D/1.vv, ڃywYZgR!މDAX=ʌ^{܋DpN{i_'Xy?0@k:Dz76Ӏqv^W#箞Kӿ퓧KT^(Ib?:{#x;0Εm{ZB3yyG<@B %m<.M k#iaнg]HG@]7]V ejhvz3B'|KlQk͒eE*k`p*3LIi=@B,GBFD'ڴ4n}o6gP߶mn4q5ĵ)LXHV(Ԙxۅ;LJ6hI;Im4=mrk𘲓g)dD7”+D\qcWmu77HK4Il_Qwg\*`ڨ-‰MIr[[IIT(TIwj"2[3U]4*:0nkQ˺űp5{aX6s+H+tN_JJuY|Q*j0X3Gƻ4KO%ft\oh<ԗr弈ތH\ h.&_;T% tYr 42ҖiQ%Է6y? 9ld:}ͩ'V[ ɮLӿ xRQ JĪtxf?{m/xu$L8FzkX|Z%2T;DzOWT+Т{a*y {\NJOL 3c|sce4S>J8 v=.e1j{tif/Sv<=[*%#؟4YJ̇VYmOm2c3̼yzn9ϢkK*v%Z'PҞWYȜ}Μ'6y`}wq[vGCth)o8I* t>Ls@~ݷrsOreܿ٠W&z.KpEb%ѨkJ[VJ-!^7'U94VY5@o]"tձCVY#")i *II iZc8cs:ZZd[y<ѐJްMj„^hCk!tUT8B\{J9B5Ւi7g]=Ǖl-#Lٖ#E΂pO'Igiͽ tօoFMMgeu#0&1y„]ZYe8NŪI\iHI%oi";vKC\VINHXdsr2bNWgZg:cr @)7ףĸS/FY#*%'MoZj,j8ѲfKEaJ|ְa:mTWQԢ8$9xLJ8J!!θݿM/MuZL;aYٗ ʗM9m6RNVPp+4Rg2ULM c6^/Vrw` 5Ow{lj~FKv$: @ J?7rJ?7@ v?ۓwM>>gy 6N 7{6<b8~N8D|{]Ɯߧ?VaӅj;-19:trZ V@\[Sr/n@irulN͂L} Ni:D2߰@iթ;HnU:? ҝӬ, um1 |N ;D8CBwNз$ޏ@y74Co,1&ѝ 1&gr!~щwóef_;F˿`#:9 <^A=CS_youker-assistant/src/res/manufacturer/SUPERGRAPHIC.jpg0000664000175000017500000001240013260315532021474 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !AqQ2B$4"#3D b%  1!AQaqB$"D52TdR34%U ?y8k\qG'PU8h$>NI OLz{5%<%dzR$f Ni`8h@9x>TzQi8k9`rqQLVRM0N#`}>M$xRS2_ JǬ5"Ji枙& #{HgњU' VtKӑ|\G,d U F9~R1J&+0tklJQ]A8{چ'wXj [yЫ Fo<=m~aA ro+>J :hTkL`*YmlvZ= zص rcC tgp}sѧ]jיzzOybJ6ljv2`&[Xd=LFIc#SB8vWz5oo3hMz=pɲx?[{{;!wvvSmbnm%9QֹD|3Nz{42L_Ar H`59IHjGR'4fQO7骎%En*.V$%,&E,-Ep]ʙccZE_~^wZ]l{ަn: .hxT`,{žZ9 me Qf՘cim-2la9B=Dbbu4R[eCq7܈USYIEY1L%Ӊ|Yꩌ:i5sw9cwM+м]ovŁq4d\Uo-M0rBjoظ#i|2 r*[P.xd6jF;^w#tN0ցjsx7;A}!`&7d=@P`kj*D;2Goy[<`^zښd>H\Wxm!Z4 v-,JPFC"x/iw5>eٱ=M*G*9Jdՙ#|he8.k*I$꣰c($+晸WwB0t 3)$~s U $N#VҬ~+gZ)dFHJډ#*)UWBuV:Q(W}k?G/˽dY!v'0ON9Bȗ3M%,KDֲ̙﷯X;v,B;K1K"0^ٟìLJC+_\Ƹec6TIS%N1kTڂu  >J>z-s>[H/./uR1l׵gn=u \4tQAkW*;]0% 9|_~09}xH޽6ĽHQ12{gY?+nM]s 5W4XU2Iq4Gq7Q/UYeW(Z PVH@!8g% kZ1`cY!iɭNǸŁ'ݲ&5) z*A'0OeW"?5!9rK=&jk4t!8Ǖǣziaӧ74fA4#G<"9n4x w7V $tj(/#M];u3&_O%@?Jtկ5`\c&<_􆮾#0T*'5zKnyn X+V3yUU4zH(l0]aZZy_;旛+UuU@y/ș+7W2-2I"Fۍ+~V8[^l:u )eY"`^D}|z`%hg8%r[ ɍLk|w-Zs3"5ݞ][\u膝 }\Zg>Z:u|mږH4٥^@I앱 t5Klm6+ל&JD#@cQsVVS) iU-#=+ ʤbǣK$X I@9q)LG^k`\{9|앶/R^Yj x5έܾ$+_d+P=}b, R^ &SQڊmbYw,ݧdKViqĖ12+ZfDbciGS !1l)[Cga|fC֚'4fEQFa0N=Z5I48Siq4SIO$~u4*G/ԉ*Szd$^z"}FjZNX~mATfգTL9&'OI?u0^!ԔL_Ar H`59IHjGR'4fyouker-assistant/src/res/manufacturer/ASZ.jpg0000664000175000017500000001407013260315532020242 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1!A q"Qa2Bbs$ #4T3CSt5U !1AQaq"2Br#3$ Rb4dDTt% ?Yx(. `FPAxCAAҘn0A8~PA8{~z^0xSAKc.NoK Bam՗j,. `FQRO 鯢X ǡԯP(H Pi(4^Z&ͶQ4LYUPtmaջƝG2>ww ; nYP:ǗG(3:3Wx"GdG`o0M=H5@)(X,} tGe%]q3>8)/F~Y䫱V܇~?##&Za"ѕ1T3#o2ϘFNv]sY[~GAqd?GR;OLr]YÑ87;ײ,\sҜ؏ p{3ĵoE~lNPrRm3j/G4[xem+,9 1˻0Hi~zȌD8\ߎ )B0!/Y\4 C=f}g3Nm}$tihq g5ǜVqp9Pt`2DiI *;Z30D]mA*kK{>ge> z]֊R5Җ@!ðdG)ɱO4W3wүP]f?rVgH Eb1kg[c"R݇ʵG۝-ewd%ۆbqV=E{pQ5u?Vpby@&6=7tڰu$=P͒r9Ğhe)IOA]ZLS]r;A[ CsJIgzc-w:S+ [^E;2ϛ^S3I8HOOꦮ06 w/%uh b8 Y6Ґ8/YW4KuqF`MEk%G#0?F~Oiy{g^*D<}y^WM6l|'5lS6HD>^r9g)3- dT[UEBٯKOP@/ x6iI=mhAҺDFٙQ*ٳF--۔/ NZ7Sݠ>qdW[:5ԭ E zp'L\{IXi2o+RQΐzsrcɎJa deIqk6-Ҥk'4Hp!rq|J}жj5{b(oVC~zg*¬{u5҉ǘЙUY@U31E75~6'IEs!XpL#K-ϻho.R6XOdKfjj)'B3eɅg*ff\|??5R& J"cpip0u/yڬj|F J)d'rm`R 5$ጾ1 YND`LgX #)T$Q` BAP/0yɩ3 ۃULo}KY}3Om}'`wwQSRLII LI޻=_?/u2RU—!%fI}jG 3rj^O]T** 'W7/iꭝY*JA:L%(V 2!(fh/ԟ$=W)d Cro PBӨu0ecn-qYk;7Ƈ|V&\ H||tO|ihCs>UTuy5&Sņt5цqUCwntdޛ>nHd>ֳ@_t6h ԙd6MyC(9M TybHx8ӎz/MڤSoPh١: BRs 2 3Li$d5͕LSU(MMr5xmSFːJR9q\:GMĞmO"zݽ8(o9԰nEMVj|zg\_hhEЋٕ,Cw÷l~ߟ.^I`,9br":%ӳ?+&ٍt;Jv蟋 ە4ARY$ L&w`pk@ڜA6с pr2ʥwfM?W! b{~R6ƪEn5̥ %"}iQ}LSWP&}2(R%<7n_l^m녇kЁ ômp;_9־_S-\rIT&  XB?MT|H2Vͪy}x{~?48ģ` !HBgo P>_FHME>eLjQfIxƿrwӬu2x%#Bxd%_\2+Ǝ^4|o2~ȭz |hu~(mknX[Ǜ-jIO6dHt^$˘ŵhўUa9h3|?nheEKafֱtIz$_j< ~%$1-ͩ@[r^V&`+WSˌ_m6NŔ:>Px1vZUS;e &10+oo-BH c<@L8J|Ot5{܎+ WڳR|JۄKؽ!pM#2gs=׷R s#O"%Iv}koH?ܖI5 ʬqʜр>^ %q8Y jђHO;O N9cm(Fd ?4g!0;og{\4k)- vp'7}m1& PHP! 0n(}=;fq´TG] >yu& 2"㝦eZ!y<ɔoͱpLd!f {;C^kk8Rc$kU\Y#u9# *_,{~s1>Wg-<;~Z3R0RUZ1pv7QVvU.ZmU+VGO. ; cԦrzs9Cc(T_::t@Ķ)O"|~-&˩ʳo2k]&t@jZJE\t Ȍ+mZt0GՂRMp ?A(_/wnT7JmT\2E ~C9?9D2UEr?jəc)Lci&ɣVplA+bQwٛR#0 }A۴vt`ըm4B@ Jr9vbDXsSPFd]8YgUn֗ lku-<UR!?z #У5PZ'#6{q?`'>0Hpb;}]kjk7/J6XX,)+"ݣWbg%<`y*s4^$ǐQi>*yPplu4Q3`S9s2A0lA s-a|j$ԇA9࣢1'i*{>)`N$U,".4GvpE(6$ihx o#I `rL<GоGɌjv:_oR,Q;wcv;׺R>vڲZAS(| @-M?q dEJ*ڢ?yTP n}bR閳>F$wvDzbDճ%f'Em1a9g~DanY)gh0;clWWS\A+=52WJ'P05H$@PࢼZP(;53a'ɌJ*Wt4N6a2&͂Uأp=C5e'.&( <@s3sJPJp t.90R Frg1v陆Lr%c1#nP) wÅMXX,1mPcI:؉gqFwOrU⫆2sEe *yrȀ7hhHV:\#|JznQe5l]jŚH6@>۸Cs" 1p8"vwaY ~swM h kBK֢[NR3ufG V/*W1޳PŐSc)| n*v_9+ )Lc"<˗,{;??[S}b%p?Q Y2Ǟ"~0tYA @^,kHtgtUH(H)K %6ҭ|rv˔֏|EA7gˤ PG^ߠ}$=Q9t 8>a>h[F5e1 8iD^PFP@w|4Nߪ0~Nߞ0Ax~`F s8>a>h[Fyouker-assistant/src/res/manufacturer/E-MU.jpg0000664000175000017500000000774713260315532020325 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !Aq2B Q"#a$Df 1!AQBa"qR2#s$45 ?&˓_ڃMyVEMGF&BDPQeI}"טQR@Q@iXEˠyEwZxWx2^UDQQ PQ<׌cƠ}p+c{t8\kX /RUBv6@qOs chN ROKw,SZzJa+E۫6[pQ%5A23Saݘ\403*B5|OgVjp%T:i:c30ct},Z-hDe_%q =6ԩo˦uEnErA cZHTKmj}&fTHrIT6:;˚&/ fA300H)G@5¿\gCsYzo&tT#ҧVCy/6F,Z.+rO| 1\xOMnĐ.-w,w?Jdkvne~n/\_ӷhQW]k=[vl,mtXf*\=w*VOL `XaV"A: |%:пUb}RQPo8^zc^>Qk_aU\NRDzmzWcMF͒Rw.wfc^:I)Eqq[#1@+U?Yp?׵sS'zv ۜG8OːkwӖp ash9O?adT!|#lֻͥƓn{6qz;Lˁȯ&_IM'KK'|^=<)@{Q3|ڿ4w*ۢ+nvq (ǓP*I6}o1E"b9cl;v=6I`c|7쥼eM’RYjT(UjF/?`#IwT-TKAF;Mlux@R#+ _d6mBCP]}@]ln,f,ϻX:vts^0n 늱di=Ƀ2Wn<90%! [{nOoۡ]n9VhkI(3OZe h c,s3Cu""9zʤEw5/+`s=@D)sqK<8 $dFyz-'}v7.hZ5FWm۳aQniږb yK*\IՉŦdo"gnm=Q5ZrĕV 贾$>J uM#q9+Y߰G& bMrʋDXܲ5R;>$nX%IUrt@걅iPO|Ȕ "{`(Rl6c+cݾr#3r^e%Z앍KV r9fˮTfJQJ\M2b훲mdǘ.;܀ܜu/*t=*{ AdobedF]    1 !$4AQq "2B%5UWaR#DE(XTdteu&Vv'7H !1AQTaq4"B$D5U6VRd2#t%E ?>K"-%!91%+LbKG @!-րԅ0h  -! S*C H5f );څ/`O{܉HmdW b1%؅Ė@ KhnB4eAڈs)!ȂB0'D6^_X- ~z(Pv7b;Бr#Q_ /WK-֟=r={ճ<_|H;ہ[;3lNۭZ!$6et1B鳧UKN*ֶP I"7<$UҶY!VәLpҧOcEYuk( TZ.&M*d $mn䙥 D8N&*ފ3nc2sTL=m+*&Uẉvy3UٴB0Ɇ."bBsAO.Pje8yM&:\}qE@ ˭﷭﯀UURD7M&`k)dCDpk:6D)7TL-FZ=aF\ Gw9AT*(*E8kn {ӕf7!ia = %d&[SsU 2_4Ʋ鄉//&3r߀=n AIo=(2խXu#c7~KwDf;5C^J6od)ImPla4|BVq՚].7=^z*ZӴ٥e[@gzIS@oC }^$,%d:;ۃ%euM56ea0<+?*ZX s_nuSih<^'16ōOUm":K|/7RNEd :cI$6 v{^ۛnKʕ(XLZ:!ަ7żijLsSmSb_zbJ{%,k+w}dw7Si 5T$Φ!8nSF5-C ᅝEkskQanc(}O" ׃_1$`!lS0iۍN]MʘW6KLIK+K 6x0ց=wS٦t)w=C7^ w 5$Lo)e5E0glJH[;pчnbf fs+3!Xy8JSsXESt`˶ @8i5,:V8۬W`H,jRHgc]E)"3/53sVᴦӬ϶~,{r.zr4,_T*Zf?3]I7F|4hh:5!sDJd+$7L FNH^h!xJylxcb C_)^* Hl\]ꚲؽAM5MdtB{d_UqոrVI )M#H=g[K;61sZȟf I}t徬T* u%yΪ[]"LA}e;4qTzzG AdobedF]   1 !Q$՗Aq4%F 2BDVE&63TdtU'Gw1Aa!QB ?FhtFbZ3C+)3LQ"LS]̮iBlf,jbQWha/hOCVKSx1F~Hee1Fy#:)3qD_s˻?:\HMŚLJ3c,=93 y~Hj׳Էͮ, Xx>}ü-{uWKcӖv ꮘOet徍,&*b'6TCҖk~a˖ō)9op%Y}5-2[g2! (q :&3D ̀d`.Oʾ$7i:A#aaQA*r>d0R fpO`o@Q׍]״'j[2X8 \ ^LeV^7AF5mƯ-*D ٱX5̟f0qM=HM| R]\f0+F5P\Y 5JX=RVYe\e)ŭ?)1_¢ںn&I\"]-6mɽVܰP~j܍ Ø#מVi]p#$UMM017V4LsUdT9sYJCM[|Q[6eAO讦`=a] }qwMU@tE24IX2e'R"HE] KwգO)YicVKGթ@ߡԧƮȅ"̦jA<_0x׮nZ^ĻX{Bӣwr,~gQOyT9ۻsyn6XL,`\(N3`2eKSAEn7M\u#.N&W]NpNo`;mpwܾS5Rtt-q^:՛c%ygXiK㡤rxe!S┸)Spֺo?U1 Q8#h@aTyV{Pa"{g<{r*Tֲ8 5KM䆇?u%V cGr\'A>>MC ~B!3M z/ <ހm۹ ZsO* Fku&&0`Ί=6/T?b;ؖO^j}K^O概3oT|b ڌ`aOۂldRgi8'8NTH{C4>T1`QhAlCaAy,`~a)wEҌA^PlZ],Bפ%b=NLF00{snbaSmBȤ*fRM`^PoL kq֯jH-.|ibtP 853j*~ w^[ G!)tFjQI80dØ'~mB/zl֨彶gPMz$dSkAJ\(9dg0ؾQn&ɢQB&>'m- Sp`4ͽ6ZqR3 3+tGSai~vjndyrOߟhNvn3Î?v[ OٻrsɵS֚+Oӌw^lJv.8ҽW-bݳ9OYduʕ蔾cuj%׎&TAeԜmuNSݥ?kMV3ev]k!;#Xd_MݡAE#)_ VS 9r$c )*Fܙv:o1Z-ǡ 3GKSx1F~Hee1Fy#:)3qD_s˻?:\HMŚLJ3c,=93 y~Hj׳њ;=Qjo( (?gE1F~(1Nyww2K CӟQQFu\lbYE4Fcա>/ Zyouker-assistant/src/res/manufacturer/WINBOND.jpg0000664000175000017500000000737713260315532020721 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1AQq2!B$# 3%1A!QaBq2"#$4DRr5' ?$d\R8OtG` 9+H$tE+R 0$`g շE utIS^喒Q 'q ZA&=PrVIWa˚ WI|!%rxA$3H9n (  #ڒӿ4-$9`rOH =Lz H,×4$tCJ0HfsVQ+AG%O&i{ZIFr*d*+zukרZThRZSS(C~)Q`wT=h>lL9D4Wt#ս YAEt)*Yu0- 0Ե n6@BiX/z=p;Crҳ;4.X 9I#\4W."V'ˢ37W;95mzii5r|Qm0E.i߭(4jqX yiTRƫ^Bsm՚h459q]V>nשtm}C@olߗ4_0orrxA$3H9n ( n ?z'qkԸOOۉ?n5Yv'dmǖ^'r[4vWqwet=k|XO+Bh(4=ᦝR4[ޠr(֞4R_t].e߫ HEpPYUVQ; a݄K6U2 mm>ZZrR] Wvܖ[41ø4FvpMڀXѨb4ƌ \\h*8-2̹e=og,\G pd‡*\ ,3dު)mhiه+;DK;&j3WO5wqT\øon­ƳdlSopX;ix+<Wo7;65a[bGv @MRZ5FxsՖ Bg7qA^ն5"k[pǼm?QE3axv"{n۳OY\kkŸ_ ܞGy;[lS'{EwKPb RZ9%ƅ#UuN~N͍/X+0r3ŊkʬN>㦤iworKO0ll ׫仆ۄ)85?Wo/3~ho7Ӭ[ %<;bFv,f布ƹslu5NG=Nq.vCEh/'>Qp|U=nM|8j1^]J9sA*I/7D8$Y#i5m %AdA{RTwfeg,I@)BA'#VIT|")rU_0opI\F jۂ@J"r:D/rI(X\R8OtG` 9+H$tE+R 0$`g շE utIS^喒Q 'q ZA&=PrVIWa˚ WI|!%rxA$3H9n (  #ڒӿ4youker-assistant/src/res/manufacturer/GALAXY.jpg0000664000175000017500000001122013260315532020564 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !Aq2BQa" #b3S$4D%5U: 1!AQaq2B"$4D5b#T% ?y/ƧqYzbD۔,H}:L\AeEl .䙊iZ݁#BŅLIj[ eZ|jxW r]W.޽k kZ^璫wRԥuY8ĝfluQLxL`E +?֗Ͷ/_1p??b|NS')~??8̰#jnVa=TbbC;gf?GLZiћڜ]$3sPҺ`C vZsNi&qNsouhe4:ce7Te:mI ܊1 jq\,ݪ$_էq`Sރ=1eCaʙDDr@3h2}|رrz XwV"g1i 5µϮ%Ϣf8&;kXar9x0{,`/ZyI,Ht0 )#cw.-H% fߚUs&TΪ8VniZ^y]q_e?zhm8+Z͹PGNt5ZAvYɲKm4],*FyƯUi]iY`g WN]JWL<󙆏~P:/*I96]nfnYw.#cTE>cn{j!qFR39ȹh p-^ٛ\ ?y]{#f8eѿ;[v^҅967!inKO?rZI'&}hR)C i /h!wުG}jUb"$mx sG07݋(bUA_/P7GK~w_ ߶ywXoVM1ZϵTԩ]h)^n3FFyu[L# .} ZViis7gx3fxa @k;GJ$u#MʖP!SZerx~L2NjE"Fa+>lz|˺ϣm>A~|4'+aP`G"32" 19FJ|3f hKk1+l@X`M|"ou0]Cͅ(ܙ/C$׼0Iލ2L #@ ;S"{%黔ZM1yP(a0M{*)j>-Ȧ ـ.”nLV!drQ$aoF&LEˠzՅ=-&rka c0&ؕI5FSGLPaJ7&K29u (az`0L"H=ŽȞznyouker-assistant/src/res/manufacturer/B&DATA.jpg0000664000175000017500000001430713260315532020471 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1 !AQq"Ba2Rr3$4%S&  !1AQaq"2B#$3DRrC5 ?<5$ŧ'@X!')gb ~Z؂qiV Cݡ,1% r 0f6ypb!N^B;ؚOifj5'@X!')gb ~Z؂qiVX`'xX0wZ#;N^=1 ؀. @pd0i>AhG{I{M,ؽ͗.ewK#.f抧ـ-o>5[XƦ4 RL!!N uAPOŴKd'T"#yjr&}K7zڲu6T飊JFVOtaDw^%<:hB,ɔ4\r e1G hbR))<%"C ]3kԩ8lɸ eG8@0Hhwe.IC ņ :[ĒH46,!72Gf't7-#Y=`TQ2E#8dzvYQ3'+eɛ+f2bPb3UԹ Z^ABg1=jhR̢ٺ$sTGϘסɯŒ0׽6ԵIMX/q?GM-!~Ξߦj^ c/ytL w*2+Ø:N!epbe8x[3•y|~H@* |iPJgwU/*,)A,rIUJ&m'9M6] $o1KRQC: u.ݝ :>M!1IgI?,^}`xB}8|P]Wsjn}9I=47؊F ŨtM +q|vn#Cpj~EvSӅP9×/9yxMSwOcerZ e*5a%%. Ȗc@IHC\UO )|蟠Lh6˟5Bi:QѱSIc1=#3$M5Jʪ.HrɌܩ8]s+'tq%=m,Y/pu'MO?J!&y ?6Nm3]E(\W I$mWqu\%P۩ 9x }ĺU6JRۂO3)|fp.%7=T-44S43DDCnrcยsZb+Pڠʛ(PűAQC`ܦ%S]i^/ʗ<!ĞFI.rH{e>U{/tbJq" QƇDy$hqvSA9\J"qTz}IOU1c?TQ5U@1YGtܙ3C{Zߌ.$KQ¯lx&jL5 :_tN^eW Е38{am3YmvJfq7b?[дpd%ڙՍ^Z'X%LFVLT7.ڨʎnꕣpB;2+#%N<߀哠Ֆw`R @ڡ5ڃ[KB"*תWAB?ٮK>ӝ1w܇\$8@=Z-55]% gW08caZ9v#Pk1#CӶ@{voᯐ}P/;ͭn:-%Vsñ$NF]d6HZRK)a(G_^tE=Wntxv7.,>:SpGAu0kg͎0SNkM$zRh;DRr,wDwק=6KZ9CqTM1ݵ}ދo|:C폻xO(.P9Á<۱}:r,ϷcPylO $_*1"|ք*MA)GT<BEr? d%[]Sh\8\z 34=~)! Du 6#-*l9Gsh"p7Vث[ԄE)`R89ºUjRޙpotI.s^S(5 ԛw,aTuUTL4tx٩JI̥_S&9lu-]gY Ku0 #NNP72\-?}&`52:oO.<65-UVJSesZQ孮1ۧIKzr>}EQr9בAW7#%H©Xsm˭]AW^Ba ӧZG˓پmpE6ʖx@eVxFLSo3+,BLv/u&)IyMoT^<M{>p*LۑKl\5gH+ztkT[2zi\½zVTinkH]p l/߇(Dјif-i-ä.:Z jfKp'qFDb`kcI"A/)D9F8;v,+ۦܶI6Ifr&diD$)-I*TsvRclH}NLJ2%Z,y6%MLېh%JTS]BBS) Op=g {x{A"xG4|]p[S~ c+m!D%~QօkՆE^X!\@RmaĀ@#ҜZ1kXv\[wpzJRArW{Sq_S.':);NmZuT9Fxx3sIe#KƊߘ}86ҷbyӉX4؍+{+(!!56y)RI),Gi^wGW5{8- m%Gq=K$@'ovE+qx2EmVAk ޯ8́(1o^#1c9G_]x;G6XoT#y{}E:^]s.HuEC>Tu˸Ltm'RMJWa%Ƒ T{s|fk3|Sqo:9k`4$_1?TiuQ"]{Py]078RĒbJ R:% tn t nYiƦVE&>#I9Mѕלq6EWdVA]:ݾ@nڵcRTZB\ @jy-yXV==m/Z!(8(W$I}i%doM\ؑgEL$7!-oa'QE~k=.2M6ɞP;>J:妥- hÉ B`G0\`Tyk}uk*QF>%M}:A?e7mꛄt-= %*Hy|zֳ9[٥>W;;rn6t D㪕9=Sj}#5i aE 9p9隫'm2i֭5ld @f}NI*Q'u(C9˞?iVچ穮/^#J@Wn;k4^ ,aI*Vx&a ,./vEۗm\=^OV]-h;"Zzj>Q veJ@b\0:gM/3o\a̷)H#y֮wT'"oZe|$9 [5ޕq{IxA tczY듨ꕞU՚>tgk7Uv;<:q'lp)HZ mVKQ\ɁX\P@+hZ}w{ž %"ckն!Mmø=SiW1JڻCZۯȓ[ܖPOpg}D#*ڮe.*;'ӑ=j;Wy!o8)6-Ǻrdp#ﲝ]R_a$ި'iް̢fH ݛOQtOޝ;^$yO |\v};b }x@鞧N~%ċ,hh74ODk|FJF2:jJ 9hmiʞBkf;911<`rTQ\IQD!EQQEB`v! (B(((!?youker-assistant/src/res/manufacturer/TEKRAM.jpg0000664000175000017500000001004013260315532020561 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1 !AQq"2B# aRCS$%6v7X1!AQ"Bq2arRV ?]y(U<>`i*])UsɘHf<mo z!w*7o(II@#ҨPqp~$Z=SJ& d`z(j*+||`heës:ʋS-i urrI|YM'!(zJ~޽aֈJN I]ɕYWQayc홹vC8RZV9֙+Mo/w%/z~Mw'?ߜ]Wbqv߅fv/gU\DzrojNA7+ A7F!&m!DpjX_>~ԫ 9v@z+Oљ]-&`d2ЂoѢVn>NCM_~lv-륣}y)?P<5?gG3!p'p·aˁ|<_'Ro<c տ,4?h}bW3Ձ~@iV˾WtZ[rXˈk[ ŻOe q-t?Hedd~n;[o;'OMtӽ;YSt˝վ:5yVa4R3w]AoLt걨ca7YrlA"Ǹ)O/!Ous}MLΠ>^kX7\֌ll߯Lu2[e8啴4I~Ӻ7ޡMS_[~[w4),ycqYʨO%iZW>3Vl;׼ck?;7{y4|j,1G(6e|ˣ9fgԇF-78{~#PW5qk8 +T]9~;{ְjԘuZXI~qokt]XZ2H-:8: n@ܞ[Hncņ2FxrqE2'ksN==%ޭmuB\֮׋2%ظ[5%+vV~UVV--L9Nߩ?U[[y.w[8yTKbc|B{Ӟ,Rny}绥92I4U$.N6F[^7kHݷk}ڱ'?wIn>Sp䑷j4Kco]!|U|`wWf{-c'IlKaUMծ\ӱYe6d}ġ>T*ʁ\'Ck)9#<2ӎ%@Q301rŞپWq_w}&ѭu(ƯKCkj۾r4"Yj^/QuTI%,v%T|bM!1S!ĘINk{>k?˱W-4cRb?2@ŗ9T9s O?O6< IÒ7/=WH޴K:.V*ژ<"$ P7F'2d2'âI%"Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$hPhotoshop 3.08BIM8BIM%F &Vڰw8BIMHNHN8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM?F]asint]FnullboundsObjcRct1Top longLeftlongBtomlongFRghtlong]slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlong]urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM ]FLnJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$,@@C@4'|%@uV֨;^ E`uS:ȑwԆy{_~lv-륣}y)?P<5?gG3!p'p·aˁ|<_'Ro<c տ,4?h}bW3Ձ~@iV˾WtZ[rXˈk[ ŻOe q-t?Hedd~n;[o;'OMtӽ;YSt˝վ:5yVa4R3w]AoLt걨ca7YrlA"Ǹ)O/!Ous}MLΠ>^kX7\֌ll߯Lu2[e8啴4I~Ӻ7ޡMS_[~[w4),ycqYʨO%iZW>3Vl;׼ck?;7{y4|j,1G(6e|ˣ9fgԇF-78{~#PW5qk8 +T]9~;{ְjԘuZXI~qokt]XZ2H-:8: n@ܞ[Hncņ2FxrqE2'ksN==%ޭmuB\֮׋2%ظ[5%+vV~UVV--L9Nߩ?U[[y.w[8yTKbc|B{Ӟ,Rny}绥92I4U$.N6F[^7kHݷk}ڱ'?wIn>Sp䑷j4Kco]!|U|`wWf{-c'IlKaUMծ\ӱYe6d}ġ>T*ʁ\'Ck)9#<2ӎ%@Q301rŞپWq_w}&ѭu(ƯKCkj۾r4"Yj^/QuTI%,v%T|bM!1S!ĘINk{>k?˱W-4cRb?2@ŗ9T9s O?O6< IÒ7/=WH޴K:.V*ژ<"$ P7F'2d2'âI%"Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM2http://ns.adobe.com/xap/1.0/ 1 93 70 1 72/1 72/1 2 2012-03-28T15:44:52+08:00 2012-03-28T15:44:52+08:00 2012-03-28T15:44:52+08:00 Adobe Photoshop CS Windows uuid:d94422aa-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:d94422a9-2b73-11e1-9c1d-e060394baa3b adobe:docid:photoshop:a39dce46-78a9-11e1-b50d-bb64171ab44e image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UتVyR%v 򜺌xQ8cRݠBhn՛ eG2rٹ* ?xU( e}RW_0«^hy9^'*aGsA88w;O/+t/"yI;ڛ].ف~+:W:.j'og;v8c[O(ZyFPGL{)M^ ?@^)ty;g$Yq-Fm:.:K-̪>`6Mj@?y&COkQsM8 UTI**ODMNr<[QǕ˓y2 J}!{f% y!m޽ND3e<|f<~R|hGn{dUtei(\#HBNKQRg!91憛kywJ.,,iȕy·G9CK#f'0-~fs_at2IkCNM" @?\h<!bH-H9j: LFrdz} ͧn19Gr_J8޷b]Ū<܆5:$?'*9T_0{y lU 6Z,DiTٸ٦#Y<#ؖ$ԓVs^;3SRr?3LM\A;7Ib*ҍ0RsG0x;s"v|4ϋn@REy@O҈V-rZ%OǩކuKv5݉6?o8ͣ? ^2j3]z>1ʻc'zhgAr_N*W+(Lfa4=8~?-vC,2@ִT4lȍVVG`ބx>vvA):$L/ hX~Qg[S{|??]NgF_LA--#KEEw.f>Y:rwusc;ĄEuw:\H+4~.|{G8%p@R?%v!" ϒ|s5ցEaq\ROˇ1CǓnJVõ5[N*UP7zwS=l}♯vV7NF-^X}2)TDќ6|iOgS9by:V0:/oBdџ$d{R2ī/SHX3KZ;J?5P.pøUUwɎQ"qTʼn[4Td{ &od ?8[‘/>`*C,nD[/kv*N*UثWb]v*UثWN*UثWb]v*UثWyouker-assistant/src/res/manufacturer/TP-LINK.jpg0000664000175000017500000001105213260315532020660 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!qAQ"2B 5!1AQa"B2q#3$Rr4 ?ǓJU\) cH&;$R RA5Ґ]CI~P\ Qa@RrH *(2W.ԣSoŤҳW& B *j="Mz{#P(_9T9&W.”djܒJ ˠvu(Tyji4XG7#m,c9DS~&ĢDf<_1a).;[`0m>7U~!OcNNH\) W&vHWX"b`w])&-"kQ졢)ק?JAuR%uCer)FIK- 4\`wReOǟʦKUJSxb+'bDCfzhnpn;B m!F(LHkACK8E-y52A5Ґ]CI~P\ Qa@RrH *(2W.ԣSoOIM [/_˜]lRZ=aվóqݸ[8GJkp`6t\_ev)9HހeW.jFv޾U%mRRal3?pX_侎B m6q.d X1&NGUƛ{^RRl kp3^NzBP;k'&'A2NY&D:U˳{,8KO'qXoѨn92dO5=qFS?;'vyEc]hJ+c uq-|bQ!Y!|ʚYu =Û*E@$@gXY^Y<~5ǞX B謶$Ne*찑dPE)}"JHUhZZDM`sHS? p 5IeNmwsw1[89:2_E!nwkeɭ+aRs9DesЭX[T@!,{މ\9N0B xUG)nXt0MoK[.V-XT5%p,1 ՝JΕ50K\I1 yŠgk5*5s}ibH#Č|#piGΙ'R[hgZ…CM^ة\s^N'_ kun*gi$鏤F#we\V9QllL`I&1aܿ`ܶal7#w@ѐZX0ZEb΋At{jB_jηPg7t.ۆxaUew{S%\y3C9俥;kW}fį8цHx#[RXH7g`:ԗ5&\̜f``p>Cz=c:qYi:OGhl$ cawiR=ϲNP1`-,ck0y,iY|ڷDx .MqU&Lyk^\tg$zZvQ݁+jWNlzYpL4Cq3p̒28B%l}G4cu";q26i=nШWStX-oL<@@J&hĨ"do,$ᓁl$|;Xd{_1 45`Uɯ9w` y%QH1V"n vLQH[U @'%6=Vr4?p>k6nhRf$79~%ym۾Ʋ6ːQ\"'FHc/ ryٚkP!]Gn{Hr tqb"KXW%r]wLv< c sInbo Yxۛ.JHQA{*^G$f8ӛe wؼSr [jvՁZ 4*|R;AhDp>t!hAG:㨜s  8p!gc?Xoi&T7ِ+),{B mW$. 5 o[!M"n!.n֬ܕ49Z%1af:fߵ-J&*KaQsф0o{>71s;egYdX(ed)/dșqRY|D7=we9gRe2.āaqgGX]IgU)I2RćBniN| ;n7W HQ;0i&Y/ _t62dv7+ވ²R@ Ïï[&jrԁCnFF\~ %oܻ$)t=B`&"@\fל\{zSabfT@MNw<ɐ'0IVC7$TC{"1$R|NUxpE>f؆w!͉>J@\0}(icIinOꖎ T6?9w ginF.JpÊ hZ, >&IxovbttȚ ㍳*'"LsE0qQZw}nN :⛚Xm 6Zp 6zȸ1oq01l ٖ3&KF Z1Wzj39 / k (Ti9^ititYU; Cic-bNhʊJVXTF:$vb v+:ѽCҜ|~Oyc}ϣ|ꯙ:|oW׻~KJXe\) cH&;$R RA5Ґ]CI~P\ Qa@RrH *(2W.ԣSoŤҳW& B *j="Mz{#P(_9T9&W.”djܒJ ˠvu(Tyji4Uɯ9kʣE e.^):{)J:$}I˯0&.$Ң%rJ>)?*/youker-assistant/src/res/manufacturer/ELSA.jpg0000664000175000017500000001071013260315532020326 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1!AQ$Wq4UaB#DT8Xd%5uf(bCStev'7  ATҔ5U!1qB$4%Q2DtEad6& ?!g48"1sCg1cP3,f 1c?,hfk+{_r,x᳃ 9r |9`N=7dw&BthCc$TI5qm.5)%%eMx=OYri2mk<{0b䤻LI X%."A j!i 4Zf\ޅMx5Qa,VnAZnsMهE96vCgxeb{@m 556^3IB&<)p)cݯ7 lsm0' {85}(Mm$څMx4O9Pm.6^sRmB&<S{P 6^sR[лIT$wm 5UEy ܷIwS'E}˟CZKWcTt`Jw2ۊr!6ݠNr +I : NR/jrs=5Q&ܘ|kdop ⛈ͭ `YTzj"Š*_1mfpMcܓQA Mc ]}[bz2Kr/cLGm,NF9TXyw$<~BmTõ5crocLG і7ZX#;{Wzj?h!br6jkN՞XjkN՞XjklCNE1.da9Sҥ*o?1YXD@b:n8A?v+hXx7 (ٻ j)B+`,OrAedI>L5qT9nFlc XZ\aw&JbG> ndX nnMnݛF(e\ gI {c}3eg Hpp`]ÎTBQdou]V~w>1l =F,p !ѹ:8UĨ'j W @.?f8vK߄( U2ϊ aѸxM&I21Sz|`g7ώ#;s 7-b,oSmOrÆYnT-qF  PTl]W|<2TӉw9n/4`Hs.1||hD=f`9IMW~{  E!Xt`KW^牔y +?u"V'qI*DKgT:Ƶ@z` j6)Mܩuk/3㗇lGcT+njz%0>pèBjT,ZAr2(B!6FX>9:v((SyэJ/0 [ZI4nqK w$bŃ1Be;L4qTU֙saw\kehNL>꓂ EYR9Q/׭e+^(-tO>4XubMVA;_#9_G h2Z$ᔆ!!蓈/Oy#`^rV0%b!"yZU.'`e?(0bLw`ف5"U9{hXx6rGvK؀º n1r`nmFwX*ꀡ9P&_'Y#: H^bFcxԇ4K["$ېGdFH71bZT!7.+@BetXj JK̆-@[`'Gi_:bUut >{$>E}7C oC%G0GWzG0}g:%jJAo=)µ$_Ї)4˞9{8蛈/"=RzIqᆂձO/S'ܚ6"q @2vPprNܤbw$Ϗ`I 2#kDL6GwTف8K!6((W+#f5ة[Xg. ܊6PKPC 3y6kV:¸-@n"\UL9H1##HWt`f06qh/5Ʊ'7ݰފ/pYd^fKJV8"tmȬM2UoZa@oԉȩZF5~r'E1v>]ʍv  rz'E VOemw7am|`CmrQDӃEVO'%N$w:O\Z)  ="TDGB ]_qds{U5~?€V& 3r;^(b`Q3q^m ,?E)n܎A EX~jh"QV6bB߼w~wV&+`1EqT(MZ*C8sp`4hTrb2]_\z8E+A]?v:%݋=Y/8Dz AdobedF]   1AQ !$qB4a2D%"TX#St5&FHA1!QaBq2RbT$4d%5"U ?Cމ/x4Ĩ[" nDr)Dꄼ~ TC.)PJmb%m[w /1*" ለ4=D0JQ0iu1z/_vK T!*[X[FCsLJ5xb" a`0 A-iRL|L^Kb@D:1킕iJ"V'~7 ABk:[G~JN^i\MF@pߝ [v]gdd.r<7.kEhH߭%jdc<KDܘφ[Xچ?5ddr$<'IQ56`8#j`M^J<ѫϛs]K[_6[eL<ѫsovwiD-_35v.m g-ZN^{^nNl([9i2t?7_- g-1Z:}WaofB,ZNh2}^_>gՄ=!sۇᝌ9f!YcM4-(;alnGT)I9̒Ԙ5Q B ?J4PaBÆ;^*私L) t"-Ri0S26OMK~Bl(> RxKF Я"҅p7^2Q߀F"fS6SuRu\Hzp0ΠԒPTUm/8vppxhhxqo.{hLY걘`K2O.ȩچsD#Q4mU&P+46=z”C #s)f}qz߷dXMxOPp|S98>? n=d ??'vvt r0m" O(}0'Wpe'K0]^npG:єg|-޼4 :T6\JB^B@MD*a x1PzbD; n0F=G;6뼔scNL$/6Y )iArj( isi#Ƴ8kG@T 'qӥ  A/fqg;+n;{,SnDZTYRJ(X A ?f|Q.v9ek ئab8M\ԑ# F Q'7Nw$sffi}Yoاy]Ю|SdU +;wGkDf#ba6_g6rt+T=stkչ|2FK1 aU޹<Ԫ.npsb+T?n8;st^-RS/!0tŧG~3v(nq19az~%M~m%INT^ p% Paƒ&36LR$zTP8Q>!"~Ǽ;>0na][t;-myK/1*" ለ4=D0JQ0iu1z/_vK T!*[X[FCsLJ5xb" a`0 A-iRL|L^Kb@D:1킕iJ"Vѫ!쵷qo" l^CX A{ikT7SuP+LGd`BR+嵈youker-assistant/src/res/manufacturer/PHOENIX.jpg0000664000175000017500000000761513260315532020726 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]    1 !S$DAQq3T%H a2#E&VB4d5U6"CctFGwX  !1AaQ$DTt%d5BE&4Ue6' ?cnFܡcYsŌ{ЭǵHŌ}]~Ŝa֊:lAsgES1d0]$00{8Ȫ}%~NQ+)*չsn݆ܿ%ciU?}x\a}!8=t/Vɰ6ߧl5ܽY. gnufCnKՔ-Q@6'Qe"Q6Y(mNfs}.ՄBueB$>c.X@̳۬dL6짇$ej#oQ)Re;2^npV#]1KtF;'߼Yi&qs_*H- ZA'Oi88 ezd hIcbY?ZG{exD]Rjtb*kj]`<EbM_Sb? 0^K3)DV`5Bca T9m19ތԲDKY|8]ς>穦L;"kE^A|0K]\̿<>I @/Eqž|$D>Iヂ5Ƅ 99aϟ&,]р;\wr[Hq8>ov7G(ݐ6`MM>8ſ|<^10t }k ٮ(򼍿7)aJFc)*0e%)?\Y~xp?S*=Mbl#,A쮍XoX0յń[eZ _<#LpI?W]og> gǷ~bPRbi +)W3 B" LsjڃjQ!Ȅ=ˊML:[r&ʞW-,qF{wI=fCMk *QgFi5o2άR*:SɜX8O,Ÿ;leUܪNSEU&;=1JTXPڶFx-X7sppMRm#2^w]P.].S۬Dbݪn$Գ̘ h `6WO*_;Dfӻ`J=6NB^',l)s7|ᅮ܈H=^h5D7ꤪFL+9+SyaŁK4l Uʢ:5eA7p+&+%A2=%,(]@7p`aTyFE]̼ EWҋMua 6[BnKB}hC @*Ц 1J%,&Ƈ):;hݾjI(fNa)%%b9 ''~'Am6s,P2eYO焝| 4_ wb㬟L≄3ǁɣ8N<&y2N>!֦x“GkG;IoDkRUCśdk!@**Upß@9yL9,J*?u 8L"9-jg*Cy!5Ě]Xt|L?Pp9ª VY*]|岵(|3!CΠ pPCJ鿢vZGu!Z 57gϼ҆` :|}Y.KeJizg#r ]Mc,9W@y J{륪A[=3+%]&eg>濙eC}ը=)bf/vjAMȏɑ9*YҜ S92M, ]g7!L O!0Wꫢp!5ک:np|3g :\ZyI=@âaܪL=̼ O#2@i=4FW?:d9.ǭC Oq|-u$_j9Fpynroo@ pKIuc- Z@ppeߎ r&c(Q°W**w, ɨytiu(ēRi&݋QLcnUNIaqSPG8s#XH | D'(^q5ʕ9 Pʠ8 ܂0,Թ%M38YFGr,Gǀe7]g88c4*V0k^ɶʹyo l# i_>ͱ~oUh]d}׭"84*kNRmj gvٰ8UHSZڂ\kރf!eWY6 P\6k7Y8 P[6j+tՔwUI6({;4Ez>ښJ4({4ޓvb6R_b١+a YU<@I/MKV U SWg`äa6R V1Fh=QK.tz1c O:U'@͟.bf,F+fgvOO[?youker-assistant/src/res/manufacturer/AVEO.jpg0000664000175000017500000004117413260315532020344 0ustar fengfengJFIFHH'ExifMM*bj(1r2iHHAdobe Photoshop CS Windows2012:04:13 11:27:44]F&(.HHJFIFHH Adobe_CMAdobed            F]"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IOUK|.SHhkD?Eo+7YoUoNF}?iԸ1{鼼#AO]{8o;-{ϢnRm̵W]25V]fTz`:.5ݏKjlᛄ,Z<#p D8}%?Q]]h,ǥm eu_X2ǧ]6۷W-'cc,o}iÉa5/}鷵Zvebǿ8 @,Em/O#\~>O]~ٶ[_skdmvoS?$7Y^+krG2@\a䗑t߭YԱfs\ ZCΕ멙9yBQ OYdg:7ii/ xkSܫ& };g-f; wnq\ߠ?RUc!V N;U9q"%ҿY Iyuu_Uڱ)/ *Rg_ȳ!O~;zbCC@nŽoUz>h!M'Q.< q2Yh̃Iyzg^mNхIﱍ2_mGeQBJ6.7TiKkZ]['M=+{n`pȸ\w ݿGc~S1ˆW)tMqR>uHv9ՕuN~ggdPƐ)3{i-ǹc[Xs^X"]nǙ`.w'Kd=u:GW YL[zl.,unbs>}g9|Afuoe/&_FQhx-mͮw_7݊,lŵ{{إ̏WwO _ھc%׻#m#ڽusV>b^}2dx 憆ZN].hO]~ٶ[_skdmvoS?$7Y^+krG2@\a䗑t߭YԱfs\ ZCΕ멙9yBQ OYdg:7ii/ xkSܫ& };g-f; wnq\ߠ?RUc!V N;U9q"%ҿY Iyuu_Uڱ)/ *Rg_ȳ!O~;zbCC@nŽoUz>h!M'Q.< q2Yh̃Iyzg^mNхIﱍ2_mGeQBJ6.7TiKkZ]['M=+{n`pȸ\w ݿGc~S1ˆW)tMqR>uHv9ՕuN~ggdPƐ)3{i-ǹc[Xs^X"]nǙ`.w'Kd=u:GW YL[zl.,unbs>}g9|Afuoe/&_FQhx-mͮw_7݊,lŵ{{إ̏WwO _ھc%׻#m#ڽusV>b^}2dx 憆ZN].h 1 93 70 1 72/1 72/1 2 2012-04-13T11:27:44+08:00 2012-04-13T11:27:44+08:00 2012-04-13T11:27:44+08:00 Adobe Photoshop CS Windows adobe:docid:photoshop:8b2c796b-8518-11e1-a998-f15f6a1faa8a image/jpeg XICC_PROFILE 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)KmAdobed         F]   s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?N*UثWb]v*UثWN*UثWb]v*UثWN*y74Iu^FKhDDF(Xp$byAЫvYIWɿ/<8럡Ri-RzbO~-NX|Arlv*UثWb]N*r3cWTzPD;5܃ID[tGܸefȴU$k_y-Ymm٤%9p #1Q^GѬu2ZH^XZkap\_J#“Q#R?z'䇝|:2Ɠai5rpQз?1,WC-쮮LzeA)I7͙Xש%//^E Ɩ Hlj*. >cozǕjOn.5#5[Zi"c2#p cE|E _TLүίYd+42F-_Vla^.%ok:_1EMx&e* J0 _˲[ L朗?`򧔵 i3B-#o۸oyel>$X|} Qwlm%ΧpZ /<伛:l( /MlL2WycHk.$Lll/~7H_vZ[ăP4G ~ AdobedF]    1  !AQqTG"2B$ђWw(X#S1AQa!BR2 ?>L#>t&>ĵ5c Sb>bL|b\C̿h8К4BI^Z5m /:m5m$NE(k(}(K>~j>C66~_Q6'r??/xVƧɯڽZEz:ii+yP)Jj8؋EXPm &ČN'q>AK9Icx` ݾ^ @Wo0ײ|?񆽐~v񦽡 5Tv >I=-cN_mڊ$5s&q $͘ MRil@ɽgx6ܥm{vWJ3)SVW)y&B5SyUy-bʚD*C0,cB0ȏ iDQ4VӰ\4q;M6X 6xytJGy6c%R֍ng5q׶ʈ٪dRh R˘\)d٧f}F96%Bnq[&afeh-/Rjj@a&TifZ3l`2 eNS]MPb4cn[J-U֤PЩhtҟ.r,mf&]rS%DUj`jE!aXEuM2jz*tƓ vͶ:LZi18N&5p(RZ/Z-< Ν],{EO3⬓Ux2ן*4pbV*PoF] %UKBf Vml+,?L\JcMLT*ա:OhCdAtJԭ)XEͤ p,]˞8Ih\r1:ў |di›Bx^6z'i ƨJ&V9y,iRc s`>Y۾>70͙O?/6i}y8x*qGgO?:.wG<7ŨiYĻ=ٚ'{ 'KNyawG̑;߸_mduXGAGQ;߸_mgZt7yt r3:y8/ֲGADl 7!:y,n8GE8j&!<]ٖ,k ?N+蝱jF{*8nh"wq^/Dk\ n b&;z$e{W*D丿G~'lZ=Z#ɏ1-M`ĘC5Ę3r/DEFen3/?t&.ĵ5c Sb>bL|b\C̿h8К4 AdobedF]   1 !AQq2B" $4a3S%5!1AQ"Ba2qR ?MÓV&F 4tQo/`EC%٬ ߴ4V0;,p0k`9v@{4W|mmw 97h1 *FuZBRNDG9N8C+=JffQv-msන]Zb*pxskUQ+r[(/ٍYݩ%U%Y{TU+t`w 18Ԫ$  :j<>&jzxbw*`;]Dm}Hu!+:TTmBFOTP9ǷUWds/7Q #ok]UUfBg K0rthTVE%R5ELq >}rWhJvLr4̲ZdWEпv8ՙ71$3)A}&DJ%'+r( <<)w:L–n&m5#|PcGƇyQw I4uIYLSԕЇ+ {8U*@7}٪ 뵍 ~J7_vaV^G U~o[tK^ EecF>99xPKrqD:swVӞّ-ܢ,2:WEg̅!D‘MB-=C[ij :D3S)N#w͂&xxQTCxg<-^GWHTC(Zq%La)6G^ lE"Z)Q͝tjer Yno8xR-,jW9߈_}>?ğ]k}n{{|խoxF,t[vV?r-%6z.ggRv6ιNsqӂٯ;/!k۪DI,G@"S$W`7bs^+.ULٷR$[s3FI!/tvE;1ofpѶYO] UK>AГG?3N)ªEdW6?G^[M{.7pfLNۧVi*#[B1Q1AC:?q5vJ]kgg-̢]ydz%n kޤR4hL-!V?a׳R8N5<8tFJٜ*:]J{#O|:׫$ﭥtyHCRve(q|;*7* <8p!r9VnExwMK' j4W&zDzPUDL;(I6XQV*^37ci=L5Obߓ1 'LZ4unqFk:tlm Y"=7WkteD&ZMBIqqTnOTJ^}*AS"2:P_Mmj^@PZ(hE+ _tCWk.ݿZ2yQL7Q#jQ9xq<5M\m``phE - FƪcE54mͨbJH^"# x&=M``=ԡ>^vЋIP7֖ 0Mѣ6~#<<,/g.%cX˰z٢Dkl]kaɿA ~i`}:(7j0]ɢˡAxr+[ 8 =+A>^vyouker-assistant/src/res/manufacturer/LINKSYS.jpg0000664000175000017500000001016313260315532020740 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1!qAQ"2 Ba#$% 1!AQaBq$"Rb#STt2rs4d%Uu ?M+\1H&U$R RA5e /)G$P2u Q$4 4tTʟǯnInX 5) c0Mz:HQkAAu_ RI%erIiK-@iQA%rJ1l?FHT!Th//+%e%] |b/|H̞|q CoSW_KĘ7t8>?~ jl҉~A:ގ HÚ w#" *xqAuo\~O\-fLr]4!f|Қ,%J=It gɼBVH[UOÑMǐG.:M 0!Ǜۑ"y,BJr+nK\T#/G%7fx FH%}@`hǼ+xzZʚ*CD1-0H6 p8Qw㇍g\3fiK!y Ρ6܄S1TOVՙɝ+ǧ /ߑq+c$qmleΤ7]ػO81I[|׭`-vb,L|Zo[$q6`i<#i9 ?f"%d9}zR~^Q@8n KZޯzQX/LW/)='k&×y81`Il}]/oC/큦<:'gi)3ːe*j\֯y”Z. \ɧ1\eEMUpg=r 7c G*CtN{~v1 {6=gDbQ̶:͑"_ m*avxxF"*z.뀢Տ;U wN2*Ek-0û%\>.rc c쁏1:[2ɛ֫}3xz?>ʅ+Z"Ti|י}n~)l|W ?fq fy[w9q_'#x/<#lSV%o 2&c*&xqY0np[ a0$wH^lz38J1_TMY3CeZ`,*FIJH T x;8,Fdɯ-)o'8g\>TTSGRP ͉?q>Rs+:ƨ 7x"Q5U=uBWL|9B:::F>-c}n\`H,8ԬC xX A5/&}7;Ow5Tꊏvݼ;Q;Q%Wu[,vi-MhX#mh]2]P]!\OV{k8?3lgpkb_<ɝhR mA9jl*YwxW6snZӜ5๸f*^>(#ds왺FHsy~Fފã9(P[n^z{0bfKKKEhly;Bӧؾoׯlk7o\˷vOt ?k8Ép_gvq/j{ѿb?}m^)使%>>-]ϧ'o[ۄ>RJܰrkRa TtH&K H&TP2G$P28#ꡦKp@|y($_hNh^O_3MԵi4W&!Lf UGIj="My|#H.JQ$puT2L]z”I0 )sEH *($];)G2fji[MJB$^)z)rE PG]C”I~d\(a@RdTPI\@vR*eOT7Ryouker-assistant/src/res/manufacturer/J&W.jpg0000664000175000017500000001217313260315532020175 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]  1 !AQq2B"#$d%5& !1AQaq"B$2#R34Dd ?M9741& VW"&`{4S==ZR 7&G.a&K0ܘ #`J>)>S%-&ڼroi cxL~HE0Mݥ7h# zz%nL]J.L1La0j(.G.|S"}=)JZMyP(&Z\`K)oGLpiJ8&K_Pܙ\b .(r`6P\] (DzmLS|jV3lڃ`?NM8g/"5>;kj=BB:~ДFh@7&+C ؐk:2!-(uՎ_rpAdܶBr{<~Y1 X]n4ȋZxq?SԧKH& 1}*OQtԵeib/႔I_8 `=OAKEJTSV&϶`) 贞5/ mҐX9maBQJT%`g Ep卸Oe62RWC6gG68#KSnZQ%8 siBQe<)7 .! %djkY$]{:|7}xW>KX!I:,Ȯ:J&־QѲ[K8$?R)y%1YcP"Uc}Rsr4NQSۙbKE=g^'aUWb(_`Rk[zØVEhѭ}s0rņܝ/$`I"ۈJf̥K?96 * :THz4zm og%.XlĉM52&,arKPٜ'53w?UU7ڷ*! wo2-,}dۈy㠶+bu=@U2]G"$̭C;Ak\>F}^#Ym3J9g>OQ➓&EVxiuYQIn\VU>EFod:> @:Nt_~V٩_^Wc6mY59kha pӵci;k>.wl^7v7]bd/<9ID~i6Uɢ$vCCҡ1S8=A=BP~y1dQ&ˎ.(D%,V8!No([r\:beoU^U83KsҹE:I98(C5j gW ̃{ WN ̉L1%P&.\S]]*EUƮ ι>ؼlQbnj$QL*@*ŢWzvv33ӯj<.Y6.M6 O0[[2DLj|='V҆!)h4m<ЈHJcHǀhSuV M//DO_:Wmb-r1(W dm+v[yDMi]E&DR2Gk/"rj^hON1o,cZΨXk#.QtVLN5INfLf6LZ{oϧJM {o囖[[ug٬ i+[m*v2!{ QRdGvԳ~9i均{8ڭ is EOrj0#V_"γ.S[6Z,Xu q%#$9;(JWqHS'fj ٣z7UE2S)nU<>]9!q]3\FZ˲wT#%GaTքzU.bKn:z7~̶ȧŞ[ȞNx{<[xG=]Nbcqqq]Oكmnǰ\16յXHS`jEr)n>. A0]ե(/ CrdrQra`4 ɀQAr9vp|41MRmʁG&77ԊS}\LOf?J`JQ2_:߬4iqFriG2'jb䥤WMM!Lo oթȦ "&~wOVd0u5 ɑ˿XiEɆ)7&mE=ҏdO7youker-assistant/src/res/manufacturer/APACER.jpg0000664000175000017500000001103213260315532020533 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]   1q!AQ2B "3% !1AQ"Baq2$Rr3c ?ɵl!Ls ߥIE e.Ou|)==K^$ߨR RTe 6\`wReOʦ-&yP*HSA7RlH&K)A AwOe)GDA׺2w$TrH (2W.ԣSoI^T 7R0;qsg?cyYtRq,ǯWܷpb[-kl)))7J~{ݼMQ霓3Kq Fe`zto I~P\ Qa@Rꌹ$+`QLT7eگ*t DW(+G%ΤYюY,]:8;9>) x չsɳêagl^&P5ʌMW0D{n ̎ pso59'jO {yj Kѭ2dnG1 m e˨kd던Jeg.eϐ447({H/y/a^HrcWĚ-(&I)SL cfrl(|bf2+[t0>+\}ⶮ)\.BXmm,}(`DL]̼pna\RK]`ZyZ=?<3=*"jRM}xaQõx_B:n*Ԟv$kA甝cBq׷&82 z?pO~4 ;Su[WHg)QZ?(2MQnnhDcR|+3VfF1"pqH2g Ο|ؿ(>Cq-LGvbw &v—ɂO&DH/i[y2ďq"z-w=Y__^ f:DG9DNb`@ɾrX0V?5/ӆW'`U"9Xw95nyIb(RgZv ]Of)Rkyq JILG38Zfi dF.Jƶ7;5nj :B7YT]$ZPPDڈAFs(ÏH}5/*j#f$ˑk[.Ո|SoI^T 7R0MT$WY8iǶ<пl6\i3SlZ'4e~z`Ƶ}_Uϔ򠏴}>8:Uc7MQtI扏{?1vb9wukna1d@.(!L?Ŀܤk^J|Ep7?.FhGAߜeyzŢ3\G8!lJD:WS827 cS@>޽o洂jl%R%uCer)FIK2TPd];G2STEjro)a 6Hqo I~P\ Qa@Rꌹ$+`QLT7youker-assistant/src/res/manufacturer/TDK.jpg0000664000175000017500000000744413260315532020236 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF]     1  !AqBQ2"$9a4tu6ַx1A!a2BQq" ?Mɿݠ~iX pQ/M\ /F˿hh d@h䱰X<_b${}Zb&897Ђo٭+A76 }]ɢˁ%Av9w a, 6kX=+Do["U]'&vM5b&DP xy4Yp$;}'.%mc+`E}kd]|巐xxAt%»rYv.0'o^Hj#I]̠61u=k⑄hyMī-+#ת/]jVު~Ÿl=BV8 IK8{J5vi|J|kJMm>[e3|D;Y=jxRہ%+Ј]fdWI J!boei9a:`jagy'qe]W6ެ^7_1CYŹ 3@0| "`(כz)FOBw?k|TxY~b#UHP1J &5>"-e+F6o4Yb.r;=ot&$I+oZbn1/w8 abW|T0xAkFd5qdʛgJr(Gp8ƇgOʨ0 A{@T1iU5\)nRZB.(qf7 ]\(jH%ӓ&Y@ED+Lʑ*\My3'\y㲌89Ëbi)^KP[r%9HRI w$L&8}L޵*TT6#lr,i >aQr.38'yhn) %-[TIzTRUb9'xdT|2s!cdo& u6$L{)/e%(us)xJ[oK&xOtoНV7C":_r,q#G\?fBx+q%)hdذQQ[KCzGSB:uE{6=FqS'c׈pbAnњ-)v. cK l;Q{{Xʕ$ARs{U=4FeZNSKb=iH&F[vo!eLS+LUv"8z^z Tf0 xZiOΆ2Xp)|vf7D?mV=@ꚩF.c [WU7 4CkX%:_VyěŮ}xJ d9;RY3PyN@V4J'RT=ӎЖR○icSˠ3ecKH% UlKF:OJD&xu16SU\phy{Ga{rmM+e|p*PkY"!2{Cug ΢ŐTȏO%ӖCE8qWUUUrJDW#u;^q!i&2ت@~J$nNZu*j(+Kyuٰ}țg#;4SJ6< 2" pn;)=!HU*d<^8VhCl2K]Y8-ǵךB#N:B l&55)+ CZ"?xIݘq, ЗLp`ہ P h +cZE2@:1v>k{qo_'j:z!6897Ђo٭+A76 }]ɢˁ%Av9w a, 6kX=+Do["U]'&vM5b&DP xy4Yp$;}'.%mc+`E}kd]kdbwB fQ|8(ojAw&.oYDߴ4U 4rX@mebr`h{lyouker-assistant/src/res/manufacturer/FOUNDER.jpg0000664000175000017500000001140113260315532020702 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]" 5!W1QARa"2q,!1AQ"aRq2 ?`~fbx^wk+ O?Q o ƔḢ^'guv!JGRRkFz1?pӱŤ{Lezt}eVc zc;53\1_f|Og;u8%OTfi x`oGIzB8T6duZImi.ZB\6rHvZΎi7%gݨvO>f|O;'ڟ 3>E'8o\#_P@iI*[ۥ&HnV6EE'O"+Zqcn4>EܛϤi7R/qNTFi夐 O9s!yrdIpҍ\"&O򗆄Ef;'ڟ 3>E'O"mLO@3쭸S:`͉Me}eyouker-assistant/src/res/manufacturer/ADATA.jpg0000664000175000017500000001162113260315532020416 0ustar fengfengJFIFHH XICC_PROFILE 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)KmC  !"$"$CF]"4 !1A"QaB2q#$br-!1AQ"aq2 ?Uɐ1||cj+K\Um+:GkGcu{RCmHZlJ׽$~Ҥ~* ލ{Z2HϳBqZ$Fș{%_F88HVcOV4> JR)J"R%)J"=dXf!):|%K&.mQJhΤ{NF~܃b-3%_PQVo3lW=y pضD?w '+h"4%@ޔ7Ҹt54ݮt8%JHi($#ۡs!qk.c-Pq >j#Mm,EH B${4?:N&*_, $k<}+_vwo F"x-'Y- ΰB>mSg[)"Nhlo;tjZ¡ŞLKWd(-m%'y$${j2- J`F&[L>i~)UJR(Q/2 DZ']@b*}"3'$ kInRbws ]3kQ/?!VJxܑmrVǞ) O]Ugq*Y 2PPUO_) G_f8:%->J: }ݳ{ 2IA,;m[Hf"٢k+.p͊ol8MےE)ށI5s)exbD6W@Cjh ucq͵\vf*wҪN!nwɟ_n\Syiu2$c6;bR^a|,r/ dcL]GIGϦ AdobedF]   1 !QqB$A"2%՗Xa34& !1AQa"q2B$R4Vb%rt ?y8jJ#.N?vDN=N'hxCC CИ~I0wPxi8 i zա\)4{' gF# ǻIC>x |hy} /V /Ѝ XNZe1b)@8&aۤFft' |q}.ʌSy~/?vd,ުq9v6]#"[; /fVFe SmGUr(0"DsI@ۘ7EYBYnQ/hb߭nbWD&S"~r1}֓uOVUL_"uqKnab{"mbɍP3$@Ѝm$ht5C˰--?yPm=4W֊:HSp_sIiMx)gis\6tUTcC^/2FcB^7"g%FC3gr7Vjm֯+ۜ)*VeȶDޣ65 PAH S|Aqia$ 9ƪ2f`4o*cT5E ;SvNC+M:~@VHSRy>T)l Il}u0 vΣX™=$2[3sHR!O|D/6K2נ_igG?۷y9b2?!1c'ٍE˸7&|\雬%1eqyq4Q%P .5Zr3 rmpE%Ե7ZVO>X?DO I:-٪.՗ֺZ`j(]Vb,o6EVWl۹y=c; [Yuw\@XF-gi Vf %wcp= `Bevn&(R]*iB)L ""J"bi7W޺!-jh 'Š !?EtHTQdq퀓k>4nWkkH*@VޔU B, p}:=6\]RdIj,^Zn~%}Vԫ/1Pe *fDRWP|]Ԋq mq#ڷ$f(d3I"2DH[&;20[(z; 7sK_V%S۪ՓĒ7-ϝ5VWCD<4N 2p5:XF0"{r7Nᾪ!\jU[f|EPbTX`55z],Ca:qI:rHɹeӽk/ڬtqOqUZ/t50WoiH|Rx>DjTՓ$9BdԊ?f~3{[]MiDD;D rٖتq9]2##~D&;e;!\T>ASVܳmA}+"׫vOQ* ҬH9C(tMn)|:J f:ԧ+ZZQdLQeMAc;iJ`(^iإސGG}[c 9]ITTRCJ(@(zܺL0V44J@inD%J{!Vs̋[ZV!/OIDQı(o) Go&Nn}Gu]_qJM?)܉[Vp݇d(;S*@!0bc@0G!36 "'Q^P:Ze),-MJJp@bdm):v@)5B`h-W'C}PXp§buTu=Zֵ-0D9HR;bg5:}7Zr6⛘-bYRNvRx3Gjis7yo1bbMq|u[l|I%3c-LE8-+j"$FJ_R^|RNTu3SEv@YUZT (Ƈ\ sޜTHau6)ol^Vλ+AE4ܥGN ?8/N]W{h = SS촉qΜsҸ%h];)De+>"yJJ܋,ZLrKJ&AtD7h6?ڻ3jQR?b6I.B-wJ=. ೬Q) [T;Ѭ{V *?+,iRg4S[M/>,{?2m--Spn}D:R \ KApwlVWtۋX7>_k[4DKiByc^Tdl⑹|BaflNO4aEp~@,~5p50[EŨ+͒DKV^7IA2:96®y# ( X0<.ګK)DB{ c~vzt`Q#4сD#bWwiXB+@uYfT 3LΝ^q݂GYtjskL>[|֎t]x\XӸ-ڱ##AE 0!ye ax:`HPAiآ4< ?Ʋީ-T G!N \Q:4nQIR5(e*Hڸ jf!Tz݋Ht=:~Lqg- UJ?LY FAXm 5ȧ4jVZW0k\Wku:>TnZ-->x ~rJ#5 sGdUݶNH5rP7vԒFG- ӡPG(&Y>m" 2 ąJ.(EC[яI(W*FvcbFSR(N1w$wKcK7lW|Ki9&f#7XK\`lY+dss *uRjf# Vk$HTE՘d;A⠖h$z'Kʤo.N %#aקRsԑ#%x8% ax:ҳs"cېG@CU \eL@yPGC.'&<el3pܓW4-mvLir4&*P=@@!ɦG*B9ΣU9y=a\ucshl2ZM.tma.K7X*@ yÎ^6ZƻFi5 S>@gR5hGSZw[s%oRIYӧ7ZjLcE"R{^kIYрarq qvA8C'/6_fKդtǼ4#H! v (CH\Ow٥ i8k:0 .N?vDN=N'hxCC CИ~I0wPxi8 i zա\)4{youker-assistant/src/res/manufacturer/MICRON.jpg0000664000175000017500000001135013260315532020572 0ustar fengfengExifII*Duckyd)http://ns.adobe.com/xap/1.0/ AdobedF] 1 !AQq"2BSTRr#$4a3CDӔ1!AQaq2B"$R#4D%5 ?8W'~&Ԩ;WIt jQ?ޫ5C$Tڔ-lLTڔb-X#?.%Qv.%0UJsW;_+@#u(R??4 Q}WˀY+V?\ Y*?07ISo7k|RQ z*$rA.1S?H>yp ҴB=3hSL6>|RBn(īH\u(G0_.0U ϣIXiZ!G*-?k h@:#2S:` #ğ4(dpZ Z]/oĻ~bk8t=bڗ u3F-y>h4ˀvA>;SewT`GL}@ә+_/ɅE.o y0. 8Y{y1Y{y1Y/x,)Ef4qQؽ6D\ qvRT5 lmiDEuSQy&9+MW% jÐ/ Z SW8dD%_♍wnu(`25wUeJHzjVTF+9Du% |tS  gԛU[ura7wp֎\ԝZQ{|{"jaԫ-W*21e%ktSy Ϋ6w<”ҚbqՋeIkWEUu¬IM$OC F,1V \nF4=JqDk`ZC[+J&_ݳ7g_]YWjhhBM$h':+PztHTsB4@vg$ⳏћjii5ә6?^#$zRψ7+Ki9)7DO>DlQXfy lp >t#7a3*jrtls9Cv3⁡:jÅ#>/ͲN֦,^kj[!aI(y, z{^]zyq D?8zV@|~S( lԍ“L֞1hĥ3[BӞ߇WKqo(eĎȻG0&ҽsrBW+w$2<`.f](YIgٖ )=)jRNto5}In[H©;Z&W5!6=$Ep vuyo]Gܿf>]p;o55޾ v8mpҶuou[~uȝSCREke RUGH9ZQ|9di@8Q]?{KvMҁ.,p{ܳ5狍r %WͲ5k>6I#|?] ,dK)ShӆN9ԥ.h4G@̝Z8 dU `:Xǧ\ϯuʘKK'S as UU/mU1 >7Ţ+MXh~'f:ަjCrNBdHpDSu~ZrϘq[GGUn ڴ0Ӌ/^]d_l53KqvĂ` \|_BpvA~UmeMz 4ItI#*;t?D:of\+u“b;6ٝX=ڻ)WIJN˘KA+b^ԏHs gD-8G_JtUc Vɺ.a;~!$zh89畜~QCƫvz;E zG˛˱5Է&^&p8ܙcem\KJ8fsVwUH+`FdJDb` }Yh.͌& p~\(Oo[ Gb^JeVd\>O<v](L):K4?{`ENɚS! _X~>w $#%8q\3HU8 {O@6Zư (}UJŔ/Bb\HՌ[B=IKԱ?eՓnXQH"E,ʌ ^n` 9tUU!=ι=5 }]8|-Iդb$ R|=uOڊ֟mlukbRe +djEu`wGQ+ HlJeg1,Wjmcӟ/FlE]/VܨiZL4l[*}ݹwŢ^%hJ*t=O[.x>j60>V 7fn_g A^ڏz[_.mTdfmXc8ʏ$0e92J;GT:V~Z ]MpO'!9m-5c,%Rf 9fkX)K3]jE3Lm)JQTsnKUſgԿ$,Dt`F%ɾes^_kwl@o{S6bMS=.H Lhuv0%ň`yC f .hlPA,(Dy~L|ZMrma c&LI`G6v)dr #o(aD ` #`wŅȞ/ىoIM!Lbɉ4Lh0"&ޮ?0]”rL_!dr (a`0,Arxޙ13M_youker-assistant/src/res/switch-closed-normal-hover.png0000664000175000017500000000336213260315532022276 0ustar fengfengPNG  IHDRG3+tEXtSoftwareAdobe ImageReadyqe<IDATxYKH\W>1Io<ĘHĨD#AIi)dJPHHvM馥]$.M.$5DFcFǙN̝;.FϜ{^ǹD"U܋8[EEaW\)WU3sBӴJjVo94'e]""aOǡE_|G`eee^RRrssYVVE{{› ?'=ZI~ ];^K? 22/ lzz$؃u 'O\tgyy]p!fMMM@(dFؤ-AeG#y_/, &g׉1u4͛SNjǎŋIbL' .237ڵիW2@~(/Jsss\h}vL[CCgsssz]!Qо8#֌֦p6B)Y$shh=~8ncccƍC[nA!"1zu%9JQQљ{^1iLURGz,QDc;wd/_F:s_' 틋(>rxx8p,d\>CV:J:|MMgbm2Y&k0MsNW'RE50ƍ1}ܯDsc`e=0Odpp*ѪGESx~qs!L288d< {&+s:d=YۡB+8 εk=zh4PJgY# 5a$]3چO4L"ē;w\Pj&''ӧOVWWDŽgz*;|p{S1{G[)+6rܬ<6={ڑV)U } t2i`>v Ϟ= G *%Ĵ%Lnj!HWUgbPXvi Kf/0֩}IENDB`youker-assistant/src/res/cache.png0000664000175000017500000000473713260315532016171 0ustar fengfengPNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 0LyIDATxilTUJ]Ā".F(E%UhbD% A)qDpA[@k\`mF13tu:{ywߗN;2sj/P 1P79:@U p|>dNҥ)e$p=8WS/h `-^?g݇)`*>n~\ZG"p.h5`1tuKS nRtPuM^38_ :lS#9O\MծkOV[mfP X6 aQSզUjcI ⪲*@?5k`Ssb4xLwڞfV=#߿,?z(h"Pܩo^ܴN+n4KLRW+qà) ܜ؇F'iAOod@VA%z} }*V$v ]-Sҝ&:0 }] *ly34Ly]dP4~͊R(KicIg#EԮ[l>\h W 5H;4[x[&f;t9Xi  *}Pz^X3vOlT?[уg}5x(f9yEgG b,T=BNE45)%*ejh 6$zC*4q< }LX79xK?RI=I zOĠѓRg#NV$tu%jD ~$h$W2ĴQ b|]XQ1!˰9*?JqrGN74GCOuALfR;&'r3_bfH$M=g.~Ir^oU/0-O }pW.<l'}ެ2yn oSbYRTUTɃf'[ }U|"=z9[E*fVml՞[7qVtQ9 wi97T>/ɠ֜k c}lRwb\`Cfslr0YM&5 asطJQɪ}H4S5P`]T$qlj*r-Oo~1UKwV1YoڱjmcaRNf5<\hCx Hy,?JcϝH?d1<.2.eer<aku!w^lA ;MșNnƾ6M A8i ,h`5NmY7Y$Ȼq Jd{zdԱvRFpA1믴1`Ct{-[]R?V;;]kA\4r|qD0=ƃFv:5WpT07c4*I`dDci^F!b ٪,'_#|XrIENDB`youker-assistant/src/res/trace.png0000664000175000017500000000645213260315532016220 0ustar fengfengPNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp # OIDATx\ pE턀 G "U"9T+UAACN,P9,,QEE1C " rC*ȥ缕a1;=^;;M}rQ  $%E1 [pJW[K)*Q.QA,xPp``` 8AR.71D)AB0Dp`['#:4nt<#!X*X%Hw? >, *& '5=GSj ҡ<'NFr WF;PB,* ;*ءܗlEhTWi+ZQy1mU6 j ' & A Ψ+gLdV}0?)!,G~l,b#P|V0V~i=Nԙ`>b sr<> N2maRtZ RطEs}3a*+c ~Io]O8)qL$裉X+>t`220MrI]𐃺a_JP4OIlqI'{ Z\ۏ5Ho.gשVNˊ hY[r2ff9,bi_ar }}I9m6tCG$YMlYMp VfG9#AgigU>Q0$QF80nӵX5q*h#T9ߜYZOE9W_10ln来+='?s^X` Xfq JT崼)<ԅS#ƍ1[8N;9Mۂ4r]8z6>{a~g1z=t(r7* rY"@)nPee%t{K0W!yر/gZ=טT{6^ӥ87 S?DZx%^mÇ .?g92awP,Q$.,_p N^IA}SC|'lFŝ H D"iB('Ju wҨ+|Hz.T1ɏWԤ+n*ҁZ';Cw 8)IcA8%<]p^iP/&t8KSw$xE{怛OjdGrIл]*x,=[NIAg~ݒL(#-kWq'h8+(w'pjsYr=PEDF1ܗyaM $F5k*od3 \~`ckMZ hd =ݘ)HmAߥ-xm⇫+e $׫7ܒt0s4.74omt;Nl]ቤ%.LٞN=uf0:*c?@V1ezSS\!7 ֓3A|Jn F|rזLwA/#4+lᕢ:.ԒQ| |GN/o! ȧ9%Tiv@)ջ>{K2e8I}ξOfA2 o\ n(6*E k Yy'غ9O|i.j}>_KSI^DqM٥@t-*\A7s>} 1$)+G| Q*r~mXOrrj՟!Y\(.u#iR ﬦTyKfΊ@8\D㹆%\4ƨ@w6ɮ +8Zڭwc+[CL9_RNxO2(zOn/{}[(+ׅ:Q6qX8P E?Gڹ0_|F,\ fٵވ-;VA &bR^ +[Lcߒqx뤙Y,5?^jEر{]1@j Q@"R=I s G5ex< {n%fYq&kފaN}e>A1Ful jB?EyUtȴU5E3c3D*՚qݣqZ'T?P`g" "EgU( {~XLAvo@iR OR7{f[7Y h.ŲmJG 2UyOS$Q10U3e7f )ळĒ)+/ᣕӫ4CuRu;g,*³+/ĉ ;O#ϡ)"g*2 rq29# 1?LFI;?G7 ~81(BQ 3iJ2d (ׇ=!1U2|Ӗ%%i|?fFv)})$-OA lP=z"Br\63z+}4!rBzkD;14spZɻX3t!~zы(1j3w@(_\@}cX0 ]δT?% b}!̜ x .qL}ꚷJ*VKP z!.ގi$2q0ll9& EMTZ2 S#LgQH bQambf^#sA:k/ywnQO㥿4@#L#t-Dªp|v>|XveKظ$<`48][HKڃ"ʕSpze7{#2$pnXGnvㄙ Կ%m?oGZ2AK˧'1uZ^'34c6#ѳQ)s$?ܫ( yس';E#d{bnc9a`,L8k&Q཯+5 ]:)(SK$rL˽uSXy*8b&x3-RZ`J +by$L,#cm˦XMwJR2ִdÆ/oG7!:ZIDte-@L}tEqd^%VO[LF% j x-=\D_e`-Yȝsl/>c`<=8cv;# `"z5EN MHtNߧ?7;"_^ƂA%bxr@H\mE?kBa\zV#2ՒU9i<1HYIK>)npzA$*$& D+^Kqş'mz~4ZJΦgcro_'sv5nb!#8c?%0KS"jqĚ}m(SSʡwcc)75QWMsX-fK?`$ v˾D r 7b]M;U"a\l{\g: R_埏[~5e͂}4QpF[7POmy_!ЛB]8| I4RFETagxcR4 R%Szd/RMuAuㇶMq1 N7.v_z̝B\!ʈڣ̠00Ax̓fd-(2GUU[G%(욢|"JZ/XG|Q|:\S1b|_6/C.]\T}ۋ|aeRLZ;DO< mvQr"d^HkB5X ZS:}7wHծ'wLL(/Wu%xt1wY/QH^QQm#5lbnXnPГ(+t5Z`.~v^GuCI&"! :f5ޠ4zo|`$̽p[S[ ENZSe)RahEcn Vw#;w&){+GAP'v3;ߍw:ލ}TU '!{c[%T]> FDdz.~bڅ]`]Rps!d*si(D~W (dib-!'^}wB.O&amP?t5s$p 4#f\ I!'QMosYn9Um[Y(3ju|MshǭwWQu,_ 6Lok^J O{rg 06n>IENDB`youker-assistant/src/res/on.png0000664000175000017500000001057213260315532015534 0ustar fengfengPNG  IHDRLwB pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_FIDATxb?6m/_+qsqJg//C8rtf ( A6bF`J>v׏ U/ݽ)```x@$} *&"ƯaX=EePR*7X?`?{gGa````Ho`b``d``"0^530000_mrZ]~A. w2ػɆX*~  CN+w1<```'ְ`ޣ  \H```Olp`PPE$\`ig$'3`錃;? #g0Plδ}9EeO>`reFwyZ TR}=D&]#9 $=o\Jr'DbPQTC#_9```E!U<4^?e0g``xMrUB Ua9='(ټӐ˷9Qtˁs aK(Q*3c$"y; $ 5Qь"yF R)ei%hH4bRfcc1n~2^*l,| 9Ym0z=& {4ch~Ԟ]_Mgմx# *kgrnmgwbbH OPT>{eYbi.j0J[BR\^QeP ]oUkƼdW%ϊqzXbv)yP˩l K|%N- n#vߎ"8~5F4!{;;i=)IRYKq(K5Յ?qxhY"E09?їerYm3ݓ-s'4$@ЧYp]|Pg~!MQۼqJf.(QjFTPT8ĠK3 ( ꡂ^"I zz!z%"(2lkn96[ށs9=cr\7ϖ8|&mUoZiu A t+vphp(<>hLTH6VKp\0rpܛTg1P+!j*i=IV)F-Nj ;Svۅ}Ph^ITZic`ɺv2sR~~84z`.J˪Dfm4sytv]K?pZ?8@jMxZr]'+wۢh)d.7.~껌(3W JK/*wIT8`!(1ۭD|t(atQ"Y9)0<֞F`z1P&-f2}5_n H=p1z)lt9‘-[*bxH0 2e߄fS\n/?F2*l4RXuX>$!H}BIĬYy>g7_ϽwIENDB`youker-assistant/src/res/package_logo.png0000664000175000017500000000322113260315532017524 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp IDATxbdH@q C5 .ũ0$;q'Z >M11 X B̀"!O8HPfa %j6&99L0`AddU^qI\J 0`0Cx,@X 퀍Ӣ; ¥9`ltHĂ/4Zh : r@a_7>H}p)WgA*-A& afJ O1L sђb苴`PcYw]0 \b`ִ÷_pug0Dm{6_xQ%Ţ"w]5x2<c$+tEd R,2Qes=7ю!l^0A`ו`5h& xw$6ES2"ewF0Ȣu@\Gl.Pă$e!<XMGւ,G-w]f 3GK$ ZMVDrX^u5 R3+XAlH)ֺT*@ : R!{ KW@O 3 [:i`Q}boJIYpBLb #C:ZA߁8j1,9 'U96J ݁XywFB% @(C!IENDB`youker-assistant/src/res/screen.png0000664000175000017500000000426013260315532016374 0ustar fengfengPNG  IHDR00`ntEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp lIDATxX]L[U|0 (1F ld9Ǧ݋FI3/8_Ԅ}Q,1Q>B)--;r pܜ~zι9($R=V*`cbji$;"(F)/2&fa~0=2is2"Cw(DelxԊ%=paɬf{_pύg.}7n[LQ^$`~N`5$`k.GTUws_JѾ KfFã{6\`ɮ|pnT /HzXMo>}"M*:Q_pow6SwKn#zE5O"C^,pC kBɈE./0AHADESƾGwig8vHOC~p q 1مv>SH B&=3W_X Sx1G_t8/pHCw{Xt{z #u=Hb&>VMlؐa8$­t߭JS¬Pڂ((?6|Y#ʣ=,t_\cA~m@^A˲łrOF68Qwhj)O,I$rTLrPv\l-wS{u`>Sʠ:-bmDYWߝi_2͉M ]t=JbՂjMAt9 *~Ţ>3~L\TҦVX_Y^m撗Kotݚ a0s+ 0J`ݛIENDB`youker-assistant/src/res/checkbox-hover.png0000664000175000017500000000305113260315532020021 0ustar fengfengPNG  IHDR tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp WRZ NIDATxڜoQƿj bݩ(L7cc$Q01icqQ@0!1)>xԦ)R:F$ss|ÜA yHH&s^-?+j %s)9|- ;nՅCx]0Mɤ;_7|wag/pXt4F"`1#Ho5`=g6H.FHä)RT$%s}{}Ĩǜ( IENDB`youker-assistant/src/res/indicator.png0000664000175000017500000000175613260315532017100 0ustar fengfengPNG  IHDRe\"tEXtSoftwareAdobe ImageReadyqe<!iTXtXML:com.adobe.xmp @")cIDATxb_?(Ti4g0Em#(#aP?DŒҋKw0?b +>Z| 8@|`2@uG-IENDB`youker-assistant/src/res/upgrade-ok.png0000664000175000017500000004516013260315532017157 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp UIFIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@.ˀP&d0Rǁ=媊0|̖VQ, 8XVLᗫ&޹]E9+'0~;N5}t~9Al0paYw&r-r0kKX@`x'쏜R@WkvL `ֻm`E ʙ"aLpLl+ (@X*x8f4Ư BDY#7맣&ւY2u‰Ӎ@Z<HP ֫/PԨ0{i0KfC$;J{o3n@ jd1(r84@ЛUغЂ艋d;qu(ڔP=+JIBq0(&0B-r?FS#9d!q CUgyߦZ%erX60 %|RI3|?*%tX;V$ |dšF$&k/@)[,Zl [x1iWOM@<545@ݡ8:; hP!{v/zĴl@`P C5^~H 4nHI@} nN(ЇA#EW XFN;(03L0\y g%>9r .Yܨ6fͺ縊FdO+ wB\|: h.sѠ?i,_p<`~ERC),gZVEÓ[7֔! s|ˎ -;o+y۔ 33//ç0 V hh [3,)v01=F9AT؊;l6F# yXh\]]XFla +'D3F0.{i@'Rc84Z` BP UdO=SY51OQ:v108 Aj[w Ž\/m] j5C$RADۗQ!QPd*W)ԗ0(m1@-nVJ6]{v99ns~i KFM:EoyvOS/MjO/h'xnc 7Z y U+z+ⱗX>rkB˱>^`? \:oyyyu)NґadlTW.*F]+Q w|8.p : Jiɞb# `Z5U>UB+`2cRgkۧA Zت8FJ4u(|h#?]k%h x+G. ɰ eNT gƒMxKOHN1g.('UfLHUV{v63gAV^ 4hmZ|SI(~ Nhׂ"Su A32SgWFH4:4)eWQ(}iS=xCe|B#G"*wIve4%/,wꎗw =B ̨쓄g54tWxQwށQa*}74/_CGvK[nB޻{#i|*pƴ!`FD( Q ` M^fxر&l&pz !%eHۮWd99CBX[x69Tc“Ƿ =S~GA2mRm}d5^^7ӭꀳVΪ&`xE"J/8ϣmkv^:vsHyBg@%(gckK@&YF֟ZXr"t'do r>~$>y:bN&>mY6ٱaeGݧ]~$Jjvg|~-nG=ެς69q}Xs |7<]ׯ\b<5"4}mЉO9<1ͫjRmo7p= Y_F'^`yԲnJѩ\6/Qg]/o;xaz:_Yz`!Vwm܂O,1OX^t~g]򻱞}MFkfi `#?f6p>gRӿBŎl>ZA\.` Nz1vks$w~ s$ռ$ҏ9[\љ CCdWߛ>2qFmzR"Gҟ/>pwQTQۆ'H B}$$($b0 H!((Q)ֈ Abm-m~w.ٹwΖlv:͙s=;g"B-Bu<.Bhm[1^u?|kTE+&M4־ЛPvWM1h2%‚d=y ?|LsRAow\,qYYcda</ȭ^ODxZSTn6QӢl4/)Dan_E) iy9) TSSl 2H- LAv8j-P1yʈ^-)[\ ?"("6cBFrO$hxu)h4cz ].hErȴ6jJMdL+\>ǁ x)TE' Vb5n A߭'JYn\ՠ^ή~]d!ZQIvbUAx5 ^9l$x<wN4rE|ՆAѾ\h\pƟ iPIC(YM!Fԙ<)Dtl\dRF/==,MFeSb'n\Mɀ4+mMhҡQpmFcb/M MI&A LD DoM/bdv,bJaMKM9I<&N]qcn'^ȗFOHvcKW/*2ǀ#h) _pAN>%;3$W۬sN$ӍdV0t 6, ٤`g"t 4@HvF8e-P0jZu=FWciqәmՓƉtcjKV^;#lMfXӚP{ ߯ղy"82uc+9Fʪ Sfen;O3yx\Thl⒒m *l:}#X{U˃-M^%1&=D`v&HJ7o|ydU1@26Đ&iז<:Xӵk$1#K9dD"b'Fo~p:Uo|ƈ@miԂ\e(8v!xc 4$%$x1z&Xp44ޜTi[O=g1?NƵc Qʤ4`Qanw[Hͥ֐@TL3dyIc,[g0D~~o5|k+6_yU *O(kي*!)dЃQ^QN˿Ɂu$SvO?'bw7 ^bA$9,H ;|,BZo~T(<֛;]fLv:_Ȁ~(Z:|z)}B5Aa8rB[@1b]-o -xǀpCA;`'PD@l}j$uPO==j}n|[Ƀnv6pJ7P}3QC0VE ۮ|RgI/PdI)rH8@2hZvm+h%dD V$5K- >:tlpН𹢵GGx57/k\˳-0wJOF\t_gS*?䑱mB6m?, ?jDPyF0REQPu3(p2\=#kj_ÿf `h.PY#{̛4\FZl!^y/91@^MX#ޮ㵾33|M\"^I,X 1.ԼnIU\C]sޮ ߕD&Ȳ'G.M'B~K9H܇#׳8F4~-_8 l !$D -( CV)j[i" X@vZgj3JE:y!@wH $Hz޽{s=l5{ϽO8ɓC{4𝷘C(E `Ї,qηsw=l *V2X6T\n}rl#ojm !IG\uuC\)}IK 9 [,9潷zoO:R)Bv"bบF[ 6x8|T|ƺ坞ETvʔ=\vD.Ln]xט^c50_<_4UhMޛ`sq,8"kW`+SʓoF(@hEz%r#?*I@+& ŕ:UĞ6(Bɳ.jtqɉF%Uux㜩3 q̡egvίsq:RGNՉ+eEQɶ+נh*.fUYCQ`@suJPOO}LG6Pѳŕwl(NiDӄ5xF\'Gwq9iI1?@?^Zߙ;]|tż}e뛂ϼ#yHi$۸AAЯrK;ΕU>ė5u%`cj&Re'Fa\Ozh]W&#nʢ 9{nٱ#Z՘1`F 0RǑ9W6n$݊eM3u!uΩOLH.?jW/~cNAAjis|q^dQ}CO<6&hAOجwG*::fv2!jՖVis8ю0#䱉CSj]+`CD _0.rb9&D7'F}U'Gcbd,T΃en?J&4+ۣN_JAmXkE0Ƌ- 3aUtHEjG1+3k|&vJfeZ7ńdw \0nrY礰Pqv_y,fOg3Kw`\bG{4Z\L>tcIU_[|c^muέb| ' ¼ ǛˀE땏W%V u[VMzY+%F֥^t{4Zg1C%j!8_W%Nr[:{5$xaPP6ZwըY9wKEOnf),`An3K'j݌*2yHp+:LmM_S (R:ĶG+ xH9M-*me3Pr_xW4ٯ=gWa=[J'mV9Z 燥`[eoECaowlpTuف>Cnx+˧ yla^1ɥ<\y{jtQ3{".z܁5F>SC,ֻL>-4āwZlHUgrX j]銵,Sp>=1ׅjTaWU[:U0͞w%^$jɓ h.bJ7vɒnMe~cK+_ ܘ " @NUȴfm۟YPBs9ײev_w#oduVn\;\0i W[ԏTW?{)T-><)br,M`~eTQŃg9GLw R K3c3`Ws{~wx+Zѓ$aJ_lN `iu (MDL,hIqݕRҬzIW*mɩ97KMV\uh咭%Hmscď _~n%NFzLIّ#,tW@lu ; @x:J4N\} J@qpn&onۿ}YWY@x}pA'&'uI#׫؄v<.Dd"l&NғtDv5FGXߢ[[_\h]&=Mn D:'WQRɇԏh?2$߳oM`^   gJ_n h\N>@ `U<.uŽJꩿL%o X@1z?ɕ\ M+.jeyhʤ 45PƍftVT3K9K& NlR6{ 1fMjR=fpc6{]мk@X1! Q#]9`o^"@% "NIn~E[V~v&VP&}X)x~; w"+8b}2h"}@"gBnN,ga*8LNTS`(ϦTIukZT@Ew>WX8'w1)܅S`އLRxOz$EV-:9 dFLq"%.~E}΍ TKnNEs69LHf)mE&čg# xn%et %]SYӵx' tⅴdBIG|dK5붭$ (fE7XnZNO[K ϑ?~njV?~x[ Lpˏ{ZlvY?G^ 'H,>6;كerv^Qo NSF Z{?=N rۑῸ5l`/4D:+q[s? :lo}Nҵܖ]m*cAMQ=kL6F<,V~6~X*+ |6-/YT !`^t [M h0wC*@)ULn=T~@d>|+vC2e5 Yk,78VwXL@8E 7<@`ϺP%孉E<;N#/Q;/Άծ#55H\߽HV*4_^ DWK{_Tܒ~ lϩt.ދ ;P[6)^H/9 }t&Xbfd߆.V. n߄ j]dK`?T dxQ chV`#;vkFHvg@/km #_-:*EguG +\\ -yR4'$M"/vc36gcij ΄pbOhr#<0J TBt/)u1C.|إa)ZWί+  @ux8Pqڐ够nW@s-9ZRctŠR L- %,L;dVdpl1N4"g.Ȱrܦ:W{;;}+պK{}ЁMFP|OqF5]_EZ!rR֌P>(Up|`1ˬf?{<"w~ geQǬg }j~j,@@h^.dh6qCԋbE`H+cH)1Hv21e%g 6}1\pj6/hF ,^'bMQ٥aB}f* Ȃy³c3]5wPt{s-OVh*apTQpd]rز57y.daJ'q a^4,@OV۠߸#D{ 磺em&P?(@[F.Ш1I6Pgf8S͐ MlB a>0/H1kODLX͟lٞ'a6}-ࠤڷiJXfc'bŅr+ȑX JLx*c0_i0z M3@%:4S|F/-7]I4mt#lVdkȌùaflX^uIؚ'{Uz`H{DSm4FcmZwx@%@bZۑ0S#@ yHPcDcR0W+r/`1WW Lh~U8RX8kUF7ƟF~k Ԙc]jJ)>:I݅TXj@R@nQw~'_+"+S Ⱥ) ˆGC6b[TnP}R\~K" KqqU0`½+vJoYVJ.Ah2a]8Q+4 }~04Knt׌~u`B"2H%;ST7vhupPKEdWY\LP5/HG ]>)`$-W6vwRI;АR"(vo=3qYm3PMC@.ۿ{ߤ&։9VYgs1o}CB+ 6< YwMm2$*ўfj1'J @0!dZ.Kv.&rbՑ B-íw7H'@f}>IP HΩvf-#nBf{ E <_ۂFV&pMw4= iLƘVJ[Iķ82 %Ha 0W `g}ok`>7CN[uM[}PmDY/ZuP n+gIpC™$\e 0JMd>uIVEEDYŌ_S\zaplݝ:SCCLD! ]6l$\O^_ZAmIUX*)ھ† 20MVڂOX)7 B*ZlMpszXog\8f$pxV,JGP @{%2I%mpkvaSD)?/ϑie,sz7[ufE3`ߏ媹fK:d;6aoqnL6اWoEIM|%81-4mr .bx^7@8BUEI1((>߿qms7s+ݺ!ρ;`vg$~DVb hG^%r#+azOQe!j 卆umUYaFJk9H4&Fưvn#E Dy%&fɅuc;$z׿fK  2 ğ9+wD |۶ҋhOa u"Xf^TEt,v0gˋ$ĩ96hx1_+M QJ+!ѩ1kV_*s]+$O]T 5 ]b;PCh81 8]u j`GjʖYx|5smZع6biQM6 Ǒv(KhY05j.D886m6M(R! ,Q$"LuU]s _uk[g5VwLi %N \a0|KPCik8a1`u j`FXjs711C V6r;u4Q`HxBB싍U'Vo]P@nF+M${x$+huE\*vwU&HRZث4NzFy tڀzO[i&Af" I"|Ga= hwp+AEv"+ج?wvݧ_n7]c2K52R>˻*}24K?aQYR0/Rm6[m݈%{➜1!C5ލ{ uܚ{XW0#E"5U@XVF!Hn޽]Vu*ό؈Z!,\BMZ${{&m }ނs#5j$rFQ~bV]/)ggso=wz `6jŞ +)^$3Y",9Y*CFQO=?~r7u*bKw(k݊>(J4Qr0i7{.ʢ02.v*M[PpG_+ԋ@+ʾFhm^^sZqD]"Ela !dcd֡n]Q*t4YvqZRN6u|ֵyC[kt e5-[9jO֩. dٰ?s՗yûx b bɨn `0\#dit#8Q͟E^tUIc;<~Q?j挾k#x3lDϯz@3#4X 5ƗVNMޛ֖4ᑄP_zqLV썡xxpȼ-yT<AOOd}8"N&PONF%\n gj)v~I;G)2{sRJνX l8Y`1Pv3^0BQl֦"3f2 Ϳ ojEh1)q#+xo&^d8  9;~NXlXw.. 8SeGw _ZkVݙN[pIڃy{`y,/~$G< ww. 8}E!=gw]Ք-~[n{9J >֓ m"J ipaōx*b\BԫS-F)tjG!$%P D> $J lIW]cuQxLCFT:,秦1_黢mgk5؂Xy҄ouQ"e; Շ Ljktzz>=l^S q!E~X\p >@[p$ ;L9a٨+(FMR03 ʆUأ¡lJE%p;Jޝtl5΅USlstWx 6,P `g:wqx/Cx`%D驈F=I7*$ 楦N Gkēg? k>Xskg=]bA O<`{쨏g$9r"pn4!*=ݚ'TvԵvV ؑ88/6h }G .K# c# d8~nR@{z,}azH%*B|%hZ5YEbN)]O[ kgAuUrm@PjvݕE1Jxe)imکN2ZeIIENDB`youker-assistant/src/res/bigfile_logo_gray.png0000664000175000017500000000255713260315532020567 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp kIDATxڴ1N@EǑ(UD*.&eALKP8$(젠H.`nH) {gg<h ZwW.A4UuXBro(N񌳥r@ tPN\jw\aZanWtDc@rĻǥk]'nsF%vl1pMC,qȾ6݅et-D*7&Sr6pF`r>]s(]٤4Mu8)xMyyq̡Zx‡ʞD7GkgHՇR$/ $@,f2Wّ֬~ W~ L~.iIENDB`youker-assistant/src/res/retry.png0000664000175000017500000003546413260315532016274 0ustar fengfengPNG  IHDR8E pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:15A8AA39A51B11E0B3A0BF442B26F373 xmp.iid:7907e70f-199f-f940-b5d9-8ba8015d60f9 xmp.iid:6cc3b2fb-75d2-2641-8907-8b6fac3460b5 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:7907e70f-199f-f940-b5d9-8ba8015d60f9 2011-07-04T15:56:33+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-07-03T10:20:56+08:00 2011-07-04T15:56:33+08:00 2011-07-04T15:56:33+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 186 56  cHRMz%u0`:o_F IDATxb :aD@%0j bDq?j -MbVF\Nùbރ;F2Q:e)#)!/^1"LzoP .\p… .\1 0qU$41ڟ#.\p… .… .\p… q…QA 00 eO;=.rA.\ rA.\ rA.\ rA.\ r$U^IENDB`youker-assistant/src/res/searchfile.png0000664000175000017500000000772113260315532017227 0ustar fengfengPNG  IHDR22?tEXtSoftwareAdobe ImageReadyqe<sIDATxZYdYRҵu,c c ~X" xA@ "< HI$P2r!8ؓIOW׾眪4ƞDj=ov9J7r7R71g? Wަs:.GЃZ۵osεzO+#)?EhLҔ$s|o)e4$֞}?O|D(/G~(PI,Jgsp,I,)f}d\+F4_,/MP;;N%<A"qBQ冘~b^EE4WkEzrmy[/| ~q(Ec2uXb%#]r\4K& DyJX.( fļBޘXLћ$q2dKTx{6nm.^x@Zs11#}>*)`CA*$ޢ2yg[pnG"yOnўZ,{C`m TIf7bd(=3GG}kWjsXguAEwb \R)P(ԣ x Yu2T)Qi-)E<ߝ8#+Ǿ9As,:sZ}/Y ,."-7 4=3d=#RWRtS+]񻴑=GF:!XJNeTDڇ-}i/Enc][*+U~os4s3M|&ʥ:LA[J"5'TʌXGugO;6DV˥"%Z*X':Z%Ad=[f|jq֌q>ZżzP~ H=2[[{P"=gQ8kuD+ŘmB C<;TbGT9ܕewm/y',O_2hT6K^٧bըAQ@[#zќq\ܢ`עOLnE[đ*]>wx{ {GG *~uM'Ȼv:6qx_ǐTDz,=0JuD*Rh%ʔU +e؂?kၯ<ϼY~ƿZ#u}:nդoIN>D _mDgQ:kJg/ (QΡ!N1< +)wxx3ZAؙliiL-O鹜[0a[s}|cܗc]zFJg[]iζs!OG'hL;PG*T«za\5ĵ9߁Nie#-x U`Q0cpsKDD *Vϵ"Ĉ(-2NN#۟Y176=$F}C6⊵=Mq!M GHAq1`ƎoxW5YA~ޡ7)QV kP&ʄ=㳡U*GEqCn)8LunٴnIQD:i a7(S4I}>o+|%?QF8aGч2?)CN)3^>?8[dx.sY(uO?}!?_JƒŝYU#E#^\ɏpB{|N䬹~$?K};//+qd͐` }fc¹IENDB`youker-assistant/src/res/disappear.png0000664000175000017500000003412013260315532017063 0ustar fengfengPNG  IHDRxxNcDtEXtSoftwareAdobe ImageReadyqe<eiTXtXML:com.adobe.xmp #4IDATxڜRO@tH /zӘI/n\ꉫz#D^<@zB…p6m;߼iL⴯oy7~?kB0͕668CCkm llB["d 4ȀZp}]Po4p c; V)(J)louѮSwۘFz.K`p$ d`^Fc3? @y04E5|Ox_ QTu|]_ŇE.q;@E)+u{4lɇFws (!.;h|}iM<>Cv$dtMNfE)T.#LdY (pM)Q":B3 ) I$q|XA %} &걧^"BJ]ʐ.ADifή sv93F>4D~No1\f$-Q*\fPp}8HjfQ2]RF֠iJ&#fڨ: H!4[Z )TRǜHFdz: @7kZSQnvIädËpi7Oh3!xۻT?k4LVJ4$H;9cgl(2kpfzTLvpcCɒFo-6cHh׉&X\ V*IhD B -~%"YG pucQBH7at*U$, p/x}^ !Df-z),wu pMjOx&(|v6mӨPPBID b$? */jRFmUc^"%xΙIv7fwgΜ9߅!9&_1c؈rmVݤٴܵEm@!jT3uLĭwa^ JlIXVE* 9\es$X=I•z.KgOL =y17X-\8έkIyHy)*H /a ٗPU.k B3Aŷ8vݟ 'p̌I7o3ɵ 89\s ɽ>Wdۈ EMwsRjSk#5[XkʿQk§ c[|:蕝^Gjp]6[0vK1Ng|b{! P+5IH$|^*~޲P852SP:x.WYsv! ѝ3u*&_YE'j""'vbHW PB# )RƏȆlꞝu]f,s2%)al"m59f/Qaqr4j;(n $"2*(S ;ADZ0tuwyyg);WGgvg~8Y/ANq"F_cuqˊ8pʝ"JvJE=c㸧j$Pg2j"Yf8:@wh3dfjA]`hLMΉ̰F{<FggxΦ=Uҽb%+/tS~ l66A(.4oa:!@ݻ z9K #)M.(G[%QgO'0!56z6axO!Ϙac>U9O 'r i#z# Ю8z:}FQ bmN[n>| $)ظ,j6H+8T>c=T3S#>X,t{gAj:ؽ{w@+*s-0i]";Tf@ͻCKO +u7 ycNO PQIQV^hL hQZœyta(& ipO9Qzn Z7oPRSq@8gc;9]zp,<ٱ^E/ 44Ȳ-=MԀsW. {Rp̏@xP¨1'garf}"rp1.džE.(tw_/W-C}]\}N BہtxBu:,7oi-b|rO=[~xXVJGelq.]~[xߞr 3{B @\$n>wѶԯS|ui,@s.|:΢W\چ+䯁;pn?y&,+]VB+fkJfzy&|ŗ~haT6P\l9#,HDn~bԭenDPLkQcۯX/5q9 %~S>jdg3ph %%~?#AJ&E'| *+b$(Ф{%<. T//֍kWzƺg}*+8pXi,uړWg E܇1Yl7ߟc.*XQ YJl1+cp<8Z瞤UY9OW5s)6⌎H qJwRj6*r"!_)h٬Kbewu@F%Q^3 52OD#ܸ ׭]X43imbmHc39} Úga[s3=:w |'D0<|3=2ǹ.Ss 5{p׭= 钐~.ڶI v%Ȧ pZZ)M8έ6#N$#c02H PAzE9V. FȝY 0ʇS3GM%pWjDۧ 샨)i{ҥZG.utYtt#hD FVKtD!PY}r>,Z<2IIJ p <*!4 wqF jPޞ=̴\lp߂xT o*g*D)RbFhq:X TE0a'DWi)@BETUŽ"j) )Oy2 &=d/0L` v2"͂+X^WCch2Ί( -KfXPU1%{C,ݑn./̪|@sdS9UP$%VUCqѨ|&lm6Nyk Md8Mj'.I#7bP6*p+{pŒ`yWErZ9>!^42AZ!ۓžB\-.Lݸv)G4\$gKI( ѐ3h&9zd%aqHfk}8=wǝN; "!Y ,.;)PmplJJT?I*T%$`#`@tw;ݝ=!p\n=V GWT`i)]s'cmJ*xz|aRܞum2%+R$Ti&,"J=cT"dJB[-!d`:ʆM9jjN,dXFRUQ vudmܰRn!(]FBH.V ~}/ 'S<)ꐙ}Аaݞ#$,9O#ZHB&S&ql g^RvAָ ě%ER@Bec*vJJF\lh@MpC`'GֽYS, )/Be iA# ,h`k4QcW-^mLX 5:+С10ihVW'[-*FZ5Fj K;qɜuzt(rqcNx)58#Z. Klɉ˼RSO#Blc~7bM,r9ȵ`l4LL| 6AӕM+1 曊k`an;;{GautV;pi8y ش̃7@Ys<  pd[-kjؑr}֊̆. ½os ٿ-ySnpZ޸nW"}-Yޟt<׻}G`Yꖞ503= ?~%.|[K d3M|C7u1Nc9 7oByS 8j刚Ɵ 0;; ?y4mFX.bCown2kԏG`ҫ];)ݻ0 ; PEX%l]K- ?7vrcFK/Tk鱷ǎBOg4z6vu3wM瘰]Ss-pͿ;n"y$rTUU5hhj@׺4<̆%L#1C}`W [;=f5Jna?.>[܂]^KОHbnjvl}#{xitm$j-fO8K{]f?zjkWp=s*DD9quxb,W斠u/T؉9X^+÷]Q:53_'QY IaŅ3]]{GwCT3QώsnBo nm=ޞ.XβxqTzz;ZaH'w}gTW?| ץ~;w{ v? JjaL^€V Bnd`~WӢRC vqf f{[N)tu8{jOU-,۝:5zAu[-Oi5 EǀBUӻ No#Ӕ^wbŠKqßA=RbrĐd& *Hq z¸Ϳ!2ڦVmlQ"!Jոv8ēͤG5%5]-MX a~qE-q u5'$9'jd%}Hjl}u0 +l7T"ф֗G=̜C}|g~흝0PN`Yd OG¥ gsv1'kW0Ȟ=ám`žֿ;S;&6Dv{<.Q17#v3 kE+)px[aqj$Ea+ښuYyfH]>zoU,H#bHG: JpGh"tuUu#8x<.tn $S,j ^?`FVlrz_/KCt"d2͂hD#&ԡFXv2fR$(Ndѣ~Fϔo#E{VxK\a:ozf\Q(8Y6l_Cx7g< $Y S"N"KbSl %B ǟ0t ? 2ytr %*0 'Npd"XsEIS3592['?TNN\K:XE)[qũ:%ȑ0G*te&dI%I'*"s9c4ņ[WT&E H!A:"%$c-$pJ 9UϋN(,CIZiVc$څ;e]ߧ=P,̈Z/c %z _" dYurdeAIfknņ$UU*.kbDKgKXk!o0 ʊKTSl*/2 ` DhfbF耊f1jPNN:ՂҊK0%uv+V$+ j$"LUo4}KsGNQBzDOiB`V+gr#hECe@LigF oHQqFQ'2[,`cLPdSpL&~p-æGĉCQw0|! SXr!aWg%N״RIN>h0 k^Ȏ) Teo8'O9+InIH-ba 0oLN3Wnw6֎{׃x Cرc}tK%u|ΪWUjGT質e|ߗ{^Z˽T,gpqF|vfGhV{-^H{3iE9%Iz"~bumla{~ w7\-Ih3C$PwwR0.St >+έ W3a{gG90nJMQLjBv Hs.a*\bN,؄)M4M>Sڸ[1# TiBjZԵӴa TJ6m{JmNI=Hh4,HtEfV$Ǯ =5a0X]t9^44Hez0\˒g7`y/:6n%"!if~N*sb2^Y^bB=oIoDav`l_2+ׄ [5)IHEHe= )=_?FކGn߾ɲT'N&in]VW&m^8 Zseu tCʀj 8;wo^n VX]TPUB;ocf:q zk-7VW"ADP;P _e ƃ:PBldmI6uF'rQ,/=uvSYdoWז4m ve,fv|&g'䷎7xab,i_Dkn]qϡXh{{G; kˣAPaҖo/ ZQo~Gpu(`W_E0]h/pYw.lsU{aؿgz l>%x`w/߽s$ή/ۛU[K4yQ#w̴'"5W2 } P?W‚Vhm2f+>8%Sov~_c1kG[;tuw14'HgO_7녗m46` s+V-aի^xfvu9 z:bJ*=va'jja4JM2M{{ٚϙ'ݻߛ+jme~u6,Es ۠rDuIuh(9\LA\RHcA.؊`S`ٳaSė m,,,?o?-=WMr$@\(h̵`H"V3"['+9[}} 5#+pbJ0j?NC!ZwcJƄ Y 0^՛3B/f/v7*;Lg=7}Cj>Cϔ ypӘ+F'+'r/_>se1%M.b͂5ӢLڛQ'<3]X\c4(4ي^UR\Cd/SP<;?ek1TԌ#l-nk<[C{: p!3F|7{a~y gf= c011;wdtU},&(7ԴelMUŵ7&H5=9O[dexs`i2nܼٚںM1ZA} Y?F{`b#sMe,.>ٹK F]pxԕF~`|l-Xs}IzMTh75]1/(f87 wX)md86 Gc8v(udtHRWmG{'Ţb548m7ucdo`ph~8[ɧ1]/*wxU֠\ 4=x|'ǽthnx<5sԭhٱف>ohh{Xf!(ۡz'+X?xLi[p~};فc3s0SD.357堳u;s-ʛK\ct6qi@ό>4n 6Ca)V;*x{;lEc+IW[ҘmX91?">o>Q(:j̃9C|f0ڔrB5\J`T$>]}ϼ #M 4pAJ%?^SWyÛ$9IWQDi\-G?[YĨgu͵52 /`82nӅyOe?:EGE qs<)MA4Su;ٳPLsVVB+`jjp jԈ56>:"fa KSeI[Z;:[硶n[dT cm"(oN!:!1\2Sf+}qMAfUaq02[ =0#^]aqVV`RX,Flڎݪ:E~}llHPݚnl֥7J@3˘*dKϽopetmsg"H9T+#?KAe2۞kҺgQ8ܯco#'^=]ɋK}8 @6SQמ&N"`"B28>0 2'.!T0q2՘ˆVBx~l>?qeZZ9 )5L:خYPAd\cVV%pE2"|D\si7w2J)b$A)pp3މv7 ex, Y';+ѝ8.!ܫPE"qfF~[09斅`&Ɔ&YJ%^zy''X"`J ,TpPoSw9㷸d΁Ϲ`Dy '^[͒!ʃ/[0Cni9*ub!Q0P 3jG\O2|f4OE/I'Nng EX:>Ju]-eȴ\f#hTT\\wxd&8hDŘmDtk]EڣuQG4H0Sy]=irH$GݔAi?:p&ՓtJ `WWLhK+-;ղIuQkR+;TD wT+=MѳEEHv]gKxnօW4S^ s 3T$\ e*IDATxڴK@/%tSwұC+뤋[5"P[Z  wSEjK&C.^^ޝ֎K`L {܁+"Z\_z6d>K̂)z9%5p!"2G(l o/P܀"oE K B:+]zѰʨfPuo"q7do AR5υcX)ba+΢lWo9wL]ƌQMQm6񈞨 LݳIZPg+L<IENDB`youker-assistant/src/res/box.png0000664000175000017500000000560213260315532015706 0ustar fengfengPNG  IHDRAAtEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp cnIDATxbdHŀX7dAd`Dc`B@,n<0ȤH(Rĉ$E'U&""P svC7I Y G: xۖT`Upa[ "iPz7=V]#0-zCNbbI' مFP63t N+⅑HnX7`|=`[:l nx*J4CT49$@-xM- ^@B@j"pGX X'a(5A$(8&<@A(L8 =2 $P M2lGIב7 9%"o9 x[ʃ@ _A) uhDV kC Pǡ9`=<IJ@|Xq,!G%@6/ոJ!dg_0#9GL"Ce ^#rlP} V؀ Ǣ=OYXh=6#P9 )x ˉ"cRBmZYhJX -5*0Jzy sR@6@ &`0T . z ׉ Ah O.XXG>i!vڤԟpؚ9PS? qrGp7&|& KPׂ9 CU8x)Nr{o"x0ݼ LpP-t "nN7~ښI_ ,12gWܕUH2A1F|j8 V)D(#NN5?2fc& Mr+[@۽(۱ w\F,LWQ)@' ~ 7KK`9&}Je ǔbl W BpbYHb@IIE{o(.-ve$I#|^aܹ|ͼyY:*BBD /'i 餬s;TBqq)`0!8 ( +QQxa(ahZmb#q=G!C^ރp2K*l"+JMVVqV$(k>rݖl ky~&o 0ŝuQa;E'M7X|BK+Pu8PaeMx=byEL@,/53q[b:H Jns 0uV[AՙKMAnOyXKQgA"E)|;t.;"MHs.xyx:U}Q@txƂd-T ;ĆP`2j8Z8p|\SN;5fIs`fradoc3}ߣz9 l+U M=}0doxBĬɠU>P:ErjyLBdsw5~|S8"za3U-Uus1vPVY4h(OS CRkdҟ1nPZ"s|7?H=Cs"evWN">LK:V= *oI7[fi&Ri y;EDS&lsא){ _C E*DZҚ3PhϷA\1<4A֮?;.IENDB`youker-assistant/src/res/cookie_logo_gray.png0000664000175000017500000000324013260315532020425 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp MIDATxڤVKkQ>LlH*iBV"Rt.vp*t(B7j4)mBH yyx&ͽ3>w=3L&:||\aȟȯȏȢr7)qȷ"f^-$ab{3Wȉ܀ Akl fYOlٜvB2D"GFJf1 ׼Щ#8(Jna2(svbx ш3IŐxǡSr\]])"tZo&)lHh7ztBPPNZ^O+n譄B!(˺"ZST<$|e\.Zr:+j\Sxs3yv;ojE]$. ӄӋ$I1c#Ơ1wa6 x' 0a{-Ϳ >O, ?*aL8NIENDB`youker-assistant/src/res/shadow_gray_hover.png0000664000175000017500000000645213260315532020634 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp  OIDATxSWO-!JVTZ:S۩uTg޿q`/hoN0EjT!V IHH9 r%as=sVۭ[T NZZZMZLZDZȯzIHHYY7R@~ fi3i;)d-#uj?#&gRi'ieX$$}B:O:~<>CkFQE1$üOvؙ~-~tnR[1m1e FFȦ~x'0ͭ!II`,,--uBo~p}}}ښsuuUAʊǾ.k&d_HUЏOE;q4֪n -**R{ m/^|J1=$}L/ً'M}% 9FzԡPQ(ݞ/ *&'' Z=$K%'tl6{u\.E]uWc%v5+M$7v`g{oYҲt GGGuqL>G mFH&] .$ 189NN2;;Icf/w] wG&mlv3 B=4 qX=~8BA\Vb;h4}q!ggggZmlͰ]},K4@L y|32󮮮&)[a3l_4c%9a w2M`3l'.r(fsB̶R@| l3I`;|fie1MwGڐze6&8iq #l,jGGG^&<)U|,gŶ+4eϘH+R+!f-]{b)}T rufpZӕGD[[vUmb CkRM 96|̧ߏJ4>8-Mv5[uߋ(&qjsMӼ `l}uuuũ^JUhC;4#1ainnV*{ _j4gffr9\]]]MNR=0Фy.#2W. JuJDRAӹ Or] ,$#oG\6 h2 1uci űm .=1l]ٸ`SDLs܆@1PA<;rEށ,5!ؿc2ubOfcr)K…_D aaV( XH0ɪ%B+:V{8}/Xdddq-b/nU\^%qqXĄx}rW-kkk1!8c,6f["&V8-.N/--YĄTNSD{MKH0Hc(K XA ? fczTgt~~"ǂc:FF&qMV@MMڹqmT8߻|η>|YSA޾857AbҍV_~;?麯ٛDdۓ*ҐKӘ<;b$tyRHXOs 00-..m|ܠ&Vѝccc* #|"b6j+JCz g=@_5Q]Dِ^qGjs#|zI!ta^j5\4>d<f)s=Pt妸6OG)F244ǹbvИudW~J`6,Çׯ1 sb96<7T&DhҀC O5дoda;=aU"Fug2lͰ]3D,s S%sil6[a3lri~2MjQ| `ϡXkkJue$a1̴Ƅk̂z+5n8xxU%ߙ%VF `D =#Ixsc/簺>iQ1T78| Gp 't?66- J_,مJE_E- ]Z?;5@VLMM曋BQ֨VǫOdg1c͠XJ"&0@X%Ǿj' NYH_;}Yyl'E=l$ %+ qIYR MI PV J0+1qIg{[ 7 m'3{UQ⼤I*J=eEL8o:lϿ ╨aIENDB`youker-assistant/src/res/browser_uncheck.png0000664000175000017500000000734413260315532020306 0ustar fengfengPNG  IHDRPPtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 9r IDATx]pE J#  bADT4EŊ{WA!"Āt BإHBh}yy3 yWv/ߑVYYj%ԩJ? kД.]$NvlLA`A#AcIP.X/X%X)X!X$JWG`ʾs' : ~|#G֒M1Lp,YR0C0M0YsM$2) 4 rGk.*&K@0V`kDpZBH{mO,'xR0JPjVx`N oZ&/Z&*D-e'N],Xv9>,nՖh暔 ⼈FQdžՍ@Xق,AA5t h\-.\0Zpjo/ fQ؟֯qA*d&*ko~qܘ+!*#BB?_&yV,d>8*J{S:D 贍c2E`CƗ}J)"KO B23U,qj)8Jk8x J Q]IRTk9,#F;*1kK|fce'9F N%yRg{|Kx)u}}JgxSF,*y4#|X.B؆1_9yMbܫE.ђbx ^0F%XLb _I~ =N0#^ABx==vYtݏ`ake8XIã~=^=F%fzQxe`f *'7c_rLt8k\҂C9!CEJ` |@3ܮҽ?fTlA0^.xBg1;\s6Ԏ%x<đXh!J`+.S bAmhQ}4y0D^a?mVAi؜l!\׊Q~26X5dW`׮- ;w'I<3lkQ (<F\u <NBw9GtdT7b1/*Ng䱻kmHz5\*ʣt(z 3x)osƀT3di"4{GވS\Xw>5~ W1Cnʩ) F-yrɸڠ?1"PjAc((A7[^½BLy&.Y M_tHԳ1񤘙xyW6ʋtKҕ,g}1ב\*zq AC홳W5~h2WW[^6}}hȏ^GI58SFO1+e!* y>fX)W u}dP++,+ =KIcMڵ2fMǚzvZq[:LVM~ȶ71X*9)!ܐ/sC4Xl`.hY]bI,<ٟwE RE4TG!jN3 :f4Vf0d]"el+#^g:6D-^ExLeϚD=Rx%*<^! р8:d"G)4/G){9AlcK0Rg"iO:QewZWno7 IהV|xYsf.–sǮcʩPAm ^.Z9Y$NAVEf}~^=*/ bOdrD40 A_~q T5*zBlPnnS$Ғ968ˑ _H$Fa -|$-JQor&gV$yK9P/k"/:Ŗm0mT=k-6 B` הWrhD'U7V*vz(:rQ@.oT~;]yiAu1|:Sl _˂"p"݋l J/|žǖtFߟT1v 7t=XRh9üoܯQFˉwt|׾etm˾ VN-'ہK1]Y73 sEDidz1kVy̧E/5!P;Qg~Z-~h{:OAF.#ie0V߉¶4z;lGkLF[2B'OӂkToa4@\qAm636/!z(h [ ಼ʾral<$(?LuAPSY^n"-ģH혦W҈IMf7&MLߡW3@-iu}1&7b7bU|~;NK\j01ֹ,le u]a6i &M16A6f!_o+ŸU /'C ꒕?QDaB+d;'4;m}jL꒐&30&HxG?+kЋ\[hc/ N8y_ ZU}Cu+shGsbx Hqr¨¦<ޛC5 ;)ȏкP$@N{OTPH ]F>RO(؞, HszZk%#?\qIENDB`youker-assistant/src/res/camera-error.png0000664000175000017500000003265713260315532017507 0ustar fengfengPNG  IHDRlrHStEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp cfaZ1IDATx SYHhW3*zzb&LtOTuuVһM; A+! lm Hzùlv̺ WїnF` @` 6l6@`  6l @`  6l @`  6l @`@K_O `^;<- lf[[Mo(tmHza P%uhbuնr p:؂/^Xbn `pA{~h%RhU+ 5Z"UM Ё`l$i_K cmQn2Hg`HEf=6@FD vpp`^`@`[C]+FZih!hAuM; vTt r٬  FU(xp ڥFe[l3Z$zF[@`1]dZ3Z @OJJbc/=nH<T|V؂6(J [pXD"yO>6mfߚY4mHsl6?Fj>i$;vP$ .m{4Խ`XV߷b|6kp8Q?Xu_7Z]k9aΰ`?T`>|5ٿ.5ضC6Z}6`յFj&iu# ^߫ZOg uW,t!ZF@`kZ#z[pړV ~A;y`0m۪VbŁ55Uz!̈́Q6r^v7UδXFު^l@`oB6q0*/劐~PtDvT\i S=N=w_%@`zZsZhJ͝pHۻMN5jdjkǭ(N3&9y+U<}9A| 3TF,%b܇[.sR9Q}yzCUQTXk-ȹ=_6Ң^x%g?ս}OY:L#NQ(peF )p8 ب"[geYx]7SxAS=u7aMdhs0]f ." 4BG Cޱ={ZI%u*VH؆iKF&(iڱ_{{Tg,Ԁv -]P t-AnlmƦw1hҬ*oܲx$^*T*dǕ-Q^$Ѧ @E:,L&vY[^Ym+:6OX,joL۝ L`ZJ bժx͆570 5Z__IP[޵K/qU󚞜GJޅ> \O= PPPKĎN?n煥U 1؋c]pKerۖӥ̈́5lQ}̕{ U=.;7oأ[nuw?J[O lPkܼ͑m^*Ƞ;UݲeRw õ*lGS V*Ҧ D +}1[\YǨ>k^ﳿ' {lw?z Gm:TAKMn~˟\hk==5nBѶZ|(m: @ Qw>u6cdhODz)/?KlP % o{P*ߦ罽1D mT[7@56؟T.oxkP[_6?44P{s҄5s04mٳ,צe2n%o޻FMaMCAcau^HNQ-z<ϳop5FFFmlZ  U{u3nTۨ ?z=6::lRϋ$uzp7m}I Ba²-,^DDRqKՂ=66MИ2e^0U֢=nsS.zz 5ghV62h#-7(mEUlgwK&TkT ӉRUz.mu}^育f@=.p=ioh2{=릛zٞM}s-Lذ\ **l5Tn[775h|297vlSng-pA.ܴϭg}B8ڷS;i+MK>! @5aOhn{p`澯[$!|<_,\X,Z._2ܥ N/75myu͖l|xв٬{@`)@٫.KߗtX$wyٵݽ}L7?_?r:߬lumBUԗȰ XMew566;UmSխ)PU~{N@`U CdžԄ½m~wӒҪaMXRΕ O͌4e^׀k=+=ְvV7hoO{MOuc?m;|g/^d27.!\Px4j3wnZ[cWzM ڟ>X4rC@^8B؀6t#yA"W{O`ߥ>M݀T]pˬ)3-'Z'>Ueb&mww (iÙ;M5|dJh9Q?sյ _ =F}l] h9TUՍKdSaxhV(]VHԂ epvcNX5  ?Pغf[&u}ג`ԨUė׷::Lm;ߟi8e z~S ./2p.ya- yVד 5ݹeycwo3 l'??u*MK@`FjgR=LC{T T;OhnqޱyL Рxa$i ȫ;<U1P֣l:bJ`l~F0Rˠ$٪&1,,-{as5t]kqyFzMչL6g^=VMx ml1,]M=5a[]]Mђ[q2tbtĆT kk?S 9_~T\ˏd46r&*rg)i{ S_ssgt|h@~w>^UBǹ7^X;8Yߡmj|̢ᰯUXkviT=@`p3X #ڨIwoom?; 2yk/`6p su7~ Y/_#9ڴMsPVO=ŕU' wHn;'[^ts1wv;vb|x'a-^Xd2u?N'_UaD/\7ҡS=uhk ?K8 $nn ]Ks nR` LZSh}VyHu,[O(<ǡ(&Bnxnxh]_Y^6Jam V?=~*uۻyarw]4h^K֣CCvsz /onmXԝ=^{}}(s0!qڇϋUi_rM~ą5綸V1UO_v˘s740dh.uWsr`M_Oځ{> u}ZKE[{a 5[Zu/֗L,QkY,Fl  hAUYu208OpP>:n:k_m:(eo޹zCbU_6qrNVh~b~Z['˦*[ꞖYUsGM/]5m'MC^B_\[o~򞦝笓 /{7)앪TS1d mzC4!HV=nQo[z+~l념b>po$u.zkV@X:j\X^q+YBodBc6uC~V(/Ն}Pl @l4V)T,JNTV:| l_~kWz lZ$F6Cǧe?OК\~Oj^s`T= 5^\>D+&]g|% ~lAyT tj9|KgrlZPœ֙ҍ\ T]W%K`1Ynw @l1H lbp]_K^h~D~6ՂOQH_8\?.U^^Ԧ|ϒwOZz|Cފ5ȋwM؀k{jT EW_rhF# 4B0꽯>e*;~j@!v&ChN@`P-<75ՊrǢO5*EQ_K v18A~tk+CZ4 @ 5Pmy;98v*OުrhZmަSt=KܘO`+ڒ{2 &FA6E.nnm@` pr:qdx77+&0ճP(n*GX jAktxsj=f*z6;K\|Jt P;,YtP Uh9eVUtV&}VX&8}P+k{װ@s!Y4ite!&Ǫ|bvPvc##'TU:5]'WuT6- 7v|G;8~hk{~ ~~MV AZ:,TG6[9h6595Jwn9w 4%[wr~6oǕNi_'؀B_"f .t柶B=$wv健kA=fN鮯jG73~&0Зl㴏MA#\mkgvRӖ否 Ԭ$mЯd$jk^@c)JW ?p%NFW*i??*шJ- ]>zX(x#yA^v.pyE7U,}TRPsMU8^s>wlv&>ک|s# @FuWHԩO殿ӒGNPpSMKTESLoMϥ:ܵё?+Y Me6f*Rۿ}G{_%"!׳#/"S~kEg)#lGXۦnf>~hC'ow k[חHXPx4j N65=1ǔE;WeӾ/R[XGazbш״݆}%7+8걨!KknVc4UoG߻2=&4H{Ɔsգv+7|M?(6Uˡ"ݻ{UњD'ۣ3' tߍ54xNVF5g?Ζ@`A*Xi0{'Eڴ$_NЖ9`m^ nO&p/?phYTwT{=${;L-Zǭ=CcӀ ‚dmnxz\XLWo엧|qtխP8]n{Td~)T_τV*~jef?Ntӡxsr4 @x!){yz>}woP6/fn1:Ji9g谻g`)yCG*uՆ}4v*i}\Xvtvb>4-7ףO:\ UݺB[JBڎ@C/"q;ُ\wkzM˪Ӡgs&|q{U4ĽъZʺ|$u򰁖b/P;ӓr |O?ayڴG!cjscle߽ٹh?uԧBSzNJŽ>Vٰ6f^: 7wX4ca _wSnOOή-mT=Ng\eFy| LCB[.?FO?k?> ٣?>S 3 ?/~{N:^uZNj7߄5U:wmzb>W{U'6WsݜwovvP ^c?l{\s{X_n;{Wzj7oWNnגN7QAm11(pt=zJm{wӖfݲ_~mG^:SUBǭI{0sB+qTUS%K'A.1Vܽm#Ytt su=lDan kY F|d'FEKMFXo{w%OZ^߲Wfpy~B;aᰦ kgjຣ\ZL7m2MaMjFl-m4g34tWf~ҷO"k[~ԥ\:- ͩ5FUC*[|m>| D=3X?mm{aMsct24*lueӓVٱYazb5Ք !ġ[[[ 1>b\ޖV.=)LZ",mٯgZүWiZ&Nܜr5VWWmr|ܜmlm_ǦU\Ǫ~_~-LٗÙ;.oo @} c#.H(jv.BCܟ<8:d ''G@_bj}ws{M}䨪> 4EieX{tBٳt:E@`U}6VԁjOʚ;\*m mhݘ4Igmckmehޝ+{S n+-.ƮcC-ԡQ_گvsbԊf˫kn=z-//Ih~y5}EeOOMеS_gKD"a^MyJC.5=iScjeߝ"!OlgozXܶx$@_%P- F xA%~mګvkzʦdžݟlS moo[@ & +z-I'FkC:Y B @SV7mms޺ivr/زk UF^h(? @ I(<>[PKU/m|7(S 5YܶߞrOdj|Ԇ*8da'`pgW˅-[;ۈtK# 3_yPAOO=m=tJО6 BKJȐxшk ~7mc{ۊҕ|n==6=n=&*"yOM}鼷R @[PaGI U oUan0wJJGX:t)8:ӪW/ijCdžݾD3E9R*7ګueooA0V{PLrL/ zC㢆]5t mSc#|  UW׫poo[W!KJbF6wlhmC@M^t@U B-K$*<lOW7*ZxOK.],خplZjimIHF"<TqrQ*]? h UvTP`euVѵB h=4XXkng T=+|x wjsgAHUE[b]ZY hR鐃MRq @t@ gx>.P T'E @C2^(t4ql.AEa.Zo}k^pA.w~ަLƣ6-U:eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_FIDATxbg"z&2~u`Qf|{e?[p*zrzWM{+ʰ..NZc b}v:f} ڟ) .=`UɟXa z&h ^.NC/߾߰d100|a``GJֳ&h mg4anͥ&QA"QHo(Ud9^DHlһX/zQIؖkm6LܬvY d}sp/}yhijV"&^))ˤjwxSo~>ufF$ "L!E(`1j98v[Pk6՟mL&߄_eF EH$0 hZy7[@~.(W;O޳֠oQk4Pk**W!!Dl~74x3{o^'0XPwƉ%yk\K]i2T.\~暃5_*.xzIENDB`youker-assistant/src/res/history.png0000664000175000017500000000416613260315532016623 0ustar fengfengPNG  IHDR&&:8tEXtSoftwareAdobe ImageReadyqe<IDATxb`@ee L0|SgSP? ''B% 33++###@1b` c3sqq2HIodedf2i`zC}vBdׯAHH+ :`9od_EYW Nf7&&&2x:3x/_XYX_vAq`e430X w eF@{:ւ:@a:yY@FFTTâŋ,,_z +WSab gyf,ҿn߽ȉ8߷{Ï?۷o |>4 +NNN`|񀃁F /Ph33C 3@+ "W&'77ت?Crƌi0SϟCڔ 6 ib * DGz 0bA%E?Z6by&R@{og%,/%Mqv|rÃ}li6fcF12& [LCH1en*%}̠UFxR@ N)8{Qu0DZAwx32c3GUbI1@,Vēm[P*FEVZX*W9c5וE..mˮtVӹbbFo__{ڟKK@g*Uw X=P ~c{g~ QD**^jվTl8Ma롁nvvg3lWV.>6c;KK+1?DӓZHlf5jڿ$=ј,>HǝcI*~/b#^;3s!PJNEO@0%p!~B"kT󐠱-Zp߾OZN|*gB"$)zhL\3T4Juo6xr6? m96&I j5^R0Q^!S%P*x}^*}$'.c,z(⛤e\uL'ː-.b Ќմ8 ᙤMjvAHW=,^D=+?@Կ! "A ź]ڲMJ̤miaCӖ&<`i8ȸ`rgV0 _N}^(C/Q[PvtB4p:آDzYZ:lW/_y @}L[Y=vߔhsiyĵk׵ yo޸YaPd@C=bȀd9 Xt O% V"Y}]c~|nNK#{ZQѠ(T@ZU CBte{ץ@E-GWkGzF~.]".^8/ k9#dm#49]Dٓ|$("*8zUt~Õ%'{rJ26Ojښ`im`&!%&?0dYc -|V )cRK˔=<q](8ZR aB3(͎N =}{+ +XFKѸVY%3T8rX `P ̻uzʌqW lGRJؘ=:Ӳrs%&,,#RdFK!2=8ғͳ0+&u,EFc (,#\ivYux1}ǕR_ 4⟔ʅ'A(:0솟IENDB`youker-assistant/src/res/dynamic.png0000664000175000017500000000517013260315532016542 0ustar fengfengPNG  IHDR43ztEXtSoftwareAdobe ImageReadyqe< IDATxbp fBt"ߌ*Bq3t01=& a$IBu|JM=( dG7P$m!)@H^s% #? @@2JN>;)CJcpQ됁 ^ k34+v@!;s2`@04TB9p$P~  fF(Й0MHG7w?P#C ?O[<OX XfehFjJ"/F+/":Ѱ d@@wAn@& 9`A-"zk`DS l6@"Z##k κנP9FI6 S\Űҋ-0 ;o##3#Yi÷vz Ȅ%.@` -~@f?bV˝n#$XQ4*$#2T5z( ^JDJeȉ[*BNA,yEl)Z `Q 1('xTt@ej,+ bf#YB% 8C)x !@ ON=0'*8|LBp͇4MVZmYRAznQRL@ƒjQ([0A(@s/5H5R Abǣ6!bYD(^ P;T8@HuT JGO̠[Ň^\({%v&+C^({ Ij>_›vhoEH]hbpw66䅵*~\" }-fRT HxWS \Gk Vbdp5{Ў pV۽ Ў3B FS  $ ؒ?}d,sOa͠M9d%]NJ aXr9$5ym Đa.HypUDXsԌxgPKP:;Oy { fIû1,[,qɈ-խdK_|".dK%Ќy%jB8-aPvKKn-.2%]Q[Р)rZA]} oS,YBNϿ * j"\x}B C$*5!KH l8x2h1zI-<0#" V *Y4Z?RC0xBRz C |-Rz$^ԗP Ң$PBEqe9빷ν.ߙ9?ʩ2L,upҾ:B. FP s=14aP("4. y6A]OE?}ոNRk*6h&2xsz@T5Ĝ*M>mX,loA ~f,LpΕ !-ݿw}J, uQҚ$,m #I @X[ }/R,{G@VrFb%d"1ҵiba&HY 6xqWdp6L5͜X-JZ[F;<%^= 3GsS!ǫq"*#X@PU1Z:'IJBoO6&f…Q,I1eXrS ӏP+_m CW۶>&gç+XV*ȀĸZKL-YZA ymVh!Zq ^H,(("{xh x raޑ!\k)N_& `KJB칌N_vS1՚FO| {(4c. ˈ<5J-2D6{:b? "YIENDB`youker-assistant/src/res/sysBtn/0000775000175000017500000000000013260315533015670 5ustar fengfengyouker-assistant/src/res/sysBtn/close_button.png0000664000175000017500000000321313260315532021074 0ustar fengfengPNG  IHDRl$lmtEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp rIDATxkAgQ[4= R͡c+T$(S</IA EP"x!h*UDDjԘfww݅%餘ٔ,=L)ufeNjLGГَ8[* `0q` a0NPqC&7 D|[el랸*>}&7G=P6iD Iil4V J\Jmu'݅ 74aMkW+Z-#t # "њ8,Kϰj4X~?vzj}ZQY>Aޮ Vژ 0jEwou[i|Xǚ eED%Z&Z<}>dEDIgίEDezp,=Ǘř6#-"*d!+"* 弴KiZBP=QѺ,,տC͐HZ(-<-bl ^)=}//г*hRVW.@8ۣW8 `0q` a01ǣ` IENDB`youker-assistant/src/res/sysBtn/skin_button.png0000664000175000017500000000521613260315532020740 0ustar fengfengPNG  IHDRl$jZtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp =IDATxb?:x12@OW ] ]*qil>D3ݩa#mld$PTI^rY=0<=ol ^Ջg 0  %>COgD8#;Qe;4>rq̻r2/ysH9j =%kjA|DހF񻏟AxŮ;b8L|AXXD$Ǐ@?0`ęb>77Oljy!/@_>MTDT0 jb11Bq$P}p>($ ̕y@| c@Ĭ@\+#GԹ8MA7pAi'cΪ+!E7oD@Ķ[Rs g@ş K_8Q ^ _ZN~cNhX{ N.7 sr= _HT.<l;w`qaV`IM9==ݶQ˗-[ lp޿Kjj]V!@܆&^ĵ@Iߺu`Ld?<_ES>|jE5xO>ego_~ `aao#;:9x*HL({{_pqɓ#/YHmϷ?}1ׯ_< .. Ԫ?}d9s^bhXDk\|b*6!6VOLiO#i)$N7vޤ?y;r n >OVУبǨZ= jjGS6a`4FY8m ~Q   He3rsqsnbg]{෯_z;x98Xeu;~>^)dzӕ뼹s_:mݒ,A u $yV(cR( ~h%.YP<,$4C@@@_`3A/_bp_Xyyy~}?u$ǹgr2+ZӧNuqss]nC]}߿`SsRhH???ׯ_lٲuUcS_~󱲲2M8Q+۷oM*a 0Ӏx {, ΠV̋-./-`9nD`S?st钢~__ϟ?>Jf?ML7o5oVmmUOu D\~y.^v𑗅q)G}O:, P{" z`.[? wA_̏o޹Wxc b#X̙3k>۷oRMϞ={s굫cb,X5$(@=ҿia&&&!;;/Ъ}6A(*hjnȀcNBB_靨@ \rO>=IVKkthjthjF(6 F#l3HIENDB`youker-assistant/src/res/sysBtn/main_menu.png0000664000175000017500000000300213260315532020340 0ustar fengfengPNG  IHDRl$jZtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ''IDATxb?:x12@OW ] Y#Փ&L9,M06#ݝ @6ۆF& z  &F4gkWP#y5 E6-z@-ȱ= eUIDATxb?:x12@OW ] Y#Ղ|eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_FIDATxbx6 2x63 3L bB^rB,B¢+n-&batV"6 XTs7 bt?jШAf2KXiMnnRTRYIENDB`youker-assistant/src/res/wave_front.png0000664000175000017500000001141513260315532017267 0ustar fengfengPNG  IHDR*tEXtSoftwareAdobe ImageReadyqe<jiTXtXML:com.adobe.xmp w`9IDATx1 0_҂'(^DNA'O"` .nn,RiCˣPh.OS"od@OU8Gޑ95}7G &0Hh^tC}D%&&VX2N ҺDx8N{p-F7tz+ L¬@Z8dqIHKG@ʢRŋET* ,dqn@e>EoH,OxS`QZJ[^6BZXMce ,D!"ML,"$8?MVH&] U_1tzaԗ͍kU:I*Ga}o~uo$^_x\"Xkh%zotK;7R;7B|w2*깑q?kzZA^>UύgaٹU 򡀌 ͞+0_(AXzA@-$ dP,cFbQ IFQ̃jQ"P@F5 (F( jX4P$(F%-( @@Q@F XzK(dHS^0 t:*q :W@CRpZ-DBBD 4JHzIN'~f_^dv|]؍ىيYmˆlȆl\*x9j-4C߳lȆlT/s3nKb>{hȆlF٘C'礇؎yk] ِ p6J|ل\u(zYϕlȆlt=mS똛K111~eC6d٨T#oR@PŁ'OU*C@ZxHi 6 J.o$ M ʂR mSq@ZT*_TP≒T(oSQ*T(pSqO JjKōz7TPަTPަ Yw~ TU*n8 Tl*d/6_(+_m*.iUP*V*@_ػP0=(IAIݲ3P( 0bQJJJ1X ŠĠ e`A]y}?zbr99gd=1b>|s4XU1Kcչ1KllO٨Kerۘ1wb:X?fwY!!6/b.\u?̻9P#!=F'tm3٘1KWp̻ƹ?.臆lȆl0c4Sb^5zhnlȆlt8sYg7eN,8{1:veC6dC٘q44Wm ِgcPale"fsqqcV?"!mƠCy83 je~FȆlF1(O7Ca$~ߖQ? dC6dkWlc~b61OdC6dxcI܈5_sK̡1  ِ>gk7u?y^ /M|S &W]M1[cvlC6 @ R@R@TSU2UH/7 YRy R)dT*T(KT*$TT 6T<@^8JŋPঢUP`hrx/l*Y*Rq6J,RR_T(TY/JTTt yUP*V*@PZx C T JJ!T*@UP*V*P JNC TN %V@P#@H*`SR*$w) oS*N T\MKE{`SRqE1yV@yTH/27@Rx6gM ]T9\R @ަŏd)@{w"G@zQ4Aq  43;DD#KFEA_fcAa]݋+9&lSc}mMueEYc %udy zc[Iٮ{ɻsI7 ]ܝܕܙ>gY; zƶlFB:6猿vՇ!G7@o Xh*12JrtY{?KsБ z*%yq V8HJzCo0T69J߫tr$yq  r!Byv>us\cw za4a^3^v$k7ӵ97 􆡲<GR99z0Tc+G#n aR!  ;d|DfV0}*5wJ=L@o zPɇGTi]} aޫ9> image/svg+xml Jakub Steiner http://jimmac.musichall.cz Go Down go lower down arrow pointer > Andreas Nilsson youker-assistant/src/res/menu/0000775000175000017500000000000013260315533015352 5ustar fengfengyouker-assistant/src/res/menu/home-hover.png0000664000175000017500000003543513260315532020142 0ustar fengfengPNG  IHDR-6 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:87BA9D71303D11E0AE18A0D517EDCA01 xmp.iid:2786853d-dbb7-e949-b961-1632783009b7 xmp.iid:7267a624-9d99-104f-812e-39daad7c7711 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:2786853d-dbb7-e949-b961-1632783009b7 2011-02-05T14:58:07+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-05T14:56:31+08:00 2011-02-05T14:58:07+08:00 2011-02-05T14:58:07+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 23 23 H> cHRMz%u0`:o_FIDATxb? 0O{򟁁@4bDW 8)MX ?)B`8)0$ ©8:&j/Fd BM wBIR uDhgDO'd+O(m"9 !0QG 'psb";NO`nbqEIENDB`youker-assistant/src/res/menu/about.png0000664000175000017500000000263613260315532017200 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp =2IDATxb?8, b1#\0 "oy#$ 0hr2 0\ @%XG~4# P @fpֻ\01$ >H1ȭW_ N{AYc#ɀLt@0 Q$@ȋ)g'C XБo~;M R@߀ r|l >*0+Cž ^}g Dy @dp @"1#U\F5%>m$&b~ϴٰ3祐,@jnqkI `8%cl3.~ 6 dwgL.QB.k L[/n.ᡒ*$]+ 7Cw"X.(IENDB`youker-assistant/src/res/menu/upgrade.png0000664000175000017500000000247313260315532017514 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp Jˣ`IDATxb_p 1D.0( @*́0% ^fC b?  ! ^U)π - }$"@Al*kc3d#φZ@Y4 > bQA @n@1`@ p-)h@l,/ >Og0@<ՠr7xO7VB(  @\q(BzO\z @zjbbHEdܠOf= H0^A*4' 4?qCr@Ӱe\b(F=E4IENDB`youker-assistant/src/res/menu/feature-press.png0000664000175000017500000000266513260315532020655 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp FIDATxblL@ 0 Fde,P%p=aLȸ΀@n0`L0@@(6"ۑvp2dpU 0-@ ˑtT..Aի@*@< 湉PŢTn,đ w" p,wo$0F5,  df"]DB3x5j'?a XBQ ?#CK A;/dICOl .PfPHM$uFPuπxBS+M@\K P@! 2|@}P 27F pAWhn\h0 Px 5 J{@@M@,2W(GXC/4-@$#`>hn0CT, 9gU8KIENDB`youker-assistant/src/res/menu/feature.png0000664000175000017500000000331313260315532017512 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp wIDATxbdH20_ PĈ YT @2@ 7 cLPAvL? kA@b dK6t;6q8H"gAxd@h&c$evM U@\+E0P .?Z 0- U@Ā >_4B ^rk%@ʀM6-B;@,Ĝ@ ?2P!(m@򰨁ˆ;t a ߡr  S bd!eT,8t;P&f ټO~$)n&N5&S̎ϓ@'€$XЁhr*c$ n ! 5U"j'q84;2zLZIENDB`youker-assistant/src/res/menu/features.png0000664000175000017500000000215713260315532017702 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp jIDATxb ]u ?@1"1.L h c`b`Aҁ gb 0LG#v$62+` \>a0@0 i aIDATxb_p3 "`H,@p&b܄ 2# rd@*h( `fT%π0!uFvC, TA@ :HX&topL Hc P~?""3Ѭoxap&\;@,mF$S>Wb\," G؆ $ q%;'i'fIENDB`youker-assistant/src/res/menu/sysinfo-hover.png0000664000175000017500000003542713260315532020705 0ustar fengfengPNG  IHDR-6 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:0B22DEA9303D11E09E748DC7CD5C637C xmp.iid:b6481e30-60f7-bd4a-b957-e53dd15ac496 xmp.iid:7267a624-9d99-104f-812e-39daad7c7711 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:b6481e30-60f7-bd4a-b957-e53dd15ac496 2011-02-05T14:57:47+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-05T14:56:31+08:00 2011-02-05T14:57:47+08:00 2011-02-05T14:57:47+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 23 23 cHRMz%u0`:o_FIDATxb? 00008L΁b@4#2BQ"cLg```@~ SYmfdAO8 Y _.b?4"m[{'H5A zw8$ Y9у $I;cLTh"9Q%^(X D>$& "%4 ,Tw9s* y=IENDB`youker-assistant/src/res/menu/sysinfo-press.png0000664000175000017500000000236513260315532020711 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp IDATxbX8h X 1!+c)) el\=F@8bB6 Gq"d,H}̇"z EpUL^`bQnс`qwT3?zGcGc"+E ,WH#"#& *DVLhWa!@TlԠ0% xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:D59C4DC6303C11E088DFB4109525982A xmp.iid:f6c354f5-5828-284c-a786-8f6f9589f583 xmp.iid:7267a624-9d99-104f-812e-39daad7c7711 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:f6c354f5-5828-284c-a786-8f6f9589f583 2011-02-05T14:58:13+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-05T14:56:31+08:00 2011-02-05T14:58:13+08:00 2011-02-05T14:58:13+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 24 23 U cHRMz%u0`:o_FIDATxb? 0a ` bDQf?M5a%+sځLi-O:%Ȕft@G-{\α 0D6v ,Rpkm"WwwBLQ *S9GVS!@t!PD_%v S4*T`VV`C !'* E]1O#G{{28M@Q}.tOS)&8O8-JSyyORT~ \C)M >=+`g*p2Vi("u tá.fsT:Ep8NM RrPHHIfQnT^c`ʷM|ށ;SdEY~*{-a*Y< =S%|EZ k %cX4 %7+o*EC#` Sys>OT_H2=3vJ;@X6(W!p27ab*: L 1D,&]H()Pl&uPRշ) Qt,(DB>D[(6筷ܺS;nc u88Wrdua7 G)B)9}^a n] Kt2r.9kxy8[r؍%~4R]AɶS/c^Ls>jKN +9;JN(>IlyRwáӗ6FHZ|NOgabɩTQ c c2F{\phT>c튻ZTSuU)9k&^F+KNkhkaC8'X_r٘ q䴳ӘCA7Fˣ[p /LM IENDB`youker-assistant/src/res/menu/cleanup-hover.png0000664000175000017500000003556113260315532020641 0ustar fengfengPNG  IHDR-6 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:4A4B3E98303D11E0A564909CFE3F1A15 xmp.iid:19188282-89f9-db4a-94bd-eebdbdba693d xmp.iid:7267a624-9d99-104f-812e-39daad7c7711 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:19188282-89f9-db4a-94bd-eebdbdba693d 2011-02-05T14:57:54+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-05T14:56:31+08:00 2011-02-05T14:57:54+08:00 2011-02-05T14:57:54+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 23 23 +JT cHRMz%u0`:o_FKIDATxb? 8Lp S*b? bY߁Li0)vFdIBEv2avG2npEX]MnB qps IOk`D  p2yY3A40t qw'-4/9 W#LT sb,nf$AL&I1QN–(tg#'JH Ig%aml) %ֵDS5ipF K^]C(D\IENDB`youker-assistant/src/res/menu/setup.png0000664000175000017500000000262513260315532017224 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp KIDATxb?01@@18,: @" |E`%@@8 z`nPU(X8dO` bڒ3?}@@03t$PHy@ 0؁!@\IJ@E@ +A@7L@? O@ nћag*b>A$a!K8 *(`A$Z {# &P',X@r& b9 0a؃@ŠX>;_:P bKwPsx;8h(1\o@|AgPzT-8<؄),Cj`@ 6 *X<r ePu]&F09p\IENDB`youker-assistant/src/res/menu/home-press.png0000664000175000017500000000232313260315532020141 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp t?IDATxbX&0 1+) 2(#@ Fd#`FdĀeN"Y"" ,0C@"`A3 `APbs"# "lA@;@rp?j$;,x"oF=FS0@u #n8dEG/ S I%(*3vI, !"\5N=3hIENDB`youker-assistant/src/res/menu/cleanup-press.png0000664000175000017500000000232113260315532020636 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp {IDATxb? 8L "L @4# Ftep FiO`l FtUavd3A PlD0Gbs9$a>p;2@@v@!{0@0bxهlt?'B p14FKOi")lIMB3-Qc9ƉvMRBBĦ7!I*)A[%N0i,U#.{Py_ IENDB`youker-assistant/src/res/menu/home.png0000664000175000017500000000225613260315532017014 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp e<IDATxbdH20h(`9Ĉ2qa 0!F 6ecx P܎ X\r©`[L& }Gl#,cD )wx=MJ$PTLrvFH! #9&b&r$+4> y:'6}ǖ's5/b*wL RsIENDB`youker-assistant/src/res/menu/feature-hover.png0000664000175000017500000003670513260315532020646 0ustar fengfengPNG  IHDR-6 pHYs  9iTXtXML:com.adobe.xmp xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:31BF29C4303D11E083E3E3881F6B8AA6 xmp.iid:72779bd9-468e-d346-accc-e26ab2f8de28 xmp.iid:7267a624-9d99-104f-812e-39daad7c7711 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:72779bd9-468e-d346-accc-e26ab2f8de28 2011-02-05T14:58+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-02-05T14:56:31+08:00 2011-02-05T14:58+08:00 2011-02-05T14:58+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 23 23 RL cHRMz%u0`:o_FIDATx4ñ  }'4vY=Y >bBWL dJ, b?EAu>l 鑔G)6*VTBP08C"880IaSJL v J2-t1jQo@׺T^Wj#VTib)q on@;R0flf`"Å{ md}hzz;o4=NxGS,r˪_xw^qeU%};۷)zS 9~# ΃⸿p㋎Q"( b*NH >"+{-ffl-l,t6 b@mG0s;ϵ~otϴ>EqUyRnY`Y9p.g,F;OLS5v2d2 qX3c7h}\>kGxIE>>< ctQGL:*(< lI`x dY`78y%/U3_`yb;BpVM2 {KgZJFu 0=/UM Я_e^VKap&IRzK@FITLop&i^FyF%p@68Sh?rmEo7@p.Zx,r}hep`̿IENDB`youker-assistant/src/res/menu/cleanup.png0000664000175000017500000000234713260315532017514 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp b IDATxbdH201 ? Fdep Pd@|rdPclȒlflFGvlՁK W r%73XGp6ly|͈+`Ni)(|JXn:6[ WHLH0bð &HL0adL0}~Cȏ#&:r2٫rc!!2 sFBB&F$%MkhH<~oIENDB`youker-assistant/src/res/menu/toolkits-press.png0000664000175000017500000000307513260315532021066 0ustar fengfengPNG  IHDRf&tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp -*bIDATxb? ߞgĈ p$ R@`e0ٵg*E?2[ɰ"9 @u@:B٩LHWXc& E@N,L9ȣ@u SXd{|,4`#Re6C|q-ȡ ?$ 1Hq3s1+MogA'@AIuAwzz ;ipnM?0;H!l,d(X0.(y%y _\&< W4?A@ȷ<D bmM MtA@|QpY:ȞM |mNH+ VZߦˑ؄ԋDX$0`jLDl(F72PLOYYTS-ְ-F` + kPy )䃯D(W!G"4mAb$B5!#+k  zzcj@}+yIENDB`youker-assistant/src/res/menu/toolkits.png0000664000175000017500000000350513260315532017732 0ustar fengfengPNG  IHDRf&tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp +9jIDATxbdH20B9|b bDV b3&h 2 Z@0AhV9Lb" s( u @Y7 ^P> nQFͅuIf ~ľ 3jB5bN(;!9HZ ڐ @\ _xA@lu@YwHuP:d6'@hNR `67A ďa Ҏ@Ԭ @q`q s܁xaj.i .:wBTQ(E<*d!8s+@< 3`NGJ'R@_l @ꄐ"9%4@| )NJ Dɀ59i#o$P> jW .*[X.jJTz @@! f*hne@O+QIY̊d1aeg#5R ˩/ KMd1+QY@SldXe9:s36n=yy}גBO85mI 9LC\? ;pP~iًI3n19TQRm֟K4|J܀ lªònA6tw'8vR\6Z捈X0v3Lۺ,WUNS>X,Ѽx#Mސ`9-ВEUM=tʙ}@旗_d7[SIENDB`youker-assistant/src/res/menu/sysinfo.png0000664000175000017500000000227213260315532017554 0ustar fengfengPNG  IHDR-6tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp fc(IDATxbdH20B9A Fde0LeW @3&kgAэ  Cq"&#@(!D `B6k  X5'H5.@#@6[a39A0'DHrI$9cL0Ac!51Q+^ 7W2^b8#1؂..0BWSa.jUa@9IENDB`youker-assistant/src/res/menu/feedback.png0000664000175000017500000000221113260315532017577 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 7IDATxb_p ?@1"1&ƀ iπ.2 3d$#Nj'VAa t$>IBD#%sXS8 0'0 1A8e<ˣ"-4$yՀY'*IENDB`youker-assistant/src/res/revoke.png0000664000175000017500000000113013260315532016401 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<IDATxb?&B&”  Tݠ޳eAR3;L ^  73~,pp)p6xz%8c pn5 10~KAQBNq#@&cqtB :R.X̞7| Pv#ȯ3p;$( |ʨ)xtǿ(n?T ՛߿d8QoJ J8D1ڏl<`Ca U"S_tՙ/ bTcaPВvػtc$+ápr2iG f ,/~|^}T2Hb7޹ $_P\k*7<ѭg y /Ăb <0[As6i`3 IENDB`youker-assistant/src/res/kylin-assistant.png0000664000175000017500000002252313260315532020254 0ustar fengfengPNG  IHDR@@nAHtEXtSoftwareAdobe ImageReadyqe<$IDATxb?b 0:u򿴚8/ ##ç^e-CVFyg`e8uhĄ ~WTûv]!gsk_>1D_a[&VFۯ~z+CX LR2,_#31)))o_3ԼHd?8E60| Sd0FѓlK 8R:"*tqqsp'3B[ fb؊|c]ksPS)nu]J2%ɴ}fy/fnŚD TN5 [aݯu9Uk\y| 5QaKrrm˃W4pLl)gy,9oNde.vfUy"=Sg Q*#d6'_ҴbSC(a?'Q<OdNcvi Bz Phi-`&>Ǘ|o{ft>7M4 /BO!Mi0 %aqn|RB@K 1o%GA׏oNCuAW+D:A|lXsy8nϻhu]>"5"1& dpуX*㘨>N<`Be#?,p%(gfDGuOќ=iq^Ωs8 =35:CS_3I_~bu^^UCM8^ hD7{Ij 7[PhZxWgE\ dI2G.F!c ze]? VՅDF33;;fT B%DDhDE`QAC=eSPCPC`kDZ?33o&$>vf{UD΂v3!u1{i DD"!0-Eh>N G|@ 2yL&33r*|ϾȬ} N'>#:q`h)jjj-544p($¡0w6ƎfZ dΆDj9rH)+!SA$R1 4f6)UC,CWO$id!+:7-8v fuaJffaY%@zWH&|NgACM K%LL%spK&Wxn|>k2^BpA+& !]aZ\%8Mڪg `JF|t/~_Y*⡲Ƣ@tѫUȐDzd. /$H):LielML]X irrB*^toۈgs7SԻ%oT*dY30­y?˄? L~.*.Df! !:゛u0??/ǃQ8"S^'t F4.?L"6R Ds9&*ylDϯ+j:-o:}{5ܸ/םpۖ Do1jC66;я D߂'?T f^YΚ?EG$^VW*nq/ƽW[2d-s/UϑD.DgIH]>|:D;B*Fz~T4#rQZf8\{[$.0WF)X(-8" Cp@P ;۽HdR뛲B.pavgݾn$SO7k*c XΟ:!Bȩ!L2idlD~Mr U l6v״r|&Wմ%X qo.{__%v\;i8I#4P%U4! B"T*<JQ*/i J  v;xY;t9RďsU38!N^ͧ |/ofo3[?]Z!ox~&H9tg|&BqO=o.@C-jϕJe.?[bovn\auCYFVAXk\6'&L %DDA"لk?A]C-.!Wު-xHS B588xqSUoݺLie qx+ {0ն,`lчGEZUt]ǿ7IEiE}j)qdh>^TqG),Rα,ж݆w984azT\2+DA!X}^\ӁzǮ J,@!A/ JuC *Pi0 nr_D  Qg[T&~Q˶Pe,015\Lgo+V-;NpM:"xIPU3ɓIHWX[k&jH%Aq/V0€b!WB xo8A ˏkf_^6m@j>@o[ט)p &/;5zr-۽ci =i67|L>K$`!&¬\w%H=7LSS-l˸徔6<`Ër}Mdp&桕?jD"$3;1556]dK:"@sy MF0 YѨg6uP)sfF`C&=}ۉ.[-qmY7K+I# =p)X&Ճ6fi*zwa蠮;Xq*..rk 5zz};~4(wӣ*:Xs}Adf\2ǩ ^'˱GƃmehbQe4A_սU~u0ܙg@jayLB,(ǚ-tE`1iz*7EzXnb@ɔ -г| `5x kN . `X6vuEwU+^;֏*PBM'C7߁ѹEk xR;MI2I)P| rjpڡhw" D>_<㪈ys(MiY^ms \yt̷ Ѽ)$ξI 诇ΌJ-lߣ[!,1ͽl≡$>P3)c5kO0MӓHuju྾>e01tލ):EhN@-z}H"عߎEvZ +)9*<0]Y\6_>&vj.f;nԸŹ:.u baCZǦV=$В 5Y.qs\ >3 vΞ΄?w}L'IhԳPZ%Iv֍NGZ&gR̠Y:*+pUc6`͠_2CGWGhA*SR?ЂB^U ?`L#iO "m Y*7astu| o-6JE[˲:)2&NPxJ,cw/kDzk, WXuU2?G>J-=o& Ux:nB"yK'kH,Jh\Q?O>Q--)c K/+m1sSNǏ[n M5ȿ 'hc/hfp-,So!\obhn&Il3>vk{~ZR\0i6xTyd2]^䭛v*V 7c X{l@yGGu4rݵ N,ٶ22]<\Wy WFR5[[["o2P$|jkb35*O•2w ňuA_7 >7QmuϥUl&=w#_c,0 t3kZ?_ sѮNLL >ovzw\ZC`_3\^V]Ԯ_ϔ7Laj/_?_ovDÈ?X !!8xDX ɤ#Om؟?|rΏӢe-Bh~C7 |ڣ3ssuۥ125@/ďw>2s]Nli%uI?xv%1R X+~ڬy0 g蜇E.b3ej#%5?=>gYPԻDSa"dbWw u2f)4\`ǭpPdmsP5-$ t+[e!2h:olлW/ǕKe!*A }`64 ^L+t͑P9SPD, 242MD5Y%Jtg-E <-bzչĮ;Wh2= Rhq(khe{4H2 aw!>9Ox~ʋ~ 6֊iIo}Z:u$)N݁[KVY  GH) ]yȟos>0jT 6GcIniN:FvAx{%)x^CyzgHM1}k<.܉Yv6S 4/?PǍ~8&OWW{\wG5( l;C5duRr8YT@v2'7=D]/=?ϓU's:FOy(9`bL#|duS's_Du>x>u5TWE h`j9”ABu?)0.ZB>wQ[:7W).ƗB(5v_?L].\V / z=+0u =-{ =K! EMm(}c0ݚ6L&Zsg&dwcu@oHXe t۪K]].xصzufgvlU"`JGS:P,ܨIYtN J|>M\l,%eb"pAIO:5+< \t%|iᮄt!Gzg hpS92_w6 FkTkEB`Z+p|%/ޓ矚GV$XrԵ+D36*8SX[o:&XaRߗ]Jn9趕j:fM;A|,ͯuR`|+*@ eٔ)j4=?/|MqK)Orkp >xZ{*o =٘Ĺc`t?)ЮB&@;b8q +,]D`x?Dg 7#ChDs 屄x++"k">oMmA 98JJmZrFѤE'ϝYmNdǎ%KـHϮPy )6d!N$9"@gNݲr<-9i.fE''WK+cSjnvL2vnë YxmH2(:re}f\`c4\<ԋϜ觀ɀܔ(B3ЩS蹧1<vW8PvuGe;*_V- C*XAu(%qmD㗗Tg+WH${kpV8u44o-[h \'cqq+d3whWVq+77&Wc'ڝ ndvEFqGf^]NnV Wd߆+aѥȪT|?砥>BuHDBjlN8GHVsqx<tNK?&߻LFI-TLՆZU]#DLIJ>ts&G:pk_#u5j gLw "FJġw p4+gQ+IO7pt(1 'o?}i{E:Z~JL3E\#yzy3hL6('P w5G50~W_vyf")vtܾc<]=Lypb^9}d'=o|uKP9,\!nDK+&X6{1韚D0" a;L"'/~Ri+,a, ~E҇_C+lo%R"JWRxOM|_RH- dKf+ZqEj%v=61113OFdA 2Ԫ \m/b8P?%}zoヹIlGw}D@ I՗a$|N_=O.8A[9M!^A/΢Q3K8f"Mq M* C perA.cHX{wU*J}tEOA/>Z\?$uirȾT*ŷ z"Ç ܢn%i.O󙮑g yruppK{PKgC3,Fm?VD|o^np=ikôA@$IQ.~ffH$ܯogg\3<=ףE~ Sݧ|IENDB`youker-assistant/src/res/switch-closed-normal.png0000664000175000017500000000354513260315532021160 0ustar fengfengPNG  IHDRG3+tEXtSoftwareAdobe ImageReadyqe<IDATxY[LTGrPQC[D)MEk!!ohbCLTC_j& $֨ڊF$ ^ 79=셦i؄?Ü9sfoYL@SL3m&Yn0ȑ#9f"!!SŒlo&|FGG|]tXuh>Z?L>+VX(==N'޼yCA6Fn>2-dO˕H6]|Er 83FM^P[[; 3gڥK\v- y<53PN%&%Ӓ%KI===Z,X@V:k׮UVVdsJJJѣGcQNLL4|OFfȘ ԏ\cNuuuܹs;ܵC(n'uVV={LQ۷o3gDٳgպy & ---~ZV\\L>ϟNPCر^\" s{$5{uX+ee"58ڍD9Ү]p CClo޼)4$֭[ROϱA{`&v|TTVE5O/$y IwbП/TKٰa͟??fJ{/^ХK,^7H9//_ `C 2@ҎNopZpٚU".~ iS uS2Jdf&/Q/۴cǎxhGRc\ СCMTKK>@yHĠCLBkTsddGn4kf<,^>[93bC0C,_+50.Dp‡P?̓F?Y3;E0ޱ,  : dl|l2_ZZ1n6] 8 dB33l^x:#9No2zd}:'NH4 j@r(nSq~+ U (IDATxb\{ӗ4`,H!j- 1 b; @$6QHeKY)b*?źDFr. C=v*q fL% & =f( ɋ],jhʐ1QB܁^ gcQE,:n3nhhḮ0 %`ab A1 fp@4ce0V29fTnjF̠Ѣl(EhČEh3cFh?ZZш-F8Z ҈(cFI9f4b# Qa,X&0@Vel[Mǂ9']_D1?S̆dC6dluM)1171=WbbceC6dZ VR@T`eW* T m,@RpTw*JRةTP*0T@Z ZR mbH*T Tt i y; JΖH+ǴSbThNŅzv*.`@v*JRq#iʒU*N) Tt yUP*Tܧ@N"U*Z T@?ػ0畁L%(HFRL2ZȀ Yl)uCW8ϧ(w~s~3ҳ-ǪUoT}4fsTl_1Ƹ>EͪUXT5YjXz7Ƭ7?ᏪNVm<zCo7~[U.ßjWު~} _$gzLr+XVjmՆ  P@P@ T*0}`R{QT4T *2{*' PQ@_T`R *R{*& *B"I /rbʄT F=IŞ Pq M*~ @(T|{*& B  *2TS *FR"ST *2\8@*Td B_BN=PdIIŖ PPsT ȅ5 *@0T,PBEs*&BETl`R@[ 7S *NT IT, 70Pq ܤ"U@nR9L*toR1`R5 *60I"abT WU,Ă"Ʌ 6"ر#46"*b!""ra J0 s))<8|GϞH~N~J~HKMIJL>OPdo'.6&:2"<}s s̍-͍&~vWrՒ:cXem-KVſ憹ƖlfG\: }ɽ=KbnanNEe#oF^J/9Gi%{-憹,*% V8nMH_ʆ<ZbY'sssCQ9~@yf:s2 27`IDATxڔkHQ /W*F2uMT2CXI嗈A&IAbY"``f [f۹uٹz{9?gϝs"`D#ވ- H-RI9'oMdkHuJ$riA MRsAFDBO!+dCEN#8[OcI #5H yG@ 2&sb;Hn \J( $@߬ AwC½:2@s)|`w8O 0EQt+ejcUx]N|a3 BIDATxbt0~򅓓H;3_ȐS9u?l̺ &)@ 1mY!w/Ǐ @?'Y>c8lsu~P\@`珟!F!l֗0ӧO`_Vfȋ@T$9fffAtm3r曯 5;"?:_,`ǠHOTUu}.ȎL80Q? W@ ? C~@a O S?(a?PCA$v> 2!K#CT :?}z{P8bȫo;tyd,aKÿ2A)LfPm{oHH H$!xp 9*HXQzA,6E2EUqy_E"@1S:$!!"I!* : BA-$ 666 L@9ށ 6V!=e12T*@GA dO%(|A_|K ?9t!awȚS7Tef gDZF nVW, |?Ddcd ٳg\=P\]]\WW(^}ݲ{_ e(!ࢺ 6ЫwxL?Z"B ܥ  Jvj8 T Rev# #L,1 Hnu:(~Џ׷~6@U aO?~Ad|w?gfeBAU1Ĝ'P> d+/# wϋ>xV"$2-<"oiyR{,bP3e" JdM+fB@7YD3ץ ߂;—fF2B 9p2|d +YP xxv|E}vREE@fIq/Գ,zPbkhJyi"iJw!lP8jm[%!nw%dSVx۲ ;Hg]"݃lP[ *Ѵ7P}9>ĭ*^%tڥٿPRoߐ)pϡ+n}~Y1D̄Տ[π^B,f +~UK ,k@F߯"H L K2lRT9IZӂ,2XYe6 )SeO6bY.b L'|e_~K"8XAq agL/?8w7e8#Qǯ?! _o3>,1QAÑX`]˿.=B?g Q5J0}Ĉ2d/!sE4c%M\a`,аb4i,jc5*T!! h8HTUTڪR.=%U8Nm0ĞqyLJ>af9[/߬]o%睑H9Ssdq2ըDY// DRxPJRq՚d".*XUtc&w0ۙMMTVj9i3P>E9B*9`aT_e.Ƶ?&(#9 2ax|گgi|0p#rsHI Хh sun4kt) N \B]fU 5 R!Hﶦ|k]k ;#.p8hPzxnNW*xƼYQ+Ȝ?k~w5m:Lk}]Ml\(3'y@Zl8/Z_v%.uK,H̬GlB8i )r:ZmO$Ŵlل1ĤA!u;An8ucsPHgTNWHTօ:oyymgeFHԄ4Ϥ1Zv'l.VR_/hD QUʥhFt"`ygHTx(*{}qNΝA’EgOt3zm5wl () Dž!v IO dyF@ gtZ9՗Wa*ue%eyxcGE!ʒ6=H(#_Z\6i/} P/-qDNj2ݱ.ťo=zGczZHPRh:l\u5PƒȮ,|aTYlBH(^y Nn[t.F|X1-={> q"W#͙{EҲ!<=zG,%i;OB+NVo$ %05 W2)GZIENDB`youker-assistant/src/res/touchpad.png0000664000175000017500000000377613260315532016737 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼW[]Wsa.4ɤ3H[| )D E(-m4:==Jy08x1( ?߿,ޘ̌gEjwbjbqqq4l8iE=s- o{k&GBׂy׼b޽T%ˉYx"/q'[bg%)<1h\ e_M}m~+{li`:%ΔU+'l3^('!(@Z r%4^#&9/߫W8sIb?r<|*R!4hx^M5Pkm*W߹+{58>iEF 2%c+aBܘd%#ͻ!P* a廢+*Mo& 5[,ϐ>]k1]L̈0&x Tʚ27 Ogj$pl#8M2ipVb.iĈ7c`4.،U|n.LLS|3o! Ffk!0M ٶx+!m c3^}xϝSlS5O#fFa ~HO(sU0>HdL,Fz\\xgf) !~ռ+CևC[!mK*z!ʲ{a0Xځ*&T"`H3M2[,}j2P5 l1_oCrJ(R!1Êg]S)4j"[Ns ؠc wTZ=*-b֖ ՞ʩtz1iVrjn|" .-5o~%! /`e YJo,k9苅saӏ JSMpߵ4*+X…4*۩/ n^W*y)Z,4{ Z0aF _/@H%dd* Y4bS T[eHn9l<xSؑ#G)N$ۗb.~zۗ&Emz{tF׫͍ە.YVVil6Ijm0 0DW}ޏk~5oRպOjGI`kѯB<1 IDATxԚylUgIrhARbERErF b*7(RHUCh""G1h4ZW.5ngyyx6TP@z=|6D|(tF? @-T+C?mP>OB>0<:`g?.`,8 @%6|:p£#3|'xZcAr&(-Y`h\zy||>S2'3ފg9 'B>;+`15೷/J30Ԓ'p/_㙡k20 Tiɗ*eB 0 RGv0dSv `.بlsҢC,GGu ǻ`zoC`z?n3MOvoDE zhfonTK̾f;͐3E8. T5K6LS*ׅur@kzMgp:|DeD59 Z,n=JGpA<g큡Ǟ> ;VK0(bwڒMv1);{Ev&4oe $߂`oh$m/UƔnUsEw T{ h$ЖSSK.#f7x xeԇ͠\v=T4FTyB+B\NS~ f~Ap|#߯Z@Ό8gVf| } egX2nu̖]>7p}m8$ ])wLd~ĦGR{YcX@$,?[E?;\"LJRF~~5Yboϧ,=IQC$k4ZܖK,H2/ *{fŞv+{[":t\Jk{Tp24cʴfBG)# qzF$˾Ec. ӎXEj3XJ{s_M'xe$`ORL pC:)ӟxʹY8?2c={WF="&Kޗ=5Y;FkTTkKY<υŞpʊ8㓬z?8]Z#6cOCa6DʾyO3_'[/7[n9wW)dBLz7ۢ%{W)NiF~.xC3_G̃Gͬ#OjB=ϮxIޟZ~{m$,˸lؤ/op~Cb>Z%@'έpͮ4t^oC9DVO4`7()nIENDB`youker-assistant/src/res/menu_selected.png0000664000175000017500000000212113260315532017723 0ustar fengfengPNG  IHDRtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp ncIDATxb D?@1L Bf@@`E @,$ 90 @F>*D1 iI@AlIbbg\IENDB`youker-assistant/src/res/arrowhead.png0000664000175000017500000000154313260315532017072 0ustar fengfengPNG  IHDR!ɾtEXtSoftwareAdobe ImageReadyqe<IDATxb`@& @&* "8`R@`˗~2Uƶɓ' @}bD2lÇϜ9ٳA6@m1d~ݛ7os2eJ> 6 f9)狿a _dcssи@?]~֎;f>{5P/,g}}}/ ; 011qʿѰli;`@C޽{%0GY:r1ѷt``mɁի7,,,@?Mb=zȄl;w;::&/A%s&@00Ф#)!!嫣S ?[WW r57~Y]](9@ (b?w"# aqFWl_~M F8`'ŋ@u Pׂ<.\(l@@5@ S2 .:{-??#ݺukSJJbPWFheH bSNa3n{zzf{@.(-8u9r$֭[;i-oݺu߿O  ~p`L BΝ۠`gg/ qev\dfi=n٠ET =4Dd%,c d%S_ԷIENDB`youker-assistant/src/res/font.png0000664000175000017500000000442713260315532016070 0ustar fengfengPNG  IHDR44xtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp $m' /1&ͬ\NH[RFL j7wր`}bzu˺4wq#``ź&%h2>3iI+%ffVj*>Y zσU}/蛑{`>ةjv2R_)?A7- f߀7*mp jפO뀂d/[V:SF_Ad:>G31*r)F+'Hb71XVcG)4?AL?mZ?w }"z¹g`6]mg͆xV,K߻tAI0} N{w}ddyv_++7Tl}'HB br3~o`Sļ_m+ג7Cd@ka18NoEwOLrcjɞa"xρ#e>4(n0|BjSf2)SAn*/TOӇ,]sHbWr+΃$| (V'>&Q(+紬s\z$9ќɲYWޘʹdkX1:Jޗ^lGV.w {Msy03W4յ+cرy&(XN h^`v'ZA IENDB`youker-assistant/src/res/switch-opend.png0000664000175000017500000000403013260315532017514 0ustar fengfengPNG  IHDRG3+tEXtSoftwareAdobe ImageReadyqe<IDATxY lSӯر NZ+#6#j ҎhS3mb6i]M()*HUZ@ Ztjښ m:-, [Y * ICA;;~M[?>s}NUUܰ߀87oYNr`E X/KhD,8靮3cJ G Ϫtt ₼'\l ',\l6($nr0ނpc] \oȅϻ8{MJdh»O b۱FjcU&,0uFqKt|n ~3y6C G{?#Ca0VTm M|Pr8MD p>PJT e$CQqa7^}v?T{z'iCc`2I{,E|٪#ĀI~ʞė?wtoȒo[Z>Š|Yjk} "<^Sџ8`(dbźʭV%g&]sܼY%|ne3OwW1-iO=}mvTX*ڻ!Pᔹ( n?͘ LVH Gn;8RShL$07lQl:9!K嚿m|ul_PNp C~f(ʊ|8F``314ft$IcT5D-L} g(&nޫ m8"m v֟[JQWs&23mq`kGsG-y.ϖ:74? +Ug G Qbi BXJh7[? u p 5k8%Ǝ[*{5W&y s*ik0":&jlE*dpBLcEv@P 5ZSq[x mvcֶoլx݅=baED@y0I۪V?Q(on-K4-wEC/o7 oW`(] Y`<0kә @SN%te֊k+D)zs'Rx..Y3o.1,D0;erF=&괹fcbd3E$ v*J u֟;ߎ5C9[ֵQ$|'fsSg\}]ӃKphKj=87rTkcҚ̡7ޕV|_ZR}̲_5`P1NGHҚW' &Lʎ[Kuc9kk˞oMhE/aۋ3wP˃ṢچjBD-/PEQSg\('s5)t^IːW=ǡ}ۏoA6k3"@$br<0CVգZme bh"v1+1}PD?ǙKy_#4+# DJ֦m+ߨVC+M?ֶ??kCn2OaV^7e Fq(^> .G=;73ʆҘS+F͓[Ud{wv\I!8Й &_On{n=8P _hvh9Zg--n_ommXAa&{G<dfr1xr9&z}83se-I2"#*' {a %"|j;ܼ1ҁQ4)K47u #$7vIDATxb9sNbH0A<@L@"}&F)^()rJ LȸĬ u@*oJb @<H* i}IENDB`youker-assistant/src/res/using.png0000664000175000017500000000472213260315532016245 0ustar fengfengPNG  IHDR$:tEXtSoftwareAdobe ImageReadyqe< tIDATxbg-ƀ X@; /Cf3W^2MfVK0'2Lʻ A kSpL 27`<~gb;ooٷQ w? L rKDm ]1&;s 0[WA^&v آ_/8t+\ ~x#"U3> L) ș/6v&0. 0$T-7B+`73C63a)v_c ̨@,| ,lxÈV\{. JoPab`KBi {0 ,} >$8o1@g`7T 0_Ľ ,[;hbOTPqF&X٘@XZ!R& R@Q冧YdqvNf! g*` +X dG@`װΟ~sM|*U?{:BY80P@ &v fo|[pQbhXR@ 6˷(XX._xd~s}ch|m .ӻ4f]510gA j!g,Zx_`ËDY50qB25Zn (SPJlxbld ̒` wyu7qjj]XDr ̊(r qtL0Z mLQK`,jفb`YlQ޸tCae8KN>` gϴgf˟wvnb?t\:)@XY)6Tr3j/|T㓇׸&1Z8={ R/bF~gads3,20@PHŠ?~0Z<oK@MZb7ן2In@)p`-S?`@fZ?`CVr A` !qv^7Tf;X5 7Pp݌$ exCFa@5\;8LV콋"~ٚF C@UKmb.5`/|.񱩅#T*"):i *[ӗy n @\*<' *al^ca\px y:x-ѕ# `uʄq1H*r b;0kY^e 1w$/@GP?p+&vVNppbgAAS]܁3 >(.,tr9y ̲eKgB8`mkVZ[ٟ8pw<~on} Ww^cggz%^ e $`vCN )X?ThPԘiP l %?6&!\!-y>r6`1`>!P Vcg^h ̇Y' \X/el'Ot.{t CGEaqkrCa!ۗ?5&d]amU .` e,~ôk -P+_!q_zU(}=_(C4A6Ȣp~=:;fC0> lÚogXy(5BUX ,nšlf5@RIz&Ԗ'&Ą-+BRBv#Q(q#C4]ңX1!;g[g;Ò;x%HQFNSԛU$%LX_uN`hv\+>E8 1NCR\ K Q ͭIPBq Iz E׋K!9dN>Ƚo *!sxLm"=:_07/ *$A@ ^ J%@΃Ag11cvo+qr0||vk 3-P&Á`yZ8_闶]#9 <,@X=Q٢˟._D=|.p1Ch[7 `'{5Tw[*}e: GTnW<7/P䩛״bvQSTVe|E^U7fAc7 _+z~4T%ydxTM*?T]?~ck+IENDB`youker-assistant/src/res/janitor/0000775000175000017500000000000013260315533016054 5ustar fengfengyouker-assistant/src/res/janitor/software_check.png0000664000175000017500000000363113260315532021553 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp s IDATxԚMHTQur̴AVJ+k-t( jaH %L*jFԍa " Tr,Fcr9w=s1l$ P+XR@`g |768!@xd- Lha4p@AAz( pi\v!#@9ψm W@.3Y9 `/6Rp,FР@b(r#4-@%&UցJYh h4V.IK?< j刭 Q[ujGbR84`BPj0#{P10~$4+05qŊP {IDATxZilTU>3}hڂB@bLPT! I4DD}AH&!,DQ *T b1N٧~N;Y'9=ռ) \`4.ʁ@РtcIj`0P$90&30?Z~F-ȸ^*> 2 .392=x`P LGS3Jx 8'Y44|< WDTvSHL^[DkHhZc$7RTMv[點ycMǯX8kd9̏ңF~6n&^MK'Cv ē٠qѴ&_V\`6 eB Z2L ').yN*T'<:?-L'Z۳-4*AKyz9B㛱}x+DiUC`DFhrA^Vod=Ί{`Dl +nz:{ȨS nd@O18lWMN7wz&LS*0~_kF MҒQzw8MNjv"=Ip7a=hblmIY# NjLltJMkm.Ic7 Nra#Bh6 &žq 5tm^ ‰g:}Tf#.rYC:$vx*U_cA%(7UOψ7TYiE32-h) sMiz*5XDg ƭ0fr8u5.bIFEQ^S+op/p稲qnV%9)@&>q"3vbe8MsL28$|0 YՊ6$bUv=}aqNUM<s]Jnru-1r8 g^-N7@-ΰv NY)-vOZa# (#I~Ve-j%[Ǩ)葒Y{(Z pI)& MW8XaTvHkgW"GC"aFʇCs)>\f\ks*ٶJ-fS\JQZxK@ (1PdBj1q4L;-Id)eR P$SD T +Tt#(׉K#%W*#ɉ&v:ZeU\==`(:df#43},#0*mc y+@GBY`UhpFw L%>67U'~G 'T\&=ӡy ܳeyho"LxYH?\<`mcpT@r`z_HEqU vcl~mDDxxʂp:q#RKo]d/leCYruAY"~ȤO tFTIhb7m>"1POD^7IENDB`youker-assistant/src/res/janitor/debug_check.png0000664000175000017500000000354013260315532021006 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp IDATxԚKHTa8 tLjST 2(^PBH ̈‚cS. ZK&iSjA%XZ?ԙ{swgOdB,`X l*ߏ= |1$fcX _pIDATx̚oUƟum̅-,Ws@HpE" q!,HHDpp+ L-NjӶgzf;6%}MwիW1)4 / U_%]"xcs 8\$46[Y7JĺS,J0(Zp.$ƌC{Iz_-x~Hm |)HWN3x~xVauzs^ )YN_\|'Sg'qF xD\5:EDQp-l&nG@}d6665n C;]TUXXzzzT{{Weee!Z]]1n(" ~999ZbpDecYZZfffTЄ333ݐȞ>pr8U__OLLTiiiQeee D^^JII ݭbb\p^/_y7F_g WVVMmy"j||ډ } l! >X^8Җvvv9q)0::f!e:,s USS4Ab8)F+vqY[[SIIIGaeaYColTFFRmmm6#9aAB]zXXZC @xŵ89{!KKK'fA؃@H)РCDqPE{{{O2 0^ډp X&<L9@ajL= wdd$xFa jkku0&"7{؈drrRB@-Ţ |0c`ܖ  Y[YߎFXc=H X .@!^'Mp3&X<lA`] F#{ByW,`\%2d~% LM>t@ yXӫ,z*{Re;"A6&9 { [ h1V_YaE_ k(I< :Yq>u0ff#-랛7fkʺ,n։}SR׻  =r|+9ISaELX~^D[eLW UnyόA;sWޙ"=.lI\6KANQv)/Q5]:%I sK&x 6JbuS߳EDqf]>B MpQt|FAo ep-d* [h(']gIENDB`youker-assistant/src/res/janitor/firefox_check.png0000664000175000017500000000576713260315532021377 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 첌gIDATxZilTU>tߠ*( TC!b$Q `#QdIPdE! HA#)PJi;LiySоw|iι,߹~s| @@{) \.anSollµ`" Щp{@ 7F }#i+7$:q-qX >JxXw q N+=:{ʀ1I=>j  n:4ʀYZ@ON BY0Zd:IW"tS56_fާ1`%~x֗K`р6fŸ ՔvfYݘXE\(Vշt4o0ZBwK2dT@+,~zJ<DZkeQ"(Iqs?| кzJ~Q^Y 4_Ma˨^oX ړPB; u0➬~tM'.<B1A|@Z?>9ڏB瀢jZrUMF,ķcS70M\U2 JYNTЎ%E!W=2t`_|}wT{AUlD8t*swӕ|fhʐx3mJ+߷ӮgNwU*Hz~DjuɧEw1>.iHO [~_{˫)(TvmI4]b(jP ӒE e,p P:R`euë5'ݶWҼ0Z?.vMkNqW#_%+΁nss2 c8,;hS7(e>Jq߇46˨[/zXMa-#\'A0ۛOZ:Ч34Y֍:F"P2BKZYS 7D8H<*DYy.Rqŏ*jA%H(Э0KH ǀfsZ^ \MDrm3Ge."D$HjT4T XJۄ[tᎶpj:vzrPAꠣ kxI%%t ;@:z s|Fn][0 0S*U֨(̓s3+1WTӆ7iJ@6m # Sܫ#/*&L;tS*Zg7^qbLX9w ;ym_ԕpzB%>ʄDr(^Rl] [L3epN*U}@ړx`#ܯ&%$(_4eFנܫ g##i_F]E'hj]~C$)?@G@uYryEziP-_p\A׶CFyQ)TY#s$`{jtSsB;3'u3(w+/b0cGnubW uvׁZ0[\36ZVop gnXUC3B3wH?2RN+iY\DKɟjwm?$ N+XMeUMFþrt,o$~K ؔ_R6 ?V1}W\퐒gA6ҡɷ)*L)x25mF"iGô\O/љ^a3V=V-T Wh},ͅ~rak6+YDG/arZt P*9<{ŒWH(8 a2F~ 5/(ɳoJd> ?:^-t"YX3OJkt[ <9]:Pc `%cT>UdCrBl~b h Ҥ2sDUTY@`ܢW gL?OsW ~u)o䉝X%D6Vtn.a-O ТIENDB`youker-assistant/src/res/janitor/chromium_uncheck.png0000664000175000017500000000526213260315532022111 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp :}QkIDATx̚OWσʨ" UluaaӦ65i&vI4ݘM6pi  y>}173|pd$Kq@Q(QT$EOyE7p&{U<ǮU+/f Sh.${.Oq\Vŧ!X IR|hHXlv()Rd$ރ{-*VTI/kWE,_QpX"^VN] xV"ǭN (UYa?/gn@:ĕ&8^b XQ.WH]/.f c{ܿ?|8 7XSQQ!Fɮ.yt9󡙣$Z%g޽x~rrR222dttxF6l`>c_^jkk%??_ɋk׮ؘٳG= uIݻwM644477Y]+eee&OPޣVi^C^7],((0T[nuwwJqq͛ }H;wA1(ı===RTTdA;'ۋ2//TH{q$7<70r8$MiZAፏ%wNN3uNJQ(B#GQ=})$3J#2JRi:u0T"›ij;T"g'hbxכHNRKfݫ-xfpANٻw8a s.=zu9AZvŷMQx<{+OOϋ!hwgsxxҫLxN$.P^Q3p=Dlb67[LIV˗MP*RH+ ҇sWOن2{zF`у5t)gC42ͷY*tTFx[E&X剚TdI׮L`d,T6~^v[ glhllfynQmD3 "D&̐Ў:OvDg(UaȎ贔O:/NPJq{Y$ؾ\Ѯ "m-U<3ƛGڝxj[?~8 8bu 'p$'"PDNP._:H eT_[m~[@kbnkO,\KEքˢoe1bɸG{b0ٿ;gQ 5v1xmF;`y˓D6)! ݦvv-/crqdIENDB`youker-assistant/src/res/janitor/firefox_uncheck.png0000664000175000017500000000523513260315532021730 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ()IDATx̚OUwI0".S.ژԤmMUvѤiLibn:nZ@hDϏߥ{!xs~{SZ[[% R88UT(YiŸb@ѭKqF1[+R|P+j/mS(J-ooMǒ{.RSDcE⣰HlPHOU_+e$ރ{%ˀ*ӓߊWVj_hbuHȀÊvju8/YVxVɀ'"qkuzf%5q:b# @Q;HEEܹSdݺu^ >\ fRH'iiirf|ݿ%ruǏs);DFSSSeݲk.qΖ)..~ⷉ 9{#YMO#SP e߾}LI1iw^͕͛7G=aaA^*mmm󹶶Vvo[7.gnݺUzzz͛dƍ2??/#꒺:9LM#ezzzࡡ!52߅(xO߹s|>wT"o߾m10H5dtt8nݺF3Ցe^Diry]\ݦ~Va RJ^pKJJOQ5gj~=)--5QtXOĀ4Mɕ+Wdpp e|Д|caai 5S!J(2}}}rכTBp98H T5Q㎎F~C0"\qٴiB J|6@*`$C|vDXp)Kj H|}kZvÙ~.cFER/]dR(nc =։d*dLDK  >'idyGqF^aH<6Lb(F(ifƃ7n#3c$Z&2A ]<%g eeeG̘C1wL^e lKtW/\i)p4(:sPc tb ;RJSriK ACQ ַ(axIw-R2tnNw[A(//m۶VI-TѼ&@o=(œ 0 i_``` ZKQ&Z9"ÀVe4K'xޅQ .#<&Pb6Cp=̒ hYɑz.+9DėvB\j0766ސЉM޳tvOll1|zs X%*ctap/=ȍ-ok/e`&[H/$Y@P'ݕ@Ө ƯGeqY|3(:41Cyl0qX[63e6_(T5 1Uy|OőghgI\ @+޳֯[@W5P ӹIDATxԚoLQϴ)S F-b`XYaAW‚L H G0aӤvC?@-U -`DJ2nrܸ{7d2w{yݓpナ@sAK"0L Ǡ|{nd&w* Zf6tAL8f ށ+y7eX=Mq:qxDikL:@3x.OY<[SJUO+6!pP(@*9Պ[VH:œ@ODx4k0Du8 Vގ`+xF_[ ZtGjcᣟd0}{!,(Eh/W^<+=ic`d8ibMIs N:[^{H08ەfFP#4F2`>18k48 %0<=?gm`^}@ 2Oz2(@xgV₲޸$63Q?īr5?_tJ/B).:vU qģk bc^:fJIXN-$mi/y%(&0{œjIENDB`youker-assistant/src/res/janitor/apt_check.png0000664000175000017500000000341513260315532020505 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp  r2IDATxԚo QnWl=5*^QO}!n dC$^%!Ι.wh -Rr.t( !pTK0b 86  ܃ZM Xj#96j,[T|Q'r(BRK4y2'*^V[ u: Trڎ[J~z_yդR'8 !+mx {iPShWDhVbm6Fkњ1lr8W-40v;J3Sj 4Qb R e/z4B-Dܧo|c 18^8Wv3E{*"S5OK%~Hdy~4 2H< ݢYs̄!ZVg5?_8+ZBv\:vY4l( $Z83mHײuz;:&f:Έ rB58lGC\-[zY `-O؋=xyZjPҙ URcmh/j^nRF2 ?GIENDB`youker-assistant/src/res/janitor/chromium_check.png0000664000175000017500000000610713260315532021545 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp .܋lIDATxZ pT6Hvy'FP³(`Cm **VjK"Ei:- i!SLJZ5jXynMl\wgdvk@Sb1( >8LD]oolŵyĽ=xrߦpb ^ 6(5' Q>XIb 1B z"ƄG_8akUNrQ}eL'czk-㿾nԸmE~U)W `Ş&fbl$dֹsγc|llE3"e'1~P*5R D@0RPv?ς8Xļmux\]P_vxcH|Z. 7D7aRGf IM5`Ȓ4ܳ|w Xغ߫BHiy(̰1zl%{}=Kyxu_3cO`+ :?JcP٫uٗPYH==_jT]cԡN,>NnƘjLȄ=xSUZ֡ jZTƥvp}ʋknjuCg;xqZzƬ"C ϒ6Y?RT F8G/?nwS~:/b#DA*&H`".<3vk }# w\VaeB ŀ tS/Vja ̊ !HxFQoZ<(g&a0N%Խ#URo ]U ){ϡZ1.s[zRdT{:{ϳI|蕏|lZMⷎLW%æuuYyPkueM_אMJ?u3Rae%o.`_μTy9T yz3kaƀf1Hv*;d1,/l Z9iEu$ryX Xe$ !IR1AYv ыz+l(j ]Nף αnRE%1{j}YY\R %x2++\-ʶƣv:]Qɏ9JK]5q+NӈIdxu؏2U#ZE1ǫfh@MMeyWH8\mLܥ;T#[F5 ċqݍݹdBd.ujTbUY;N*%eWܘʭ?nhěSI٠M=ur$C-9:>܅iNEҵ䏨sS4c~F $}FEIOuV)I)|G?C_H} ?1 Yٯ'PQ⻄2T^H]':>J|Oe|XU}>XtH#_bO6,儔Z$kDH￈}bnJdĵ U}8J JSz"IDATxԚKSaBMhL m,sVպꪺ(~A]VBd?$nH)J4,L̜?K왜Κ;v휽y4:DFv#vd O+C"^d\kf i7 'H53Ćc! iE!ԈHWfrB 8cE&b."NH mb H.cBW5mB)5  :d9d^SMd"b8s!z_yqdFDr bd^j`yyy0== ~fGTdv]t8ZtVq+NcX`xx 5 lU/*Rlbffd2Aii[cT1MбJ03|g__VV*!WMʥ%DUUx688"QDu؞=Um(E\AAQa`` aSLNNBGG0|VWWCvvf~mFRsP\\,А0B!=  tvvBaa!8NУdgԍ,҉S\.ZZyňWTPKh.2@ʐP24{ҹH(iV ܕ*3j]'@Š )r.> d.kEn۬5E#͔X 5@sôHB4<c $D⃼/=> Գ&k95d ͱ .Pk5H9:}W(91ulzo㉜"\Cv"$P~K<(7wE ռ+¯g8~`Di&ZU&&Z҆guQnǫ@/E4_,/&pIENDB`youker-assistant/src/res/janitor/thumbnails_check.png0000664000175000017500000000402713260315532022067 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp EeJ.A4pQEhHt%& W:$v pFKsb d62oKV:zEĜo^i !sCZb`&z?yeDsҀn櫇 dd_'$y#F[RihBgzYeETe͎5p # O5Ҭ&Gk29T^( B M-BCwj Pc7xmF2aFzYij $IQ`riL&cĿ#L"Ʋσ7(5)54MdOW<+ҹyt"KQ9nmҳYEiYVicQwcmM:j/Xz`J4Ҫkqԯ[\Uj ʨkl=wҔHʚKfBF-;=rbq7ͯ} tF⍺L޲2*6ʸUCŨZD,;?_mg&1@S%lW[zNaPiOp4ʚ+Ah W9daP<:F HM~8jtDk:$l!푝s:Mpw9W4Z7uCڟ3Yss;5!N0Wa /IDATxԚkA$#xp 梂1-zP7Ѓ4&(UQ(PGcFB6=U=G=|_׫y2 6`)Xf x ^>8q<A±3\:e(!0FE x*"#5ރ^.`PDGcim1 r_|U lOZ_6]]0\wDC$]&hQ4tj` i^J0𓟮$E[E| ԉa7p k;d߂g)qF}c}SaSq B-惃7dcj8J^ MdO4fR {<<YgIkvF7:29Zjۚn^ij8Z@(s)rP=gtS 68XBxt3G{ ŕB1GS4ea|T&FRac{අ%0h/ij@ [d_43+q/.Li1pu#Jj yqp8ᒘ }AT\ }r?H׳uzN|սjsu=1w9ڧ" -0('[(]jD#'|.5PEtV$s$oK&THoKd,lO MIENDB`youker-assistant/src/res/janitor/debug_uncheck.png0000664000175000017500000000352713260315532021356 0ustar fengfengPNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp * $|IDATxԚkQO&M]*vM5LbQqJ](/ЅR.]HMQdkZUjmV*;IIG2́f{k8@ #H x{ׂS \\k@'˂$m{6K_*\r/43 pk]RAz+y0 ux6P ^;O_ຂF8^Ya 5p<x,4h hhPk` ͢,AO~mFO*bg `Gb) DKXEjY𺁕 h#)tBSgTj*rNsN D<NN̛ШA 5l`Rnrn+ujq mx"22j@E3S)TcShˆVLoF9>88޳ p u[U ;$W\.UXs\NڎW |>U{;k햿'q) Ͷ@__e2Etnh_{< 455E433Vh`Z!R$t:MT٬bZE(А"&E+巔,7॑C0y7Ekn+y!B=77]?*P IDATxԚkAߤ!H=PkՋ&Oԃh-PPl{Q䪒Fm#M"k#ىI7?Bvfggwvvqa vց|$G0^H=p}׀(%jmY0 '}.e/&ؗ @j]ࢪ{ pLc6^;S8k,Ar^F O*j<12jD ]'FOĤ0T3ԕ4׈#{bp-4pl#cP?uUV ]uB"H9]UX Nt@3NIp]>r^ 5:zkE24Ϛu28i.G|1.:"5`0Cv] jgext"\O@VbRcccz\$5)$HPKKK:\$4ד]z*۹IT h)~jmm%M#y;s=ٌnN)@ @.(Lg2w6AH2稀܅m pj [Yֆsac641Omh`XԳ_6 cTH13+q/.UШ"U R+NM+P^v_op`yDX@ c᩟‚b m!"&jTJ,UX.#{V򐈁`='t%GW=[֜ol^c+}PNRmR>zX WzIDATxԚkAkD'܂`zq =yRzPŸI.0s5(^4(PGcFB|:0=7]][WP(X` XE`> `<E9"Fa`>hd4(A1Q%x*潔cy$w4`T1+ *9֚OzU;`gG}0O^C6W^18k18( l 4O!~f`zwځ4 گ(>f%.+Kj3>C*wqpQ5J%"&xCo7 =7W7Y6}@t5ФE]ˢ(r H%%(C~:w@0E *hCaevIQՠJ] e\͛??>9yoggg|oP;꧓o`#}zӟƵׯ 'h@C"r&"s~~~@)TL+ʲ")))))))))))))K5#T8[M%czI DJ,K@e%$T78n=68n=;j'떀T] wuD}gYM~\\\\\\\\\\\\\i2ܺsws“ &hhڧq2`mWqC:m`JYW[-pm.*u(m+eN"%[7)}}ufՉBf1o^ ooYn]6/p]tBکIk~/"4 f(vSvKs9Ws2y|VMq2a p?]g?c׬Ӹ0m 6 4R`!ڵt燚.Aȕi[fӴ4C5 ^ߎPm  Rh^vrUB4^ ukct'"/א;T6( 4/|r 0w Eo'rBhķao }r\%k-}[wk ߅U BmW٩>&6tߦkdnj k4L']~ݓiYv1.t Z\4w†sYx3& c?µUï|m|qۇ}smݫrefh,X7X媄Ӳ ` `$Q$s׀Z4 GBm dY@_^^ ݡu%l{.zM0b8sRZkuyy97?~ `IƷ ꅮc 藩^YF9`_ۯ/..iֱkx+e 6 ?*IxKk̞xT.mnWI0,?޿&P{X!ʲ^x,})%z@eY?i҃5IeI&I l0Pi$I(H%RIABDAhc@BUVʲ*ֺ,L&EYU.i5AIYNK}?UEQADW<3gy;3 G*~ɷwV ^`[WG<3oT88;}}@Pr# ̽ q/<=ϸa.5iLz;^]s]9g;o`_lի ?#LlY.T U!ʳM^]j8b2@g mlѠ]=(Á *1937 |9p/JZSبVm JsO5?]{ވV\w5LLC]eFg=IfKE&iDӃP'?|:WxiFrTdʚ9jy4k+O9@@w{Sb}1e9~,+TXO0r'ѝ&́.B/xFW{Yky6zG?8<yδR9ڍ\+tfsGj#T:{UˏF1X|BIa1t~d,} }hb-W#X~Y#&(p<}Fe V#h{h=v7Fj`Z#.])5HMʨT@SIIǑ?e;Y3ܯmv Nr YRތ} 98;V K(;Gc*H3HEΫ bdwe=SDNip4A媽= 9 8ʵ Tnދ^pYY\slJ43* dosX͍UWgN[Z^Fbhd[NV̠ح^0X;5@<ْ@. )!2 J*6;]8SGQ?~ZȓsRUP;yjT6 {a {}x'}zQ5a~%ba5/7|0 xRajf`lDmJW cGǖ]5Wc Bf,2* -7TIy~Ui3Z c3U$)X&P"ix+k3ab}e'})ފ3lh$Zg!Jp`a]pMUv3Xΰ tx7)ttݳ1_mɗvT~}nO:Q(M'-fnsgFp܈>O\K44I}ӚͧD˔8%/CKCbF,Q@)Ȃ9v-T;mVETX5j|w?\ k]U'$nG@Cc9P'av$sPWx8v8.oa7]Zs;`X]c8q:p.[[GlzC '+/ׯ]X"sX| mtٕcai+Np91SyW!ƷcfG]M,]V[7V[7HxYjeo/dI/E}@ɀ1N݈CSHH50E?|'n6{Xkeqy L4|IDXR_p=wi;Gvpx!m"ꌊ&=ػ Gg-7S[C4u߯#n51\|2%O쩓"ҥK&*aU4f3`f'GqěNPckCiJN19'*oGsq@JXm0|\0leDC911!F &B\fb4 ʏ{VvbY>#I|}8 KNS)Jh]IXeyO~3o~? {+IENDB`youker-assistant/src/res/hook.png0000664000175000017500000000250113260315532016051 0ustar fengfengPNG  IHDR(ԎtEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ānIDATxb  d2A2,@̌oM0`d$ $btJ1L@%:Hbd@9 W$&>GcJ$Xѭ bT:?@\Cak,TX@I9$Y?zƆihbe K1 #% p7&** wx40xhG:pP" kI44B"5̰jsC] r 9>K@  ,aF R Z4$&d4@ ړ6cP DIENDB`youker-assistant/src/res/upgrading/0000775000175000017500000000000013260315532016365 5ustar fengfengyouker-assistant/src/res/upgrading/11.png0000664000175000017500000004423013260315532017317 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp SDIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>MAߏ:P0X.FĖAvON _~2)= (}ޕA_o0 TOwft|ЖUC e!$+2 !tʷT0[aI1C<ëψ 0ÃLJ!u;~u1TPG]B M0%E0Wұ("@.Vn ϥ ǁ| t>F /e-RŠ\i2gejQ\5'#ޚf,]bdPm( V P ځBe\WIxZf`z^f2 I ѱ[:t tб[T-u4)D+Trmf؁u罙o}7~BpPL,@W^a3ެ #;.9 V}Spxw5jÄ́k =kfD&X󕨫cEWy42i6.> v~bi"SR&x2X\-L,0"F;Wz|˾DnMLi͵)S8ᅭIunտrkE'kfl\&=,Q+&=Lm!/[x`3M˫؏zqn}l!Oh%{}1ZL~ K@+7+~u>Nִu p Nr5+̈;Epo l3Fq.;zsLge@VEuAv*٣@ `{޳@_.\8upࣸRf-MQtV*mXVnJD RWbZh¥ną.S ?Xbb[h,Es:o̼$^x2g9yL-4cO i#w[~*#dWc-u]G%z0L:E ?mF*<uC@dZ%px7p`Ԟl9= Pt̷,NZ,OBǢmeJMKD=W }@ 4my:BKL&jm+yjwݧ/6]jꖑ.?HX*[#[HXЗfHJ)3SSЅglnc|`IH|teW,zGR)tNaSЅؠxbewB)*r68`<ՊM<U)/A,16듙 {55bݢ9hMN'i`{߭ I,1n8Y Bu_u|fd_Y MJ5㧷+|,WtuyAſk5$N=,Ae?Dk;dKj,ə9V,X4)l˗|>LC啃EjaNl[A۫$設[<\ޯm &BH5Eb#Y2x&86 3r77YHEڍ/A+g1Ċ7u5-QI ğUm\:~{^̄`}rM[,?d?x+ ږ8IJ"TE~qb>j1Wv7QzAIgPhr7zuYoeN`LLJk4fí3l;(Qz)܏Qt=_%B}k͠l*q.y%9J91p^[4W_6r?ZO]3Weyh_u1L8TsUaA25jxs y-/7JbM^]‚|y@L"Z!,-H5wf03V+:|ޤޖiрLϐWqkr1Asf*IPEB}za~?cvb J&cψqG<+>5bb)gY>&o"I{Jˎ0B]l?v)LMFڔR~;NDS菸)^Nj=pwQQ|kC)-mmRjN K@B I5B$ J$ h!AјJi |(J[*:ٝsowgovoro߼yކ⩶zҧ"olGK@)YYt>M'&ӛ0 bP>)'SJ8p*NJf~e) xA"LFpn%6J!5P1SyLJ񨁄ptAW ML&툏)s6L-a)CDr" "x_@A_:mؐue5B#LwRR ;-- m.OUk 0s0Apњu'ZR K tFSg)MA~ @"0 Z[#JD0hԠV.,y];B4ޢpՅe[ JfǣlE9 ~AA/ hEvqx૶ۚbf!mpn{Ӎ6^Lrb8 (KPuj5G+ P}~ ڀMd!ێMHM'L*_!6 '(qB%5u[vZtR& mSIǴg)"yf/S) um[6]$hvې ǐIٔ$b0KVnO~GPBt(vBQ}7f;,Hڥhk'ϱэ/6>ڵ蠵t!D1p~-4z&S>[ "pY^toj"sz/<,AVKE^AznlR3r4/ ~sp?ۉ' ˤϏp7%F?p{c' 2nKZ%s; Xkq=憿j'aDK*hsdҔn]Aq%$\;Ζׅ_OX{HیL]CP"E+bI|=1b}-"ۧV|جF;Xq+>۝nx(,o&óSɞ7)fm^ xbH&U[3o@hב$zy w3s9<dx] ,w$JRh^B;4tATp@,,Vg8wC>lPSK$#YQ1ljQ[)SX:k1#FMDl/aR$\Y>7> G^"M!XVmʉ~YQQk Λ&| vey\iE^{8bF]%7"{K*i4 ;x;*Yw++ g*,:jA.42> CdDDǰC#\ht3|w}"mvA6JLo+%mC4T9~p.X VZ3d%SNtZ >J5|et/0™W#f_)Pb8VvK0nWFkE9Keb8-LVܻz>n g+r?LWVb 'xhfڍlfDR22Y.&W#:T &XVش'ȶ˘6c٩|ͣrYCټIn2xGh۵Hq .* 5sC[*jcvfe;"7 B()Ч0]3vj궴468Z6</+8G>** {}ٗj2c2, ym[U+}Q3;2|_|\=j)}p*V 7oD%#*MˮY '*F,ob\ q\h6Xwm/:óCNA>3Czg. k|cd==a4دeo6 $# |F4J{O`匹}w=z1X 1.&jjSTX԰(Q@[J_Tdmx$Ug㵐(O2˜ȖW]Oñzy ݫ1B_W[sW}(9фmt_Ȼ訊3<ټ%1(y.hRDZOUGE-Jz=>RzZR*Z@ ݝw޻Fs%{_s;O8*"E=* !lRE9%%@O(U-gZC?MABm&W.;j~YHL+pXLt=\&0#/xo $>'>D>Txd$!k{Q჻)s`Ss+ f:W"`G˯.VZPЯрm%rcr"t!Ot U's]ğ;)ln[o?g{??=xx*%g\[$)?[>8Ώ@ϧ{(KKµ5/`"}Q0![:B BCxsi2n߱aEl -[5rgqZGF*C{5jK+ky?sKtR,"c^Ϲȩ_Y^vL`WWNq/Ի>#nx6E&֑i|Z57el2^7|n>Hm#}}%3ˬ0—n'Anp܇n8ƫno/LTŭI㐯+C5uǎy#vLH]Msǭ΋:"3$TA=>ΥqnɶǩW{=Ȱ?Ԕk/$t͍mz?8ZU4A:Ps=)34Ǥ*SUWKXCc(L渎}mp,ZTR8: ^K @ݮCJlD=VG|kT̛C?{ l,Y@nY@t^S=kT05Vk4K-ibV:,~䪸^' R0eHviY) nL `M!$/G uWSm.v\џݨ4RiCY*Wv=}׉ 4[n[v]Jvj[ӊ-pT(W8:*~N؎ kq/=xE17Fz䪯2T;g:s:S65{򵨫e%Atm2`[ߺQ\_$=3DZvzO^D j0q&%*)G>pZw۬`o:2>꣍dڲp!ʦXs;{?ա{[VK̎ʃy".IPN7QO6)i pC=os[-OzڷC2DcLWڍY6br{B5@w r,1^Lf&z0Gm^+xI>K5cNm0/St=O#% ]j$Pœ".q']cdA {M9e۫_e?&[9/HG^NVM ˓}7'w&#|FsB۫5PsM&Heհ"gln!7kIQLm惌--RFhU=UN[gu~祝EndA΋9AeEpJsF7{kl{/#_I-o&$_?=LہbrhI>@ @noX$m{`IORm3ٷ}"ouIEv$1~׾ HbU:.e(H4-ߵTKMl2 2yI~S }-oNY <|T-L4w|pjL{(uJmLrR ӹܗ:"AKZB[ZΡ׀4mch8'%ѕFgrdOVa*<<>8lŀxf:`Z <HpX4yc)~;Dz 8-I̫~//c栔Dhຸ>R/f|e3$*"BvR>hz)>Ntg2x` A+XpEyvfg\Në5=kV9I7n;]W*(0"]Le|"ELP(:$`Ӄҭ3$_:musW'_AF-$ūXݠX9-:Q'J~HFehB.!vX0eyX>Yg'*^;ӁT>^S ]NkKfy1"}x?tp ĉmۄDGԮbRV#wTP)MMGAX݄Mnʧm gЯ毐G6ߖ`hcEFӯ~{cRZZ$cV-C+$_ @zJ`K!У= h`\69p#0 3G# ю'M MX~q,&@F eשP4fS{YYFl AbcC. @O"͡Ӆ!KA$80BDA[(g%CCSxA@f(zWl@kC;/uczj|O,0^L$ s`Cb[xJRY*3CTR_}k^No/7̿l1\qj- {hϏ۠F#?LUt1%ii|2P)i;κ 'p1J9ߜ>Aܼ25 WK;΀($f޹M/n۷7ڈ$+,2I٠8&ğ@J#b~rNNW(lԈ􅢓iбר( AG#d}D~su<MEl>Z x}qm+(a@`)xPLj,$ Ab:&iv18D:s#*zW Eo(ԖځJze1}ڳ}|8@F^Df`Gy~ !\{uY/sMn60/3wgivd9tEgӫv[V81<)K*$M'/k}1Dpv/rw6Ԋ4`{eoҍ5HH@ lu`FEhmUy9g,6Vs. S@~P{7[%..k䛛mɺ| c/T"D09b9@JoEă12u Ip}aOvLtoi@O5v]oSZ9/GDd$JXZa׃jyy6x(Miwp3 ѵq6M,_ PM6{@)2{\S '!wѵ}ٸ3a/@61.^;n%TpD (}~Q!i˖X tS[u .{1o3"Y90A&CFhGA, S$C>#c$ SxMtiU.jZ)""')ҍB]9us>O$MN {^ AQL l]0Tg[ܫCZ-ԥ?_TK=@@m(_6`tqFՇ`VEמ#*0&J]0wf~@:ZD lo;&҉]Ml, N71bMFgOU/oힼf`[O2 %o(`(KI6e @#wtJssw4^E`>3nWj%=ZϬ兰y#C k2`u ֩뜾=}8v˝cxL,D*CYCtt0 |{J؀MF }jO:SWɀ70dhQ/ Vт!+(#, aL"aDJ&Z2:S[xmEt3'aniECo]P„C!%:3(crz3Aw@s d;DUmE}/Vei T(Ĭ# ߴ j^cQZ5.ͻԇ -Y"m祕>7%Z&dz0 L N6N)L47ijԓQ_?6jp0pZKH#NX²jA.}~qY0I{+;\R%>I ve!#̴PA3V;H5 #̴D.3b|"G" yB< QyXK0!O1 pJ9ECUP*b&%*Pti.B0Wo63 R=HMK5~R :{.,j^+gV]odu5Qpga a^1g|A0"(K&EGƨ)>' ^_0w vٝXbfL/-:ƊZ2a*80Nۂ01&"x @@a " 1)p{BC&M*3lVS0~/9==amx*dA umMe? zғz'4/ؼ|JZނ:$GuQiv!0-]d{^eF=^|y9ez V\|/ N`B'@x1n;, GS|+ߺa#GOW<&gHHd$VuBm ywE0^,au'Nv}`Kirc9D\xRT-ۮ nЪ @@He}qз]Vi4¸16XI.dR)0;G|h4jn͕X>io:)KFQo-K6QWSReúD >첖`}N #Ɣݪ.)R^u4ժZlyE:"Е >=n1q@IWoF" n¶mjbg8uSlg+\jcUb`c6Yڰ(Ԕl~KRjXx#LLkAɌ?Kg:֦DjdQNJֳ-{sy;+m4[sƞWyؠ$(F$4[^qWHe!s*bc8\Yl׭5[~ #r2ٯ%.q%=Lc:tKFRf 7EWqej&>R5`Ǔ2q6)?5zxT_VlA~cwkÎ>6݂BQ/ U2SRXlZVԱ8f]!͸{طgm XJ0 q0lݍo>֧̯>紀۟#7^$VM{m`2[rcgHRA'~=_\ @GK9+ke8$Cu;FL9 wC#q'X.9,mzG,n4onlh1raܒ-r5?Au)0;f%`Jj(Lj'9Mosrß^{fci=rHS֞V>Vymـ.uHԘNk)G}\i& 3A/VT"ց^n_[a=JP Ļk r/{qw٫ԖT"Pֽ[ZK!n.*p+EK{h@-l:mR];c,/sͦ"V&u ^ -ACز=? p,[PԟXX$U.7q*8^Ċ7ۙpOzf| pz:^_pr?ھs{ʎʎpJ ܬ-bқk-6ck7L,l֤VXhמм5'*/K}Vf4d Z3l,nYJ t$ɑKCQQ #w#sgw?QqMʂ a~&1'(V lَl5Ʒa};: A~' 5b:K2y#K?vsACJC֮:Ϊ]_`n`X)p뫨 >ثyBKdi4s*,܋At Q k?x_H˞E۩wEwpiٝ"Bz4fG~L7[t!b sAYR,jJ\3/УK=K/~Ϙoc!n%T fGAg oz[t%y_QiƄ8㦒{Oh{rWgNb7ww7B('8bbf]ێl (nv4ppPf;K,x(5pC]\Cg5P;(`&P!zթ^>hE![LoKCٗA"hMuT`1WU֚O\U lU2QFp0&'R saLf čӆ#&@* nnYnI]oe΄Pq qpy4>VKE8D[HPngD yTp4>}F^=\o'.ЈM¹-#*]'!ב,aqGll*o~mxA3?1A -=&\{rh haf@]w^ p\Vα=trh|3~צR!W93}*ItFMcl8 Y蹖VtzP_nA]+I׶aN^M؂`2X12CVpwtkcEz;y4BC+VTU| 3/z z-` G°˔P ZSA1F'ԇ:,%ҎXǾ*a9t؁mutzըHm~Iȋ FS?Հ-,PI Skh迆e  G :\agX$p82" ؘagV0`$\ڇ9矮 @Vq*_?C0TH01͛j7 ]nY~1] X(`Ytv -XO)u{B۲">p{miܙyOL`8HQeÍ/ٔ|wDF.΄M%!P#1D0ƂNZN},UfOxE9<$؃0A$&r3NcsxP-ڷF1.蟉m]< xpZlvcH~ھA^O`4ZUf:<ˍKbb$]4Z".==gy˦A9:|Tp~/:7<-/>V|$"̹gcNfަipEt!h=3Ӳ޽yI_zdc[KUh2l6iHWgxY%kڴZ?M;Rpx#K9'N)9>=dAuxUi;kN!rSPn uwݾE͉$>ZZpX:a:ukla{@^< X3i2vCCC,:Q="P+Egv eH,Lktkzy IENDB`youker-assistant/src/res/upgrading/5.png0000664000175000017500000004240113260315532017240 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp /A.IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #1qTHaEv TPTwP;zzT>u5 1ς\$,`#$Xh0!HB *gB3AٙKCTE'^oY,8%ű"{D@qG~/5s2ܮsW`< Rw za1#R=xH b$eG#HP ֫/PԨ0{i0K}jC$;TvP:UàF.o[" [JJYM@O\$D)@ǐb@))[(eT藒Z2OPh&FվH-8M!H #KTW @ Fv@1 9yOc5־GkcA8ѯn*F$&z=p%\-6|c0NjI ̀;|ͅg(o^c dXj "1 c|^,|6G#,h7n_ٿB "*b8rqGl -}7`ՅaFY=Gp9֨2 [`G[¸j9P7bf퇥#}Ğ@w@xr'jotQ TlUdO=`SYz\+ :1B2:*@< DNE? ^ bP~S[]hWuFI7H-DڈV*)чOlD*A|B[PBKiim?ЖDC_lJHO~D&Kzqν3{gvBuwf9s;|ܜ At1k>cy|M$|~@7:-2v# h;gyWsݡGLȼ/ad΢n>eE?XI[*rJI}DH_ْe/b#)E/JD 6c9ΑhqZv .nٲj]h74YEr&}:=63&G=ׂ҄ z= eᵲi5z SLĠg1 )z,|R~<2&R䠰?)szddUo7*,%IWpS:z؈Jϣe/M=|Zx: n |k=} 3bOB~Dj{hMo;+qsgݽ*j,O{ \lk(Z<¶~lYh$^}Vh7`>/wUm(PJi- PA` $?HDFA bbTD4A*DDC(>`iKv=읺{t{I6ݽwgΜ9sa!xSϏ} MxO>tU#ɥؼ<2?8D7a 6 bd|>m9Ȃ?~X6u p*MJe!i%sl@& 'm h'ܨ SI[x:~i22پd*{o)>n"_l2Za nOcUʑE[XV%^;~z{hZU >""t'H_%P,b% 曼 d? q`Cq/ Xz*9 j `ȕ ?:  Ȁ`O,?h/5((*%JS +.+j~2;a |Yd '0A+ esRY8x Vmt;%FLzBac l>42ax`ӗ*oDILq1eH=~O| 5I76jiris[Gِ'ԒɌ11jZ`"[>ȳ\H28+=6ޫt.̎6;)З7!<4|cN͓5wWr|r7h79}뱤 IӍmI+2 t۞O* e2-޾U6֜ы xim(wGcײ$$3gXqk+oq$9yAޝ H :V 7si?"SLN !޸IJ24[1ڸ?M=ƢABTMzq[a>kKx]SU6Tl!mU´Msp`ҏZ^=h *]:] tT, y$!@4 $(XiU `j[>}A9RirlEQA-@T&" AB!fg3wqwYls’ܽ3s;?ߟvD'وx#ͥ@*%3@U 5[x fG@BBB6i}jys8*VYy8L:|Sl SwgiDb;&=;T`S'~{Ї0Z!B.׏7D,V21g6eZ_acߦId˺-iRLf: y*KXP0t_o lqxt| X,x8`IVTO6Ĕ3Ŧh#&r˳zڅ (֙* !['T4\{RN~%zq}I 7xʲ,`hVA|8 BCúʸ \.4`ЂoΌޗZ#T7ȫu6R!qykj%@q-mz|K StCԻᕹKIpq>qݦeaRsuxG&7?rZ/e l2^A;hVL9_-3No7qk4@Ì/͵-`8C7{ǫ~jQ:{3Wc o{ݹ%hDԽ?:DcAZZthndۍ5% `R8emIծ^ON~^Mުo~!ƞN6ڷM'+۷؟Uv=9R\ (&~p=&\=W3Xš-3pl1Pju>z35,ޙk|n~b]h츚orLa˶MSm$6'cem6@t^#uLuMf[ޒ)Q# R`ʐRY) 60Sُu;}3>f`W̞ڃmKѲM?a^[n[v_JN^e#$jXlC?ƪz6^QEHeI~Rmz5{ӆ [`|,ZXmѷn|=QZoWLzAD74*L8Ҵhp,S~,HF ϺӫPbq` ª_-HaN$j ڳ'vi}u|f ج_%f6Y*vcRNqw9۞P ~87-A/-+G‡I>ڝ"Ye#-ηBW&H(r,z9}+|L,(ao$C`<jz>s]0ubk\h#2_aYT*4P%u8oCRI:2&:q7ԫAeff(ΚT)wCwEƽaW"E,̛`ܺKtW=OCTI}u5ws)YHe"Ʀ2K+d0Zq`?ϿhtErc]r^d%tKQc 5drNl.oM;eƺ]l]ݭIGK0N FTnE21+YNk1$_6"ro"Ղ$ BaN'B%qO仵~gϪ>$;m1Xt M>"͒< 2Dl ( p0xl6VP-=%c%5\^& 9pY:\X4ᢰfiS#|R]UB+GV:rg/=bn~E['z7o6\ւX7%dsPJ&$ k=H :@yUI,8ȎW,ga AMUY/L^.ߧ*A{Alr\a%H.ED2iH)bk 6= kgN.[=(J/]2(PScrWQA5UBNKNx q9rtrAEAǔUZ/g/p1P\(" ;Ox }sɂKHSl<8N 8{$iK7~U=WLDj FI?n?HiCtIKw^@oxP]XD19S>miH_@?提G6.Y+c#kfLj 1ؼ7?{v8, @2m8+6DX&wv X X9. u'OEDŽS,7杂\btb bf9LC??7*puUXI};'i0DO[^2{p3N`Α6\2Þ:=Lzdeⷣ|&1|]n޿NuT== S5AԬqVt[@0%ПP+=DNt9D;^L~9'Bfa@eR0yY.Gg:%CC3yսC0{gL!<Tc 3Xǫ| <:q/$zݶ\;qo׷3 ~ċ!1c9}#tPry݉F0~B GJ?2p6|_.^w[28!Վ*;"L}كP&Z?:iv{U䓒&ͷ~X0d @X@_+3^ÁF jd, |Y.?KkƝjʽ| yb}XWfEW~ =65*ba!~dt5o S&7f46qtĤbm+,R(0y"@Զ@t,$w"efйL]>R>~LBm!Zsrص: qB:g̪YZVHH6 ?EQ(* ٸ' `ٍX4uHVPo:ۼ:Ό%xz7ٵsDqP/kl(3>Xi~vTt|r(t-54kq@GVotfgSeS!G, h lɖ#3/l)T`#U*8}OD _?~hK4< hpg.sLå퍆#^E`>ԑj]$; Jz)4Cc^\/t -LcȀd74:q$]^w~;OuQ8Q}"!|=cl=-l&P#>]jKW!fi:Xid URDc0&n$ 0Y&sޯ.UMǀmK2VEȗ 0Qt ˴6[51бpHIp*# XYLU睭&P_C c}ɶ$u ívDEM=+ (q_˨ Z'{&x/7-7dG~6`y!FisZƳHilemC>1%r~.`dAAxVFCAYSYZd='*XG?jHpZKH#IXnq"' |Hr!xrdmcUZ%6]p:3r yO~BBt*>v&Uz0-bdž4֖PbuT)CkytV[ Eo$6. UuJj*ܫG)fHP-3}%'?|l9ӎc"%-Uzc[PF|6$`PLMJZR)`={'WZe$I*2*15"?E|"=0,:vڷB!3Z:1^DVhM>w+g.ٮ,>s{}{!V_kOX;`t[|g|A0"(gOD⦨A)9}}O@2or霕1cX*+-m{ě'>k U~֒mO]EHjlLp8AԨeCKy]U\uq}hZ=nJB\ls'oh~=N*T>Dvn7eJR47s (-a5oK;õL#^1 o;Rh;AwQ|)ɍyЭsfKT` R!Ÿ|0/NI_lF m[e`.uB*܉IާRo yYwE0^,y5URu,́ȱ"5/r%6*-גB?RU\qH=mW4Gan ujG"©M!L:^ &[ZMc;. 8 $k~`Dg[c~0OZ-aIXk ؠs1U--5Zo(Er,sօm )k ҨXr+"PnV7j'Y)vNnf@ /Q`!9pv_#eonF" n²թS)N#=kb(3Ǻ<Y0)Ԗl-c̗M42,c-9Yqp\ `E9Dl'?%cɊ&M,q&`4zIrk3`*-ݦq*!$c5Io<`{3 锦>ioaԚ=kq➜ p>`Xj`cn r2j:72,D"WWwC 0 |"{RR3 uR ]uAuƏpJ `t%U62Qv!?QbLĔ ŠzRK{.aA7TH d0,#a S}r˄UoZT XJV3ɍ䈌h">r:C2Zt߾6n!6gR`YiSazlCuPC9e!!];^M8Ř"Q ZVƐ&$,/%6hx1uT/VUTjCJYURtF6ƶM'yF<2Urvƃqa|l1a`FBSG-}fam `%ǎ6pngL6QBZLcn 80 !̇$ ;2Z[9] سOIOO&++YŹ,c~G֌pPEHR,u;"Kq+j`CQ5)ѥ~5 VN7:r1{ҳ:\[Uxy 'N- +kG@XfqHo$, n =pÌQʅY a u>ݑeteƒt4{s>jG 6 5+PfIS8-]۸LO7R߳F>;ew=ö -561Zqv rǂ!Y^uP[޶r_kx<>W.p(aWFV?HnkQM^wZ$ds@bꤚ0i"aC>7_`9Oe67atߴKTK.R1⅕)!ET/cԝ9B\lkXMn!P/4Vm|:5N.-\:9+񫭷},Nzza$Ĭ?OwHh4z=9TF i {r x*bK>/[my_R#p.:(?~H6}3R]þP,E̕|3hM#:b80dA㫪 -q5T`WɤF%ј gdO&>R{HH|T|b v J`*%VvFL< 4mlx,pm"5'Ch(zmsE?~Zx8 pQ g&%F^%Utkd+4glp94mBH'Mpà=<ܲDHHSQ!d9>y4}Xcu %1?& 9`$zU7%D'Ml܂ RWG& Ձ-Ig?jouQUXtv1<([F-1:xlMA]+mRCyxk@1ټR7 XxDpgt"pS{tzzl"*p_B:' {Kuү+i_ON)a e]93;}6e8&Gǔ߳k9N~ޟM]W%; CxAXթp\᏶b$9qf&=JftkM` {iES/4#kqy`t `*M'$2 ?"h%pğCz.% 0KN*=v9L jFPcPVuf"BAO# C l?,:.?d[L1@ҙ価|st{n؂fÞY߀yk٦R[I \ F2n"> G-ߋ)CE3mc8vk1' a{l V{]t<".P'V^[]ZuYq7?2#a.ި5ub-0>!HE Doo8&]*n` B@l":ޠD3VSiy;Gʸd`L W d7뙕†7 ѱ kiDnv3v:.7A߳oǯkMBxcE{Y`  Lbd"1.X&Q:""]bVd&pWXN J-IENDB`youker-assistant/src/res/upgrading/12.png0000664000175000017500000004442513260315532017326 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 7,EBIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-ŏ~?XqaȺ `8 u\a8\8.A"he1v1H8 /?}~ bpq/AB.+LIޛoj0ƒLVE \l0qPG\B M+^aX>Dɥ ǁ|L$E.+\?bP.ʹÜgF5ƈ(A.oMiP16+hb@\ٲ.Pv#Tw:4Y7Dm2ra#9WLjf#*&PГC;A4-A@\,ei mvO:0HU@فDHaEv TPTYۿA xT>u5 1,V6Fq;?#z$2*6^hB ٥HB( WA.V!WLu&(;bPv9XceƟ D @^ 7ƨ ǀ ^kxz춨5ןo:<F, FRF-p49 oW_Qa`җ Ԇ{Iv8${vuA] EGAz [WZp=qlcs0}fJCBo8 TjՊ(Vy`2>G0180z뵶b j&鷫x8风ՁĜ´B(}1F<̲ BeK?gZ{Fc MӞ^/7 &"S4v#~pw5QQxzw J)I  [~T$A1hD$Q0Q F4D0h  ""B+QG7snwgf$kofg{7{B8xP0LuTOvu j=&ņ}%d"69'~>p$\FSdgGHd|'3YӮw[A/]h~rUiw,N6J$#q/NJV~du ) $D2F!,9Ƃi'.Ւ oSeеj|ɖބa)Ɔ1ک$}=b( \%w&+~[ @75ԓڪ+t2 2ٲVASR EYHǛXpPZeR p" 1}sۋ+JΑGprl`q[zE'd-]mK hX _ bpw4A.khIV=Tx~ vj%*H; ?@Л Ev0مL`یtgeM;p^z7Iqӡa)Sƍ$eX28"_i Z@^Qa5+Gi7X>yILj%ߞr=J7; 9ƚ}^Bvhתm ir9谠JRJV*bfN"uC>PSˬ2'G%Y5Ҥ.ԉ]U@L\ "~,R7A`EYI4U#uUU[fs_'*J7^&O<W^ޱp,*e} u3G#d^ *,:A.4[-~E <D̢hmCз@(rc hlyݙV$ KXnT,wYfe?; '5bȁ-"jw#Gj WQM Kn|r44,;`*"NW7+; ж@+)?[l8WOTNjmپ ŵ$g0SPU#@@+ƀt N _81&$(pتZ!z|Ǹh6MO_d VIaC-ֳ J]@M>0qt:#NN fAOV ۰{^{#pԈH7# 67؏?l?:`'~N$F}*@C[ʼnt dh.D@#R:^)*x>4iODnVaN'4\[6stbZrޥ+X(t4=1KKl)^6QȈ E vW6 U=u:#c g{"n#'S=-2U GSC[ W:2e:V->2(qh+5Py+$!$!w79ݽ{Mnl;rswO9)!E=r6b-H E3%=@w-W͎ jn6bBvGa+ྩHNޟ\\/D??63|"_9Iy ߣȤpL`S'r/ɦ#5۝ELuչV o ^"&3Wo!8hLW:['O<u[oCGF=H2r; l 4° ͓X.P@ Edj p,w ø`B`ޖtfO^ʀ$@yp"MI1>;e#<-U#R%=n6_DNhj}4 BM"8OiV<ȥ5EǾ1|Ip:YmMW8.ﺎ[ሬe4l}ZW@NYt ʃ<\H Sgy+7 fv_s : _NaXk]ˋE J'3тME{nt5ǎZc)W~;C7>M?LRM *F'lZpp)ͺBy?M7LMoShuٺNPW"6:<9i*1]ʶGkw~++O͘7w `csU~t =%!h̕8OvÊĮr/vԕh"U0?|@CɑF\^[)' UZRU0f@ l,%3v yDn9HwЯ+U&$n4/AcNA18JTy۱;ׂ)>J *9_D\[G9V&v. W2u`Flnd[Pd}.n78i]I^OlѠJM`~ş(p+;ˢUwm'#S{s_UMf>sގ ȶaα%l!i7mmV\=W:VÀ\\,ֺNJ+3u.uEzho~uzzV?3@qMC)?;45{* nd3ȤGMH*nrX+Ѕq҅,[61EO4N*ɡ%:|R%UqTbXQQHnof:ĕWEWT͖ymJ@dkD;V,J`Y% f*ayYӥb|^Q4͏,B珳m^\m^Wk֔}..P;=3O*PFZ!+,$|ᥥYݬJ^]Jlsa#%]W؎7Fy9G0>cm, m Ž$] z Lwh~X+]<.>R6d c`Z^ZY@$w;jKġي]1L>q$1#W)ID._5,:B=6hUo0lAX!ıhvju~,`.{WˋX'[/ɴ: ;2ExL7 fpZoiw-~el:}M𲞿rS hm>utqmY#^wK꨷>rbE[hC^Yxx<9=M]hdM@EO4Oy9m9nHq1Ec X&bu gZւ`;aq`ݜIqgjkO\X#2wX=}IZN+U35AiHG&"HREZmp`VW[$T6ӊahK37we\όļE:D[3-H]o^]м;]*SRw/k)P坝ưT#MK~l-M:u$ Y Oq`?rmbErgݴs^{“i].Y~z n\e5D5\ $Sgs܁WWbܘZ\`|=c4\FMdsNFFMn$D~`S`ӍlgS PS1ҍXzpŖ.a wAD!.AgAͰy"is n BfB}̔-$%X`.T`j)̉1|KkR-ryOŲڢ0DxP{lkՏcpa"B)?^){Uף1kRBh`s;OQ^"!*I]@lʾO~1udIinm tt%bu5[>m+5_!飏j ~xW L]d>O.<[DLJ?Aw1+dL"L l~;b N>ԝa 3`@; rkH&dZ0gr!x!nz ) t Q6Zز"Mc@ve7鿰e%ʾ0z6$Jʼnx} fhӉΰÀOK-]/ĉ !a^poL@ -6*ߝ7[zMORoX][/a.X4 s0xgA+؟H*K%TR =ZNGlz3.}LI:zW捋hvGT\F50=iD<-*F.{>EZ_^Dٞ:F hz·yVύX/dKg]' Ą'] N"Ό_ȭ5aȴY*z>9.;(yVϒN FXw7~Pbvz/ɫ;ɧjHMimXP;"2V^$W[jD 7ΎtqNPY~.^!x; v5+@{&El^²JT QPAg@ӋAEEQrgDDI KPr\X`a#w_f{e7קN:uNHW5a:IVՠ8m2!ȟ(FsvaRiM/ԀX@H_Lt=XMҨH AG#N! I!%8EM2kzNTD鵞/2?xg)5-vqەcT< ;2zqV@^vavOJй+jo-~~uR6M-] ZiI4}C}s12V_`y0x$dG%0wڔFHŎ) je`[tV>>W% "݂o R &2րm} b{,ZsfgۂZvS.Hފ`  T/KPtq‚lRg[h"CY‡_.2^8ދ >3a=xli W5`9Zӂ]$@\ܜ5@X[uAõ12%S0>6|_G*׀%Ah[9Ex!4"j'c f"p5(K-j4qP[OS i5`W lRѕY&:*{@&!bc #墒n{ ι m81W_`3ucnm4oa)Z%RPbGVɣSmr}d&ҧtצz<܍[H&Cbx#;zEv0ˊ*SGQʨF^bO`3DzWup _[+Ů?}BОbQ00*ggmj6>StQ4 RQ0Xƭ!Mঁ .sM!Dq0/ƯU5D<[qq`/͜w3?` * HMAW\寠I *Fuۈ t"g1iSz17l5J% 9op#-~ƫ| V앏֦pVWߕNhCALeUhXzW_r9{m^OYR2kUW%gԑuuݗ*`3SX |s m8x6Zx^#YRZNekI>Zp:0Q}0}S&_cp  j_gР<< k ͆YuxY5E?EkH&n%6Rxy.I/UUJݥ LVM-ѓ w?3th=tT rmՎr JPB9D8CrvpB!z‘XNw&QTԨ0=z3m?mH@YD^a T (q_xu6T( h 2`pn jcZô|W-=WT2DS$γ}ϯN^l N! J̈'U~Z5(5r6AC4bQjC%O/& !imgEcxoVe cpTN8Y m3>**ҿNkEm46^9y~cbca.0jl3lPQ}TE@}Nh/3iJq&bbuJ SW2&6;}ġd3~֭K͔eetln*7W[Ս t6_T^ó_A^~f  HbSjqZRtԫGez^nLȨ:`~&`,poܔWhl.d-!^.{* 7Rj΄' f՘(hG' , y5Kp}}^_u 6HpU{x މ"!$,:DCC$!)hO+7 &0T6ߴ_G'sKvV)>:zJI^o|.e5v)vEe 0"$9%Ѱ"jvHﯚ# 68řq2O41*v0O[MƘ%҈ٯ,X}TI=n'; 2mjFzIT'!Q`PvNǞV[=ש!5 P"..*4 j,"lT770χ}N1p=9R_Kx1 [ly-~M+ьHXʪX<̐WH{/SU~y%23GSFj= GuDe [e'VTqai1!oHiǼTL_[l Su}*ܝZ-La2@chG\ri #f3'rxm";=.r:p=6w1c&7KNK`Ju^WOxخ׃Y-l_w0s"uj l$'si}uw]@^vE.a[29 %xp}N LE!0Qd{v6rL6XfD4lN+B L >\'m僅~AH5u2ze277fЂ=@|ri}^HrFFsr+(EН|*iZ47 [g{_?2vsQl]Ym`f"_F<=o,@Kz'v\7Ev7~: iXֹԎHESĘnV|Tn"+lm'pa`;M,4/IKMqHk[ORְe2Y6Zxk %ERoNIEl: GMлU-z}塴jiw <lZ=A?9Ԓ"2D˒S)(em ]Vzv~{ᬈ-)2UPċȑ#xZ`O>>)cPq6H-=HQ _wO!b1G4VmY%X* ö juߏ\M9_6ɤgྰoxFye2Fl9*l2`,SJ$h 8K]գӮCǸ+- v_&2fx'1#K*nmO.݋< Vs5oTdb*fC?<# KcY*oӔhl!tah\B`ҾIB KW{^Am:4>y hؼߢ4-KZ*$>8 wU4h~4H8f䀳BԚ5zWњGӟv}`$=TGpbi/{x{)ct]Cܓ$ΔRN6In>ݠgٰWSk". +%묂;-Vj)|BuMr.{!$W>4D6X}-K"E֫yR_v(*&Vz!\E=1'gSD`M)S 9`sH׿>2C?'eI6LAo3w _D]'u4!G-PtD-KҘC%ilA8y;DL[|8E;;Ҕa(Q׍*$%5eKHV#$i?R?|*ý_)̩k KXk!'Q>Kwz=3W*hZ/NT'PA ݲL3Dː.?wT7!6n7uœ07b)  &]:iI{w9m' +6;~/z nE{5~ZeH˖?NX^\A7cusT\h gx8HYWkg1ѣ\;uF]I^ pm!2C3n1ϫ pH#̵K="W$~GR:Dx7[Ө%t뜍^Ût} {).̀%0G&neU]Mo sx5<٬nfJg#}UqaN&b'ݕn2~kq۱yEy f@A?Ϙoh{?B_f|bFuWDhJV2οj1ݛ{l9j?mHȞ Y50HfLwvAnBh` =A{fŗt{'S2A+|V(tgѧ/S2A1(jgҎRn>oz5\# NeG$4h@j:lRp|/nΓ52h{M-bTcLQWkL@G'&E3.$i3 w62\ќ޽2qyTlvцS(B]=9{Φ0` B<MiTߞXzS:N` AX쒇z.} !!~b-ACxщÇt;&.E0 g1tLw Bcf39#`nP$d `w8,M~;E׽3(ڃ-Kb'/ItOdQ8J\,퀾PĦfsPzW6Wbpc+;71ih2vhVVҀy*ݴCb‰wԡlU[*l'*C P\--*c׬ׇ4sU@͠~ۧC߉"N&Bz˞FEF71D='s)e| *Ȁv ; 5qA 6@Tck47kxɋ?.phVHt˜DvQckM9UjV/   ]ྏ| 7ޝXdP+YuuJ`d4+dPw 簗xvLjxƆ?Ԫ0Tn(uYGž a~i;@X5<L5N$P[K2HhCSSʙIZ]Z=TtCPv9T"JqF_zGMBq55ܻsĎ|JkkzH=-R/dFmHbvlŒԭo:j땛/mL z*Tcaw#;#KV؉(ҲX~qh7 mcL#")&ЌnO%xsyӕG=[^RRaZ*uj:Jl`1h5ח_l|LVppM.6õᚌV7鬒ԛƀ~*>XU/a/}2Hx܈'"Fze"x);%q&2/)L{zVqqQC"]^zvl`ϋɠ^t_[8 )>#-ƪp=_xE,/3~ GPU]n1"1c]ezT|]yb#^4DGlz:%/JZ >Q#J #PcCʪǮ\`s@WPKV.vFP*L26yzRk@ϣ)8 ǀihg_n \Ql~XU` ł@[/~}!{JO|%'-JDG6̅(PPx 3/z5%`aX}M۲t…6DA菹݅nR r5^i'RXf`;LB[x"Y0J)z:[e);\:PiNN BF{?S"yaX{zynf@Rs*`{@w<eXp1R7j ؀.\]&7vjDg깹ˀδK[8OZ774{A0B㼀ToيX>pR sMa0` bLfGȉL)$h&4*!=vXX )q-ajME\ 5 'n-r3ؙۃy70;Fjר[,o ۮaw闆'r/M⭦Y eU*бNnZMgÖoG*^_:5nm'qR<*Y\Jߋʎn%'.IV:Cm>7N nwuC=Eg%kH. q҅'1ǿŎUS5>uh;c3sʣg*揼׏ &M5U4?E>a#(bTEL9|eµCJ!1 IENDB`youker-assistant/src/res/upgrading/30.png0000664000175000017500000004110013260315532017311 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp zтm>mIDATxbTqXp+]H=Vy1Yp 2y)C в30s1331A?QC]+,_0 ?Y<, c9 ``bd$:g0Q}n3Nˀfl0etA]R05̡L`ǁ="Ǒ`TPƲ`ӏ?X Gʧwni)Ga3N0(YP#ݷ L@耛k&:O@\b8\8./ĝS tL 1n+EHy%V P!\V@KY3eX Q.F68h\B,6X JǠ y>Dɥ ǁH1\Wp š*@.L[E8+ |` oXrל9 ń(AՆ"n9X< ͖= ~j1;0`3#M %"@hbax3W :F~(R ,k~# U9(hNVfS׸0y; R 6@>՞?R?.l(|NVW` T3O+{/C" ܁KqR#B܁V`[^6 EG"1qTH ,kZ`N׃7d^"եoD 0Ci +X-6w~FHz7ɆâL?(3z ,B>BᆃlYάXpX|ԿgyX v->_y)QY\b-jM 5§ I@n p ^b<|hW_#Ua`җ9 jE In`!frh=7_}aZpY֠52wy̵փ(1t Ԗ zS@O\$D)@ǐb@)Gw0z#=&p~BiF(s4 #ɎCj_C[rWq:\CjAFFv>sEo+#r -3 0[BNX /Q)xP2NGik ɀvA\IW b2B3_sJXCl@+Z1k'/z׃:+1  xzE$PIsǒq_c&PRF?}:P9ANlzuI>MoA\ :WD-AyO85lG5pƝ\|: *Xuw0[TJZ tgZVռÓ[7,9>,.833//ç0> `s4rrϑ`|h+0l믿(i`~FUR<, s .#6 r0Q71Dh'r1ZUˑ3^(g0_tp"5?xMP94ǁȞ4{l$'B KkgrŭsyrT^oGmܳbBfUzҺ nB:`kD- 8s5D`/UhhwniR=ޓ ǭuƼaړºKO?m!+!71$z x؞; `2riEo#wT'S@,ueyi4" ЫQhYJFEV@)vTƋBPeqD)GBo Pu9ne|o䃿I}Y,St!b mH1yYPd!}ٛ3L8^ ȔRN<0rG۰vQ\>4LnxΏQ \/.6D N8*5X{˥[/65X6HxBk $(\Cd`Kn o pR%Bxm^,B8 ~û OG}<\s* `!yK( r.A^0絪p0¶zqx eٶkXaHL4eO:\<脂l{ `ȮohVᆴڨ5_uq;@0##꯫^_]klTEn[6<(F[BF&?$`PC1"4AFEA<"JBKvoNs{},'wϜ9s^ח(sӆnnۻt;sn NnAS)6#vLiI3&NЭ*ݝN ?j7tidO6kXod( |}}ˁMgjRzf* v+*z~ op=/箐e5f諆gs$`#̟ =ә6X.Us@0U^_ER !lĠ}KǫFv |y Ad&SQubn".vDㆊyi 4>hy9K/U9w"2l/l2lX 9rv]b0/W{6=8z/!"T%P4|=܌j5l"9 D+T^Ɓ $j ғ>1dJl2Ë>B{52!"ˋ6⥋S+fhD t m#&+ +͂"LD 279^fNAE%$`Wj8Ko+ HZ e-]3 u 44_ Cz&Sc8 \4A}N==bL0svH+&C&FN|p-l'>Nf2J>:ȹ{L?fMg(72zÙ O n6=Uxї!-'`fO$c.QAL%[VpE6ir7j e Bӂ]%8{zQʲ0m6umpɯ'=D+!/",)q#jbٟ20GpLfn.} sf5d_6$Ɗ+Ot&ݙ˝ݒg`0RjA>={Pf]9Aat^V2+3T> ͚`fmĴ+-Z s\% F0MGO%cYڡ>a)ɜݕ5%#J>l|i7r:w EDe,`m-dPAւIiPx_p- p9{N5;>Y*h̵(*ed#dm% m [CgT aO<  >ccKGg])^'*(rTٿI(;ѓPdlDgИPtE1:av@#:dZ&>GrbCc0]/m.M#ԯF,K#|)N6!n kl0R \_9Xw-DwyҾi:ᢊ W/A A2:(Z Էµ[vDhNIL'=C6)+Z,VvĐ9hͼId CA~H[Dzy^qaWBS!Py x>*8mc ;mj@.CsyaUda} O&J_/o$֞Lԙ >QC\l.``xSAL? VΘK@ rExlXyMQdU|k:ҩm^rb hɶcds,G>~^bχ醏Ky yZ_G1BȔ'w\Uq7K^@4JH`BPΠSJZvZSR;>(v`ʴVv*֩@@E W@! ysw{r=hœC{l[C8 Q]R}dw #P8xn1]ɵ\Kb Ѽ?aPk탧P1F"EaҊaɔ|(t[?BC?O]Қ-$O䣓-dWZ59RsY7i7`|k;xr?&N?j4O_>;չtpy&^J```rmdӇ'8@'3{b ^aU/bɂnEf}SJ[{ C_cvrk}7x$V@cF:_RN@¡"b#]W#F?3^i'Lw=]ctyC[cp4D^.t<[˒.슕|$*?[spR 'tae:u_Z:H" cEQbiyȪC`ӻxў&OfS)aѐ`@ A P zR9yO*rUs,kcㅠ6)ǬS#)td|߽jBӤ֝9xu b j9i՘7gۯUi:\<6cuqEۻW@ORU;B1,+F\q!1#7.Z#\piufe/Ee1nk;{=sա_ 6Uo֓Y/LC0ODWr ڹ V޴Ew f3?L78riD A;n&#LcZޓ`8W>}>),$}u;amպI"''y97@c:3F2n!Ei5=NuCݵe}ΑgiTFVXr Ləs! I:2 Mϴ:/hPڛ抻}[ͥfr0|qE]$Bt[wNihRw [Us)fE O?6Xe6WWP9A`KߞyY׭=$W7x)jL1K 沵"ln!7f:%'+CMnd>s\PJ&]@ScpJxxE`t߂$cLnY$i[J9V9z`ƺ]a+AL Ѵ*,ICP.:`2 ٍZpǖIS5UJFJ.y,,#t bEa7$K6nIItU% ٪YH,-^8q^v+bܪ5euC`s2{b4o7'$Rh༶XW"VmSK*t: AK p*jM;>UQQc_-݈w3,Cx)EP`QLRx|PǬa˼ei+d r 1ȶ0SCI[QoUT0'MLvYcK[dJ -B8QQ"bh)A "w|~8Ae Kh~Ew;UH"&:y>| !N gCy/AQqydL>]ErG6c7:BUw%~Ϫκ- ĄlH S(ȝ~`{)p :2N!WC'[<qv$<}7qx]wxO߶˻k7>iag@$jN+#cݿωkBbn9Q"]\$,~`v%. tTUo*{ H+ - mUtzuFQfmQh֍rGř踠 Њ,HB߭{+7Hޫzիw^U%w9#FR1G !Aɾ)(@:}ryb{2`}p^]8$^)se6dbZߚ$E򦖦lYRb"|뤫%S:G*~{yTeUb=*P udΉrGKSRj#YYDsܗkD̒lJ0ՁĽ^/tйMX}S|xk6fGMho0 9^tC!Z#y#sGc[&qБǓ,v <1P|'ZJ큏s٘꓇b1UVy pgt m}ڷřD3U!"*)PGju jtZӽy Zam悵bաkՑm-'j>@r3ށ3"N4]rSYwOvvGb.|Ҙ _8g-}K<^-B:gs} 'o(ܻP$4^3ڡ0)tڌy54p3ENbd6zg8l*n^31iPT5\Z0&úA̅-Ê}|]DbIl9(@͕[_I=e7T}C/&rgf+w{KMΙzҀ_t2M RzK;% JZS ɺʤTd uj& WezSSj>uev{OB%sXs7r[vKڗ$¸BU,j6Õ.Q"ArmCP,%M/Ä}n Ge9VxIl.Ř5#18ߑ*"/xd:pyyy)Tmأ;MUb %,T,X[RqJ="]-QۅIJ[*l#9z zwk}5?nFT ل'姚œ3R(*nly{C)[^bz)P8JKJD!CcOi4*6}믴Bd**1tS}>R71`,@ŽzkBv-t31c3R޽EXc(^J[Sfecg78+Q`!g`tUu'#YȄ:m{>U4ad1):#V9RWQ#~'`Lʳ`ũZ?:6'1?SKR1N7,16M_|5 EH$ _oL C`&/Y r}͋ul-o۪ot,>ˇ}O8y.n>{`PСAח֏զploi3櫌q'_;Į|a8xTMvڞE:/R,S"<Uz^}c78^atv~xN;P€)P76j\AK U=ژJıe74:cEy^wmT4;xzd1`Pb'7?_a,{7|ka>?O O]ֺ;7mGRf jQ=_lB/7U'^yT\Mw-F7<b3zo`S`.C+sK7fhyȊ^SK4y~,%k&^"Wl٣hA{.5Ifֹ%fbѩ` L9!muD;^'8/fҾm@mOAyRIw| 8b|A|xm뮲n$3ŀ-KrzZ,,OjvWyQxRulA76KXfg<1N7(b>/`  "Жؓͧ//q#*ivKs ,])r괙Qa9""_NSJܨ,\rmAjY {+ԣoMs؈q3 0?SC}RCU$&TZHNknSV AZ^Ǟ!Sp؍ 1Di3fLW?& 7AmRGlm&XgݢI?Y֯F=6|dicRԕl1/6s!kAȍ@$X p`@Mrb]l̓?ecɍ&\uhs xH@E0\uOPq5̓%cQY6m;IpDb6.vRɨ܀6? gMnS+m,50J^ &bǒъ+ּm Uubpia6QTrocE(a}Է{UW͸a΂OlQAQϙFݹ{XU++bGPj ]X[52V]۶pϙXQ‰Lu[042̇I6vlLurL= lM4/<3][+>#Jy5(4ٚ %,2"%R*Ȉ1Y>HWx-g?31vK\J)Rjk_ڱB.K 5Q3=X%dSq]Yi&߭Mc / aB v7D Esˏ#xʥrs jzBntWLu?k'8JPnlȣ@T/YsJPS b9,ސZ`(cmuR(bŽ\7t_-ۿ1Ӧ6KWA :{=UĖlE xFe*PPMNs3ʓO]vy߉(yZ&&;3*֠S{pi0&,qduȼ|P j07ii 5F>qі߉XzO>ƣ lWҩwwEb_uѩV#}\n?qR73Cꁋn0Kբ1'zePa>aHٛ3||# ,bsCŠSt8]H~˕,ŷOtiiY{+:ȷ 1-p6 uS|~ ; 85zGOb7ޓvx~x7?|% yigawJ تf³,7;[pvf6OmPh[O%K={^i}s[n\3̽SXtK$~w]ϮwX tS+S.ڢGЛ<-{KdĞ$AHܧ~q0-zΝO${6I Twd^a|WіX1J}m1Ws]p12L`~+t0;2M۟Fq/- 渷*Yqe*XbFX_fO|#Enu󫡶@~<]/ωh/+_TjߎhWyu.Zu]xXZym-eMy}HЗgJ0)X(`':=GٟcOkY0[EP.5@<ףeBm9#g4ہ`ǗkSԝ,Kg'B 1\_!OgjSu+kĺk a,7lRlqpB1od ۳ThΓ}{5[ZZFkSq<r$Y `S2 ܅ݬwNũIENDB`youker-assistant/src/res/upgrading/13.png0000664000175000017500000004473513260315532017333 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp CfF IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=AA2 k1  1,x'쏜R`|(w]WBiZG+I`W>eBP}$|x)s@)E \la%0 )EyAbP.9@Wc̟L ri"`F> 7LxkNF5\I (YTbu(Z*4[0 ,P€@d@6-) 6 zX\XPPm3΄gP2X~'+3\7Z@ p0.&POTK07 _h ARםBPC~"oHj@*w`A\ȅxf(:,wKRQqv ыf[H os"?/IH&x+ϟz4PDgo'5T_vfhy #9%2laʡ{(2f6+;2au=pT FU\yj[Cj.72ReD(]]ХN,\!PE~t+A V!"c.`Z,чIˎyO(WgF#%ڍ"[# R.8~߿$l}.9홸;]}w@Z3)y-Zl:+ձ-UeVhuS֎z[ ²r.[,{&-SR{@-;1:붞W}f]*$W qKQPbI7DKIAzr7Lrd:RQSH5,gzk|%{?*;qK 4]YrhF|Y%h0՘"qquE]"ZZ @wPrF#'7b(T%Of]ݫ? f;<;$~KpIIV@+5X}%/n7c8{\ )œ[ ]kىj=ί02 wݐ ՅFqE_fFQ6QI )U Zc@}P/  *C`)H>"* DYZդmCzqs7c/,Iv73ߜ9}L򄆫"KL@M_ԒFyo/t龬oJ7 @;y͇;IۥdGN@7uIݮ+RUQ|nް,n{i4m|ˎ ߖ7h v_*iNSuʦ ~I1~JrMau9)8*!H51eW~yRUQ*W,`SBƃ+^Q-qMUi+v*E0wjWYضS&FkZ}2/ׂc<4ǷmD/_+AS!޴ى }݂!L n,ODd7-=Ǘg#KB)hOɉ29[OޮiI) t{=xoIDT|\')ZeWTxIUuuÞ*WQm'}twu?_5DRBr/C?p)%e%$¬U׈S)R+LA 6Jj`2e$Rm@x'<`ZI.LgG EAGtIz?Uc=!F|G`lŞ;Q$w?VA/\%t~tT ~^imaB}N=T7ts>#tť?~Ӳ ut땂ZEtFu$3(й.6 D,^Guu=|w޸N`22 pRSxC gޱg `⦧e`qcb@&ϗw]o5pdS>Lu79#F Vwm܂Ø, Db? r&0" OFxw4iƶ3 3#Q,U>΀ܟඐd{vpz٫UB"c 2\R~6jmŃ(jl8wd큀hR/(%Άdѓd~Hc& y("0h 瞪 9 Ixqzs9pr2ހow`SpaeKed֎ۂ XQE!m+U\Vg< |BĂM?G;D~pr,:J8p*LJy:" #%Ad&3AfbnE0즊b~Oxvg]t!dlF;>'`sX= sǿ:C| * /OCLr @]N1diilp3QejA a _5h4$7X22s5'1j@(0y$foo=c79x % ݨfcfKwO{|b -X[my` gdMR.vAl;sei@O?>nkk_dzPaܬԭ2T:kqkUbaOrWu;#}2aG*_ ++#<a XtbΗ5z*\ J< %ǖ/{*UW}jK{uKfE@*gqbj9 #ۘXh`*,f].$;2.!ToF71Du[gXQz7=glJQJVm~Fp8~izU_DXC&PϮU )?L e)F.Fe,?qUVѷߞfEu`g||8qA^*hU}Nd` vؙMf3o裙tCl JOf`lr)vR!e*R 4{I/fHuYhfR( `+ZI,j]yℛ .\h GAbLTzN zf'd"W0hٓf ąՒ3h,[:eBFChO[#Q´Gr.͚lv1kCqw(JCUM\ wxz/(OM_cʁtne cOS —ō7r6 EDh@ʇ!qKlV$.Wz<zOTAЉ!- eLGft>aiq=1:L" -`? S踷XׄazgWN bBaU\t*ɹ</w<߮C%]A%y2_4Yy E61!ՙ6*|sr4o`8W{e匹cغ w$bp `RQ iZVZÃ*bz,5S]qcKi8N& 86AdXZBz٬ -]A䯻ChAypCG›G~ D``ꨅE㈩SkUlulk?Ȕ8XO;b ZG'! !$o=/ݷoޛ=3Gݽg9{;iGPEPȾĞVbF2 US2 Tz <_ꍼ}m{6 ڈsQk~v}?>5 7.iiG.*BQT"ځAFX燎q:2IB6ӼKNJ@'|p=,I dC71+?8gX oࠟMʥ[:_݂<ϫ?wpЫ,؎m#czKI I(7Бq'(9p*ѓOjiDh4\辂;* [ZƍV5 ]pX:+i 65s, Ѐxȧ;=B1,&Tw#V`D mQ fGN[= fk3;補 'eel許,3+Wc37rq]\:oʇóvnkiޅP SګKXGq+.4bnViv@^a2DxZt`~zUJHS))+xI$ڻ{ 2-kyX!p<ӌ܇2pD _'X~QE(u^ݳR:F8~"QjִʄaJ>*78Vn]cZdA-{SQ2ü [ 8.ل1Xt}!ץkF /2IL-T㝱2UFAj;IG&$0T @-2U{|1Łcn.VXRjnܻҸҶ)9$\"v' C)àݦKXWWX]?ewb+]R3ƅh"_v^j#Fb̠ab2g, =!I7릕 v*4T@5PsM&Ӫ&gSruli!h:%ljNɏcu]F߂$ɋD"avTr6H5gIOwۧlZtm_ e;h#Ѵa6"IC#Mμ2EyhU0"TSeµD]RXnі ,\D~W ɊH6F$bUbuI,b.w+b*jO;cYcYlg@[*RkBu&#<Q˕Z$r?^T'~ p/(0@dQU" ƩtJrF, b(0%L!r"TLRxr jus9=wHpK.p`PSD[I%Xݠ7̽J BnI;g6#AM[$#r - CtX?\Ag5>!b(`s\ K!УujC/o\jt^0/;}t9N"nz G:ő6tRTrUg /u&ϙ&rfM`QK I,B -::, ~X :щM9g&!p^pNKM^lU3k;97HGb\]+lP{9`qa]$V_HR*K%H#.s9O>Nk^oWba~3%.Nښ^xo>ļHq4 W>maW7gkbMqS`y u ׿/bgĬzҫ,: vvĘoOK7u3K`@(i4nwQUz'BH((MAb^|'"DlO,C~jHTijH0&o=933sΙ07rf˯l$؈$Rud?(Ftq圮C+B7j8JFeXX)m?l$/ M7+C+yNtDޞ/*nJt.ۗ琶|<̀rHE_V xJm $Y@Wkq?L V5=Y _[jDV!]ױ11]dyt% ;8 tU36'[Nh6ĝ;7cJsgO׳C LGj,\|!! bLV<)EԦm| b{8;f:  ΄pGfjrwmrR M'/CJ5fUxΣ W\Ka^~W?W(>8r*/lqJSfcK#:r~U|{+dhc:{z~]'-N8h;800#Sn8 C*CN66 3owZ9/GDd$J4[aAae<̼6POkϦmlwRU`c.SYw<4zB&C@5 [=G.-y]tۙH2nlD'qo% MF ]놗nܗ'[UK \ڢ}C==ե@߿ M-84'tMiD66I Us"-\=*zd6z̒7|.jZ)' )Ӎ|S;Q `β>5]Bv 8޺ {ȱ:4` rBx,]7gWAD8.*4~-؀˼XiUMgP[8T2Q%SC3J ,FmFDͮ˦!o X`*-l3O^擯L^h_u y "@ S23_H{dI@#VwڢRvmS*-|Mj%ZocsΡi5P2`̦{nbz9(8bj415lԖةYI*1&/RNR2g1f'0!++ZߛkզßMmz,wC8tAiļb~M! *)|U-8?ϞY_3LMkix V^jNX;`wS<l#RҘ#=TEhG8:?kyƸjԬ9gΝ2e¡L_Rp`)`|4!5 BL 0А fS3lOIe 3?eb#٩FG8a j D4PՊ@=&1|y=BE$u{D vl>.?빢2ނ$l:|LX%DFGs Ky5 ?`{]=Nt]רDSpjZl,?AԨnPWPSQU}qHZ=ne6w ӧ\b&zuAuUĘDvnlIY3MMeaʄc%ņ?8v%F0b;h[AwQxŹFe\%:X6_Mqűu^F}1%%;+FSLhuqj].)d).<~x0.j:`=u窰LiT$]{T&)%ٝg;NhNl>;apDa[%r@:%X|m;.{7!7ث|j`\fX#0$&YW{c~CX%;g"^2Rľp+[&ױTmȲ Hfōa/mUXCEs9.U}fP{vա?YYDt}9@iݼVQX,yZoW( Xkk"' 'Y'{c]>FrBliuڬ:@XFSM( &$aRM8*E(bAn.0)@Q mNM\jKs7;o\˵*N6ROnrOTun1'Fׂ.n/?:[9(:;ͭV67{j(qǧ_öMAqlԁk}7e(;\ӯyq&1ɥb炛l:x gs.vZ 6yYEA'wM؝UI5z،e/]rfUTMY/H$}31'=R @p8 n-JMĜ Qrti>}s>&l\a3F^ZߡX $f5aQQԚd0~^IP HέvVQN\!JBf`5f ǁJl#YSw½ YqlƈVP U%5ƴRGGhox߯f>Tc 4ԝ31+KFJ@ŎS,%vT;@0;ls#)!<4XRcۿL~y$Ю3XxcAXPZb) .ڵμkK:_Oz[mq pln}ZHƴРv)+ćOw86H%yU9P:4Y]OE4iP2M_Z/jNDp'c#,y!uAe#5تnLہMi =[$ia^nUaɆ/BB@|W7VISqDN!䇙⍺mƉZ[anpBsqgf^,gpFCjly"_jgT K[ZkiQA!++Vb,""#YUZvnQW! if X#Ԝ-ANV9;lV 8Ł54&s |kH gw;W S߿W_881zM_^cF5H&JiR1Ϡ჆/tiI_Dtlk /ƀgųGʥy҇{eowsk.j۞6YQaɑ5Zu4c=|ڸ6 XCXbEDD /]ѬnA\xkuyDcÉ,u;2Kq S߳+_[2`͝&8{`4 j`I AӆWcbu5-z~\eN,6W<=b5;Al̅HRqe!˱asYW1=|;ǿ GM+z"MZ'Rצw1 ר:lb(oٕu|ie?d3]yiBԗ:kPsؤYl;yА1'K] !U%(9yμˈO{G#WU EF5e%(A5!F|TK-2K?aSiHnԈŋr DXJɃo\e?J-e9w0R6Żϰ TSdF^J  'egfj{l޿rDUmϸkA&›?̾۫GHrd9gLY (" S)fHuÌkIzI9~LA;mqE@vϭh.rNJ2EKLn42e1p{#^ F?#Ja^8i9(-XJ5?#np{x!bHSh8u0F%:+!9%7ȼ^|WQ.C թy*SSk5vGw=>vx(ޣc?i/śaM |P= +oZ/zH@ݷFAˍxKC4'V卂 a(($T90/? P6F׵Z3mx&w<9aRLmVHZH8#.t%Ϗy|`^`5l%"ꪠΡ' 4[u n rsL;6}B[;3.p>`ZVpx.d@<7?vXk9^ .g۪t{]ݫK?^.Yi݄~gvj%G ^%9ؘz$VpFxNKJ}W5J7_֔??L]1a`~_AD wOGM7 Ї]a{ج/A+*-qDT>O%x5wwv[W 9l{hKEiO"An p`\"+*ӟj$1W< @7Ɔ1'xLꯎ{OW` pwtq z;)V]oedѣRMy lg/vI" ^^ N/ j7zkeUGӷg$~C_H@ȱtG gY%ɸ"-GmHx=4w=wΫ걂` 'ꔺ(5>k#J%-=Ʃ~`Ā#yydG؀6t3[Sȟ.W< &:ySY6N az4Jᾱs}=K-k\ `)8O56n6w]``} mVĊ3`eƟN#:5fOO`1@ Qe]$.`VL1@"΄M҂}_&40eLa0?ek*r\ 7l'1tݯޯ_ʾyR6W>Ɓz+׹{hAq^+-vc̃ڧB4.B^C`^,X *`:2z`:%I1B00ym@ٹ1{㯝]eBe5S8V?E؊Yal^#u+3CQkD=s=qI'>]J?xE?B?7'sݍQ~<-cZJcؑE϶gZiIXw!'F=Xo⺣ѵF8^У V -`@=$Ւ`tD֢A,k+pĜ]CZE #uGO@y8!@e-[BSP:IENDB`youker-assistant/src/res/upgrading/32.png0000664000175000017500000004050313260315532017321 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp =pIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #u5 1ς\$,`#$Xh0!HB * d(;biT`Pv9Xc%Es"幧Dfqգ4-?v[Ԛv7`jO/@12jp ~CѺ+ [@Q.P/: t %pP(uP:UàF.o[" [JJY-8 Hñ9WR>3%T!JRRƷP ⿩/%'&p~BiF(s4 #ɎCj_CUgyߦZ%Q] \ȁnz@ ]W Ř<'k_RBñPkdv7]h#[ 1Ťef3f7vp2,ـbWc טֱO^>PuVc!oHI6)/%L 7$by? )|ur 'H:|($[u 8Gl[ʕpck8sَj" ;u UL J!aPXDyCDmϴBѫy5 'n` Yr*|Yl]p&ff^^O>`T} h 5Q 8WcaW?PAlG.p9_QU   +ˆM>ȣ kM 9ډ!g"(qr<d'J Hq o1 i{BP" G8|@ٓfwaMLl]:b@6C2t$c?-a@q j[wk " SmBZa`t#BՋPCe`A*‡ BAEDKvܠZkmvqΙ=̙ٱ:/ n JLFME{y}ޛeӵr_kt8{Ą5q@`ݾqD wD`YėJ"Q..eX@ymn=&蠬7O=ܻ<)c)9){%&\L 72CI-P;4x-F^^-ueyie" ЫQhYzխL%"+֔MX;ek^&mukvYQ[ΔM]!AW \} 'qOD_V(*l,]XiB[:Q>M*zLz/)e`JP}(2ԩhgMX;(A&-]uNT'f#SUU5A GPrDklcJhz#1_C4&' nNpm}m]8_"kIbhWy,'UL,voڤpX- ZCdC"8q & 0<;)wPMQH-U[jNү\6įA1ZZy8]n#ƚ`A}"pYb0'4[䳠bZ?;92Id}D\2%~OU|DFQ]nfi;YJ||HIv8Yގ E(mn/~^0j.z0$뮙|΃PD"L/\~:t?rW22785EJvsDE.(ô1RP5Kx;̼ ]u*b@+ J\FzaqCN4 ܹ2*qiX\(*TQS.#3^EJD[u"S60בhwN o8k'3\ c2:p%~ l|AeNzT Af5p^޵nRKTuwVgp 9[F(OO/@xdkU`m%w|%9+ HK(Yqmݠ:у} -zonVO]#43b># ݵFUDnZ(eC- Xyb40A$CM$1 B4*QC hWGhAR(,ۥv7{޽3e$;3gΜι\޹PTL_;zF)6b@&S έ_`lb;bO@< yeo|/%@_<?/'f*2R|@A_;d0d`eʑC_7$Aˍ@r z`SзGV%7DG ؞,vZ mF6 |2# q`I/*?Xz2 k)MAF&si ;0 ΃8,W#J=90hԠYN.l#My($`dvNȆ\Dj"Ο()tĝȒQ|ՆNhq-4$:)@|x2iH#~_ˀ] A`cx(6-hN._&m*!3× Q,s`Ӄ+2#-ߋZvZD:)hچ6Tr)cRk#kvfm [;ڣ$|Y&cMVtUg: R2th1`R%㟘0 R1v{oTf"2OH ʀc"ڬxc2l]Z vv/Q|m] [K,C] kq c78:MါnIW=Yfͮyؤ3^r4[9DՉLbZeާvYFn:󽱓傆 pNz7^eH,őT{ ? 4jpR*[eWdvPMf 7_,iˤwo㯦%ZfL}/<$e rs=1~_ )!a@ޓj|8+NSP?ٙvgtt)Ww+NzlRFzBu]oxi輬dWk8}5>9x G6h5irik{E!EO%cXڡ^cɩݙ5%˔.>b|i7v:p E5DkҪ- 9X[ TPpR/-h9΁sNv{45z5X$Zs< %6~2u_N-l[(Ӭb1Y.0-qAqb ڎ>ޣP\iFef@sOQ:Uˊ)z,G)fMGP̺+Twtw| 7{l_S=nus8?ېDKVwNkOY4&2?<smLNhd_@@ 5ۤз/'[>%@E2+{8BYloIq ssb[c%խ 2.Ò"]7 .\LAQ.oknq+;R.07m67R(Zl<Oj]>1lZ;o"Y6P6d0{l'߫aC@?? L 9 #sjoۘ.gy309\FB;7SB>O~ `Dw{Ab|>Dg.c&Я3c WU\K $$  ZZ( 0uVNkqSehL*Vb+"SB5%$BKw7yyoݽ^^hό^^{~sϞ=# 0ȾĞ1#^SR T #PU8/Oňw=}kv$$TwF䭣"}Bl`2$- E]R|]$OóMd٫W߫V:YG*C6[zXOxقMxLvV%_{~*r":7y/}ev( &7CvԦ)ء<{(%l Db6\1 l QM|RD$|4b:P9^Xo2n\>jwP_Nh)_#TiY}wQd x2Ƴ@>`M!.zpg @YRxߡ|#ο.lp&зP=rj8Cx qG}@#2j6LDPf&EG# >^Nd2|I~* >gW/Գ`2O%p=ϳ|(>߷6mgT7x6PV#-~؏lF4|?Ok)NQDnV~HjhmdUc{'k;<%Y%3>xxOQqfB;yi&yݸ*;qSFr<4`X}1x4ڳt7_r4uƋ <Z'HW6ˆ#7A lz J>z}~>2j,I:-!è(L4?#`{?-#UiCƮ? _mZ,4ZOvט.STg]`Fn_+8EÔ_JbhtY~CwMlNX^ 扨j[s4AU;/~=jy|՛ұ#qF aZk6%K~cK)jN`LK[Ўh:d(ؿ/eȠ"YB"W8Ns[#}xRcqq[(K_1Ȃds&l[M<迪Rwmͭ;ȳye Sr29 5!4IG$I:8VOE5ՠ2U[\9n߮^`;Rdvxzd;i\@I:$~N_5NZ#)tHXH" V;D1`?5%&g]r^ْT_%k"Y,8?ۑ O>fU 1ڡdW~2|L6 &q.dߝ62|јR̽2x A#uO vgX$m[mf @USv.n#I#/fJ$2 @\~YX X \XPw(4l5ހ6۹(nE@?q7-k`A"Iq^33Оv.Եqܖ] 3JU/Yݼ$w꬛@LȆ9 ^×9ߐw3{ɱMVF 3]??KWI7O߷+ȿO7^iag@4j*!ݿ/ WWbxn l7Af5a$XBIps;DQS bĂ(/v|bG L8|_:V[qvF"THx$gMϽX}x"Ymu n`B"ۓ#yM"U-1EF{m,f[kx^ Hy&7D,c1( v:sU[8hK+F `(*6B:!ط%N 09B|'{Kkq+] ̝ f ʍג`e>t,qq"MqMQ9a\}Ilc l-7#0q{ъ`$`F˧",(8M4sǭᗆ "$pP3ޫA ?Qǫ</=t1?]+ _>YVKjk#vG\܂h;P&VLhlNhhki5H`d$=]Âwy\жs*v26J80)OAa-<̼hdP^Z^Rw( v`<ìutYM{SߐPMG@[žN㒛[C1'ݎ,i4N/ _qBM@cBx֍Un`/kDd do<E1aO)^y 3lvUbDv 2IoG4:fYs{tn=*znǡO6U,ߣ`oZ1! r26coO g";7Ga-[\~<|$.H"gP.c Pر5582 U6XړBuOphMIz*wO y8_`1#%\˙~(:rؑ,nڦV?mLm1Ke ٯ V_e0bR|ɏׅLp:e_Q1[ߚ`ְC ]V;j}蠚?<$Ը+tDBXjEL90/w0χ]oD8zB?6/ίhs-=0`%I Wo+yWHu%y%*pFS`cqQ=5_A/T'VTqaiVˬe cr@TzGۦfI98KTaWW*kb:575p<cˆYL~Gۭ:~~h8[j+:,)MWDpU_Ȇle@tLA> b vT`K)f}W{6rv߼x"^6`&HO@D{n7o, ǨSUdgA{vz^  mf+!A떜Z4囅ݳ1.Z>[6˶wZ@, A˅܈ʪzke<^rh=mם4MnKv7q2RX\jG"©#K7ۏiաLkk>iL 7 _9?~\GnFЕ`2֓l2xk] *&g"sޅ$ -o 0h,5MK)w[ V}{6mm12[Pċtp);ukrn`DeLQWG]qSvs-sjP{(*c= mӐaO!&vx'\} c٫֣:*ͥOY'wX3́f)qFQ'6г-ŹښEK4^ [%܂ `:\Zd`MNUZlD"Ẃgw@ pL|ef4v)m̪ 5%h?-3q2)*K+Y?$ !bzTo'_du,jºV\24=5!h7VH j4eK|Hl1zFq@^йMTӱ*F4E"9Cc%EzqAefʐVOrA?&ՍmiIcO:aMuGaB㝇喇 ~g zFۏmj)TЦWkUT?2! 䛙i4ZZ"Ʋmd3F1v\xPvN;tA> a[:2si7|#kBםs%:|るFQlj:TA?f^kp>ځ]eb07aL5[ȯ䛇YRA׿ȼIʣr=5#aҔr[AFKvx^8 fR XS:2RGI9F7svD.2z,DӂH0a <.uC yFEn'I+R!#0]V~5GM"i Yx9lCK{=*xLH2xۻD̋"b4Ƥh RWY*7d gˏ㎳!ǻe54v=J k[{t6:e8 <E?;5ؐP]1@=HE.n1ZY<q;!bHn3q`-?kBV8$D|25LBjs d'q,M҇zG @t{MX)Gdz}XK3HYvem SP`ɍƱ˾6i?"/qsbqwK}kJ7n兂꭪a4Q7"PC6PU6rc{[nhlC4ƶ4HOI&@cksgyè%gkZ,^{[>ݫںZ9BΪ)ba6;U^lk->^V-=mX+n^raů6 =Yͤ$?wo9Wj*A8b}Ulio;;BX<.1A7`KOP,{ݟKvc[^1_sch`K\$G) |C{ lpĞpyTZiѧqǓ`!9|^{W;VM#G=5;]~wb49x=;ᡕ$LM5s#.c]|8O~I|C=rQ8/`o 9S"Xuvjtn972QI0 ḅc˟gwb +-Zn)be O`3$xr{๗lK\ };#:#W`}^; Kc\w4CĒ,팅^.̎N--hJBtp=UHҚWF `ͨh;ʙ0'dq;Bǹsla}uسy SكΏ^D z ]>Q>Hyl>>_vwlzΉvv /oֱ`w0;v;n=X^YoUQsc6 #';Egth"9 vB\,GPۥ` D?IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #1qTHaEv TPTzP 3K񭛨af(|b%9`LψI&pX4B ErvFWPEG<z άXpX|Կgy-Ao ->_y)VU|( za1#3x&H6E_#)8@j7uW^}F]K!H_ &t[J%᠒{m-ש52wyvzP9}HRR *l] hR1z"`\ J8̔P=+JIBq0(B1Je",L$;?}+ZWq:\CjAFFv>sEo+#r -3v 6_cr /yCYYx`h+"%ـbL836Bܐ4E}Q3a7lFYP5o߿X> |EUĦqZLFlaՅa&Q\5&턭uH#M a\ l%  N4,ѓLpyr$h[T=i;Mqg :PD2[m_v?mBGe3'( Q@ *B nm!Uaxˣ(Yv diF=t<DYAT $AD].=t 8xAZJlٙݙ=ko|? p\MD|~@nDV}پxvb,X!i&@?ʯE]zC1h,W:JTW]?X,{*F6uyǘF% =_8^Zmo,U(uGj٩ZSE:4Oz><&wO V%I[i^ %$W'pN,oEqBףnY/>!7]t3(a*HV]3y6%Bʃ_'bUq2@J>qAXQ`/GTTt7Z3f&,5AEAjL4f3q\g Аv&~HSтb\Uf22qiH\Ee^TӡSDfllE] 9^0;f+: ی 8t׉^Zs:~6?%ֳ}/suԏX37*,Iu#w.e;D!v.J `NP &'zp}ؐP3MF8f/.KrrQ+laAܔ\,LH?)XO+ҪϸaO=Vu%HwlH(4Ğ/y( sr;D(7?3.pwQQxۆJ -mQA H?DC &*FJA h`$B( Z-K[ m|sۻw3QN{g=s̙ qR}'o f=n.ņdծӞ"N2sga 6Ġxd-e,NE~za9Ko;)0˽`Y'`EN 5ܮߞ#4z؋}xrQy9J;ME*J'% 34Q3l 2H-9 LA:۠6v⁊9zl(z)>li)!idՂqd}x8p9`jɆ%4%)G }ݔm/7K)徃MA>@Ɨ#UGG jlhse VD2 " q`CP LU,=Vxn #Wb#@"0 8,_#J=90hԠU,.l3My(t$`F{Mݐ  'E>; o )J3ӝ!e|ՆNG{Ѿ^hM]g(aȤ!51=M?Uϑr=B. E-\ᡴE{lmAtt|2СK2e| +2U6=i' \Ҳ"lIA6QOJ/;w[e9 nmn"+Z6]"h:[}HqIّ$b0KɰX'|!Dd@v>sh5gI\rw93 KoKZZVhx _ 9| |m\~Nljv+4M :e@ M0~]]\n}P8yd(]|rk.n1jϟSnd-w7vR\RƏH[OX@V GRA -+"4U}0=Ctt=-?k\.HvvmKy Ud)zc2bpQSL6'{(+NSPLT3W[ە{7RdRD y}BuCoxi輬d_{QU.<7^c &\j҆6)ُh_K>jPSK$JY.cfؚ܁EJ7ԍ_Y1 Y;{TG:iՖQRWKc=闑pS/.>h9knv}'wnBEG-y’ckV=?įnKCtKEðu4Y,F?P<> k\T킶QzVZ jмu Da;Aѭ|ߍNJrit+JbHuwJwg55*  Mx?iLn`&9k}u/.aRYVҚ@dbRr|>WܹUFY*hrJ†Jq06pN6 چ6#@E1+YZb:pp.eDyRlh\5 Pw1Kf_iWcCM V(_=$lEq XZ[6DTd qaD Eʣ+?œnmO k!I^V{)ȏjH2K9I,߫adbi.#P8ࠟ4395O6N 좊SI.x=.H<BeqdP/@ba3/nY d Pi^?rxd[TGTŽLVΘ[@ r ) 1.G,&pv<[ -2lnH6GKTMZ[a>6k<x c~k8W97=W#CsHA <w3j$=mSZfhp\0prSiG6/{H1Vz)hu&O!?ZIp ''EFW<*&HG!K^YYF8+㵍tS2~>U+uc6,YFN 4fqĀe>n7''U} ra2xC Ed z ]1xx*%]`;sW>tHZ*%[_Qu{:I.J6R9>p-׍ 3Vi7fGXQ_u fkt`-(U{33I>IDbm fnʅuq}*h Rgo>P'Y:;e[F$]B:`6KOyLA[N 't!e:u?*jH< cEQbiyӎ`ӧxw^n'%kƝQg@ A2 P z} > ȡEf9XubI۲M -ck(Fuغ JH~`sNڮjgGFF+ڝa3u+X]w("֒zݐ % Į52-u@*l`_ڵz\> [)/m ' ERT0f#t,1ݺKw*TT*$V냗Nb> BCXMe~qA 3#RkdjuUrZ;#oQ ²*R@4ln.7ŹȩMJz^Q={\v܌nS2s݋upG&%*o$؆e&6vОBrZ^g__PIk*D?rG Zp܇n8W /L%->T+ښDW~@혴 ՕFNOZmu2T #`RWU8iQn7TNMJBB=\f$loILr ԪFf)4#]ӒH,:.ؖγW}N,a>MƖ8Vj1T#W?]Fk,O.<: nBCU۷lDu.ܨ&>ϳN9S/,D%8W_iY:Ė$U˘ R#`PŐF4Sll `:&s88TZ'iwʆ0Ff6 r;9%$IUbDmM?r1[߄hm (l$'35`۶oz?=UiC:U 7+_*#xdW=OvO.ӽ$>qP#Q#u Dm&NT:Ddr2(nk;{?mաdžl[V|V؁7Jy")9`LОmbVMwGk?%ߣ_M`tE3Iڇ@J._{X$m[!F.#O7X+l%2$'咴< Wl ( XR?6 `DD1 % #c%7]^& 9p:X8ᢰ$&H6&5F$lUb${Ckb.o1nUZ0v+`scY7'$R"5!hຶX]ZrT'ni hQEU/ ^yǷ*BAҝXzrEP`r/E 7"IC Lekɠf3w|tڪsW( w #BM "A"]܊ /"qX uRk5փߖF"SB.H mā,{Bk0T:P'-,% -YgE*LxE-PW4KkƁ&&@nfƨtM& ƙi CJS?+=MdÛJ`fS֪-`̦_~^cRZ$cJԌeV`=C7  @K' [e#Nj/w5 xТQЋNЙl9U;C8Nkv!_s +ő6P2uH/Z:GF:K6}^ԬN 3DZ71j5&n LB)|WD \at1!W忣6Iyd;9Y\J'S0:^Xŗ&:NxDQc!;-}@{=EXífl^xքΎ# 6|3}&QqSP9c}YI0'ʬ;'Ey:2{\6RP;M[>N>~&W?>T]4^53ySb$5yL%d уdGX6Nst\GON_`%e4(8zeOXIP稳HYS^? c6Eo]M79T9xunN,u.0^iCH@ _A4i>JQM&y<|ܸ`g_G~WfS) Пnp]Ys ޙIQdyC{QQ@vGQ>gfpGDj}Ȍ袺:*2}˗/^x/E#MhAFL zjP6O`R8lA>꣣;p5\s=`O"VJGFu[cB[#%8EM ё&x1GUK^"#?QĶ痰]t( I;#wfcvc}|oSM'Qdf$: k|Gؾ1㮿o Ԧ `;gô)Yk+mAp[.Đ=|q(`FY#(84sƭXϘeD/ ۬Ad!ps?LG;xZ |tHf/Ջ/qyO7:ɦ gﶴ_#h.\nq.hwtآV:L2 ^L6?cGPOkem=bj'c v"q\7h-j-yly~g `7 lfϺElԇ[qM @i CC-`O q5un{ 6FݏuE}O &G3*݄6բUM5dk<t7c z~\PI?l[HVn.> v}=E*'\WF%>UM@O~@ |ZlT݊eA& " x*UlT& [#bv{Qt[)x㾾챦!mඁm .L;f(Hl\l. >st-?4sFE)"6T>cf:L a*Ntl_OLȤ9O,MLo [ jJ@r~W&dI;/  pCp?V`HS9VYh1"hXz7_r9v0r{L^#Z^&mz(*`Jz?ShFm<\Zx^8c պ:w+}4˳]F XLDY WCl2e2 j oyx<  -Eak xY5E?! @Bt #eL2g?x%Oj V~J;izleF`8Ro@R).Vۤ8tA]@ [(8~ӡ\e8Ap$3 UԼlvz?az َs4aU@Wױ29҃u ONOsյ!3_ybu΄ӇF lz${V +ۊVԇ xHsoM^l HKg!L5y|Sl^GLt$CIkf|~v]wN˪+VI|*LL Q ʤ~C%{0 :wciipȣ1EMj=|f|FJ`Tn@}`/j tlFp_68 nN9+2⭵J||1م0Sxdt䱧q!LDaR،h_DA??ѯv'`L̳`E,A~:n 6g$8*wƊ}E7W{Go?ުn#7`;Ұ9 .0)DzpDNv¸`|:E>jI|ۄّ2ŷ+U $$$VUrǗywE[^Y89ѩ+*kI.IFuOݚF?aP5 G'l~AtmR* ̘eQR.K9>YkMqqS2KV,Le4nӸ$[(N;lg`UjB\T\ IM$$3֒m2< =; zOUO0[*=JԘ5k&q⚜#q>e-8%.i zz17UYSJQ| IzKdSpTΙɭl\GCL"ΉRHQJӕ~{WnՂO6; yR cP8%m)bzP_o]NdeeƉ)):24C Cnߩ^(!Vk:0đc*2 ߎlZƯT6jc!Kb"89Cc%E:zqAef̐VKrNǿx&ՍmͥIf*1̰mVCvPlrCA?OhMC;E Zj̖̐?ޞdŲƆo&t V[ehxb!e.!ѫs|G@i 'UY9{2KnO##B o̴ a <.uݲRxR#`"·bG~"'N+B!"0æߚ'5EK"ijUK+Z7= yLHnn?o_Z"o΀ 4<ш<1{F2;ZlfU0^#:tĊ\--8XkM ۄψ%w+-{A7%Ҽ"v n%b#~ِC Z^<.϶Qs7[~ .L&2آps7G!O3m1[yz/uل:W9ۆ>x$-K=4byl_-$u>d7ఽ'Ϩt磳E[+0UAx|hG)%aD k, Mu$,0XPOD:C#K,|{$A2SK6o^=_=)sX$ F) |^C/υ*%{9:zI0I49|N{W?>gڃ?lt w5w!5B \nڢ|C ~Xx=[>7o:nI6)b?ABZJBׄ>__t.p`)Go鸭oo5-oŽzw`#ߟIJR,-L;gV'zXuvt؟\(L$8aLFy['wm1ŀD̈́B@SY-l @DRIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)ұ0і~ޕbu1=9`M@F+I`W>eB؀(;J'xAl_}F ,=,gP ! :-q@K(a# l,|Q;J.9d)E.0P, w?0R ri"`FAcxkNF5l[Q 6+hb@\ٲ.Pv3%T!JRRƷP r*zLjEc+˻6 Ղ,Q \2|VF,vZmgl)$^>y@X: Z h%tFR;j\IW b2B3_sJXCl@+Z1 ,0>yCYYx`h+"%ـbL836Bܐ4E}QUpq 5}Ns2lDqol.Gn`_8فX ?@Gś V sA6OېGZ,8nЇ9J^q 0GO cHVpi? lɧIoQK;zAvĞ@w@xr' %䤂 G԰|@ٓf#D'!X[ ps7PP b$D!08 AApU@ޭ7*ݜd3Mga%I}P+@tE 4"J?TBb_l2bw{{yyNF%#ܦ*9@Ɂ/[YD>xvH,郌QISí_'? >򁧤wf@sAi m"Xy ̟,YijMt6~uԹ|(4{pt|5KR+o<ԭU^32=ZG\F]Y6(`>/4`"fJxPdLPkjM[L$aat`תWRLƅV@iW\ǦO~-hY<8 m@IɔN \*ׯUX:&VՕtp^+#Ò_?5J m xz,y$8`V8;8z39,w#VY vUcay|7>A|ϔ:,Rh7gk?kϨs@(ɧ'"rip@VI>`zjC! uqYՊb#(=֣cW/q]9%.SZFuk>׀ZXD^rǤ;Yk (RVFsos FڟX4)yՕ0LjTXS7H-&IǮfiSWiǿ72UQe:]zpJ!r)%n+rrt9E+)22Cjܚ~޶d=r S}Qt8ou;ݵ{qf1LϽ +p )H:ʷqqnL^j`&L>ڰ 2'{:c WL堣%w?8wG';& [DVvֲ81~rg)\En?JBigӒby~WPxGo Z[P:ͧĭo>tItzޛ3gdNИ}zQ *TQZb4_b  ??va]%5"x1>+4)JM.C2 UT@QӲ3%q)H(es,7&sv:Pn@%ؓ/wWUƧV ޛRVj( b &`<I@0!` W@r$% HK-u~oַywl|f{wd!Ss=&<:ZEYHoM[eR"K#%~t(# ] $\$cdH|:;8|y~K3.;)ȟ)g[߫IÎAJ@!(B !jBNťN;@`#͟>K~6K",E) L |Z,$!Lۨ[3Cqh9*fR78Q\g9'Ŏ7|׆I{PZhw8cMǐy TҐ:1Vϒv5@[<!xat{>HƂ19uuvplj sBLY [ALMK߆ɀ45 &!^h`LhOBtl_e4iqm` t{k 4\%z'p:ƪ xk:(e$q| eH%{h7H(3(=2p S0f;U!3Iŵװ-MʷFۯk1{)%аx~-8hURnL:-*y*.RP<Llsv*ʔEx!rwb#8株8yd0f~swQ_XHxʃlF$ w*nKN4s= 뛃fy(Tj'pTi*[¹e WdJS[(AFgNj/KY-q6׷8 {mmnjb۟d/Pfns\T-0z5 'ȚT+O&h{2ݒk.ϗD)Za5;O"Y>eWk8YT9 =6"y -544Ҧi2޾&(sBO-M?aD}6g;²&{P=ubBG!v##+ sQPjkv(r#韖nkC5(/-~p?sN"Hd:V>/EG%Y^ŠcL3fKwKEmP*L,]Q#;=Na0vAuR32Hs'oX3DSɫ*sͦ.Q-ʜU\YǸ6qݨn@N2.UBtJU.˴GM+C'XߏYnhUfTt )9dk``k#|~v sވ~ť`r-:`f|'&(aLRK>u=ItcE!27!ϱ~xòǣfE6']-rqB78N= T_jŌh y};nٯt`&Y]lℇ8yxe _@fDJӲiYD9|G !n>f$ArX0xѲ{] XY1*:JP.5)m;ŋvXFJ&܇Ӣl7&_EB%7Y" fo74N[@qzǸwgdZ t;HCE2Vϩ2]1b/zuwKx&*tO%A"l(Eqj{gACzȚ=Xlxs6c|,;V βynl9Oxb&fɱF kr]+E+ A dƘQstKI^MV[L>//zKV w V ȕ;*Eʻ鬝1tNm^.x `ri!_"fV@U|.8[x$XKᵐdYypL}=,k6}I{7Pwqv7aA7+y\Uq7K   EEA)4UjZӁ E*>F|ʀ#/! !/瞻{3䞻gwO8)!E=: x#KxJj @%U9[D)fSPP12!eC ɚ=G}Sk <~ە\6/@~CG6y|wv7%JGՑJ?5wJ 6x0YUxܱhѺ*N\F ?D.LO^Ә`u2w^KA;m|kF4g>#')l.RCą_QЇV`S&\'Q]x>*E'-/@r˞W $OXTn`SA_>l"Kk},nB<ϭTYy^njl_uUSp>~: ~`и[^ߤ4L`^թ)Z=V dWY KpAqpZjj6$0`b:^ cɟ bV== @Z44 J"Φ KGYMO}YFO.s=3/3:bBjVlu[6=d2PisG'%i3 %<x&HY)xKq0jO#B.A/ 4r m¼ufĿMeqc<̤hzLu2Ct$yc~Z+ϿЉ Hh5q"֘o~_1rx;cL { l72}?qI>9i_-RbnrOH2OwJuaUv決slzë^75g)U^flVEwk` 4`z8N0{+aRvfO/WYF`se $J<|iDÎ0. t|y2_Ֆtfv4 I"S}+ DC灝Oв,kD~oN{a4C>uƋ t{}ݹk"^F=V$Z-[gf;ZMmp2tJr j5tlw+iu}z#AMNBA?Zf,Lo rSؠ3@Hi$br\oU_WSb@jr5\Wr5EH==+CM#P\SgxJ&}T> ^ϣJ @WMKHhD. ';M*!Dzdy }/U ũH~JfF2;mMbSޒ)q1#i(}AC_VGR,Y0e43i\Wsk lӟ.MyRe%qZ639gWb={[Jj@?,FJTeo8ѼτMm(L$?;U6_zNDGӆ `Gz[ױ bZD.wWY2If9qJK6K$Ն%H嵒vc\Ӆg)OE6wlNX5ܨWDTۭ9dH0idRqMJsn:_8ȡZ_ՍBݱoޮ"vh?"6V|_Hjeyx~XOl̋( YX3k㴟 !;=pсO*8 Sp+Ql+WR6Y fpa)GDOvhU{mJTQ\y`Hm\ ItQٮQ7kfODhvgS3+&ێ~av]+q~ͯq"CR*m:P&xI8 @`ᲱHg^UИ_F䉜 yMg] D!KQ{H͏ !VS|tvԜxY¤18޷ mȩUMUI1pD^3X&ޙ\90od{)yݭOlWͯ#L@Ջ S M 1àfX7u\p٪N4ApY l3Bfx -$oW=\G&2V7xPV1Aܜ4TsCIE^0rV60_^-rIŲ6".ma.B܍Nn@vS52{P+*o1c 14[FɁ9̍w.AJ }RkaM;4:k2/b&}ےp()\kD1M91x SzyMpUR8J@B-ݿIijnRf\-Ս˧J!P=O[լ܆a9䑱,)CIs DUSN2/#&`pFI?$`y3-jpiiL⍜dzt\k0yp=r"İ(m{Cf~NZv/TV  gQxͻk6e r@{:9Jq[VBvgMRr[W鿰~Tѳ,N>2YI$t"JN{ -3Mp,ghp!`ς9؎g&CüS5/3 n(X% zh!{RoP,я0,%r0!h g;bʒu*?2ωָmp׼t-'>U.ʶp/b2GŅtCF=@<PI2<2P%[h< ܿw  kK#]8&ApCqA'*0ʌ 3¸ *: QvPPYdXd Hڙ{Si;u_/Iw׭sO:uNXW7! $ڙjPXkO`R#qy䜎]d-ՎB-(ܨ鋉NcXb!8ȨnkSBR; 2??3v$C ^u%J XZX'ٖ< ւ]s E= :^s[%ۏ߶I%D+ ƮԄ])_ &lEzg8sgom86`;hFiύ k ˚JG,~Kd)^ؾ.i7愍``;gô&KZP+>п àv ul}0LK]|dV9V<ڟ1X‡_.Y/{u~ B~a:jeؔa`[9v{|vK;‖q'Jڊ-ډ m2cdJ5[0Q:ҙ3!@4gA?|Ek.sh[9Ex!4"j'c v"X3(k- jlLoZ+`c3э{lě߲8j29q8\\:鶷`sugúT7Ml1Y7V̳*&ELc)7G>0wg/9~l>SCsA%ᯭ XH3w"xH@`AZj $~ShE.`CU/؍[9;6U '53D%`^ 7Ry5_n`DxDև`^o;GNS-6T03&R]:mEf'5l_wL̤9%M"7D,5J% 9ozcd;l%TT*: G^+Y~Cv[AL K,|[7r-=VsM wacTu=_v j%_ZssG1\|TaYZVJcJ_ ,GX:0Q.*\7fcL>rNp 5ax=9lk,i͆:fC|Q,ZH-^hPM-euM mݭ4.Fr1DR)&V~M:iz -2@F=x YS։1K50ᰱrHUF  Gb93ߙ+E;[&QSaz{&wN~kئz;aO|Xo.Vx^?xۓF]ܵv-~Eߺl!Z1[j4,e+i+qiܼO6r~aǏMu4`.MgƘ%Aa" 1)X 煂Lpڑe~Z:Ш@^t4;*s 3Wsc1^P/U 5< "۠R+")ux|I)U!-%¼-<)G3`%؉ yyUv?_Aw3E<'}U׸"DΡChjl p8FrTidWhD׊*߇wX-3,s'oh_d*yrVSDvxwA٭X(yP֎pݦ/iu ' [s~8xg[c|0NZXJ~(^!ZUbDiq֓3R۹ᔷqriGdbMC)W֛ =V+"vDNA/q:8' vOTIpuNQU%Xw* m''NM2G0Nv}2V`]A_Q5~r;ià SMN6KۤTx1 11+Kr\.f-tdN& )?IO,Y0i8%lu]V*B1asE9Vbj8j0N:/"%$n1IСq:|҄1UVJجYS7f3-Tf)>{'cz,u/ˍuNWȚ&q-2l:'2K%"E+6W櫻y^mڨ+Duw%:܃6f %h?)3q)2K+Yߡv^־җ9i\z!/.e q!S/IcPPvN@qZSց!'SA˄W2O{k7t$ XJ^3ɉ+I^{[i lU%7uo*|6nlCmR'j* 6hۡ@ď[z'o|ۦNH{VfHf+E=g;)by!ēQҳ1,B*UG6Wc٧xTqjCU C;`\;`O)"c_N\|≙X2f ъNo ͢=vP` 1Vcrl!Q}ޔG;+; !M2;2SU9 s6iaԴvA+4(MIRXʣȒkF8("]).u ~my`!_66KwhGkOL0L"SfRΞ٦9[3|qy^lŚˤ1H_URTc#)@syEIгe}4JRT,v:O_yFR^> EtA>mMVX\v+W4%ϱӔejW3HȞ Y5ənsw܂ 7' "lEP6kޣOddgNyCۇ]ѓ>J(p#=7A's<&IZt2:7:* e Hfb_=xIPPCdc;'fȓAFv7#j ^ O-ino}M͠oҲ3WN($<1rϿe'm|J-ΰѿv@ɢBؔ,_PئVvndcɥGmǢc,7RBn݂ͺBYxޓSibZܭy 9>fKcmlnwnسT|,Ob^ Wm$@8{Ҷ~ۢlH_Ԍ~vMlacTŤĬ$?Mټzo "[`G w/\.#L;B]m=hd.a9Ro xHwPL'b/j܊ ST'mKlh*RvFLJ# ۯ 3ۣ..e~xwo1ߤoM!]}Zo%ׅl [O_|{58@| ["z7㩿]9~`AŌ05|Qڰ?d V/f&tz6_'&ܘ@GWj-<-̟ |ثlV.LḞp3fcc}}lHzɫn%o݈X TqŌلkr(Iv.GBش<-^B@\2aH\p0=]`KO'9|9cζߟڑ=6b+b,+` Axx;*)w:fK,$h7ఽLjר?k0W>:[v"i&j-BеK>ҝlas@jӰ.M?xK"ۇ2=f imMJCPQ@î$M&, œ-R"0ڄMk8ՄZ`Ks1?(I-9_}·%[}}ya:bdeGs6@a*1f 󐥍 ;ѳ9Kƃ|Ğ|˻u) 1Uj"KZwhӱ)F\G?AG6:зؤnSC;Z3=x>w";Y Mä`Mxqbb嵽`M_H{E`7p(B%&k9&pm1]S_IENDB`youker-assistant/src/res/upgrading/22.png0000664000175000017500000004337213260315532017327 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp V VC'IDATxbTqXp+]H=Vy1эk` bvpn ;d8P{fA`~?7"?Q\  xY]Ná30124tx![fx`lAj13Xfv a`#t_JU8rZ 02!sBaLH&w=M~3#B0 r:&wGN)11߭w 1^v8)$1sP*Cd%S,a˙2c(d# r4H.hx d @+,2X% k`"(rA^ʟ1 kK3mA3,Y-A⭯9 Vs @ Px, Ev1rB?xhR-{kb(vRaf 2 Fb@KD Dx c oV˕@ XC2( ޒ-p7jC#A\P^F+kf{64^_xi3D?^Aﻼnf09v73(§U*Vɂ07``u_g$ߙ'=F^w A }!T%dGȅxf(:,w`G r6\~xR^`VjH&x V&r=T~h=M/pճ<"g ބC "vD}ʴ<zR|p@\,e ԗU9*j&BTH4ia8J8]ސzzT>u5 1ς\$_`ψI&pX4B $+x @3+((\A>oY,8V]dy>G~/*hKW{JTkW+GnZnx ڱ=4^b$eex7y!.g6@:f ZIu8(fr#6t~COrjd@`EaCRFa_Wae)/`t ִ@O\$ r!À á[YE0 0%T!JR`PG pPbHQdxA*D7py`2zY̍uT`Fn_C]nUgyߦZ%j\P @ؚ\60 %|-!'cĶP X;J(~ `wCؚ mXtp/&-,454?ya+a 5c,{yCYYx`h+"%ـbLMoA\˭:W#D-AyO85lG5pƝ\|: bXz?ݕBJàn.R:CDmϴBѫy5 'n` Yr*|Yl]p&ff^^O>`T} hEj[S`|h+ÁrAlG.p9_QU   +ˆM>ȣ kM 9ډ!g"(qr<d'J HMP6 rOJBHIPEك;EeNB\OQ:v1?u6X Q@ *m@ޭ74*w+_-m͹15J)E"&&\F 8}HhQr dllfhssy~םsy`nソ>= mqn Kܦ?MԢGyX@!^!O6F- _yTt_NXGp Y9U_G`,GN]J AƉI9hj1,2\S$ VH'z@gp`iA˯7/m0fL=r&Flŀ hzOUV7/!ˋsHykS0ɉ8V;yg@~K|td\psx"/ћz(wISۿc񉢪2A5rqX׍1*VxC腅dy+>U.UikZ2y[ $ Ż|괔:*K9ddYQ5MS>r8 R Z.KA lU!?ڈPǕ)ഷ.uPk (*l,ODd7-=v=aNB}1i uJ"yD;^ @t;;#&(  :?\*=beHdg{IUzUTgoW` G[ARBCr):l7<8y@홿w#LVE ܰi"MWS=KoDF 1>90I[U=Gf3DBʖ/{!.M=CrqYcpe4?D-B.nMŮ75N"~ci{,!Ԅ,EKky ҃ӄ,}dx8?͵"r_|zjf2 ,ADJ _>u*3rMc1r]t҃UY/gh$!ڀ#qYՎEI(=~td_y.K]nK2u|.WD^нr trq8T (I:ے?_ơonӉüUP\Bn7"TM/EjQ`:_7j|4(,k)J]xC W}L ,&dbИsSV'<|ׅV}m)L/~,p3،b8|֏[trSm3~췦]pG~w T,X GV_U}x`#hƿvVm!5j馅Btc 2\@L&vae/_oV+ϹckS?0h{OӗzC%< `ΛT{Σp伙緞-`^s&`FG\?_E}PwQa|kC Oj>@@EDBc#&D FDI#` 5J""%ix[J[(myK6o}߅`6T. l>v#=>GMJ݂)$>"v?XZ #FzSR|wԝ|q<؝htwi6A{ǩZR‰dX_hy|יԟڣdYo ًKL3*'yy8y߆SEfB8pz2=AP uɫTa}V>XyIxx6nE;CE˧h>BAOXA5CRb48Mǫ 9f 0/GF /`SAjI'm"hf"O1SYTl&S2cIrA S)w;،'.!ޥ;dƘ'I? L@͸JE) Q!6C3 ; d0'3 6Vybx96 4xɔ#NuG j 2p&;yx6+Z˦;.q>KP))3YۓN3a3o86aq[[k J@ȃG/'1.UBJ"+.mp0@xcxHVoR"1n\\q>K\1$Vʼn=lNh R aN J sޚfV?v^bVKZڄdd,ȶ 9x2~vk0xZ~fyǚ~RԊ]Y> QUA(ۊȺ(se%ټhz+1IiAa%5(vyp/McrP$/;F^kh:cEGG , E y.^5[xx^4t[Qa1@f ܋2$'@AwL֘{B'9~tNJwLT>^FsEE _6))a8Sq-0vBQg!H(7AUE ۟千7UJKeQ218XVl=|>w6~1*d/ [Z[ 'o[ - ŭ~16)s{]~6"VEacA+#'h+}C҈Z{@W oSn ,U*VTiS8t/Z:J!v jgBxhx @$~{ws=wwϹ{cwOf[< 0GF9CbKe9}T-[DkI<׭yo6 *V6deCm;wW]t ́J3ǾS V>],z#-XLI6L-:%k[;a{/]EȵNv2j?"oV:1&3"\v"0)6_D ^nDU$[ m`^ߍ|liͦ=_,5w=wb]J!ZB.Z jkJ)Д}Iyy@7Тc2r|IB$CEE @$q gi|uh]hVl:ȯӏuջڽc+\8n M-lfCQOځ/Q?8六d 1dzGPΞT*pͦ@C5@#?^l2$vP \5pj?`o~{jϙCF( g`[G$`A,&@[acy?Tu8sQ֭Cqx?:6=*^cQq$hE x礮x1~/X/#4aV6=T(;xmQ"~16D,y.;B=ݗi*GJjݖMO6~ra3牂 G1%ih" 98TYgӂ'|~7my;xCY$.Q:t Rd̺Nds' ` eqCiIR@ڴ%f5c[!S-8sBz©auy}LO*GotC|,<ҽ`1,ֶ hNR%΋vA}8"k~Yt5"ȗֈKH,TÆ@0u7tՂQ.=Kaq}^n?pm^(JW,-w; 6mvyq'0*.%  h!WajAڧ<᎗vIXܡ,7aDўBt`|6i};-wlD|޹fBӥֽ% gۉ%'ƫ 6-Ptc|EfU3F,ojO $!^[(qعO+roţlNqG>'Z׮hr[~+0hyw =~ƭ}֫gޅj[U\X^ ,]3=hʛ{=#wS|T~s潵_*wjdB0qΧV SL`{gKtju6D0!"czur#2?Z|$ݦeN|c`SY;NUS>2x`+i%\R 9',3Ah7ś-Y݌bёa%` +סUx.Vef2\+[ǵuuNjyF=Yt 55FNw[ nd[t/.:F_lIz223~. 5j:} 6ts@M'y! O.MEcnShnG I"<.T٫~ l/f̀Ɩ:AU1Tjuzz]F"" W;Ya<^\~n@ӕQ2BTOTԓC5r~5ܔ j8SImkpض%hFQ )3<7`O Ym4Kll`&<&|ճc<1-]{P6g4mfs0}c=̫`%s2a,6}<&zk=M.=QQEȠ̸m{|멽uWE} -WO,]{=|AbFf ˏHD.[j߼("9/<L[$W7y)zL& d@^e[ΕgNvFnv5'K0N&FϺPJ鏬x :@UexJπAF{eϤhA^JJ 8uBfAo)=_ lt M+>.%W$eyhʥ,5Pa Xl,*1gbs%~3[& 5p! .g;ᢱt H6e lUcu_${"BKV3N],bw;Ym3PZ7O 栔HtOH8m>֬2h"@yU?НXMgt AO *nMK<(ɯ w!3,C)EP`чLRTTA jSJpqShJ/]ܴEI$'m w+2V7aw.*&1R*Lc=ii-!q:Pu.X|o|;I[xq`;PRN-"g|~8ě5%MET@1uIr'dpZM&'X(5٭o4S0Dh#AE?; ^n)0]Xݩ)M҃5J ^f'KѫjhcIя_7z1)px׊Y$ceV`=L?!p`$E1 2|?'L$tܔ2-k`^kӆ擋ˋ} l~r ̫ /O0+=Y.ΏRX+ ϟD=L zٝ9`"Z7YdMlX&B'hw`r9ʹܫ@㑆]A  -@w @5[-z% K^M<#2n9ȱZ-SJx#{PY@A~.p>]LY/^ ,2\iۢR L h n&'+k[ښ:F P FNMAG+߯>AxC>`&t1:oÉrpPwv#yv̼t?=C~4yd]wxOt?&9UE#v@jMHF_Mj%I< Axp `gA{|8 N .w&`RT 0,"#86EYwh;HpAES&"DHTDYUegf_zrzjaW=շ׹{FR1G NGAQ(@N."`E,BRjJ5Nu(_dI~;pDiu4Y$s5ikۖ ZL$3H%vmpHEe;#Gۗ'6?J孥Dh~NLX yaoJ5) DwԒ*֓@D=sAJyTz]G$6~y#s#[d~1o!wPb[ufл#9kxѫz`Cʷ-gtYVmĕ]3C8#ODXWW%v]6;/ʣW07]bݖOe%;%_W^)J ^&g&I 듔M=Cfr.Kw훥~nUTMW~mxoN1n&K5QO3@ ĨQ{;$v 'KƇaBŻߊGl?!Z ۀr&4WY~c9OCCzbn8BpMlSe!U`u+v&{r ,c ݲ˯zkuxcʈSlFL'daUEiז$4{5^/I|) l hf|~V-vH %D;z_.n:(n^n[˺dG G| Yk+Tj#bڝ}ޠ$9%-=JЊ$9Tfh+B' l FL[Gu"3G壻4]t3Jyr#, 驕Rq 7CmG09B{:.rBu52ZU#)߻'n]M->N[.yz({YAg|(bN!1ezW:ᓟs_@5A=NU0>#~cOqoꐎKp'3ovNDgVO\d.uh͞3cr昱0Vf=3ؒv0[p5 ([Nn_\~ rdӋ+N>i Ge ݭr K5wy(ziJm&I |799Yd3Ѣ٢Y]D]c(l{Sʄ|#M(bΙ{0-j%hֺہly—0+~8xBvZFM* :q1GOUnc<cATSs7? i-0{KQ[^bz(~_JEˬ>O4{n%EnG2I9EɕxQO+C-T܃lA4nUr>EZ""?5>/eڍԴY3 mQVԡ1K˕Q2XjnޮŠYobxы#,dL6di֦ưJp`d ^^E:0W+f7EM/%7I\b6k(6@# J닐mdW`C'0l8"q״5Ə&k2o-K Śg;! FtA]"0*j抮Qb5ǀG0+Ê-ON&i~Խmx㈿?ߋǶ~)5(=RjT7%9}E*(`WD>I%'TbKڦ7RԲN,8`r36خjLvFKbajLG ]JNRJX:Ws-Bx?_w~cl4=fJݻI-' % ڦ褕+!b׎*z\i{nZ ehmȾATfc)O.ʝ1}[%  rEiI7G\r~v:'Tm"~ߥxqSr3ve3yT3 &uzI{1AeM h4DJ{?[꿨:gq1>y`>uLo-aܷ [!z}(_6Y6ys پ 붡At6- ś0.8CU~rҠd^s0 t1E"^gط~ڼ4J͵Is ,'@8/vb^ hƚj +=C=1i+.,&UfHruNHUHMx7wMߖ)K >2i`K DeTC|H)PY㨹ڰ Z\`?IɂԣoY9ވq3. <ٺ jrHEC?V]'[RJjt[Z+1ɣ 6FGǪ\]6zV`dXMzn_exkhX&K-H+Eq-sž j%Q1b)1|s׀ۯ/2zbwZP-P‹+5܇~ON`Řu@&F7nFt+eM--uyj`#ޠ 6NT}k3%OBD܏` Dol3J oĘU_Z+Uȳmq),Ĝ"cQ'tyԝyVy=ODFQs*`i](vy\*U J<ٹfĒc5Q%l&A֍̓`0&Y^M-QI.?ZϚ&)u܇~Onp}6b‚SV|ޛAYMK2C_rC{K$D}yŢ}Fj6ϥM&Ke"E 5O;[nw5ie^U-u:Vv>RCV$6ti&]$~:䬖.V4NIK\&7p[ؐmc j1nVH $Βu`,)Qb gU<_]K{3MJNT65e"i'GXMx.wO-۩1dVMtSjMiݤ!6gJ&==OU6iv/)SP˄ѳ]S׋7Z^>fHoanCFl#\?j~\byQbC/ dE'%DUfvC'tX^;2Tqk,1la(1ИpNY&VpfۙX5q2hLc-}x׾2̇IF1U哀/^՜.,Ś> 1QleJR\bUwpP"=RRYn;z:8b^ OLmc,)34l#&Kޠr)#e$5"&vPnQ KY_afF q]g1,=ῡ-VtaB {E'o@,Ť]__xҔ efuPU5NX 7DW~LAݏ$*w+KE Aqf} A]=q=nwU/#1<ѩ0J j_ 5lG66Ԭ ~E֢VUl.] TM<9 GnAm(d(Lcj@A9Gуt;/8]so%i'r[ksUTKa8l̲̎'!Aԓ_/|v`C51 j A袠s^#7nt`Oė$HoQhG=Xu+un :5؀ 1KC\h܍(p%`/!Dy;! ۱MT-EVTxO$%͵||u" ,bEiŠYA%!Wp_$v?'xՓCLnݶU>>?k-Dv96!z7y}e=H-poV-ڞbv[o,[$6 {OfZNkU;Q Kds 񇺩&&-?IN$>S/nUep{Fӌ*\*OcЫ] R"ɢv+u)MSDJG/*sd,TK&2t[5#$\l^J %gXkS(M_??lIo-V:r +-w|,nҹ8F`kbVpN;1mDGC%XHm81}yjw,N7FhIŨaİ!މ `)+(['D2WUdFth?*`k!0 KW&K+%_ ZiRyX'q1r|Ee%F lx*ըrL1x^W@v(OSVFOIs|;n yqXW>@7H@Su*?{ * IߴּI3Hd]u=ڊo:EH@ <ub❶) 3w*VP{`j7m# _-,mK]'J![ַ+]fgC[B4MNJ A_ ymJvу밇sU|WL˂ųWkX6_ _ <Z\V; 4<O(P̶clT :fU ފ,<` CRHӥҝ=yKw^LU[z",y/AI]: `更l~wӁb=*qbU+0>`ǧ&kR&Kg Q1َz`^K5Sr+m cj=7ҴTAEI"%8yԢQYbi](;~5`WVVsҀOe (FJ OQ i]RzoM:EIENDB`youker-assistant/src/res/upgrading/29.png0000664000175000017500000004106313260315532017331 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp hh>`IDATxbTqXp+]H=Vy1Yp 2y)C в30s1331A?QC]+,_5!aga8~1@U L g 36f&؎,bt_JU8rZ 02!sW˄n*jpÃERAg rO?`59(޹]E9+'0~;`gAw20_@NPn6,>Mr-]_:^;#BȜ 1n+EHy% ^ P! %[lFx)sj0Bv1 AJe 7WP:%7e{'J.9DQ˕?cxTr1(f* fYY[x[_s2@YTb5HUhaXWI mZ-R6@7l,x ś5p"dh1-$C2(V`YHe6Hiʩ 8Ymhe zfY3D?^AY7b jW"͆dE6@A;ǨN!oB7$XP!G.@e;4C`+>Gmm5Dx0Đ#"?/xD|dG24&%Mz9 (z/_g_?yT$01b/X)Il!qyx اU9*L%T VH(*t=zC%R]M03h> rhb`O|gD~l8,`\" 9;+"# n86̊! WPG@q0 `9@kYߋ ڒ՚ iִۢ^;2xDh6(N`r ;/zjTR^a1+ՊhTټ11pRuqbO=z{BgN׏(G+ŹqndގDg `M jur% mڒW{G9U(f6 <$[ZT[:V|ߧ($<|?kk"h20)*Gu*&uE- z/@Nj9"2lrI23cFrUqNÕu;% YP. NONVv J9Nc[q!}  -F[[HTQhfdaeII/AEQYA='(P@DIPQGEDQPhQ%85H{iM]7sϹױ:uw'5,1-;"MxB=G5[w^Ż/̍/)<J(Bș aDǧDZ?WZڶ6C',vȾe _C~ ,=Î]Q%+-ljIKc6f|} X Fy'yҸ )%ht(]奌=t8au*Pwd*W#1[wޞ鼦tk6UU =V|)0Y\vL׆OT @ tUuDgW Pפm)4 'e韈B"ʔB剈MxKGOֵ=qEN7:j ;iTRfFO(RR7ܩFZ#:,(/5Mu~L\{GrDJU5M'*Us{l9H%ANC1_CdAX=l#{#LE p!ɵ1CbXzwKd7&&m)|7+'?_2痶$xًjPJ@\5LG(2=pe4?D-.jFzl)f%Y rE?AܰERGyCk~fk{9$13FTEdHj__|߽įJ@N(짆BH6۱qVsF8(xg?jֻߥl,1k膙$  N9 7'v79!c@t9 34^|хQ1u_dt 7${K\ԡ(X-@h&Y7uC2I k-.8UF& U8E˻o(ᓫJ]_N&>NeQ󥮯"cO!x ⭺iWWOe9>GsqC5OM!Me30/;k,@27:Tdi2 `%ha[?|.SI %wTu!4yVlEp̴T2|. K&}Q#1x%'\b!1Ӧo[e ZO^wJ.xЙ 7!L|BC͜l[smD1~]L ݵFUDnZ(}h V^A14jIHb ?# !JA hT DyEyED "B>`ٖB:̽wœvkgΜ9(09 T7c7m54YH'7 Փ;O$48IlN(!kMqӭ*՝N ?j5TidN]ov\yΰ+' M6eKz+VT0=QވzС_^&ykJїoTs mF?1z˱l|au#r@j /TUP6bQe3Uc w`SR 2[ .#[ Т5G-C| J_Nh u dmE+X\%f6PЗ&] cȩ%88]5#vMa2/6y?7f1$\4(Q "A*-`>YxZ nFI|2M "*ZCx0@4$#JO: a: d`S+^H}`kd CDmKi?'Wf.*l+MyLGV=Xj`CND5ВwLş#)q@:'; t:Bgq7@$6YLD13!$z +!rN=(#l`=I}m2)ܱ%dCdzWelzp%ݪ:J=o$7EpFPIA6ѤMw@};YλT5 @wuI墑Ldh: R<|x1`RGLVN*0[$/d@{e#79~fO!$ xv~?cI9SHXKN= ׂdp k&puzIULQ$v;g˴c٤`2^p 43/v=݉Lc:i8wެiFv^w{Ó炆 pOz7~eX2s K>>/G]v3N9T poUդݨ-! O+vj s͢Ua*kHWs_OX{hgLn3{6c_D:RVBͲ?yYdp̼d? )*a@ޓj|ٰ+NӠQ?֙qg.uhWJnLRJV¼Azv̺j6a輪d_gy}͕3)68ۊi@[Z6[쇵enPSKF3dzLE9;&kGj=S7z-f}(T^t4S苮2WZ.NY.%uu!yF 7A}0g{ zhD,kr[[ܱ%(:*A4۴!~1XdV4 [YHb/|#q.089; mGtQnA$"(sW.ncEs4n `FH;(\QBC(bG` p(^˱5l^L!66r .U4 _"0ZoOw qA*4>4s l20N2mx% m4*` $?!kAW׍* oSH-cvʼ Nt#zq8@f* 1%C3h]Fth)g8Qd aCc0=/M#4F+#|)N5!n t4]56j)pU.nEd{%Ao~NbROӁVBMZZ-y~tCTWO$-Ctŵ^y!DgG*]VE5,B5?,Vһ)H ˿>F6U*E~8D!p2T)ʃ?Bw[7BE b*D8g@>̛:ߔ䟤׋S?='&Dgcu&z#QKв X6 7T1.93"*xlXyMQfU|*+TS ^ b h֣d |]qE >R@43| %g&ҥc ݵWU㒄HB(`AB H;SJZvZSE2>i;0ôV"v u* "PA  w7w={៹rϹ{wo );oÇpX&FjQxn1]ŵ\Kb F9_²![ȻGb D 0ܤeC)%yk s+GȏKZ|r,|Cځ*#Gh.>68lG0G>k;xr?GL&}~+he_@[v 2p)M䂉ͫvNuzy Nf΄b`8YWIhvZc9F<&s޻v#MFM\I1>H74>t:B$CF 1]&޾kwm,[(&*_vkW^Ē>@tC5 쭁M=`FL zـ SMJ v[|<u lZlzxO_DA]g#4f[o`JI3d&ke"01tmNrjVBv^ lZ\zX (/Jevgu0-0Av)çɌ>QG>>7YDHL ?M@ÇahN@ ޾΋ @CYnۙ3 AܟJ ^r2N[?7=[<܇z D.`SNHqۄ)G!9,fi,2$p8]In msOf6y9|#_?y|9/gB4n7'Rh^`}YWyD+jAN3Kg*͉,4D#"(0@fSU@ٚu|?o%=w+,Cx)EP`LRxbPǭ?5KVxx)$.2ceam~%.nEkVQAœ`ߖ"SB.H(māb{GK 2^9 tX2V]LPo࿻Bj%01Iғ"'X F~K4V74lZ瓇*ꎮR`ŜF{/JAhV7x șj 1ؼyLB̘p."HT)˄ O @K  N v2,|;敂\68tBәCCƒuD_B8-Y@>=5Ю#tmeN!d!yz4]ԯadT"g٩Le 2M%k:ƃ)י0ߞivRQ6r{&@0/:筁JEz1 ɡ@ hO5[嬗`6KIb|N r ezS!U2fpwec5Δ ,xdgSy/IږYq9M|Ȼዷuq{%ɛ]AIiJ߲SSБE{{|`glbA6] )v?0=8r2N!Vgv=~v<{ϗO=E~wKX#AV&%8dmIS^,b"|뤫%:G*.;W";uf ӬCk=n}<Ͱt(m7yV+zEա8R%JXK]DlrZ4?6kf1s5HΙF`Iߏ.n<"^ro=vteY)D;__#7uUqYnPą]DkYzWGyb6Y__  +prqĕ,@kʷsoQ"mF2C V JԷAciVLspy.yĔ3Yj`w {yVZiKΩNw2^OUßi50VW$@snX ̣-S4n}b .Y/,B5qul , vn9pX"dգŅǷ^~CntJl+R%r]6Z-O*/^fY 3%o$":]K;lFdWD*%(V$:C-k$aQySg )!~'Xfҩ;>lK@$S_U٫NSƴsNnl 9~W{%~05ݐ.~_#ܴ &+8qCꐞKp/3 ~O\0cADz$H]'k?t9S!c}g* &%ΜfntUCVLȦ]MgMEҍ_X`KP* ꩾe5;}g^d^3%(`K@o%JN, h­]С z]֖a7y8w{M4 j]O_r`KP;:-z.iL5ʈTb2[ZES8rnבEi"3)A3.T'3tΉ 1 i)50*osZHzyxCzQL`VNJ&~1$ aÈ6MWʫZR=VH`yklrt HpL[s2 ML*tl-2CG Aǩ-rV3Mw[Zٚ0j jE˼G*\ab B=qg{zd! ?xlՏ{hp"ƖOvȖNVfAfxP,cS -@f jj6 GF Sj/!_J2bE7SE'} +YYYbG)oNQeuzkKPHC,X[ձK%V̜6oSxXqA$)-A}Iu^^bQPv(@&6sG'Ma"/_r1ou~{#I[^bz/(PJ D"Oi8,v|A4y+ r2$Tbjs*|^s0ߧ#p/wYѢ΁-H?6#W4MUU/uh `J<X[7xŠ]:멏Dye~D$v4 0S?Ybէʸo6,4&Egd|=*G* | , ]yUK%{gJb);cFCmw\n5Ci)B&O =`lh3YYZeo_h-`[^Zzdѷ{o͍ځm;ER Ubm)v/KkE]*4ِbg[t5.Jdfg+ ο'y뷿r1#`HՕػc7ZN6JP@#*~R?qˣuhZn5V;#~5lG\,uF 6U -? 2gbiVXP5gi'.9U4,_J+]j1Ɠ*y`>ܶuWSi67][LE-KrzZf/_jWRulA76KXfg<1N/b>7` i "oϫؔS#)h**\g ~vl )O@8/b^WU}qf4=Y`wY"#;'׺9@ede(7_txa GW% {3/̏R6-N9CR !Lˍʒ{-׆} R_q}nFIf^URMW;S[T,1=]?ٸ6sۤZm3CqP.tsb~'Wm`Xg qXxka,͍ \Aȷu ۻI!/k <\GL,eTE"B]RgCmMZ-p3jUxQUte'B܇'&b̎:bP1wd]q_M,~nP0O.;A}~Bm_ lƤP;&:b82_mJ71C"҂XW9P(,ĺq?~'7ĒMM)Je4fCpl4*?{u~a|L,댊{hLcat{JFeiz>=A™Rl@φKmK&#/+]R5Ҳ/pU֋!GON&] ͍&6T{UW͸OLQN^/יFݹ<{XU*-b܇_jzO-2]6zQ`KMjnsd m]-̰w"יGuPҡ@s0/r|S/ҥ֚2aqto_L8EjjES}DJddf<%JJ3ƴ1X^WWdKq1>w[yq9 v4JL-;4uQǢ~aV/?01Ԧb.:뭦=^Զc-!S ~vݩ>`<,!vS&mѯ/iOj֊zKJWIUY~l̈́Rgd,u~q*3n矂t1~nGp lZCU 1J,R8:HjDML `Y~CVEuwkSXzM+Z!dPæWj~t&h"^̾$1HX.MTLd0UUpCD}b56mD0+A"%"nak LOSmU%=JPnQezCamnBv4pmJ`{Z[?V4`ecjWե+'S,uμlE2 ӸFC*PP;b.{5?:\VP_-|&.A7w5RjՋ$&7- +v PSۢ[$FtBĐ\gk؍OcڧH >̳ -pF6= uS|^ ,tBDR׋5zGo;'(x¿o;7?|ů yg#aH a7RԒ]^bltHnJ]epO/uyNHN¬gt\GsO.J/`K*X`<~͞`s_C:קzx_sR?,^d ~"6N X^V!&H$nMyadcC)+(.T^;myoǨR8N:!?~R}R f},>YX)V:MT`ƕc>ꚒK\M*WQ9rL1 16Ox1{Hޤdm&jď%ԛH)~/]je)ɞ)9#`G q)}43Ku8t[ &{S7?:Mzis IV?tE,Nng03ш0{\"WI*xJqB +MgƵ?&=5!&-pcBxO,DK(]*ʑuiDRH Am`T&W)s;^J^M lI8ѽ甚 G$gz6zlӿ-"n*kXm-]PwE`kҢ&,7;Bh3맄N9 L^\l{eғs٩j($KF(Pb [tLЃdI {gyDi9&OF'ے؂Sm]I5wV .AE#U` TO)UR O=oU nhHrV&=3Hd[G |9&], ?y@緳 j-)i7*V(=0v uyu⿮=9P*N6AvUe<&vq,h *iQe*Xb^̞sKU" m :c@N؇[`'Ԏw*ʊ*q⛽5V`2:|2F/͐I;ENh<7b{uA Zr?GIDATxbTqXp+]H=Vy1Yp 2y)C в30s1331A?QC]+,_5!aga8~1@U8 ##8hKtؘpZ4c;E7Ѕ~G(Uih1PJ F ç0SRPJ1Dɥ ǁH1\Wp š*@.L[E8+ |` oXrל9 ń(AՆ"n9X< ͖= ~j1;0`3YhHDRNVkŸ`'XRQF1 撬3&&{o ]kgt֧Ó<8y΀ &|~ %fsa3vU(j-pl8F)U64aWLƊR}CQ\ӄZ?ľCEL}j Fxʤ/( !W| bԁw8Y9;M|;,0?fz3Kp[ӪܬD݀18% }ʜ,x4ңWx1 %'iHv!B^͊:!V&^=T1IZ8IpiyH׏_BXXTilt(o4Ħz#Z¸(b ǬUb*v <&%~,mg1HXA;l8ňb^T;R>.ƭ5-^}-7+s:ւ2x,@UcA$BI./^rB[CA6V"D vB4?elDPlT€`"ʅ(&/xGܺ_YξK,,{߾yq-(3 q=|Y\}'frZ;$Nę6yeH0$bv}_MFg_?2F/$c)<jN-.x QI7f>{4#>6|c HqAsM65=Ưu% [W)8bCBji<--$ZIn$dMhw'F/ HU*Wɢ=xJٵ;ů_T 5SUGH؂e|Gs&]DrA.(JG1 >ݞy?s%Y FAW:`tt;zf5C0z?3f*#ImLܹ`DƠlcfi*+kTغ96rƾLzBk7 cbQ9J~fY;GS)Oei|ǛSpI FjtbnlKDԛKVvDa 8NXc9 ^ I  $M3ۨTVWYZ}za\5N۝8Xj K:+[X򡮀$uq-[Du\Amd{EO{j|a=l[,(JY2e m`!+:nk}zҷ ]GIFha7 nf^ˈ؈_| B(aIE>J-5KEFȐ}Y)c5wszn;w~s[\sPnۯ*ۢ?4} SHxPo{07*Y8:n/,"T"oBي'1}s^\Nh\:qjiؠB>a=bWfe5T`qv,+Y~͎heCvM*tXR |@ A)`=* Zm`%'Si&ƖN=?'`$Yҡt./eYS 'Me;Gz{Jlݹ* kF[΋08° &_U\f*k&c"+kRS>Nt+A{c<H? 8e!~'|]QSDRp< oc&MUi&P|}ۛ30?̶ w*-As֮O$/t~̴>pLlo5A=YYC#>-^vcۥƖ7V* r ڏyz  W7\hpQ0Z-p(&גЦ$l3`#-ހO#,. ]_Z#qH4*s~iKv8$YÄ@ :|2.+ӳO>W@CԢk/DuT4Vm7^+d7x!{~) En>]Sr"_!K5"莶6+#sHrf">."h?ʇ:-|߽įJ@N,F"VsAtI<'_{ġ+ge'QK va& ꮹ<$'9 kHM1HzPYn0RrAQ1uʛPhnN=U V I:Qt& a=K &NaXPS|e0qiXǩ,J}UdÓck€xnU:iѵ}Yё͸!Vwu܂sf˜5A @b5~IWy'KX&p5 O&A3H +`O˖QLK%OdJ`| m {XnaH̴4e㏬%|Й 7!L|_rCͼ]`&43b>~] {PwQQxۆJmh3A!A# B&>"! *c!JcQB4*OyDyE"QPmXh]盽ޝ{w]N>3g|ܤwX)Oޠc&?2M0r#=\MΐNqQ&Λ Tw:U`4 T' 7&l${^|طON;'7l?SŖ?/S)V"ZQ!EDxփt2[Qew>}e7yjNBi 6hT7O_^eS vT-{cI&U* h#_>-V1Pl 2H- LV980hdv%*Ƭ@| y/|$@$uL>"9Y-23)˒6CN5,xiJ9P,.,x0;JlAzkJ>KmDjiH~=T&uClO;-1_4ڌj5 |2M0ApD#΄{P F,= Qwi`s(F Wb4 ?:v4j_Tɮؓ#5rqE1N1J *!Myl{n l_pAT n͠~󠿲D5ɒ#(n)) tȢe.e t+u}kp Y @ؼc=2iHpr`/a,Tv%BKe-D1GS~v ׂk2)csdϯD %l7B?\EU@GHA߷Jph7nm;\VKojkb4l2.>݁暎k5ٲgCL $q )cg~I  >Lx8e@=|k6ju";*n?)9}RPF2#8H=3| m\AH~Yv># CId"t x0~S[l7>Nf2)kn|QicgOk_d wq84~hSލ}PdpnE>|ɇG17(Рn& +^m &M]Fm o_M8Cg5c)h*oMG} km\g #!f%T ,Ef.KJ9pSL6'gQVF~3Q\֡]ޫ9 3I1U[V t;6 ӆyU0psSu+l܇7lC.76]v%٫fi:}BM-L2uMJ)RuB,O@PK{ӱGU/!d$\i"v,b闗opSA 香>h9@[h Gם ųF/77'|V$΢,OCaɱukg'2x(9n>&nFXh\;{rC!rN\7*3z _> 1u1R 횎sE W tw| /ADC%gñlK;46֐pI)suʼK{_e3ijOU*h=hjk*%ecd`bñ;HUpmF'茀8:l{^I2 ю^`;rB^9# x]E!\jd*ވ7F'ũ6 U M#OlU.nE,`d%Eo\?T'\ 2t AZI+\ws.MЍ)~f+| QJ0*V͢a-Tsкl%|! !d~^eolT gaFC>LA|W$}=lc;R7 :kO &e2'"zwaY}\y9 ]zm+g- ET3|)ؚߢjrooK5I]"ZpVۓL ˶#[z2$C6rBHÃϥ4<K? OjCzC]h $]:] pU^<!F -J(E UBm8EP,SPNiRkEUʏTZB5B/vw߃3x{={;ql'x#pϣ&!FjpbĻiĒy aPk3ݣ5=HFx20rmꒂ{n p>Z˜֩oyxy. «aOxghpzj8xRlډi|Vt6v0"IiaVpsuPVgJMO>~'h3UU+!㖽mgku.츯6Q&ɛ)fŶZo`ӓͣ_006e}L L ]5T%%).sLH%~yp=:\γW,X:4~G纒_-F"~镙j䚠A);=@ZhZy±]hxorf E\tPt| SO!˸rcL Hq:.?GeFmM/!%i)ɾtj>G h!9-A-xdCU 'rAj^O*8hDm.N49DDr0i75xV~YPՓ9_*|m(ODUr ڹ VޔEw@KsͶdBߘP).= F/нsiy+`-?KwFTji+I™EahG;?([ݹL:Oٓt[ufihv%v)./gCw\ qy"yKaDߙMH欫V uWJ5PsM$ -K fDE`^w߂$cDjOn˜PI طww6rcr!틁u6V~.CAieALm EPlXۘx?LLV2*,Vrd!.`Å N H@0mDWVZ#XŞū'΋.~E[;t2LJN*M`&dsPJ] 4Yke@b'Ѳ +fyԜBA)0b)DnU$Y_PV1ǧ*J0 |1Xzp9)08]8uȄ!'gq}lz0J,N[&N'{PEŭX`w/ **QՒzVC\&i-rBcNy!NX..AEPx]3)JRYNr۸!]TRWzǰj) 2oy6r~=mQGlCuPԯXk;o($Ko #u4:*}NMAG)/=I_QuS Y[ (m~`{)p :2!Wgvcg=qv$<{7=E~K<3;o['I}K[0ijlh<:3 Xq~)亘Xn&y<n`g~~Hh`; 2˯!$TBIK/@{gUʾ@HXdQĈ((=Nθ2>ʨhݶ=h+-v8Ӣ|:  K(@2wM$UzUr}$}߹{DT#)dbj#@dI (ߨoJkl훅X=W:F+I:n~Kh O&V6(j k>Y$oki{ϖ ,&2ÇNZbמ?R𓍻Q%VVTՕ{U?P J- '4@҈x0ψ-9Zo{nSg.ڠCDxA*)Piu jtZg<lZ̰gm bIP;Q8i}HQQ+`9S{)D;__%:ܪlm@h 4.{]WDyb6Ϋ9N +7Vmqu+YAu[w7{\*1#\\nw[Zbq14#8#6<q<:3D>`wk&2GڒsjLD<@*Aa*̼6ÆH+-}|y|>^H>`;[cO]tcuȸKxf,+n J;cADf$H֜O!]^ ̺r 3 ?BädЩ3vЬ[#@'?;Ҋ 1:޴vT$D %^31iPT5w\Z0&ú S9r[>_]TbrP!-kH=e7L%}#²k2*-/R~c=vb'K0[5O.u S#Y' cQN\=Mz+wp>$dsT)>/jM@bjFB%0*ow(Ums ,Z'|(''Zf_>:񲝗/?SZT$Au7>e#P%><'?/䏏1`,@'B.-ڵʏ-H6ObbQͶMh'[wT1(|5uJp2aNAc@MBlF͢)>kF|9F ).hxsUoqݽ- $3q'4hp]Ğ? ñɞIB~œP[<cbz!٢R7[ވ-?KrzF,a^4`@x{EkSxRulA7%/` Y0U@r˝yuݻ=g q~lB'{ cq`1/ު$5"b'y^f{vyEFvNiksJ5M #&s/Hx7Mߖx)«>ri3m DTC|9U)PhNg˵ P=%}dAѷݩќlĸna<],,:j'RpjMc曵:RvntZZ+136. 6 ?ś.1~ ۟8kylDہ Ψ3vJ2TgoxTNb܇_y xXprj;w2cw[ZUEyܓ1D/ܸk<Wp˶__!mb8:-ӠOAN°cc;}#u&Dև32DRUEV _3᠄E4Y~qGk?u)I3` L9gۘx\ 皈WJ!RS.mrY IO` |?r@j98׳/r>MF׭K` X1 %'6r;D EsfNJ"A4UUVCC#k/kᆈJt$jlPNîEP; 8GE]-I`*Ay],G^ p8۩p~7׏|MiwJ C}<]r2URP$*L@AU;tN!S ѿ#Pe#o9`qნIT9&Àfdevi+2/Y_P j0Ԉ̛98hۦDKc(QTZƣ zrԻ{#a/W`+`Ƒ>. |=Q fW?C~vH=p靧9.RahmcE%Eq頸L*<'llT#)_Ԩ555,1Q+Nw'?$ ?'x]9غ~|C~~%%dqmސqR6g!(,$usPӭwbAu{ONzڪ=ˣi=$RͰ꒫RWTO<2te{݉*ԧh#89~:Ē3Jf~UB]a_.]P#Tp PM'۠P;,r ntKds &&-?SN$>/~Ue \f 8WM?CLGb^7'#_*9'C|YbˆbG5}yjڎupTbz'{W}^vm39sT}%9=_ٕxOIj)mo#OE ^Rr008H47sܦ)bgAoS@uw}'c7F%1~b\%vwc5f bxTUiD)F:1nc[^*T9KPG5-5=wՒiԒD։`\&C9X r3"G 0&,|g1KlG=,}oL|>J+e.\z2e޴RB3 C8TLy^ig%#kbNl_}$?yp>m>_2ej$3L4FJ4*^+6U k*'n n{&ڎ'$oLy l n̰/q$%>W]p1O+gs)\ l-'ڻh`︭=ǪNS $TJ4;_yy+P셆$o7l TF"#$2/8rx:ΖǭлKIl ğ<(s:{xfFO`缀5+VP{`j7#?]=sd&&Ntyng[-"n1ŀĀN!i ^E;-{J3v1z,7^nO|Y"7C$;;||Qvӫ_׾տ[sѾ}nއ-zKK-vޛ6RUp VR NF#qWQ%Z,"_9X<7GFʄ9%˧4;Ds4<`wISLH]7/T]Tet0qӤK+?H[W `'wͶe[Tķ;kUXtX_!ϑ'NRr ^B?{X,qvJr=e@]R@_}ظVsy(MKTT)3ňbTI~Yb*4xJ>7mmm}\pG48ZEPވvW-`ԀŵR>;^5L 8IENDB`youker-assistant/src/res/upgrading/27.png0000664000175000017500000004124613260315532017332 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp Rj>IDATxbTqXp+]H=Vy1Yp 2y)C в30s1331A?QC]+,_5!aga8~1@U8 ##8hKtؘpZ4c;E7`B05# q4``B#&>)9Uஇ"0ӟ~j8rP>s LN9sVN0 vH>|-:fcӄ+(,ע, KǸ/?qgB(~A [JAbp6R^Ib砂T!PŒA0ƒLVE 9$P*M@`V1(,Eޫ?Qr)q&}"\ûo A4Vd0#V\5'#jdH1! o@.[N@BebZ N* DHlh`cc(. 9'Ch!Ai˚HE,A&?FM PNUɊhF+k3Ȓ!R2/E7|qqifC pMy^cuз_DR *B !PYj(.X +DQ-@F/z"l#6͹_b[k?/I ɤҸ4Y7Dm8|}RʎO@]|@O`ÛL> ΁Ugf*q?H5-LGBQ A2x_"եoD 0Ci +X-6w~FHz7ɆâL?(3z ,B>BᆃlYάXpX|ԿgyX v->_y)QY\b-jM 5§ I@n p ^b<|hW_#Ua`җ9 jE In`!frh=7_}aZpY֠52wy̵փC:v ,%(~ه '.- A"dj B. hd$;9@`fK  :|Hf%11H0-q8K}w7_ydd^>yQ z`MZ,UF~-!'Ѱ?*\5\|:J_݀g:h#[ 1Ťef35@Xդc טֱO^>PuVc!oHI6)/%L 7$by? )|ur 'H:|($rV+PkW |EUĦquغYUH0́"<*F=rh-BW-GzAvĞ@76 rOJBHIPEك;EeN i3:*@N"9ӦK*ȣT 7P[[HQt3ui%% DfF=dz z(2*BAP!VZTdE!nk Km|s9;0|?g;DդK{&o!63Zc Sv/Nm*dJbA,E"[8勏HQIR6z}Ye>f(' |ՐŶ붼 &͊9;D6 ]8aIQ{ɶBf>:G_s2#N032DYҘ`GZSkg c%n(x6CI;P6b/w{ 'Cn)hz*ػy)ִ UZX[WʵJ$}-ɨ 5.{LulKf Sg3!6tJ$uKZ g{6oUtbl"bWVұ Mmg!d_STepRj3gH !)ukd#6( ir+DM%:c*eekzC!ԡXUUNP"z8;"w\icǖ;EH6ZY|9 @N )/ۡA_IaܵZ`y)jv%B{["TTGiKI\?~hYr8&)$^T9rXph2Oe{vIǒPe4DͫFT@6ThUkp|~Dul$ΐčf͡1;;ȃMbanNwuic=hDY ť|y.>:U|xF2LDb?5оxԳ޽90($:p gE;(65eV4#bYǀji
ꚥS%(dT&~o?@>v\( iK[[nᵳ&rDEEE#wz;-=XCQLf2]oo',4]ĩ02sPU3VPܝJ-]F&NUtTφNd+d@T/2:'i\I5Ѭ~`f,ȌǡNԂ]S"(Q9Rj #XL5?YdC f[>|~)$hǣ%?TpL?8XӢ!+A2FM"g2l`c/Nޞ+*&#|8$3C Q,}`ӓ+V@ w^fOSI Qhh'kv2yW޻lmђɐ*긬 EÆ%Cj!a8biOeGW~I-.,x8 8Fw8kp/:_h8El ^3o)w@*ײ50@Cc8 Gdw8k o&pUz_'^RZ1^x~G=͜`eY+5- : ]Anb~6m0ՅLcӼpn9bXʝ ]g'%~C㆞6Uݸ1e-'@/p<Tb8i`i(SB۲+ESQ[("6*ٳE)´eTܙrm[SV3*v/" R"FBhŲ?>/{1E,kf5_5thiTLX{0z;%;R}@O)l+jA~={̺7ak% ^V2-=HB$$ TZ* E UBc-"()b:SJuFPRN Tjxy&'s%gwO i0W A>7@@tT-[xW3-גX22hdGX6}ޡӽݑHFt gZqsUK UE)w\|"jrj#Gj.>71m i vf+<`Od^o?j4/~ w/ldpkY&]L`w``rΖ'88@'3wR^aU!/qяM^EdF:o&.yIN؁?EoZa8blIu8I xVw]Nz&:ZNgݞ*12l4 SK HZ5"zƞWwMj㠙)* e\F ӄ<$?v/JKyz>ZҘ֩oexy. «aOxghp>5P<64>yr"l(ޤ0+)㙬Sl-f`!_" ZzyQGtw014u-}lrҟ5`xr_mL 4Oʛ fŵZ|&'GV`` #6`&|^}O9e&.O ]MIC8ZlƓOR+7~vw=l4̡L_q^w%)ؤRUҌPF Y,脶nFАo8]2w%fU tSp#\%Frz}^3xhh#Xۂ MmxKV>#kvY{uH%yyxy0ۂ-F$]nW- t!5L eb):`Kbr.NYVSExI&Al^(J,-w; ʋvqr'0Nw$ kXӣ'N"0I6I9Gkr1e"ppҦ~oW` S}ϚN[W rjFGqH1oO_+uw~gjsyDžl4^7[kvq%";IɰĮ5r/gJBŷu4*oNN?^l6wSI@skVR0f2^hۇĠ~kDf .̪PMe2[!bcNA'q8/~0ŇhA7g:qF&ߓsL)1yp=&\)٫lKXƖ8^j1@z"`$ꇞ^H Zr3Raz_8V WcMclu=tuu֩'qmfm B#sS3_nkh-I3b{.()#smfʂ-B"?<&ա8]'wK msulos+U +2Ta1B6Ŧ/9^Okm0*()ˈ)ض^OKcH|ڐѫ57EkЈ6}M\Zeד&f䦱Q븋.͊hHY"XT#FϺד#E3zӞJQĎgBy"ڭa&j%/g[-zu|$neoMebߘ(q#vLF^GeZSn^#ʞt2sOdE/ `_Nx[;mn(I^E/Mn~eƌ ~i^H&lbZM8迮z y,2,c`Jζ{^&<&tDN'=7WTbsܾ^`3Z8D< pw ӸΓtDg$?֝jY[\gMfJj++]?i\~EtgQjw'r{}.l~#/9뺕B_D/I# ^k&l+@xp} :ۮ[ȍ`qyDuem g/ y@;qLsAo'lx'α/6 X e uU8< e2Rl:PBˌ~v#ĺeҔM}`:Qf#[\& 9p:\$ἰO 6n Ite% QНH,-Q8q^v+bܲu?5`3);H7AA)h༶EQD)jF6hNeeRse: =p *Ua՚U>UQڟQ7nһT3,)܅S`x^LRxbWǭ&|bn2tE9K8miM[] ¯rU-9i`5E`cOKm vpB.Qq|RJDBp*+D/.~]DP;Bj01)&Xjf-؂Ў.F`FM~2u yM,+/`JoqT4U(/Mdz%pP3Aj 1$72>b.hh+~F! : N V {`\vtLdZ0^:/@!Tk;g* 'ɑ62U Y@O_ؾ`>j*QAwo\LKɚٸ0:JWT7r9_*̦ZJ`5/3aA:@kT7Wi9}?x uRPWhc'[QNH}=ӕRY*uܰ" }cX5 |9\ 6+Wl련_ds%`Ͽy1RPcZ2nթ ("]ǜ~hUglbB.C4r{<0{)p:2!Wgv8O5 6Hy/o ]YwQm?5|>u^SD+- l7<dN!wbjq~y rORT79y<^`g|~Ll`W0'TBI /@{gU!@""Ҋb+-kezlmGqe3m=6֍rGřg]P@DTDPA([VnB%y-U!9ԫJ}~[C#FR1G AɁ)(@}|%X+`K,CRGj%N/%4'?it j5~kZCɫZrٲ D>0IWK'tT\;yTO+Ī*P ue"ΉrKRj#YYDsܕkD̑\J3ӁĽZ/tйMX|Srxm;- 0 9`S!ZCęc3Ɩc[&aБǣ,v |<2P|Zӕ(^;u£ˏ;0Dc;B/C>EԺq~a&;|+\I?{zu" ~VW Fy`UY8f/Z/f_v ұ;k.FN|5\v`'_fk+Ehx+.*,Ə\إ1ADupg}k<^-B:3NP;4笱!d^`s֕3' nyD~njp1dG@u Jַ6AcY:F9qvE8o>`q<:3YAq/z'O=e%Ԥ4%E'?W50VO$@vqc:om`MO+EO}(6{d`<cIsˍѤnw$Id8vy"Ap/ݵϯODcOz1ijNKA?lUZB+9fDN@2/IUP)rBXT^X(x qo޿;IنLje28NL3_ T+*<~Q⢣9|'~M />~@4B*x#ĕC.X+z|Cu8s{rIN2'9mBR!cy$O%.Iɠf-誡Y@ΪƾD+&OfIͮ7O˦"&J8#V +5O5 _#|5ac2{)=0A#cXwԡ20KHc~+P6|7LPbHb*A. q2^b]- 7}-sXf_%qǫbVHihCL6#T3xktev{@3M>wf}Nb"¸B᜚MG-WpaX4!%JMAU9@9y0yW/N?4ݎMRM"[ |.//O > U&u'q U9`m ض ֖TbuRDi׉F)||8gPvm*"A}۫Q9uQ>bȨqPozhC3MلSMaΙd)Lq ~Tty{})[^bzO)PJؙ8JKJĠ#cOlrh㯴Bd**1[}>R71`,@qxulEEs 3vlF׿(k ֪v~ljƣǂ0lŠS:w֪z~ѩHx2aN2,OUp#-X>iLzUU? X,Xq0I.doIpq lϔR"wkU Ӎ"Kr1|$W`s*{|_GG[k9bGՎgoټI47SknKW+^1T>rpDУ)=;?C8?iB1!Upؽ[0]-Vco+$Rwtk`ӥ`. C+ss6fhyȊ^[K46{~,%L/LuvU:AE;K ?x’̃:wLMU,:,)'C.ܒHb=WYt`ek*AA~;W^rCV }x k[w0p#ۅm '(l^G5b&g%Ps'Ɠ:,Ayce(㌇q1>iE⥝!#0UIJ@"˝EJt][gV|_2Cr7(ڿPn:IDq3m9/̏R.-Nk9#R !$ˍ;-ז{ L`& RN7F Hf^URCW;Sk*c>YMc I4F" tsb~'OmaXw aPxkc-͍ \A$l +{F'1#(k =n/ݔcNʸ6Son{E nbr.(uyhBuG-cijc`çh@6& N=/%lSjM1ĊܸJD" d)'֓ kØbh) hӨ{>=A™R elk@ϚˋK&+/[R5ֲ.(pWTՋ᥅=GE@N&S ˍ&ZYdc_"U]6G9 >=DE}~@3'p#Z vvC.7loD)\[~ !7Oq\b:J20IKٛ3||# ,bKcŠStNW.$H JO[8زK4ۄ`S3n.po>U(hb^l9;~D]KcS< .ѤQ꩒G4X WɴOף#/~:sbI>DZ{tOJFAua*UQ|k{j ns\s 8m`}&/|9sT.l$6 läʉĆo2?KPlb=Ε3NFèoo:m9m%ȗ9GŘBF)dQ7z;a"ė+ MQ-jFHn¬mt\WsGȗ%.JŽYv]SKh:9x}K澨t fx_sS&i]~2N Ηm%&K&m NJ԰\!ޏ`Q|nc[ۣUd&rNʏ5/-5=s{miԜF։`\&CoOSj^J5@ 0&.|g1nlG#}{J|Tn}]nM$˔W.Odc8>& ^:&{?:AzIs-ag?.wE,W'd0WUabX^%ɪ` jf} ↎Y*ޘ>юk@zτƠ<'f{BT`.k} z@!(`['a8nxK"W6!䰾)֛t6"$RZ93^)Cʗ{68x>\dv8R X!~n ;BYupbO,xy:^2ÔIki-8lJ1[5xɽgU U @/,`w@Gcʼn[%2WyKOCv'`>Mڎoxso`Sk&UEyK=u{4;( vWo-۬'Yjçly"qI "y jDIDATxbTqXp+]H=Vy1Yp |tbS@}Ie{gr \l :le?-Tbx.n F6 f0@U8 #D?b@3<0 G6(3y Hl0:bHB`? 5!7ƑbYȄ́%1RrI]IEDD cYAN#;딣0g@Ə'zvT}[& i`!*h0Ձ;Oӧ2p`p]ql 8?rJANP~ޕ"xl/AB.+d0ƒLVE 9$P*M@`t Jn `O\ r(Dy+/bP.ʹÜgd[,@/Px, Ev1:lnR-{kb(vRaf 2 Fb@KD  @)?wffŷ'w|υ -^c<)O#WO=e H&#h8(*bdeYڬ8^ln p0l\EeZ2HArfPOT^ITml( p2mePL5_g$ߙ'G;mh/?| w2He> xf(:,w`G ĈR%/1-E5џ fEȎdRiMrojoFѓ$qW=#9&J#S&PГڴfa-Ois`U|'!.Lđji`a+%pT!L.}|&jJc4XIX4j1'3GoI6 `B.@\`r7dwƊ! WPG@q0 `9bߋ ڒ՚ iִۢ޺zvyF`jBM`Ĵic+!V<E,D*AA$"ފ5Q/Z`RZb6Z}1}I`a|ͼvkAORpy X{e MDucn^( ٹ IƯ!SP%Z:"u{"]jDh`Y @h˒9]yHpތΘ:m7Ù-.[&8__ `/Cj),(out=ƒq3ZMqϒetS,e}-`ȴ.*r|a%\fwf[i6+xT{ &6mڐ/bS&*E )ق *9QΥ0 (c+ Ay>0Y,h΂t Syli=r{Pz1qUS68coʮ2}K^nj*F}5kL,je}1dۍ]B'v<۴!xb(](s Vb pyכ? I,Uy3'lQ$;J<7C6M"j6 abll1M.e9 ^QY 5n7,[ڿE@̢TvJ:͂V+S})& (۝ 8eiUx@[XC]`AkF-l3gy,} އ尳3_)*!̒S$~624258Epc+3՞L[?q8pDw“vv[( EƟQ)&411D|! h&(DcBQ&A#B(6]鏆Ruݙ̽uv~ss[ܱQnG4I(᠐h;)^WG|at|#ta%IxrmmpRUw{ab=!~ fU [}BZ׈iL8Mƶ7Սaͥ,N"`1`OZ荣瑪O?mYZT7ʺU%{7h`՛GZ }A`d_\+\[8(Rt@hDE;/&*U/K^&*Nk. 43`Rwp:o6DgN=`GVaz~%6`pspҟd_˅Jpͬ‚ *U'U<6=GE$]cqS\́SL8:BFBED$&w/,g2.OBZ{UB?+f,lb aRge4Wl{U4w~8'f^/+o葯 DP,װ+ǓX sI ťr5.x̃E}t<$=FQ(횊`D,UbhwePkᓣY+CCP3bu>O9?ْe/[;Gu ko0fL6.9?6W6@CԦk'u;7M}ֿ"e7x*`ƷF2!?I؝=֒ zx"ȰFk1/˺OA#•H@\<:F6(,n}Udf!ra2=.%[;'4_]8\,%"|zRt%}b_%ttM0d뮕y.ea }@>>%_O 2A1L6+z:nơm[ʊ#|*,hWG0j%ж`4jxwb(Ҹ а6&u&n+#Ӱ8S2μ`ⶻe`qeQSp"S?zO][pKazt÷Ųuy`f\Ữ~$B-1 ٖegj_;F\Y:U0 ZGV?S}x`+h _lwDpfijqp\U5|.@% 7F8K̖A:i_<CbqZrI࿔OkxD?t傱yd{@sr{ŏ 7wϿu{41I=aO5" O{B)}B[`)1  L#BՀA BF Fk HEBQ ZҖW_7{ݻwfדln{w̷gϜ9aa!pᯚA^v>)&khlK@Y\ۃ^0[DN9VXd=(=;6w9Bp)aSÕd֓y=7'c/F1"Fnwfy_NQCk(;"7& |rTMA% $2T4ǹED@m'a}q7`CE/X#fb2mr!%{@]^ D6]lHƨw<'|7L|H>'`[ %{,c`xpޙjؖ:Yԯ@-Rxݗm/7 )+C6 +?׊04"syUn\`[]8{4!RN [JKgH6Z@"l$6o f3x'=FJ%Ʋ}o?|7۔,|k)ȕXo/ #Pژ[o  /{2t4J590xm\:'`?ᦋy;B4A.̓O^'lpu sxUD 5qٔ!lRKAVhE)XWȀf:>e6X[hHG?-3o(KE1lzT=Mt˝FrU=(HtOC(+hڂ6ikme˱I除bY_X&;ߡOȀn#ׯ)7vZ@QWmBFլL@HEYn{2^b>\57ڛ M` hΒx$q| _PpT@9DŽbymFE-5r ^?}Svv-VnV@c8|@ pᷪ1઼tok#weԮ" w6( 5.@xtNoqv#iLb:eG,׷%Fk$rs-ڧNA{1 `ΊT*7:Ӯݙ[ZDmnz<8oϴ.^?Th=}0:/+*5T>%$% h}q]֍e:ݽr&7?c ;s׻LQjjdT?vkM [+G邘k1#F!VpNۍXB̝!-DI]- u[vp Vy[ùpN7m^uI6Fo+el8,=7 ''%u4YLFpfq,&0-qUc ڎ>ޣr? |QX΁?wt,+*wmDP9+a؜8` XG F&=@)U׺J\Aթ[GKlZSx rTd?yW:ns {Tr `cñ:"  myGCd`1Oyn^`ԅhYAW@{s㲊 SɁy:+@7O\ęAK'BͶiKc{ȹ&Eɀ B-X}i2k9_䠸8@2ܼ)Nh\5Pw2Kl4T咬8 Fq>jASm#bVQV&-p?- ֻsOB@𧯵X*"|}3ʧT̟2i,V m e|ŕ*_jNG(;eɏ_o* >:\nń,яΕ11_'e 1w-G,lvM}23"|**y$X!j}o⽍H˕'qD Ǒm)WZ]#~D>*UJa""Es_V4ʊEABf!g#(a: MʦW]:F`RYdAtbϼ8E[:F2o X1ۢM>%&HS6Lc" zrPg4\@ PY^%6u+F4i- V~QR6!Wyqr $(9&;x˂V`uɬւ_jBLT2ʸ Ƌ[ٯ?fXuf[ho^d5G, U_, .aj |.UgY*rխԧVKEZ ?)4ˌ? 5zi%G>^0r<pRx|Fc3F 6&+6%S!@9C@k.bw_mn.Ʋ` ~aycdZpGÔ$\I.X3l^PP-`_Utf8q; S߶վX_$ ;(ilAKN!זWyJ)znWA]=cdlk,Z}_ wp9BH eҏRºPE1<%r_m ypnԼ+j`H7v1'Sx rȏVDR:.LSP^7.eFLwMFn[i).UȈxhZx]OtO-Ƣ}]N+e&VlKF=n+`/Hp^!kB<`NK:ղK6N[b^E؀1Ώ u &{_M^AK|q-5҃V i3m/R5 }"X Ni/hu]# ҇6e˅~T60W?NcչJu?a G'5V6ǤacFY:^J4;x0, ni%ǒ4Zs^r]/JE5i9]7jX6RkxmDw;ٷ;JNQн2{g ˾LҭqV!̘<E FqS8C7>Y_Zu}ݺT"ޏSD}b҉4֛3J RD{vj,OK-ΆIT)緽.~GGJ=tsSylo]\o^cS,f>3& 6jSJXaB \הbul++}ݢ`ꇝ"\Px*ʏN;pWW 6{Xߟ&E_j$mmm *C3 ߁uLy/TOרfnD&=3q-钓7z6 $:h`XY- f& W[o!?s\`+4mr0o`#PN.y?Ո}Z bKױv=x/Ht\%ܔKސ|*Ʒy9ڜ?MT h[=ݫڟEc +潵' yTqO.8hR G+>,vlE u~ hyYK5o6㡪hu0')seތ&+e33i6nCs1Pֻ EŹ};v‎b꙽~g2q312jr^p6(q<ʙ,1@uczc?ojWksj;DpP9Ƭ|wt9&Q8&<Ū}pßnU0W$r!)g)~_k0=m+.{iZ~ & PMA "?~8kNԿyϳNmD>xqQLS`&\m%rEUqp¹4mLqquƱ_,A43u?Ub-HL6&{D/Jd[ۤk_t|Tt^K:1FۉWz8CBvcIfDV@2/՗zd7uXmU䄨5]/?Yk΃P*)BXT޺dxJ?o7Q6dV:I1=sbCB{kRm`dF8_\*`/~f" _~l@74 `K@_-O/a:.H7ѿ.W"e+`tA+Dm\8/yqp/*Tp u]ꐞKp/3 ~Jg[ "\@m$|Ro1ӗVEk`C؁Q s?WX!^)˙Nfژ$% m8TF9LJX bntlh#G~ۤ+7Z9VȍkNV3jv}2i^6I7T|i[V gPO5:޻nyO.0&}~TJ<7Mb#LMhE7qlWy7?$I*`K@4seTuȢ[S  ZO~:Qtt 3Zl8?{[69W4 lשu=\|~-AMPjM34ꉅM{=J(Ct%-oT]`.&FTgxԪN SDzj:$6fy,G;CO-mnT[@'ْ<^d8uۿwD?^X䄕VlKV7UOQrL1$!1;bZOႇ/gM&yʫ+ }P=V``zޓct 'Dw8/$n_>4aU=j U۶M*aTSMq(<|4'Hs Z':-*+Jf'>0ݢHy8gLXZ2F?4$'e!m朹ODvO!ly齤@)S#uSDM ׯ&`Vx6? ~J*/1`,@-[%CBv#Z> }{ؘ>8mڈjrX6v71_(:++XnۥŠUd+;ء,dL6diөQT{ad5(~W/&ʳ`ŪZ=@7~*2?!OJym5XMKI6n Ԙa>ۛL 3=`lf22ʦկ~4 >?(Re=zx ylH@ W 0bR=% kFz%k^@;U6 2`]' gadža0$j9{m3<(ҵRjkuiazyc>AjlUV};wxd\$Al qm҃K*vBT uJ+\mQLi%JNzfX:PXX$ob({wc4w?5צcm]0f jQݫ]pBo U<\q] YlsR">UKÏ'IstaWVl\3Cdxq>QQ~uPt<⒋9$^vkPuN!F8R `j [zGXmC(_K"*qZ`J68a\qF\醒yq v)0s,̮W{./3?}Frvv@9 6'N@8/b^Zl)ڷ7"꣙_:Gq5@FHlzJܭ۬2C2Ҕ/ꞛ~7^4~esӽM]^RZUͼ8SBiJE|ܠe,Ҋj>zm5ĸgna\]4,eYtH8A%"CUYlHYmi6*1=K~>r0?ְ̓c>ZCXF.NUJӖrWo.X 5u;֏{6M>0?S4HP(ש`ԴݪJw> Ԫ<Kv aޓvؕ1fEѨ=wJg]͘na~7lAkc:<5s؁@DG5jNIje`çO6& N7|)&^ǘm ` bEv\RSS]\`Xc"/?OX i8W)u&P]Bi-5j֨W<X1VoUg`2 tli|چ1R*Y*q0 t:m%j_ g%eŗ]R&ز/pYGON&}K6"E ϭGޫ m|{gpiԝ)e]uA"}0?̓cɪG>CEbz~*qT;`Cn"V>d2Ejf&WT[T-%M.i7z}=r1n֪/w~-1QN:B#mi^5?tM-lDcY~ncf4$b{Srn!:tlG}=l)ICPmL=ֆj:֤Ce!8Kk Ǹ1Ns~Y mo![ydžK,%6b҈^.ZZ\"*˂R"-=]d(YeUjJ1D1&S/gUb<1@M!i[Vh#>QX[m\7V};jcv:ˌ=~U B?DKp~q0U[p; CǎVOA/JQfCDN$eU*,Qu7%,2UJJ3Kݯ #~RGk?v)if8fBh0E-ЪORj5zJe)$5"&vPnEKY=f~]dVEu$|̃VLaB zVo7D Esb'ͭGriڻ@Uτ:t롪jmX 7(aؠ0ơJƪlG77KQm8+5'2.u=/I\{ЬwCtm4Q01PJ<]$cXˍ"HNbGvSU⽻_W]u\6K Aߑ(VyF!=5*Va0܎+naDi Y[剼.y6!f7ܼeHm:e"'렦[on||*=Yi`jVx|j9ix&)7+C5!gc<*^Q=zIY gRi>= O5&;G[.5zUW5 * v #~M**|?{~!l~ -4yq{$9CT .'/~Ue[Ap~;uvd;;$'[M; d<}kTa.˷X/H&گԥpK=Ѫ^^!$ ꎑz|$gښk6}<-auQߋ?Zg骠K(9x*<澨t.Kq}BNxFJPϳN^>1\Jo;Ho6IPM %x *O4?%zؖW P#p#?~\6}0RsY,>XX)F:M:1+ˌ+/q5^`ë,F5c8 $ ccLv7qz}w lM5AVws$ԛpWtL}Y8=Ce xd B)JMO fxEUp;$Yp=~ՠG%=Wn[8O0_ J{] $3L4FL4*&Kl̫$Y sCO]n$ء{O& 5!& pcFxO, ;϶Ĕɦ44*w`1PB %W l SDml/^Y$CؙJJqטrFo(t#^[]7 63W9VscJlST g庡=4KBOC^[8D=|y'f-"Jh oF] sYz0_/`k'a8d:PB[:!䰾2ԛd6"$Z_)l ࿗{68xZ\';C ئt#(-:,~^ $dI5{FwBթD; )?TBi3y=mf# 6,^IqdRR[8'w:[-]U0" s]^^Ŋ>Ʈ.NIrIᅂ$ 9INF`GPUtWo7kg1ŀ O!y kl"v^/f [U[ #&K0Ԗdvȉg/D7⭯ |o\Ժ!FˣR7Fצ{g7;Cٻ*DӡA $H0PҠd`:"?3nIhYd~_' M <\A; )4HaԆkRW~&BϥF/*%",y(ANcF (`elAv[UOUxtx&-K{/y,Kn87~<6@OPۭ7,ôܰ=[KT.2ӚmDN ۳/l,i=oʈGʃ*08%6k bZ[mwQ7)kFIENDB`youker-assistant/src/res/upgrading/17.png0000664000175000017500000004435513260315532017335 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp \+EIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5vlL8-pXġ  n ?B?pGNC e sO<;d>s(2) fX2eM Ǒ`TPY ,̌ o`u|zvr(a r S1<~aFo/v8X _n6Lu ;(b, KǸ/?pfB(@q6n+EHy% lʧBTJ>#3e(Bv1ris0H.abAt Jn ˰F5ՌE.0p: j0 3mc,Y-ae:[_s2⭉`*`PdCv Uٲo`V_-b'l"b$iDH @lMSsoڬB|"e%`VA%"O 8Ybdg#g]*nPOTę;a (_&PP<D(?z[HjۯCRR *%J\ʊw@Ca כ:T@TdY@.c#"?Ò&IّL*qVS 砤ɆdrRQwM22ճ>{J feGԧL>'ŇU[kZ&`VaҳO B\lX3@ VI(*t=zCo_"oD 0Ci +Y blo EF IFpNG0 bG[.;Ҽ|I@B'gd [E9-r2|c̐𰑬qo_TN$o"Y$7J .}V+f j-07+W)g;+$Xq 7cP<`% +ρ2̩DAb(yn{"ā>@._A e40 UBԕ~A]>Ճk _X> .8d8&eahzzy*6?mڤUWg 3:Gtދ0@j-M&i\g*ORʔ#^P`:042.72o*!hUcK()1V3d8 <~"` I{pZE,{_!ܚ5|$aiƛdѮf˧<ʼ=p` MD%2MzG0i 7~L`տm21Gx\eȮ G9kɫYg ̼#jıH_o/3HpETϡ[%S>Vi~Z4 & ?7ImiˏD# M j\(cWG̜AuqYz0xsͱ)AwR$7LA#SE%C =5yr >OrunWB< v7H,M(#)aN)I |RLMA% $2 #h m:ہ⨘M?`s@CRCq$DcO4|/>~MA7`sԒMK=tX 8'q_8Q7Y6}{acDa/0=u2SXL%`c4ZMAAADT,H&)QF"1\5PU`@g40Ѣ>4dJl, $Ê\6wi.;6LRK1|:ȦCd@j&  +\@oJy]㗇bPNJ2Z8DQSuYݳid +F@G=Ȧ@fO!71Йp@b ЛT0092;.I8WߡMhڨ7G<;Xd}1ٰ:0 N_o Z:Y~lr.;ɢbDXk"cA4ӛ<:yL𫒌4+|F޿`< = #DcD}ع^^7p- GJM'vAh3"-^2@=^.y׼ dֶQX `a嗥c'0a|b _2Ч u&;^Qnȃtoo'YyÅ.'@/*-5` iB-sYrhTh C9 9r]&nj@[ A6=rf2f8݃a{Niem?{5|4&bƒcI9SsX)s# a*|RVE}IFvvQ407ej}WHjJɿhhe  S; 6Ah wAl.T};X`C$G+6#[6O4RѴećQw*S'f !kOA=3\~qH[ ?5pWIY')>3F8b~1P̵>y50 DTӸ5j;a3MtWZH I237 qat_r|aS|bw}kWP8ArPded&%#G*8$EoPSKK& f~epzdtMzL]L9V}lbdfz=}G̭iՖBvVRWF+)Іib"ʃ`8i&]Foz<XtT\i(,9v+)^_y ldlx ~s\3x](1%4Պ=Q䈂g <£r']'贻161&X(0Pq^ΎvҬv(?VdE{õM\YqY1X 6Y VFV{IY*h^=hV6U{n,hh$Zmv7tr^{^͠HG:*Tx;9hLjA)0!1MnB夒CY)է(RQp_QfoSyجPXȺS@]8>qAeRS(gU3H >za"ЉܬBfO\[6PfX[|O,k:1KQhZf6h ^݌ 4;"1fw(D`AR^Х}3Cuyk~״_=ġx<µŚMl.Pڵݬ$o@/=k#g#h*c5=*61l3dd. dXEZy9&AY\si{q eQw^,̩y O *2X.P9<Bv~d֨~W% |yJ ND{ ,6gW|01YG&9fHoxʂMǭ&T#<[/b _;7P/:e1rzvPmzQ^r҂MA>_,5򉷭S & ':A\o 'cFG4Ȅᱸ+uFSGe{z+q#u,D˷z K]l ǫz("4F6{dc$-=)d4gώ*9h$O²˵!P϶Z'بkih'[fPFSb P "UӰ ւ9@tl7~TܑM;1sW5nXuN&؄|fёXgh$`G]]P1A#uPN N/ҏ`2^ۮ"P1PcX% gMo6~,c #hpj>${e4}q}< RgSӑ]NtT#V$]BLyPA\+^~쨬` e]CMλE99נa"8q27X^s0֓8X: L(Rl-G8-m0^g˓;AY`ut㼪ǿk<,kId~1'$N:x<޲EEZ9ZWkÈjK\ _FƞL߁Zppf_b/`M+>R,iu0a}y~ 6.6(ZA?DZƩA՘ߪ`/QDa; ~{j;V̏;=[sE/q9f_pInVA';I[bWZxԖ `²{Y_7SWGӿeLSG*haݵ3n+^J[)OH *Nڀ,(VN[=xs)|q|ġA{k^b23)MF|T?m0Bud/T|bBK';@\~q"2R!@#t q/kqquv0H84-~т_W>Z#UW٧ AWWAw jM|\+GVƽ~4\ 7l0 ̹ȩ"AgjfuL|bתItpv{=hm%~ܧ^qd7ֻUO1), ɎLj7x$sU#|q`x`ߡ0n<~P B=1^g3_o*f&.|sI4Q S'^o&'{i8AU?W#Ag)cW*RG45 # ?S!ho]yeьXNb%*YŞnd[;(Y'9wN. H ziؖHo˷׉I7>CR7782WYPG'ٔQ>#Xdqe99&kd"sTj#Ɋa6Alm׻iH(09=_ؕI>E$C`<jz8ׅ]0FM|Mݵ%WhsYZceg&OP*9t-69`%ś#oNJ먮WT-ru;u `s7T;Ji\A$Y7I' AMDZOi2Rڪ*R +^Q=|*8m.AhHC||۸ƺixыJhMj|PvV⺚lݴmI%7"H&~bOTM;& Mj.$?xDC`vEcȁ;<*I5Hέ5JU%ٹavmEmQ\͜yYepz?.0"TKeb725`X?(/Ll`+7l̘4m㊎DWUʑUYfOxhUkWVECm1:P&ഄ 8! Gu%E"*"B|)__XT'ai TQkl抬/ ^m(@GZyG lk7W!#72vuC>DJt}vaܩ%e㜻:#O[dD rbu02#.9 Yc=axhd\лrAEQEf`Q8ȝ'_EA% +Ŵ2"6}A3SJn bu@j Fߣ?8"OicTcKuM*+tB 32kˮLf cwZul~?xv8,E1X&B6=~o : Ψ#Z6Xp@;o rsrJ6!y"ny ,:H]-t.옧@﬑.oRaɌŁ(jDY`"_F71l}[;//΄*r F.@wuk}Tj#X&@sD/QȖr6Ye`+F17Q[ g ,_ g;Je/"< mVC0e |#2W>JwRꤽWRGaJC=HP/G<UwcW@M%tzx^||' ;]Оp1:'QҁAkRБ 0ryzٲp`#Ύ?| itruDn%|RM>]O[@gO)!GթA]t_ǃY;s]:AfYH`@(iW2<hJd' I  uH[+nERW_BURwl&"HaKٗߝ&w&&fr}of2ys߽wOXHC#b{Xd >8gM 'y(P{FNb5M`{&$aa"4Ol12Gn?FXKqE@㦫<ME\'ZB軨&8lk^IvxP' HױO'Q?Cov188:s`[ faedu v`#aûg8@FI /Mn@:BP|B8F*έ}ؘ;1$&`Ge:`ݖ.nHGwiG' jm| b9nWeS:T/!\C;k>qMVftY)NLh iBχت9-rNNFՎAE=C2V az$ݹ֕M8&`ׂGwu ب׳E ,@B5 Huq˕ΠnIfͮ7{$ Qh6{~%\%^r…l,c6?.m~Twm>N `j:]͈d@pelxH"1(";e,*u! d{5J} v>||6.:_>*KvP7i92c ^p_1}uPADz"ċjk .o\J3st~;l͡2i0Q2販54  Ehc(ٵhBl*8]ڈ6P?7{!' SL^rb ǙGex ~|vf,br.Q8;s؄XYe l:=o(4@/_ߓMUz |Y؁MFP[|O삠Hкi5qxV׸X}vz{Pn{](EoΏbw =1l&P#>s }s)di2^/ ӂ!K.:#}9a"L׿t 1aw f^ ˫jOݹBۀ;0iޏv*NVRA- TlK_X%E*# 񘵅VL+w@}i|.[Ыj%լ6߳msJ͹Ej٦-*(;VN;op'fu&x/N,6dE2`5PZMqpilieM<>v~W@:T~9$L2"$4ݣ" #-(>k$~r` }Q)5qA%KcqSiq@e.RVIlKa]{>dXSl_!m[E9b PHCm6x)Wiҷ ^H&P?ܹ YH?qqqu3 Tp;uz]E>=w:y_leӗZN8"/^ۃqqKM$"#*X[BՑ-Xzfm~\,nVY)/n}:v]UzoMN[y/.߂X1}`'K? l5}AI^Jk),dy{vΔVRjB,WhD5M3 *O]Q{x Vyv֮Sgp.F׆>HjjtpŨ,'yZKkӎvԻw2gu *% `8Nh'{ uxlʵ= E`)DX$NX(6J;4pٶZf|`FweraBLGV<@ N*)۝UD~O4^ɣs^(ie٫72BvpU)0-D<OգwKxbX-]~CˋwJjAR5LT6mO[/ jUE;~PW>827s%(|b^1>YJ6tf̥ ] ~$DZ ԗ3wNp1;wgVgb.#9XYIKlKx0ĝ"6s+ s'^*8/ua Y5tѐ ;+'),#jk'9w](&G\B#\.gPk`|[:q(+1D#*#=:ѹD԰蠮 Pl聘~Ӱx$W41Vc9E+Øg`Br_Me_eg(;,=\=˩dϾy 834-qAz2PE5&X~ G٘ ;$úu?7Ϲi<*:Ջvtd5/;^+:#']< 9ҠnuIQ%֎`@ @77+yCPC9N+Bp#fVu튠q!r>Ad|.n: 3EnLW?z&`Sel暬Sb Tںἁ Xg&ӌ ȑ)#DSJA5%-Zx@]rH9qi/~^'mjd~k6͕~Aҡ,2iY=ƅaFpQC؂r.+e ºg C:dw/uDQdgsMeSkmtX:9EזJ!gz7a/mDpܴ_w@؋.*`a]>*/5[E`?]S zL|i+/U9ggE \6IIZ݋F5a7z< ( 1W BZJ]QZ-Y͒^De!.ӵU{I],16ʭD=-Óp{q}2:*͑F7/Q41/=_XFA]:)݅, DX[! ,0<;H{Lz`':XQҢlgpˀl%( G ~x\уD!]"d DU+ZcFBflIaP@Rm H >p?f"g7`ZK$b)&N>'F+dl~tԚlW /HpC'; nuvue_Ɉ#eSIWjo* vZ*#A QP~[,N/#@ZЏؘ'M6, *85&[@ :륊D&)b41'3RqC15lH'kL˩uRS"H> qZ`4be`=HiTۤ3`T>D"DGu]pظxpXJgMJ|7C';]8SE,՘0Jtyx,]29et.w:@FlGMN&JE_RHU~D$R.п\!Jh|PwApjpІB?.1uRI"d=(/׭:K$6Jb%ŞfxJ*fq&QCʸ#0n߮(.ZiF`X#a ]2ķu#[WMmJ2%eubT'۩UR5Ƌq{uA b![ͽH>X7xst , 3LiR:(rcrb hl饠U{kE D0Q_ÓzȱArQuhYI)*wsX֬ys\A}[N^(lC0 8.ˌt;W S MzI[S<֢ۢپ-_JP70 p4b%@5*AANać땠TS)OG c){cl]7#x]B㒂c$,K&QQ+Rs@uArm:{>8c1Ϙo+ʛ#ʾf߮#GCtFh-QY&UX20Ƕ S0_̳D,0-A tFoŜ1t#:p`L0WC6*1hLDʼa06]_|YtL$@F"  ýlCfV FpX .^VŊ=`xwg}}#3 o"ND`U&qGsbYL1@ B-tE;㽌%1("Ze' /r\Fe'ҁtGsDl3|Sm*Y\h:k.uZwlvcfB4)uH /O'0/l(XiPtdtKI~dkYH@W6׽eBdsl.ߠ(GKI~bvk>\s칫KbA9s >@`$:m)[ lŨzK,6~@@)xx@<};i`GŁI8X +( IؐScX?⺣~W te@MW|H >^w!<(51D[$N--l-&O2UԀrfրʈ@PUf @Y;pW5M<_ PIENDB`youker-assistant/src/res/upgrading/20.png0000664000175000017500000004342613260315532017325 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ~CCIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~esof?\Sv FtspVY `΢M _{}r<, cxt* a? ?Hh`k3(p # zYr(pGNC 6501&d0Rq$w=CL˅肠tL*x'u @Ļ$g#$xr=B.+d0LVE 9$P*M@`Vn1(,Eޫ?Qr)q&}"\ûo A4Vd0#V\5'#ޚfdPm(֡hes;lp7XC 6@1۴Z"ln 6JSjzl X.za~(R?(S f52* A O 8Yb| NJEl KvHk8r_0pV)sMjJFPݓAfDv My9PjvۯP 7`A@ <{eM <,rA@@TdYXwJȑKvKz?+Z5Gv$Jn+r=ڼ߾!EO>o_HTOϡ6PQ2&27 k(v9~Uan6/K_BFm!%iTd=? )|ur_|͗_$ё#F)%Tܪse9Ld0P^Nyl gn~~8QM\!q'<߼13P KCgR4 +@.R/`b(VU>z5/ !Kh0T,.833//ç0> `s4rȂ`|h+0l4\qƑ;\FakhaTU 0Š0b.uC@v"w a\9#ى{i@'Rc84=!P( u#Asz>Iw;˰Nr[~ f>бH>G1?nx((|mReTiYZKi1b4jb 1"&ƈ6T#&1&h&$6&⃡5bD@  [j[Wٹw{LgI79?wfAAnѿ<"B /]|lH, _-́ퟞd=gBpy #v܄U;zZͬ&U |GŶX;1X̶Kv9>Gt1p=>՞VTQ]RvD[7^}}F`7S;r/JJ- XߏfF$8p˽leH LFf'M5$DK+䈛D#Qw<[\u^phڣ{ˠ->HLȚ*%:6ގRWYR'C C:A ѣU5V~a I\{;AX™?^҉ݟ=5v#PK^8xJfW >\BgD$ ~oÙ/l؈Dt~HƕZ_+vݨIv679%u$Ui3KW47[H*@zm`8hfD;`*˥shj H2j_v_˕ѣ2rH`U?>6*YyG?{[VIu }CdE 8kzU.X7NЋlag[ZӚ }.L,"sW[i:#VTV_)IN}M)Hh/Rh:*$ % W@CԲk?Se;7ZǮ 8`1SsU&O秧EH=lz[u DȢ#nmm z"eɊ`f t0 ȍDJ mhw/,>|YaAܹAb4`2#Kv̥FHB|kH&ZXxGpK']UPꋉj8 5&5ϟk 8TOEǧ,R $7ϋNt>du(j7IbcWZPgY Ř ^]>Gj@6H *L4{[=_F'{Zq]bJ5UdSm kVݶ ؼ*pYf\[wMz$B1%ږCOq/rݥwwTG&Qlx \GzI랖owHM!6ܹ=_> 0ӪE EpR6pU2Z%$7_65=霳kÐXQ$9~Ҽ#s㑒 ntC1cΑ8~ƕڄuCH0##.>pwQTQZ(m )ϠDBP?&I0 A H4*6` < A)B B)mmff{l)d3ݙoΜ{99+qg˹=~6bJn%_ V6,=8E/¸%\sdċJJCT!<=0zs9K_ӋhMXJ^E>oey_Nܡk7Dxԃ[zm R3-ؠa' S]F d,"UΝpd$2( (l 2H-}A"LET9sz ME2b`P`lq T̡`3 ȈIf nV!yXhRvRc.m@1+[)6L-m nn՛p cMB_- f }`Sͳ7?B"L:һG2 lw.\ l&XY3rS3z=dA4rȴ}ڌn5#8 |2`^gGG9|.f%L W\cj`aЦYI9po[l+(#]MAFvkk `u*`& UfJhg SEXANal y): ,!\^jQgzͻȵfΐ/W)!*T,xhٟ^6sD'\d+(jS b+Q+ @><{B )&Ms~"9hX$VRc,_tscP ӊ;9cO"qɭ @=x`cӳsN'x> P,SMw2u$P`R[%ޕ3zmѝVNO*~h{M!-t<լiIYCÓ{ yyQPǁKǛx aÍm@BDUQJ^na>GzǬx ^Y$})eؖtMĖNIٓzZt< wkq $=gDP3F sU`U+E܁IAU]h;L_|c0?ۍT˱PL8j^Q>ȤZ ˜*n8B)s' 0ק13hРn&Q{K^c&MUFoA:lBKD뱔e4mT6x˅ڐ艹"F!`g9JfAUb۟3EpQi$r[E‚as6zck|ANќJ~dڵO6]I6S=6zI~xe m];%I6 Kn.9 Y j;:soj ƮwGQ='ɤ!FډNc1њ5~S7~-f}d KzgUc(i Hg`H>Z dZ |Z10t%U矾"Uw.jBtS,TK VxFBQݹ'<qU>kP03S*QݺTa4OSqI bN!菗0 8$Im\4=h[8dUW܂BT]*(|ˋ(ZĴ FO՗D1.H4*A"ݦfV)(fL:6x5iCpl8F'D~4trq̛6$A ޏ T1QJIm3Eee 8U޿lB< xYi:>+D7O\p,n՗&ЙNm1~%o?ק[,;F4~NZ‡3 zw$ 3Iײl[~Q66c8+ʸy3]arBeqd~ _&8Uͧoϓ-h}%=lZښD3?y]/`ΘY@ rxAR j .ԼMM{` 箢உ!U.%'@9KvԭPG 2ȗ/=E& k}$}׺4<~FBz1:̻ tWw9`Z( RQH%PDb-Z߯c!=V[,m=VRzWXH H! y;wfv??|HR$y#fW ~/Ub) T0q*xn1]FD5;*Yf#(l5a @E#ol!I v#cآPTO(/ρMALl|"_%C]t>Ts0m5@cN -dCIWv񋨂ۆչ6:mQ_D.`/Nxjݩd򲭞@̽uGk$`SZ D:CewEeこڥ=~dMAO)#+)P詎EV/l:9ƻVSV=ёjElz)tOdoxakH0q e^*)-LRvZ77 &?,NCURQQA3m G&o@{zN ;\ܨ* nDm#DLeܳŧBb,DpoʇcdmT5NPg$]0l+\˨z#!6[:1g2R돡s.9L::-[gfӣV}Sۭ"=M@~$nC:u3?JZ}IIKs=20)S77֫_Hh7>Vֽdk ``F59PPߎԌ !Mtvc kUИ26&XezJHt>vU$ҒHcsg# t^ǍωB}i{];rXb9@Z[[}T؛C1X Ykzպ eרbfD-)1-I3bzV3$embʂ)B"?::q)YS&e163Gfwm>0%5MUM#$jXuM4u&lGk6'#or{ӈ.$~y5\ɸeq~%[& )<ͶrcI;ɼDUw^  \(NMsqXU)ܼZ7{7xO'iRYrT)bApl鳷6rh/9^_|H4. V6̋ ( x1,!*d8n%"mJ|Lr #tqbya7霔 Lۘ>$)lUbuɚ$a^8q]\ߴJbܲ5?e)~d3(Eyx 8! k5H YSe;I,BBse: =fj'}>^U%I4V'\ߪ(pXzqvtK.E^y2aHas'ai+xv"!.4['!N[䇸q`?Z,u2hT:= 2g燓k-1(?hZ`O>=8_T+N^,)J䱖HnD22Qp M+.ͭQOtEbuD04ZjHn~˅ࣉlV/~x{ LpZ5Zl"3?}1IpxY$cv.)FHЋ=H7 (vᩆG;;Ih7r{l HdVJV^ 66Ნ R*qzq]m[ Y@o/MWu8TQ:5ATrhx0x*For<)r2-wK`Jîs~4b?^h:/}lh/a.Xb mlb0<'3):Kp2xKp<[) ("7L?2w>ULy s{Ϸ+ Qqy@L1 wޜɱCHA}"XIJt* _̨κ) Ą-\ αX`t$e CA!'؈#a{; 1su_B羥$wKIuCSHZv64xbC1!)5u9G2ǃ[e v/ l7Af  To8@]\}>hL=~%]DAEqYF6uy:<7\2{9\P 8;//Bwv*MwR]U ΩSݝN{obF*I"SC|8L& 2(QLƱUkIUv$دQt\BS}ұe[D~kZ"C Η/^ukyߥ" tn?"W{y(yjI)3^%W;X #LXڽCt;؅h5׵k"i(\28y`X d Y!lON[o+Dܒj$*q'ʊoQ!]_G&12E6ip?ve<ʙ,4@z~Zp[rNuOa?Q"RP1shwGNP~ˑzlFPX 3/Py;W# ?)B5Kcs]Y/XB5jHiq^ʊ vnq`"d܀ c/Y|i l hrZ7^at@wp!5JWyȡfUb܂b=xŐ ]֏'3?%8!n@L;%:p]Xn3"r \헇 Y C §bxsMySMDM6v8Y$"+E{:+Ϩ<2JayzU_Wcytje$8vȷ-S׋g:Vk M7Dj0h++w%2߷%V `K@#O77(b wTD(_^n ![pary ڽ;.-MVtWpf@!qD\7fAD xAm$Ú5yy/UxHiX/ y3!B@/˙?Jp%^)m8T&%.mny Uۢz5Ŵ-w dĔ7Z`k[+ c;:Gz(5l*5^Җ?X,%b8 "'bgls+`q[\]\nRL`y$+`sy y?c~)G4Bo=y`gqŹ J[XbBi}|PӍ |a~u6g830t7)Zbej]s`KPS ]b#=^qhJ℣#hYhӘkπa1KD.Y؉w~HNAǙ_;;zl!fԥ2GKp?3`KPb9Qd B(Q GӤ4`RuF!'/IQRVS 1&83!t`ix(LLY9˙EyUFg6DŸ,<'w[l]`" 7aKBѬ{'P&(BSCwi 1Naˏs?^.>]9!0pPޙu;W-A}m`gzn@= 2?]HCE] Q}Q%?q CV*+faq1a" G$nrVF`ީx{]UҭO4?G2;Ǟoǁ-A+M^S% Y:]<*x&M_ +)IsS~<. ^ n%Gn*Hs,o)))Ygxȁ}IIzş ߸Xx:/1[픟j,uPؿm(((X {+Z]??..y:kMZ\5AC@̓U>dDO}vܽBz?+XNkڵ,?:5kN7ɗJxhLˁGuMVOٺYut^cԁUcYY⛡ELlﶈR$qELJ`t~~J;P]J5>"9k-ABÑlOb݌ Ѥz[6 _{ #uӒUi1Ue`k1w ;Y1]DSmJ'ٶmEt_sR 9vE@2aVAA<&paƧxue"4<#ɼ, ]yXKX3 e`/!OJ xjb-J%-Pc:d@vO Ɍ`CII*L{&0dcKPa&KQVw" QH"6 wTuWyv/6F-[ [=Fv2Lr{?^ayh.';|HpB,Ś^vܳȥIkEv yU*1g*vn4[Vwiej9vg6떖'9z $K`a@)ز괙Qa9Q!dP^xf-m?qd,p8&}c4)1n#ua}X'Gw!,(PQ5nt02RJZ)ɉ* 1=:VM"}xa}X'Gm’cѺ}e0@8⭭Ri(*w=\֏]G*75q^YKX)AyČ$))`c'˳Iu ZP_+P‹&G;p; "!w_<)֕қ!I"lҫ&m/T;֩Bb"nk0'G68D܏`+>z9ތ1ĊJHLLt pMo@MrbUl?eƒIJv)4",8)IU ܏Wq5KfUD Q4@&yk[IaLZJD%{=kV ps LmR DelAն) MQ|)55/J-<<3J㑓IWuR7cF(a&);+Lj[[ >1{jr| }آWZuA"}x%>dƒUv#)85KVګMK9q"iꝤ"RCx$j+4:d:A{p#KJqcVO2gk4QzkGygKSjوƲdu1bT蓣3V*1^ƽC)Be'3تn%& A59[NR33-]xviaYOޱB啅"fuwct)hf Ua@:1if E EOƙq(8;`H)S` yç_Up*h%8zi4qk *uǚ0=1eX01ce~/}es\'塚uꪢ4هTE*#J XT؊ZJfæL0&<@LO'RNa8fB!5ļ*S8i Jm,vPth-FdRnV K,uUiF q]3z`ޙA V_),Y!İQW9M9x1KDfW#>ɹ#7[Th)vo$NX 7D׉Rc;8*˭"qT3 3ٕ'슣t娲x-Jk=!E: $S.!ot+mKjX21P\ѭf 2gQ$H EX$7Z4lBUr[L4ˠE]NC:[\wAckUHa2L22'/M1/5 jl4!_5:enoQO禎Y_kȕG8x"_Փ] }ye~ݨL 6 f,R~kFwL?`!Me9vciYfefg ߨ匛ׯ\VԦc* ?Z5z;oVd^=#m="efGr D<Յ7QS7~қx$-Ҍ^^KWZ>i$.v7R-9Wɩ6fh73_ԲX^p<׸w?MM0̈́=K10ir!!J&<0̋WlY63{`kG]!z~BbpߴKKF1zjlG&ګԥ ,R]mOn_Sђ^f\lkJ,'$A=Zi!x񛍖_-, AN|"/bf=)~4Q^pb;z/GEOɽ$v½QB\/J % nDDg(π,gGr/(+%850'wu9QW Q6Ƨow~L|^d8 p+ QFT3ΣJUt d;Թe5xh cBN7Uh{b/9 ǛR٬"n A]2I)Ai`~<L4SV/j(NةJJXٷ(knŰɫ#VMC\\ xef,*i"2rVo7]dhCnpda=hyDO>[D-qyQXBpy=<m8 S٢?؊0NZ g`,J"Tά:6vyߣ\Y+;ar#O7`k vE(-:(~y b &{<:`ҨIPtR n-8֕X*߁v*}0(ELũX;)7ė?b'$ 89vF&=^3pdS wMŤ/ 7/% &<)c1펂.lb;w+V(=0v uxw&. FxK0w p<;2J͟O\K<ծ 8B@SE;!LP% ^L1Ds`זxvȉg,ωh*=ڷ Wyu.Ju`pka)"bvxfg}6Th9%yyʂJ@'a{瘫(3aΘg7}L_0WA O04$9u@\6"e2׷Bb!KdUUa{a$)`X+u6{Kbhk;=UHYU׾J; [`'۹Ky]︘lJz8G FҒ5EWuKYЉj`W^+ Sv+-s_s-7RTAEҒEjR qf4:Vb+;z `Tς=`ʈȃ*0DJ<(k bZ[cw~[RC5IENDB`youker-assistant/src/res/upgrading/10.png0000664000175000017500000004413013260315532017315 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp oDIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t᯿dS t| uf~DlzW ϖ92=-eJpǕOa:ؚap7Q2 P}$|x)s@)@`V+3#CʲXs!d sPJmzݦr nScQv>R@|1\`xX`عTbP.ʹÜ@0o}Ɉ&Y@L7PdAqf\C PX@yմ$DQ}4504蓖A hѲ?P M-A(7u ZIO}Ug3 5wܹ3n҂`Pt+еӰiQyoHeBY81ܙͩaSϐ)=ַ]~ÞYֈmmq0LV1g_l*ڪcA/w}&eօCıȝяj{^[l@AC%+>bkY4<u 85 x$GaVUJݲ/2Q-!MM|43&^HM̳8Uk(WXJ/9}:i*mdbC!Kd9toHS xaŢ!- i̬iRb@>L):vHI_5KjX7 olaW" 3Di\aE#Jϡ[% hř}de"L 0 {pLWnS[N2?gA@&u FRF-p49 o E0lECCL(Ч6KA%i [S? jd(r84@ЛU艋d;Ae T0SBRz(%e| ,N(R V4FS#9d!q`!R *N볼oR-ը.meBn=v].+bLBNX /5XHv86j-9QHF$&ûob#v| x1idp Yk!\ K6Xt@A`cM#^>PuVc!oHI6)/%L 7$by? )|ur 'H:|GP qIC,\ Tj-7jsXu>2r+Wi6;> f;+$X6ױN( Wq}\M=taif[+i1$ *҉ڞiZW2j Onq[3yA_Aeu50`cغL < >|Yк(pcs4rM jm'p`+v0qbu4F/0~EaȵWb81[L*=iFf-z~7CQ:ǐnt~V;0 ;[LvzW0bs4g$co 6 z% ,%T@M!UdO=m59^?TX[ @l H A| (5Y5ӢG  >n*FyD\Lk&ITb,XHP1ň>mƗB[T0E  A=ATCC$dlkMڤ qq'Iܝ3g;g' Qb mj? aHEp7X;|H,ITMSHx#&lE(0ݼXl{ԛ6Ss %kOVm=h*\lxo$rZw2V !8LquY 0\$PX`RM?0X9)i\n]ph; E[fZ u>\T 5mjjWVrU xm:6'֏.SL_O>'NkASc:{-6̿X$$}1TXmݣLm_)ȈqU)edjlЛLx!4`cJú;xDw?mwI W`޺0/p)W`؍DstS%Z9 J)mPٷItj HR*d:݌u%?0ZHh[Q;tT z|nHsqm+L)v[׻x ;W@<rz^v%pK}d[>luRQg3kX?wc nu4cFV|As7q+]IuFl\ϋLhtUNN„ dX p f\pz!_ͤyG"x~ǜ´B(]x F2h|*%Ӳ9f`)((C;Wjd>}qq&n|#:ş ݵFQi+ X) P+`!"h b UDJ|"X"Ā]*B[v])ݻݙo׆% Q{6קn.s{(`k8 ݧ\EhD$l\/# Y%\$IΗIx:=G5DoL7`#6<>PDfn>\[y;_R]KxxZQtiI6.-Ho{y7c^:A((,M(;%aYMAFRK<ȐLAm-q_qcb<& .)Mhp鄊[D)lEk)ol22d*Q 0G D_9RsC6y?}{n.xD{ V~>H>E.$` }#6 D+LZŁ X)p@T#KO:Keyn  l ΃P 0br tfHuywd=(S).J\dCNB5!Ȫ }1^:9!ЈE&dd:<]&oBkq1'H|R6D% J1l%z 䢠zPD{ 徿鳟1`,L0yccHE'cɰհ%_Klzp!}{RtyY))rٖ!Z  ctQ-.c oeYJًe` t՝ R^rݖLkk;Ũo-IBc( RL? --tFRX経8"1j9Һmv;yz|mV\ KWO] ׂ_MW[*S["pռ!i-*`` EVAR (k@Xav򋍄vB=FAݝyƣ“_8<{loDRBnSM(撘.܈zYs \DJn#MuK8Lir7z E-@pv{Yʲ4m oq-ڜfy }PPT='ۂjap(379.s`uf=Pdgiz&=Uջ%'RAOIlkUNlz;{Pfݵ.aa"\MU7&FxlT/Ftݹ/MF6v&geQT焞Z"څUF'3sIHIU NZh}(dL}K{wx$9Рb80U?8 enHL`*oֱq6NZ"o=(X(im1<ùpN'$^UwT*+3˛XT\e(8RsHْlyѰl1B,6#EG1 yY>.-qQQ cTQGn^"F(s`$&֩T>ZDD8*d$s @sg4& xbqMG אr]PlmFjɮHRZ:3UʲfVC.se@@+z2,ɶבu5yCOΜ6c\PIbtjV6qqmr*sӥJN#^)(?E5'Ŕ@+pBt2Pu5Bnv#u>[M6#yȝq˥G,\euuhGl? ќ=;T`SJ۵?٬ѩJb|CuA T { ;Ch`B`^6ב=iٻ) Bb&G8|NT(\Ka+&r(tF3dXg/@:AYs7l#J>brʰ$+;۩Xۂrq^߆+ Rg/kfhQN:&+.!AyPÅ@0u δCE+Ѕp&d Xl:Ei!u*!Ězey u/ n9)5C\yKzfeD"9 EjehR3籹vm bџ#ǸS.)6s9`71zm+ޥKX陛gfۻM "hV=Ҥ}'lDkkxEq";]l 既O2rǍUcJk2 F"0quV؉nq]fz=9|UF.SZ.L4jY29`QY7yӔ uNi܎Gjy"[ÜHPN?cPygym(J!C{Ī7}QGa 9bd3WQ 4r;~2-̜7w8T q6-!/D}q.(4>),$~PTvvQǻiM@EOOy9vWy/8" JA!8/`Q)#˙;_n:aEkK.jΑgiwWWX -Tɑ@O?n-NTo5GHCZ?Ȩk4=GefTͫ(I~EƽeW B}[+,ogF bBAMDOߋd`_R%5vq<i\Ç$~&dmdmYLhMnZ9O<66TPm֜آOl^^14x)jL1M 沮ruli!7ی#{}UFP!}k*GDUnEWxl?<4V{2 xpLt@%o8IڇDH=u6 = }ti#{Dj}Hyyle!b c՞ *U?Gl ѴAop3/+̊pk}+`IȀy_]nL>eaTvN6R rӹpaz^Tv1ES; 9ԛdOJ+EV*VG >*:Yg<՘lZy#Йʴ?a)~;Dz LcNՙ ^K*x3lliSbkGr-T ݴ$ 5z6r<+(0p>yۙgԧL+.5ݡ /on;Sd A.C׫QtΚC&}]$`ӃAͰvnEtLUbe!]2wTS8cr8߻K2UX`lw*,o=xƺԝa FNm%v#㷣e/T<G.@C6?9RF ]K!;3лj_X?w*" F͚ vb<'^Z$Zt":]XPb) 3ɳAuœ΃3 0Ӄ0}<}=~#nʇW۟l"'-m),PMied3+UWƉ*Eu ,n1 l |,JUN ;l$B}_D6YAԧ(|** ۨ *(qt਀Ⱦ ʪa Đ y{sӝ]v'|_@VSN"MeAjyu5(6Y'(FqsϬQp;X${P["U,<ݲim} QH a-~)um_R5! ^棪%J*"#Ɣ?#v̢=9 i-6\`Wv;S٣#m:J7 j ̝;5=ysce_W ×5=\c%.H`{D<|U ~(ù2P{ lc3cm4c-j` "ےS>@Y:Qrp .>p[V<ڟ(\_.^/g%}Qu<lKJ,9I׊)7[\n-:TmXV~Ɯ )ܷ{M6x.ȈphwT쭨آ0=FHa;O l3٨Ck=Z_;?f ж(BhDNA 76E=|Qlpm*$㆚t][zvP[ws )U` lѵh&d+WD#Tfġbc أ"IGyՕnrnk.JЈAuK7np +1RT֥nLyE6z܈7[HO& xP@`8S$#|}3j*% ix oQ_K(?q@j\cV.4ˆ lixtGQt R,xkvH5e`뻂˜ #4l0]"r#TH'*ᥙ{W ~7 tHt4+w+QY4cpٵ||cTh> ! 6շ}:e{UmtG2pKH&D#}7nfv)K &GI:\l|=7mv\QUdii7u\r]c: j%6B׾6du1(R;,*.B\WwnQT7:6P}B@uq>u>=!h`3cʠA7yx6 5Z` lp+)q Yڄ٭(nFrc9yzU]Swm`6E魟h= ?­rmը.(k`ac o: 7(crz3!E;KfP|w*ڕmJ@YD^~U (q]ӨW;k&^a[hT7cf_dzp(tc*4!6rK8t>?oB Z Ry-SI JdJ0`,@6nF5k{aR|Z56CT\1wfZ@+ rVH'FF~K`]acΊ\:chl)dKhS~C=uRl͂gR| Ѿ*#pDZa0!2ςY'wuiFcrcebEUPu·dQПWoL !`&::FoQϷ?Z)3YsǏQQ5koQewX"W/Yu=_#B5#)5-]qtw32RqלgtK:xrBikP05WLlk BA&MȲU+)jjPr.6N:X=7Ҙ?< Ը+dD@]XojEO(AB5<9$T1~l^>._q~7pU/mP 7XeDpRNVc}KډQo%{zy%2NFSj= Gu˺z\;Q~XZ=n\ee Y%o,g 6)2`Q3Kurhr2ku /(pLK4xa,`%TϣmW~E? 8 3YZt*XS2~ƏyYuHrFqu\RMc]PxnN z| ~@{.n8`u'V q'md`U.,EXAv=ϫMr'jqՕw܃ij+A$yKh?.3qR)Fdwq]='iB%$>M]/u4WPDdͷT%}U:҇zvɔDZM+$P %pdl1&v@>Z\)=UD4EEsa:9JreDJm-קɗR*T$A{6b\nYbdȖ/kC/`3ՍcM+Iݛ&J}aNViauw <$ѹaM4NSSҪǮ>Eϴ׆Һ'WYNfDV[kdVy>8Y6c[Ɔ/_RK督 8)dv@뎓D}4Ο 6ft6j0뮱!Sol/Y.P7II:QdA5"E3M)N/& 5٘/-{?\sA| yE$aq^ͧ'Ihis/F{^ށ4 1 ` 8(:4hJ;-+Cbs fW_ lzZ=$^̽TАԓMUtj `hn8뵴A^~a^jҏ<.ap#\@~MR׎jIiG01䮮Fu>H.-Qգz:9.ٔN]բxב~K]w\o^—$v^CYPD,!1m܄gefPFZseSM eo:ܘK9r?Zi3wr2̴St8!̭T#;͛|?-dBV`fmYpC)է.w<:ua= A4 pfs[ 4d6Sd8 ELFuUv7f]pUrX ` y4N^;\7@S>j=oaj,NؔC/ ⳨.}=Q^q%7ڡߖImԪ5EDi> :{:Q m7Qq&u)wl` g3zodgVVpԂߓ?k%գu4s N/|ԵTcPUF2?n+a#qY)жaLɗvZ|ۛ|^*24gTGذM\'AS\\b-\5hDtM}iCjګϚX]Fί$-=y͋a8lAyOm'hg l!\֐^{1x -=\] ,qԟRI/u:U>9ྟ=kHB$9NL㸒[<-{{o~KoU@o%Bp-&o'qy[i:F%q0s)lD)gmiPrtFgCrO683nD#:7ߛF#nQz`Y0טBfj<|1[Ҳf֥'c&1_M3`pdO&FߙkhQ8lZn=zqrͦP[47l-p=vqߟ 6wL`ɠdli#fnw|SO^J{CKy9۳϶6Z4 Ўsn^c.Al ,2{ q N6E)bQ:^^P"uvxvc}l7`!Se2{7~K?*PX뻄xȰaab3F[PIˡZ^זg[rR`^܄fTI%*FiÎ#=cȍ/Cy. ,1z1;O=֒vd#]DI KS^.C5c}9x:R9,݃֎9TE6~/nT%]RRR 椫>}¸GPrv"]b NU]//?IIENDB`youker-assistant/src/res/upgrading/18.png0000664000175000017500000004413413260315532017331 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp <DIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FFߏE?Hh5!vO%an4c;ᰈC7Ag}i~ n8#5(7H-.#\#`(%[3$Zȣđ`TPD c N)X](^] %(޹]E9+ڗ _`5U | SȺ4}(Ap`p]TO9RJi`ֻRd/;W;|+Hd3"H`! `9SRa(b8`\B,6aA d,] ʥ ǁj}"^?w~aM ri"`F> 7LxkNF5XZև"oV6 ͖= ~j1;0`3Yy!Ĩ(QKA;A;DE 6;;Q;+6eb=snf7%\nsvnn潷]ւnO/ 6m¾ۚ$L(d[2W#Ԝ{װzo>v/s5r&b`.AM5GGIcE]_O5KJ!j)_Bi bvY/+j@RGPLB0R)`&M 8= D\7/[|˶D &*ҝjXkR /fmKRi_5mtTț;flk GӘ$*7ZQn w\z{X/'4ԟ՘@g]jCAx+Eb7f[sof`bܢ:t2Xg @X <ܳvFWᙖ6nO-V=$''+7QkA2w Ι 6iD46Ҥic=5qxi}'\ @˔M*hQyM>p^OW-З/u})j'toA[؁QgW-n'dZgڞ7m+t %ɖT^fF.JxtnxB҃ AQ.6Qx3uxK]T۰M~'_j(=$%\,?x=^ xy|ODR!`Mx+@ 1h…:f}|>ʾ~NS%*sK6ɴlP1fAejэf2B7,FA\!ߌ@!2 :ɇ7I=]PcyMȔ,m^8rƅƘ!(NE>OI>Uj^YUg3d7q IM3ĵح6rRRCtuѲ.eaRܼ\.:]ڷ+9[܇*E`DrG!gg?HXCaAu>(d.N{Ͳ8:YNW8yeЀ(^0^>@n(b*@,F MU h*чFK  ' 4D 45>hBD B ԔRڲ|;{gΙ;.lݽ3瞟;woG7$J aL;|udbC4z?=M:? RE-ƽMk@ ,>Rby,;ITv'w9Y` OLg /nA[,Ynnv)sV Oɐ&=d*E @pZ+ K_ spe*{ME qmMi-ӹWE8Hnw.zM@?Rbqm$h=! UqDweWsԹ@ڮͲܽi9;MVK0J0 W!tR^)Dtv _Z؁ ~y+2% {ӣ$U.k0)"ʿ3jS} @BwIn#$SRJo@>:\eldXk1zd*+=R^B8ULРb;_^9lB<3cv8 t9=;_!<0iE'bcɵz#m,M3Q']LR ;wXU6Kg#:r&}QG@X$=WV@CԪk?dS:7mZWc#esUlӹ)"d͵vQWyD'3*DȢ#ʚ 0*aVa4,E% F|ԧJ}޵GfH TW]w[Շ`EHB| Pv7hDeo?6z6V_N PaPa. Ȧ\jau0ra\ KN P\ FI\q#{_jt:p[T\|ݴKԤr2JMu-XZl)_(qа J'nk<, |pRWv3P/j}xՇ]|ܖEmݾ\FE*2qT;K^8~9az㵧"YNѪ<0b3NH0z n!gVØ'C^thG"~o|pQjl5_@V_M:|lR]֟<ت .K|_oI/PJͅ I>jōKDIz1IIsV+$?hZhKZ+ T$CM$1`xQ44F!DQ|Ek$B!ZB)-P>XQ]盽ܽ;w:v$nΝ3gιqa!x\ucblj#^2[aRSCVl?[D$riÍ"/4+O4nȢၙ z?Sɶkb[y;*NF<-`(w OQ3l.d߹fX  v7NIEYI ۽`)/[?>#! Ԓ d*3 6^glb?B)?u;؜'PR[s$\NOOMNrkr2|]KAw9`jnK'"_CvMZey$'%Kި(xp[[MȀn#M.Z$B6jwHW f_l}̤b>ROclsXQVXťsQMvgHR)aVW@- YgNtŸxN]윚^ 7G5+W 0$؁fr;G;2FW,d,vz_[=ά6;@׮!>W؜mpirC"9yyQǐEYHLJX]B^IWa31>>1|"6A8WO=}嚳wVIJ0A|mԴ4 T6b< 8 ~26A8? S}|{ÀnߺE>mLj_<2\cF8tV_<]%cEIi>䣋բF0ྚ.GZ:z05f11%dv]H:6p@nUUg@#74N B2&Y+287!-_\wʳNH ږ\1Ev"јSHIRѴeRw7 ~[Sf=fL,CCPK*V,AwiW#J9pQSФ?| جF* 4촀QZHj-xKR'̌^a;{κn`aN a碪)%=Xڗī_hm1Q@ijmcd:&2 %,S`X}:kdn障J'N9V}(dvmU(s+2]dHzgؘp{hmv~d燲F65EbQ r+ů̖pEn[YHfa+hf }TQzf&i,N!y"p [YQTE岕pYQ E*` ~_<"k{^ $#HDdㅆUHYt1<9*T<)s*el1Nrd }Ю$7tRi?$ 2x(bAs"jO3XO;&atqٳi3;QCKVw\4yafYw zh AK L#Ц3[7ß/_\/(Zi Q=#XEK[9 <*! oν{̝{lsrwgwosD'lx#OTJ6*xT5 gQ919)kOCd-drQuSj)`SG8^Ňh/ Wn[C^OAKs֑lNfEםl 0b}ȒAH`s{TyfB|eZy0<C.4PSueHn! >nyYA& ;ml w"7Y}Qd& hmEK_Ns+wGݟ؛s p]Mik񆞵X/Fq9[_#7'ڛ&̭"A?x"J]]^0>~ <-YR%=j&nQ; "E S%C+3a^Z%vݓ`8=`*xedSjM\ҭOh#XۂM/b_eϭl;=Zqq|.h ޒGd\&].'YsIc #.ŋ*! կ6 06q]-n`)[nhuٺJMFϛ4<|v 6 A"q q8O6'mml%2^H$3;ZQ}2ld|Ik^$Spߚ&& ssFf ;uC7w#W"sfJ|Zoţw7$j+^b[>J/=25>ZxFגxwΞ[JO& !?(֑Owu'qa:(SAm#%>rm(KykD yVOf ^~RfBrlۺǚQѐ|1rSߥ#C} d4q;w=S jڍ_vf3ef7r#_S~ݵ}{wtEBajH72]=KDt :$p.7fNffܶ.rj9WHRlcr]-'rN'eC\dV? 7FmإYjyX cK16=pBN؀V.Ff%lMDM| >mH9%u}cPoo[:YH0JeדL4 UbQ :E6K$-V!YT$Ƹߺ)[vOp8aį#:]V0'tK7g-z-H>|l&SJƮVNqw9ÞP ~ `?Q{TY?TL:u>(,$}M4aHZ-I1/ޑ27p2.4bs&lQbM~~'quڳYYyglS~ɡ "t}]eЯjqĀH1ahIҥ{soXƕt^#*?s!8o):)CsXd k)PZD?Y_647QGp{}<lGVJHY>e zKc =Dry_\;W`ܘo2.2o-y|ug߰ɭ7^Ћ+RFV}s O"0so"Ղ0 " Bȁ}oLJo˞~p[ɾی/(ML`QhzdW1側6?` \7 %8KAmNlqP+QP\ɞ"n-3tmĆn6rFzHX1.ZU9;kXq8m>ee ء+(~;vd (EuZ$PlJTDb,&BKol݉~rԜI(S`$S8LT}AinM*G 7b]N]N)0C&L)<1+`ӝvc Vsr7mMM[] V AHܜ!sw0z-; ą"@*ֹBc;wEARC'~2t:= ӝk)h?$ -н9OgHM*L ex?{p# YTKtFw]ڷVliIzM2+_3iʧmts_0⥉jV?~xk LPUm s)^|~8<Ŭp1YDk[x+$Ӑ t.8y\H+E  V V{?v rkqi9\TN!jzmQ|!  P>p2-F0$(g}g,'N:SYHf^Iu `2Heӛ[;%x3>`&t1FQRA{RQ q j,Pm`#ώnwo)<ݩϥx5 2դ), l7<TwB2T\"xr&N:Eڐ{xp `gGE[JPY>w wo8U}:\hL=~I $," (" n2QtfttFEs<7QDGe\Ae @BJݹ]U݁﫯;[ܳxFG Ρjy1(@zX+*ly=دQt#\BS}"rc"G>?[e}HfZt]J%赃} "bٖbb^(rGJ?DRH Q?S1M~{3q/tހYK|p5r;؅h}};3 q@F"?5iBq۩ 7m☨E;Y\1[(3@؉ay46d].sRw$%Ч7;18ܞbk@"\a=#zk>@ evt|ƲR_*I?. kYz_o=h @C#GLXׯ(ꜛ)?rq_Y _ i7؁+#J7x[Jdj+@9[qcq1$+Fq[N%nG@9ȿmvx@_ai~o/s9ܖSCd%v -zlVPX 3PQ#{`Ƃ1Y辽nn1Ţ! F7 N[=M[v H2#c/P|A l hrZ7^o.U-*+\EyLΚ'S{^vt%8":ɝ܂͈L@2/I"%U!U6SdBXT6gFSz%|<=B@)ES+Iivpb>-K}v/9V>i `K@_)O/ x'W4W;?>g}2.+%jXuf^Y~pnq3 "҉Fj*aCz34˵-)KqBcr~h*&%N~lNfa@TD M 9Ux4J'5>7^6'{5(Π _\$[ɋX\;8Zs&O's5%Hp9m̕ů閥YtҨT:RN:g>=/ꂥ^S,4/8R;AS$%=]O{ pD4ɃmW3J6_2u\\e]'QX֐SonO1n&fVF>9/"Nh2b#ŋ;4/KӾSo[++w#/={`ԗ3 )erL1U'3`˹/ %sEǨ;Z3`[&nx5]BE)-VuAuЅ̺n.to/OYشjDʝ" z0搕:U&x"SXΪw U`KP%O֢5͖o52Y]U@VT PQ"Ft뽕OKS`k>b¨!t࡚-r_-=2r ,$R #Jh ]ʎKsrN"]n{ʪBׄ2C}3 HVꈐG<23SEEA#3-h(n8%q>iD/Y͑eA!9!ȧ_ghZ[a= y3!B5(eCi37x2 ^L/| ـf?iii}T@<{6$6V]!ġ2AnۥSl;ˍ?V`kːCk:q;yXa7K)nV)`)ub5^Njwo&1[ryz?l+ypԲhץ DEA@,|4 *g\=H K 6k.)`kg!փP& "5"? }ssEnNu-^Jָ0jb&Ĵ+R([_Y-`krqAA(l(X$(Ti{@o#Eǜ  "DJ,dLMAժSnNCcRn5B< ˷KwqSl/X sG/|2n `BW+`Ƅ߰MJOȓ#͚lgZQl׹^*@͂1p4mn{,G?Ppʢ&m'8r-`4.}\qрC^d^߀t 644V8|GD SrrOgris&QV5k`m̆ǡO;ީܲ-"a8up1o|h)$Uk߹jQz0`]y=xIj q2M`z+1}Ϯ,0Sk1a" E산׉ͲbL:<>I}pKÉ.1a G׿TL6W5p *,'K1d%KEe޺]F˴AKY eǁѷ}k&ĸǜ O~ua}X'Gw!2 ]P ,ʗ !)CfHMV /32Lh專XQ`۰dXcb[/w?F?"ڔRlDu50Ugdϲm.nڠ}tk>SK))7 R2sy69E[]l /nf@ /ʣ)3!CߓwvUA1f"(omsfH$p{U mK++quj kjb1nܨk0Z,m,Jú~qlaX[/ǔR11H\$'';7 &K:فD܏WI?eR$Jsz`4B)-9jr@)Hg`|Xc1oX?q^i|615h+Sii~`NNc&D6@O?2U( gKuu^xz$ëkUX RoպOjJ6Zm.dedt|Ҩ;GWZu,᠉@J a}X''Ɏ%SvC{J42ҒqzVJwJ+EfZ ᑨ\^& P}Z8+ R% ՠ.'*?aT>eXFV+KŎ>9n2Hqo{ʺPnI1Ď!; t}lɺICPmt|6F[\fغmGuPr@s)`z1N=fHv[kǐ[9{$g96/5nxU>.*T hc:#I=*^9;L0.8.z.N:RJ2qf;VamUdp] E;Kg銚*VL%dďo3c{X$ ;vjl~x?`[t~A#o(!w^$)VQddk&d)2WAF#^?t0r̀%0eB$q0d%A-@k@.v@s-Imr륈R iиȷz\~7mw ~f !M8AK[o@ŔK}[[DN>JAnbrUDn8Rf/ĆaTȅ +A9],V? zL_tݨpd qT~ غ6#=x~?q]~$ήL2I-oaa~8JlU\lʓ-qx02nVY<0vLfKGta1@iѶDu/u"'Gs)w2.@X3FT?ϓ衒 WElXOSeRldֈ*֕Nwe|&.fonj1Rb8v ZYPX1%@m9Hy!wpH % ^rp؍kV˧ggyqmAR7Oli:7ytPP^C|\l^kjj}蒫N =ËccYHI*nv&:DuCİG$)? /8E~kTWcN{bFZ~\HJ&<0̋Wf[Eك|ivPa ꈀm{_ jfY{]XgtI=F>QōÔޔG,ᵒ˫T!9$x';}rܷ`57Ig=mP#}S;M ^H2inDKy+\/J a%4ܐUUZ|g|2T,$"rIPG /Vu&>"V[NӤjJ ʴb>_YUlLMrL1D7挱1H o#3>V`[>JfCd)Βx#3[CtL*/U΀,W3IYR}V$.╈S s=~}8KP/y c W7"萠a7YhL4*̞)6*IVsSO]a%DBxP!a1!'m5;y=<8;.'h2vpp89S_^UJX"f P1투P9^r?=%o c^&7M`@i'Y,Lkآ+.NmP D]woxjN\~׹wG˥Nڽ^籛蝯 /y YM+M ANF1W>{q- VįwLW07M O10$} ;暏aN<bHV,!fy󁀇!>akRV~zmam`#S:u7]/J{ `aAΆr^ڒB8vWi9>'3E^#K \w/ yP%'btAolIENDB`youker-assistant/src/res/upgrading/25.png0000664000175000017500000004131513260315532017325 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ;s>IDATxbTqXp+]H=Vy1Yp 2y)C в30s1331A?QC]+,_5!aga8~1@U8 ##8hKtؘpZ4c;E7Ѕ~G(Uih1PʄF Y!Ǒ`TPƲ(.BA-0:("Y98q 5}t~>M|,D 7 LtO?e8,ע, KǸ/?qgB(~A [JAbp6R^Ib砂T!PŒA0ƒLVE 9$P*M@`V1(,Eޫ?Qr)q&}"\ûo A4Vd0#V\5'#jdH1! o@.[N@BebZ N* DHlh`cc(. -n9'Ch!Ai˚HE,A&?FM PNUɊhF+k3Ȓ!R2/E7|qqifC pMy^cuз_aH, G.@e;4C`+>Gmm55>~n)BÊV "ɤҸ4Y7Dm8|}R&J#S&PГ#؄Cfa-Ois`U|'!.6JeM PTzP 3K񭛨af(|b%9`ψI&pX4B ErvFWPEG44\ ؚlB d_(e upt#gq"[$X+4sV_ysEo+#r -3v 6_yfK3|?*X;J(~ `w頍HlM z,4l9^LZYhk.`41@0!ˍ6?Gq°Hs4\r0z[7 )@9WWV|Gp9֨rCEPy@/N3H/:8ƀܦA BP 6Ȟ4{, e#|6bx}lҦ-~?|b׈LO>%jbSXU"љ"ȆϝaI{n$)`ѧ`m&'8W>L- >Wk4KH,~El^(ޓHVNxԁJ0 ,|skyz2V \9Ԓ].Mp^S2/` *S`Җr1ow}nRgĴpXҖ/{Q*qP H+G @@3be\Vg"|t,懨EP߈ܴl5u 8K!sU;[Qgo'vi5##,"d#ì.\-ng&bЈ골F(POu |dFUBxa?12>EZD4Y ]oA4_݀#qAP`GY/!`K]nNk?O77Ή0:sW uqP(9hmi|h!^;]~le{ijC6hPdY Mv]|M@W L*#8 (uy7 %D`iX\ǩ,J}u؇'C<|w%wڶ ͧ6d9>Gdž@Q6L̅1%k>ł;}IWIA,J 8  \ևw=/w ) `O˖QJMJ$Od2`+{x 5m ԝj&#ɲ5}of6N׷Tl ~-n$nT)V"D+*>7dl=/ܕuf諦7fs$?eF?=1z䧳˱,j|au#%@QxH|%ˮU |nJMAFPK!LbVcnqzLtȘ=_؆ ΋I 4g88KL/Z咚 1<`s1dC\OeρsdicSQя+)赞ٴ&!Qay8A*g{ixfT/ D  M\ccK=H %zv գ ȡL:MD /ZIdج,f0v!ٗVm9ӧ7HN7u3€w^J}t•q, Q ?("ɛdS*@bhC%խhY_gIt'.F.A0%@>#߮MXZ[N[EhPJ.}l6ͷPSn#vYtp;lbH ڰ`"Y1S$A2W~sl>(߫(?ل3a,S}c}U$}!=`ѥfkr1"3 T_;} #P58xn1]ʹ\Ib Ѽ?9l-zC5F!F\|o c졯|i;xr?ļ**NYz~+hi_l~ wNA,{ײL!r;OqzeO@'3or^aU!/яEnEd $' @k}/xV΢701T:B$CyD72r uk[!<΋VA|8Fjv%yyxy0[kt]X/TRÄԀ3u]&.W\&LtsH8AQ"YZn[Uwlr7(/s;ɝl?9 : h.WfjN:PLp׳d$-ma#8^iI_|}\yM6L=kvI:EXlIW 6:2،6_Ry:f$3;SGg;/`[gV|D!\+q'%ٔoT# u3PP d6hpdCu)m$ pcZ5yc>Pz;3-hU5pqJ7?PQt6I" #7Q!S5{̄06uȰSkI&۱qn`тz#s*:R3i~Oj6T ^H5KIOW.5uUljyG})ZZlhnd[TTe/Ɂr!ukƙNVm_zRӝ6O US7_Hh7񧽘ˌ{=s\ETt̡2v$?#CL΃MrIvb VИ2fz $9PC[D\345ޙ}jq tjə?qAѱmVwwgxr,Kzy "VNGhf$+Mnk)1-IMNŌ[#9 œr`hfR\Wwc\ӟ?ES&5>M3+gtJXI0pmӣy=m 62mھoO2zQXj&m|> =XgVLzRA46O jwq¥!%s)HѮij ̒xY/DiO~ bdz<Uva&j&/gZ-zSu|$nCoMlVot(qS̉#vLF^GǴ` BG|R$+YHvǛinU@yOr,y9n+#ƘzdK$C0a|jzǹ0FUk+nΐiKJ#+,BY 3n! 6$ST۱w~7hԫAe&bn_yT*C:A9νfW4y8S#۞ㅠߪStWKClطLI]e%R ˫vHŷL\&E^$sU+:_D+I!U ^k&El/:_xpC :ۮZȍ$x Q!"ϙ0+4)d#M+#hlMɏUu]Fᷠ:Iq̽J"տch_ lKw M? `(B`^T@ F͉8cʤ)*{ n%jb%GxLr:\ἰ´{#|B]YB*GT:tg/=1BW1N7],-b(;t-2LM.M`&dsPJ] 4Yke@b/Ѳ S|zYԜBA)0b)DnU%Y_PVQǧ*J1 |Xzt9)08]8uȄ!'fs}lr0*N[&N'yPEŭX`w}cjI#!.r.k}ZziD\X|rAE^ַK x^%eШtz@d燃&g^]@P˯;B*1&X0F~K4V7 ؤL-՝1OtEcutiԐ4FjॉlV7~xNj&8e 6;N~8<Ŭp1YD2h# _ @K : N v24|;f'˙ȴ_*/@!fɳ<]hW`#um eN)d]:=^ϯRaiagy u* fYݿ'ϏkBb -p3; DDIY~5 BUN k.w&QUY EE; k۟خӣڎ2#nc3ޢ|ڭ3L(+  KXB Ruo&{Uzr}zu߹w9%b$H=&:69 ş (_o\l际p^]$^c蔺2.)>XAVoMXKq"yCKS^{,)c1>u.JJشKJE㇉+?4}xЭOZ7_\^ ؝ mlj7y̑䜚z'((TE=1:(Iz&ŭw.~oYT@np"Ӫ~r@eGۥޠ_I?W[j-IfDN@2/IXA;Բ.rxSZR"AECe#ʺX%}\5qxulEEc7R}E!Q@zjTج @'pWBTa +N$FONFbdz 3u%࡚ai`d1)GH]E0a*ςj { bLI,%rg]b,16Yq|$tMcORL }`l3yyZeW&IAZJF2N= TĪhjl; I%' %CJ DX=ژJıڌA4Q-ԽkR; iLb5[i%JNn~XUU$o~W_m>?IbO}VWbƍHj9Lp:AM`5G+TpbcՎ*z\i{nQe6w̃CƄXk*T)Kv.ʝ [s)ZV&"1T 8:qi9$^"X+6Ruw=~~Kr3^M3UTsu]%Ď{oڋY߀vˊTS)Ӑ, ~q0&]eaLe94$`o1] [xzkXYlwI|FEI6hC>olZ 0.8MW JK?7CF`8)b<$йľ|:rQ6lH4:g;QHyG2>xwc/Nʄfb>g^|_k2Cr6oPoBaE/fr^/vCmm|[N7mjj/')%^*lAkBdZ],H=;5F Hf^URív" T*1=]n>Y}c I2s#*0bct7]bGP=)-,Vln!x:ؼ#)XDsc7+E ,s†I[0OK9UPnW`ǵuHN[ns^ JjUxQ%0vSB9QG,*{Lqnܵ݌  *e;H5(.(uyhBuEl[7:+ըOрi^!t˯zм:yԊE.JV9URgwby]ZSeffSb<1Π+2̋` )Qb l9> tDjd~;ni3^7 2hGo *cu[042̇I6vlLurL;glM6/;{3][+>#Jz7(t Ȉ&K= #~d#]y:dmL< suB`?kKKݡrYI*Nc |?j9og_z\뛌~6';ZhxB`C0j3n$Yg.9Rwn?KS U=*>BU:b-Q_i3u? 8T 6mE.ݱyt%47;Kqf} A] !JzLX*7#:1}qSj)}1aװ;yAiя 4Hr kyt09댜T a(dJ WUmbge+c vӿ}QO>@u gUQ0~l̲̎S${E慅+~lPޠE'%'g^̾F}'b=%e0UpԓK {_?S G4 R7SCꁋn0KŚբ) (ePa>aH3||# ,cAa)jjvkNb=8]H~K,ŷLvq7iY   Ƿ 1-= ui)??[BLR׋:5z [bޓӺjG~d[2I T3p xETëdZϹ8qq} \X?5$TDZu'yP%pUX0gأr]9w 6Ԏ<]k7stJds &&-?WN$>/AUe{Ap.~8*F}MӉ*A-9U5*ćO9/H&:ԥ +s#bg]SE'ӡ_ҧ0W44EUdЪ!$5%fmS $g]ޖ2ЕN7تGFԽFLJtD2sܧ$sܪ)b]۠IIқyx1IJo7HoІŨ<6y_Jݕʧlɧ=mls?^Ej"G SBgPZ2t:MCT`Uhb>RK\MPQrL1 16O&~r$;R^ SzSaZVo~?wSo"Ỵ3!p&6CS4vd{gRhn$,]F֤"}폎(i|y-qE,W'w2x͙hDUoX#WI*ZLOݠA1#Nܘa_PK|Ŀs1^rP؁~"紪Sv Om~0Mu&=m2HdW/1MzG*`['ny7? z FX;-QW;nǫc?]~TBAg3tyl§Էb@bdbдw []"n߽R% Q=zzyMn`~%Ԟȏkq9m׾x@U:mu b^o xN)/Uhz@]F9v~'$nB SH/J]׊7T.6z1UY/?L\;q*Α$_s߭`'w]TķjTTtT_R#Q$Rb ^B?X(gqvRy:U2[)߯F^V< **)9bbd ۳ThΗ}g5[[[{iSq<r$Y Xۦkm=wN6 IENDB`youker-assistant/src/res/upgrading/14.png0000664000175000017500000004476413260315532017336 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp e |F!IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=F /Tr1(f* fYY[xtd[,ѓ(AՆ"oV6 ͖= ~j1;0`3#M %"@hb o¾x3f,s=0?)T fE3aZ?Q+bdeF33Ȓ!R2/E7|qqifC pMy9PjSjۯP?| I H,J\ʊwh?r$Gmm5d96>~n)B5MߩseaH|dG24uPy\>i`PBi/"'՟߾!EO>|k^_"fJGc9_?y?"_FWfm RzX ` EFUؖ4gU`DXE]MQv'ʊ.(nRB 2iMnYlѐl|g[>)vyǍkx 9,NFXAEȡBxK2kҍJhY0HqKJ.Z:nHTRcqlA  \'#esHhwomr M_jJk,[Vx\_~1-&LM~[}:^f7x*re>Yj< G]faY'úH[~GwTQYI+I19>TT`uL ,I*9R_^Ҽ 5xTDKzGx@30E `FnGPO5U[s#Сsfxq0̧Tӈ&:@HOp`a߰_WsbCuttLδ54{Fqzn(b(@K{{i_P$!&bƐ |A!$ ( &!DIMmՖ^|;ٙٽ['in{g9?9[Y?CٲjӁSEɵ2jl6<$]L{lA&LH0xSvgcqΓ@tCľH8in.5tu>Q۞]8nl>M#5E22ywT@Ԫo>5^r#\0y t0i+hWTE*bՐO]ꀠV]$MfK[TV[k%a.ݩʶ0ކ;8?@u%EU+P(]Rdu_!<ZDlɝ//&ْÜլeӒS_j[O.(NL`tCvi5Wj#ybv&`FG?_$}Z`(ܣҖ^Ji H-/(M" 1Q#!PX4!5D jDERJk{v.{wٽO.|?{N ՍR[=DFJߺlKp)Yo(t ; 4"f^.rA8<m{WܵjSS P["H} I|جF@]S+{%#͊Ӕ Wź;-] }kKj[%Ҹ)Vx=B}X$=U=3{t[fn t$2`]!)uۂ:ʣ7ǎ dS?*Ʃ83y #:\*ڪm$#"WLW'<&7'bjǽYC5ck{ S%jUCftUhK\ݯvFګ} ڸ~aJ5F)Iuee@s:_̊z0k:bz4b^(Qq6w+wE-T LndŅche?J9\ldd@T`;m6"d mj&r4tlv ̛>?j'UJcTP HmA6%Fj.*=O3Rb٦ 8՝U96ʣ9D֕*MF πvp}yx13É?FzN *th=gsaĵ 4y"QhRzi_QѴ:^Ç6h}SK@⣭ `vV( Ak*r3';ʁtn$&]҇S ME"QkEƄ (hV0-Jlv>.4l30@oѓ\ x㦩)՗B!a-`ըoMDe+_)t68!sd˪59 {gNxK`A/;xƆ'b꽊OĄ7بQ63 r^sv:OÔ-6 ^ //;1oxL%SCK^l,`,7vfSZFˎ^!=6Fl1z(ɘo'I2gu8l;mi_[)d}Q%Et cչ˾6`[\`#l OeN 6y$7X|dȣB~-S׆ ?v*){ 箓ItDKXSG`)z+ʸRS9wʅpFMגl j时U6,TQ/<ƽ@>uz`GL9| @6aY X{?ojmN1Q#"DME.LGQ^Be*M?0 4bM۪4T%Ax[k;@t ,?O*7U;vfA U":VXU)hug@Ǣah$`8-20HBĚ頻}XIPtCk&@@eJaRb=0fЏEpL@a438OT1 J X6F-Co 衺()znr;CX u nk%Ն6YO"&Sm,w*dfo@F=^^^N2) r3$X,x8hrr֘bϯ})gtM4xqlӡ3˪' u+W.Z.8ŤpH1wv)y˪ꩨY7X~ˉ4yixٛp ֕JE41czz\Sc?#*ũ7o\ l>rdd%T{:n, mI縝cnدtHRl=53>Y;42"O8ܐu >e*O t˕rr.AYikө"/xܼ8AQUQZp2G`h/m'wt$B0.&q~ ^*?\Zf9я߂1.gbnM[mUfN͒DGs+1sf*Jln;m_p_7J$-;w-+FLm`)ySrY0S]M@.s0?$ GjI,5x;߱/&aAjz=G3Bu}f?R!Y{Y:ƠL^pM]gcc?/q0Ń,2gRk5r^nY=TbG.=/lIe&Ի91)юLjg am3!ʓDtnrXg׋7]{ P0#KnHN0O? w8C7[U\r(Bg)2}YHd2 y.&җͲ-Oߌ׷g> 2CBp\& V_TE=A혤F#]NOxhb7w2oDqq|[G{`xI9MnXf5冽2,6[gL{'Np6Ɏo"-3AAEKSj1.BY3Vll[;"`&@sc^OZWs e`?V-z6sM/@V3D^_t .Vfp=&\]W05T0 ^f_ w"/$n`P79;UDz):t6(sLHsZTH9u_0l{j{Dt^3125r [zfF߁IBdik&a1As s3:K3e EKῳMCе%Vpjos8=8Omwm3:\?*OմK&QDKI1#KwvN +22siwNWŦ/+Ȅ`ҠF y4r,܊E]JD-DŽXȖYmʌ+a3ezgC >mȐ{ǢɈ^E`k|-J|UzUGxȟ%nDAD\3OD j0qXg^Cɽ, !XTٍѸ^$eLaE[f@VMv ODtg,yݡ#S} JVU"8\THfleG/f2{bnvhuF=*KV 2-cqvA=j>;c^ccZޓV_#o?MzdhɊ2]7B-ɌBk՟Gj$P͓"^C/uVo( J^!XEH_\l Ʀ׹}]wQΑgiEwXr TɉSkLI:ؾDbܵmЙAٷ1l.gO,wCOs{4X$yxZt[E.)il=Y*UR}ws)XH&vZ|f$F$m.WP+~:Z(Y?}X_7oJǫ=sM&hLEeSш|εl]MI%h# F~%Ȓ{AjK 6ܛQ$Z0>}8y@T},T4H=̏FJR^|gŠkm2-CAi͗AT8.ufμ2 2e=՜L>17U0"TKe"ɓjʘ`XnB\.$ iiƔpOJjQȪrdwEZG5yq~ůq"VCWQʴDz 8-  GuU$MDWht'S|":񲜅A(@P`SU)0ix/8{å?. .~ w^D!,&<`ӝȱq]%] rp0\)A[1IWQA#cRUr0b-rYN!NXX[^:VP8x{_ O.N}|{ N)/@՝,mY}x߻{p*y%[Ib"jw1i+ ꭴRtO&VM!=4oI}dz;J`gS֪['I?EYԊ SH&ew==cb-B2u_ 6X"o@!J߲rɣ8Nk!ǟ, 'ɑ6L2Ӗ>ؗ]_YWw0UyЏ5*.13oLDBM'Ӆ!+3*0]DA;l3@!p^poKM` 3Xǫ`8Rexu[,oqS{fuIa|P?y FDDo1ll*bRԑ}CTfS c EXR;sBX,xF$W+kHpfw1&..vd%.'jG:_L*wra4DqD0 ٷO]Yw 誫awYĪO\"DP#q!aar߭ꦻ|_}S}{ι'T4bIƚ$>@JST?`c YH;BWX1t ?.)l93A_#Oa4"%8dK[NZbמdI.*%r|S~^( rGH?ВRL Q?/c#qotn&bsWo~Y6k,tZBqv>EBБc[y~H8BH~"8+Υsc SMx<|z q3X;qI=TR`4'IL;z1$l=5 D 97H/O90)K%.ReUUymQorP`7A`aٸ 'ЯnysT&K֭/ß_"^0j Ec`O`k=#.$S/';'o~&GkuKwoċ;"U2t 88QzВv+KAKgl t Nr<(d3"z`MCFA;ԲfrzX3jSF3Jyh0;SZid;ų iER_U^l>)>5㟶 Y[@f.%yT5 vM6E1YZN)^HHUOJY@bLnq$ xI#VSPvꎖ5`ǗB LwN?-m^c0Sn6mD~G1P^ڭCSN8+rQ`mbt㟉ۉCÑ,dL6diӡWč4c0|Ҙ%TU? XFYbU-a|gvΖα lI T1V E6K#-P:HDR' ~W` 0nUi|_W>l]럶eYԭ ֝5x;"]< >;`Ġn݄% Fh_8@ro^p{n~xJ7A}<]e<O_kJ\]mرZ#A%Y{l= O0U`)z7$."O!+1T%`} پuQ q\:SRd)"U#ZQ[Ӽ=lrh;ǖz7Ė(}-Аԥ0*mYFqƃhHيeDvm#޾K3RΝ(hu+SQk[ljNfJ{h1ٍaO[:6RjWԗ~eiePyA]YP+P/L[:ځ@MVȦod'<[YbmU=Uc'u:}Zt*XSVjǫ~Ė^"Oy}Ĺ -<1Iwgj$U+HvʢM"pV(uo(ڵJ7ۼW}_Ws:|>IxTνJt6? +ͨXE?|L]I PS mS8t4[9rP c P0Py}xlta|a\q\1̋~n "|j/0"ÍO`sƢrnDD Ey`ԳW4g;_[g~n}S<9/^RJ=4?}28P10hQn(3?:b9f/5{'+wX H 65#a:-I`7ZU ֋?"~`+y[ة Yory˛bU@xUp~toqRj]MOVl *,T+G)Ą}RKEXYQ!vn(НF-@#'Pbi FldK{Tt~pAڟ=QSZpT,וn=E#[]w* b9slbb`dFS6ZM,>=P ֩X\=TWEHkOC9擕{k˔@<48u=O@5G|k&0'  N>$8yݫ&{ ꠛ;PPߠpzx+1,;M$dX("w{/JL`ƧTo70#;[$8aVY[/Sl"j->[lC$uNo~OxdN.i!dKpcVhءko^6>ԷMHTe5F4%|f$Өg?pWKl#:8iܠ'i=(P3^;?zԿ^WBe'3j.U/&L59D2i@|K[fغmFuP| d25X|{ ZJFݲZGuʍzF˶4lHd8AK!A0V(O&3 EmyGbyYbCtѪZii"F*RB~m>X2n^65h7 vaҠNIN+@3g8$>R: jK8 v2%>M@~ɼ+kp0ʒ:QaWMU%Vp|"#A)d&;FYqvӡ솭6'Q;*$FB<$/gw.,WJ/U6+Ƕ2G3{Ć䕂&u}+t^%L$j8aRRV\)QS~Ӡ̃Ӡ3P*  PlZCc:7zJ;lLx<4aNp%RG6[eMи z\=n,K/w| 0C` s> co@#@S)or8o{kuVQdj-wpYqJNJ r+n䝂,#;VaK:?Hp$9d~FXhJ"x~*g6:6 yzlHcRdr`n8 ؆$D(Pb __dՉM?UޖS51t2ti/8l?S@G~=T??Tu"'4 $9.yS]XХ< ). \} Ezw<`)m8'qo?Ŕ)}шa{]yGtX= 3Z3T1KƵb@bDY[@ӠrX~$NJ2v1T`ƒTd,-'wzIMH0ϸ{`XyA#͟5j_6Eտ LG6YbKizc값BU $OI0RҢd:i[̶clT_vG %rg@x0v>L!՟YX*U.6z1UYݿX#TLy<'A:5v]!L%NY)EGlTylq%xC|׉Jb|މ[./SuSvK+EJpCiZ4"= rluE6K&s%x$fQvc !ӁOe^ (FJ ON֖]`u/4YIENDB`youker-assistant/src/res/upgrading/8.png0000664000175000017500000004400413260315532017244 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp U+D1IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rY5ldj%`9S`XD! c\l0qPPGmm5Dx6>~n)Boš4ȎdRiMr J,rRQ6_UϾ~%jf#S&PГ#؄Cfa-Ois`U|'!.6J/najJ8]$l˴Ě^"եoD 0Ci +F&p#`[ψIfVn~jVHBu uۮ3bUb$EX ΰbX|cy;d;f(ǁhޒ-8w߭ V} ֡ @Ch^|Z8+腱ƌ@ GnZnx @lrb$eG#HP ֫/PԨ0{i0K}jC$;TvP:UàF.o[" [JJYM@O\$D)@ǐb@))[(3/%'&p1e",L$;?}+ZWq:\CVFFv>sEo+#r -3v 6_cr /guxxy>}Q3a7lFYP.#s0z V7/VGcmd<ȁ_%Xq|AAZϱSb '9xCoakhl֢{@c$$Sp!z N@G'#M- 2*#%  N@mAzPORș, hJ 9mz'xG*G#0boЅ9OQIn9Y5ӢG1?n*ՇVY񃻛ۼ.ȭfcfd`Y+6GB&L042U$h eh(Z:̜حݺss{ww޻>9yθ ZKLGM_TsH"fĻɶ#T_k;+r}M4zYe7in0 =! J}Ak@?X,{1IjMt{uԹ\O431jrXu 7֖=lZ T-#.]\\p/$7V|HxPd*M&b5W-[$0X0;nת[H \㯔5&-hUb`Kxn=$揶dYP(ASVLX$$]abbͯ&ӻ:f̞ϢK C1~vyF|eAff9K^ ҠN|xp@;J7%u?NU]NSZhY#uL+'UQmaIv8XB5@9 @N;}?^Vt޵oHU\c EY\`I?_0Ix&t;y*-{)ѨJ% 2C\h_YR6M2Vh=$Pe D-F*nZ_wkpAˏEBUVP)M1ɘya#|UA\Kc75^F}% ťSr=SRk,6DJ#|R|Pcaja gU+(>4[^t5qK]b3(a.T]%BgÁ$2\.8TP g?>ύ8ib#*7 #VlY$5*=L{6xM 5iF9B?Ggu~׋X9hH{l&n #Uۼ;"sΜ"QPҝ6yLC⢎wV?Is/jMEeөkD7͞%oGb]2 QO>Rô8;Yħ]H∑hHS$>GCHS ty!`,3{dx *UUG[Y˚MƓOVTO :Zktq̌ԩ+e 8ȻîPl(o96Ͽp- ZZEw:Ĭx},q :|C_Z??FȂDz;d 2~0w"ChR T#wзKěa8VT<:]H>8,Fh3`xwrvV1P6-fJ 4 is~↗ڄ.]aDu"܀7ߓ/w[Em(PiK<+HhKP@I1i1RDbx jb$b D 0 h(m)۽;{ggInmogϜ9}gCBpcrWڥs%`8+!wr'S͉"/ێWHhݝGv?7UM\p=oCy_[:B0/XvT3,h __zP1$e˦pv>ǂ ?}cLN%DD a._p" ȯ,6@&A[CnYPꉊiolH{e- %Oǫ;22QKFM7.o쀮"՗q7ы mCT(C(!+v&X ,nj'uWd v='tU^$199`-I'+^hGJA n" 1Vk;*J͆6;,H-%0SoӇthD _H=V)m[U;菹G^2f5ۮݠ)ۻQ[(L@ wгv팥lGӶ !6NT+N s61 IЮ J$}"̍9 cf5{2WOgi.HNdjZջ5c^ /nkUQL8[X;\с+*U nƾp^BvU*.nh%#{VȞjjlPT;>س5_8 MꀘĵKj!Vi[e;Cen"}cbM(TJbE>ƒ^}`_ا ~/;$hѫ۶Xtԃ2&-_P-~E [R-[,n0E dδXG㻘Gn6 {Hmu&7j$>/3K y:q”$ƞyFP j+; PmVR_gׯ*l^7oew*@3X((;U+Fj%  Otlvb͖q|*;s:`JrPcZ@KSX.Y4+K˧/XXSuR@[gC'f';YOM8)V;5pb+᧯4w;P "zCxOSPujGKVwJXXe|*@c ^N@/Hl)lGMx^Ev!.՝3V_j\ppaI[pP⍘@eDiɘ 2y_ ؁ Xd'u]/mw5Y-@W鋎@npPpv֒ ѠNƧKɓLm4HA:AWʂ1JGDTVbEy_@ɦ$lyΊxBG טyōVqub-?ųc5{dV~fX(X_*`slzonh~vcil&#~3SLUZՎ qh *τ!"tswǹ77ܹ/[C"N0P/@U8s o+ݳ)H(XF\ QH*<:$&Vy 9- .~B+6C>/}H^zAxTalѬ L7Cw/-< `ږʧ6Y|s [C@A?KW'k?tN[:lW Yyl͈Fpϫ,y0!?)C l 4aѓOcu\ri # :PXo2nc)L|FMA~{b#Y^ewExˑ ]jDΞV*t)(Fd17kC uk؛뢡#Bf/= "!Okҫ5%A\ T|\8Pup{6m9$&{Ȧ5jXu\_9G|fѬjrwPJ4*= FFOF"@$?AZk)^&$ʾFߺ*p_|QX.n A=6n_K10 s)axgPb CpIVcr?A$x bf!<2 6S Dtv.ŤgGCP2"eD\-* nQI+ d&b|)>׆6=sPM7%ܨ3VoܗF?/+}pw es=~Mu:氁FF({YsX5e0nCT3 +thx7dFӥAxXrbw+=iĈq:Xҷt+s.[~"YDŽ"Y 2uxhyqc@Sx\tmϞ/,B^E=)q~\~>Aj#ki'=h6_Dnfva4C>:E}! ~~ͪ=Q&kMwcNٗc+'hԪXۂ㺸 Ù@Țfݞ4נ,ťӈK+jvؐβrLQ-咁]|srr.A}h!dh͋EUuO=^^ :̖ƍà)ÀvP z1 =Qڑ8C5I+8Gj60l +3&?%nOnT\zoodvzX9ijkT={%Q΂ư󾡕;l_0^7LbN\,>ŰĮ&, ,ģl+ >az b}w"QWn/ǁ-”{V% Ɲۍ@il }AE3s` |,Qwlڭ8\L~@BJ8Qo>xEtX:fA c9*oc;8"-}i4r&ZQF.}̝<.ttYt\Y[uā̈hѿy9HxMl  p9_-.zśof*D_rև0oRtlkM;|v3W0nNἶ!9ho&Y)Syq~[߭c=_B~  ORwu8i)ծ7A5j. 6ts@M'x_P9&ShG rI::.٫Jv]Ɩ8]j1Hv 5EHՏ~zB^@qME$?JzFz .??V C.lD%Fk?x۵Knnfuܘ>LH^S*ȿ۾Tډ1!Cw%t#6?~R ZcScWfMQ otK8/(EL1ȋD"i.v9G/$|Lvm3H3_ζ7.e((4m| icp60;?d2 y DESq9c AjLt %s%;8O.e7<-3^i i@͉`!fc#郟s4'%UIU92ؓX쉟|ЬRu v y@8/W_VEpսm`s[cY-. 'RBFO`ۯɣL,k[5L DxG-W>hz)>@ҝLg "* Ъz񱄖Qˢ 5듅IҍXzuaLh^,6-: .!*B0ZM5ú3VG8wu(=&63v+VI$_ם'ic*V7 X%!ik:~_H0'bYJ7zW*'Z*D Qg'Ԛ;n]a63Š>c{SʯS H+4\~OT<FV_LW^">nItL873 [ M@'}~]W3XQ -;87WV >S>mP|9z7 I_fUp5S#nx\󥧏ڠTj 1"~tbĤ6z zMPN%zzW~+|C$˄V`H#7\xo@Թ4^8}١7g 柟]zt`K݀_!W`#M&T* @;/ҵ—J5 U߽&.?2! _0CCyF6N4)DGՈW͝$D')*Exa4m/P?:7bW,蠃\<w坫fE0̇pAg0 lDjzCO@<, O8eg1WއyK "UJ$RY- 6l\R"+^NG0r ЃL-v, jΦ5GG[hON;K/m4E,xrIw@%iL^?3bMO}7t 3t1:Q#( VΛ2v<^Z@<~M5 8jlIq5?y Փ<, XS;*2Y^{a0]W֑̒Kbx \ ΎtsvTA~Q!x; Ip+'} alF@EETtAQD' <1 8 갺 .KB=dߪ۹TuWUwbKUܳ6m$+,2IuP٠8PmI@J@q8 TQ @aF/C>KXMkTG#g}d|rӍ +6/:_T|WvdӞ\ڟ1JtÀr]P~mH1gw;#5\&΢{3gEo(Ж5uJ)Z!cz` ;BP|֓A8Z l-sGV4o;f@ءdزf-: ޯpqm7B@Ą+@/iNHP΀-f6w1H6 5`{e؎[(O`@SlsU+tqLǬy?áa © {]%\eg$!p?U_|ǽ+*+- F7u..t 6XUV~XƻӓJ=l\"j eo -Ɖ c ScdM'1>횎<4ϣfTE=2E) ;V;Ez#ՠ2f^ijdml{JЀ@@h {c!ëٰɀ70dh,N-- Rᬁ"?Rbؘ$ [y1כUimfG|~PSv\ƥ !A5_Q3JiktI r+k"e_P*1U'a~0O$6ofFX{`X5mJ c.-j%{H 5J'@}oj rldocR,`qV+z76g1cf'F[tH5 #O4&̈Ջ(G' X&DY`EX |ul:;^7?1g3W1zEl12`a:C!50Wo63QQZeǽ ZU> >[@O-?}^xI*/x 8K.k΅2ނ$$Z?S`&\uKqmY9x6ZC95t-9]D u;P`&>%,uxVbM+EEF[w?LV3%=1luiWX Ûwϯ"N5egꙠ֩/(ւBW+&~pȕ"BinNu mUB]S! *A],k]Ur?lTϘv488#\M_OŚ4kFj9 nLݺb"y՗$Ӕi{BS^EHRa(Uk^ TEYd뻯hCoqogFU7J_ڧۤR=3X2Q\Mh}Dš\%ܰiB~XQb-YsjEt/~}cߌe]v`ØK#z+tk-۶U:V 䝌GsGA䊋h~>9Jn=H=_XbI25dj!WP1}=Brxyc0Po _͕ʾJȷB6zQyʢs-h1MV=}Ҏ9tMA`GI+[6JnF (jEi >GR֮dz5u cF1rvUm۹jOViKw8SʲoѵEC۷B70{YNЃ)VMZ\D*.fߢ[/TcGPX G/~3z8EͰ8<+& ff\F@#4Xj| QUr5ޛμ عygfɀt%VybbPWOw{5z{qŚ?|h>2:I\g5rz{Yf6!h9}Dd mYM6@Ld-@?h]5,=R{\Sr.?k2@Nؤsmn-Ke0Px|uʌy%4lװxc+h )q#ڮ% :@h#%ݕ-ӳ7\J]QJ>ggq]uz[#fCeh Q`^6cw O}$/x܂e G|!<~; LK/uO=rQŚMg;QA)~tZG\.5zl -LV6 ] z`bx xg-zy!zK] D-ysļMtl|Vs ӨN⑥B`GjLD[=ĎY$4< dՃWk펱9B-fM-}749(ǰ8ԹCKL.f E|Ar Oc lI4m2p_n落E([t|_om8Jmi)? X]!o[OOvUHkn6GN]X0rc.oE顙كC,ʚmt b&W& lܘ ᭼Ն [%>4v*<3 /EwԬъ̍ dm,ߏG; Ꝧ*f[meY;,fXCWtܚa~}cW4E?f]l7偲؂p/'0;l{ eə>,Mn8 zz%V-iXw7I\1 Q.}pW/e-54z6Smv[vzkvpχ;]KOo^]}WKow[8dI3:=ϝ~=l"B p&yvU?o$N` Zit}@m?). e0¡1@o[8]]siȫ N2wt5ۍɢoo4%v6QqUt1W7™D~z,aTNo5-x@q{Cu 13WԵ9Ima($ET!bw@W^3-@Sz q~  ^0^"cAM:׌ Ė#q34m^<4^mɃ;yq(&r3N`8{DM\#}+d^ |</LzoܚN%˽^in xIskkr(" crBSG3YMiשܠs@ r1ޫMWE%xKRmZ2SnG;NĉYdc#(5)1;5~v'%d3(~{4e5*S/m ӄXĜ# 5 6c]x *xϣzRdY0F=U`{EfW(%,0Q~4VW jIENDB`youker-assistant/src/res/upgrading/2.png0000664000175000017500000004063313260315532017242 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp @j=IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #s \xҬ5@%P,J: r:ˇΊ}3C-^)c8űdטɶ↔Ql=/B$o_TN$^)@G`@>PqΕ3bsP^Nyl gn~~8QM\!q'<߼uBd )A])4 "(oCb(VU>z5/ !KN<  ˸!`s4rȂ`|h+0l+ 6#wޯb6b<, s .#6 r0Q71Dh'lC lmrPy@/N3H/:8~c@n @D(Aq`*'xGY51u~ f>бHQ@ *B nm!QDaxlۤӶ(Ɋ|(PQOEPVC">t  PAE>T%EY/by-7:993;v`v|_?q@tjExy}ĕ-ZO1ݗ Krha9HZ%o6hoB?l;#1NhۇBgsdG?Xl{2QaU;X;D * zʭu3WG6ZV|VoZCWBobUV4@q6|Юy7)Eɵ1=[,}غ%%7I|2=ӣ85ےe/Y;D8d+R3A3mf/ óC>5K ɺUx)ܧ64y,\U飠̧Cje)Iޢ}3m0]HavQ,Bi{~`_/ad và膩 Yw\H +bH9 7H;*8x/)IlmVJ3C95[np Afd Zv( VsᚥUmf^뢮:e3a㕸,;EKӌ6ͥ&QN*EQYOv+wU* ڪx´,GCp4-0: ߌ2qpN^-{g?'%\ֳ}M.;:YR,mVy}xע빼_Jv.QY,4oE?1A1u#l-j˖0$6!-9 g-wڻ] tD_aΏޫK|D3lwJ6FZQ=A0##:'wUmhɆB[@AԠ $j" *(FBF?Ѩ<A<D "Bv Knfۻw3,d{g{̙39+qsFnSm<.})`8ՑUN !zk 0 U%\&s&2!b,IQ@~zi9Go7\gjRzxQW~+* =?@7fl=8uޝ#4h?Lr,v?p*J'%lijd!>Ql 2H-E LA:[NvD䁊)J^Jx:^iNVߥ Kq=}I*l2Za 12Ȣ뒠 Fs)S"B#LWuPX$vZ➀ m _cELD _?"l0Apz,0R'>1dJl[yjd@ 'Fm4˩3E0m)dVl5XN ِ(Q hyq=sBY<X ;ŁFD{AP(E& i/KP"ѫr^=(l z 3zUm)ŶcsCdM%"d:7elzp}+:n!/hMhCi褠MhڨSIgȦI:v;d1 lho#KZ6]:h:[ C!5-Ida`qYPBcۋhuɠbvk5Y`?FUrv-o-] u 4<ίƁRdG~4AkA'nRV1Zf v5NFbDx!v#L_l~AT'N^3i=W_|DxgN 69Uxї!Rf017(РN& Kn\MڍB ޞZ6=Kt\=-ڦv߽.Hv%6Kg %!n$TT,Ef̍}ZEOqV|جFUˆXqzĴ;sKZ[qr- fRvXgڬkz;+OFe%ü\MUSvn̻s_W08}JsVÜ&;dd/}a|>Haj{' &%kvg/U NZQx٣*88e6K,`-dP^ւIiPgz8΅s:AU矢Dp8X͢Z< %6z"y_J-l[(Ӭb1oi.0-q^qb ڎ>ޣ܂r> }Q΁?yDartd-+*wc32@5A1R],`셲}M#ĺI[$n[;cc y}lյʙ+T#p*(@4{%P6YXߙ>5;Y*h{̵(*el2б؝dm myGCW 飙KvlucUUDo<[ʬ=Ty胝݉P3(}ʣhLd~y:"Ә څȾ4.-l?M߾grbE1.*ݗV!\Wdx#Х('O m6:.F56z) \_m ;,Х}:Š?W/AO $|oEkV缲]8с-!)?sq[~f#|zusd[EZ5s'Jz7mACzٷJ*3!py x>0)9o}F7 *kW9KzCL>e-o_$֞ &Lte.60b0A>w,0yZu8iesƲ@~ l  `ƦF"`&չAt(S\00>ZMSy2N-_OPЋ-䉖Qcz7d]ąOW`S12MrRD$|4 B:Pnle|7[NTw=yֱl WV-k, ;(n'{4Fw#+FK?">v$!<pЈ!4m͆/'bṳhv:?%D&Ó /[?;9\Aa}5{*ч  MiC8ZlƓORXt_~;~vv=l4̡L74/q{RKGɪ7H3ByeceHV t ^[r২83E@ *9_P̯jWHI2!;j<6H PG?3%6T"b"c^/UR_9xDuGYC6``SY2wIAmXkb"h홊u tMZ}q*Jz`fTd<}qh.ho|p%QN٥Rl_z3׻r[Юz=vt;sسҢeU@hv'sOn/AZ!E]LɎEI{=)iiv5urvvڍHߺM=u OMEG(SoGӓI,<.D٫Q l;0Ɣ8Vjѹ.O 5EH=6SM#\3m>-xd#g]Ov֙.Sdk]`Fn+8b%Ô_htYzeCOlNXa;^l䉨j]s$AU;'~=jy|՛Ҿ#qF aZk6~cM)lN`LK[Ў|6-`X%vAY'EDN'lqZ5 Gx^/`q2lm'L"DqN'U:Ǧں?ogiJ+,BYbkerAjBpHt>GE5ՠ2U[\Yn_y/-Y:X< I2sԝ{4H$QYp~N_uVZ+.)HrXH"K˵VP~k ח??}gJEZκj@bsKiUjdflKސ/< mW-lC;ɼDUem O* <] 6Ȓ62|b̽2X A! gN ~X$i[=:vDb`c_PhI%i`%UfyQe0 0!6\?Up"dSe/ɭDmDXIoB0B '6v3^0mc^OOH++QV*VEb'Fh}UM"-K=}wBlKAy,ʛI 栔uMH 4p^d}YEQDR|鍖mkJt: NM p+X՚~bTEh2FO>^KgX8'wqS8 p"0\OM5CEi.:хCf 0 -PNTdn~cjIUC\zXrAi;oJʠQ @d-{k OtBڇʕ_Tܛ4F^YXK$V7 hS D#dKohuh LW$V7^"]O[K i/oY>xi"ՉW'5VM:bo8~8 ruW)H`n&_?77пa$PBIp3xihEE l!ɸ!qeQg&Q'_-GQ>DDhQ@@TVe_Yl޷su^W?^w}|}_ݪ=ԩSxZ>ބ?d >oP@ɂ; c[Iϔ($sH_Lt =&M'A]X#N!׭e~ moM)6NTļ/2-lsI%VZ%f@:sȨņŷv@t,!&Nq:W^[[J{ۏɺߎ.Vbh!2/zXQG!ѱ`ߑ;>@tAnş`;ѯ`w$0wn=6vPGntD&Kl`G;gt\;c &ٔk "a^ 7RkƯj#.^!fѴ4 bAM&a"eХWtVЬI S#QL:YԴtuF$gw /cl9z%v^bU:{.QS8.""@v4weCvGAL:Ҷ|RY$sMBR=5鱑Yi쟗neO90PT wʵ=+M.hj`rH7U #w&*YQ J9Ͷu 6;dVmQ̪ xׅ*<:=aD!^'vLX)؃=`k"Z>y̼H=zdA@{'/ tl%p_68 Aw8+rszIbtR4; a?ٷȞ*83aIa3}I#vD:a0!3ς]Ju!MlHpUe;y D)4Ip j5$&~Ef:ؐf22Je~~\ lgǪlVE}<~ knt&y Bv#~EM 0"h @ۢFWt{}@PtJc\G 2s-goXct8fpSU74igYemsD ^(~-%X*{pM~.dԉ,[= XU`GVC w.HK0ek-ǑOhv%s2V5ѹvVpukMm*3 7X&v339C`뿣_2T~w? ջ6O[^Ç4`/FrTmWÕ<Uyq~XZ=n2kD;%~Ø|Sr8"K]P"Ŝw%swknεhQK X^SY_8K1xa,`&HϣV~E?JscLMLu rYXDءEݼ0.NEyD%cf; dd̬V_krƗyݒ:]ƴ|p{7cRk7ֆ`Kwfv !|4QYLq,ט@Kf ڍsƸ`|0NFB KٚKTD8Bbz4vfm2۴im'p`;+;ڏt5dl%d[ؐhw'[Jhnl0zqV*k;]8 lpnyK0>A{De)Mrl;dӷgimMfXfv jx*.eG#yMm즈#껫?k'C>JLo*Cij{k:83'RBX̲3RK6_&F u2RC`O-0#.T?.^ȫۛT@uunNP'GX'A{.b\n٤2Օ0!Iuc/nsuҘNXUfؽWCvPlrCA?{cڇv6%2Z!. m';A,jl|fZ'eMHKOg96RVjJ;.xn*9wc[]hv[0C|HL-5,SOy!; T;vE}wb(Dn o v n58~@{ЮBl1ӛ0TvTzr̞y'- ڵ^Cii,wyGzkF8(").u;r:~*q0̤td*Or6JCo9iB7GJ 59"L v L7S/w++3Xj_p^_zz8"!K:3lUW"@$Y7n9 {lY?GSyi Ϟ )8g4ZpA:crl 0CM-VHPW].7GWV:q{zy1QD,Ƙȳ@AjXQ= Og|)A=$;^=bSӨ԰F בF'㱌'7]_ѿg'j0 5ȥ9F7Kn@{ёYs{~/WXH8^yiw'`~E:765؀0eDD]GJ_ƽd~vD,%{w&+zqd`£6 7s TjW'619Ylil Fn!3>q:;!bHn3qx.-?kV4D|25LBjs d~q,M]чzG @tzMX9GǑvpyc ^ _h6y}G(F_ESj|cU ԗt9G9;{Ē|ڱu&[)pyZj{f$M&Pr<q u[^n{,#bt* f|ؖN >2bsm226~H(Ab>ߴSK]%xcS+ )ڭKn#$"fӃ %.OnWtZq#X+~͎ q]ȧ\̲X}m$%f'яן:|rۿ V ln z^cENjNtN-BS6sɦΕ%f?ġGbi&S,w;=sHu·[Lnƨ|t,Q/xLt26/k`?۪@@t KRp2Zb{2;:')~ ㅕ;{ugK^ 3٣?.\D' vOf"6\^#[5*N YYo=fgaAV}BMBElDa֝J" F*fmL'#;it\.GPۥ`>^}[Aܻ.%n93 .mb{%t,4ٯq vkkbwAF w"҄$Z2,\k]/ٝIENDB`youker-assistant/src/res/upgrading/16.png0000664000175000017500000004422013260315532017323 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp +DIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"` ( _JU8rZ850ɱfG0`eB#bQvNp Ǒ`TPƠdٝ5ZOӮS"œ#A]7,`gAw20_+2Un0 Xf"#˅1.O9JPp [JAbp6R^I)#"ψ 0ÃLJ!\s1ris0H.yЦWXMt ʭ0bP.9@Wc,@2Ar1L[E9qVa$%ae:c5f1(AՆ:lnR-{kb(vRaf 2y$Q8s QA?ci53&'ؙhbΊJ% A>4.r1-Sٙy҂:iS,^IeBUҜoMl 3 6-p"E}o*UʶӪ4wX0p쏇̊bѹ'il4T,ftdČ/uj 90k.U1wRRulPQeuDQl{CX.c|6PY$ vĀO-$25 teAiZZ%/틇ʦJ ':#cMV[*:x| њi{/]ˆK.Kz#L.8xΦDB^ToDxsuCUz~M_]Kz񨎴 ?Jy . FRF-pXV}c(Zwaz/ })Ql(dB{m-@] EGAF7@O\$ *{g:@ǐb@))[(eT藒r?FS#9d!q CUgyߦZ%QKPR0{meBn=v].+bLBNX /5Xd9=VdEpz Z h%tx/=M6"5. F VP, lP &WŤe^=}3_sJ۰"R}! j Ԁb  i^>z`h3hP#zذX=jr!8!-}d qCRK\;ee"}͂> |EUĦq;.5p6kkS\gjV=tk'/D/oUdwO3H/:8ƠѲkOR'HДUdO=SY51IaOQ:v108 AAp-QE٤f-mMֈ+JM,?LU0DԺSԂT(E(>Ckȃ&"bmj$$Ucb<&n;;sf aI3;.[ vY[4Է:@V!avWOeߝ 9Ah.}@ KZ6D4@m/|a)Mj,DG*;f3|DzAsN/VmMow ٷݵ)?|YT^#^R8-T8*ֲRC&h~A*r$X^a-}uUi*ElaXSJWY Gf5uS>NяLv5$*!? OJ ?Kw^_MqbC0g).lssh/U6,zevl*TMIPtu5(}TXG:=_-E7 $wDNÎMFdqGJjDINOi2zqKԡWP$w͉U^ O||q'?* h7;vNY<vkMoascA̲?qtpů-횊(@Nv5O3-Q-Ua^aL=`nIxTo/\®3bY,r~Ȯ@42p(xl&$W˥@ Yf-)>kwZýXA\Y-QˮNvK.@/uM^3cBXUʼ9%5nzPz9utzi3dĂE z~o"dёf"ajlALMh73it}բF,!RW%ʇz_~zzP(SDHqn M# 8P(~t8ܬ򆓳b't~tð~6az:drctD0C*))a#NS(!$7q>GTL|]*7ֱŔ0CRqM,X-Ьe񔯏 9u=q%аv۽u0,)7DCI|eTb2틥ph'D/O!xxw)L{=%pz'-gm0f v~0/rnfsa,$h8Œx9[T~ڛ$~!4ܹLjQ"PHD P%lJ`/{ ْؒÜ Ғs;>~8Wrn`ǐ.;qޢnan |P0##ϧa_(0>hhyhK) B!MDH$&JD cEJ1!CH"-%#-^_G[evwnf=]vvg~3ޘD!D8r5Sݔo[^u Z= b{iՈ@f aPC:H) EjIKd0(b^8Y@\1UJlVhؙQ9O9BV+WC(^?i{))q 6G1AZKv" עTRŽ, rS`SԒ 2 k1d;PF3Ţ`8 ]!!Vq:њI ΰ |tsq}y I(Zq hr$h{f/o:c-%lגr ӓ@P nK6f3Ռ\d X+DK)0ՀU"JO: 2 (`S+C_ htAXV&|rȊFCK Y,Vd0e MyI`Yv(;j-U]mیf[:-|` H9+uv*pbL3f`Ħ-P d|R! جT!~V6'n%wn+5.,g;l(k'"ٱ Z8 NE4R#I"-B׆[_4&f: ^,ρ)nmvZ4*$vH$h PA5B4/2'j&bbIpÿjnKw-(Ӻ4益j~Ve)YYlLfא_Wn_KZ&ۃ|fuȏ9GY- JA@XԁL 2e]'>9WiNycÌJnc"$VR :.C -iQrMs@ sL屬m@>{^kl lM_D<\ɲ?ɉ gqKE h_<…ߊ(W$Yhu Q6۴O2E{Y{w4$;a ܚaFT } ɶY-;@}&YY# gnɳ-oT 71lϰ3}JmDDM:KETOيиwx>Dr*Y48yMYR|l'>l|i{|^UHVmYαJjm#U^p ; pO;$_vNm7\+Zꏢ&OCaɱ7,Z2ĺeeEòQE7(#|5To࿸Gc;%45"Ҭ C9'J5ZVIr7ᰕ0[(0B_SΎv5ZaTQ3ҷ Lk]u%alE0fFV_7&5.Qe[ZR6[6Q[Nsk}97C 8ԘRMYC@0 sCTS6V0zbn*9R}b)[.΢F+ v; ؅[0 ++N^4 jz4n#0y!ϹXN͞T!D{$7u8ۍܓ+aEK*SځMA^O|"%s_N^Tkd$ CY ?*~ ,1 `nagX-WǪsM2`;\ ?zCi S's}l (n~@o B~-qdq)gP`Sҏ!ɧܽF+N"Q. W<F Jqe=cenzp=y83=CMAX_frkXew "]Sl< SwI H5"zт݂_(@#yũzVܦ\cFD][P||wQ8Z@C5\WuÞ6X uvװ TmߑM/b =d5šV ֩[}b!w_J4R0 ܀G]btm\Igя3`jmeEbư\疌GMO6~,c #ќy:23]a٠ C"衺0vЇ0N B.\C5 %<`4b+vUIֻ D T2u 0 r2n]5m- f}"$X,x9S`֘tϯ|)g?'h86P-jd;~v~~CGCF -Rw4( Ne@#o#[*jZرX=U%* ?e͙!h edoMHCw5=ň=xm*ŭ7wbp.[~ YǔWO 2UxhD԰cD/22 y[ҹ#{P:$6Kӂ@VKPƵt5ѷM'w]YGZ/w |4wq]8=j^<'7KrV- rF6SE(V;'XP6|UJ}_ 66=Y1Ӥ9xe:$^<1I%ւ :q`sN~n̜\^I;ZV}1lż>o9Wzo^aaJa縴W@EүF>{y@ᖃ|F&embe)l;!x#+u>6ZR˫` 3eXw[eEr,MsJ,#H;߱l+7$1hZ@?.TD*˦n{ E|;Jqc?<@~^FthAgKK*:f0R!,EPXk0:_nrvxsDz8~܈ 6}j0ۍۮMӡQ]]Yq_T:_<8^THqP-F2~ӓFkd3]mZr H%M-ݬ4w}rUcknf&0ˎsQG+ЅF&: XV61:E_k$mmuE!aӑzٖz٤Cv?l[r*9nK`kdjDG3¦SFTALH4{Hq0h`H礫ufʂ-[b{jkq8ίs4틲m.@ۙynEn +]3_TԮҪ+bqccx?sfm(l07#`~kb=aiC.[_S F,;j Un׻L~AD\|j߈@JaDKK4K&Ֆ)$ht㸶I=[vƂjlx"';r ڍ+8gc>$Ga񔌵bd33@i7fryijKUdZƂxbzG]rD:l+غi>)E!ʑu>YD'P)K8H":񲜅QH x!|IUd}anMu},x]rGޥz\aO.Ë>dҐl3-6@lusWД^eim .^E 7U\KNTma%?I[$#rJ4!I[䇸q`!+ޯךu6Oa9c - 9Q8HE;k,8=g7,&jyμ=$#Z5[aKy`4{y֫ ͳF魴RZtHfa/SbUF6;Fz&em 6?l񧟞sv8,%$Bm`1B VHГB?"P~N#Mmހ#*prLJ!y"ڤ}Ck#.sK!ku5u/|pdՍLUѳ>5E֊ej*~xPx:+ DŽ~zߦNڛ<MA0) AQT|rϛp}ay1RPGP%dv:~<'?e?(`#' p1:QA{RБ 1D/\+DlƐ0gF ]ڹ; >y黟OV)V`lhFlWooDv W6mvZ`f*XY)|DERLYU9iO4viL^8rv[1)weeWE-꧉'vTG\ jmi|o,*R 遐p1%&+h~'ʎ;8Nm|dJllg q0>v~y3YZ`W#[sm9ŷHd%>tZƓʣlƎ^>.3{Z)vd`q$8rı"c`O`E%n$Ӯ&7j E'$%QiݜOm*) mȚ<&jSr{Ļ7cL) l ;4JrWbDf@2/$b*Ggˊ)2CXT(g,5)O馗hy{VO)}xGzhe88Ng "ɯuga|_Y#-}We5_.l ow]0RU]!NF,q*8קn;$4,'"=pHe8$Nևp+ʹ+p%ߩT>Z:LR]0yae*Utu5j*<]_mL -W"x[zdݞoz'''&OU&/оVIi­b')2S.'M]HDe ֖H|uR E^V̜9[6"!|?G\ѹv^$"`KP,oo#IoAuF-[l" 9/c6HKVj!).r]=*fF-e=RIp Ԙ|tK3~ ؏~Vt[c~|F%zcﴖhR\vOƕ J `C'0lTCĭ~oh)QDfvMmжqǬp+6HҨT~V1@Gw jMEJg)խ'[^"vn *G3n=D|I^ q &/R&_60ט~#M:.TG] ι=1gxu5vzRek>&+,7'{C~N<~!rK-Kؾ1:aXdd5R %#̑ Ij&'NT.1 j, : 5 ?NpFg )7j 0b ŵ$ւROO_O|._]v "&hfB̅NNY6RRґ+%CytH#,$ػ73h藦5Oqӵ[6B5y&Ss;{s[5VTYόӪ(RAoI-x9-ŃۇT0 L,vȱQ[ǎJFJJIZ{}by^XSfaxv}0/O 6\1q"A߶b7jNN(/;{B0k1q[+*p-OAdD 3oUYiiٶy`>RmL_ZŨo> [dwZj۫w3g6lk@2=EeNb>;` lEf^aO?X<(Wssm@ȳ3*Г=W*m]'I,(t]AD EL@lb^[ECAU{?^k?9"SR}xTdHr9̎I2zEX!Fg2ym!y<6J1*-j@9XP&Rۭ]~9 K-0VTT ~ DTj.>!ȓfV"剃{v:YȊ䁎)g?{r,x@EԳaw}H"VQY pP\xLjکg5;Ir}{EI觜4(;ڰ? 7yyIMW3\@puqC܁&.~i2V~dȖ3eQP.ڰ3)a< X2b*u)x kh8/)қ ><MɃ~/q!lGscvm =jL'yQ4b)Ѥ)>)1[J|bytHIV KOW~@h 8J(/7C$oޙA}WvRcHIkA1V8hv_ $I+Q8 =b2eҷQj섐@+$]¡PU<) H2OPUE~= B5f`3NV9ӿ8* BD' .yn~9{7;_vI1fyĊܘ>\xٙAc &)(2X(n\5N(ox+Jr`i-5H++(ukUey\2bɈ(`uhR< cV**)!i5k>EOn7q}6bԂQ]_zгGP/T[S-YwK9KqNɩ F,[/n/Pz1|r<ܐ^A#Q(X䶍V}R nO?dd~hĒcQc)thvZ%3gJ=ziHt0z*Bn@ C`I)[` o9O=K{o*#Mu,xc5sLur6T+P^ڽStv!F U]ݭ|0UT9H䕻khARsquuia3DhfHOmiCFlUF/V?,<ȱ!_Q}ۘzQ|%DzF\̠e'W&زsEhi4r` )Qb lQ-S|O%V>->/ÍگDjE{쎳3k-!GӌTuGЮQgScTU;~~~5z\MWɵ qMA<3qvxՍwP"%Xȴ."~iGkS0̀%0e2`YɜՒkzIےHrDM8," "bUt:"6<|~w Ƹ3^H1C0bCeg|4g/]w*#C{vͽ-[]̧2K$kCx})~/81TetFvJ3LPv'a66OC'o]hTC2e/,fIWt2C9?t'd‘AƧ1JSc AuϹvU~=Apƙv"Ec6WMl,k`(xm}OC: ?#V5hԑ&Pm'7M'1/D2x3` li gt_~_Qew6QRШנn#  B>h5WƷЁ*`+`Ɣ<.s4dŖ- %ZH9pŸJ1e&۲I{̬F~vG&mkFɸ:Q,biQŠY$ԈKB8=H#>$}7vm(WΚ%؄`S%?Ǽ^u85nTR+/>.vm6jRItkY_;!0v>,vpKG2IѪtѹW$rjN֣Smuk|I(UaWV<%9֊=kE"0NnUY)6 rd/#n3iv 9n'AީccuSL6LtzHmJ&gōPbdU}ܨkڪc3mSŶ TZ3肝UqQN%!BAu=~_Mss͜3fW|a`mý؛dw-Ϯ+R}*-HE4ᶒ+Pr&ANwl~_A;2m6[dtz1TkoFyDć^ڑ+.R`'r70O+nʣJ+9"i=Zh'coշ?u7f%FuXG[Byed*behNM*N|8hWAh`5bN`3ViI*KM'Vƍ1m8q|FO'%hG l ]mp1XJpm1E+'$R{d7gJv$Z8(^840'o`~,'OҀ73XSI QK>WЅZ0Wz S$G6;;*5V Zɻ8ݱiu޼(eU{ ĜxGPQ g.n'm*yi6}p\Y#Jf$ԪAVp(+.,]?(4Fz#bS6y{Lƒ?TM[)K}{SWu1~4SJG!m8{*=a|[/q&\-ŅD9SЋ$m8>S$[lHpp89C$YxDD;"1n*fMu`~mT8ؽ>9 n8lEH-: Fe׉ H>WV2T(:)7탌hІL  ?H@Uq*_X*a'Ĕo*.u&]vSRLwف5Z:7S6 61uV[Ks{Ce' 8ڿ; =gIQsbNE`UW?)O,p&R픐*;.N?ŌS)i 9U[%i\B +s VLcu£,"_wn*w`P{7#`>^Q8"NI3_hS'.(z/Bw<`{ RHIY[;NBӺ2糙zSxVM `oh}rک'6 ##6r|fZ|F)0 ^\?_E.ƷqvvzҀZ||i{t T-SQfZHIL'7Lmꄛ؞-fޅSkgQvYYY(XnɌV^8EވrW$\bim%Co|qIENDB`youker-assistant/src/res/upgrading/28.png0000664000175000017500000004127413260315532017334 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ,*>IDATxbTqXp+]H=Vy1Yp 2y)C в30s1331A?QC]+,_5!aga8~1@U8 ##8hPdG%.d!6f&_PNCE7Ѕ s(ph#5̡L`ǁ="Ǒ`TPD cd + ?p|zvr85U rp`DgikQ  ATO9JĀ~ֻRd/;r1T !䲂^4 `9S`lbdA%"h+)nt Jn `O\ r(Dȅf?}5U\ ʥ qV,ް2⭯9 Vs @ Px, Ev1FelnR-{kb(vRaf 2 Fb@KD  @)?wfhp 9t@ 7P J{XF*` ?41lZrB.NVD[7ZY@ p0.&POTK07J+Ɋ"hG; EߐC*w`AW(?r!*+ޡXa8jEo\q$Æ9KvKzM#Tw\&r=T~h=M/pճ<_*p5Y)Il!qyx اU9*L7eM PTzP 3K񭛨af(|b%9`ψI&pX4B ErvFWPEG44\ ؚlB d_(e upt#gh`Y} ̹SM!3 Ձw U"VI0hc q}wpGը =W2r  }-3v 6_yfK3|?*X;J(~ `w頍HlM z,b7>s \xҬ5@%P,J: r:ˇΊ}3C-^)c8呛>Fm!%i[ϋxIW9v8WG Б#F)%W@\0Z,Lčʕpck8sَj"(,wsX'@aIlPwW ) źH%ۯŐJ'j{j͉>7& Ԕ &ff^^O>`41@0!ˍ6?Gq°Hs4\r0z[7 )@9WWV|^i\ k\M 9ډ!gyaHy@/N3H/:8ƀܦA BP 6Ȟ4{<Ăv?mBGe3I$ti@y j[w *]t~0Ͳ?臊 "# z^ * J"* 5*^MԴ6;swڅ\ݹ=s}L`kvYb,mUm[w""MxB=ebF;[7J(BY "[45kc= %[#rxUNf/!?QC۞f򞾨@6'nRÒdD֣O;91u _^VuI[ :W@CԢkoDuTiT]mKsU>37pAY03gK剠::D Q}]E"z u^'N>2*9!wX Y#MKڬwyf$Wp$]9+QDu~o_ i}5 tL]sy49qN9 ';1Pjr\7C9zAʝ\`A=CQZLx77uSNk޻@`TpRw3P &NM|ʢA7Eud0 ު[8xNaxr,_!|4+oqN^[tiPF9(S\pG~w079U%"ܩ5D `/_`4hѣGຐh+}ZvEpd2|. K&Q FhًchE%'yiS7hUTY/wJ.3Cvu 7 GYOv/Zd}$̈F+uUmhIã- XyhkPHH A? !JA (!'i<<"JBv7{;3dswg{̙397.,0SVnǟL_1/&klb*z^"N˜=# Ț㜁#UN' l&M:2a(lz=74'\ g*Rje*AD+*ozБ_%Y*N75o&/DIN҂ ?=0z䗳M˱t|au#%`o, $ReWmĒ}KDʆ}3>+) Ԓd:nsv@ƈhWpZҿ|V T̡oK8؜'PJ} $p l_T#ڟza@A_w9ra Fa' *@C9 h3Sӷ(I{5!!^bP8A*a{ifT#`so<@ }&bTIZ+^HuA 'FmM+1*`"}ʆu[ 7ܕN ِhww:P@I^dWg:(΁FDAs l޿4b8W釠y*[ILe1fpNAɤHNgGێ/ C|"S× S,ӥ`ӓ+NСE# -vhwmBFݬLONs`UY흷4{5 @4Pe#.4YGV-(}H1IYH?1Ya8xhvTe"OH ʀ#pc{m6 闛O~c;lpvJF߾Ԯzk8|@M3|nD8ຼt$E%wT2KݮU2`p6)L\ `71LNwq gAw5NA#u-G;wV7IsAN?2X܂|$ώcnQAWLWRA *4uR$6P ͞!@zKYEVIe]Kܽ].LvF6 D1?בiJO#}d>n"Y=9 45 wJ[vztoP0J ڊէ.Y͆wZМ6ΫJ% 77UO陙sD>f[ranK[ڕdd?}.ttZ22e6F,Q[?PC Jk:b%\1Y,`d7G wPݼn&vw-ye SPSM +TV#p+(@%P6UX >՜'U*h=hzK+*E%d`bñ;HU6:% N-yy$ >Hccl*=Ht%zݸ2zC\)wSv Z1dO1Y4&xy&"՚ څhd_Z@8jM',Q| Gz`cWpUن+ވt%#͓TC檙Nl^ 6C*W 0."]7.,YK z2H"h-\и/nNt`Kuk.ntl%o@?=jV wYj]>1jZ;gY:P26>$A2}wlاޫh <(p2\')ȟʃϣm"ov1&3 t_=SFfeS/Yj0Zg3h -{ Basw孙1V_Q<`qiߧ%jrnG[Tu XN-ˉI&%[͇Z=RA>y^<Ohx |ԆFnұZ*qIB @4 $XPhPBA(ΠѩZj-i;)b2>(v`ʴVv*Ԁ@@UW@!onrr{}?ss~\4I!E=b6b-!.1dw !P8xn1]õ\K#yyaPkSgP1:#"0iAdzq.%j=ylǧW? j 1rdco0f~y4 SO\!wÖI `4泻=ѮFLrDŽBfI7ػgv &7A<='?%91Z`'G h2GIrn4i%աz$!*b,6n_u-k3'5vk3UFc|ߝt١ uql7O/%#iӈʞf1=ۯ6 (g1A3RkG4e|p1wNh_+Q';a6V~׋-WƌN|ϻ#/rI^ {;@t쩁IWwi'[l ũbMJ ~[zk-u/亯6Q&͛fűZB'OVb` #7my|]3 q{<;j:M]]/"xNɠn7D6'‹HCl"x,nYY Lf@G."mv3I#YW?\RςCLeQ|~ ش!fQ-6@IFȧC)Еhc;;6P/(q{ǥt~SvF;Y|dY`g^Ntgv Bx "mI^4{;.z F\_@#93+HZ]S8ўI0)n+}.s|B̍Udj p0{AChp7qTn!n0/KVK׼r@DpR!?|AN%0Ct4D 4rǪ#`ӻxў!OfCaQ`@ Ar P z‘r;%U&&ih}Y#F3A m88iSɏٰJ(Ri{.VI rjFGs(1o9Qw~gks،yl2^7kw %"; ŰĮ5r/gJBŷu4*j:q< (rl<)\4a$ ΁^hۇĠ~kDn .̫PM *:ˡbcNAGq8/~0iA7gȜ:yF&SsL)J#zL`SgF0Xº54JW=u%P[d\˳45i0>Nqb~5T2ع6[žBUQ~[X]8U I,b[3b{n2$GW,͔[F3`sZ4D> $;i\@I:3g~Nщ_< )ڿe`ߪ2%|讟K4./T.bh*<@ZI^_κn`bKhujdF1l.ˮ.\_}Ͷrc8<^~2|T6Ks& nd?zeX )Q%F{e$idRwt_^B%aOdߪ>^ȉC/6 h e uTFIZ r6 ( )Gl4USe-!DuDyB\2B  6\v@4mDWUʑUYbOUm"ƭJX}]C; 6yyx 8! k5H qE-Phz)>LiNLg A//( S>vXF, xaO.Ë:dҐ㳅>f 6= gKpqS|(J/]0d#L "%.^EsїVAœ42w0cOK/m vPB.qViߣ N/E/ D3.}WߝT!TyTFQ,YXK$V74l׏՝QOtEbuLiԐ6FzgॉlV/~xNj&em 6?LB~8<Ŭ1UD2h+_ @K : N v3,|7'm8˙a҃uD_BMO>YhO`#umen)d]:=^.ίSadýTfթ &okE߄f5qca pu;7&os?Wʹ- Nuk}_fBÂ@uiN-r`悥$1Whc[QN9ZB2xJ?[)R*Mn?'" }(VC0exA ߆~ׯ- UQ0Š:(WG-BNԷ'n #u :*cVRϋ}ܻ}:`#'p1:S;bAKSБ q z?9+؈#a{>WcwguNqmdihx XR`f1'=x~\\Ս$8pO l7Af3@(ip1\hL<~󲇄B""č׶*:=:(36ʨgiqFGm9ڣLst\P@\T@hEYfLBe{_*GR^Uz!9uޒ[w)#FR1G AjI^JS|>yb#`KuczFɏB՟2v j5~kZCZ޵eA>Hia&kOQ-VW֊T?ѥR J- '$xuD~یp1ee@u JԷ6Ac:F=qD8o9PqTʑ槮>6U8>N) 9ugP:$6ʦOP}[YmIpJ% QS%xl#ɣIf aE1YYNXS[8)ɚlOQ<9&ĘX$ xr6&|cTyUMxꎖ ZX)"i~!~ws D:{e*ҭ ݓp(R*`E 0p zg2=<Ճfkq$uV;LUm 74^/~A譢ʨ&PH*{&gO6d!Ϭ"Ɛ5G#P#ͮ:fҋUHnG:;4ޫv#^Wf'~o+T2nj9wҽ,QwamIݞ[W*E&.\%,7z~ R1in?L. rTojPLE*Z]m"7Hn*H6A^ЮC>DCջv:Ik"`-~d"`ڒL]*;Q{' g=p`N[ik[cLL@.,x_M01)1qOA/S1zQekPYX)R_'vnbwb۽g[CgYgŀ<vAĀ3Pj%'^a7FT"{ҋ[/QZԦ<-)v& Tcr`%_b';7Wa,;ɛ_s3_QD~mnhW]mۼrTjTٯPm[U8/Gz\ 2t;Kk]嶸Xx+kUR0l%]ؕ9[fhyEP[#Z[]qvSL/Luvkwԩ:~Equ8O$7&1S_NK`?v Ɠ:yb(()My:o,J '%\q0&p]kʰ͒Vl'(l^]b{ŃGаu'Ɠ:`+TY248a\q~i;`LewXH{ŕu䂁]:XM $^O`M!剃'e~>XKQ*I}Mu\lF >Kn];{V\}ښ2Cr/:$_]7Ƚhe܌7}[ nil`ˮfnDTC|9E)rlcmnpd4WGvf}һyru`)ߦHE©5ILCbWon .පVr\A8 ?͛.1~0ןB*-Xb7ZlFuD]ʲ,-\Aȷu [F'1/k <\GXʲDrj;iφbwܵZf Ԫ<NsOM`ŘuBe})7w]7c"~7lAkc:9L5X77V,9%B_*y*`<^CW0uQwmvթ u?0OnKv=d64 H||;!NP_4-(LwA.s2}7K=AdZ %qcvhe֏oozlY]t,;Zt"˸7=e^(bŐ[O'~CRt"4[' 3,\:(K:T2s5b/r|ӌ/2Z1dVOGDH,j\f1N(ښ#R"+;[8(YeWjJ1rʈ'S/g]b<1N+2̋aԦQb l١S~|(7jd~ѱQ65vvp0יجxQŽLuZs}xWe Bl$ +vmuj7` ؚ~i8{RQ4k}(3+K)s_%inWQd)5JXdHJJW1Y\q*3n矂LK`>Šp lz}r)cQ)ptԈpA),AoQG.P8Gw4r~uSXzM+F!dPfUax"9KxNJqEri^gBFnP"+Aݏoc$-:"-&KhvfjuE(TrX*7# >sQ)0nGkr n[*r Mujteדt4pQ$R5*9JUDN{'(# ҿPMeov8爡$XNa%Cyl̲)ѷ"Bg/@ 6 ]PߠN;1YpӍvlVD{JrO*EՓK|^ DX3q~~hFOBR\~4ۅY*7nm}tT6ԓ @M"]foN7RjՋ$&`6- +v PS[t"CbH.U|W:vƶ _˧1bgXZ*JGلoy#~:)?/[?@a!"Ŷo샚nFEz#f;< k?{z<wl'z8I*QͰՏ&hG+J`^%j|'KP=xO,_8vtIW \(15!9*Jumo?@Sm@םl65/w;-ND6{jaDbC7?|ů y٧)caԷK lvTt&Q1,E NӤX'q囘9W6ʗjTaL'(|g19ďojԻOd}ֻu߉I;7(S^M.R8=C[8 5)ęPD/5Y3mȚd+Nj>_ Ǖκekv& y%Qf/6D*IVak:'n N%⭙qI@rM l nac<%>9 4%ݬ"^ kל$NA4!䀩+]]]ʗnUŌ/Fl&s$^3* G%z6zl /wO-$_*s64l#X:TDbG.ڤ'&S߀m,PIP{%Lɪ*`[Nɟ>Ot< \-ͱںj`Z\ƩRN1 rwJ(vC@c7͛Lx_ɄG*#nm?\bMctM(`[N=8mVǗnrHl v ;ޫX<ؕ7#BAgqT8l7*b O!z ;"N^f/fXzeY/r|%_e'qZy\i^\YvG]}nG-QڥnSƽ鳛N(ShʋJ A_'f`%d`:osE~xsJ˂*ua⡿/jxi\> -.bNKo}+eT愃JĽ?'Nߊ>D 4<`S4ا RK/H]6϶z.ݽ6z1UY/8R\7*.$_sߧ`'Ğwݎ:Š*q⛪U+0>`gsԝ!Kg/VK1N__&_Nנ V v7M7Xnʭ **YbLD ۳Tj.}5;;;&hSq<$Q `Vim~ۧ~{IENDB`youker-assistant/src/res/upgrading/19.png0000664000175000017500000004363213260315532017334 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp CHCIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n p`v1SV~C ʧwnir @ v̍,ݷ L@BT͆dY|>C\a8\8.@*x'쏜R~@)%cw])2HF+IRT !䲂J j #'ŇU>7 k}H[K>1q sőj 9X0J5 E%UoWTK񭛨af(|b&T'3GoIdX4B pErvFWNV>U Tbix}ԿgyX v->_y)QY\(1MM؁灆 @Z<H_azu1z/ })Ql(dB{m-@] EGA eZ2xM?UWZp=qlcs0 \}k?ǐb@))[(eDKaFnu Unj ?`Pl؅ 1SM!(jt#X3YّfpV!r`ͻ6V볼 Dex1ި5pU|Njj I89.`@HBNţX /zUSnՖex,M@dCؚ .b^] jV,иx1iWOfLpź35Š p4aFoY`[ǀ],6ERBǷX*'%|EI>MoA\@ŭ:Wx91Wc|I$tO_afI"\j=X5 }ĄJc@`nBt}<Q`ܗ$"ޑo ’cZ*sDSpojӠxprS'O~K5C1Vs<Ś;n _޸(ȳ-Spx*2Fs(7]MWT8hJ%LA#uήߍ\*뚀F5n#,aPV1С;sI p%4mR%D+yw6P`[u0p⺛GtY#An A (;r\1}rQk.BB P9{.H`øކlڸbٳYnZC LDM'1ʘ 5t]ǶOa֔m7% cTKة$4x1Tq lxb6t7-65>#wwuJtG|~h#u?9m#ȅmg{ |rqC74JΎۖN8¶GTr~TX>=]=>@SU ZIAǘ^^]\IUsJܔFF9|)wTW43QQҝ<[F%n:-ظ)}eʾ)Ը2RQ)X&|%2l GMf4p]>2 hܚ/dؗݗX t$`D`%Iyla CbYi)?濼s9Jpqg]$CvqްSbv|,8ؖ$Ԉc/] lEb-XCTAV0&(&b4*D#"Q(R!RRZo(myu7s>:Wrknvٙ`ʽFlj}}L艮2RGX,uƖ[DOO%˦ w! 6ĠadY{tFȞ94z@ҿٛ[n z+ У۩~oz/)Q]l^|~lo@q9F릥 ĭ(0A(i* .6h@&A2[7'Z2~~K,؏OqGT NeFw)km.*(FdԊ[?<4C滙$x|\EA 8d0nK̾&CJM4 [U#۾Paⴁ\qQW86L ${ʩǓԘ[qNUkQcT;UN[Y "AJb1YDZ܎ٌj5ud넇yX $g*Q^dZ \5dEO C!$I- 6kե3NmHd5sl6plieP(Bv[mѿԠZN`l3!hPN,*5{n8FՑ2~/c:?Qdɴ!؛^!6WX$ucz+)9_2`s1N.+$$>Hcm59?ЃʃASM?5j=xAـadFFԐ۱6^L߰8#0l-ŒbͱS9I8˴'-/)y֛?1g9€ڮ9N }d2hV&naOJͱ%ud.;iy@_ol URk2˳IzN24AgK=w#4ǐAMɎ%_􀶳7f"Y[YL3 " Weg./:Muέ,{<~ݥ 49=NcA (MJYVeĈ\܏o+- nb5ߢ %Z0Kp511eʑ]_x̰sliMF$9YmM3cI2epnD>sc}}D[>/( :0ͨvm\1EtvP-ٓc)Ѵͤ1ȩKl#YY<`Kyp+ U}Drc3>(Id\EtLn= `WrgĘ6VTg0m҃LJjz"7@.WIONd7Qpͺ&w{ +hpV."" e }i+5R3ؑ66 ڮGjjɘ,Sw1H3=kM> B'yjEŮYUAnGU`,z$\62dTWC!ePXp80BV"HR[9mEGWs< %^Z:Y{WyԖ:-mf} ~ca]0-(<Ղc ("*\ 9PG&z2Kލ[d)R=ӏ_(]0vb@.zݰ-KEQ6sŸ4ج8_?j?9P6ٵfĿʸ,]bu~)mR=IU,43):'?%j9X~j*+Ȳ:>%4Dޘ́`:b'- ?7JXp%`E֘$ϏČ3&h5<K%WH}i|Vޕhc;~D&ս6Ps'o )l6~T=VZШFt`l伛ڻhH7v[qѹ-ܻ B;c :FJAĻRͯpϣN_{I[[;I!(2$K]ME{at-V 48Kg^SɥN:\Lpbls50"FuTg{飕I6-]/n` nhuz`dTޕ¥ѰT .xɬ`GgևsҖH1eϒi2"9_&a3}Zc!Z+qG%ayqoTţ,\.yכ悲WZʹ h9ʱ>;"ڈ+vSZr.-P]wɒ>3uv0v( ^ *U茶. V,GARϸ.Tg'd&?:ܭ^BKhN1-؎OWeinF *~"֑3B˄ kZ)$s3+ϭ`7dfe?a)Qbݗmz4;aF[c]Te'luPG|;nOXR ߒ>]Z,ﵻ;eq4.S gG`FN*ID-.W:}Y"9`ض ɢ$i75VyT3N8 6'rw沿%R'~5̉]l"x7ߢϴ~5l&5*~cO+aNd£hևc3{[}t;>2<7ORij;aM4 x7Oy9W^ʸS 6Lآ^Dw.~l'quOߵŗ|5owgeTwX杅4L flҠ GH=wIW4ՠ3Uw\9niU)CzɈBu^+HGT~. BpުStWSW"/'tW@b!}*l.qVPXXq`/oJE:κj $'\c|Uh A5S,>ۑA$mMl;?:]d>Pԩ/1}iOM7L7@{[dJ~J̽2T oFVA^("-vY$i񧗝,dg'dZAM)P[3BӖe Xr\l̋(cbvY p`TXV)!NdB \0C 9Hl8of"!aƜ>!E![#Xx'vC[VxMQ)ZM hI8 @5-ǚuY&ME-h)DԜLgᤱv3+ɓAXaItS`3>IXza'<"3~b|值0lMw5څ*VGCˑ@Ȍ#L5?[\UB%7'&;1$.M ŧCmwZUcxj%etz@ՈNӵ 1c4M*t x߾qp# N,y%4 = 7?E7Dn@O[K ҏ~v)ॉjV?|Nz&U sg=s,~81iS AV1{y cN@I&tz%xW>4n 6yJs9%$)KAG\h_]zm@F3_5)w<2ݩ{=M]pLYn64xbF$q})7hȑ#d\ǃ[`n%M~I x; vW<* B1@@(RDAkY ꪸ⢋뺺 *,pWP"RH]@@Rh&!Mwɝ}o&!f&7{~"CF1EFL U:Pm2%ȟ@J@yqe6vfleoIد}(MA"'`LܭO!k >H4*<Nt^;"_Q@[shG^q@uxP/j7[;RH ~c`7͎;: V{'諝Eo`D+95.݁.-2\vf`dxaGCj[{%hcAܹa`M͌12z>,xY ,˴M ؞wۍ'zHsB4E-N>h1CY+ьYa)۝.{Q=<5@ [[`9˰R8 M\)u֘Uiam>0A؍~x-> x` @ug<~E8z妟7@9ΐ1gu6=NSa\"[8@kJoEăF125Np?xAOznL l߀`hNB?~Uk-sp[䜊ZGѧє'uo7@xV*kz^4mL/w# O̰`&ݱ(qooXhj byɝC\r9J}s%أqU5nI8.7{u +NH`3@#GuKw[hZJJ 5>8g^}Uon1?uJ2X.   |cfDr 2_<$7:3##i/٫;rD8bYU#9E*G=YOievzQV]"2TԷc[:n?e 01v7ǟI8|_c,};;|be@ TFbbzѫ.h]0Xӝ!Mff,+S!_@ZPH\xH=5tyxCJB8âJ3fw B2a7cf>@:D AxAQG@?Vb+gCb3\.dP1@Nv0l*80ua ljJXZG[>yf rmwMezӸ!xV#%!`se3\߇x ˝-KAL0IB֯ȁTo~e N]ldKN=Qv|~z4yK Clj%B_YIk zÉC# V_݈^]gjk쮞>Ums#((A1ixw@֔p! m3 ?=Fc/Nɀ70\d(4v^}hv#xF/"7{x8rdξ?/j,7='9.L\LsexWP= EJ` #V;Hm<s ʫLSb}f7{ԞT1p)``3PgŕoYDJZgS=3٦:EkYc]G he15 €yDP&}^DE3cSasLhK7BM!0p /0TV6):8|;@2t[&CaU}stk, %&IN-ʂE⸉28j7m* PX(n"J,d:uԐ5q%7Px:LFP7ec13G/\N7 jF`g`F B gk'c 8A_a'.GQ=8gr93 O@\IbQk8'ϯ[V6phx_ w?R ӽxztNe_ʜLX;`ԗ?c5'2=}HR`}fro`f|/Yw?_J$-=>l}쟀ZvތDvn΀>BS1ETUYƱM(iM~G~1mU"1~E ?[ل:薹fJ&?` R!i\)m5Uzk9J,˶u`A ܇UɦQ^ѭP/)/Wgm!5zp3[j^x!&܇'1"Ho#OrW3H$I[U ۶ UU֩F`1Em&X,><-aQP9G'|X/mJ29ZsU*fi5 Md͉p?VN:Jƒ?[B\2F"a j٬*!$c1Js-vFھ:$1*:Fd!9"Y&y! :l^%cD4.YgzkeNY-EE5/-wnQe$5 `>r-r29@mתX#Rk^_e3 |"{bOZEgX%@U8.qV!XNFS;}az`߉OGLUXiI38&>ҪnE% cBAuƍ[EZȰШi%*zW|z Tק6%du1bT'Gd4%x1zO.eCd jR}'Fon+$+]>̰M퓇HBB?t251>S*u{ke E0Q_ǙNvaSc&t2ppȨ(oV;FePo"l[rxdXP%0N2c=.:0ĕF)`K&p%3Fam|'o*TxP w>F3j[XK ~hݡ}rCbuzN#cíH mГ*)q20!LLM/T(!5#a6)EUAF8B^:?fZ` R!40"c%мkuk5zJGsٶdw5"tvVBK`YQh 3ⴕF@""[w̿d !`I MȥڃO,EsVgR輪4#v5RNJzLM_P7~wh8JPoǶ+A0Jzte]cdDƔ]`?el]qi1HvR)V솬V(态 do)j{%ay|Q "Z+;2̾Qs]2)JM åocM$S0u4~Qb-}juJ)~n>ZvE3`7* /L8K9t`iL<&HI%'J9+ PCVTAؔe8W0O lXGsтɁ\%w_V;ĔTJJkoQc6xp775aQJ jF,ecEj6^U^w_b_D xʱ9Y{谳MIN' 3ܼ~p|0G t4aV.p96?q! ꒤].⩵-h&GzBA =]qL=kW_ ٣>k,޳߫~=΀YigJp j%G VTsq,6&;ܱf'mq`5WDُ_(2D 4<4`{pul|tn6!*3hnR-O7k`{{wvw{ĉJ:(>`COd׈cEg#`7]NGP+_B:RJٿ@=d%*BVԥ]uOI=\xg캺Yώ@PUa @Y;fpWL:?,!IENDB`youker-assistant/src/res/upgrading/6.png0000664000175000017500000004273613260315532017254 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp =B IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #l)) f4=qlcs0}fJCBo8S_JNL9F(s4 #ɎCj_CUgyߦ%Q] \ȁnz@ ]W Ř<'k_RBñPkdv7]h#[ 1Ťef3f7vp2,ـbWc {^CzPg>fOd1I~X2kd qCJ(!BǷX*' rpX#GR Kbo!p%dBebsP^Nyl]n~~8QM\!q'<߼uBd )A])4 j"(oCb(VU>z5/ !KN< &j8߸:g }, 48Noc;Z8I9 nXilylFnM cHVp:z? lmrPg%yZvwaIl%  N4 5ÒY]a ΣdP r$h@ٓf#w 7 SL"H?'LZg?-a@q j[w w7缻2]w[6DP,ESr"A)(8(D/݈ 1T !LP]];n͋={yz{灗n=:TfE?wLY|cƠ)/#uуm|PZoo}cՂ_5JXtudtdZ*xThzXV*x5dZ6kIlaص*$B&cC+ ux+ecwF kL-g꺇є, ߤ)i* t 6yՄtoCY܌_SeJk6SRQl/tL_s>莂ݧ!^qdrr[JU %*Zp$::VՖp^Ρ m_rc]-Z*Ц;^y|  ӂfݠ/ݱF3%k4(0@e.Ȇ.ހN#I\ۣä(U{ęL% ҕClh_9#`4s*=$woUC ]@5ll܈?kpzBLU9ɉqE1MyA#l,Aܿ0Yj˰؛W'$`fgҴN,&$DR=R>|k!>~y߫ U1ӉP܍*I޺^,3>pja ge;(z `9TfPTls)iJ9 68dP(/ N~v ׍9nAlD+!8Pfm7G wFlHPS|ed2뼨.C]_EQSD^99q讉^Zkf4ԿV(rBUOo1@.}^N-)8zRq-p^#ǫcvd3S *ઢל&]$?? 8}ٿT &TEwqnG AyvZ3W&/TW2KJ3wgC6U.d-eo: T Ԯ"ßm =;}VhSkaF/`6ڮǝ#x70mHҞQm+WKܰR7V|v:Pn٦Oٞ?((|wj郵< mC@5Hc4(/1(VF A5ЈT#%R!Q@@i(n˲-~wcvfzgvd̽ߞ{~LTX#CuS"!UҷlGK_y&<z(164@& k5eۨ )؎x<~%;@Bx:Vib]72vQsw&>~BA_u9`j Khp{ uS'hx_MA/l !$Ի5/0[ e=Y,\h |{EQx TS Vxn5 #Wb@Z`XA\F{r`dYFe`A$3^FҔjEkn,*j>2;|3dC.Zj%SM` zPLv4^dz^_>m0tcw9a@ؼo#2iHpr`ӓiz@_wKكZ-l@C=Y)hڂ6)ŶcҝdJ%dG%M5mnW3qsِ݄a;N ڄF*I~ aǪk[ȺJwޡ@6q7]5d1ł&h:jdZI;Lʪ$qRrF&Z@G2OH ʀα6<N*rǶ6#/ؿ?k^kKF@cZh> M>] " AnId[,`ͮ Cؤ`d"bhf_|~AD'N^3Ϫvsۏi^F2{c' "nˠ]v04M6( f&CT УF*^ISTQ[ȦA B~>BhvhzRuoF%XВJn3S_0S)>9*WOrB<o pLfh ɧ6'eA^VNδvt WTKr8HU[5'{4m c;aȈ Jp3?h4#}v^B洆ȵfC 3\j%#[s䣈 5xTo.ٝI%tC,O˗N|U(sIjv HhhAa4(v_],r\5 OZ5z ;VDbQ rXӮ2X%Eð54Y,FOhx k\ؕQRJ imPFefH 9p G԰~7f3皎rE W j8 HBپ#xg{6,UXuę\Aѥ^14}ʦW-V)9SgÎ1.QAje o?MFl8vy چ6yգURZfj )D[ȣ[ /-pPW6m8(@eDyRІ 0x13 `9ZJ7D;%խ 䌽cC./Y`Aqުj{6|]7µ|8]R:'Eڙ$;%\8Đs>%ˊFn6ˉ[(˄Gml<OdFO>esA-U!I{Lk) o? {@tzsqdt>@A~Ȱ !G?iIolë$q}țCX-ʰdR5>)!dLM(qD'h'5cRmj9 ">+̾SCr8WYأ~@__wFpy4!#V:] pU>Iy$^ ((` N1-9ulQ[[юS:VKH+R8 jBH$$~{wsݻso.L{=ߟvDU.{l[!t"Jfۼus "QP~fCj<GŘOfx>%'.(B|9 HL?bIoSoxO֠u=tlr]\K cwbޗ6;(Wss}tȻ}h`bibOo;T-~A g,)=OaH`K|) :&@c6=yjI3.]SL}9Է|7[.{*^kO5_no#Fc|߽#^ߛسr@6,ަ}'boFILEG{0v5ޭ4T%F1@t7۳I#.i)dHQ7VϬ\P[=-R'<+ #5/ԂM*|< FqwmU+Mr*nݾM*|< (T9DEқƈ J X6Hx!W{ȡzh$CXg!ګ +C6g C[~Rmط"xYTQTIށ O&Dz9̐'怮bRv-T,i%8X,x9e`a#M7sS(`rFT7e#{ t72w8/x{hCYyu܇$z6}35҈аFƈl:XwҲ~]UO)J ARh^SWqkM4cm\S:\Q^AP);+(a<&R*CL4 I(QnB<`tmϞw s yE7N=Q|CFXZO\K:q#&?iF3D#Yg/@ϣ^ S,ڳGoD|,^Ro)ސlbo Vnk zQm4o҇cfnknϮ?ȓ,ť^w)#..nȱㄇY={L0.}ȴu)7&wy8׹]d?eO&FP,֑[8HثIwuDꁴ_ `CD f\Ds,moI;ި?0bVҫ?2Ɲףm:,=Fu. 6A~+~"W}Z7 ag+&Ev{H#(cёdEuǶ)fՏy7FgWK+4}v0~A&蜷h  HaIrQN^ SaՔC.LRv-~r T/Njݝm02fcOvwUEOMShG sTM=.,D %,9eNUm=&P-F"~sFtZ8J m('wOtyH$FŽ9gLlænK`GpBHQ\dh-5b[O 9I%r`Ki3WWq6Tn(-ruW5|Z c zUtR Qڋ҂m[jO2eÛ/עӈ6h{\PFejd11 J›%6ː_8*ԻQ³ +u؜jq'hƉnU s"AV;gHPm<)fp,ەqsL((noC`8lz8׹.u"Wk3iX=yf"UrT69ā 4#?|ө^ _ 2Su3ǀȊJ4t7D߸7 J:t[wjdah~](2UXWǦr,$3g:J\u[ǝ.Iff΋6 u$Wys!HUPM fje‹[vDnTwwhU):'b'xlros΄Z[KgM4 ܛnH}&Aeffz͇$m{䧟),{ko:um2݆@kvAX26̋(` dl![*۹| fz 67nltpF3a<|B]YB+G:do=1Cdn~[(6LX7I 栔HuNHL4Pm>5wrJDB P~gUL/ij6،yoMpDnK Y]p|oX^W0EA&[ #9TQ@*YF>~ՋE`V`I1%<<(UzN2&DMY&Uv X_@RN\x]N:& MJR4a7f\*8tGE*Si1 ݳ~"⨖א@;*G4T!d}ycbrd:ZQ_ر|3L>5viD o̟+ENPj5'K黗zUSK'|4{Ag)͌ Öo er~bfk"s߅g=nMRnvatQ,+龁*IJ-ԷӝTYY˝ nKf? qIf< c|Ͷ:Ivz+cbX.%Yq-y$IE>HPԯW7>O zj~:ݔL,wfE} @12 h0tb5MnC*83mgw ygӷ>;0 H7޽' qWUI^z{rí^kWBQs]6›!9DKTT:!cN:\DK2pHiz&hJ$$yȦ 6(̈ *Oǧ3n7.(CEg\ @HEovn7[UՕNֹ{ιgjFYaaM">T] &3" d@'E㜎]-5f!p(,Ňi0p'b_#O!I!%8"RkL&"]-fR@ ~(VT~,.R$0dRj7tR"Q?s0bHItA2+bw [C1j!2v(B-d}f q<1` ci: m K2>0;0,'c&3 _ :|}y.nIDt)<)0@&/>LslZf.slC-۟.{^1j>Im1`ft{)~uUy9gҶᗆ ­ {񙇟79(p` ux8~F'.J)=ue_gnA9l`Nu{e`=Cʌprsq6q'{+fHl1N=ƿ7{ H$Ii Nѱ wE snĮ7'$ ЈZإ`+a)R%IrZx??fvfo"zE6z.9okg!qb"Բ9E*G;=KU=^k>VHYN''"( X޼,8,k{Z з[|χ5ofHVHK dwV\[]^l쬵aaDPBZe.^Q!K3$w[ O^%ΟftKQ5Z+x8F'jv-2B. I7&PU37~8`;b":?'!p(`+@גmtFr[+.מ-uѶkKWQ%ϸ?2ʧ(@B3t˫a=N5k0̆Fwk ;}Ilw; Kpi%(c3 (TG2ѲԨ@@zO 5$GnthQ/ Є!+*#- @˜58Ha.gUFߟ˫ꄝ3ॶ[W=0-0=p;{_i7eلP9,CC^hQ/[x(:tҺjUzu.nJ(:lYޭ;NJ*]jV\V#N'^f!#T'N]y"H5#O4&ΈTU_PO`BTVTo+evFc.rg,cU E,1H pЕu"f IHo`$&G?Zl]OU>ۡ,>rN޿5YSF!]1__9T?pFe0%M٧MQCtW/}O@r?J1B{T͙~+=|Êq`=`cLDҕb v_E0bR}ɉNXpZQeSfY30+A ~/92{n\?<w PP5< u[q`K-aWi*ǂ4By D~tz;KxyJL7LIHJBx/f5eLُO]vS]Bk$5M6&8FjT;栂eY;д{ݔĸ;Kё€X E-)WBqх3ۼ_v4/EXʲRVW[cciG\ri #fym";=.jaO$7l0SQEK ~ni$N(ڋmXJZϲb6Ճ'Bkۋˣ_80 㳛0}ev6+}z t^Cl>T+3}H:`+THϐƅaA:XF̋~n`R]E>ͫZŧ )W@KCXhw剝a/m烅y P>A]GԼI,>i2s IۼvQϴdV10^,fy)k>il"DzDϕx2T䗨-6hM@@Hu}q з]hvaWn d*$a)Yq)0;W|p2Қ .qaa;K[vdO{kT`KX1~l6Fu8C*KDC]7"pٖVRayrXWTE4S7jǪYW|SnC^ l3j^xrneCqOL`Ę:"Q&ufDYlie٥`LP-v:Xq5}m2'M6L *8& f4Txc1ĴĜlp\&K\'rbp?v1Of%#fY*eMVi܍ .o:\mvR[q?v`|d, E} C7Ov:$1l2~5Zq pyh)qZ{'гǬTeIY/E%5׽h-wQY 랖*(iIT5ЗTo Ramw徾UfD/ymJ;әs)6`نUpP}إ`~0Of%md az_OGYbL㤔3u ,91٤j-iؐ] ja]!/Pb%!`-`LƜ).^| ov.z,䈌D/ƽS -M>} lHCmzLS`yYSa әHCB?:^M8Ř"Q ZC2#M';FXTؠ͔ѽ.Z]Yk4)R Re31n-:3⑩bf*a<Ƈq]y1ssHThʨ އO kF:P:tY]Lgb޴NJ*d Vw%8~x0(b0f'aؑ1jzgl"<}e_5]Ujt}(.>uiJRRkF8("]$)E]AF8^ c?f` RʘxsE@`z;WIj5zJGѲ5"&@vQ,A%_dCIO wJ64q=\=ݪ(̃a K*5lG'D ě97>4䏸ii:Z\īgzfX nQ_ѮD!WBFE %4! owP҃ev^GSG`ȭcMdD>_ `SF/qmĞ΀3lA\OA@i a(VDsfQe8q oE<9`n8LㄗisKv?u xԔ`D $D(|~C%@? |E {9^?:4wS$0tti_m/7G/-c>Q؂& {Ak?<?ejJ<}U_>G%@M\E~ O<>< ~8y!^da͖x}u[ ` mX{uyֻu|GSdC*C"CHep_=+{ﶳ1  Xr%#I:. sT=[m&]X4g3bQ>b߅g xr t:.?i?CE>?MZ=4B,*@8P"@FM>2Ԃ%} FC?LFlM} 0d8~ ?*'cqB.$y~?xi/f7Rdz8H<;63{xW½?^20lvi! E<`E;Б)I@vn~wfrA6nFS PEV]q[?H@_5 {weB3#"˷h`KK8|]7gCؾt[ҩ>9FRG,:QkkccRO ٫[E"zyli6X+xֺi~K;t ps>JIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #o \'Pbf6+;>eu==)>M8d .o24 ;Vŗ}bbÛđj 9X0J5 E%Uo(ZT>u5 1ς\$,`#$Xh0!HB * d(;biT`Pv9Xc%Es[,y-HBonAb @} p<=v[9ѕb#|M b$e# o E0lECCL(A6KA%i [S? jd(r84@ЛUغhE:@q)z )V =@2`PM~)91Q,e|fab$qa\+XyB,T 2D5*p+z[9m@haA`K gx1VaTJv86j-9QmDbk2]cWb7>s \xҬ5@%P,J: r:ˇΊ}3C-^)c8űdטɶ↔Ql=/B$o_TN!zuI>MoA\@ŭ:WD-AyO85lG5pƝ\|: *Xuw0[TJZ tgZVռÓ[7,9>,.833//ç0> `s4rȂ`|h+0l+ 6#wޯwy@\]]XFlA`XnbN$9jBW-GzAvĞ@w@xr' %Br$h[T=i;MqgK> Z=P$Դi3:*@< WoӢt+G1?n*TAfǣda)+JPzf=]E(|2@ $("PPQiw 4N533r<~?4=!YxUI;CDnBߠM w4XI2ShlYKgOata> 7LL#v.v+cTkvࠈ Qǐ 8m-p? -XOzzMos#, nh^pQkښ{, % *`Z%E~.ѡk|2ݱsϗ58(-g-`k} !h 8n׵לTo@_(*,,ՄtLeS˳ N~N:/#cBH@Ŕz5w2 . iqO/12Ub$Uu;*I{zlآ0#Q1_4;'cfJghE 3/>i,GLZd-Y R\s_r % UԉGiHIz4*ɑH% RCTC8"ug84)#GI={$cPe4DͫA*lZxԡL|UݱI<?sLˈ;۾KL2L1v,t[K I ';=HUgqs@"K$Z/.0ۡD^ҙ5]~ց|v\( %&7α8US&sDEGE#:)ts/S{,ЪCQӬe֊T4]4Uad3d.f'[L\uZqUel('CSMJ=, b6`4pQ7nx(yp7kh EPpB| 2T@LV1Ff/Kr @Tk&ʪs_atIIZc}LjƨFr=r8lt&#^ ~AsY 9a\z=}Cԉ1?+.=?ب(*hڂ6d˱dM%WZ %L!rWtKe7EX6mhN% />*ء&j7[;oic` t{k4\ӲRAU4mYޏ p mI " D Dc;^,/2H]92 lF%vZ|m] YK,] kq c73w:Mါ:oA=YfͮyFAAg h'L_l~ATN^3i9=G_zLx vۙ/'4}-ڧ+>lV#yO֪%8MB xgڝinTVV\K餘Vr;6ԧ a^ 䦪)3;[xl/_^rQaNKíR2ѾC>jPSK$XcDXGG -V NZQX٫*88en4H`ښɀ\ ҠX}oO@q t߫?Ep±ʅq x K[9=w[DDQ4&nCŹZ㻘8%Ł*h;zC!\g ʔ^(,8,/1uR@5A1R]L`ܬuM#vGH%ώɱ؆Yj6^%%T*ˊ8x _(ZUJ.+YcY,4O۽hfk{TJF@džcu:柷V6Q:-` \6/f@/[1 Jt%z"zyj Rvv'_BvXt3GgptE1: ;}i-l?Gw_?z9}5b{Q| Kz`eWrSق#ވt)#ɛd6 U, ^ C*gv ,K; ]xpCM+{\Uq7KBBH D+ABAvԩZh[ڗ A ہcUlGh `E^m @yH޳ͽܛr9# <0ȾĞ1#6U)1*})bĻވk$$TuF莒Js!TiY4bV.@Ol .'z7+#!L-q4 ]̡dOr&;KΒ{^o/ v|kB[@>;&WZi v O1 zA>Tʪ-_ƍ͚e ~m4y }dǧ, (%ax. «aOA UWԱB7P<ڳM;1 d}=`ձ}Ar`7_Ĭ[=@# Z48v}abi:_# .:0 yl"^X1L׹%PZ#j`ӓͣ_00 f '=Ƨ;#Ņ m=rMIFC/">n$!<x Cxih3r5&mD([mB3ٻ/H/'2q#~S|mW/32W%`Ľ/|(>?l3Ψm$mL3Vo!ݗFc;:6Py]Mq =1 E͇^>kicmDZKV 4 ^Wr২83Ep-UZ`; C> 6fGhQ_py fdP)MwD\^o8&G&>Qg37=5yq~*h ޒڹ]P'Yՙ٤QKf* aBj:s.ʜb'W*`ghaT}o!$ɋEIꎹME{qw)OJ&5U;AGUҬBQF漰O,圣z9XuѴM#>f\y?M7L]I:IXlMw&Flt8A?]v8is%՘bۯi"93ʝa3m+vQ+">zݐoϕ8Sv3a9]7Q_+ 6^D`^yC_8zudS7PrΞ[qT :o48Rxwl|30`f BfBfu2v̂)7V7߱ag#wST|sqP.WHNeBj<4@8ΔSf%-}Ve 3*2䰖KA{csuck]Fկ?fKKӳ}if?ZNA.9oϙn`_/đ-[gfEE[E8{vY5IC݆M g:Mv$BZm۾$mTȩ[/$^eֽ_9.g`~Nn*Z[|fB};D!&p&^``+hLfzOp}_C45MTii}jqc~uDMA ͤݳN<9hS/,09D%8QHF_S,b[3bzv041$Gfmbʂ)IhG\3>c`f˝>Iʝ2m.Ҵy8üqRTGէ?,FHԄX%hint}'Ck;-FE!e"٩۴}i O2zhnb7MF?tD.hpY2Ir&Zf䦱9Q, .,"XT!FϪ/Cke]`sª_B?ODUr ELUoJ6ivL(.Br92-mA;6Q5-@!v_$3OdED8Ns[#}xRc~qk ؋_2ȂM9ѭq1_g][u,- ˼P)jLy HMLI`?uwFTj+ lGN/Q(^l#3ԝ{4p$QY`~N_NZ)V)(-uHY,$sϼ Ve;D׾;OߛzZ9߁E$_%k"^,8?ۑ\]~ͶrcU;ɼDUe(m gO ^ɒOȉ#/6vm]DӪJH -C6̋ ( >GLVMY8[`;).8a6(Fl8/f"}}´Y]>!D![#XŞT1N7],-b;1ecQ-6'$R"5!1yMf] D!GQs7Zrϭ(,tD#)0@`'8՚w}´?>VK|3,x)܅S`C& )<=+S`ӃAͰkU]AQzN!3ifx( 'wEq‚V-9qjxݟ."]B.H mƁ|{[I4*vEaSt-^OPr {-w"k"4Km Mt(#C}~tL nkoxM$+/˧5p4j @USvN~澫G[ 'Uf,@!tJh7rWm sR ܆nZ0Z*0D66sL9l5V`;'GnR.=*v/N6Le5kSl0RkVĭ S2at]1!ߞivR^:r{@0/:ѩ[2`BU~w@SSi9{?I{ s+,א%o?;V )%[L?s>UL_9nʣ&A\kI)}-mP/؀) AQ6rZ?11??ZsnJA͝c@WFh;~^?^GJ/GXT x5rN@ {\*`sA\ջz!@(N>.ّ0WKY*x_r`p~j}JV7Ar_02N[ƣ,U&ǃ[`3;+`,]\&,~v%jzWLJ߮^inl@Q;-ew ɸ!hFbe1f&'_Qd0g"b&&( ʪtHU{VQTWu߫WM{߫*;{֘67"IFL .1Š8Pm2/[ %QycI̵&f!H{$aF'cFh rD>,AՏBa}dcJ L&"]-"#_QvT=Q ˀrIE苺H;!q㟙t.bkv=%~Fv Zl q%} `y~ ! "8EPwQΌo$ O:cV8qUiNHPC@_s1Tp-^-\sе `BgN$T(O@ߙ>0bJ'4]|]sƬ wO2g1\K3o7P;}TR8QY\_ :*`o]\A-&ȷ%m 6aCF0y=-f ÷CbqEX &8|){r&Lvx@ciZ搶9?蝌D v"=l)fPX33o&/kٜk'fX00ÏnuG+W㚬Tj2TKY>c'cJ>IF%>_7.GQ?խ%po:ѢցMngؘG-@ٌ-'2yU;uhe<بwE+4鹏XiUatB$۟0SXbrzS%xV{6X>ј:#ƗP9WQG|C= QyXQUK0OM(3 s`~CQ#6 vC0)QT'+f& ALjZcw'Okmũ*ς~~ukix Bz-~ `TЯS]"УaU{(`s' y>_pW¢>,-0)?*:e ñu`k6ӌ1KJ/_K ,`*Ĥ}ɍυL0Qe+'ual0kYN<~+Gx+TA usSm?nP=^v8ycرy Ttm#%l]ڒ5X 줤q KUU|}\uu%OGRdcc j=Fu~\?;Q:Cpvˬ5ItɉXꈞ|o\l 쳀M? ;7glV /E X`xmU%kjlXeˆYN~j^G۩:}Qxb%1ufLM ,S*] %u~1e,+) wLIFAWvV<80 s0ݶ* ;TFue=D]3 u2 ]uAuƏpJ `t%U62]F+DPXmM?8-3ye&3TmW BAuƍ;&k-Y K|HTh*Z.~#MXjnρb!Kb"8CObGb^PnY"cHVGt?MiĤQ}s.X]fص{v:(ҡďchnol0N1fH1$c+D} :*YbWh}mkn07%eZ(Y*Hg jcl;ayQrg#S)g*a<Ƈq:]yv!i$L[*4kEO|0 kF QT*kڙ`6*Ǯ;80$!̇$ ;2:Z9fOm/Ň'n&X%{,G~Ge֌pPEzHR,upc 1Od1,S*4bOp lrAIOв5"tvL /ԡdh+E\EF[;yIBP]W,%DќualGKSEi *ӏWԝb-x D}źbjlǗA \ -[y&3Д$9T%(9Q Jw^O{G`ȧ1}ep٨0rho%O6A6gn.f9lZ|tzyQD,TFU@嬼LM} w\&~L,;|NG) $* Ls {l02rtGd-FzO,;Cד n tj`3J8m?do͖M $n =p >Z },;/eƒtq9QJ |# X֦FUQۤ \q]1$wrmW8q[^}m"Zkl. |lCR7AnzaI k?8?W.p4ʛaWԹ6WJݎj {jlHO |d|q-'B==HY&bV}[G?M$P|H-1ܣy۱J6NHV_[{M Kll@oKgP+(\'x =jl˫4GAQlK NY}X+f:&:b80 Ao.q5Z`WFӘ q 3 c'x7?4NԛO~4>Z`K n}]{4JH*إVvFL} ;(ę,pmȚhw_Wi4zSsYmcnX 7\eaagD#9hWdU`'9F3 ]/7k׾=[ l0}F|G,eZc "$TxةrD27xߞ>M?!۵-:M4o(eSm %آp{9 GA?%@/Em /m8fѵ6ϭq(B}c.d2Ti%f[Cv[8t;:=`hQC[xg6d%(^G38l Hr>=Q&NӖm:4SkJ ~U~@<݁<}0GSLթX;\m[yB vdyʐ67 ^|et&@WKpğlC-YD+!RL{+(πso==2P3Wm<:&ȿ/z=?;l)HX )hZ6Kiɾ-$2Xcx2{s-Ֆ\te9wDx3Ƨ%ڷ=:gsմ^gT@"GTC \.v|6|^Y $ЗߍC=0 E~^|4fe}a.[5}tbnǶP|wHOʄ*eFG9.5%g1Вx=/NV+۳%IJݒU +CbAZ#P-&:CXRL#UQIwH>;Qn O*#،x+v/CQv"{8O8T^%jJ/>/f=U7^/7&;h뙑b99v8Fd(U+G+0mOױ 2kXq 춶GnF!(區PGJ]bVn&p7$XNya#IENDB`youker-assistant/src/res/upgrading/24.png0000664000175000017500000004155713260315532017334 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ?H?IDATxbTqXp+]H=Vy1Y7 SAET8 7(e{gaG73`.6fyf&F0 h2Z&۰s?Xۯ(jC%Rw V4j0##8hKtؘpZ4c;ᰈB7Ѕ~G(Uih1PʄF Y!Ǒ`TPƲx Gʧwni)Ga3]l5}t~>Wq4l,X3Y|>C\b8\8./ĝS tL j`ֻRd/;Wa9agA)+d%S,a˙2c(d# r4H.TA^LpxcPrYWR@a L$E.+\?w~aM ri"`F> 7LxkNFhdPm(C;lp7XC 6@1۴Z"ln 6X9$(W :F D7-EG6gXMF堜PVV֠`z5p0.&POTK07 _h ARםBPC~"oH";B QjBTVC3;HTdY@.8"Ԝ%F&IH&DW0&r=T~h=qW=#9&J#S x ѓ#؄Cfa-S$΁Ugf*q?Hf-L2YBQ A2@T/Ƿny4FYxE~;?#z$da &I=\A!!WpA,egV, QP ,|>ߎXX6og޼}ߴ 38-pi&.?)gK~:Bۙyqj0Lh7 [>Wġ[{澭tVe9pwaPf&cH~[c$3A&SWE %(pěNUt6 nIO5&t$ú,ܬ`tŖE*l \UL6Bh{Z\8ַ]|--D~ޢA<K/MQKc3c>Փ̗lE`ne@g!X Θ`xW`eɜ2|~:e*rIIlfp^L&c,%LNQժQybo{d;P_9*lƖV+9ܙH# :޳ @Szr7Krd( uoM)\^?#H1|,'#J"! #i `oƂ+ JqԛYV0I],aut 4j9"5<ILIg[ag{5A9 UB0JQm@#+];fߛ4m*8(u)H(cV[[l Qb%Z("DЄ "n)M Q 4[[^h֪F96өL,qnK Gm^D9ja+8v_>^}!jiXȊ\X΄qʩ<.D]>ƺX%/noR0ok4=r =< Uߴt}s1u=޲*k~˃hNt0679Zyi W4{yJZxQQ5ñxVJף-T2I2CbRl;Jk給-3T0r @4Zh+ç.=#!5Z`Xҹ@%`˅]ސ<ݡӖRM|fFc]߹ x-Iд"s2iC4t. ݳK>KUf@MԬjo$n4omhK ߀*+ f;)0Yx^#dL[[&Kl9&g1Y,֦&p`g4,nD\ubR>$z><Y&_"5V%ͬp, 3$$Wp8U8QDq/8ڮv}Nؠc@nE5Lɪk>'2-Aн :3ksiRgqC (jD#L8%9Z{9mtv0bb6h١(HϰYHkaÀd3,C⸇Ȝ"ԥՌs.#ut\Ee> *"2dhd@TͲRô)$GChz_?0l3Dq變^Zk:j\~9R?}'PGzwEݽܧ ?qR?`!hf[M?|~e O{~,gLs?(e u7x~SNlٮ l.q (`+~bi +0 A?mYVU{r`d9#ݪ" K'R&FFnS~b'V6H2EKlod<(Qz.}C(nc)()t ĝȲն:oJ_p@v]>?i r ͻVԂF_ŒY*:r%Dك" ǘۣg?}@_'"9l;,@ZT|L ~Xҷ[d@-$ynB*%A7QCr`%{EL%$ܤea73AU4}ٲޛr ,InT/D@70A@9jo"xc)_RF|.zavJl`6Kn^k>Z sǡq c53wMါ:nITT<85N fDhׅ@tfoƠ:qPL| q?MG]8sZ I1,ajNҷ41lB>|GS17(Рv&C퀡*h[VpE6ijw[koULjQKYFӖ m{\꘰Θfu`R*Ų?9$/[pYE(ι꘺X9 `o_7ʊԷ^SLT{0:;;R@~)jkÅ~vͺw{gid[sعc)({`dlCЛiiM-Z\lk LQjjd0v(nޙ=6Ucl` U8с-- zFz w*.XMmO k!VMO`+=&҅/'*u,S}ȭ& ,9/퐲Kth.πPY#|T-1## ,,4VΘ[@ rExloSS-Q !2w+tS[\E$I&yκZ=RQK>xNrďMkx;3< mtw.觙2Z*!%BFk 6 ;R1N8E^JHPNہ)ZڎPPc* 0i1@B!ow{{==Of< 0ȾĞ1c|5%#tN[U>sZJHF@1@ڿeCV>~!!`IF fXT[qAA>֚-ݖOGWůzpQc#5n clg@>q~˴@2ly`Ob^@ xkvc[T]39(nK^tuxVv6lҚ&E'%%@~c ]Bl2hhA1w(0EL#mv@¡<Ƣ*yMU`A˴yԃ/Eͧ<|vfQ* Œ9瓀}b!7@ $Xw~${[MMx~O2aS;b U {.cL7B20[Vah1-7f\ W #h@V wEg+;i:mE%!G[# (=2ᙚT& @."?.h144)- `OH?YI2ancqԙ":n>LLh3+M:XFK+M}{V5wv6lX+P3;ݕ߅&ޕuK~~B UVz/T'rz2 n)S1?# m֚ݮfuKȽ,03):AޟLҋdv=֏|j`;x+ԳH2O%z bha 6igT h0Aoosq:GN|21yq(Sܶ+nP^;AXA{ptԧ\0*ԜuH1y/*|0V# 70bqippҦfӡj&u%Z),&MO0NWlI[,Ƽ(=>U-.֪avmI:jW@WPu.xV2-+F\Ӹf7Pk2O^r(OJ0;5\j8ˬlv=ۗekoԊL]SQz蜷NĤܬeU@hv's8_unSfu3]&; ھdegɩ[ݯ}_Zf5R|I:~ƭDձ44jE)bSw\ q""){abB@ZI^_|.>IɜuyK2xUjdf)l&{*n,]mW-FmwkvyT2tT6 oxlN:i74Y6jE`^wEЂ$cf՟;#<9PI 8O6r}̱um݆DV -CTNEPlX%xL6V-`&5qfSyP\& 9p!.lpp^D҄iwD tWbuΚ_$6{bbn~E[]K; 6s'&0ipB9(% 5MǞuY$EKo)BjN,ga N/B/( ִm>}xAl y\aO.Ë:d3>m 61v/(/.[&NP8itHv"NUdn~cjI#!.rczY$ceF`#K @K N v34|7f\>tEdZ0`nkYWVxجs-쪭@OU/]0(5(guj`o\tKٸ0*JWT7vh9OˣZ`@㑆]~ ^ -Vy@ h_5[-f- KC^WY GJS -@XO Χ;Qtd0qȵ" '/Y6ߦ~N =J؄MQwZgZϔZ~Z):; :5\_r꬛@,`A@KБ \_g芯`#ΎO OwIfuFqto`zϹF#*- l;<dN#wq~NRTw[u<^`g~*]\&,bE@(i.w&QUil$–q[ q#:=Nvң:ʠgV{l]ڽ֣:#δL *("$}ݺrST*U*;WUI~kZH{L215uPm?A%)PV X6y ЭOZ7RsKrtDJbc ]ee#}fxĘa}īWc`"AN7Pڟp{d.};>/HXkJc;)%0x.QJn&u;0mMo|s)v~j7T1Sin'7GC>viLa/V5El\| [< |쫏K~U+&dn`s֕5'>X+< qIly'?|t&br )6okmɃXstLs$Lp?'bKU͘R{7Jr& 5?vb@_wQq_MO\q>┇t%Ԥ;D ?A"|֤[;-O7yjl qvwv ̣)^h1婏Jo˘B5q&rcs8۱D ɓgl7H`K@Owxyaxu)_RDf~Oz skyR=Wh NrgiafDN=C)FXP;)rBxʆnQAF Ǽ w&Yf2ɤt;>B- RG)c9|K[2yz¼?L^Hn`;[S<0qyꐾKp?3 ~CrIN'9mB z8$'70 S/r®%:6(z9&ĘXݚ3H0MbH20`kcUciW<ݺ9I<Ѯ2̠Na9]Щ睯G x85aw jATQ%H¥?W٢2N˸?SW 's&][昱)lg@[v*ٍ6tɦfnG:;,ޫj]^ ѫ_A*Mo=PY/^w鈘s Z'ly;Nb}O-/t$̊6G=]\R"_ey@]#vmA d2ل'姚œ3Q(Yy $&N {JR>GxSZZ* f7+DC d#uJLxTO[LO`0tٻ+p/\7hQ_[k|Ԍwz#4U+UU?uh6HՍj }Xkp2Ta)bSUy{ Hh2aN4D3UlFZ0|ҘgV9RWQ#~'`Lʳ`ũZ?v-])D.P;(ڴfo|5EHdW[`)(p*u>?Z_kjiD; F__lCÇ K=^<ڷ(mTb?l^/8Pn;muxdƆaœYQShě#|/6g ߽&0V%vSږw;#y^R2OeZ@ {U * I%'TbK}#k#*񼶪|qWJmH3 aIkӶoWaR$_X0vUUu=ɛ߾32QWIhi~xp}Օضa?ZN6NPC"o׊6T'^yT\Mw-Fc7Rgt[+`S`. C+sfR\"  8:qi/Luv^&:~w8bK)u&Ht*XSN9.ObG=jQܷekꡃS)Ӑ,Q@~q0&]eaL8H>4oEtlRc-bwbKfgN'uح5N*WJ^lJmcʦ -E fC9@ 9*]0*ms`!<*œ-c7|:rq6s'Bgz cqE-Az/8Օ;b3I;^`"̧sWnuf((y=O[}m72C 7([JT~wMx7Lߖxl`˩fvDTC|RFem.VdAkBdZ],H=oHHf^URCW;cILĮ0S IMC*01=zCefbGPyluF1eT6[;h,NWl k^L8EjjES}DJb%J*3ƴ1X^nܩ2T b|3 s!i[NhE>B"w^bC+Am7\>s&=AUB?tKp~q0=I$ ;6:[9;glM5/:gRVk}(7/O(^%oVQd骻A8(a!))MzPAFRGk?u)ՎдS*lL#su\`?k KCF,FDmKRGޯX5ڧȳ[r=MF[[-4v7;?Zډ3Lʁ5w _ Y8rVd^|P j07iя?5F3/=q ^}Ҳr_*@ 8ɥS~_?S GHqR7Cꁋn66dkV>VS6З @M"]2ޜm#~M`l[Vfk$Ft$"1$*Y>o8vcêo_obZl.Arl^ I]/6vjmqC Ii]X[ãa{qpySEGiG+Ro.^%j|NJSKPɅ ^KJAUj#]a_v];P#Tp Pqq6Ԏ< ꙮ-5.JW7V8~*K6 'X_cc iF)?ɏ.9h\׿ -}W)&H&&!adcC6)+(.t^ǻmyǨRM*A?%`kp_"t[j{#w"VJZiRs5 %q9WS6*jT9&ØO 16Ox?awTm&j7[nM$˔WtB>dYGOH!"zollٗd"kRN/9vo S+/mƧ?Xw]5p2N& 9 )*#y$u : =xk8;> <B^[g{b FgmV?Ud+Ɗ&0Az~-$+3Kl ğ.نwxtZO`纀%}p]yC=^9H#c ̳3nL }^\?K})$,H&<%-luvN{J3a=|JCs RF[v21 '*y\jND/|&^tcvG]}n^G-aڥnUƽN(Sh{@قvуp9*<ѺdQ}?*^&&)|V;9Z\G7RlTc+8q\V,d@ekO:6] lb?fz*Βǟ%_sߥGh|l].*qbU+0>`ǗkRN%R1^_$O'iSu+U?Ԉk a,7lR¼\w"1IYb6j'h,j`vs2 (Fd'6 XLk4pt9? Ri@IENDB`youker-assistant/src/res/upgrading/31.png0000664000175000017500000004070613260315532017325 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp cW=IDATxbTqXp+]H=Vy1Yp 2y)C в3bs9@C`|.6fo噙[* 1|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #1qTH ,kZ`N׃7d^"եoD 0Ci +X-6w~FHz7ɆâLe2(3z ,B>BᆃlYάXpX|ԿgyX v->_y)QY\b-jM 5§ I@n p ^b<|hW_#Ua`җ9 jE iɞTB{m-ש52wyvzP9sHa)) F74 Hñ9WR>3%T!JRRƷP% S#9d!q`!-q8M!H #KTW @ Fv%^>y@X: Z h%tF@ؚ mXtp/&-,454?y;+a 5c,}z=b xWDJŘ$?Nyq,5fm!%i[ϋxIW9v8WG Б#F)%ުse9LdW%)W[Ho+h$ʀ#pY֎ M(70/&In9 nJu,>CZ(N"xT.A~24~\edhp[[a5.戊 Y+4P=ZE`5YXh?O, 4]Ei=x.I3PԝY\F%.:-p\EE>:j22UT@U-2Z´Ćy,GCp4'0< ߌ2qpW&3]\ cR:3w%ߑ~ql|IeNzTsAf5pV޵nzɗR %;382\NQ ӄ,AV0{8!^p l-9YaHlDZr6JV~*E7)NL7?zķ 7fXKt\#43b>EZc*t -v۲D140A$G$1 B4*QC HWGhAR(,ۥv7{޽3e$7{ޙo=sw`k[N|I7YC'G`ԑջO$9l 5s'YGVN lMd#$]ٞdϺ֏+J4s2n_L԰dɶVU{oXzp53iG9 e,ؠSG?8H~:צ<˥Ə"H|tR5F)6b@&S έ_`lb;bO@< y'%@_<?/'EUd`FASKXBc L9rvSA/W{6 =kCimp Yc l>4bx_`ӓ2c# {P$XAJg/EȌ %/\!JSt}InB@'mBFJ<{@.|lʱCumdnv!췌(4_Ѳ2AU4mYN> r mI͂" D Dc/fΒAE%$`sWk8{So HZZfhx _ O4AkEnRV1Zf v5NGf@x!vO*.l'>f2*>>ĵ{LbM)72v˙/'4a!I _dIyH U搁9zc0scpQSB6'k!qV^~3q\RVVK I)U[; w m ;'OFe%üɏڧ|YcL Nkܢ0ɥR2ѾVi:}BM-L2NIΤ)QtCLOKӉWU/qp$\o,;e!\kk! &NJbE>-5p-\ :Kf^kmM9V8ɢFh >(,Y:]ˊ)xYYR ͚uF W v87kl]S=ns8{mk^n- $\V\AթSG9M+ɪZd̟)2PA݋fnأRV1 :6Ӂ, :oYh茊!}97'AVlu瑛bYUDoUD,cB$T;a5J7[yt|V7O\dAٗ!+B6iSt?S7u`V_\pe/G_5-88X@2)Nh\E;``1īrI|vk̿o$cCMꄋ*V}/_=$hEq [ZZ@Td nqaDM%O[~6^'c5W>1l Z;oY6ͤR6d0sl/_aC@?? L  #sjc;Bth.πP#l{̝<7SBwaY `Dw\C?^њ-2'FkU59RsY7i7a|v=^=.?OGf?@TV *n3J[%3 x;QWQ5o&Z Dy wCXa*EVC\ܯ@>l>Tu6lp&wP=vnp-UҋZ`[ C=,N͐b^Q_py fdQ&(MwD|^o8%CF!I~Qg378i4oʇcdm]aUͮ?YK T0!5LyW eNZ+5*`ge19ì )ө"FI'(%K˃V՝ Ƌ^qr'0k/hw8 Yӣ'~"0U6I9Gjr608niI8@|̖Õ\yM7L}K:YXlNW'6:2'm#ldH|gwZ=͘w`kGV|D!_p+q윧%roTţWl,ݮPP ܙ-#C8zdkprΞ[sB w48Rxwl|-30xpf JfBr,VuS!naeic;8ΉYLZPY{Bod^EZGJz ACSU} qD=_ `CD Z\rcKb2'Z}ms\vh2kh l: cy_@f`Zn5ի_9H xML=Sѹ.)bZ4_oPIAÌ/+ o8C5{fTS}lvt=ۗbo\]#hET;:T{|`@Zlhndi'KrnHҤqdǢN׽4S9us[vڍHߺO=X'䦢Mg)Է# 19G 6~j$ێ%Kq@c Uyt˗hB n0qCOT$״rcquǎ/+Ѕ&g&qXlN]j%]]]u*!Dzdy u/U7ǔd ۚ!%)Iti>G!9*'UnSLL `zy8]+w$+wʄʣi3pycv +)iꏪ_X cK6=lN؏v;]Elu!| >mȘǛ6cڢo~D.hhY2I&fy}Q*M6,\6LE(JڍvM'UgP<}zz2a;^ 䉨j]s$AU;'~=jy|՛Ҿ#qF aZk6%~cM)lN΃`?d2B:/ڦ= _ CN2(3KHVt-7V&H/Xr RW1:I6`y ?s:a96u~y>Ԟ=-cAo(lL#tm]DڏI -C-6̋ ( m1GLVMx&Ub%'Lr:\8ἰ is{#|B]YB*GT:pg/=1BU1N7],-bw;t52ؖ-Z(̛I 栔&$8i>֬"("d)jF6ЃXNURsd: Qp 8YTd}AijM?}"?'<^KgX8'wqS8 p"0OM5CEin:хCf 0 -PNTdnȱBDު!.r}k}Zzit En7J y~%eШt V5/ݤ7|}T!T4F^Yr%4QZ lΖꎮ'DS`"D|ZjHGE_^7}D6?[̴tm7yV8+<qGiN$M: rZ2?bւM)P+ՀMđ)b5 GF `f:X>aY)"D;^]#7uUqdgYn@؅]D{Y:4Ppjal` !GW}} 'S;4W ҕo1̇[ݯwor.&`v@͊;PnVܐz %TSP+-.M̾j.y/ _tH[Ed׍WmuEY@nvq"{1hzŋW7KA? VD'si͈He_T7JEޡSdr3j~F xH[qنtje<8`&g D+*<}b.I+-}|yFbf%l{`Kw2c ۑ O|8H/ԡ^P)}š&)+U?VW "PyUX0)tƬ54vEbx6zgl*n5(ΠK]&Xwe=%*t_np-4AH y 9s.WRvdi@H_@:3yU {nCkk4'MRz¤[ߩ5EY-mӟZT]`R!ZC׶=}I@ĝ%r<8(>DS1ٴ?,}kҀ-AM }૽Ǘ8<^dTӡu(& 6 kl %$YUE?EcbukK!aÈ!M擗ʫZ{վR=Vp`yk#mrt OpL[}V낶&&:AѮ2̠Na9ޙt;O-AZٚ0j DsA*.WB!PO^1l0U۬1DicHin=i`#r{U~99 G-h>nlWm PIMy dZK(Xnz drߨ,!?oj *ڢ_I N%oBUlAO~nntQ۽SZĽ&*^%UHC,X[ձK} %V̜6o--Sxxqј!tmĖF]탺O1xw}sPSf$⾧`orA,͜3R(,c?\[]OO|0!` PL9J<}Oiq8|D) Ď/7FoUq~}JL71`,@E9x-t31m3REɐpc޴Q[R@ pWBVY jCg##YȄmЈ>Uɍ{ad1):#˨(~W/&tYbW-a|Ydߕc)DU ݍ"K*I Ԙa>%SMy frs&7׽[ͼbwg#"{om-ځm|~#Gvz45:2EwcOH>gZ2РaE^Qؘ7znO.3U]s[ʁ;mp[B+D/!R`I}ٍ{J!fS/l/+JåjŮ} G|?tЬ5y* ukKgJO*sHqbV8v?f[vl0Wkuc*4ٜdg[l5.H) ښ'y7r1#`H7u֕ػc7ZN6LP@*~F?qˣuhZ[nV;#~5rGL,D 6M -? 2gbiV^@5բgi'.9Y4,_V+]j1Ɠ,y`>ܶuSY67][̰-O%9N]'Vn]<`@dk\wpb: rK%,Cfg<1N/b>7` i "wͫȔS/#+]g ~vl )Oq2^ż0?:bb'I^a{toYrD0/?559@e/:@n*EW% {3/̏R!-N8R ! ˍʒ{-׆} _q}nS7ͼ0?̓v" Lbz4BqOm tJ4 itsEyb~'Wm`XOбxk4fWo.\ [:օ ᗵa.#&6UPR`G@3v]nf@ /ʣ6]?p ֘T5bsy3:x-Wp˶T6v~#Subb'nP@WC.>|1)TpM n ϗkRcM9Ɛ VUj ,? &K9D܏_͟2D`l pR l:MЅ-\܏_q5̓%c=QY.;Ip̠"369vRɨ6?-VϚy܇'?(\8=`Xjw`8{cymIjDk^ u[ʚ&1Wɤ7 R^*y*`0^!/:Ө;WSp6dEK a~'7Ē]6 {z-՟N>zE2 E ]ַlᓪ\!$! b܌߯(7Ւu`,CS.3Oko>lY]X?7v+Dqo{ʼPnM5ĐұC?D-E7iQI/uښ0þJ]gAIBq~otl1N=fHv[kbVwFK,nJlh~3mH[moMa)JVٕ5Rgjc9ܯ2Tab| s!i[vhڤӇ#~cV/;01ܦz.:=^Զc-!S ~vɖ>`<2 !vS=3Eop= ,}(;WITYQl̈́Rgd,u~q$+3n矂l1qnp lZCU QJ쬔R(2HjDML$ `Y#~VEuwXzM+Z!dPfWa~tyKR4gof_y}$$}Uz&T>|v Z!]1:JqhnG7dg6α*AQWd{ %=JPnQewzC!knBcv4pèȗ_*mMb~t *XWۥ6KW~ ;{=QJμlE2 ӸFeÆ*PPb.{?\V\:P/|&.foN7RjՋ$&7- +v PSۢ%FtBĐ\gs؍OcگT=̳ -p7:)?/[9La!,Ď샚ncGzޓvx~x<޵\oD& W5אZhRmxET#,xZϻqw#*ԧGsa%mJ7Z=*5t?(7P9 ֪r*ri&cԶm{|۩&o;Hl~ ؆Iϑ Pdr~*2E3{kf%&Q%1xtKRKΖ/ocË[DrEWR439!$; )f|es͵S`[>^,euQ}.Q]dki|,~ҹ)I`"G?P5'M^pb~Ŷj1IJo'HPG{M %xOYAq'=il;NEZDqkՖ^ć=o4-  ṫ_ckb^H5*_ 0&*|g19eO2#;>Q` zھ. p'&e˫ncZم ggh _Å8>: ^*&{S7?:Uzis 1}~ +W:"c'ng0WUabku8dU02^>t NQ"ޙ6kXVׄA3yX}c+੦UK#SY߉$0Iz6~|h^]U%Yx)ze[l2e`N5Sa6~)=+`|W}̒-湫VܞR<KJO\?%Ǜ͓6}>/ɇٺEDcmب dڔ%(^$=ї{ Ir>Q#|dHrXJMX*aP ǜrfIȗ9KE?SRթd; Sn~vkkUBiռIgF`Lx2!ֆ1CK?=):tվ\׹tFcR!D{^PTB4}H A_~BtJZ;t8sE~_5eR*1=&V&Txi\>,KT'E|;idG~8Z Y"s- x5>'Z`"hzIOE|s5ыza⦉GvWv< ~}A>;Χtw֊VlW_W6z|qAP^P*T ^B?{uX,܈q;}A|9=e@R@ߴ^l^rPn-UPQqA f}-lSiwYё3kʈAPhw O`1$zբiHoIENDB`youker-assistant/src/res/upgrading/7.png0000664000175000017500000004335213260315532017250 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp J6 CIDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #F ȁTb#bP.ʹÜ@` f[_s2CAJJlc 59zd0\W `5 b$idTx3f,>#`9)`5 sh(Aw1p2~5 dx  c"hl0՞?R?.l(|NVW` T3O0 J^w A }!܁r@ !PYPtX"#Qqv ыf[H os"?/IH&$W\"'՟߾!EO>o \'\f6+;>eu==)>M8d .o24 ;Vŗ}bbÛđjŠ&X&ᄀwL.}|&jJc4X1,A.p53+s'3Go1]X3zLȚAvO=TEypZ\3!י C@9ǁ86/V:Xgy@l-5 2-Œ v"e_[D8U⫠_yִۢ^;<K=Hʨ w]azu1z/ })Qom(d{m-שKP;l=(>l)) f0z"`\ J8̔P=+JIBq0M~)91Q7/e|fab$qa\+XB,T2D5*p+z[9m@haA`K gx1VaTJ A8ѯn*F$&z=p%\-6|c0NjI ̀;|ͅg(o^c dXj "6ˇΊ}3C-^)c8űdטɶ↔Q| F\$o_TN$^)@G`@>PqΕ3?99(\y }Qc,FYPr``|h,9믿+`SȞGЀC`c@kakh!{0==.>H'1[+869(a-AqX!$tAoھ?Qb` ͿDn R Z I0DIHlL4F 4R4 @BHm ww93swLroΜ{~s&kzP+xGnkKn. a'8t:_Ll߸}JH,W$q@`uecvV]^| GŶq[քzʝ'[@֠9fz#O*:Zo}w7nd|~Di]p.*ct2\kH\r\p/L&? KBl!bWxH` 3ݬ]+\%2Z_)=_]$hUb` y{HMɲX$W怗tُn^uS9:TfPTls 4%Buf|E2!U*(`/{{nȞf39bihb qi1RlLJ+)]<tXf 4sMR& #u'7cYASedTW8 }lҋ}]}QtjkV:DžI;'t&1ϛW.Ѓsvo.8tDA-5}Z+yR giy!P ߞ"VmXK Lb`Ҳ3XG&+G=3S.>8dfSQZ3"]> }x0\$f&FI[9vI*P+/Jqg`AT{f{l\AKrVTJP}U[ >q{2MxV_Q$K^J1?t<GOܸ6alׯ'KԉrC#~} FQD]Z4-+@$ &BH@(1T b& SS@"E/-Pj-:ٝ37;W/ܵ{;7o޼1a!x:n7Cu=j }}@ULw=۬Rl:TFSXIP~ݬ@ z/4 UyKHl<6 Ds2ހ]9)rxiso XQŁy+v&"2t>I%u[z |j4v'tTJH&EI|WMJf~ei'w ) D2X)nv4<)u9؜'n)>hbKQ_/Gf>)Kb6L-ٰTwGr$mIr3п^;mbKeBKRv*ۓNK/`Cjo"&"o{ 9 Wh6?0j`bғh`VJ 62Gq `PɁGraTvEwd=HS. !.*j.2;A|!QdɇsFc? zRt@c/2}PPw\6WeD0(cMUOtTEmEDᡴlmA%ZmN * /| rb(\M]_[Cjە݄a;:)hچ6${$RD;VVGe{2~@776kl2&*2A33#!5#Id唎;t{Te"NH `io1|+eI>$pW 9; Ko$IZ j-]dzB@i2p #Mg*zNmm$'o=Y5Ld &7UM&F~][:>Nf2.?=Ƶ{pdU/)7鎞?4o)Wot&3כ[{kޠ`0dSuj^rN?Hhn A輬d_kT>%W1x &7k\5L7EJF#WGQjjdv}2tf&;Wen!S\-(tJbE>-9p.Sg WҲ ,:jA.4{e!~p[9DDQ4 8M&n#)woq ʼn.h;zzW#S̖a(l; KtOR1qqZ)VMGP̾+Twtw| /{l_EDCCm>F6}a`ڡյd2WPu,+F+(@%P6YX>h*/q qA,4;_jlbC%'o( pN{X چ6g 8GCeFZf | ccV{^ێDF{q-'":.0v`rElTMA=%"RnVcrReO:/X^/r0 FE d_Ɍ#7 }6z~rjE&WNV:Dty |4.eD<)N6an#,s)eO?dYb~K[ dUN!]7\?T'\ߍ;XLlٱ1'U2(o<#cj9(DT`B^*`s[ $?Wpe.no͛(ЋGW~[mǍ3ZM*`w؍GCt/9h|>@A~ʵ!sdA^Msyc荋6s!Dc9%R~v4 M9 95sNXnM@UI:`sͽnFX[Om?9s۱`523lK|^dCEfC^C"q!`:m!cYf̈g# Brn֍ܥ2Rwgr|Q%yxhH#rVN.숰(y Sޤ5aOb,HL+I&%;ϐ-==/'5|a%,yhve &V ^=Bzs 7ұ`Z*B@#AG}R`hkm--V T Z[#=-RkTģVPj$ B!fg3wqw%{?0 vbDzå@*S @LbT5΋xn." ڈ[b̦^' s̠Sȸ<)+|9)kOGɜ+{di%aICY ?f: ,Q `ƳL@]cgs=t)?3`{\Vժڴ+ȓitu'֌h΂AH` 䱫Z EAyRM6#{W*$Dl+PGc۸rSya/ ^KA1 _A?^>,Rat>"sn^dxg|#1F^'pΞT*p)H(e1U!P+&j>L 1WRF]]MZ@C5\ NRs(_^U\8xSھ#vb=$g0S Uu4:9'wN*"DQ8J"@C$#tμ7opj~,N{V+.j_2~)U+ݺ'R6 8Pl>4FbĀeZ. F};)>Qra<~$x beЈ!4 6]o"_mYv*ddGGL'#Le: s@J@O)~@$bPj gYa)>lSΨj&mӡ3vo!F8.|{hC_Q SM=~%ʌРFF 6Y5cX6\^Ng(4O@HөD:/qSA7HCڮňqh/==P)~;}M yV` xlwDLUK~CChgxx*%c;,ZKt io + hSq@g:lr|DZ:H70_ڪ.fHxGTQ_uuLoʵG.l-(W{IACI bo Vn˅uq}3xKU>5# NtT'M njH) `sP&A;P^]*'t1e:u'ƒGH: c3q(Sܳn/i0^g˓;AY[}иsp: h!WajA<ś9Us,{.} u88i;v 1xH_K6)Fuغ`i j9i*1}jd/# YWbrrE[W@YRrÒb7Wᖃ|F&e?Lhб 1B l{"v.^0S\O@.svRU0f# :bPC"WO5BuQȞR!yQ\,qclVMw|pB *83_~_j\SV-ѥ[w#~Q RA4ln[.7\TsLُRoI;T?1+s|2M}MQga?nwdr"OV] 6,5l>"}.#b&n=̪ #|i0Nr*Zp܇n8WQ:X ^73׭3tr][Q~Wg_ԎIX_otפU@hVw sϑn.dW=ϥnqd;4]7.99~_85Uj} 6tk@M'#g0wT&=9R\IR!6pv_c k:4JW}:N#W?z#5  Ԓe|nE+Ѕ!$cٶ>Hp`{s1^asnK`uTF S#Yj]At-oINSFl6H}NACrp^Zgi,nLuL+q (_mwꜩ)-\G0k?˭`%tU3bDu&uU46^QMHQ~NRm~{ӆ ]Q=~MZ46& |=Q^eWL~2AD\>OT j0qb'%#)&it]ۅg隫E_?6aմ <\~9̉U\2A{Į7cQGaޓUbd3=Pi7)3 Wi qY0|rWD8#WHVtH`mպI"''EMJ/w 24ȂK9 1q1k_]{곢v^yG܀?2*&[9/ҁEL_२k2_4)5 8ە#Xy =ᡙTΝ\4'Y3sm7"ƭJXSl.kAy,˛pB9(%t)P0M(}W7umg] D!>P* z)>8XN\i ?ń &K} lPd}ajM?}?^C_![2WX w.5Z=1.nv:dҐÓ}lz2ΚX(]:;P^eˈ7싒TK6DV6U1HXݠ7ξT`R w^s0Xc=m 71rΨj}8o-4ڃǁ1"~sxj5cp`,|H^z$";8NM&.8W(R\``s<^qQ[8Dt8^=0_ߡ$wmQ=хRJ@C?Ji 05rg' a"V7QϔOh`/T'0i"'{YPGF|[lkx:#5Vm6_d&޷.:]xLJ;A"<ֈr%,^_Fn~(z~qBUD2bӏ9LDyu竷a1!ۼ")Q͡GǀS,q7p:bF9LCoK\H.ֶ ӎ&/oˊ#{A&,<oym>j#ume~)d=u$S^^E ٱ s# Dq|,kύJ4Oc4B&Ԗ0CWT ~'*[&Lj*/Qj%Cptw9ʣ$W590yJ$.T1s/pc7^W>W( PQU_ .4k!rqK /o}0gf`pl%[x[r#hw88yk#S8C"GH9Eȿiv̀ahAZh-s-a~DPLێAE@m< +Wa敎I恺|qv?H?*0c,~^e>eH%TSP'*-U.Jqr}qiƱ_-A>4aA/+U"\%r Y_dc~*qBnRyS/s76  `K@48":]Yl<$oV8:sXVVKN¢B9OcK`K@/O 7}$zNYNl| " /]] Yзȗ+8j w4.+Ug[WtWӠByʻ&풸 j#UlSHW>D3Xi^~u؆C}aä9ЬF%@Q;܎ Q:Ғgc˦K/qr>AMjt&5k./Z lJv: ,bcsE QnYpʺ/ӮwUkrW~k]W]%4qibjJ=7&(9:B4"GۛfT`1+VrW( D/Pg.e )l ) q50* g<^ &nzQ,`- FW,5VR.[E1FQ(Ax~!~3`5T3V Xh:eJO6ZTD0P5sLMV* C`bEe EH$ye~\`lh3Zeo-o~mj%`}4i@[;{meځo;\!eC:A`hQX"U6suo}/]>O Tޟ3iBڵiM1qe1S.H80`͒ zPHu WLEL {nS"ᩘMݨ<7O4 4+=|H6e橦!M*hPj\$04KWaD"]#+4[kc^)W8;xW6Rc*p`%Cb'%-Ma,*,wrnKN_QwD` ~okUUW`vw8\l8&՝TpWOry9?㺙v;opK㟭1W#sc- 2gL[lV$_`‹ oxm SdM]Tm"c'^upZ.9\NK` ?:W:yO$2sm+NS7hES9r_a\kbXm݅&쀩$6>A`89,VlݬE:QxRlAt%,Cfg<1 \#փuq vf`.b@W9pe̦ͪd@⥑9.P )Oq2^źd9+>?,jwaf`YϚU 5M$bg;̐d:dg݋ib*Y8;ٛua}ڥ]lYuY[́b/(!^** 6XۮMnВ"@ȑ2nUiN4b܌Gr7NB&,eXtH8A]{,)-;8ͭҘS /2l?$͛֬(MX2c6 P7FE"*%RGo.PY:օmuB&+k :GXJ(rj;(|QX[52 E+=n8Xb4qk *uǛs}x׎8زIf1U1vp5`O<=!gk'( xƟg[.p,a/N~47g-~WtWm*K^U4gG\%(~%A}vf-;j&9Nҕ^xyש9oX b苋uG3c$A|rG?1s0 qZ;%/yτtF:XQqESD\|4rK7M^!xIe]B.m(~}`ѹ*3~ ,_ p'_>="ƀe[d;&ګԥ n"R| ?8 ť:|K*ZknM,ヮ~Z3"v%G'k,>Et x%k,_/K,E&WE-Fp8Ykdbvmś7ij׏&݋˷% >ꯌ{԰M@ocБnѢu QB 2b4|=%]{R&A p,L%/_X,E u&U$Pub8W;RH\=1'S|6 V G<Vp(tEde:]~IgcAٯ\eH1*] 0&(Ɯ16d'oq͑zH@!#V`DnenX܎%"ICƿx*lMNA[\'ܼœpܧԋb 4>}Z D}*9t~^+4z^het܇/>UG"Ddp ХF21[|69) 豎N7B89 SDASW$??)߭rc8/(?Pyyem >W_Ё+U^ Wɗ;KmkZPyQDv3N~f0:CO&y3!B/B@u t憣]Г\ʸl/ԟ_^I*V+:WmcvÓCem}6A{4V`km߯:#"q\>yXysQ4c`&!=MܹlGtzQ=Lnq[8ȓ}DNKHLYY>[r ؚn^)\"1]b岏IBeZR} 0z/M'a8hf{bəz57{Ko}45a="WkYDL;"*uuGӤ܂Vr1UYN1च*ΐǫ>ɢ~\0S'~f;~uHL[M%Nl(([e$ٙ%xki1("HG,? BJΚzygcY)]ŞL]M?պL[th!:4=axhXYY0 |*#v^2 FK*lȵ`12at,QvIENDB`youker-assistant/src/res/upgrading/15.png0000664000175000017500000004402013260315532017320 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp ZD=IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5cTn*jpÃERAg r 9|zvr8v+jf´5}t~@6ldYR f(b, 1>S/?pfB(@>~ޕ"xl6qSFX!D*%WA `pχ˙2Bxbd s0H.yЦWXMt,ʃdr)qZNggK3mA3,Y4a[_s2⭉``+ jC]E+ہTfoZ}T ئ e4po¾x3f,s=0?)T fE3aZ?Q+bdeF+k3Ȓ!R2/E7|qqifC pMy9PjSjۯP?| I H,3J\ʊwhn˴D;%8jEo\8%;'5Qe8#"Ͽ8ҍ3otCGNȎdRiMBǦ7^gx5 (z;͊ŧ3;CGs(1͊0h#*&P_٭'ŇUWpG01802Vh *N볼oR-Zl2brX60 %|RI3|? 6v:X;J(~ `wU6"5.豀>rw01Ťefk.Fm!Cn S͗_Du@4*Eo_TN$ AGÀ$éZ0tk*nչǖ,-AyOp>hbU]n~~8QM\!q'<߼uBd V9P9u . *RXlϴB8EH֊PȂ}2z'zp1133 k'n YP`\e6 X6iTqƑ{ޯˆ#aa0b,e46uC@v"uMMlU3]0FV{^t~J?]mRBr$hJ [GIw;˰&&1lOQ:v108 AAp-FQQRG0zP5`""|!&*CJ*@ m"#6 XPB*MDE(=oogvgfgLr^oowy? jKH4zV~Hk{f c݄Ѻfbٳ-{?X=;& :mxOelQi>JO(DN|<));mIR|"dCJA~GAUGZjx 4Aw k.kMSU۔œ0X kUI0|#u9+ec?|Ӭ xEqVnq /ԇ#KYt@+?':/ 4*)#텐)MJ^NE;"+@yddNrÍ35iIpܹWzDss^^ӀLG*y]}mxc Rh}Yfos.5ᄁY=ehE#zYv82?z :PT]!E5~Ņm $sIdCom(rAU0iL޾Mbjʔ_{[&#!45G.h]%q$C ?]*&3sFT oUíFKHk,>bG1y0OSH}*`8 Jϲ^`K#7`r p4|s?aXv]=π< X{Auƨt$ *a&8dPFVioiN}޽UۍYW>ƺ50ucEŤ[L{afmMv\o+cF !SL\F!q&=mXv2w:[6PGa!$.AD%s8Dlg\fE6s1en.+vTq_`]΢xxa+4:EE%diqU|r̂ ?*SiF`:ITB~=3I Ę@%$2dF 6Zgld=9*&?:؂'[Ws$Do z6||@u`jMH7m%e \s%W6ކ ]QRe^]!Jg8iirlf5a oc9 Wh!RcKtN f8Is 6< ֛>5n4V Yn14ՠ^@ ݱ[ SgnZIx5 `Yx~ΤI@shE9<]hE{ Q'Aw/oJz,G$ +% ~bt*Vl=h%8J}ϡ:.J;wqlBj:jإ*V ;BX- 魗U%%Q&7OD҈_f < uCU2Ip_;?pl6~v^g7_צ)u5լNbHt,X?H3•YoR32 Eٔ$/XaJN`tE +#Y cN?6RAU/=u<&G"5H%,xb*;t KW/ ԂQĠڛ +w fyq\p6- ,;'&ج筬n|QPYu4:HviXؒP$W~FdJ2q : p2bth>aQ.dmgo/Ӕ 94ULu@,_ږ25zp7֗X(~$hժO3/Q ^>w!"==dvBM]UQ6d kU?Ai' T?9-@G$7s7&=Mm#=W7cCBiC}p:)nEԵ,z/γ֮mj~wi/l񲨏X6pV%;-\V'uK25hYИl >=XME^ GPl}a LNllgoY7k5YEe"LG}{{N?uΠ7.5-GMF`ymLC Z$9ُru$ pDʚzÓQUQN_uўL,9dxOvY}0%8냺&k =ubbT%:d +iam֖)+.s 1Q~t[u]"/NoCY( /yv .++ 6H\a(<8t8tiC`V-hf/(VX< }̮{BA#u6zhW%nL=o\cp᷈,k*d71;\8tV\d9m]2X 6Ys%6\c\b ̂jo򩒝כ/*:ed. :mڅY RK LiAVj dFPϜNf4zREpa@]8ᦈfx" FeJUu(qp4pOuԆNN~ߍGm$'G"֌9)H"4z(h~@GNwnT5}t+8.!lؘGYA-thcR"^U^rWzx.^IOKsc&jB#E8T~\0L44>CKlΣ`y 'By H ׺v$XǹN( m*F.ꎵ"|1ݓL 6gkܞ}C)q{)_ޢ#(QMЯba @޵WUIBD0шpJ}Q u|TEENߊ#h} ScZVQ#(*$! M=ww9{ogK9=((Rd#f#*oهaS2V#P5+܂?$Dr粣??ڗ@vU(}I%/ZxArm4=LstX > 6 n0Y[\[ELV\Ohx#}l/ n k u̠`{y2OnW Z)QXLK{ MA4@b f4DKDR#*ފ2n¤! Ɖ?gQ_`S//W?,Xeɦ0"4f63b1N_{ydU:$C ,4 }Y9q$3++`Qۂrq^?hTYl:Yc0HguI9"ե`AH Sc2O]VLQ&`hKa6t]պ'ȋE9r3lՂME{j<t-YNuTς&/iL0.&qzԊr򄫞$/&ihs]#]5A/eLf9nR1:߼ALuR|^&ŬΑ6[ rv;ѬM5qyBvqKpҎTtc^UǶM5,>h<b~؍ ޑ7n*>U|Dْ~gNإ+roģr8ޜgF0 8Ξ;bZa{JLy`E"`ml l^}T峤45۸*cʥy3{JrNs[g{wM.(}ӎ  )`тoߕZ#Wn/֑[PhBrVWSI(ijN%3N)7f0 ͹ȩ_:dbWfV׌.e Ixۗr(1~[hf`SԙwjoizQdi`O*g*]d9ay)bf[RP4j*5&OղI.jy:Lñٷ>JR6 U "}:D;/05"׃XJV|;Ԏnl%wpo Zt =_B~ 6eӹvZye2ckPO;Ѯhzrl̩iRS7F=.s hT8wE ǏH@rNՉ OUE!39֦ (,pL!NE KU==V\ի:nnCtPXk~cHzT-:uBju;/<;,0h]w7⾛x90XɦGŒ%o?>gyIEQ.ۻ/۬ # @S[^)cYD%Uo$g]A!tٱ(9)H/JlS+(,$+hvyZѽMR-UizLLU!Cqq q׻DAsQsw[G`eH.S,Ô]ٛӵg+ȁh=. l+8hJs%{f{ϊ՘ypϬaq/<0o#[nu{.a%7/Q41羕 -@V%=>Γ`#_]Zg G[+J( 3+cS Ual'AG[EȸleÝQ+xb.dY|)Rp-Mmb 9|D\艫 /hLZ¡Jq.<^ϰbu(I-fY<٭aN&4 8qZ/7Q<ǚ3iUJH).RzUEe-8TlڴǼ`?WQ,w}{aE+HV SH:0}2=c*"}yR˱ m®L1-6a}ʋr@?~߇Ծ.][tWvYB ]&:CYQ%*|: u^٢ :Su7j0eE;’Rs2+!t.y=YmxW<TJm㮻y.Ҹ LDUvise@B̜koO;#"n9O8 蹒:^Oc =dT\Ϝ OlinVM1N2/8E$DTnE 1k`Ӎ,ySF%9$_1fE`޶"݂$ɋD"d}: $< }~yDAvbsZ0.2$Ie ̙G儓PSp]dTT&hL 6l6YX Å=@t8mhVDɜZY؝ ~(_8q^?h+bܪp12gm5K-(eypZJtMG΋*&B|*u YN3$r AJ ST¤ݚ>UI? ^:IwY!WX wq)EP`чLRxh UIz8wu.3 ջ$.aEq $B!`$dHF?!K[BtX7TWF/g]k~\8x{ĭ' >S* ЕÇ%W1kR3G|SHV-XyM7oЏ֌)QP)StJJ&l!= >f9耆 ՠ@[O2~g/<&`A2jX&Bl~qSAJ0!0uj/ 4a!{`)E?Y(,\>ES (xBNXl Gxt)dG<}/8I @owѳef傉zῌoy<˶ƍ* 7qv|;g)El!p't&[#],Pb_S:NglX7g&XV]x`DMpZ`V)UJP)̧ /tnçk|W8Ww6uVyS0$(ܿlw~<|Qo)){RE:;^E???zP'\ Ωt`t$deBOl$[t 6l{$ے~'3uJЉL."oR[C ~ұ]bH ts-+.4[7}42{4cSsvmB#/c>z` c9:8BP|GآG8ؾΝٸ>m|11i=tz,~}({mmW'B7B˄@/iNHPN@_VlcscmކClΚ4ju`{y4{dH{o<Ɓ, /tqҽdYV!bߡl/ S k A~0z}3N _^QaJ foŞO ~0G ]a-0ݜΞbD~iFp6ppʈ#$:NcHЫJ9El%$"z'#QAU0V+ m)lOg] fx03e]YQog ^ؘ@l[{8\RqH`LOvcqo' MF.ݤOvE["U" Ⱥb< TNi>rm7.` n~{K͈d@He,xHodG$:x <В}|z|gTCSZ%=ǯZuFJ &:sN_uaatl&P..39Di}s ܓl5axƃٰ76<^1vӡhQ`Epx"YUE~EҘ$ [Fradο2^^UvZlzdJ`ثߥ&J}UƑuA_ [CJ;A!0pma9A#Ԟw@}i7+Oԁ$ ڡV Zz2x zfC F?6 C(<+[ 1a,RW 1Qa8 -}(N)<iUPfS'jH`ZЈ$bыjPp_7T!2 ϊffAd-h&ap.8) YOA'?<<5k{ wyrNgD'q a^.~lHCx m $VG'$Jh+ܜهXI| ߿]nB}Im&P߭sNjnؐ5oÇL5~ Tω~ui?|,9+1ݨ6lO*.bzsPrvkX֤u)u:YF꯬\i')Pd'5&7GvU;|oYP6QL.po9hQ#EpQXObL\kޒvҍd`rtk@Bi1IgY~RO{⃊5j4l[-3ԙXH! ltWmoJiT)Կv2~:qϔ &xP `C%`&<\UQ2h#9M̔ʝliiLcGYsy;,q7M]Zİw~# ;8wfxO5fIɭرLvXr$I$߬ بY3e 0L;}=yFÊ|q-&Ҧxk 3}&nہА nS3l%5e1Ma6 D#*ksC~@5:Ȃԥ%ŦMqi-@ @?5qudޘóFp]]AW|R,`VJ ܧW~4ǧ&`g02?koXVnBr) q(VCYIq =5\uЋڪ2)a+~[Wo~A^Ż&26 hOpaHz-EDm g9;~i2v&PAǤAش gM5tj% Ԉܡ }}QQS@-CxK{{_>Зq s3>`InCMF^*%̜U\~0%˻٫S=Mq{}A'&E'-+FSbד l}WdR L4s>~\x>JiF-}<`fatI;TV$D4 'H6A/^lQ9ylBkyXұd$XʡnyjzIclc\}lO u~۴A|7y1rT lɮ"_ެأO?ٙ!=JE?YxiV&v plդ~ߋ7BAy/+:LlW/ Zƣr cs6+jtrE" Q?]sPt=mEv!,\%IzUg8ykc:{߻-AΎ>m؛#Uiw>\zi]RF+G$2K BC9]km r,&LJn"&$fڗRR+Bss C unF RZo;( ם?XW;;ևFEYzTF-Z{8˕ѵΐ)''/"27ZZIsB FlxjZ6Ý [dۓ'z>X}~7m_W@^hlT(۸kK*~>~ Î,jJ!SJ8L\{ߺtvbcmU7L~^pOQ(^ݯEպ躘'h)bi.{[ۥ鐐ʠRc>0XŽ~F.V]1S'.%:wLKhR\؉-dH)iX*+ tv,DGPZɂy'!̯Y6+%3%G `>2k̄[|j e_jF@bTGhn)ʯܔ6>uu$]TnW* 6$yA"!zR g xT'xr10̓Œc=4jل}Ht%6Db,tPDt4<6KXTxdPBM OEBA 㗍@ p7#cd0,qÑАIڷU#;{%K\eՆ:.Ӭ4'kt,=bG,,yA #-تn $\BLx ˭ 3lh8P qѭeu/4>SU>gpFCZlUGpQGXB+Adha~+-RDhXQJVjhu ,3xF&Iƫ$Ee&SżA0HW؄Щ HdH}jnt?¥M5\ =Yd dJc؄%53eƒt>:e&X,/)X%5t&+NuD hu+FZ*=5&1%leڄ-߰ͫ iqf Di`AE,< 2˳v{lo5"5'\o@&)>*7)~%3+t%hōkd.,$<1T:VP$H杰 aGz?no&^+2:klFߩ j|H0D! bU[yj2{|(apWGK4͑EqR ~ZIЁ a(VD?9VJ[tZ5RN돥n6bs˨zM@J? ɠ:C鴂p3tZp{``Di_p72 lw s7ut+SS m~f ISѼZW&Op=epܵ[|Oo|ӅtL&@ll 2k|Ca7 FH0v\`/7ɷl->p{iӍ]x$0m;؎̠cstBgb,L(k Д]Bz!!.f/ k><[&7{i㴟ck'?OȴԿ Ugqh^MG(vDSKSizꐔ$^i* $З-XUtduU9Uӗ{,"Pnڜ}WoPYL)0Flj`{ ^)=IDATxbTqXp+]H=Vy1YpQjS@}Ie{gr \l ~3312ηTbx.n ! 0эkzp &FF?Hh5bcfiЌ"`@Tn8#@ s(2)x5q`Oq$w=|-:fT,>Mr-r0 t gGN)11G$g#$x*x@rYA %[,d #u5 1ς\$,`#$Xh0!HB * d(;biT`Pv9Xc%Es"幧Dfqգ4-?v[Ԛv7`jO/@12jp ~CѺ+ [@Q.P/: t %pP(uP:UàF.o[" [JJY-8 Hñ9WR>3%T!JRRƷP ⿩/%'&p~BiF(s4 #ɎCj_CUgyߦZ%Q] \ȁnz@ ]W Ř<'k_RBñPkdv7]h#[ 1Ťef3f7vp2,ـbWc טֱO^>PuVc!oHI6)/%L 7$by? )|ur 'H:|($[u 8Gl[ʕpck8sَj" ;u UL J!aPXDyCDmϴBѫy5 'n` Yr*|Yl]p&ff^^O>`T} h 5Q 8WcaW?PAlG.p9_QU   +ˆM>ȣ kM 9ډ!g"(qr<d'J Hq o1 i{BP" G8|@ٓfwaMLl]:b@6C2t$c?-a@q j[wk " SmBZa`t#BՋPCe`A*‡ BAEDKvܠZkmvqΙ=̙ٱ:/ n JLFME{y}ޛeӵr_kt8{Ą5q@`ݾqD wD`YėJ"Q..eX@ymn=&蠬7O=ܻ<)c)9){%&\L 72CI-P;4x-F^^-ueyie" ЫQhYzխL%"+֔MX;ek^&mukvYQ[ΔM]!AW \} 'qOD_V(*l,]XiB[:Q>M*zLz/)e`JP}(2ԩhgMX;(A&-]uNT'f#SUU5A GPrDklcJhz#1_C4&' nNpm}m]8_"kIbhWy,'UL,voڤpX- ZCdC"8q & 0<;)wPMQH-U[jNү\6įA1ZZy8]n#ƚ`A}"pYb0'4[䳠bZ?;92Id}D\2%~OU|DFQ]nfi;YJ||HIv8Yގ E(mn/~^0j.z0$뮙|΃PD"L/\~:t?rW22785EJvsDE.(ô1RP5Kx;̼ ]u*b@+ J\FzaqCN4 ܹ2*qiX\(*TQS.#3^EJD[u"S60בhwN o8k'3\ c2:p%~ l|AeNzT Af5p^޵nRKTuwVgp 9[F(OO/@xdkU`m%w|%9+ HK(Yqmݠ:у} -zonVO]#43b># ݵFUDnZ(eC- Xyb40A$CM$1 B4*QC hWGhAR(,ۥv7{޽3e$;3gΜι\޹PTL_;zF)6b@&S έ_`lb;bO@< yeo|/%@_<?/'f*2R|@A_;d0d`eʑC_7$Aˍ@r z`SзGV%7DG ؞,vZ mF6 |2# q`I/*?Xz2 k)MAF&si ;0 ΃8,W#J=90hԠYN.l#My($`dvNȆ\Dj"Ο()tĝȒQ|ՆNhq-4$:)@|x2iH#~_ˀ] A`cx(6-hN._&m*!3× Q,s`Ӄ+2#-ߋZvZD:)hچ6Tr)cRk#kvfm [;ڣ$|Y&cMVtUg: R2th1`R%㟘0 R1v{oTf"2OH ʀc"ڬxc2l]Z vv/Q|m] [K,C] kq c78:MါnIW=Yfͮyؤ3^r4[9DՉLbZeާvYFn:󽱓傆 pNz7^eH,őT{ ? 4jpR*[eWdvPMf 7_,iˤwo㯦%ZfL}/<$e rs=1~_ )!a@ޓj|8+NSP?ٙvgtt)Ww+NzlRFzBu]oxi輬dWk8}5>9x G6h5irik{E!EO%cXڡ^cɩݙ5%˔.>b|i7v:p E5DkҪ- 9X[ TPpR/-h9΁sNv{45z5X$Zs< %6~2u_N-l[(Ӭb1Y.0-qAqb ڎ>ޣP\iFef@sOQ:Uˊ)z,G)fMGP̺+Twtw| 7{l_S=nus8?ېDKVwNkOY4&2?<smLNhd_@@ 5ۤз/'[>%@E2+{8BYloIq ssb[c%խ 2.Ò"]7 .\LAQ.oknq+;R.07m67R(Zl<Oj]>1lZ;o"Y6P6d0{l'߫aC@?? L 9 #sjoۘ.gy309\FB;7SB>O~ `Dw{Ab|>Dg.c&Я3c WU\K $$  ZZ( 0uVNkqSehL*Vb+"SB5%$BKw7yyoݽ^^hό^^{~sϞ=# 0ȾĞ1#^SR T #PU8/Oňw=}kv$$TwF䭣"}Bl`2$- E]R|]$OóMd٫W߫V:YG*C6[zXOxقMxLvV%_{~*r":7y/}ev( &7CvԦ)ء<{(%l Db6\1 l QM|RD$|4b:P9^Xo2n\>jwP_Nh)_#TiY}wQd x2Ƴ@>`M!.zpg @YRxߡ|#ο.lp&зP=rj8Cx qG}@#2j6LDPf&EG# >^Nd2|I~* >gW/Գ`2O%p=ϳ|(>߷6mgT7x6PV#-~؏lF4|?Ok)NQDnV~HjhmdUc{'k;<%Y%3>xxOQqfB;yi&yݸ*;qSFr<4`X}1x4ڳt7_r4uƋ <Z'HW6ˆ#7A lz J>z}~>2j,I:-!è(L4?#`{?-#UiCƮ? _mZ,4ZOvט.STg]`Fn_+8EÔ_JbhtY~CwMlNX^ 扨j[s4AU;/~=jy|՛ұ#qF aZk6%K~cK)jN`LK[Ўh:d(ؿ/eȠ"YB"W8Ns[#}xRcqq[(K_1Ȃds&l[M<迪Rwmͭ;ȳye Sr29 5!4IG$I:8VOE5ՠ2U[\9n߮^`;Rdvxzd;i\@I:$~N_5NZ#)tHXH" V;D1`?5%&g]r^ْT_%k"Y,8?ۑ O>fU 1ڡdW~2|L6 &q.dߝ62|јR̽2x A#uO vgX$m[mf @USv.n#I#/fJ$2 @\~YX X \XPw(4l5ހ6۹(nE@?q7-k`A"Iq^33Оv.Եqܖ] 3JU/Yݼ$w꬛@LȆ9 ^×9ߐw3{ɱMVF 3]??KWI7O߷+ȿO7^iag@4j*!ݿ/ WWbxn l7Af5a$XBIp+:ӷWiYCP\XEACdLF3G 2:q. 8JDq&f(*YYnzߪvQ}_}^5Ϋ*{O6hDl!l@ɂo(Fmt&6ؒ\=܋N>X}XªYm-?[#%8"yGp`r%@`x׉k/"m-d;T@xxPjw9=yJm'$YBr$q:W V5{؛ێww}#]4eH!67fhQ{!ӱ+ 2c Y/d(x"cKȍ́nIήM8?&=#MFBH놗nk[O* (~1?A1?& %ثRK~F6.9uq͈t@pelxIoE8:bYc'9E:w\= Ofl:=#o-]22T$#3C0X+`WxKm!%MN/u]'QQN .+x ٝmC:XWBM9pCTAD2qj#4~-р? 〉?4gB}B[8T`&J]5MG :TD5*#x4J'jv5F- N7q x5wm'k $y:nؗj~ XO;/{c5x!IeIn7^ޗҚA3wfsw{rs>k4@󮿀צ8kl5~ZIϯc/Jv{sSL/*8>-Á=}";?xL,x!O}x=;n&P#>uz[ˣɀ7k↬Xi gURIc0&nbx嬍B\tż x."Wl!zlfV`ٳu p=,T42mfE&ʣd~ҡ]̠`][8 ˉzg=6{t_)zٶ#lqpx6QC M59уs /N;Lxx'vu&x/Ν6dNcVQc?-PK6xƳG2Dk="xjQxN-/ yjXݼݪ24$X6ʒ"ep`XpۏcE&;RY/>C e!#T'R

      :^y{6,xvCYs3k`퀓%;!+l/F$ thxk[o(an ps' y>_5-ס~YFcNph0SU74{ fZmmE ^Pz BL 0ᙼ\Oԉ*[= X^Y]Ŏ)`'QC0PLo.anjlp p" '/O0]kD8j_9؉NZQ= qv&eLc*3 n`%1,UUVvw47x+oӆȟPEB羽C+n+Qv3 OP#5Tpp%bʣz.I }-FS7=rZl1ӀM? ;7g,tH5tEXϚ Po#.9^4QdU[tƁċscLMJ+:Xt/3Qz0{~ךb /hL7;E9\@@NKp0> 0mTLh*^O[},`?fv@ͩJNG2`+S" CYekq0v:8FXI;7 I l"tʱ__۬/#gwk**O !s ,R^0NvºfI+#b3Zyެ{uzV mf;̐t?wE}Ec0^,u ]uڬƁȱ#1/Wq!k Z_ckt8*^#܍u`B 4]TD8BPp5@j5W|q ]sd]d TuF;Z :xk]+DscчJ\\uPWhpZ: #*ŔT-CR:}yomn2k-P‹tTyЕ 93nn1qDB<}:)]qS[MضTPRGN"b3]Q)? 6) N]<&!zSJW1fCjAɎT3pMw@,ʉu%e:%;f*֗i-͊,76KE0Iw)`y܊:|T, s(P&}) c Uk+JsIi=kr3 p9`Xja8{г+E9ڜIK4k^ unsd`M**lD"W 0ی|z24ԝv)6x":$Kmd)azd_ǟKb5աLlK5 šfZ9CC( ¸1~Bx_T%!`+-`L&W~}_ZE@_onCjj́f#K"bTRDf$aX[6)Rxx_C&֍4\Q.XUf۳.ҡ|. E? vwxmƇq1Eio![L??NvʱAYi]5[\ŸƲmڕ$31vn)=3⑩△C0 8ݮ`t;W SwuADamKb5Ǐ>pQoX/8QBZLC71*C-a: CŎv{i kqZV/T*4/7(8ٚHqJV#q#^ᵘS`&U8f%`JN-Q1 1@\ ']:y@haPfű|`lވ_,cẸ}kXz:$`E2C`X!as.Qz@hZ|X|%lwzmMGJyLPQk!+Pcu? h8JPhbC7BRSxHPW䐇d%(rxYU]ĔaĎ+:KesVl׺YAq1&1UWftL7ngJr"b4ƨ_^ TS^ʎַ^6x'ѧߑ}tڏ?M;XEj_ۑ$c[ɗҵ"BW/ P.oBWE.?,Rta VzOn~OWXC8QS}un dj`3Z8)ҫJ=p-`B>[;Hx,&K+z;1w9yD)5̫ILT[8Vt FnA3 q:!bHn3qxz-;kV,D|R. y9*Y g5j8a>f;<~@;<ñ,R~V:o]^~4^S\z*,1WѴ_qhvwC"G+;t.,ގgĒڱu'[%pyZk{'E"xp P=W-N73&;9auSLmii!J&Ukc3sIlPC:vH^N)\noFkg&juS G=S$[\nƚcuW€qnMK;ttRdur..m%G ^ 9ؘ\w7c3SRwS8AMU& j:cJ%bGl܂;!wq"/+ktByUi#)tpx'rؖ7G B1[6&Rcb->,E̷ I*+K|bK\ؘ4ˤ18yÜaly7ǩzO酏=:fI=zNۼlc[Y3Qy)`B)M]E8ɶz^X㷍t9^4/\gaagD#=؁ +ɪ@@9's "]:05F5$, @6ƄL[jؗt w_U H5k2vlOG.c6 X#q:iclѺF.&-gTJGK9+v_k>^seWDnł>DwHΣ;;VeĉjxXdX 9>/OfםNEg'utb"9  :MGPۭ =Q[wrTKT2l@,6[Ŕ !.Jv0L΂=.ʈ@Pݕ_@%P`aZ*>9 fcIENDB`youker-assistant/src/res/upgrading/23.png0000664000175000017500000004256013260315532017326 0ustar fengfengPNG  IHDRc5<tEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp 3}AIDATxbTqXp+]H=Vy1ͽAvpn b:-A3I5]]7PVyf&F% z2"k/ؐobHGi8`&FFfBY 4pdG%.8`cfgv a.@7Ѕ~G(Uih1PʄF Y1!`TPƲx Gʧwni)Ga3N,|[& i`7 Lt~!*Ap`!t]_:^;#B*߭w 1^v8)$1sP %[,d #F .Wݷ_XSŠ\i2gel 0o}HYRLdPm(C;lp7XC 6@1۴Z"ln 6XJ)a5=G5pr2R1-$iq(RT fE+k@VBj2rB.`F+k` ִ;C5ڪ"YS|qq ͆dE6@A;ruз_B1&\ʊwh?rVX}$*n2z, aka%/1-E5џ FO|dG24&%Mz9 (z//# W=#z6PQ2-O0k&27 k@]p[K>1qTH^0kaJ8]ސzzT>u5 1ς\$,`1#$Xh0!7@T`r7dPvf+#8sJ,ETmsOjjӴmQk ?txh>Hʨr  'x)W_#3%T!JR`PMbAM2OPh&F rW V,T 2D5*˰+z[9m@haA`K 0[BNX /mv86j-9Q |6"5.豀+j9^LZYhk.yC@d;J,`x&r8yx1jfH#DxHփѸBǷX*'|EI>MoA\@ŭ:WD-AyO85lG5pƝ\|: *X59PźH%ۯŐJ۞iZW2j OnT:ȳغL < >|1@0! jqP~EUĦq;.50*aaquuaE`XnbN9cA!#g ;Qb` ͿDj gr^_P" G8M*'),#puv?mBGe3I$-`m! bP~4@m nUQx^.@j˵ U?0Q#TcyiFl!!M4%& HMZh5PIm홳9;gB[g7%CMEDy0҄#,s ThQɧUr Ձ!+sjQ6v51\~aWJ4Q4)#M8",>@l^L Vo!7& +"n7-:g=s3.~'Z,N)Фt_3Kr,`RJxG[$wī-⺹IQ[t~Unvw?dD^uLj z9;;$k=^%XX_,hs eٹ_h9$]lk1\Xz{KTtOt0ikʷ{zH~2 +[ejȾ~fn޽HEII_oujDRTI ,P]C#S@ĹRg]&KsUdۧSoi(K0ܝI@ABw㺆0pc/{X}F&à$q&RmhP*[;xOo#2ܱ^a?+#WZe+)a~ΪvQ\By{9!*NdtaPtls4y'ͅ/68TP,'t:ĝ0%R 9b몕QBn I,Ц!X-ʴUۛ~` |JaJJܔFFaqCGHuE7 %yc˨Me`q7EQS/~y ,wm* Ѫ+3:~OaZыsYNCh~bx܌8|O^[ϴy0fP?ޝvݵnҿ<( `-h4_&FʎLGtp֧UKoz<;H_b P֪%1x+Y`H̶0ONSC׉`.W=J|pO-`Bwif|UmO4" OBްA!%* bčh1H4*k@ YEB ]x@Zwt.9k߽owϜ9s;B< \u\v==ަGɏL5Lprs tv 67&Sftϡc~(Nw [OTY0 1W͈/mqd^j4DS5wxq =LӁ+[J\No:c"͊"ZZH#'Ε?l e(xm*&HIf܂MH?=@Z0}#*vU#v󁯢~sH?C1۷p)>=. Ԓsͥ ^d#lYܑ/l9I-1 -GL c7l濸]IG#N?HA ^/ $ʗsK,K6L-;I0Y,V G2=)6[5MA>@?f/"(uq_o* $4#[H |6`  ^82,vQ|ciXgO $Ëa ueq 0i#]#!**”GɆ)N`,Ƕ'΀~@ȼP0z?=0@c/2gPT :j>>ŁFxyy1@ؼk5"iH%.aV|%H.He[6XB"[ۂ6-hIVG 2$ށ-A~XH'я*uڍބa;w ڄ&$xR s֓7vdb !Јh^1Л :lYAr9CB8da] 2k< q ʀ#w8k^DM<7镕Cxv+vj'A|]R{z-(wD@bZH> &S|s i\zNmmh2 %*0M &SAob ~:'ϙ .3?<ĥ{p?ᘴsg|ݙ?v6wE_r '@/h> td8_o%mAݪ+ISW[(ABW->* %͌iJYUNO'NOX{d z{\\g VT+jfڟd3 pLfn.}`0r c|tKNSТٙqgZZջ-N$OVլv6κd԰9m;иۧ4)#sL-NkD|֨aNKn(n s'Ԓ CrqS}0{ld뚜Z7ԉ]Y> U=XI苮 2W.U..u5ג^F 'Aon䁔ԅ:p{'o8jr]]̹,:A0[!^v<xd^4 [Qb #q-0-,ڎ>>LP)?#Q΁_< +ֻGK*iwc\C^QC0с 7hs 6u5Z )?Fm ڊrWPLAݥ*186!llѥpXTqϘsx 8d<%zզf6T Dcwگ$ ^ m4yNH{C'`ތPO|kcdf v o؉*![H2;#fИ0LE5: ЈΌZ*6 ~|>vOTun9# x݂ݗz.\rW| pPFg]1)N5nhXoj`3ītI|u+`#«,Е}3!;\QdC X$|oIkab^Pji %uAW]\k 4=_{ԺU EaC[3GJz^cACz7'}JH L~(S}ØffC.[3Ћݡr Eͦ_%嫙DIpPe߇shٓ%Z>wU2ga3X:c)͞.QU]`#ͫ2w+<%&KU)L%gg;Bm7}ȑWo'7 %sAi?kSa3az!ު8 Mls, e+ 6ߴY ܰ}1_gM#D.cݮp5շW_ 3ytH7] f A1F6g]J?o3mtA&BYܲnsڙ~X6rA %0a?_#+ 럮@R$4)`GVo燾MbtA7m#OvN48;6PRK)N!O`G}Tf 4NHA'- -q4q|Y2w%/=1Pٛ0B?Bz_@#9Z8Iڮ{>.#龝Xԯ |s| la> xC[Ū 25xh! ]/xx*%]leX T/)?9ۄOMAS=`{OK5k70)a0![:`NmV-TG>oD|,^HFUg)uq}*h R̚6]f,f#.VDÆ@0u~N^(\i,_t1e:uB7Tc3p(Kܱn+iޑ'wq0M3_CC}~TcQ*[; kuFL0?BпBCNV%wlz` >VgI rN$觳JB9'mڝ*^I;RmIZW@CRC\.xH1-+F\{ t z8čwTTMy8"wS|Tp8d12!yB贊h"8߳%]n* 1 ȹȩ"fbz)F`Ĭ̋V; .vh2`uLϜjjпy/k`A{br]|d#q5ꠊaFGAU-)=2^ށ(=K ^ͶȀ 3k"b%*y}('&HkSӽV}[ۭ#=GB~^e${sܦ-MgL;IZ}q;̘YR3Zݯ6s_ wM#o@ Lcs?,W3fWz>sL)"Aup?&\W1X:4'4A^22]pzzNF "T"{Oqb~5v=?b:):pttt֩7ceSm{LU'ũR}zfF{mM7!%31#0H}NA CrXA/LYe4)uL5j{,N6Wlfs0`={[JvW5d>-kXl:ș6:&lAkoyݔTm7*!#_U-F,;4(id3r¨@JJK4K&'-S~,*Iv]ۅg靯E;KN7#n+($i R{PI 9/mPrpN㛁6Y~nCAi'Q\&ʌx TlZ*{w4a%c%N^& 9p!nl`pQFz2iWtE$lWbu$6{bb.o1nUZaWl.Jyx 8!AׄD׵MǞuU$E))>,9񲜅N(@P`$Sl )4ZӽoU'`Uc.qEP`r?E /"IC  5ˠf(_8Dl'CQzAK[dDr rbu߼ $TKaN߱`oKm vXB.qk2_ N;D"p] <&oi*~e*d'dpqdAQ,d͔/ 4l(XO_C;:tLJ&MiԐ6FO~fs0h"Ջ* nY@/~;GpA2*d- "*' 5 7;,T6@HAQQ\PPDmuۍiqAZEmuZƽV[>ieEAEM 2wKTޫz*|jIs9,i#FR1G 1jQ^JS|>6{ybi`}tpnt$^c91.)>X}k[DVoMXKq")][䃔H; f:j];QHv(l_w9NJ)W!?XQ?1SG !q'cdڊWlޚ⏳~K{WlYw/y{Uy"kz!/Xԏ"Yy?rc&y~LG8B >-ⵯ=5P<~l"aZN01l 홫6JLSkԝku?8}ZM:vb#dI_p1շn6wV7L_5é"u4tybꭋ߈٫kk"D9X"͉ RǞlo~]bo]KҎ5 9j@=M_#"=={j>@ UMvtA҈[e5˶oEG\sm|_` 4ܯ+%VW>WBQ ry57ߩp}*{剷oXo2R;u^[N\7KYZW|P^rxնbC34^//}hK܉h;PnKlq1#SYgCz䪐r1o~'m- ^5NjQgEXA =JbQq&N>Yi=ȷ@D,^"澉OAaD%G}f]?Rxk@a/1^uH?0xAkݖqݫߊmKM1vXz[ҩ_m8r; 7qK2ZyX _xT[e5n|k1=tI#/C?:{ݭ9KIa .Nhxb3\׫xRo/%":]%a5D8C "n] ؆zs$J[yY*<*mkxJ/b>qlC&ҤXì_.ll6tln!n 3 /]_Q[fN/}Q;tyERj6-T^ˀ(Jծs ˌ%v?  %h;AYөCe`y9$AH x L yN,# a2!]A__A>uHba .% JZBqߜ:U׻050u1yؘVqdWxP U /(M3_bɸJl9aT [^ԡ˫N0_)W?tn؀cbu' `HM%/\s*Ӥ>Ez,4 D%[iRJ@J51أB:/+73+*($*TĀ8 V띁Lϻ"Bk#Id[7%KWI8ɢ2N˸?BW G2njIao̶V8K{.L 飍NT+d=[ K=m#^+} 1caΝtkK{lYlQ\8_B \3)<:\ r,K8Cyb`[I\il_FmH&pSujQo܃]hl ts`R#0snV99M@P_ڭR@**TG#8ˏ_m. +vj!O=/B&nO4ên*6#' lV0&#z>O , SyUKЧZ7>nn)DOתj"K Ը`>:Q6y _of 7LFV[ Xnj-`k~'S$pm_mIšgo;bBXxO1߽DУFhWt-/=_jńXhN|^~Zv2')G]"m;D D0dn}Vq$k9Hˉ橠 ]Hf **ā_ĄD%$da8v܌ kZgg{D;eqLbyu>JNzfX:TX$o4gC};~?\NoRhWBUĭU8/Gz\7;2uDC{wlkUJ`/®3nݝ/R|egQ(N;sT=,w{Auץ`<̃:wLQa :,);C?Z] %u򞝿"ZV&|dJ#|X'HuxǗp}xWzjĒm_w;`*Ŧ!}OP${IJb[m@B7aT4a6Q9ƦD3Aɼ;`6cXE,rľ|2:rv5:؁38itN/wĉ'e^>XKK8E Bb!f{vڽ"-Yi+-)v&UXFRݰX$1^ݭw7)JJ>زi3om DeTC|9G)PYqڲ ZZ>K0GxD7ͼ0?̓KY6ډT$ZSto$v{_m)3F:-јSy^#mob܇W=*-Xb!qW Iv)ͲLTzs>YY:ޅm5nh~^kɔpXJrjbw++ZP+P‹h,5܇'/(nX(oie}fL[DؤWM,^^v^#SWCb!ӡ"':WSO~RCMb6'{j#?3ߞ{|;['+.* fgfg _ ,.Y՛cKcBA P}Y %e8RY&?5^ 睕Imj ˖E"xiRd$1^ƽrn!V Yo'-E7iqIuC5a-μe*aP9N⍎m9>inZ1dV8E}tX%6l0NzDTDZzvPʮ.:c61'WZTMWv0.8`|0/nn0F)e;gH#U#س;Rݴǫʠu%dďo a\;b<0n'aXcTC+Ǹj{'ƴnnPjRWIJ+UYnJXOJJU1Y\q+3n矂T1xa/+&H\A)Rji^/ݵC.K 6Qr[X%dwoqvr4r~uKXzK WaB xQ/WZ?YțW?C~/KSz&ߵv Z!fJ ~l#8T 6mJ.݁wt%4=5Eqf4r8+-'2.u6wL_T-rlftϿȗ6z1a.۾h1PZեY I2gȋDX"Y ӸFy]*PPq>o=3=|J#P?x|=N\rr{{U\06;Ą0e'_JK>`À5 -tN9G_f樁ڲYT{Zi+ZDŽ\M/u/ W9KWIlzBkp-P]ߎƨ${n= =Qb'z7OqYŨ<ЗT_3ƣJ+%"O1ґ'Dw Td&rNh?*`kp$t[j{/6K%C42 L̇W6JfrL1DΤR? 8` qb7UgWo DdM4‰fj `[Ng/o.sE,]'ng0WUa,@ dU0෼&}2 vo#bu$<%=5!&51þG>K|9.b$x(cSdnx?=HB0!a\]]Wɗ5ʝi8^J^Y F L~DlkL(t1Qcl 'ɗow\ѹik?lUJd,U*i"2rېc3Wjj1b l ѽ4te=0۴8\Q%E=M`.kizPO+`[NpЕb{8EG Ba lE @ID"2ʙRBVf>c\|[aԓs#ԏ6`$F(Pb _tG$˪/`[>B|$`y:mԥp1t24oJ ?*s~[֡+%ߍ:o`[TBind#M&qWQ絯ĵ,X"{EP~ݧx_ʄ)sR6Oj`y濓G%Y??| s1m#CbL }pCj &b[ḁ{^LUkuw =6\ ,y]:;gջKĉ Uhth:+M#[ R: ^B?HH2B2[)߯Xl_V< *j.2REYGnH ۳] B,j`WWW7q2bOyAy#]iHO* MOHWYQӅIENDB`youker-assistant/src/res/red.png0000664000175000017500000000555413260315532015676 0ustar fengfengPNG  IHDR=Ƥ pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_FIDATxb?-11}ƀ 01bj|:in$\bG5"9i4H2bQ:jhm;TKZ{ݣup?n!<4p4qY0IENDB`youker-assistant/src/res/box-hover.png0000664000175000017500000000165413260315532017032 0ustar fengfengPNG  IHDRST tEXtSoftwareAdobe ImageReadyqe<NIDATxMOQNC$Bb!.MR ;F&F]H K ӡs^[ 8&oBt{4tF(A#ggNv?nnn$x<:r3:mu:G vHaVKWSJɑwY%/Ըn^njHf`r;&_ŎB^j\|4]ԧ"9xJ V|+(Q'銪{*p| +]>n,$-b]D#1lKCQ"K#hj `q#~ѥT^(B$r+) ݸFjW6{܈{`N U9)LLac@cs <ʤ+ `U&xLggVSbCCRCkG9rEK~Z^Sz7Rʋڷ<怙Ym)13LlA2Lw_k7e5_e'`gTjppuIENDB`youker-assistant/src/res/logo.png0000664000175000017500000001231513260315532016055 0ustar fengfengPNG  IHDR,,ijtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp <IDATxbtHfw b-D[wՕg?#@*0;&&FԨL]G'pe8;}ع /+ d`?301p iO0lX \+Eq99A_.zܹ8Ko 321010|a WϽ4GdO1p10s'ù/FB=W^ \ Nes!HL@{NK@{OX9=/03CP@QǠ!୥tWC^/,a@/闿 a]P_~3pr)Yf1ya(z)P>0Jڢ6m *ZT۠@~ATnQ \EEPI."qRF'3VÃw{} !BXm.4{14@N(,[3 +-(4I[W}hOY f0҂FV/F^ֱthN؈֭ V߰8 ;y( tIE^itDdػDYf* o5kBYPE&$f^tNFd& M;5qGdG]ttiaOeUkK)-VG=Vly0g#aUDEdfIt$mRJI~\Y(tBĝ ] n*FP\(FRD- -MCM&<{D>7޻s<8!4sŸIbE|Ԙ<9tE*޺S_ՠF7F$a@w,ش) ^6p-;Dž_)q޹Rn Agp 1Vs:TX}wV e!LdUJ0[4I˰A{^>UY6Lzay^jLC)%UB!FhH:$~AT>6F*W$>J[D>RZ;̴{y];SZdg;w}{ukiY>c!\/{PAaXd<.v_Nj4}{~FPv&Cr#cNg,aJt} 4t!Vw]<.y LnI|==~(jf_>e3bwKn鴱a;Qej:eG`JEjhnF+JE{ұ ̓LE'~N/$5KWik5MT CPo% eiYZȪ2\],b3=;8\եc5NtΩ19YvZٙ8ٸ..@}#7O*_GEGOn-T*WռH&htE]RHǃ mݾ;ImA' Ytz BjwEu{{Bwi鯩1iQ%z?{ z5psJ Pu( {V@UC!` ?XĒ'+N8!iޢ6v )w $A iS.4hGUD\uܕ!IJ9HHh;AcM 426@|)k*JA{TQ>z/0.K*!;_2@&-6'(=9e$>?;sC6o"R_nf ZA䙀LL9S$PO 3 $} Dl|#q"$A0w_@vax|2o6\o#f4m~]v[Ƕn} 9fBM_AA^E⃚Fc0b"16FqMnm׵w{=ܐ.'=9]J/T4j>O}/Q~Djyx P3fǢyO<(Ǟo' 7 H`VqNG(2y~ VI ݅/F |ߗU.2F0!mq뤴n-+P{\^%ViЃ*+9A2zNN!ѓ/OTx BXB!iFQԍ,B +4͌o.jҶ}"z)vLUnyjLTfsav56O %"JM4"bK0BF౩AjY5F{6ZllC Dj.0ݖk7AkJog o}X* TY4|23\i |w<QdN;҄,b1k YmBƼ Bx19qocIWt3uiԙ0ed@qR ;C  r,>o < \FL6-9NF2AEߠ'Ȑ`?&C {rnY_g$^S P{Ȍr"cԢpCg_|mFSӌC3j7B JƘ:58⡝bX1P!ԭ-VYQ9zd" VhĂ`7\7[UV]I<Bs<`#`6 Y3qIJ+#k$.r VE|^ě!Hū]p֒ާQZ\tTU 38 g9 bfC?(1$r45!t  qIDATxܜ UU78)Di $6j, 廅tUhh JPey{ܳ_ks>s׆>`CÆ C?n\۰%f&Ca_mpQq|p醿3`xCnz*e22bÆSyAņq/N2,0-A`ͮ6?Cg\g1:T:XN7a4`jnJB${)ц/ǫHqfN\3{tm54e:cJ9W.c= %גao3DlRJ2{wA]tUQs5d$DQd.^=%,3 fv糱 3R>Wf%}F΢d:t&g8|՗eraiێZE_e}#s:7xv)^aZY[ ׸%f:dC=EHh3 L3"P#*%r><%;yo}o3*y<"O "&eZS>86ҩRG| CG2Vbxw7†+= ňSz#u9Q}[-<ӄ @8ܠiG}J4Dr_~tW:<5"q0<35B)(apL⏠2#]A bgxK}cxx44MP)$l1.X#Jб9G!_?H q#c'{<E-%tbFs_' +Khvs.n1U4}`Yw]zp~YLyLTsKY=<=1֚AHTʮpAylWAM9΀Tِ;AITʑd1J x4T Lq}B'J:-t>ƈhh!}e2d_ !dQucK }"fJFODSǸQcyzCq*+h \ tQB5!m *Eͺ)GNIm~N>}cXf2dF xmp.did:bb791d93-505a-5643-afd3-b72613cf525c xmp.did:1FE3D56AA51B11E09E379AD2103A1950 xmp.iid:c07b7b7c-1f3f-c340-aef3-32b603165258 xmp.iid:6cc3b2fb-75d2-2641-8907-8b6fac3460b5 xmp.did:bb791d93-505a-5643-afd3-b72613cf525c saved xmp.iid:c07b7b7c-1f3f-c340-aef3-32b603165258 2011-07-04T15:56:28+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2011-07-03T10:21:13+08:00 2011-07-04T15:56:28+08:00 2011-07-04T15:56:28+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 186 56 (" cHRMz%u0`:o_F IDATxbrؤD@%0j bDq?j -MbVF\Nùbރ;F2Q:e)#)!/^1"LzoP .\p… .\1 0qU$41ڟ#.\p… .… .\p… q…QA 00 eO;=.rA.\ rA.\ rA.\ rA.\ r$'( VpIENDB`youker-assistant/src/res/search.png0000664000175000017500000000252513260315532016364 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp K[kIDATxb GIDATx lTEg+4Rh1Uhi(1r()4ăDM4ވTc%Dbx[Ԁ Ԗƪx`Bomҝ}Η79#ѡ+0PGl"uT_[lp(G"P{|~ ?7+zo-06Ns%@[(Z'z4SLc+` ~5x>..+xp;X  8Tk:P^x%a<Y8X2xc")e cA+!tXwaYX0,DpǤ K$xe4eV\ Š6ݷZN`R5,sF8|`k,{^ٯ<"Nz,}zPngC>+86zQ:BFsYV[:G_t8ꄐ7YV9q 6-ݶ/WgV䗀y\_W Zz?щ`XkO^20\E߮tqVyq3ۅ0nl+X-e.  TLR[+ex\mcoB93W\6h˹ibAKjpSOϲ^;ĉ>שJe xxjףm*eA4X8YsXLXm819KF(>meQs7ZOkR v x$&a*l&υjH8)/H@sab!l .,2d/S۬^L47Pr^fctD5i7= m%۹!g7˖}#=ly'k#"p[?k=Mֿ5ak{^ "-r u8je2Am (U$h|խDOMR:֙V.;OXje*JBY:.PXMqʬ~4RcŞEHMnιg( (!r UvZϔRZ7 E y<9|jX@Ma!Nv'ySv ^ׇEJdJ>e%?!n9|V*mw(yLQX,-WZ`Mw*!}de% V*+0 |\h&vrSf7(gFX<[ jdNnk:9DS8NoktLJ"$,ϰn-Nts_Z޵m0݆GMr{c]ygIkXKlSݥ\fI%gTBoH6+I`/I5k$<ncY"^-0n/Ar[IL#Nr5ǽQN' ?Z`y$Ycѩ(i8 0'R:ʌ]a,mC跔o4 !Yb?J$@"q_K(|wU}"ŗ~AϚ1h1Ǥq Ks3n'tP$KB?U:P ʱJZtb![pWVIH&nr8#8>IK(G.-Bn4Ȳ![On#* T=|IDATx] NU?!6"v6$y5+GyƳjJ/dB&6RJa=XjɮWmP+gNsog3w=ϫb.U)~ӊp(S?Q   j j. vrق͂MQ.;{i$I3JHtsӂ$jr|E҂CE9?rcόC)#\?I bU29+~ [Am p CpP5&C1نsuzpl5"0+nR n+"bݘ~$.15M`SA'Od`g,Rmj#8֦,gNr8^Y?dSh"!pSw{rc:!pSFs *y# |@x晳gsIobK ص:`!F %81@HVKY|/!]Apr'豛ȪTTVڽ1h3V2ڬ(l# m@[|̍<.Xׄ$* u6k*Qkl._g䠻^% Ztr}DY[:Jɂ=ӑatI ְ 4IHvC`gem*߻oq+h9!`T6(Ʒ;Xw r ՚*ugDpU2vOEOǘt81)k(o" (QmpI'Xm5_Bfd Śܣ'@T@aJ@ RB9,* KIXo ykD.rAT_ #`0r\g~,x8QrJS”I,6{O]i@z!5{hLrZ$2 q|Ğ2CbUJ1H )av+)nЫTd8žkCLJQa",CmroD&1fOGsY6q{#'yܠQ?/@6F !kLK@}wi=҆ Vcu$nNkb7W*ʐpcVnfE<,qlnR嗴.RZt_q|azv~HS<4sg4Z̸1gT\c[8q1@\uG_OcQ8ڂzw T{M ?f`uFlWYۢ)$/Q^mQwgw4(W8:RnM& @=ͨR%"kԥο_pikNN+CYX5/} 2 g 4kR}\:is-Rw\-SX8p¬BZ2e%\kpV8Zĵu#H^B*8B19>' B:jB Q 2H=ⴊDi |=WۈX,_Rq!IENDB`youker-assistant/src/res/arrow-hover.png0000664000175000017500000000206413260315532017370 0ustar fengfengPNG  IHDR ǴtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp cZYIDATxb vb,$p'@@*H@, B >v 4X.>;h"V`5};&FIÖ7+9CIμͷIh{`\fGz-kxn>7))E4| JI)I$JRI$I$I$5$I)I$JRs0$sGTIMgجkgP8@|CJ6c͕<ֿkqZI^򒐸 AXs}/G6 πx8Tk;W+;Z45kDדKs9IKI)I$JRI$I$I$5$I)I$JRk/l hcՄv5͇h[%0sC6_[T!}!ÑB+,(kH5K#Q@,AD}j{ ^pgV5ܵޑ>$.y3Re ~: ywԔ«% ͿHUXn\%)$IJI$RI$I$5$I)I$JRR|RI%/'ĥ'LJ^OJ]S$$RI$I%)$IO_7$"$"$"$"$"$"$"$"$"$Photoshop 3.08BIM8BIM%G3{a+Ӱ|[g 8BIMHH8BIM&?8BIM 8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM)8BIMT8BIM0*8BIM-8BIM@@8BIM8BIMGr bg_bottomrnullboundsObjcRct1Top longLeftlongBtomlongrRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongrRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM-8BIM W mJFIFHH Adobe_CMAdobed            W" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I$5$I)I$JRI$IO )I' D&IJI$RI$I%)$IOI$5$I)I$JRI&sZ\xh.?!))g9pN?Eow?apt]U]5x^X{~gB~eҦggDT$D ;-vzyo6 -Xi >h{`\fGz-kxn>7))E4| JI)I$JRI$I$I$5$I)I$JRs0$sGTIMgجkgP8@|CJ6c͕<ֿkqZI^򒐸 AXs}/G6 πx8Tk;W+;Z45kDדKs9IKI)I$JRI$I$I$5$I)I$JRk/l hcՄv5͇h[%0sC6_[T!}!ÑB+,(kH5K#Q@,AD}j{ ^pgV5ܵޑ>$.y3Re ~: ywԔ«% ͿHUXn\%)$IJI$RI$I$5$I)I$JRR|RI%/'ĥ'LJ^OJ]S$$RI$I%)$IO_7$"$"$"$"$"$"$"$"$"$8BIM!UAdobe PhotoshopAdobe Photoshop CS48BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongH^FrDllongFrGAdoub@>FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongH^LCntlong8BIMRoll8BIMmfri8BIM· 10(0(0(PQUsDDDr8r8r8uY\ {ݢggg999Kle~,+dRU~Jw|5Q.Z'.`)5`)5`)5d,yHnmL{x7M}&qeWr)%r)%r)% De$_>z:776T5tF442[6pg9?v@tFHSNq^u:mEmf{MI 6|VTxR4b]dY/W\X2XMhY LY~]Q~c`~uBdRU~~,+leB>m.WSK+(xR4|VT 6|mEmf\VLMD`G@w6J=N}9RZ]H]dbK/9':Bv:Bv345>4h\QDWUr]aӦ_tiJ\iuiuiu^#d^#d^#dqel.uI]xy3y3y3{3~D%/xU~{!qu2u2u2zFzz#z1}Rz6\{f[OE0:Rccc#s4uMXF$XF$$%6$I|b|4unU(?U(?U(?R]pp3DtCtCtCsȰtz6Hg~M0mEmEmES8 XICC_PROFILE 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)KmAdobed@rU     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺI `lmUwXi$fXf[ZM%@Rm~}t O5?i]\x6QRNIs{qwQ@`ཽUO@[:<6艧[erK"V҃ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^+xv&؉Jw.TW8J['Wn*SYZfE.=tQnUs]r\8")wfAt*J1 h'vT7d3{qnuuaQ:p, 8ZU\^%ֺW`kv. &V)mj\d_,^aidnEu@-~BH=mTG]lS~bqW=tt?Kn)R]]Dd54CG-2Vµ0I *o#{>ٶnN?jǬ%%MmRZeCBof ߺ]aWIͳK[,SQH+:"yuz:<45j:/OWG׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~BzV++k&H)AvYd*~O~xvkb؄]JVJy1uc b&CxA ׺_l[YrOM&ul.j䩩UE}l<`,"ЛU_W[3cO#UAk{^׺u{;/ٹ˚g=͚W#jѤ 0<54)5+2@3^]7Asy*M۳/;)x1QA)R7 R}^׺s2r3Ou2R3z͹QEhiZKUL {}ܘֹ^'qRar;%?;4>׺2}-(Z Mղ}"al: (thC[["3׺{V6fvџ!B ?3vpXٯ2k7^sN?5TPdb[*ܤyh"R:<{?~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^,FAYCEWYW;h/,ܛ*' 0=any٘jٛj<zU52=dC-4L}׺0sL,EQF8bcP{^u{{^׺u{{^ A*姆, գ-,RaONh2FP/{SF%XeHֽ _^ңMOCR)I{׺uM[iUH$ EU2qEP@#'uǿu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ 䛰w/ cPew]SQE65r!d}`~MIOKCCMT_Nܲ3ۑٿ>׺{{^׺u{{^/ŰC>\e t6c$gJBQ$v^ bgE͛C 5ExtL'_enŞȊIGjc)3#vCWuRPIS;*]Q<{^- 1yFmݒfy /a{풴-8F ACu{{^׺_RM_Sg%M3$k<^w%^a'ݕ9Ɨn#[Ө0x\y^&omoVR^bL C& # ~X>3CMHR!Tfb~{/~{ߺM]MRWQf7!L*}t e!7ȸ<{-{᷆&Z|>4Te eh ǎ@OInq lmI{TmSJ׺u~{ߺBLd=^1q:ZLH~$R }t>{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺAOsddLfF@$, &;2?Ecb t8N,ٹhqԱT͵C1/.G AWi[:$tڽ“nZ R*1Ye8L49__q͈K~` JZt2OSS,pSiYc$~0< P .CI_v|884ufGrV&S{jEr6imOoI AJ]}tHQYU@Uq`u{^׺u{{^vbMq FYx U,ˎ}5~uFWߺF;sBHVږ`a!POֱ31I!MtS$XdTT`$E*u{^׺Tl6-񂖜3ycԪ5ROb߂KN~~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺE1t9N7/b[?-Ueթ]bm, m{{r1hm8GUT*!IXe@Kyug^7m"lf{c!MQQM5 0N`")6*XNkmf{{)U,pѽ%:ܹOu+̑, #2tˍŽ*R~eZ]BGqhW6ԼO~9Gq"$qQ*u^׺u{{^׺uIpUђ섕+6qFh $I4;u}l!} zfXx 넨qj,׺=ueH՝݂""wv *,>׺1cM%Ÿ+>E\.=%xՔrY]u"Gߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺEzӉrjfY[/!i)UJ-ߺF"x`"LU2aYd%/32REBVŧy><{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~E\egP1<,s~%QA׺2c[pm*`FfqA4Lk(|S_w }=t!{^׺RaZR <},u2"6L@'ߺDޞyjFZFTk o~M 7zpC QyeP $^ J Nđ"t U t`B4dVIFtXДB{tj\}%U}uDTT4VUNԴ4H,qCf</{?{+yZybc1Db=MC;¦VKH%O@)3AXlebnQFO4s׺ 0{ f:1n'ŇKG\I7Dday s %tsu7U%C#:Gx ߺE{|fٹ $^]6'rH _ߺH~{ߺ\13-0:}ÂYRd)'YDi 5zdF(HaB$;U|~婋oW=*#14 }u/]cRnj|W>*RLzF$^q,EWBoh4U$&'6jh XҚ2P٬^om s*' % =j%)OEJ` ]{+'e@E" 4U*A*8·@F]d^ߺ^mw;'j^`ۯs>S (G`ՏǢkk'F:CCE-> S45 +UVn*O~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺPx<6_馮')wC%%,1<1D'`r#8eeH*"u'oQBZuOБQ0MmzfLcjʊxijh(e8vXiGHUٙh+ǯTӇNֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^/}lݔ pҢ&glYI_NĽ!N C&̾2zKWA[Sb*Ef/IdDZ9aY6hVV t;qj튛n`z~ 7_&2p;]qeqhewvٹod]m5rMgΠނ_yܺIdى?X|A?!OIMt}_kˇ-x>Z8_~׺Qϔ_~%ټirki+67dt;i_*%}LgZx|JM*?w_}Su95r2M2<Ѵ6r?۸Ed0Y|j+{wk_ê#HfJz}mN68&*57R9ʫ4eI{^anv&f7^Bj|5MOK$b,Q@һy|h]lP\ZZfMUC)Z1,K2JVtI >dڻ76JL=Klf7ܳa"Kcb3ISxh#2 k(^7w ׺6^׺~ޙXaRTw5Cɔ\>v;!摥1UR $P1S)PG?ϢNJ䭓_nљɪ)ĵB+yg'6(s#J-u`ơOO{On`z}MP RkacQk}tו"0P f{T5]oߺHܻ}P}- ia@jzνyja@ :"i&2MAL,[vH,,3jRZjڸlRzʉ WbJQ }M?lCB=I}DY!X0d1 $ZZz-.a4D#Osd{.T$ؽ"Ӡ, 7}t,tT;9SSԁ1*ۏ~ [>Of݈"ai7:SHV)6bN >׺{l-Ph(3*)⑩14d֊E{ HO+&eKjv|16Uu6׺H;4qYvIQ$C?erߺ\يϱOνtܽO6ݻ{\r&E8eՓլ П~L۝I1m3SSUd ~ l͍+u,RdN.EP@`lH>>cڟ_{^M[P+ouxrAi ,bh:gF^w{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^5fڙ 2JJOl 娍11dk*cV`~8Y^' ׎:(qEy7^ٕZLL?$l}t0vQeS1n .Fjq}t QqWF7CVUT/ȵƟs՟׺6>׺{3/0zNx,\jqx, =U<£q+㖎6"Q:[rMIbˤ#OC>4COCr=>Wɠ* m>"(,eĕ[>CZ>QJiz.ylFӨi*Ad(,0x^&Pu"*%ƠFZ J t߇hpNQS7J[J/K%!ZtQ7֥pO[<+z=!i]$܄HVMZI&9IY&BKu^\Odx'{sqenX<:z-=BjDS\I<.Xjs g \;M1 [=|F<1"f\vC)IS3)Yܔ ~J鷦ؒi`͘_$2׺*}]6T{^cYx2{m!i(qd#VbOZPxO~=k|vզ@LMFas(ܒ"C ѵ~Y. O{c{몥mZ/drXO5 O%3ȱ (u, ! un 7cACOAMRÆtP-@4qAK$1RZ,Y׺[H7vs]x%uCH&II5[HSRC_׫e":cn ݝӗkd2_Vkz{m*bLcuHM܋KAQҌ5n%k[S_AUkS_ϫf&h2A|ÅXՕTjZVBr뤨`V}WY6CSX1Tt !f7yfcS>׺(-U*VJejJZ$_iǿuށs; Q:Z8}AɖBV(GߺKJL.쫔.PHX!rZ*l}tzgq3G$P#1]O"{OEY/~pf?NߺHh"uCr8fh]}J6>Uڅ=t/XBН_,/ocgW''\ظQSQ)4E6C5׺_^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^9K,>׺&_'[SbRY h3y"I$`HQv[+᫨j.6: \5iCK)!I8uP Q hAO+ <(x"-Ε{^d{X)WY>*鞏SMBeGOPU,TCOPdMH^wVS7UZ,4Ϊ#&уx̮8}ֺlӻg2rMD檢ڥy^Ou/ߺ^5]L_uj׋?~v35:gd3-%@dhj)ih]`uH4=6G#E"H6d:KSq-$Ocȸ6*:[#>*+`]rGR^mu`75nϊ?fHQ*A ɕ13Ҹ(iWTH^-?n.s1-u.SpA SKNaU $P;5c}u'6>jJ(jAQ.J ,O G_ƒ9K )tDZ>Z޺kyB7t}QVCGK i(઒m{Wbm,&U9 /j3ώjoƤS2UE qZH{&yQmY;335oz-%=+~ Q˭i8\u5FB 1.&TЏK0{Qn [^cnn<aL' PB*KJXUBHԣ^3Oٛ֟g 7/sNO+DWD*(9#JT Y'[t_ 7Mev[٧9mk Q6d\ZdR>B7Qq9:m-&[&S/WM]C+Y23]*TʎZKQUdUPPP-UeeT =5<*^YTDQrOu{ofjUUCO*z)\]Nw,i wFo quWb29z>&ZxsuT ४G1uxtt`ѷ 9ԝ#kUPP5e0av :g$ʬgWu[:%4˟oTǶ;S|S7YX>HTD|׺22U=u߿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t^̵n_{TcnnhJ!݃YG>T4.k+%΁'bekvsUIw|TR7CzZ5T66SR{nCfۣEɾwD;⫆@a=ń$sCHWT*T{^g-ۑlZ1ݛ0yF6VSIEB)idIg^;qT5P\[PEA&Vֳ= DLX9n=ὶ^7+'Ӷ?C |!Hc*ޝI)]hCƒxSzACSkžޛy18^_Spm0VUwHXKR;LP˨ 6ޥijjt?8՛Ou^ PvcobXreE4ttM>tC":zWFlB)k)wޛ](>i'K6bXLty$bJvp5+[@Gur9xt=lMęh:-˗IufoO+SٷoF&#zւaN>~o˭sZ!/_ЙUCZwIE G=ԹRe$>&<nj4~Hi]Zu T<ִzNҾUHEδl}*pnKeWXwDqZTPqZA\'ae#m՝H+5y<Ӷ0=!4iҚ**)4= Uxgx~ެΪ!k_ϩg9 պismCu|tmTQ]NS(ل)1R&BkCêE*8 ;{lovձV`E%V|cdkW/&" J\h'%XGQr}c<6WpYE.K%CVrيk5 BzLrXJETNrD1<+V?g^ ƔRjh>g.koo<덽R7n K4HhiO11Sƭ-majK1>ր),(xgxSrX5qœkNf~`Mp f&.fRW&Sô~cRv@5TZ,mIPPEXbI}i2;SSL>/ljLg6U -4T%<42Rm f%40A:bޛ'[uQol{!mKeva7?QUacjt 2dQG^ !M3`jӳ>Ζ#3n0UIW.yjYczH&T4qX׺1yۖgb$=uoǭetI`??_~y]Ve֥KԆīXJH=uߺ^-nPG,Q >׺;Ptf$*ܝ* {^돿u*6ׯPfWă STU$JK,,LoBI$I&I'Iku~{ߺ\Y$H#]1v`,4$[AUYbKf܋u^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_3دw^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_youker-assistant/src/res/radiobutton-disable.png0000664000175000017500000000240113260315532021043 0ustar fengfengPNG  IHDR Vu\tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp S &IDATxڔRJPR;7.TRP\L-j~u3}@k]fZ]vi1C=yO0 xY2og7\{ X|񓪪3˲HQ4> y8̶m IP/^X3}SETag]u]BiiY.c ,˨m[NYL2GnftGb5Zli/a?fbVY{"7j|z<:=`+N8cߙj| 0kIIENDB`youker-assistant/src/res/checkbox-tristate.png0000664000175000017500000000322313260315532020536 0ustar fengfengPNG  IHDRl tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 5aIDATxbiig  TSq}NKX y SO#5v0 0A "~53_5˰)Gͭ[A_r ;,.5>,a%;#:.5Os_xwR 6P5ϝzG=KjRly ?~|\߯^yyyqq᜝]p`u.烉]LD #ۇEJkOߛr;Dr߿ϟ?/_rEDD韙,ؽW<_E~#˩{ D-3eٛɷ_y[M@ )ϟ?_~ddd*楓y&ܩ>W̃ٵ_zBz`vڛ7o\VVV]]]'V~.%N YL5=r+;3éUCng,p066რ60G}`")NIENDB`youker-assistant/src/res/browser_logo.png0000664000175000017500000000414213260315532017617 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp pQIDATxڬV LU=>OǗD@/CSˏ,3DrDe-֪Ùlk̍ %J̙p@[$_ $CP>9??vss98" !7Io$4y?$]WZ\ZZ*F9b t/pXy}DXdl2ؙ9HmK0y+LPE%-!2D)7ñDy^ { Fpo`m]Hή@A%jd厎X|6u^րwo{t|B̳DJ9-t|V7G?K+k6/t 4\n֣b^AvOʉ$uJ D̡_P |C[d =ϳ]b2tfgƫ[Ҷc|bRIQmZ[aꥈo;{7Lur{a'4z- í{R脼qKc¼]B5R6ׄY?w t.ݼkIeeY+Y70Lَ!< $wO{NW!&9^y& kBF摟V/N.}!,Nn+H TmP ]R ^;}v_m*r^l5DsǕ- |ݧ9<ZbݲvCcI;jJ(^|vphDŽS7PHekەZ8ыT>nT[Y > ƅc) S9Sy9|jx r#\7AO´XX@M3P [ڑ7Ug+L"I d֋qAG=0ۛE1)+Z=LkJ-~Cp#TA\:~EK}a=!yPH'湼W K!'IENDB`youker-assistant/src/res/mouse.png0000664000175000017500000000336013260315532016245 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڤWKlE]bHL 1!R$ YD+H8J$8@1Gp8@؎bI"şyvw~5]h=UއW>ȦWʭF?FmkD64-mWvd a ?bi_yUx+?coo/= TJU2}v+=@~m_߇O<]sfB!ܤǎ luN= 6 2 CXS'ާɩY,M=G\F^,CMx?L|^Yl&}H__Y6~ȶ̵K^̆IN?O=(]xxDz9`CK‚ RPx>D`F]Ijkkg~?x3E͆ U z{ b!rP y]eЀ V]1砅qd6GT,eYp Ŕ!%>ǁ!dD-G'}X<4Kh b` {pە^\R; o $Gm;51p5<ϞG,$VfыzƓ(rtTI[ U6')5[(Q@(wAUFˬg<+ɧxkY/To8 7NNP֭i+ .cCCC&Oh{fXz>FRɋ̱6џIaPeP9Gp+w3#ӛ@?<,6o!8nѧ<Ɯv{5͠:IT DhۃpWXXi'^JMa0Э747~BI9_ځY1tFIZ[@(^>WR_Hv-L'[ul*Ϳ;gZKyqsb 42 [*t3>>AǞ_pyOݻ)SOttrHN2Ԕo޽K[[j=\tٳ` 5抾`Ud5444{ #NȇN@ٲkB' nGFY8ZTE*{!z>$,o]I&(kǩQX$L+B)搰u!kG5D:,)~VVVEJ˷^Ȩ*JR H띞b]"-2ās6Jab%7*r555" P8Yʊ<+UЪJ^|Ch3yljg8JwVo6ŢX, 2Jaj7MqŃu~b>Wѩ_rwS%CK7寛"^r.Ëpyj O5pkH[ oPԚf$ pjJUߋ#q>XC/ d"4D%Nyw>3lVFz Z)LQ<$[?0/?};R-$"_^b&z-W:nvbu2+{y >]JnF B.{X^iXG3n|Z,`")au@I=+n1=9^K=g/iT&4*\!K@'hnɂPOD?ZʝU1rQW=`DdEѰSzvIR,}&Μu#@?MF f!N5K:BRpA1G  O:eIbN=pHAP䑄<]sc˒o1e4C:Y[# )k:xuV*|'LL WtPD%qsCB]86v2F`Ve~sxe2NEd154%Kdq_(~>mX~JGRP =zM9:ǃnES%Nvn _'&3"yE5N^̋E8,,+'-sy?.9 \?.yuLZGsFo]Zťr1Pkdצs&* ?I#ٽÆh`P|)^Zrqz(~ļ$uzƺy_0תH=IedQk@m` &Vv1;H{=NPlؤSzNT#ƭ0EV~LO@HWsl92ͽ((\GL٩Z?jDye#IVUJ H P68?s_}YHDUuX@Y!6"{-DAitAASO)8$ TNS:LiQg9 x*Jm'㘵PV*XVak`.4ћ%as5++%݈(%3Ο&ɢ7~TUYhh>+Q:  [$ (On>]Qqյ674?MXƄ+5d㛐ܢaT<\>Ɠ:`1.Zd"_ `V ~ *IDATxbܷo!ĎxT߿08E,0ů BIENDB`youker-assistant/src/res/minBtn.png0000664000175000017500000000041213260315532016337 0ustar fengfengPNG  IHDRG(tEXtSoftwareAdobe ImageReadyqe<IDATxb?2`b@0R(f Fd-L2#xmAS'`Ab"U5`#c&,F3hpĂ@v`L© (H$r,Mt QE,x$#dhs@',1qG7vIK)IENDB`youker-assistant/src/res/trace_logo_gray.png0000664000175000017500000000332413260315532020255 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp +IDATxڔVMK[AEI@LbЈ1I2TJ[h]\mtٝ.Zh*čD$I FyT|q>˛xa>̹sit233L79g_;7̅AGwuk/ɺEs&aY`jt{hrmZjYuill4M#*l6S< azȬv= n(Ɉv8dwwWRv'vR`0SLRh$;G_Op\jDۼKcfϠ@{fr,Cb1:<<6UU;5(Jw~~N'''7ΎDL7ծuj`...,ȈJ¯&x<1QAUF-@,Ni$B"ǧ]w% 688HCC 32nxxJj:},s\xgff(QP-@Yo@ }iK{Bk>NYAK݊z.륩)*4׺ߣL{{{B!r:fyfԼ¢X=e~m?f'2RvU噍' 7T_A2-l]Iy20q,**IENDB`youker-assistant/src/res/skin-cover.png0000664000175000017500000003605513260315532017204 0ustar fengfengPNG  IHDRE~ pHYs  9iTXtXML:com.adobe.xmp xmp.did:793C84FA7D90DF11BB44E7D84CC8D86E xmp.did:BE51189AA3DF11E09BDCD521844CEFF8 xmp.iid:19f9dc2a-cfbd-ba40-ae76-1edf467f21ca xmp.iid:868eda54-e7ed-a340-9796-2e7297cd1bb6 xmp.did:793C84FA7D90DF11BB44E7D84CC8D86E saved xmp.iid:19f9dc2a-cfbd-ba40-ae76-1edf467f21ca 2015-07-05T14:40:45+08:00 Adobe Photoshop CC (Windows) / Adobe Photoshop CC (Windows) 2015-07-05T14:40:16+08:00 2015-07-05T14:40:45+08:00 2015-07-05T14:40:45+08:00 image/png 3 1 720000/10000 720000/10000 2 65535 132 69 3h cHRMz%u0`:o_FIDATxbt?J3b6q|]A RdIYJJJ(3I4O%eX߆!ŵPA{W@0'&gaIR^jZ%HFJ?` *!=AL:wqB>9a'0{1PG2G99IRG(!8Sb9rBP*N)`-@312neuoSX6gyMO=oN}D'ZT(&ˣpxx6,\;⼑ق!X<=Ԁ9yꦵ8ze*UJN1;KLn3FLDapd24: i=gO>ԂK02[딤LP>0ԗғ~jMcUr_c$dbLq+%H*)6߱_?i\GX/#>xkGYkR N GkUK])tm@zk:{Gb,2rD!,9~+:D ,cc;^ 24"` ۮՉFŦppl{h<4#2M'4l3vEpưM2>_w:oV,oƎP #`O_j8y6Zo1<LqUS A@>@#`: . qac9.jDersGg<";3QmR-]u@;z`KtwM,`pQ:&<DViCC"`s*L*01Zd7m(]*j13"<)v=2y%^'j k W3]뷝{GxMw5:ӌl>Vv֩$pݶQd(SA^G:-'&Z613 mDN7Ř:hM!KlC,r3> EL= $m-kVKs܅(XυC3479o ܉ DvtwNÜ<6a{I|Ȇ3LOX}[?ۊs>1?ߦ+_]Κ ~|Jw0mxAa>LY"sfU`+Ve~Mq_Bp_ @s=}[n~bi5vu? Br"6"F~霭hS헃Q {4Hf;~1e>s'^BB/reT>T ,G򂚆RZbY ~(4PPReVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ38^iTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2010-07-17T14:10:41+08:00 2010-08-04T15:12:41+08:00 2010-08-04T15:12:41+08:00 image/png 3 sRGB IEC61966-2.1 xmp.iid:8185cbe3-2d43-6d4b-bf8c-cd15a17c010c xmp.did:8185cbe3-2d43-6d4b-bf8c-cd15a17c010c xmp.did:8185cbe3-2d43-6d4b-bf8c-cd15a17c010c created xmp.iid:8185cbe3-2d43-6d4b-bf8c-cd15a17c010c 2010-07-17T14:10:41+08:00 Adobe Photoshop CC (Windows) 1 720000/10000 720000/10000 2 1 18 18 ׏ cHRMz%u0`:o_FIDATxb? 0_%xesQ.1pR ḏ 0 w:Y>S䤰H7}Fq$2/0D,d? ;)e㞓l!0Ahuq&^{xA҄`f'"s/ ȸ6^R )% Z]“-"APEShU #a#c%$f\b"jJ0pν_:PnftMPϜUM&fv3@ TsTSQChfx&)YQwC`w>0d8ujI}U<ω:*R-:ٴ$Ea93Ll")--D@ J- .z,׳9khYCnUYI7cI;AbQ86r{M p rIDATx]YlVER (-Z QPVmE K!D6_sTx}D(EBE(Ee+Z+m|#wkOe̜ngΜ?0 OIL؝0$aބndBgB#p UŸ?P"\oK$ b^$%!<-ڡSqPFA6c 3  ؾo 8 w^-Hw#.~#Nqη -L0|6a!!m?@wί RGpwO e* U]@GR5ぜ#|@RSh20`-6.p%15eBL3#m9W6 h\5a!> vg!D[o!%1P®&B0$ό4Ug%$~A# oGyfC ؒLN HP!<\'q *=!o -l&q J&tw("P"y6;Fb"a/F!¶CU)ײ<# `NXew #a!ҕ=%m@%gJb)l>p(ܛY_6qMttڏ:B39SR՝렳uTNݎ@:kOCb2jv 7Z "܉\KZІCFKJ2TNSx)(~"Ƌ}.Fpb#ch-q7I"+\?1?ƌeA[c~\TE:8K|VlZh].9/ΰh@TkHA38pbE#f ssfc!{)*trds_~kW\#WkDBGkDcy M6݀2e6 ڦnіMm-z\=Db2@QV(+ι}~W/q G/$Nxl܏oU銲Q{M?Vhң"}j<[4P87 Y ^ eѴ;'q,R U87N?ؕ\SU!XLh3+1fOrT(zд1BRv`ClPs*3B=u`Uԣ. M0ȅj~YIVAbt4y ]t:NLYۥҘYB&Us?"CV"߅rU $rS+lq`KV#I1H$?o)۬H-.g!5n2qåJ1s*V9_|Xrl+B̴jvqRxӝBe"2a IidzS0'f.ۄ/+ ;ʛn;S8B]t5SϢrJ-B3f2㜄OWP8t$!,v>il`=P"}\Ċ!1Q~ VBCaCaA6dPVq !7P)vm_F^CIc)2Ρ"9(i]x|L~Пic.猓e !νl5d*6iX/ 'Q8bMWIƛ|acܵ IŘjTre¹ٌ3~t )?4pJhʋJ7ԺtuU6S3km$Jgy) i4v_"#2ږt^tkIyhG†ٔ^W^*Ύ-aKe{`SЗ_bO!|]le!HxT1w٬/,^C-eW0DrYNwSLqr 5jaIl !t4C%KZ"hD KDXHɝiX~$ j#t<繿 >a8W鹿Xy[3#azI3D Բ.HE1Ql\1Pw*pgD8ȲzD:w%σ Be bIENDB`youker-assistant/src/res/alert.png0000775000175000017500000000173213260315532016230 0ustar fengfengPNG  IHDRL(yPtEXtSoftwareAdobe ImageReadyqe<|IDATxkAgv'M=- BQzAO^zZPճ x( (A+U&g74F G6~{owT PljUA |aw5 'E H퉩.*X2N|dZn;uQDat1}A䰬T՘>κ: O>k{DIWO XyD'Ⱥ " Ⱥ bl8a3$H$@ / P,%AHf`xX@ː  @ 3 b @ 0LA,C: 0 \ A3;- x-3  04AQP,7 + P "C:'yAdR/b b1X\ AH`Y{AvmxA֌i;)5b'ɛ_>:V0CZRԮW5W|r/4dʧ>3׿Y]\fJKx|}N${!%]4KW :I8pL4 "Ɗg'EDZ$C81'ɫ$9Negʒ#1rhƥQj'1'ɛXlV[60'AJ$Fk!*J!I b$}I"9ZrF[6 v_6vVƈ1$qIwN(3fe`tڬ&rkGr^Mѐ$\ 9IJ}q 9^$j=@a?c#V'\IENDB`youker-assistant/src/res/configfile.png0000664000175000017500000000531313260315532017222 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe< mIDATxtWIl}pR$EJ,ɒKqAQ =Pȥ=kKh{%6pҦn4;q6k6r(r$@2Ҁ?o~]{(}8>:=v :,+X,s AѨ@ M׾rl6+29|ftϣ' 4apC0u@^5:7B0yh4tԃpy.u\q?.f$b!Oi(;e1lV1:4"z*G?1rCʨ]Xիo`ƑtόF]- |KTHQq$;4ʥ2HFS*><<=Fm膊ŭvK\~ۦxo`kqyyId2="éA`mu ;|DZ WW4lpy?ݓ`. #HR}I_c}gx3KR970񮇵U&{{#DGqD4h|ߨױW:H1k]]]K$ٔ NLN6 :,Mak],iJ $E[[( xIg7Їa*Y<ӯ{XS`s}5/a~vȡ_eoh@H= Do׮]c{Ykյ0j D)83(?@އ۶Hcw=&VE_E @KjM9tP(6TmWz."< 33Lk=#N(% Y1 ȮA ~*ZTPQG抲cҦmdE7uԛuqeyNK[ݑ[{-$h);Lv'p %F: v.vnBAiLLV5襎 QGj.q~ z=eէnmtwylL?c& cG166L_u7%bH"\[9 \QE\S^#H >Qo<+=}c7n2zQH$h6[Jp435|=BlYZ`q#+@<+vS-6RD[TJ*+= fYaoc܂:L1K+‘cJFQm\DY+o+ 8UKF\_0yJ(>,hwTaZ}tBBDu##׫JMa mAЮ`a}Ex~h*Gt38HwwRx_ae)OtfҬhǫR'X D q@S0`s%T`vBS5H茂l@@K'Ҫմ!c*ԤnHPR*[dܢ^ EU\ۘQ`|g12zDaA#Z2Ո=tq<h?FBF6vDePfC3(nA6"vS_ZiE,4ȯ/#nλosZRCj&k3ZYo/¹aģC7d &S$M6|>q\ ڔHG=j⪚9$bI=87e4:†Z|:baU4n2jm]dz#1eSBd~PdZ"2)9i1 3l T65Re t}IDATx]KOQwfJ4TA F|, .\ .L݉\E7BPQj@l }z/XB ~.;7mt=752)OB<5uyLy׏x \cLu~ɞpo4 c?aڞ~ܤYZ~}-zbJ ݢÞ}0} .o 镂Uf#18,fhwlJdӏoI/5w.BA|ۢgz[|[TfV`5-yy %Q >Kzc!pgP8 m@FaKRӫTǔ_O1-.Udk KciZ ŅzmӪpm!b&8/4RŌeBB`YN%Bei!gbsS!t2!{B1YB| C-`B~Z]ںyQ$X!d!CeB,l,, bHI!bvE0C0: 0 `1I`Aв:! e u,^` Fe!FA"۲0Z:Bl~Qn.QND[l/ ,j aK*D!2߈(,An1eZ Pgx;>eB`YNѱ,oD,Km^`Tl&_'SkE, c]b0bvv)Pf2}ġ6Fx ܏Ņ~{1UMVX=aD%T_#WrDucIcO &*x d}`U3_ͰTFPZ]"D1GIGW<C[GXYB^[eeH1eo{.^B׳.C CtT._ɓ&X`Q~>2YY DCP`,=/,g\.cd?^섁x%@qeX /5rϞoGh456G0j$7{GQSSDdv[?Ķ? CXX}]dII5! ǎWT2֮<ӧOq=L>3IH|Z~,,0ϟgϞ ~uix%؇#GJa nx" /Dttthbc1N`z7 ?&MٳUTlMg6MQǏq ;S$G{ Xo*9dm}9Q'*`,b%`tuuNWXJ@t޽f!qlB@ #s֨}a0;:%Yf!..ƍS׮]CII:23$D#)) sQXқIpA647DZˍ_5#F'Oē'OpB$$$`ذahUTTXd`beU5"## F `o>E02 {[6o`ԩ@ee%rss%t:1vX@ii!j=eƪU IߖӧvAאЅ &hyyyI+Wꕐә/WvܩN 'Ҵj"p=!GB:g5441fN~3TW(v[lFM444Tq>c}ȑ#2p)ub& M\B?B,ae`lu X(;~zs#^8p??/ЗGΦ{  (33S4̾pPDž |!h=p:W9>q ͈$"護WڢN[[=^Yo<,Abˮ3Jr~=nF))>EEE6mɶz璞NrQvAo:կ뽢 ?*dtzXwƆ T;UYkMېr:tK.ڲIǎCn˽Q ;0gj04lOv9 wAGErr =BtK?%#/r3FqJT<R hyPgLomX+E/sɆR6#4D.<)))SH~]k5 Fߖܜa]ʕr+y $urlټDkB9[%-"W[67h$16fixvvfJxGU 0Y>2oIENDB`youker-assistant/src/res/checkbox-press.png0000664000175000017500000000323113260315532020032 0ustar fengfengPNG  IHDR tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp 2˷IDATxڜ]HQϾ݇n65ERi$Al.C،KA"LB3ʠR؋("zpѴmιNU8s_`L2bЄJc%<7K@25 8Bh&"3Ƞa6ˆpY1;{#0A.$Kf Tj8m_^?cγ}0![; 0Fqy K*dK>SK8"O'ӯE.­:`1`Jzm` %h-& P)vLxV^\8fH4 W_!9ϰ89X#T\vjO1VBox Mt&/ptbL llY4POsUen1 ^0iodz~:'jLBSwԓ ԅӨO]|l\QvBشb =nyeizr<6҅J󡎠z~ 0rr/IENDB`youker-assistant/src/res/all_proc.png0000664000175000017500000000247013260315532016711 0ustar fengfengPNG  IHDRhtEXtSoftwareAdobe ImageReadyqe<iTXtXML:com.adobe.xmp NJNIDATxb?01@@1bLD0h # ɓ`0pqq={0lذl4AD33,# H~Õl2?04$T;jܰxbXF`{9778L#z(Q xB>ǿ v!$![dc`ef@R {iI9cйALYw޺ !wj$Vq]kQJztk  IDATx]ilU}` "DلBPX n1F(KH H4("eEJKKs̹3ޛ/~pys_gM4Mxi^V`S``s`) //`8 kK蝀6. EǷy[=\A</.ވ7_ǃm9.:p&>.?~N)byЋs5p}lA5ݐa#y$NGXa^LzSyrv|PɊ }C`j+pn30ؒ|3 %4XHs+{s p b*Nޛ>-Tg0 4kw*g W'\bN1lQa?Ǫ,*8K*zc~ł[D6Y|LւʯG/S,'p]lr63Vp!Z \F_' j+r$:2ob}^^*Q+غb߭D_Y ,ռR*`k])dćO;ḛ)&>~qiJ`ژc5D[2  DS?(J$NƒEZ4Z#}!xpj$8\P}>!zN4[ÿ #5YKIS Eq$λDzozwOm(xpn?b 23͗㖋GD|a@ǧ g{J=9{;6s?0GvtxO[!G8~@?p.zt&o>Ba_S oca<XKE>7.ҪH΢-1b}&zAc فAq_k?- Y/f399-@+`d?اHN抾Ǡ%OITNztP G$i7S'=QtS>+S'=:Ybξхm׶?碧I.3ksvߖ)+璹_cfw+8"gz$MaK|ӫe}.xO"E MEO/f4!;Kʙ8,A/2~(\4EE?ΜУȉ|.!G^?nX} ƳGQÌ;po6MAc>=W6N .L`< 3`7뻚R#8 nH 6L􍒱MmE*:g[ο/K ^HNM$ZI/-y=ˠoxgq.xAeE$xj$FdLӞ\@|(f0O{>[ rCpt\,_Ng"oǮSW;PN fEQ.1w6.\ 09cBlU`3 CBIn{Yx/*Aۍl^10lTqL" F#+F(T>g)Bv #;/XEyDmN\˘1' ̏T*ѢìhHEXlofI<kƋUEQ,QEa:0P*} *=]_Pr3]EP9+s_ st\]/Л.:]h*O)U"^T[OǸ_N2oҦs/)`杛Syپ)I:p79;1jQ$/8_jƑb &|azav}nhG=Gn腋S\\@8M[7zaEq/}) 4xy.'n ƅ7K(%We W8 S* IDATx] lEVZ"  %FT G PDEŋ*hE#D)F*Wm+ xT EEDBQ4W{vK߱;fgfiJMM 8RC B=EȋP Mի(aagla{asqL^_x@KX%(y G^'Bxpka!ILda CxpS[_ G ; .#ܡqDLZ { ~#/\$<tO-CX&,.`MyF8Cp_F4}|۳xG0<&%-(b*g%OVxV0,K9[339LdpfBa Y Qq0K#\Cm!0q5  W  2~β{*~CӄAaY#2cnNA&Y1ƥ_OSt2ڊoԇi x%߅Ent3uXl̠_) (/ȎhGTŋTKToip63FSúi`:b:j;7=GyVJ/8[No_-.ZT,pڴ)jL͓Ud6DBWgm#p-57 s7|e5vG(cq`,VZW ? aw/! /Qƺu5T6J-`-em9Qd6L\C# C`-h& hBG@ =UX]\Nd{iʋLSu)NρO;~68L-5ƳwK ؘ΢zUIQM Mb-'Xvl]WtAH,Mbx-D:1k;hSNc]5=\30D'ވ[avJGYǽhr~8SHc sfb>2!\Lv XƎH }GLSTϤ6"Xe%MJ;q?]:3Z|Am,~&2۲OuIqhgYjEJ$xa ;U%2 1qnD**cA6UUGלzSxﵚCX:Ja" 즌M#'@Y!)=[,CsIyP)E/96LV὎]6! evWᮕ>!8=f$LWYJ;7&_m|(cSh:}'pj&$ #жXCxRV!;\,ex+{j^?B{&7pHM)*bZzKQMKI(~wD!lٲBaX+nab $Vl<&/60H3J|DJVjjK0$oûD?ibZFx@}ÄJ29\7_CnI ł̖N XFċjjڼRxsغu+JF`zs9ۦ.O NU/ޜGWbSWw*XF7VA.N;׭iKr=EZ՚GW#Uk[|L/bCxy~E-g4civpD^_vz}ɘզw S8g7ӑޑ`&{viHBaU 'b: F]-o$8E/qts.34js-Z+qq=%?"Tn9m)]ME|p ǒl`ڌ|pW1 ӊ7*o@Aс5M9G] ޤXҘb0̙18V$f Z-=wLf} q38QtalI5\Q7.U؞U(&r ,b %%uh"ej7ĊxGu6ׄ+3Ij"B EJ5[œ\`DZ݌$k7߇d[?u| D -8ͳPJu l\ /c``-HUg1@u(2x~'ڬ./iBMS`ym _zB~ Nh E0"p羆ǛLtW!Ցs66 fYhw&(ИA("c`U-U|w?j^YTx|Ә8vCCC2*Ŋc[ٱ++XL}gyPeSdyPFb;kbֱYcaoۣk8{4 D,tg3>Xw|O{4,eѐwW_L }k}}}qM@ޡ><ƥRx 6:dQ' Z$S҂IS" j0݉|>肅r/+%l?pSM F<xD}t->8/Zic_@ihΔsrZ c'Ɔ&x/Tg1H6c@;kISw,@Mu0ъ]zq,ׅӐ J{TE>6:7>{$!>pvu{i8XՏG/9ez:|ʓ@j3O2J6 kwe7ߊYjnx /;,C?,N˹\1bB荳!'myt_'ۭ16G\&Gn+.)^bB.PO~'#aqYIENDB`youker-assistant/src/res/revoke_hover.png0000664000175000017500000000246613260315532017621 0ustar fengfengPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<iiTXtXML:com.adobe.xmp l+cIDATxڤSNA0!gkT >v6Q!* LB#;sf#,~7{caeVlotmD%aڋ3ʼpv x!θSC2^+K.fC]+821ow0g6ʙ8 0:CpeIENDB`youker-assistant/src/res/checkbox-unchecked.png0000664000175000017500000000200513260315532020625 0ustar fengfengPNG  IHDR ˰tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ƍq*IDATxbiig X&""@"v-sh?IENDB`youker-assistant/src/res/camera-uk.png0000664000175000017500000002633613260315532016772 0ustar fengfengPNG  IHDR|tEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp )IDATx]|mڪ.ٖ+:l !@ $p@HPCH %S;n.d*+m_IݙYJ}1^Qzwϛ yW{?ή ZN>oϥ˽ڌ5y"."خa@|uLce<zܫjayH:籞  D~n|Q3 ksʁ+Z$ț ♗0v\}zb$ֿ}2zZx0x ʁE5AkZ0#.EAkZE<#!|Vc(Rx53MU[ *Do[s }nR3U!? x QyާρZb߱*ykB`Û(M3ЫZzI!fcq~K1*W*8/8oZPoU,"z&= }آLS@^Жr oé0&ʁ+Ģ/ xskt򸘁_>zEs"A w5%QmWxXk oØ 1 ţ'e_xEg שީ`B<OHw _Z| t'#E>|.Ӆ'H7jȣNhX#7h uX ;cXAI#w99AG%8^]_U7)H5 *pTQsB&_O+ <}č;Rن:l~R(*/GQErPM-&1Yy;hcC65[v`*XnG9&s Ti +x8u@%_!ߛ;RPƛ[x,uvSMk0m{ŢRNrЂv8⋾A%ECz Xo8I)]j>of|~}y,C{:Ć6Z4Ƽ.dw1ȶjqbbyCZy~QPMsOxh?k&y $nB?6F'd6 kJ!x.i ~V;T ^[BD7;g| !C\^J~+tB?EkT8n\$}r#j}Gn66ݝi`Kɹ,&=]0\qVH7RG__s-d=Tf<~7 e2{+Y4!x3$:Ab^t" wv3FjCOA{b:Ro# YK;y,.6Y.wx7ovPw=љb#clnYJl`"m<؆$v;o>W0gw:wniH;`|4ٍ_0^ˆ2>q+ELpBO5 lF^1)b;|BO&,~[ #g"d7>nr"tԕbfU+ut:XdyYR)2.āp“?ܧ%ֶ:G?5#2Sdv % 5Xx[0W\sh] OY急Fb6RJ6_Y%t>^ >4#{^zwWv)Q4dBVe9T$.O.A6ߦ",xAOǀ?mH= CF,0PEOV=`Ir n Q;D|4a%>=e0{kizr}+"1BRM.301/hGs64)em(oGUEt 'X0r~!n 4n*i"ː&Z>g5@kRW;vR=Ċbѩ,p^/xg?9UΉP@' ИbS }I)Ii(@\X::F{-yi3`h!.pucbd87Y .&oǸִPoA3.,ANS{"dj9sVŘ$ϞJ?+.uH]4ޑ1 vj+1\I븘k@z!nʣ8{*q{珵>EWZMPN,k[WiM]zub.䤢ľpYԃ`D3Ȼqa3)_F%HmiKd!PJ'T9c aTxܟ5p2;rz`ս0DS P,ZD"qfON @* fU9oGzDE&"Qd`M-CɆO.yaZ잛j~DZP/P,$\bTGZBK` Mvv) 񼹥fXb1晪#+T" [l8Hum]DGf=:>B(o5`BqWq;Ag+z@`VyypЅZ*C5E Npn:Ҿ7k)ʖ^ AXRR/ }㉱l>L:òrWfwTia+±^Xl$)41 a!XI~zПc'VaZ :[ahcYze{]bpm tnI:{3igOkgnu{d/< #Ub2dc<0ܩr>׳-DhG/|ETH\ʖobDMFba[U@ȼTa Y?N[iM0[rv"ܨb31<.9-"_ Phvq2.LM.&WJ2 QBBo:Dr|{ٝ1 ~)Hq+̢/5xprVhuj?,Ꮢpw|!jյw)Ҵ "c|}{{p߳j|OiG^!u:?}ϫȴ4ì4NJ/|F~$&:(n)6{CU$Tt=5H%+d;s^^})M^9*0ҼaFcΝPD3Y$Ìdݗc S(2Ӝ6Z'hE\p<' twk4)4AF0yqJ] ,  QԯpMXuc[%cGjeiiU.?jIY`t:mȄM5ca6}q} 1[a6nSN`gL].S .&4e]rQ; gM2_.BTcP7맪 ҍ/0bAAyJPn-Et[:E h Cv{Ŭx4V%^X$@U:pB6e0lVJ':7)wP [+]T1EMڄT+R*&S6w::;; 4l3S']3)g"P*';c&-kcH\sUIP/R,?8UM!Y"FKG1q/jR*)aV j* k$#0-W/j{tzR`;Ixn_i!Ta7Ĵ^K͐qxd'#4جok s~Qy:Yu5c&a0l> Nȱ2Bh%^I]+ߤwk¨7bc8ekhbr~;RJ9F4Eew?e3ˊ3͞` ."#cѧ5YmQً .$eg~B]LdyS .Ra4$9EK*Ꮡ)*?U-g.ɧ _gA5F^Z`x7Vx .XrMOAsj8ɤ"!*^@(ndce[ ?}]V{3U9[[:A5#j(Hs@DwNl{pMRO׸lP >D^dB\(^Sh ]u&Uɛc{61XJ%e4Ixg(Λcqx_ztVb5gn>O{pdވƙo%Uɶ|{Dz*8Fj((@{pu喨-e5h.wP 84 mDweY)pGAWMaԣˮ\ Ô7fxA ͒/Y 'rȤ@"dV(3R;L B\$|o зě =tpmQ{ [ O/.z68$p {?omTae^IƃڷG(3N6zp-W{-74خhbGty#*d{|A㓴qOFuN+>M p}H*uAv9Wvp/(8J#J,Ү _ FR5Ί9HE Z+}OJxw M}J =T"ܬuh.h G%=^4cxa=B]w (nneA)Z#T\kMЕKXBJ*T>*\™:/5b1;:;ʂd Ԕ&? VG׏6 ' V&@?@A=֚PktPO\/SsWCYFs!"i&`**C.P!׽Z"xKk? 4Cj^jEYoϱ;\||wk.82?Ӯlx#~Y@هllu  :@71[=˭C%R}?vS7yғg*[.kAFuz+=)1-]d"?6]:]=Anpۊ3]:cdQrYau(ư1dnw<*GlKs̪z̎&UGU' .>W^hi~D+ѓ4bABY2m_UI6ߙKhn..feǿY4_ 6SɯOPx|UN)7k.^R2|TDze]9s3.٠9l ^5kM`6,@a}nA$&+,B ݠ#$EBX wǦƗƠ n'V7'+讈t4¡ }{l6׻kn&909Ex8~]h`QC ɇV"в #"ù}r?jt+)QS4CW;I߃sjmSXs_5xЉ zQ@/Flh=MX1\Kk`f 4 \q'E˹u`<$v,2~s`mO=bY%I Kuvzr=AhMq9,t,Ҥ~ΞX?!*+S'+_U sܦ}" ]{CyBIi`pSYāx*ou Aǰ5.ѭ "̔=&X9WIvO`~5t =(=chF{b:JBw]#W@85MZ6~==m!8-aai5,}tk茷}k -4ѓIZdVM,YϘ.?MM7n姃D[Z|~QJ4Ib λnf{\!ݓ_eȲ1N7ܑ.f@wU9 q.+O}:ֱEnyoLͩP #@WE/mk iZ3p">i]%X+1^ZŠar):9֜5L7\Px״h G "l b1J`{݂K&V;7vw5GZɓ2Xi{+CSj1%4,>W*9Q-HՇ|OM>ax!5҄+Y~0P'0p[S>m+]$ʗEoԢ2z"fiM] XXtI%r 1Y? ?DEcN{ :8( eT?U‹ 9,DMQ/3 +|IB:AA׺+WZnO$: q?kZϭm"RAZ0:-䙙 zTp+?Dг^e`G@XAuj]^}h^uBQO IDATxڌ{hQٰE6אF%%Ps\VVviKF?-jk.-l-i>:zO}:yy9DņB`Y -\܈SbøI!:kEl~.&~tCe,ל_0D7j#wAFk]c|ƧHP 3T8@/hĸͿ >"m*`$ȄApșAB)X&Qpj[|5- lG9-@1A2rQvw_Mm`̂Jb_ -Р\!Ml-\ k\rd' T+9lݤUG7΍N-Li$dNu]\FVuЪ wg[7YB]{(W.t7AjW`iZnfqAb6ۻYd=ZDtU 1le0WJ8 _uO#ÎHƏYf gUؠ Q-4j}0RJ:(qtv5ީ 6]IDATxڼK@/!tkXb]']ݪ*:Tе}"]k/|7.y/8M5f@w+x=.@m}\xyp1f:8/ɮ'J>r (G/8(AA_QHNy#/r[_|m Q+zAB#ݙh>."=K9Q㚝oQ]ڢFys)&HJ|TCU8muɨ37{ڪэUYWZꚌZn谭sr)oKر-r?A) 8+ @8r&$U 6ladJt'r+W^Y`LK?mL[vd ?IENDB`youker-assistant/src/res/left-tab-default.png0000664000175000017500000000030513260315532020231 0ustar fengfengPNG  IHDR(t>tEXtSoftwareAdobe ImageReadyqe<gIDATxѱ 1A-,K#[UFXS8S8q p pNN))‰S8S8p p 'NNN©?taLO s-/IENDB`youker-assistant/src/res/yellow.png0000664000175000017500000000555313260315532016436 0ustar fengfengPNG  IHDR1ܘrX pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_FIDATxbq&d# ~&lbBX¢+n-&batV"6 XTs7 bt?jШAf2KXiMnn!>C$T! IENDB`youker-assistant/src/res/cache_logo_gray.png0000664000175000017500000000254313260315532020224 0ustar fengfengPNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp ӼIDATxڼN0mCՑcUAAate$./̬ X`H*eR(е?Trc'/}J>2 C"`T+x_ b .@SdS7GexW a"m}.@S<ي7XF x 58VdtŸW%mL pF(ż?Ҷ'@HݤuQ(v~βd9f~^J;+ԉl˦nnY%.Mό*1')EkHFs0(NECFyHQdΆb&!4N<[.SMb'c tx^{B}A 9Llg,&l+ xO #9ap1IENDB`youker-assistant/src/res/chrome.png0000664000175000017500000000417613260315532016400 0ustar fengfengPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe< IDATxlW]lGfv;qN:`L4A.B(PhPA[dGPA+ !% Z/h))-N6?;?vݻ?39gvֹgvwv|s̬o>/۶=ͷ+24䏝R=? .lqCm팅'˗~_k_\;8[ќn6jT|}*vDzՀZ* yd)\iR}7'lC|4V=cɹgFGO_N=(XM=X(^Aa sYN{Ok @06Μ$hly:1j^vG QJlȉ(e'3y,E*'!<9Ӊ:]D[Fas3Q 242?4#pE*SE>rT&f'mmR&Ir(ɴZN"pU$w`|ĢI3* I;|q6E0NPwLٓiiP hP-+ JT O  j^+cFp31dQl#50u=c\v.d;R$iuf ASk]{~7ѵM[a03: <G `%% l\•!> ST.mŞLVѤA65“n.dMNGJsqxCs^^4W{`N~.~YH W9" ֌P!9ԃ}ޘTO2t)euGxT|W\@3R+opg~6w mshRd0J 5"k;hThN(#ixb$,N}?^_"J)b"ڥ%_J{ӫSG4E/yQkHI G("Jd#$Py;J#N؈@/CLDQs'O#QʕB'SKfkDs!40ENS'Er!$lȫ.!W&g8: R[J9T4)֯xFn8 KydQ,*b3&IOh>yl`ǻw#R ({:ԠKŦ4DR_c*rU oBd#p8<I\+﫛^㜐a"N!J#dz7>|W1BpkUОW*+2$d$Kv*JY^_3Gi3`СtL. B+Ð'ъ4wn@>vIH*\УK?o%3<+VDoWp~GsXj+I T >aDk `i=63n'': yOVT„/V߮<ۃM47)D~*}p3(񑋡W;lQT:y8y߾9*WE1jGgw?Ӄ9=&L&!`hvE*+ |O't^qx}e8iwtݱ{+MP n(z&䅀\&&!V|::rBן۔O-o;MP8t9:_`D$ЀcP2q~_:6d $a4*D9PtX׸~"5F[@źD] NI71 \9}(_ xi FWNGENƄD u?^X5C x4ћBv6"^v<,<| o![ѵ,2z#'pkHӐJH߁KW.llG#4 4kM-A> =*&kF/d?R(, jiG5t ]][_A?ޯtxz`ŧsPd#t\<"۱m9Ro`$7^ 9x׷1 Ǩ[IENDB`youker-assistant/src/res/view.png0000664000175000017500000000305213260315532016065 0ustar fengfengPNG  IHDR2(rLtEXtSoftwareAdobe ImageReadyqe<qiTXtXML:com.adobe.xmp dOIDATxKHTQ5JDWTԍ hV >.E\FAp!K*]B 6e(X-erf{Ǚs~ 5o3Z-(qD.<<H4iF@tgk$]-(>q[FZm(@ ЧSFca:_LSǸv?cOQxٸl,Ÿ h[#eXDQjk7!L508s-;TNJfS^a vƚރX,L R29|EX.vsd40+X= ߯j$_XJjb$ۍ_-Z#IF#|.%1gYwNvy]盰0 T88Dy=ܔf ngp~՝3%%(՝Q]rKqt$^@eOf lQ/+D5:ۘ?*1]tọ.ʱЪMl0#nzLcޠe=y~`yjPyEzqYFvfϤmh343pN05YIENDB`youker-assistant/src/upgradedialog.cpp0000664000175000017500000004621113260315532017133 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "QDesktopWidget" #include "upgradedialog.h" #include "../component/loadinglabel.h" #include "../component/utils.h" #include #include //20161228 UpgradeDialog::UpgradeDialog(QWidget *parent, /*const QString &version, */QString skin, QString arch, QString os) : QDialog(parent) { this->setWindowFlags(Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint); this->setFixedSize(334, 470); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); isBusy = false; upgradeOver = false; // cur_version = version; cur_version = qApp->applicationVersion(); baseWidget = new QWidget(this); baseWidget->setGeometry(QRect(0, 0, 334, 191)); baseWidget->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(skin))); baseWidget->setPalette(palette); close_btn = new SystemButton(baseWidget); close_btn->setFocusPolicy(Qt::NoFocus); close_btn->loadPixmap(":/sys/res/sysBtn/close_button.png"); if (arch == "aarch64" || os == "Kylin"|| os == "YHKylin") {//20161228 close_btn->move(334-36, 0); } else { close_btn->move(0, 0); } m_appNameLabel = new QLabel(baseWidget); m_appNameLabel->setGeometry(QRect(37, 0, 260, 30)); m_appNameLabel->setStyleSheet("QLabel{color:#ffffff;font-family: 方正黑体_GBK;font-size: 12px;text-align: center;font-weight:bold;}"); m_appNameLabel->setAlignment(Qt::AlignCenter); m_appNameLabel->setText(tr("check and update")); // msg_label = new QLabel(baseWidget); // msg_label->setGeometry(QRect(10, 40, 324, 20)); // msg_label->setStyleSheet("QLabel{color:#FF0000;font-family: 方正黑体_GBK;font-size: 14px;text-align: center;}"); // msg_label->setAlignment(Qt::AlignCenter); // msg_label->setText(tr("Is working, please wait a moment.")); // msg_label->hide(); net_icon_label = new QLabel(this); net_icon_label->setGeometry(QRect(76, 64, 182, 181)); net_icon_label->setStyleSheet("QLabel{background-image:url(':/res/no-net.png')}"); net_icon_label->hide(); normal_icon_label = new QLabel(this); normal_icon_label->setGeometry(QRect(76, 64, 182, 181)); normal_icon_label->setStyleSheet("QLabel{background-image:url(':/res/upgrade-normal.png');color:#ffffff;font-family: 方正黑体_GBK;font-size: 22px;text-align: center;}"); normal_icon_label->setAlignment(Qt::AlignCenter); normal_icon_label->hide(); ok_icon_label = new QLabel(this); ok_icon_label->setGeometry(QRect(76, 64, 182, 181)); ok_icon_label->setStyleSheet("QLabel{background-image:url(':/res/upgrade-ok.png')}"); ok_icon_label->hide(); work_loading_label = new LoadingLabel(this, "working"); work_loading_label->setGeometry(QRect(76, 64, 182, 181)); work_loading_label->show(); upgrade_loading_label = new LoadingLabel(this, "upgrading"); upgrade_loading_label->setGeometry(QRect(76, 64, 182, 181)); upgrade_loading_label->hide(); // movie_label = new QLabel(this); // movie_label->setGeometry(QRect(76, 91, 182, 181)); // movie = new QMovie("://res/move.gif"); // movie_label->setMovie(movie); // timer = new QTimer(this); version_label = new QLabel(this); version_label->setObjectName("smallgrayLabel"); version_label->setGeometry(QRect(10, 440, 324, 20)); version_label->setText(tr("Current verison:") + qApp->applicationVersion()); doing_label = new QLabel(this); doing_label->setWordWrap(true);//QLabel自动换行 doing_label->setStyleSheet("QLabel{color:#000000;font-family: 方正黑体_GBK;font-size: 22px;text-align: center;}"); doing_label->setAlignment(Qt::AlignCenter); doing_label->setGeometry(QRect(10, 264, 324, 30)); error_label = new QLabel(this); error_label->setGeometry(QRect(10, 264, 324, 30)); error_label->setWordWrap(true);//QLabel自动换行 error_label->setStyleSheet("QLabel{color:#000000;font-family: 方正黑体_GBK;font-size: 22px;text-align: center;}"); error_label->setAlignment(Qt::AlignCenter); error_label->hide(); tip_label = new QLabel(this); tip_label->setGeometry(QRect(10, 294, 324, 30)); tip_label->setWordWrap(true);//QLabel自动换行 tip_label->setStyleSheet("QLabel{color:#999999;font-family: 方正黑体_GBK;font-size: 12px;text-align: center;}"); tip_label->setAlignment(Qt::AlignCenter); tip_label->hide(); visit_label = new QLabel(this); visit_label->setGeometry(QRect(10, 294, 324, 30)); visit_label->setWordWrap(true);//QLabel自动换行 visit_label->setStyleSheet("QLabel{color:#999999;font-family: 方正黑体_GBK;font-size: 12px;text-align: center;}"); visit_label->setAlignment(Qt::AlignCenter); // visit_label->hide(); new_widget = new QWidget(this); new_widget->setGeometry(QRect(17, 264, 300, 80)); new_widget->setStyleSheet("QWidget{background:transparent; border:1px solid #3f96e4;}"); new_widget->hide(); official_label = new QLabel(new_widget); official_label->setWordWrap(true);//QLabel自动换行 official_label->setStyleSheet("QLabel{border:none;color:#000000;font-family: 方正黑体_GBK;font-size: 13px;text-align: center;}");//background: transparent; official_label->setAlignment(Qt::AlignCenter); official_label->setGeometry(QRect(0, 15, 60, 30)); official_label->setText(tr("Official version")); hook_label = new QLabel(new_widget); // hook_label->setGeometry(QRect(18, 32, 23, 16)); hook_label->setGeometry(QRect(18, 50, 23, 16)); hook_label->setStyleSheet("QLabel{background: transparent;border:none;background-image:url(':/res/hook.png')}"); vline = new QLabel(new_widget); vline->setGeometry(QRect(60, 0, 1, 80)); vline->setStyleSheet("QLabel{background-color:#3f96e4;}"); // new_label = new QLabel(this); new_label = new QLabel(new_widget); new_label->setWordWrap(true);//QLabel自动换行 new_label->setStyleSheet("QLabel{border:none;color:#000000;font-family: 方正黑体_GBK;font-size: 16px;text-align: left;}");//background: transparent; new_label->setGeometry(QRect(70, 10, 220, 30)); new_label->setText(tr("New version:")); // new_label->setGeometry(QRect(10, 264, 324, 20)); // new_label->hide(); new_num_label = new QLabel(new_widget); new_num_label->setWordWrap(true);//QLabel自动换行 // new_num_label->setObjectName("smallgrayLabel"); new_num_label->setStyleSheet("QLabel{border:none;color:#000000;font-family: 方正黑体_GBK;font-size: 16px;text-align: left;}");//background: transparent; new_num_label->setGeometry(QRect(70, 40, 220, 30)); error_label->setText(tr("An error occurred!")); tip_label->setText(tr("Network or local sources anomaly")); doing_label->setText(tr("Testing network and local sources...")); // visit_label->setText(tr("you can visit ") + QString::fromLocal8Bit(" UK official website ") + tr("to download the lastest deb package")); // visit_label->setText(tr("you can visit ") + tr(" UK official website ") + tr("to download the lastest deb package")); visit_label->setText(tr("you can visit the UK official website to download the lastest deb package")); retryBtn = new QPushButton(this); retryBtn->setFocusPolicy(Qt::NoFocus); retryBtn->setStyleSheet("QPushButton{background-image:url('://res/retry.png');border:0px;color:#ffffff;font-family: 方正黑体_GBK;font-size: 30px;}QPushButton:hover{background:url('://res/retry-hover.png');}QPushButton:pressed{background:url('://res/retry-press.png');}"); retryBtn->hide(); retryBtn->setText(tr("Retry")); retryBtn->setGeometry(QRect(74, 350, 186, 56)); progressbar = new QProgressBar(this); progressbar->setValue(0); progressbar->setGeometry(QRect(30, 340, 284, 30)); progressbar->hide(); progressbar->setStyleSheet("QProgressBar{background-color:#ffffff;border:1px solid #aaaaaa;border-radius:0px;color:#666666;font-family: 方正黑体_GBK;text-align:center;}" "QProgressBar:chunk{background-color:#b1dcff;}"); okBtn = new QPushButton(this); okBtn->setFocusPolicy(Qt::NoFocus); okBtn->setStyleSheet("QPushButton{background-image:url('://res/retry.png');border:0px;color:#ffffff;font-family: 方正黑体_GBK;font-size: 30px;}QPushButton:hover{background:url('://res/retry-hover.png');}QPushButton:pressed{background:url('://res/retry-press.png');}"); okBtn->hide(); okBtn->setText(tr("Finish")); okBtn->setGeometry(QRect(74, 350, 186, 56)); upgradeBtn = new QPushButton(this); upgradeBtn->setFocusPolicy(Qt::NoFocus); upgradeBtn->setGeometry(QRect(234, 437, 91, 25)); upgradeBtn->setObjectName("blackButton"); upgradeBtn->setText(tr("Upgrade")); upgradeBtn->hide(); splitlabel = new QLabel(this); splitlabel->setGeometry(QRect(0, 430, 334, 1)); splitlabel->setFixedHeight(1); splitlabel->setStyleSheet("QLabel{background:#e0e0e0;}"); this->initConnect(); } UpgradeDialog::~UpgradeDialog() { // if(movie != NULL) { // delete movie; // movie = NULL; // } // if (timer != NULL) { // disconnect(timer,SIGNAL(timeout()),this,SLOT(slotDisappearTip())); // if(timer->isActive()) { // timer->stop(); // } // delete timer; // timer = NULL; // } } void UpgradeDialog::initConnect() { connect(close_btn, SIGNAL(clicked()), this, SLOT(onCloseBtnClicked())); connect(retryBtn, SIGNAL(clicked()), this, SLOT(onRetryBtnClicked())); connect(upgradeBtn, SIGNAL(clicked()), this, SLOT(onUpgradeBtnClicked())); connect(okBtn, SIGNAL(clicked()), this, SIGNAL(close_signal())); // connect(timer, SIGNAL(timeout()), this, SLOT(slotDisappearTip())); connect(visit_label,SIGNAL(linkActivated(QString)),this,SLOT(openUrl(QString))); } //void UpgradeDialog::slotDisappearTip() //{ // msg_label->hide(); //} void UpgradeDialog::openUrl(QString url) { QDesktopServices::openUrl(QUrl(url)); } void UpgradeDialog::startAccessData() { QTimer::singleShot(100, this, SLOT(checkLastestVersion())); } void UpgradeDialog::showErrorComponents() { error_label->show(); tip_label->show(); retryBtn->show(); doing_label->hide(); visit_label->hide(); } void UpgradeDialog::showUpdateSourceComponents() { doing_label->setText(tr("Start to update the local sources")); visit_label->show(); progressbar->setValue(0); progressbar->show(); } void UpgradeDialog::checkLastestVersion() { //check source list valid or not this->isBusy = true; work_loading_label->startLoading(); // movie->start(); sessionProxy->start_check_source_useable_qt(); } void UpgradeDialog::onRetryBtnClicked() { this->isBusy = true; net_icon_label->hide(); error_label->hide(); tip_label->hide(); retryBtn->hide(); work_loading_label->show(); work_loading_label->startLoading(); doing_label->setText(tr("Testing network and local sources...")); doing_label->show(); visit_label->show(); // movie_label->show(); // movie->start(); sessionProxy->start_check_source_useable_qt(); } void UpgradeDialog::receiveCheckResultSignal(bool result) { if(result == false) { this->isBusy = false; work_loading_label->stopLoading(); work_loading_label->hide(); // movie->stop(); // movie_label->hide(); net_icon_label->show(); this->showErrorComponents(); } else { this->isBusy = true; this->showUpdateSourceComponents(); systemProxy->update_source(); //test by kobe // progressbar->hide(); // visit_label->hide(); // work_loading_label->stopLoading(); // work_loading_label->hide(); // normal_icon_label->show(); // doing_label->setText(tr("Local sources updated")); // QStringList version_list = sessionProxy->checkNewVersion(); // qDebug() << version_list;//("1.2.0-0ubuntu1", "1.2.0-0ubuntu1", "1.3.1-0ubuntu1", "1") // if(version_list.length() == 4) { // if(version_list.at(3) == "1") { // normal_icon_label->setText(tr("Found a new version")); // new_widget->show(); // this->cur_version = version_list.at(2); // new_num_label->setText(this->cur_version); // upgradeBtn->show(); // doing_label->hide(); // } // else { // normal_icon_label->setText(tr("Not found")); // } // } } } void UpgradeDialog::receiveFetchSignal(QString msg_type, QStringList msg) { if(msg_type == "down_start") { if( msg.length() == 3 && msg.at(0) == "kylin-assistant" && msg.at(2) == "install") { if(msg.at(1) == "0") { doing_label->setText(tr("Start to download")); } } else if( msg.length() == 3 && msg.at(0) == "#update" && msg.at(1) == "0" && msg.at(2) == "update") { doing_label->setText(tr("Start to update the local sources")); } } else if(msg_type == "down_stop") { if( msg.length() == 3 && msg.at(0) == "kylin-assistant" && msg.at(2) == "install") { if(msg.at(1) == "0") { doing_label->setText(tr("Download completely")); } } else if( msg.length() == 3 && msg.at(0) == "#update" && msg.at(1) == "200" && msg.at(2) == "update") { progressbar->hide(); visit_label->hide(); // movie->stop(); // movie_label->hide(); work_loading_label->stopLoading(); work_loading_label->hide(); normal_icon_label->show(); doing_label->setText(tr("Local sources updated")); QStringList version_list = sessionProxy->checkNewVersion(); // qDebug() << version_list << "=====" << version_list.length();//("1.2.0-0ubuntu1", "1.2.0-0ubuntu1", "1.3.1-0ubuntu1", "1") if(version_list.length() == 1) { // version_label->setText(version_list.at(0)); normal_icon_label->setText(tr("Not found")); } else if(version_list.length() == 4) { // version_label->setText(version_list.at(2)); if(version_list.at(3) == "1") { normal_icon_label->setText(tr("Found a new version")); // new_label->show(); new_widget->show(); this->cur_version = version_list.at(2); new_num_label->setText(this->cur_version); upgradeBtn->show(); doing_label->hide(); } else { normal_icon_label->setText(tr("Not found")); } } this->isBusy = false; } } else if(msg_type == "down_fetch" || msg_type == "down_done") { if(msg.length() == 3 && msg.at(0) == "#update" && msg.at(2) == "update") { doing_label->setText(tr("Updating local sources...") + QString::number(int(msg.at(1).toDouble())) + "%"); progressbar->setValue(msg.at(1).toFloat()); } } } void UpgradeDialog::receiveAptSignal(QString msg_type, QStringList msg) { if(msg_type == "apt_finish") { if( msg.length() == 3 && msg.at(0) == "kylin-assistant" && msg.at(1) == "200" && msg.at(2) == "install") { this->isBusy = false; this->upgradeOver = true; ok_icon_label->show(); okBtn->show(); doing_label->setText(tr("Kylin Assistant is the latest version")); version_label->setText(tr("Current verison:") + this->cur_version); upgrade_loading_label->stopLoading(); upgrade_loading_label->hide(); progressbar->setValue(100); progressbar->hide(); emit this->showBackendBtnSignal(true); // visit_label->hide(); } } else if(msg_type == "apt_start") { if( msg.length() == 3 && msg.at(0) == "kylin-assistant" && msg.at(1) == "0" && msg.at(2) == "install") { doing_label->setText(tr("Start to install")); progressbar->setValue(0); } } else if(msg_type == "apt_pulse") { if( msg.length() == 4){ //installing doing_label->setText(tr("Upgrading the main program...") + QString::number(int(msg.at(1).toDouble())) + "%"); progressbar->setValue(msg.at(1).toFloat()); } } else { qDebug() << "apt->" << msg_type; qDebug() << msg; } } void UpgradeDialog::resetTitleSkin(QString skin) { QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(skin))); baseWidget->setPalette(palette); } void UpgradeDialog::resetVersionNumber(QStringList version_list) { qDebug() << "new version->" << version_list; } void UpgradeDialog::onCloseBtnClicked() { // if (timer->isActive()) // timer->stop(); if(this->isBusy) { emit this->showBackendBtnSignal(false); } else if(this->upgradeOver) { emit this->close_signal(); } this->close(); // if(this->isBusy) { // msg_label->show(); // timer->start(3000); // } // else { // if (timer->isActive()) // timer->stop(); // this->close(); // } } void UpgradeDialog::onUpgradeBtnClicked() { this->isBusy = true; // new_label->hide(); new_widget->hide(); upgradeBtn->hide(); normal_icon_label->hide(); upgrade_loading_label->show(); upgrade_loading_label->startLoading(); doing_label->show(); doing_label->setText(tr("Start to upgrade the main program")); visit_label->show(); progressbar->setValue(0); progressbar->show(); // net_icon_label->hide(); // movie_label->show(); // movie->start(); systemProxy->update_myself(); } void UpgradeDialog::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; m_dragPosition = event->globalPos() - this->frameGeometry().topLeft(); event->accept(); } } void UpgradeDialog::mouseReleaseEvent(QMouseEvent *) { m_mousePressed = false; } void UpgradeDialog::mouseMoveEvent(QMouseEvent *event) { if(m_mousePressed) { QPoint move_pos = event->globalPos(); move(move_pos - m_dragPosition); event->accept(); } } youker-assistant/src/aboutdialog.h0000664000175000017500000000426213260315532016263 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 ABOUTDIALOG_H #define ABOUTDIALOG_H #include #include #include #include #include "../component/systembutton.h" class QParallelAnimationGroup; class AboutDialog : public QDialog { Q_OBJECT public: explicit AboutDialog(QWidget *parent = 0, /*const QString &version="", */QString skin = ":/background/res/skin/1.png", QString arch = "", QString os = ""); ~AboutDialog(); void initConnect(); void resetTitleSkin(QString skin); void initAnimation(); public slots: void onCloseBtnClicked(); void openUrl(QString url); void onAboutBtnClicked(); void onContributorBtnClicked(); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 QWidget *baseWidget; SystemButton *close_btn; QPushButton *aboutBtn; QPushButton *contributorBtn; QLabel *indicator; // QLabel *aboutIndicator; // QLabel *contributorIndicator; // QTextEdit *aboutEdit; QTextBrowser *aboutEdit; QTextEdit *contributorEdit; QLabel *iconLabel; QLabel *m_appNameLabel; QPushButton *okBtn; // QLabel *versionLabel; // QLabel *linkLabel; QParallelAnimationGroup *aboutGroup; QParallelAnimationGroup *contributorGroup; }; #endif // ABOUTDIALOG_H youker-assistant/src/skincenter.cpp0000664000175000017500000006145513260315532016500 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "skincenter.h" #include "mainwindow.h" #include #include #include #include //20161228 SkinCenter::SkinCenter(QWidget *parent, QString skin, QString arch, QString os) :QDialog(parent) { this->setFixedSize(442, 340); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); // this->setStyleSheet("QDialog{border: 1px solid gray;border-radius:2px}"); // this->setStyleSheet("QDialog{border: none;background-color: #ffffff;}"); setWindowFlags(Qt::FramelessWindowHint); // title_bar = new KylinTitleBar(this); this->setWindowTitle(tr("Skin Setting")); last_skin_path = skin; aboutGroup = NULL; contributorGroup = NULL; // mouse_enter = false; baseWidget = new QWidget(this); baseWidget->setGeometry(QRect(0, 0, 442, 82)); baseWidget->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(skin))); baseWidget->setPalette(palette); close_btn = new SystemButton(baseWidget); close_btn->setFocusPolicy(Qt::NoFocus); close_btn->loadPixmap(":/sys/res/sysBtn/close_button.png"); if (arch == "aarch64" || os == "Kylin" || os == "YHKylin") {//20161228 close_btn->move(442-36, 0); } else { close_btn->move(0, 0); } label = new QLabel(baseWidget); label->setGeometry(QRect(71, 0, 300, 30)); label->setStyleSheet("QLabel{color:#ffffff;font-family: 方正黑体_GBK;font-size: 12px;text-align: center;font-weight:bold;}"); label->setAlignment(Qt::AlignCenter); label->setText(tr("Skin Setting")); skin_widget = new QWidget(this); // skin_widget->setGeometry(QRect(6, 92, 430, 230)); skin_widget->setGeometry(QRect(15, 93, 420, 240)); list_widget = NULL; custom_list_widget = NULL; sysBtn = new QPushButton(baseWidget); sysBtn->setText(tr("Default")); sysBtn->setGeometry(QRect(10, 50, 60, 24)); customBtn = new QPushButton(baseWidget); customBtn->setText(tr("Custom")); customBtn->setGeometry(QRect(75, 50, 60, 24)); indicator = new QLabel(baseWidget); indicator->setStyleSheet("QLabel{background-image:url('://res/underline.png');background-position:center;}"); indicator->setGeometry(QRect(10, 75, 60, 2)); sysBtn->setFocusPolicy(Qt::NoFocus); sysBtn->setObjectName("transparentButton"); customBtn->setFocusPolicy(Qt::NoFocus); customBtn->setObjectName("transparentButton"); sysBtn->setStyleSheet("QPushButton{border:none;text-align:center;font-family: 方正黑体_GBK;font-size:14px;color:#ffffff;}");//QPushButton:hover{color:#666666;} background:transparent customBtn->setStyleSheet("QPushButton{border:none;text-align:center;font-family: 方正黑体_GBK;font-size:14px;color:#ffffff;}");//QPushButton:hover{color:#666666;} background:transparent // QVBoxLayout *layout = new QVBoxLayout(); // layout->addWidget(title_bar); // layout->addWidget(skin_widget); // layout->setSpacing(10); // layout->setMargin(0); // layout->setContentsMargins(0, 0, 0, 0); // setLayout(layout); // list_widget = new KylinListWidget(); // connect(list_widget, SIGNAL(sendBackgroundName(QString)), this, SLOT(changeSkinCenterBackground(QString))); // list_widget->setMouseTracking(true);//hover need it // list_widget->setAutoFillBackground(false); // using_label = new QLabel(list_widget); // using_label->setFixedSize(17, 26); // using_label->setAutoFillBackground(true); // QPalette palette; //// palette.setBrush(using_label->backgroundRole(), QBrush(QPixmap("://res/clothes.png"))); // palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/clothes.png"))); // using_label->setPalette(palette); // using_label->show(); //// QHBoxLayout *list_layout = new QHBoxLayout(); //// list_layout->addWidget(list_widget); //// list_layout->setSpacing(0); //// list_layout->setMargin(0); //// list_layout->setContentsMargins(1, 0, 1, 1); //// QVBoxLayout *layout = new QVBoxLayout(); //// layout->addWidget(title_bar); ////// layout->addWidget(list_widget); //// layout->addLayout(list_layout); //// layout->setSpacing(0); //// layout->setMargin(0); //// layout->setContentsMargins(0, 0, 0, 0); //// setLayout(layout); // QGridLayout *grid_layout = new QGridLayout(); // grid_layout->addWidget(list_widget); // QVBoxLayout *layout = new QVBoxLayout(); // layout->addWidget(title_bar); // layout->addLayout(grid_layout); // layout->setSpacing(0); // layout->setMargin(0); // layout->setContentsMargins(0, 0, 0, 0); // setLayout(layout); //// delayTimer = QTimer(); // this->setLanguage(); this->initAnimation(); this->initConnect(); } SkinCenter::~SkinCenter() { if(aboutGroup != NULL) { delete aboutGroup; aboutGroup = NULL; } if(contributorGroup != NULL) { delete contributorGroup; contributorGroup = NULL; } for(int i=0; iisActive()) { // delayTimer->stop(); // } // if (delayTimer != NULL) { // delete delayTimer; // delayTimer = NULL; // } } //void SkinCenter::setLanguage() //{ //} void SkinCenter::initAnimation() { QRect mainAcitonRect(10, 75, 60, 2); QRect origAcitonRect(75, 75, 60, 2); QPropertyAnimation *aboutAnimation = new QPropertyAnimation(indicator, "geometry"); aboutAnimation->setDuration(300); aboutAnimation->setStartValue(origAcitonRect); aboutAnimation->setEndValue(mainAcitonRect); aboutGroup = new QParallelAnimationGroup(this); aboutGroup->addAnimation(aboutAnimation); QPropertyAnimation *contributorAnimation = new QPropertyAnimation(indicator, "geometry"); contributorAnimation->setDuration(300); contributorAnimation->setStartValue(mainAcitonRect); contributorAnimation->setEndValue(origAcitonRect); contributorGroup = new QParallelAnimationGroup(this); contributorGroup->addAnimation(contributorAnimation); } void SkinCenter::initConnect() { // connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); connect(close_btn, SIGNAL(clicked()), this, SLOT(onCloseButtonClicked())); connect(sysBtn,SIGNAL(clicked()), this, SLOT(showSystem())); connect(customBtn,SIGNAL(clicked()), this, SLOT(showCustom())); // connect(delayTimer, SIGNAL(timeout()), this, SLOT(changeAnimationStep())); } void SkinCenter::showSystem() { aboutGroup->start(); if(list_widget != NULL) list_widget->show(); if(custom_list_widget != NULL) custom_list_widget->hide(); } void SkinCenter::showCustom() { contributorGroup->start(); if(custom_list_widget != NULL) custom_list_widget->show(); if(list_widget != NULL) list_widget->hide(); } void SkinCenter::onCloseButtonClicked() { this->close(); } void SkinCenter::changeSkinCenterBackground(QString pciture) { // int index = 1; last_skin_path = pciture; QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(last_skin_path))); baseWidget->setPalette(palette); // title_bar->resetBackground(last_skin_path); // int start_pos = pciture.lastIndexOf("/") + 1; // int end_pos = pciture.length(); // index = pciture.mid(start_pos, end_pos-start_pos).replace(".png", "").toInt(); // qDebug() << index; // QListWidgetItem *cur_item = list_widget->item(index - 1); // this->initUsingLogo(cur_item); mainwindow->changeSkin(pciture); } void SkinCenter::changeEnterBackground(QString pciture) { mainwindow->reViewThePointSkin(pciture); // title_bar->resetBackground(pciture); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(pciture))); baseWidget->setPalette(palette); } void SkinCenter::changeLeaveBackground() { mainwindow->reViewTheOrgSkin(); // title_bar->resetBackground(last_skin_path); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(last_skin_path))); baseWidget->setPalette(palette); } void SkinCenter::deleteBackground(QString picture) { bool result = mainwindow->deleteFile(picture); if (result) { // list_widget->clear_card(); custom_list_widget->clear_card(); this->reloadBackgroundList(); QString conf_skin = mainwindow->getCurrentBackgroundAbsName(); if (conf_skin == picture) this->changeSkinCenterBackground(":/background/res/skin/1.png"); } } void SkinCenter::initSysBackgroundList() { // self.winListWidget = CardWidget(427, 88, 6, self.ui.winpageWidget) // self.winListWidget.setGeometry(0, 50, 860 + 6 + (20 - 6) / 2, 516) // self.winListWidget.calculate_data() // list_widget = new CardWidget(200, 88, 6, this->skin_widget); list_widget = new CardWidget(130, 87, 10, this->skin_widget); list_widget->setGeometry(QRect(0, 0, 420, 240)); list_widget->calculate_data(); QDir picdir("/var/lib/kylin-assistant-daemon/default"); picdir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); picdir.setSorting(QDir::Size | QDir::Reversed); QStringList filters; filters << "*.jpg" << "*.png"; picdir.setNameFilters(filters); QFileInfoList list = picdir.entryInfoList(); QString cur_skin = mainwindow->getCurrentBackgroundName(); card_list.clear(); // qDebug() << "getCurrentBackgroundName->" << mainwindow->getCurrentBackgroundName(); QSignalMapper *signal_mapper = new QSignalMapper(this); for (int j = 0; j < list.size(); ++j) { QFileInfo fileInfo = list.at(j); // qDebug() << fileInfo.fileName(); ItemCard *card = new ItemCard(fileInfo.fileName(), false, list_widget->cardPanel); // card->resetdislayDelBtnValue(true);//test card_list.append(card); if(cur_skin == fileInfo.fileName()) card->showUsingLogo(true); list_widget->add_card(card); connect(card, SIGNAL(sendBackgroundName(QString)), signal_mapper, SLOT(map())); signal_mapper->setMapping(card, QString::number(j, 10)); connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchUsingLogo(QString))); connect(card, SIGNAL(sendBackgroundName(QString)), this, SLOT(changeSkinCenterBackground(QString))); connect(card, SIGNAL(sendEnterBackground(QString)), this, SLOT(changeEnterBackground(QString))); connect(card, SIGNAL(sendLeaveBackground()), this, SLOT(changeLeaveBackground())); // connect(card, SIGNAL(sendDelteSignal(QString)), this, SLOT(deleteBackground(QString))); } // custom_list_widget = new CardWidget(212, 100, 20, this->skin_widget); custom_list_widget = new CardWidget(130, 87, 10, this->skin_widget); custom_list_widget->hide(); // custom_list_widget->setGeometry(QRect(30, 0, 500, 239)); custom_list_widget->setGeometry(QRect(0, 0, 420, 240)); custom_list_widget->calculate_data(); QDir customdir("/var/lib/kylin-assistant-daemon/custom"); customdir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); customdir.setSorting(QDir::Size | QDir::Reversed); customdir.setNameFilters(filters); QFileInfoList custom_list = customdir.entryInfoList(); QString cur_custom_skin = mainwindow->getCurrentBackgroundName(); custom_card_list.clear(); // qDebug() << "getCurrentBackgroundName->" << mainwindow->getCurrentBackgroundName(); QSignalMapper *custom_mapper = new QSignalMapper(this); for (int j = 0; j < custom_list.size(); ++j) { QFileInfo fileInfo = custom_list.at(j); ItemCard *card = new ItemCard(fileInfo.fileName(), true, custom_list_widget->cardPanel); card->resetdislayDelBtnValue(true); custom_card_list.append(card); if(cur_custom_skin == fileInfo.fileName()) card->showUsingLogo(true); custom_list_widget->add_card(card); connect(card, SIGNAL(sendBackgroundName(QString)), custom_mapper, SLOT(map())); custom_mapper->setMapping(card, QString::number(j, 10)); connect(custom_mapper, SIGNAL(mapped(QString)), this, SLOT(switchCusteomUsingLogo(QString))); connect(card, SIGNAL(sendBackgroundName(QString)), this, SLOT(changeSkinCenterBackground(QString))); connect(card, SIGNAL(sendEnterBackground(QString)), this, SLOT(changeEnterBackground(QString))); connect(card, SIGNAL(sendLeaveBackground()), this, SLOT(changeLeaveBackground())); connect(card, SIGNAL(sendDelteSignal(QString)), this, SLOT(deleteBackground(QString))); } ItemCard *card = new ItemCard("://res/create.png", true, custom_list_widget->cardPanel); custom_card_list.append(card); custom_list_widget->add_card(card); connect(card, SIGNAL(sendAddSignal()), this, SLOT(addCustomBackground())); // list_widget->setIconSize(QSize(150, 100)); // list_widget->setResizeMode(QListView::Adjust); // list_widget->setViewMode(QListView::IconMode); // list_widget->setMovement(QListView::Static); // list_widget->setSpacing(9); // list_widget->setMainWindow(mainwindow); // list_widget->setFocusPolicy(Qt::NoFocus); // for(int index = 0; index < 4; ++index) // { // QString iconPath = QString(":/background/res/skin/%1.png").arg(index + 1); // QPixmap pixMap(iconPath); // KylinListWidgetItem *item = new KylinListWidgetItem(QIcon(pixMap.scaled(QSize(150,100))), ""); // item->setMainWindow(mainwindow); // item->setSkinName(iconPath); // item->setSizeHint(QSize(150,100)); // list_widget->insertItem(index, item); // } //// qDebug() << mainwindow->getCurrentBackgroundIndex(); //// QListWidgetItem *cur_item = list_widget->item(mainwindow->getCurrentBackgroundIndex() - 1); //// this->initUsingLogo(cur_item); } void SkinCenter::reloadBackgroundList() { // list_widget->setGeometry(QRect(0,2, 500, 230)); // list_widget->calculate_data(); custom_list_widget->setGeometry(QRect(0,2, 500, 230)); custom_list_widget->calculate_data(); // QDir picdir("/var/lib/kylin-assistant-daemon/default"); QDir picdir("/var/lib/kylin-assistant-daemon/custom"); picdir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); picdir.setSorting(QDir::Size | QDir::Reversed); QStringList filters; filters << "*.jpg" << "*.png"; picdir.setNameFilters(filters); QFileInfoList list = picdir.entryInfoList(); QString cur_skin = mainwindow->getCurrentBackgroundName(); // card_list.clear(); //no need to call this code, because it have called custom_list_widget->clear_card(); // for(int i=0; icardPanel); ItemCard *card = new ItemCard(fileInfo.fileName(), true, custom_list_widget->cardPanel); card->resetdislayDelBtnValue(true); card->show(); // card_list.append(card); custom_card_list.append(card); if(cur_skin == fileInfo.fileName()) card->showUsingLogo(true); // list_widget->add_card(card); custom_list_widget->add_card(card); connect(card, SIGNAL(sendBackgroundName(QString)), signal_mapper, SLOT(map())); signal_mapper->setMapping(card, QString::number(j, 10)); // connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchUsingLogo(QString))); connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchCusteomUsingLogo(QString))); connect(card, SIGNAL(sendBackgroundName(QString)), this, SLOT(changeSkinCenterBackground(QString))); connect(card, SIGNAL(sendEnterBackground(QString)), this, SLOT(changeEnterBackground(QString))); connect(card, SIGNAL(sendLeaveBackground()), this, SLOT(changeLeaveBackground())); connect(card, SIGNAL(sendDelteSignal(QString)), this, SLOT(deleteBackground(QString))); } ItemCard *card = new ItemCard("://res/create.png", true, custom_list_widget->cardPanel); card->show(); custom_card_list.append(card); custom_list_widget->add_card(card); connect(card, SIGNAL(sendAddSignal()), this, SLOT(addCustomBackground())); } void SkinCenter::addCustomBackground() { //QStringList fileNameList; //QString fileName; //QFileDialog* fd = new QFileDialog(this); //fd->resize(500, 471); // // fd->setFilter("Allfile(*.*);;png(*.png);;jpg(*.jpg)"); //fd->setNameFilter(tr("Image Files(*.jpg *.png)")); //fd->setViewMode(QFileDialog::List); //if (fd->exec() == QDialog::Accepted) //{ // fileNameList = fd->selectedFiles(); // fileName = fileNameList[0]; // // qDebug() << "select pic name ->" << fileName; // bool result = mainwindow->CopyFile(fileName); // if(result == true) { // custom_list_widget->clear_card(); // this->reloadBackgroundList(); // int start_pos = fileName.lastIndexOf("/") + 1; // int end_pos = fileName.length(); // QString icon_name = "/var/lib/kylin-assistant-daemon/custom/"; // QString abs_name = icon_name.append(fileName.mid(start_pos, end_pos-start_pos)); // // qDebug() << "abs_name->" << abs_name; // this->changeSkinCenterBackground(abs_name); // //change custom using logo // for(int i=0; igetCardName(); // if(card->getCardName() == abs_name) // { // card->showUsingLogo(true); // } // else // { // card->showUsingLogo(false); // } // } // //change system using logo // for(int i=0; ishowUsingLogo(false); // } // } //} //else // fd->close(); QStringList fileNameList; QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Files(*.png *.jpg)")); if (fileName.length() == 0) { // QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); } else { bool result = mainwindow->CopyFile(fileName); if(result == true) { custom_list_widget->clear_card(); this->reloadBackgroundList(); int start_pos = fileName.lastIndexOf("/") + 1; int end_pos = fileName.length(); QString icon_name = "/var/lib/kylin-assistant-daemon/custom/"; QString abs_name = icon_name.append(fileName.mid(start_pos, end_pos-start_pos)); this->changeSkinCenterBackground(abs_name); for(int i=0; igetCardName(); if(card->getCardName() == abs_name) { card->showUsingLogo(true); } else { card->showUsingLogo(false); } } //change system using logo for(int i=0; ishowUsingLogo(false); } } // QMessageBox::information(NULL, tr("Path"), tr("You select ") + fileName); } } void SkinCenter::switchUsingLogo(QString index) { bool ok; int current_index = index.toInt(&ok, 10); // qDebug () << "current_index->" << current_index; for(int i=0; ishowUsingLogo(true); } else { card->showUsingLogo(false); } } //change custom using logo for(int i=0; ishowUsingLogo(false); } } void SkinCenter::switchCusteomUsingLogo(QString index) { bool ok; int current_index = index.toInt(&ok, 10); for(int i=0; ishowUsingLogo(true); } else { card->showUsingLogo(false); } } //change ystem using logo for(int i=0; ishowUsingLogo(false); } } //void SkinCenter::initTitleBar(const QString &path) //{ // title_bar->setTitleWidth(500); // title_bar->setTitleName(tr("Skin Center")); // last_skin_path = path; // title_bar->setTitleBackgound(last_skin_path); //} //void SkinCenter::setLogo() //{ // qDebug() << mainwindow->getCurrentBackgroundIndex(); // QListWidgetItem *cur_item = list_widget->item(mainwindow->getCurrentBackgroundIndex() - 1); // this->initUsingLogo(cur_item); //} //void SkinCenter::initUsingLogo(QListWidgetItem *init_item) { //// int nRowIndex = list_widget->row(init_item); // QRect rect = list_widget->visualItemRect(init_item); // QPoint p = rect.topLeft(); // using_label->move(p.x(), p.y()); // qDebug() << p.x(); // qDebug() << p.y(); // qDebug() <<"----------------"; //// QPoint p = rect.bottomRight(); //// using_label->move(p.x()-20, p.y()-40); // //reset current item status //// QListWidgetItem *pre_item = list_widget->item(current_index); //// pre_item->setTextColor(QColor(0, 0, 255, 127)); //// current_index = nRowIndex; //// init_item->setTextColor(QColor("4f4f4f")); //} ////void MainWindow::reViewThePointSkin(QString pciture) ////{ //// if (review_skin_pixmap.isDetached()) //// { //// review_skin_pixmap.detach(); //// } //// review_skin_pixmap.load(pciture); //// QPalette palette_back; //// palette_back.setBrush(QPalette::Background, review_skin_pixmap); //// action_widget->setPalette(palette_back); ////} ////void SkinCenter::enterEvent (QEvent *) ////{ //// delayTimer->start(300); ////} ////void SkinCenter::leaveEvent (QEvent *) ////{ //// if(delayTimer->isActive()) //// delayTimer->stop(); ////} //void SkinCenter::paintEvent(QPaintEvent *) //{ // if(mouse_enter) // { // //绘制边框 // QPainter painter(this); // QPen pen(QColor("red")); // painter.setPen(pen); // painter.drawRoundRect(0,0,this->width()-1, this->height()-1, 5, 5); // } //} //void SkinCenter::enterEvent(QEvent *) //{ // mouse_enter = true; // update(); //} //void SkinCenter::leaveEvent(QEvent *) //{ // mouse_enter = false; // update(); //} void SkinCenter::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; m_dragPosition = event->globalPos() - this->frameGeometry().topLeft(); event->accept(); } } void SkinCenter::mouseReleaseEvent(QMouseEvent *) { m_mousePressed = false; } void SkinCenter::mouseMoveEvent(QMouseEvent *event) { if(m_mousePressed) { QPoint move_pos = event->globalPos(); move(move_pos - m_dragPosition); event->accept(); } } void SkinCenter::closeEvent(QCloseEvent *event) { // title_bar->setTitleBackgound(last_skin_path); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(last_skin_path))); baseWidget->setPalette(palette); mainwindow->restoreSkin(); } youker-assistant/src/mainwindow.cpp0000664000175000017500000015047613263553572016524 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "mainwindow.h" #include #include #include #include #include #include "../component/utils.h" #include "../component/threadpool.h" #include "dataworker.h" #include "../component/utils.h" #include "maintopwidget.h" #include "middlewidget.h" #include "mainbottomwidget.h" #include "topbasewidget.h" #include QString GlobalData::globalarch = ""; // add by hebing, just for transmit var inline bool isRunningInstalled() { static bool installed = (QCoreApplication::applicationDirPath() == QDir(("/usr/bin")).canonicalPath()); return installed; } inline QString getPluginsDirectory() { if (isRunningInstalled()) { return QString("/usr/lib/kylin-assistant/plugins/"); } else { return QString(QCoreApplication::applicationDirPath() + "/plugins/"); } } MainWindow::MainWindow(QString cur_arch, int d_count, QWidget* parent/*, Qt::WindowFlags flags*/) : QMainWindow(parent/*, flags*/) , m_mousePressed(false) , arch(cur_arch) , display_count(d_count) { GlobalData::globalarch = this->arch; registerCustomDataMetaType(); registerCustomDataListMetaType(); this->osName = accessOSName(); // char *dsk; // dsk = getenv("XDG_CURRENT_DESKTOP"); this->desktop = qgetenv("XDG_CURRENT_DESKTOP"); if(this->desktop.isEmpty()) this->desktop = qgetenv("XDG_SESSION_DESKTOP"); //For Unity // this->setWindowFlags(/*Qt::Window | */Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid //this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); //For UKUI and Mate // this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowCloseButtonHint); this->setAttribute(Qt::WA_TranslucentBackground); this->setAutoFillBackground(true); this->setMouseTracking(true); this->setWindowTitle(tr("Kylin Assistant")); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); this->setWindowOpacity(1); this->setFixedSize(MAIN_WINDOW_WIDTH+SHADOW_LEFT_TOP_PADDING+SHADOW_LEFT_TOP_PADDING, MAIN_WINDOW_HEIGHT+SHADOW_RIGHT_BOTTOM_PADDING+SHADOW_RIGHT_BOTTOM_PADDING); status = HOMEPAGE; mSettings = new QSettings(KYLIN_COMPANY_SETTING, KYLIN_SETTING_FILE_NAME_SETTING); mSettings->setIniCodec("UTF-8"); last_skin_path = ":/background/res/skin/1.png"; main_skin_pixmap.load(last_skin_path); info_widget = NULL; cleaner_widget = NULL; setting_widget = NULL; box_widget = NULL; aboutDlg = NULL; cleaner_action_widget = NULL; setting_action_widget = NULL; box_action_widget = NULL; toolKits = new Toolkits(0, this->width(), this->height()); main_menu = new KylinMenu(this); main_menu->setParentWindow(this); main_menu->initConnect(); this->initWidgets(); //边框阴影效果 QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); shadow_effect->setBlurRadius(5); shadow_effect->setColor(QColor(0, 0, 0, 127)); shadow_effect->setOffset(2, 4); this->setGraphicsEffect(shadow_effect); this->hide(); this->startDbusDaemon(); } MainWindow::~MainWindow() { // delete m_qSystemDbus; if (m_dataWorker) { m_dataWorker->deleteLater(); } ThreadPool::Instance()->deleteLater(); if (info_widget != NULL) { delete info_widget; info_widget = NULL; } if (cleaner_widget != NULL) { delete cleaner_widget; cleaner_widget = NULL; } if (setting_widget != NULL) { delete setting_widget; setting_widget = NULL; } if (box_widget != NULL) { delete box_widget; box_widget = NULL; } if (aboutDlg != NULL) { delete aboutDlg; aboutDlg = NULL; } if (toolKits != NULL) { delete toolKits; toolKits = NULL; } if (mSettings != NULL) { mSettings->sync(); delete mSettings; mSettings = NULL; } if (centralWidget != NULL) { delete centralWidget; centralWidget = nullptr; } } void MainWindow::initWidgets() { QPalette palette_back; palette_back.setBrush(QPalette::Background, QBrush(QPixmap(last_skin_path))); m_topStack = new QStackedWidget(this); m_bottomStack = new QStackedWidget(this); //top m_mainTopWidget = new MainTopWidget(true, mSettings, this); // m_mainTopWidget->setParentWindow(this); connect(m_mainTopWidget, SIGNAL(showMenu()), this, SLOT(showMainMenu())); // connect(m_mainTopWidget, SIGNAL(showMin()), this, SLOT(showMinimized())); connect(m_mainTopWidget, &MainTopWidget::showMin, this, [=] { this->showMinimized(); }); connect(m_mainTopWidget, SIGNAL(closeApp()), this, SLOT(closeYoukerAssistant())); m_mainTopWidget->setPalette(palette_back); m_topStack->addWidget(m_mainTopWidget); cleaner_action_widget = new MainTopWidget(false, mSettings, this); connect(cleaner_action_widget, SIGNAL(showMenu()), this, SLOT(showMainMenu())); connect(cleaner_action_widget, SIGNAL(showMin()), this, SLOT(showMinimized())); connect(cleaner_action_widget, SIGNAL(closeApp()), this, SLOT(closeYoukerAssistant())); cleaner_action_widget->setPalette(palette_back); m_topStack->addWidget(cleaner_action_widget); info_action_widget = new TopBaseWidget(this); connect(info_action_widget, SIGNAL(showMenu()), this, SLOT(showMainMenu())); connect(info_action_widget, SIGNAL(showMin()), this, SLOT(showMinimized())); connect(info_action_widget, SIGNAL(closeApp()), this, SLOT(closeYoukerAssistant())); info_action_widget->setPalette(palette_back); info_action_widget->setImage("://res/systeminfo.png"); info_action_widget->setTipMessage(tr("Understand hardware information, provide more convenient channel to obtain hardware information")); m_topStack->addWidget(info_action_widget); setting_action_widget = new TopBaseWidget(this); connect(setting_action_widget, SIGNAL(showMenu()), this, SLOT(showMainMenu())); connect(setting_action_widget, SIGNAL(showMin()), this, SLOT(showMinimized())); connect(setting_action_widget, SIGNAL(closeApp()), this, SLOT(closeYoukerAssistant())); setting_action_widget->setPalette(palette_back); setting_action_widget->setImage("://res/systemset.png"); setting_action_widget->setTipMessage(tr("You can perform a full range of customized systems based on personal preferences")); m_topStack->addWidget(setting_action_widget); box_action_widget = new TopBaseWidget(this); connect(box_action_widget, SIGNAL(showMenu()), this, SLOT(showMainMenu())); connect(box_action_widget, SIGNAL(showMin()), this, SLOT(showMinimized())); connect(box_action_widget, SIGNAL(closeApp()), this, SLOT(closeYoukerAssistant())); box_action_widget->setPalette(palette_back); box_action_widget->setImage("://res/toolkits.png"); box_action_widget->setTipMessage(tr("Provide a practical and lightweight tool, create fast and convenient experience for you")); m_topStack->addWidget(box_action_widget); //middle m_middleWidget = new MiddleWidget(this, this->arch, this->osName); m_middleWidget->setFixedSize(MAIN_WINDOW_WIDTH, 47); connect(m_middleWidget, SIGNAL(turnCurrentPage(int)), this, SLOT(setCurrentPageIndex(int))); //bottom m_mainBottomWidget = new MainBottomWidget(this, this->arch, this->osName); connect(m_mainBottomWidget, SIGNAL(sendSignal()), m_middleWidget, SLOT(showBoxTool())); m_bottomStack->addWidget(m_mainBottomWidget); cleaner_widget = new CleanerWidget(); m_bottomStack->addWidget(cleaner_widget); cleaner_widget->setToolKits(toolKits); cleaner_widget->setParentWindow(this); cleaner_widget->initUI(last_skin_path); connect(cleaner_action_widget, SIGNAL(showDetailData()),cleaner_widget, SLOT(displayDetailPage())); connect(cleaner_action_widget, SIGNAL(showMainData()),cleaner_widget, SLOT(displayMainPage())); connect(cleaner_action_widget, SIGNAL(sendCleanSignal()),cleaner_widget, SIGNAL(transCleanSignal())); info_widget = new InfoWidget(this->arch); m_bottomStack->addWidget(info_widget); setting_widget = new SettingWidget(this->desktop); setting_widget->setParentWindow(this); connect(setting_widget, SIGNAL(changeActionPage(QString)), setting_action_widget, SLOT(displayActionSubPage(QString))); connect(setting_action_widget, SIGNAL(notifyContentPageToMain()), setting_widget, SLOT(displaySettingHomePage())); m_bottomStack->addWidget(setting_widget); box_widget = new BoxWidget(this, this->arch, this->osName, getPluginsDirectory()); connect(box_widget, SIGNAL(pluginModuleError(QString)), this, SLOT(onPluginModuleError(QString))); m_bottomStack->addWidget(box_widget); centralWidget = new QWidget; QVBoxLayout *contentLayout = new QVBoxLayout(centralWidget); this->setCentralWidget(centralWidget); this->setContentsMargins(SHADOW_LEFT_TOP_PADDING,SHADOW_LEFT_TOP_PADDING,SHADOW_RIGHT_BOTTOM_PADDING,SHADOW_RIGHT_BOTTOM_PADDING); contentLayout->setContentsMargins(0, 0, 0, 0); contentLayout->setMargin(0); contentLayout->setSpacing(0); contentLayout->addWidget(m_topStack); contentLayout->addWidget(m_middleWidget); contentLayout->addWidget(m_bottomStack); m_topStack->setCurrentWidget(m_mainTopWidget); m_bottomStack->setCurrentWidget(m_mainBottomWidget); } void MainWindow::onInitDataFinished() { this->battery = m_dataWorker->isBatteryExist(); this->sensor = m_dataWorker->isSensorExist(); this->m_cpulist = m_dataWorker->cpuModeList(); this->m_currentCpuMode = m_dataWorker->cpuCurrentMode(); /* Qt::AutoConnection 自动连接:(默认值)如果信号在接收者所依附的线程内发射,则等同于直接连接。如果发射信号的线程和接受者所依附的线程不同,则等同于队列连接。 Qt::DirectConnection 直接连接:当信号发射时,槽函数将直接被调用。无论槽函数所属对象在哪个线程,槽函数都在发射信号的线程内执行。 Qt::QueuedConnection 队列连接:当控制权回到接受者所依附线程的事件循环时,槽函数被调用。槽函数在接收者所依附线程执行。也就是说:这种方式既可以在线程内传递消息,也可以跨线程传递消息 Qt::BlockingQueuedConnection 与Qt::QueuedConnection类似,但是会阻塞等到关联的slot都被执行。这里出现了阻塞这个词,说明它是专门用来多线程间传递消息的。 */ //kobe: why does ui died ?????????????????????? connect(m_mainTopWidget, SIGNAL(startOneKeyScan(QStringList)), m_dataWorker, SLOT(onStartOneKeyScan(QStringList))/*, Qt::QueuedConnection*/);//Qt::QueuedConnection connect(m_mainTopWidget, SIGNAL(startOneKeyClean()), m_dataWorker, SLOT(onStartOneKeyClean())/*, Qt::BlockingQueuedConnection*/); connect(m_dataWorker, SIGNAL(isScanning(QString)), m_mainTopWidget, SLOT(getScanResult(QString)), Qt::BlockingQueuedConnection);//Qt::BlockingQueuedConnection connect(m_dataWorker, SIGNAL(finishScanWork(QString)), m_mainTopWidget, SLOT(finishScanResult(QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(tellScanResult(QString,QString)) ,m_mainTopWidget, SLOT(getScanAllResult(QString,QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(finishCleanWorkMain(QString)), m_mainTopWidget, SLOT(getCleanResult(QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(finishCleanWorkMainError(QString)), m_mainTopWidget, SLOT(finishCleanError(QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(quickCleanProcess(QString,QString)), m_mainTopWidget, SLOT(getCleaningMessage(QString,QString)), Qt::BlockingQueuedConnection); connect(cleaner_action_widget, SIGNAL(showDetailData()),cleaner_widget, SLOT(displayDetailPage())); connect(cleaner_action_widget, SIGNAL(showMainData()),cleaner_widget, SLOT(displayMainPage())); //connect(cleaner_action_widget, SIGNAL(sendCleanSignal()),cleaner_widget, SIGNAL(transCleanSignal())); connect(m_dataWorker, SIGNAL(tellCleanerDetailData(QStringList)), cleaner_widget, SIGNAL(tellCleanerDetailData(QStringList)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(tellCleanerDetailStatus(QString)), cleaner_widget, SIGNAL(tellCleanerDetailStatus(QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(tellCleanerDetailStatus(QString)), cleaner_action_widget, SLOT(showCleanReciveStatus(QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(tellCleanerDetailError(QString)), cleaner_action_widget, SLOT(showCleanReciveError(QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(sendCleanOverSignal()), cleaner_widget, SLOT(displayMainPage())); connect(m_dataWorker, SIGNAL(sendCleanOverSignal()), cleaner_action_widget, SLOT(displayOrgPage())); connect(m_dataWorker, SIGNAL(sendCleanOverSignal()), cleaner_action_widget, SLOT(showCleanOverStatus())); connect(m_dataWorker, SIGNAL(policykitCleanSignal(bool)), cleaner_action_widget, SLOT(receivePolicyKitSignal(bool))); connect(m_dataWorker, SIGNAL(tellCleanerMainData(QStringList)), cleaner_action_widget, SLOT(showCleanerData(QStringList)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(tellCleanerMainStatus(QString, QString)), cleaner_action_widget, SLOT(showCleanerStatus(QString, QString)), Qt::BlockingQueuedConnection); connect(m_dataWorker, SIGNAL(sendCleanErrorSignal(QString)), cleaner_action_widget, SLOT(showCleanerError(QString)), Qt::BlockingQueuedConnection); connect(cleaner_widget, SIGNAL(startScanSystem(QMap)), m_dataWorker, SLOT(onStartScanSystem(QMap))); connect(cleaner_widget, SIGNAL(startCleanSystem(QMap)), m_dataWorker, SLOT(onStartCleanSystem(QMap))); connect(cleaner_action_widget, SIGNAL(sendScanSignal()),cleaner_widget, SIGNAL(transScanSignal())); connect(cleaner_widget, SIGNAL(tranActionAnimaitonSignal()),cleaner_action_widget, SLOT(displayAnimation())); connect(cleaner_widget, SIGNAL(tranScanOverSignal(bool)),cleaner_action_widget, SLOT(accordScanOverStatusToChange(bool))); connect(info_widget, SIGNAL(requestupdateSystemRunnedTime()), m_dataWorker, SLOT(onUpdateSystemRunnedTime())); connect(info_widget, SIGNAL(requestRefreshSystemInfo()), m_dataWorker, SLOT(onRequestRefreshSystemInfo())); connect(m_dataWorker, SIGNAL(sendSystemInfo(QMap)), info_widget, SLOT(onSendSystemInfo(QMap))); //desktop info connect(info_widget, SIGNAL(requestDesktopInfo()), m_dataWorker, SLOT(onRequestDesktopInfo())); connect(m_dataWorker, SIGNAL(sendDesktopInfo(QMap)), info_widget, SLOT(onSendDesktopInfo(QMap))); //cpu info connect(info_widget, SIGNAL(requestCpuInfo()), m_dataWorker, SLOT(onRequestCpuInfo())); connect(m_dataWorker, SIGNAL(sendCpuInfo(QMap)), info_widget, SLOT(onSendCpuInfo(QMap))); //memory info connect(info_widget, SIGNAL(requestMemoryInfo()), m_dataWorker, SLOT(onRequestMemoryInfo())); connect(m_dataWorker, SIGNAL(sendMemoryInfo(QMap)), info_widget, SLOT(onSendMemoryInfo(QMap))); //board info connect(info_widget, SIGNAL(requestBoardInfo()), m_dataWorker, SLOT(onRequestBoardInfo())); connect(m_dataWorker, SIGNAL(sendBoardInfo(QMap)), info_widget, SLOT(onSendBoardInfo(QMap))); //hd info connect(info_widget, SIGNAL(requestHDInfo()), m_dataWorker, SLOT(onRequestHDInfo())); connect(m_dataWorker, SIGNAL(sendHDInfo(QMap)), info_widget, SLOT(onSendHDInfo(QMap))); //nic info connect(info_widget, SIGNAL(requestNicInfo()), m_dataWorker, SLOT(onRequestNicInfo())); connect(m_dataWorker, SIGNAL(sendNicInfo(QMap)), info_widget, SLOT(onSendNicInfo(QMap))); //monitor info connect(info_widget, SIGNAL(requestMonitorInfo()), m_dataWorker, SLOT(onRequestMonitorInfo())); connect(m_dataWorker, SIGNAL(sendMonitorInfo(QMap)), info_widget, SLOT(onSendMonitorInfo(QMap))); //audio info connect(info_widget, SIGNAL(requestAudioInfo()), m_dataWorker, SLOT(onRequestAudioInfo())); connect(m_dataWorker, SIGNAL(sendAudioInfo(QMap)), info_widget, SLOT(onSendAudioInfo(QMap))); //battery info connect(info_widget, SIGNAL(requestBatteryInfo()), m_dataWorker, SLOT(onRequestBatteryInfo())); connect(m_dataWorker, SIGNAL(sendBatteryInfo(QMap)), info_widget, SLOT(onSendBatteryInfo(QMap))); //sensor info connect(info_widget, SIGNAL(requestSensorInfo()), m_dataWorker, SLOT(onRequestSensorInfo())); connect(m_dataWorker, SIGNAL(sendSensorInfo(QMap)), info_widget, SLOT(onSendSensorInfo(QMap))); //bind setting notify signal // connect(m_dataWorker, SIGNAL(string_value_notify(QString,QString)), setting_widget, SIGNAL(string_value_notify(QString,QString))); // connect(m_dataWorker, SIGNAL(bool_value_notify(QString,bool)), setting_widget, SIGNAL(bool_value_notify(QString,bool))); // connect(m_dataWorker, SIGNAL(int_value_notify(QString,int)), setting_widget, SIGNAL(int_value_notify(QString,int))); // connect(m_dataWorker, SIGNAL(double_value_notify(QString,double)), setting_widget, SIGNAL(double_value_notify(QString,double))); //TODO:WTF?????? /*connect(m_dataWorker, SIGNAL(string_value_notify(QString,QString)), setting_widget, SLOT(on_string_value_notify(QString,QString))); connect(m_dataWorker, SIGNAL(bool_value_notify(QString,bool)), setting_widget, SLOT(on_bool_value_notify(QString,bool))); connect(m_dataWorker, SIGNAL(int_value_notify(QString,int)), setting_widget, SLOT(on_int_value_notify(QString,int))); connect(m_dataWorker, SIGNAL(double_value_notify(QString,double)), setting_widget, SLOT(on_double_value_notify(QString,double))); */ //theme connect(setting_widget, SIGNAL(changeSystemTheme(QString)), m_dataWorker, SLOT(onChangeSystemTheme(QString))); connect(setting_widget, SIGNAL(requestThemeData()), m_dataWorker, SLOT(onRequestThemeData())); connect(m_dataWorker, SIGNAL(sendThemeList(QString,QStringList)), setting_widget, SIGNAL(sendThemeList(QString,QStringList))); //icon connect(setting_widget, SIGNAL(requestIconData()), m_dataWorker, SLOT(onRequestIconData())); connect(m_dataWorker, SIGNAL(sendIconThemeList(QString,QStringList)), setting_widget, SIGNAL(sendIconThemeList(QString,QStringList))); connect(m_dataWorker, SIGNAL(sendDisplayIconValue(bool,bool,bool,bool,bool)), setting_widget, SIGNAL(sendDisplayIconValue(bool,bool,bool,bool,bool))); connect(setting_widget, SIGNAL(resetIconTheme(QString)), m_dataWorker, SLOT(onResetIconTheme(QString))); connect(setting_widget, SIGNAL(displayComputerIcon(bool)), m_dataWorker, SLOT(onDisplayComputerIcon(bool))); connect(setting_widget, SIGNAL(displayFolderIcon(bool)), m_dataWorker, SLOT(onDisplayFolderIcon(bool))); connect(setting_widget, SIGNAL(displayNetworkIcon(bool)), m_dataWorker, SLOT(onDisplayNetworkIcon(bool))); connect(setting_widget, SIGNAL(displayRecycleBinIcon(bool)), m_dataWorker, SLOT(onDisplayRecycleBinIcon(bool))); connect(setting_widget, SIGNAL(displayDiskIcon(bool)), m_dataWorker, SLOT(onDisplayDiskIcon(bool))); //mouse connect(setting_widget, SIGNAL(requestMouseData()), m_dataWorker, SLOT(onRequestMouseData())); connect(m_dataWorker, SIGNAL(sendMouseThemeAndCusorSize(QString,QStringList,int)), setting_widget, SIGNAL(sendMouseThemeAndCusorSize(QString,QStringList,int))); connect(setting_widget, SIGNAL(resetMouseCursorTheme(QString)), m_dataWorker, SLOT(onResetMouseCursorTheme(QString))); connect(setting_widget, SIGNAL(resetMouseCursorSize(int)), m_dataWorker, SLOT(onResetMouseCursorSize(int))); //voice connect(setting_widget, SIGNAL(requestSoundData()), m_dataWorker, SLOT(onRequestSoundData())); connect(m_dataWorker, SIGNAL(sendSoundList(QString,QStringList)), setting_widget, SIGNAL(sendSoundList(QString,QStringList))); connect(m_dataWorker, SIGNAL(sendEnableSoundValue(bool,bool,bool)), setting_widget, SIGNAL(sendEnableSoundValue(bool,bool,bool))); connect(setting_widget, SIGNAL(resetVoiceTheme(QString)), m_dataWorker, SLOT(onResetVoiceTheme(QString))); connect(setting_widget, SIGNAL(resetLoginTipVoice(bool)), m_dataWorker, SLOT(onResetLoginTipVoice(bool))); connect(setting_widget, SIGNAL(resetEventVoice(bool)), m_dataWorker, SLOT(onResetEventVoice(bool))); connect(setting_widget, SIGNAL(resetInputFeedbackVoice(bool)), m_dataWorker, SLOT(onResetInputFeedbackVoice(bool))); //panel connect(setting_widget, SIGNAL(requestMateOrUnityPanelData(bool)), m_dataWorker, SLOT(onRequestMateOrUnityPanelData(bool))); connect(m_dataWorker, SIGNAL(sendMatePanelValue(bool,bool,bool,bool)), setting_widget, SIGNAL(sendMatePanelValue(bool,bool,bool,bool))); connect(m_dataWorker, SIGNAL(sendUnityBlurAndTransparencyValue(int,double)), setting_widget, SIGNAL(sendUnityBlurAndTransparencyValue(int,double))); connect(m_dataWorker, SIGNAL(sendUnityTimeValue(QString,QStringList,bool,bool,bool)), setting_widget, SIGNAL(sendUnityTimeValue(QString,QStringList,bool,bool,bool))); connect(m_dataWorker, SIGNAL(sendUnityPanelPowerValue(QString,QStringList,bool,bool)), setting_widget, SIGNAL(sendUnityPanelPowerValue(QString,QStringList,bool,bool))); connect(setting_widget, SIGNAL(resetPanelTransparencyValue(double)), m_dataWorker, SLOT(onResetPanelTransparencyValue(double))); connect(setting_widget, SIGNAL(resetDateFormat(QString)), m_dataWorker, SLOT(onResetDateFormat(QString))); connect(setting_widget, SIGNAL(resetShowBatteryIcon(QString)), m_dataWorker, SLOT(onResetShowBatteryIcon(QString))); connect(setting_widget, SIGNAL(resetDashBlurExperimental(int)), m_dataWorker, SLOT(onResetDashBlurExperimental(int))); connect(setting_widget, SIGNAL(resetDisplaySeconds(bool)), m_dataWorker, SLOT(onResetDisplaySeconds(bool))); connect(setting_widget, SIGNAL(resetDisplayWeek(bool)), m_dataWorker, SLOT(onResetDisplayWeek(bool))); connect(setting_widget, SIGNAL(resetDisplayDate(bool)), m_dataWorker, SLOT(onResetDisplayDate(bool))); connect(setting_widget, SIGNAL(resetDisplayBatteryPercentage(bool)), m_dataWorker, SLOT(onResetDisplayBatteryPercentage(bool))); connect(setting_widget, SIGNAL(resetDisplayBatteryTime(bool)), m_dataWorker, SLOT(onResetDisplayBatteryTime(bool))); connect(setting_widget, SIGNAL(resetShowApplications(bool)), m_dataWorker, SLOT(onResetShowApplications(bool))); connect(setting_widget, SIGNAL(resetShowDesktop(bool)), m_dataWorker, SLOT(onResetShowDesktop(bool))); connect(setting_widget, SIGNAL(resetShowIcon(bool)), m_dataWorker, SLOT(onResetShowIcon(bool))); connect(setting_widget, SIGNAL(resetShowPlaces(bool)), m_dataWorker, SLOT(onResetShowPlaces(bool))); //launcher menu connect(setting_widget, SIGNAL(requestMateOrUnityMenuData(bool)), m_dataWorker, SLOT(onRequestMateOrUnityMenuData(bool))); connect(m_dataWorker, SIGNAL(sendMatePanelIconValue(int,int,bool,bool)), setting_widget, SIGNAL(sendMatePanelIconValue(int,int,bool,bool))); connect(m_dataWorker, SIGNAL(sendUnityIconValue(int,bool,bool,double,int,QStringList)), setting_widget, SIGNAL(sendUnityIconValue(int,bool,bool,double,int,QStringList))); connect(m_dataWorker, SIGNAL(sendUnityLauncherPosition(QString,QStringList)), setting_widget, SIGNAL(sendUnityLauncherPosition(QString,QStringList))); connect(setting_widget, SIGNAL(resetIconSizeValue(int)), m_dataWorker, SLOT(onResetIconSizeValue(int))); connect(setting_widget, SIGNAL(resetTransparencyValue(int)), m_dataWorker, SLOT(onResetTransparencyValue(int))); connect(setting_widget, SIGNAL(resetIconColouring(int)), m_dataWorker, SLOT(onResetIconColouring(int))); connect(setting_widget, SIGNAL(resetAutoHide(bool)), m_dataWorker, SLOT(onResetAutoHide(bool))); connect(setting_widget, SIGNAL(resetDisplayDesktopIcon(bool)), m_dataWorker, SLOT(onResetDisplayDesktopIcon(bool))); connect(setting_widget, SIGNAL(resetTopIconSizeValue(int)), m_dataWorker, SLOT(onResetTopIconSizeValue(int))); connect(setting_widget, SIGNAL(resetBottomIconSizeValue(int)), m_dataWorker, SLOT(onResetBottomIconSizeValue(int))); connect(setting_widget, SIGNAL(resetTopAutoHide(bool)), m_dataWorker, SLOT(onResetTopAutoHide(bool))); connect(setting_widget, SIGNAL(resetBottomAutoHide(bool)), m_dataWorker, SLOT(onResetBottomAutoHide(bool))); connect(setting_widget, SIGNAL(resetLauncherPosition(QString)), m_dataWorker, SLOT(onResetLauncherPosition(QString))); //window connect(setting_widget, SIGNAL(requesetWindowButtonAlign()), m_dataWorker, SLOT(onRequesetWindowButtonAlign())); connect(setting_widget, SIGNAL(requesetMenusHaveIcons()), m_dataWorker, SLOT(onRequesetMenusHaveIcons())); connect(setting_widget, SIGNAL(requesetWindowTitileTags()), m_dataWorker, SLOT(onRequesetWindowTitileTags())); connect(m_dataWorker, SIGNAL(sendWindowButtonAlign(QString)), setting_widget, SIGNAL(sendWindowButtonAlign(QString))); connect(m_dataWorker, SIGNAL(sendMenusHaveIcons(bool)), setting_widget, SIGNAL(sendMenusHaveIcons(bool))); connect(m_dataWorker, SIGNAL(sendWindowTitileTags(QString,QStringList,QStringList,QString,QString,QString)), setting_widget, SIGNAL(sendWindowTitileTags(QString,QStringList,QStringList,QString,QString,QString))); connect(setting_widget, SIGNAL(resetMenusHaveIcon(bool)), m_dataWorker, SLOT(onResetMenusHaveIcon(bool))); connect(setting_widget, SIGNAL(resetTitlebarWheel(QString)), m_dataWorker, SLOT(onResetTitlebarWheel(QString))); connect(setting_widget, SIGNAL(resetTitlebarDoubleClick(QString)), m_dataWorker, SLOT(onResetTitlebarDoubleClick(QString))); connect(setting_widget, SIGNAL(resetMouseMiddleClick(QString)), m_dataWorker, SLOT(onResetMouseMiddleClick(QString))); connect(setting_widget, SIGNAL(resetMouseRightClick(QString)), m_dataWorker, SLOT(onResetMouseRightClick(QString))); connect(setting_widget, SIGNAL(resetWindowButtonLeftOrRightAlign(bool)), m_dataWorker, SLOT(onResetWindowButtonLeftOrRightAlign(bool))); //font connect(setting_widget, SIGNAL(requestFontData()), m_dataWorker, SLOT(onRequestFontData())); connect(m_dataWorker, SIGNAL(sendFontValue(QString)), setting_widget, SIGNAL(sendFontValue(QString))); connect(m_dataWorker, SIGNAL(sendDesktopFontValue(QString)), setting_widget, SIGNAL(sendDesktopFontValue(QString))); connect(m_dataWorker, SIGNAL(sendMonospaceFontValue(QString)), setting_widget, SIGNAL(sendMonospaceFontValue(QString))); connect(m_dataWorker, SIGNAL(sendDocumentFontValue(QString)), setting_widget, SIGNAL(sendDocumentFontValue(QString))); connect(m_dataWorker, SIGNAL(sendTitlebarFontValue(QString)), setting_widget, SIGNAL(sendTitlebarFontValue(QString))); connect(m_dataWorker, SIGNAL(sendFontSmoothAndAntialiasingValue(double,QString,QStringList,QString,QStringList)), setting_widget, SIGNAL(sendFontSmoothAndAntialiasingValue(double,QString,QStringList,QString,QStringList))); connect(setting_widget, SIGNAL(setDefaultFontByName(QString)), m_dataWorker, SLOT(onSetDefaultFontByName(QString))); connect(setting_widget, SIGNAL(setDesktopFontByName(QString)), m_dataWorker, SLOT(onSetDesktopFontByName(QString))); connect(setting_widget, SIGNAL(setMonospaceFontByName(QString)), m_dataWorker, SLOT(onSetMonospaceFontByName(QString))); connect(setting_widget, SIGNAL(setDocumentFontByName(QString)), m_dataWorker, SLOT(onSetDocumentFontByName(QString))); connect(setting_widget, SIGNAL(setTitlebarFontByName(QString)), m_dataWorker, SLOT(onSetTitlebarFontByName(QString))); connect(setting_widget, SIGNAL(resetFontZoomScalingValue(double)), m_dataWorker, SLOT(onResetFontZoomScalingValue(double))); connect(setting_widget, SIGNAL(resetFontHinting(QString)), m_dataWorker, SLOT(onResetFontHinting(QString))); connect(setting_widget, SIGNAL(resetFontAntialiasing(QString)), m_dataWorker, SLOT(onResetFontAntialiasing(QString))); connect(setting_widget, SIGNAL(restoreDefaultFont(bool)), m_dataWorker, SLOT(onRestoreDefaultFont(bool))); connect(setting_widget, SIGNAL(restoreDesktopDefaultFont(bool)), m_dataWorker, SLOT(onRestoreDesktopDefaultFont(bool))); connect(setting_widget, SIGNAL(restoreMonospaceDefaultFont(bool)), m_dataWorker, SLOT(onRestoreMonospaceDefaultFont(bool))); connect(setting_widget, SIGNAL(restoreDocumentDefaultFont(bool)), m_dataWorker, SLOT(onRestoreDocumentDefaultFont(bool))); connect(setting_widget, SIGNAL(restoreTitlebarDefaultFont(bool)), m_dataWorker, SLOT(onRestoreTitlebarDefaultFont(bool))); //touchpad connect(setting_widget, SIGNAL(requestMateOrUnityTouchpadData(bool)), m_dataWorker, SLOT(onRequestMateOrUnityTouchpadData(bool))); connect(m_dataWorker, SIGNAL(sendTouchPadValue(bool,bool,QString,int,QString)), setting_widget, SIGNAL(sendTouchPadValue(bool,bool,QString,int,QString))); connect(setting_widget, SIGNAL(resetTouchpad(bool)), m_dataWorker, SLOT(onResetTouchpad(bool))); connect(setting_widget, SIGNAL(resetHorizontalScrolling(bool)), m_dataWorker, SLOT(onResetHorizontalScrolling(bool))); connect(setting_widget, SIGNAL(setScrollbarOverlayOrLegacyMode(bool)), m_dataWorker, SLOT(onSetScrollbarOverlayOrLegacyMode(bool))); connect(setting_widget, SIGNAL(setMateTouchscrollingMode(int)), m_dataWorker, SLOT(onSetMateTouchscrollingMode(int))); connect(setting_widget, SIGNAL(setUnityTouchscrollingMode(int)), m_dataWorker, SLOT(onSetUnityTouchscrollingMode(int))); //ac and battery connect(setting_widget, SIGNAL(requestPowerAndBatteryData()), m_dataWorker, SLOT(onRequestPowerAndBatteryData())); connect(m_dataWorker, SIGNAL(sendIdleAndGammaData(double,QStringList,int,QString,QString,QString,QStringList)), setting_widget, SIGNAL(sendIdleAndGammaData(double,QStringList,int,QString,QString,QString,QStringList))); connect(m_dataWorker, SIGNAL(sendLockAndSleepData(bool,QString,QStringList,QString,QString,QString,QString,QStringList,QString)), setting_widget, SIGNAL(sendLockAndSleepData(bool,QString,QStringList,QString,QString,QString,QString,QStringList,QString))); connect(setting_widget, SIGNAL(resetScreenGammaValue(double)), m_dataWorker, SLOT(onResetScreenGammaValue(double))); connect(setting_widget, SIGNAL(resetBrightnessValue(int)), m_dataWorker, SLOT(onResetBrightnessValue(int))); connect(setting_widget, SIGNAL(resetIdleDelay(int,int)), m_dataWorker, SLOT(onResetIdleDelay(int,int))); connect(setting_widget, SIGNAL(resetLockEnabled(bool)), m_dataWorker, SLOT(onResetLockEnabled(bool))); connect(setting_widget, SIGNAL(resetLockDelay(int,int)), m_dataWorker, SLOT(onResetLockDelay(int,int))); connect(setting_widget, SIGNAL(setCurrentCriticalLow(QString)), m_dataWorker, SLOT(onSetCurrentCriticalLow(QString))); connect(setting_widget, SIGNAL(setCurrentLidBattery(QString)), m_dataWorker, SLOT(onSetCurrentLidBattery(QString))); connect(setting_widget, SIGNAL(setCurrentLidAC(QString)), m_dataWorker, SLOT(onSetCurrentLidAC(QString))); connect(setting_widget, SIGNAL(resetSleepTimeoutBattery(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutBattery(int,int))); connect(setting_widget, SIGNAL(resetSleepTimeoutAC(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutAC(int,int))); connect(setting_widget, SIGNAL(resetSleepTimeoutDisplayBattery(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutDisplayBattery(int,int))); connect(setting_widget, SIGNAL(resetSleepTimeoutDisplayAC(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutDisplayAC(int,int))); connect(setting_widget, SIGNAL(setCurrentCpuMode(QString)), m_dataWorker, SLOT(onSetCurrentCpuMode(QString))); //file manager connect(setting_widget, SIGNAL(requestFileManagerData()), m_dataWorker, SLOT(onRequestFileManagerData())); connect(m_dataWorker, SIGNAL(sendFileManagerData(bool,bool,bool,bool,int,int,int)), setting_widget, SIGNAL(sendFileManagerData(bool,bool,bool,bool,int,int,int))); connect(setting_widget, SIGNAL(resetLocationReplacePathbar(bool)), m_dataWorker, SLOT(onResetLocationReplacePathbar(bool))); connect(setting_widget, SIGNAL(resetAutoMountMedia(bool)), m_dataWorker, SLOT(onResetAutoMountMedia(bool))); connect(setting_widget, SIGNAL(resetAutoOpenFolder(bool)), m_dataWorker, SLOT(onResetAutoOpenFolder(bool))); connect(setting_widget, SIGNAL(resetPromptAutorunPrograms(bool)), m_dataWorker, SLOT(onResetPromptAutorunPrograms(bool))); connect(setting_widget, SIGNAL(resetThumbnailIconSize(int)), m_dataWorker, SLOT(onResetThumbnailIconSize(int))); connect(setting_widget, SIGNAL(resetThumbnailCacheTime(int)), m_dataWorker, SLOT(onResetThumbnailCacheTime(int))); connect(setting_widget, SIGNAL(resetThumbnailCacheSize(int)), m_dataWorker, SLOT(onResetThumbnailCacheSize(int))); info_widget->initInfoUI(this->battery, this->sensor); setting_widget->initSettingsUI(this->m_cpulist, this->m_currentCpuMode, this->battery/*, last_skin_path*/); this->moveCenter(); } void MainWindow::moveCenter() { QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); this->show(); this->raise(); } void MainWindow::onPluginModuleError(const QString &info) { toolKits->alertMSG(this->geometry().topLeft().x(), this->geometry().topLeft().y(), info); } QString MainWindow::accessOSName() { QString osname = ""; QString tmp = ""; QFile osfile("/etc/os-release"); if(osfile.exists()) { if(!osfile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Can't open os-release!" << endl; } else { while(!osfile.atEnd()) { QByteArray line = osfile.readLine(); QString str(line); if (str.startsWith("NAME")) { tmp = str; break; } } osfile.close(); } } if(tmp.length() > 0 && tmp.contains("=")) { osname = QString(tmp.split("=").at(1)).replace("\"", "").replace("\n","").trimmed(); } if(osname.length() > 0) { return osname; } osname = ""; tmp = ""; QFile ukfile("/etc/ubuntukylin-release"); if(ukfile.exists()) { if(!ukfile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Can't open ubuntukylin-release!" << endl; } else { while(!ukfile.atEnd()) { QByteArray line = ukfile.readLine(); QString str(line); if (str.startsWith("DISTRIB_DESCRIPTION")) { tmp = str; break; } } ukfile.close(); } } if(tmp.length() > 0 && tmp.contains("=")) { osname = QString(tmp.split("=").at(1)).replace("\"", "").replace("\n","").trimmed(); } if(osname.length() > 0) { return osname; } osname = ""; tmp = ""; QFile lsbfile("/etc/lsb-release"); if(lsbfile.exists()) { if(!lsbfile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Can't open lsb-release!" << endl; } else { while(!lsbfile.atEnd()) { QByteArray line = lsbfile.readLine(); QString str(line); if (str.startsWith("DISTRIB_DESCRIPTION")) { tmp = str; break; } } lsbfile.close(); } } if(tmp.length() > 0 && tmp.contains("=")) { osname = QString(tmp.split("=").at(1)).replace("\"", "").replace("\n","").trimmed(); } if(osname.length() > 0) { return osname; } return "Ubuntu Kylin"; } bool MainWindow::deleteFile(QString filename) { return m_dataWorker->deleteAppointedFile(filename); } bool MainWindow::CopyFile(QString filename) { return m_dataWorker->copyAppointedFile(filename); } QStringList MainWindow::filterSkin() { QStringList skinlist; QString path = "/var/lib/kylin-assistant-daemon/default/"; QString path2 = "/var/lib/kylin-assistant-daemon/custom/"; QDir picdir(path); picdir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); picdir.setSorting(QDir::Size | QDir::Reversed); QDir picdir2(path2); picdir2.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); picdir2.setSorting(QDir::Size | QDir::Reversed); QStringList filters; filters << "*.jpg" << "*.png"; picdir.setNameFilters(filters); picdir2.setNameFilters(filters); QFileInfoList list = picdir.entryInfoList(); QFileInfoList list2 = picdir2.entryInfoList(); if(list.size() < 1 && list2.size() < 1) { skinlist << ":/background/res/skin/1.png" << ":/background/res/skin/2.png" << ":/background/res/skin/3.png" << ":/background/res/skin/4.png"; // return ":/background/res/skin/1.png"; } else if(list.size() > 0 && list2.size() > 0) { for (int j = 0; j < list.size(); ++j) { QFileInfo fileInfo = list.at(j); skinlist << path + fileInfo.fileName(); } for (int k = 0; k < list2.size(); ++k) { QFileInfo fileInfo = list2.at(k); skinlist << path2 + fileInfo.fileName(); } skinlist << ":/background/res/skin/1.png" << ":/background/res/skin/2.png" << ":/background/res/skin/3.png" << ":/background/res/skin/4.png"; } else { if(list.size() > 0) { for (int j = 0; j < list.size(); ++j) { QFileInfo fileInfo = list.at(j); skinlist << path + fileInfo.fileName(); } skinlist << ":/background/res/skin/1.png" << ":/background/res/skin/2.png" << ":/background/res/skin/3.png" << ":/background/res/skin/4.png"; } else if(list2.size() > 0) { for (int m = 0; m < list2.size(); ++m) { QFileInfo fileInfo = list2.at(m); skinlist << path2 + fileInfo.fileName(); } skinlist << ":/background/res/skin/1.png" << ":/background/res/skin/2.png" << ":/background/res/skin/3.png" << ":/background/res/skin/4.png"; } // QFileInfo fileInfo = list.at(0); // return path + fileInfo.fileName(); } return skinlist; } void MainWindow::setTranslator(QTranslator* translator) { // this->translator = translator; } void MainWindow::changeLanguage(LANGUAGE language) { if(current_language == language) { return; } current_language = language; switch(language) { case YOUKER_EN: translator->load(QString(":/qmfile/res/qm/kylin-assistant_es.qm")); break; case YOUKER_ZH_CN: translator->load(QString(":/qmfile/res/qm/kylin-assistant_zh_CN.qm")); break; case YOUKER_ES: translator->load(QString(":/qmfile/res/qm/kylin-assistant_es.qm")); break; default: translator->load(QString(":/qmfile/res/qm/kylin-assistant_zh_CN.qm")); } // title_widget->translateLanguage(); // kill_mummy_widget->translateLanguage(); // main_menu->translateActions(); // character_widget->translateLanguage(); // login_dialog->translateLanguage(); // register_widget->translateLanguage(); // character_widget->translateLanguage(); // about_us_dialog->translateLanguage(); // setting_dialog->translateLanguage(); // skin_widget->translateLanguage(); // system_tray->translateLanguage(); } void MainWindow::startDbusDaemon() { // qDebug() << "mainwindow thread id=" << QThread::currentThreadId(); m_dataWorker = new DataWorker(this->desktop); QThread *w_thread = ThreadPool::Instance()->createNewThread(); m_dataWorker->moveToThread(w_thread); // connect(w_thread, SIGNAL(started()), m_dataWorker, SLOT(doWork())); // connect(m_dataWorker, SIGNAL(dataLoadFinished()), this, SLOT(onInitDataFinished())); // connect(w_thread, &QThread::finished, w_thread, &QThread::deleteLater, Qt::QueuedConnection); connect(w_thread, &QThread::started, m_dataWorker, &DataWorker::doWork/*, Qt::QueuedConnection*/); connect(m_dataWorker, &DataWorker::dataLoadFinished, this, &MainWindow::onInitDataFinished/*, Qt::BlockingQueuedConnection*/); connect(w_thread, &QThread::finished, this, [=] { w_thread->deleteLater(); qDebug() << "DataWorker thread finished......"; }); w_thread->start(); } int MainWindow::getCurrentBackgroundIndex() { int index = 1; /*mSettings->beginGroup("Background"); QString cur_skin_path = mSettings->value("Path").toString(); if(!cur_skin_path.isEmpty()) { int start_pos = cur_skin_path.lastIndexOf("/") + 1; int end_pos = cur_skin_path.length(); index = cur_skin_path.mid(start_pos, end_pos-start_pos).replace(".png", "").toInt(); } mSettings->endGroup(); mSettings->sync();*/ return index; } QString MainWindow::getCurrentBackgroundName() { QString cur_skin_path; /*mSettings->beginGroup("Background"); cur_skin_path = mSettings->value("Path").toString(); if(!cur_skin_path.isEmpty()) { int start_pos = cur_skin_path.lastIndexOf("/") + 1; int end_pos = cur_skin_path.length(); cur_skin_path = cur_skin_path.mid(start_pos, end_pos-start_pos); } mSettings->endGroup(); mSettings->sync();*/ return cur_skin_path; } QString MainWindow::getCurrentBackgroundAbsName() { QString cur_skin_path; /*mSettings->beginGroup("Background"); cur_skin_path = mSettings->value("Path").toString(); mSettings->endGroup(); mSettings->sync();*/ return cur_skin_path; } void MainWindow::restoreSkin() { /*if (main_skin_pixmap.isDetached()) { main_skin_pixmap.detach(); } main_skin_pixmap.load(last_skin_path); QPalette palette_back; palette_back.setBrush(QPalette::Background, main_skin_pixmap);*/ } void MainWindow::changeSkin(QString pciture) { /*if (main_skin_pixmap.isDetached()) { main_skin_pixmap.detach(); } last_skin_path = pciture; main_skin_pixmap.load(pciture); QPalette palette; palette.setBrush(QPalette::Background, main_skin_pixmap); mSettings->beginGroup("Background"); mSettings->setValue("Path", pciture); mSettings->endGroup(); mSettings->sync(); // if(auto_start != NULL) { // auto_start->resetTitleSkin(last_skin_path); // } // if(camera_manager != NULL) { // camera_manager->resetTitleSkin(last_skin_path); // } if(setting_widget != NULL) { setting_widget->resetSkin(last_skin_path); } if(cleaner_widget != NULL) { cleaner_widget->resetSkin(last_skin_path); } if(aboutDlg != NULL) { aboutDlg->resetTitleSkin(last_skin_path); }*/ } void MainWindow::reViewThePointSkin(QString pciture) { if (review_skin_pixmap.isDetached()) { review_skin_pixmap.detach(); } review_skin_pixmap.load(pciture); QPalette palette_back; palette_back.setBrush(QPalette::Background, review_skin_pixmap); } void MainWindow::reViewTheOrgSkin() { if (review_skin_pixmap.isDetached()) { review_skin_pixmap.detach(); } review_skin_pixmap.load(last_skin_path); QPalette palette_back; palette_back.setBrush(QPalette::Background, review_skin_pixmap); } void MainWindow::showMainMenu() { // if (this->arch == "aarch64" || this->osName == "Kylin" || this->osName == "YHKylin") // { QPoint p = rect().topRight(); p.setX(p.x() - 180); p.setY(p.y() + 22); main_menu->exec(this->mapToGlobal(p)); // } // else // { // QPoint p = rect().topLeft(); // p.setX(p.x() + 107);//104 // p.setY(p.y() + 22); // main_menu->exec(this->mapToGlobal(p)); // } // //向上弹出menu // QPoint pos; // pos.setX(0); // pos.setY(-main_menu->sizeHint().height()); // main_menu->exec(title_widget->mapToGlobal(pos)); } void MainWindow::closeYoukerAssistant() { // qApp->exit(); QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity"); animation->setDuration(500); animation->setStartValue(1); animation->setEndValue(0); animation->start(); connect(animation, SIGNAL(finished()), this, SLOT(close())); } void MainWindow::closeEvent(QCloseEvent *) { // QApplication::quit(); qApp->exit(); } void MainWindow::setCurrentPageIndex(int index) { if (index == 0 && status != HOMEPAGE) { m_topStack->setCurrentWidget(m_mainTopWidget); m_bottomStack->setCurrentWidget(m_mainBottomWidget); m_topStack->setFixedSize(m_mainTopWidget->size()); m_bottomStack->setFixedSize(m_mainBottomWidget->size()); status = HOMEPAGE; } else if (index == 1 && status != CLEANPAGE) { m_topStack->setCurrentWidget(cleaner_action_widget); m_bottomStack->setCurrentWidget(cleaner_widget); m_topStack->setFixedSize(cleaner_action_widget->size()); m_bottomStack->setFixedSize(cleaner_widget->size()); status = CLEANPAGE; } else if (index == 2 && status != INFOPAGE) { m_topStack->setCurrentWidget(info_action_widget); m_bottomStack->setCurrentWidget(info_widget); m_topStack->setFixedSize(info_action_widget->size()); m_bottomStack->setFixedSize(info_widget->size()); status = INFOPAGE; } else if (index == 3 && status != SETTINGPAGE) { m_topStack->setCurrentWidget(setting_action_widget); m_bottomStack->setCurrentWidget(setting_widget); m_topStack->setFixedSize(setting_action_widget->size()); m_bottomStack->setFixedSize(setting_widget->size()); status = SETTINGPAGE; } else if (index == 4 && status != BOXPAGE) { m_topStack->setCurrentWidget(box_action_widget); m_bottomStack->setCurrentWidget(box_widget); m_topStack->setFixedSize(box_action_widget->size()); m_bottomStack->setFixedSize(box_widget->size()); status = BOXPAGE; } } void MainWindow::openSkinCenter() { /*if(skin_center == NULL) { skin_center = new SkinCenter(0, last_skin_path, this->arch, this->osName);//20161228 skin_center->setParentWindow(this); skin_center->initSysBackgroundList(); int w_x = this->frameGeometry().topLeft().x() + (900 / 2) - (442 / 2); int w_y = this->frameGeometry().topLeft().y() + (600 /2) - (340 / 2); skin_center->move(w_x, w_y); skin_center->show(); skin_center->raise(); } else { int w_x = this->frameGeometry().topLeft().x() + (900 / 2) - (442 / 2); int w_y = this->frameGeometry().topLeft().y() + (600 /2) - (326 / 2); skin_center->move(w_x, w_y); skin_center->show(); skin_center->raise(); }*/ } void MainWindow::openUpgradePage(/*QStringList version_list*/) { /*int w_x = this->frameGeometry().topLeft().x() + (900 / 2) - (334 / 2); int w_y = this->frameGeometry().topLeft().y() + (600 /2) - (470 / 2); if(upgrade_dialog == NULL) { // upgrade_dialog = new UpgradeDialog(0, version_list.at(2), last_skin_path); upgrade_dialog = new UpgradeDialog(0, last_skin_path, this->arch, this->osName);//20161228 upgrade_dialog->setSystemDbusProxy(systeminterface); // upgrade_dialog->setSessionDbusProxy(sessioninterface); connect(home_page, SIGNAL(sendOpenUpgrade()), this, SLOT(openUpgradePageAgain())); connect(upgrade_dialog, SIGNAL(showBackendBtnSignal(bool)), home_page, SLOT(displayBackedBtn(bool))); connect(upgrade_dialog,SIGNAL(close_signal()), this, SLOT(closeYoukerAssistant())); connect(systeminterface,SIGNAL(get_fetch_signal(QString, QStringList)),upgrade_dialog,SLOT(receiveFetchSignal(QString, QStringList))); connect(systeminterface,SIGNAL(get_apt_signal(QString, QStringList)),upgrade_dialog,SLOT(receiveAptSignal(QString, QStringList))); // connect(sessioninterface,SIGNAL(receive_source_list_signal(bool)),upgrade_dialog,SLOT(receiveCheckResultSignal(bool))); upgrade_dialog->move(w_x, w_y); upgrade_dialog->show(); upgrade_dialog->raise(); upgrade_dialog->startAccessData(); } else { // upgrade_dialog->resetVersionNumber(version_list); upgrade_dialog->move(w_x, w_y); upgrade_dialog->show(); upgrade_dialog->raise(); home_page->hideBackedBtn(); // upgrade_dialog->startAccessData(); }*/ } //void MainWindow::openUpgradePageAgain() //{ // int w_x = this->frameGeometry().topLeft().x() + (900 / 2) - (334 / 2); // int w_y = this->frameGeometry().topLeft().y() + (600 /2) - (470 / 2); // upgrade_dialog->move(w_x, w_y); // upgrade_dialog->show(); // upgrade_dialog->raise(); //} void MainWindow::newFeatures() { } void MainWindow::setupConfigure() { } void MainWindow::createAboutDialog() { QApplication::setOverrideCursor(Qt::WaitCursor); aboutDlg = new AboutDialog(0, last_skin_path, this->arch, this->osName); aboutDlg->setModal(false); QApplication::restoreOverrideCursor(); } void MainWindow::aboutUs() { /*int w_x = this->frameGeometry().topLeft().x() + (900 / 2) - (442 / 2); int w_y = this->frameGeometry().topLeft().y() + (600 /2) - (326 / 2); if(aboutDlg == NULL) { aboutDlg = new AboutDialog(0, last_skin_path, this->arch, this->osName); aboutDlg->move(w_x, w_y); aboutDlg->show(); aboutDlg->raise(); } else { aboutDlg->move(w_x, w_y); aboutDlg->show(); aboutDlg->raise(); }*/ if (!aboutDlg) { createAboutDialog(); } int w_x = this->frameGeometry().topLeft().x() + (900 / 2) - (442 / 2); int w_y = this->frameGeometry().topLeft().y() + (600 /2) - (326 / 2); aboutDlg->move(w_x, w_y); aboutDlg->show(); } void MainWindow::mousePressEvent(QMouseEvent *event) { /*if(event->button() == Qt::LeftButton) { m_mousePressed = true; m_dragPosition = event->globalPos() - pos(); }*/ if (event->button() == Qt::LeftButton) { this->m_dragPosition = event->globalPos() - frameGeometry().topLeft(); this->m_mousePressed = true; } QMainWindow::mousePressEvent(event); } void MainWindow::mouseReleaseEvent(QMouseEvent *event) { /*m_mousePressed = false; setWindowOpacity(1);*/ this->m_mousePressed = false; setWindowOpacity(1); QMainWindow::mouseReleaseEvent(event); } void MainWindow::mouseMoveEvent(QMouseEvent *event) { /*if(m_mousePressed) { QPoint move_pos = event->globalPos(); move(move_pos - m_dragPosition); setWindowOpacity(0.9); // event->accept(); }*/ if (this->m_mousePressed) { move(event->globalPos() - this->m_dragPosition); setWindowOpacity(0.9); } QMainWindow::mouseMoveEvent(event); } //void MainWindow::paintEvent(QPaintEvent *event) //{ // QPainter painter(this); // painter.setRenderHint(QPainter::Antialiasing, true); // painter.setOpacity(0.05); // int penWidth = 1; // QPainterPath framePath; // framePath.addRoundedRect(QRect(rect().x() + penWidth, rect().y() + penWidth, rect().width() - penWidth * 2, rect().height() - penWidth * 2), 3, 3);//背景弧度 // painter.setClipPath(framePath); // QPen framePen; // framePen.setColor(QColor("#fca71d")); // painter.setOpacity(0.2); // painter.drawPath(framePath); //} youker-assistant/src/dataworker.h0000664000175000017500000003027413260315532016136 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 . */ #pragma once #include #include #include #include "../qdbusservice/systemdbus/data/systemdbusproxy.h" #include "../qdbusservice/systemdbus/customdata.h" #include "../qdbusservice/systemdbus/customdatalist.h" class QTimer; class SessionDispatcher; class SystemDispatcher; class DataWorker : public QObject { Q_OBJECT public: explicit DataWorker(QString desk, QObject *parent = 0); ~DataWorker(); void initDataWorker(); bool deleteAppointedFile(QString filename); bool copyAppointedFile(QString filename); bool isBatteryExist() { return m_existBattery; } bool isSensorExist() { return m_existSensor; } const QStringList cpuModeList() const; const QString cpuCurrentMode() const; public slots: void doWork(); void updateSensorValue(); //scan on homepage void onStartOneKeyScan(const QStringList &categorys); //clean on homepage void onStartOneKeyClean(); //scan void onStartScanSystem(QMap itemsMap); //clean void onStartCleanSystem(QMap itemsMap); //system info void onUpdateSystemRunnedTime(); void onRequestRefreshSystemInfo(); //desktop info void onRequestDesktopInfo(); //cpu info void onRequestCpuInfo(); //memory info void onRequestMemoryInfo(); //board info void onRequestBoardInfo(); //hd info void onRequestHDInfo(); //nic info void onRequestNicInfo(); //monitor info void onRequestMonitorInfo(); //audio info void onRequestAudioInfo(); //battery info void onRequestBatteryInfo(); //sensor info void onRequestSensorInfo(); //driver info //theme void onRequestThemeData(); void onChangeSystemTheme(const QString &theme); //icon void onRequestIconData(); void onResetIconTheme(const QString &theme); void onDisplayComputerIcon(bool b); void onDisplayFolderIcon(bool b); void onDisplayNetworkIcon(bool b); void onDisplayRecycleBinIcon(bool b); void onDisplayDiskIcon(bool b); //mouse void onRequestMouseData(); void onResetMouseCursorTheme(const QString &theme); void onResetMouseCursorSize(int cursorSize); //voice void onRequestSoundData(); void onResetVoiceTheme(QString selectTheme); void onResetLoginTipVoice(bool b); void onResetEventVoice(bool b); void onResetInputFeedbackVoice(bool b); //panel void onRequestMateOrUnityPanelData(bool isMate); void onResetPanelTransparencyValue(double value); void onResetDateFormat(const QString &selected); void onResetShowBatteryIcon(const QString &selected); void onResetDashBlurExperimental(int value); void onResetDisplaySeconds(bool b); void onResetDisplayWeek(bool b); void onResetDisplayDate(bool b); void onResetDisplayBatteryPercentage(bool b); void onResetDisplayBatteryTime(bool b); void onResetShowApplications(bool b); void onResetShowDesktop(bool b); void onResetShowIcon(bool b); void onResetShowPlaces(bool b); //launcher menu void onRequestMateOrUnityMenuData(bool isMate); void onResetIconSizeValue(int value); void onResetTransparencyValue(int value); void onResetIconColouring(int value); void onResetAutoHide(bool b); void onResetDisplayDesktopIcon(bool b); void onResetTopIconSizeValue(int value); void onResetBottomIconSizeValue(int value); void onResetTopAutoHide(bool b); void onResetBottomAutoHide(bool b); void onResetLauncherPosition(const QString &position); //window void onRequesetWindowButtonAlign(); void onRequesetMenusHaveIcons(); void onRequesetWindowTitileTags(); void onResetMenusHaveIcon(bool b); void onResetTitlebarWheel(const QString &selected); void onResetTitlebarDoubleClick(const QString &selected); void onResetMouseMiddleClick(const QString &selected); void onResetMouseRightClick(const QString &selected); void onResetWindowButtonLeftOrRightAlign(bool isLeft); //font void onRequestFontData(); void onSetDefaultFontByName(const QString &cur_font); void onSetDesktopFontByName(const QString &cur_font); void onSetMonospaceFontByName(const QString &cur_font); void onSetDocumentFontByName(const QString &cur_font); void onSetTitlebarFontByName(const QString &cur_font); void onResetFontZoomScalingValue(double value); void onResetFontHinting(const QString &selected); void onResetFontAntialiasing(const QString &selected); void onRestoreDefaultFont(bool isMate); void onRestoreDesktopDefaultFont(bool isMate); void onRestoreMonospaceDefaultFont(bool isMate); void onRestoreDocumentDefaultFont(bool isMate); void onRestoreTitlebarDefaultFont(bool isMate); //touchpad void onRequestMateOrUnityTouchpadData(bool isMate); void onResetTouchpad(bool b); void onResetHorizontalScrolling(bool b); void onSetScrollbarOverlayOrLegacyMode(bool b); void onSetMateTouchscrollingMode(int flag); void onSetUnityTouchscrollingMode(int flag); //ac and battery void onRequestPowerAndBatteryData(); void onResetScreenGammaValue(double value); void onResetBrightnessValue(int value); void onResetIdleDelay(int index, int curValue); void onResetLockEnabled(bool b); void onResetLockDelay(int index, int curValue); void onSetCurrentCriticalLow(const QString &value); void onSetCurrentLidBattery(const QString &value); void onSetCurrentLidAC(const QString &value); void onResetSleepTimeoutBattery(int index, int value); void onResetSleepTimeoutAC(int index, int value); void onResetSleepTimeoutDisplayBattery(int index, int value); void onResetSleepTimeoutDisplayAC(int index, int value); void onSetCurrentCpuMode(const QString &mode); //file manager void onRequestFileManagerData(); void onResetLocationReplacePathbar(bool b); void onResetAutoMountMedia(bool b); void onResetAutoOpenFolder(bool b); void onResetPromptAutorunPrograms(bool b); void onResetThumbnailIconSize(int value); void onResetThumbnailCacheTime(int value); void onResetThumbnailCacheSize(int value); signals: void dataLoadFinished(); void string_value_notify(QString key, QString value); void bool_value_notify(QString key, bool value); void int_value_notify(QString key, int value); void double_value_notify(QString key, double value); void tellCleanerDetailStatus(const QString &status); void tellCleanerDetailData(const QStringList &data); void tellCleanerDetailError(const QString &status); void sendCleanOverSignal(); void policykitCleanSignal(bool status); void tellCleanerMainData(const QStringList &data); void tellCleanerMainStatus(const QString &status, const QString &domain); void sendCleanErrorSignal(const QString &status); void isScanning(QString msg); void finishScanWork(QString msg); void tellScanResult(QString flag, QString msg); void finishCleanWorkMain(QString msg); void finishCleanWorkMainError(QString msg); void quickCleanProcess(QString type, QString status); //system info void sendSystemRunnedTime(int time_value); void sendSystemInfo(QMap tmpMap); //desktop info void sendDesktopInfo(QMap tmpMap); //cpu info void sendCpuInfo(QMap tmpMap); //memory info void sendMemoryInfo(QMap tmpMap); //board info void sendBoardInfo(QMap tmpMap); //hd info void sendHDInfo(QMap tmpMap); //nic info void sendNicInfo(QMap tmpMap); //monitor info void sendMonitorInfo(QMap tmpMap); //audio info void sendAudioInfo(QMap tmpMap); //battery info void sendBatteryInfo(QMap tmpMap); //sensor info void sendSensorInfo(QMap tmpMap); //driver info //theme void sendThemeList(const QString ¤tTheme, const QStringList &themeList); //icon void sendIconThemeList(const QString ¤tTheme, const QStringList &themeList); void sendDisplayIconValue(bool computer, bool folder, bool network, bool recycle, bool disk); //mouse void sendMouseThemeAndCusorSize(const QString ¤tTheme, const QStringList &themeList, int cusorSize); //voice void sendSoundList(const QString ¤tSound, const QStringList &soundList); void sendEnableSoundValue(bool login_music, bool sound_event, bool input_sound); //panel void sendMatePanelValue(bool app, bool desktop, bool icon, bool places); void sendUnityBlurAndTransparencyValue(int blur, double transparent); void sendUnityTimeValue(const QString &time_format, const QStringList &timelist, bool showSecond, bool showWeek, bool showDate); void sendUnityPanelPowerValue(const QString &cur_power, const QStringList &powerlist, bool showPower, bool showBatteryTime); //launcher menu void sendMatePanelIconValue(int topIconSize, int bottomIconSize, bool topIconHide, bool bottomIconHide); void sendUnityIconValue(int iconSize, bool iconHide, bool desktopIconShowed, double launcherTransparency, int iconColourIndex, const QStringList &colourlist); void sendUnityLauncherPosition(const QString ¤t_position, const QStringList &positionlist); //window void sendWindowButtonAlign(const QString ¤t_value); void sendMenusHaveIcons(bool menuHaveIcons); void sendWindowTitileTags(const QString ¤t_wheel_type, const QStringList &wheellist, const QStringList &titlebarOptions, const QString ¤t_double_type, const QString ¤t_middle_type, const QString ¤t_right_type); //font void sendFontValue(const QString &curFont); void sendDesktopFontValue(const QString &curFont); void sendMonospaceFontValue(const QString &curFont); void sendDocumentFontValue(const QString &curFont); void sendTitlebarFontValue(const QString &curFont); void sendFontSmoothAndAntialiasingValue(double fontZoom, const QString ¤t_smooth, const QStringList &smoothlist, const QString ¤t_antialiasing, const QStringList &antialiasinglist); //touchpad void sendTouchPadValue(bool touchpadEnable, bool touchscrollingHorizontal, const QString &mode_value, int scroll_int_value, const QString &scroll_string_value); //ac and battery void sendIdleAndGammaData(double gamma, const QStringList &aclist, int brightnessValue, const QString &sleepTimeoutDisplayBattery, const QString &sleepTimeoutFisplayAC, const QString &idle_delay, const QStringList &idledelaylist); void sendLockAndSleepData(bool lockEnabled, const QString &lock_delay, const QStringList &lockdelaylist, const QString &critical_low, const QString &laptop_battery, const QString &laptop_ac, const QString &sleepTimeoutBattery, const QStringList &batterylist, const QString &sleepTimeoutAc); //file manager void sendFileManagerData(bool locationReplacePathbar, bool autoMountMedia, bool autoOpenFolder, bool promptAutorunPrograms, int thumbnailIconSize, int thumbnailCacheTime, int thumbnailCacheSize); private: QDBusInterface *m_powerIface = nullptr; SessionDispatcher *m_sessionInterface = nullptr; SystemDispatcher *m_systemInterface = nullptr; SystemDbusProxy *m_qSystemDbus = nullptr; QString desktop; bool m_existBattery; bool m_existSensor; QStringList m_cpulist; QString m_currentCpuMode; QTimer *m_sensorTimer = nullptr; }; youker-assistant/src/toolwidget.h0000664000175000017500000000352313260315532016151 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 TOOLWIDGET_H #define TOOLWIDGET_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/kylintoolbutton.h" class MainWindow; //class QParallelAnimationGroup; class ToolWidget : public QWidget { Q_OBJECT public: explicit ToolWidget(QWidget *parent = 0, QString arch = "", QString os = ""); ~ToolWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initConnect(); // void initAnimation(); signals: void turnCurrentPage(int index); public slots: void switchSelectedPageIndex(QString index); void showBoxTool(); private: QPoint press_point;//鼠标按下去的点 bool is_move; QList button_list; MainWindow *p_mainwindow; QString cur_arch; QString osname; // QParallelAnimationGroup *openGroup; // QParallelAnimationGroup *closeGroup; }; #endif // TOOLWIDGET_H youker-assistant/src/img.qrc0000664000175000017500000006112713260315532015106 0ustar fengfeng res/logo.png res/menu_hover.png res/arrowhead.png res/title.png res/scan.png res/left-tab-default.png res/left-tab-hover.png res/ubuntukylin.png res/off.png res/on.png res/switch-closed-dangerous.png res/switch-closed-dangerous-hover.png res/switch-closed-normal.png res/switch-closed-normal-hover.png res/switch-opend.png res/switch-opend-hover.png res/switch-shade.png res/dot.png res/book.png res/bootanimation.png res/box.png res/broadcast.png res/camera.png res/camera-uk.png res/dynamic.png res/folder.png res/folder_hover.png res/font.png res/iconbeauty.png res/ip.png res/listen-pen.png res/mouse.png res/move.gif res/next.png res/others.png res/pic.png res/play.png res/play_hover.png res/power.png res/previewzone.png res/processmanager.png res/revoke.png res/revoke_hover.png res/shredder.png res/systemset.png res/systemsound.png res/themeset.png res/tool-hover.png res/touchpad.png res/unity.png res/apt-min.png res/box-hover.png res/browser.png res/brush.png res/button-hover.png res/cache.png res/chrome.png res/chromium.png res/configfile.png res/cookies.png res/cookies-bg.png res/deb-min.png res/firefox.png res/green.png res/highlight.png res/history.png res/history-max.png res/hover-enter.png res/hover-press.png res/kernel.png res/menu-big-hover.png res/menu_press.png res/program.png res/red.png res/searchfile.png res/software-min.png res/systemtrace.png res/thumbnails.png res/yellow.png res/using.png res/alert.png res/icon.png res/logo-hover.png res/boot.png res/more.png res/toolkits.png res/ubuntukylin-software-center.png res/version.png res/checkbox.png res/checkbox_mid.png res/checkbox_seclect.png res/screen.png res/bigfile.png res/checkbox-hover.png res/checkbox-press.png res/closeBtn.png res/closeBtn_hover.png res/cookie.png res/menu.png res/minBtn.png res/minBtn_hover.png res/package.png res/trace.png res/checkbox-checked.png res/checkbox-disable-checked.png res/checkbox-disable-unchecked.png res/checkbox-unchecked.png res/custom.png res/desktop.png res/other.png res/radiobutton-disable.png res/radiobutton-select.png res/radiobutton-unselect.png res/system.png res/arrow-hover.png res/arrow-normal.png res/back-arrow.png res/btn-ground.png res/switch-off.png res/switch-on.png res/delete.png res/picture.png res/systeminfo.png res/checkbox-tristate.png res/checkbox-two.png res/radiobutton.png res/cache_check.png res/cache_uncheck.png res/shadow_gray_hover.png res/shadow_hover.png res/bigfile_check.png res/bigfile_uncheck.png res/browser_check.png res/browser_uncheck.png res/cookie_check.png res/cookie_uncheck.png res/package_check.png res/package_uncheck.png res/trace_check.png res/trace_uncheck.png res/bigfile_logo.png res/bigfile_logo_gray.png res/browser_logo.png res/browser_logo_gray.png res/cache_logo.png res/cache_logo_gray.png res/cookie_logo.png res/cookie_logo_gray.png res/disappear.png res/package_logo.png res/package_logo_gray.png res/trace_logo.png res/trace_logo_gray.png res/background.jpg res/clothes.png res/indicator.png res/underline.png res/choose.png res/conceal.png res/remove.png res/skin-cover.png res/theme-cover.png res/create.png res/no-net.png res/retry-hover.png res/retry-press.png res/retry.png res/upgrade-normal.png res/upgrade-ok.png res/hook.png res/janitor/apt_check.png res/janitor/apt_uncheck.png res/janitor/chromium_check.png res/janitor/chromium_uncheck.png res/janitor/debug_check.png res/janitor/debug_uncheck.png res/janitor/firefox_check.png res/janitor/firefox_uncheck.png res/janitor/package_check.png res/janitor/package_uncheck.png res/janitor/software_check.png res/janitor/software_uncheck.png res/janitor/thumbnails_check.png res/janitor/thumbnails_uncheck.png res/janitor/trace_check.png res/janitor/trace_uncheck.png res/catch.png res/catch-hover.png res/view.png res/camera-default.png res/camera-error.png res/catch-disable.png res/kylin-assistant.png res/tool/min_hover.png res/tool/min_normal.png res/tool/min_press.png res/tool/max_normal.png res/tool/option_normal.png res/tool/unmax_normal.png res/tool/max_press.png res/tool/max_hover.png res/tool/option_hover.png res/tool/option_press.png res/tool/close_normal.png res/tool/unmax_press.png res/tool/unmax_hover.png res/tool/close_hover.png res/tool/close_press.png res/arrow_right.png res/search.png res/ok.png res/menu_selected.png res/download.svg res/upload.svg res/disk.png res/sub_logo.png res/user_proc.png res/active_proc.png res/all_proc.png res/arrow_down.png res/arrow_up.png res/wave_front.png res/wave_front_small.png res/wave_back.png res/wave_back_small.png res/autostart-default.png res/sysBtn/close_button.png res/sysBtn/main_menu.png res/sysBtn/min_button.png res/sysBtn/skin_button.png res/qss/kylin-assistant.qss translation/kylin-assistant_de.qm translation/kylin-assistant_es.qm translation/kylin-assistant_fr.qm translation/kylin-assistant_ru.qm translation/kylin-assistant_zh_CN.qm res/hardware/audio.png res/hardware/battery.png res/hardware/board.png res/hardware/cdrom.png res/hardware/computer.png res/hardware/cpu.png res/hardware/drive.png res/hardware/harddisk.png res/hardware/memory.png res/hardware/monitor.png res/hardware/network.png res/hardware/unity.png res/hardware/sensor.png res/manufacturer/3COM.jpg res/manufacturer/ABIT.jpg res/manufacturer/ACER.jpg res/manufacturer/ADATA.jpg res/manufacturer/A-DATA.jpg res/manufacturer/AEXEA.jpg res/manufacturer/ALI.jpg res/manufacturer/AMD.jpg res/manufacturer/AMI.jpg res/manufacturer/AOC.jpg res/manufacturer/AOPEN.jpg res/manufacturer/APACER.jpg res/manufacturer/APPLE.jpg res/manufacturer/ASINT.jpg res/manufacturer/ASROCK.jpg res/manufacturer/ASUS.jpg res/manufacturer/ASZ.jpg res/manufacturer/ATHEROS.jpg res/manufacturer/ATI.jpg res/manufacturer/AUO.jpg res/manufacturer/AUTHENTEC.jpg res/manufacturer/AVAGO.jpg res/manufacturer/AVEO.jpg res/manufacturer/B&DATA.jpg res/manufacturer/BENQ.jpg res/manufacturer/BIOSTAR.jpg res/manufacturer/B-LINK.jpg res/manufacturer/BROADCOM.jpg res/manufacturer/CANON.jpg res/manufacturer/CHAINTECH.jpg res/manufacturer/CHICONY.jpg res/manufacturer/CISCO.jpg res/manufacturer/COLORFUL.jpg res/manufacturer/COMEON.jpg res/manufacturer/CORSAIR.jpg res/manufacturer/CREATIVE.jpg res/manufacturer/DELL.jpg res/manufacturer/DFI.jpg res/manufacturer/D-LINK.jpg res/manufacturer/DTK.jpg res/manufacturer/EAGET.jpg res/manufacturer/EAST.jpg res/manufacturer/ECS.jpg res/manufacturer/ELEPHANT.jpg res/manufacturer/ELIXIR.jpg res/manufacturer/ELSA.jpg res/manufacturer/EMPIA.jpg res/manufacturer/E-MU.jpg res/manufacturer/ENLON.jpg res/manufacturer/ENNYAH.jpg res/manufacturer/ETRON.jpg res/manufacturer/EXCELSTOR.jpg res/manufacturer/FIC.jpg res/manufacturer/FOUNDER.jpg res/manufacturer/FUJITSU.jpg res/manufacturer/G.SKILL.jpg res/manufacturer/GAINWARO.jpg res/manufacturer/GALAXY.jpg res/manufacturer/GAMEN.jpg res/manufacturer/GEIL.jpg res/manufacturer/GIGABYTE.jpg res/manufacturer/GREAT WALL.jpg res/manufacturer/HASEE.jpg res/manufacturer/HITACHI.jpg res/manufacturer/HOMKEY.jpg res/manufacturer/HP.jpg res/manufacturer/HYNIX.jpg res/manufacturer/HYUNDAI.jpg res/manufacturer/IBM.jpg res/manufacturer/INNOVISION.jpg res/manufacturer/INTEL.jpg res/manufacturer/IOMEGA.jpg res/manufacturer/JETWAY.jpg res/manufacturer/J&W.jpg res/manufacturer/KINGBOX.jpg res/manufacturer/KINGFAST.jpg res/manufacturer/KINGMAX.jpg res/manufacturer/KINGSPEC.jpg res/manufacturer/KINGSTEK.jpg res/manufacturer/KINGSTON.jpg res/manufacturer/KINGTIGER.jpg res/manufacturer/LEADTEK.jpg res/manufacturer/LENOVO.jpg res/manufacturer/LG.jpg res/manufacturer/LINKSYS.jpg res/manufacturer/LITEON.jpg res/manufacturer/LITTLE TIGER.jpg res/manufacturer/LOGITECH.jpg res/manufacturer/MACY.jpg res/manufacturer/MAGIC-PRO.jpg res/manufacturer/MARVELL.jpg res/manufacturer/MATROX.jpg res/manufacturer/M_AUDIO.jpg res/manufacturer/MAXSUN.jpg res/manufacturer/MAXTOR.jpg res/manufacturer/MAYA.jpg res/manufacturer/MEGASTAR.jpg res/manufacturer/MICRON.jpg res/manufacturer/MICROSOFT.jpg res/manufacturer/MMC.jpg res/manufacturer/M-ONE.jpg res/manufacturer/MOTOROLA.jpg res/manufacturer/MSI.jpg res/manufacturer/MUSILAND .jpg res/manufacturer/NEC.jpg res/manufacturer/NETGEAR.jpg res/manufacturer/NOKIA.jpg res/manufacturer/NVIDIA.jpg res/manufacturer/OCZ.jpg res/manufacturer/OMEGA.jpg res/manufacturer/OMNIVISION.jpg res/manufacturer/OMRON.jpg res/manufacturer/ONDA.jpg res/manufacturer/ONKYO.jpg res/manufacturer/PANASONIC.jpg res/manufacturer/PHILIPS.jpg res/manufacturer/PHOENIX.jpg res/manufacturer/PINE.jpg res/manufacturer/PIONEER.jpg res/manufacturer/PIXART.jpg res/manufacturer/PLDS.jpg res/manufacturer/POWERCOLOR.jpg res/manufacturer/PRIMAX.jpg res/manufacturer/QDI.jpg res/manufacturer/QIMONDA.jpg res/manufacturer/QUANTUM.jpg res/manufacturer/RALINK.jpg res/manufacturer/RAPOO.jpg res/manufacturer/RAZER.jpg res/manufacturer/REALTEK.jpg res/manufacturer/SAMSUNG.jpg res/manufacturer/SANYO.jpg res/manufacturer/SAPPHIRE.jpg res/manufacturer/SEAGATE.jpg res/manufacturer/SHARK.jpg res/manufacturer/SIEMENS.jpg res/manufacturer/SIS.jpg res/manufacturer/SMP.jpg res/manufacturer/SONIX.jpg res/manufacturer/SONY.jpg res/manufacturer/SOYO.jpg res/manufacturer/SPARK.jpg res/manufacturer/SUNPLUS.jpg res/manufacturer/SUPERGRAPHIC.jpg res/manufacturer/SUPOX.jpg res/manufacturer/SYMBOL.jpg res/manufacturer/SYNTEK.jpg res/manufacturer/TAIYANFA.jpg res/manufacturer/TDK.jpg res/manufacturer/TEKRAM.jpg res/manufacturer/TERRATEC.jpg res/manufacturer/TEXAS.jpg res/manufacturer/TONGFANG.jpg res/manufacturer/TOSHIBA.jpg res/manufacturer/TOYOTA.jpg res/manufacturer/TP-LINK.jpg res/manufacturer/TRANSMETA.jpg res/manufacturer/TRUST.jpg res/manufacturer/TSSTCORP.jpg res/manufacturer/T&W.jpg res/manufacturer/TYAN.jpg res/manufacturer/UMC.jpg res/manufacturer/UNIKA.jpg res/manufacturer/VIA.jpg res/manufacturer/VIMICRO.jpg res/manufacturer/VIRTUALBOX.jpg res/manufacturer/WDC.jpg res/manufacturer/WINBOND.jpg res/manufacturer/XFX.jpg res/manufacturer/YESTON.jpg res/manufacturer/ZOTAC.jpg res/manufacturer/ZTE.jpg res/manufacturer/UBUNTUKYLIN.jpg res/skin/1.png res/skin/2.png res/skin/3.png res/skin/4.png res/menu/cleanup.png res/menu/cleanup-hover.png res/menu/feature.png res/menu/feature-hover.png res/menu/home.png res/menu/home-hover.png res/menu/sysinfo.png res/menu/sysinfo-hover.png res/menu/toolkits.png res/menu/toolkits-hover.png res/menu/about.png res/menu/features.png res/menu/feedback.png res/menu/help.png res/menu/setup.png res/menu/cleanup-press.png res/menu/feature-press.png res/menu/home-press.png res/menu/sysinfo-press.png res/menu/toolkits-press.png res/menu/upgrade.png res/loading/1.png res/loading/2.png res/loading/3.png res/loading/4.png res/loading/5.png res/loading/6.png res/loading/7.png res/loading/8.png res/loading/9.png res/loading/10.png res/loading/11.png res/loading/12.png res/loading/13.png res/loading/14.png res/loading/15.png res/loading/16.png res/loading/17.png res/loading/18.png res/loading/small/10.png res/loading/small/11.png res/loading/small/12.png res/loading/small/13.png res/loading/small/14.png res/loading/small/15.png res/loading/small/16.png res/loading/small/17.png res/loading/small/18.png res/loading/small/1.png res/loading/small/2.png res/loading/small/3.png res/loading/small/4.png res/loading/small/5.png res/loading/small/6.png res/loading/small/7.png res/loading/small/8.png res/loading/small/9.png res/upgrading/10.png res/upgrading/11.png res/upgrading/12.png res/upgrading/13.png res/upgrading/14.png res/upgrading/15.png res/upgrading/16.png res/upgrading/17.png res/upgrading/18.png res/upgrading/19.png res/upgrading/20.png res/upgrading/21.png res/upgrading/22.png res/upgrading/23.png res/upgrading/24.png res/upgrading/25.png res/upgrading/26.png res/upgrading/27.png res/upgrading/28.png res/upgrading/29.png res/upgrading/30.png res/upgrading/31.png res/upgrading/32.png res/working/10.png res/working/11.png res/working/12.png res/working/13.png res/working/14.png res/working/15.png res/working/16.png res/working/17.png res/working/18.png res/working/19.png res/working/20.png res/working/21.png res/working/22.png res/working/23.png res/working/24.png res/working/25.png res/working/26.png res/working/27.png res/working/28.png res/working/29.png res/working/30.png res/working/31.png res/working/32.png res/working/33.png res/working/34.png res/working/35.png res/working/36.png res/upgrading/1.png res/upgrading/2.png res/upgrading/3.png res/upgrading/4.png res/upgrading/5.png res/upgrading/6.png res/upgrading/7.png res/upgrading/8.png res/upgrading/9.png res/working/1.png res/working/2.png res/working/3.png res/working/4.png res/working/5.png res/working/6.png res/working/7.png res/working/8.png res/working/9.png res/theme/Ambiance.png res/theme/disappear.png res/theme/HighContrast.png res/theme/Radiance.png res/theme/ubuntukylin-theme.png res/plugin/processmanager.png res/plugin/shredder.png res/plugin/startupmanager.png youker-assistant/src/topbasewidget.h0000664000175000017500000000475413260315532016640 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 TOPBASEWIDGET_H #define TOPBASEWIDGET_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" class TopBaseWidget : public QWidget { Q_OBJECT public: explicit TopBaseWidget(QWidget *parent = 0); ~TopBaseWidget(); void setTipMessage(const QString &message); void setImage(const QString &pic); void initTitlebarLeftContent(); void initTitlebarRightContent(); void initContentLeftContent(); void initActionRightContent(); void initWidgets(); // QString getModuleName() const; // void setModuleName(const QString &name); QString getModuleName(); // void setModuleName(QString name); // SettingModuleID getModuleNameID() const; // void setModuleNameID(const SettingModuleID &id); public slots: void displayActionSubPage(QString moduleName); signals: void notifyContentPageToMain(); void showMenu(); void showSkinCenter(); void showMin(); void closeApp(); private: QLabel *img_label = nullptr; QLabel *suggest_label = nullptr; QPushButton *back_button = nullptr; QString desktop; // QString m_moduleName; // SettingModuleID m_id; QString m_titileMessage; QVBoxLayout *m_layout = nullptr; QHBoxLayout *m_topLayout = nullptr; QHBoxLayout *m_titleRightLayout = nullptr; QHBoxLayout *m_bottomLayout = nullptr; QHBoxLayout *m_titleLeftLayout = nullptr; QHBoxLayout *m_toolLeftLayout = nullptr; QHBoxLayout *m_toolRightLayout = nullptr; }; #endif // TOPBASEWIDGET_H youker-assistant/src/signalmanager.cpp0000664000175000017500000000047213260315532017133 0ustar fengfeng#include "signalmanager.h" SignalManager * SignalManager::m_signalManager = NULL; SignalManager *SignalManager::Instance() { if (m_signalManager == NULL) { m_signalManager = new SignalManager; } return m_signalManager; } SignalManager::SignalManager(QObject *parent) : QObject(parent) { } youker-assistant/src/dataworker.cpp0000664000175000017500000011212613260317316016470 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "dataworker.h" #include #include #include #include "../component/threadpool.h" #include "../dbusproxy/youkersessiondbus.h" #include "../dbusproxy/youkersystemdbus.h" DataWorker::DataWorker(QString desk, QObject *parent) : QObject(parent) , desktop(desk) { m_sensorTimer = new QTimer(this); connect(m_sensorTimer, SIGNAL(timeout()), this, SLOT(updateSensorValue())); } DataWorker::~DataWorker() { if (m_sensorTimer) { disconnect(m_sensorTimer,SIGNAL(timeout()),this,SLOT(updateSensorValue())); if(m_sensorTimer->isActive()) { m_sensorTimer->stop(); } delete m_sensorTimer; m_sensorTimer = nullptr; } m_sessionInterface->deleteLater(); m_systemInterface->deleteLater(); m_qSystemDbus->deleteLater(); if (m_powerIface) {//m_powerIface->deleteLater() delete m_powerIface; m_powerIface = nullptr; } } void DataWorker::initDataWorker() { //power dbus m_powerIface = new QDBusInterface("org.gnome.SettingsDaemon", "/org/gnome/SettingsDaemon/Power", "org.gnome.SettingsDaemon.Power.Screen", QDBusConnection::sessionBus()); //session dbus m_sessionInterface = new SessionDispatcher; ThreadPool::Instance()->moveObjectToThread(m_sessionInterface); this->m_existBattery = m_sessionInterface->judge_power_is_exists_qt(); connect(m_sessionInterface, SIGNAL(string_value_notify(QString,QString)), this, SIGNAL(string_value_notify(QString,QString))); connect(m_sessionInterface, SIGNAL(bool_value_notify(QString,bool)), this, SIGNAL(bool_value_notify(QString,bool))); connect(m_sessionInterface, SIGNAL(int_value_notify(QString,int)), this, SIGNAL(int_value_notify(QString,int))); connect(m_sessionInterface, SIGNAL(double_value_notify(QString, double)), this, SIGNAL(double_value_notify(QString, double))); connect(m_sessionInterface, SIGNAL(isScanning(QString)), this, SIGNAL(isScanning(QString))); connect(m_sessionInterface, SIGNAL(finishScanWork(QString)), this, SIGNAL(finishScanWork(QString))); connect(m_sessionInterface, SIGNAL(tellScanResult(QString,QString)), this, SIGNAL(tellScanResult(QString,QString))); connect(m_sessionInterface, SIGNAL(tellCleanerDetailStatus(QString)), this, SIGNAL(tellCleanerDetailStatus(QString))); connect(m_sessionInterface, SIGNAL(tellCleanerDetailError(QString)), this, SIGNAL(tellCleanerDetailError(QString))); connect(m_sessionInterface, SIGNAL(tellCleanerDetailData(QStringList)), this, SIGNAL(tellCleanerDetailData(QStringList))); //system dbus m_systemInterface = new SystemDispatcher; ThreadPool::Instance()->moveObjectToThread(m_systemInterface); /*QThread *systemThread = ThreadPool::Instance()->createNewThread(); m_systemInterface->moveToThread(systemThread); systemThread->start();*/ this->m_existSensor = m_systemInterface->judge_sensors_exists_qt(); this->m_cpulist = m_systemInterface->get_cpufreq_scaling_governer_list_qt(); this->m_currentCpuMode = m_systemInterface->get_current_cpufreq_scaling_governer_qt(); connect(m_systemInterface, SIGNAL(finishCleanWorkMain(QString)), this, SIGNAL(finishCleanWorkMain(QString))); connect(m_systemInterface, SIGNAL(finishCleanWorkMainError(QString)), this, SIGNAL(finishCleanWorkMainError(QString))); connect(m_systemInterface, SIGNAL(quickCleanProcess(QString,QString)), this, SIGNAL(quickCleanProcess(QString,QString))); connect(m_systemInterface, SIGNAL(sendCleanOverSignal()), this, SIGNAL(sendCleanOverSignal())); connect(m_systemInterface, SIGNAL(policykitCleanSignal(bool)), this, SIGNAL(policykitCleanSignal(bool))); connect(m_systemInterface, SIGNAL(tellCleanerMainData(QStringList)), this, SIGNAL(tellCleanerMainData(QStringList))); connect(m_systemInterface, SIGNAL(tellCleanerMainStatus(QString,QString)), this, SIGNAL(tellCleanerMainStatus(QString,QString))); connect(m_systemInterface, SIGNAL(sendCleanErrorSignal(QString)), this, SIGNAL(sendCleanErrorSignal(QString))); m_qSystemDbus = new SystemDbusProxy; ThreadPool::Instance()->moveObjectToThread(m_qSystemDbus); connect(m_qSystemDbus, &SystemDbusProxy::reportAlert, this, [ = ](int ret, const QString &description) { //qDebug() <<"ret="<demoInfo()===="<demoInfo(); //qDebug() << m_qSystemDbus->getCustomData().hash; } void DataWorker::doWork() { this->initDataWorker(); emit dataLoadFinished(); } const QStringList DataWorker::cpuModeList() const { return this->m_cpulist; } const QString DataWorker::cpuCurrentMode() const { return this->m_currentCpuMode; } bool DataWorker::deleteAppointedFile(QString filename) { bool result = m_systemInterface->delete_file_qt(filename); return result; } bool DataWorker::copyAppointedFile(QString filename) { bool result = m_systemInterface->copy_file_qt(filename); return result; } //---------------scan on homepage void DataWorker::onStartOneKeyScan(const QStringList &categorys) { m_sessionInterface->onekey_scan_function_qt(categorys); // QCoreApplication::processEvents(); } //---------------clean on homepage void DataWorker::onStartOneKeyClean() { m_systemInterface->set_user_homedir_qt(); m_systemInterface->clean_by_main_one_key_qt(); } //---------------scan void DataWorker::onStartScanSystem(QMap itemsMap) { m_sessionInterface->scanSystemCleanerItems(itemsMap); // QEventLoop loop; // MyThread *t = new MyThread(0,QString("aaa")); // connect(t, SIGNAL(finished()), &loop, SLOT(quit())); // t->start(); // loop.exec(); // int i = t->getMyThreadResult(); // if(i == 0)//success // { // return true; // }else // { // return false; // } // delete t; } //-------------clean void DataWorker::onStartCleanSystem(QMap itemsMap) { m_systemInterface->set_user_homedir_qt(); m_systemInterface->cleanAllSelectItems(itemsMap); } //system info void DataWorker::onUpdateSystemRunnedTime() { int time_value = m_systemInterface->get_time_value_qt().toInt(); emit sendSystemRunnedTime(time_value); } void DataWorker::onRequestRefreshSystemInfo() { QMap tmpMap = m_systemInterface->get_computer_info_qt(); // qDebug() << "==================sys tmpMap="< tmpMap = m_sessionInterface->get_system_message_qt(); emit sendDesktopInfo(tmpMap); } //cpu info void DataWorker::onRequestCpuInfo() { QMap tmpMap = m_systemInterface->get_cpu_info_qt(); emit sendCpuInfo(tmpMap); } //memory info void DataWorker::onRequestMemoryInfo() { QMap tmpMap = m_systemInterface->get_memory_info_qt(); emit sendMemoryInfo(tmpMap); } //board info void DataWorker::onRequestBoardInfo() { QMap tmpMap = m_systemInterface->get_board_info_qt(); emit sendBoardInfo(tmpMap); } //hd info void DataWorker::onRequestHDInfo() { QMap tmpMap = m_systemInterface->get_harddisk_info_qt(); emit sendHDInfo(tmpMap); } //nic info void DataWorker::onRequestNicInfo() { QMap tmpMap = m_systemInterface->get_networkcard_info_qt(); emit sendNicInfo(tmpMap); } //monitor info void DataWorker::onRequestMonitorInfo() { QMap tmpMap = m_systemInterface->get_monitor_info_qt(); emit sendMonitorInfo(tmpMap); } //audio info void DataWorker::onRequestAudioInfo() { QMap tmpMap = m_systemInterface->get_audiocard_info_qt(); emit sendAudioInfo(tmpMap); } //battery info void DataWorker::onRequestBatteryInfo() { QMap tmpMap = m_sessionInterface->read_battery_info_qt(); emit sendBatteryInfo(tmpMap); } //sensor info void DataWorker::onRequestSensorInfo() { QMap tmpMap = m_systemInterface->get_sensor_info_qt(); emit sendSensorInfo(tmpMap); if (m_sensorTimer && !m_sensorTimer->isActive()) m_sensorTimer->start(1000*4); } void DataWorker::updateSensorValue() { QMap tmpMap = m_systemInterface->get_sensor_info_qt(); emit sendSensorInfo(tmpMap); } //--------------------theme void DataWorker::onRequestThemeData() { QString currentTheme = m_sessionInterface->get_theme_qt(); QStringList themeList = m_sessionInterface->get_themes_qt(); emit this->sendThemeList(currentTheme, themeList); } void DataWorker::onChangeSystemTheme(const QString &theme) { m_sessionInterface->set_theme_qt(theme); } //---------------------icon void DataWorker::onRequestIconData() { QString current_icon_theme = m_sessionInterface->get_icon_theme_qt(); QStringList iconlist = m_sessionInterface->get_icon_themes_qt(); emit this->sendIconThemeList(current_icon_theme, iconlist); bool computer = m_sessionInterface->get_show_computer_qt(); bool folder = m_sessionInterface->get_show_homefolder_qt(); bool network = m_sessionInterface->get_show_network_qt(); bool recycle = m_sessionInterface->get_show_trash_qt(); bool disk = m_sessionInterface->get_show_devices_qt(); emit this->sendDisplayIconValue(computer, folder, network, recycle, disk); } void DataWorker::onResetIconTheme(const QString &theme) { m_sessionInterface->set_icon_theme_qt(theme); } void DataWorker::onDisplayComputerIcon(bool b) { m_sessionInterface->set_show_computer_qt(b); } void DataWorker::onDisplayFolderIcon(bool b) { m_sessionInterface->set_show_homefolder_qt(b); } void DataWorker::onDisplayNetworkIcon(bool b) { m_sessionInterface->set_show_network_qt(b); } void DataWorker::onDisplayRecycleBinIcon(bool b) { m_sessionInterface->set_show_trash_qt(b); } void DataWorker::onDisplayDiskIcon(bool b) { m_sessionInterface->set_show_devices_qt(b); } //---------------mouse void DataWorker::onRequestMouseData() { QString current_cursor_theme = m_sessionInterface->get_cursor_theme_qt(); int default_cursor_value = m_sessionInterface->get_cursor_size_qt(); QStringList themeList = m_sessionInterface->get_cursor_themes_qt(); emit this->sendMouseThemeAndCusorSize(current_cursor_theme, themeList, default_cursor_value); } void DataWorker::onResetMouseCursorTheme(const QString &theme) { m_sessionInterface->set_cursor_theme_qt(theme); m_systemInterface->set_cursor_theme_with_root_qt(theme); } void DataWorker::onResetMouseCursorSize(int cursorSize) { m_sessionInterface->set_cursor_size_qt(cursorSize); } //---------------voice void DataWorker::onRequestSoundData() { QString current_sound = m_sessionInterface->get_sound_theme_qt(); QStringList soundlist = m_systemInterface->get_sound_themes_qt(); emit this->sendSoundList(current_sound, soundlist); bool login_music = m_sessionInterface->get_login_music_enable_qt(); bool sound_event = m_sessionInterface->get_sound_event_enable_qt(); bool input_sound = m_sessionInterface->get_input_feedback_sounds_enable_qt(); emit this->sendEnableSoundValue(login_music, sound_event, input_sound); } void DataWorker::onResetVoiceTheme(QString selectTheme) { m_sessionInterface->set_sound_theme_qt(selectTheme); } void DataWorker::onResetLoginTipVoice(bool b) { m_sessionInterface->set_login_music_enable_qt(b); } void DataWorker::onResetEventVoice(bool b) { m_sessionInterface->set_sound_event_enable_qt(b); } void DataWorker::onResetInputFeedbackVoice(bool b) { m_sessionInterface->set_input_feedback_sounds_enable_qt(b); } //----------------panel void DataWorker::onRequestMateOrUnityPanelData(bool isMate) { if (isMate) { bool app = m_sessionInterface->get_show_apps_qt(); bool showDesktop = m_sessionInterface->get_show_desktop_qt(); bool icon = m_sessionInterface->get_show_icon_qt(); bool places = m_sessionInterface->get_show_places_qt(); emit this->sendMatePanelValue(app, showDesktop, icon, places); } else { int blur = m_sessionInterface->get_dash_blur_experimental_qt(); double transparent = m_sessionInterface->get_panel_transparency_qt(); emit this->sendUnityBlurAndTransparencyValue(blur, transparent); QString time_format = m_sessionInterface->get_time_format_qt(); QStringList timelist = m_sessionInterface->get_all_time_format_qt(); bool showSecond = m_sessionInterface->get_show_seconds_qt(); bool showWeek = m_sessionInterface->get_show_week_qt(); bool showDate = m_sessionInterface->get_show_date_qt(); emit this->sendUnityTimeValue(time_format, timelist, showSecond, showWeek, showDate); QString cur_power = m_sessionInterface->get_power_icon_policy_qt(); QStringList powerlist = m_sessionInterface->get_all_power_icon_policy_qt(); bool showPower = m_sessionInterface->get_show_power_percentage_qt(); bool showBatteryTime = m_sessionInterface->get_show_power_time_qt(); emit this->sendUnityPanelPowerValue(cur_power, powerlist, showPower, showBatteryTime); } } void DataWorker::onResetPanelTransparencyValue(double value) { m_sessionInterface->set_panel_transparency_qt(value); } void DataWorker::onResetDateFormat(const QString &selected) { m_sessionInterface->set_time_format_qt(selected); } void DataWorker::onResetShowBatteryIcon(const QString &selected) { m_sessionInterface->set_power_icon_policy_qt(selected); } void DataWorker::onResetDashBlurExperimental(int value) { m_sessionInterface->set_dash_blur_experimental_qt(value); } void DataWorker::onResetDisplaySeconds(bool b) { m_sessionInterface->set_show_seconds_qt(b); } void DataWorker::onResetDisplayWeek(bool b) { m_sessionInterface->set_show_week_qt(b); } void DataWorker::onResetDisplayDate(bool b) { m_sessionInterface->set_show_date_qt(b); } void DataWorker::onResetDisplayBatteryPercentage(bool b) { m_sessionInterface->set_show_power_percentage_qt(b); } void DataWorker::onResetDisplayBatteryTime(bool b) { m_sessionInterface->set_show_power_time_qt(b); } void DataWorker::onResetShowApplications(bool b) { m_sessionInterface->set_show_apps_qt(b); } void DataWorker::onResetShowDesktop(bool b) { m_sessionInterface->set_show_desktop_qt(b); } void DataWorker::onResetShowIcon(bool b) { m_sessionInterface->set_show_icon_qt(b); } void DataWorker::onResetShowPlaces(bool b) { m_sessionInterface->set_show_places_qt(b); } //--------------------launcher menu void DataWorker::onRequestMateOrUnityMenuData(bool isMate) { if (isMate) { int topIconSize = m_sessionInterface->get_mate_panel_icon_size_qt("top"); int bottomIconSize = m_sessionInterface->get_mate_panel_icon_size_qt("bottom"); bool topIconHide = m_sessionInterface->get_mate_panel_autohide_qt("top"); bool bottomIconHide = m_sessionInterface->get_mate_panel_autohide_qt("bottom"); emit this->sendMatePanelIconValue(topIconSize, bottomIconSize, topIconHide, bottomIconHide); } else { int iconSize = m_sessionInterface->get_launcher_icon_size_qt(); bool iconHide = m_sessionInterface->get_launcher_autohide_qt(); bool desktopIconShowed = m_sessionInterface->get_launcher_have_showdesktopicon_qt(); double launcherTransparency = m_sessionInterface->get_launcher_transparency_qt();//TODO:WTF is 0???? int iconColourIndex = m_sessionInterface->get_launcher_icon_colouring_qt(); QStringList colourlist = m_sessionInterface->get_all_launcher_icon_colourings_qt(); emit this->sendUnityIconValue(iconSize, iconHide, desktopIconShowed, launcherTransparency, iconColourIndex, colourlist); QString current_position = m_sessionInterface->get_current_launcher_position_qt(); QStringList positionlist = m_sessionInterface->get_all_launcher_position_qt(); // qDebug() <<"positionlist="<sendUnityLauncherPosition(current_position, positionlist); } } void DataWorker::onResetIconSizeValue(int value) { m_sessionInterface->set_launcher_icon_size_qt(value); } void DataWorker::onResetTransparencyValue(int value) { m_sessionInterface->set_launcher_transparency_qt(value); } void DataWorker::onResetIconColouring(int value) { m_sessionInterface->set_launcher_icon_colouring_qt(value); } void DataWorker::onResetAutoHide(bool b) { m_sessionInterface->set_launcher_autohide_qt(b); } void DataWorker::onResetDisplayDesktopIcon(bool b) { m_sessionInterface->set_launcher_have_showdesktopicon_qt(b); } void DataWorker::onResetTopIconSizeValue(int value) { m_sessionInterface->set_mate_panel_icon_size_qt("top", value); } void DataWorker::onResetBottomIconSizeValue(int value) { m_sessionInterface->set_mate_panel_icon_size_qt("bottom", value); } void DataWorker::onResetTopAutoHide(bool b) { m_sessionInterface->set_mate_panel_autohide_qt("top", b); } void DataWorker::onResetBottomAutoHide(bool b) { m_sessionInterface->set_mate_panel_autohide_qt("bottom", b); } void DataWorker::onResetLauncherPosition(const QString &position) { m_sessionInterface->set_launcher_position_qt(position); } //-----------------window void DataWorker::onRequesetWindowButtonAlign() { QString current_value = m_sessionInterface->get_window_button_align_qt(); emit this->sendWindowButtonAlign(current_value); } void DataWorker::onRequesetMenusHaveIcons() { bool menuHaveIcons = m_sessionInterface->get_menus_have_icons_qt(); emit this->sendMenusHaveIcons(menuHaveIcons); } void DataWorker::onRequesetWindowTitileTags() { QString current_wheel_type = m_sessionInterface->get_current_titlebar_wheel_qt(); QStringList wheellist = m_sessionInterface->get_titlebar_wheel_qt(); QString current_double_type = m_sessionInterface->get_current_titlebar_double_qt(); QStringList titlebarOptions = m_sessionInterface->get_titlebar_options_qt(); QString current_middle_type = m_sessionInterface->get_current_titlebar_middle_qt(); QString current_right_type = m_sessionInterface->get_current_titlebar_right_qt(); emit this->sendWindowTitileTags(current_wheel_type, wheellist, titlebarOptions, current_double_type, current_middle_type, current_right_type); } void DataWorker::onResetMenusHaveIcon(bool b) { m_sessionInterface->set_menus_have_icons_qt(b); } void DataWorker::onResetTitlebarWheel(const QString &selected) { m_sessionInterface->set_titlebar_wheel_qt(selected); } void DataWorker::onResetTitlebarDoubleClick(const QString &selected) { m_sessionInterface->set_titlebar_double_qt(selected); } void DataWorker::onResetMouseMiddleClick(const QString &selected) { m_sessionInterface->set_titlebar_middle_qt(selected); } void DataWorker::onResetMouseRightClick(const QString &selected) { m_sessionInterface->set_titlebar_right_qt(selected); } void DataWorker::onResetWindowButtonLeftOrRightAlign(bool isLeft) { if (isLeft) m_sessionInterface->set_window_button_align_left_qt(); else m_sessionInterface->set_window_button_align_right_qt(); } //-----------------------font void DataWorker::onRequestFontData() { QString current_font = m_sessionInterface->get_font_qt(); emit sendFontValue(current_font); QString desktop_font = m_sessionInterface->get_desktop_font_qt(); if(desktop_font.isEmpty()) { // sessionproxy->set_desktop_font_qt_default(); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") desktop_font = "Sans 10"; else desktop_font = "Ubuntu 11"; m_sessionInterface->set_desktop_font_qt(desktop_font); } desktop_font = m_sessionInterface->get_desktop_font_qt(); emit sendDesktopFontValue(desktop_font); QString monospace_font = m_sessionInterface->get_monospace_font_qt(); emit sendMonospaceFontValue(monospace_font); QString document_font = m_sessionInterface->get_document_font_qt(); emit sendDocumentFontValue(document_font); QString titlebar_font = m_sessionInterface->get_window_title_font_qt(); emit sendTitlebarFontValue(titlebar_font); double fontZoom = 0.0; if (this->desktop != "mate" || this->desktop == "MATE") { fontZoom = m_sessionInterface->get_font_zoom_qt(); } QString current_smooth = m_sessionInterface->get_smooth_style_qt(); QStringList smoothlist = m_sessionInterface->get_smooth_style_list_qt(); QString current_antialiasing = m_sessionInterface->get_antialiasing_style_qt(); QStringList antialiasinglist = m_sessionInterface->get_antialiasing_style_list_qt(); emit sendFontSmoothAndAntialiasingValue(fontZoom, current_smooth, smoothlist, current_antialiasing, antialiasinglist); } void DataWorker::onSetDefaultFontByName(const QString &cur_font) { m_sessionInterface->set_font_qt(cur_font); } void DataWorker::onSetDesktopFontByName(const QString &cur_font) { m_sessionInterface->set_desktop_font_qt(cur_font); } void DataWorker::onSetMonospaceFontByName(const QString &cur_font) { m_sessionInterface->set_monospace_font_qt(cur_font); } void DataWorker::onSetDocumentFontByName(const QString &cur_font) { m_sessionInterface->set_document_font_qt(cur_font); } void DataWorker::onSetTitlebarFontByName(const QString &cur_font) { m_sessionInterface->set_window_title_font_qt(cur_font); } void DataWorker::onResetFontZoomScalingValue(double value) { m_sessionInterface->set_font_zoom_qt(value); } void DataWorker::onResetFontHinting(const QString &selected) { m_sessionInterface->set_smooth_style_qt(selected); } void DataWorker::onResetFontAntialiasing(const QString &selected) { m_sessionInterface->set_antialiasing_style_qt(selected); } void DataWorker::onRestoreDefaultFont(bool isMate) { if (isMate) { m_sessionInterface->set_default_font_string_qt("org.mate.interface", "font-name", "string"); emit sendDesktopFontValue(m_sessionInterface->get_default_font_string_qt("org.mate.interface", "font-name")); } else { m_sessionInterface->set_default_font_string_qt("org.gnome.desktop.interface", "font-name", "string"); emit sendDesktopFontValue(m_sessionInterface->get_default_font_string_qt("org.gnome.desktop.interface", "font-name")); } } void DataWorker::onRestoreDesktopDefaultFont(bool isMate) { if (isMate) { m_sessionInterface->set_default_font_string_qt("org.ukui.peony.desktop", "font", "string"); emit sendDesktopFontValue(m_sessionInterface->get_default_font_string_qt("org.ukui.peony.desktop", "font")); } else { m_sessionInterface->set_default_font_string_qt("org.gnome.nautilus.desktop", "font", "string"); emit sendDesktopFontValue(m_sessionInterface->get_default_font_string_qt("org.gnome.nautilus.desktop", "font")); } } void DataWorker::onRestoreMonospaceDefaultFont(bool isMate) { if (isMate) { m_sessionInterface->set_default_font_string_qt("org.mate.interface", "monospace-font-name", "string"); emit sendMonospaceFontValue(m_sessionInterface->get_default_font_string_qt("org.mate.interface", "monospace-font-name")); } else { m_sessionInterface->set_default_font_string_qt("org.gnome.desktop.interface", "monospace-font-name", "string"); emit sendMonospaceFontValue(m_sessionInterface->get_default_font_string_qt("org.gnome.desktop.interface", "monospace-font-name")); } } void DataWorker::onRestoreDocumentDefaultFont(bool isMate) { if (isMate) { m_sessionInterface->set_default_font_string_qt("org.mate.interface", "document-font-name", "string"); emit sendDocumentFontValue(m_sessionInterface->get_default_font_string_qt("org.mate.interface", "document-font-name")); } else { m_sessionInterface->set_default_font_string_qt("org.gnome.desktop.interface", "document-font-name", "string"); emit sendDocumentFontValue(m_sessionInterface->get_default_font_string_qt("org.gnome.desktop.interface", "document-font-name")); } } void DataWorker::onRestoreTitlebarDefaultFont(bool isMate) { if (isMate) { m_sessionInterface->set_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font", "string"); emit sendTitlebarFontValue(m_sessionInterface->get_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font")); } else { m_sessionInterface->set_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font", "string"); emit sendTitlebarFontValue(m_sessionInterface->get_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font")); } } //-------------------touchpad void DataWorker::onRequestMateOrUnityTouchpadData(bool isMate) { bool touchpadEnable = m_sessionInterface->get_touchpad_enable_qt(); bool touchscrollingHorizontal = m_sessionInterface->get_touchscrolling_use_horizontal_qt(); QString mode_value = m_sessionInterface->get_scrollbars_mode_qt(); int scroll_int_value = 0; QString scroll_string_value = ""; if (isMate) scroll_int_value = m_sessionInterface->get_mate_touchscrolling_mode_qt(); else scroll_string_value = m_sessionInterface->get_touchscrolling_mode_qt(); emit sendTouchPadValue(touchpadEnable, touchscrollingHorizontal, mode_value, scroll_int_value, scroll_string_value); } void DataWorker::onResetTouchpad(bool b) { m_sessionInterface->set_touchpad_enable_qt(b); } void DataWorker::onResetHorizontalScrolling(bool b) { m_sessionInterface->set_touchscrolling_use_horizontal_qt(b); } void DataWorker::onSetScrollbarOverlayOrLegacyMode(bool b) { if (b) { m_sessionInterface->set_scrollbars_mode_overlay_qt(); } else { m_sessionInterface->set_scrollbars_mode_legacy_qt(); } } void DataWorker::onSetMateTouchscrollingMode(int flag) { m_sessionInterface->set_mate_touchscrolling_mode_qt(flag); } void DataWorker::onSetUnityTouchscrollingMode(int flag) { if (flag == 0) { m_sessionInterface->set_touchscrolling_mode_disabled_qt(); } else if (flag == 1) { m_sessionInterface->set_touchscrolling_mode_edge_qt(); } else if (flag == 2) { m_sessionInterface->set_touchscrolling_mode_twofinger_qt(); } } //---------------------ac and battery void DataWorker::onRequestPowerAndBatteryData() { double gamma = m_sessionInterface->get_screen_gamma_qt(); QStringList aclist = m_sessionInterface->get_sleep_timeout_list_qt(); int brightnessValue = -1; QString sleep_timeout_display_battery = ""; QString sleep_timeout_display_ac = ""; if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { sleep_timeout_display_battery = m_sessionInterface->get_current_sleep_timeout_display_battery_qt(); sleep_timeout_display_ac = m_sessionInterface->get_current_sleep_timeout_display_ac_qt(); } else { QDBusReply reply = m_powerIface->call("GetPercentage"); if (reply.isValid()) { brightnessValue = reply.value(); } } QString idle_delay = m_sessionInterface->get_current_idle_delay_qt(); QStringList idledelaylist = m_sessionInterface->get_idle_delay_list_qt(); emit sendIdleAndGammaData(gamma, aclist, brightnessValue, sleep_timeout_display_battery, sleep_timeout_display_ac, idle_delay, idledelaylist); bool lockEnabled = m_sessionInterface->get_lock_enabled_qt(); QString lock_delay = m_sessionInterface->get_current_lock_delay_qt(); QStringList lockdelaylist = m_sessionInterface->get_lock_delay_list_qt(); QString critical_low = m_sessionInterface->get_current_critical_low_qt(); QString laptop_battery = m_sessionInterface->get_current_lid_battery_qt(); QString laptop_ac = m_sessionInterface->get_current_lid_ac_qt(); QString sleep_timeout_battery = m_sessionInterface->get_current_sleep_timeout_battery_qt(); QStringList batterylist = m_sessionInterface->get_sleep_timeout_list_qt(); QString sleep_timeout_ac = m_sessionInterface->get_current_sleep_timeout_ac_qt(); emit sendLockAndSleepData(lockEnabled, lock_delay, lockdelaylist, critical_low, laptop_battery, laptop_ac, sleep_timeout_battery, batterylist, sleep_timeout_ac); } void DataWorker::onResetScreenGammaValue(double value) { m_sessionInterface->adjust_screen_gamma_qt(value); } void DataWorker::onResetBrightnessValue(int value) { m_powerIface->call("setPercentage", value); } void DataWorker::onResetIdleDelay(int index, int curValue) { if (index == 0) { m_sessionInterface->set_current_idle_delay_qt(60); } else if (index == 1) { m_sessionInterface->set_current_idle_delay_qt(120); } else if (index == 2) { m_sessionInterface->set_current_idle_delay_qt(180); } else if (index == 3) { m_sessionInterface->set_current_idle_delay_qt(300); } else if (index == 4) { m_sessionInterface->set_current_idle_delay_qt(600); } else if (index == 5) { m_sessionInterface->set_current_idle_delay_qt(1800); } else if (index == 6) { m_sessionInterface->set_current_idle_delay_qt(3600); } else if (index == 7) { m_sessionInterface->set_current_idle_delay_qt(0); } else if (index == 8) { m_sessionInterface->set_current_idle_delay_qt(curValue); } } void DataWorker::onResetLockEnabled(bool b) { m_sessionInterface->set_lock_enabled_qt(b); } void DataWorker::onResetLockDelay(int index, int curValue) { if (index == 0) { m_sessionInterface->set_current_lock_delay_qt(30); } else if (index == 1) { m_sessionInterface->set_current_lock_delay_qt(60); } else if (index == 2) { m_sessionInterface->set_current_lock_delay_qt(120); } else if (index == 3) { m_sessionInterface->set_current_lock_delay_qt(180); } else if (index == 4) { m_sessionInterface->set_current_lock_delay_qt(300); } else if (index == 5) { m_sessionInterface->set_current_lock_delay_qt(600); } else if (index == 6) { m_sessionInterface->set_current_lock_delay_qt(1800); } else if (index == 7) { m_sessionInterface->set_current_lock_delay_qt(3600); } else if (index == 8) { m_sessionInterface->set_current_lock_delay_qt(0); } else if (index == 9) { m_sessionInterface->set_current_lock_delay_qt(curValue); } } void DataWorker::onSetCurrentCriticalLow(const QString &value) { m_sessionInterface->set_current_critical_low_qt(value); } void DataWorker::onSetCurrentLidBattery(const QString &value) { m_sessionInterface->set_current_lid_battery_qt(value); } void DataWorker::onSetCurrentLidAC(const QString &value) { m_sessionInterface->set_current_lid_ac_qt(value); } void DataWorker::onResetSleepTimeoutBattery(int index, int value) { if (index == 0) { m_sessionInterface->set_current_sleep_timeout_battery_qt(300); } else if (index == 1) { m_sessionInterface->set_current_sleep_timeout_battery_qt(600); } else if (index == 2) { m_sessionInterface->set_current_sleep_timeout_battery_qt(1200); } else if (index == 3) { m_sessionInterface->set_current_sleep_timeout_battery_qt(1800); } else if (index == 4) { m_sessionInterface->set_current_sleep_timeout_battery_qt(3600); } else if (index == 5) { m_sessionInterface->set_current_sleep_timeout_battery_qt(7200); } else if (index == 6) { m_sessionInterface->set_current_sleep_timeout_battery_qt(0); } else if (index == 7) { m_sessionInterface->set_current_sleep_timeout_battery_qt(value); } } void DataWorker::onResetSleepTimeoutAC(int index, int value) { if (index == 0) { m_sessionInterface->set_current_sleep_timeout_ac_qt(300); } else if (index == 1) { m_sessionInterface->set_current_sleep_timeout_ac_qt(600); } else if (index == 2) { m_sessionInterface->set_current_sleep_timeout_ac_qt(1200); } else if (index == 3) { m_sessionInterface->set_current_sleep_timeout_ac_qt(1800); } else if (index == 4) { m_sessionInterface->set_current_sleep_timeout_ac_qt(3600); } else if (index == 5) { m_sessionInterface->set_current_sleep_timeout_ac_qt(7200); } else if (index == 6) { m_sessionInterface->set_current_sleep_timeout_ac_qt(0); } else if (index == 7) { m_sessionInterface->set_current_sleep_timeout_ac_qt(value); } } void DataWorker::onResetSleepTimeoutDisplayBattery(int index, int value) { if (index == 0) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(300); } else if (index == 1) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(600); } else if (index == 2) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(1200); } else if (index == 3) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(1800); } else if (index == 4) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(3600); } else if (index == 5) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(7200); } else if (index == 6) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(0); } else if (index == 7) { m_sessionInterface->set_current_sleep_timeout_display_battery_qt(value); } } void DataWorker::onResetSleepTimeoutDisplayAC(int index, int value) { if (index == 0) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(300); } else if (index == 1) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(600); } else if (index == 2) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(1200); } else if (index == 3) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(1800); } else if (index == 4) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(3600); } else if (index == 5) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(7200); } else if (index == 6) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(0); } else if (index == 7) { m_sessionInterface->set_current_sleep_timeout_display_ac_qt(value); } } void DataWorker::onSetCurrentCpuMode(const QString &mode) { // qDebug() << "set cpu mode="<adjust_cpufreq_scaling_governer_qt("ondemand"); } else if(mode == "powersaveradio") { m_systemInterface->adjust_cpufreq_scaling_governer_qt("powersave"); } else if(mode == "performanceradio") { m_systemInterface->adjust_cpufreq_scaling_governer_qt("performance"); } } //-------------------file manager void DataWorker::onRequestFileManagerData() { bool locationReplacePathbar = m_sessionInterface->get_location_replace_pathbar_qt(); bool autoMountMedia = m_sessionInterface->get_auto_mount_media_qt(); bool autoOpenFolder = m_sessionInterface->get_auto_open_folder_qt(); bool promptAutorunPrograms = m_sessionInterface->get_prompt_autorun_programs_qt(); int thumbnailIconSize = m_sessionInterface->get_thumbnail_icon_size_qt(); int thumbnailCacheTime = m_sessionInterface->get_thumbnail_cache_time_qt(); int thumbnailCacheSize = m_sessionInterface->get_thumbnail_cache_size_qt(); emit sendFileManagerData(locationReplacePathbar, autoMountMedia, autoOpenFolder, promptAutorunPrograms, thumbnailIconSize, thumbnailCacheTime, thumbnailCacheSize); } void DataWorker::onResetLocationReplacePathbar(bool b) { m_sessionInterface->set_location_replace_pathbar_qt(b); } void DataWorker::onResetAutoMountMedia(bool b) { m_sessionInterface->set_auto_mount_media_qt(b); } void DataWorker::onResetAutoOpenFolder(bool b) { m_sessionInterface->set_auto_open_folder_qt(b); } void DataWorker::onResetPromptAutorunPrograms(bool b) { m_sessionInterface->set_prompt_autorun_programs_qt(b); } void DataWorker::onResetThumbnailIconSize(int value) { m_sessionInterface->set_thumbnail_icon_size_qt(value); } void DataWorker::onResetThumbnailCacheTime(int value) { m_sessionInterface->set_thumbnail_cache_time_qt(value); } void DataWorker::onResetThumbnailCacheSize(int value) { m_sessionInterface->set_thumbnail_cache_size_qt(value); } youker-assistant/src/pluginmanager.h0000664000175000017500000000342413260315532016621 0ustar fengfeng#include #include #include class PluginManager { private: PluginManager(); ~PluginManager(); public: static PluginManager *Instance(); bool loadPlugin(QString plugin_path); bool unloadPlugin(QString plugin_guid); template T* getPlugin(QString plugin_guid) { QMap::iterator iter = plugin_map.find(plugin_guid); if (iter == plugin_map.end()) { return NULL; } return iter.value(); } int count() {return plugin_map.count();} template T* getPluginByindex(int index) { QMap::iterator iter = plugin_map.begin(); for (int i = 0;i < index; ++i) { ++iter; } return iter.value(); } template T* getInterfaceByindex(int index) { QPluginLoader* plugin_loader = getPluginByindex(index); QObject *plugin = plugin_loader->instance(); return qobject_cast(plugin); } template T* getInterfaceByGuid(QString guid) { QMap::iterator iter = plugin_map.find(guid); if (iter == plugin_map.end()) { return NULL; } QPluginLoader* plugin_loader = iter.value(); QObject *plugin = plugin_loader->instance(); return qobject_cast(plugin); } private: QMap plugin_map; }; /*class PluginManager : public QObject { Q_OBJECT public: explicit PluginManager(QObject *parent = 0); ~PluginManager(); static PluginManager* Instance(); signals: void pluginAdded(QWidget *const w); public slots: void loadPlugin(QString plugin_path); };*/ youker-assistant/src/src.pro0000664000175000017500000001414313260315532015130 0ustar fengfeng#------------------------------------------------- # # Project created by QtCreator 2015-01-21T08:48:08 # #------------------------------------------------- TARGET = youker-assistant DESTDIR = ../ TEMPLATE = app CONFIG += c++11 CONFIG += qt warn_on CONFIG += release CONFIG += link_pkgconfig QT += core dbus network inst1.files += res/kylin-assistant.png inst1.path = /usr/share/pixmaps inst2.files += ../kylin-assistant.desktop inst2.path = /usr/share/applications inst3.files += res/default/ inst3.path = /var/lib/kylin-assistant-daemon/ inst4.files += res/custom/ inst4.path = /var/lib/kylin-assistant-daemon/ inst5.files += res/app-autostart-default.png inst5.path = /usr/share/pixmaps target.source += $$TARGET target.path = /usr/bin INSTALLS += inst1 \ inst2 \ inst3 \ inst4 \ inst5 \ target QMAKE_CPPFLAGS *= $(shell dpkg-buildflags --get CPPFLAGS) QMAKE_CFLAGS *= $(shell dpkg-buildflags --get CFLAGS) QMAKE_CXXFLAGS *= $(shell dpkg-buildflags --get CXXFLAGS) QMAKE_LFLAGS *= $(shell dpkg-buildflags --get LDFLAGS) isEqual(QT_MAJOR_VERSION, 5) { QT += widgets gui } unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } SOURCES += main.cpp \ mainwindow.cpp \ maintopwidget.cpp \ middlewidget.cpp \ mainbottomwidget.cpp \ topbasewidget.cpp \ bottomcontentwidget.cpp \ infowidget.cpp \ cleanerwidget.cpp \ settingwidget.cpp \ boxwidget.cpp \ pluginmanager.cpp \ aboutdialog.cpp \ shadowwidget.cpp \ dataworker.cpp \ ../component/kylinlistmodel.cpp \ ../component/kylinbutton.cpp \ ../component/kylinmenu.cpp \ ../component/kylintoolbutton.cpp \ ../component/kylinswitcher.cpp \ ../component/systembutton.cpp \ ../component/threadpool.cpp \ ../component/mythread.cpp \ ../component/selectlistwidget.cpp \ ../component/selectlistitem.cpp \ ../component/selectwidget.cpp \ ../component/selectcategorywidget.cpp \ ../component/mytitlebar.cpp \ ../plugins/widgets/mytristatebutton.cpp \ ../info/infounitwidget.cpp \ ../info/infogui.cpp \ ../info/infoitemline.cpp \ ../info/infoitemsgroup.cpp \ ../info/devicemanager.cpp \ ../setting/settinglistview.cpp \ ../setting/settingmodel.cpp \ ../setting/settingdelegate.cpp \ ../setting/themewidget.cpp \ ../setting/iconwidget.cpp \ ../setting/mousewidget.cpp \ ../setting/soundwidget.cpp \ ../setting/menuwidget.cpp \ ../setting/panelwidget.cpp \ ../setting/windowwidget.cpp \ ../setting/fontwidget.cpp \ ../setting/touchpadwidget.cpp \ ../setting/energywidget.cpp \ ../setting/filemanagerwidget.cpp \ ../setting/theme/themeview.cpp \ ../setting/theme/themedelegate.cpp \ ../component/quibo.cpp \ ../component/kylinfontdialog.cpp \ ../component/loadinglabel.cpp \ ../component/alertdialog.cpp \ ../component/toolkits.cpp \ ../cleaner/cleanerdetailwidget.cpp \ ../cleaner/cleanermainwidget.cpp \ ../dbusproxy/youkersystemdbus.cpp \ ../dbusproxy/youkersessiondbus.cpp \ ../component/toolbutton.cpp \ ../component/cleangroup.cpp \ ../component/cleanbutton.cpp \ ../component/cleansubgroup.cpp \ ../component/cleansubbutton.cpp \ ../component/basewidget.cpp \ ../qdbusservice/systemdbus/data/systemdbusproxy.cpp \ ../qdbusservice/systemdbus/data/systeminterface.cpp \ ../qdbusservice/systemdbus/customdata.cpp \ ../qdbusservice/systemdbus/customdatalist.cpp HEADERS += mainwindow.h \ kpplication.h \ maintopwidget.h \ middlewidget.h \ mainbottomwidget.h \ topbasewidget.h \ bottomcontentwidget.h \ infowidget.h \ cleanerwidget.h \ settingwidget.h \ boxwidget.h \ pluginmanager.h \ aboutdialog.h \ shadowwidget.h \ dataworker.h \ ../component/plugininterface.h \ ../component/kylinlistmodel.h \ ../component/utils.h \ ../component/kylinbutton.h \ ../component/kylinmenu.h \ ../component/kylintoolbutton.h \ ../component/kylinswitcher.h \ ../component/systembutton.h \ ../component/threadpool.h \ ../component/mythread.h \ ../component/selectlistwidget.h \ ../component/selectlistitem.h \ ../component/selectwidget.h \ ../component/selectcategorywidget.h \ ../component/mytitlebar.h \ ../plugins/widgets/mytristatebutton.h \ ../info/infounitwidget.h \ ../info/infogui.h \ ../info/infoitemline.h \ ../info/infoitemsgroup.h \ ../info/devicemanager.h \ ../setting/settingmodulelpage.h \ ../setting/settinglistview.h \ ../setting/settingmodel.h \ ../setting/settingdelegate.h \ ../setting/themewidget.h \ ../setting/iconwidget.h \ ../setting/mousewidget.h \ ../setting/soundwidget.h \ ../setting/menuwidget.h \ ../setting/panelwidget.h \ ../setting/windowwidget.h \ ../setting/fontwidget.h \ ../setting/touchpadwidget.h \ ../setting/energywidget.h \ ../setting/filemanagerwidget.h \ ../setting/theme/themeview.h \ ../setting/theme/themedelegate.h \ ../component/quibo.h \ ../component/kylinfontdialog.h \ ../component/loadinglabel.h \ ../component/alertdialog.h \ ../component/toolkits.h \ ../cleaner/cleanerdetailwidget.h \ ../cleaner/cleanermainwidget.h \ ../dbusproxy/youkersystemdbus.h \ ../dbusproxy/youkersessiondbus.h \ ../component/toolbutton.h \ ../component/cleangroup.h \ ../component/cleanbutton.h \ ../component/cleansubgroup.h \ ../component/cleansubbutton.h \ ../component/basewidget.h \ ../qdbusservice/systemdbus/data/systemdbusproxy.h \ ../qdbusservice/systemdbus/data/systeminterface.h \ ../qdbusservice/systemdbus/data/systemdbushandler.h \ ../qdbusservice/systemdbus/customdata.h \ ../qdbusservice/systemdbus/customdatalist.h FORMS += \ ../component/quibo.ui \ ../component/alertdialog.ui RESOURCES += \ img.qrc INCLUDEPATH += qtsingleapplication DEPENDPATH += qtsingleapplication SOURCES += qtsingleapplication/qtsingleapplication.cpp qtsingleapplication/qtlocalpeer.cpp HEADERS += qtsingleapplication/qtsingleapplication.h qtsingleapplication/qtlocalpeer.h youker-assistant/src/autostart.cpp0000664000175000017500000001102113260315532016341 0ustar fengfeng#include "autostart.h" #include "../component/kylinlistwidgetitem.h" //#include "mainwindow.h" #include #include #include #include "../dbusproxy/youkersessiondbus.h" #include "../component/utils.h" AutoStart::AutoStart(QWidget *parent, SessionDispatcher *proxy) :QDialog(parent), sessionproxy(proxy) { this->setFixedSize(750, 300); setWindowFlags(Qt::FramelessWindowHint); title_bar = NULL; scroll_widget = new TestScrollWidget(this); scroll_widget->setGeometry(0, 0, 750, 300); this->setLanguage(); this->initConnect(); } AutoStart::~AutoStart() { } void AutoStart::initData() { sessionproxy->getAutoStartAppStatus(); } void AutoStart::readyReciveData(const QStringList &data) { data_list.append(data); } void AutoStart::readyShowUI() { QVBoxLayout *v_layout = new QVBoxLayout(); QSignalMapper *signal_mapper = new QSignalMapper(this); for(int i =0; i tmpMap; QStringList tmp_list = data_list.at(i); for(int j=0;jzone); auto_group->initData(tmpMap); // qDebug() << tmpMap; scroll_widget->addScrollWidget(auto_group); // AutoGroup *auto_group = new AutoGroup(); // auto_group->initData(tmpMap); connect(auto_group, SIGNAL(autoStatusChange()), signal_mapper, SLOT(map())); signal_mapper->setMapping(auto_group, tmpMap.value("Path")); v_layout->addWidget(auto_group, 0, Qt::AlignBottom); } connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(setCurrentItemAutoStatus(QString))); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(title_bar); layout->addLayout(v_layout); // layout->addWidget(scroll_widget); layout->setSpacing(0); layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); } //void AutoStart::readyShowUI() //{ //// qDebug() << data_list.length(); // QVBoxLayout *v_layout = new QVBoxLayout(); // QSignalMapper *signal_mapper = new QSignalMapper(this); // for(int i =0; i tmpMap; // QStringList tmp_list = data_list.at(i); // for(int j=0;jinitData(tmpMap); //// auto_list.append(auto_group); // connect(auto_group, SIGNAL(autoStatusChange()), signal_mapper, SLOT(map())); //// signal_mapper->setMapping(auto_group, QString::number(i, 10)); //// signal_mapper->setMapping(auto_group, auto_group->name_label->text()); // signal_mapper->setMapping(auto_group, tmpMap.value("Path")); // v_layout->addWidget(auto_group, 0, Qt::AlignBottom); // } // connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(setCurrentItemAutoStatus(QString))); // QVBoxLayout *layout = new QVBoxLayout(); // layout->addWidget(title_bar); // layout->addLayout(v_layout); //// layout->addWidget(list_widget); // layout->setSpacing(0); // layout->setMargin(0); // layout->setContentsMargins(0, 0, 0, 0); // setLayout(layout); //// panel->setLayout(layout); //// scrollArea->show(); //// QHBoxLayout *main_layout = new QHBoxLayout(); //// main_layout->addWidget(scrollArea); //// setLayout(main_layout); //} void AutoStart::setCurrentItemAutoStatus(QString dekstopName) { int start_pos = dekstopName.lastIndexOf("/") + 1; int end_pos = dekstopName.length(); QString name = dekstopName.mid(start_pos, end_pos-start_pos); qDebug() << "change status->" << name; sessionproxy->changeAutoStartAppStatus(name); } void AutoStart::setLanguage() { } void AutoStart::initConnect() { connect(title_bar, SIGNAL(showMinDialog()), this, SLOT(onMinButtonClicked())); connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); } void AutoStart::onCloseButtonClicked() { this->close(); } void AutoStart::onMinButtonClicked() { this->hide(); } void AutoStart::initTitleBar() { title_bar->setTitleWidth(500); title_bar->setTitleName(tr("Boot Manager")); title_bar->setTitleBackgound(":/background/res/skin/1.png"); } youker-assistant/src/main.cpp0000664000175000017500000002223713260315532015252 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "mainwindow.h" #include "kpplication.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BUFF_SIZE (512) char filePath[BUFF_SIZE] = {0}; #define LOCKFILE "/tmp/kylin-assistant-%d.pid" #define LOCKMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) int make_pid_file() { char buf[16]; struct flock fl; snprintf(filePath, BUFF_SIZE, LOCKFILE, getuid()); int fd = open(filePath, O_RDWR|O_CREAT, LOCKMODE); if (fd < 0) { printf("Can not open %s: %s.\n", filePath, strerror(errno)); return -1; } fl.l_type = F_WRLCK; fl.l_start = 0; fl.l_whence = SEEK_SET; fl.l_len = 0; if (fcntl(fd, F_SETLK, &fl) < 0) { printf("Can not lock %s: %s.\n", filePath, strerror(errno)); close(fd); return -1; } ftruncate(fd, 0); sprintf(buf, "%d\n", getpid()); write(fd, buf, strlen(buf)); close(fd); return 0; } // Helper function to return display orientation as a string. /*QString Orientation(Qt::ScreenOrientation orientation) { switch (orientation) { case Qt::PrimaryOrientation : return "Primary"; case Qt::LandscapeOrientation : return "Landscape"; case Qt::PortraitOrientation : return "Portrait"; case Qt::InvertedLandscapeOrientation : return "Inverted landscape"; case Qt::InvertedPortraitOrientation : return "Inverted portrait"; default : return "Unknown"; } }*/ /*int main(int argc, char *argv) { QGuiApplication a(argc, &argv); qDebug() << "Number of screens:" << QGuiApplication::screens().size(); qDebug() << "Primary screen:" << QGuiApplication::primaryScreen()->name(); foreach (QScreen *screen, QGuiApplication::screens()) { qDebug() << "Information for screen:" << screen->name(); qDebug() << " Available geometry:" << screen->availableGeometry().x() << screen->availableGeometry().y() << screen->availableGeometry().width() << "x" << screen->availableGeometry().height(); qDebug() << " Available size:" << screen->availableSize().width() << "x" << screen->availableSize().height(); qDebug() << " Available virtual geometry:" << screen->availableVirtualGeometry().x() << screen->availableVirtualGeometry().y() << screen->availableVirtualGeometry().width() << "x" << screen->availableVirtualGeometry().height(); qDebug() << " Available virtual size:" << screen->availableVirtualSize().width() << "x" << screen->availableVirtualSize().height(); qDebug() << " Depth:" << screen->depth() << "bits"; qDebug() << " Geometry:" << screen->geometry().x() << screen->geometry().y() << screen->geometry().width() << "x" << screen->geometry().height(); qDebug() << " Logical DPI:" << screen->logicalDotsPerInch(); qDebug() << " Logical DPI X:" << screen->logicalDotsPerInchX(); qDebug() << " Logical DPI Y:" << screen->logicalDotsPerInchY(); qDebug() << " Orientation:" << Orientation(screen->orientation()); qDebug() << " Physical DPI:" << screen->physicalDotsPerInch(); qDebug() << " Physical DPI X:" << screen->physicalDotsPerInchX(); qDebug() << " Physical DPI Y:" << screen->physicalDotsPerInchY(); qDebug() << " Physical size:" << screen->physicalSize().width() << "x" << screen->physicalSize().height() << "mm"; qDebug() << " Primary orientation:" << Orientation(screen->primaryOrientation()); qDebug() << " Refresh rate:" << screen->refreshRate() << "Hz"; qDebug() << " Size:" << screen->size().width() << "x" << screen->size().height(); qDebug() << " Virtual geometry:" << screen->virtualGeometry().x() << screen->virtualGeometry().y() << screen->virtualGeometry().width() << "x" << screen->virtualGeometry().height(); qDebug() << " Virtual size:" << screen->virtualSize().width() << "x" << screen->virtualSize().height(); } }*/ bool registerSingleInstance(const QString &path) { QString dbusName = QString("com.kylin.assistant-single-instance.%1").arg(path); auto sessionBus = QDBusConnection::sessionBus(); if (!sessionBus.registerService(dbusName)) { qDebug() << "Register single dbus service failed:" << sessionBus.lastError(); return false; } return true; } //void sig_int(int signal) //{ // QApplication::quit(); //} int main(int argc, char *argv[]) { //find . | xargs -x touch //linguist: sudo apt-get install qt4-dev-tools // QApplication app(argc, argv); Kpplication app("kylin-assistant", argc, argv); app.setQuitOnLastWindowClosed(false); app.setOrganizationName("kylin"); app.setApplicationName("kylin-assistant"); app.setApplicationVersion("3.0.0"); Kpplication *app_ins = Kpplication::instance(); if (app_ins->isRunning()) { app_ins->sendMessage("Hello"); return 1; } //#ifdef QT_NO_DEBUG // qDebug() << "release mode"; //#else // qDebug() << "debug mode"; //#endif //#ifdef QT_NO_INOTIFY // qDebug() << "QT_NO_INOTIFY mode"; //#else // qDebug() << "NO QT_NO_INOTIFY"; //#endif //单程序运行处理 // QSharedMemory mem("KA"); // if (!mem.create(1)) { // qDebug() << QObject::tr("kylin-assistant had already running!"); // return 1; // } /*const QString socketPath(QString("kylin-assistant_%1").arg(getuid())); if (registerSingleInstance(socketPath)) {*/ #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); #endif // signal(SIGINT, sig_int); // if (make_pid_file()) { // exit(1); // } QString arch = ""; #ifdef __x86_64__ arch = "x86_64"; #elif __i386__ arch = "i386"; #elif __aarch64__ arch = "aarch64"; #endif QString locale = QLocale::system().name(); QTranslator translator; if(locale == "zh_CN" || locale == "es" || locale == "fr" || locale == "de" || locale == "ru") {//中文 西班牙语 法语 德语 俄语 if(!translator.load("kylin-assistant_" + locale + ".qm", ":/qmfile/translation/")) qDebug() << "Load translation file:"<< "kylin-assistant_" + locale + ".qm" << " failed!"; else app.installTranslator(&translator); } //加载Qt对话框默认的国际化 QTranslator qtTranslator; qtTranslator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); app.installTranslator(&qtTranslator); QFile qss(":/qssfile/res/qss/kylin-assistant.qss"); qss.open(QFile::ReadOnly); qApp->setStyleSheet(qss.readAll()); qss.close(); QDesktopWidget *desktop = QApplication::desktop(); // qDebug() << desktop->primaryScreen();//获取主屏幕的索引序号 int sCount = desktop->screenCount();//获取当前显示器的个数 // qDebug() << sCount; //如果有两个显示,则N=2,qt默认的计算机主机的index = 0,外接显示器的index = 1; // mdlg.setGeometry(desktop->screenGeometry(1));//QDialog 有个成员函数叫setGeometry,只需要将dialog对象的Geometry设置为index为1的显示器即可,默认为0.如果要显示的dialog的对象为mdlg,则 // mdlg.show(); //启动图片 /*QPixmap pixmap("://res/skin/x.png"); QSplashScreen screen(pixmap); screen.show(); screen.showMessage("START...", Qt::AlignCenter, Qt::white);*/ MainWindow w(arch, sCount); /*#if 0 //延时 int delayTime = 3; QElapsedTimer timer; timer.start(); while (timer.elapsed() < (delayTime * 1000)) { app.processEvents(); } screen.finish(&w); #endif*/ w.setTranslator(&translator); // w.show(); // if (sCount > 1) { // w.setGeometry(desktop->screenGeometry(1)); // } // w.display(sCount); return app.exec(); //} //return 0; } youker-assistant/src/boxwidget.h0000664000175000017500000000316513260315532015766 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 BOXWIDGET_H #define BOXWIDGET_H #include #include #include #include #include #include "../component/kylinlistmodel.h" class PluginManager; class QStackedLayout; class BoxWidget : public QWidget { Q_OBJECT public: explicit BoxWidget(QWidget *parent = 0, QString arch = "", QString os = "", QString path = ""); ~BoxWidget(); void loadPlugins(); void initPluginWidget(); signals: void sendSubIndex(int index); void pluginModuleError(const QString &info); public slots: void OnClickListView(const QModelIndex & index); void displayBoxHomePage(); void displayBoxSubPage(QString plugin_id); // void pluginAdded(QWidget * const w); private: QListView *list_view; KylinListModel pluginModel; QString osname; QString osarch; QString plugin_path; }; #endif // BOXWIDGET_H youker-assistant/src/boxwidget.cpp0000664000175000017500000002040513260315532016315 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "boxwidget.h" #include "../component/plugininterface.h" #include "pluginmanager.h" #include #include #include #include #include BoxWidget::BoxWidget(QWidget *parent, QString arch, QString os, QString path) : QWidget(parent), osarch(arch), osname(os), plugin_path(path) // ,m_pluginsLayout(new QStackedLayout) // ,m_pluginsManager(new PluginManager(this)) { this->setFixedSize(900, 403); this->setStyleSheet("QWidget{border: none;}"); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); list_view = new QListView(this); // list_view = new KylinListView(this); list_view->setFocusPolicy(Qt::NoFocus); list_view->setAutoFillBackground(true); list_view->setIconSize(QSize(48, 48)); list_view->setResizeMode(QListView::Adjust); list_view->setModel(&pluginModel); list_view->setViewMode(QListView::IconMode); // list_view->setMovement(QListView::Static); list_view->setSpacing(26); // list_view->setLineWidth(110); this->loadPlugins(); this->initPluginWidget(); connect(list_view,SIGNAL(clicked(const QModelIndex&)),this,SLOT(OnClickListView(const QModelIndex &))); // stacked_widget = new QStackedWidget(this);//stacked_widget will delete when InfoWidget delete // stacked_widget->setFocusPolicy(Qt::NoFocus); // stacked_widget->setAutoFillBackground(true); // stacked_widget->addWidget(list_view); // stacked_widget->addWidget(test_widget); QGridLayout *layout = new QGridLayout(); layout->addWidget(list_view,0,0); layout->setSpacing(0); layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); /*m_pluginLayoutWidget = new QWidget; m_pluginLayoutWidget->setLayout(m_pluginsLayout); QVBoxLayout *pluginWidgetLayout = new QVBoxLayout; pluginWidgetLayout->addWidget(m_pluginLayoutWidget); pluginWidgetLayout->setSpacing(0); pluginWidgetLayout->setMargin(0); m_pluginWidget = new QWidget; m_pluginWidget->setLayout(pluginWidgetLayout); QVBoxLayout *centralLayout = new QVBoxLayout(this); centralLayout->addWidget(list_view); centralLayout->addWidget(m_pluginWidget); centralLayout->setSpacing(0); centralLayout->setMargin(0); connect(m_pluginsManager, &PluginManager::pluginAdded, this, &BoxWidget::pluginAdded, Qt::QueuedConnection); m_pluginsManager->loadPlugin(plugin_path);*/ } BoxWidget::~BoxWidget() { } //void BoxWidget::pluginAdded(QWidget * const w) //{ // qDebug() << "BoxWidget::pluginAdded............"; // w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // const int idx = m_pluginsLayout->addWidget(w); // m_pluginsLayout->setCurrentIndex(idx); //} void BoxWidget::displayBoxHomePage() { // stacked_widget->setCurrentIndex(0); } void BoxWidget::displayBoxSubPage(QString plugin_id) { // QObject *object = QObject::sender(); // QPushButton *btn = qobject_cast(object); // QString object_name = btn->statusTip(); // if (object_name == "theme") { // stacked_widget->setCurrentIndex(1); // } } void BoxWidget::loadPlugins() { PluginManager::Instance()->loadPlugin(plugin_path); } void BoxWidget::initPluginWidget() { QStringList title; title << tr(""); pluginModel.setTitle(title); // pluginModel.insertRows(0,1,QModelIndex()); // QModelIndex qindex = pluginModel.index(0,0,QModelIndex()); // pluginModel.setData(qindex,tr(" ")); pluginModel.insertRows(0,1,QModelIndex()); QModelIndex qindex = pluginModel.index(0,0,QModelIndex()); // if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") { // //set text // pluginModel.setData(qindex, tr("Kylin Software Center")); // //set tooltip // pluginModel.setData(qindex, tr("Kylin Software Center"),Qt::WhatsThisRole); // } // else { // //set text // pluginModel.setData(qindex, tr("UbuntuKylin Software Center")); // //set tooltip // pluginModel.setData(qindex, tr("UbuntuKylin Software Center"),Qt::WhatsThisRole); // } //set text pluginModel.setData(qindex, tr("Kylin Software Center")); //set tooltip pluginModel.setData(qindex, tr("Kylin Software Center"),Qt::WhatsThisRole); //set icon pluginModel.setData(qindex,QIcon(QPixmap("://res/ubuntukylin-software-center.png")),Qt::DecorationRole); // QStringList icon_list; // //icon_list<<"://res/boot"<<"://res/camera"; // icon_list<<"://res/boot"; // QStringList text_list; // //text_list << tr("Boot Manager") << tr("Camera"); // text_list << tr("Boot Manager"); // for (int index = 0;index < 1;++index) // { // pluginModel.insertRows(index + 1,1,QModelIndex()); // qindex = pluginModel.index(index + 1,0,QModelIndex()); // pluginModel.setData(qindex, text_list.at(index)); // //set icon // pluginModel.setData(qindex,QIcon(QPixmap(icon_list.at(index))),Qt::DecorationRole); // //set tooltip // pluginModel.setData(qindex, text_list.at(index),Qt::WhatsThisRole); // } int count = PluginManager::Instance()->count(); for (int i = 0;i < count;++i) { PluginInterface* ICommon = PluginManager::Instance()->getInterfaceByindex(i); QString picture = ICommon->getPicture(); QString pacture_path = QString(":/model/res/plugin/%1").arg(picture); pluginModel.setGuid(ICommon->getGuid()); // pluginModel.insertRows(i + 1,1,QModelIndex()); // qindex = pluginModel.index(i + 1,0,QModelIndex()); pluginModel.insertRows(i + 1,1,QModelIndex()); qindex = pluginModel.index(i + 1,0,QModelIndex()); pluginModel.setData(qindex,ICommon->getName()); pluginModel.setData(qindex,QIcon(QPixmap(pacture_path)),Qt::DecorationRole); pluginModel.setData(qindex,ICommon->getName(),Qt::WhatsThisRole); } } void BoxWidget::OnClickListView(const QModelIndex & index) { if(index.row() == 0) { if (QFileInfo("/usr/bin/kylin-software-center").exists()) { QProcess process; process.start("/usr/bin/kylin-software-center"); process.waitForStarted(1000); process.waitForFinished(20*1000); } else if (QFileInfo("/usr/bin/ubuntu-kylin-software-center").exists()) { QProcess process; process.start("/usr/bin/ubuntu-kylin-software-center"); process.waitForStarted(1000); process.waitForFinished(20*1000); } else { emit this->pluginModuleError(tr("No software center was found!")); } /*if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") sessionProxy->runApp("kylin-software-center"); else sessionProxy->runApp("ubuntu-kylin-software-center");*/ } // else if(index.row() == 1) { // emit this->sendSubIndex(0); // } // else if(index.row() == -1) { // if(this->osarch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") // sessionProxy->runApp("cheese"); // else // emit this->sendSubIndex(1); // } else { // QString guid = pluginModel.getGuid(index.row() - 1); QString guid = pluginModel.getGuid(index.row() - 1); PluginInterface* interface = PluginManager::Instance()->getInterfaceByGuid(guid); interface->doAction(); } } youker-assistant/src/homeactionwidget.cpp0000664000175000017500000004115713260315532017662 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "homeactionwidget.h" #include "mainwindow.h" #include #include HomeActionWidget::HomeActionWidget(QWidget *parent, QSettings *mSettings) : QWidget(parent), pSettings(mSettings) { // this->resize(900, 227); this->setFixedSize(900, 227); // setWindowOpacity(0.6); is_move = false; this->setAutoFillBackground(true); this->setObjectName("transparentWidget"); scanFinishTime = ""; suggest_label = new QLabel(); scan_result_label = new QLabel(); result_label = new QLabel(); doing_label = new QLabel(); scan_button = new QPushButton(this); clean_button = new QPushButton(this); back_button = new QPushButton(this); loading_label = new LoadingLabel(this, "firstkey"); loading_label->show(); // movie_label->setScaledContents(true);//设置movie_label自动缩放,显示图像大小自动调整为Qlabel大小 // QPixmap label_pixmap(""); // movie_label->setPixmap(label_pixmap); // movie_label->setFixedSize(label_pixmap.size()); suggest_label->setObjectName("whiteLabel"); suggest_label->setWordWrap(true);//QLabel自动换行 suggest_label->setFixedWidth(460); scan_result_label->setObjectName("whiteLabel"); scan_result_label->setWordWrap(true);//QLabel自动换行 scan_result_label->setFixedWidth(460); scan_result_label->hide(); result_label->setWordWrap(true);//QLabel自动换行 result_label->setObjectName("smallWhiteLabel"); result_label->setFixedWidth(460); doing_label->setWordWrap(true);//QLabel自动换行 doing_label->setObjectName("whiteLabel"); doing_label->hide(); doing_label->setFixedWidth(460); // scan_button->setFixedSize(204, 65); scan_button->setGeometry(QRect(680, 100, 204, 65)); scan_button->setFocusPolicy(Qt::NoFocus); QPixmap pixmap("://res/scan.png"); scan_button->setIcon(pixmap); scan_button->setIconSize(pixmap.size()); scan_button->setObjectName("greenButton"); scan_button->setEnabled(false); scan_button->show(); // QFont scan_font = scan_button->font(); // scan_font.setPointSize(16); // scan_button->setFont(scan_font); // clean_button->setFixedSize(204, 65); clean_button->setGeometry(QRect(680, 100, 204, 65)); clean_button->setFocusPolicy(Qt::NoFocus); clean_button->setObjectName("greenButton"); clean_button->hide(); back_button->setFocusPolicy(Qt::NoFocus); // back_button->setFixedSize(50, 30); back_button->setGeometry(QRect(840, 170, 50, 30)); back_button->setObjectName("backButton"); back_button->setObjectName("underlineButton"); back_button->hide(); //set underline // QFont font = back_button->font(); // font.setUnderline(true); // back_button->setFont(font); //set scan button text color // QPalette palette; // palette.setColor(QPalette::ButtonText, QColor(255,17,135)); // scan_button->setPalette(palette); QVBoxLayout *layout1 = new QVBoxLayout(); layout1->addStretch(); layout1->addWidget(suggest_label); layout1->addWidget(scan_result_label); layout1->addWidget(doing_label); layout1->addWidget(result_label); layout1->addStretch(); layout1->setSpacing(15); layout1->setContentsMargins(0, 20, 0, 0); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addWidget(loading_label, 0, Qt::AlignHCenter); layout2->addLayout(layout1); layout2->setSpacing(20); layout2->setContentsMargins(0, 0, 0, 0); // QVBoxLayout *layout3 = new QVBoxLayout(); // layout3->addStretch(); // layout3->addWidget(scan_button, 0, Qt::AlignRight); // layout3->addWidget(clean_button, 0, Qt::AlignRight); // layout3->addWidget(back_button, 0, Qt::AlignRight); // layout3->addStretch(); // layout3->setSpacing(10); // layout3->setContentsMargins(0, 20, 0, 0); QHBoxLayout *main_layout = new QHBoxLayout(); main_layout->addLayout(layout2); main_layout->addStretch(); // main_layout->addLayout(layout3); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(10, 30, 44, 0); setLayout(main_layout); workFlag = this->getOneKeyFlag(); if(workFlag.length() > 0) { if(workFlag == "1") { //clean dateStr = this->getFixCleanDate(); result_label->setText(tr("The lastest cleanup time is ") + dateStr); } else if(workFlag == "0") { //scan dateStr = this->getSafeScanDate(); result_label->setText(tr("The lastest scan time is ") + dateStr); } } else { result_label->setText(tr("You have not implemented the one key scan and clean-up operation.")); } this->initConnect(); this->setLanguage(); } HomeActionWidget::~HomeActionWidget() { if(suggest_label != NULL) { delete suggest_label; suggest_label = NULL; } if(scan_result_label != NULL) { delete scan_result_label; scan_result_label = NULL; } if(result_label != NULL) { delete result_label; result_label = NULL; } if(doing_label != NULL) { delete doing_label; doing_label = NULL; } } void HomeActionWidget::initConnect() { connect(scan_button, SIGNAL(clicked()), this, SLOT(onStartButtonClicked())); connect(clean_button, SIGNAL(clicked()), this, SLOT(onCleanButtonClicked())); connect(back_button, SIGNAL(clicked()), this, SLOT(onEndButtonClicked())); } void HomeActionWidget::setLanguage() { suggest_label->setText(tr("Quick clean up system trash, saving disk space and improving the system efficiency!"));//一键清理系统垃圾,帮您节省磁盘空间,让系统运行更加有效率! scan_button->setText(tr("Start Scan"));//开始扫描 clean_button->setText(tr("Start Cleanup"));//开始清理 back_button->setText(tr("Back")); doing_label->setText(tr("Scanning......"));//正在扫描...... scan_result_label->setText(tr("Scan Over")); } void HomeActionWidget::enableSanButton() { scan_button->setEnabled(true); } void HomeActionWidget::getScanResult(QString msg) { doing_label->setText(tr("Scanning:") + msg);//正在扫描: } void HomeActionWidget::finishScanResult(QString msg) { if(msg == "onekey") { // doing_label->setText(tr("Scan Over"));//扫描完成 doing_label->hide(); scan_result_label->show(); result_label->show(); QString msg; if (trace.toInt() > 0) { if (cookies.toInt() > 0) { if (garbage == "0.00 B") { msg = trace + tr(" history trace; ") + cookies + tr(" browser cookies.") ; } else { msg = trace + tr(" history trace; ") + cookies + tr(" browser cookies; ") + garbage + tr(" garbage.") ; } } else { if (garbage == "0.00 B") { msg = trace + tr(" history trace.") ; } else { msg = trace + tr(" history trace; ") + garbage + tr(" garbage.") ; } } } else { if (cookies.toInt() > 0) { if (garbage == "0.00 B") { msg = cookies + tr(" browser cookies.") ; } else { msg = cookies + tr(" browser cookies; ") + garbage + tr(" garbage.") ; } } else { if (garbage == "0.00 B") { msg = ""; } else { msg = garbage + tr(" garbage.") ; } } } if (msg.isEmpty()) { result_label->setText(tr("No garbage.")); scan_button->setEnabled(true); clean_button->hide(); } else { result_label->setText(msg); clean_button->show(); clean_button->setEnabled(true); } scanFinishTime = this->getCurrentDateTime(); // result_label->setText(tr("The lastest scan time is ") + this->getCurrentDateTime()); this->writeSafeScanDate(); scan_button->hide(); back_button->show(); loading_label->stopLoading(); } } void HomeActionWidget::getScanAllResult(QString flag, QString msg){ if(flag == "h") { trace = msg; } else if(flag == "k") { cookies = msg; } else if(flag == "c") { garbage = msg; } } void HomeActionWidget::getCleanResult(QString msg/*, QString flag*/) { // if(flag == "onekey") { if (msg == "yes") {//在弹出输入密码验证时,点击了取消按钮 loading_label->stopLoading(); clean_button->show(); clean_button->setEnabled(true); back_button->show(); } else if (msg == "no") {//在弹出输入密码验证时,输入密码,验证通过,此时让动态图片开始显示 //show dynamic image clean_button->show(); clean_button->setEnabled(false); back_button->hide(); doing_label->setText(tr("Cleaning......"));//正在清理...... loading_label->startLoading(); } else if (msg == "c") { doing_label->setText(tr("Garbage Cleanup OK......")); } else if (msg == "h") { doing_label->setText(tr("History Cleanup OK......")); } else if (msg == "k") { doing_label->setText(tr("Cookies Cleanup OK......")); } else if (msg == "o") { this->writeFixCleanDate(); //清理完毕后显示清理总数 result_label->setText(tr("The lastest cleanup time is ") + this->getCurrentDateTime()); doing_label->setText(tr("Cleanup Cookies:") +cookies + tr("; Garbage:") + garbage + tr("; Historical records:") +trace ); trace.clear(); cookies.clear(); garbage.clear(); loading_label->stopLoading(); scan_button->show(); scan_button->setEnabled(true); clean_button->hide(); clean_button->setEnabled(true); back_button->hide(); } // } } void HomeActionWidget::finishCleanError(QString msg) { if (msg == "ce") { qDebug() << "GarbageException---------"; } else if (msg == "he") { qDebug() << "HistoryException---------"; } else if (msg == "ke") { qDebug() << "CookiesException---------"; } } void HomeActionWidget::getCleaningMessage(QString type, QString status) { if(type == "firefoxhistory") { if(status == "start") { doing_label->setText(tr("Cleaning up history trace of Firefox..."));//正在清理Firefox的历史痕迹... } else if(status == "end") { doing_label->setText(tr("Firefox history trace had been cleared!"));//Firefox的历史痕迹已清理完毕! } } else if(type == "chromiumhistory") { if(status == "start") { doing_label->setText(tr("Cleaning up history trace of Chromium..."));//正在清理Chromium的历史痕迹... } else if(status == "end") { doing_label->setText(tr("Chromium history trace had been cleared!"));//Chromium的历史痕迹已清理完毕! } } else if(type == "firefoxcookies") { if(status == "start") { doing_label->setText(tr("Cleaning up Cookies of Firefox..."));//正在清理Firefox的Cookies... } else if(status == "end") { doing_label->setText(tr("Firefox Cookies had been cleared!"));//Firefox的Cookies已清理完毕! } } else if(type == "chromiumcookies") { if(status == "start") { doing_label->setText(tr("Cleaning up Cookies of Chromium..."));//正在清理Chromium的Cookies... } else if(status == "end") { doing_label->setText(tr("Chromium Cookies had been cleared!"));//Chromium的Cookies已清理完毕! } } else if(type == "apt") { if(status == "end") { doing_label->setText(tr("Apt cache had been cleared!"));//Apt缓存已清理完毕! } else { doing_label->setText(tr("Cleaning up Apt cache: ") + status);//正在清理Apt缓存: } } else if(type == "software_center") { if(status == "end") { doing_label->setText(tr("Software Center cache had been cleared!"));//软件中心缓存已清理完毕! } else { doing_label->setText(tr("Cleaning up Software Center cache: ") + status);//正在清理软件中心缓存: } } } void HomeActionWidget::onStartButtonClicked() { doing_label->setText(tr("Scanning......"));//正在扫描...... scan_button->setEnabled(false); loading_label->startLoading(); suggest_label->hide(); scan_result_label->hide(); result_label->hide(); doing_label->show(); QStringList args; args << "cache" << "history" << "cookies"; sessionProxy->onekey_scan_function_qt(args); } void HomeActionWidget::onCleanButtonClicked() { clean_button->hide(); back_button->hide(); loading_label->startLoading(); suggest_label->hide(); scan_result_label->hide(); result_label->hide(); doing_label->setText(tr("Ready to Cleanup......"));//准备清理...... doing_label->show(); systemProxy->set_user_homedir_qt(); systemProxy->clean_by_main_one_key_qt(); } void HomeActionWidget::onEndButtonClicked() { result_label->setText(tr("The lastest scan time is ") + scanFinishTime); loading_label->stopLoading(); scan_button->show(); scan_button->setEnabled(true); clean_button->hide(); back_button->hide(); suggest_label->show(); scan_result_label->hide(); result_label->show(); doing_label->hide(); } void HomeActionWidget::writeFixCleanDate() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 pSettings->beginGroup("OneKeyClean"); pSettings->setValue("CleanDate", str); pSettings->setValue("Flag", "1"); pSettings->endGroup(); pSettings->sync(); } QString HomeActionWidget::getFixCleanDate() { pSettings->beginGroup("OneKeyClean"); QString value = pSettings->value("CleanDate").toString(); pSettings->endGroup(); pSettings->sync(); return value; } QString HomeActionWidget::getCurrentDateTime() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 return str; } void HomeActionWidget::writeSafeScanDate() { QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间 QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); //设置显示格式 pSettings->beginGroup("OneKeyClean"); pSettings->setValue("ScanDate", str); pSettings->setValue("Flag", "0"); pSettings->endGroup(); pSettings->sync(); } QString HomeActionWidget::getSafeScanDate() { pSettings->beginGroup("OneKeyClean"); QString value = pSettings->value("ScanDate").toString(); pSettings->endGroup(); pSettings->sync(); return value; } QString HomeActionWidget::getOneKeyFlag() { pSettings->beginGroup("OneKeyClean"); QString value = pSettings->value("Flag").toString(); pSettings->endGroup(); pSettings->sync(); return value; } youker-assistant/src/infowidget.h0000664000175000017500000001032513260315532016125 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 INFOWIDGET_H #define INFOWIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class TestWidget; class InfoGui; class InfoWidget : public QWidget { Q_OBJECT public: explicit InfoWidget(QString machine = "", QWidget *parent = 0); ~InfoWidget(); void initInfoUI(bool has_battery, bool has_sensor); public slots: void changeInfoPage(QListWidgetItem* item); void onSendSystemInfo(QMap tmpMap); // void onSendSystemRunnedTime(int time_value); void onSendDesktopInfo(QMap tmpMap); void onSendCpuInfo(QMap tmpMap); void onSendMemoryInfo(QMap tmpMap); void onSendBoardInfo(QMap tmpMap); void onSendHDInfo(QMap tmpMap); void onSendNicInfo(QMap tmpMap); void onSendMonitorInfo(QMap tmpMap); void onSendAudioInfo(QMap tmpMap); void onSendBatteryInfo(QMap tmpMap); void onSendSensorInfo(QMap tmpMap); // void updateTimeValue(); signals: void emit_network_info(QMap info); //system info void requestupdateSystemRunnedTime(); void requestRefreshSystemInfo(); // void sendSystemRunnedTime(int time_value); // void sendSystemInfo(QMap tmpMap); //desktop info void requestDesktopInfo(); // void sendDesktopInfo(QMap tmpMap); //cpu info void requestCpuInfo(); // void sendCpuInfo(QMap tmpMap); //memory info void requestMemoryInfo(); // void sendMemoryInfo(QMap tmpMap); //board info void requestBoardInfo(); // void sendBoardInfo(QMap tmpMap); //hd info void requestHDInfo(); // void sendHDInfo(QMap tmpMap); //nic info void requestNicInfo(); // void sendNicInfo(QMap tmpMap); //monitor info void requestMonitorInfo(); // void sendMonitorInfo(QMap tmpMap); //audio info void requestAudioInfo(); // void sendAudioInfo(QMap tmpMap); //battery info void requestBatteryInfo(); // void sendBatteryInfo(QMap tmpMap); //sensor info void requestSensorInfo(); // void sendSensorInfo(QMap tmpMap); //driver info private: QSplitter *splitter = nullptr; QListWidget *category_widget = nullptr; QStringList type_list; QStringList icon_list; QStackedWidget *stacked_widget = nullptr; InfoGui *system_widget = nullptr; // QList m_pageList; // InfoGui *desktop_widget = nullptr; // InfoGui *cpu_widget = nullptr; // InfoGui *memory_widget = nullptr; // InfoGui *board_widget = nullptr; // InfoGui *hd_widget = nullptr; // InfoGui *nic_widget = nullptr; // InfoGui *monitor_widget = nullptr; // InfoGui *audio_widget = nullptr; // InfoGui *battery_widget = nullptr; // InfoGui *driver_widget = nullptr; // InfoGui *sensor_widget = nullptr; // InfoGui *m_testWidget = nullptr; QString current_tip; QString arch; }; #endif // INFOWIDGET_H youker-assistant/src/toolwidget.cpp0000664000175000017500000001467113260315532016512 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "toolwidget.h" #include "../component/kylintoolbutton.h" #include "mainwindow.h" //#include #include //#include ToolWidget::ToolWidget(QWidget *parent, QString arch, QString os) : QWidget(parent), cur_arch(arch), osname(os) { this->setFixedSize(900, 47); // this->setGeometry(0, 227, 900, 47); this->setAutoFillBackground(true); QPalette palette; palette.setColor(QPalette::Background, QColor(233,238,241));//#e9eef1 this->setPalette(palette); QStringList icon_list; QStringList text_list; if(this->cur_arch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") { icon_list<<":/tool/res/menu/home"<<":/tool/res/menu/cleanup"<<":/tool/res/menu/sysinfo"<<":/tool/res/menu/toolkits"; text_list<< tr("KylinHome") << tr("Cleanup") << tr("Sysinfo") << tr("Toolkits"); } else { icon_list<<":/tool/res/menu/home"<<":/tool/res/menu/cleanup"<<":/tool/res/menu/sysinfo"<<":/tool/res/menu/feature"<<":/tool/res/menu/toolkits"; text_list<< tr("Home") << tr("Cleanup") << tr("Sysinfo") << tr("Feature") << tr("Toolkits"); } QHBoxLayout *button_layout = new QHBoxLayout(); QSignalMapper *signal_mapper = new QSignalMapper(this); for(int i=0; isetFixedSize(180, 47); button_list.append(tool_button); connect(tool_button, SIGNAL(clicked()), signal_mapper, SLOT(map())); signal_mapper->setMapping(tool_button, QString::number(i, 10)); button_layout->addWidget(tool_button, 0, Qt::AlignBottom); } this->switchSelectedPageIndex(0); connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(switchSelectedPageIndex(QString))); button_layout->addStretch(); button_layout->setSpacing(8); button_layout->setMargin(0); button_layout->setContentsMargins(15, 0, 15, 0); setLayout(button_layout); is_move = false; // this->initAnimation(); } ToolWidget::~ToolWidget() { for(int i=0; isetMousePress(true); } else { tool_button->setMousePress(false); } } emit turnCurrentPage(current_index); } void ToolWidget::showBoxTool() { if(this->cur_arch == "aarch64" || this->osname == "Kylin" || this->osname == "YHKylin") { this->switchSelectedPageIndex("3"); } else { this->switchSelectedPageIndex("4"); } } //void ToolWidget::initAnimation() //{ // QPoint home_origPoint(0, 227); // QPoint home_needPoint(0, 274); // QPoint clean_origPoint(180, 197); // QPoint clean_needPoint(180, 150); // QPoint info_origPoint(360, 197); // QPoint info_needPoint(360, 150); // QPoint setting_origPoint(480, 197); // QPoint setting_needPoint(480, 150); // QPoint box_origPoint(720, 197); // QPoint box_needPoint(720, 150); // QPropertyAnimation *homeToolAnimation = new QPropertyAnimation(button_list.at(0), "pos"); // homeToolAnimation->setDuration(200); // homeToolAnimation->setStartValue(home_origPoint); // homeToolAnimation->setEndValue(home_needPoint); // QPropertyAnimation *cleanToolAnimation = new QPropertyAnimation(button_list.at(1), "pos"); // cleanToolAnimation->setDuration(200); // cleanToolAnimation->setStartValue(clean_origPoint); // cleanToolAnimation->setEndValue(clean_needPoint); // QPropertyAnimation *infoToolAnimation = new QPropertyAnimation(button_list.at(2), "pos"); // infoToolAnimation->setDuration(200); // infoToolAnimation->setStartValue(info_origPoint); // infoToolAnimation->setEndValue(info_needPoint); // QPropertyAnimation *settingToolAnimation = new QPropertyAnimation(button_list.at(3), "pos"); // settingToolAnimation->setDuration(200); // settingToolAnimation->setStartValue(setting_needPoint); // settingToolAnimation->setEndValue(setting_origPoint); // QPropertyAnimation *boxToolAnimation = new QPropertyAnimation(button_list.at(4), "pos"); // boxToolAnimation->setDuration(200); // boxToolAnimation->setStartValue(box_origPoint); // boxToolAnimation->setEndValue(box_needPoint); // openGroup = new QParallelAnimationGroup(this); // openGroup->addAnimation(setting_origPoint); // openGroup->addAnimation(boxToolAnimation); // QPropertyAnimation *settingbackToolAnimation = new QPropertyAnimation(button_list.at(3), "pos"); // settingbackToolAnimation->setDuration(200); // settingbackToolAnimation->setStartValue(setting_origPoint); // settingbackToolAnimation->setEndValue(setting_needPoint); // QPropertyAnimation *boxbackToolAnimation = new QPropertyAnimation(button_list.at(4), "pos"); // boxbackToolAnimation->setDuration(200); // boxbackToolAnimation->setStartValue(box_needPoint); // boxbackToolAnimation->setEndValue(box_origPoint); // closeGroup = new QParallelAnimationGroup(this); // closeGroup->addAnimation(settingbackToolAnimation); // closeGroup->addAnimation(boxbackToolAnimation); //} youker-assistant/COPYING0000664000175000017500000010451313260315532014064 0ustar fengfeng 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 . youker-assistant/autogen.sh0000775000175000017500000000012713260315532015026 0ustar fengfeng#!/bin/sh # Run this to generate all the initial makefiles, etc. lrelease src/src.pro youker-assistant/README.md0000664000175000017500000000163313260315532014307 0ustar fengfengkylin-assistant ================ Attention ========= It supports unity and mate for Ubuntu/Ubuntu Kylin. Depends ======= debhelper (>= 9),python-dev,python-lxml,python-piston-mini-client,python-xdg,qtbase5-dev,qt5-qmake,qtscript5-dev,qttools5-dev-tools,pkg-config,python (>= 2.6.6-3~),libglib2.0-dev,libgtop2-dev GitHub ======= https://github.com/KylinAppCenter/kylin-assistant Internationalization ======= lupdate kylin-assistant.pro linguist kylin-assistant_zh_CN.ts lrelease kylin-assistant.pro Python Internationalization ======= xgettext -k_ -o kylin-assistant.pot cpuinfo.py kylin-assistant.pot:修改charset为utf-8 cp kylin-assistant.pot kylin-assistant.po msgfmt -o kylin-assistant.mo kylin-assistant.po (sudo cp kylin-assistant.mo /usr/share/locale/zh_CN/LC_MESSAGES/) FT Version: changelog like this: kylin-assistant (1.0.0kord) juniper; urgency=low DEBUG: gdb python set args start_sessiondbus.py run youker-assistant/snap/0000775000175000017500000000000013260315533013767 5ustar fengfengyouker-assistant/snap/snapcraft.yaml0000664000175000017500000000210013260315532016624 0ustar fengfengname: youker-assistant version: '3.0.0' summary: Integrated tool to aid in routine system maintenance tasks description: | Kylin Assistant is a tool designed to help Ubuntu and Ubuntu Kylin desktop users manage and maintain many aspects of their working environment conveniently in a single application, providing a consistent user experience. Features currently included: * Detecting and displaying general system information * Unity and Mate user interface customization * System garbage cleaning * Upgrade from Qt4 to Qt5 * Add system monitor. grade: devel # must be 'stable' to release into candidate/stable channels confinement: devmode # use 'strict' once you have the right plugs and slots apps: youker-assistant: command: desktop-launch youker-assistant desktop: usr/share/applications/kylin-assistant.desktop plugs: [home, unity7, desktop, desktop-legacy] parts: youker-assistant: plugin: qmake qt-version: qt5 source: . build-packages: [g++, qtbase5-dev, qt5-qmake, qtscript5-dev, libglib2.0-dev, libsystemd-dev] youker-assistant/po/0000775000175000017500000000000013260315533013444 5ustar fengfengyouker-assistant/po/kylin-assistant.pot0000664000175000017500000013017213260315532017330 0ustar fengfengmsgid "" msgstr "" "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" "X-Language: es_ES\n" "X-Source-Language: C\n" "X-Qt-Contexts: true\n" #: ../aboutdialog.ui:26 ../aboutdialog.ui:42 msgctxt "AboutDialog|" msgid "About" msgstr "" #: ../aboutdialog.ui:70 ../aboutdialog.ui:165 msgctxt "AboutDialog|" msgid "Youker Assistant" msgstr "" #: ../aboutdialog.ui:105 msgctxt "AboutDialog|" msgid "" "\n" "\n" "

      Youker Assistant is a powerful system " "supporting software which is developed by Ubuntu Kylin team. Mainly for the " "naive user, it can help users manage the system. At present, It provides " "system junk scanning and cleaning, viewing the system hardware and software " "information , system customization, task manager, monitoring ball, and some " "other functions.

      \n" "

      The software is still under development. " "Please visit www.ubuntukylin.com for more information. Welcome everyone to " "join with us. youker-assistant Homepage: " "https://launchpad.net/youker-assistant.

      " msgstr "" #: ../aboutdialog.ui:116 msgctxt "AboutDialog|" msgid "Contributor" msgstr "" #: ../aboutdialog.ui:131 msgctxt "AboutDialog|" msgid "" "\n" "\n" "

      Maintainer:

      \n" "

      Ubuntu Kylin Team " "<ubuntukylin-members@list.launchpad.net>

      " msgstr "" #: ../aboutdialog.ui:181 msgctxt "AboutDialog|" msgid "home page" msgstr "" #: ../aboutdialog.ui:199 msgctxt "AboutDialog|" msgid "Close" msgstr "" #: ../../component/alertdialog.ui:14 msgctxt "AlertDialog|" msgid "Form" msgstr "" #: ../../setting/animationwidget.cpp:191 msgctxt "AnimationWidget|" msgid "Please select a picture as boot animation" msgstr "" #: ../../setting/animationwidget.cpp:192 msgctxt "AnimationWidget|" msgid "Custom Picture" msgstr "" #: ../../setting/animationwidget.cpp:193 msgctxt "AnimationWidget|" msgid "Optional BootAnimation" msgstr "" #: ../../setting/animationwidget.cpp:194 msgctxt "AnimationWidget|" msgid "OK" msgstr "" #: ../../setting/animationwidget.cpp:255 msgctxt "AnimationWidget|" msgid "Image Files (*.png *.jpg *.gif)" msgstr "" #: ../../setting/animationwidget.cpp:305 msgctxt "AnimationWidget|" msgid "Deleted successfully!" msgstr "" #: ../../setting/animationwidget.cpp:314 msgctxt "AnimationWidget|" msgid "This is the using animation!" msgstr "" #: ../../setting/animationwidget.cpp:324 msgctxt "AnimationWidget|" msgid "This is the default animation!" msgstr "" #: ../../setting/animationwidget.cpp:334 msgctxt "AnimationWidget|" msgid "An unknown error occurred!" msgstr "" #: ../../info/audiowidget.cpp:37 msgctxt "AudioWidget|" msgid "Audio Info" msgstr "" #: ../../info/audiowidget.cpp:47 #, qt-format msgctxt "AudioWidget|" msgid "Audio Info %1" msgstr "" #: ../autostartwidget.ui:14 msgctxt "AutoStartWidget|" msgid "Form" msgstr "" #: ../autostartwidget.cpp:52 msgctxt "AutoStartWidget|" msgid "AutoStart Items:" msgstr "" #: ../autostartwidget.cpp:53 msgctxt "AutoStartWidget|" msgid "App" msgstr "" #: ../autostartwidget.cpp:54 msgctxt "AutoStartWidget|" msgid "Status" msgstr "" #: ../autostartwidget.cpp:56 msgctxt "AutoStartWidget|" msgid "ON Items:" msgstr "" #: ../autostartwidget.cpp:57 msgctxt "AutoStartWidget|" msgid "OFF Items:" msgstr "" #: ../autostartwidget.cpp:208 msgctxt "AutoStartWidget|" msgid "Auto Start" msgstr "" #: ../../info/batterywidget.cpp:32 msgctxt "BatteryWidget|" msgid "Battery Info" msgstr "" #: ../../info/boardwidget.cpp:29 msgctxt "BoardWidget|" msgid "Board Info" msgstr "" #: ../boxactionwidget.cpp:70 msgctxt "BoxActionWidget|" msgid "" "Provide a practical and lightweight tool, create fast and convenient " "experience for you" msgstr "" #: ../boxactionwidget.cpp:71 msgctxt "BoxActionWidget|" msgid "More App" msgstr "" #: ../boxwidget.cpp:98 ../boxwidget.cpp:102 msgctxt "BoxWidget|" msgid "UbuntuKylin Software Center" msgstr "" #: ../../info/cdrowwidget.cpp:30 msgctxt "CDRowWidget|" msgid "CDROM Info" msgstr "" #: ../../cleaner/cacheactionwidget.cpp:72 msgctxt "CacheActionWidget|" msgid "Cleaning up the system cache" msgstr "" #: ../../cleaner/cacheactionwidget.cpp:73 msgctxt "CacheActionWidget|" msgid "Deep cleaning up the system cache, to save disk space" msgstr "" #: ../cameramanager.cpp:98 msgctxt "CameraManager|" msgid "NO found camara" msgstr "" #: ../cameramanager.cpp:99 msgctxt "CameraManager|" msgid "An application to take pictures with the device camera." msgstr "" #: ../cameramanager.cpp:100 msgctxt "CameraManager|" msgid "" "Press the [ESC] button to take picture and turn the camera off , the photo " "saved in home directory by default." msgstr "" #: ../cameramanager.cpp:101 msgctxt "CameraManager|" msgid "Open camera" msgstr "" #: ../cameramanager.cpp:102 msgctxt "CameraManager|" msgid "View Photos" msgstr "" #: ../cameramanager.cpp:144 msgctxt "CameraManager|" msgid "Camera Manager" msgstr "" #: ../../cleaner/cleanlistwidget.ui:14 msgctxt "CleanListWidget|" msgid "Form" msgstr "" #: ../../cleaner/cleanlistwidget.cpp:45 msgctxt "CleanListWidget|" msgid "Clean Items:" msgstr "" #: ../../component/cleansubgroup.cpp:51 msgctxt "CleanSubGroup|" msgid "Custom" msgstr "" #: ../cleaneractionwidget.cpp:142 msgctxt "CleanerActionWidget|" msgid "Regular cleaning, let your computer remains the relaxed state" msgstr "" #: ../cleaneractionwidget.cpp:144 msgctxt "CleanerActionWidget|" msgid "Start Scan" msgstr "" #: ../cleaneractionwidget.cpp:145 msgctxt "CleanerActionWidget|" msgid "Start Cleanup" msgstr "" #: ../cleaneractionwidget.cpp:146 msgctxt "CleanerActionWidget|" msgid "Back" msgstr "" #: ../cleaneractionwidget.cpp:147 ../cleaneractionwidget.cpp:239 msgctxt "CleanerActionWidget|" msgid "Scanning......" msgstr "" #: ../cleaneractionwidget.cpp:157 msgctxt "CleanerActionWidget|" msgid "Clean OK......" msgstr "" #: ../cleaneractionwidget.cpp:164 msgctxt "CleanerActionWidget|" msgid "Cleaning: " msgstr "" #: ../cleaneractionwidget.cpp:168 msgctxt "CleanerActionWidget|" msgid ", Percent is: " msgstr "" #: ../cleaneractionwidget.cpp:168 msgctxt "CleanerActionWidget|" msgid "%, Status is: " msgstr "" #: ../cleaneractionwidget.cpp:176 msgctxt "CleanerActionWidget|" msgid "Clean Firefox history......" msgstr "" #: ../cleaneractionwidget.cpp:180 msgctxt "CleanerActionWidget|" msgid "Clean Chromium history......" msgstr "" #: ../cleaneractionwidget.cpp:184 msgctxt "CleanerActionWidget|" msgid "Clean system history......" msgstr "" #: ../cleaneractionwidget.cpp:189 msgctxt "CleanerActionWidget|" msgid "Clean apt......" msgstr "" #: ../cleaneractionwidget.cpp:193 msgctxt "CleanerActionWidget|" msgid "Start clean apt......" msgstr "" #: ../cleaneractionwidget.cpp:198 msgctxt "CleanerActionWidget|" msgid "Clean Firefox Cookie:" msgstr "" #: ../cleaneractionwidget.cpp:202 msgctxt "CleanerActionWidget|" msgid "Clean Chromium Cookie:" msgstr "" #: ../cleaneractionwidget.cpp:211 ../cleaneractionwidget.cpp:269 msgctxt "CleanerActionWidget|" msgid " does not exist" msgstr "" #: ../cleaneractionwidget.cpp:215 ../cleaneractionwidget.cpp:264 msgctxt "CleanerActionWidget|" msgid "Chromium Browser is running......" msgstr "" #: ../cleaneractionwidget.cpp:223 msgctxt "CleanerActionWidget|" msgid "Cache Scan OK......" msgstr "" #: ../cleaneractionwidget.cpp:227 msgctxt "CleanerActionWidget|" msgid "Cookies Scan OK......" msgstr "" #: ../cleaneractionwidget.cpp:231 msgctxt "CleanerActionWidget|" msgid "History Scan OK......" msgstr "" #: ../cleaneractionwidget.cpp:235 msgctxt "CleanerActionWidget|" msgid "Packages Scan OK......" msgstr "" #: ../cleaneractionwidget.cpp:253 msgctxt "CleanerActionWidget|" msgid "Error: " msgstr "" #: ../cleaneractionwidget.cpp:256 msgctxt "CleanerActionWidget|" msgid "Firefox Browser does not be installed......" msgstr "" #: ../cleaneractionwidget.cpp:260 msgctxt "CleanerActionWidget|" msgid "Chromium Browser does not be installed......" msgstr "" #: ../cleaneractionwidget.cpp:288 msgctxt "CleanerActionWidget|" msgid "Ready to Cleanup......" msgstr "" #: ../../cleaner/cleanerdetailwidget.ui:14 msgctxt "CleanerDetailWidget|" msgid "Form" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:228 msgctxt "CleanerDetailWidget|" msgid "Apt Cache Clean Items" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:234 msgctxt "CleanerDetailWidget|" msgid "Apt Cache count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:274 #: ../../cleaner/cleanerdetailwidget.cpp:368 msgctxt "CleanerDetailWidget|" msgid "Software Cache Clean Items" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:280 msgctxt "CleanerDetailWidget|" msgid "Software Cache count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:320 #: ../../cleaner/cleanerdetailwidget.cpp:413 #: ../../cleaner/cleanerdetailwidget.cpp:463 #: ../../cleaner/cleanerdetailwidget.cpp:510 #: ../../cleaner/cleanerdetailwidget.cpp:643 #: ../../cleaner/cleanerdetailwidget.cpp:689 #: ../../cleaner/cleanerdetailwidget.cpp:735 msgctxt "CleanerDetailWidget|" msgid "Thumbnails Cache Clean Items" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:326 msgctxt "CleanerDetailWidget|" msgid "Thumbnails Cache Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:373 msgctxt "CleanerDetailWidget|" msgid "Firefox Cache Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:418 msgctxt "CleanerDetailWidget|" msgid "Chromium Cache Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:468 msgctxt "CleanerDetailWidget|" msgid "Firefox Cookies Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:515 msgctxt "CleanerDetailWidget|" msgid "Chromium Cookies Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:566 msgctxt "CleanerDetailWidget|" msgid "Firefox History Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:603 msgctxt "CleanerDetailWidget|" msgid "Chromium History Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:623 msgctxt "CleanerDetailWidget|" msgid "System History Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:648 msgctxt "CleanerDetailWidget|" msgid "Package Unneed Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:694 msgctxt "CleanerDetailWidget|" msgid "Package oldkernel Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:740 msgctxt "CleanerDetailWidget|" msgid "Package configfile Count:" msgstr "" #: ../../cleaner/cleanerdetailwidget.cpp:1268 msgctxt "CleanerDetailWidget|" msgid "Clean args is empty!" msgstr "" #: ../../cleaner/cleaneritems.cpp:143 msgctxt "CleanerItems|" msgid "OK" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Package Cache" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Software Center Cache" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Thumbnails Cache" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup FireFox Cache" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Chromium Cache" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:40 msgctxt "CleanerMainWidget|" msgid "Cache Items" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:45 msgctxt "CleanerMainWidget|" msgid "System Cache" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:45 msgctxt "CleanerMainWidget|" msgid "Cleanup cache of system, software-center, thumbnails and browser" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:52 msgctxt "CleanerMainWidget|" msgid "Uninstall unnecessary procedures" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:52 msgctxt "CleanerMainWidget|" msgid "Uninstall old kernel packages" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:52 msgctxt "CleanerMainWidget|" msgid "Cleanup software configfile" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:55 msgctxt "CleanerMainWidget|" msgid "Package Items" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:59 msgctxt "CleanerMainWidget|" msgid "Packages and configfile" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:59 msgctxt "CleanerMainWidget|" msgid "" "Cleaning up the software that installed by other software bundled, old " "kernel packages and configfile, to improve system performance" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:67 msgctxt "CleanerMainWidget|" msgid "Cleanup the Cookies saving in Firefox" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:67 msgctxt "CleanerMainWidget|" msgid "Cleanup the Cookies saving in Chromium" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:70 msgctxt "CleanerMainWidget|" msgid "Cookies Items" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:74 msgctxt "CleanerMainWidget|" msgid "Cookies" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:74 msgctxt "CleanerMainWidget|" msgid "Clean up user login information, support Firefox and Chromium browser" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:82 msgctxt "CleanerMainWidget|" msgid "Clean up the Firefox Internet records" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:82 msgctxt "CleanerMainWidget|" msgid "Clean up the Chromium Internet records" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:82 msgctxt "CleanerMainWidget|" msgid "Clean up the recently opened documents records" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:85 msgctxt "CleanerMainWidget|" msgid "Trace Items" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:89 msgctxt "CleanerMainWidget|" msgid "History trace" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:89 msgctxt "CleanerMainWidget|" msgid "Cleaning the internet and opened documents recently records" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:159 msgctxt "CleanerMainWidget|" msgid "Please select the items you want to clean" msgstr "" #: ../../cleaner/cleanermainwidget.cpp:168 msgctxt "CleanerMainWidget|" msgid "Scan args is empty!" msgstr "" #: ../../info/computerpage.cpp:55 ../../info/computerpage.cpp:104 #: ../../info/computerpage.cpp:109 ../../info/computerpage.cpp:111 #, qt-format msgctxt "ComputerPage|" msgid "%1" msgstr "" #: ../../info/computerpage.cpp:97 ../../info/computerpage.cpp:101 msgctxt "ComputerPage|" msgid " Minutes" msgstr "" #: ../../info/computerpage.cpp:101 msgctxt "ComputerPage|" msgid " Hours " msgstr "" #: ../../info/computerpage.cpp:136 ../../info/computerpage.cpp:256 msgctxt "ComputerPage|" msgid "Audio Model" msgstr "" #: ../../info/computerpage.cpp:138 ../../info/computerpage.cpp:191 #: ../../info/computerpage.cpp:204 ../../info/computerpage.cpp:299 #: ../../info/computerpage.cpp:324 ../../info/computerpage.cpp:340 #: ../../info/computerpage.cpp:355 msgctxt "ComputerPage|" msgid "Vendor" msgstr "" #: ../../info/computerpage.cpp:140 ../../info/computerpage.cpp:318 #: ../../info/computerpage.cpp:328 ../../info/computerpage.cpp:346 msgctxt "ComputerPage|" msgid "Bus Address" msgstr "" #: ../../info/computerpage.cpp:142 msgctxt "ComputerPage|" msgid "Audio Driver" msgstr "" #: ../../info/computerpage.cpp:145 ../../info/computerpage.cpp:193 #: ../../info/computerpage.cpp:288 ../../info/computerpage.cpp:330 msgctxt "ComputerPage|" msgid "Device Name" msgstr "" #: ../../info/computerpage.cpp:147 msgctxt "ComputerPage|" msgid "Manufacturer" msgstr "" #: ../../info/computerpage.cpp:161 ../../info/computerpage.cpp:357 msgctxt "ComputerPage|" msgid "Model" msgstr "" #: ../../info/computerpage.cpp:163 msgctxt "ComputerPage|" msgid "Technology" msgstr "" #: ../../info/computerpage.cpp:165 msgctxt "ComputerPage|" msgid "Voltage" msgstr "" #: ../../info/computerpage.cpp:167 msgctxt "ComputerPage|" msgid "Energy Designed" msgstr "" #: ../../info/computerpage.cpp:169 msgctxt "ComputerPage|" msgid "Energy Full" msgstr "" #: ../../info/computerpage.cpp:171 msgctxt "ComputerPage|" msgid "Energy Now" msgstr "" #: ../../info/computerpage.cpp:173 ../../info/computerpage.cpp:180 #: ../../info/computerpage.cpp:197 ../../info/computerpage.cpp:206 #: ../../info/computerpage.cpp:292 ../../info/computerpage.cpp:301 #: ../../info/computerpage.cpp:350 ../../info/computerpage.cpp:361 msgctxt "ComputerPage|" msgid "Serial Number" msgstr "" #: ../../info/computerpage.cpp:176 msgctxt "ComputerPage|" msgid "Motherboard Model" msgstr "" #: ../../info/computerpage.cpp:178 msgctxt "ComputerPage|" msgid "Motherboard Vendor" msgstr "" #: ../../info/computerpage.cpp:182 msgctxt "ComputerPage|" msgid "BIOS Vendor" msgstr "" #: ../../info/computerpage.cpp:184 msgctxt "ComputerPage|" msgid "BIOS Version" msgstr "" #: ../../info/computerpage.cpp:186 msgctxt "ComputerPage|" msgid "Release Date" msgstr "" #: ../../info/computerpage.cpp:189 msgctxt "ComputerPage|" msgid "CD-ROM Model" msgstr "" #: ../../info/computerpage.cpp:195 ../../info/computerpage.cpp:290 msgctxt "ComputerPage|" msgid "Firmware Version" msgstr "" #: ../../info/computerpage.cpp:202 ../../info/computerpage.cpp:228 msgctxt "ComputerPage|" msgid "CPU" msgstr "" #: ../../info/computerpage.cpp:208 msgctxt "ComputerPage|" msgid "Socket/Slot" msgstr "" #: ../../info/computerpage.cpp:210 msgctxt "ComputerPage|" msgid "Maximum Frequency" msgstr "" #: ../../info/computerpage.cpp:212 msgctxt "ComputerPage|" msgid "Current Frequency" msgstr "" #: ../../info/computerpage.cpp:214 msgctxt "ComputerPage|" msgid "FSB" msgstr "" #: ../../info/computerpage.cpp:216 msgctxt "ComputerPage|" msgid "Core Number" msgstr "" #: ../../info/computerpage.cpp:218 msgctxt "ComputerPage|" msgid "Thread" msgstr "" #: ../../info/computerpage.cpp:220 msgctxt "ComputerPage|" msgid "L1 Cache" msgstr "" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "L2 Cache" msgstr "" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "1500a v1.0 64 bits" msgstr "" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "phytium" msgstr "" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "4 cores" msgstr "" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "4 thread/core" msgstr "" #: ../../info/computerpage.cpp:226 msgctxt "ComputerPage|" msgid "Desktop Environment" msgstr "" #: ../../info/computerpage.cpp:230 msgctxt "ComputerPage|" msgid "Host Name" msgstr "" #: ../../info/computerpage.cpp:232 msgctxt "ComputerPage|" msgid "Memery Capacity" msgstr "" #: ../../info/computerpage.cpp:234 msgctxt "ComputerPage|" msgid "Shell" msgstr "" #: ../../info/computerpage.cpp:236 msgctxt "ComputerPage|" msgid "Distribution" msgstr "" #: ../../info/computerpage.cpp:238 msgctxt "ComputerPage|" msgid "Language" msgstr "" #: ../../info/computerpage.cpp:240 msgctxt "ComputerPage|" msgid "User" msgstr "" #: ../../info/computerpage.cpp:242 msgctxt "ComputerPage|" msgid "Home Folder" msgstr "" #: ../../info/computerpage.cpp:246 msgctxt "ComputerPage|" msgid "Host bridge" msgstr "" #: ../../info/computerpage.cpp:248 msgctxt "ComputerPage|" msgid "VGA Model" msgstr "" #: ../../info/computerpage.cpp:250 msgctxt "ComputerPage|" msgid "USB Model" msgstr "" #: ../../info/computerpage.cpp:252 msgctxt "ComputerPage|" msgid "Communication Model" msgstr "" #: ../../info/computerpage.cpp:254 msgctxt "ComputerPage|" msgid "Ethernet Model" msgstr "" #: ../../info/computerpage.cpp:258 msgctxt "ComputerPage|" msgid "PCI bridge" msgstr "" #: ../../info/computerpage.cpp:260 msgctxt "ComputerPage|" msgid "ISA bridge" msgstr "" #: ../../info/computerpage.cpp:262 msgctxt "ComputerPage|" msgid "SATA Model" msgstr "" #: ../../info/computerpage.cpp:264 msgctxt "ComputerPage|" msgid "SMBus" msgstr "" #: ../../info/computerpage.cpp:266 msgctxt "ComputerPage|" msgid "System peripheral" msgstr "" #: ../../info/computerpage.cpp:268 msgctxt "ComputerPage|" msgid "Driver in use" msgstr "" #: ../../info/computerpage.cpp:270 msgctxt "ComputerPage|" msgid "existing drivers" msgstr "" #: ../../info/computerpage.cpp:272 msgctxt "ComputerPage|" msgid "IDE interface" msgstr "" #: ../../info/computerpage.cpp:274 msgctxt "ComputerPage|" msgid "SP controller" msgstr "" #: ../../info/computerpage.cpp:276 msgctxt "ComputerPage|" msgid "Network controller" msgstr "" #: ../../info/computerpage.cpp:278 msgctxt "ComputerPage|" msgid "Multimedia audio controller" msgstr "" #: ../../info/computerpage.cpp:282 msgctxt "ComputerPage|" msgid "HDD Model" msgstr "" #: ../../info/computerpage.cpp:284 msgctxt "ComputerPage|" msgid "HDD Vendor" msgstr "" #: ../../info/computerpage.cpp:286 msgctxt "ComputerPage|" msgid "HDD Capacity" msgstr "" #: ../../info/computerpage.cpp:295 msgctxt "ComputerPage|" msgid "Slot Number" msgstr "" #: ../../info/computerpage.cpp:297 msgctxt "ComputerPage|" msgid "Memory Model" msgstr "" #: ../../info/computerpage.cpp:303 msgctxt "ComputerPage|" msgid "Memory Size" msgstr "" #: ../../info/computerpage.cpp:305 msgctxt "ComputerPage|" msgid "Data Width" msgstr "" #: ../../info/computerpage.cpp:307 msgctxt "ComputerPage|" msgid "Memory Info" msgstr "" #: ../../info/computerpage.cpp:310 msgctxt "ComputerPage|" msgid "Graphics Card Model" msgstr "" #: ../../info/computerpage.cpp:312 msgctxt "ComputerPage|" msgid "Current Graphics Card" msgstr "" #: ../../info/computerpage.cpp:314 msgctxt "ComputerPage|" msgid "Graphics Card Vendor" msgstr "" #: ../../info/computerpage.cpp:316 msgctxt "ComputerPage|" msgid "Graphics Driver" msgstr "" #: ../../info/computerpage.cpp:322 msgctxt "ComputerPage|" msgid "NIC Model" msgstr "" #: ../../info/computerpage.cpp:326 msgctxt "ComputerPage|" msgid "NIC Driver" msgstr "" #: ../../info/computerpage.cpp:332 ../../info/computerpage.cpp:352 msgctxt "ComputerPage|" msgid "IP Address" msgstr "" #: ../../info/computerpage.cpp:334 msgctxt "ComputerPage|" msgid "Mac Address" msgstr "" #: ../../info/computerpage.cpp:336 msgctxt "ComputerPage|" msgid "Connection Status" msgstr "" #: ../../info/computerpage.cpp:338 msgctxt "ComputerPage|" msgid "Max Bandwidth" msgstr "" #: ../../info/computerpage.cpp:342 msgctxt "ComputerPage|" msgid "WLan NIC Driver" msgstr "" #: ../../info/computerpage.cpp:344 msgctxt "ComputerPage|" msgid "WLan NIC Model" msgstr "" #: ../../info/computerpage.cpp:348 msgctxt "ComputerPage|" msgid "Device Name:" msgstr "" #: ../../info/computerpage.cpp:359 msgctxt "ComputerPage|" msgid "Version" msgstr "" #: ../../info/computerpage.cpp:363 msgctxt "ComputerPage|" msgid "Hostname" msgstr "" #: ../../info/computerpage.cpp:365 msgctxt "ComputerPage|" msgid "Running Time" msgstr "" #: ../../info/computerpage.cpp:367 msgctxt "ComputerPage|" msgid "OS Types" msgstr "" #: ../../info/computerpage.cpp:369 msgctxt "ComputerPage|" msgid "OS Version" msgstr "" #: ../../info/computerpage.cpp:371 msgctxt "ComputerPage|" msgid "Kernel Bit" msgstr "" #: ../../info/computerpage.cpp:373 msgctxt "ComputerPage|" msgid "Kernel Version" msgstr "" #: ../../info/computerpage.cpp:375 msgctxt "ComputerPage|" msgid "Kernel Arch" msgstr "" #: ../../info/cpuwidget.cpp:30 msgctxt "CpuWidget|" msgid "CPU Info" msgstr "" #: ../../setting/deadpixelwidget.cpp:75 msgctxt "DeadpixelWidget|" msgid "" "Left-click to change the color, right-click to exit from this detection." msgstr "" #: ../../setting/deadpixelwidget.cpp:76 msgctxt "DeadpixelWidget|" msgid "OK" msgstr "" #: ../../info/desktopwidget.cpp:30 msgctxt "DesktopWidget|" msgid "Desktop Info" msgstr "" #: ../../info/driverwidget.cpp:32 msgctxt "DriverWidget|" msgid "Driver Info" msgstr "" #: ../../setting/fontwidget.cpp:63 ../../setting/fontwidget.cpp:64 #: ../../setting/fontwidget.cpp:65 ../../setting/fontwidget.cpp:66 #: ../../setting/fontwidget.cpp:67 msgctxt "FontWidget|" msgid "Click here to change font" msgstr "" #: ../../setting/fontwidget.cpp:166 msgctxt "FontWidget|" msgid "Default Font" msgstr "" #: ../../setting/fontwidget.cpp:167 msgctxt "FontWidget|" msgid "Desktop Font" msgstr "" #: ../../setting/fontwidget.cpp:168 msgctxt "FontWidget|" msgid "Monospace Font" msgstr "" #: ../../setting/fontwidget.cpp:169 msgctxt "FontWidget|" msgid "Document Font" msgstr "" #: ../../setting/fontwidget.cpp:170 msgctxt "FontWidget|" msgid "Titlebar Font" msgstr "" #: ../../setting/fontwidget.cpp:171 msgctxt "FontWidget|" msgid "Global Font Scaling" msgstr "" #: ../../setting/fontwidget.cpp:172 msgctxt "FontWidget|" msgid "Hinting" msgstr "" #: ../../setting/fontwidget.cpp:173 msgctxt "FontWidget|" msgid "Antialiasing" msgstr "" #: ../../info/hdwidget.cpp:35 msgctxt "HDWidget|" msgid "HardWare Info" msgstr "" #: ../../info/hdwidget.cpp:45 #, qt-format msgctxt "HDWidget|" msgid "HardWare Info %1" msgstr "" #: ../homeactionwidget.cpp:132 ../homeactionwidget.cpp:231 msgctxt "HomeActionWidget|" msgid "The lastest cleanup time is " msgstr "" #: ../homeactionwidget.cpp:138 ../homeactionwidget.cpp:184 msgctxt "HomeActionWidget|" msgid "The lastest scan time is " msgstr "" #: ../homeactionwidget.cpp:142 msgctxt "HomeActionWidget|" msgid "You have not implemented the one key scan and clean-up operation." msgstr "" #: ../homeactionwidget.cpp:163 msgctxt "HomeActionWidget|" msgid "" "Quick clean up system trash, saving disk space and improving the system " "efficiency!" msgstr "" #: ../homeactionwidget.cpp:164 msgctxt "HomeActionWidget|" msgid "Start Scan" msgstr "" #: ../homeactionwidget.cpp:165 msgctxt "HomeActionWidget|" msgid "Start Cleanup" msgstr "" #: ../homeactionwidget.cpp:166 msgctxt "HomeActionWidget|" msgid "Back" msgstr "" #: ../homeactionwidget.cpp:167 msgctxt "HomeActionWidget|" msgid "Scanning......" msgstr "" #: ../homeactionwidget.cpp:177 msgctxt "HomeActionWidget|" msgid "Scanning:" msgstr "" #: ../homeactionwidget.cpp:183 msgctxt "HomeActionWidget|" msgid "Scan Over" msgstr "" #: ../homeactionwidget.cpp:215 msgctxt "HomeActionWidget|" msgid "Cleaning......" msgstr "" #: ../homeactionwidget.cpp:220 msgctxt "HomeActionWidget|" msgid "Garbage Cleanup OK......" msgstr "" #: ../homeactionwidget.cpp:223 msgctxt "HomeActionWidget|" msgid "History Cleanup OK......" msgstr "" #: ../homeactionwidget.cpp:226 msgctxt "HomeActionWidget|" msgid "Cookies Cleanup OK......" msgstr "" #: ../homeactionwidget.cpp:232 msgctxt "HomeActionWidget|" msgid "Cleanup Cookies:" msgstr "" #: ../homeactionwidget.cpp:232 msgctxt "HomeActionWidget|" msgid "; Garbage:" msgstr "" #: ../homeactionwidget.cpp:232 msgctxt "HomeActionWidget|" msgid "; Historical records:" msgstr "" #: ../homeactionwidget.cpp:262 msgctxt "HomeActionWidget|" msgid "Cleaning up history trace of Firefox..." msgstr "" #: ../homeactionwidget.cpp:265 msgctxt "HomeActionWidget|" msgid "Firefox history trace had been cleared!" msgstr "" #: ../homeactionwidget.cpp:270 msgctxt "HomeActionWidget|" msgid "Cleaning up history trace of Chromium..." msgstr "" #: ../homeactionwidget.cpp:273 msgctxt "HomeActionWidget|" msgid "Chromium history trace had been cleared!" msgstr "" #: ../homeactionwidget.cpp:278 msgctxt "HomeActionWidget|" msgid "Cleaning up Cookies of Firefox..." msgstr "" #: ../homeactionwidget.cpp:281 msgctxt "HomeActionWidget|" msgid "Firefox Cookies had been cleared!" msgstr "" #: ../homeactionwidget.cpp:286 msgctxt "HomeActionWidget|" msgid "Cleaning up Cookies of Chromium..." msgstr "" #: ../homeactionwidget.cpp:289 msgctxt "HomeActionWidget|" msgid "Chromium Cookies had been cleared!" msgstr "" #: ../homeactionwidget.cpp:294 msgctxt "HomeActionWidget|" msgid "Apt cache had been cleared!" msgstr "" #: ../homeactionwidget.cpp:297 msgctxt "HomeActionWidget|" msgid "Cleaning up Apt cache: " msgstr "" #: ../homeactionwidget.cpp:302 msgctxt "HomeActionWidget|" msgid "Software Center cache had been cleared!" msgstr "" #: ../homeactionwidget.cpp:305 msgctxt "HomeActionWidget|" msgid "Cleaning up Software Center cache: " msgstr "" #: ../homeactionwidget.cpp:329 msgctxt "HomeActionWidget|" msgid "Ready to Cleanup......" msgstr "" #: ../homepage.cpp:152 msgctxt "HomePage|" msgid "Boot Manager" msgstr "" #: ../homepage.cpp:152 msgctxt "HomePage|" msgid "Camera" msgstr "" #: ../homepage.cpp:220 msgctxt "HomePage|" msgid "Current Version Number" msgstr "" #: ../homepage.cpp:221 msgctxt "HomePage|" msgid "Update to the lastest version, make it work better" msgstr "" #: ../homepage.cpp:222 msgctxt "HomePage|" msgid "Check new version" msgstr "" #: ../homepage.cpp:223 msgctxt "HomePage|" msgid "Common toolbox" msgstr "" #: ../homepage.cpp:224 msgctxt "HomePage|" msgid "Fast and practical, making the system more personalized" msgstr "" #: ../homepage.cpp:225 ../homepage.cpp:226 msgctxt "HomePage|" msgid "More" msgstr "" #: ../../setting/iconwidget.cpp:182 msgctxt "IconWidget|" msgid "Icon theme" msgstr "" #: ../../setting/iconwidget.cpp:183 msgctxt "IconWidget|" msgid "Show Desktop Icons" msgstr "" #: ../../setting/iconwidget.cpp:184 msgctxt "IconWidget|" msgid "Home Folder" msgstr "" #: ../../setting/iconwidget.cpp:185 msgctxt "IconWidget|" msgid "Network" msgstr "" #: ../../setting/iconwidget.cpp:186 msgctxt "IconWidget|" msgid "Trash" msgstr "" #: ../../setting/iconwidget.cpp:187 msgctxt "IconWidget|" msgid "Mounted Volumes" msgstr "" #: ../infoactionwidget.cpp:61 msgctxt "InfoActionWidget|" msgid "" "Understand hardware information, provide more convenient channel to obtain " "hardware information" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Computer" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Desktop" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "CPU" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Memory" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Motherboard" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "HD" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "NIC" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "VGA" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Audio" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "CD-ROM" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Battery" msgstr "" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Device Driver" msgstr "" #: ../../component/kylinfontdialog.cpp:176 msgctxt "KylinFontDialog|" msgid "Current Font" msgstr "" #: ../../component/kylinfontdialog.cpp:177 msgctxt "KylinFontDialog|" msgid "Font" msgstr "" #: ../../component/kylinfontdialog.cpp:178 msgctxt "KylinFontDialog|" msgid "Style" msgstr "" #: ../../component/kylinfontdialog.cpp:179 msgctxt "KylinFontDialog|" msgid "Size" msgstr "" #: ../../component/kylinfontdialog.cpp:180 msgctxt "KylinFontDialog|" msgid "View" msgstr "" #: ../../component/kylinfontdialog.cpp:181 msgctxt "KylinFontDialog|" msgid "OK" msgstr "" #: ../../component/kylinfontdialog.cpp:182 msgctxt "KylinFontDialog|" msgid "Cancel" msgstr "" #: ../../component/kylinfontdialog.cpp:211 msgctxt "KylinFontDialog|" msgid "Tips" msgstr "" #: ../../component/kylinfontdialog.cpp:212 msgctxt "KylinFontDialog|" msgid "You haven't change the font, please choose the font!" msgstr "" #: ../../component/kylinfontdialog.cpp:225 msgctxt "KylinFontDialog|" msgid "Font Dialog" msgstr "" #: ../../component/kylinmenu.cpp:48 msgctxt "KylinMenu|" msgid "Forum Help" msgstr "" #: ../../component/kylinmenu.cpp:50 msgctxt "KylinMenu|" msgid "Feedback" msgstr "" #: ../../component/kylinmenu.cpp:52 msgctxt "KylinMenu|" msgid "About us" msgstr "" #: ../../component/kylinmenu.cpp:54 msgctxt "KylinMenu|" msgid "Help" msgstr "" #: ../../component/kylinswitcher.cpp:82 msgctxt "KylinSwitcher|" msgid "ON" msgstr "" #: ../../component/kylinswitcher.cpp:91 msgctxt "KylinSwitcher|" msgid "OFF" msgstr "" #: ../../setting/launcherwidget.cpp:133 msgctxt "LauncherWidget|" msgid "Launcher icon size" msgstr "" #: ../../setting/launcherwidget.cpp:134 msgctxt "LauncherWidget|" msgid "Launcher hide mode" msgstr "" #: ../../setting/launcherwidget.cpp:135 msgctxt "LauncherWidget|" msgid "Display desktop icon" msgstr "" #: ../../setting/launcherwidget.cpp:136 msgctxt "LauncherWidget|" msgid "Launcher Transparency" msgstr "" #: ../../setting/launcherwidget.cpp:137 msgctxt "LauncherWidget|" msgid "Icon Background" msgstr "" #: ../loginwidget.cpp:106 msgctxt "LoginWidget|" msgid "Login Youker Account" msgstr "" #: ../loginwidget.cpp:107 msgctxt "LoginWidget|" msgid "Logout" msgstr "" #: ../mainwindow.ui:17 msgctxt "MainWindow|" msgid "MainWindow" msgstr "" #: ../../info/memorywidget.cpp:36 msgctxt "MemoryWidget|" msgid "Memory Info" msgstr "" #: ../../info/memorywidget.cpp:46 #, qt-format msgctxt "MemoryWidget|" msgid "Memory Info %1" msgstr "" #: ../../info/monitorwidget.cpp:35 msgctxt "MonitorWidget|" msgid "Monitor Info" msgstr "" #: ../../info/monitorwidget.cpp:45 #, qt-format msgctxt "MonitorWidget|" msgid "Monitor Info %1" msgstr "" #: ../../setting/mousewidget.cpp:100 msgctxt "MouseWidget|" msgid "Mouse Pointer Theme" msgstr "" #: ../../setting/mousewidget.cpp:101 msgctxt "MouseWidget|" msgid "Cursor Pointer Size" msgstr "" #: ../../setting/mousewidget.cpp:102 msgctxt "MouseWidget|" msgid "Small Size" msgstr "" #: ../../setting/mousewidget.cpp:103 msgctxt "MouseWidget|" msgid "Big Size" msgstr "" #: ../../setting/nautiluswidget.cpp:179 msgctxt "NautilusWidget|" msgid "Display entry location" msgstr "" #: ../../setting/nautiluswidget.cpp:180 msgctxt "NautilusWidget|" msgid "Automatically mount media" msgstr "" #: ../../setting/nautiluswidget.cpp:181 msgctxt "NautilusWidget|" msgid "Automatically open a folder" msgstr "" #: ../../setting/nautiluswidget.cpp:182 msgctxt "NautilusWidget|" msgid "Prompt autorun programs" msgstr "" #: ../../setting/nautiluswidget.cpp:183 msgctxt "NautilusWidget|" msgid "Thumbnail icon size (pixels)" msgstr "" #: ../../setting/nautiluswidget.cpp:184 msgctxt "NautilusWidget|" msgid "Thumbnail cache time (days)" msgstr "" #: ../../setting/nautiluswidget.cpp:185 msgctxt "NautilusWidget|" msgid "Maximum thumbnail cache size (MB)" msgstr "" #: ../../info/nicwidget.cpp:30 msgctxt "NicWidget|" msgid "NIC Info" msgstr "" #: ../../info/nicwidget.cpp:34 msgctxt "NicWidget|" msgid "WireLess NIC Info" msgstr "" #: ../../setting/panelwidget.cpp:181 msgctxt "PanelWidget|" msgid "Dash background blur type" msgstr "" #: ../../setting/panelwidget.cpp:182 msgctxt "PanelWidget|" msgid "Panel Transparency" msgstr "" #: ../../setting/panelwidget.cpp:183 msgctxt "PanelWidget|" msgid "Date & time format" msgstr "" #: ../../setting/panelwidget.cpp:184 msgctxt "PanelWidget|" msgid "Display seconds" msgstr "" #: ../../setting/panelwidget.cpp:185 msgctxt "PanelWidget|" msgid "Display week" msgstr "" #: ../../setting/panelwidget.cpp:186 msgctxt "PanelWidget|" msgid "Display the date" msgstr "" #: ../../setting/panelwidget.cpp:187 msgctxt "PanelWidget|" msgid "Display battery icon" msgstr "" #: ../../setting/panelwidget.cpp:188 msgctxt "PanelWidget|" msgid "Display battery percentage" msgstr "" #: ../../setting/panelwidget.cpp:189 msgctxt "PanelWidget|" msgid "Display battery remaining time" msgstr "" #: ../../setting/panelwidget.cpp:191 msgctxt "PanelWidget|" msgid "Smart blur" msgstr "" #: ../../setting/panelwidget.cpp:192 msgctxt "PanelWidget|" msgid "Static blur" msgstr "" #: ../../setting/panelwidget.cpp:193 msgctxt "PanelWidget|" msgid "Clear" msgstr "" #: ../../processmanager/processdialog.cpp:91 #: ../../processmanager/processdialog.cpp:125 msgctxt "ProcessDialog|" msgid "Process Manager" msgstr "" #: ../../processmanager/processdialog.cpp:92 msgctxt "ProcessDialog|" msgid "Help you learn more about the program running on the system." msgstr "" #: ../../processmanager/processdialog.cpp:93 msgctxt "ProcessDialog|" msgid "Kill Process" msgstr "" #: ../../processmanager/processdialog.cpp:253 msgctxt "ProcessDialog|" msgid "kill process success" msgstr "" #: ../../processmanager/processdialog.cpp:256 msgctxt "ProcessDialog|" msgid "kill process failed" msgstr "" #: ../../processmanager/processmanager.cpp:40 msgctxt "ProcessManager|" msgid "Process Manager" msgstr "" #: ../../processmanager/processmanager.cpp:45 msgctxt "ProcessManager|" msgid "Help user to kill process" msgstr "" #: ../../component/quibo.ui:14 msgctxt "QUIBO|" msgid "Form" msgstr "" #: ../../component/settingaction.cpp:99 msgctxt "SettingAction|" msgid "Back" msgstr "" #: ../../component/settingaction.cpp:102 msgctxt "SettingAction|" msgid "Choose the theme what you want" msgstr "" #: ../../component/settingaction.cpp:106 msgctxt "SettingAction|" msgid "Set the desktop icon theme and the visibility of desktop icons" msgstr "" #: ../../component/settingaction.cpp:110 msgctxt "SettingAction|" msgid "" "Replace the theme and size of the mouse pointer, and theme change need to " "restart system." msgstr "" #: ../../component/settingaction.cpp:114 msgctxt "SettingAction|" msgid "Set the sound theme you want" msgstr "" #: ../../component/settingaction.cpp:118 msgctxt "SettingAction|" msgid "" "Click the \"Custom Picture\" button to select the picture you want to add, " "click the picture you want to set and push the \"OK\" button to complete" msgstr "" #: ../../component/settingaction.cpp:122 msgctxt "SettingAction|" msgid "Setting the Launcher display mode, Icon size." msgstr "" #: ../../component/settingaction.cpp:126 msgctxt "SettingAction|" msgid "Manage Dash and Panel menu settings" msgstr "" #: ../../component/settingaction.cpp:130 msgctxt "SettingAction|" msgid "Window Manager settings" msgstr "" #: ../../component/settingaction.cpp:134 msgctxt "SettingAction|" msgid "" "According to personal preferences to set the system default font, click the " "'Restore' button, can be restored to the state before the font settings" msgstr "" #: ../../component/settingaction.cpp:138 msgctxt "SettingAction|" msgid "" "Setting the relevant properties of your touchpad,make the operation more " "convenient" msgstr "" #: ../../component/settingaction.cpp:142 msgctxt "SettingAction|" msgid "Monitor Check" msgstr "" #: ../../component/settingaction.cpp:146 msgctxt "SettingAction|" msgid "" "Manage the Nautilus file manager. Tips: if the thumbnail's cache time or " "size is set to -1, it will not be checked." msgstr "" #: ../settingactionwidget.cpp:142 msgctxt "SettingActionWidget|" msgid "" "You can perform a full range of customized systems based on personal " "preferences" msgstr "" #: ../settingwidget.cpp:247 msgctxt "SettingWidget|" msgid "Personalize" msgstr "" #: ../settingwidget.cpp:258 msgctxt "SettingWidget|" msgid "ThemeSetting" msgstr "" #: ../settingwidget.cpp:259 msgctxt "SettingWidget|" msgid "IconSetting" msgstr "" #: ../settingwidget.cpp:260 msgctxt "SettingWidget|" msgid "MousePointer" msgstr "" #: ../settingwidget.cpp:261 msgctxt "SettingWidget|" msgid "SoundEffect" msgstr "" #: ../settingwidget.cpp:262 msgctxt "SettingWidget|" msgid "BootAnimation" msgstr "" #: ../settingwidget.cpp:338 msgctxt "SettingWidget|" msgid "Desktop" msgstr "" #: ../settingwidget.cpp:342 msgctxt "SettingWidget|" msgid "Custom Launcher" msgstr "" #: ../settingwidget.cpp:343 msgctxt "SettingWidget|" msgid "Dash & Panel" msgstr "" #: ../settingwidget.cpp:344 msgctxt "SettingWidget|" msgid "Window" msgstr "" #: ../settingwidget.cpp:392 msgctxt "SettingWidget|" msgid "Font" msgstr "" #: ../settingwidget.cpp:394 msgctxt "SettingWidget|" msgid "FontSetting" msgstr "" #: ../settingwidget.cpp:452 msgctxt "SettingWidget|" msgid "Sys options" msgstr "" #: ../settingwidget.cpp:455 msgctxt "SettingWidget|" msgid "Touchpad" msgstr "" #: ../settingwidget.cpp:456 msgctxt "SettingWidget|" msgid "Dead pixel check" msgstr "" #: ../settingwidget.cpp:504 msgctxt "SettingWidget|" msgid "Others" msgstr "" #: ../settingwidget.cpp:506 msgctxt "SettingWidget|" msgid "File manager" msgstr "" #: ../../shredmanager/shreddialog.cpp:100 ../../shredmanager/shreddialog.cpp:129 msgctxt "ShredDialog|" msgid "Shred Manager" msgstr "" #: ../../shredmanager/shreddialog.cpp:101 #: ../../shredmanager/shreddialog.cpp:174 ../../shredmanager/shreddialog.cpp:186 msgctxt "ShredDialog|" msgid "No select any file which need to be shredded" msgstr "" #: ../../shredmanager/shreddialog.cpp:102 msgctxt "ShredDialog|" msgid "Shred File" msgstr "" #: ../../shredmanager/shreddialog.cpp:103 msgctxt "ShredDialog|" msgid "Deselect" msgstr "" #: ../../shredmanager/shreddialog.cpp:145 msgctxt "ShredDialog|" msgid "Allfile(*)" msgstr "" #: ../../shredmanager/shreddialog.cpp:162 msgctxt "ShredDialog|" msgid "Select file!" msgstr "" #: ../../shredmanager/shreddialog.cpp:173 msgctxt "ShredDialog|" msgid "Shred successfully!" msgstr "" #: ../../shredmanager/shreddialog.cpp:179 msgctxt "ShredDialog|" msgid "Shred failed!" msgstr "" #: ../../shredmanager/shredmanager.cpp:40 msgctxt "ShredManager|" msgid "Shred Manager" msgstr "" #: ../../shredmanager/shredmanager.cpp:45 msgctxt "ShredManager|" msgid "Delete files makes it unable to recover" msgstr "" #: ../skincenter.cpp:107 msgctxt "SkinCenter|" msgid "Skin Center" msgstr "" #: ../../info/systemwidget.cpp:36 msgctxt "SystemWidget|" msgid "Computer Base Info" msgstr "" #: ../../info/systemwidget.cpp:63 ../../info/systemwidget.cpp:67 msgctxt "SystemWidget|" msgid " Minutes" msgstr "" #: ../../info/systemwidget.cpp:67 msgctxt "SystemWidget|" msgid " Hours " msgstr "" #: ../../setting/themewidget.cpp:67 #, qt-format msgctxt "ThemeWidget|" msgid "%1" msgstr "" #: ../../component/tipdialog.cpp:74 msgctxt "TipDialog|" msgid "OK" msgstr "" #: ../../component/tipdialog.cpp:97 msgctxt "TipDialog|" msgid "Tip Dialog" msgstr "" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Home" msgstr "" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Cleanup" msgstr "" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Sysinfo" msgstr "" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Feature" msgstr "" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Toolkits" msgstr "" #: ../../setting/touchpadwidget.cpp:126 msgctxt "TouchpadWidget|" msgid "Enable touchpad" msgstr "" #: ../../setting/touchpadwidget.cpp:127 msgctxt "TouchpadWidget|" msgid "Enable horizontal scrolling" msgstr "" #: ../../setting/touchpadwidget.cpp:128 msgctxt "TouchpadWidget|" msgid "Scrollbar type" msgstr "" #: ../../setting/touchpadwidget.cpp:129 msgctxt "TouchpadWidget|" msgid "Panel layout" msgstr "" #: ../../setting/touchpadwidget.cpp:130 msgctxt "TouchpadWidget|" msgid "Features Type" msgstr "" #: ../../setting/touchpadwidget.cpp:131 msgctxt "TouchpadWidget|" msgid "Standard Type" msgstr "" #: ../../setting/touchpadwidget.cpp:132 msgctxt "TouchpadWidget|" msgid "Edge Scrolling" msgstr "" #: ../../setting/touchpadwidget.cpp:133 msgctxt "TouchpadWidget|" msgid "Two-finger Scrolling" msgstr "" #: ../../setting/voicewidget.cpp:99 msgctxt "VoiceWidget|" msgid "Sound theme" msgstr "" #: ../../setting/voicewidget.cpp:100 msgctxt "VoiceWidget|" msgid "Login tone" msgstr "" #: ../../setting/voicewidget.cpp:101 msgctxt "VoiceWidget|" msgid "Event sounds" msgstr "" #: ../../setting/voicewidget.cpp:102 msgctxt "VoiceWidget|" msgid "Input feedback sounds" msgstr "" #: ../../setting/windowwidget.cpp:115 msgctxt "WindowWidget|" msgid "Menu with icons" msgstr "" #: ../../setting/windowwidget.cpp:116 msgctxt "WindowWidget|" msgid "Titlebar mouse wheel action" msgstr "" #: ../../setting/windowwidget.cpp:117 msgctxt "WindowWidget|" msgid "Titlebar double-click action" msgstr "" #: ../../setting/windowwidget.cpp:118 msgctxt "WindowWidget|" msgid "Titlebar middle-click action" msgstr "" #: ../../setting/windowwidget.cpp:119 msgctxt "WindowWidget|" msgid "Titlebar right-click action" msgstr "" youker-assistant/po/python/0000775000175000017500000000000013260315532014764 5ustar fengfengyouker-assistant/po/python/kylin-assistant.pot0000664000175000017500000000131113260315532020641 0ustar fengfeng# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-02-08 02:56+0800\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" #: cpuinfo.py:553 #, python-format msgid "%d cores" msgstr "" #: cpuinfo.py:560 #, python-format msgid "%s v1.0 64 bits" msgstr "" youker-assistant/po/python/kylin-assistant.mo0000664000175000017500000000072113260315532020456 0ustar fengfeng4L`aj@z%d cores%s v1.0 64 bitsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2017-02-08 02:56+0800 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit %d 核%s v1.0 64 位youker-assistant/po/python/kylin-assistant.po0000664000175000017500000000133513260315532020463 0ustar fengfeng# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-02-08 02:56+0800\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" #: cpuinfo.py:553 #, python-format msgid "%d cores" msgstr "%d 核" #: cpuinfo.py:560 #, python-format msgid "%s v1.0 64 bits" msgstr "%s v1.0 64 位" youker-assistant/po/zh_CN.po0000664000175000017500000016163013260315532015013 0ustar fengfengmsgid "" msgstr "" "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" "X-Language: zh_CN\n" "X-Source-Language: C\n" "X-Qt-Contexts: true\n" # 关于本软件 #: ../aboutdialog.ui:26 ../aboutdialog.ui:42 msgctxt "AboutDialog|" msgid "About" msgstr "关于" # 优客助手 #: ../aboutdialog.ui:70 ../aboutdialog.ui:165 msgctxt "AboutDialog|" msgid "Youker Assistant" msgstr "优客助手" #: ../aboutdialog.ui:105 msgctxt "AboutDialog|" msgid "" "\n" "\n" "

      Youker Assistant is a powerful system " "supporting software which is developed by Ubuntu Kylin team. Mainly for the " "naive user, it can help users manage the system. At present, It provides " "system junk scanning and cleaning, viewing the system hardware and software " "information , system customization, task manager, monitoring ball, and some " "other functions.

      \n" "

      The software is still under development. " "Please visit www.ubuntukylin.com for more information. Welcome everyone to " "join with us. youker-assistant Homepage: " "https://launchpad.net/youker-assistant.

      " msgstr "" "\n" "\n" "

      优客助手是由Ubuntu " "Kylin团队开发的一款功能强大的系统辅助软件。主要面向初级用户,能够帮助用户对系统进行管理。目前已具备了系统垃圾扫描与清理、系统软硬件信息查看、系统全方位定制、任务管理器以及监控球等功能。 " "

      \n" "

      各项功能还在不断完善,更多功能也将陆续开发,敬请关注 Ubuntu Kylin 官网 " "www.ubuntukylin.com " "了解软件的最新进展并反馈问题,欢迎广大优客一起参与。优客助手主页:https://launchpad.net/youker-assistant " "。

      " #: ../aboutdialog.ui:116 msgctxt "AboutDialog|" msgid "Contributor" msgstr "贡献者" #: ../aboutdialog.ui:131 msgctxt "AboutDialog|" msgid "" "\n" "\n" "

      Maintainer:

      \n" "

      Ubuntu Kylin Team " "<ubuntukylin-members@list.launchpad.net>

      " msgstr "" "\n" "\n" "

      维护者

      \n" "

      Ubuntu Kylin Team " "<ubuntukylin-members@list.launchpad.net>

      " #: ../aboutdialog.ui:181 msgctxt "AboutDialog|" msgid "home page" msgstr "主页" # 关闭 #: ../aboutdialog.ui:199 msgctxt "AboutDialog|" msgid "Close" msgstr "关闭" #: ../../component/alertdialog.ui:14 msgctxt "AlertDialog|" msgid "Form" msgstr "" #: ../../setting/animationwidget.cpp:191 msgctxt "AnimationWidget|" msgid "Please select a picture as boot animation" msgstr "请选择一个图片作为开机动画" #: ../../setting/animationwidget.cpp:192 msgctxt "AnimationWidget|" msgid "Custom Picture" msgstr "自定义图片" #: ../../setting/animationwidget.cpp:193 msgctxt "AnimationWidget|" msgid "Optional BootAnimation" msgstr "可选启动动画" #: ../../setting/animationwidget.cpp:194 msgctxt "AnimationWidget|" msgid "OK" msgstr "确定" #: ../../setting/animationwidget.cpp:255 msgctxt "AnimationWidget|" msgid "Image Files (*.png *.jpg *.gif)" msgstr "图片文件(*.png *.jpg *.gif)" #: ../../setting/animationwidget.cpp:305 msgctxt "AnimationWidget|" msgid "Deleted successfully!" msgstr "删除成功!" #: ../../setting/animationwidget.cpp:314 msgctxt "AnimationWidget|" msgid "This is the using animation!" msgstr "该动画为当前使用动画!" #: ../../setting/animationwidget.cpp:324 msgctxt "AnimationWidget|" msgid "This is the default animation!" msgstr "该动画为系统默认动画!" #: ../../setting/animationwidget.cpp:334 msgctxt "AnimationWidget|" msgid "An unknown error occurred!" msgstr "发生未知错误!" #: ../../info/audiowidget.cpp:37 msgctxt "AudioWidget|" msgid "Audio Info" msgstr "声卡信息" #: ../../info/audiowidget.cpp:47 #, qt-format msgctxt "AudioWidget|" msgid "Audio Info %1" msgstr "声卡信息%1" # 框 #: ../autostartwidget.ui:14 msgctxt "AutoStartWidget|" msgid "Form" msgstr "" #: ../autostartwidget.cpp:52 msgctxt "AutoStartWidget|" msgid "AutoStart Items:" msgstr "自启动选项:" #~ msgctxt "AutoStartWidget|" #~ msgid "5" #~ msgstr "5" #: ../autostartwidget.cpp:53 msgctxt "AutoStartWidget|" msgid "App" msgstr "应用程序" #: ../autostartwidget.cpp:54 msgctxt "AutoStartWidget|" msgid "Status" msgstr "状态" #: ../autostartwidget.cpp:56 msgctxt "AutoStartWidget|" msgid "ON Items:" msgstr "已开启数目:" #: ../autostartwidget.cpp:57 msgctxt "AutoStartWidget|" msgid "OFF Items:" msgstr "已关闭数目:" #: ../autostartwidget.cpp:208 msgctxt "AutoStartWidget|" msgid "Auto Start" msgstr "自启动" #: ../../info/batterywidget.cpp:32 msgctxt "BatteryWidget|" msgid "Battery Info" msgstr "电池信息" #: ../../info/boardwidget.cpp:29 msgctxt "BoardWidget|" msgid "Board Info" msgstr "主板信息" #: ../boxactionwidget.cpp:70 msgctxt "BoxActionWidget|" msgid "" "Provide a practical and lightweight tool, create fast and convenient " "experience for you" msgstr "提供轻巧使用工具,为您打造快捷方便的体验" #: ../boxactionwidget.cpp:71 msgctxt "BoxActionWidget|" msgid "More App" msgstr "更多应用" #: ../boxwidget.cpp:98 ../boxwidget.cpp:102 msgctxt "BoxWidget|" msgid "UbuntuKylin Software Center" msgstr "优客软件中心" #~ msgctxt "BrowserTab|" #~ msgid "windows系统垃圾文件" #~ msgstr "windows系统垃圾文件" #~ msgctxt "BrowserTab|" #~ msgid "浏览器缓存目录" #~ msgstr "浏览器缓存目录" #~ msgctxt "BrowserTab|" #~ msgid "视频播放缓存目录" #~ msgstr "视频播放缓存目录" #~ msgctxt "BrowserTab|" #~ msgid "Deep cleaning up the browser cache" #~ msgstr "深度清理浏览器缓存" #~ msgctxt "BrowserTab|" #~ msgid "Deep cleaning up the browser cache, to save disk space" #~ msgstr "深度清理浏览器缓存,节省磁盘空间" #~ msgctxt "BrowserTab|" #~ msgid "Start scanning" #~ msgstr "开始扫描" #~ msgctxt "BrowserTab|" #~ msgid "Begin cleanup" #~ msgstr "开始清理" #: ../../info/cdrowwidget.cpp:30 msgctxt "CDRowWidget|" msgid "CDROM Info" msgstr "光驱信息" #: ../../cleaner/cacheactionwidget.cpp:72 msgctxt "CacheActionWidget|" msgid "Cleaning up the system cache" msgstr "清理系统缓存" #: ../../cleaner/cacheactionwidget.cpp:73 msgctxt "CacheActionWidget|" msgid "Deep cleaning up the system cache, to save disk space" msgstr "深度清理系统缓存,节省磁盘空间" #~ msgctxt "CacheTab|" #~ msgid "windows系统垃圾文件" #~ msgstr "windows系统垃圾文件" #~ msgctxt "CacheTab|" #~ msgid "浏览器缓存目录" #~ msgstr "浏览器缓存目录" #~ msgctxt "CacheTab|" #~ msgid "视频播放缓存目录" #~ msgstr "视频播放缓存目录" #~ msgctxt "CacheTab|" #~ msgid "Cleaning up the system cache" #~ msgstr "清理系统缓存" #~ msgctxt "CacheTab|" #~ msgid "Deep cleaning up the system cache, to save disk space" #~ msgstr "深度清理系统缓存,节省磁盘空间" #~ msgctxt "CacheTab|" #~ msgid "Start scanning" #~ msgstr "开始扫描" #~ msgctxt "CacheTab|" #~ msgid "Begin cleanup" #~ msgstr "开始清理" #: ../cameramanager.cpp:98 msgctxt "CameraManager|" msgid "NO found camara" msgstr "未发现摄像头" #: ../cameramanager.cpp:99 msgctxt "CameraManager|" msgid "An application to take pictures with the device camera." msgstr "一个使用摄像头拍照的应用。" #: ../cameramanager.cpp:100 msgctxt "CameraManager|" msgid "" "Press the [ESC] button to take picture and turn the camera off , the photo " "saved in home directory by default." msgstr "按[退出]键拍照并关闭摄像头,照片默认保存在家目录下。" #: ../cameramanager.cpp:101 msgctxt "CameraManager|" msgid "Open camera" msgstr "打开摄像头" #: ../cameramanager.cpp:102 msgctxt "CameraManager|" msgid "View Photos" msgstr "浏览照片" #: ../cameramanager.cpp:144 msgctxt "CameraManager|" msgid "Camera Manager" msgstr "摄像头管理" # 框 #: ../../cleaner/cleanlistwidget.ui:14 msgctxt "CleanListWidget|" msgid "Form" msgstr "" #: ../../cleaner/cleanlistwidget.cpp:45 msgctxt "CleanListWidget|" msgid "Clean Items:" msgstr "清理项:" #: ../../component/cleansubgroup.cpp:51 msgctxt "CleanSubGroup|" msgid "Custom" msgstr "自定义" #: ../cleaneractionwidget.cpp:142 msgctxt "CleanerActionWidget|" msgid "Regular cleaning, let your computer remains the relaxed state" msgstr "经常清理,让电脑保持最轻松的状态" #: ../cleaneractionwidget.cpp:144 msgctxt "CleanerActionWidget|" msgid "Start Scan" msgstr "开始扫描" #: ../cleaneractionwidget.cpp:145 msgctxt "CleanerActionWidget|" msgid "Start Cleanup" msgstr "开始清理" #: ../cleaneractionwidget.cpp:146 msgctxt "CleanerActionWidget|" msgid "Back" msgstr "返回" #: ../cleaneractionwidget.cpp:147 ../cleaneractionwidget.cpp:239 msgctxt "CleanerActionWidget|" msgid "Scanning......" msgstr "正在扫描....." #: ../cleaneractionwidget.cpp:157 msgctxt "CleanerActionWidget|" msgid "Clean OK......" msgstr "清理完毕......" #: ../cleaneractionwidget.cpp:164 msgctxt "CleanerActionWidget|" msgid "Cleaning: " msgstr "正在清理:" #: ../cleaneractionwidget.cpp:168 msgctxt "CleanerActionWidget|" msgid ", Percent is: " msgstr ",进度为:" #: ../cleaneractionwidget.cpp:168 msgctxt "CleanerActionWidget|" msgid "%, Status is: " msgstr "%,状态为:" #: ../cleaneractionwidget.cpp:176 msgctxt "CleanerActionWidget|" msgid "Clean Firefox history......" msgstr "清理Firefox浏览器历史记录......" #: ../cleaneractionwidget.cpp:180 msgctxt "CleanerActionWidget|" msgid "Clean Chromium history......" msgstr "清理Chromium浏览器历史记录......" #: ../cleaneractionwidget.cpp:184 msgctxt "CleanerActionWidget|" msgid "Clean system history......" msgstr "清理系统历史痕迹......" #: ../cleaneractionwidget.cpp:189 msgctxt "CleanerActionWidget|" msgid "Clean apt......" msgstr "清理Apt......" #: ../cleaneractionwidget.cpp:193 msgctxt "CleanerActionWidget|" msgid "Start clean apt......" msgstr "开始清理Apt......" #: ../cleaneractionwidget.cpp:198 msgctxt "CleanerActionWidget|" msgid "Clean Firefox Cookie:" msgstr "清理Firefox浏览器Cookie:" #: ../cleaneractionwidget.cpp:202 msgctxt "CleanerActionWidget|" msgid "Clean Chromium Cookie:" msgstr "清理Chromium浏览器Cookie:" #: ../cleaneractionwidget.cpp:211 ../cleaneractionwidget.cpp:269 msgctxt "CleanerActionWidget|" msgid " does not exist" msgstr "不存在" #: ../cleaneractionwidget.cpp:215 ../cleaneractionwidget.cpp:264 msgctxt "CleanerActionWidget|" msgid "Chromium Browser is running......" msgstr "Chromium浏览器正在运行中......" #: ../cleaneractionwidget.cpp:223 msgctxt "CleanerActionWidget|" msgid "Cache Scan OK......" msgstr "缓存扫描完成....." #: ../cleaneractionwidget.cpp:227 msgctxt "CleanerActionWidget|" msgid "Cookies Scan OK......" msgstr "Cookies扫描完成....." #: ../cleaneractionwidget.cpp:231 msgctxt "CleanerActionWidget|" msgid "History Scan OK......" msgstr "历史记录扫描完成....." #: ../cleaneractionwidget.cpp:235 msgctxt "CleanerActionWidget|" msgid "Packages Scan OK......" msgstr "包扫描完成......" #: ../cleaneractionwidget.cpp:253 msgctxt "CleanerActionWidget|" msgid "Error: " msgstr "错误:" #: ../cleaneractionwidget.cpp:256 msgctxt "CleanerActionWidget|" msgid "Firefox Browser does not be installed......" msgstr "没有安装Firefox浏览器......" #: ../cleaneractionwidget.cpp:260 msgctxt "CleanerActionWidget|" msgid "Chromium Browser does not be installed......" msgstr "没有安装Chromium浏览器......" #: ../cleaneractionwidget.cpp:288 msgctxt "CleanerActionWidget|" msgid "Ready to Cleanup......" msgstr "准备清理......" #: ../../cleaner/cleanerdetailwidget.cpp:228 msgctxt "CleanerDetailWidget|" msgid "Apt Cache Clean Items" msgstr "Apt缓存清理项" #: ../../cleaner/cleanerdetailwidget.cpp:234 msgctxt "CleanerDetailWidget|" msgid "Apt Cache count:" msgstr "Apt缓存总数:" #: ../../cleaner/cleanerdetailwidget.cpp:274 #: ../../cleaner/cleanerdetailwidget.cpp:368 msgctxt "CleanerDetailWidget|" msgid "Software Cache Clean Items" msgstr "软件中心缓存清理项" #: ../../cleaner/cleanerdetailwidget.cpp:280 msgctxt "CleanerDetailWidget|" msgid "Software Cache count:" msgstr "软件中心缓存总数:" #: ../../cleaner/cleanerdetailwidget.cpp:320 #: ../../cleaner/cleanerdetailwidget.cpp:413 #: ../../cleaner/cleanerdetailwidget.cpp:463 #: ../../cleaner/cleanerdetailwidget.cpp:510 #: ../../cleaner/cleanerdetailwidget.cpp:643 #: ../../cleaner/cleanerdetailwidget.cpp:689 #: ../../cleaner/cleanerdetailwidget.cpp:735 msgctxt "CleanerDetailWidget|" msgid "Thumbnails Cache Clean Items" msgstr "缩略图缓存清理项" #: ../../cleaner/cleanerdetailwidget.cpp:326 msgctxt "CleanerDetailWidget|" msgid "Thumbnails Cache Count:" msgstr "缩略图缓存总数:" #: ../../cleaner/cleanerdetailwidget.cpp:373 msgctxt "CleanerDetailWidget|" msgid "Firefox Cache Count:" msgstr "Firefox浏览器缓存总数:" #: ../../cleaner/cleanerdetailwidget.cpp:418 msgctxt "CleanerDetailWidget|" msgid "Chromium Cache Count:" msgstr "Chromium浏览器缓存总数:" #: ../../cleaner/cleanerdetailwidget.cpp:468 msgctxt "CleanerDetailWidget|" msgid "Firefox Cookies Count:" msgstr "Firefox Cookies总数:" #: ../../cleaner/cleanerdetailwidget.cpp:515 msgctxt "CleanerDetailWidget|" msgid "Chromium Cookies Count:" msgstr "Chromium Cookies总数:" #: ../../cleaner/cleanerdetailwidget.cpp:566 msgctxt "CleanerDetailWidget|" msgid "Firefox History Count:" msgstr "Firefox 历史记录总数:" #: ../../cleaner/cleanerdetailwidget.cpp:603 msgctxt "CleanerDetailWidget|" msgid "Chromium History Count:" msgstr "Chromium历史记录总数:" #: ../../cleaner/cleanerdetailwidget.cpp:623 msgctxt "CleanerDetailWidget|" msgid "System History Count:" msgstr "系统历史痕迹总数:" #: ../../cleaner/cleanerdetailwidget.cpp:648 msgctxt "CleanerDetailWidget|" msgid "Package Unneed Count:" msgstr "不需要的包总数:" #: ../../cleaner/cleanerdetailwidget.cpp:694 msgctxt "CleanerDetailWidget|" msgid "Package oldkernel Count:" msgstr "旧内核包总数:" #: ../../cleaner/cleanerdetailwidget.cpp:740 msgctxt "CleanerDetailWidget|" msgid "Package configfile Count:" msgstr "包配置文件总数:" #: ../../cleaner/cleanerdetailwidget.cpp:1268 msgctxt "CleanerDetailWidget|" msgid "Clean args is empty!" msgstr "清理参数为空!" # 框 #: ../../cleaner/cleanerdetailwidget.ui:14 msgctxt "CleanerDetailWidget|" msgid "Form" msgstr "" #: ../../cleaner/cleaneritems.cpp:143 msgctxt "CleanerItems|" msgid "OK" msgstr "确定" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Package Cache" msgstr "清理包缓存" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Software Center Cache" msgstr "清理软件中心缓存" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Thumbnails Cache" msgstr "清理缩略图缓存" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup FireFox Cache" msgstr "清理火狐浏览器缓存" #: ../../cleaner/cleanermainwidget.cpp:38 msgctxt "CleanerMainWidget|" msgid "Cleanup Chromium Cache" msgstr "清理chromium缓存" #: ../../cleaner/cleanermainwidget.cpp:40 msgctxt "CleanerMainWidget|" msgid "Cache Items" msgstr "缓存选项" #: ../../cleaner/cleanermainwidget.cpp:45 msgctxt "CleanerMainWidget|" msgid "System Cache" msgstr "系统缓存" #: ../../cleaner/cleanermainwidget.cpp:45 msgctxt "CleanerMainWidget|" msgid "Cleanup cache of system, software-center, thumbnails and browser" msgstr "清除包、软件中心、缩略图和浏览器缓存" #: ../../cleaner/cleanermainwidget.cpp:52 msgctxt "CleanerMainWidget|" msgid "Uninstall unnecessary procedures" msgstr "卸载不必要的程序" #: ../../cleaner/cleanermainwidget.cpp:52 msgctxt "CleanerMainWidget|" msgid "Uninstall old kernel packages" msgstr "卸载旧版本内核" #: ../../cleaner/cleanermainwidget.cpp:52 msgctxt "CleanerMainWidget|" msgid "Cleanup software configfile" msgstr "清理软件残余配置文件" #: ../../cleaner/cleanermainwidget.cpp:55 msgctxt "CleanerMainWidget|" msgid "Package Items" msgstr "包选项" #: ../../cleaner/cleanermainwidget.cpp:59 msgctxt "CleanerMainWidget|" msgid "Packages and configfile" msgstr "包垃圾和残余配置文件" #: ../../cleaner/cleanermainwidget.cpp:59 msgctxt "CleanerMainWidget|" msgid "" "Cleaning up the software that installed by other software bundled, old " "kernel packages and configfile, to improve system performance" msgstr "清除不必要的程序、旧内核包、配置文件,提升系统性能" #: ../../cleaner/cleanermainwidget.cpp:67 msgctxt "CleanerMainWidget|" msgid "Cleanup the Cookies saving in Firefox" msgstr "清理火狐浏览器的Cookies" #: ../../cleaner/cleanermainwidget.cpp:67 msgctxt "CleanerMainWidget|" msgid "Cleanup the Cookies saving in Chromium" msgstr "清理Chromium浏览器的Cookies" #: ../../cleaner/cleanermainwidget.cpp:70 msgctxt "CleanerMainWidget|" msgid "Cookies Items" msgstr "Cookies选项" #: ../../cleaner/cleanermainwidget.cpp:74 msgctxt "CleanerMainWidget|" msgid "Cookies" msgstr "Cookies" #: ../../cleaner/cleanermainwidget.cpp:74 msgctxt "CleanerMainWidget|" msgid "Clean up user login information, support Firefox and Chromium browser" msgstr "清除上网、游戏、购物等记录" #: ../../cleaner/cleanermainwidget.cpp:82 msgctxt "CleanerMainWidget|" msgid "Clean up the Firefox Internet records" msgstr "清理火狐访问记录" #: ../../cleaner/cleanermainwidget.cpp:82 msgctxt "CleanerMainWidget|" msgid "Clean up the Chromium Internet records" msgstr "清理Chromium访问记录" #: ../../cleaner/cleanermainwidget.cpp:82 msgctxt "CleanerMainWidget|" msgid "Clean up the recently opened documents records" msgstr "清理最近打开的文件记录" #: ../../cleaner/cleanermainwidget.cpp:85 msgctxt "CleanerMainWidget|" msgid "Trace Items" msgstr "访问痕迹选项" #: ../../cleaner/cleanermainwidget.cpp:89 msgctxt "CleanerMainWidget|" msgid "History trace" msgstr "历史痕迹" #: ../../cleaner/cleanermainwidget.cpp:89 msgctxt "CleanerMainWidget|" msgid "Cleaning the internet and opened documents recently records" msgstr "清除浏览器和系统使用痕迹" #: ../../cleaner/cleanermainwidget.cpp:159 msgctxt "CleanerMainWidget|" msgid "Please select the items you want to clean" msgstr "请选择您想清理的选项" #: ../../cleaner/cleanermainwidget.cpp:168 msgctxt "CleanerMainWidget|" msgid "Scan args is empty!" msgstr "扫描参数为空!" #~ msgctxt "CommonCheckBox|" #~ msgid "Custom" #~ msgstr "自定义" #: ../../info/computerpage.cpp:55 ../../info/computerpage.cpp:104 #: ../../info/computerpage.cpp:109 ../../info/computerpage.cpp:111 #, qt-format msgctxt "ComputerPage|" msgid "%1" msgstr "" #: ../../info/computerpage.cpp:97 ../../info/computerpage.cpp:101 msgctxt "ComputerPage|" msgid " Minutes" msgstr " 分钟" #: ../../info/computerpage.cpp:101 msgctxt "ComputerPage|" msgid " Hours " msgstr " 小时" #: ../../info/computerpage.cpp:136 ../../info/computerpage.cpp:256 msgctxt "ComputerPage|" msgid "Audio Model" msgstr "声卡型号" #: ../../info/computerpage.cpp:138 ../../info/computerpage.cpp:191 #: ../../info/computerpage.cpp:204 ../../info/computerpage.cpp:299 #: ../../info/computerpage.cpp:324 ../../info/computerpage.cpp:340 #: ../../info/computerpage.cpp:355 msgctxt "ComputerPage|" msgid "Vendor" msgstr "制造商" #: ../../info/computerpage.cpp:140 ../../info/computerpage.cpp:318 #: ../../info/computerpage.cpp:328 ../../info/computerpage.cpp:346 msgctxt "ComputerPage|" msgid "Bus Address" msgstr "总线地址" #: ../../info/computerpage.cpp:142 msgctxt "ComputerPage|" msgid "Audio Driver" msgstr "声卡驱动" #: ../../info/computerpage.cpp:145 ../../info/computerpage.cpp:193 #: ../../info/computerpage.cpp:288 ../../info/computerpage.cpp:330 msgctxt "ComputerPage|" msgid "Device Name" msgstr "设备名" #: ../../info/computerpage.cpp:147 msgctxt "ComputerPage|" msgid "Manufacturer" msgstr "发行商" #: ../../info/computerpage.cpp:161 ../../info/computerpage.cpp:357 msgctxt "ComputerPage|" msgid "Model" msgstr "型号" #: ../../info/computerpage.cpp:163 msgctxt "ComputerPage|" msgid "Technology" msgstr "技术" #: ../../info/computerpage.cpp:165 msgctxt "ComputerPage|" msgid "Voltage" msgstr "电压" #: ../../info/computerpage.cpp:167 msgctxt "ComputerPage|" msgid "Energy Designed" msgstr "能量(设计)" #: ../../info/computerpage.cpp:169 msgctxt "ComputerPage|" msgid "Energy Full" msgstr "满时能量" #: ../../info/computerpage.cpp:171 msgctxt "ComputerPage|" msgid "Energy Now" msgstr "能量" #: ../../info/computerpage.cpp:173 ../../info/computerpage.cpp:180 #: ../../info/computerpage.cpp:197 ../../info/computerpage.cpp:206 #: ../../info/computerpage.cpp:292 ../../info/computerpage.cpp:301 #: ../../info/computerpage.cpp:350 ../../info/computerpage.cpp:361 msgctxt "ComputerPage|" msgid "Serial Number" msgstr "序列号" #: ../../info/computerpage.cpp:176 msgctxt "ComputerPage|" msgid "Motherboard Model" msgstr "主板型号" #: ../../info/computerpage.cpp:178 msgctxt "ComputerPage|" msgid "Motherboard Vendor" msgstr "主板产商" #: ../../info/computerpage.cpp:182 msgctxt "ComputerPage|" msgid "BIOS Vendor" msgstr "BIOS产商" #: ../../info/computerpage.cpp:184 msgctxt "ComputerPage|" msgid "BIOS Version" msgstr "BIOS版本" #: ../../info/computerpage.cpp:186 msgctxt "ComputerPage|" msgid "Release Date" msgstr "发布日期" #: ../../info/computerpage.cpp:189 msgctxt "ComputerPage|" msgid "CD-ROM Model" msgstr "光驱型号" #: ../../info/computerpage.cpp:195 ../../info/computerpage.cpp:290 msgctxt "ComputerPage|" msgid "Firmware Version" msgstr "固件版本" #: ../../info/computerpage.cpp:202 ../../info/computerpage.cpp:228 msgctxt "ComputerPage|" msgid "CPU" msgstr "处理器" #: ../../info/computerpage.cpp:208 msgctxt "ComputerPage|" msgid "Socket/Slot" msgstr "插座/插槽" #: ../../info/computerpage.cpp:210 msgctxt "ComputerPage|" msgid "Maximum Frequency" msgstr "最大主频" #: ../../info/computerpage.cpp:212 msgctxt "ComputerPage|" msgid "Current Frequency" msgstr "当前主频" #: ../../info/computerpage.cpp:214 msgctxt "ComputerPage|" msgid "FSB" msgstr "前端总线" #: ../../info/computerpage.cpp:216 msgctxt "ComputerPage|" msgid "Core Number" msgstr "核心数目" #: ../../info/computerpage.cpp:218 msgctxt "ComputerPage|" msgid "Thread" msgstr "线程" #: ../../info/computerpage.cpp:220 msgctxt "ComputerPage|" msgid "L1 Cache" msgstr "1级缓存" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "L2 Cache" msgstr "2级缓存" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "1500a v1.0 64 bits" msgstr "1500a v1.0 64位" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "phytium" msgstr "飞腾" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "4 cores" msgstr "4核" #: ../../info/computerpage.cpp:222 msgctxt "ComputerPage|" msgid "4 thread/core" msgstr "4线程/核" #: ../../info/computerpage.cpp:226 msgctxt "ComputerPage|" msgid "Desktop Environment" msgstr "桌面环境" #: ../../info/computerpage.cpp:230 msgctxt "ComputerPage|" msgid "Host Name" msgstr "主机名" #: ../../info/computerpage.cpp:232 msgctxt "ComputerPage|" msgid "Memery Capacity" msgstr "内存容量" #: ../../info/computerpage.cpp:234 msgctxt "ComputerPage|" msgid "Shell" msgstr "Shell终端" #: ../../info/computerpage.cpp:236 msgctxt "ComputerPage|" msgid "Distribution" msgstr "发行版" #: ../../info/computerpage.cpp:238 msgctxt "ComputerPage|" msgid "Language" msgstr "语言" #: ../../info/computerpage.cpp:240 msgctxt "ComputerPage|" msgid "User" msgstr "用户" #: ../../info/computerpage.cpp:242 msgctxt "ComputerPage|" msgid "Home Folder" msgstr "用户主目录" #: ../../info/computerpage.cpp:246 msgctxt "ComputerPage|" msgid "Host bridge" msgstr "主桥" #: ../../info/computerpage.cpp:248 msgctxt "ComputerPage|" msgid "VGA Model" msgstr "VGA兼容控制器" #: ../../info/computerpage.cpp:250 msgctxt "ComputerPage|" msgid "USB Model" msgstr "USB控制器" #: ../../info/computerpage.cpp:252 msgctxt "ComputerPage|" msgid "Communication Model" msgstr "通信控制器" #: ../../info/computerpage.cpp:254 msgctxt "ComputerPage|" msgid "Ethernet Model" msgstr "以太网控制器" #: ../../info/computerpage.cpp:258 msgctxt "ComputerPage|" msgid "PCI bridge" msgstr "PCI桥" #: ../../info/computerpage.cpp:260 msgctxt "ComputerPage|" msgid "ISA bridge" msgstr "ISA桥" #: ../../info/computerpage.cpp:262 msgctxt "ComputerPage|" msgid "SATA Model" msgstr "SATA控制器" #: ../../info/computerpage.cpp:264 msgctxt "ComputerPage|" msgid "SMBus" msgstr "系统管理总线" #: ../../info/computerpage.cpp:266 msgctxt "ComputerPage|" msgid "System peripheral" msgstr "系统外围" #: ../../info/computerpage.cpp:268 msgctxt "ComputerPage|" msgid "Driver in use" msgstr "使用的驱动" #: ../../info/computerpage.cpp:270 msgctxt "ComputerPage|" msgid "existing drivers" msgstr "可选的驱动" #: ../../info/computerpage.cpp:272 msgctxt "ComputerPage|" msgid "IDE interface" msgstr "IDE接口" #: ../../info/computerpage.cpp:274 msgctxt "ComputerPage|" msgid "SP controller" msgstr "信号处理控制器" #: ../../info/computerpage.cpp:276 msgctxt "ComputerPage|" msgid "Network controller" msgstr "网络控制器" #: ../../info/computerpage.cpp:278 msgctxt "ComputerPage|" msgid "Multimedia audio controller" msgstr "多媒体音频控制器" #: ../../info/computerpage.cpp:282 msgctxt "ComputerPage|" msgid "HDD Model" msgstr "硬盘型号" #: ../../info/computerpage.cpp:284 msgctxt "ComputerPage|" msgid "HDD Vendor" msgstr "硬盘厂商" #: ../../info/computerpage.cpp:286 msgctxt "ComputerPage|" msgid "HDD Capacity" msgstr "硬盘容量" #: ../../info/computerpage.cpp:295 msgctxt "ComputerPage|" msgid "Slot Number" msgstr "插槽号" #: ../../info/computerpage.cpp:297 msgctxt "ComputerPage|" msgid "Memory Model" msgstr "内存型号" #: ../../info/computerpage.cpp:303 msgctxt "ComputerPage|" msgid "Memory Size" msgstr "内存大小" #: ../../info/computerpage.cpp:305 msgctxt "ComputerPage|" msgid "Data Width" msgstr "数据宽度" #: ../../info/computerpage.cpp:307 msgctxt "ComputerPage|" msgid "Memory Info" msgstr "内存条信息" #: ../../info/computerpage.cpp:310 msgctxt "ComputerPage|" msgid "Graphics Card Model" msgstr "显卡型号" #: ../../info/computerpage.cpp:312 msgctxt "ComputerPage|" msgid "Current Graphics Card" msgstr "当前显卡" #: ../../info/computerpage.cpp:314 msgctxt "ComputerPage|" msgid "Graphics Card Vendor" msgstr "显卡制造商" #: ../../info/computerpage.cpp:316 msgctxt "ComputerPage|" msgid "Graphics Driver" msgstr "显卡驱动" #: ../../info/computerpage.cpp:322 msgctxt "ComputerPage|" msgid "NIC Model" msgstr "有线网卡型号" #: ../../info/computerpage.cpp:326 msgctxt "ComputerPage|" msgid "NIC Driver" msgstr "有线网卡驱动" #: ../../info/computerpage.cpp:332 ../../info/computerpage.cpp:352 msgctxt "ComputerPage|" msgid "IP Address" msgstr "IP地址" #: ../../info/computerpage.cpp:334 msgctxt "ComputerPage|" msgid "Mac Address" msgstr "MAC地址" #: ../../info/computerpage.cpp:336 msgctxt "ComputerPage|" msgid "Connection Status" msgstr "连接状态" #: ../../info/computerpage.cpp:338 msgctxt "ComputerPage|" msgid "Max Bandwidth" msgstr "最大带宽" #: ../../info/computerpage.cpp:342 msgctxt "ComputerPage|" msgid "WLan NIC Driver" msgstr "无线网卡驱动" #: ../../info/computerpage.cpp:344 msgctxt "ComputerPage|" msgid "WLan NIC Model" msgstr "网卡型号" #: ../../info/computerpage.cpp:348 msgctxt "ComputerPage|" msgid "Device Name:" msgstr "设备名称:" #: ../../info/computerpage.cpp:359 msgctxt "ComputerPage|" msgid "Version" msgstr "电脑版本" #: ../../info/computerpage.cpp:363 msgctxt "ComputerPage|" msgid "Hostname" msgstr "主机名" #: ../../info/computerpage.cpp:365 msgctxt "ComputerPage|" msgid "Running Time" msgstr "持续运行时间" #: ../../info/computerpage.cpp:367 msgctxt "ComputerPage|" msgid "OS Types" msgstr "操作系统类型" #: ../../info/computerpage.cpp:369 msgctxt "ComputerPage|" msgid "OS Version" msgstr "操作系统版本" #: ../../info/computerpage.cpp:371 msgctxt "ComputerPage|" msgid "Kernel Bit" msgstr "系统位数" #: ../../info/computerpage.cpp:373 msgctxt "ComputerPage|" msgid "Kernel Version" msgstr "内核版本" #: ../../info/computerpage.cpp:375 msgctxt "ComputerPage|" msgid "Kernel Arch" msgstr "内核架构" #: ../../info/cpuwidget.cpp:30 msgctxt "CpuWidget|" msgid "CPU Info" msgstr "处理器信息" #: ../../setting/deadpixelwidget.cpp:75 msgctxt "DeadpixelWidget|" msgid "" "Left-click to change the color, right-click to exit from this detection." msgstr "鼠标左键点击更改颜色,右键点击推出坏点检测。" #: ../../setting/deadpixelwidget.cpp:76 msgctxt "DeadpixelWidget|" msgid "OK" msgstr "确定" #: ../../info/desktopwidget.cpp:30 msgctxt "DesktopWidget|" msgid "Desktop Info" msgstr "桌面环境信息" #: ../../info/driverwidget.cpp:32 msgctxt "DriverWidget|" msgid "Driver Info" msgstr "驱动信息" #: ../../setting/fontwidget.cpp:63 ../../setting/fontwidget.cpp:64 #: ../../setting/fontwidget.cpp:65 ../../setting/fontwidget.cpp:66 #: ../../setting/fontwidget.cpp:67 msgctxt "FontWidget|" msgid "Click here to change font" msgstr "点击此处更换字体" #: ../../setting/fontwidget.cpp:166 msgctxt "FontWidget|" msgid "Default Font" msgstr "默认字体" #: ../../setting/fontwidget.cpp:167 msgctxt "FontWidget|" msgid "Desktop Font" msgstr "桌面字体" #: ../../setting/fontwidget.cpp:168 msgctxt "FontWidget|" msgid "Monospace Font" msgstr "等宽字体" #: ../../setting/fontwidget.cpp:169 msgctxt "FontWidget|" msgid "Document Font" msgstr "文档字体" #: ../../setting/fontwidget.cpp:170 msgctxt "FontWidget|" msgid "Titlebar Font" msgstr "标题栏字体" #: ../../setting/fontwidget.cpp:171 msgctxt "FontWidget|" msgid "Global Font Scaling" msgstr "全局字体缩放" #: ../../setting/fontwidget.cpp:172 msgctxt "FontWidget|" msgid "Hinting" msgstr "平滑" #: ../../setting/fontwidget.cpp:173 msgctxt "FontWidget|" msgid "Antialiasing" msgstr "反锯齿" #: ../../info/hdwidget.cpp:35 msgctxt "HDWidget|" msgid "HardWare Info" msgstr "硬盘信息" # 硬盘信息 %1 #: ../../info/hdwidget.cpp:45 #, qt-format msgctxt "HDWidget|" msgid "HardWare Info %1" msgstr "" #: ../homeactionwidget.cpp:132 ../homeactionwidget.cpp:231 msgctxt "HomeActionWidget|" msgid "The lastest cleanup time is " msgstr "上一次清理时间是" #: ../homeactionwidget.cpp:138 ../homeactionwidget.cpp:184 msgctxt "HomeActionWidget|" msgid "The lastest scan time is " msgstr "上一次扫描时间是" #: ../homeactionwidget.cpp:142 msgctxt "HomeActionWidget|" msgid "You have not implemented the one key scan and clean-up operation." msgstr "您还没有执行过一键扫描和一键清理操作。" #: ../homeactionwidget.cpp:163 msgctxt "HomeActionWidget|" msgid "" "Quick clean up system trash, saving disk space and improving the system " "efficiency!" msgstr "一键清理系统垃圾,帮您节省磁盘空间,让系统运行更加有效率!" #: ../homeactionwidget.cpp:164 msgctxt "HomeActionWidget|" msgid "Start Scan" msgstr "开始扫描" #: ../homeactionwidget.cpp:165 msgctxt "HomeActionWidget|" msgid "Start Cleanup" msgstr "开始清理" #: ../homeactionwidget.cpp:166 msgctxt "HomeActionWidget|" msgid "Back" msgstr "返回" #: ../homeactionwidget.cpp:167 msgctxt "HomeActionWidget|" msgid "Scanning......" msgstr "正在扫描....." #: ../homeactionwidget.cpp:177 msgctxt "HomeActionWidget|" msgid "Scanning:" msgstr "正在扫描:" #: ../homeactionwidget.cpp:183 msgctxt "HomeActionWidget|" msgid "Scan Over" msgstr "扫描完成" #: ../homeactionwidget.cpp:215 msgctxt "HomeActionWidget|" msgid "Cleaning......" msgstr "正在清理......." #: ../homeactionwidget.cpp:220 msgctxt "HomeActionWidget|" msgid "Garbage Cleanup OK......" msgstr "垃圾清理完成......" #: ../homeactionwidget.cpp:223 msgctxt "HomeActionWidget|" msgid "History Cleanup OK......" msgstr "历史记录清理完成......" #: ../homeactionwidget.cpp:226 msgctxt "HomeActionWidget|" msgid "Cookies Cleanup OK......" msgstr "Cookies清理完成......" #: ../homeactionwidget.cpp:232 msgctxt "HomeActionWidget|" msgid "Cleanup Cookies:" msgstr "清理了Cookies:" #: ../homeactionwidget.cpp:232 msgctxt "HomeActionWidget|" msgid "; Garbage:" msgstr ";垃圾:" #: ../homeactionwidget.cpp:232 msgctxt "HomeActionWidget|" msgid "; Historical records:" msgstr ";历史记录:" #: ../homeactionwidget.cpp:262 msgctxt "HomeActionWidget|" msgid "Cleaning up history trace of Firefox..." msgstr "正在清理Firefox浏览器的历史痕迹......" #: ../homeactionwidget.cpp:265 msgctxt "HomeActionWidget|" msgid "Firefox history trace had been cleared!" msgstr "Firefox浏览器历史痕迹清理完成!" #: ../homeactionwidget.cpp:270 msgctxt "HomeActionWidget|" msgid "Cleaning up history trace of Chromium..." msgstr "正在清理Chromium浏览器的历史痕迹......" #: ../homeactionwidget.cpp:273 msgctxt "HomeActionWidget|" msgid "Chromium history trace had been cleared!" msgstr "Chromium浏览器的历史痕迹清理完成!" #: ../homeactionwidget.cpp:278 msgctxt "HomeActionWidget|" msgid "Cleaning up Cookies of Firefox..." msgstr "正在清理Firefox浏览器的Cookies......" #: ../homeactionwidget.cpp:281 msgctxt "HomeActionWidget|" msgid "Firefox Cookies had been cleared!" msgstr "Firefox浏览器的Cookies清理完成!" #: ../homeactionwidget.cpp:286 msgctxt "HomeActionWidget|" msgid "Cleaning up Cookies of Chromium..." msgstr "正在清理Chromium浏览器的Cookies......" #: ../homeactionwidget.cpp:289 msgctxt "HomeActionWidget|" msgid "Chromium Cookies had been cleared!" msgstr "Chromium浏览器的Cookies清理完成!" #: ../homeactionwidget.cpp:294 msgctxt "HomeActionWidget|" msgid "Apt cache had been cleared!" msgstr "Apt缓存清理完成!" #: ../homeactionwidget.cpp:297 msgctxt "HomeActionWidget|" msgid "Cleaning up Apt cache: " msgstr "正在清理Apt缓存:" #: ../homeactionwidget.cpp:302 msgctxt "HomeActionWidget|" msgid "Software Center cache had been cleared!" msgstr "软件中心缓存清理完成!" #: ../homeactionwidget.cpp:305 msgctxt "HomeActionWidget|" msgid "Cleaning up Software Center cache: " msgstr "正在清理软件中心缓存:" #: ../homeactionwidget.cpp:329 msgctxt "HomeActionWidget|" msgid "Ready to Cleanup......" msgstr "准备清理......" #: ../homepage.cpp:152 msgctxt "HomePage|" msgid "Boot Manager" msgstr "开机启动项管理" #: ../homepage.cpp:152 msgctxt "HomePage|" msgid "Camera" msgstr "摄像头" #: ../homepage.cpp:220 msgctxt "HomePage|" msgid "Current Version Number" msgstr "当前版本号" #: ../homepage.cpp:221 msgctxt "HomePage|" msgid "Update to the lastest version, make it work better" msgstr "更新至最新版本,使软件更好用" #: ../homepage.cpp:222 msgctxt "HomePage|" msgid "Check new version" msgstr "检查最新版本" #: ../homepage.cpp:223 msgctxt "HomePage|" msgid "Common toolbox" msgstr "工具箱" #: ../homepage.cpp:224 msgctxt "HomePage|" msgid "Fast and practical, making the system more personalized" msgstr "更快更好,让系统更具个性化" #: ../homepage.cpp:225 ../homepage.cpp:226 msgctxt "HomePage|" msgid "More" msgstr "更多" #: ../../setting/iconwidget.cpp:182 msgctxt "IconWidget|" msgid "Icon theme" msgstr "图标主题" #: ../../setting/iconwidget.cpp:183 msgctxt "IconWidget|" msgid "Show Desktop Icons" msgstr "显示桌面图标" #: ../../setting/iconwidget.cpp:184 msgctxt "IconWidget|" msgid "Home Folder" msgstr "用户主目录" #: ../../setting/iconwidget.cpp:185 msgctxt "IconWidget|" msgid "Network" msgstr "网络" #: ../../setting/iconwidget.cpp:186 msgctxt "IconWidget|" msgid "Trash" msgstr "回收站" #: ../../setting/iconwidget.cpp:187 msgctxt "IconWidget|" msgid "Mounted Volumes" msgstr "挂载卷" #: ../infoactionwidget.cpp:61 msgctxt "InfoActionWidget|" msgid "" "Understand hardware information, provide more convenient channel to obtain " "hardware information" msgstr "了解电脑硬件详细信息,为用户提供更加方便的获取硬件信息渠道" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Computer" msgstr "电脑概述" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Desktop" msgstr "桌面环境" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "CPU" msgstr "处理器" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Memory" msgstr "内存" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Motherboard" msgstr "主板" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "HD" msgstr "硬盘" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "NIC" msgstr "网卡" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "VGA" msgstr "显卡" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Audio" msgstr "声卡" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "CD-ROM" msgstr "光驱" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Battery" msgstr "电池" #: ../infowidget.cpp:36 msgctxt "InfoWidget|" msgid "Device Driver" msgstr "设备驱动" #: ../../component/kylinfontdialog.cpp:176 msgctxt "KylinFontDialog|" msgid "Current Font" msgstr "当前字体" #: ../../component/kylinfontdialog.cpp:177 msgctxt "KylinFontDialog|" msgid "Font" msgstr "字体" #: ../../component/kylinfontdialog.cpp:178 msgctxt "KylinFontDialog|" msgid "Style" msgstr "风格" #: ../../component/kylinfontdialog.cpp:179 msgctxt "KylinFontDialog|" msgid "Size" msgstr "大小" #: ../../component/kylinfontdialog.cpp:180 msgctxt "KylinFontDialog|" msgid "View" msgstr "视图" #: ../../component/kylinfontdialog.cpp:181 msgctxt "KylinFontDialog|" msgid "OK" msgstr "确定" #: ../../component/kylinfontdialog.cpp:182 msgctxt "KylinFontDialog|" msgid "Cancel" msgstr "取消" #: ../../component/kylinfontdialog.cpp:211 msgctxt "KylinFontDialog|" msgid "Tips" msgstr "提示" #: ../../component/kylinfontdialog.cpp:212 msgctxt "KylinFontDialog|" msgid "You haven't change the font, please choose the font!" msgstr "您没有更改字体,请选择需要更改的字体!" #: ../../component/kylinfontdialog.cpp:225 msgctxt "KylinFontDialog|" msgid "Font Dialog" msgstr "字体对话框" #: ../../component/kylinmenu.cpp:48 msgctxt "KylinMenu|" msgid "Forum Help" msgstr "论坛求助" #: ../../component/kylinmenu.cpp:50 msgctxt "KylinMenu|" msgid "Feedback" msgstr "问题反馈" #: ../../component/kylinmenu.cpp:52 msgctxt "KylinMenu|" msgid "About us" msgstr "关于我们" #: ../../component/kylinmenu.cpp:54 msgctxt "KylinMenu|" msgid "Help" msgstr "帮助" #: ../../component/kylinswitcher.cpp:82 msgctxt "KylinSwitcher|" msgid "ON" msgstr "已开启" #: ../../component/kylinswitcher.cpp:91 msgctxt "KylinSwitcher|" msgid "OFF" msgstr "已关闭" #: ../../setting/launcherwidget.cpp:133 msgctxt "LauncherWidget|" msgid "Launcher icon size" msgstr "启动器图标尺寸" #: ../../setting/launcherwidget.cpp:134 msgctxt "LauncherWidget|" msgid "Launcher hide mode" msgstr "启动器自动隐藏" #: ../../setting/launcherwidget.cpp:135 msgctxt "LauncherWidget|" msgid "Display desktop icon" msgstr "显示桌面图标" #: ../../setting/launcherwidget.cpp:136 msgctxt "LauncherWidget|" msgid "Launcher Transparency" msgstr "启动器透明度" #: ../../setting/launcherwidget.cpp:137 msgctxt "LauncherWidget|" msgid "Icon Background" msgstr "图标背景" #: ../loginwidget.cpp:106 msgctxt "LoginWidget|" msgid "Login Youker Account" msgstr "登录优客帐号" #: ../loginwidget.cpp:107 msgctxt "LoginWidget|" msgid "Logout" msgstr "注销" # 主界面 #: ../mainwindow.ui:17 msgctxt "MainWindow|" msgid "MainWindow" msgstr "" #: ../../info/memorywidget.cpp:36 msgctxt "MemoryWidget|" msgid "Memory Info" msgstr "内存条信息" #: ../../info/memorywidget.cpp:46 #, qt-format msgctxt "MemoryWidget|" msgid "Memory Info %1" msgstr "内存信息 %1" #: ../../info/monitorwidget.cpp:35 msgctxt "MonitorWidget|" msgid "Monitor Info" msgstr "显示器和显卡信息" #: ../../info/monitorwidget.cpp:45 #, qt-format msgctxt "MonitorWidget|" msgid "Monitor Info %1" msgstr "显示器和显卡信息 %1" #: ../../setting/mousewidget.cpp:100 msgctxt "MouseWidget|" msgid "Mouse Pointer Theme" msgstr "鼠标指针主题" #: ../../setting/mousewidget.cpp:101 msgctxt "MouseWidget|" msgid "Cursor Pointer Size" msgstr "光标指针大小" #: ../../setting/mousewidget.cpp:102 msgctxt "MouseWidget|" msgid "Small Size" msgstr "小号" #: ../../setting/mousewidget.cpp:103 msgctxt "MouseWidget|" msgid "Big Size" msgstr "大号" #: ../../setting/nautiluswidget.cpp:179 msgctxt "NautilusWidget|" msgid "Display entry location" msgstr "路径输入框取代路径栏" #: ../../setting/nautiluswidget.cpp:180 msgctxt "NautilusWidget|" msgid "Automatically mount media" msgstr "自动挂载媒体" #: ../../setting/nautiluswidget.cpp:181 msgctxt "NautilusWidget|" msgid "Automatically open a folder" msgstr "自动打开文件夹" #: ../../setting/nautiluswidget.cpp:182 msgctxt "NautilusWidget|" msgid "Prompt autorun programs" msgstr "提示自动运行的程序" #: ../../setting/nautiluswidget.cpp:183 msgctxt "NautilusWidget|" msgid "Thumbnail icon size (pixels)" msgstr "缩略图图标尺寸(像素)" #: ../../setting/nautiluswidget.cpp:184 msgctxt "NautilusWidget|" msgid "Thumbnail cache time (days)" msgstr "缩略图缓存时间(天数)" #: ../../setting/nautiluswidget.cpp:185 msgctxt "NautilusWidget|" msgid "Maximum thumbnail cache size (MB)" msgstr "最大缩略图缓存尺寸(MB)" #: ../../info/nicwidget.cpp:30 msgctxt "NicWidget|" msgid "NIC Info" msgstr "有线网卡信息" #: ../../info/nicwidget.cpp:34 msgctxt "NicWidget|" msgid "WireLess NIC Info" msgstr "无线网卡信息" #: ../../setting/panelwidget.cpp:181 msgctxt "PanelWidget|" msgid "Dash background blur type" msgstr "搜索框背景模糊类型" #: ../../setting/panelwidget.cpp:182 msgctxt "PanelWidget|" msgid "Panel Transparency" msgstr "面板透明度" #: ../../setting/panelwidget.cpp:183 msgctxt "PanelWidget|" msgid "Date & time format" msgstr "日期时间格式" #: ../../setting/panelwidget.cpp:184 msgctxt "PanelWidget|" msgid "Display seconds" msgstr "显示秒数" #: ../../setting/panelwidget.cpp:185 msgctxt "PanelWidget|" msgid "Display week" msgstr "显示星期" #: ../../setting/panelwidget.cpp:186 msgctxt "PanelWidget|" msgid "Display the date" msgstr "显示日期" #: ../../setting/panelwidget.cpp:187 msgctxt "PanelWidget|" msgid "Display battery icon" msgstr "显示电池图标" #: ../../setting/panelwidget.cpp:188 msgctxt "PanelWidget|" msgid "Display battery percentage" msgstr "显示电池百分比" #: ../../setting/panelwidget.cpp:189 msgctxt "PanelWidget|" msgid "Display battery remaining time" msgstr "显示电池电量时间" #: ../../setting/panelwidget.cpp:191 msgctxt "PanelWidget|" msgid "Smart blur" msgstr "活动模糊" #: ../../setting/panelwidget.cpp:192 msgctxt "PanelWidget|" msgid "Static blur" msgstr "静态模糊" #: ../../setting/panelwidget.cpp:193 msgctxt "PanelWidget|" msgid "Clear" msgstr "非模糊" #: ../../processmanager/processdialog.cpp:91 #: ../../processmanager/processdialog.cpp:125 msgctxt "ProcessDialog|" msgid "Process Manager" msgstr "进程管理器" #: ../../processmanager/processdialog.cpp:92 msgctxt "ProcessDialog|" msgid "Help you learn more about the program running on the system." msgstr "帮助您了解和管理系统上运行的进程。" #: ../../processmanager/processdialog.cpp:93 msgctxt "ProcessDialog|" msgid "Kill Process" msgstr "杀进程" #: ../../processmanager/processdialog.cpp:253 msgctxt "ProcessDialog|" msgid "kill process success" msgstr "杀进程成功" #: ../../processmanager/processdialog.cpp:256 msgctxt "ProcessDialog|" msgid "kill process failed" msgstr "杀进程失败" #: ../../processmanager/processmanager.cpp:40 msgctxt "ProcessManager|" msgid "Process Manager" msgstr "进程管理器" # 帮助用户杀进程 #: ../../processmanager/processmanager.cpp:45 msgctxt "ProcessManager|" msgid "Help user to kill process" msgstr "" #: ../../component/quibo.ui:14 msgctxt "QUIBO|" msgid "Form" msgstr "" #~ msgctxt "SessionDispatcher|" #~ msgid "Select file" #~ msgstr "选择文件" #~ msgctxt "SessionDispatcher|" #~ msgid "All Files(*)" #~ msgstr "所有文件(*)" #: ../../component/settingaction.cpp:99 msgctxt "SettingAction|" msgid "Back" msgstr "返回" #: ../../component/settingaction.cpp:102 msgctxt "SettingAction|" msgid "Choose the theme what you want" msgstr "选择您需要的主题" #: ../../component/settingaction.cpp:106 msgctxt "SettingAction|" msgid "Set the desktop icon theme and the visibility of desktop icons" msgstr "设置桌面图标主题和桌面图标的可见性" #~ msgctxt "SettingAction|" #~ msgid "" #~ "Replace the theme and size of the mouse pointer, then click the 'OK' " #~ "button to confirm. Also, theme change need to restart system." #~ msgstr "更换鼠标指针主题和大小,更改设置后点击"确定"按钮进行确认。主题更改需要重新系统才能生效。" #~ msgctxt "SettingAction|" #~ msgid "" #~ "Replace the theme and size of the mouse pointer. Also, theme change need " #~ "to restart system." #~ msgstr "更换鼠标指针主题和大小。主题更改需要重新系统才能生效。" #: ../../component/settingaction.cpp:110 msgctxt "SettingAction|" msgid "" "Replace the theme and size of the mouse pointer, and theme change need to " "restart system." msgstr "更换鼠标指针主题和大小,主题更改需要重新系统才能生效。" #: ../../component/settingaction.cpp:114 msgctxt "SettingAction|" msgid "Set the sound theme you want" msgstr "设置您需要的声音主题" #: ../../component/settingaction.cpp:118 msgctxt "SettingAction|" msgid "" "Click the \"Custom Picture\" button to select the picture you want to add, " "click the picture you want to set and push the \"OK\" button to complete" msgstr "单击"自定义图片"按钮选择需要添加的图片,选中列表中要设置的图片名称,单击"确定"按钮完成设置" #: ../../component/settingaction.cpp:122 msgctxt "SettingAction|" msgid "Setting the Launcher display mode, Icon size." msgstr "设置启动器的显示模式、图标尺寸。" #: ../../component/settingaction.cpp:126 msgctxt "SettingAction|" msgid "Manage Dash and Panel menu settings" msgstr "管理Dash搜索和面板菜单的设置" #: ../../component/settingaction.cpp:130 msgctxt "SettingAction|" msgid "Window Manager settings" msgstr "窗口管理器设置" #: ../../component/settingaction.cpp:134 msgctxt "SettingAction|" msgid "" "According to personal preferences to set the system default font, click the " "'Restore' button, can be restored to the state before the font settings" msgstr "根据个人喜好设置系统默认字体,单击"恢复默认"按钮,可以将对应的字体恢复到设置前状态" #: ../../component/settingaction.cpp:138 msgctxt "SettingAction|" msgid "" "Setting the relevant properties of your touchpad,make the operation more " "convenient" msgstr "通过调整您触摸板的相关设置,使操作更加便捷" #: ../../component/settingaction.cpp:142 msgctxt "SettingAction|" msgid "Monitor Check" msgstr "坏点检测" #: ../../component/settingaction.cpp:146 msgctxt "SettingAction|" msgid "" "Manage the Nautilus file manager. Tips: if the thumbnail's cache time or " "size is set to -1, it will not be checked." msgstr "管理Nautilus文件管理器。注意:如果缩略图缓存时间或尺寸被设置为-1,缩略图将不会被清理。" #: ../settingactionwidget.cpp:142 msgctxt "SettingActionWidget|" msgid "" "You can perform a full range of customized systems based on personal " "preferences" msgstr "您可以根据个人喜好对系统进行全方位的定制" #: ../settingwidget.cpp:247 msgctxt "SettingWidget|" msgid "Personalize" msgstr "个性化" #: ../settingwidget.cpp:258 msgctxt "SettingWidget|" msgid "ThemeSetting" msgstr "主题设置" #: ../settingwidget.cpp:259 msgctxt "SettingWidget|" msgid "IconSetting" msgstr "图标设置" #: ../settingwidget.cpp:260 msgctxt "SettingWidget|" msgid "MousePointer" msgstr "鼠标设置" #: ../settingwidget.cpp:261 msgctxt "SettingWidget|" msgid "SoundEffect" msgstr "声音效果" #: ../settingwidget.cpp:262 msgctxt "SettingWidget|" msgid "BootAnimation" msgstr "开机动画" #: ../settingwidget.cpp:338 msgctxt "SettingWidget|" msgid "Desktop" msgstr "桌面" #: ../settingwidget.cpp:342 msgctxt "SettingWidget|" msgid "Custom Launcher" msgstr "自定义启动器" #: ../settingwidget.cpp:343 msgctxt "SettingWidget|" msgid "Dash & Panel" msgstr "搜索和面板" #: ../settingwidget.cpp:344 msgctxt "SettingWidget|" msgid "Window" msgstr "窗口" #: ../settingwidget.cpp:392 msgctxt "SettingWidget|" msgid "Font" msgstr "字体" #: ../settingwidget.cpp:394 msgctxt "SettingWidget|" msgid "FontSetting" msgstr "字体设置" #: ../settingwidget.cpp:452 msgctxt "SettingWidget|" msgid "Sys options" msgstr "系统选项" #: ../settingwidget.cpp:455 msgctxt "SettingWidget|" msgid "Touchpad" msgstr "触摸板" #: ../settingwidget.cpp:456 msgctxt "SettingWidget|" msgid "Dead pixel check" msgstr "坏点检测" #: ../settingwidget.cpp:504 msgctxt "SettingWidget|" msgid "Others" msgstr "其他" #: ../settingwidget.cpp:506 msgctxt "SettingWidget|" msgid "File manager" msgstr "文件管理器" #: ../../shredmanager/shreddialog.cpp:100 ../../shredmanager/shreddialog.cpp:129 msgctxt "ShredDialog|" msgid "Shred Manager" msgstr "文件粉碎机" #: ../../shredmanager/shreddialog.cpp:101 #: ../../shredmanager/shreddialog.cpp:174 ../../shredmanager/shreddialog.cpp:186 msgctxt "ShredDialog|" msgid "No select any file which need to be shredded" msgstr "没有选择需要粉碎的文件" #: ../../shredmanager/shreddialog.cpp:102 msgctxt "ShredDialog|" msgid "Shred File" msgstr "粉碎文件" #: ../../shredmanager/shreddialog.cpp:103 msgctxt "ShredDialog|" msgid "Deselect" msgstr "取消粉碎" #: ../../shredmanager/shreddialog.cpp:145 msgctxt "ShredDialog|" msgid "Allfile(*)" msgstr "所有文件(*)" #: ../../shredmanager/shreddialog.cpp:162 msgctxt "ShredDialog|" msgid "Select file!" msgstr "选择文件!" #~ msgctxt "ShredDialog|" #~ msgid "Select file" #~ msgstr "选择文件" #~ msgctxt "ShredDialog|" #~ msgid "All Files(*)" #~ msgstr "所有文件(*)" #: ../../shredmanager/shreddialog.cpp:173 msgctxt "ShredDialog|" msgid "Shred successfully!" msgstr "粉碎成功!" #: ../../shredmanager/shreddialog.cpp:179 msgctxt "ShredDialog|" msgid "Shred failed!" msgstr "粉碎失败!" #: ../../shredmanager/shredmanager.cpp:40 msgctxt "ShredManager|" msgid "Shred Manager" msgstr "文件粉碎机" #: ../../shredmanager/shredmanager.cpp:45 msgctxt "ShredManager|" msgid "Delete files makes it unable to recover" msgstr "彻底删除文件使其无法恢复" #: ../skincenter.cpp:107 msgctxt "SkinCenter|" msgid "Skin Center" msgstr "皮肤中心" #~ msgctxt "SystemDispatcher|" #~ msgid "Select the boot animation" #~ msgstr "选择开机动画" #~ msgctxt "SystemDispatcher|" #~ msgid "Image Files (*.png *.jpg *.gif)" #~ msgstr "图片文件(*.png *.jpg *.gif)" #~ msgctxt "SystemDispatcher|" #~ msgid "Select music" #~ msgstr "选择音乐文件" #~ msgctxt "SystemDispatcher|" #~ msgid "Audio Files (*.ogg *.wav *.mp3 *.wma)" #~ msgstr "音频文件(*.ogg *.wav *.mp3 *.wma)" #~ msgctxt "SystemTray|" #~ msgid "Youker Assistant" #~ msgstr "优客助手" #~ msgctxt "SystemTray|" #~ msgid "open" #~ msgstr "打开" #~ msgctxt "SystemTray|" #~ msgid "logout" #~ msgstr "退出" #: ../../info/systemwidget.cpp:36 msgctxt "SystemWidget|" msgid "Computer Base Info" msgstr "电脑概述" #: ../../info/systemwidget.cpp:63 ../../info/systemwidget.cpp:67 msgctxt "SystemWidget|" msgid " Minutes" msgstr " 分钟" #: ../../info/systemwidget.cpp:67 msgctxt "SystemWidget|" msgid " Hours " msgstr " 小时" #: ../../setting/themewidget.cpp:67 #, qt-format msgctxt "ThemeWidget|" msgid "%1" msgstr "" #: ../../component/tipdialog.cpp:74 msgctxt "TipDialog|" msgid "OK" msgstr "确定" #: ../../component/tipdialog.cpp:97 msgctxt "TipDialog|" msgid "Tip Dialog" msgstr "提示框" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Home" msgstr "优客首页" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Cleanup" msgstr "系统清理" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Sysinfo" msgstr "系统信息" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Feature" msgstr "系统美化" #: ../toolwidget.cpp:38 msgctxt "ToolWidget|" msgid "Toolkits" msgstr "功能大全" #: ../../setting/touchpadwidget.cpp:126 msgctxt "TouchpadWidget|" msgid "Enable touchpad" msgstr "启用/禁用触摸板" #: ../../setting/touchpadwidget.cpp:127 msgctxt "TouchpadWidget|" msgid "Enable horizontal scrolling" msgstr "触摸板横向滚动" #: ../../setting/touchpadwidget.cpp:128 msgctxt "TouchpadWidget|" msgid "Scrollbar type" msgstr "滚动条类型" #: ../../setting/touchpadwidget.cpp:129 msgctxt "TouchpadWidget|" msgid "Panel layout" msgstr "触摸板滚动触发方式" #: ../../setting/touchpadwidget.cpp:130 msgctxt "TouchpadWidget|" msgid "Features Type" msgstr "特色类型" #: ../../setting/touchpadwidget.cpp:131 msgctxt "TouchpadWidget|" msgid "Standard Type" msgstr "标准类型" #: ../../setting/touchpadwidget.cpp:132 msgctxt "TouchpadWidget|" msgid "Edge Scrolling" msgstr "边缘触发" #: ../../setting/touchpadwidget.cpp:133 msgctxt "TouchpadWidget|" msgid "Two-finger Scrolling" msgstr "双指触发" #: ../../setting/voicewidget.cpp:99 msgctxt "VoiceWidget|" msgid "Sound theme" msgstr "事件声音" #: ../../setting/voicewidget.cpp:100 msgctxt "VoiceWidget|" msgid "Login tone" msgstr "登录提示音" #: ../../setting/voicewidget.cpp:101 msgctxt "VoiceWidget|" msgid "Event sounds" msgstr "声音主题" #: ../../setting/voicewidget.cpp:102 msgctxt "VoiceWidget|" msgid "Input feedback sounds" msgstr "输入反馈声音" #: ../../setting/windowwidget.cpp:115 msgctxt "WindowWidget|" msgid "Menu with icons" msgstr "菜单项旁显示图标" #: ../../setting/windowwidget.cpp:116 msgctxt "WindowWidget|" msgid "Titlebar mouse wheel action" msgstr "标题栏鼠标滚轮动作" #: ../../setting/windowwidget.cpp:117 msgctxt "WindowWidget|" msgid "Titlebar double-click action" msgstr "标题栏双击动作" #: ../../setting/windowwidget.cpp:118 msgctxt "WindowWidget|" msgid "Titlebar middle-click action" msgstr "标题栏中键动作" #: ../../setting/windowwidget.cpp:119 msgctxt "WindowWidget|" msgid "Titlebar right-click action" msgstr "标题栏右键动作" youker-assistant/kylin-assistant.desktop0000664000175000017500000000044613260315532017561 0ustar fengfeng[Desktop Entry] Name=kylin-assistant Name[zh_CN]=麒麟助手 Comment=System Auxiliar Tools Comment[zh_CN]=系统辅助工具 Keywords=Settings;Cleaning;Customization Exec=/usr/bin/youker-assistant %u Icon=kylin-assistant.png Terminal=false Type=Application Categories=GNOME;GTK;System;Viewer; youker-assistant/plugins/0000775000175000017500000000000013265005575014516 5ustar fengfengyouker-assistant/plugins/systemmonitor/0000775000175000017500000000000013265005454017446 5ustar fengfengyouker-assistant/plugins/systemmonitor/resourcesdialog.h0000664000175000017500000000420413260315532023005 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 class ResourcesCategory; class CpuRateWidget; class MemoryWidget; class NetworkWidget; class ResouresDialog : public QWidget { Q_OBJECT public: explicit ResouresDialog(QWidget* parent = 0); ~ResouresDialog(); void startCpuTimer(); void stopCpuTimer(); public slots: void updateResourceStatus(); void onSwitchResoucesPage(int index); signals: void updateCpuStatus(double percent); void updateMemoryStatus(); void updateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateBytes, long sentRateBytes); private: //cpu unsigned long long m_prevCpuTotalTime; unsigned long long m_prevCpuWorkTime; unsigned long long m_cpuTotalTime; unsigned long long m_cpuworkTime; //network unsigned long long int m_totalRecvBytes; unsigned long long int m_totalSentBytes; unsigned long long int m_rateRecvBytes; unsigned long long int m_rateSentBytes; QTimer *updateStatusTimer = nullptr; QHBoxLayout *m_hlayout = nullptr; // QVBoxLayout *m_vlayout = nullptr; ResourcesCategory * m_resourcesCategory = nullptr; CpuRateWidget *m_cpuWidget = nullptr; MemoryWidget *m_memoryWidget = nullptr; NetworkWidget *m_networkWidget = nullptr; QSplitter *splitter = nullptr; QStackedWidget *m_stack = nullptr; }; youker-assistant/plugins/systemmonitor/resourcesindicator.cpp0000664000175000017500000001377613260315532024073 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "resourcesindicator.h" #include #include #include #include #include #include ResourcesIndicator::ResourcesIndicator(int flag, QWidget *parent) : QWidget(parent) ,m_state(Normal) ,m_isChecked(false) ,m_currentPercent(0) ,m_posX(5) ,m_rectTopPadding(9) ,m_rectTotalHeight(38) ,m_rectTotalWidth(58) ,m_outsideBorderColor(Qt::transparent) ,m_bgColor(QColor("#ffffff")) { this->setFixedSize(188, 56); if (flag == 0) { m_borderColor = QColor("#0973b4"); } else if (flag == 1) { m_borderColor = QColor("#9528b4"); } else { m_borderColor = Qt::transparent; } setResourcesState(Normal); } ResourcesIndicator::~ResourcesIndicator() { } void ResourcesIndicator::enterEvent(QEvent *event) { setCursor(Qt::PointingHandCursor); if (!m_isChecked) { setResourcesState(Hover); } event->accept(); //QWidget::enterEvent(event); } void ResourcesIndicator::leaveEvent(QEvent *event) { if (!m_isChecked) { setResourcesState(Normal); } event->accept(); //QWidget::leaveEvent(event); } void ResourcesIndicator::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) return; setResourcesState(Press); event->accept(); //QWidget::mousePressEvent(event); } void ResourcesIndicator::mouseReleaseEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) return; m_isChecked = !m_isChecked; if (m_isChecked) { setResourcesState(Checked); } else { setResourcesState(Normal); } event->accept(); //QWidget::mouseReleaseEvent(event); if (event->button() == Qt::LeftButton) emit clicked(); } void ResourcesIndicator::mouseMoveEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) { setResourcesState(Normal); } } void ResourcesIndicator::updateBgColor() { switch (m_state) { case Hover: this->m_outsideBorderColor = Qt::transparent; this->m_bgColor = QColor("#f6fcfe"); break; case Press: this->m_outsideBorderColor = Qt::transparent; this->m_bgColor = QColor("#f6fcfe"); break; case Checked: this->m_outsideBorderColor = QColor("#0973b4"); this->m_bgColor = QColor("#e9f8fd"); break; default: this->m_outsideBorderColor = Qt::transparent; this->m_bgColor = QColor("#ffffff"); break; } repaint(); } void ResourcesIndicator::setResourcesState(ResourcesIndicator::ResourcesState state) { if (m_state == state) return; m_state = state; updateBgColor(); } void ResourcesIndicator::setChecked(bool flag) { m_isChecked = flag; if (m_isChecked){ setResourcesState(Checked); } else { setResourcesState(Normal); } } bool ResourcesIndicator::isChecked() { return m_isChecked; } void ResourcesIndicator::setTitle(const QString &title) { this->m_title = title; } void ResourcesIndicator::updatePercentAndInfo(double percent, const QString &info) { this->m_currentPercent = static_cast(percent); this->m_info = info; repaint(); } ResourcesIndicator::ResourcesState ResourcesIndicator::getResourcesState() const { return m_state; } void ResourcesIndicator::paintEvent(QPaintEvent *event) { //渐变填充 /*QRadialGradient gradient(50, 50, 50, 50, 50); gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1)); gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0)); QBrush brush(gradient);*/ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); //border of rect QPainterPath borderPath; borderPath.addRoundedRect(this->rect(), 0, 0); QPen pen(this->m_outsideBorderColor, 1); // QPen pen(QColor("#B22222"), 1); painter.setPen(pen); painter.drawPath(borderPath); //background of rect painter.setOpacity(1); QPainterPath path; path.addRect(QRectF(1, 1, width()-2, height()-2)); painter.fillPath(path, this->m_bgColor); // painter.fillPath(path, QColor("#f6fcfe")); int convertPercent = static_cast(m_rectTotalHeight*this->m_currentPercent/100); //percent rect painter.setPen(QPen(this->m_borderColor, 0.5));//设置画笔颜色、宽度 painter.setBrush(QColor("#ffffff"));//设置画刷颜色 painter.drawRect(this->m_posX, this->m_rectTopPadding, this->m_rectTotalWidth, this->m_rectTotalHeight - convertPercent); painter.setBrush(QColor("#f4f2f4")); painter.drawRect(this->m_posX, this->m_rectTopPadding + this->m_rectTotalHeight - convertPercent, this->m_rectTotalWidth, convertPercent); //draw title painter.setRenderHint(QPainter::Antialiasing, false); QFont font = painter.font() ; font.setPixelSize(16); painter.setFont(font); painter.setPen(QPen(QColor("#000000"))); painter.drawText(QRect(68, 1, 118, 28), Qt::AlignLeft | Qt::AlignVCenter, this->m_title); //draw content font.setPixelSize(12); painter.setFont(font); QFontMetrics fm(font); QString text = fm.elidedText(this->m_info, Qt::ElideRight, 120); painter.drawText(QRect(68, 30, 120, 20), Qt::AlignLeft | Qt::AlignVCenter, text); QWidget::paintEvent(event); } youker-assistant/plugins/systemmonitor/processlistwidget.h0000664000175000017500000000763113260315532023400 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PROCESSLISTWIDGET_H #define PROCESSLISTWIDGET_H #include "processlistitem.h" #include #include #include #include typedef bool (* SortFunction) (const ProcessListItem *item1, const ProcessListItem *item2, bool sort); typedef bool (* SearchFunction) (const ProcessListItem *item, QString text); class ProcessListWidget : public QWidget { Q_OBJECT public: ProcessListWidget(QList toBeDisplayedColumns, QWidget *parent = 0); ~ProcessListWidget(); void readyToHideScrollbar(); void setProcessSortFunctions(QList *list, int sortColumn=-1, bool isSort=false); void setSearchFunction(SearchFunction func); void addItems(QList items); void clearItems(); void addSelectedItems(QList items, bool recordLastItem=true); void clearSelectedItems(bool clearLast=true); void refreshItems(QList items); void doSearch(QString text); void selectTheFirstItem(); void selectTheLastItem(); void selectThePrevItem(int offset); void selectTheNextItem(int offset); void shiftToHomeItem(); void shiftToEndItem(); void shiftToPrevItem(int offset); void shiftToNextItem(int offset); void shiftToSelectedItems(int start, int end); int getItemsTotalHeight(); QList getSearchedItems(QList items); void sortItemsByColumn(int column, bool isSort); int getBottomOffset(); int getScrollbarY(); int getScrollbarHeight(); int getTheScrollAreaHeight(); QList getTitleItemsWidths(); int setOffset(int offset); bool mouseAtScrollArea(int x); bool mouseAtTitleArea(int y); signals: void rightMouseClickedItems(QPoint pos, QList items); void changeColumnVisible(int index, bool visible, QList columnVisible); void changeSortStatus(int index, bool isSort); public slots: void hideScrollbar(); protected: virtual void leaveEvent(QEvent *event); void keyPressEvent(QKeyEvent *keyEvent); void mouseMoveEvent(QMouseEvent *mouseEvent); void mousePressEvent(QMouseEvent *mouseEvent); void mouseReleaseEvent(QMouseEvent *mouseEvent); void paintEvent(QPaintEvent *); void wheelEvent(QWheelEvent *event); void paintScrollbar(QPainter *painter); private: QTimer *m_hideScrollbarTimer = nullptr; SearchFunction m_searchFunc; ProcessListItem *m_lastItem = nullptr; QList *m_listItems; QList *m_searchedItems; QList *m_selectedItems; QList columnTitles; QList *m_sortFuncList; QList *m_isSortList; QList m_columnWidths; QList m_columnVisibles; QString m_searchText; bool m_isSort; bool m_mouseAtScrollArea; bool m_mouseDragScrollbar; int m_currentSortIndex; int m_origOffset; int m_offSet; int m_rowHeight; int m_scrollbarWidth; int m_titleHeight; int m_titleHoverColumn; int m_titlePadding; int m_titlePressColumn; QPixmap m_downArrowPixmap; QPixmap m_upArrowPixmap; }; #endif // PROCESSLISTWIDGET_H youker-assistant/plugins/systemmonitor/memorycircle.cpp0000664000175000017500000001724713260315532022653 0ustar fengfeng#include "memorycircle.h" #include "util.h" #include #include inline QString formatMemory(guint64 size) { enum { K_INDEX, M_INDEX, G_INDEX, T_INDEX }; QList factorList; factorList.append(G_GUINT64_CONSTANT(1) << 10);//KiB factorList.append(G_GUINT64_CONSTANT(1) << 20);//MiB factorList.append(G_GUINT64_CONSTANT(1) << 30);//GiB factorList.append(G_GUINT64_CONSTANT(1) << 40);//TiB if (size < factorList.at(K_INDEX)) { if ((guint) size > 1) { return QString("%1 %2").arg((guint) size).arg(QObject::tr("byte")); } else { return QString("%1 %2").arg((guint) size).arg(QObject::tr("bytes")); } } else { guint64 factor; QString format; if (size < factorList.at(M_INDEX)) { factor = factorList.at(K_INDEX); format = QObject::tr("KiB"); }else if (size < factorList.at(G_INDEX)) { factor = factorList.at(M_INDEX); format = QObject::tr("MiB"); } else if (size < factorList.at(T_INDEX)) { factor = factorList.at(G_INDEX); format = QObject::tr("GiB"); } else { factor = factorList.at(T_INDEX); format = QObject::tr("TiB"); } std::string formatted_result(make_string(g_strdup_printf("%.1f", size / (double)factor))); return QString::fromStdString(formatted_result) + format; } } MemoryCircle::MemoryCircle(QWidget *parent) : QWidget(parent) { this->setFixedSize(400, 300); circleRadius = 128/2; //半径 rectWidth = 100; //文本框宽 rectHeight = 20; // 文本框高 center = rect().center(); center.setX(center.x()/2); center.setY(center.y()/2); swapcenter = rect().center(); swapcenter.setX(swapcenter.x()*3/2); swapcenter.setY(swapcenter.y()/2); } MemoryCircle::~MemoryCircle() { } void MemoryCircle::drawCircle(QPainter &painter, bool isSwap) { //渐变效果设置 /*QRadialGradient circleGradient(center, circleRadius, center); circleGradient.setColorAt(0.0, QColor(220, 220, 220)); circleGradient.setColorAt(0.2, QColor(220, 220, 220)); circleGradient.setColorAt(0.4, QColor(240, 240, 240)); circleGradient.setColorAt(1.0, QColor(220, 220, 220));*/ QPen pen; if (isSwap) pen.setColor(QColor("#fc7416")); else pen.setColor(QColor("#9528b4")); pen.setWidth(1); painter.setPen(pen); // painter.setBrush(circleGradient); painter.setBrush(QBrush(QColor("#ffffff"))); if (isSwap) painter.drawEllipse(swapcenter, circleRadius, circleRadius); else painter.drawEllipse(center, circleRadius, circleRadius); } void MemoryCircle::drawColorPie(QPainter &painter, bool isSwap) { //内存矩形,绘制扇形需要的参数,圆在矩形内且与矩形相切 QPointF pieRectLeftTop(center.x()-circleRadius, center.y()-circleRadius); QPointF pieRectRightBottom(center.x()+circleRadius, center.y()+circleRadius); pieRect = QRectF(pieRectLeftTop, pieRectRightBottom); //SWAP矩形范围,,绘制扇形需要的参数,圆在矩形内且与矩形相切 QPointF swapRectLeftTop(swapcenter.x()-circleRadius, swapcenter.y()-circleRadius); QPointF swapRectRightBottom(swapcenter.x()+circleRadius, swapcenter.y()+circleRadius); swappieRect = QRectF(swapRectLeftTop, swapRectRightBottom); if (isSwap) { if (mi.swappercent == 0) painter.setPen(Qt::NoPen); else { QPen pen; pen.setColor(QColor("#fc7416")); pen.setWidth(1); painter.setPen(pen); } painter.setBrush(QBrush(QColor("#fef5f1"))); float swapcurrentPie = - (360 * (mi.swappercent/100)); //负数顺时针 painter.drawPie(swappieRect, 90*16, swapcurrentPie*16);//绘制扇形,90*16为初始,12点钟位置 } else { if (mi.percent == 0) painter.setPen(Qt::NoPen); else { QPen pen; pen.setColor(QColor("#9528b4")); pen.setWidth(1); painter.setPen(pen); } painter.setBrush(QBrush(QColor("#f4e9f7"))); float currentPie = - (360 * (mi.percent/100)); //负数顺时针,0*16为3点钟位置 painter.drawPie(pieRect, 90*16, currentPie*16); //绘制扇形,90*16为初始,12点钟位置 } } void MemoryCircle::drawTextInfo(QPainter &painter) { setFontSize(painter, 20); painter.setPen(QPen(QColor("#000000"))); painter.drawText(QRect(center.x()-circleRadius, center.y() + circleRadius + 10, circleRadius*2, 30), Qt::AlignCenter, tr("Memory")); painter.drawText(QRect(swapcenter.x()-circleRadius, swapcenter.y() + circleRadius + 10, circleRadius*2, 30), Qt::AlignCenter, tr("Swap")); //draw title setFontSize(painter, 12); painter.setPen(QPen(QColor("#999999"))); painter.drawText(QRect(center.x()-circleRadius, center.y() + circleRadius + 40, circleRadius*2, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Used(Percent)")); painter.drawText(QRect(swapcenter.x()-circleRadius, swapcenter.y() + circleRadius + 40, circleRadius*2, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Used(Percent)")); painter.drawText(QRect(center.x()-circleRadius, center.y() + circleRadius + 100, circleRadius*2, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Total")); painter.drawText(QRect(swapcenter.x()-circleRadius, swapcenter.y() + circleRadius + 100, circleRadius*2, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Total")); //draw text data setFontSize(painter, 20); QFontMetrics fm = painter.fontMetrics(); painter.setPen(QPen(QColor("#000000"))); const QString memeryUsed = tr("%1(%2%)").arg(formatMemory(mi.user)).arg(QString::number(mi.percent, 'f', 1)); const QString swapUsed = tr("%1(%2%)").arg(formatMemory(mi.swapused)).arg(QString::number(mi.swappercent, 'f', 1)); painter.drawText(QRect(center.x()-circleRadius, center.y() + circleRadius + 70, fm.width(memeryUsed), 30), Qt::AlignLeft |Qt::AlignVCenter, memeryUsed); painter.drawText(QRect(swapcenter.x()-circleRadius, swapcenter.y() + circleRadius + 70, fm.width(swapUsed), 30), Qt::AlignLeft |Qt::AlignVCenter, swapUsed); painter.drawText(QRect(center.x()-circleRadius, center.y() + circleRadius + 130, circleRadius*2, 30), Qt::AlignLeft |Qt::AlignVCenter, formatMemory(mi.total)); painter.drawText(QRect(swapcenter.x()-circleRadius, swapcenter.y() + circleRadius + 130, circleRadius*2, 30), Qt::AlignLeft |Qt::AlignVCenter, formatMemory(mi.swaptotal)); } void MemoryCircle::onUpdateMemoryStatus() { glibtop_mem mem; glibtop_swap swap; glibtop_get_mem(&mem); glibtop_get_swap(&swap); float swappercent = (swap.total ? (float)swap.used / (float)swap.total : 0.0f); float mempercent = (float)mem.user / (float)mem.total; mi.percent = mempercent * 100; mi.swappercent = swappercent * 100; //初始单位为字节,需要修正 mi.user = mem.user; mi.total = mem.total; mi.swapused = swap.used; mi.swaptotal = swap.total; const QString info = QString("%1/%2(%3%)").arg(formatMemory(mi.user)).arg(formatMemory(mi.total)).arg(QString::number(mi.percent, 'f', 1)); emit rebackMemoryInfo(info, mi.percent); repaint();//this->update(); } void MemoryCircle::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true);//反走样,绘制出来的线条会出现锯齿 //draw memory circle drawCircle(painter); drawColorPie(painter); //draw swap circle drawCircle(painter, true); drawColorPie(painter, true); painter.setRenderHint(QPainter::Antialiasing, false); drawTextInfo(painter); } youker-assistant/plugins/systemmonitor/filesystemdata.h0000664000175000017500000000331113260315532022627 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 FILESYSTEMDATA_H #define FILESYSTEMDATA_H #include #include class FileSystemData : public QObject { Q_OBJECT public: explicit FileSystemData(QObject *parent = 0); const QString deviceName() const; void setDevName(const QString &name); const QString mountDir() const; const QString diskType() const; const QString totalCapacity() const; const QString freeCapacity() const; const QString availCapacity() const; const QString usedCapactiy() const; const int usedPercentage(); void updateDiskInfo(QString mountDir, QString diskType, QString totalCapacity, QString freeCapacity, QString availCapacity, QString usedCapactiy, int percentage); private: QString m_devName; QString m_mountDir; QString m_diskType; QString m_totalCapacity; QString m_freeCapacity; QString m_availCapacity; QString m_usedCapactiy; int m_percentage; }; #endif // FILESYSTEMDATA_H youker-assistant/plugins/systemmonitor/monitortitlewidget.cpp0000664000175000017500000003414113260315532024106 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "monitortitlewidget.h" #include "../widgets/mytristatebutton.h" #include "../widgets/myunderlinebutton.h" #include "../widgets/mysearchedit.h" #include "util.h" #include #include #include #include #include #include #include #include #include MonitorTitleWidget::MonitorTitleWidget(QSettings *settings, QWidget *parent) :QFrame(parent) ,proSettings(settings) { this->setWindowFlags(Qt::FramelessWindowHint);//this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowCloseButtonHint); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid installEventFilter(this); setMouseTracking(true); setFixedHeight(MONITOR_TITLE_WIDGET_HEIGHT); this->setAutoFillBackground(true); // this->setAttribute(Qt::WA_TranslucentBackground); QPalette palette; palette.setColor(QPalette::Background, QColor("#0d87ca")); this->setPalette(palette); // this->setStyleSheet("QFrame{background:transparent;background-color:#0d87ca;border-radius:5px;border:1px solid red;}"); // this->setStyleSheet("QFrame {padding: 5px 0;} QFrame:hover {background-color: rgba(255, 245, 250, 0.1);border-radius: 5px;}"); m_searchTimer = new QTimer(this); m_searchTimer->setSingleShot(true); connect(m_searchTimer, SIGNAL(timeout()), this, SLOT(onRefreshSearchResult())); initWidgets(); } MonitorTitleWidget::~MonitorTitleWidget() { delete emptyLabel; delete m_searchEdit; delete m_cancelSearchBtn; delete maxBtn; if (m_searchTimer) { disconnect(m_searchTimer, SIGNAL(timeout()), this, SLOT(onRefreshSearchResult())); if(m_searchTimer->isActive()) { m_searchTimer->stop(); } delete m_searchTimer; m_searchTimer = nullptr; } //Segmentation fault QLayoutItem *child; while ((child = m_titleLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_titleMiddleLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_titleRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_toolLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_toolRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_topLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_bottomLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_layout; } bool MonitorTitleWidget::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { if (obj == this) { QKeyEvent *keyEvent = static_cast(event); if (keyEvent->key() == Qt::Key_Escape) { m_searchEdit->clearEdit(); emit canelSearchEditFocus(); } } else if (obj == m_searchEdit->getLineEdit()) { QKeyEvent *keyEvent = static_cast(event); if (keyEvent->key() == Qt::Key_Tab) { emit canelSearchEditFocus(); } } } return QFrame::eventFilter(obj, event); } void MonitorTitleWidget::setSearchEditFocus() { if (m_searchEdit->searchedText() != "") { m_searchEdit->getLineEdit()->setFocus(); } else { m_searchEdit->setFocus(); } } void MonitorTitleWidget::onRefreshSearchResult() { if (m_searchEdit->searchedText() == searchTextCache) { emit this->searchSignal(searchTextCache); } } void MonitorTitleWidget::handleSearchTextChanged() { searchTextCache = m_searchEdit->searchedText(); this->m_cancelSearchBtn->setVisible(!searchTextCache.isEmpty()); if (m_searchTimer->isActive()) { m_searchTimer->stop(); } m_searchTimer->start(300); } void MonitorTitleWidget::onCancelSearchBtnClicked(bool b) { this->m_cancelSearchBtn->setVisible(false); m_searchEdit->clearAndFocusEdit(); emit canelSearchEditFocus(); } void MonitorTitleWidget::mouseDoubleClickEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { if (window()->isMaximized()) window()->showNormal(); else if (! window()->isFullScreen()) window()->showMaximized(); } QFrame::mouseDoubleClickEvent(e); } /*void MonitorTitleWidget::paintEvent(QPaintEvent *event) { // QFrame::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); //draw background QPainterPath path; path.addRect(QRectF(0, 0, width(), height())); painter.setOpacity(1); painter.fillPath(path, QColor("#0d87ca")); //draw line // const QColor color(QColor(255, 255, 255, 127)); // int borderHeight = 1; // QPainterPath path; // path.moveTo(QPointF(x(), y() + borderHeight - 0.5)); // path.lineTo(QPointF(x() + width(), y() + borderHeight - 0.5)); // painter.setPen(QPen(color)); // painter.drawPath(path); //绘制圆角矩形 // painter.setPen(QPen(QColor("#e9eef0"), 0));//边框颜色 // painter.setBrush(QColor("#0d87ca"));//背景色 // painter.setOpacity(1); // QRectF r(1, 1, width() - 2, height() - 2);//左边 上边 右边 下边 // painter.drawRoundedRect(r, 5, 5); QFrame::paintEvent(event); }*/ void MonitorTitleWidget::initTitlebarLeftContent() { QWidget *w = new QWidget; m_titleLeftLayout = new QHBoxLayout(w); m_titleLeftLayout->setContentsMargins(6, 0, 0, 0); m_titleLeftLayout->setSpacing(0); emptyLabel = new QLabel; emptyLabel->setStyleSheet("QLabel{background-color:transparent;}"); m_titleLeftLayout->addWidget(emptyLabel); m_topLayout->addWidget(w, 1, Qt::AlignLeft); } void MonitorTitleWidget::initTitlebarMiddleContent() { QWidget *w = new QWidget; m_titleMiddleLayout = new QHBoxLayout(w); m_titleMiddleLayout->setContentsMargins(0, 0, 0, 0); QLabel *titleLabel = new QLabel; titleLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;}"); titleLabel->setText(tr("Kylin System Monitor")); m_titleMiddleLayout->addWidget(titleLabel); m_topLayout->addWidget(w); } void MonitorTitleWidget::initTitlebarRightContent() { QWidget *w = new QWidget; m_titleRightLayout = new QHBoxLayout(w); m_titleRightLayout->setContentsMargins(0, 0, 1, 0); m_titleRightLayout->setSpacing(0); m_topLayout->addWidget(w, 1, Qt::AlignRight); MyTristateButton *minBtn = new MyTristateButton; minBtn->setObjectName("MinButton"); connect(minBtn, SIGNAL(clicked()), this, SLOT(onMinBtnClicked())); // connect(minBtn, &MyTristateButton::clicked, this, [=] { // if (parentWidget() && parentWidget()->parentWidget()) { // parentWidget()->parentWidget()->showMinimized(); // } // }); /*MyTristateButton **/maxBtn = new MyTristateButton; maxBtn->setObjectName("MaxButton"); connect(maxBtn, SIGNAL(clicked()), this, SLOT(onMaxBtnClicked())); // connect(maxBtn, &MyTristateButton::clicked, this, [=] { // if (window()->isMaximized()) { // window()->showNormal(); // maxBtn->setObjectName("MaxButton"); // } // else { // window()->showMaximized(); // maxBtn->setObjectName("UnMaxButton"); // } // }); // connect(this, &MonitorTitleWidget::updateMaxBtn, this, [=]{ // if (window()->isMaximized()) { // maxBtn->setObjectName("UnMaxButton"); // } else { // maxBtn->setObjectName("MaxButton"); // } // }); MyTristateButton *closeBtn = new MyTristateButton; closeBtn->setObjectName("CloseButton"); connect(closeBtn, SIGNAL(clicked()), this, SLOT(onCloseBtnClicked())); // connect(closeBtn, &MyTristateButton::clicked, this, [=] { // window()->close(); // }); // connect(this, SIGNAL(updateMaxBtn()), this, SLOT(onUpdateMaxBtnStatusChanged())); m_titleRightLayout->addWidget(minBtn); m_titleRightLayout->addWidget(maxBtn); m_titleRightLayout->addWidget(closeBtn); } void MonitorTitleWidget::onMinBtnClicked() { if (parentWidget() && parentWidget()->parentWidget()) { parentWidget()->parentWidget()->showMinimized(); } } void MonitorTitleWidget::onMaxBtnClicked() { if (window()->isMaximized()) { window()->showNormal(); maxBtn->setObjectName("MaxButton"); } else { window()->showMaximized(); maxBtn->setObjectName("UnMaxButton"); } } void MonitorTitleWidget::onCloseBtnClicked() { window()->close(); } void MonitorTitleWidget::onUpdateMaxBtnStatusChanged() { if (window()->isMaximized()) { maxBtn->setObjectName("UnMaxButton"); } else { maxBtn->setObjectName("MaxButton"); } } void MonitorTitleWidget::initToolbarLeftContent() { QWidget *w = new QWidget; w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_toolLeftLayout = new QHBoxLayout(w); m_toolLeftLayout->setContentsMargins(0, 0, 0, 0); m_toolLeftLayout->setSpacing(10); MyUnderLineButton *processButton = new MyUnderLineButton(); processButton->setName(tr("Processes")); processButton->setChecked(true); MyUnderLineButton *resourcesButton = new MyUnderLineButton(); resourcesButton->setName(tr("Resources")); resourcesButton->setChecked(false); MyUnderLineButton *disksButton = new MyUnderLineButton(); disksButton->setName(tr("File Systems")); disksButton->setChecked(false); connect(processButton, &MyUnderLineButton::clicked, this, [=] { emit this->changePage(0); processButton->setChecked(true); resourcesButton->setChecked(false); disksButton->setChecked(false); if (!m_searchEdit->isVisible()) m_searchEdit->setVisible(true); }); connect(resourcesButton, &MyUnderLineButton::clicked, this, [=] { emit this->changePage(1); processButton->setChecked(false); resourcesButton->setChecked(true); disksButton->setChecked(false); if (m_searchEdit->isVisible()) m_searchEdit->setVisible(false); m_searchEdit->clearEdit(); emit canelSearchEditFocus(); }); connect(disksButton, &MyUnderLineButton::clicked, this, [=] { emit this->changePage(2); processButton->setChecked(false); resourcesButton->setChecked(false); disksButton->setChecked(true); if (m_searchEdit->isVisible()) m_searchEdit->setVisible(false); m_searchEdit->clearEdit(); emit canelSearchEditFocus(); }); m_toolLeftLayout->addStretch(); m_toolLeftLayout->addWidget(processButton); m_toolLeftLayout->addWidget(resourcesButton); m_toolLeftLayout->addWidget(disksButton); m_toolLeftLayout->addStretch(); // m_bottomLayout->addWidget(w); m_bottomLayout->addWidget(w, 1, Qt::AlignLeft); } void MonitorTitleWidget::initToolbarRightContent() { QWidget *w = new QWidget; m_toolRightLayout = new QHBoxLayout(w); m_toolRightLayout->setContentsMargins(0, 3, 6, 10); m_toolRightLayout->setSpacing(5); m_cancelSearchBtn = new QPushButton; m_cancelSearchBtn->setStyleSheet("QPushButton{background-color:transparent;text-align:center;font-family: 方正黑体_GBK;font-size:11px;color:#ffffff;}QPushButton:hover{color:#000000;}"); m_cancelSearchBtn->setText(tr("Cancel")); m_cancelSearchBtn->setFocusPolicy(Qt::NoFocus); m_cancelSearchBtn->setFixedSize(46, 25); m_cancelSearchBtn->setVisible(false); connect(m_cancelSearchBtn, SIGNAL(clicked(bool)), SLOT(onCancelSearchBtnClicked(bool))); connect(m_searchEdit, &MySearchEdit::textChanged, this, &MonitorTitleWidget::handleSearchTextChanged, Qt::QueuedConnection); m_toolRightLayout->addWidget(m_searchEdit); m_toolRightLayout->addWidget(m_cancelSearchBtn); m_bottomLayout->addWidget(w, 1, Qt::AlignRight); } void MonitorTitleWidget::initWidgets() { m_searchEdit = new MySearchEdit(); m_searchEdit->setPlaceHolder(tr("Enter the relevant info of process")); m_searchEdit->setFixedSize(222, 30); m_searchEdit->getLineEdit()->installEventFilter(this); m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); QWidget *topWidget = new QWidget; m_topLayout = new QHBoxLayout(topWidget); m_topLayout->setContentsMargins(0, 0, 0, 0); m_topLayout->setSpacing(0); m_layout->addWidget(topWidget, 0, Qt::AlignTop); QWidget *bottomWidget = new QWidget; m_bottomLayout = new QHBoxLayout(bottomWidget); m_bottomLayout->setContentsMargins(0, 0, 0, 0); m_bottomLayout->setSpacing(0); m_layout->addWidget(bottomWidget, 0, Qt::AlignBottom); this->setLayout(m_layout); initTitlebarLeftContent(); initTitlebarMiddleContent(); initTitlebarRightContent(); initToolbarLeftContent(); initToolbarRightContent(); } youker-assistant/plugins/systemmonitor/processworker.h0000664000175000017500000000403613260315532022526 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PROCESSWORKER_H #define PROCESSWORKER_H #include #include #include #include #include using std::string; class ProcessWorker { ProcessWorker& operator=(const ProcessWorker&); ProcessWorker(const ProcessWorker&); typedef std::map UserMap; static UserMap users; public: ProcessWorker(pid_t pid, gint cpus, guint64 cpu_time); ~ProcessWorker(); typedef std::map List; typedef List::iterator Iterator; static ProcessWorker* find(pid_t pid); static Iterator begin() { return ProcessWorker::all.begin(); } static Iterator end() { return ProcessWorker::all.end(); } static List all; void setProcData(); void set_user(guint uid); std::string lookup_user(guint uid); std::string user; gulong mem; gulong start_time; guint64 cpu_time; guint status; guint pcpu; gint nice; gchar *tooltip; gchar *name; gchar *arguments; const pid_t pid; guint uid; static std::map cpu_times; gchar *unit; gchar *session; gchar *seat; // gchar *security_context; // gchar *cgroup_name; gint num_cpus; guint64 cpu_total_time; unsigned frequency; }; #endif // PROCESSWORKER_H youker-assistant/plugins/systemmonitor/filesystemlistwidget.h0000664000175000017500000000537713260315532024113 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 FILESYSTEMLISTWIDGET_H #define FILESYSTEMLISTWIDGET_H #include "filesystemlistitem.h" #include #include #include #include class FileSystemListWidget : public QWidget { Q_OBJECT public: FileSystemListWidget(QList toBeDisplayedColumns, QWidget *parent = 0); ~FileSystemListWidget(); void readyToHideScrollbar(); void clearItems(); void addSelectedItems(QList items, bool recordLastItem=true); void clearSelectedItems(bool clearLast=true); void refreshFileSystemItems(QList items); int getItemsTotalHeight(); int getBottomOffset(); int getScrollbarY(); int getScrollbarHeight(); int getTheScrollAreaHeight(); QList getTitleItemsWidths(); int setOffset(int offset); bool mouseAtScrollArea(int x); bool mouseAtTitleArea(int y); signals: void rightMouseClickedItem(QPoint pos); void changeColumnVisible(int index, bool visible, QList columnVisible); public slots: void hideScrollbar(); protected: virtual void leaveEvent(QEvent *event); void mouseMoveEvent(QMouseEvent *mouseEvent); void mousePressEvent(QMouseEvent *mouseEvent); void mouseReleaseEvent(QMouseEvent *mouseEvent); void paintEvent(QPaintEvent *); void wheelEvent(QWheelEvent *event); void paintScrollbar(QPainter *painter); void mouseDoubleClickEvent(QMouseEvent *event) override; private: QTimer *m_hideScrollbarTimer = nullptr; FileSystemListItem *m_lastItem = nullptr; QList *m_listItems; QList *m_selectedItems; QList columnTitles; QList m_columnWidths; QList m_columnVisibles; bool m_mouseAtScrollArea; bool m_mouseDragScrollbar; int m_origOffset; int m_offSet; int m_rowHeight; int m_scrollbarWidth; int m_titleHeight; int m_titleHoverColumn; int m_titlePadding; int m_titlePressColumn; }; #endif // PROCESSLISTWIDGET_H youker-assistant/plugins/systemmonitor/filesystemworker.h0000664000175000017500000000274013260315532023234 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 FILESYSTEMWORKER_H #define FILESYSTEMWORKER_H #include #include #include "filesystemdata.h" class FileSystemWorker : public QObject { Q_OBJECT public: explicit FileSystemWorker(QObject *parent = 0); ~FileSystemWorker(); void removeDiskItem(const QString &devname); FileSystemData *getDiskInfo(const QString &devname); QList diskInfoList() const; void addDiskInfo(const QString &devname, FileSystemData *info); void removeDiskInfo(const QString &devname); bool isDeviceContains(const QString &devname); public slots: void onFileSystemListChanged(); private: QMap m_diskInfoList; }; #endif // FILESYSTEMWORKER_H youker-assistant/plugins/systemmonitor/memorywidget.cpp0000664000175000017500000000256213260315532022667 0ustar fengfeng#include "memorywidget.h" #include "memorycircle.h" #include #include MemoryWidget::MemoryWidget(QWidget *parent) : QWidget(parent) { mainLayout = new QHBoxLayout(this); mainLayout->setContentsMargins(0, 0, 0, 0); QWidget *w = new QWidget; m_widgetLayout = new QVBoxLayout(w); m_widgetLayout->setContentsMargins(0, 0, 0, 0); m_widgetLayout->setSpacing(0); m_title = new QLabel(tr("Memory")); m_title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_title->setStyleSheet("background:transparent;font-size:24px;color:#000000"); /*QFont font = m_title->font(); font.setPointSize(24); font.setWeight(QFont::Light); m_title->setFont(font);*/ m_memoryCircle = new MemoryCircle; connect(m_memoryCircle, SIGNAL(rebackMemoryInfo(QString,double)), this, SIGNAL(rebackMemoryInfo(QString,double))); m_widgetLayout->addWidget(m_title); m_widgetLayout->addWidget(m_memoryCircle); mainLayout->addWidget(w, 0, Qt::AlignCenter); } MemoryWidget::~MemoryWidget() { delete m_title; delete m_memoryCircle; QLayoutItem *child; while ((child = m_widgetLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete mainLayout; } void MemoryWidget::onUpdateMemoryStatus() { m_memoryCircle->onUpdateMemoryStatus(); } youker-assistant/plugins/systemmonitor/networkwidget.h0000664000175000017500000000271613260315532022516 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 NETWORKWIDGET_H #define NETWORKWIDGET_H #include #include #include #include #include class NetworkFlow; class NetworkWidget : public QWidget { Q_OBJECT public: NetworkWidget(QWidget *parent = 0); ~NetworkWidget(); public slots: void onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateKbs, long sentRateKbs); void setRadioButtonRowStatus(); private: QLabel *m_title = nullptr; NetworkFlow *m_networkFlow = nullptr; QVBoxLayout *m_widgetLayout = nullptr; QHBoxLayout *mainLayout = nullptr; // QRadioButton *math1_radio; // QRadioButton *math2_radio; }; #endif // NETWORKWIDGET_H youker-assistant/plugins/systemmonitor/processcategory.h0000664000175000017500000000253713260315532023036 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PROCESSCATEGORY_H #define PROCESSCATEGORY_H #include #include class MyHoverButton; class ProcessCategory : public QWidget { Q_OBJECT public: explicit ProcessCategory(int tabIndex, QWidget *parent = 0); ~ProcessCategory(); signals: void activeWhoseProcessList(int index); private: int width; int height; int activeIndex; QHBoxLayout *layout = nullptr; MyHoverButton *activeProcessButton = nullptr; MyHoverButton *userProcessButton = nullptr; MyHoverButton *allProcessButton = nullptr; }; #endif // PROCESSCATEGORY_H youker-assistant/plugins/systemmonitor/filesystemdata.cpp0000664000175000017500000000444413260315532023172 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filesystemdata.h" #include FileSystemData::FileSystemData(QObject *parent) : QObject(parent) { } const QString FileSystemData::deviceName() const { return m_devName; } void FileSystemData::setDevName(const QString &name) { if (name != m_devName) m_devName = name; } const QString FileSystemData::mountDir() const { return m_mountDir; } const QString FileSystemData::diskType() const { return m_diskType; } const QString FileSystemData::totalCapacity() const { return m_totalCapacity; } const QString FileSystemData::freeCapacity() const { return m_freeCapacity; } const QString FileSystemData::availCapacity() const { return m_availCapacity; } const QString FileSystemData::usedCapactiy() const { return m_usedCapactiy; } const int FileSystemData::usedPercentage() { return m_percentage; } void FileSystemData::updateDiskInfo(QString mountDir, QString diskType, QString totalCapacity, QString freeCapacity, QString availCapacity, QString usedCapactiy, int percentage) { if (mountDir != m_mountDir) m_mountDir = mountDir; if (diskType != m_diskType) m_diskType = diskType; if (totalCapacity != m_totalCapacity) m_totalCapacity = totalCapacity; if (freeCapacity != m_freeCapacity) m_freeCapacity = freeCapacity; if (availCapacity != m_availCapacity) m_availCapacity = availCapacity; if (usedCapactiy != m_usedCapactiy) m_usedCapactiy = usedCapactiy; if (percentage != m_percentage) m_percentage = percentage; } youker-assistant/plugins/systemmonitor/processmanager.cpp0000664000175000017500000000373113260315532023163 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "processmanager.h" #include #include #include #include ProcessManager::ProcessManager(QObject *parent) : QObject(parent) { process_dialog = new SystemMonitor; } ProcessManager::~ProcessManager() { if (process_dialog) { delete process_dialog; process_dialog = nullptr; } } QString ProcessManager::getGuid() { return "UBUNTU-KYLIN-PROCESS"; } QString ProcessManager::getName() { return tr("System Monitor"); } QString ProcessManager::getDescribe() { return tr("Help user to kill process");//方便用户杀掉进程 } QString ProcessManager::getPicture() { return "processmanager.png"; } void ProcessManager::doAction() { // int windowWidth = QApplication::desktop()->width(); // int windowHeight = QApplication::desktop()->height(); // process_dialog->resetSkin(); // process_dialog->move((windowWidth - 850) / 2,(windowHeight - 476) / 2); process_dialog->show(); process_dialog->raise(); process_dialog->setFocus(); } QWidget *ProcessManager::centralWidget() { return process_dialog; } #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) Q_EXPORT_PLUGIN2(ProcessManager, ProcessManager) #endif youker-assistant/plugins/systemmonitor/resourcesdialog.cpp0000664000175000017500000002057713260315532023353 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "resourcesdialog.h" #include "cpuratewidget.h" #include "memorywidget.h" #include "networkwidget.h" #include "resourcescategory.h" #include #include #include #include typedef struct _net { guint64 last_in, last_out; GTimeVal time; } net; net netinfo; inline void getNetworkBytesData(unsigned long long int &receiveBytes, unsigned long long int &sendBytes, unsigned long long int &receiveRateBytes, unsigned long long int &sendRateBytes) { glibtop_netlist netlist; char **ifnames; guint32 i; guint64 in = 0, out = 0; GTimeVal time; guint64 din, dout; ifnames = glibtop_get_netlist(&netlist); for (i = 0; i < netlist.number; ++i) { glibtop_netload netload; glibtop_get_netload(&netload, ifnames[i]); if (netload.if_flags & (1 << GLIBTOP_IF_FLAGS_LOOPBACK)) continue; /* Skip interfaces without any IPv4/IPv6 address (or those with only a LINK ipv6 addr) However we need to be able to exclude these while still keeping the value so when they get online (with NetworkManager for example) we don't get a suddent peak. Once we're able to get this, ignoring down interfaces will be possible too. */ if (not (netload.flags & (1 << GLIBTOP_NETLOAD_ADDRESS6) and netload.scope6 != GLIBTOP_IF_IN6_SCOPE_LINK) and not (netload.flags & (1 << GLIBTOP_NETLOAD_ADDRESS))) continue; /* Don't skip interfaces that are down (GLIBTOP_IF_FLAGS_UP) to avoid spikes when they are brought up */ in += netload.bytes_in; out += netload.bytes_out; } g_strfreev(ifnames); g_get_current_time(&time); if (in >= netinfo.last_in && out >= netinfo.last_out && netinfo.time.tv_sec != 0) { float dtime; dtime = time.tv_sec - netinfo.time.tv_sec + (double) (time.tv_usec - netinfo.time.tv_usec) / G_USEC_PER_SEC; din = static_cast((in - netinfo.last_in) / dtime); dout = static_cast((out - netinfo.last_out) / dtime); } else { /* Don't calc anything if new data is less than old (interface removed, counters reset, ...) or if it is the first time */ din = 0; dout = 0; } netinfo.last_in = in; netinfo.last_out = out; netinfo.time = time; receiveBytes = in; sendBytes = out; receiveRateBytes = din; sendRateBytes = dout; } unsigned long long getCpuTimeData(unsigned long long &workTime) { FILE *file = fopen("/proc/stat", "r"); if (file == NULL) { return 0; } char buffer[1024] = {0}; unsigned long long user = 0, nice = 0, system = 0, idle = 0; unsigned long long iowait = 0, irq = 0, softirq = 0, steal = 0, guest = 0, guestnice = 0; char* ret = fgets(buffer, sizeof(buffer) - 1, file); if (ret == NULL) { fclose(file); return 0; } fclose(file); sscanf(buffer, "cpu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu", &user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal, &guest, &guestnice); workTime = user + nice + system; return user + nice + system + idle + iowait + irq + softirq + steal; } ResouresDialog::ResouresDialog(QWidget *parent) :QWidget(parent) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setAcceptDrops(true); setAttribute(Qt::WA_NoMousePropagation); this->setObjectName("ResouresDialog"); //cpu m_cpuTotalTime = 0; m_cpuworkTime = 0; m_prevCpuTotalTime = 0; m_prevCpuWorkTime = 0; m_hlayout = new QHBoxLayout(this); m_hlayout->setContentsMargins(0, 0, 0, 0); splitter = new QSplitter(this); splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); splitter->setOrientation(Qt::Horizontal); splitter->setHandleWidth(1); m_stack = new QStackedWidget(this); m_stack->setStyleSheet("QStackedWidget{background: rgb(255, 255, 255);}"); // m_stack->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_resourcesCategory = new ResourcesCategory(0); connect(m_resourcesCategory, SIGNAL(switchResoucesPage(int)), this, SLOT(onSwitchResoucesPage(int))); // m_vlayout = new QVBoxLayout; m_cpuWidget = new CpuRateWidget(); m_memoryWidget = new MemoryWidget(); m_networkWidget = new NetworkWidget(); // m_vlayout->addWidget(m_cpuWidget, 0, Qt::AlignHCenter); // m_vlayout->addWidget(m_memoryWidget, 0, Qt::AlignHCenter); // m_vlayout->addWidget(m_networkWidget, 0, Qt::AlignHCenter); m_stack->addWidget(m_cpuWidget); m_stack->addWidget(m_memoryWidget); m_stack->addWidget(m_networkWidget); m_stack->setCurrentWidget(m_cpuWidget); /*m_hlayout->addWidget(m_resourcesCategory); // m_hlayout->addLayout(m_vlayout); m_hlayout->addWidget(m_stack);*/ splitter->addWidget(m_resourcesCategory); splitter->addWidget(m_stack); m_hlayout->addWidget(splitter); connect(this, SIGNAL(updateNetworkStatus(long,long,long,long)), m_networkWidget, SLOT(onUpdateNetworkStatus(long,long,long,long)), Qt::QueuedConnection); connect(this, SIGNAL(updateMemoryStatus()), m_memoryWidget, SLOT(onUpdateMemoryStatus())); connect(this, SIGNAL(updateCpuStatus(double)), m_cpuWidget, SLOT(onUpdateCpuPercent(double)), Qt::QueuedConnection); connect(m_memoryWidget, &MemoryWidget::rebackMemoryInfo, this, [=] (const QString &info, double percent) { m_resourcesCategory->onUpdateMemoryPercent(info, percent); }); connect(this, SIGNAL(updateCpuStatus(double)), m_resourcesCategory, SLOT(onUpdateCpuPercent(double)), Qt::QueuedConnection); connect(this, SIGNAL(updateNetworkStatus(long,long,long,long)), m_resourcesCategory, SLOT(onUpdateNetworkStatus(long,long,long,long)), Qt::QueuedConnection); updateStatusTimer = new QTimer(this); connect(updateStatusTimer, SIGNAL(timeout()), this, SLOT(updateResourceStatus())); updateStatusTimer->start(2000); } ResouresDialog::~ResouresDialog() { delete m_resourcesCategory; if (m_stack) { foreach (QObject *child, m_stack->children()) { QWidget *widget = static_cast(child); widget->deleteLater(); } delete m_stack; } /* // if (m_vlayout) { // foreach (QObject *child, m_vlayout->children()) { // QWidget *widget = static_cast(child); // widget->deleteLater(); // } // } QLayoutItem *child; while ((child = m_vlayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; }*/ delete m_hlayout; } void ResouresDialog::onSwitchResoucesPage(int index) { if (index < 3 && index >= 0) m_stack->setCurrentIndex(index); } void ResouresDialog::startCpuTimer() { m_cpuWidget->startTimer(); } void ResouresDialog::stopCpuTimer() { m_cpuWidget->stopTimer(); } void ResouresDialog::updateResourceStatus() { //cpu m_prevCpuWorkTime = m_cpuworkTime; m_prevCpuTotalTime = m_cpuTotalTime; m_cpuTotalTime = getCpuTimeData(m_cpuworkTime); if (m_prevCpuWorkTime != 0 && m_prevCpuTotalTime != 0) { emit updateCpuStatus((m_cpuworkTime - m_prevCpuWorkTime) * 100.0 / (m_cpuTotalTime - m_prevCpuTotalTime)); } else { emit updateCpuStatus(0); } //memory emit this->updateMemoryStatus(); //network getNetworkBytesData(m_totalRecvBytes, m_totalSentBytes, m_rateRecvBytes, m_rateSentBytes); emit this->updateNetworkStatus(m_totalRecvBytes, m_totalSentBytes, m_rateRecvBytes, m_rateSentBytes); } youker-assistant/plugins/systemmonitor/cpuratewidget.h0000664000175000017500000000330713260315532022465 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CPURATEWIDGET_H #define CPURATEWIDGET_H #include #include #include #include class CpuBallWidget; class CpuRateWidget : public QWidget { Q_OBJECT public: CpuRateWidget(QWidget *parent = 0); ~CpuRateWidget(); void refreshData(double cpu); void startTimer(); void stopTimer(); void initWidgets(); public slots: void onUpdateCpuPercent(double value); private: QLabel *m_cpuRateTitle = nullptr; QLabel *m_cpuRateText = nullptr; QLabel *m_cpuIdleRateTitle = nullptr; QLabel *m_cpuIdleRateText = nullptr; QLabel *m_cpuRunTimeTitle = nullptr; QLabel *m_cpuRunTimeText = nullptr; QLabel *m_cpuIdleTimeTitle = nullptr; QLabel *m_cpuIdleTimeText = nullptr; CpuBallWidget *m_cpuBall = nullptr; QHBoxLayout *m_contentLayout = nullptr; QVBoxLayout *m_labelLayout = nullptr; QVBoxLayout *m_layout = nullptr; }; #endif // CPURATEWIDGET_H youker-assistant/plugins/systemmonitor/filesystemdialog.cpp0000664000175000017500000001146613260315532023522 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filesystemdialog.h" #include #include #include #include #include #include "filesystemdata.h" #include "filesystemworker.h" #include "filesystemwatcher.h" FileSystemDialog::FileSystemDialog(QList toBeDisplayedColumns, QSettings *settings, QWidget *parent) :QWidget(parent) ,proSettings(settings) // ,m_monitorFile("/home/lixiang/testwatcher/1.c") // ,m_monitorFile("/etc/mtab") { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setAcceptDrops(true); setAttribute(Qt::WA_NoMousePropagation); // setAttribute(Qt::WA_TranslucentBackground); this->setObjectName("FileSystemDialog"); m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); m_fileSysListWidget = new FileSystemListWidget(toBeDisplayedColumns); connect(m_fileSysListWidget, &FileSystemListWidget::rightMouseClickedItem, this, &FileSystemDialog::popupMenu, Qt::QueuedConnection); connect(m_fileSysListWidget, SIGNAL(changeColumnVisible(int,bool,QList)), this, SIGNAL(changeColumnVisible(int,bool,QList))); m_layout->addWidget(m_fileSysListWidget); m_fileSystemWorker = new FileSystemWorker; m_fileSystemWorker->moveToThread(qApp->thread()); // this->initFileSystemMonitor(); m_menu = new QMenu(); m_refreshAction = new QAction(tr("Refresh"), this); connect(m_refreshAction, &QAction::triggered, this, &FileSystemDialog::refreshFileSysList); m_menu->addAction(m_refreshAction); this->refreshFileSysList(); m_fileSystemWatcher = FileSystemWatcher::instance(); connect(m_fileSystemWatcher, &FileSystemWatcher::deviceAdded, this, [=] (const QString &dev) { this->refreshFileSysList(); }); connect(m_fileSystemWatcher, &FileSystemWatcher::deviceRemoved, this, [=] (const QString &dev) { this->refreshFileSysList(); }); //refresh file system info every 10 minutes m_timer = new QTimer(this); connect(m_timer,SIGNAL(timeout()),this,SLOT(refreshFileSysList())); m_timer->start(10000); } FileSystemDialog::~FileSystemDialog() { // m_fileSystemMonitor->removePath(m_monitorFile); // delete m_fileSystemMonitor; if (m_timer != NULL) { disconnect(m_timer,SIGNAL(timeout()),this,SLOT(refreshProcproperties())); if(m_timer->isActive()) { m_timer->stop(); } delete m_timer; m_timer = NULL; } m_fileSystemWorker->deleteLater(); delete m_fileSysListWidget; delete m_refreshAction; delete m_menu; delete m_layout; } void FileSystemDialog::refreshFileSysList() { m_fileSystemWorker->onFileSystemListChanged(); QList items; for (FileSystemData *info : m_fileSystemWorker->diskInfoList()) { FileSystemListItem *item = new FileSystemListItem(info); items << item; } m_fileSysListWidget->refreshFileSystemItems(items); } void FileSystemDialog::popupMenu(QPoint pos) { m_menu->exec(pos); } FileSystemListWidget* FileSystemDialog::getFileSysView() { return m_fileSysListWidget; } void FileSystemDialog::initFileSystemMonitor() { /*int fd = inotify_init(); int wd = inotify_add_watch (fd, path, mask); // int ret = inotify_rm_watch (fd, wd);*/ /*m_fileSystemMonitor = new QFileSystemWatcher(this); // m_fileSystemMonitor->addPath(m_monitorFile); QFileInfo info(m_monitorFile); m_fileSystemMonitor->addPath(info.absoluteFilePath()); connect(m_fileSystemMonitor, SIGNAL(directoryChanged(QString)), this, SLOT(onDirectoryChanged(QString))); connect(m_fileSystemMonitor, &QFileSystemWatcher::fileChanged, [=] (const QString &path) { qDebug()<< "file path===================="<type() == QEvent::LayoutRequest) // setFixedHeight(m_centralLayout->sizeHint().height()); // return QWidget::event(event); //} youker-assistant/plugins/systemmonitor/processdata.h0000664000175000017500000000261213260315532022124 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PROCESSDATA_H #define PROCESSDATA_H #include #include #include #include class ProcData { public: pid_t pid; uint cpu; long m_memory; long m_nice; QPixmap iconPixmap; QString processName; QString displayName; QString commandLine; QString path; QString user; QString m_status; QString m_session; QString cpu_duration_time; }; typedef QSharedPointer ProcDataPtr; typedef QList ProcDataPtrList; Q_DECLARE_METATYPE(ProcData) Q_DECLARE_METATYPE(ProcDataPtr) Q_DECLARE_METATYPE(ProcDataPtrList) #endif // PROCESSDATA_H youker-assistant/plugins/systemmonitor/filesystemlistwidget.cpp0000664000175000017500000005157713260315532024451 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filesystemlistwidget.h" #include #include #include #include #include #include #include #include #include #include #include FileSystemListWidget::FileSystemListWidget(QList toBeDisplayedColumns, QWidget *parent) : QWidget(parent) ,m_titlePadding(10) ,m_titleHeight(34) ,m_rowHeight(29) ,m_offSet(0) ,m_origOffset(0) ,m_scrollbarWidth(10) ,m_titleHoverColumn(-1) ,m_titlePressColumn(-1) ,m_mouseAtScrollArea(false) ,m_mouseDragScrollbar(false) { this->m_lastItem = NULL; this->m_listItems = new QList(); this->m_selectedItems = new QList(); this->columnTitles << tr("Device") << tr("Directory") << tr("Type") << tr("Total") << tr("Free") << tr("Available") << tr("Used"); QList widths; widths << 150 << -1 << 60 << 60 << 60 << 60 << 180;//-1时让改行填充所有剩余空间 QFont font; font.setPixelSize(12);//需要和填充所有剩余空间的那个的文字字体大小一致 font.setPointSize(9) QFontMetrics fm(font); this->m_columnWidths.clear(); for (int i = 0; i < widths.length(); i++) { if (widths[i] == -1) { this->m_columnWidths << widths[i]; } else {//-1时让改行填充所有剩余空间 int maxWidth = fm.width(this->columnTitles[i]) + this->m_titlePadding + /*m_upArrowPixmap.width() / m_upArrowPixmap.devicePixelRatio() +*/ 2 * 2; this->m_columnWidths << std::max(widths[i], maxWidth); } } this->m_columnVisibles.clear(); for (int i = 0; i < toBeDisplayedColumns.count(); i++) { this->m_columnVisibles.append(toBeDisplayedColumns[i]); } this->setFocus(); } FileSystemListWidget::~FileSystemListWidget() { if (this->m_hideScrollbarTimer != NULL) { disconnect(this->m_hideScrollbarTimer,SIGNAL(timeout()),this,SLOT(hideScrollbar())); if(this->m_hideScrollbarTimer->isActive()) { this->m_hideScrollbarTimer->stop(); } delete this->m_hideScrollbarTimer; this->m_hideScrollbarTimer = nullptr; } delete this->m_lastItem; delete this->m_listItems; delete this->m_selectedItems; } void FileSystemListWidget::clearItems() { qDeleteAll(this->m_listItems->begin(), this->m_listItems->end()); this->m_listItems->clear(); } void FileSystemListWidget::addSelectedItems(QList items, bool recordLastItem) { this->m_selectedItems->append(items); if (recordLastItem && this->m_selectedItems->count() > 0) { this->m_lastItem = this->m_selectedItems->last(); } } void FileSystemListWidget::clearSelectedItems(bool clearLast) { this->m_selectedItems->clear(); if (clearLast) { this->m_lastItem = NULL; } } void FileSystemListWidget::refreshFileSystemItems(QList items) { QList *allItems = new QList(); FileSystemListItem *newLastItem = NULL; for (FileSystemListItem *item:items) { for (FileSystemListItem *selectionItem:*this->m_selectedItems) { if (item->isSameItem(selectionItem)) { allItems->append(item); break; } } } if (this->m_lastItem != NULL) { for (FileSystemListItem *item:items) { if (item->isSameItem(this->m_lastItem)) { newLastItem = item; break; } } } clearItems(); this->m_listItems->append(items); clearSelectedItems(); addSelectedItems(*allItems, false); this->m_lastItem = newLastItem; this->m_offSet = setOffset(this->m_offSet); repaint(); } void FileSystemListWidget::leaveEvent(QEvent * event) { hideScrollbar(); QWidget::leaveEvent(event); } void FileSystemListWidget::hideScrollbar() { this->m_mouseAtScrollArea = false; this->m_origOffset = this->m_offSet; repaint(); } void FileSystemListWidget::mouseMoveEvent(QMouseEvent *mouseEvent) { if (this->m_mouseDragScrollbar) { this->m_offSet = setOffset((mouseEvent->y() - getScrollbarHeight() / 2 - this->m_titleHeight) / (getTheScrollAreaHeight() * 1.0) * this->getItemsTotalHeight()); repaint(); } else if (mouseAtScrollArea(mouseEvent->x()) != this->m_mouseAtScrollArea) { this->m_mouseAtScrollArea = mouseAtScrollArea(mouseEvent->x()); repaint(); } } void FileSystemListWidget::mouseDoubleClickEvent(QMouseEvent *event) { bool isTitleArea = mouseAtTitleArea(event->y()); bool isScrollArea = mouseAtScrollArea(event->x()); if (!isTitleArea && !isScrollArea) { int pressedItemIndex = (this->m_offSet + event->y() - this->m_titleHeight) / this->m_rowHeight; if (pressedItemIndex >= this->m_listItems->count()) { clearSelectedItems(); repaint(); } else { if (event->button() == Qt::LeftButton) { FileSystemListItem *pressItem = (*this->m_listItems)[pressedItemIndex]; bool pressInSelectionArea = false; for (FileSystemListItem *item : *this->m_selectedItems) { if (item == pressItem) { pressInSelectionArea = true; break; } } if (pressInSelectionArea) { //open the mount dir FileSystemListItem *item = static_cast(pressItem); QString targetPath = QString("file://%1").arg(item->getDirectory()); QDesktopServices::openUrl(QUrl(targetPath));//xdg-open } } } } QWidget::mouseDoubleClickEvent(event); } void FileSystemListWidget::mousePressEvent(QMouseEvent *mouseEvent) { setFocus(); bool isTitleArea = mouseAtTitleArea(mouseEvent->y()); bool isScrollArea = mouseAtScrollArea(mouseEvent->x()); if (isTitleArea) {//点击列表的标题栏区域 if (mouseEvent->button() == Qt::RightButton) { if (m_columnVisibles.count() == this->columnTitles.count()) { QMenu *menu = new QMenu(); menu->setObjectName("MonitorMenu"); for (int i = 0; i < m_columnVisibles.count(); i++) { if (i != 0) {//让第一行总是显示,不可以设置显示或者不显示,其他行可以设置 QAction *action = new QAction(menu); action->setText(this->columnTitles[i]); action->setCheckable(true); action->setChecked(m_columnVisibles[i]); connect(action, &QAction::triggered, this, [this, action, i] { m_columnVisibles[i] = !m_columnVisibles[i]; emit this->changeColumnVisible(i, m_columnVisibles[i], m_columnVisibles); repaint(); }); menu->addAction(action); } } menu->exec(this->mapToGlobal(mouseEvent->pos())); delete menu; } } } else if (isScrollArea) {//点击滚动条区域 int barHeight = getScrollbarHeight(); int barY = getScrollbarY(); if (mouseEvent->y() > barY && mouseEvent->y() < barY + barHeight) { this->m_mouseDragScrollbar = true; } else { this->m_offSet = setOffset((mouseEvent->y() - barHeight / 2 - this->m_titleHeight) / (getTheScrollAreaHeight() * 1.0) * this->getItemsTotalHeight()); repaint(); } } else { int pressedItemIndex = (this->m_offSet + mouseEvent->y() - this->m_titleHeight) / this->m_rowHeight; if (pressedItemIndex >= this->m_listItems->count()) { clearSelectedItems(); repaint(); } else { if (mouseEvent->button() == Qt::LeftButton) { if (pressedItemIndex < this->m_listItems->count()) { if (mouseEvent->modifiers() == Qt::ControlModifier) { FileSystemListItem *item = (*this->m_listItems)[pressedItemIndex]; if (this->m_selectedItems->contains(item)) { this->m_selectedItems->removeOne(item); } else { QList items = QList(); items << item; addSelectedItems(items); } } else { clearSelectedItems(); QList items = QList(); items << (*this->m_listItems)[pressedItemIndex]; addSelectedItems(items); } repaint(); } } else if (mouseEvent->button() == Qt::RightButton) { FileSystemListItem *pressItem = (*this->m_listItems)[pressedItemIndex]; bool pressInSelectionArea = false; for (FileSystemListItem *item : *this->m_selectedItems) { if (item == pressItem) { pressInSelectionArea = true; break; } } if (pressInSelectionArea) { emit this->rightMouseClickedItem(this->mapToGlobal(mouseEvent->pos())); } } } } } void FileSystemListWidget::mouseReleaseEvent(QMouseEvent *) { if (this->m_mouseDragScrollbar) { this->m_mouseDragScrollbar = false; repaint(); } else { if (this->m_titlePressColumn != -1) { this->m_titlePressColumn = -1; repaint(); } } } void FileSystemListWidget::wheelEvent(QWheelEvent *event) { if (event->orientation() == Qt::Vertical) { this->m_origOffset = this->m_offSet; qreal scrollStep = event->angleDelta().y() / 100.0; this->m_offSet = setOffset(this->m_offSet - scrollStep * this->m_rowHeight); repaint(); } event->accept(); } void FileSystemListWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QList titleItemsWidths = getTitleItemsWidths(); painter.setOpacity(0.05); int penWidth = 1; QPainterPath framePath; framePath.addRoundedRect(QRect(rect().x() + penWidth, rect().y() + penWidth, rect().width() - penWidth * 2, rect().height() - penWidth * 2), 5, 5);//背景弧度 painter.setClipPath(framePath); //标题的背景 if (this->m_titleHeight > 0) { QPainterPath titlePath; titlePath.addRect(QRectF(rect().x(), rect().y(), rect().width(), this->m_titleHeight)); painter.setOpacity(0.02); painter.fillPath(titlePath, QColor("#ffffff")); } int title_Y = 0; int title_Height = 0; if (this->m_titleHeight > 0) { int counter = 0; int posX = 0; for (int itemWidth:titleItemsWidths) { if (itemWidth > 0) { //标题文字 painter.setOpacity(1); QFont font = painter.font(); font.setPixelSize(12); painter.setFont(font); painter.setPen(QPen(QColor("#999999"))); if (this->columnTitles[counter] == tr("Device") || this->columnTitles[counter] == tr("Directory") || this->columnTitles[counter] == tr("Used")) painter.drawText(QRect(posX + this->m_titlePadding, 0, itemWidth, this->m_titleHeight), Qt::AlignBottom | Qt::AlignLeft, this->columnTitles[counter]); else painter.drawText(QRect(posX, 0, itemWidth - this->m_titlePadding, this->m_titleHeight), Qt::AlignBottom | Qt::AlignRight, this->columnTitles[counter]); //水平下划线 painter.setOpacity(0.8); QPainterPath h_separatorPath; h_separatorPath.addRect(QRectF(posX, rect().y() + this->m_titleHeight - 1, itemWidth, 1)); painter.fillPath(h_separatorPath, QColor("#e0e0e0")); if (counter < titleItemsWidths.size()) {//垂直分割线 QPainterPath v_separatorPath; v_separatorPath.addRect(QRectF(rect().x() + posX - 1, rect().y() + 5, 1, this->m_titleHeight - 5)); painter.fillPath(v_separatorPath, QColor("#e0e0e0")); } posX += itemWidth; } counter++; } title_Y += this->m_titleHeight; title_Height += this->m_titleHeight; } //去掉列表标题栏后的列表显示区域的背景 painter.setOpacity(0.05); QPainterPath backgroundPath; backgroundPath.addRect(QRectF(rect().x(), rect().y() + this->m_titleHeight, rect().width(), rect().height() - this->m_titleHeight)); painter.fillPath(backgroundPath, QColor("#ffffff")); //挂载的磁盘文件系统信息 QPainterPath scrollAreaPath; scrollAreaPath.addRect(QRectF(rect().x(), rect().y() + this->m_titleHeight, rect().width(), getTheScrollAreaHeight())); int rowCounter = 0; for (FileSystemListItem *item:*this->m_listItems) { if (rowCounter > ((this->m_offSet - this->m_rowHeight) / this->m_rowHeight)) { QPainterPath itemPath; itemPath.addRect(QRect(0, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, rect().width(), this->m_rowHeight)); painter.setClipPath((framePath.intersected(scrollAreaPath)).intersected(itemPath)); bool isSelect = this->m_selectedItems->contains(item); painter.save(); item->drawBackground(QRect(0, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, rect().width(), this->m_rowHeight), &painter, rowCounter, isSelect); painter.restore(); int columnCounter = 0; int columnTitleX = 0; for (int titleItemWidth : titleItemsWidths) { if (titleItemWidth > 0) { painter.save(); if (columnCounter < titleItemsWidths.size() - 1) item->drawForeground(QRect(columnTitleX, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, titleItemWidth, this->m_rowHeight), &painter, columnCounter, rowCounter, isSelect, true); else item->drawForeground(QRect(columnTitleX, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, titleItemWidth, this->m_rowHeight), &painter, columnCounter, rowCounter, isSelect, false); painter.restore(); columnTitleX += titleItemWidth; } columnCounter++; } title_Height += this->m_rowHeight; if (title_Height > rect().height()) { break; } } rowCounter++; } painter.setClipPath(framePath); //没有挂载的磁盘文件系统信息时绘制提示文字 if (this->m_listItems->size() == 0) { painter.setOpacity(1); painter.setPen(QPen(QColor("#666666"))); QFont font = painter.font() ; font.setPointSize(22); painter.setFont(font); painter.drawText(QRect(rect().x(), rect().y() + this->m_titleHeight, rect().width(), rect().height() - this->m_titleHeight), Qt::AlignCenter, tr("No File System Info")); } //背景 // QPen framePen; // framePen.setColor(QColor("#F5F5F5")); // painter.setPen(framePen); painter.setOpacity(0.2); painter.drawPath(framePath); //垂直滚动条 if (this->m_mouseAtScrollArea) { paintScrollbar(&painter); } else if (this->m_origOffset != this->m_offSet) { paintScrollbar(&painter); readyToHideScrollbar(); } } void FileSystemListWidget::paintScrollbar(QPainter *painter) { if (this->getItemsTotalHeight() > getTheScrollAreaHeight()) { qreal opacitry = 0; if (this->m_mouseDragScrollbar) { opacitry = 0.8; } else { if (this->m_mouseAtScrollArea) opacitry = 0.7; else opacitry = 0.5; } int barWidth = (this->m_mouseAtScrollArea || this->m_mouseDragScrollbar) ? this->m_scrollbarWidth : 6; int barY = getScrollbarY(); int barHeight = getScrollbarHeight(); painter->setOpacity(opacitry); QPainterPath path; path.addRoundedRect( QRectF(rect().x() + rect().width() - barWidth - 4, barY + 2, barWidth, barHeight - 2 * 2), 2, 2);//2 is radius painter->fillPath(path, QColor("#0B95D7")); QPen pen; pen.setColor(QColor("#0B95D7")); pen.setWidth(1); painter->setOpacity(0); painter->setPen(pen); painter->drawPath(path); } } QList FileSystemListWidget::getTitleItemsWidths() { QList titleItemsWidths; if (this->m_columnWidths.length() > 0) { if (this->m_columnWidths.contains(-1)) { for (int i = 0; i < this->m_columnWidths.count(); i++) { if (this->m_columnWidths[i] != -1) { if (m_columnVisibles[i]) { titleItemsWidths << this->m_columnWidths[i]; } else { titleItemsWidths << 0; } } else { if (m_columnVisibles[i]) { int totalWidth = 0; for (int j = 0; j < this->m_columnWidths.count(); j++) { if (this->m_columnWidths[j] != -1 && m_columnVisibles[j]) { totalWidth += this->m_columnWidths[j]; } } titleItemsWidths << rect().width() - totalWidth; } else { titleItemsWidths << 0; } } } } else { for (int i = 0; i < this->m_columnWidths.count(); i++) { if (m_columnVisibles[i]) { titleItemsWidths << this->m_columnWidths[i]; } else { titleItemsWidths << 0; } } } } else { titleItemsWidths << rect().width(); } return titleItemsWidths; } bool FileSystemListWidget::mouseAtScrollArea(int x) { return (x > rect().x() + rect().width() - this->m_scrollbarWidth) && (x < rect().x() + rect().width()); } bool FileSystemListWidget::mouseAtTitleArea(int y) { return (y > rect().y() && y < rect().y() + this->m_titleHeight); } int FileSystemListWidget::setOffset(int offset) { return std::max(0, std::min(offset, getBottomOffset())); } int FileSystemListWidget::getItemsTotalHeight() { return m_listItems->count() * m_rowHeight; } int FileSystemListWidget::getTheScrollAreaHeight() { return this->rect().height() - this->m_titleHeight; } int FileSystemListWidget::getScrollbarY() { return static_cast((this->m_offSet / (this->getItemsTotalHeight() * 1.0)) * getTheScrollAreaHeight() + this->m_titleHeight); } int FileSystemListWidget::getScrollbarHeight() { return std::max(static_cast(getTheScrollAreaHeight() / (this->getItemsTotalHeight() * 1.0) * rect().height()), 30);//30 is min height } int FileSystemListWidget::getBottomOffset() { int itemsHeight = this->getItemsTotalHeight(); if (itemsHeight > rect().height() - this->m_titleHeight) { return this->getItemsTotalHeight() - rect().height() + this->m_titleHeight; } else { return 0; } } void FileSystemListWidget::readyToHideScrollbar() { if (this->m_hideScrollbarTimer) { if (this->m_hideScrollbarTimer->isActive()) this->m_hideScrollbarTimer->stop(); } else { this->m_hideScrollbarTimer = new QTimer(); this->m_hideScrollbarTimer->setSingleShot(true); connect(this->m_hideScrollbarTimer, SIGNAL(timeout()), this, SLOT(hideScrollbar())); } this->m_hideScrollbarTimer->start(2000); } youker-assistant/plugins/systemmonitor/cpuratewidget.cpp0000664000175000017500000002674313260315532023031 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cpuratewidget.h" #include "cpuballwidget.h" #include #include #include #include inline QString convertTimeToString(long seconds) { //test script: cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}' int run_day = seconds / 86400; int run_hour = (seconds % 86400)/3600; int run_minute = (seconds % 3600)/60; int run_second = seconds % 60; QString hourStr; QString minuteStr; QString secondStr; if (run_hour >1) hourStr = QString(QObject::tr("%1hours")).arg(run_hour); else hourStr = QString(QObject::tr("%1hour")).arg(run_hour); if (run_minute > 1) minuteStr = QString(QObject::tr("%1minutes")).arg(run_minute); else minuteStr = QString(QObject::tr("%1minute")).arg(run_minute); if (run_second > 1) secondStr = QString(QObject::tr("%1seconds")).arg(run_second); else secondStr = QString(QObject::tr("%1second")).arg(run_second); QString run_time; if (run_day > 0) { if (run_day == 1) return QString("%1 %2 %3 %4").arg(QString(QObject::tr("%1day"))).arg(run_day).arg(hourStr).arg(minuteStr).arg(secondStr); else return QString("%1 %2 %3 %4").arg(QString(QObject::tr("%1days"))).arg(run_day).arg(hourStr).arg(minuteStr).arg(secondStr); } else { return QString("%1 %2 %3").arg(hourStr).arg(minuteStr).arg(secondStr); } return run_time; } inline int getCoreCounts() { int cpuCounts = 0; QFile file("/proc/cpuinfo"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QString content = file.readLine().trimmed(); while (!content.isEmpty() && content.contains(QChar(':'))) { const QStringList tokens = content.split(QChar(':')); if (tokens.size() == 2) { if (tokens[0] == "processor") cpuCounts ++; } content = file.readLine().trimmed(); } file.close(); } if (cpuCounts == 0) cpuCounts = 4; return cpuCounts; } inline QString getIdelRate(unsigned long &runSeconds, unsigned long &idleSeconds) { int cpuNumber = getCoreCounts(); QString rate; QFile file("/proc/uptime"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QString content = file.readLine(); while (!content.isEmpty() && content.contains(" ")) { QStringList tokens = content.split(" ");//content.split(QChar(' ')) QString runStr = tokens.at(0);//从系统启动到现在的时间(以秒为单位) if (runStr.contains(QChar('.'))) { QString senconds = runStr.split(QChar('.')).at(0); runSeconds = senconds.toLong(); } else runSeconds = runStr.toLong(); QString idleStr = tokens.at(1);//系统空闲的时间(以秒为单位) if (idleStr.contains(QChar('.'))) { QString senconds = idleStr.split(QChar('.')).at(0); idleSeconds = senconds.toLong(); } else idleSeconds = idleStr.toLong(); rate = QString::number((idleSeconds * 1.0) /(runSeconds *1.0 * cpuNumber) * 100, 'f', 0) + "%"; break; } file.close(); } return rate; } inline long readUpdatetimeFile(bool isRunTime) { QFile file("/proc/uptime"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QString result; QString content = file.readLine(); while (!content.isEmpty() && content.contains(" ")) { QStringList tokens = content.split(" ");//content.split(QChar(' ')) if (isRunTime) { result = tokens.at(0);//从系统启动到现在的时间(以秒为单位) } else { result = tokens.at(1);//系统空闲的时间(以秒为单位) } break; //content = file.readLine();//continue read } file.close(); if (result.contains(QChar('.'))) { QString senconds = result.split(QChar('.')).at(0); return senconds.toLong(); } else return result.toLong(); } return 0; } //系统平均负载 inline QString readLoadAvg() { /*cat /proc/loadavg 0.10 0.06 0.01 1/72 29632 前3个数字表示平均进程数量外,后面的1个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程ID*/ return QString(); } inline void readFile(const QString &fileName) { QFile file(fileName); if (!file.open(QFile::ReadOnly)) { qCritical() << QString("open %1 failed").arg(fileName); return; } QByteArray content = file.readAll(); file.close(); QTextStream stream(&content, QIODevice::ReadOnly); while (!stream.atEnd()) { const QString aline = stream.readLine(); qDebug() << "aline="<setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_title->setStyleSheet("background:transparent;font-size:24px;color:#000000"); m_cpuRateTitle = new QLabel; m_cpuRateTitle->setStyleSheet("QLabel{background:transparent;font-size:12px;color:#999999;}"); m_cpuRateTitle->setText(tr("Occupancy rate")); m_cpuRateText = new QLabel; m_cpuRateText->setStyleSheet("QLabel{background:transparent;font-size:20px;color:#000000;}"); m_cpuIdleRateTitle = new QLabel; m_cpuIdleRateTitle->setStyleSheet("QLabel{background:transparent;font-size:12px;color:#999999;}"); m_cpuIdleRateTitle->setText(tr("Idle rate")); m_cpuIdleRateText = new QLabel; m_cpuIdleRateText->setStyleSheet("QLabel{background:transparent;font-size:20px;color:#000000;}"); m_cpuRunTimeTitle = new QLabel; m_cpuRunTimeTitle->setStyleSheet("QLabel{background:transparent;font-size:12px;color:#999999;}"); m_cpuRunTimeTitle->setText(tr("The running time of system")); m_cpuRunTimeText = new QLabel; m_cpuRunTimeText->setStyleSheet("QLabel{background:transparent;font-size:20px;color:#000000;}"); m_cpuIdleTimeTitle = new QLabel; m_cpuIdleTimeTitle->setStyleSheet("QLabel{background:transparent;font-size:12px;color:#999999;}"); m_cpuIdleTimeTitle->setText(tr("The idle time of system")); m_cpuIdleTimeText = new QLabel; m_cpuIdleTimeText->setStyleSheet("QLabel{background:transparent;font-size:20px;color:#000000;}"); QVBoxLayout *cpuRateLayout = new QVBoxLayout; cpuRateLayout->setSpacing(10); cpuRateLayout->addWidget(m_cpuRateTitle); cpuRateLayout->addWidget(m_cpuRateText); QVBoxLayout *cpuIdleRateLayout = new QVBoxLayout; cpuIdleRateLayout->setSpacing(10); cpuIdleRateLayout->addWidget(m_cpuIdleRateTitle); cpuIdleRateLayout->addWidget(m_cpuIdleRateText); QHBoxLayout *rateLayout = new QHBoxLayout; rateLayout->setSpacing(30); rateLayout->addLayout(cpuRateLayout); rateLayout->addLayout(cpuIdleRateLayout); QVBoxLayout *cpuRunTimeLayout = new QVBoxLayout; cpuRunTimeLayout->setSpacing(10); cpuRunTimeLayout->addWidget(m_cpuRunTimeTitle); cpuRunTimeLayout->addWidget(m_cpuRunTimeText); QVBoxLayout *cpuIdleTimeLayout = new QVBoxLayout; cpuIdleTimeLayout->setSpacing(10); cpuIdleTimeLayout->addWidget(m_cpuIdleTimeTitle); cpuIdleTimeLayout->addWidget(m_cpuIdleTimeText); m_labelLayout->setContentsMargins(0, 0, 0, 0); m_labelLayout->setSpacing(10); m_labelLayout->addWidget(m_title); m_labelLayout->addLayout(rateLayout); m_labelLayout->addLayout(cpuRunTimeLayout); m_labelLayout->addLayout(cpuIdleTimeLayout); m_contentLayout->addWidget(w, 1, Qt::AlignLeft); m_cpuBall = new CpuBallWidget; m_contentLayout->addWidget(m_cpuBall); } void CpuRateWidget::refreshData(double cpu) { m_cpuRateText->setText(QString::number(cpu, 'f', 1) + "%"); unsigned long runtime; unsigned long idletime; QString rate = getIdelRate(runtime, idletime); m_cpuIdleRateText->setText(rate); m_cpuRunTimeText->setText(convertTimeToString(runtime)); m_cpuIdleTimeText->setText(convertTimeToString(idletime)); } void CpuRateWidget::onUpdateCpuPercent(double value) { this->refreshData(value); m_cpuBall->updateCpuPercent(value); } void CpuRateWidget::startTimer() { m_cpuBall->startTimer(); } void CpuRateWidget::stopTimer() { m_cpuBall->stopTimer(); } youker-assistant/plugins/systemmonitor/networkindicator.cpp0000664000175000017500000001532313260315532023540 0ustar fengfeng#include "networkindicator.h" #include "smoothcurvegenerator.h" #include #include #include #include #include #include NetworkIndicator::NetworkIndicator(QWidget *parent) : QWidget(parent) ,m_state(Normal) ,m_isChecked(false) ,m_rectTopPadding(9) ,m_rectTotalHeight(38) ,m_rectTotalWidth(58) ,m_outsideBorderColor(Qt::transparent) ,m_bgColor(QColor("#ffffff")) { this->setFixedSize(188, 56); m_netMaxHeight = 30; m_pointSpace = 5; m_pointsCount = int((this->width() -2) / m_pointSpace); m_downloadSpeedList = new QList(); for (int i = 0; i < m_pointsCount; i++) { m_downloadSpeedList->append(0); } m_uploadSpeedList = new QList(); for (int i = 0; i < m_pointsCount; i++) { m_uploadSpeedList->append(0); } m_gridY = new QList(); setNetworkState(Normal); } NetworkIndicator::~NetworkIndicator() { delete m_downloadSpeedList; delete m_uploadSpeedList; delete m_gridY; } void NetworkIndicator::enterEvent(QEvent *event) { setCursor(Qt::PointingHandCursor); if (!m_isChecked) { setNetworkState(Hover); } event->accept(); //QWidget::enterEvent(event); } void NetworkIndicator::leaveEvent(QEvent *event) { if (!m_isChecked) { setNetworkState(Normal); } event->accept(); //QWidget::leaveEvent(event); } void NetworkIndicator::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) return; setNetworkState(Press); event->accept(); //QWidget::mousePressEvent(event); } void NetworkIndicator::mouseReleaseEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) return; m_isChecked = !m_isChecked; if (m_isChecked) { setNetworkState(Checked); } else { setNetworkState(Normal); } event->accept(); //QWidget::mouseReleaseEvent(event); if (event->button() == Qt::LeftButton) emit clicked(); } void NetworkIndicator::mouseMoveEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) { setNetworkState(Normal); } } void NetworkIndicator::updateBgColor() { switch (m_state) { case Hover: this->m_outsideBorderColor = Qt::transparent; this->m_bgColor = QColor("#f6fcfe"); break; case Press: this->m_outsideBorderColor = Qt::transparent; this->m_bgColor = QColor("#f6fcfe"); break; case Checked: this->m_outsideBorderColor = QColor("#009944"); this->m_bgColor = QColor("#e9f8fd"); break; default: this->m_outsideBorderColor = Qt::transparent; this->m_bgColor = QColor("#ffffff"); break; } repaint(); } void NetworkIndicator::setNetworkState(NetworkIndicator::NetworkState state) { if (m_state == state) return; m_state = state; updateBgColor(); } void NetworkIndicator::setChecked(bool flag) { m_isChecked = flag; if (m_isChecked){ setNetworkState(Checked); } else { setNetworkState(Normal); } } bool NetworkIndicator::isChecked() { return m_isChecked; } void NetworkIndicator::setTitle(const QString &title) { this->m_title = title; } //void NetworkIndicator::updateNetworkPainterPath(QPainterPath downloadPath, QPainterPath uploadPath) //{ // this->m_downloadPath = downloadPath; // this->m_uploadPath = uploadPath; // repaint(); //} NetworkIndicator::NetworkState NetworkIndicator::getNetworkState() const { return m_state; } void NetworkIndicator::onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateBytes, long sentRateBytes) { m_recvTotalBytes = recvTotalBytes; m_sentTotalBytes = sentTotalBytes; m_recvRateBytes = recvRateBytes; m_sentRateBytes = sentRateBytes; //download QList downloadPoints; m_downloadSpeedList->append(m_recvRateBytes); if (m_downloadSpeedList->size() > m_pointsCount) { m_downloadSpeedList->pop_front(); } //计算出下载速度中最大的值 long downloadMaxHeight = 0; for (int i = 0; i < m_downloadSpeedList->size(); i++) { if (m_downloadSpeedList->at(i) > downloadMaxHeight) { downloadMaxHeight = m_downloadSpeedList->at(i); } } for (int i = 0; i < m_downloadSpeedList->size(); i++) { if (downloadMaxHeight < m_netMaxHeight) { downloadPoints.append(QPointF(i * m_pointSpace, m_downloadSpeedList->at(i))); } else { downloadPoints.append(QPointF(i * m_pointSpace, m_downloadSpeedList->at(i) * m_netMaxHeight / downloadMaxHeight)); } } m_downloadPath = SmoothCurveGenerator::generateSmoothCurve(downloadPoints); //upload QList uploadPoints; m_uploadSpeedList->append(m_sentRateBytes); if (m_uploadSpeedList->size() > m_pointsCount) { m_uploadSpeedList->pop_front(); } //计算出上传速度中最大的值 long uploadMaxHeight = 0; for (int i = 0; i < m_uploadSpeedList->size(); i++) { if (m_uploadSpeedList->at(i) > uploadMaxHeight) { uploadMaxHeight = m_uploadSpeedList->at(i); } } for (int i = 0; i < m_uploadSpeedList->size(); i++) { if (uploadMaxHeight < m_netMaxHeight) { uploadPoints.append(QPointF(i * m_pointSpace, m_uploadSpeedList->at(i))); } else { uploadPoints.append(QPointF(i * m_pointSpace, m_uploadSpeedList->at(i) * m_netMaxHeight / uploadMaxHeight)); } } m_uploadPath = SmoothCurveGenerator::generateSmoothCurve(uploadPoints); repaint(); } void NetworkIndicator::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); //border of rect QPainterPath borderPath; borderPath.addRoundedRect(this->rect(), 0, 0); QPen pen(this->m_outsideBorderColor, 1); painter.setPen(pen); painter.drawPath(borderPath); //background of rect painter.setOpacity(1); QPainterPath path; path.addRect(QRectF(1, 1, width()-2, height()-2)); painter.fillPath(path, this->m_bgColor); painter.translate((rect().width() - m_pointsCount * m_pointSpace) / 2 + 2, 40);//将坐标第原点移动到该点 painter.scale(1, -1);//将横坐标扩大1倍,将纵坐标缩小1倍 //使用QPainterPath画贝塞尔曲线 painter.setPen(QPen(QColor("#009944"), 1)); painter.setBrush(QBrush()); painter.drawPath(m_downloadPath);//绘制前面创建的path:m_downloadPath painter.translate(0, -8);//将点(0,-8)设为原点 painter.setPen(QPen(QColor("#e60012"), 1)); painter.setBrush(QBrush()); painter.drawPath(m_uploadPath); QWidget::paintEvent(event); } youker-assistant/plugins/systemmonitor/filesystemlistitem.h0000664000175000017500000000301613260315532023552 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 FILESYSTEMLISTITEM_H #define FILESYSTEMLISTITEM_H #include #include #include #include "filesystemdata.h" class FileSystemListItem : public QObject { Q_OBJECT public: FileSystemListItem(FileSystemData *info); bool isSameItem(FileSystemListItem *item); void drawCellBackground(QRect rect, QPainter *painter, int level); void drawBackground(QRect rect, QPainter *painter, int index, bool isSelect); void drawForeground(QRect rect, QPainter *painter, int column, int index, bool isSelect, bool isSeparator); QString getDeviceName() const; QString getDirectory() const; private: FileSystemData *m_data; int iconSize; int padding; int textPadding; }; #endif // FILESYSTEMLISTITEM_H youker-assistant/plugins/systemmonitor/renicedialog.h0000664000175000017500000000375013260315532022245 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SELECTWIDGET_H #define SELECTWIDGET_H #include #include #include class QLabel; class QSlider; class QPushButton; #include "../../component/mytitlebar.h" class ReniceDialog : public QDialog { Q_OBJECT public: ReniceDialog(const QString &title = "", QWidget *parent = 0); ~ReniceDialog(); void loadData(int nice); void moveCenter(); public slots: void onClose(); signals: void resetReniceValue(int value); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: QVBoxLayout *m_mainLayout = nullptr; MyTitleBar *m_titleBar = nullptr; QHBoxLayout *h_layout = nullptr; QHBoxLayout *tip_layout = nullptr; QHBoxLayout *btn_layout = nullptr; QLabel *m_titleLabel = nullptr; QSlider *m_slider = nullptr; QLabel *m_valueLabel = nullptr; QLabel *m_valueStrLabel = nullptr; QLabel *m_tipTitle = nullptr; QLabel *m_tipLabel = nullptr; QPushButton *m_cancelbtn = nullptr; QPushButton *m_changeBtn = nullptr; QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 }; #endif // SELECTWIDGET_H youker-assistant/plugins/systemmonitor/filesystemdialog.h0000664000175000017500000000366313260315532023167 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filesystemlistwidget.h" class FileSystemData; class FileSystemWorker; class FileSystemWatcher; class QVBoxLayout; class QHBoxLayout; class FileSystemDialog : public QWidget { Q_OBJECT public: explicit FileSystemDialog(QList toBeDisplayedColumns, QSettings *settings, QWidget* parent = 0); ~FileSystemDialog(); FileSystemListWidget *getFileSysView(); void initFileSystemMonitor(); public slots: void refreshFileSysList(); void onDirectoryChanged(QString path); void popupMenu(QPoint pos); signals: void changeColumnVisible(int index, bool visible, QList columnVisible); //private: // bool event(QEvent *event); private: FileSystemWorker *m_fileSystemWorker = nullptr; // QFileSystemWatcher *m_fileSystemMonitor = nullptr; // QString m_monitorFile; QSettings *proSettings = nullptr; FileSystemListWidget *m_fileSysListWidget = nullptr; QAction *m_refreshAction = nullptr; QMenu *m_menu = nullptr; QVBoxLayout *m_layout = nullptr; QTimer *m_timer = nullptr; FileSystemWatcher *m_fileSystemWatcher = nullptr; }; youker-assistant/plugins/systemmonitor/networkflow.h0000664000175000017500000000320213260315532022171 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 NETWORKFLOW_H #define NETWORKFLOW_H #include class NetworkFlow : public QWidget { Q_OBJECT public: NetworkFlow(QWidget *parent = 0); ~NetworkFlow(); public slots: void onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateKbs, long sentRateKbs); protected: void paintEvent(QPaintEvent *event); private: QList *m_downloadSpeedList; QList *m_uploadSpeedList; QPainterPath m_downloadPath; QPainterPath m_uploadPath; int m_netMaxHeight; int m_pointsCount; long m_recvTotalBytes; long m_sentTotalBytes; long m_recvRateBytes; long m_sentRateBytes; QList *m_gridY; int m_pointSpace; QColor m_outsideBorderColor; QColor m_bgColor; QColor m_downloadColor; QColor m_uploadColor; QString receiveText; QString sendText; }; #endif // NETWORKFLOW_H youker-assistant/plugins/systemmonitor/renicedialog.cpp0000664000175000017500000001732213260315532022600 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "renicedialog.h" #include "../../component/utils.h" #include "util.h" #include #include #include #include #include #include #include ReniceDialog::ReniceDialog(const QString &title, QWidget *parent) : QDialog(parent) , m_mousePressed(false) { this->setWindowFlags(Qt::FramelessWindowHint); this->setFixedSize(464, 240); this->setFixedSize(464+SHADOW_LEFT_TOP_PADDING+SHADOW_LEFT_TOP_PADDING, 240+SHADOW_RIGHT_BOTTOM_PADDING+SHADOW_RIGHT_BOTTOM_PADDING); this->setContentsMargins(SHADOW_LEFT_TOP_PADDING,SHADOW_LEFT_TOP_PADDING,SHADOW_RIGHT_BOTTOM_PADDING,SHADOW_RIGHT_BOTTOM_PADDING); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); this->setAttribute(Qt::WA_DeleteOnClose); QWidget *containerWidget = new QWidget(this); // containerWidget->setContentsMargins(SHADOW_LEFT_TOP_PADDING,SHADOW_LEFT_TOP_PADDING,SHADOW_RIGHT_BOTTOM_PADDING,SHADOW_RIGHT_BOTTOM_PADDING); m_mainLayout = new QVBoxLayout(containerWidget); m_mainLayout->setContentsMargins(0,0,0,0); m_mainLayout->setSpacing(20); m_mainLayout->setMargin(0); m_titleBar = new MyTitleBar(title, false, this); m_titleBar->setFixedSize(this->width(), TITLE_BAR_HEIGHT); m_titleLabel = new QLabel(); m_titleLabel->setFixedWidth(80); m_titleLabel->setText(tr("Nice value:")); m_valueLabel = new QLabel(); m_slider = new QSlider(Qt::Horizontal); m_slider->setFocusPolicy(Qt::NoFocus); m_slider->setRange(-20, 19); m_slider->setSingleStep(1); h_layout = new QHBoxLayout(); h_layout->setSpacing(10); h_layout->setMargin(0); h_layout->setContentsMargins(20,0,20,0); h_layout->addWidget(m_titleLabel); h_layout->addWidget(m_slider); h_layout->addWidget(m_valueLabel); m_valueStrLabel = new QLabel; m_valueStrLabel->setStyleSheet("QLabel{background-color:transparent;color:#000000;font-size:13px;font-weight:bold;}"); m_valueStrLabel->setAlignment(Qt::AlignCenter); m_valueStrLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_tipTitle = new QLabel; m_tipTitle->setStyleSheet("QLabel{background-color:transparent;color:#000000;font-size:12px;font-weight:bold;}"); m_tipTitle->setText(tr("Note:")); m_tipLabel = new QLabel; m_tipLabel->setWordWrap(true);//QLabel自动换行 m_tipLabel->setFixedWidth(388); m_tipLabel->setText(tr("The priority of a process is given by its nice value. A lower nice value corresponds to a higher priority.")); tip_layout = new QHBoxLayout(); tip_layout->setSpacing(5); tip_layout->setMargin(0); tip_layout->setContentsMargins(20,0,20,0); tip_layout->addWidget(m_tipTitle); tip_layout->addWidget(m_tipLabel); m_cancelbtn = new QPushButton; m_cancelbtn->setFixedSize(91, 25); m_cancelbtn->setObjectName("blackButton"); m_cancelbtn->setFocusPolicy(Qt::NoFocus); m_cancelbtn->setText(tr("Cancel")); m_changeBtn = new QPushButton; m_changeBtn->setFixedSize(91, 25); m_changeBtn->setObjectName("blackButton"); m_changeBtn->setFocusPolicy(Qt::NoFocus); m_changeBtn->setText(tr("Change Priority")); btn_layout = new QHBoxLayout(); btn_layout->setMargin(0); btn_layout->setSpacing(10); btn_layout->setContentsMargins(0,0,20,0); btn_layout->addStretch(); btn_layout->addWidget(m_cancelbtn); btn_layout->addWidget(m_changeBtn); QVBoxLayout *v_layout = new QVBoxLayout(); v_layout->setMargin(0); v_layout->setSpacing(15); v_layout->setContentsMargins(0,0,0,0); v_layout->addLayout(h_layout); v_layout->addWidget(m_valueStrLabel, 0, Qt::AlignHCenter); v_layout->addLayout(tip_layout); v_layout->addLayout(btn_layout); m_mainLayout->addWidget(m_titleBar); m_mainLayout->addLayout(v_layout); connect(m_slider, &QSlider::valueChanged, [=] (int value) { m_valueLabel->setText(QString::number(value)); QString levelStr = getNiceLevelWithPriority(value); m_valueStrLabel->setText(levelStr); }); connect(m_titleBar, SIGNAL(minSignal()), this, SLOT(hide())); connect(m_titleBar, SIGNAL(closeSignal()), this, SLOT(onClose())); connect(m_cancelbtn, SIGNAL(clicked(bool)), this, SLOT(onClose())); connect(m_changeBtn, &QPushButton::clicked, [=] (bool b) { emit this->resetReniceValue(m_slider->value()); }); //边框阴影效果 QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); shadow_effect->setBlurRadius(5); shadow_effect->setColor(QColor(0, 0, 0, 127)); shadow_effect->setOffset(2, 4); this->setGraphicsEffect(shadow_effect); // this->moveCenter(); QDesktopWidget* desktop = QApplication::desktop(); this->move((desktop->width() - this->width())/2, (desktop->height() - this->height())/3); } ReniceDialog::~ReniceDialog() { delete m_titleBar; delete m_valueStrLabel; QLayoutItem *child; while ((child = h_layout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = tip_layout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = btn_layout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_mainLayout; } void ReniceDialog::onClose() { this->close(); } void ReniceDialog::loadData(int nice) { m_slider->setValue(nice); m_valueLabel->setText(QString::number(nice)); QString levelStr = getNiceLevelWithPriority(nice); m_valueStrLabel->setText(levelStr); } void ReniceDialog::moveCenter() { /*QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); this->show(); this->raise();*/ } void ReniceDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->m_dragPosition = event->globalPos() - frameGeometry().topLeft(); this->m_mousePressed = true; } QDialog::mousePressEvent(event); } void ReniceDialog::mouseReleaseEvent(QMouseEvent *event) { this->m_mousePressed = false; setWindowOpacity(1); QDialog::mouseReleaseEvent(event); } void ReniceDialog::mouseMoveEvent(QMouseEvent *event) { if (this->m_mousePressed) { move(event->globalPos() - this->m_dragPosition); setWindowOpacity(0.9); } QDialog::mouseMoveEvent(event); } youker-assistant/plugins/systemmonitor/util.h0000664000175000017500000000355213260315532020575 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 #include #include #include #include #define MONITOR_TITLE_WIDGET_HEIGHT 77 #define TITLE_WIDGET_HEIGHT 39 #define DEVICE_MOUNT_PONINT_RECORD_FILE "/proc/mounts" using std::string; std::string getDesktopFileAccordProcName(QString procName, QString cmdline); QPixmap getAppIconFromDesktopFile(std::string desktopFile, int iconSize = 24); QString getDisplayNameAccordProcName(QString procName, std::string desktopFile); std::string make_string(char *c_str); QString formatProcessState(guint state); QString getNiceLevel(int nice); QString getNiceLevelWithPriority(int nice); QString formatUnitSize(double v, const char** orders, int nb_orders); QString formatByteCount(double v); void setFontSize(QPainter &painter, int textSize); QString formatDurationForDisplay(unsigned centiseconds); QString getDeviceMountedPointPath(const QString &line); QString getFileContent(const QString &filePath); QSet getFileContentsLineByLine(const QString &filePath); youker-assistant/plugins/systemmonitor/memorywidget.h0000664000175000017500000000111113260315532022321 0ustar fengfeng#ifndef MEMORYWIDGET_H #define MEMORYWIDGET_H #include #include #include #include class MemoryCircle; class MemoryWidget : public QWidget { Q_OBJECT public: MemoryWidget(QWidget *parent = 0); ~MemoryWidget(); public slots: void onUpdateMemoryStatus(); signals: void rebackMemoryInfo(const QString &info, double percent); private: QLabel *m_title = nullptr; MemoryCircle *m_memoryCircle = nullptr; QVBoxLayout *m_widgetLayout = nullptr; QHBoxLayout *mainLayout = nullptr; }; #endif // MEMORYWIDGET_H youker-assistant/plugins/systemmonitor/filesystemlistitem.cpp0000664000175000017500000002222213260315532024105 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filesystemlistitem.h" #include #include #include #include "util.h" #include #include #include FileSystemListItem::FileSystemListItem(FileSystemData *info) { m_data = info; iconSize = 16; padding = 14; textPadding = 5; } bool FileSystemListItem::isSameItem(FileSystemListItem *item) { return m_data->deviceName() == ((static_cast(item)))->m_data->deviceName(); } void FileSystemListItem::drawBackground(QRect rect, QPainter *painter, int index, bool isSelect) { QPainterPath path; path.addRect(QRectF(rect)); if (isSelect) { painter->setOpacity(0.1); painter->fillPath(path, QColor("#2bb6ea")); } else { painter->setOpacity(1); painter->fillPath(path, QColor("#ffffff")); // if (index % 2 == 0) { // painter->fillPath(path, QColor("#ffffff")); // } else { // painter->fillPath(path, QColor("#e9eef0")); // } } } void FileSystemListItem::drawForeground(QRect rect, QPainter *painter, int column, int, bool isSelect, bool isSeparator) { setFontSize(*painter, 12); painter->setOpacity(1); painter->setPen(QPen(QColor("#000000"))); if (column == 0) { painter->drawPixmap(QRect(rect.x() + padding, rect.y() + (rect.height() - iconSize) / 2, iconSize, iconSize), QPixmap(":/res/disk.png")); int nameMaxWidth = rect.width() - iconSize - padding * 3; QFont font = painter->font(); QFontMetrics fm(font); QString deviceName = fm.elidedText(m_data->deviceName(), Qt::ElideRight, nameMaxWidth);//Qt::ElideMiddle painter->drawText(QRect(rect.x() + iconSize + padding * 2, rect.y(), nameMaxWidth, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, deviceName); if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 1) { if (!m_data->mountDir().isEmpty()) { int maxWidth = rect.width(); QFont font = painter->font(); QFontMetrics fm(font); QString mountDir = fm.elidedText(m_data->mountDir(), Qt::ElideMiddle, maxWidth); painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, mountDir); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 2) { if (!m_data->diskType().isEmpty()) { int maxWidth = rect.width(); QFont font = painter->font(); QFontMetrics fm(font); QString diskType = fm.elidedText(m_data->diskType(), Qt::ElideRight, maxWidth); painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, diskType); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 3) { if (!m_data->totalCapacity().isEmpty()) { int maxWidth = rect.width(); QFont font = painter->font(); QFontMetrics fm(font); QString tCapacity = fm.elidedText(m_data->totalCapacity(), Qt::ElideRight, maxWidth); painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, tCapacity); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 4) { if (!m_data->freeCapacity().isEmpty()) { int maxWidth = rect.width(); QFont font = painter->font(); QFontMetrics fm(font); QString fCapacity = fm.elidedText(m_data->freeCapacity(), Qt::ElideRight, maxWidth); painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, fCapacity); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 5) { if (!m_data->availCapacity().isEmpty()) { int maxWidth = rect.width(); QFont font = painter->font(); QFontMetrics fm(font); QString aCapacity = fm.elidedText(m_data->availCapacity(), Qt::ElideRight, maxWidth); painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, aCapacity); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 6) { int leftPadding = 10; int topPadding = 5; int progressWidth = 100; int progressHeight = rect.height() - 2 * topPadding; int textMaxWidth = rect.width() - progressWidth - 2 * leftPadding; if (!m_data->usedCapactiy().isEmpty()) { QFont font = painter->font(); QFontMetrics fm(font); QString uCapacity = fm.elidedText(m_data->usedCapactiy(), Qt::ElideRight, textMaxWidth - textPadding); painter->drawText(QRect(rect.x() + textPadding, rect.y(), textMaxWidth - textPadding, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, uCapacity); } QPainterPath bgPath; bgPath.addRect(QRectF(rect.x() + textMaxWidth + leftPadding, rect.y() + topPadding, progressWidth, progressHeight)); painter->fillPath(bgPath, QColor("#eeeeee")); QPainterPath fillPath; fillPath.addRect(QRectF(rect.x() + textMaxWidth + leftPadding, rect.y() + topPadding, m_data->usedPercentage(), progressHeight)); painter->setOpacity(0.5); if (m_data->usedPercentage() < 75) painter->fillPath(fillPath, QColor("#0288d1")); else painter->fillPath(fillPath, QColor("#f8b551")); painter->setOpacity(1); painter->drawText(QRect(rect.x() + textMaxWidth + leftPadding, rect.y() + topPadding, progressWidth, progressHeight), Qt::AlignHCenter | Qt::AlignVCenter, QString::number(m_data->usedPercentage()).append("%")); /* QStyleOptionProgressBar progressBarStyle;//progressBarStyle.initFrom(this); progressBarStyle.rect = QRect(rect.x() + 60, rect.y() + topPadding, pWidth, pHeight); progressBarStyle.minimum = 0; progressBarStyle.maximum = 100; progressBarStyle.textAlignment = Qt::AlignCenter; progressBarStyle.progress = m_data->usedPercentage(); progressBarStyle.text = QString("%1%").arg(m_data->usedPercentage()); progressBarStyle.textVisible = true; QProgressBar progressBar; progressBar.setStyleSheet("QProgressBar{border: none;text-align: center;background:#eeeeee;}QProgressBar::chunk {background:#0288d1;}"); QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarStyle, painter, &progressBar);//绘制进度条 */ if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } } QString FileSystemListItem::getDeviceName() const { return m_data->deviceName(); } QString FileSystemListItem::getDirectory() const { return m_data->mountDir(); } youker-assistant/plugins/systemmonitor/filesystemwatcher.h0000664000175000017500000000135213260315532023356 0ustar fengfeng#ifndef FILESYSTEMWATCHER_H #define FILESYSTEMWATCHER_H #include #include #include class FileSystemWatcher : public QObject { Q_OBJECT public: static FileSystemWatcher *instance(); FileSystemWatcher(QObject *parent = 0); ~FileSystemWatcher(); bool watcherInitSuccess(); signals: void deviceAdded(const QString &addDevice); void deviceRemoved(const QString &removeDevice); public slots: bool initWatcher(); bool clearWatcher(); private slots: void onMountDeviceFileContentsChanged(); private: int m_fd; QSocketNotifier *m_socketNotifier = nullptr; QSet m_origFileSet; static FileSystemWatcher *m_watcher; }; #endif // FILESYSTEMWATCHER_H youker-assistant/plugins/systemmonitor/processlistitem.h0000664000175000017500000000515613260315532023053 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PROCESSLISTITEM_H #define PROCESSLISTITEM_H #include #include #include #include "processdata.h" class ProcessListItem : public QObject { Q_OBJECT public: ProcessListItem(ProcData info); bool isSameItem(ProcessListItem *item); void drawCellBackground(QRect rect, QPainter *painter, int level); void drawBackground(QRect rect, QPainter *painter, int index, bool isSelect); void drawForeground(QRect rect, QPainter *painter, int column, int index, bool isSelect, bool isSeparator); static bool doSearch(const ProcessListItem *item, QString text); static bool sortByName(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByUser(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByStatus(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByCPU(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByPid(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByCommand(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByMemory(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); static bool sortByPriority(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort); QString getProcessName() const; QString getDisplayName() const; QString getUser() const; double getCPU() const; pid_t getPid() const; long getMemory() const; QString getStatus() const; long getNice() const; QString getCommandLine() const; private: ProcData m_data; int iconSize; int padding; int textPadding; }; #endif // PROCESSLISTITEM_H youker-assistant/plugins/systemmonitor/systemmonitor.json0000664000175000017500000000000313260315532023262 0ustar fengfeng{} youker-assistant/plugins/systemmonitor/resourcescategory.h0000664000175000017500000000324613260315532023370 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 RESOURCESCATEGORY_H #define RESOURCESCATEGORY_H #include #include class NetworkIndicator; class ResourcesIndicator; class ResourcesCategory : public QWidget { Q_OBJECT public: explicit ResourcesCategory(int tabIndex, QWidget *parent = 0); ~ResourcesCategory(); public slots: void onUpdateCpuPercent(double value); void onUpdateMemoryPercent(const QString &info, double value); // void onUpdateNetworkPainterPath(QPainterPath downloadPath, QPainterPath uploadPath); void onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateKbs, long sentRateKbs); signals: void switchResoucesPage(int index); private: int activeIndex; QVBoxLayout *layout = nullptr; ResourcesIndicator *cpuButton = nullptr; ResourcesIndicator *memoryButton = nullptr; NetworkIndicator *networkButton = nullptr; }; #endif // RESOURCESCATEGORY_H youker-assistant/plugins/systemmonitor/processlistwidget.cpp0000664000175000017500000010567713260315532023744 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "processlistwidget.h" #include #include #include #include #include #include #include #include #include #include ProcessListWidget::ProcessListWidget(QList toBeDisplayedColumns, QWidget *parent) : QWidget(parent) ,m_titlePadding(10) ,m_titleHeight(40) ,m_rowHeight(29) ,m_offSet(0) ,m_origOffset(0) ,m_scrollbarWidth(10) ,m_titleHoverColumn(-1) ,m_titlePressColumn(-1) ,m_mouseAtScrollArea(false) ,m_mouseDragScrollbar(false) { this->m_searchFunc = NULL; this->m_searchText = ""; this->m_lastItem = NULL; this->m_listItems = new QList(); this->m_searchedItems = new QList(); this->m_selectedItems = new QList(); this->m_sortFuncList = new QList(); this->m_isSortList = new QList(); this->m_downArrowPixmap = QPixmap(":/res/arrow_down.png"); this->m_upArrowPixmap = QPixmap(":/res/arrow_up.png"); this->columnTitles << tr("Process Name") << tr("User") << tr("Status") << tr("CPU") << tr("ID") << tr("Command Line") << tr("Memory") << tr("Priority"); QList widths; widths << 180 << 80 << 80 << 60 << 50 << -1 << 80 << 80;//-1时让改行填充所有剩余空间 QFont font; font.setPixelSize(12);//需要和填充所有剩余空间的那个的文字字体大小一致 font.setPointSize(9) QFontMetrics fm(font); this->m_columnWidths.clear(); for (int i = 0; i < widths.length(); i++) { if (widths[i] == -1) { this->m_columnWidths << widths[i]; } else {//-1时让改行填充所有剩余空间 int maxWidth = fm.width(this->columnTitles[i]) + this->m_titlePadding + m_upArrowPixmap.width() / m_upArrowPixmap.devicePixelRatio() + 2 * 2; this->m_columnWidths << std::max(widths[i], maxWidth); } } this->m_columnVisibles.clear(); for (int i = 0; i < toBeDisplayedColumns.count(); i++) { this->m_columnVisibles.append(toBeDisplayedColumns[i]); } this->setFocus(); } ProcessListWidget::~ProcessListWidget() { if (this->m_hideScrollbarTimer != NULL) { disconnect(this->m_hideScrollbarTimer,SIGNAL(timeout()),this,SLOT(hideScrollbar())); if(this->m_hideScrollbarTimer->isActive()) { this->m_hideScrollbarTimer->stop(); } delete this->m_hideScrollbarTimer; this->m_hideScrollbarTimer = nullptr; } delete this->m_lastItem; delete this->m_listItems; delete this->m_searchedItems; delete this->m_selectedItems; delete this->m_sortFuncList; delete this->m_isSortList; } void ProcessListWidget::setProcessSortFunctions(QList *list, int currentSortIndex, bool isSort) { this->m_sortFuncList = list; for (int i = 0; i < this->m_sortFuncList->count(); i++) { this->m_isSortList->append(false); } this->m_currentSortIndex = currentSortIndex; this->m_isSort = isSort; } void ProcessListWidget::setSearchFunction(SearchFunction func) { this->m_searchFunc = func; } void ProcessListWidget::addItems(QList items) { this->m_listItems->append(items); QList s_items = this->getSearchedItems(items); this->m_searchedItems->append(s_items); if (this->m_currentSortIndex != -1) { this->sortItemsByColumn(this->m_currentSortIndex, this->m_isSort); } } void ProcessListWidget::clearItems() { qDeleteAll(this->m_listItems->begin(), this->m_listItems->end()); this->m_listItems->clear(); this->m_searchedItems->clear(); } void ProcessListWidget::addSelectedItems(QList items, bool recordLastItem) { this->m_selectedItems->append(items); if (recordLastItem && this->m_selectedItems->count() > 0) { this->m_lastItem = this->m_selectedItems->last(); } } void ProcessListWidget::clearSelectedItems(bool clearLast) { this->m_selectedItems->clear(); if (clearLast) { this->m_lastItem = NULL; } } void ProcessListWidget::refreshItems(QList items) { QList *allItems = new QList(); ProcessListItem *newLastItem = NULL; for (ProcessListItem *item:items) { for (ProcessListItem *selectionItem:*this->m_selectedItems) { if (item->isSameItem(selectionItem)) { allItems->append(item); break; } } } if (this->m_lastItem != NULL) { for (ProcessListItem *item:items) { if (item->isSameItem(this->m_lastItem)) { newLastItem = item; break; } } } clearItems(); this->m_listItems->append(items); QList s_items = this->getSearchedItems(items); this->m_searchedItems->append(s_items); if (this->m_currentSortIndex != -1) { this->sortItemsByColumn(this->m_currentSortIndex, this->m_isSort); } clearSelectedItems(); addSelectedItems(*allItems, false); this->m_lastItem = newLastItem; this->m_offSet = setOffset(this->m_offSet); repaint(); } void ProcessListWidget::doSearch(QString text) { if (text == "" && this->m_searchText != text) { this->m_searchText = text; this->m_searchedItems->clear(); this->m_searchedItems->append(*this->m_listItems); } else { this->m_searchText = text; QList s_items = this->getSearchedItems(*this->m_listItems); this->m_searchedItems->clear(); this->m_searchedItems->append(s_items); } repaint(); } void ProcessListWidget::selectTheFirstItem() { this->m_origOffset = this->m_offSet; clearSelectedItems(); QList items = QList(); items << this->m_searchedItems->first(); addSelectedItems(items); this->m_offSet = 0; repaint(); } void ProcessListWidget::selectTheLastItem() { this->m_origOffset = this->m_offSet; clearSelectedItems(); QList items = QList(); items << this->m_searchedItems->last(); addSelectedItems(items); this->m_offSet = getBottomOffset(); repaint(); } void ProcessListWidget::selectThePrevItem(int offset) { this->m_origOffset = this->m_offSet; if (this->m_selectedItems->empty()) { selectTheFirstItem(); } else { int firstIndex = this->m_searchedItems->count(); for (ProcessListItem *item:*this->m_selectedItems) { int index = this->m_searchedItems->indexOf(item); if (index < firstIndex) { firstIndex = index; } } if (firstIndex != -1) { firstIndex = std::max(0, firstIndex - offset); clearSelectedItems(); QList items = QList(); items << (*this->m_searchedItems)[firstIndex]; addSelectedItems(items); int itemIndex = firstIndex - 1; int itemOffset = setOffset(itemIndex * this->m_rowHeight + this->m_titleHeight); if ((this->m_offSet / this->m_rowHeight) > itemIndex) { this->m_offSet = itemOffset; } repaint(); } } } void ProcessListWidget::selectTheNextItem(int offset) { this->m_origOffset = this->m_offSet; if (this->m_selectedItems->empty()) { selectTheFirstItem(); } else { int lastIndex = 0; for (ProcessListItem *item:*this->m_selectedItems) { int index = this->m_searchedItems->indexOf(item); if (index > lastIndex) { lastIndex = index; } } if (lastIndex != -1) { lastIndex = std::min(this->m_searchedItems->count() - 1, lastIndex + offset); clearSelectedItems(false); QList items = QList(); items << (*this->m_searchedItems)[lastIndex]; addSelectedItems(items); int itemIndex = lastIndex + 1; int itemOffset = setOffset(itemIndex * this->m_rowHeight - rect().height() + this->m_titleHeight); if (((this->m_offSet + getTheScrollAreaHeight()) / this->m_rowHeight) < itemIndex) { this->m_offSet = itemOffset; } repaint(); } } } void ProcessListWidget::shiftToHomeItem() { if (this->m_selectedItems->empty()) { selectTheFirstItem(); } else { int lastSelectionIndex = this->m_searchedItems->indexOf(this->m_lastItem); shiftToSelectedItems(0, lastSelectionIndex); this->m_offSet = 0; repaint(); } } void ProcessListWidget::shiftToEndItem() { if (this->m_selectedItems->empty()) { selectTheLastItem(); } else { shiftToSelectedItems(this->m_searchedItems->indexOf(this->m_lastItem), this->m_searchedItems->count() - 1); this->m_offSet = getBottomOffset(); repaint(); } } void ProcessListWidget::shiftToPrevItem(int offset) { this->m_origOffset = this->m_offSet; if (this->m_selectedItems->empty()) { selectTheFirstItem(); } else { int firstIndex = this->m_searchedItems->count(); int lastIndex = 0; for (ProcessListItem *item : *this->m_selectedItems) { int index = this->m_searchedItems->indexOf(item); if (index < firstIndex) { firstIndex = index; } if (index > lastIndex) { lastIndex = index; } } if (firstIndex != -1) { int lastSelectionIndex = this->m_searchedItems->indexOf(this->m_lastItem); int selectionStartIndex, selectionEndIndex; if (lastIndex == lastSelectionIndex) { selectionStartIndex = std::max(0, firstIndex - offset); selectionEndIndex = lastSelectionIndex; } else { selectionStartIndex = firstIndex; selectionEndIndex = std::max(0, lastIndex - offset); } shiftToSelectedItems(selectionStartIndex, selectionEndIndex); if (this->m_offSet / this->m_rowHeight >= selectionStartIndex) { this->m_offSet = setOffset((selectionStartIndex - 1) * this->m_rowHeight + this->m_titleHeight); } repaint(); } } } void ProcessListWidget::shiftToNextItem(int offset) { this->m_origOffset = this->m_offSet; if (this->m_selectedItems->empty()) { selectTheFirstItem(); } else { int firstIndex = this->m_searchedItems->count(); int lastIndex = 0; for (ProcessListItem *item:*this->m_selectedItems) { int index = this->m_searchedItems->indexOf(item); if (index < firstIndex) { firstIndex = index; } if (index > lastIndex) { lastIndex = index; } } if (firstIndex != -1) { int lastSelectionIndex = this->m_searchedItems->indexOf(this->m_lastItem); int selectionStartIndex, selectionEndIndex; if (firstIndex == lastSelectionIndex) { selectionStartIndex = firstIndex; selectionEndIndex = std::min(this->m_searchedItems->count() - 1, lastIndex + offset); } else { selectionStartIndex = std::min(this->m_searchedItems->count() - 1, firstIndex + offset); selectionEndIndex = lastIndex; } shiftToSelectedItems(selectionStartIndex, selectionEndIndex); if ((this->m_offSet + rect().height()) / this->m_rowHeight <= selectionEndIndex + 1) { this->m_offSet = setOffset((selectionEndIndex + 1) * this->m_rowHeight + this->m_titleHeight - rect().height()); } repaint(); } } } void ProcessListWidget::shiftToSelectedItems(int start, int end) { clearSelectedItems(false); QList items = QList(); int index = 0; for (ProcessListItem *item:*this->m_searchedItems) { if (index >= start && index <= end) { items << item; } index++; } addSelectedItems(items, false); } void ProcessListWidget::leaveEvent(QEvent * event) { hideScrollbar(); QWidget::leaveEvent(event); } void ProcessListWidget::hideScrollbar() { this->m_mouseAtScrollArea = false; this->m_origOffset = this->m_offSet; repaint(); } void ProcessListWidget::keyPressEvent(QKeyEvent *keyEvent) { if (keyEvent->key() == Qt::Key_Up) { if (keyEvent->modifiers() == Qt::ShiftModifier) shiftToPrevItem(1); else selectThePrevItem(1); } else if (keyEvent->key() == Qt::Key_Down) { if (keyEvent->modifiers() == Qt::ShiftModifier) shiftToNextItem(1); else selectTheNextItem(1); } else if (keyEvent->key() == Qt::Key_Home) { if (keyEvent->modifiers() == Qt::ControlModifier) { this->m_offSet = 0; repaint(); } else if (keyEvent->modifiers() == Qt::ShiftModifier) { shiftToHomeItem(); } else { selectTheFirstItem(); } } else if (keyEvent->key() == Qt::Key_End) { if (keyEvent->modifiers() == Qt::ControlModifier) { this->m_offSet = getBottomOffset(); repaint(); } else if (keyEvent->modifiers() == Qt::ShiftModifier) { shiftToEndItem(); } else { selectTheLastItem(); } } else if (keyEvent->key() == Qt::Key_PageUp) { if (keyEvent->modifiers() == Qt::ControlModifier) { this->m_offSet = setOffset(this->m_offSet - getTheScrollAreaHeight()); repaint(); } else if (keyEvent->modifiers() == Qt::ShiftModifier) { shiftToPrevItem(getTheScrollAreaHeight() / this->m_rowHeight); } else { selectThePrevItem(getTheScrollAreaHeight() / this->m_rowHeight); } } else if (keyEvent->key() == Qt::Key_PageDown) { if (keyEvent->modifiers() == Qt::ControlModifier) { this->m_offSet = setOffset(this->m_offSet + getTheScrollAreaHeight()); repaint(); } else if (keyEvent->modifiers() == Qt::ShiftModifier) { shiftToNextItem(getTheScrollAreaHeight() / this->m_rowHeight); } else { selectTheNextItem(getTheScrollAreaHeight() / this->m_rowHeight); } } } void ProcessListWidget::mouseMoveEvent(QMouseEvent *mouseEvent) { if (this->m_mouseDragScrollbar) { this->m_offSet = setOffset((mouseEvent->y() - getScrollbarHeight() / 2 - this->m_titleHeight) / (getTheScrollAreaHeight() * 1.0) * this->getItemsTotalHeight()); repaint(); } else if (mouseAtScrollArea(mouseEvent->x()) != this->m_mouseAtScrollArea) { this->m_mouseAtScrollArea = mouseAtScrollArea(mouseEvent->x()); repaint(); } else { bool isTitleArea = mouseAtTitleArea(mouseEvent->y()); if (isTitleArea) { int currentHoverIndex = -1; if (this->m_sortFuncList->count() != 0 && this->m_sortFuncList->count() == this->columnTitles.count() && this->m_isSortList->count() == this->columnTitles.count()) { QList titleItemsWidths = getTitleItemsWidths(); int counter = 0; int pos_X = 0; for (int t_width : titleItemsWidths) { if (t_width > 0) { if (mouseEvent->x() > pos_X && mouseEvent->x() < pos_X + t_width) { currentHoverIndex = counter; break; } pos_X += t_width; } counter++; } } if (currentHoverIndex != this->m_titleHoverColumn) { this->m_titleHoverColumn = currentHoverIndex; repaint(); } } } } void ProcessListWidget::mousePressEvent(QMouseEvent *mouseEvent) { setFocus(); bool isTitleArea = mouseAtTitleArea(mouseEvent->y()); bool isScrollArea = mouseAtScrollArea(mouseEvent->x()); if (isTitleArea) {//点击列表的标题栏区域 if (mouseEvent->button() == Qt::LeftButton) { if (this->m_sortFuncList->count() != 0 && this->m_sortFuncList->count() == this->columnTitles.count() && this->m_isSortList->count() == this->columnTitles.count()) { QList titleItemsWidths = getTitleItemsWidths(); int counter = 0; int posX = 0; for (int t_width : titleItemsWidths) { if (t_width > 0) { if (mouseEvent->x() > posX && mouseEvent->x() < posX + t_width) { if (counter != this->m_currentSortIndex) { (*this->m_isSortList)[counter] = true; } else { (*this->m_isSortList)[counter] = !(*this->m_isSortList)[counter]; } this->m_currentSortIndex = counter; this->m_isSort = (*this->m_isSortList)[counter]; emit this->changeSortStatus(this->m_currentSortIndex, this->m_isSort); this->sortItemsByColumn(counter, (*this->m_isSortList)[counter]); if (counter != this->m_titlePressColumn) { this->m_titlePressColumn = counter; } repaint(); break; } posX += t_width; } counter++; } } } else if (mouseEvent->button() == Qt::RightButton) { if (m_columnVisibles.count() == this->columnTitles.count()) { QMenu *menu = new QMenu(); menu->setObjectName("MonitorMenu"); for (int i = 0; i < m_columnVisibles.count(); i++) { if (i != 0) {//让第一行总是显示,不可以设置显示或者不显示,其他行可以设置 QAction *action = new QAction(menu); action->setText(this->columnTitles[i]); action->setCheckable(true); action->setChecked(m_columnVisibles[i]); connect(action, &QAction::triggered, this, [this, action, i] { m_columnVisibles[i] = !m_columnVisibles[i]; emit this->changeColumnVisible(i, m_columnVisibles[i], m_columnVisibles); repaint(); }); menu->addAction(action); } } menu->exec(this->mapToGlobal(mouseEvent->pos())); delete menu; } } } else if (isScrollArea) {//点击滚动条区域 int barHeight = getScrollbarHeight(); int barY = getScrollbarY(); if (mouseEvent->y() > barY && mouseEvent->y() < barY + barHeight) { this->m_mouseDragScrollbar = true; } else { this->m_offSet = setOffset((mouseEvent->y() - barHeight / 2 - this->m_titleHeight) / (getTheScrollAreaHeight() * 1.0) * this->getItemsTotalHeight()); repaint(); } } else { int pressedItemIndex = (this->m_offSet + mouseEvent->y() - this->m_titleHeight) / this->m_rowHeight; if (pressedItemIndex >= this->m_searchedItems->count()) { clearSelectedItems(); repaint(); } else { if (mouseEvent->button() == Qt::LeftButton) { if (pressedItemIndex < this->m_searchedItems->count()) { if (mouseEvent->modifiers() == Qt::ControlModifier) { ProcessListItem *item = (*this->m_searchedItems)[pressedItemIndex]; if (this->m_selectedItems->contains(item)) { this->m_selectedItems->removeOne(item); } else { QList items = QList(); items << item; addSelectedItems(items); } } else if ((mouseEvent->modifiers() == Qt::ShiftModifier) && !this->m_selectedItems->empty()) { int lastSelectionIndex = this->m_searchedItems->indexOf(this->m_lastItem); int selectionStartIndex = std::min(pressedItemIndex, lastSelectionIndex); int selectionEndIndex = std::max(pressedItemIndex, lastSelectionIndex); shiftToSelectedItems(selectionStartIndex, selectionEndIndex); } else { clearSelectedItems(); QList items = QList(); items << (*this->m_searchedItems)[pressedItemIndex]; addSelectedItems(items); } repaint(); } } else if (mouseEvent->button() == Qt::RightButton) { ProcessListItem *pressItem = (*this->m_searchedItems)[pressedItemIndex]; bool pressInSelectionArea = false; for (ProcessListItem *item : *this->m_selectedItems) { if (item == pressItem) { pressInSelectionArea = true; break; } } if (!pressInSelectionArea && pressedItemIndex < this->m_searchedItems->length()) { clearSelectedItems(); QList items = QList(); items << (*this->m_searchedItems)[pressedItemIndex]; addSelectedItems(items); repaint(); } if (this->m_selectedItems->length() > 0) { emit this->rightMouseClickedItems(this->mapToGlobal(mouseEvent->pos()), *this->m_selectedItems); } } } } } void ProcessListWidget::mouseReleaseEvent(QMouseEvent *) { if (this->m_mouseDragScrollbar) { this->m_mouseDragScrollbar = false; repaint(); } else { if (this->m_titlePressColumn != -1) { this->m_titlePressColumn = -1; repaint(); } } } void ProcessListWidget::wheelEvent(QWheelEvent *event) { if (event->orientation() == Qt::Vertical) { this->m_origOffset = this->m_offSet; qreal scrollStep = event->angleDelta().y() / 100.0; this->m_offSet = setOffset(this->m_offSet - scrollStep * this->m_rowHeight); repaint(); } event->accept(); } void ProcessListWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QList titleItemsWidths = getTitleItemsWidths(); painter.setOpacity(0.05); int penWidth = 1; QPainterPath framePath; framePath.addRoundedRect(QRect(rect().x() + penWidth, rect().y() + penWidth, rect().width() - penWidth * 2, rect().height() - penWidth * 2), 5, 5);//背景弧度 painter.setClipPath(framePath); //标题的背景 if (this->m_titleHeight > 0) { QPainterPath titlePath; titlePath.addRect(QRectF(rect().x(), rect().y(), rect().width(), this->m_titleHeight)); painter.setOpacity(0.02); painter.fillPath(titlePath, QColor("#ffffff")); } int title_Y = 0; int title_Height = 0; if (this->m_titleHeight > 0) { int counter = 0; int posX = 0; for (int itemWidth:titleItemsWidths) { if (itemWidth > 0) { //标题文字左上方的排序箭头图标 if (this->m_currentSortIndex == counter) { painter.setOpacity(1); if (this->m_isSort) { painter.drawPixmap(QPoint(rect().x() + posX + 5, rect().y() + 10), m_downArrowPixmap); } else { painter.drawPixmap(QPoint(rect().x() + posX + 5, rect().y() + 10), m_upArrowPixmap); } } //标题文字 painter.setOpacity(1); QFont font = painter.font(); // font.setPointSize(10); font.setPixelSize(12); painter.setFont(font); painter.setPen(QPen(QColor("#999999"))); if (this->columnTitles[counter] == tr("Process Name") || this->columnTitles[counter] == tr("Command Line") || this->columnTitles[counter] == tr("Priority")) painter.drawText(QRect(posX + this->m_titlePadding, 0, itemWidth, this->m_titleHeight), Qt::AlignBottom | Qt::AlignLeft, this->columnTitles[counter]); else painter.drawText(QRect(posX, 0, itemWidth - this->m_titlePadding, this->m_titleHeight), Qt::AlignBottom | Qt::AlignRight, this->columnTitles[counter]); //水平下划线 painter.setOpacity(0.8); QPainterPath h_separatorPath; h_separatorPath.addRect(QRectF(posX, rect().y() + this->m_titleHeight - 1, itemWidth, 1)); painter.fillPath(h_separatorPath, QColor("#e0e0e0")); if (counter < titleItemsWidths.size()) {//垂直分割线 QPainterPath v_separatorPath; v_separatorPath.addRect(QRectF(rect().x() + posX - 1, rect().y() + 5, 1, this->m_titleHeight - 5)); painter.fillPath(v_separatorPath, QColor("#e0e0e0")); } posX += itemWidth; } counter++; } title_Y += this->m_titleHeight; title_Height += this->m_titleHeight; } //去掉列表标题栏后的列表显示区域的背景 painter.setOpacity(0.05); QPainterPath backgroundPath; backgroundPath.addRect(QRectF(rect().x(), rect().y() + this->m_titleHeight, rect().width(), rect().height() - this->m_titleHeight)); painter.fillPath(backgroundPath, QColor("#ffffff")); //进程信息 QPainterPath scrollAreaPath; scrollAreaPath.addRect(QRectF(rect().x(), rect().y() + this->m_titleHeight, rect().width(), getTheScrollAreaHeight())); int rowCounter = 0; for (ProcessListItem *item:*this->m_searchedItems) { if (rowCounter > ((this->m_offSet - this->m_rowHeight) / this->m_rowHeight)) { QPainterPath itemPath; itemPath.addRect(QRect(0, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, rect().width(), this->m_rowHeight)); painter.setClipPath((framePath.intersected(scrollAreaPath)).intersected(itemPath)); bool isSelect = this->m_selectedItems->contains(item); painter.save(); item->drawBackground(QRect(0, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, rect().width(), this->m_rowHeight), &painter, rowCounter, isSelect); painter.restore(); int columnCounter = 0; int columnTitleX = 0; for (int titleItemWidth : titleItemsWidths) { if (titleItemWidth > 0) { painter.save(); if (columnCounter < titleItemsWidths.size() - 1) item->drawForeground(QRect(columnTitleX, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, titleItemWidth, this->m_rowHeight), &painter, columnCounter, rowCounter, isSelect, true); else item->drawForeground(QRect(columnTitleX, title_Y + rowCounter * this->m_rowHeight - this->m_offSet, titleItemWidth, this->m_rowHeight), &painter, columnCounter, rowCounter, isSelect, false); painter.restore(); columnTitleX += titleItemWidth; } columnCounter++; } title_Height += this->m_rowHeight; if (title_Height > rect().height()) { break; } } rowCounter++; } painter.setClipPath(framePath); //没有搜索结果时绘制提示文字 if (this->m_searchText != "" && this->m_searchedItems->size() == 0) { painter.setOpacity(1); painter.setPen(QPen(QColor("#666666"))); QFont font = painter.font() ; font.setPointSize(22); painter.setFont(font); painter.drawText(QRect(rect().x(), rect().y() + this->m_titleHeight, rect().width(), rect().height() - this->m_titleHeight), Qt::AlignCenter, tr("No search result")); } //背景 // QPen framePen; // framePen.setColor(QColor("#F5F5F5")); // painter.setPen(framePen); painter.setOpacity(0.2); painter.drawPath(framePath); //垂直滚动条 if (this->m_mouseAtScrollArea) { paintScrollbar(&painter); } else if (this->m_origOffset != this->m_offSet) { paintScrollbar(&painter); readyToHideScrollbar(); } } void ProcessListWidget::paintScrollbar(QPainter *painter) { if (this->getItemsTotalHeight() > getTheScrollAreaHeight()) { qreal opacitry = 0; if (this->m_mouseDragScrollbar) { opacitry = 0.8; } else { if (this->m_mouseAtScrollArea) opacitry = 0.7; else opacitry = 0.5; } int barWidth = (this->m_mouseAtScrollArea || this->m_mouseDragScrollbar) ? this->m_scrollbarWidth : 6; int barY = getScrollbarY(); int barHeight = getScrollbarHeight(); painter->setOpacity(opacitry); QPainterPath path; path.addRoundedRect( QRectF(rect().x() + rect().width() - barWidth - 4, barY + 2, barWidth, barHeight - 2 * 2), 2, 2);//2 is radius painter->fillPath(path, QColor("#0B95D7")); QPen pen; pen.setColor(QColor("#0B95D7")); pen.setWidth(1); painter->setOpacity(0); painter->setPen(pen); painter->drawPath(path); } } QList ProcessListWidget::getTitleItemsWidths() { QList titleItemsWidths; if (this->m_columnWidths.length() > 0) { if (this->m_columnWidths.contains(-1)) { for (int i = 0; i < this->m_columnWidths.count(); i++) { if (this->m_columnWidths[i] != -1) { if (m_columnVisibles[i]) { titleItemsWidths << this->m_columnWidths[i]; } else { titleItemsWidths << 0; } } else { if (m_columnVisibles[i]) { int totalWidth = 0; for (int j = 0; j < this->m_columnWidths.count(); j++) { if (this->m_columnWidths[j] != -1 && m_columnVisibles[j]) { totalWidth += this->m_columnWidths[j]; } } titleItemsWidths << rect().width() - totalWidth; } else { titleItemsWidths << 0; } } } } else { for (int i = 0; i < this->m_columnWidths.count(); i++) { if (m_columnVisibles[i]) { titleItemsWidths << this->m_columnWidths[i]; } else { titleItemsWidths << 0; } } } } else { titleItemsWidths << rect().width(); } return titleItemsWidths; } bool ProcessListWidget::mouseAtScrollArea(int x) { return (x > rect().x() + rect().width() - this->m_scrollbarWidth) && (x < rect().x() + rect().width()); } bool ProcessListWidget::mouseAtTitleArea(int y) { return (y > rect().y() && y < rect().y() + this->m_titleHeight); } int ProcessListWidget::setOffset(int offset) { return std::max(0, std::min(offset, getBottomOffset())); } int ProcessListWidget::getItemsTotalHeight() { return m_searchedItems->count() * m_rowHeight; } int ProcessListWidget::getTheScrollAreaHeight() { return this->rect().height() - this->m_titleHeight; } int ProcessListWidget::getScrollbarY() { return static_cast((this->m_offSet / (this->getItemsTotalHeight() * 1.0)) * getTheScrollAreaHeight() + this->m_titleHeight); } int ProcessListWidget::getScrollbarHeight() { return std::max(static_cast(getTheScrollAreaHeight() / (this->getItemsTotalHeight() * 1.0) * rect().height()), 30);//30 is min height } QList ProcessListWidget::getSearchedItems(QList items) { if (m_searchText == "" || m_searchFunc == NULL) { return items; } else { QList *search_items = new QList(); for (ProcessListItem *item : items) { if (m_searchFunc(item, m_searchText)) { search_items->append(item); } } return *search_items; } } int ProcessListWidget::getBottomOffset() { int itemsHeight = this->getItemsTotalHeight(); if (itemsHeight > rect().height() - this->m_titleHeight) { return this->getItemsTotalHeight() - rect().height() + this->m_titleHeight; } else { return 0; } } void ProcessListWidget::sortItemsByColumn(int column, bool isSort) { if (m_sortFuncList->count() != 0 && m_sortFuncList->count() == columnTitles.count() && m_isSortList->count() == columnTitles.count()) { qSort(m_searchedItems->begin(), m_searchedItems->end(), [&](const ProcessListItem *item1, const ProcessListItem *item2) { return (*m_sortFuncList)[column](item1, item2, isSort); }); } } void ProcessListWidget::readyToHideScrollbar() { if (this->m_hideScrollbarTimer) { if (this->m_hideScrollbarTimer->isActive()) this->m_hideScrollbarTimer->stop(); } else { this->m_hideScrollbarTimer = new QTimer(); this->m_hideScrollbarTimer->setSingleShot(true); connect(this->m_hideScrollbarTimer, SIGNAL(timeout()), this, SLOT(hideScrollbar())); } this->m_hideScrollbarTimer->start(2000); } youker-assistant/plugins/systemmonitor/util.cpp0000664000175000017500000002034613260315532021130 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "util.h" #include #include #include #include #include #include #include std::string make_string(char *c_str) { if (!c_str) { return string(); } string s(c_str); g_free(c_str); return s; } static inline unsigned divide(unsigned *q, unsigned *r, unsigned d) { *q = *r / d; *r = *r % d; return *q != 0; } QString formatDurationForDisplay(unsigned centiseconds) { unsigned weeks = 0, days = 0, hours = 0, minutes = 0, seconds = 0; (void)(divide(&seconds, ¢iseconds, 100) && divide(&minutes, &seconds, 60) && divide(&hours, &minutes, 60) && divide(&days, &hours, 24) && divide(&weeks, &days, 7)); QString formatTime; gchar *duration = NULL; if (weeks) { duration = g_strdup_printf("%uw%ud", weeks, days); formatTime = QString(QLatin1String(duration)); if (duration) { g_free(duration); duration = NULL; } return formatTime; } if (days) { duration = g_strdup_printf("%ud%02uh", days, hours); formatTime = QString(QLatin1String(duration)); if (duration) { g_free(duration); duration = NULL; } return formatTime; } if (hours) { duration = g_strdup_printf("%u:%02u:%02u", hours, minutes, seconds); formatTime = QString(QLatin1String(duration)); if (duration) { g_free(duration); duration = NULL; } return formatTime; } duration = g_strdup_printf("%u:%02u.%02u", minutes, seconds, centiseconds); formatTime = QString(QLatin1String(duration)); if (duration) { g_free(duration); duration = NULL; } return formatTime; } std::string getDesktopFileAccordProcName(QString procName, QString cmdline) { QDirIterator dir("/usr/share/applications", QDirIterator::Subdirectories); std::string desktopFile; QString procname = procName.toLower(); procname.replace("_", "-"); QString processFilename = procname + ".desktop"; while(dir.hasNext()) { if (dir.fileInfo().suffix() == "desktop") { if (dir.fileName().toLower().contains(processFilename)) { desktopFile = dir.filePath().toStdString(); break; } } dir.next(); } return desktopFile; } QPixmap getAppIconFromDesktopFile(std::string desktopFile, int iconSize) { std::ifstream in; in.open(desktopFile); QIcon defaultExecutableIcon = QIcon::fromTheme("application-x-executable");//gnome-mine-application-x-executable if (defaultExecutableIcon.isNull()) { defaultExecutableIcon = QIcon("/usr/share/icons/kylin-icon-theme/48x48/mimetypes/application-x-executable.png"); if (defaultExecutableIcon.isNull()) defaultExecutableIcon = QIcon(":/res/autostart-default.png"); } QIcon icon; QString iconName; while(!in.eof()) { std::string line; std::getline(in,line); iconName = QString::fromStdString(line); if (iconName.startsWith("Icon=")) { iconName.remove(0,5); } else { continue; } if (iconName.contains("/")) { icon = QIcon(iconName); } else { icon = QIcon::fromTheme(iconName, defaultExecutableIcon); break; } } in.close(); qreal devicePixelRatio = qApp->devicePixelRatio(); QPixmap pixmap = icon.pixmap(iconSize * devicePixelRatio, iconSize * devicePixelRatio); pixmap.setDevicePixelRatio(devicePixelRatio); return pixmap; } QString getDisplayNameAccordProcName(QString procName, std::string desktopFile) { if (desktopFile.size() == 0) { return procName; } std::ifstream in; in.open(desktopFile); QString displayName = procName; while(!in.eof()) { std::string line; std::getline(in,line); QString lineContent = QString::fromStdString(line); QString localNameFlag = QString("Name[%1]=").arg(QLocale::system().name()); QString nameFlag = "Name="; QString genericNameFlag = QString("GenericName[%1]=").arg(QLocale::system().name()); if (lineContent.startsWith(localNameFlag)) { displayName = lineContent.remove(0, localNameFlag.size()); break; } else if (lineContent.startsWith(genericNameFlag)) { displayName = lineContent.remove(0, genericNameFlag.size()); break; } else if (lineContent.startsWith(nameFlag)) { displayName = lineContent.remove(0, nameFlag.size()); continue; } else { continue; } } in.close(); return displayName; } QString formatProcessState(guint state) { QString status; switch (state) { case GLIBTOP_PROCESS_RUNNING: status = QString(QObject::tr("Running"));//运行中 break; case GLIBTOP_PROCESS_STOPPED: status = QString(QObject::tr("Stopped"));//已停止 break; case GLIBTOP_PROCESS_ZOMBIE: status = QString(QObject::tr("Zombie"));//僵死 break; case GLIBTOP_PROCESS_UNINTERRUPTIBLE: status = QString(QObject::tr("Uninterruptible"));//不可中断 break; default: status = QString(QObject::tr("Sleeping"));//睡眠中 break; } return status; } QString getNiceLevel(int nice) { if (nice < -7) return QObject::tr("Very High"); else if (nice < -2) return QObject::tr("High"); else if (nice < 3) return QObject::tr("Normal"); else if (nice < 7) return QObject::tr("Low"); else return QObject::tr("Very Low"); } QString getNiceLevelWithPriority(int nice) { if (nice < -7) return QObject::tr("Very High Priority"); else if (nice < -2) return QObject::tr("High Priority"); else if (nice < 3) return QObject::tr("Normal Priority"); else if (nice < 7) return QObject::tr("Low Priority"); else return QObject::tr("Very Low Priority"); } void setFontSize(QPainter &painter, int textSize) { QFont font = painter.font() ; font.setPixelSize(textSize); // font.setPointSize(textSize); painter.setFont(font); } QString formatUnitSize(double v, const char** orders, int nb_orders) { int order = 0; while (v >= 1024 && order + 1 < nb_orders) { order++; v = v/1024; } char buffer1[30]; snprintf(buffer1, sizeof(buffer1), "%.1lf %s", v, orders[order]); return QString(buffer1); } QString formatByteCount(double v) { static const char* orders[] = { "B", "KB", "MB", "GB", "TB" }; return formatUnitSize(v, orders, sizeof(orders)/sizeof(orders[0])); } QString getDeviceMountedPointPath(const QString &line) { const QStringList items = line.split(" "); if (items.length() > 4) { return items.at(1); } else { return ""; } } QString getFileContent(const QString &filePath) { QFile fd(filePath); QString fileContent = ""; if (fd.open(QFile::ReadOnly)) { fileContent = QLatin1String(fd.readAll()); fd.close(); } return fileContent; } QSet getFileContentsLineByLine(const QString &filePath) { QString fileContent = getFileContent(filePath); return QSet::fromList(fileContent.split("\n")); } youker-assistant/plugins/systemmonitor/memorycircle.h0000664000175000017500000000207613260315532022312 0ustar fengfeng#ifndef MEMORYCIRCLE_H #define MEMORYCIRCLE_H #include #include #include #include typedef struct MemoryInfo { float total; float free; float cached; float used; float user; float percent; float swaptotal; float swapfree; float swapcached; float swapused; float swappercent; }Meminfo; class MemoryCircle : public QWidget { Q_OBJECT public: MemoryCircle(QWidget *parent = 0); ~MemoryCircle(); void drawCircle(QPainter &painter, bool isSwap = false); void drawColorPie(QPainter &painter, bool isSwap = false); void drawTextInfo(QPainter &painter); public slots: void onUpdateMemoryStatus(); signals: void rebackMemoryInfo(const QString &info, double percent); protected: void paintEvent(QPaintEvent * event); private: qreal circleRadius; qreal rectWidth; qreal rectHeight; qreal colorPieRadius; QPointF center; QPointF swapcenter; QRectF pieRect; QRectF swappieRect; Meminfo mi; }; #endif // MEMORYCIRCLE_H youker-assistant/plugins/systemmonitor/networkwidget.cpp0000664000175000017500000000607313260315532023051 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "networkwidget.h" #include "networkflow.h" #include #include #include #include NetworkWidget::NetworkWidget(QWidget *parent) : QWidget(parent) { mainLayout = new QHBoxLayout(this); mainLayout->setContentsMargins(0, 0, 0, 0); QWidget *w = new QWidget; m_widgetLayout = new QVBoxLayout(w); m_widgetLayout->setContentsMargins(6, 0, 0, 0); m_widgetLayout->setSpacing(0); m_title = new QLabel(tr("Network")); m_title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_title->setStyleSheet("background:transparent;font-size:24px;color:#000000"); /*QFont font = m_title->font(); font.setPointSize(24); font.setWeight(QFont::Light); m_title->setFont(font);*/ m_networkFlow = new NetworkFlow; m_widgetLayout->addWidget(m_title); m_widgetLayout->addWidget(m_networkFlow); mainLayout->addWidget(w, 0, Qt::AlignCenter); // math1_radio = new QRadioButton(); // math2_radio = new QRadioButton(); // math1_radio->setFocusPolicy(Qt::NoFocus); // math1_radio->setObjectName("math1"); // math2_radio->setFocusPolicy(Qt::NoFocus); // math2_radio->setObjectName("math2"); // math1_radio->setChecked(false); // math2_radio->setChecked(true); // math1_radio->move(10,10); // math2_radio->move(100,10); // connect(math1_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); // connect(math2_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); } NetworkWidget::~NetworkWidget() { delete m_title; delete m_networkFlow; QLayoutItem *child; while ((child = m_widgetLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete mainLayout; } void NetworkWidget::setRadioButtonRowStatus() { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 QRadioButton* pbtn = qobject_cast(obj); QString obj_name = pbtn->objectName(); if(obj_name == "math1") { } else if(obj_name == "math2") { } } void NetworkWidget::onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateBytes, long sentRateBytes) { m_networkFlow->onUpdateNetworkStatus(recvTotalBytes, sentTotalBytes, recvRateBytes, sentRateBytes); } youker-assistant/plugins/systemmonitor/networkflow.cpp0000664000175000017500000002603313260315532022533 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "networkflow.h" #include "smoothcurvegenerator.h" #include "util.h" #include #include #include #include #include #include #include inline QString formatNetworkBrandWidth(guint64 size, bool isTotal) { enum { K_INDEX, M_INDEX, G_INDEX, T_INDEX }; QList factorList; factorList.append(G_GUINT64_CONSTANT(1) << 10);//KiB factorList.append(G_GUINT64_CONSTANT(1) << 20);//MiB factorList.append(G_GUINT64_CONSTANT(1) << 30);//GiB factorList.append(G_GUINT64_CONSTANT(1) << 40);//TiB if (size < factorList.at(K_INDEX)) { if ((guint) size > 1) { if (isTotal) return QString("%1 %2").arg((guint) size).arg(QObject::tr("byte")); else return QString("%1 %2").arg((guint) size).arg(QObject::tr("byte/s")); } else { if (isTotal) return QString("%1 %2").arg((guint) size).arg(QObject::tr("bytes")); else return QString("%1 %2").arg((guint) size).arg(QObject::tr("bytes/s")); } } else { guint64 factor; QString format; if (size < factorList.at(M_INDEX)) { factor = factorList.at(K_INDEX); if (isTotal) format = QObject::tr("KiB"); else format = QObject::tr("KiB/s"); }else if (size < factorList.at(G_INDEX)) { factor = factorList.at(M_INDEX); if (isTotal) format = QObject::tr("MiB"); else format = QObject::tr("MiB/s"); } else if (size < factorList.at(T_INDEX)) { factor = factorList.at(G_INDEX); if (isTotal) format = QObject::tr("GiB"); else format = QObject::tr("GiB/s"); } else { factor = factorList.at(T_INDEX); if (isTotal) format = QObject::tr("TiB"); else format = QObject::tr("TiB/s"); } std::string formatted_result(make_string(g_strdup_printf("%.1f", size / (double)factor))); return QString::fromStdString(formatted_result) + format; } } inline QString formatNetwork(guint64 rate) { return formatNetworkBrandWidth(rate, true); } inline QString formatNetworkRate(guint64 rate) { return formatNetworkBrandWidth(rate, false); } NetworkFlow::NetworkFlow(QWidget *parent) : QWidget(parent) ,m_outsideBorderColor(QColor("#009944")) ,m_bgColor(QColor("#ffffff")) ,m_downloadColor(QColor("#009944")) ,m_uploadColor(QColor("#e60012")) { setFixedSize(403, 300); receiveText = tr("Receive"); sendText = tr("Send"); m_netMaxHeight = 60; m_pointSpace = 10; m_pointsCount = int((this->width() -2) / m_pointSpace); m_downloadSpeedList = new QList(); for (int i = 0; i < m_pointsCount; i++) { m_downloadSpeedList->append(0); } m_uploadSpeedList = new QList(); for (int i = 0; i < m_pointsCount; i++) { m_uploadSpeedList->append(0); } m_gridY = new QList(); /*connect(ui->generateCurveButton, SIGNAL(clicked(bool)), this, SLOT(generateCurves())); connect(ui->showKnotsCheckBox, SIGNAL(clicked(bool)), this, SLOT(update())); connect(ui->showSmoothCurveCheckBox, SIGNAL(clicked(bool)), this, SLOT(update())); connect(ui->smoothCurveGeneratorComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(update())); ui->generateCurveButton->click();*/ } NetworkFlow::~NetworkFlow() { delete m_downloadSpeedList; delete m_uploadSpeedList; delete m_gridY; } //http://www.qtdebug.com/qtbook-paint-smooth-curve/ void NetworkFlow::onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateBytes, long sentRateBytes) { m_recvTotalBytes = recvTotalBytes; m_sentTotalBytes = sentTotalBytes; m_recvRateBytes = recvRateBytes; m_sentRateBytes = sentRateBytes; //download QList downloadPoints; m_downloadSpeedList->append(m_recvRateBytes); if (m_downloadSpeedList->size() > m_pointsCount) { m_downloadSpeedList->pop_front(); } //计算出下载速度中最大的值 long downloadMaxHeight = 0; for (int i = 0; i < m_downloadSpeedList->size(); i++) { if (m_downloadSpeedList->at(i) > downloadMaxHeight) { downloadMaxHeight = m_downloadSpeedList->at(i); } } for (int i = 0; i < m_downloadSpeedList->size(); i++) { if (downloadMaxHeight < m_netMaxHeight) { downloadPoints.append(QPointF(i * m_pointSpace, m_downloadSpeedList->at(i))); } else { downloadPoints.append(QPointF(i * m_pointSpace, m_downloadSpeedList->at(i) * m_netMaxHeight / downloadMaxHeight)); } } m_downloadPath = SmoothCurveGenerator::generateSmoothCurve(downloadPoints); /*// 根据曲线上的点创建平滑曲线 smoothCurve1 = SmoothCurveGenerator1::generateSmoothCurve(downloadPoints); smoothCurve2 = SmoothCurveGenerator2::generateSmoothCurve(downloadPoints); // 连接点创建非平滑曲线曲线 nonSmoothCurve = QPainterPath(); nonSmoothCurve.moveTo(downloadPoints[0]); for (int i = 1; i < downloadPoints.size(); ++i) { nonSmoothCurve.lineTo(downloadPoints[i]); }*/ //upload QList uploadPoints; m_uploadSpeedList->append(m_sentRateBytes); if (m_uploadSpeedList->size() > m_pointsCount) { m_uploadSpeedList->pop_front(); } //计算出上传速度中最大的值 long uploadMaxHeight = 0; for (int i = 0; i < m_uploadSpeedList->size(); i++) { if (m_uploadSpeedList->at(i) > uploadMaxHeight) { uploadMaxHeight = m_uploadSpeedList->at(i); } } for (int i = 0; i < m_uploadSpeedList->size(); i++) { if (uploadMaxHeight < m_netMaxHeight) { uploadPoints.append(QPointF(i * m_pointSpace, m_uploadSpeedList->at(i))); } else { uploadPoints.append(QPointF(i * m_pointSpace, m_uploadSpeedList->at(i) * m_netMaxHeight / uploadMaxHeight)); } } m_uploadPath = SmoothCurveGenerator::generateSmoothCurve(uploadPoints); repaint(); } void NetworkFlow::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true);//反走样,绘制出来的线条会出现锯齿 int penSize = 1; int gridX = rect().x() + penSize; int gridY = rect().y() + 10; int gridWidth = rect().width() - penSize * 2; int gridHeight = 90; //border of rect QPainterPath borderPath; borderPath.addRoundedRect(QRect(rect().x(), rect().y() + 9, gridWidth + penSize * 2, gridHeight + penSize * 2), 0, 0); QPen pen(this->m_outsideBorderColor, 1); painter.setPen(pen); painter.drawPath(borderPath); //background of rect painter.setOpacity(1); QPainterPath framePath; framePath.addRect(QRectF(gridX, gridY, gridWidth, gridHeight)); painter.fillPath(framePath, this->m_bgColor);//painter.drawPath(framePath); painter.save(); //draw download smoothcurve painter.setOpacity(1); painter.translate((rect().width() - m_pointsCount * m_pointSpace - 2) / 2 + 6, 80);//将坐标第原点移动到该点 painter.scale(1, -1);//将横坐标扩大1倍,将纵坐标缩小1倍 painter.setPen(QPen(this->m_downloadColor, 1)); painter.setBrush(QBrush());//painter.setBrush(QBrush(QColor("#f4f2f4"))); painter.drawPath(m_downloadPath);//绘制前面创建的path:m_downloadPath //draw upload smoothcurve painter.translate(0, -8); painter.setPen(QPen(this->m_uploadColor, 1)); painter.setBrush(QBrush());//painter.setBrush(QBrush(QColor("#f4f2f4"))); painter.drawPath(m_uploadPath); painter.restore(); painter.setRenderHint(QPainter::Antialiasing, true); setFontSize(painter, 12); QFontMetrics fm = painter.fontMetrics(); int receiveTextWidth = fm.width(this->receiveText); int sendTextWidth = fm.width(this->sendText); painter.setPen(QPen(QColor("#000000"), 1)); painter.drawText(QRect(gridX, gridHeight + 10, receiveTextWidth, 30), Qt::AlignLeft | Qt::AlignVCenter, this->receiveText); painter.drawText(QRect(gridX + receiveTextWidth*2, gridHeight + 10, sendTextWidth, 30), Qt::AlignLeft | Qt::AlignVCenter, this->sendText); painter.setPen(QPen(QColor("#009944"), 1)); painter.drawLine(gridX + receiveTextWidth + 5, gridHeight + 10 + 30/2, gridX + receiveTextWidth*2 - 10, gridHeight + 10 + 30/2); painter.setPen(QPen(QColor("#e60012"), 1)); painter.drawLine(gridX + receiveTextWidth*2 + sendTextWidth + 5, gridHeight + 10 + 30/2, gridX + receiveTextWidth*3 + sendTextWidth - 10, gridHeight + 10 + 30/2); int contentWidth = 180; //draw title setFontSize(painter, 12); painter.setPen(QPen(QColor("#999999"))); painter.drawText(QRect(gridX, gridHeight + 40, contentWidth, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Receiving")); painter.drawText(QRect(gridX + contentWidth, gridHeight + 40, contentWidth, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Sending")); painter.drawText(QRect(gridX, gridHeight + 100, contentWidth, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Total Received")); painter.drawText(QRect(gridX + contentWidth, gridHeight + 100, contentWidth, 30), Qt::AlignLeft |Qt::AlignVCenter, tr("Total Sent")); //draw text data setFontSize(painter, 20); QFontMetrics fms = painter.fontMetrics(); painter.setPen(QPen(QColor("#000000"))); const QString downloadRate = formatNetworkRate(m_recvRateBytes); const QString downloadContent = formatNetwork(m_recvTotalBytes);//接收 const QString uploadRate = formatNetworkRate(m_sentRateBytes); const QString uploadContent = formatNetwork(m_sentTotalBytes); painter.drawText(QRect(gridX, gridHeight + 70, fms.width(downloadRate), 30), Qt::AlignLeft |Qt::AlignVCenter, downloadRate); painter.drawText(QRect(gridX + contentWidth, gridHeight + 70, fms.width(uploadRate), 30), Qt::AlignLeft |Qt::AlignVCenter, uploadRate); painter.drawText(QRect(gridX, gridHeight + 130, fms.width(downloadContent), 30), Qt::AlignLeft |Qt::AlignVCenter, downloadContent); painter.drawText(QRect(gridX + contentWidth, gridHeight + 130, fms.width(uploadContent), 30), Qt::AlignLeft |Qt::AlignVCenter, uploadContent); } youker-assistant/plugins/systemmonitor/smoothcurvegenerator.cpp0000664000175000017500000001234213260315532024435 0ustar fengfeng/* * 参考代码原属主:公孙二狗 * 链接地址:http://www.qtdebug.com/qtbook-paint-smooth-curve/ * https://www.codeproject.com/Articles/31859/Draw-a-Smooth-Curve-through-a-Set-of-D-Points-wit%EF%BC%8C%E6%A0%B8%E5%BF%83%E6%98%AF%E4%BD%BF%E7%94%A8%E6%9B%B2%E7%BA%BF%E4%B8%8A%E7%9A%84%E7%82%B9%E8%AE%A1%E7%AE%97%E5%87%BA%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%8E%A7%E5%88%B6%E7%82%B9%EF%BC%8C%E7%84%B6%E5%90%8E%E4%BD%BF%E7%94%A8%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF%E7%94%9F%E6%88%90%E5%B9%B3%E6%BB%91%E6%9B%B2%E7%BA%BF%EF%BC%8C%E5%BE%88%E6%83%AD%E6%84%A7%E7%9A%84%E6%98%AF%E7%94%9F%E6%88%90%E6%8E%A7%E5%88%B6%E7%82%B9%E7%9A%84%E7%AE%97%E6%B3%95%E7%BB%86%E8%8A%82%E6%88%91%E6%B2%A1%E7%9C%8B%E6%87%82%EF%BC%8C%E5%8F%AA%E4%B8%8D%E8%BF%87%E6%98%AF%E4%BD%9C%E4%BA%86%E4%B8%80%E6%AC%A1%E6%90%AC%E8%BF%90%E5%B7%A5%EF%BC%8C%E6%8A%8A%E7%A8%8B%E5%BA%8F%E7%A7%BB%E6%A4%8D%E5%88%B0%E4%BA%86 */ #include "smoothcurvegenerator.h" QPainterPath SmoothCurveGenerator::generateSmoothCurve1(const QList &points) { if (points.size() == 0) { return QPainterPath(); } QPainterPath path(points[0]); for (int i = 0; i < points.size() - 1; ++i) { // 控制点的 x 坐标为 sp 与 ep 的 x 坐标和的一半 // 第一个控制点 c1 的 y 坐标为起始点 sp 的 y 坐标 // 第二个控制点 c2 的 y 坐标为结束点 ep 的 y 坐标 QPointF sp = points[i]; QPointF ep = points[i+1]; QPointF c1 = QPointF((sp.x() + ep.x()) / 2, sp.y()); QPointF c2 = QPointF((sp.x() + ep.x()) / 2, ep.y()); path.cubicTo(c1, c2, ep); } return path; } //使用QPainterPath画贝塞尔曲线 QPainterPath SmoothCurveGenerator::generateSmoothCurve(const QList &points) { QPainterPath path; int len = points.size(); if (len < 2) { return path; } QList firstControlPoints; QList secondControlPoints; calculateControlPoints(points, &firstControlPoints, &secondControlPoints); path.moveTo(points[0].x(), points[0].y());//默认是从原点(0,0)开始绘图,使用moveTo()改变绘图的开始位置 // Using bezier curve to generate a smooth curve. for (int i = 0; i < len - 1; ++i) { path.cubicTo(firstControlPoints[i], secondControlPoints[i], points[i+1]);//三阶贝赛尔曲线函数cubicto()绘图,传入点1 firstControlPoints[i],点2 secondControlPoints[i],endPoint(points[i+1]) } return path; } void SmoothCurveGenerator::calculateFirstControlPoints(double *&result, const double *rhs, int n) { double *tmp = new double[n]; double b = 2.0; result[0] = rhs[0] / b; // Decomposition and forward substitution. for (int i = 1; i < n; i++) { tmp[i] = 1 / b; b = (i < n - 1 ? 4.0 : 3.5) - tmp[i]; result[i] = (rhs[i] - result[i - 1]) / b; } for (int i = 1; i < n; i++) { result[n - i - 1] -= tmp[n - i] * result[n - i]; // Backsubstitution. } delete[] tmp; } void SmoothCurveGenerator::calculateControlPoints(const QList &knots, QList *firstControlPoints, QList *secondControlPoints) { int n = knots.size() - 1; for (int i = 0; i < n; ++i) { firstControlPoints->append(QPointF()); secondControlPoints->append(QPointF()); } if (n == 1) { // Special case: Bezier curve should be a straight line. // P1 = (2P0 + P3) / 3 (*firstControlPoints)[0].rx() = (2 * knots[0].x() + knots[1].x()) / 3; (*firstControlPoints)[0].ry() = (2 * knots[0].y() + knots[1].y()) / 3; // P2 = 2P1 – P0 (*secondControlPoints)[0].rx() = 2 * (*firstControlPoints)[0].x() - knots[0].x(); (*secondControlPoints)[0].ry() = 2 * (*firstControlPoints)[0].y() - knots[0].y(); return; } // Calculate first Bezier control points double *xs = new double[n]; double *ys = new double[n]; double *rhsx = new double[n]; // Right hand side vector double *rhsy = new double[n]; // Right hand side vector // Set right hand side values for (int i = 1; i < n - 1; ++i) { rhsx[i] = 4 * knots[i].x() + 2 * knots[i + 1].x(); rhsy[i] = 4 * knots[i].y() + 2 * knots[i + 1].y(); } rhsx[0] = knots[0].x() + 2 * knots[1].x(); rhsx[n - 1] = (8 * knots[n - 1].x() + knots[n].x()) / 2.0; rhsy[0] = knots[0].y() + 2 * knots[1].y(); rhsy[n - 1] = (8 * knots[n - 1].y() + knots[n].y()) / 2.0; // Calculate first control points coordinates calculateFirstControlPoints(xs, rhsx, n); calculateFirstControlPoints(ys, rhsy, n); // Fill output control points. for (int i = 0; i < n; ++i) { (*firstControlPoints)[i].rx() = xs[i]; (*firstControlPoints)[i].ry() = ys[i]; if (i < n - 1) { (*secondControlPoints)[i].rx() = 2 * knots[i + 1].x() - xs[i + 1]; (*secondControlPoints)[i].ry() = 2 * knots[i + 1].y() - ys[i + 1]; } else { (*secondControlPoints)[i].rx() = (knots[n].x() + xs[n - 1]) / 2; (*secondControlPoints)[i].ry() = (knots[n].y() + ys[n - 1]) / 2; } } delete[] xs; delete[] ys; delete[] rhsx; delete[] rhsy; } youker-assistant/plugins/systemmonitor/resourcescategory.cpp0000664000175000017500000000720513260315532023722 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "resourcescategory.h" #include "resourcesindicator.h" #include "networkindicator.h" #include ResourcesCategory::ResourcesCategory(int tabIndex, QWidget *parent) : QWidget(parent) ,activeIndex(tabIndex) { this->setFixedWidth(196); layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); cpuButton = new ResourcesIndicator(0, this); cpuButton->setTitle(tr("CPU")); memoryButton = new ResourcesIndicator(1, this); memoryButton->setTitle(tr("Memory")); networkButton = new NetworkIndicator(this); networkButton->setTitle(tr("Network")); if (activeIndex == 0) { cpuButton->setChecked(true); memoryButton->setChecked(false); networkButton->setChecked(false); } else if (activeIndex == 1) { cpuButton->setChecked(false); memoryButton->setChecked(true); networkButton->setChecked(false); } else { cpuButton->setChecked(false); memoryButton->setChecked(false); networkButton->setChecked(true); } connect(cpuButton, &ResourcesIndicator::clicked, this, [=] { activeIndex = 0; emit this->switchResoucesPage(activeIndex); cpuButton->setChecked(true); memoryButton->setChecked(false); networkButton->setChecked(false); }); connect(memoryButton, &ResourcesIndicator::clicked, this, [=] { activeIndex = 1; emit this->switchResoucesPage(activeIndex); cpuButton->setChecked(false); memoryButton->setChecked(true); networkButton->setChecked(false); }); connect(networkButton, &NetworkIndicator::clicked, this, [=] { activeIndex = 2; emit this->switchResoucesPage(activeIndex); cpuButton->setChecked(false); memoryButton->setChecked(false); networkButton->setChecked(true); }); layout->addWidget(cpuButton, 0, Qt::AlignHCenter); layout->addWidget(memoryButton, 0, Qt::AlignHCenter); layout->addWidget(networkButton, 0, Qt::AlignHCenter); layout->addStretch(); } ResourcesCategory::~ResourcesCategory() { delete cpuButton; delete memoryButton; delete networkButton; delete layout; } void ResourcesCategory::onUpdateCpuPercent(double value) { cpuButton->updatePercentAndInfo(value, QString::number(value, 'f', 1) + "%"); } void ResourcesCategory::onUpdateMemoryPercent(const QString &info, double value) { memoryButton->updatePercentAndInfo(value, info); } //void ResourcesCategory::onUpdateNetworkPainterPath(QPainterPath downloadPath, QPainterPath uploadPath) //{ //// networkButton->updateNetworkPainterPath(downloadPath, uploadPath); //} void ResourcesCategory::onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateKbs, long sentRateKbs) { networkButton->onUpdateNetworkStatus(recvTotalBytes, sentTotalBytes, recvRateKbs, sentRateKbs); } youker-assistant/plugins/systemmonitor/processmanager.h0000664000175000017500000000274513260315532022634 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "../../component/plugininterface.h" #include "systemmonitor.h" //插件入口 class ProcessManager : public QObject , PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) Q_PLUGIN_METADATA(IID "com.kylin.Plugin.PluginInterface" FILE "systemmonitor.json")//指定IID和.json文件 #endif public: explicit ProcessManager(QObject* parent = 0); virtual ~ProcessManager(); QWidget *centralWidget(); public: virtual QString getGuid(); virtual QString getName(); virtual QString getDescribe(); virtual QString getPicture(); virtual void doAction(); private: SystemMonitor *process_dialog = nullptr; }; youker-assistant/plugins/systemmonitor/systemmonitor.cpp0000664000175000017500000003162213260315532023106 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "systemmonitor.h" #include "util.h" #include #include #include #include #include #include #include #include #include #include SystemMonitor::SystemMonitor(QWidget *parent) : QFrame(parent) , mousePressed(false) { // this->setStyleSheet("QFrame{border: 1px solid #121212;border-radius:1px;background-color:#1f1f1f;}"); // this->setAttribute(Qt::WA_DeleteOnClose); // this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowCloseButtonHint);//去掉边框 // this->setAttribute(Qt::WA_TranslucentBackground);//背景透明 this->setWindowFlags(Qt::FramelessWindowHint); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid this->setAutoFillBackground(true); this->setMouseTracking(true); // installEventFilter(this); this->setWindowTitle(tr("Kylin System Monitor")); this->setWindowIcon(QIcon(":/model/res/plugin/processmanager.png")); this->resize(900, 600); setMinimumSize(640, 480); proSettings = new QSettings(KYLIN_COMPANY_SETTING, KYLIN_SETTING_FILE_NAME_SETTING); proSettings->setIniCodec("UTF-8"); this->initTitleWidget(); this->initPanelStack(); this->initConnections(); //边框阴影效果 QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); shadow_effect->setBlurRadius(5); shadow_effect->setColor(QColor(0, 0, 0, 127)); shadow_effect->setOffset(2, 4); this->setGraphicsEffect(shadow_effect); this->moveCenter(); } SystemMonitor::~SystemMonitor() { if (m_sysMonitorStack) { foreach (QObject *child, m_sysMonitorStack->children()) { QWidget *widget = static_cast(child); widget->deleteLater(); } delete m_sysMonitorStack; } if (m_titleWidget) { delete m_titleWidget; m_titleWidget = nullptr; } if (process_dialog) { delete process_dialog; process_dialog = nullptr; } if (resources_dialog) { delete resources_dialog; resources_dialog = nullptr; } if (filesystem_dialog) { delete filesystem_dialog; filesystem_dialog = nullptr; } if (proSettings != NULL) { delete proSettings; proSettings = NULL; } } void SystemMonitor::resizeEvent(QResizeEvent *e) { if (m_titleWidget) { m_titleWidget->resize(width() - 2, MONITOR_TITLE_WIDGET_HEIGHT); if (e->oldSize() != e->size()) { // emit m_titleWidget->updateMaxBtn(); m_titleWidget->onUpdateMaxBtnStatusChanged(); } } if (m_sysMonitorStack) { m_sysMonitorStack->resize(width() - 2, this->height() - MONITOR_TITLE_WIDGET_HEIGHT - 2); m_sysMonitorStack->move(1, MONITOR_TITLE_WIDGET_HEIGHT + 1); } } void SystemMonitor::recordProcessVisibleColumn(int, bool, QList columnVisible) { QList m_visibleColumns; m_visibleColumns << "name"; if (columnVisible[1]) { m_visibleColumns << "user"; } if (columnVisible[2]) { m_visibleColumns << "status"; } if (columnVisible[3]) { m_visibleColumns << "cpu"; } if (columnVisible[4]) { m_visibleColumns << "pid"; } if (columnVisible[5]) { m_visibleColumns << "command"; } if (columnVisible[6]) { m_visibleColumns << "memory"; } if (columnVisible[7]) { m_visibleColumns << "priority"; } QString displayedColumns = ""; for (int i = 0; i < m_visibleColumns.length(); i++) { if (i != m_visibleColumns.length() - 1) { displayedColumns += QString("%1,").arg(m_visibleColumns[i]); } else { displayedColumns += m_visibleColumns[i]; } } proSettings->beginGroup("PROCESS"); proSettings->setValue("DisplayedColumns", displayedColumns); proSettings->endGroup(); proSettings->sync(); } void SystemMonitor::recordSortStatus(int index, bool isSort) { QList columnNames = { "name", "user", "status", "cpu", "pid", "command", "memory", "priority"}; proSettings->beginGroup("PROCESS"); proSettings->setValue("CurrentSortColumn", columnNames[index]); proSettings->setValue("IsSort", isSort); proSettings->endGroup(); proSettings->sync(); } void SystemMonitor::recordFileSysVisibleColumn(int, bool, QList columnVisible) { QList m_visibleColumns; m_visibleColumns << "device"; if (columnVisible[1]) { m_visibleColumns << "directory"; } if (columnVisible[2]) { m_visibleColumns << "type"; } if (columnVisible[3]) { m_visibleColumns << "total"; } if (columnVisible[4]) { m_visibleColumns << "free"; } if (columnVisible[5]) { m_visibleColumns << "available"; } if (columnVisible[6]) { m_visibleColumns << "used"; } QString displayedColumns = ""; for (int i = 0; i < m_visibleColumns.length(); i++) { if (i != m_visibleColumns.length() - 1) { displayedColumns += QString("%1,").arg(m_visibleColumns[i]); } else { displayedColumns += m_visibleColumns[i]; } } proSettings->beginGroup("FileSystem"); proSettings->setValue("DisplayedColumns", displayedColumns); proSettings->endGroup(); proSettings->sync(); } void SystemMonitor::initPanelStack() { m_sysMonitorStack = new QStackedWidget(this); m_sysMonitorStack->setStyleSheet("QStackedWidget{background: rgb(255, 255, 255);}"); m_sysMonitorStack->setObjectName("SystemMonitorStack"); m_sysMonitorStack->resize(width() - 2, this->height() - TITLE_WIDGET_HEIGHT); m_sysMonitorStack->move(1, TITLE_WIDGET_HEIGHT); m_sysMonitorStack->setMouseTracking(false); m_sysMonitorStack->installEventFilter(this); process_dialog = new ProcessDialog(getReadyDisplayProcessColumns(), getCurrentSortColumnIndex(), isSortOrNot(), proSettings); process_dialog->getProcessView()->installEventFilter(this); connect(process_dialog, &ProcessDialog::changeColumnVisible, this, &SystemMonitor::recordProcessVisibleColumn); connect(process_dialog, &ProcessDialog::changeSortStatus, this, &SystemMonitor::recordSortStatus); resources_dialog = new ResouresDialog; filesystem_dialog = new FileSystemDialog(getReadyDisplayFileSysColumns(), proSettings); filesystem_dialog->getFileSysView()->installEventFilter(this); connect(filesystem_dialog, SIGNAL(changeColumnVisible(int,bool,QList)), this, SLOT(recordFileSysVisibleColumn(int,bool,QList))); m_sysMonitorStack->addWidget(process_dialog); m_sysMonitorStack->addWidget(resources_dialog); m_sysMonitorStack->addWidget(filesystem_dialog); m_sysMonitorStack->setCurrentWidget(process_dialog); } void SystemMonitor::initTitleWidget() { m_titleWidget = new MonitorTitleWidget(proSettings, this); m_titleWidget->resize(width() - 2, MONITOR_TITLE_WIDGET_HEIGHT); m_titleWidget->move(1, 1); } void SystemMonitor::initConnections() { connect(m_titleWidget, SIGNAL(changePage(int)), this, SLOT(onChangePage(int))); connect(m_titleWidget, SIGNAL(canelSearchEditFocus()), process_dialog, SLOT(focusProcessView())); connect(m_titleWidget, SIGNAL(searchSignal(QString)), process_dialog, SLOT(onSearch(QString)), Qt::QueuedConnection); } void SystemMonitor::onChangePage(int index) { if (m_sysMonitorStack) { m_sysMonitorStack->setCurrentIndex(index); if (index == 1) { //start time resources_dialog->startCpuTimer(); } else { //stop time resources_dialog->stopCpuTimer(); } } } int SystemMonitor::getCurrentSortColumnIndex() { proSettings->beginGroup("PROCESS"); QString currentSortColumn = proSettings->value("CurrentSortColumn").toString(); proSettings->endGroup(); QList columnNames = {"name", "user", "status", "cpu", "pid", "command", "memory", "priority"}; return columnNames.indexOf(currentSortColumn); } bool SystemMonitor::isSortOrNot() { proSettings->beginGroup("PROCESS"); bool value = proSettings->value("IsSort", true).toBool(); proSettings->endGroup(); return value; } QList SystemMonitor::getReadyDisplayProcessColumns() { proSettings->beginGroup("PROCESS"); QString displayedColumns = proSettings->value("DisplayedColumns", "name,user,status,cpu,pid,command,memory,priority").toString(); proSettings->endGroup(); if (displayedColumns.isEmpty()) { proSettings->beginGroup("PROCESS"); displayedColumns = "name,user,status,cpu,pid,command,memory,priority"; proSettings->setValue("DisplayedColumns", displayedColumns); proSettings->endGroup(); proSettings->sync(); } QList m_shows; m_shows << displayedColumns.contains("name"); m_shows << displayedColumns.contains("user"); m_shows << displayedColumns.contains("status"); m_shows << displayedColumns.contains("cpu"); m_shows << displayedColumns.contains("pid"); m_shows << displayedColumns.contains("command"); m_shows << displayedColumns.contains("memory"); m_shows << displayedColumns.contains("priority"); return m_shows; } QList SystemMonitor::getReadyDisplayFileSysColumns() { proSettings->beginGroup("FileSystem"); QString displayedColumns = proSettings->value("DisplayedColumns", "device,directory,type,total,free,available,used").toString(); proSettings->endGroup(); if (displayedColumns.isEmpty()) { proSettings->beginGroup("FileSystem"); displayedColumns = "device,directory,type,total,free,available,used"; proSettings->setValue("DisplayedColumns", displayedColumns); proSettings->endGroup(); proSettings->sync(); } QList m_shows; m_shows << displayedColumns.contains("device"); m_shows << displayedColumns.contains("directory"); m_shows << displayedColumns.contains("type"); m_shows << displayedColumns.contains("total"); m_shows << displayedColumns.contains("free"); m_shows << displayedColumns.contains("available"); m_shows << displayedColumns.contains("used"); return m_shows; } void SystemMonitor::moveCenter() { QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); } void SystemMonitor::closeEvent(QCloseEvent *event) { event->accept(); } /*void SystemMonitor::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); //绘制背景色 // QPainterPath path; // path.addRect(QRectF(rect())); // painter.setOpacity(1); // painter.fillPath(path, QColor("#FFFFFF")); painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 #3f96e4 painter.setBrush(QColor("#e9eef0"));//背景色 painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(1); QRectF r(0 / 2.0, 0 / 2.0, width() - 0, height() - 0);//左边 上边 右边 下边 painter.drawRoundedRect(r, 4, 4); QFrame::paintEvent(event); }*/ void SystemMonitor::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->dragPosition = event->globalPos() - frameGeometry().topLeft(); this->mousePressed = true; } QFrame::mousePressEvent(event); } void SystemMonitor::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->mousePressed = false; } QFrame::mouseReleaseEvent(event); } void SystemMonitor::mouseMoveEvent(QMouseEvent *event) { if (this->mousePressed) { move(event->globalPos() - this->dragPosition); } QFrame::mouseMoveEvent(event); } youker-assistant/plugins/systemmonitor/resourcesindicator.h0000664000175000017500000000410413260315532023521 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 RESOURCESINDICATOR_H #define RESOURCESINDICATOR_H #include #include #include class ResourcesIndicator : public QWidget { Q_OBJECT enum ResourcesState {Normal, Hover, Press, Checked}; public: ResourcesIndicator(int flag, QWidget * parent=0); ~ResourcesIndicator(); void setChecked(bool flag); bool isChecked(); void setTitle(const QString &title); void updatePercentAndInfo(double percent, const QString &info); ResourcesState getResourcesState() const; signals: void clicked(); protected: void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: void updateBgColor(); void setResourcesState(ResourcesState state); private: ResourcesState m_state; bool m_isChecked; int m_currentPercent; QString m_title; QString m_info; int m_posX; int m_rectTopPadding; int m_rectTotalHeight; int m_rectTotalWidth; QColor m_outsideBorderColor; QColor m_bgColor; QColor m_borderColor; }; #endif // RESOURCESINDICATOR_H youker-assistant/plugins/systemmonitor/processdialog.cpp0000664000175000017500000007311513260315532023013 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "processdialog.h" #include "propertiesdialog.h" #include "processdata.h" #include "processcategory.h" #include "renicedialog.h" #include "util.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //for setpriority using std::string; QDataStream &operator<<(QDataStream &dataStream, const ProcDataPtr &object) { auto ptr = object.data(); auto ptrval = reinterpret_cast(ptr); auto var = QVariant::fromValue(ptrval); dataStream << var; return dataStream; } QDataStream &operator>>(QDataStream &dataStream, ProcDataPtr &object) { QVariant var; dataStream >> var; qulonglong ptrval = var.toULongLong(); auto ptr = reinterpret_cast(ptrval); object = ProcDataPtr(ptr); return dataStream; } ProcessDialog::ProcessDialog(QList toBeDisplayedColumns, int currentSortIndex, bool isSort, QSettings *settings, QWidget *parent) :QWidget(parent) ,num_cpus(0) ,frequency(0U) ,proSettings(settings) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setAttribute(Qt::WA_NoMousePropagation); qRegisterMetaType(); qRegisterMetaTypeStreamOperators(); qRegisterMetaType(); qRegisterMetaType>(); actionPids = new QList(); m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); m_processListWidget = new ProcessListWidget(toBeDisplayedColumns); connect(m_processListWidget, SIGNAL(changeColumnVisible(int,bool,QList)), this, SIGNAL(changeColumnVisible(int,bool,QList))); connect(m_processListWidget, SIGNAL(changeSortStatus(int,bool)), this, SIGNAL(changeSortStatus(int,bool))); connect(m_processListWidget, &ProcessListWidget::rightMouseClickedItems, this, &ProcessDialog::popupMenu, Qt::QueuedConnection); m_layout->addWidget(m_processListWidget); whose_processes = "user"; proSettings->beginGroup("PROCESS"); whose_processes = proSettings->value("WhoseProcesses", whose_processes).toString(); proSettings->endGroup(); int tabIndex = 1; if (whose_processes == "active") { tabIndex = 0; } else if (whose_processes == "all") { tabIndex = 2; } else { tabIndex = 1; } QWidget *w = new QWidget; w->setFixedHeight(50); m_categoryLayout = new QHBoxLayout(w); m_categoryLayout->setContentsMargins(0, 0, 6, 3); m_categoryLayout->setSpacing(10); processCategory = new ProcessCategory(tabIndex); connect(processCategory, SIGNAL(activeWhoseProcessList(int)), this, SLOT(onActiveWhoseProcess(int))); m_categoryLayout->addWidget(processCategory, 0, Qt::AlignRight); m_layout->addWidget(w); QList *sortFuncList = new QList(); sortFuncList->append(&ProcessListItem::sortByName); sortFuncList->append(&ProcessListItem::sortByUser); sortFuncList->append(&ProcessListItem::sortByStatus); sortFuncList->append(&ProcessListItem::sortByCPU); sortFuncList->append(&ProcessListItem::sortByPid); sortFuncList->append(&ProcessListItem::sortByCommand); sortFuncList->append(&ProcessListItem::sortByMemory); sortFuncList->append(&ProcessListItem::sortByPriority); m_processListWidget->setProcessSortFunctions(sortFuncList, currentSortIndex, isSort); m_processListWidget->setSearchFunction(&ProcessListItem::doSearch); endProcessDialog = new MyDialog(QString(tr("End process")), QString(tr("Ending a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be ended.\nAre you sure to continue?"))); endProcessDialog->setWindowFlags(endProcessDialog->windowFlags() | Qt::WindowStaysOnTopHint); endProcessDialog->addButton(QString(tr("Cancel")), false); endProcessDialog->addButton(QString(tr("End process")), true); connect(endProcessDialog, &MyDialog::buttonClicked, this, &ProcessDialog::endDialogButtonClicked); killProcessDialog = new MyDialog(QString(tr("Kill process")), QString(tr("Killing a process may destroy data, break the session or introduce a security risk. Only unresponsive processes should be killed.\nAre you sure to continue?"))); killProcessDialog->setWindowFlags(killProcessDialog->windowFlags() | Qt::WindowStaysOnTopHint); killProcessDialog->addButton(QString(tr("Cancel")), false); killProcessDialog->addButton(QString(tr("Kill process")), true); connect(killProcessDialog, &MyDialog::buttonClicked, this, &ProcessDialog::killDialogButtonClicked); m_menu = new QMenu(); m_menu->setObjectName("MonitorMenu"); m_stopAction = new QAction(tr("Stop process"), this); connect(m_stopAction, &QAction::triggered, this, &ProcessDialog::stopProcesses); m_continueAction = new QAction(tr("Continue process"), this); connect(m_continueAction, &QAction::triggered, this, &ProcessDialog::continueProcesses); m_endAction = new QAction(tr("End process"), this); connect(m_endAction, &QAction::triggered, this, &ProcessDialog::showEndProcessDialog); m_killAction = new QAction(tr("Kill process"), this); connect(m_killAction, &QAction::triggered, this, &ProcessDialog::showKillProcessDialog); priorityGroup = new MyActionGroup(this); veryHighAction = new MyActionGroupItem(this, priorityGroup, "very_high_action", -20); highAction = new MyActionGroupItem(this, priorityGroup, "high_action", -5); normalAction = new MyActionGroupItem(this, priorityGroup, "normal_action", 0); lowAction = new MyActionGroupItem(this, priorityGroup, "low_action", 5); veryLowAction = new MyActionGroupItem(this, priorityGroup, "very_low_action", 19); customAction = new MyActionGroupItem(this, priorityGroup, "custom_action", 32); { QAction *sep = new QAction(priorityGroup); sep->setSeparator(true); } veryHighAction->change(tr("Very High")); highAction->change(tr("High")); normalAction->change(tr("Normal")); lowAction->change(tr("Low")); veryLowAction->change(tr("Very Low")); customAction->change(tr("Custom")); connect(priorityGroup, SIGNAL(activated(int)), this, SLOT(changeProcPriority(int))); m_priorityMenu = new QMenu(); m_priorityMenu->setObjectName("MonitorMenu"); m_priorityMenu->addActions(priorityGroup->actions()); m_priorityMenu->menuAction()->setText(tr("Change Priority")); m_propertiyAction = new QAction(tr("Properties"), this); connect(m_propertiyAction, &QAction::triggered, this, &ProcessDialog::showPropertiesDialog); m_menu->addAction(m_stopAction);//停止 m_menu->addAction(m_continueAction);//继续进程 m_menu->addAction(m_endAction);//结束 m_menu->addAction(m_killAction);//杀死 m_menu->addSeparator(); m_menu->addMenu(m_priorityMenu); m_menu->addSeparator(); m_menu->addAction(m_propertiyAction); glibtop_init(); this->num_cpus = glibtop_get_sysinfo()->ncpu; this->refreshProcessList(); timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(refreshProcessList())); timer->start(3000); } ProcessDialog::~ProcessDialog() { glibtop_close(); this->clearOriginProcList(); if (timer != NULL) { disconnect(timer,SIGNAL(timeout()),this,SLOT(refreshProcessList())); if(timer->isActive()) { timer->stop(); } delete timer; timer = NULL; } delete processCategory; delete endProcessDialog; delete killProcessDialog; delete m_processListWidget; delete m_stopAction; delete m_continueAction; delete m_endAction; delete m_killAction; delete veryHighAction; delete highAction; delete normalAction; delete lowAction; delete veryLowAction; delete customAction; delete m_priorityMenu; delete m_propertiyAction; delete m_menu; delete actionPids; QLayoutItem *child; while ((child = m_categoryLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_layout; } void ProcessDialog::displayAllProcess() { timer->stop(); this->clearOriginProcList(); whose_processes = "all"; this->refreshProcessList(); timer->start(3000); } void ProcessDialog::displayActiveProcess() { timer->stop(); this->clearOriginProcList(); whose_processes = "active"; this->refreshProcessList(); timer->start(3000); } void ProcessDialog::displayCurrentUserProcess() { timer->stop(); this->clearOriginProcList(); whose_processes = "user"; this->refreshProcessList(); timer->start(3000); } void ProcessDialog::onActiveWhoseProcess(int index) { if (index == 0) { if (this->whose_processes != "active") this->displayActiveProcess(); } else if (index == 1) { if (this->whose_processes != "user") this->displayCurrentUserProcess(); } else { if (this->whose_processes != "all") this->displayAllProcess(); } proSettings->beginGroup("PROCESS"); proSettings->setValue("WhoseProcesses", whose_processes); proSettings->endGroup(); proSettings->sync(); } void ProcessDialog::clearOriginProcList() { for (ProcessWorker::Iterator it(ProcessWorker::begin()); it != ProcessWorker::end(); ++it) delete it->second; ProcessWorker::all.clear(); } void ProcessDialog::changeProcPriority(int nice) { if (nice == 32) { //show renice dialog pid_t cur_pid = -1; for (pid_t pid : *actionPids) { cur_pid = pid; break; } if (cur_pid > -1) { ProcessWorker *info = ProcessWorker::find(cur_pid); if (!info) { actionPids->clear(); return; } QString name = QString::fromStdString(info->name); ReniceDialog *w = new ReniceDialog(tr("Change Priority of Process %1 (PID: %2)").arg(name).arg(QString::number(cur_pid))); w->loadData(info->nice); connect(w, &ReniceDialog::resetReniceValue, [=] (int value) { this->changeProcPriority(value); }); w->exec(); } } else { pid_t cur_pid = -1; for (pid_t pid : *actionPids) { cur_pid = pid; break; } if (cur_pid > -1) { ProcessWorker *info = ProcessWorker::find(cur_pid); if (!info) { actionPids->clear(); return; } if (info->nice == nice) { actionPids->clear(); return; } int saved_errno; int error = setpriority(PRIO_PROCESS, cur_pid, nice); //success if(error != -1) { actionPids->clear(); return; } saved_errno = errno; //need to be root if(errno == EPERM || errno == EACCES) { qDebug() << "Change priority need to be root!!!"; /* * renice: sudo apt install bsdutils * Maybe: QProcess::startDetached(command) * QProcess::start()与QProcess::execute()都能完成启动外部程序的任务,区别在于start()是非阻塞的,而execute()是阻塞的: execute()=start()+waitforFinished() */ if (QFileInfo("/usr/bin/pkexec").exists()) {//sudo apt install policykit-1 QProcess process; process.execute(QString("pkexec --disable-internal-agent %1 %2 %3").arg("renice").arg(nice).arg(cur_pid)); /*process.start(QString("pkexec --disable-internal-agent %1 %2 %3").arg("renice").arg(nice).arg(cur_pid)); process.waitForStarted(1000); process.waitForFinished(20*1000);*/ } else if (QFileInfo("/usr/bin/gksudo").exists()) {//sudo apt install gksu QProcess process; process.execute(QString("gksudo \"%1 %2 %3\"").arg("renice").arg(nice).arg(cur_pid)); /*process.start(QString("gksudo \"%1 %2 %3\"").arg("renice").arg(nice).arg(cur_pid)); process.waitForStarted(1000); process.waitForFinished(20*1000);*/ } else if (QFileInfo("/usr/bin/gksu").exists()) {//sudo apt install gksu QProcess process; process.execute(QString("gksu \"%1 %2 %3\"").arg("renice").arg(nice).arg(cur_pid)); // process.start(QString("gksu \"%1 %2 %3\"").arg("renice").arg(nice).arg(cur_pid)); // process.waitForStarted(1000); // process.waitForFinished(20*1000); } else { // } } } } actionPids->clear(); } //void ProcessDialog::onCloseButtonClicked() //{ // this->close(); //} //void ProcessDialog::closeEvent(QCloseEvent *event) //{ // event->accept(); //} void ProcessDialog::refreshProcessList() { pid_t* pid_list; glibtop_proclist proclist; glibtop_cpu cpu; int which = 0; int arg = 0; if (whose_processes == "all") { which = GLIBTOP_KERN_PROC_ALL; arg = 0; } else if (whose_processes == "active") { which = GLIBTOP_KERN_PROC_ALL | GLIBTOP_EXCLUDE_IDLE; arg = 0; } else if (whose_processes == "user") { which = GLIBTOP_KERN_PROC_UID; arg = getuid(); } pid_list = glibtop_get_proclist(&proclist, which, arg); /* FIXME: total cpu time elapsed should be calculated on an individual basis here ** should probably have a total_time_last gint in the ProcInfo structure */ glibtop_get_cpu(&cpu); this->frequency = cpu.frequency; this->cpu_total_time = MAX(cpu.total - this->cpu_total_time_last, 1); this->cpu_total_time_last = cpu.total; // FIXME: not sure if glibtop always returns a sorted list of pid // but it is important otherwise refresh_list won't find the parent std::sort(pid_list, pid_list + proclist.number); //---------------start---------------------- typedef std::list ProcList; ProcList addition; guint i; for(i = 0; i < proclist.number; ++i) { ProcessWorker *info = ProcessWorker::find(pid_list[i]); if (!info) {//不存在时创建该进程的对象 info = new ProcessWorker(pid_list[i], this->num_cpus, this->cpu_total_time); ProcessWorker::all[info->pid] = info; } //当进程对象存在时,更新该进程对象的相关数据信息 glibtop_proc_state procstate; glibtop_proc_uid procuid; glibtop_proc_time proctime; glibtop_get_proc_state (&procstate, info->pid); info->status = procstate.state; glibtop_get_proc_uid (&procuid, info->pid); glibtop_get_proc_time (&proctime, info->pid); glibtop_proc_mem procmem; glibtop_get_proc_mem(&procmem, info->pid); info->mem = procmem.resident - procmem.share; glibtop_get_proc_state(&procstate, info->pid); info->status = procstate.state; info->set_user(procstate.uid); guint64 difference = proctime.rtime - info->cpu_time; if (difference > 0) info->status = GLIBTOP_PROCESS_RUNNING; info->pcpu = difference * 100 / this->cpu_total_time; info->pcpu = MIN(info->pcpu, 100); //CPU 百分比使用 Solaris 模式,工作在“Solaris 模式”,其中任务的 CPU 使用量将被除以总的 CPU 数目。否则它将工作在“Irix 模式”。 info->pcpu *= this->num_cpus; info->frequency = this->frequency; ProcessWorker::cpu_times[info->pid] = info->cpu_time = proctime.rtime; info->nice = procuid.nice; } // Remove dead processes from the process list and from the // tree. children are queued to be readded at the right place // in the tree. const std::set pids(pid_list, pid_list + proclist.number); ProcessWorker::Iterator it(ProcessWorker::begin()); while (it != ProcessWorker::end()) { ProcessWorker * const info = it->second; ProcessWorker::Iterator next(it); ++next; if (pids.find(info->pid) == pids.end()) { addition.remove(info); ProcessWorker::all.erase(it); delete info; } it = next; } QList items; for (ProcessWorker::Iterator it(ProcessWorker::begin()); it != ProcessWorker::end(); ++it) { QString username = QString::fromStdString(it->second->user); long nice = it->second->nice; QString name = QString::fromStdString(it->second->name); QString session; if (it->second->session) { session = QString(it->second->session); } QString status = formatProcessState(it->second->status); uint cpu = it->second->pcpu; long memory = it->second->mem; pid_t pid = it->second->pid; /*---------------------kobe test string--------------------- //QString to std:string QString test_QString = "lixiang"; std::string test_string = test_QString.toStdString(); //std::string to QString QString result = QString::fromStdString(test_string) QString::fromStdString(test_QString.toStdString()); ----------------------------------------------------------*/ std::string desktopFile; desktopFile = getDesktopFileAccordProcName(name, ""); // qDebug() << "****************"<< QString::fromStdString(desktopFile); QPixmap icon_pixmap; int iconSize = 24 * qApp->devicePixelRatio(); QIcon defaultExecutableIcon = QIcon::fromTheme("application-x-executable");//gnome-mine-application-x-executable if (defaultExecutableIcon.isNull()) { defaultExecutableIcon = QIcon("/usr/share/icons/kylin-icon-theme/48x48/mimetypes/application-x-executable.png"); if (defaultExecutableIcon.isNull()) defaultExecutableIcon = QIcon(":/res/autostart-default.png"); } QPixmap defaultPixmap = defaultExecutableIcon.pixmap(iconSize, iconSize); // QPixmap defaultPixmap = QIcon::fromTheme("application-x-executable").pixmap(iconSize, iconSize); if (desktopFile.size() == 0) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } else { icon_pixmap = getAppIconFromDesktopFile(desktopFile, 24); if (icon_pixmap.isNull()) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } //QPixmap pixmap = QPixmap::fromImage(img).scaled(iconSize, iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); } QString title = getDisplayNameAccordProcName(name, desktopFile); QString displayName; if (whose_processes == "all") { displayName = QString("[%1] %2").arg(username).arg(title); } else { displayName = title; } ProcData info; // info.pidt = it->second->pid; info.user = username; info.iconPixmap = icon_pixmap; info.displayName = displayName; info.cpu = cpu; info.m_memory = memory; info.pid = pid; info.m_status = status; info.m_nice = nice; info.m_session = session; info.cpu_duration_time = formatDurationForDisplay(100 * it->second->cpu_time / this->frequency); info.processName = QString::fromStdString(it->second->name); info.commandLine = QString::fromStdString(it->second->arguments); ProcessListItem *item = new ProcessListItem(info); items << item; } this->updateStatus(items); g_free (pid_list); //---------------end---------------------- } ProcessListWidget* ProcessDialog::getProcessView() { return m_processListWidget; } void ProcessDialog::endDialogButtonClicked(int index, QString) { if (index == 1) {//cancel:0 ok:1 endProcesses(); } } void ProcessDialog::killDialogButtonClicked(int index, QString) { if (index == 1) {//cancel:0 ok:1 killProcesses(); } } void ProcessDialog::focusProcessView() { QTimer::singleShot(100, m_processListWidget, SLOT(setFocus())); } void ProcessDialog::onSearch(QString text) { m_processListWidget->doSearch(text); } //杀死 SIGSTOP,SIGCONT,SIGTERM,SIGKILL void ProcessDialog::killProcesses() { int error; for (pid_t pid : *actionPids) { // Resume process first, otherwise kill process too slow. kill(pid, SIGCONT); // if (kill(pid, SIGKILL) != 0) { // qDebug() << QString("Kill process %1 failed, permission denied.").arg(pid); // } error = kill(pid, SIGKILL); if(error != -1) { qDebug() << "success....."; } else { //need to be root if(errno == EPERM) {//(kill -s %d %d", sig, pid) qDebug() << QString("Kill process %1 failed, permission denied.").arg(pid); if (QFileInfo("/usr/bin/pkexec").exists()) {//sudo apt install policykit-1 QProcess process; process.execute(QString("pkexec --disable-internal-agent %1 %2 %3").arg("kill").arg(SIGKILL).arg(pid)); /*process.start(QString("pkexec --disable-internal-agent %1 %2 %3").arg("kill").arg(SIGKILL).arg(pid)); process.waitForStarted(1000); process.waitForFinished(20*1000);*/ } else if (QFileInfo("/usr/bin/gksudo").exists()) {//sudo apt install gksu QProcess process; process.execute(QString("gksudo \"%1 %2 %3\"").arg("kill").arg(SIGKILL).arg(pid)); /*process.start(QString("gksudo \"%1 %2 %3\"").arg("kill").arg(SIGKILL).arg(pid)); process.waitForStarted(1000); process.waitForFinished(20*1000);*/ } else if (QFileInfo("/usr/bin/gksu").exists()) {//sudo apt install gksu QProcess process; process.execute(QString("gksu \"%1 %2 %3\"").arg("kill").arg(SIGKILL).arg(pid)); // process.start(QString("gksu \"%1 %2 %3\"").arg("kill").arg(SIGKILL).arg(pid)); // process.waitForStarted(1000); // process.waitForFinished(20*1000); } else { // } } } } actionPids->clear(); } //结束 void ProcessDialog::endProcesses() { int error; for (pid_t pid : *actionPids) { // if (kill(pid, SIGTERM) != 0) { // qDebug() << QString("Kill process %1 failed, permission denied.").arg(pid); // } error = kill(pid, SIGTERM); if(error != -1) { qDebug() << "success....."; } else { //need to be root if(errno == EPERM) { qDebug() << QString("End process %1 failed, permission denied.").arg(pid); if (QFileInfo("/usr/bin/pkexec").exists()) {//sudo apt install policykit-1 QProcess process; process.execute(QString("pkexec --disable-internal-agent %1 %2 %3").arg("kill").arg(SIGTERM).arg(pid)); /*process.start(QString("pkexec --disable-internal-agent %1 %2 %3").arg("kill").arg(SIGTERM).arg(pid)); process.waitForStarted(1000); process.waitForFinished(20*1000);*/ } else if (QFileInfo("/usr/bin/gksudo").exists()) {//sudo apt install gksu QProcess process; process.execute(QString("gksudo \"%1 %2 %3\"").arg("kill").arg(SIGTERM).arg(pid)); /*process.start(QString("gksudo \"%1 %2 %3\"").arg("kill").arg(SIGTERM).arg(pid)); process.waitForStarted(1000); process.waitForFinished(20*1000);*/ } else if (QFileInfo("/usr/bin/gksu").exists()) {//sudo apt install gksu QProcess process; process.execute(QString("gksu \"%1 %2 %3\"").arg("kill").arg(SIGTERM).arg(pid)); // process.start(QString("gksu \"%1 %2 %3\"").arg("kill").arg(SIGTERM).arg(pid)); // process.waitForStarted(1000); // process.waitForFinished(20*1000); } else { // } } } } actionPids->clear(); } void ProcessDialog::popupMenu(QPoint pos, QList items) { actionPids->clear(); int count = 0; pid_t cur_pid = -1; for (ProcessListItem *item : items) { count ++; ProcessListItem *procItem = static_cast(item); cur_pid = procItem->getPid(); actionPids->append(cur_pid); } if (count == 1) { ProcessWorker *info = ProcessWorker::find(cur_pid); if (!info) { priorityGroup->setActionsEnabled(false); } else { priorityGroup->setActionsEnabled(true); gint nice = info->nice; int priority; if (nice < -7) priority = -20; else if (nice < -2) priority = -5; else if (nice < 3) priority = 0; else if (nice < 7) priority = 5; else priority = 19; priorityGroup->setChecked(priority); } } else { priorityGroup->setActionsEnabled(false); } m_menu->exec(pos); } void ProcessDialog::continueProcesses() { for (pid_t pid : *actionPids) { if (kill(pid, SIGCONT) != 0) { qDebug() << QString("Resume process %1 failed, permission denied.").arg(pid); } } actionPids->clear(); } void ProcessDialog::showPropertiesDialog() { for (pid_t pid : *actionPids) { foreach (QWidget *widget, QApplication::topLevelWidgets()) { // Show attribute dialog if it has create, avoid create attribute dialog duplicate. if (qobject_cast(widget) != 0) { PropertiesDialog *dialog = qobject_cast(widget); if (dialog->getPid() == pid) { dialog->show(); actionPids->clear(); return; } } } PropertiesDialog *dialog = new PropertiesDialog(this, pid); dialog->show(); } actionPids->clear(); } void ProcessDialog::showKillProcessDialog() { killProcessDialog->exec(); } void ProcessDialog::showEndProcessDialog() { endProcessDialog->exec(); } //停止 void ProcessDialog::stopProcesses() { pid_t currentPid = getpid(); for (pid_t pid : *actionPids) { if (pid != currentPid) { if (kill(pid, SIGSTOP) != 0) { qDebug() << QString("Stop process %1 failed, permission denied.").arg(pid); } } } actionPids->clear(); } void ProcessDialog::updateStatus(QList items) { m_processListWidget->refreshItems(items); } /*void ProcessDialog::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); //绘制背景色 // QPainterPath path; // path.addRect(QRectF(rect())); // painter.setOpacity(1); // painter.fillPath(path, QColor("#FFFFFF")); //绘制圆角矩形 // painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 QColor(255, 255, 255, 153) // painter.setBrush(QColor("#e9eef0"));//背景色 #0d87ca painter.setPen(QPen(QColor("#0000FF"), 0));//边框颜色 QColor(255, 255, 255, 153) painter.setBrush(QColor("#B22222"));//背景色 #0d87ca painter.setOpacity(1); // QRectF r(0 / 2.0, 0 / 2.0, width() - 0, height() - 0);//左边 上边 右边 下边 QRectF r(2, 2, width() - 0, height() - 0);//左边 上边 右边 下边 painter.drawRoundedRect(r, 10, 10); QWidget::paintEvent(event); }*/ youker-assistant/plugins/systemmonitor/processworker.cpp0000664000175000017500000002322213260315532023057 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "processworker.h" #include "util.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using std::string; ProcessWorker::UserMap ProcessWorker::users; ProcessWorker::List ProcessWorker::all; std::map ProcessWorker::cpu_times; static bool init; static bool is_running; static size_t e_strftime(char *s, size_t max, const char *fmt, const struct tm *tm) { char *c, *ffmt, *ff; size_t ret; ffmt = g_strdup(fmt); ff = ffmt; while ((c = strstr(ff, "%l")) != NULL) { c[1] = 'I'; ff = c; } ff = ffmt; while ((c = strstr(ff, "%k")) != NULL) { c[1] = 'H'; ff = c; } ret = strftime(s, max, ffmt, tm); g_free(ffmt); return ret; } static size_t e_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm) { char buf[10]; char *sp; char *ffmt; size_t ret; if (strstr(fmt, "%p")==NULL && strstr(fmt, "%P")==NULL) { /* No AM/PM involved - can use the fmt string directly */ ret=e_strftime(s, max, fmt, tm); } else { /* Get the AM/PM symbol from the locale */ e_strftime (buf, 10, "%p", tm); if (buf[0]) { /** * AM/PM have been defined in the locale * so we can use the fmt string directly **/ ret=e_strftime(s, max, fmt, tm); } else { /** * No AM/PM defined by locale * must change to 24 hour clock **/ ffmt=g_strdup(fmt); for (sp=ffmt; (sp=strstr(sp, "%l")); sp++) { /** * Maybe this should be 'k', but I have never * seen a 24 clock actually use that format **/ sp[1]='H'; } for (sp=ffmt; (sp=strstr(sp, "%I")); sp++) { sp[1]='H'; } ret=e_strftime(s, max, ffmt, tm); g_free(ffmt); } } return(ret); } static size_t e_utf8_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm) { size_t sz, ret; char *locale_fmt, *buf; locale_fmt = g_locale_from_utf8(fmt, -1, NULL, &sz, NULL); if (!locale_fmt) return 0; ret = e_strftime_fix_am_pm(s, max, locale_fmt, tm); if (!ret) { g_free (locale_fmt); return 0; } buf = g_locale_to_utf8(s, ret, NULL, &sz, NULL); if (!buf) { g_free (locale_fmt); return 0; } if (sz >= max) { char *tmp = buf + max - 1; tmp = g_utf8_find_prev_char(buf, tmp); if (tmp) sz = tmp - buf; else sz = 0; } memcpy(s, buf, sz); s[sz] = '\0'; g_free(locale_fmt); g_free(buf); return sz; } static char *format_start_datetime_for_display(time_t date) { time_t nowdate = time(NULL); time_t yesdate; struct tm then, now, yesterday; char buf[26]; gboolean done = FALSE; if (date == 0) return g_strdup ("?"); localtime_r (&date, &then); localtime_r (&nowdate, &now); if (then.tm_mday == now.tm_mday && then.tm_mon == now.tm_mon && then.tm_year == now.tm_year) { e_utf8_strftime_fix_am_pm (buf, 26, _("Today %l:%M %p"), &then); done = TRUE; } if (!done) { yesdate = nowdate - 60 * 60 * 24; localtime_r (&yesdate, &yesterday); if (then.tm_mday == yesterday.tm_mday && then.tm_mon == yesterday.tm_mon && then.tm_year == yesterday.tm_year) { e_utf8_strftime_fix_am_pm (buf, 26, _("Yesterday %l:%M %p"), &then); done = TRUE; } } if (!done) { int i; for (i = 2; i < 7; i++) { yesdate = nowdate - 60 * 60 * 24 * i; localtime_r (&yesdate, &yesterday); if (then.tm_mday == yesterday.tm_mday && then.tm_mon == yesterday.tm_mon && then.tm_year == yesterday.tm_year) { e_utf8_strftime_fix_am_pm (buf, 26, _("%a %l:%M %p"), &then); done = TRUE; break; } } } if (!done) { if (then.tm_year == now.tm_year) { e_utf8_strftime_fix_am_pm (buf, 26, _("%b %d %l:%M %p"), &then); } else { e_utf8_strftime_fix_am_pm (buf, 26, _("%b %d %Y"), &then); } } return g_strdup (buf); } static void get_process_name (ProcessWorker *info, const gchar *cmd, const GStrv args) { if (args) { // look for /usr/bin/very_long_name // and also /usr/bin/interpreter /usr/.../very_long_name // which may have use prctl to alter 'cmd' name for (int i = 0; i != 2 && args[i]; ++i) { char* basename; basename = g_path_get_basename(args[i]); if (g_str_has_prefix(basename, cmd)) { info->name = basename; return; } g_free(basename); } } info->name = g_strdup(cmd); } static void get_process_systemd_info(ProcessWorker *info) { // uid_t uid; if (!init) { if (access("/run/systemd/seats/", F_OK) >= 0) { is_running = true; } init = true; } if (is_running) { free(info->unit); info->unit = NULL; sd_pid_get_unit(info->pid, &info->unit); free(info->session); info->session = NULL; sd_pid_get_session(info->pid, &info->session); free(info->seat); info->seat = NULL; if (info->session != NULL) sd_session_get_seat(info->session, &info->seat); // if (sd_pid_get_owner_uid(info->pid, &uid) >= 0) // info->owner = info->lookup_user(uid); // else // info->owner = ""; } } ProcessWorker::ProcessWorker(pid_t pid, gint cpus, guint64 cpu_time) : tooltip(NULL), name(NULL), arguments(NULL), // security_context(NULL), // cgroup_name(NULL), unit(NULL), session(NULL), seat(NULL), pid(pid), uid(-1), mem(0UL), status(0U), pcpu(0U), nice(0), num_cpus(cpus), cpu_total_time(cpu_time), frequency(0U) { this->setProcData(); } ProcessWorker::~ProcessWorker() { g_free(this->name); g_free(this->tooltip); g_free(this->arguments); // g_free(this->security_context); // g_free(this->cgroup_name); g_free(this->unit); g_free(this->session); g_free(this->seat); } void ProcessWorker::setProcData() { //init ProcessWorker * const info = this; glibtop_proc_state procstate; glibtop_proc_time proctime; glibtop_proc_args procargs; gchar** args; glibtop_get_proc_state(&procstate, pid); glibtop_get_proc_time(&proctime, pid); args = glibtop_get_proc_argv(&procargs, pid, 0); get_process_name(info, procstate.cmd, static_cast(args)); std::string tooltip = make_string(g_strjoinv(" ", args)); if (tooltip.empty()) tooltip = procstate.cmd; info->tooltip = g_markup_escape_text(tooltip.c_str(), -1); info->arguments = g_strescape(tooltip.c_str(), "\\\""); g_strfreev(args); guint64 cpu_time = proctime.rtime; std::map::iterator it(ProcessWorker::cpu_times.find(pid)); if (it != ProcessWorker::cpu_times.end()) { if (proctime.rtime >= it->second) cpu_time = it->second; } info->cpu_time = cpu_time; info->start_time = proctime.start_time; // get_process_selinux_context (info); // info->cgroup_name = NULL; // get_process_cgroup_info(info); info->unit = info->session = info->seat = NULL; get_process_systemd_info(info); } ProcessWorker* ProcessWorker::find(pid_t pid) { Iterator it(ProcessWorker::all.find(pid)); return (it == ProcessWorker::all.end() ? NULL : it->second); } std::string ProcessWorker::lookup_user(guint uid) { typedef std::pair Pair; ProcessWorker::UserMap::value_type hint(uid, ""); Pair p(ProcessWorker::users.insert(hint)); if (p.second) { struct passwd* pwd; pwd = getpwuid(uid); if (pwd && pwd->pw_name) p.first->second = pwd->pw_name; else { char username[16]; g_sprintf(username, "%u", uid); p.first->second = username; } } return p.first->second; } void ProcessWorker::set_user(guint uid) { if (G_LIKELY(this->uid == uid)) return; this->uid = uid; this->user = lookup_user(uid); } youker-assistant/plugins/systemmonitor/propertiesdialog.cpp0000664000175000017500000004266413260315532023536 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "propertiesdialog.h" #include "processworker.h" #include "../widgets/mytristatebutton.h" #include "util.h" #include #include #include #include #include #include #include #include #include #include #include const int spacing = 8; PropertiesDialog::PropertiesDialog(QWidget *parent, pid_t processId) : QDialog(parent) , mousePressed(false) { this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint/* | Qt::WindowCloseButtonHint*/| Qt::WindowStaysOnTopHint); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid this->setAttribute(Qt::WA_TranslucentBackground); this->setAttribute(Qt::WA_Resized, false); // this->setMaximumSize(480, 600); // this->setMinimumWidth(320); this->setFixedWidth(380); pid = processId; m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 5); m_topLayout = new QHBoxLayout; m_topLeftLayout = new QHBoxLayout; m_topLeftLayout->setContentsMargins(20, 20, 0, 0); m_topLeftLayout->setSpacing(10); m_topRightLayout = new QHBoxLayout; m_topRightLayout->setMargin(0); m_topRightLayout->setSpacing(5); m_topLayout->addLayout(m_topLeftLayout); m_topLayout->addStretch(); m_topLayout->addLayout(m_topRightLayout); /*userLayout = new QHBoxLayout(); userLayout->setContentsMargins(0, 0, 0, 0); nameLayout = new QHBoxLayout(); nameLayout->setContentsMargins(0, 0, 0, 0); cmdlineLayout = new QHBoxLayout(); cmdlineLayout->setContentsMargins(0, 0, 0, 0); cpuDurationLayout = new QHBoxLayout(); cpuDurationLayout->setContentsMargins(0, 0, 0, 0); startTimeLayout = new QHBoxLayout(); startTimeLayout->setContentsMargins(0, 0, 0, 0);*/ m_logoLabel = new QLabel(); m_logoLabel->setStyleSheet("QLabel{background:transparent;border:none;}"); m_logoLabel->setFixedSize(44, 58); m_logoLabel->setContentsMargins(0, 0, 0, 0); m_logoLabel->setPixmap(QPixmap(":/res/sub_logo.png")); closeButton = new MyTristateButton(); closeButton->setObjectName("CloseButton"); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); // connect(closeButton, &MyTristateButton::clicked, this, [=] { // this->close(); // }); m_iconLabel = new QLabel(); m_iconLabel->setStyleSheet("QLabel{background:transparent;border:none;}"); m_iconLabel->setFixedSize(48, 48); m_iconLabel->setContentsMargins(0, 0, 0, 0); m_titleLabel = new QLabel(); m_titleLabel->setStyleSheet("QLabel{background-color:transparent;font-size:18px;color:#000000;}"); m_titleLabel->setFixedWidth(230); m_titleLabel->setWordWrap(true); m_topLeftLayout->addWidget(m_iconLabel, 0, Qt::AlignLeft | Qt::AlignVCenter); m_topLeftLayout->addWidget(m_titleLabel, 0, Qt::AlignLeft | Qt::AlignVCenter); m_topRightLayout->addWidget(m_logoLabel, 0, Qt::AlignTop | Qt::AlignRight); m_topRightLayout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); QLabel *topSplit = new QLabel(); topSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); // topSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:1, y2:0,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); topSplit->setFixedSize(320, 1); QLabel *bottomSplit = new QLabel(); bottomSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); // bottomSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:1, y2:0,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); bottomSplit->setFixedSize(320, 1); m_infoFrame = new QFrame; m_infoFrame->setMaximumWidth(320); m_infoFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_bottomLayout = new QHBoxLayout; m_bottomLayout->setContentsMargins(0,0,20,0); m_bottomLayout->setSpacing(0); m_okBtn = new QPushButton; m_okBtn->setFixedSize(91, 25); m_okBtn->setObjectName("blackButton"); m_okBtn->setFocusPolicy(Qt::NoFocus); m_okBtn->setText(tr("OK")); connect(m_okBtn, &QPushButton::clicked, this, [=] { this->close(); }); m_bottomLayout->addWidget(m_okBtn, 0, Qt::AlignBottom | Qt::AlignRight); m_layout->addLayout(m_topLayout); m_layout->addSpacing(10); m_layout->addWidget(topSplit, 0, Qt::AlignCenter); m_layout->addSpacing(10); m_layout->addWidget(m_infoFrame, 0, Qt::AlignCenter); m_layout->addSpacing(5); m_layout->addWidget(bottomSplit, 0, Qt::AlignCenter); m_layout->addSpacing(5); m_layout->addLayout(m_bottomLayout); m_layout->addSpacing(10); m_layout->addStretch(); QGridLayout *infoGrid = new QGridLayout(m_infoFrame); infoGrid->setMargin(0); infoGrid->setHorizontalSpacing(spacing); infoGrid->setVerticalSpacing(spacing); infoGrid->setColumnStretch(0, 10); infoGrid->setColumnStretch(1, 100); QStringList titleList; titleList << QObject::tr("User name:") << QObject::tr("Process name:") << QObject::tr("Command line:") << QObject::tr("CPU Time:") << QObject::tr("Started Time:"); for (int i = 0; i < titleList.length(); ++i) { QLabel *titleLabel = new QLabel(titleList.value(i)); titleLabel->setStyleSheet("QLabel{background-color:transparent;font-size:12px;color:#999999;}"); titleLabel->setMinimumHeight(20); QLabel *infoLabel = new QLabel(); infoLabel->setStyleSheet("QLabel{background-color:transparent;font-size:12px;color:#000000;}"); infoLabel->setWordWrap(true); infoLabel->setMinimumHeight(28); infoLabel->setMinimumWidth(220); infoLabel->setMaximumWidth(240); infoLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); infoLabel->adjustSize(); m_labelList << infoLabel; infoGrid->addWidget(titleLabel); infoGrid->addWidget(infoLabel); } /*userTitleLabel = new QLabel(QString("%1:").arg(tr("User name"))); userTitleLabel->setStyleSheet("QLabel { background-color : transparent; color : #666666; }"); userTitleLabel->setFixedWidth(100); userTitleLabel->setAlignment(Qt::AlignRight); userLabel = new QLabel(); userLabel->setStyleSheet("QLabel { background-color : transparent; color : #000000; }"); userLayout->addWidget(userTitleLabel); userLayout->addWidget(userLabel); userLayout->addSpacing(20); nameTitleLabel = new QLabel(QString("%1:").arg(tr("Process name"))); nameTitleLabel->setStyleSheet("QLabel { background-color : transparent; color : #666666; }"); nameTitleLabel->setFixedWidth(100); nameTitleLabel->setAlignment(Qt::AlignRight); m_appNameLabel = new QLabel(); m_appNameLabel->setStyleSheet("QLabel { background-color : transparent; color : #000000; }"); nameLayout->addWidget(nameTitleLabel); nameLayout->addWidget(m_appNameLabel); nameLayout->addSpacing(20); cmdlineTitleLabel = new QLabel(QString("%1:").arg(tr("Command line"))); cmdlineTitleLabel->setStyleSheet("QLabel { background-color : transparent; color : #666666; }"); cmdlineTitleLabel->setFixedWidth(100); cmdlineTitleLabel->setAlignment(Qt::AlignRight); // cmdlineTitleLabel->setWordWrap(true); // cmdlineTitleLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); cmdlineLabel = new QLabel(); cmdlineLabel->setStyleSheet("QLabel { background-color : transparent; color : #000000; }"); cmdlineLabel->setWordWrap(true); cmdlineLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); cmdlineLayout->addWidget(cmdlineTitleLabel); cmdlineLayout->addWidget(cmdlineLabel); cmdlineLayout->addSpacing(20); cpuDurationTitleLabel = new QLabel(QString("%1:").arg(tr("CPU Time"))); cpuDurationTitleLabel->setStyleSheet("QLabel { background-color : transparent; color : #666666; }"); cpuDurationTitleLabel->setFixedWidth(100); cpuDurationTitleLabel->setAlignment(Qt::AlignRight); cpuDurationLabel = new QLabel(); cpuDurationLabel->setStyleSheet("QLabel { background-color : transparent; color : #000000; }"); cpuDurationLabel->setWordWrap(true); cpuDurationLayout->addWidget(cpuDurationTitleLabel); cpuDurationLayout->addWidget(cpuDurationLabel); cpuDurationLayout->addSpacing(20); startTimeTitleLabel = new QLabel(QString("%1:").arg(tr("Started Time"))); startTimeTitleLabel->setStyleSheet("QLabel { background-color : transparent; color : #666666; }"); startTimeTitleLabel->setFixedWidth(100); startTimeTitleLabel->setAlignment(Qt::AlignRight); startTimeLabel = new QLabel(); startTimeLabel->setStyleSheet("QLabel { background-color : transparent; color : #000000; }"); startTimeLabel->setWordWrap(true); startTimeLayout->addWidget(startTimeTitleLabel); startTimeLayout->addWidget(startTimeLabel); startTimeLayout->addSpacing(20); m_layout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); m_layout->addSpacing(20); m_layout->addWidget(m_iconLabel, 0, Qt::AlignHCenter); m_layout->addSpacing(14); m_layout->addWidget(m_titleLabel, 0, Qt::AlignHCenter); m_layout->addSpacing(20); m_layout->addLayout(userLayout); m_layout->addLayout(nameLayout); m_layout->addLayout(cmdlineLayout); m_layout->addLayout(cpuDurationLayout); m_layout->addLayout(startTimeLayout); m_layout->addSpacing(20);*/ this->moveToCenter(); this->initProcproperties(); timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(refreshProcproperties())); timer->start(3000); } PropertiesDialog::~PropertiesDialog() { if (timer != NULL) { disconnect(timer,SIGNAL(timeout()),this,SLOT(refreshProcproperties())); if(timer->isActive()) { timer->stop(); } delete timer; timer = NULL; } delete closeButton; delete m_iconLabel; delete m_titleLabel; delete m_okBtn; QLayoutItem *child; while ((child = m_topLeftLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_topRightLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_topLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_bottomLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } m_labelList.clear(); delete m_infoFrame; /*delete userTitleLabel; delete userLabel; delete nameTitleLabel; delete m_appNameLabel; delete cmdlineTitleLabel; delete cpuDurationLabel; delete cpuDurationTitleLabel; delete startTimeLabel; delete startTimeTitleLabel; delete cmdlineLabel; delete userLayout; delete nameLayout; delete cmdlineLayout; delete cpuDurationLayout; delete startTimeLayout;*/ delete m_layout; } void PropertiesDialog::updateLabelFrameHeight() { int labelTotalHeight = 0; foreach (QLabel *label, m_labelList) { label->adjustSize(); labelTotalHeight += label->size().height() + spacing; } m_infoFrame->setFixedHeight(labelTotalHeight); m_infoFrame->adjustSize(); this->adjustSize(); } void PropertiesDialog::initProcproperties() { ProcessWorker *info; info = ProcessWorker::find(pid); if (info) { QString username = QString::fromStdString(info->user); // long nice = info->nice; QString name = QString::fromStdString(info->name); // QString status = formatProcessState(info->status); // uint cpu = info->pcpu; // long memory = info->mem; std::string desktopFile; desktopFile = getDesktopFileAccordProcName(name, ""); QPixmap icon_pixmap; int iconSize = 48 * qApp->devicePixelRatio(); QIcon defaultExecutableIcon = QIcon::fromTheme("application-x-executable");//gnome-mine-application-x-executable if (defaultExecutableIcon.isNull()) { defaultExecutableIcon = QIcon("/usr/share/icons/kylin-icon-theme/48x48/mimetypes/application-x-executable.png"); if (defaultExecutableIcon.isNull()) defaultExecutableIcon = QIcon(":/res/autostart-default.png"); } QPixmap defaultPixmap = defaultExecutableIcon.pixmap(iconSize, iconSize); // QPixmap defaultPixmap = QIcon::fromTheme("application-x-executable").pixmap(iconSize, iconSize); if (desktopFile.size() == 0) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } else { icon_pixmap = getAppIconFromDesktopFile(desktopFile, 48); if (icon_pixmap.isNull()) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } //QPixmap pixmap = QPixmap::fromImage(img).scaled(iconSize, iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); } QString displayName = getDisplayNameAccordProcName(name, desktopFile); m_iconLabel->setPixmap(icon_pixmap); m_titleLabel->setText(displayName); /*userLabel->setText(username); m_appNameLabel->setText(QString(info->name)); cmdlineLabel->setText(QString(info->arguments)); startTimeLabel->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); cpuDurationLabel->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency));*/ QStringList valueList; valueList << username << QString(info->name) << QString(info->arguments) << QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss") << formatDurationForDisplay(100 * info->cpu_time / info->frequency); for (int i = 0; i < this->m_labelList.length(); ++i) { this->m_labelList.value(i)->setText(valueList.value(i)); } } this->updateLabelFrameHeight(); } void PropertiesDialog::refreshProcproperties() { ProcessWorker *info; info = ProcessWorker::find(pid); if (info) { for (int i = 0; i < this->m_labelList.length(); ++i) { if (i == 3) this->m_labelList.value(i)->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); if (i == 4) this->m_labelList.value(i)->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency)); } //startTimeLabel->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); //cpuDurationLabel->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency)); } } pid_t PropertiesDialog::getPid() { return pid; } QRect PropertiesDialog::getParentGeometry() const { if (this->parentWidget()) { return this->parentWidget()->window()->geometry(); } else { QPoint pos = QCursor::pos(); for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { return screen->geometry(); } } } return qApp->primaryScreen()->geometry(); } void PropertiesDialog::moveToCenter() { QRect qr = geometry(); qr.moveCenter(this->getParentGeometry().center()); move(qr.topLeft()); } void PropertiesDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->dragPosition = event->globalPos() - frameGeometry().topLeft(); this->mousePressed = true; } QDialog::mousePressEvent(event); } void PropertiesDialog::mouseReleaseEvent(QMouseEvent *event) { this->mousePressed = false; QDialog::mouseReleaseEvent(event); } void PropertiesDialog::mouseMoveEvent(QMouseEvent *event) { if (this->mousePressed) { move(event->globalPos() - this->dragPosition); } QDialog::mouseMoveEvent(event); } void PropertiesDialog::paintEvent(QPaintEvent *event) { QPainter painter(this); //绘制圆角矩形 painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 #3f96e4 painter.setBrush(QColor("#e9eef0"));//背景色 painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(1); QRectF r(0 / 2.0, 0 / 2.0, width() - 0, height() - 0);//左边 上边 右边 下边 painter.drawRoundedRect(r, 4, 4); //绘制背景色 // QPainterPath path; // path.addRect(QRectF(rect())); // painter.setOpacity(1); // painter.fillPath(path, QColor("#ffffff")); QDialog::paintEvent(event); } youker-assistant/plugins/systemmonitor/smoothcurvegenerator.h0000664000175000017500000000533613260315532024107 0ustar fengfeng/* * 参考代码原属主:公孙二狗 * 链接地址:http://www.qtdebug.com/qtbook-paint-smooth-curve/ * https://www.codeproject.com/Articles/31859/Draw-a-Smooth-Curve-through-a-Set-of-D-Points-wit%EF%BC%8C%E6%A0%B8%E5%BF%83%E6%98%AF%E4%BD%BF%E7%94%A8%E6%9B%B2%E7%BA%BF%E4%B8%8A%E7%9A%84%E7%82%B9%E8%AE%A1%E7%AE%97%E5%87%BA%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%8E%A7%E5%88%B6%E7%82%B9%EF%BC%8C%E7%84%B6%E5%90%8E%E4%BD%BF%E7%94%A8%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF%E7%94%9F%E6%88%90%E5%B9%B3%E6%BB%91%E6%9B%B2%E7%BA%BF%EF%BC%8C%E5%BE%88%E6%83%AD%E6%84%A7%E7%9A%84%E6%98%AF%E7%94%9F%E6%88%90%E6%8E%A7%E5%88%B6%E7%82%B9%E7%9A%84%E7%AE%97%E6%B3%95%E7%BB%86%E8%8A%82%E6%88%91%E6%B2%A1%E7%9C%8B%E6%87%82%EF%BC%8C%E5%8F%AA%E4%B8%8D%E8%BF%87%E6%98%AF%E4%BD%9C%E4%BA%86%E4%B8%80%E6%AC%A1%E6%90%AC%E8%BF%90%E5%B7%A5%EF%BC%8C%E6%8A%8A%E7%A8%8B%E5%BA%8F%E7%A7%BB%E6%A4%8D%E5%88%B0%E4%BA%86 */ #ifndef SMOOTHCURVEGENERATOR_H #define SMOOTHCURVEGENERATOR_H #include #include #include class SmoothCurveGenerator { public: /** * 传入曲线上的点的 list,创建平滑曲线 * * @param points - 曲线上的点 * @return - 返回使用给定的点创建的 QPainterPath 表示的平滑曲线 * 生成的平滑曲线,会发现平滑曲线段之间会有很多小段的抖动 */ static QPainterPath generateSmoothCurve1(const QList &points); /** * 传入曲线上的点的 list,创建平滑曲线 * @param points - 曲线上的点 * @return - 返回使用给定的点创建的 QPainterPath 表示的平滑曲线 * 可以解决平滑曲线段之间的抖动问题,但是曲线段在比较陡时,曲线上的值可能会超出曲线原来值的范围 */ static QPainterPath generateSmoothCurve(const QList &points); private: /** * Solves a tridiagonal system for one of coordinates (x or y) * of first Bezier control points. * @param result - Solution vector. * @param rhs - Right hand side vector. * @param n - Size of rhs. */ static void calculateFirstControlPoints(double * &result, const double *rhs, int n); /** * Calculate control points of the smooth curve using the given knots. * @param knots - Points of the given curve. * @param firstControlPoints - Store the generated first control points. * @param secondControlPoints - Store the generated second control points. */ static void calculateControlPoints(const QList &knots, QList *firstControlPoints, QList *secondControlPoints); }; #endif // SMOOTHCURVEGENERATOR_H youker-assistant/plugins/systemmonitor/monitortitlewidget.h0000664000175000017500000000510413260315532023550 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MONITORTITLEWIDGET_H #define MONITORTITLEWIDGET_H #include #include #include class QVBoxLayout; class QHBoxLayout; class QLabel; class QPushButton; class MySearchEdit; class MyTristateButton; class MonitorTitleWidget : public QFrame { Q_OBJECT public: MonitorTitleWidget(QSettings *settings, QWidget *parent); ~MonitorTitleWidget(); void initTitlebarLeftContent(); void initTitlebarMiddleContent(); void initTitlebarRightContent(); void initToolbarLeftContent(); void initToolbarRightContent(); void initWidgets(); void setSearchEditFocus(); public slots: void onRefreshSearchResult(); void handleSearchTextChanged(); void onCancelSearchBtnClicked(bool b); void onMinBtnClicked(); void onMaxBtnClicked(); void onCloseBtnClicked(); void onUpdateMaxBtnStatusChanged(); signals: void updateMaxBtn(); void changePage(int index); void searchSignal(QString searchContent); void canelSearchEditFocus(); protected: void mouseDoubleClickEvent(QMouseEvent *event) override; // void paintEvent(QPaintEvent *event) override; bool eventFilter(QObject *, QEvent *event) override; private: QSettings *proSettings; MySearchEdit *m_searchEdit = nullptr; QPushButton *m_cancelSearchBtn = nullptr; QString searchTextCache; QTimer *m_searchTimer = nullptr; QLabel *emptyLabel = nullptr; QVBoxLayout *m_layout = nullptr; QHBoxLayout *m_topLayout = nullptr; QHBoxLayout *m_titleMiddleLayout = nullptr; QHBoxLayout *m_titleRightLayout = nullptr; QHBoxLayout *m_bottomLayout = nullptr; QHBoxLayout *m_titleLeftLayout = nullptr; QHBoxLayout *m_toolLeftLayout = nullptr; QHBoxLayout *m_toolRightLayout = nullptr; MyTristateButton *maxBtn = nullptr; }; #endif // MONITORTITLEWIDGET_H youker-assistant/plugins/systemmonitor/processdialog.h0000664000175000017500000000713013260315532022452 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "../../component/utils.h" #include "../widgets/mydialog.h" #include "../widgets/myactiongroup.h" #include "../widgets/myactiongroupitem.h" #include "../widgets/myaction.h" #include "processworker.h" #include "processlistitem.h" #include "processlistwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class ProcessManager; class ProcessCategory; class ProcessDialog : public QWidget { Q_OBJECT public: explicit ProcessDialog(QList toBeDisplayedColumns, int currentSortIndex, bool isSort, QSettings *settings, QWidget* parent = 0); ~ProcessDialog(); ProcessListWidget* getProcessView(); void displayAllProcess(); void displayActiveProcess(); void displayCurrentUserProcess(); void clearOriginProcList(); signals: void changeColumnVisible(int index, bool visible, QList columnVisible); void changeSortStatus(int index, bool isSort); void activeWhoseProcessList(int index); public slots: void focusProcessView(); void onSearch(QString text); void stopProcesses(); void continueProcesses(); void endProcesses(); void killProcesses(); void popupMenu(QPoint pos, QList items); void showPropertiesDialog(); void showEndProcessDialog(); void showKillProcessDialog(); void endDialogButtonClicked(int index, QString buttonText); void killDialogButtonClicked(int index, QString buttonText); void updateStatus(QList items); void onActiveWhoseProcess(int index); void changeProcPriority(int nice); void refreshProcessList(); protected: // void paintEvent(QPaintEvent *event); private: QTimer *timer = nullptr; QSettings *proSettings = nullptr; guint64 cpu_total_time; guint64 cpu_total_time_last; MyDialog *killProcessDialog = nullptr; MyDialog *endProcessDialog = nullptr; ProcessListWidget *m_processListWidget = nullptr; QAction *m_propertiyAction = nullptr; QAction *m_stopAction = nullptr;//停止 QAction *m_continueAction = nullptr;//继续进程 QAction *m_endAction = nullptr;//结束 QAction *m_killAction = nullptr;//杀死 ProcessCategory *processCategory = nullptr; QMenu *m_priorityMenu; MyActionGroup * priorityGroup; MyAction *veryHighAction; MyAction *highAction; MyAction *normalAction; MyAction *lowAction; MyAction *veryLowAction; MyAction *customAction; QList *actionPids; QMenu *m_menu = nullptr; QString whose_processes; gint num_cpus; unsigned frequency; QVBoxLayout *m_layout = nullptr; QHBoxLayout *m_categoryLayout = nullptr; }; youker-assistant/plugins/systemmonitor/networkindicator.h0000664000175000017500000000326113260315532023203 0ustar fengfeng#ifndef NETWORKINDICATOR_H #define NETWORKINDICATOR_H #include #include #include class NetworkIndicator : public QWidget { Q_OBJECT enum NetworkState {Normal, Hover, Press, Checked}; public: NetworkIndicator(QWidget * parent=0); ~NetworkIndicator(); void setChecked(bool flag); bool isChecked(); void setTitle(const QString &title); // void updateNetworkPainterPath(QPainterPath downloadPath, QPainterPath uploadPath); NetworkState getNetworkState() const; public slots: void onUpdateNetworkStatus(long recvTotalBytes, long sentTotalBytes, long recvRateKbs, long sentRateKbs); signals: void clicked(); protected: void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: void updateBgColor(); void setNetworkState(NetworkState state); private: NetworkState m_state; bool m_isChecked; QString m_title; int m_rectTopPadding; int m_rectTotalHeight; int m_rectTotalWidth; QColor m_outsideBorderColor; QColor m_bgColor; QList *m_downloadSpeedList; QList *m_uploadSpeedList; QPainterPath m_downloadPath; QPainterPath m_uploadPath; int m_netMaxHeight; int m_pointsCount; QList *m_gridY; int m_pointSpace; long m_recvTotalBytes; long m_sentTotalBytes; long m_recvRateBytes; long m_sentRateBytes; }; #endif // NETWORKINDICATOR_H youker-assistant/plugins/systemmonitor/filesystemworker.cpp0000664000175000017500000002231613260315532023570 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filesystemworker.h" #include "util.h" #include #include #include /*For PRIu64*/ #include //extern "C" { //#include //} typedef struct _DISK_INFO { char devname[256]; char mountdir[256]; char type[256]; gint percentage; guint64 btotal; guint64 bfree; guint64 bavail; guint64 bused; gint valid; } DISK_INFO; static void fsusage_stats(const glibtop_fsusage *buf, guint64 *bused, guint64 *bfree, guint64 *bavail, guint64 *btotal, gint *percentage) { guint64 total = buf->blocks * buf->block_size; if (!total) { /* not a real device */ *btotal = *bfree = *bavail = *bused = 0ULL; *percentage = 0; } else { int percent; *btotal = total; *bfree = buf->bfree * buf->block_size; *bavail = buf->bavail * buf->block_size; *bused = *btotal - *bfree; /* percent = 100.0f * *bused / *btotal; */ percent = 100 * *bused / (*bused + *bavail); *percentage = CLAMP(percent, 0, 100); } } DISK_INFO add_disk(const glibtop_mountentry *entry, gboolean show_all_fs) { DISK_INFO disk; memset(&disk, 0, sizeof(disk)); disk.valid = 0; glibtop_fsusage usage; guint64 bused, bfree, bavail, btotal; gint percentage; glibtop_get_fsusage(&usage, entry->mountdir); if (usage.blocks == 0) { return disk; } if(strcmp(entry->devname,"none")==0 || strcmp(entry->devname,"tmpfs")==0){ return disk; } if(strstr(entry->type, "tmpfs")) { return disk; } fsusage_stats(&usage, &bused, &bfree, &bavail, &btotal, &percentage); memcpy(disk.devname, entry->devname, strlen(entry->devname)); memcpy(disk.mountdir, entry->mountdir, strlen(entry->mountdir)); memcpy(disk.type, entry->type, strlen(entry->type)); disk.percentage = percentage; disk.btotal = btotal; disk.bfree = bfree; disk.bavail = bavail; disk.bused = bused; disk.valid = 1; // qDebug() << disk.devname;//设备 // qDebug() << disk.mountdir;//目录 // qDebug() << disk.type;//类型 // qDebug() << disk.percentage; // qDebug() << g_format_size_full(disk.btotal, G_FORMAT_SIZE_DEFAULT);//总数 // qDebug() << g_format_size_full(disk.bavail, G_FORMAT_SIZE_DEFAULT);//可用 // qDebug() << g_format_size_full(disk.bused, G_FORMAT_SIZE_DEFAULT);//已用 return disk; } //void hello(gpointer data) //{ // g_print ("Hello World\n"); //} FileSystemWorker::FileSystemWorker(QObject *parent) : QObject(parent) { // GVolumeMonitor * monitor;//GVolumeMonitor不是 thread-default-context aware,因此不能在除了主线程中的其他地方使用???? // monitor = g_volume_monitor_get(); // g_signal_connect(monitor, "mount-added", G_CALLBACK(hello), NULL); // GVolumeMonitor* monitor = g_volume_monitor_get(); // GList* mountDeviceList = g_volume_monitor_get_mounts(monitor); // GList* it = NULL; // for(it = mountDeviceList; it; it = it->next) { // qDebug() << "mount device list:" << it->data; // } // GList* mountVolumeList = g_volume_monitor_get_volumes(monitor); // for(it = mountVolumeList; it; it = it->next) { // qDebug() << "mount volume list:" << it->data; // } } FileSystemWorker::~FileSystemWorker() { m_diskInfoList.clear(); } void FileSystemWorker::onFileSystemListChanged() { QStringList newDiskList; glibtop_mountentry *entries; glibtop_mountlist mountlist; guint i; gboolean show_all_fs = TRUE; entries = glibtop_get_mountlist(&mountlist, show_all_fs); for (i = 0; i < mountlist.number; i++) { DISK_INFO disk = add_disk(&entries[i], show_all_fs); if (disk.valid == 1) { std::string formatted_dev = make_string(g_strdup(disk.devname)); QString dev_name = QString::fromStdString(formatted_dev); //QString dev_name = QString(QLatin1String(disk.devname)); newDiskList.append(dev_name); if (!this->isDeviceContains(dev_name)) { FileSystemData *info = new FileSystemData(this); info->setDevName(dev_name); std::string formatted_mountdir(make_string(g_strdup(disk.mountdir))); std::string formatted_type(make_string(g_strdup(disk.type))); std::string formatted_btotal(make_string(g_strdup(g_format_size_full(disk.btotal, G_FORMAT_SIZE_DEFAULT)))); std::string formatted_bfree(make_string(g_strdup(g_format_size_full(disk.bfree, G_FORMAT_SIZE_DEFAULT)))); std::string formatted_bavail(make_string(g_strdup(g_format_size_full(disk.bavail, G_FORMAT_SIZE_DEFAULT)))); std::string formatted_bused(make_string(g_strdup(g_format_size_full(disk.bused, G_FORMAT_SIZE_DEFAULT)))); info->updateDiskInfo(QString::fromStdString(formatted_mountdir), QString::fromStdString(formatted_type), QString::fromStdString(formatted_btotal), QString::fromStdString(formatted_bfree), QString::fromStdString(formatted_bavail), QString::fromStdString(formatted_bused), disk.percentage/*QString::number(disk.percentage).append("%")*/); // info->updateDiskInfo(QString(QLatin1String(disk.mountdir)), QString(QLatin1String(disk.type)), QString(QLatin1String(g_format_size_full(disk.btotal, G_FORMAT_SIZE_DEFAULT))), QString(QLatin1String(g_format_size_full(disk.bfree, G_FORMAT_SIZE_DEFAULT))), QString(QLatin1String(g_format_size_full(disk.bavail, G_FORMAT_SIZE_DEFAULT))), QString(QLatin1String(g_format_size_full(disk.bused, G_FORMAT_SIZE_DEFAULT))), disk.percentage/*QString::number(disk.percentage).append("%")*/); this->addDiskInfo(dev_name, info); } else {//update info which had exists FileSystemData *info = this->getDiskInfo(dev_name); if (info) { std::string formatted_mountdir(make_string(g_strdup(disk.mountdir))); std::string formatted_type(make_string(g_strdup(disk.type))); std::string formatted_btotal(make_string(g_strdup(g_format_size_full(disk.btotal, G_FORMAT_SIZE_DEFAULT)))); std::string formatted_bfree(make_string(g_strdup(g_format_size_full(disk.bfree, G_FORMAT_SIZE_DEFAULT)))); std::string formatted_bavail(make_string(g_strdup(g_format_size_full(disk.bavail, G_FORMAT_SIZE_DEFAULT)))); std::string formatted_bused(make_string(g_strdup(g_format_size_full(disk.bused, G_FORMAT_SIZE_DEFAULT)))); info->updateDiskInfo(QString::fromStdString(formatted_mountdir), QString::fromStdString(formatted_type), QString::fromStdString(formatted_btotal), QString::fromStdString(formatted_bfree), QString::fromStdString(formatted_bavail), QString::fromStdString(formatted_bused), disk.percentage/*QString::number(disk.percentage).append("%")*/); // info->updateDiskInfo(QString(QLatin1String(disk.mountdir)), QString(QLatin1String(disk.type)), QString(QLatin1String(g_format_size_full(disk.btotal, G_FORMAT_SIZE_DEFAULT))), QString(QLatin1String(g_format_size_full(disk.bfree, G_FORMAT_SIZE_DEFAULT))), QString(QLatin1String(g_format_size_full(disk.bavail, G_FORMAT_SIZE_DEFAULT))), QString(QLatin1String(g_format_size_full(disk.bused, G_FORMAT_SIZE_DEFAULT))), disk.percentage/*QString::number(disk.percentage).append("%")*/); } } } } //remove the device whice not exists anymore for (auto device : m_diskInfoList.keys()) { bool foundDevice = false; for (auto devName : newDiskList) { if (devName == device) { foundDevice = true; break; } } if (!foundDevice) { m_diskInfoList.remove(device);//or erase??? } } g_free(entries); } FileSystemData *FileSystemWorker::getDiskInfo(const QString &devname) { return m_diskInfoList.value(devname, nullptr); } QList FileSystemWorker::diskInfoList() const { return m_diskInfoList.values(); } void FileSystemWorker::addDiskInfo(const QString &devname, FileSystemData *info) { if (!m_diskInfoList.contains(devname)) { m_diskInfoList[devname] = info; } } void FileSystemWorker::removeDiskItem(const QString &devname) { // FileSystemData *info = getDiskInfo(devname); // m_diskInfoList.remove(devname); } bool FileSystemWorker::isDeviceContains(const QString &devname) { return m_diskInfoList.keys().contains(devname); } youker-assistant/plugins/systemmonitor/filesystemwatcher.cpp0000664000175000017500000000361713260315532023717 0ustar fengfeng#include "filesystemwatcher.h" #include "util.h" #include FileSystemWatcher *FileSystemWatcher::m_watcher = NULL; FileSystemWatcher *FileSystemWatcher::instance() { if (!m_watcher) { m_watcher = new FileSystemWatcher; m_watcher->initWatcher(); } return m_watcher; } FileSystemWatcher::FileSystemWatcher(QObject *parent) : QObject(parent) ,m_fd(-1) { } FileSystemWatcher::~FileSystemWatcher() { this->clearWatcher(); } bool FileSystemWatcher::initWatcher() { m_origFileSet = getFileContentsLineByLine(DEVICE_MOUNT_PONINT_RECORD_FILE); m_fd = open(DEVICE_MOUNT_PONINT_RECORD_FILE, O_RDONLY); if (m_fd == -1) { qDebug() << QString("open %1 failed!").arg(DEVICE_MOUNT_PONINT_RECORD_FILE); return false; } m_socketNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Write, this); m_socketNotifier->setEnabled(true); connect(m_socketNotifier, &QSocketNotifier::activated, this, &FileSystemWatcher::onMountDeviceFileContentsChanged); return true; } bool FileSystemWatcher::watcherInitSuccess() { if (m_fd != -1 && m_socketNotifier) { return true; } else { return false; } } bool FileSystemWatcher::clearWatcher() { if (this->watcherInitSuccess()) { close(m_fd); m_fd = -1; delete m_socketNotifier; m_socketNotifier = nullptr; return true; } else { return false; } } void FileSystemWatcher::onMountDeviceFileContentsChanged() { QSet nowFileSet = getFileContentsLineByLine(DEVICE_MOUNT_PONINT_RECORD_FILE); for(const QString &mountPath: nowFileSet - m_origFileSet) { emit this->deviceAdded(getDeviceMountedPointPath(mountPath)); } for(const QString &mountPath: m_origFileSet - nowFileSet) { emit this->deviceRemoved(getDeviceMountedPointPath(mountPath)); } m_origFileSet = nowFileSet; } youker-assistant/plugins/systemmonitor/propertiesdialog.h0000664000175000017500000000531213260315532023170 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PROPERTIESSDIALOG_H #define PROPERTIESSDIALOG_H #include #include #include #include #include #include #include class QMouseEvent; class MyTristateButton; //TODO: add timer to refresh class PropertiesDialog : public QDialog { Q_OBJECT public: PropertiesDialog(QWidget *parent = 0, pid_t pid=-1); ~PropertiesDialog(); pid_t getPid(); QRect getParentGeometry() const; void moveToCenter(); void updateLabelFrameHeight(); void initProcproperties(); public slots: void refreshProcproperties(); protected: void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; // void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: MyTristateButton *closeButton = nullptr; QLabel *m_logoLabel = nullptr; /*QHBoxLayout *cmdlineLayout; QHBoxLayout *userLayout; QHBoxLayout *nameLayout; QHBoxLayout *cpuDurationLayout; QHBoxLayout *startTimeLayout; QLabel *cmdlineLabel; QLabel *cmdlineTitleLabel; QLabel *userLabel; QLabel *userTitleLabel; QLabel *m_appNameLabel; QLabel *nameTitleLabel; QLabel *cpuDurationLabel; QLabel *cpuDurationTitleLabel; QLabel *startTimeLabel; QLabel *startTimeTitleLabel;*/ QVBoxLayout *m_layout = nullptr; QHBoxLayout *m_topLayout = nullptr; QHBoxLayout *m_topLeftLayout = nullptr; QHBoxLayout *m_topRightLayout = nullptr; QHBoxLayout *m_bottomLayout = nullptr; QLabel *m_iconLabel = nullptr; QLabel *m_titleLabel = nullptr; QPushButton *m_okBtn = nullptr; pid_t pid; QPoint dragPosition; bool mousePressed; QTimer *timer = nullptr; QFrame *m_infoFrame = nullptr; QList m_labelList; }; #endif // PROPERTIESSDIALOG_H youker-assistant/plugins/systemmonitor/systemmonitor.pro0000664000175000017500000000527113260315532023125 0ustar fengfeng#------------------------------------------------- # # Project created by QtCreator 2015-01-26T09:16:38 # #------------------------------------------------- QT += core isEqual(QT_MAJOR_VERSION, 5) { QT += widgets gui svg } TARGET = systemmonitor TEMPLATE = lib DESTDIR = $$_PRO_FILE_PWD_/../ CONFIG += plugin c++11 link_pkgconfig PKGCONFIG += libgtop-2.0 libsystemd #gio-2.0 #LIBS +=-lgio-2.0 -lglib-2.0 target.path = $${PREFIX}/lib/kylin-assistant/plugins/ INSTALLS += target unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } HEADERS += \ systemmonitor.h \ ../../component/plugininterface.h \ processmanager.h \ processdialog.h \ processlistwidget.h \ processlistitem.h \ processworker.h \ util.h \ ../../component/utils.h \ ../widgets/mydialog.h \ ../widgets/mytristatebutton.h \ ../widgets/myunderlinebutton.h \ ../widgets/myhoverbutton.h \ propertiesdialog.h \ processcategory.h \ processdata.h \ ../widgets/myactiongroup.h \ ../widgets/myactiongroupitem.h \ ../widgets/myaction.h \ monitortitlewidget.h \ resourcesdialog.h \ filesystemdialog.h \ filesystemworker.h \ filesystemdata.h \ ../widgets/mysearchedit.h \ networkwidget.h \ networkflow.h \ cpuratewidget.h \ cpuballwidget.h \ smoothcurvegenerator.h \ memorywidget.h \ memorycircle.h \ networkindicator.h \ resourcesindicator.h \ resourcescategory.h \ filesystemlistwidget.h \ filesystemlistitem.h \ filesystemwatcher.h \ renicedialog.h \ ../../component/mytitlebar.h SOURCES += \ systemmonitor.cpp \ processmanager.cpp \ processdialog.cpp \ processlistwidget.cpp \ processlistitem.cpp \ processworker.cpp \ util.cpp \ ../widgets/mydialog.cpp \ ../widgets/mytristatebutton.cpp \ ../widgets/myunderlinebutton.cpp \ ../widgets/myhoverbutton.cpp \ propertiesdialog.cpp \ processcategory.cpp \ ../widgets/myactiongroup.cpp \ ../widgets/myactiongroupitem.cpp \ ../widgets/myaction.cpp \ monitortitlewidget.cpp \ resourcesdialog.cpp \ filesystemdialog.cpp \ filesystemworker.cpp \ filesystemdata.cpp \ ../widgets/mysearchedit.cpp \ networkwidget.cpp \ networkflow.cpp \ cpuratewidget.cpp \ cpuballwidget.cpp \ smoothcurvegenerator.cpp \ memorywidget.cpp \ memorycircle.cpp \ networkindicator.cpp \ resourcesindicator.cpp \ resourcescategory.cpp \ filesystemlistwidget.cpp \ filesystemlistitem.cpp \ filesystemwatcher.cpp \ renicedialog.cpp \ ../../component/mytitlebar.cpp OTHER_FILES += \ systemmonitor.json RESOURCES += \ ../../src/img.qrc youker-assistant/plugins/systemmonitor/cpuballwidget.cpp0000664000175000017500000002445313260315532023004 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cpuballwidget.h" #include #include #include #include #include #include qreal gradientDistance(qreal x) { return (1 - qCos(M_PI * x)) / 2; } CpuBallWidget::CpuBallWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(210, 210); m_frontImagePath = "://res/wave_front.png"; m_backimagePath = "://res/wave_back.png"; m_xFrontOffset = 0; m_xBackOffset = this->width(); m_prevPercentValue = 0.0; m_percentValue = 0.0; m_progressText = QString("%1%").arg(QString::number(m_percentValue, 'f', 1)); m_shadowEffect = new QGraphicsDropShadowEffect(this); m_shadowEffect->setOffset(0, 3); m_shadowEffect->setColor(QColor(232, 232, 232, 127)); m_shadowEffect->setBlurRadius(10); this->setGraphicsEffect(m_shadowEffect); this->loadWaveImage(); m_waveTimer = new QTimer(this); connect(m_waveTimer, SIGNAL(timeout()), this, SLOT(onRepaintWaveImage())); m_waveTimer->setInterval(200); m_animationIndex = 0; m_animationCounts = 2000/200;//2000为数据更新的时间间隔,200为波浪更新的时间间隔 } CpuBallWidget::~CpuBallWidget() { delete m_shadowEffect; if (m_waveTimer) { disconnect(m_waveTimer, SIGNAL(timeout()), this, SLOT(onRepaintWaveImage())); if(m_waveTimer->isActive()) { m_waveTimer->stop(); } delete m_waveTimer; m_waveTimer = nullptr; } } void CpuBallWidget::loadWaveImage() { QImageReader frontReader(m_frontImagePath); int w = frontReader.size().width(); int h = frontReader.size().height(); // w = w * this->width() / 100; // h = h * this->height() / 100; QImage image(w, h, QImage::Format_ARGB32_Premultiplied);//QImage::Format_ARGB32 image.fill(Qt::transparent); image.load(m_frontImagePath); /*QPainter painter(&image); // painter.setCompositionMode(QPainter::CompositionMode_Source); // painter.fillRect(image.rect(), Qt::transparent); // painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.drawImage(QPoint(0,0), image); painter.end();*/ m_frontImage = image; QImageReader backReader(m_backimagePath); w = backReader.size().width(); h = backReader.size().height(); // w = w * this->width() / 100; // h = h * this->height() / 100; QImage backImage(w, h, QImage::Format_ARGB32_Premultiplied);//QImage::Format_ARGB32 backImage = backImage.scaled(QSize(w, h), Qt::KeepAspectRatio, Qt::SmoothTransformation); backImage.fill(Qt::transparent); backImage.load(m_backimagePath); /*QPainter backPainter(&backImage); // backPainter.setCompositionMode(QPainter::CompositionMode_Source); // backPainter.fillRect(image.rect(), Qt::transparent); // backPainter.setCompositionMode(QPainter::CompositionMode_SourceOver); backPainter.drawImage(QPoint(0,0), backImage); backPainter.end();*/ m_backImage = backImage; } void CpuBallWidget::onRepaintWaveImage() { m_xFrontOffset += 2; m_xBackOffset += 2; if (m_xFrontOffset > m_frontImage.width()) {//保留整个显示直径的大小不做处理,避免出现断层 m_xFrontOffset = 0; } if (m_xBackOffset > m_backImage.width()) {//保留整个显示直径的大小不做处理,避免出现断层 m_xBackOffset = 0; } if (m_animationIndex < m_animationCounts) { m_animationIndex++; repaint(); } else { m_waveTimer->stop(); } // this->update();//this->repaint(); } //value:0 ~ 100 void CpuBallWidget::updateCpuPercent(double value) { if (this->m_percentValue == value || value > 100 || value < 0) { return; } m_prevPercentValue = m_percentValue; m_percentValue = value; m_progressText = QString("%1%").arg(QString::number(value, 'f', 1)); m_animationIndex = 0; m_waveTimer->start(); } void CpuBallWidget::startTimer() { // if (this->m_waveTimer && !this->m_waveTimer->isActive()) // this->m_waveTimer->start(); } void CpuBallWidget::stopTimer() { // if (this->m_waveTimer && this->m_waveTimer->isActive()) // this->m_waveTimer->stop(); } //在不同的平台上得到一样的效果,但绘制的文字除外 void CpuBallWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true);//设置反走样,避免锯齿 QRectF rect = QRectF(0, 0, this->width(), this->height()); QSize waveSize = this->size(); // int currentPercent = static_cast(m_percentValue); double percent = m_prevPercentValue + gradientDistance(m_animationIndex / m_animationCounts) * (m_percentValue - m_prevPercentValue); int currentPercent = static_cast(percent); //Step1:整个矩形背景 QImage waveRectImage = QImage(waveSize, QImage::Format_ARGB32_Premultiplied);//创建一个Format_ARGB32_Premultiplied 格式的QIamge,大小和控件相同 QPainter wavePainter(&waveRectImage);//创建一个QPainter绘制waveRectImage这个图像 wavePainter.setRenderHint(QPainter::Antialiasing, true);//setRenderHint() 来设置反走样,要么绘制出来的线条会出现锯齿 // wavePainter.initFrom(this);//用控件的设置初始化画笔,刷子和字体 wavePainter.setCompositionMode(QPainter::CompositionMode_Source);//输出源像素,避免整个矩形背景区域出现花屏现象 if (currentPercent > 88) { m_shadowEffect->setColor(QColor(255, 0, 0, 127));//红色 } else if (currentPercent > 55) { m_shadowEffect->setColor(QColor(255, 193, 37, 127));//黄 } else { m_shadowEffect->setColor(QColor(232, 232, 232, 127));//灰 } wavePainter.fillRect(waveRectImage.rect(), QColor(255, 255, 255, 127)); //Step2:波浪区域 //CompositionMode_SourceOver保证波浪出现的时候其背景为通明的 wavePainter.setCompositionMode(QPainter::CompositionMode_SourceOver);//混和模式QImage::CompositionMode_SourceOver ,即原象素(正在绘制的象素)和目标象素(已经存在的象素)混和,原象素的alpha分量定义为最终的透明度 wavePainter.drawImage(static_cast(m_xBackOffset), (100 - currentPercent)*this->width()/100, m_backImage); wavePainter.drawImage(static_cast(m_xBackOffset) - m_backImage.width(), (100 - currentPercent)*this->width()/100, m_backImage); wavePainter.drawImage(static_cast(m_xFrontOffset), (100 - currentPercent)*this->width()/100, m_frontImage); wavePainter.drawImage(static_cast(m_xFrontOffset) - m_frontImage.width(), (100 - currentPercent)*this->width()/100, m_frontImage); //Step3:矩形区域中圆球的外径 /*QRectF outRect = QRectF(0, 0, waveSize.width(), waveSize.height()); QPainterPath outBorderPath; //QMargins定义了矩形的四个外边距量,left,top,right和bottom,描述围绕矩形的边框宽度 outBorderPath.addEllipse(outRect.marginsRemoved(QMarginsF(0.5, 0.5, 0.5, 0.5)));//marginsAdded:增长矩形的边距,扩大它 wavePainter.strokePath(outBorderPath, QPen(QColor("#0f84bc"), 1));//外边框*/ //QGradient支持三种渐变画刷:线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient) QRectF outRect = QRectF(0, 0, waveSize.width(), waveSize.height()); QConicalGradient conicalGradient(waveSize.width()/2, waveSize.height()/2, waveSize.width());//参数分别为中心坐标和初始角度 conicalGradient.setColorAt(0, QColor("#59aee2")); conicalGradient.setColorAt(1.0, QColor("#0f84bc")); wavePainter.setPen(QPen(QBrush(conicalGradient), 1)); wavePainter.drawEllipse(outRect.marginsRemoved(QMarginsF(0.5, 0.5, 0.5, 0.5))); //Step4:占用率文字描述 QFont font = wavePainter.font(); font.setPixelSize(44);//waveSize.height() * 20 / this->height() wavePainter.setFont(font); wavePainter.setPen(Qt::white); wavePainter.drawText(QRect(rect.x(), rect.y() + rect.height()*2/3, rect.width(), rect.height()/3), Qt::AlignHCenter, m_progressText); wavePainter.end(); QImage image = QImage(waveSize, QImage::Format_ARGB32_Premultiplied); QPainter m_painter(&image); //让矩形框中除掉圆形球以外的其他区域透明 m_painter.setCompositionMode(QPainter::CompositionMode_Source);//输出源像素,避免区域出现花屏现象 m_painter.fillRect(image.rect(), Qt::transparent); //为圆形球绘制一个圆形的白色遮罩层,目的是让矩形除了圆形区域外,其他区域为透明的没有任何东西显示在上面,方便后面的圆球和波浪的显示 QPixmap maskPixmap(waveSize); maskPixmap.fill(Qt::transparent); QPainterPath path; path.addEllipse(QRectF(0, 0, waveSize.width(), waveSize.height())); QPainter maskPainter(&maskPixmap); maskPainter.setRenderHint(QPainter::Antialiasing, true); maskPainter.setPen(QPen(Qt::white, 1)); maskPainter.fillPath(path, QBrush(Qt::white)); m_painter.setCompositionMode(QPainter::CompositionMode_SourceOver);//默认模式,源的alpha将目标顶部的像素混合 m_painter.drawImage(0, 0, maskPixmap.toImage()); m_painter.setCompositionMode(QPainter::CompositionMode_SourceIn);//输出是源,其中alpha被目标的值减少 设置画刷的组合模式CompositionMode_SourceIn这个模式为目标图像在下 m_painter.drawImage(0, 0, waveRectImage); m_painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);//目标的alpha用于将其混合到源像素的顶部。这种模式是QPainter::CompositionMode_Source逆 m_painter.end(); painter.drawImage(this->rect(), image);//drawPixmap } youker-assistant/plugins/systemmonitor/systemmonitor.h0000664000175000017500000000452113260315532022551 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SYSTEMMONITOR_H #define SYSTEMMONITOR_H #include "monitortitlewidget.h" #include "processdialog.h" #include "resourcesdialog.h" #include "filesystemdialog.h" #include #include #include #include class SystemMonitor : public QFrame { Q_OBJECT public: SystemMonitor(QWidget *parent = 0); ~SystemMonitor(); void initTitleWidget(); void initPanelStack(); void initConnections(); QList getReadyDisplayProcessColumns(); bool isSortOrNot(); int getCurrentSortColumnIndex(); QList getReadyDisplayFileSysColumns(); void moveCenter(); public slots: void recordProcessVisibleColumn(int, bool, QList columnVisible); void recordSortStatus(int index, bool isSort); void recordFileSysVisibleColumn(int, bool, QList columnVisible); void onChangePage(int index); protected: void resizeEvent(QResizeEvent *e) override; // void paintEvent(QPaintEvent *); void closeEvent(QCloseEvent *event); void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: QStackedWidget *m_sysMonitorStack = nullptr; MonitorTitleWidget *m_titleWidget = nullptr; // ToolBar *m_toolBar = nullptr; ProcessDialog *process_dialog = nullptr; ResouresDialog *resources_dialog = nullptr; FileSystemDialog *filesystem_dialog = nullptr; QSettings *proSettings; QPoint dragPosition; bool mousePressed; }; #endif // SYSTEMMONITOR_H youker-assistant/plugins/systemmonitor/cpuballwidget.h0000664000175000017500000000322113260315532022437 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CPUBALLWIDGET_H #define CPUBALLWIDGET_H #include #include class QGraphicsDropShadowEffect; class CpuBallWidget : public QWidget { Q_OBJECT public: CpuBallWidget(QWidget *parent = 0); ~CpuBallWidget(); void loadWaveImage(); void updateCpuPercent(double value); void startTimer(); void stopTimer(); public slots: void onRepaintWaveImage(); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: QTimer *m_waveTimer = nullptr; QGraphicsDropShadowEffect *m_shadowEffect = nullptr; QString m_frontImagePath; QString m_backimagePath; QImage m_frontImage; QImage m_backImage; QString m_progressText; double m_prevPercentValue; double m_percentValue; double m_xFrontOffset; double m_xBackOffset; double m_animationCounts; int m_animationIndex; }; #endif // CPUBALLWIDGET_H youker-assistant/plugins/systemmonitor/processcategory.cpp0000664000175000017500000000637613260315532023376 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "processcategory.h" #include "../widgets/myhoverbutton.h" ProcessCategory::ProcessCategory(int tabIndex, QWidget *parent) : QWidget(parent) ,width(16) ,height(16) ,activeIndex(tabIndex) { setFixedSize(width * 3, height); layout = new QHBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); activeProcessButton = new MyHoverButton(this); activeProcessButton->setPicture(":/res/active_proc.png"); activeProcessButton->setToolTip(tr("Active Processes")); userProcessButton = new MyHoverButton(this); userProcessButton->setPicture(":/res/user_proc.png"); userProcessButton->setToolTip(tr("My Processes")); allProcessButton = new MyHoverButton(this); allProcessButton->setPicture(":/res/all_proc.png"); allProcessButton->setToolTip(tr("All Processes")); if (activeIndex == 0) { activeProcessButton->setChecked(true); userProcessButton->setChecked(false); allProcessButton->setChecked(false); } else if (activeIndex == 2) { activeProcessButton->setChecked(false); userProcessButton->setChecked(false); allProcessButton->setChecked(true); } else { activeProcessButton->setChecked(false); userProcessButton->setChecked(true); allProcessButton->setChecked(false); } connect(activeProcessButton, &MyHoverButton::clicked, this, [=] { activeIndex = 0; emit this->activeWhoseProcessList(activeIndex); activeProcessButton->setChecked(true); userProcessButton->setChecked(false); allProcessButton->setChecked(false); }); connect(userProcessButton, &MyHoverButton::clicked, this, [=] { activeIndex = 1; emit this->activeWhoseProcessList(activeIndex); activeProcessButton->setChecked(false); userProcessButton->setChecked(true); allProcessButton->setChecked(false); }); connect(allProcessButton, &MyHoverButton::clicked, this, [=] { activeIndex = 2; emit this->activeWhoseProcessList(activeIndex); activeProcessButton->setChecked(false); userProcessButton->setChecked(false); allProcessButton->setChecked(true); }); layout->addWidget(activeProcessButton); layout->addWidget(userProcessButton); layout->addWidget(allProcessButton); this->setLayout(layout); } ProcessCategory::~ProcessCategory() { delete activeProcessButton; delete userProcessButton; delete allProcessButton; delete layout; } youker-assistant/plugins/systemmonitor/processlistitem.cpp0000664000175000017500000003450013260315532023401 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "processlistitem.h" #include #include #include #include "util.h" ProcessListItem::ProcessListItem(ProcData info) { m_data = info; iconSize = 16; padding = 14; textPadding = 5; } bool ProcessListItem::isSameItem(ProcessListItem *item) { return m_data.pid == ((static_cast(item)))->m_data.pid; } void ProcessListItem::drawCellBackground(QRect rect, QPainter *painter, int level) { QPainterPath path; path.addRect(QRectF(rect.x(), rect.y(), rect.width(), rect.height())); painter->setOpacity(0.5);//0.1 if (level == 0) { painter->fillPath(path, QColor("#fff4c4")); } else if (level == 1) { painter->fillPath(path, QColor("#f9eca8")); } else { painter->fillPath(path, QColor("#fca71d")); } } void ProcessListItem::drawBackground(QRect rect, QPainter *painter, int index, bool isSelect) { QPainterPath path; path.addRect(QRectF(rect)); if (isSelect) { painter->setOpacity(0.1); painter->fillPath(path, QColor("#2bb6ea")); } else { painter->setOpacity(1); painter->fillPath(path, QColor("#ffffff")); // if (index % 2 == 0) { // painter->fillPath(path, QColor("#ffffff")); // } else { // painter->fillPath(path, QColor("#e9eef0")); // } } } void ProcessListItem::drawForeground(QRect rect, QPainter *painter, int column, int, bool isSelect, bool isSeparator) { setFontSize(*painter, 12); painter->setOpacity(1); painter->setPen(QPen(QColor("#000000"))); if (column == 0) { painter->drawPixmap(QRect(rect.x() + padding, rect.y() + (rect.height() - iconSize) / 2, iconSize, iconSize), m_data.iconPixmap); QString name = m_data.processName; if (m_data.m_status == tr("Stopped")) {//已停止 painter->setPen(QPen(QColor("#fca71d"))); name = QString("(%1) %2").arg(tr("Suspend")).arg(m_data.processName); } else if (m_data.m_status == tr("Zombie")) {//僵死 painter->setPen(QPen(QColor("#808080"))); name = QString("(%1) %2").arg(tr("No response")).arg(m_data.processName); } else if (m_data.m_status == tr("Uninterruptible")) {//不可中断 painter->setPen(QPen(QColor("#ff6a6a"))); name = QString("(%1) %2").arg(tr("Uninterruptible")).arg(m_data.processName); } else {//Sleeping 睡眠中 Running 运行中 } int nameMaxWidth = rect.width() - iconSize - padding * 3; QFont font = painter->font(); QFontMetrics fm(font); QString procName = fm.elidedText(name, Qt::ElideRight, nameMaxWidth); painter->drawText(QRect(rect.x() + iconSize + padding * 2, rect.y(), nameMaxWidth, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, procName); if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 1) { if (!m_data.user.isEmpty()) { painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, m_data.user); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 2) { if (!m_data.m_status.isEmpty()) { painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, m_data.m_status); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 3) { if (m_data.cpu < 10) { this->drawCellBackground(QRect(rect.x(), rect.y(), rect.width(), rect.height()), painter, 0); } else if (m_data.cpu < 33) { this->drawCellBackground(QRect(rect.x(), rect.y(), rect.width(), rect.height()), painter, 1); } else { this->drawCellBackground(QRect(rect.x(), rect.y(), rect.width(), rect.height()), painter, 2); } painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, QString("%1%").arg(m_data.cpu)); if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 4) { painter->drawText(QRect(rect.x(), rect.y(), rect.width() - padding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, QString("%1").arg(m_data.pid)); if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 5) { int commandMaxWidth = rect.width(); QFont font = painter->font(); QFontMetrics fm(font); QString command = fm.elidedText(m_data.commandLine, Qt::ElideRight, commandMaxWidth); painter->drawText(QRect(rect.x(), rect.y(), commandMaxWidth, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, command); if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 6) { if (m_data.m_memory > 0) { painter->setOpacity(1); QString memory = QString(g_format_size_full(m_data.m_memory, G_FORMAT_SIZE_IEC_UNITS)); if (m_data.m_memory < 102400000) {//<100M this->drawCellBackground(QRect(rect.x(), rect.y(), rect.width(), rect.height()), painter, 0); } else if (m_data.m_memory < 1024000000) {//1G this->drawCellBackground(QRect(rect.x(), rect.y(), rect.width(), rect.height()), painter, 1); } else { this->drawCellBackground(QRect(rect.x(), rect.y(), rect.width(), rect.height()), painter, 2); } painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignRight | Qt::AlignVCenter, memory); } if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } else if (column == 7) { painter->drawText(QRect(rect.x(), rect.y(), rect.width() - textPadding, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, getNiceLevel(m_data.m_nice)); if (isSeparator) { painter->setOpacity(0.8); QPainterPath separatorPath; separatorPath.addRect(QRectF(rect.x() + rect.width() - 1, rect.y(), 1, rect.height())); painter->fillPath(separatorPath, QColor("#e0e0e0")); } } } bool ProcessListItem::doSearch(const ProcessListItem *item, QString text) { const ProcessListItem *procItem = static_cast(item); QString content = text.toLower(); return procItem->getProcessName().toLower().contains(content) || QString::number(procItem->getPid()).contains(content) || procItem->getDisplayName().toLower().contains(content) || procItem->getUser().toLower().contains(content); } bool ProcessListItem::sortByName(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { QString name1 = (static_cast(item1))->getDisplayName(); QString name2 = (static_cast(item2))->getDisplayName(); bool isSort; if (name1 == name2) { double cpu1 = static_cast(item1)->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); isSort = cpu1 > cpu2; } else { QCollator qco(QLocale::system()); int result = qco.compare(name1, name2); isSort = result < 0; } return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByUser(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { QString user1 = (static_cast(item1))->getUser(); QString user2 = (static_cast(item2))->getUser(); bool isSort; if (user1 == user2) { double cpu1 = static_cast(item1)->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); isSort = cpu1 > cpu2; } else { QCollator qco(QLocale::system()); int result = qco.compare(user1, user2); isSort = result < 0; } return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByStatus(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { QString status1 = (static_cast(item1))->getStatus(); QString status2 = (static_cast(item2))->getStatus(); bool isSort; if (status1 == status2) { double cpu1 = static_cast(item1)->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); isSort = cpu1 > cpu2; } else { QCollator qco(QLocale::system()); int result = qco.compare(status1, status2); isSort = result < 0; } return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByCPU(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { double cpu1 = (static_cast(item1))->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); bool isSort; if (cpu1 == cpu2) { long memory1 = static_cast(item1)->getMemory(); long memory2 = (static_cast(item2))->getMemory(); isSort = memory1 > memory2; } else { isSort = cpu1 > cpu2; } return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByPid(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { bool isSort = (static_cast(item1))->getPid() > (static_cast(item2))->getPid(); return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByCommand(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { QString command1 = (static_cast(item1))->getCommandLine(); QString command2 = (static_cast(item2))->getCommandLine(); bool isSort; if (command1 == command2) { double cpu1 = static_cast(item1)->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); isSort = cpu1 > cpu2; } else { QCollator qco(QLocale::system()); int result = qco.compare(command1, command2); isSort = result < 0; } return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByMemory(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { long memory1 = (static_cast(item1))->getMemory(); long memory2 = (static_cast(item2))->getMemory(); bool isSort; if (memory1 == memory2) { double cpu1 = static_cast(item1)->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); isSort = cpu1 > cpu2; } else { isSort = memory1 > memory2; } return descendingSort ? isSort : !isSort; } bool ProcessListItem::sortByPriority(const ProcessListItem *item1, const ProcessListItem *item2, bool descendingSort) { long nice1 = (static_cast(item1))->getNice(); long nice2 = (static_cast(item2))->getNice(); bool isSort; if (nice1 == nice2) { double cpu1 = static_cast(item1)->getCPU(); double cpu2 = (static_cast(item2))->getCPU(); isSort = cpu1 > cpu2; } else { isSort = nice1 > nice2; } return descendingSort ? isSort : !isSort; } QString ProcessListItem::getProcessName() const { return m_data.processName; } QString ProcessListItem::getDisplayName() const { return m_data.displayName; } QString ProcessListItem::getUser() const { return m_data.user; } QString ProcessListItem::getStatus() const { return m_data.m_status; } double ProcessListItem::getCPU() const { return m_data.cpu; } pid_t ProcessListItem::getPid() const { return m_data.pid; } long ProcessListItem::getMemory() const { return m_data.m_memory; } long ProcessListItem::getNice() const { return m_data.m_nice; } QString ProcessListItem::getCommandLine() const { return m_data.commandLine; } youker-assistant/plugins/widgets/0000775000175000017500000000000013260315532016154 5ustar fengfengyouker-assistant/plugins/widgets/myaction.h0000664000175000017500000000140313260315532020146 0ustar fengfeng#ifndef _MYACTION_H_ #define _MYACTION_H_ #include #include #include #include class MyAction : public QAction { public: MyAction (QObject * parent, const char * name, bool autoadd = true ); MyAction (QObject * parent, bool autoadd = true ); MyAction (const QString & text, QKeySequence accel, QObject * parent, const char * name = "", bool autoadd = true ); MyAction (QKeySequence accel, QObject * parent, const char * name = "", bool autoadd = true ); ~MyAction(); void addShortcut(QKeySequence key); void change(const QIcon & icon, const QString & text ); void change(const QString & text); protected: void addActionToParent(); }; #endif youker-assistant/plugins/widgets/myactiongroupitem.h0000664000175000017500000000054013260315532022103 0ustar fengfeng#ifndef _MYACTIONGROUPITEM_H_ #define _MYACTIONGROUPITEM_H_ #include "myaction.h" #include class MyActionGroup; class MyActionGroupItem : public MyAction { public: MyActionGroupItem( QObject * parent, MyActionGroup *group, const char * name, int data, bool autoadd = true ); }; #endif // _MYACTIONGROUPITEM_H_ youker-assistant/plugins/widgets/myactiongroup.h0000664000175000017500000000100613260315532021222 0ustar fengfeng#ifndef _MYACTIONGROUP_H_ #define _MYACTIONGROUP_H_ #include #include #include "myaction.h" class MyActionGroup : public QActionGroup { Q_OBJECT public: MyActionGroup ( QObject * parent ); void setChecked(int ID); int checked(); void clear(bool remove); void setActionsEnabled(bool); void addTo(QWidget *); void removeFrom(QWidget *); void uncheckAll(); signals: void activated(int); protected slots: void itemTriggered(QAction *); }; #endif youker-assistant/plugins/widgets/mysearchedit.h0000664000175000017500000000217213260315532021010 0ustar fengfeng#ifndef MYSEARCHEDIT_H #define MYSEARCHEDIT_H #include #include #include #include #include #include "mytristatebutton.h" class MySearchEdit : public QFrame { Q_OBJECT public: explicit MySearchEdit(QWidget *parent = 0); ~MySearchEdit(); void setPlaceHolder(const QString &text); const QString searchedText() const; QLineEdit *getLineEdit() const; public slots: void clearEdit(); void setEditFocus(); void setText(const QString & text); void clearAndFocusEdit(); signals: void textChanged(); protected: void resizeEvent(QResizeEvent *event); bool event(QEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); bool eventFilter(QObject *object, QEvent *event); private: QPropertyAnimation *m_animation = nullptr; QEasingCurve m_showCurve; QEasingCurve m_hideCurve; QSize m_size; QLineEdit *m_edit = nullptr; QLabel *m_searchBtn = nullptr; QLabel *m_placeHolder = nullptr; MyTristateButton *m_clearBtn = nullptr; }; #endif // MYSEARCHEDIT_H youker-assistant/plugins/widgets/myhoverbutton.h0000664000175000017500000000174013260315532021254 0ustar fengfeng#ifndef MYHOVERBUTTON_H #define MYHOVERBUTTON_H #include #include #include #include class MyHoverButton : public QLabel { Q_OBJECT enum HoverButtonState {Normal, Hover, Press, Checked}; public: MyHoverButton(QWidget * parent=0); ~MyHoverButton(); void setChecked(bool flag); bool isChecked(); void setPicture(const QString &picture); HoverButtonState getButtonState() const; signals: void clicked(); void stateChanged(); protected: void enterEvent(QEvent * event) Q_DECL_OVERRIDE; void leaveEvent(QEvent * event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent * event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent * event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: void updateBackgroundColor(); void setState(HoverButtonState state); private: HoverButtonState m_state; bool m_isChecked; }; #endif // MYHOVERBUTTON_H youker-assistant/plugins/widgets/myunderlinebutton.h0000664000175000017500000000214513260315532022116 0ustar fengfeng#ifndef MYUNDERLINEBUTTON_H #define MYUNDERLINEBUTTON_H #include #include #include #include class QVBoxLayout; class MyUnderLineButton : public QWidget { Q_OBJECT enum UnderLineButtonState {Normal, Hover, Press, Checked}; public: MyUnderLineButton(QWidget * parent=0); ~MyUnderLineButton(); void setChecked(bool flag); bool isChecked(); void setName(const QString &name); UnderLineButtonState getButtonState() const; signals: void clicked(); protected: void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: void updateStyleSheet(); void setState(UnderLineButtonState state); private: UnderLineButtonState m_state; bool m_isChecked; QLabel *m_textLabel = nullptr; QLabel *m_underlineLabel = nullptr; QVBoxLayout *m_layout = nullptr; }; #endif // MYUNDERLINEBUTTON_H youker-assistant/plugins/widgets/myactiongroup.cpp0000664000175000017500000000301313260315532021555 0ustar fengfeng#include "myactiongroup.h" #include #include #include MyActionGroup::MyActionGroup( QObject * parent ) : QActionGroup(parent) { setExclusive(true); connect(this, SIGNAL(triggered(QAction *)), this, SLOT(itemTriggered(QAction *)) ); } void MyActionGroup::setChecked(int ID) { QList l = actions(); for (int n=0; n < l.count(); n++) { if ( (!l[n]->isSeparator()) && (l[n]->data().toInt() == ID) ) { l[n]->setChecked(true); return; } } } int MyActionGroup::checked() { QAction * a = checkedAction(); if (a) return a->data().toInt(); else return -1; } void MyActionGroup::uncheckAll() { QList l = actions(); for (int n=0; n < l.count(); n++) { l[n]->setChecked(false); } } void MyActionGroup::setActionsEnabled(bool b) { QList l = actions(); for (int n=0; n < l.count(); n++) { l[n]->setEnabled(b); } } void MyActionGroup::clear(bool remove) { while (actions().count() > 0) { QAction * a = actions()[0]; if (a) { removeAction(a); if (remove) a->deleteLater(); } } } void MyActionGroup::itemTriggered(QAction *a) { int value = a->data().toInt(); emit activated(value); } void MyActionGroup::addTo(QWidget *w) { w->addActions( actions() ); } void MyActionGroup::removeFrom(QWidget *w) { for (int n=0; n < actions().count(); n++) { w->removeAction( actions()[n] ); } } youker-assistant/plugins/widgets/mysearchedit.cpp0000664000175000017500000001215413260315532021344 0ustar fengfeng#include "mysearchedit.h" #include #include #include #include #include MySearchEdit::MySearchEdit(QWidget *parent) : QFrame(parent) ,m_showCurve(QEasingCurve::OutCubic) ,m_hideCurve(QEasingCurve::InCubic) { this->setStyleSheet("QFrame{background-color:#00376a;border-radius:0px;}"); m_searchBtn = new QLabel; m_searchBtn->setStyleSheet("QLabel{background-color:transparent;border:none;background-image:url(:/res/search.png);}"); m_searchBtn->setFixedSize(16, 16); m_clearBtn = new MyTristateButton; m_clearBtn->setObjectName("ClearIcon"); m_clearBtn->hide(); m_edit = new QLineEdit; m_edit->setStyleSheet("QLineEdit{background-color:transparent;border-radius:0px;color:#ffffff;padding-right:12px;padding-bottom: 2px;}"); //m_edit->setPlaceholderText("enter process info"); m_placeHolder = new QLabel; m_placeHolder->setStyleSheet("QLabel{background-color:transparent;color:#808080;font-size:12px;margin: 2 0 0 0 px;} QLabel:hover{color:#ffffff;font-size:12px;}"); m_animation = new QPropertyAnimation(m_edit, "minimumWidth"); m_size = QSize(m_searchBtn->sizeHint().width() + m_edit->sizeHint().width() + m_clearBtn->sizeHint().width() + 6, qMax(m_searchBtn->sizeHint().height(), m_edit->sizeHint().height())); m_edit->setFixedWidth(0); m_edit->installEventFilter(this); QHBoxLayout *layout = new QHBoxLayout(this); layout->addStretch(); layout->addWidget(m_searchBtn); layout->setAlignment(m_searchBtn, Qt::AlignCenter); layout->addWidget(m_placeHolder); layout->setAlignment(m_placeHolder, Qt::AlignCenter); layout->addWidget(m_edit); layout->setAlignment(m_edit, Qt::AlignCenter); layout->addStretch(); layout->addWidget(m_clearBtn); layout->setAlignment(m_clearBtn, Qt::AlignCenter); layout->setSpacing(0); layout->setContentsMargins(0, 0, 0, 0); setFocusPolicy(Qt::StrongFocus); connect(m_edit, &QLineEdit::textChanged, [this] {m_clearBtn->setVisible(!m_edit->text().isEmpty());}); connect(m_edit, &QLineEdit::textChanged, this, &MySearchEdit::textChanged, Qt::DirectConnection); connect(m_clearBtn, SIGNAL(clicked()), this, SLOT(clearAndFocusEdit())); // connect(m_clearBtn, &MyTristateButton::clicked, this, [=] { // this->clearAndFocusEdit(); // }); } MySearchEdit::~MySearchEdit() { m_animation->deleteLater(); delete m_edit; delete m_searchBtn; delete m_placeHolder; delete m_clearBtn; } const QString MySearchEdit::searchedText() const { return m_edit->text(); } void MySearchEdit::clearAndFocusEdit() { this->clearEdit(); this->m_edit->setFocus(); } void MySearchEdit::clearEdit() { m_edit->clear(); this->setStyleSheet("QFrame{background-color:#00376a;border-radius:0px;}"); } void MySearchEdit::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) return QFrame::mousePressEvent(event); setEditFocus(); event->accept(); } void MySearchEdit::mouseReleaseEvent(QMouseEvent *event) { event->accept(); } bool MySearchEdit::eventFilter(QObject *object, QEvent *event) { if (object == m_edit && event->type() == QEvent::FocusOut && m_edit->text().isEmpty()) { auto focusEvent = dynamic_cast(event); if (focusEvent && focusEvent->reason() != Qt::PopupFocusReason) { // m_placeHolder->show(); m_animation->stop(); m_animation->setStartValue(m_edit->width()); m_animation->setEndValue(0); m_animation->setEasingCurve(m_hideCurve); m_animation->start(); connect(m_animation, &QPropertyAnimation::finished, m_placeHolder, &QLabel::show); } } return QFrame::eventFilter(object, event); } void MySearchEdit::setEditFocus() { if (!m_placeHolder->isVisible()) { return; } disconnect(m_animation, &QPropertyAnimation::finished, m_placeHolder, &QLabel::show); m_animation->stop(); m_animation->setStartValue(0); m_animation->setEndValue(m_size.width() - m_searchBtn->width() - 6); m_animation->setEasingCurve(m_showCurve); m_animation->start(); m_placeHolder->hide(); m_edit->setFocus(); this->setStyleSheet("QFrame{background-color:#00376a;border:1px solid #47ccf3;border-radius:0px;}"); } void MySearchEdit::setPlaceHolder(const QString &text) { m_placeHolder->setText(text); } void MySearchEdit::setText(const QString & text) { if (m_edit) { m_edit->setText(text); } } QLineEdit *MySearchEdit::getLineEdit() const { return m_edit; } void MySearchEdit::resizeEvent(QResizeEvent *event) { m_size = event->size(); m_edit->setFixedHeight(m_size.height()); } bool MySearchEdit::event(QEvent *event) { if (event->type() == QEvent::FocusIn) { const QFocusEvent *ev = static_cast(event); if (ev->reason() == Qt::TabFocusReason || ev->reason() == Qt::BacktabFocusReason || ev->reason() == Qt::OtherFocusReason || ev->reason() == Qt::ShortcutFocusReason) { setEditFocus(); } } return QFrame::event(event); } youker-assistant/plugins/widgets/myaction.cpp0000664000175000017500000000351613260315532020510 0ustar fengfeng#include "myaction.h" #include MyAction::MyAction (QObject * parent, const char * name, bool autoadd) : QAction(parent) { setObjectName(name); if (autoadd) addActionToParent(); } MyAction::MyAction(QObject * parent, bool autoadd) : QAction(parent) { if (autoadd) addActionToParent(); } MyAction::MyAction(const QString & text, QKeySequence accel, QObject * parent, const char * name, bool autoadd ) : QAction(parent) { setObjectName(name); setText(text); setShortcut(accel); if (autoadd) addActionToParent(); } MyAction::MyAction(QKeySequence accel, QObject * parent, const char * name, bool autoadd ) : QAction(parent) { setObjectName(name); setShortcut(accel); if (autoadd) addActionToParent(); } MyAction::~MyAction() { } void MyAction::addShortcut(QKeySequence key) { setShortcuts( shortcuts() << key); } void MyAction::addActionToParent() { if (parent()) { if (parent()->inherits("QWidget")) { QWidget *w = static_cast (parent()); w->addAction(this); } } } void MyAction::change(const QIcon & icon, const QString & text) { setIcon( icon ); change(text); } void MyAction::change(const QString & text ) { setText( text ); QString accel_text = shortcut().toString(); QString s = text; s.replace("&",""); if (!accel_text.isEmpty()) { setToolTip( s + " ("+ accel_text +")"); setIconText( s ); } /* if (text.isEmpty()) { QString s = menuText; s = s.replace("&",""); setText( s ); if (!accel_text.isEmpty()) setToolTip( s + " ("+ accel_text +")"); } else { setText( text ); if (!accel_text.isEmpty()) setToolTip( text + " ("+ accel_text +")"); } */ } youker-assistant/plugins/widgets/mytristatebutton.cpp0000664000175000017500000000614213260315532022324 0ustar fengfeng#include "mytristatebutton.h" #include #include MyTristateButton::MyTristateButton(QWidget *parent) : QLabel(parent) { setCheckable(false);//setCheckable(true); updateIcon(); } MyTristateButton::~MyTristateButton() { } void MyTristateButton::enterEvent(QEvent *event) { setCursor(Qt::PointingHandCursor); if (!m_isChecked){ setState(Hover); } event->accept(); //QLabel::enterEvent(event); } void MyTristateButton::leaveEvent(QEvent *event) { if (!m_isChecked){ setState(Normal); } event->accept(); //QLabel::leaveEvent(event); } void MyTristateButton::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) return; setState(Press); event->accept(); //QLabel::mousePressEvent(event); } void MyTristateButton::mouseReleaseEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) return; if (m_isCheckable){ m_isChecked = !m_isChecked; if (m_isChecked){ setState(Checked); } else { setState(Normal); } } else { setState(Hover); } event->accept(); //QLabel::mouseReleaseEvent(event); if (event->button() == Qt::LeftButton) emit clicked(); } void MyTristateButton::mouseMoveEvent(QMouseEvent *event) { if (!m_isCheckable && !rect().contains(event->pos())) { setState(Normal); } } void MyTristateButton::updateIcon() { switch (m_state) { case Hover: if (!m_hoverPic.isEmpty()) setPixmap(QPixmap(m_hoverPic)); break; case Press: if (!m_pressPic.isEmpty()) setPixmap(QPixmap(m_pressPic)); break; case Checked: if (!m_checkedPic.isEmpty()) setPixmap(QPixmap(m_checkedPic)); break; default: if (!m_normalPic.isEmpty()) setPixmap(QPixmap(m_normalPic)); break; } setAlignment(Qt::AlignCenter); } void MyTristateButton::setState(MyTristateButton::ButtonState state) { if (m_state == state) return; m_state = state; updateIcon(); } void MyTristateButton::setCheckable(bool flag) { m_isCheckable = flag; if (!m_isCheckable){ setState(Normal); } } void MyTristateButton::setChecked(bool flag) { if (m_isCheckable == false){ return; } m_isChecked = flag; if (m_isChecked){ setState(Checked); } else { setState(Normal); } } bool MyTristateButton::isChecked() { return m_isChecked; } bool MyTristateButton::isCheckable() { return m_isCheckable; } void MyTristateButton::setNormalPic(const QString &normalPicPixmap) { m_normalPic = normalPicPixmap; updateIcon(); } void MyTristateButton::setHoverPic(const QString &hoverPicPixmap) { m_hoverPic = hoverPicPixmap; updateIcon(); } void MyTristateButton::setPressPic(const QString &pressPicPixmap) { m_pressPic = pressPicPixmap; updateIcon(); } void MyTristateButton::setCheckedPic(const QString &checkedPicPixmap) { m_checkedPic = checkedPicPixmap; updateIcon(); } MyTristateButton::ButtonState MyTristateButton::getButtonState() const { return m_state; } youker-assistant/plugins/widgets/mydialog.cpp0000664000175000017500000002175313260315532020475 0ustar fengfeng#include "mydialog.h" #include "mytristatebutton.h" #include #include #include #include #include #include #include #include #include #include MyDialog::MyDialog(const QString &title, const QString &message, QWidget *parent) : QDialog(parent) , mousePressed(false) { this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint/* | Qt::WindowCloseButtonHint*/); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid this->setAttribute(Qt::WA_TranslucentBackground); // this->setAttribute(Qt::WA_DeleteOnClose, false); this->setAttribute(Qt::WA_Resized, false); m_topLayout = new QHBoxLayout; m_topLayout->setContentsMargins(20, 14, 20, 14); m_topLayout->setSpacing(20); m_titleLabel = new QLabel; m_titleLabel->setStyleSheet("QLabel{padding-top:3px;padding-bottom:3px;font-size:18px;color:#000000;}"); m_titleLabel->hide(); m_titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents); m_messageLabel = new QLabel; m_messageLabel->setStyleSheet("QLabel{padding-top:3px;padding-bottom:3px;font-size:12px;color:#000000;}"); m_messageLabel->hide(); m_messageLabel->setAttribute(Qt::WA_TransparentForMouseEvents); QVBoxLayout *textLayout = new QVBoxLayout; textLayout->setContentsMargins(0, 0, 0, 0); textLayout->setSpacing(5); textLayout->addWidget(m_titleLabel, 0, Qt::AlignLeft); textLayout->addWidget(m_messageLabel, 0, Qt::AlignLeft); textLayout->addStretch(); m_topLayout->addLayout(textLayout); closeButton = new MyTristateButton(this); closeButton->setObjectName("CloseButton"); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); // connect(closeButton, &MyTristateButton::clicked, this, [=] { // this->close(); // }); closeButton->setAttribute(Qt::WA_NoMousePropagation); m_buttonLayout = new QHBoxLayout; m_buttonLayout->setMargin(0); m_buttonLayout->setSpacing(0); m_buttonLayout->setContentsMargins(20, 14, 20, 14); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->setSpacing(10); mainLayout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); mainLayout->addLayout(m_topLayout); mainLayout->addLayout(m_buttonLayout); QAction *button_action = new QAction(this); button_action->setShortcuts(QKeySequence::InsertParagraphSeparator); button_action->setAutoRepeat(false); connect(button_action, SIGNAL(triggered(bool)), this, SLOT(onDefaultButtonTriggered())); this->setLayout(mainLayout); this->addAction(button_action); this->setFocusPolicy(Qt::ClickFocus); this->setFocus(); setTitle(title); setMessage(message); this->moveToCenter(); } MyDialog::~MyDialog() { delete m_messageLabel; delete m_titleLabel; delete closeButton; QLayoutItem *child; while ((child = m_topLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } this->buttonList.clear(); while ((child = m_buttonLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } // while(this->m_buttonLayout->count()) { // QLayoutItem *item = this->m_buttonLayout->takeAt(0); // item->widget()->deleteLater(); // delete item; // } } void MyDialog::updateSize() { if (!this->testAttribute(Qt::WA_Resized)) { QSize size = this->sizeHint(); size.setWidth(qMax(size.width(), 234)); size.setHeight(qMax(size.height(), 196)); this->resize(size); this->setAttribute(Qt::WA_Resized, false); } } void MyDialog::onButtonClicked() { QAbstractButton *button = qobject_cast(this->sender()); if(button) { clickedButtonIndex = buttonList.indexOf(button); emit this->buttonClicked(clickedButtonIndex, button->text()); this->done(clickedButtonIndex);//cancel:0 ok:1 } } void MyDialog::onDefaultButtonTriggered() { QAbstractButton *button = qobject_cast(this->focusWidget()); if (button) button->click(); else if (defaultButton) defaultButton->click(); } int MyDialog::buttonCount() const { return this->buttonList.count(); } int MyDialog::addButton(const QString &text, bool isDefault) { int index = buttonCount(); QAbstractButton *button = new QPushButton(text); button->setFocusPolicy(Qt::NoFocus); button->setStyleSheet("QPushButton{font-size:12px;background-color:transparent;border:1px solid #bebebe;color:#000000;}QPushButton:hover{background-color:#ffffff;border:1px solid #3f96e4;color:#000000;}QPushButton:pressed{background-color:#ffffff;border:1px solid #3f96e4;color:#000000;}"); button->setAttribute(Qt::WA_NoMousePropagation); button->setFixedSize(91, 25); this->m_buttonLayout->insertWidget(index+1, button); this->buttonList << button; connect(button, SIGNAL(clicked(bool)), this, SLOT(onButtonClicked())); if(isDefault) { setDefaultButton(button); } return index; } void MyDialog::setDefaultButton(QAbstractButton *button) { this->defaultButton = button; } void MyDialog::setTitle(const QString &title) { if (this->m_title == title) return; this->m_title = title; this->m_titleLabel->setText(title); this->m_titleLabel->setHidden(title.isEmpty()); } void MyDialog::setMessage(const QString &message) { if (this->m_message == message) return; this->m_message = message; this->m_messageLabel->setText(message); this->m_messageLabel->setHidden(message.isEmpty()); } int MyDialog::exec() { this->clickedButtonIndex = -1; int ret = QDialog::exec(); return this->clickedButtonIndex >= 0 ? this->clickedButtonIndex : ret; } void MyDialog::showEvent(QShowEvent *event) { QDialog::showEvent(event); setAttribute(Qt::WA_Resized, false); this->updateSize(); } void MyDialog::hideEvent(QHideEvent *event) { QDialog::hideEvent(event); done(-1); } void MyDialog::childEvent(QChildEvent *event) { QDialog::childEvent(event); if (event->added()) { if (this->closeButton) { this->closeButton->raise(); } } } QRect MyDialog::getParentGeometry() const { if (this->parentWidget()) { return this->parentWidget()->window()->geometry(); } else { QPoint pos = QCursor::pos(); for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { return screen->geometry(); } } } return qApp->primaryScreen()->geometry(); } void MyDialog::moveToCenter() { QRect qr = geometry(); qr.moveCenter(this->getParentGeometry().center()); move(qr.topLeft()); } void MyDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->dragPosition = event->globalPos() - frameGeometry().topLeft(); this->mousePressed = true; } QDialog::mousePressEvent(event); } void MyDialog::mouseReleaseEvent(QMouseEvent *event) { this->mousePressed = false; QDialog::mouseReleaseEvent(event); } void MyDialog::mouseMoveEvent(QMouseEvent *event) { if (this->mousePressed) { move(event->globalPos() - this->dragPosition); } QDialog::mouseMoveEvent(event); } void MyDialog::paintEvent(QPaintEvent *event) { QPainter painter(this); //绘制圆角矩形 painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 painter.setBrush(QColor("#e9eef0"));//背景色 #0d87ca painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(1); QRectF r(0 / 2.0, 0 / 2.0, width() - 0, height() - 0);//左边 上边 右边 下边 painter.drawRoundedRect(r, 4, 4); //绘制背景色 // QPainterPath path; // path.addRect(QRectF(rect())); // painter.setOpacity(1); // painter.fillPath(path, QColor("#ffffff")); QDialog::paintEvent(event); } void MyDialog::resizeEvent(QResizeEvent *event) { QDialog::resizeEvent(event); this->m_titleLabel->setWordWrap(false); int labelMaxWidth = maximumWidth() - this->closeButton->width() - this->m_titleLabel->x(); if (this->m_titleLabel->sizeHint().width() > labelMaxWidth) { this->m_titleLabel->setFixedWidth(labelMaxWidth); this->m_titleLabel->setWordWrap(true); this->m_titleLabel->setFixedHeight(this->m_titleLabel->sizeHint().height()); } this->m_messageLabel->setWordWrap(false); labelMaxWidth = maximumWidth() - this->closeButton->width() - this->m_messageLabel->x(); if (this->m_messageLabel->sizeHint().width() > labelMaxWidth) { this->m_messageLabel->setFixedWidth(labelMaxWidth); this->m_messageLabel->setWordWrap(true); this->m_messageLabel->setFixedHeight(this->m_messageLabel->sizeHint().height()); } } youker-assistant/plugins/widgets/myactiongroupitem.cpp0000664000175000017500000000057213260315532022443 0ustar fengfeng#include "myactiongroupitem.h" #include "myactiongroup.h" MyActionGroupItem::MyActionGroupItem(QObject * parent, MyActionGroup *group, const char * name, int data, bool autoadd) : MyAction(parent, name, autoadd) { setData(data); setCheckable(true); if (group) group->addAction(this); } youker-assistant/plugins/widgets/mydialog.h0000664000175000017500000000362713260315532020142 0ustar fengfeng#ifndef MYDIALOG_H #define MYDIALOG_H #include #include #include #include class QAbstractButton; class QButtonGroup; class QLabel; class QCloseEvent; class QVBoxLayout; class MyTristateButton; #include class MyDialog : public QDialog { Q_OBJECT public: explicit MyDialog(const QString &title, const QString& message, QWidget *parent = 0); ~MyDialog(); void updateSize(); int buttonCount() const; QRect getParentGeometry() const; void moveToCenter(); signals: void buttonClicked(int index, const QString &text); public slots: int addButton(const QString &text, bool isDefault = false); void setDefaultButton(QAbstractButton *button); void setTitle(const QString &title); void setMessage(const QString& message); int exec() Q_DECL_OVERRIDE; public slots: void onButtonClicked(); void onDefaultButtonTriggered(); protected: void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE; void childEvent(QChildEvent *event) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: QLabel *m_messageLabel = nullptr; QLabel *m_titleLabel = nullptr; MyTristateButton *closeButton = nullptr; // QVBoxLayout *contentLayout = nullptr; QHBoxLayout *m_buttonLayout = nullptr; QHBoxLayout *m_topLayout = nullptr; QList buttonList; QList contentList; QPointer defaultButton; int clickedButtonIndex; QString m_title; QString m_message; QPoint dragPosition; bool mousePressed; }; #endif // MYDIALOG_H youker-assistant/plugins/widgets/mytristatebutton.h0000664000175000017500000000366213260315532021775 0ustar fengfeng#ifndef MYTRISTATEBUTTON_H #define MYTRISTATEBUTTON_H #include #include #include #include class MyTristateButton : public QLabel { Q_OBJECT Q_PROPERTY(QString normalPic READ getNormalPic WRITE setNormalPic DESIGNABLE true) Q_PROPERTY(QString hoverPic READ getHoverPic WRITE setHoverPic DESIGNABLE true) Q_PROPERTY(QString pressPic READ getPressPic WRITE setPressPic DESIGNABLE true) Q_PROPERTY(QString checkedPic READ getCheckedPic WRITE setCheckedPic DESIGNABLE true) public: MyTristateButton(QWidget * parent=0); ~MyTristateButton(); void setChecked(bool flag); void setCheckable(bool flag); bool isChecked(); bool isCheckable(); void setNormalPic(const QString & normalPic); void setHoverPic(const QString & hoverPic); void setPressPic(const QString & pressPic); void setCheckedPic(const QString & checkedPic); inline const QString getNormalPic() const {return m_normalPic;} inline const QString getHoverPic() const {return m_hoverPic;} inline const QString getPressPic() const {return m_pressPic;} inline const QString getCheckedPic() const {return m_checkedPic;} enum ButtonState {Normal, Hover, Press, Checked}; ButtonState getButtonState() const; signals: //Q_SIGNALS: void clicked(); void stateChanged(); protected: void enterEvent(QEvent * event) Q_DECL_OVERRIDE; void leaveEvent(QEvent * event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent * event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent * event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: void updateIcon(); void setState(ButtonState state); private: ButtonState m_state = Normal; bool m_isChecked = false; bool m_isCheckable = false; QString m_normalPic; QString m_hoverPic; QString m_pressPic; QString m_checkedPic; }; #endif // MYTRISTATEBUTTON_H youker-assistant/plugins/widgets/myhoverbutton.cpp0000664000175000017500000000461713260315532021615 0ustar fengfeng#include "myhoverbutton.h" #include #include MyHoverButton::MyHoverButton(QWidget *parent) : QLabel(parent) ,m_state(Normal) ,m_isChecked(false) { this->setStyleSheet("QLabel{background-color:transparent;}"); } MyHoverButton::~MyHoverButton() { } void MyHoverButton::enterEvent(QEvent *event) { setCursor(Qt::PointingHandCursor); if (!m_isChecked){ setState(Hover); } event->accept(); //QLabel::enterEvent(event); } void MyHoverButton::leaveEvent(QEvent *event) { if (!m_isChecked){ setState(Normal); } event->accept(); //QLabel::leaveEvent(event); } void MyHoverButton::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) return; setState(Press); event->accept(); //QLabel::mousePressEvent(event); } void MyHoverButton::mouseReleaseEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) return; m_isChecked = !m_isChecked; if (m_isChecked){ setState(Checked); } else { setState(Normal); } event->accept(); //QLabel::mouseReleaseEvent(event); if (event->button() == Qt::LeftButton) emit clicked(); } void MyHoverButton::mouseMoveEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) { setState(Normal); } } void MyHoverButton::updateBackgroundColor() { switch (m_state) { case Hover: this->setStyleSheet("QLabel{background-color:#e0f4f9;}"); break; case Press: this->setStyleSheet("QLabel{background-color:#e0f4f9;}"); break; case Checked: this->setStyleSheet("QLabel{background-color:#e0f4f9;}"); break; default: this->setStyleSheet("QLabel{background-color:transparent;}"); break; } setAlignment(Qt::AlignCenter); } void MyHoverButton::setState(MyHoverButton::HoverButtonState state) { if (m_state == state) return; m_state = state; updateBackgroundColor(); } void MyHoverButton::setChecked(bool flag) { m_isChecked = flag; if (m_isChecked){ setState(Checked); } else { setState(Normal); } } bool MyHoverButton::isChecked() { return m_isChecked; } void MyHoverButton::setPicture(const QString &picture) { setPixmap(QPixmap(picture)); } MyHoverButton::HoverButtonState MyHoverButton::getButtonState() const { return m_state; } youker-assistant/plugins/widgets/myunderlinebutton.cpp0000664000175000017500000000670213260315532022454 0ustar fengfeng#include "myunderlinebutton.h" #include #include #include MyUnderLineButton::MyUnderLineButton(QWidget *parent) : QWidget(parent) ,m_state(Normal) ,m_isChecked(false) { this->setFixedSize(80, 30); m_textLabel = new QLabel; m_textLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;text-align:center;}"); m_underlineLabel = new QLabel; m_underlineLabel->setFixedSize(52, 2); m_underlineLabel->setStyleSheet("QLabel{background-color:#ffffff;}"); m_underlineLabel->hide(); m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0,5,0,5); m_layout->addWidget(m_textLabel, 0, Qt::AlignTop | Qt::AlignHCenter); m_layout->addWidget(m_underlineLabel, 0, Qt::AlignBottom | Qt::AlignHCenter); } MyUnderLineButton::~MyUnderLineButton() { delete m_textLabel; delete m_underlineLabel; } void MyUnderLineButton::enterEvent(QEvent *event) { setCursor(Qt::PointingHandCursor); if (!m_isChecked){ setState(Hover); } event->accept(); //QWidget::enterEvent(event); } void MyUnderLineButton::leaveEvent(QEvent *event) { if (!m_isChecked){ setState(Normal); } event->accept(); //QWidget::leaveEvent(event); } void MyUnderLineButton::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) return; setState(Press); event->accept(); //QWidget::mousePressEvent(event); } void MyUnderLineButton::mouseReleaseEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) return; m_isChecked = !m_isChecked; if (m_isChecked){ setState(Checked); } else { setState(Normal); } event->accept(); //QWidget::mouseReleaseEvent(event); if (event->button() == Qt::LeftButton) emit clicked(); } void MyUnderLineButton::mouseMoveEvent(QMouseEvent *event) { if (!rect().contains(event->pos())) { setState(Normal); } } void MyUnderLineButton::updateStyleSheet() { switch (m_state) { case Hover: m_textLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;text-align:center;font-weight:bold;}"); m_underlineLabel->hide(); break; case Press: m_textLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;text-align:center;font-weight:bold;}"); m_underlineLabel->hide(); break; case Checked: m_textLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;text-align:center;font-weight:bold;}"); m_underlineLabel->show(); break; default: m_textLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;text-align:center;}"); m_underlineLabel->hide(); break; } } void MyUnderLineButton::setState(MyUnderLineButton::UnderLineButtonState state) { if (m_state == state) return; m_state = state; updateStyleSheet(); } void MyUnderLineButton::setChecked(bool flag) { m_isChecked = flag; if (m_isChecked){ setState(Checked); } else { setState(Normal); } } bool MyUnderLineButton::isChecked() { return m_isChecked; } void MyUnderLineButton::setName(const QString &name) { this->m_textLabel->setText(name); } MyUnderLineButton::UnderLineButtonState MyUnderLineButton::getButtonState() const { return m_state; } youker-assistant/plugins/startupmanager/0000775000175000017500000000000013265005454017547 5ustar fengfengyouker-assistant/plugins/startupmanager/startupwidget.h0000664000175000017500000000307513260315532022627 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPWIDGET_H #define STARTUPWIDGET_H #include #include #include class QVBoxLayout; class StartupListWidget; class StartupTitleWidget; class StartupWidget : public QFrame { Q_OBJECT public: StartupWidget(QWidget *parent = 0); ~StartupWidget(); void moveCenter(); protected: void paintEvent(QPaintEvent *); void closeEvent(QCloseEvent *event); void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: StartupTitleWidget *m_titleWidget = nullptr; StartupListWidget *m_startupView = nullptr; QVBoxLayout *m_layout = nullptr; QPoint dragPosition; bool mousePressed; }; #endif // STARTUPWIDGET_H youker-assistant/plugins/startupmanager/startupitem.h0000664000175000017500000000354313260315532022302 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPITEM_H #define STARTUPITEM_H #include #include #include #include class MySwitcher; class StartupData; class StartupItem : public QWidget { Q_OBJECT public: StartupItem(StartupData info, QWidget *parent=0); QListWidgetItem* getItem(); QString getAppName(); void setAppName(const QString &name); void setItemHovered(); void unsetItemHovered(); void setSwitcherOn(const bool b); signals: void changeStartup(const QString &exec, const bool active); void enter(); protected: void enterEvent(QEvent *event); void paintEvent(QPaintEvent *); private: bool isEntered; QListWidgetItem *item = nullptr; QString m_appName; QLabel *m_appIcon = nullptr; QLabel *m_appNameLabel = nullptr; QLabel *m_appDescLabel = nullptr; MySwitcher *switcher = nullptr; QWidget *m_labelWidget = nullptr; QHBoxLayout *m_switchLayout = nullptr; QVBoxLayout *m_labelLayout = nullptr; QHBoxLayout *m_leftLayout = nullptr; QHBoxLayout *m_layout = nullptr; }; #endif // STARTUPITEM_H youker-assistant/plugins/startupmanager/startuplistwidget.h0000664000175000017500000000340313260315532023516 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPLISTWIDGET_H #define STARTUPLISTWIDGET_H #include "startupitem.h" #include "startupworker.h" #include "util.h" #include class QFileSystemWatcher; class StartupData; class StartupListWidget : public QListWidget { Q_OBJECT public: StartupListWidget(QWidget *parent=0); ~StartupListWidget(); void displayAutoStartupItems(); void clearUI(); void loadItem(StartupData info); void loadItems(QStringList items, int scrollValue); void listAllDesktopFileInDirectory(MonitorData monitorData); void setAppAutoStartup(const QString &exec, bool enabled); void removeItemByName(const QString &appName); public slots: void onChangeStartup(const QString &exec, bool active); void onMouseEnter(); void onRefreshUI(); private: StartupWorker *m_startupWorker = nullptr; // QList m_watcherList;//QList *m_watcherList; // QMap m_watcherMap; }; #endif // STARTUPLISTWIDGET_H youker-assistant/plugins/startupmanager/startupitem.cpp0000664000175000017500000001015513260315532022632 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "startupitem.h" #include "../../component/myswitcher.h" #include "startupdata.h" #include #include #include #include inline QPixmap getAppIconPix(const QString &iconName, int iconSize) { QIcon defaultExecutableIcon = QIcon::fromTheme("application-x-executable");//gnome-mine-application-x-executable if (defaultExecutableIcon.isNull()) { defaultExecutableIcon = QIcon("/usr/share/icons/kylin-icon-theme/48x48/mimetypes/application-x-executable.png"); if (defaultExecutableIcon.isNull()) defaultExecutableIcon = QIcon(":/res/autostart-default.png"); } QIcon icon; if (iconName.contains("/")) { icon = QIcon(iconName); } else { icon = QIcon::fromTheme(iconName, defaultExecutableIcon); } qreal devicePixelRatio = qApp->devicePixelRatio(); QPixmap pixmap = icon.pixmap(iconSize * devicePixelRatio, iconSize * devicePixelRatio); pixmap.setDevicePixelRatio(devicePixelRatio); return pixmap; } StartupItem::StartupItem(StartupData info, QWidget *parent) : QWidget(parent) ,isEntered(false) { item = new QListWidgetItem(); // item->setSizeHint(QSize(400, 60)); m_layout = new QHBoxLayout(); m_leftLayout = new QHBoxLayout(); m_switchLayout = new QHBoxLayout(); m_appIcon = new QLabel(); m_appIcon->setFixedSize(40, 40); m_appIcon->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 m_appIcon->setPixmap(getAppIconPix(info.icon, 40)); m_appNameLabel = new QLabel(); this->setAppName(info.name); m_appDescLabel = new QLabel(); m_appDescLabel->setText(info.comment); switcher = new MySwitcher(); switcher->setOnStatus(info.enabled); connect(switcher, &MySwitcher::statusChanged, [=] (const bool b) { emit changeStartup(info.exec, b); }); m_switchLayout->addWidget(switcher, 0, Qt::AlignCenter); m_leftLayout->addWidget(m_appIcon); m_labelWidget = new QWidget(); m_labelLayout = new QVBoxLayout(m_labelWidget); m_labelLayout->addWidget(m_appNameLabel); m_labelLayout->addWidget(m_appDescLabel); m_leftLayout->addWidget(m_labelWidget); m_layout->addLayout(m_leftLayout); m_layout->addStretch(); m_layout->addLayout(m_switchLayout); m_layout->setContentsMargins(10, 0, 10, 0); this->setLayout(m_layout); } void StartupItem::setSwitcherOn(const bool b) { switcher->blockSignals(true); switcher->setOnStatus(b); switcher->blockSignals(false); } QListWidgetItem* StartupItem::getItem() { return item; } void StartupItem::setItemHovered() { isEntered = true; repaint(); } void StartupItem::unsetItemHovered() { isEntered = false; repaint(); } void StartupItem::setAppName(const QString &name) { m_appName = name; m_appNameLabel->setText(name); } QString StartupItem::getAppName() { return this->m_appName; } void StartupItem::enterEvent(QEvent *event) { emit this->enter(); QWidget::enterEvent(event); } void StartupItem::paintEvent(QPaintEvent *event) { if (isEntered) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QPainterPath path; path.addRoundedRect(QRectF(rect()), 2, 2); painter.setOpacity(0.1); painter.fillPath(path, QColor("#2bb6ea")); } QWidget::paintEvent(event); } youker-assistant/plugins/startupmanager/startupmanager.pro0000664000175000017500000000237613260315532023332 0ustar fengfeng#------------------------------------------------- # # Project created by QtCreator 2015-01-26T09:16:38 # # Functional code references "gnome-session" (gnome-session-properties) # #------------------------------------------------- QT += core isEqual(QT_MAJOR_VERSION, 5) { QT += widgets gui svg } TARGET = startupmanager TEMPLATE = lib DESTDIR = $$_PRO_FILE_PWD_/../ CONFIG += plugin c++11 link_pkgconfig PKGCONFIG += glib-2.0 gobject-2.0 QMAKE_CXXFLAGS += -fpermissive #DEFINES += QT_NO_INOTIFY target.path = $${PREFIX}/lib/kylin-assistant/plugins/ INSTALLS += target unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } HEADERS += \ startupmanager.h \ startupwidget.h \ ../../component/plugininterface.h \ startuptitlewidget.h \ ../widgets/mytristatebutton.h \ startuplistwidget.h \ startupitem.h \ ../../component/myswitcher.h \ startupworker.h \ startupdata.h \ util.h SOURCES += \ startupmanager.cpp \ startupwidget.cpp \ startuptitlewidget.cpp \ ../widgets/mytristatebutton.cpp \ startuplistwidget.cpp \ startupitem.cpp \ ../../component/myswitcher.cpp \ startupworker.cpp \ util.cpp OTHER_FILES += \ startupmanager.json RESOURCES += \ ../../src/img.qrc youker-assistant/plugins/startupmanager/startuptitlewidget.cpp0000664000175000017500000001036113260315532024220 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "startuptitlewidget.h" #include "../widgets/mytristatebutton.h" #include #include #include #include #include #include StartupTitleWidget::StartupTitleWidget(QWidget *parent) :QFrame(parent) { installEventFilter(this); setMouseTracking(true); setFixedHeight(39); // m_topBorderColor = QColor(255, 255, 255, 153); this->setAutoFillBackground(true); QPalette palette; palette.setColor(QPalette::Background, QColor("#0d87ca")); this->setPalette(palette); initWidgets(); } StartupTitleWidget::~StartupTitleWidget() { //Segmentation fault QLayoutItem *child; while ((child = m_lLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_rLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_layout; } /*void StartupTitleWidget::paintEvent(QPaintEvent *e) { QFrame::paintEvent(e); QPainter p(this); p.setRenderHint(QPainter::Antialiasing); const QColor tc(m_topBorderColor); int borderHeight = 1; QPainterPath tPath; tPath.moveTo(QPointF(x(), y() + borderHeight - 0.5)); tPath.lineTo(QPointF(x() + width(), y() + borderHeight - 0.5)); p.setPen(QPen(tc)); p.drawPath(tPath); }*/ void StartupTitleWidget::initLeftContent() { QWidget *w = new QWidget; m_lLayout = new QHBoxLayout(w); m_lLayout->setContentsMargins(6, 0, 0, 0); m_lLayout->setSpacing(0); QLabel *label = new QLabel; label->setStyleSheet("QLabel{border-image: url(://res/kylin-assistant.png);}"); label->setFixedSize(24, 24); m_lLayout->addWidget(label); QLabel *titleLabel = new QLabel; titleLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;}"); titleLabel->setText(tr("Kylin Startup Manager")); m_lLayout->addSpacing(5); m_lLayout->addWidget(titleLabel); m_layout->addWidget(w, 1, Qt::AlignLeft); } void StartupTitleWidget::initRightContent() { QWidget *w = new QWidget; m_rLayout = new QHBoxLayout(w); m_rLayout->setContentsMargins(0, 0, 6, 0); m_rLayout->setSpacing(0); m_layout->addWidget(w, 1, Qt::AlignRight); MyTristateButton *minBtn = new MyTristateButton; minBtn->setObjectName("MinButton"); connect(minBtn, SIGNAL(clicked()), this, SLOT(onMinBtnClicked())); // connect(minBtn, &MyTristateButton::clicked, this, [=] { // if (parentWidget() && parentWidget()->parentWidget()) { // parentWidget()->parentWidget()->showMinimized(); // } // }); MyTristateButton *closeBtn = new MyTristateButton; closeBtn->setObjectName("CloseButton"); connect(closeBtn, SIGNAL(clicked()), this, SLOT(onCloseBtnClicked())); // connect(closeBtn, &MyTristateButton::clicked, this, [=] { // window()->close(); // }); m_rLayout->addWidget(minBtn); m_rLayout->addWidget(closeBtn); } void StartupTitleWidget::onMinBtnClicked() { if (parentWidget() && parentWidget()->parentWidget()) { parentWidget()->parentWidget()->showMinimized(); } } void StartupTitleWidget::onCloseBtnClicked() { window()->close(); } void StartupTitleWidget::initWidgets() { m_layout = new QHBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); this->setLayout(m_layout); initLeftContent(); initRightContent(); } youker-assistant/plugins/startupmanager/startupmanager.h0000664000175000017500000000306413260315532022754 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPMANAGER_H #define STARTUPMANAGER_H #include #include #include "../../component/plugininterface.h" #include "startupwidget.h" //插件入口 class StartupManager : public QObject , PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) Q_PLUGIN_METADATA(IID "com.kylin.Plugin.PluginInterface" FILE "startupmanager.json")//指定IID和.json文件 #endif public: explicit StartupManager(QObject* parent = 0); virtual ~StartupManager(); QWidget *centralWidget(); public: virtual QString getGuid(); virtual QString getName(); virtual QString getDescribe(); virtual QString getPicture(); virtual void doAction(); private: StartupWidget *startup_dialog = nullptr; }; #endif // STARTUPMANAGER_H youker-assistant/plugins/startupmanager/startupdata.h0000664000175000017500000000446213260315532022256 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPDATA_H #define STARTUPDATA_H #include #include #include #include #include #include /*typedef struct { QString dir; int index; QFileSystemWatcher *watcher; QStringList fileList; } MonitorData;*/ class MonitorData { public: QString dir;//监控目录 int index; QFileSystemWatcher *watcher;//监控器 QStringList fileList;//监控目录下的文件列表 }; class StartupData/* : public QObject*/ { // Q_OBJECT //public: // explicit StartupData(QObject *parent = 0); public: bool hidden; bool no_display; bool enabled; bool shown; QString path; QString basename; QString name; QString exec; QString comment; QString icon; QString description; /* position of the directory in the XDG environment variable */ unsigned int xdg_position = G_MAXUINT; /* position of the first system directory in the XDG env var containing * this autostart app too (G_MAXUINT means none) */ unsigned int xdg_system_position = G_MAXUINT; /* mask of what has changed */ unsigned int save_mask = 0; /* path that contains the original file that needs to be saved */ QString old_system_path; public: void setEnabled(bool b) { this->enabled = b; } }; typedef QSharedPointer StartupDataPtr; typedef QList StartupDataPtrList; Q_DECLARE_METATYPE(StartupData) Q_DECLARE_METATYPE(StartupDataPtr) Q_DECLARE_METATYPE(StartupDataPtrList) #endif // STARTUPDATA_H youker-assistant/plugins/startupmanager/startuptitlewidget.h0000664000175000017500000000256013260315532023667 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPTITLEWIDGET_H #define STARTUPTITLEWIDGET_H #include #include class QHBoxLayout; class StartupTitleWidget : public QFrame { Q_OBJECT public: StartupTitleWidget(QWidget *parent); ~StartupTitleWidget(); void initLeftContent(); void initRightContent(); void initWidgets(); public slots: void onMinBtnClicked(); void onCloseBtnClicked(); //protected: // void paintEvent(QPaintEvent *e) override; private: // QColor m_topBorderColor; QHBoxLayout *m_layout; QHBoxLayout *m_lLayout; QHBoxLayout *m_rLayout; }; #endif // STARTUPTITLEWIDGET_H youker-assistant/plugins/startupmanager/util.h0000664000175000017500000000634513260315532020701 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 . */ #pragma once #include #include #include #include #include using std::string; #define KEY_FILE_DESKTOP_GROUP "Desktop Entry" #define KEY_FILE_DESKTOP_KEY_HIDDEN "Hidden" #define KEY_FILE_DESKTOP_KEY_NO_DISPLAY "NoDisplay" #define KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN "OnlyShowIn" #define KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN "NotShowIn" #define KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED "X-GNOME-Autostart-enabled" #define KEY_FILE_DESKTOP_KEY_NAME "Name" #define KEY_FILE_DESKTOP_KEY_EXEC "Exec" #define KEY_FILE_DESKTOP_KEY_TRY_EXEC "TryExec" #define KEY_FILE_DESKTOP_KEY_COMMENT "Comment" #define KEY_FILE_DESKTOP_KEY_ICON "Icon" #define KEY_FILE_DESKTOP_KEY_TYPE "Type" #define KEY_FILE_DESKTOP_TYPE_APPLICATION "Application" #define KEY_FILE_DESKTOP_TYPE_LINK "Link" #define KEY_FILE_DESKTOP_KEY_URL "URL" #define KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY "StartupNotify" #define KEY_FILE_DESKTOP_KEY_CATEGORIES "Categories" #define KEY_FILE_DESKTOP_KEY_MIME_TYPE "MimeType" #define KEY_FILE_DESKTOP_KEY_TERMINAL "Terminal" #define KEY_FILE_DESKTOP_TYPE_DIRECTORY "Directory" #define SAVE_MASK_HIDDEN 0x0001 #define SAVE_MASK_ENABLED 0x0002 #define SAVE_MASK_NAME 0x0004 #define SAVE_MASK_EXEC 0x0008 #define SAVE_MASK_COMMENT 0x0010 #define SAVE_MASK_NO_DISPLAY 0x0020 #define SAVE_MASK_ALL 0xffff #define kylin_start_manager_key_file_get_string(key_file, key) \ g_key_file_get_string(key_file, G_KEY_FILE_DESKTOP_GROUP, key, NULL) #define kylin_start_manager_key_file_get_locale_string(key_file, key) \ g_key_file_get_locale_string(key_file, G_KEY_FILE_DESKTOP_GROUP, key, NULL, NULL) #define kylin_start_manager_key_file_set_boolean(key_file, key, value) \ g_key_file_set_boolean(key_file, G_KEY_FILE_DESKTOP_GROUP, key, value) #define kylin_start_manager_key_file_set_string(key_file, key, value) \ g_key_file_set_string(key_file, G_KEY_FILE_DESKTOP_GROUP, key, value) std::string make_string(char *c_str); gboolean get_boolean_from_desktop_file(GKeyFile *keyfile, const gchar *key, gboolean default_value); gboolean write_contents_into_desktop_file (GKeyFile *keyfile, const gchar *path, GError **error); void write_default_error_info_to_desktop_file(GKeyFile *keyfile); void set_locale_string_into_desktop_file(GKeyFile *keyfile, const gchar *key, const gchar *value); gboolean get_shown_from_desktop_file(GKeyFile *keyfile, const char *current_desktop); char *get_current_desktop_env(); gboolean is_str_equal(const char *a, const char *b); youker-assistant/plugins/startupmanager/startupmanager.cpp0000664000175000017500000000375513260315532023316 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "startupmanager.h" #include #include #include #include //#sudo apt-get install rcconf //root 下运行: #sudo rcconf //功能更全的工具:sysv-rc-conf //#sudo apt-get update //#sudo apt-get install sysv-rc-conf //运行:#sudo sysv-rc-conf //gnome-session-properties(gnome-session-bin/gnome-session) StartupManager::StartupManager(QObject *parent) : QObject(parent) { startup_dialog = new StartupWidget; } StartupManager::~StartupManager() { if (startup_dialog) { delete startup_dialog; startup_dialog = nullptr; } } QString StartupManager::getGuid() { return "UBUNTU-KYLIN-STARTUP"; } QString StartupManager::getName() { return tr("Startup Manager"); } QString StartupManager::getDescribe() { return tr("Help user to manager application startup items"); } QString StartupManager::getPicture() { return "startupmanager.png"; } void StartupManager::doAction() { startup_dialog->show(); startup_dialog->raise(); startup_dialog->setFocus(); } QWidget *StartupManager::centralWidget() { return startup_dialog; } #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) Q_EXPORT_PLUGIN2(StartupManager, StartupManager) #endif youker-assistant/plugins/startupmanager/startuplistwidget.cpp0000664000175000017500000002536713260315532024066 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "startuplistwidget.h" #include "startupitem.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // /usr/share/gnome-session/sessions/ubuntu.session inline QStringList autoStartupDirectorys() { QStringList dirList; const gchar *config_dir = g_get_user_config_dir(); std::string formatted_result(make_string(g_strdup(config_dir)));//std::string formatted_result = make_string(g_strdup(config_dir)); QString userdirPath = QString::fromStdString(formatted_result); if (userdirPath.endsWith(QLatin1String("/"))) userdirPath = QString("%1autostart").arg(userdirPath); else userdirPath = QString("%1/autostart").arg(userdirPath); dirList.append(userdirPath); const char * const *system_config_dirs; const char * const *system_data_dirs; int i; system_data_dirs = g_get_system_data_dirs(); for (i = 0; system_data_dirs[i]; i++) { std::string formatted_result(make_string(g_strdup(system_data_dirs[i]))); QString dirPath = QString::fromStdString(formatted_result); if (dirPath.endsWith(QLatin1String("/"))) dirPath = QString("%1gnome/autostart").arg(dirPath); else dirPath = QString("%1/gnome/autostart").arg(dirPath); if (!dirList.contains(dirPath) && QDir(dirPath).exists()) dirList.append(dirPath); } system_config_dirs = g_get_system_config_dirs(); for (i = 0; system_config_dirs[i]; i++) { std::string formatted_result(make_string(g_strdup(system_config_dirs[i]))); QString dirPath = QString::fromStdString(formatted_result); if (dirPath.endsWith(QLatin1String("/"))) dirPath = dirPath + "autostart"; else dirPath = dirPath + QLatin1Char('/') + "autostart"; if (!dirList.contains(dirPath) && QDir(dirPath).exists()) dirList.append(dirPath); } return dirList; } StartupListWidget::StartupListWidget(QWidget *parent) : QListWidget(parent) { // this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->setFixedWidth(parent->width() - 2); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(this, &StartupListWidget::itemDoubleClicked, [=] (QListWidgetItem *item) { StartupItem *fileItem = static_cast(itemWidget(item)); qDebug() << fileItem->getAppName(); }); //this->m_watcherList = new QList(); m_startupWorker = new StartupWorker; m_startupWorker->moveToThread(qApp->thread()); connect(m_startupWorker, SIGNAL(refreshUI()), this, SLOT(onRefreshUI()), Qt::QueuedConnection); QStringList autoDir = autoStartupDirectorys(); int i = 0; /*QList::Iterator it = autoDir.begin(), itend = autoDir.end(); for(;it != itend; it++,i++) { qDebug() << *it; }*/ foreach (auto dir, autoDir) { MonitorData monitorData; if (m_startupWorker->getDirIndex(dir) >= 0) { i++; continue; } monitorData.dir = dir; monitorData.index = i; monitorData.watcher = m_startupWorker->createFileSystemMonitor(monitorData.dir); i++; listAllDesktopFileInDirectory(monitorData); } this->displayAutoStartupItems(); // qDebug()<<"GenericDataLocation=" << QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); // qDebug()<<"ConfigLocation=" << QStandardPaths::standardLocations(QStandardPaths::ConfigLocation); // qDebug()<<"DocumentsLocation1=" << QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); // qDebug()<<"DocumentsLocation2=" << QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); // qDebug()<<"PicturesLocation=" << QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); // QStringList directory = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); // qDebug()<<"HomeLocation=" <newStartupInfo(desktopFile, monitorData.index); } } /*QDirIterator dir(monitorData.dir, QDirIterator::Subdirectories); while(dir.hasNext()) { if (dir.fileInfo().suffix() == "desktop") { QString desktopFile = dir.filePath();//dir.fileName().toLower() monitorData.fileList.append(desktopFile); m_startupWorker->newStartupInfo(desktopFile, monitorData.index); } dir.next(); }*/ m_startupWorker->appendMonitorXdgDirData(monitorData); } void StartupListWidget::setAppAutoStartup(const QString &exec, bool enabled) { StartupData info = m_startupWorker->getStartupInfo(exec); if (info.enabled == enabled) return; info.enabled = enabled; info.save_mask |= SAVE_MASK_ENABLED; m_startupWorker->updateEnable(info.exec, info.enabled); m_startupWorker->updateSaveMask(info.exec, info.save_mask); m_startupWorker->readySaveDesktopInfo(info); } void StartupListWidget::loadItem(StartupData info) { StartupItem *item = new StartupItem(info); connect(item, SIGNAL(changeStartup(QString,bool)), this, SLOT(onChangeStartup(QString,bool))); connect(item, SIGNAL(enter()), this, SLOT(onMouseEnter())); this->addItem(item->getItem()); item->getItem()->setSizeHint(QSize(this->width() - 10, 60)); setItemWidget(item->getItem(), item); } void StartupListWidget::loadItems(QStringList items, int scrollValue) { // clear(); // foreach (auto item, items) { // loadItem(item); // } // this->verticalScrollBar()->setValue(scrollValue); } void StartupListWidget::onChangeStartup(const QString &exec, bool active) { this->setAppAutoStartup(exec, active); } void StartupListWidget::onMouseEnter() { for(int i = 0; i < this->count(); i++) { QListWidgetItem *listItem = item(i); StartupItem *item = static_cast(itemWidget(listItem)); if (item->getAppName() == ((StartupItem*) sender())->getAppName()) { item->setItemHovered(); } else { item->unsetItemHovered(); } } } youker-assistant/plugins/startupmanager/startupwidget.cpp0000664000175000017500000001231613260315532023160 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "startupwidget.h" #include "startuptitlewidget.h" #include "startuplistwidget.h" #include "startupdata.h" #include #include #include #include #include #include #include #include #include #include #include QDataStream &operator<<(QDataStream &dataStream, const StartupDataPtr &object) { auto ptr = object.data(); auto ptrval = reinterpret_cast(ptr); auto var = QVariant::fromValue(ptrval); dataStream << var; return dataStream; } QDataStream &operator>>(QDataStream &dataStream, StartupDataPtr &object) { QVariant var; dataStream >> var; qulonglong ptrval = var.toULongLong(); auto ptr = reinterpret_cast(ptrval); object = StartupDataPtr(ptr); return dataStream; } StartupWidget::StartupWidget(QWidget *parent) : QFrame(parent) , mousePressed(false) { qRegisterMetaType(); qRegisterMetaTypeStreamOperators(); qRegisterMetaType(); qRegisterMetaType>(); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid this->setAutoFillBackground(true); this->setMouseTracking(true); this->setWindowFlags(/*this->windowFlags() | */Qt::FramelessWindowHint | Qt::WindowCloseButtonHint);//去掉边框 // this->setAttribute(Qt::WA_TranslucentBackground);//背景透明 // this->setAutoFillBackground(true); // this->setMouseTracking(true); this->setWindowTitle(tr("Kylin Startup Manager")); this->setWindowIcon(QIcon(":/model/res/plugin/startupmanager.png")); this->setFixedSize(500, 645); m_titleWidget = new StartupTitleWidget(this); m_titleWidget->setFixedSize(this->width() - 2, 39); m_layout = new QVBoxLayout(); m_layout->setSpacing(0); m_layout->setMargin(0); m_layout->setContentsMargins(1,1,1,1); m_startupView = new StartupListWidget(this); m_layout->addWidget(m_titleWidget, 0, Qt::AlignTop); m_layout->addWidget(m_startupView, 0, Qt::AlignHCenter); this->setLayout(m_layout); this->moveCenter(); //#ifdef QT_NO_INOTIFY // qDebug() << "QT_NO_INOTIFY mode"; //#else // qDebug() << "NO QT_NO_INOTIFY"; //#endif } StartupWidget::~StartupWidget() { if (m_titleWidget) { delete m_titleWidget; m_titleWidget = nullptr; } if (m_startupView) { delete m_startupView; m_startupView = nullptr; } delete m_layout; } void StartupWidget::moveCenter() { QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); } void StartupWidget::closeEvent(QCloseEvent *event) { event->accept(); } void StartupWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->dragPosition = event->globalPos() - frameGeometry().topLeft(); this->mousePressed = true; } QFrame::mousePressEvent(event); } void StartupWidget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->mousePressed = false; } QFrame::mouseReleaseEvent(event); } void StartupWidget::mouseMoveEvent(QMouseEvent *event) { if (this->mousePressed) { move(event->globalPos() - this->dragPosition); } QFrame::mouseMoveEvent(event); } void StartupWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); //绘制圆角矩形 painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 #3f96e4 painter.setBrush(QColor("#e9eef0"));//背景色 painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(1); QRectF r(0 / 2.0, 0 / 2.0, width() - 0, height() - 0);//左边 上边 右边 下边 painter.drawRoundedRect(r, 4, 4); //绘制背景色 // QPainterPath path; // path.addRect(QRectF(rect())); // painter.setOpacity(1); // painter.fillPath(path, QColor("#ffffff")); QFrame::paintEvent(event); } youker-assistant/plugins/startupmanager/util.cpp0000664000175000017500000001312213260315532021223 0ustar fengfeng/* * * Copyright (C) 2008, 2009 Novell, Inc. * Copyright (C) 1999 Free Software Foundation, Inc. * Copyright (C) 2007, 2009 Vincent Untz. * Copyright (C) 2008 Lucas Rocha. * Copyright (C) 2008 William Jon McCann * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * Authors: * Vincent Untz * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com */ #include "util.h" #include #include #include std::string make_string(char *c_str) { if (!c_str) { return string(); } string s(c_str); g_free(c_str); return s; } gboolean get_boolean_from_desktop_file(GKeyFile *keyfile, const gchar *key, gboolean default_value) { GError *error; gboolean retval; error = NULL; retval = g_key_file_get_boolean(keyfile, G_KEY_FILE_DESKTOP_GROUP, key, &error); if (error != NULL) { retval = default_value; g_error_free(error); } return retval; } gboolean write_contents_into_desktop_file(GKeyFile *keyfile, const gchar *path, GError **error) { GError *write_error; gchar *data; gsize length; gboolean res; g_return_val_if_fail(keyfile != NULL, FALSE); g_return_val_if_fail(path != NULL, FALSE); write_error = NULL; data = g_key_file_to_data(keyfile, &length, &write_error); if (write_error) { g_propagate_error(error, write_error); return FALSE; } res = g_file_set_contents(path, data, length, &write_error); g_free(data); if (write_error) { g_propagate_error (error, write_error); return FALSE; } return res; } void write_default_error_info_to_desktop_file(GKeyFile *keyfile) { kylin_start_manager_key_file_set_string(keyfile, G_KEY_FILE_DESKTOP_KEY_TYPE, "Application"); kylin_start_manager_key_file_set_string(keyfile, G_KEY_FILE_DESKTOP_KEY_EXEC, "/bin/false"); } void set_locale_string_into_desktop_file(GKeyFile *keyfile, const gchar *key, const gchar *value) { const char *locale; const char * const *langs_pointer; int i; if (value == NULL) { value = ""; } locale = NULL; langs_pointer = g_get_language_names (); for (i = 0; langs_pointer[i] != NULL; i++) { /* find first without encoding */ if (strchr (langs_pointer[i], '.') == NULL) { locale = langs_pointer[i]; break; } } if (locale != NULL) { g_key_file_set_locale_string(keyfile, G_KEY_FILE_DESKTOP_GROUP, key, locale, value); } else { g_key_file_set_string(keyfile, G_KEY_FILE_DESKTOP_GROUP, key, value); } } gboolean get_shown_from_desktop_file(GKeyFile *keyfile, const char *current_desktop) { char **only_show_in, **not_show_in; gboolean found; int i; if (!current_desktop) return TRUE; only_show_in = g_key_file_get_string_list(keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN, NULL, NULL); if (only_show_in) { found = FALSE; for (i = 0; only_show_in[i] != NULL; i++) { if (g_strcmp0 (current_desktop, only_show_in[i]) == 0) { found = TRUE; break; } } g_strfreev (only_show_in); if (!found) return FALSE; } not_show_in = g_key_file_get_string_list(keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN, NULL, NULL); if (not_show_in) { found = FALSE; for (i = 0; not_show_in[i] != NULL; i++) { if (g_strcmp0 (current_desktop, not_show_in[i]) == 0) { found = TRUE; break; } } g_strfreev (not_show_in); if (found) return FALSE; } return TRUE; } char *get_current_desktop_env() { static char *current_desktop = NULL; /* Support XDG_CURRENT_DESKTOP environment variable; this can be used * to abuse gnome-session in non-GNOME desktops. */ if (!current_desktop) { const char *desktop; desktop = g_getenv("XDG_CURRENT_DESKTOP"); /* Note: if XDG_CURRENT_DESKTOP is set but empty, do as if it * was not set */ if (!desktop || desktop[0] == '\0') current_desktop = g_strdup ("GNOME"); else current_desktop = g_strdup (desktop); } /* Using "*" means skipping desktop-related checks */ if (g_strcmp0(current_desktop, "*") == 0) return NULL; return current_desktop; } gboolean is_str_equal(const char *a, const char *b) { if (g_strcmp0 (a, b) == 0) { return TRUE; } if (a && !b && a[0] == '\0') { return TRUE; } if (b && !a && b[0] == '\0') { return TRUE; } return FALSE; } youker-assistant/plugins/startupmanager/startupmanager.json0000664000175000017500000000000313260315532023464 0ustar fengfeng{} youker-assistant/plugins/startupmanager/startupworker.cpp0000664000175000017500000007565213260315532023222 0ustar fengfeng/* * * Copyright (C) 2008, 2009 Novell, Inc. * Copyright (C) 1999 Free Software Foundation, Inc. * Copyright (C) 2007, 2009 Vincent Untz. * Copyright (C) 2008 Lucas Rocha. * Copyright (C) 2008 William Jon McCann * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * Authors: * Vincent Untz * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com */ #include "startupworker.h" #include #include #include #include #include //#include #include #include #include #include "util.h" void ensureCKeyInDesktopFil (GKeyFile *keyfile, const char *key) { char *C_value; char *buffer; /* Make sure we set the "C" locale strings to the terms we set here. * This is so that if the user logs into another locale they get their * own description there rather then empty. It is not the C locale * however, but the user created this entry herself so it's OK */ C_value = kylin_start_manager_key_file_get_string(keyfile, key); if (C_value == NULL || C_value [0] == '\0') { buffer = kylin_start_manager_key_file_get_locale_string(keyfile, key); if (buffer) { kylin_start_manager_key_file_set_string(keyfile, key, buffer); g_free(buffer); } } g_free(C_value); } inline QString getCurrentDesktopEnvironment() { QString current_desktop; current_desktop = qgetenv("XDG_CURRENT_DESKTOP");//g_getenv if(current_desktop.isEmpty()) { current_desktop = qgetenv("XDG_SESSION_DESKTOP"); if(current_desktop.isEmpty()) current_desktop = "GNOME"; } return current_desktop; } bool getShownFromDesktopFile(const QString &desktopFile, const QString &desktopEnvironment) { if (desktopEnvironment.isNull() || desktopEnvironment.isEmpty()) return true; bool found; QSettings setting(desktopFile, QSettings::IniFormat); setting.setIniCodec("UTF-8"); setting.beginGroup(KEY_FILE_DESKTOP_GROUP); QStringList onlyShowIn = setting.value(KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN).toStringList(); QStringList notShowIn = setting.value(KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN).toStringList(); setting.endGroup(); if (!onlyShowIn.isEmpty()) { found = false; foreach (auto dekstopEnv, onlyShowIn) { if (dekstopEnv == desktopEnvironment) { found = true; break; } } if (!found) return false; } if (!notShowIn.isEmpty()) { found = false; foreach (auto dekstopEnv, notShowIn) { if (dekstopEnv == desktopEnvironment) { found = true; break; } } if (found) return false; } return true; } StartupWorker::StartupWorker(QObject *parent) : QObject(parent) { } StartupWorker::~StartupWorker() { m_startupInfoList.clear(); // foreach (MonitorData item, this->m_monitorList) { // QFileSystemWatcher *watcher = item.watcher; // watcher->removePath(item.dir); // delete watcher; // watcher = NULL; // } // this->m_monitorList.clear(); foreach (MonitorData item, this->m_xdgMap.values()) { QFileSystemWatcher *watcher = item.watcher; watcher->removePath(item.dir); delete watcher; watcher = NULL; } this->m_xdgMap.clear(); } QFileSystemWatcher *StartupWorker::createFileSystemMonitor(const QString &path) { /*int fd = inotify_init(); int wd = inotify_add_watch (fd, path, mask); // int ret = inotify_rm_watch (fd, wd);*/ // qDebug() << "watcher path="<addPath(path); // QFileInfo info(m_monitorFile); // m_fileSystemMonitor->addPath(info.absoluteFilePath()); connect(m_fileSystemMonitor, &QFileSystemWatcher::directoryChanged, [=] (const QString &path) { //qDebug()<< "directoryChanged path===================="<updateGspXdgDir(path, fileList); }); // m_watcherList.append(m_fileSystemMonitor); // if (m_watcherMap.contains(path)) // m_watcherMap.insert(path, m_fileSystemMonitor); return m_fileSystemMonitor; // connect(m_fileSystemMonitor, &QFileSystemWatcher::fileChanged, [=] (const QString &path) { // qDebug()<< "fileChanged path===================="<m_monitorList.append(monitorData); m_xdgMap.insert(monitorData.dir, monitorData); } int StartupWorker::getDirIndex(QString dir) { // foreach (MonitorData item, this->m_monitorList) { // if (item.dir == dir) { // return item.index; // } // } foreach (MonitorData item, this->m_xdgMap.values()) { if (item.dir == dir) { return item.index; } } return -1; } QString StartupWorker::getMonitorDirectoryAccordXdgSystemPosition(unsigned int index) { // foreach (MonitorData item, this->m_monitorList) { // if (item.index == index) { // return item.dir; // } // } foreach (MonitorData item, this->m_xdgMap.values()) { if (item.index == index) { return item.dir; } } return QString(); } StartupData StartupWorker::getAppStartupDataAccrodDesktopFileName(QString &basename) { for (StartupData info : this->getStartupInfoList()) { if (info.basename == basename) { return info; } } return StartupData(); } /* * dir:被监控的目录 fileList:被监控目录下的文件列表 */ void StartupWorker::updateGspXdgDir(const QString &dir, QStringList fileList) { if (this->m_xdgMap.keys().contains(dir)) { QSet nowAutoStartSet = QSet::fromList(fileList); //canel auto start, add the desktop file to user config dir for(const QString &startupItem: nowAutoStartSet - QSet::fromList(this->m_xdgMap.value(dir).fileList)) { //qDebug() << "Add startupItem===="<newStartupInfo(startupItem, this->m_xdgMap.value(dir).index); } //start auto start, remove the desktop file which in user config dir for(const QString &startupItem: QSet::fromList(this->m_xdgMap.value(dir).fileList) - nowAutoStartSet) { //qDebug() << "Removed startupItem===="<updateEnable(info.exec, info.enabled); this->updateSaveMask(info.exec, info.save_mask); this->readySaveDesktopInfo(info); } /* //start auto start, remove the desktop file which in user config dir foreach (QString orgFileAbsPath, this->m_xdgMap.value(dir).fileList) { if (!fileList.contains(orgFileAbsPath)) { qDebug() << "had removed orgFileAbsPath="<updateEnable(info.exec, info.enabled); this->updateSaveMask(info.exec, info.save_mask); this->readySaveDesktopInfo(info); } } //canel auto start, add the desktop file to user config dir foreach (QString nowFileAbsPath, fileList) { if (!this->m_xdgMap[dir].fileList.contains(nowFileAbsPath)) { //new added qDebug() << "add new nowFileAbsPath="<newStartupInfo(nowFileAbsPath, this->m_xdgMap.value(dir).index); } } */ this->m_xdgMap[dir].fileList.clear(); this->m_xdgMap[dir].fileList = fileList; emit this->refreshUI(); } else qDebug() << "WTF........"; } QString StartupWorker::getStringValueAccordKeyFromDesktopFile(const gchar *key, const QString &desktopFile, bool isLocale) { GKeyFile *keyfile; keyfile = g_key_file_new (); if (!g_key_file_load_from_file (keyfile, desktopFile.toStdString().c_str(), G_KEY_FILE_NONE, NULL)) { g_key_file_free (keyfile); return QString(); } if (isLocale) { std::string formatted_result(make_string(kylin_start_manager_key_file_get_locale_string (keyfile, key))); QString result = QString::fromStdString(formatted_result); g_key_file_free (keyfile); return result; } else { std::string formatted_result = make_string(kylin_start_manager_key_file_get_string (keyfile, key)); QString result = QString::fromStdString(formatted_result); g_key_file_free (keyfile); return result; } } void StartupWorker::newStartupInfo(const QString &desktopFile, unsigned int xdg_position) { bool isNew; QString basename = QFileInfo(desktopFile).fileName(); StartupData info = getAppStartupDataAccrodDesktopFileName(basename); if (info.basename.isEmpty() && info.name.isEmpty() && info.exec.isEmpty()) isNew = true; else isNew = false; if (!isNew) { //qDebug() << "is not new!!!!"; if (info.xdg_position < xdg_position) { /* we don't really care about this file, since we * already have something with a higher priority, or * we're going to write something in the user config * anyway. * Note: xdg_position >= 1 so it's a system dir */ info.xdg_system_position = MIN (xdg_position, info.xdg_system_position); return; } } GKeyFile *keyfile; keyfile = g_key_file_new (); if (!g_key_file_load_from_file (keyfile, desktopFile.toStdString().c_str(), G_KEY_FILE_NONE, NULL)) { g_key_file_free(keyfile); return; } bool hidden = get_boolean_from_desktop_file (keyfile, G_KEY_FILE_DESKTOP_KEY_HIDDEN, FALSE); bool no_display = get_boolean_from_desktop_file (keyfile,G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,FALSE); bool enabled = get_boolean_from_desktop_file (keyfile, KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED,TRUE); bool shown = get_shown_from_desktop_file (keyfile,get_current_desktop_env ()); std::string formatted_result(make_string(kylin_start_manager_key_file_get_locale_string (keyfile, G_KEY_FILE_DESKTOP_KEY_NAME))); QString name = QString::fromStdString(formatted_result); formatted_result = make_string(kylin_start_manager_key_file_get_string (keyfile, G_KEY_FILE_DESKTOP_KEY_EXEC)); QString exec = QString::fromStdString(formatted_result); formatted_result = make_string(kylin_start_manager_key_file_get_locale_string (keyfile, G_KEY_FILE_DESKTOP_KEY_COMMENT)); QString comment = QString::fromStdString(formatted_result); formatted_result = make_string(kylin_start_manager_key_file_get_locale_string (keyfile, G_KEY_FILE_DESKTOP_KEY_ICON)); QString icon = QString::fromStdString(formatted_result); if (name.isEmpty() || name.isNull()) name = exec; if (comment.isEmpty() || comment.isNull()) comment = tr("No description"); /*QSettings setting(desktopFile, QSettings::IniFormat); setting.setIniCodec("UTF-8"); setting.beginGroup(KEY_FILE_DESKTOP_GROUP); bool hidden = setting.value(KEY_FILE_DESKTOP_KEY_HIDDEN, false).toBool(); bool no_display = setting.value(KEY_FILE_DESKTOP_KEY_NO_DISPLAY, false).toBool(); bool enabled = setting.value(KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED, true).toBool(); bool shown = getShownFromDesktopFile(desktopFile, getCurrentDesktopEnvironment()); QString name = setting.value(KEY_FILE_DESKTOP_KEY_NAME).toString(); QString exec = setting.value(KEY_FILE_DESKTOP_KEY_EXEC).toString(); QString comment = setting.value(KEY_FILE_DESKTOP_KEY_COMMENT).toString(); QString icon = setting.value(KEY_FILE_DESKTOP_KEY_ICON).toString(); if (name.isEmpty() || name.isNull()) name = exec; setting.endGroup();*/ //get description QString primary; QString secondary; if (!name.isEmpty()) { primary = name; } else if (!exec.isEmpty()) { primary = exec; } else { primary = tr("No name"); } if (!comment.isEmpty()) { secondary = comment; } else { secondary = tr("No description"); } QString description = QString("%1\n%2").arg(primary).arg(secondary); info.basename = basename; info.path = desktopFile; info.hidden = hidden; info.no_display = no_display; info.enabled = enabled; info.shown = shown; info.name = name; info.exec = exec; info.comment = comment; info.icon = icon; info.description = description; if (xdg_position > 0) { info.xdg_system_position = xdg_position; } /* else we keep the old value (which is G_MAXUINT if it wasn't set) */ info.xdg_position = xdg_position; // printf("info.xdg_position===%d\n", info.xdg_position); info.old_system_path.clear(); //printf("hidden=%s\n", hidden ? "Yes" : "No"); m_startupInfoList[exec] = info;//append item /* //show or hide if (!hidden && shown && !no_display) { //show // if (isExecContains(exec)) { // } m_startupInfoList[exec] = info; } else { //hide if (isExecContains(exec)) m_startupInfoList.remove(exec); } */ } bool StartupWorker::isExecContains(const QString &exec) { return m_startupInfoList.keys().contains(exec); } QList StartupWorker::getStartupInfoList() const { return m_startupInfoList.values(); } StartupData StartupWorker::getStartupInfo(const QString &exec) { return m_startupInfoList.value(exec, StartupData());//nullptr } StartupData StartupWorker::getStartupInfoAccordDestkopFile(const QString &desktopFile) { foreach (StartupData data, m_startupInfoList.values()) { if (data.path == desktopFile) return data; } return StartupData(); } void StartupWorker::updateEnable(const QString &exec, bool enabled) { if (m_startupInfoList.contains(exec)) { m_startupInfoList[exec].enabled = enabled;//m_startupInfoList[exec].setEnabled(enabled); } } void StartupWorker::updateSaveMask(const QString &exec, unsigned int save_mask) { if (m_startupInfoList.contains(exec)) { m_startupInfoList[exec].save_mask = save_mask; } } void StartupWorker::updateXdgPosition(const QString &exec, unsigned int xdg_position) { if (m_startupInfoList.contains(exec)) { m_startupInfoList[exec].xdg_position = xdg_position; } } void StartupWorker::updateXdgSystemPosition(const QString &exec, unsigned int xdg_system_position) { if (m_startupInfoList.contains(exec)) { m_startupInfoList[exec].xdg_system_position = xdg_system_position; } } void StartupWorker::updateOldSystemPath(const QString &exec, QString old_system_path) { if (m_startupInfoList.contains(exec)) { m_startupInfoList[exec].old_system_path = old_system_path; } } void StartupWorker::updatePath(const QString &exec, QString path) { if (m_startupInfoList.contains(exec)) { m_startupInfoList[exec].path = path; } } void StartupWorker::ensureUserAutostartupDirExists(void) { char *dir; dir = g_build_filename(g_get_user_config_dir(), "autostart", NULL); g_mkdir_with_parents(dir, S_IRWXU);//S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行的权限 g_free(dir); // QDir dir; // if(!dir.exists("aa")){ // dir.mkdir("aa"); // } /*const gchar *config_dir = g_get_user_config_dir(); std::string formatted_result(make_string(g_strdup(config_dir)));//std::string formatted_result = make_string(g_strdup(config_dir)); QString dir = QString::fromStdString(formatted_result); if (dir.endsWith(QLatin1String("/"))) g_mkdir_with_parents (dir + "autostart", S_IRWXU);//if (g_mkdir_with_parents (dir, 0755) == 0) else g_mkdir_with_parents (dir + "/autostart", S_IRWXU);*/ } void StartupWorker::changeSaveFlagsWhenDoneSuccess(StartupData info) { info.save_mask = 0; this->updateSaveMask(info.exec, info.save_mask); if (!info.old_system_path.isEmpty()) { info.old_system_path.clear(); this->updateOldSystemPath(info.exec, info.old_system_path); } } /* *判断desktop文件是否同时存在于用户的启动配置目录下和系统的启动配置目录下, *如果同时存在,说明已经禁止了自启动,否则该应用程序是开机自启动的 */ bool StartupWorker::isDesktopFileInUserAndSystemConfiguDir(StartupData info, char **system_path) { QString system_dir; char *path; char *str; GKeyFile *keyfile; system_dir = getMonitorDirectoryAccordXdgSystemPosition(info.xdg_system_position); if (system_dir.isEmpty()) { return false; } path = g_build_filename(system_dir.toStdString().c_str(), info.basename.toStdString().c_str(), NULL); keyfile = g_key_file_new(); if (!g_key_file_load_from_file(keyfile, path, G_KEY_FILE_NONE, NULL)) { g_free(path); g_key_file_free(keyfile); return false; } if (get_boolean_from_desktop_file(keyfile, G_KEY_FILE_DESKTOP_KEY_HIDDEN, FALSE) != info.hidden || get_boolean_from_desktop_file(keyfile, KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED, TRUE) != info.enabled || get_shown_from_desktop_file (keyfile, get_current_desktop_env()) != info.shown) { g_free(path); g_key_file_free(keyfile); return false; } if (get_boolean_from_desktop_file(keyfile, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, FALSE) != info.no_display) { g_free(path); g_key_file_free(keyfile); return false; } str = kylin_start_manager_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_KEY_NAME); if (!is_str_equal (str, info.name.toStdString().c_str())) { g_free(str); g_free(path); g_key_file_free(keyfile); return false; } g_free(str); str = kylin_start_manager_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_KEY_COMMENT); if (!is_str_equal(str, info.comment.toStdString().c_str())) { g_free(str); g_free(path); g_key_file_free(keyfile); return false; } g_free(str); str = kylin_start_manager_key_file_get_string(keyfile, G_KEY_FILE_DESKTOP_KEY_EXEC); if (!is_str_equal(str, info.exec.toStdString().c_str())) { g_free(str); g_free(path); g_key_file_free(keyfile); return false; } g_free(str); str = kylin_start_manager_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_KEY_ICON); if (!is_str_equal(str, info.icon.toStdString().c_str())) {//info.icon.toStdString().data() g_free(str); g_free(path); g_key_file_free(keyfile); return false; } g_free(str); g_key_file_free(keyfile); *system_path = path; return true; } /*bool StartupWorker::isDesktopFileInUserAndSystemConfiguDir (StartupData info, QString &system_path, QString locale) { QString system_dir; QString path; QString str; system_dir = getMonitorDirectoryAccordXdgSystemPosition(info.xdg_system_position); if (system_dir.isEmpty()) { return false; } path = QString("%1/%2").arg(system_dir).arg(info.basename); QSettings setting(path, QSettings::IniFormat); setting.setIniCodec("UTF-8"); setting.beginGroup(KEY_FILE_DESKTOP_GROUP); if (setting.value(KEY_FILE_DESKTOP_KEY_HIDDEN, false).toBool() != info.hidden || setting.value(KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED, true).toBool() != info.enabled || getShownFromDesktopFile(path, getCurrentDesktopEnvironment()) != info.shown) { setting.endGroup(); return false; } if (setting.value(KEY_FILE_DESKTOP_KEY_NO_DISPLAY, false).toBool() != info.no_display) { setting.endGroup(); return false; } str = setting.value(QString("%1\[%2\]").arg(KEY_FILE_DESKTOP_KEY_NAME).arg(locale)).toString(); if (QString::compare(str, info.name) != 0) { setting.endGroup(); return false; } str = setting.value(QString("%1\[%2\]").arg(KEY_FILE_DESKTOP_KEY_COMMENT).arg(locale)).toString(); if (QString::compare(str, info.comment) != 0) { setting.endGroup(); return false; } str = setting.value(KEY_FILE_DESKTOP_KEY_EXEC).toString(); if (QString::compare(str, info.exec) != 0) { setting.endGroup(); return false; } str = setting.value(QString("%1\[%2\]").arg(KEY_FILE_DESKTOP_KEY_ICON).arg(locale)).toString(); if (QString::compare(str, info.icon) != 0) { setting.endGroup(); return false; } system_path = path; setting.endGroup(); return true; }*/ //void StartupWorker::ensureCKeyInDesktopFil(QString filename, QString key, QString locale) //{ // QSettings setting(filename, QSettings::IniFormat); // setting.setIniCodec("UTF-8"); // setting.beginGroup(KEY_FILE_DESKTOP_GROUP); // QString C_value; // /* Make sure we set the "C" locale strings to the terms we set here. // * This is so that if the user logs into another locale they get their // * own description there rather then empty. It is not the C locale // * however, but the user created this entry herself so it's OK */ // C_value = setting.value(key).toString(); // if (C_value.isEmpty() || C_value.isNull()) { // QString buffer = setting.value(QString("%1\[%2\]").arg(key).arg(locale)).toString();//g_key_file_get_locale_string // if (!buffer.isEmpty()) { // setting.setValue(key, buffer); // } // } // setting.endGroup(); // setting.sync(); //} bool StartupWorker::saveAppDesktopInfo(StartupData info) { char *desktop_path; GKeyFile *keyfile; GError *error; /* first check if removing the data from the user dir and using the * data from the system dir is enough -- this helps us keep clean the * user config dir by removing unneeded files */ if (isDesktopFileInUserAndSystemConfiguDir(info, &desktop_path)) {//由关闭到开启的转换过程 QFile file(info.path); if (file.exists()) { file.remove(); } std::string formatted_result(make_string(g_strdup(desktop_path))); info.path = QString::fromStdString(formatted_result); this->updatePath(info.exec, info.path); info.xdg_position = info.xdg_system_position; this->updateXdgPosition(info.exec, info.xdg_position); changeSaveFlagsWhenDoneSuccess(info); return false; } //由开启到关闭的转换过程 if (!info.old_system_path.isEmpty()) { desktop_path = g_strdup(info.old_system_path.toStdString().c_str()); } else { desktop_path = g_strdup(info.path.toStdString().c_str()); } keyfile = g_key_file_new(); error = NULL; GKeyFileFlags flags; flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; g_key_file_load_from_file(keyfile, desktop_path, flags, &error); g_free(desktop_path); if (error) { qDebug() << "=======save app desktop error======="; g_error_free(error); write_default_error_info_to_desktop_file(keyfile); } //以下操作对文件desktop_path的内容只做缓存修改处理,修改后的数据不写入文件desktop_path,而是将改动后的desktop_path的所有文件内容写入info.path文件中 if (info.save_mask & SAVE_MASK_HIDDEN) { kylin_start_manager_key_file_set_boolean(keyfile, G_KEY_FILE_DESKTOP_KEY_HIDDEN, info.hidden); } if (info.save_mask & SAVE_MASK_NO_DISPLAY) { kylin_start_manager_key_file_set_boolean(keyfile, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, info.no_display); } if (info.save_mask & SAVE_MASK_ENABLED) { kylin_start_manager_key_file_set_boolean(keyfile, KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED, info.enabled); } if (info.save_mask & SAVE_MASK_NAME) { set_locale_string_into_desktop_file(keyfile, G_KEY_FILE_DESKTOP_KEY_NAME, info.name.toStdString().c_str()); ensureCKeyInDesktopFil(keyfile, G_KEY_FILE_DESKTOP_KEY_NAME); } if (info.save_mask & SAVE_MASK_COMMENT) { set_locale_string_into_desktop_file(keyfile, G_KEY_FILE_DESKTOP_KEY_COMMENT, info.comment.toStdString().c_str()); ensureCKeyInDesktopFil(keyfile, G_KEY_FILE_DESKTOP_KEY_COMMENT); } if (info.save_mask & SAVE_MASK_EXEC) { kylin_start_manager_key_file_set_string(keyfile, G_KEY_FILE_DESKTOP_KEY_EXEC, info.exec.toStdString().c_str()); } ensureUserAutostartupDirExists(); if (write_contents_into_desktop_file(keyfile, info.path.toStdString().c_str(), NULL)) {//将改动后的use_path的所有文件内容写入info.path文件中 changeSaveFlagsWhenDoneSuccess(info); } else { qDebug() << QString("Could not save %1 file").arg(info.path); } g_key_file_free(keyfile); return false; /* QString use_path; QString locale = QLocale::system().name(); // qDebug() << "locale="<updateXdgPosition(info.exec, info.xdg_position); if (info.old_system_path.isEmpty()) { info.old_system_path = info.path;//将desktop文件当前路径记录到old_system_path中 this->updateOldSystemPath(info.exec, info.old_system_path); /* if old_system_path was not NULL, then it means we * tried to save and we failed; in that case, we want * to try again and use the old file as a basis again */ } //生成一个用户配置目录的desktop文件路径 const gchar *config_dir = g_get_user_config_dir(); std::string formatted_result(make_string(g_strdup(config_dir))); QString tmpPath = QString::fromStdString(formatted_result); if (tmpPath.endsWith(QLatin1String("/"))) info.path = QString("%1/autostart/%2").arg(tmpPath).arg(info.basename); else info.path = QString("%1/autostart/%2").arg(tmpPath).arg(info.basename); this->updatePath(info.exec, info.path); } saveAppDesktopInfo(info); } youker-assistant/plugins/startupmanager/startupworker.h0000664000175000017500000000565613260315532022664 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 STARTUPWORKER_H #define STARTUPWORKER_H #include "startupdata.h" #include #include #include class StartupWorker : public QObject { Q_OBJECT public: explicit StartupWorker(QObject *parent = 0); ~StartupWorker(); void newStartupInfo(const QString &desktopFile, unsigned int xdg_position); bool isExecContains(const QString &exec); QList getStartupInfoList() const; StartupData getStartupInfo(const QString &exec); StartupData getStartupInfoAccordDestkopFile(const QString &desktopFile); QFileSystemWatcher *createFileSystemMonitor(const QString &path); void updateGspXdgDir(const QString &dir, QStringList fileList); QString getStringValueAccordKeyFromDesktopFile(const gchar *key, const QString &desktopFile, bool isLocale = false); void updateEnable(const QString &exec, bool enabled); void updateSaveMask(const QString &exec, unsigned int save_mask); void updateXdgPosition(const QString &exec, unsigned int xdg_position); void updateXdgSystemPosition(const QString &exec, unsigned int xdg_system_position); void updateOldSystemPath(const QString &exec, QString old_system_path); void updatePath(const QString &exec, QString path); void appendMonitorXdgDirData(MonitorData monitorData); int getDirIndex(QString dir); QString getMonitorDirectoryAccordXdgSystemPosition(unsigned int index); QList getAllDirs() { /*return m_monitorList;*/ return this->m_xdgMap.values(); } void ensureUserAutostartupDirExists(void); void changeSaveFlagsWhenDoneSuccess (StartupData info); // bool isDesktopFileInUserAndSystemConfiguDir (StartupData info, QString &system_path, QString locale);//Qt bool isDesktopFileInUserAndSystemConfiguDir (StartupData info, char **system_path);//glibc bool saveAppDesktopInfo(StartupData info); void readySaveDesktopInfo(StartupData info); StartupData getAppStartupDataAccrodDesktopFileName(QString &basename); signals: void refreshUI(); private: QMap m_startupInfoList; QMap m_xdgMap;//QList m_monitorList; }; #endif // STARTUPWORKER_H youker-assistant/plugins/plugins.pro0000664000175000017500000000013113260315532016704 0ustar fengfengTEMPLATE = subdirs SUBDIRS = \ shredmanager \ systemmonitor \ startupmanager youker-assistant/plugins/shredmanager/0000775000175000017500000000000013265005454017152 5ustar fengfengyouker-assistant/plugins/shredmanager/shreddialog.h0000664000175000017500000000420713260315532021607 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "../../component/kylineditbutton.h" #include "../../component/mytitlebar.h" #include "../../component/toolkits.h" #include "../../component/utils.h" class QLabel; class QPushButton; class QLineEdit; class QComboBox; //class ShredManager; class ShredDialog : public QWidget //class ShredDialog : public QDialog { Q_OBJECT public: // ShredDialog(ShredManager *plugin, QDialog *parent = 0); explicit ShredDialog(QWidget *parent = 0); ~ShredDialog(); void setLanguage(); void initConnect(); // void initTitleBar(); // QString getCurrrentSkinName(); // void resetSkin(); void moveCenter(); protected: void closeEvent(QCloseEvent *event); void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; public slots: void onSelectButtonClicked(); void onShredButtonClicked(); void onCacelButtonClicked(); // void onSelecteComboActivated(int index); void onCloseButtonClicked(); // void onMinButtonClicked(); private: // ShredManager *process_plugin; MyTitleBar *title_bar; KylinEditButton *select_btn; QLineEdit *select_edit; QPushButton *shred_btn; QPushButton *cacel_btn; Toolkits *toolkits; QPoint dragPosition; bool mousePressed; // QSettings *shredSettings; }; youker-assistant/plugins/shredmanager/filewipe.cpp0000664000175000017500000002356713260315532021473 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 #include #include #include #include #include #include #include "filewipe.h" #ifdef STAT_MACROS_BROKEN /* just in case, so we don't unlink a directory, we don't currently handle broken stat macros */ # define unlink(x) remove(x) #endif #ifndef HAVE_UNLINK # define unlink(x) remove(x) #endif /* these should be safe for darwin */ #ifndef PATH_MAX # define PATH_MAX 1023 #endif #ifndef NAME_MAX # define NAME_MAX 255 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_DSYNC # define O_DSYNC O_SYNC #endif #if defined HAVE_FSYNC || defined HAVE_FDATASYNC # define SYNC 0 #else # ifdef O_DSYNC # define SYNC O_DSYNC # else # define SYNC O_SYNC # endif #endif #include /* exit codes */ #define SUCCESS 0 #define FAILED -1 #define NOT_SUPPORT_TYPE -2 #define PATH_NAME_TOO_LONG -3 #define STAT_FAILED -4 #define WIPE_WRITE_FAILED -5 static int verbose = 0; #ifndef __DEBUG #define fprintf(e, fmt...) #endif struct file_info { char path_name[PATH_MAX+1]; int fd; struct stat st; char *buf; size_t buf_size; }; int do_close(const char name[], const int fd) { if (close(fd)) { fprintf(stderr, "\r close failed for '%s': %s\n", name, strerror(errno)); return FAILED; } return SUCCESS; } int do_write(const char name[], const int fd, char *buf, size_t count) { int ret; ssize_t c; size_t written; if (count == 0) abort(); ret = 0; written = 0; while (written < count) { c = write(fd, buf, count - written); if (c == 0) abort(); if (c > 0) { written += c; buf += c; } else { if (errno == ENOSPC) { --count; ret = ENOSPC; } else if (errno == EAGAIN || errno == EINTR) continue; else { fprintf(stderr, "\r write failed to '%s': %s\n", name, strerror(errno)); return FAILED; } } } return ret; } int sync_data(const char name[], const int fd) { if (fd == -1) //abort(); return FAILED; #if !defined (HAVE_FSYNC) || !defined (HAVE_FDATASYNC) /* the file will still get written out file.h will make the file be opened with a sync flag */ return SUCCESS; #endif #ifdef HAVE_FDATASYNC if (fdatasync(fd)) #endif #ifdef HAVE_FSYNC if (fsync(fd)) #endif { fprintf(stderr, "\r cannot synchronize '%s': %s\n", name, strerror(errno)); #ifdef HAVE_FCNTL if (fcntl(fd, F_SETFL, O_SYNC) == -1) { fprintf(stderr, "\r cannot set synchronis writes '%s': %s\n", name, strerror(errno)); return FAILED; } #endif } return SUCCESS; } int write_pass(struct file_info *info) { off_t i; #ifdef HAVE_BZERO bzero(info->buf, info->buf_size); #endif memset(info->buf, 0, info->buf_size); for (i = 0; i < info->st.st_size; i += info->buf_size) { if (do_write(info->path_name, info->fd, info->buf, info->buf_size)) return WIPE_WRITE_FAILED; } return sync_data(info->path_name, info->fd); } int zero_data(struct file_info *info) { info->buf_size = 1024*1024;//512 if ((info->buf = (char *)malloc(info->buf_size)) == NULL) { fprintf(stderr, "\r cannot allocate %ld bytes for '%s': %s\n", (long int)info->buf_size, info->path_name, strerror(errno)); return FAILED; } if (write_pass(info)) { free(info->buf); return FAILED; } free(info->buf); return SUCCESS; } int wipe_data(struct file_info *info) { if (info->st.st_size == 0) { if (verbose) { fprintf(stderr, "\r zero length, skipping '%s'\n", info->path_name); } /* no need to write anything */ return SUCCESS; } return zero_data(info); } char rand_safe_char(void) { int i; struct timeval tpstart; gettimeofday(&tpstart,NULL); srand(tpstart.tv_usec); const char nameset[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_+=%@#."; i = (int) ((float) (sizeof(nameset) - 1.0) * rand() / (RAND_MAX+1.0)); return nameset[i]; } void rename_str(char str[], const size_t len) { int i; i=0; while (i <= ((int)len-2)) str[i++] = rand_safe_char(); str[len-1] = 0; } int dir_sync(char dir_name[]) { int dfd; DIR *dir; if ((dir = opendir(dir_name)) == NULL) { fprintf(stderr, "\r cannot open directory '%s': %s\n", dir_name, strerror(errno)); return FAILED; } if ((dfd = dirfd(dir)) < 0) { fprintf(stderr, "\r dirfd() failed for '%s': %s\n", dir_name, strerror(errno)); return FAILED; } sync_data(dir_name, dfd); if (closedir(dir)) { fprintf(stderr, "\r closedir failed for '%s': %s\n", dir_name, strerror(errno)); return FAILED; } return SUCCESS; } int rename_file(struct file_info *info) { int i; size_t len, file_len, path_len; char base_name[PATH_MAX+1]; char *base, dest_name[PATH_MAX+1]; memset(dest_name, 0, sizeof(dest_name)); strcpy(dest_name, info->path_name); base = strrchr(dest_name, '/'); if (base == NULL || base >= (dest_name + sizeof(dest_name))) base = dest_name; else ++base; *base = 0x00; memset(base_name, 0, sizeof(base_name)); strcpy(base_name, dest_name); path_len = strnlen(dest_name, sizeof(dest_name)); file_len = PATH_MAX - path_len; i = 0; len = 2; while (!i && len <= file_len) { rename_str(base, len++); i = access(dest_name, F_OK); } if (rename(info->path_name, dest_name) == 0) { memset(info->path_name, 0, sizeof(info->path_name)); strncpy(info->path_name, dest_name, strnlen(dest_name, sizeof(dest_name))); } else { fprintf(stderr, "\r cannot rename '%s': %s\n", info->path_name, strerror(errno)); return FAILED; } if (dir_sync(base_name)) return FAILED; return SUCCESS; } int destroy_file(struct file_info *info) { if ((info->fd = open(info->path_name, O_WRONLY | O_NOFOLLOW | SYNC)) < 0) { fprintf(stderr, "\r cannot open '%s': %s\n", info->path_name, strerror(errno)); return FAILED; } if (wipe_data(info) == FAILED) { do_close(info->path_name, info->fd); fprintf(stderr, "\r failed to wipe '%s'\n", info->path_name); return FAILED; } if (ftruncate(info->fd, 0)) { do_close(info->path_name, info->fd); fprintf(stderr, "\r cannot truncate '%s': %s\n", info->path_name, strerror(errno)); return FAILED; } do_close(info->path_name, info->fd); //Do not care about the return value; rename_file(info); if (unlink(info->path_name)) { fprintf(stderr, "\r cannot unlink '%s': %s\n", info->path_name, strerror(errno)); return FAILED; } return SUCCESS; } int do_file(const char *name) { struct file_info info; if (strlen(name) > PATH_MAX) return PATH_NAME_TOO_LONG; memset(info.path_name, 0, sizeof(info.path_name)); strcpy(info.path_name, name); if (lstat(name, &info.st)) { fprintf(stderr, "\r cannot stat '%s': %s\n", name, strerror(errno)); return FAILED; } switch (info.st.st_mode & S_IFMT) { /* regular file */ case S_IFREG: return destroy_file(&info); break; /* block device */ case S_IFBLK: //destroy_blkdev(f); return NOT_SUPPORT_TYPE; break; /* char dev */ case S_IFCHR: //destroy_file(f); return NOT_SUPPORT_TYPE; break; /* directory */ case S_IFDIR: //drill_down(name); return NOT_SUPPORT_TYPE; break; /* fifo */ case S_IFIFO: /* socket */ case S_IFSOCK: /* sym link */ case S_IFLNK: if (unlink(name)) { if (verbose) { fprintf(stderr, "\r cannot remove '%s': %s\n", name, strerror(errno)); } } break; default: //abort(); return NOT_SUPPORT_TYPE; } return NOT_SUPPORT_TYPE; } //#ifdef __DEBUG //int main(int argc, char **argv) //{ /* // char pwd_path[PATH_MAX+1]; // memset(pwd_path, 0, sizeof(pwd_path)): // int count = readlink("/proc/self/exe", pwd_path, PATH_MAX); // if ( count < 0 || count >= PATH_MAX) // { // return -1; // } // */ // return do_file(argv[1]); //} //#endif youker-assistant/plugins/shredmanager/filewipe.h0000664000175000017500000000146713260315532021133 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 __MAIN_H__ #define __MAIN_H__ //The parameter name should be an absolute path int do_file(const char *name); #endif // __MAIN_H__ youker-assistant/plugins/shredmanager/shredmanager.cpp0000664000175000017500000000370513260315532022317 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "shredmanager.h" #include #include //ShredManager::ShredManager(QObject *parent) //:QObject(parent), shred_dialog(this) //{ //} ShredManager::ShredManager(QObject *parent) : QObject(parent) { shred_dialog = new ShredDialog; } ShredManager::~ShredManager() { if (shred_dialog) { delete shred_dialog; shred_dialog = nullptr; } } QString ShredManager::getGuid() { return "UBUNTU-KYLIN-SHRED"; } QString ShredManager::getName() { return tr("Shred Manager"); } QString ShredManager::getDescribe() { return tr("Delete files makes it unable to recover");//彻底删除文件使其无法恢复 } QString ShredManager::getPicture() { return "shredder.png"; } void ShredManager::doAction() { // int windowWidth = QApplication::desktop()->width(); // int windowHeight = QApplication::desktop()->height(); // shred_dialog->resetSkin(); // shred_dialog->move((windowWidth - 500) / 2,(windowHeight - 471) / 2); shred_dialog->show(); shred_dialog->raise(); } QWidget *ShredManager::centralWidget() { return shred_dialog; } #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) Q_EXPORT_PLUGIN2(ShredManager, ShredManager) #endif youker-assistant/plugins/shredmanager/shred.json0000664000175000017500000000000313260315532021137 0ustar fengfeng{} youker-assistant/plugins/shredmanager/shredmanager.h0000664000175000017500000000272613260315532021766 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "../../component/plugininterface.h" #include "shreddialog.h" //插件入口 class ShredManager : public QObject , PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) Q_PLUGIN_METADATA(IID "com.kylin.Plugin.PluginInterface" FILE "shred.json")//指定IID和.json文件 #endif public: explicit ShredManager(QObject* parent = 0); virtual ~ShredManager(); QWidget *centralWidget(); public slots: public: virtual QString getGuid(); virtual QString getName(); virtual QString getDescribe(); virtual QString getPicture(); virtual void doAction(); private: ShredDialog *shred_dialog = nullptr; }; youker-assistant/plugins/shredmanager/shreddialog.ui0000664000175000017500000000104113260315532021766 0ustar fengfeng ShredDialog 0 0 745 435 false youker-assistant/plugins/shredmanager/shreddialog.cpp0000664000175000017500000002335113260315532022143 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "shreddialog.h" #include "filewipe.h" //#include "shredmanager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //ShredDialog::ShredDialog(ShredManager *plugin, QDialog *parent) // :QDialog(parent) ShredDialog::ShredDialog(QWidget *parent) : QWidget(parent) , mousePressed(false) { setWindowFlags(Qt::FramelessWindowHint); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowTitle(tr("Kylin Shred Manager")); this->setWindowIcon(QIcon(":/model/res/plugin/shredder.png")); this->setFixedSize(500, 471); // process_plugin = plugin; // shredSettings = new QSettings(KYLIN_COMPANY_SETTING, KYLIN_SETTING_FILE_NAME_SETTING); // shredSettings->setIniCodec("UTF-8"); // title_bar = new KylinTitleBar(); // initTitleBar(); title_bar = new MyTitleBar(tr("Shred Manager"), false, this); title_bar->setFixedSize(this->width(), TITLE_BAR_HEIGHT); toolkits = new Toolkits(0, this->width(), this->height()); select_edit = new QLineEdit(); select_edit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); select_edit->setFixedWidth(400); select_edit->setReadOnly(true); select_btn = new KylinEditButton(select_edit); shred_btn = new QPushButton(); cacel_btn = new QPushButton(); shred_btn->setFixedSize(91, 25); shred_btn->setObjectName("blackButton"); shred_btn->setFocusPolicy(Qt::NoFocus); cacel_btn->setFixedSize(91, 25); cacel_btn->setObjectName("blackButton"); cacel_btn->setFocusPolicy(Qt::NoFocus); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->addStretch(); layout1->addWidget(select_edit); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addStretch(); layout2->addWidget(shred_btn); layout2->addWidget(cacel_btn); layout2->addStretch(); layout2->setMargin(0); QVBoxLayout *layout = new QVBoxLayout(); layout->addStretch(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addStretch(); layout->setSpacing(10); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(title_bar); main_layout->addLayout(layout); main_layout->setSpacing(20); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->setLanguage(); this->initConnect(); this->moveCenter(); } ShredDialog::~ShredDialog() { // if (shredSettings != NULL) // { // shredSettings->sync(); // delete shredSettings; // shredSettings = NULL; // } } void ShredDialog::setLanguage() { select_edit->setText(tr("No select any file which need to be shredded")); shred_btn->setText(tr("Shred File")); cacel_btn->setText(tr("Deselect")); } void ShredDialog::initConnect() { connect(select_btn, SIGNAL(clicked()), this, SLOT(onSelectButtonClicked())); connect(shred_btn, SIGNAL(clicked()), this, SLOT(onShredButtonClicked())); connect(cacel_btn, SIGNAL(clicked()), this, SLOT(onCacelButtonClicked())); // connect(title_bar, SIGNAL(showMinDialog()), this, SLOT(onMinButtonClicked())); connect(title_bar,SIGNAL(closeSignal()), this, SLOT(onCloseButtonClicked())); } void ShredDialog::onCloseButtonClicked() { this->close(); } //void ShredDialog::onMinButtonClicked() //{ // this->showMinimized(); //// this->hide(); //} //QString ShredDialog::getCurrrentSkinName() //{ // shredSettings->beginGroup("Background"); // QString skin = shredSettings->value("Path").toString(); // if(skin.isEmpty()) { // skin = ":/background/res/skin/1.png"; // } // else { // QStringList skinlist; // QString path = "/var/lib/kylin-assistant-daemon/default/"; // QDir picdir(path); // picdir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); // picdir.setSorting(QDir::Size | QDir::Reversed); // QStringList filters; // filters << "*.jpg" << "*.png"; // picdir.setNameFilters(filters); // QFileInfoList list = picdir.entryInfoList(); // if(list.size() < 1) { // skinlist << ":/background/res/skin/1.png" << ":/background/res/skin/2.png" << ":/background/res/skin/3.png" << ":/background/res/skin/4.png"; // } // else { // for (int j = 0; j < list.size(); ++j) { // QFileInfo fileInfo = list.at(j); // skinlist << path + fileInfo.fileName(); // } // skinlist << ":/background/res/skin/1.png" << ":/background/res/skin/2.png" << ":/background/res/skin/3.png" << ":/background/res/skin/4.png"; // } // QList::Iterator it = skinlist.begin(), itend = skinlist.end(); // bool flag = false; // for(;it != itend; it++) // { // if(*it == skin) { // flag = true; // break; // } // } // if (flag == false) { // skin = skinlist.at(0); // } // } // shredSettings->endGroup(); // shredSettings->sync(); // return skin; //} //void ShredDialog::initTitleBar() //{ // QString skin = this->getCurrrentSkinName(); // title_bar->setTitleWidth(500); // title_bar->setTitleName(tr("Shred Manager")); //// title_bar->setTitleBackgound(":/background/res/skin/1.png"); // title_bar->setTitleBackgound(skin); //} //void ShredDialog::resetSkin() //{ // QString skin = this->getCurrrentSkinName(); // title_bar->resetBackground(skin); //} //void ShredDialog::onSelecteComboActivated(int index) //{ //} void ShredDialog::onSelectButtonClicked() { // QString fileName=QFileDialog::getOpenFileName(0, tr("Select file"), QDir::homePath(), tr("All Files(*)")); QStringList fileNameList; QString fileName; QFileDialog* fd = new QFileDialog(this); // fd->setStyleSheet("QFileDialog{background-color:blue;}"); fd->resize(500, 471); // fd->setFilter(tr("Allfile(*)")); fd->setFilter(QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); // fd->setFilter( "Allfile(*.*);;mp3file(*.mp3);;wmafile(*.wma);;wavefile(*.wav)"); fd->setViewMode(QFileDialog::List);//设置浏览模式,有 列表(list) 模式和 详细信息(detail)两种方式 if (fd->exec() == QDialog::Accepted) { fileNameList = fd->selectedFiles(); fileName = fileNameList[0]; select_edit->setText(fileName); } else fd->close(); } void ShredDialog::onShredButtonClicked() { if(select_edit->text().length() == 0 || !select_edit->text().contains("/")) { toolkits->alertMSG(this->frameGeometry().topLeft().x(), this->frameGeometry().topLeft().y(), tr("Select file!")); } else { char* ch; QByteArray ba = select_edit->text().toUtf8(); ch=ba.data(); int result = do_file(ch); if (result == 0) { //success toolkits->alertMSG(this->frameGeometry().topLeft().x(), this->frameGeometry().topLeft().y(), tr("Shred successfully!")); select_edit->setText(tr("No select any file which need to be shredded")); } else { //failed toolkits->alertMSG(this->frameGeometry().topLeft().x(), this->frameGeometry().topLeft().y(), tr("Shred failed!")); } } } void ShredDialog::onCacelButtonClicked() { select_edit->setText(tr("No select any file which need to be shredded")); } void ShredDialog::closeEvent(QCloseEvent *event) { event->accept(); // emit SignalClose(); } void ShredDialog::moveCenter() { QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); } void ShredDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->dragPosition = event->globalPos() - frameGeometry().topLeft(); this->mousePressed = true; } QWidget::mousePressEvent(event); } void ShredDialog::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->mousePressed = false; } QWidget::mouseReleaseEvent(event); } void ShredDialog::mouseMoveEvent(QMouseEvent *event) { if (this->mousePressed) { move(event->globalPos() - this->dragPosition); } QWidget::mouseMoveEvent(event); } youker-assistant/plugins/shredmanager/shredmanager.pro0000664000175000017500000000237713260315532022341 0ustar fengfeng#------------------------------------------------- # # Project created by QtCreator 2015-01-26T09:16:38 # #------------------------------------------------- QT += core isEqual(QT_MAJOR_VERSION, 5) { QT += widgets gui } TARGET = shredmanager TEMPLATE = lib CONFIG += plugin c++11 DESTDIR = $$_PRO_FILE_PWD_/../ unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } target.path = $${PREFIX}/lib/kylin-assistant/plugins/ INSTALLS += target HEADERS += \ filewipe.h \ ../../component/plugininterface.h \ shredmanager.h \ shreddialog.h \ ../../component/toolkits.h \ ../../component/alertdialog.h \ ../../component/utils.h \ ../../component/toolkits.h \ ../../component/mytitlebar.h \ ../../component/systembutton.h \ ../../component/kylineditbutton.h \ ../widgets/mytristatebutton.h SOURCES += \ filewipe.cpp \ shredmanager.cpp \ shreddialog.cpp \ ../../component/alertdialog.cpp \ ../../component/toolkits.cpp \ ../../component/mytitlebar.cpp \ ../../component/systembutton.cpp \ ../../component/kylineditbutton.cpp \ ../widgets/mytristatebutton.cpp OTHER_FILES += \ shred.json FORMS += \ ../../component/alertdialog.ui RESOURCES += \ ../../src/img.qrc youker-assistant/AUTHORS0000664000175000017500000000007313260315532014075 0ustar fengfengUbuntu Kylin Team youker-assistant/info/0000775000175000017500000000000013260315532013760 5ustar fengfengyouker-assistant/info/infoitemline.cpp0000664000175000017500000004250213260315532017151 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "infoitemline.h" #include #include #include inline const QString covertKeyName(const QString &key) { if(key == "MulProduct")//声卡型号 return QString(QObject::tr("Audio Model")); else if(key == "MulVendor")//制造商 return QString(QObject::tr("Vendor")); else if(key == "MulBusinfo")//总线地址 return QString(QObject::tr("Bus Address")); else if(key == "MulDrive")//声卡驱动 return QString(QObject::tr("Audio Driver")); else if(key == "POWER_SUPPLY_NAME")//设备名 return QString(QObject::tr("Device Name")); else if(key == "POWER_SUPPLY_MANUFACTURER")//发行商 return QString(QObject::tr("Manufacturer")); // else if(key == "POWER_SUPPLY_CAPACITY")// // return QString(QObject::tr("POWER_SUPPLY_CAPACITY"); // else if(key == "POWER_SUPPLY_CYCLE_COUNT")// // return QString(QObject::tr("POWER_SUPPLY_CYCLE_COUNT"); // else if(key == "POWER_SUPPLY_POWER_NOW")// // return QString(QObject::tr("POWER_SUPPLY_POWER_NOW"); // else if(key == "POWER_SUPPLY_PRESENT")// // return QString(QObject::tr("POWER_SUPPLY_PRESENT"); // else if(key == "POWER_SUPPLY_STATUS")// // return QString(QObject::tr("POWER_SUPPLY_STATUS"); // else if(key == "POWER_SUPPLY_VOLTAGE_MIN_DESIGN")// // return QString(QObject::tr("POWER_SUPPLY_VOLTAGE_MIN_DESIGN"); // POWER_SUPPLY_CAPACITY_LEVEL // POWER_SUPPLY_CHARGE_FULL // POWER_SUPPLY_CHARGE_FULL_DESIGN // POWER_SUPPLY_CHARGE_NOW // POWER_SUPPLY_CURRENT_NOW // POWER_SUPPLY_PROP_STATUS // POWER_SUPPLY_PROP_CHARGE_TYPE // POWER_SUPPLY_PROP_HEALTH // POWER_SUPPLY_PROP_PRESENT, // POWER_SUPPLY_PROP_TECHNOLOGY, // POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, // POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, // POWER_SUPPLY_PROP_VOLTAGE_NOW, // POWER_SUPPLY_PROP_CAPACITY, // POWER_SUPPLY_PROP_CURRENT_NOW, // POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, // POWER_SUPPLY_PROP_TEMP, // POWER_SUPPLY_PROP_SYSTEM_TEMP_LEVEL // POWER_SUPPLY_ATTR // POWER_SUPPLY_CURRENT_MAX // SEQNUM // POWER_SUPPLY_CHARGING_ENABLED // POWER_SUPPLY_CHARGE_TYPE // POWER_SUPPLY_HEALTH // POWER_SUPPLY_VOLTAGE_MAX_DESIGN // POWER_SUPPLY_TEMP // POWER_SUPPLY_SYSTEM_TEMP_LEVEL else if(key == "POWER_SUPPLY_MODEL_NAME")//型号 return QString(QObject::tr("Model")); else if(key == "POWER_SUPPLY_TECHNOLOGY")//技术 return QString(QObject::tr("Technology")); else if(key == "POWER_SUPPLY_VOLTAGE_NOW")//电压 return QString(QObject::tr("Voltage")); else if(key == "POWER_SUPPLY_ENERGY_FULL_DESIGN")//能量(设计) return QString(QObject::tr("Energy Designed")); else if(key == "POWER_SUPPLY_ENERGY_FULL")//满时能量 return QString(QObject::tr("Energy Full")); else if(key == "POWER_SUPPLY_ENERGY_NOW")//能量 return QString(QObject::tr("Energy Now")); else if(key == "POWER_SUPPLY_SERIAL_NUMBER")//序列号 return QString(QObject::tr("Serial Number")); else if(key == "BoaVendor")//主板型号 return QString(QObject::tr("Motherboard Model")); else if(key == "BoaProduct")//主板产商 return QString(QObject::tr("Motherboard Vendor")); else if(key == "BoaSerial")//序列号 return QString(QObject::tr("Serial Number")); else if(key == "BioVendor")//BIOS产商 return QString(QObject::tr("BIOS Vendor")); else if(key == "BioVersion")//BIOS版本 return QString(QObject::tr("BIOS Version")); else if(key == "BioRelease")//发布日期 return QString(QObject::tr("Release Date")); else if(key == "DvdProduct")//光驱型号 return QString(QObject::tr("CD-ROM Model")); else if(key == "DvdVendor")//制造商 return QString(QObject::tr("Vendor")); else if(key == "DvdName")//设备名称 return QString(QObject::tr("Device Name")); else if(key == "DvdFw")//固件版本 return QString(QObject::tr("Firmware Version")); else if(key == "DvdSerial")//序列号 return QString(QObject::tr("Serial Number")); else if(key == "CpuVersion")//处理器: return QString(QObject::tr("CPU")); else if(key == "CpuVendor")//制造商: return QString(QObject::tr("Vendor")); else if(key == "CpuSerial")//序列号: return QString(QObject::tr("Serial Number")); else if(key == "CpuSlot")//插座/插槽: return QString(QObject::tr("Socket/Slot")); else if(key == "CpuCapacity")//最大主频: return QString(QObject::tr("Maximum Frequency")); else if(key == "CpuSize")//当前主频: return QString(QObject::tr("Current Frequency")); else if(key == "CpuClock")//前端总线: return QString(QObject::tr("FSB")); else if(key == "cpu_cores")//核心数目: return QString(QObject::tr("Core Number")); else if(key == "cpu_siblings")//线程 return QString(QObject::tr("Thread")); else if(key == "clflush_size")//一级缓存: return QString(QObject::tr("L1 Cache")); else if(key == "cache_size")//二级缓存: return QString(QObject::tr("L2 Cache")); // else if(key == "1500a v1.0 64 bits")//1500a v1.0 64位 // return QString(QObject::tr("1500a v1.0 64 bits"); else if(key == "phytium")//飞腾 return QString(QObject::tr("phytium")); else if(key == "4 cores")//4核 return QString(QObject::tr("4 cores")); else if(key == "4 thread/core")//4线程/核 return QString(QObject::tr("4 thread/core")); else if(key == "desktopenvironment")//桌面环境 return QString(QObject::tr("Desktop Environment")); else if(key == "cpu") return QString(QObject::tr("CPU")); else if(key == "hostname") return QString(QObject::tr("Host Name")); else if(key == "ram") return QString(QObject::tr("Memery Capacity")); else if(key == "terminal") return QString(QObject::tr("Terminal")); else if(key == "distribution")//发行版 return QString(QObject::tr("Distribution")); else if(key == "language")//语言 return QString(QObject::tr("Language")); else if(key == "currrent_user")//当前用户 return QString(QObject::tr("User")); else if(key == "home_path")//用户主目录 return QString(QObject::tr("Home Folder")); else if(key == "Host bridge")//主桥 return QString(QObject::tr("Host bridge")); else if(key == "VGA compatible controller")//VGA兼容控制器 return QString(QObject::tr("VGA Model")); else if(key == "USB controller")//USB控制器 return QString(QObject::tr("USB Model")); else if(key == "Communication controller")//通信控制器 return QString(QObject::tr("Communication Model")); else if(key == "Ethernet controller")//以太网控制器 return QString(QObject::tr("Ethernet Model")); else if(key == "Audio device")//音频设备 return QString(QObject::tr("Audio Model")); else if(key == "PCI bridge")//PCI桥 return QString(QObject::tr("PCI bridge")); else if(key == "ISA bridge")//ISA桥 return QString(QObject::tr("ISA bridge")); else if(key == "SATA controller")//SATA控制器 return QString(QObject::tr("SATA Model")); else if(key == "SMBus")//系统管理总线 return QString(QObject::tr("SMBus")); else if(key == "System peripheral")//系统外围 return QString(QObject::tr("System peripheral")); else if(key == "driver in use")//使用的驱动 return QString(QObject::tr("Driver in use")); else if(key == "existing drivers")//可选的驱动 return QString(QObject::tr("existing drivers")); else if(key == "IDE interface")//IDE接口 return QString(QObject::tr("IDE interface")); else if(key == "Signal processing controller")//信号处理控制器 return QString(QObject::tr("SP controller")); else if(key == "Network controller")//网络控制器 return QString(QObject::tr("Network controller")); else if(key == "Multimedia audio controller")//多媒体音频控制器 return QString(QObject::tr("Multimedia audio controller")); else if(key == "DiskProduct")//硬盘型号: return QString(QObject::tr("HDD Model")); else if(key == "DiskVendor")//硬盘厂商: return QString(QObject::tr("HDD Vendor")); else if(key == "DiskCapacity")//硬盘容量: return QString(QObject::tr("HDD Capacity")); else if(key == "DiskName")//设备名称: return QString(QObject::tr("Device Name")); else if(key == "DiskFw")//固件版本: return QString(QObject::tr("Firmware Version")); else if(key == "DiskSerial")//序列号: return QString(QObject::tr("Serial Number")); else if(key == "MemSlot")//插槽号: return QString(QObject::tr("Slot Number")); else if(key == "MemProduct")//内存型号: return QString(QObject::tr("Memory Model")); else if(key == "MemVendor")//制造商: return QString(QObject::tr("Vendor")); else if(key == "MemSerial")//序列号: return QString(QObject::tr("Serial Number")); else if(key == "MemSize")//内存大小: return QString(QObject::tr("Memory Size")); else if(key == "MemWidth")//数据宽度: return QString(QObject::tr("Data Width")); else if(key == "MemInfo")//内存条信息: return QString(QObject::tr("Memory Info")); else if(key == "Vga_product")//显卡型号: return QString(QObject::tr("Graphics Card Model")); else if(key == "Mon_chip")//当前显卡: return QString(QObject::tr("Current Graphics Card")); else if(key == "Vga_vendor")//显卡制造商: return QString(QObject::tr("Graphics Card Vendor")); else if(key == "Vga_Drive")//显卡驱动: return QString(QObject::tr("Graphics Driver")); else if(key == "Vga_businfo")//显卡总线地址: return QString(QObject::tr("Bus Address")); else if(key == "Mon_gamma")//伽马值 return QString(QObject::tr("Gamma")); else if(key == "Mon_in")//屏幕尺寸(英寸) return QString(QObject::tr("Screen Size(inch)")); else if(key == "Mon_maxmode")//最大分辨率 return QString(QObject::tr("Max Resolution")); else if(key == "Mon_output")//当前接口 return QString(QObject::tr("Current Interface")); else if(key == "Mon_product")//显示器型号: return QString(QObject::tr("Monitor Model")); else if(key == "Mon_size")//可视面积 return QString(QObject::tr("Visual Area")); else if(key == "Mon_support")//支持接口 return QString(QObject::tr("Support Interface")); else if(key == "Mon_vendor")//显示器制造商 return QString(QObject::tr("Monitor Manufacturers")); else if(key == "Mon_week")//生产日期_周 return QString(QObject::tr("Date of production/Week")); else if(key == "Mon_year")//生产日期_年 return QString(QObject::tr("Date of production/Year")); else if(key == "NetVendor")//制造商: return QString(QObject::tr("Vendor")); else if(key == "NetProduct")//网卡型号: return QString(QObject::tr("NIC Model")); else if(key == "NetDrive")//有线网卡驱动: return QString(QObject::tr("NIC Driver")); else if(key == "NetBusinfo")//总线地址: return QString(QObject::tr("Bus Address")); else if(key == "NetLogicalname")//设备名称: return QString(QObject::tr("Device Name")); else if(key == "NetIp")//IP地址: return QString(QObject::tr("IP Address")); else if(key == "NetSerial")//MAC地址: return QString(QObject::tr("Mac Address")); else if(key == "NetLink")//连接状态: return QString(QObject::tr("Connection Status")); else if(key == "NetCapacity")//最大带宽: return QString(QObject::tr("Max Bandwidth")); else if(key == "WlanVendor")//制造商: return QString(QObject::tr("Vendor")); else if(key == "WlanDrive")//无线网卡驱动: return QString(QObject::tr("WLan NIC Driver")); else if(key == "WlanProduct")//网卡型号: return QString(QObject::tr("WLan NIC Model")); else if(key == "WlanBusinfo")//总线地址: return QString(QObject::tr("Bus Address")); else if(key == "WlanLogicalname")//设备名称: return QString(QObject::tr("Device Name:")); else if(key == "WlanSerial")//序列号: return QString(QObject::tr("Serial Number")); else if(key == "WlanIp")//IP地址: return QString(QObject::tr("IP Address")); else if (key == "VNIC") { return QString(QObject::tr("VNIC")); } else if (key == "NetType") { return QString(QObject::tr("NetType")); } else if (key == "Ethernet interface") { return QString(QObject::tr("Ethernet interface")); } else if (key == "Wireless interface") { return QString(QObject::tr("Wireless interface")); } else if(key == "ComVendor")//制造商: return QString(QObject::tr("Vendor")); else if(key == "ComProduct")//电脑型号: return QString(QObject::tr("Model")); else if(key == "ComVersion")//电脑版本: return QString(QObject::tr("Version")); else if(key == "ComSerial")//序列号: return QString(QObject::tr("Serial Number")); else if(key == "node")//主机名: return QString(QObject::tr("Hostname")); else if(key == "uptime")//持续运行时间: return QString(QObject::tr("Running Time")); else if(key == "system")//操作系统类型: return QString(QObject::tr("OS Types")); else if(key == "osname")//操作系统版本: return QString(QObject::tr("OS Version")); else if(key == "architecture")//系统位数: return QString(QObject::tr("Kernel Bit")); else if(key == "release")//内核版本: return QString(QObject::tr("Kernel Version")); else if(key == "machine")//内核架构: return QString(QObject::tr("Kernel Arch")); else if (key == "32bit") return QString(QObject::tr("32bit")); else if (key == "64bit" || key == "64 bits") return QString(QObject::tr("64bit")); else if (key == "YHKylin community") return QString(QObject::tr("YHKylin community")); else if(key == "IN0")//内存参考电压 return QString(QObject::tr("Memory reference voltage")); else if(key == "IN2")//SATA控制器电压 return QString(QObject::tr("SATA controller voltage")); else if(key == "IN3")//内存电压 return QString(QObject::tr("Memory voltage")); else if(key == "IN5")//CPU管脚电压 return QString(QObject::tr("CPU pin voltage")); else if(key == "IN6")//桥片电压 return QString(QObject::tr("Bridge voltage")); else if(key == "TR4")//CPU核电压 return QString(QObject::tr("CPU core voltage")); else if(key == "TR5")//CPU温度 return QString(QObject::tr("CPU temperature")); else if(key == "TR6")//主板温度 return QString(QObject::tr("Motherboard temperature")); else if(key == "FANIN1")//CPU风扇转速 return QString(QObject::tr("CPU fan speed")); else return key; } InfoItemLine::InfoItemLine(QFrame *parent) : QFrame(parent) { this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); this->setFixedHeight(36); m_key = ""; m_keyLabel = new QLabel; m_valueLabel = new QLabel; QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->setSpacing(0); mainLayout->setMargin(0); mainLayout->setContentsMargins(20, 0, 10, 0); mainLayout->addWidget(m_keyLabel); mainLayout->addSpacing(10); mainLayout->addWidget(m_valueLabel); mainLayout->addStretch(); this->setLayout(mainLayout); } InfoItemLine::~InfoItemLine() { delete m_keyLabel; delete m_valueLabel; } void InfoItemLine::setInfoKey(const QString &key) { const QString name = covertKeyName(key); m_keyLabel->setText(name); m_key = key; QFont ft; QFontMetrics fm(ft); this->keyWidth = fm.width(key); } void InfoItemLine::setInfoValue(const QString &value) { int maxWidth = this->width() - keyWidth - 40; QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(value, Qt::ElideRight, maxWidth); m_valueLabel->setText(elided_text); if(elided_text.endsWith("…")) m_valueLabel->setToolTip(value); } QString InfoItemLine::getLineKey() { return m_key; } youker-assistant/info/infogui.h0000664000175000017500000000302013260315532015564 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 INFOGUI_H #define INFOGUI_H #include "infounitwidget.h" #include class QVBoxLayout; class QScrollArea; class InfoGui : public QWidget { Q_OBJECT public: explicit InfoGui(QWidget *parent = 0); ~InfoGui(); const QString infoGuiName() const; void setInfoGuiName(const QString &name); void clearWidget(); void loadOnePage(int index, const QString &title, QMap infoMap); void updatePageData(const QString &title, QMap infoMap); void updateRunningTime(const QString &runningTime); private: QVBoxLayout *m_vLayout = nullptr; QFrame *m_widget = nullptr; QScrollArea *m_scrollArea = nullptr; QList m_pageList; QString m_infoGuiName; }; #endif // INFOGUI_H youker-assistant/info/devicemanager.h0000664000175000017500000000221613260315532016724 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 DEVICEMANAGER_H #define DEVICEMANAGER_H #include #include #include #include #include class DeviceManager : public QObject { Q_OBJECT public: explicit DeviceManager(QObject *parent = 0); //得到硬件设备及其驱动信息 Q_INVOKABLE QStringList getDeviceMsg(); signals: public slots: }; #endif // DEVICEMANAGER_H youker-assistant/info/infounitwidget.cpp0000664000175000017500000001066313260315532017531 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "infounitwidget.h" #include "infoitemline.h" #include "infoitemsgroup.h" #include #include #include InfoUnitWidget::InfoUnitWidget(QString title, QWidget *parent) : QWidget(parent) , m_currentRunningTimeUIIndex(-1) { this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->setStyleSheet("QWidget {background-color: rgba(255, 255, 255, 0.1);border-radius: 2px;}"); //kobe: QHBoxLayout *mainLayout = static_cast(layout()); m_titleLabel = new QLabel; m_titleLabel->setStyleSheet("QLabel{background-color:transparent;color:#000000;font-size:15px;font-weight:bold;}"); m_titleLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); m_titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_vendorLabel = new QLabel; m_titleLabel->setStyleSheet("QLabel{background-color:transparent;}"); m_vendorLabel->setFixedSize(48, 48); this->setInfoTitle(title); QHBoxLayout *headerLayout = new QHBoxLayout; headerLayout->setContentsMargins(10, 0, 30, 0); headerLayout->addWidget(m_titleLabel); headerLayout->addStretch(); headerLayout->addWidget(m_vendorLabel); headerLayout->setAlignment(m_vendorLabel, Qt::AlignCenter); QFrame *headerWidget = new QFrame; headerWidget->setStyleSheet("QFrame {padding:5px 0;} QFrame:hover {background-color:rgba(141,238,238,0.2);border-radius:4px;}"); headerWidget->setLayout(headerLayout); m_infoLayout = new QVBoxLayout; m_infoLayout->addWidget(headerWidget); m_infoLayout->setSpacing(5); m_infoLayout->setMargin(0); m_infoLayout->setContentsMargins(0,0,0,0); m_infoItemsGroup = new InfoItemsGroup; m_infoLayout->addWidget(m_infoItemsGroup); setLayout(m_infoLayout); // m_infoItemsGroup->getInfoItem() } InfoUnitWidget::~InfoUnitWidget() { m_currentRunningTimeUIIndex = -1; QList items = findChildren(); for (InfoItemLine *item : items) { m_infoItemsGroup->removeItem(item); item->deleteLater(); } if (m_infoItemsGroup) { delete m_infoItemsGroup; m_infoItemsGroup = 0; } } const QString InfoUnitWidget::title() const { return m_titleLabel->text(); } void InfoUnitWidget::setInfoTitle(const QString &title) { m_titleLabel->setText(title); setAccessibleName(title); } void InfoUnitWidget::setInfoVendor(const QString &vendor) { QPainterPath painterPath; painterPath.addEllipse(QRect(0, 0, 48, 48)); QPixmap pixmap = QPixmap(vendor); if (pixmap.isNull()) return; pixmap = pixmap.scaled(48, 48, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPixmap pic(48, 48); pic.fill(Qt::transparent); QPainter painter(&pic); painter.setRenderHint(QPainter::Antialiasing); painter.setClipPath(painterPath); painter.drawPixmap(QRect(0, 0, 48, 48), pixmap); m_vendorLabel->setPixmap(pic); } void InfoUnitWidget::addInfoItem(const QString &key, const QString &value) { InfoItemLine *w = new InfoItemLine; const int index = m_infoItemsGroup->appendItem(w); if (key == "uptime") { m_currentRunningTimeUIIndex = index; } w->setInfoKey(key); w->setInfoValue(value); connect(w, &InfoItemLine::clicked, [=] (const QString &context) { qDebug() << context; }); } void InfoUnitWidget::refreshInfoItem(const QString &key, const QString &value) { QList items = findChildren(); for (InfoItemLine *item : items) { if (item->getLineKey() == key) { item->setInfoValue(value); } } } int InfoUnitWidget::getCurrentRunningTimeUIIndex() { return m_currentRunningTimeUIIndex; } youker-assistant/info/devicemanager.cpp0000664000175000017500000000364013260315532017261 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "devicemanager.h" DeviceManager::DeviceManager(QObject *parent) : QObject(parent) { } QStringList DeviceManager::getDeviceMsg(){ QString cmd = "lspci -k"; QProcess *p = new QProcess(); p->start(cmd); p->waitForFinished(); QStringList tmpList; while(p->canReadLine()){ QString str = p->readLine(); str = str.left(str.length() - 1); tmpList.append(str); } QString tmps; QStringList deviceMsgList; for (int i = 0;i < tmpList.size();i ++) { QString str = tmpList.at(i); if(str.startsWith("\t") == false){ if(tmps != ""){ deviceMsgList.append(tmps); } tmps = str.mid(str.indexOf(" ")); }else{ QStringList tmparr = str.split(":"); if(tmparr.at(0).indexOf("Kernel driver in use") != -1){ tmps += ";"; tmps += "driver in use:"; //"使用中的驱动:" tmps += tmparr.at(1); } if(tmparr.at(0).indexOf("Kernel modules") != -1){ tmps += ";"; tmps += "existing drivers:"; //"可选择的驱动:" tmps += tmparr.at(1); } } } return deviceMsgList; } youker-assistant/info/infoitemsgroup.h0000664000175000017500000000227713260315532017213 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 INFOITEMSGROUP_H #define INFOITEMSGROUP_H #include class QVBoxLayout; class InfoItemLine; class InfoItemsGroup : public QFrame { Q_OBJECT public: explicit InfoItemsGroup(QFrame *parent = 0); ~InfoItemsGroup(); int appendItem(InfoItemLine *item); void removeItem(InfoItemLine *item); InfoItemLine* getInfoItem(int index); private: QVBoxLayout *m_layout = nullptr; }; #endif // INFOITEMSGROUP_H youker-assistant/info/infogui.cpp0000664000175000017500000001521213260315532016125 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "infogui.h" #include "infounitwidget.h" #include #include #include #include #include #include InfoGui::InfoGui(QWidget *parent) : QWidget(parent) { // this->setAutoFillBackground(true); // QPalette palette; // palette.setColor(QPalette::Background, QColor("#0d87ca")); // this->setPalette(palette); // setFixedSize(750, 403); // this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->setStyleSheet("QWidget {background-color: rgba(255, 255, 255, 0.1);border:none;}"); this->resize(750, parent->size().height()); m_infoGuiName = ""; m_vLayout = new QVBoxLayout, m_widget = new QFrame; m_scrollArea = new QScrollArea; m_scrollArea->setWidgetResizable(true); m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_scrollArea->setStyleSheet("QScrollArea{border: none;background-color: #ffffff;}"); m_vLayout->setSpacing(10); m_vLayout->setMargin(0); m_widget->setLayout(m_vLayout); m_widget->setFixedWidth(750);//m_scrollArea->width() m_scrollArea->setWidget(m_widget); QVBoxLayout *layout = new QVBoxLayout;//QHBoxLayout *mainLayout = static_cast(layout()); layout->addWidget(m_scrollArea); layout->setContentsMargins(5, 5, 5, 5); layout->setSpacing(0); this->setLayout(layout); // this->loadOnePage(0, "AAA1", QMap()); // this->loadOnePage(1, "AAA2", QMap()); } const QString InfoGui::infoGuiName() const { return this->m_infoGuiName; } void InfoGui::setInfoGuiName(const QString &name) { if (name != m_infoGuiName) m_infoGuiName = name; } InfoGui::~InfoGui() { qDeleteAll(m_pageList); m_pageList.clear(); if (m_vLayout) { delete m_vLayout; m_vLayout = nullptr; } if (m_widget) { delete m_widget; m_widget = nullptr; } if (m_scrollArea) { delete m_scrollArea; m_scrollArea = nullptr; } } void InfoGui::clearWidget() { qDeleteAll(m_pageList); m_pageList.clear(); } void InfoGui::loadOnePage(int index, const QString &title, QMap infoMap) { InfoUnitWidget *w = new InfoUnitWidget(title, this); QMap::iterator it; //遍历map for (it = infoMap.begin(); it != infoMap.end(); ++it) { QString valueStr = it.value().toString().trimmed(); if (QString::compare(valueStr, "UNKNOWN", Qt::CaseInsensitive) == 0 || QString::compare(valueStr, "UNKNOWN", Qt::CaseInsensitive) == 0) {//for arm memory //do nothing } else if (it.key().length() > 0 && valueStr.length() > 0) { if (it.key() == "MemVendor") { w->setInfoVendor(":/vendor/res/manufacturer/" + valueStr.toUpper() + ".jpg"); } else if (it.key() == "BoaVendor") { w->setInfoVendor(":/vendor/res/manufacturer/" + valueStr.toUpper() + ".jpg"); } else if (it.key() == "DiskVendor") { w->setInfoVendor(":/vendor/res/manufacturer/" + valueStr.toUpper() + ".jpg"); } else if (it.key() == "Vga_vendor") { w->setInfoVendor(":/vendor/res/manufacturer/" + valueStr.toUpper() + ".jpg"); } else if (it.key() == "MulVendor") { w->setInfoVendor(":/vendor/res/manufacturer/" + valueStr.toUpper() + ".jpg"); } else if (it.key() == "POWER_SUPPLY_MANUFACTURER") { w->setInfoVendor(":/vendor/res/manufacturer/" + valueStr.toUpper() + ".jpg"); } else { if (it.key().contains("INTEL")) w->setInfoVendor(":/vendor/res/manufacturer/INTEL.jpg"); else if (it.key().contains("REALTEK")) w->setInfoVendor(":/vendor/res/manufacturer/REALTEK.jpg"); } w->addInfoItem(it.key(), valueStr); } } m_vLayout->addWidget(w, 0, Qt::AlignTop);//m_vLayout->insertWidget(index, w); m_pageList.append(w); } void InfoGui::updatePageData(const QString &title, QMap infoMap) { if (m_pageList.count() <= 0) { InfoUnitWidget *m_testWidget = new InfoUnitWidget(title); QMap::iterator it; //遍历map for (it = infoMap.begin(); it != infoMap.end(); ++it) { QString valueStr = it.value().toString().trimmed(); if (QString::compare(valueStr, "UNKNOWN", Qt::CaseInsensitive) == 0 || QString::compare(valueStr, "UNKNOWN", Qt::CaseInsensitive) == 0) {//for arm memory //do nothing } else if (it.key().length() > 0 && valueStr.length() > 0) { m_testWidget->addInfoItem(it.key(), valueStr); } } m_vLayout->addWidget(m_testWidget, 0, Qt::AlignTop);//m_vLayout->insertWidget(index, m_testWidget); m_pageList.append(m_testWidget); } foreach (InfoUnitWidget *widget, m_pageList) { if (widget->title() == title) { QMap::iterator it; //遍历map for (it = infoMap.begin(); it != infoMap.end(); ++it) { QString valueStr = it.value().toString().trimmed(); if (QString::compare(valueStr, "UNKNOWN", Qt::CaseInsensitive) == 0 || QString::compare(valueStr, "UNKNOWN", Qt::CaseInsensitive) == 0) {//for arm memory //do nothing } else if (it.key().length() > 0 && valueStr.length() > 0) { widget->refreshInfoItem(it.key(), valueStr); } } break; } } } void InfoGui::updateRunningTime(const QString &runningTime) { foreach (InfoUnitWidget *widget, m_pageList) { int index = widget->getCurrentRunningTimeUIIndex(); if (index >= 0) { // getInfoItem } } } youker-assistant/info/infounitwidget.h0000664000175000017500000000316613260315532017176 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 INFOUNITWIDGET_H #define INFOUNITWIDGET_H #include "infounitwidget.h" #include "infoitemsgroup.h" #include #include #include class InfoUnitWidget : public QWidget { Q_OBJECT public: explicit InfoUnitWidget(QString title, QWidget *parent = 0); ~InfoUnitWidget(); const QString title() const; void setInfoTitle(const QString &title); void setInfoVendor(const QString &vendor); int getCurrentRunningTimeUIIndex(); void refreshInfoItem(const QString &key, const QString &value); protected: QVBoxLayout *m_infoLayout = nullptr; public slots: void addInfoItem(const QString &key, const QString &value); private: InfoItemsGroup *m_infoItemsGroup = nullptr; QLabel *m_titleLabel = nullptr; QLabel *m_vendorLabel = nullptr; int m_currentRunningTimeUIIndex; }; #endif // INFOUNITWIDGET_H youker-assistant/info/infoitemline.h0000664000175000017500000000242513260315532016616 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 INFOITEMLINE_H #define INFOITEMLINE_H #include class QRadioButton; class InfoItemLine : public QFrame { Q_OBJECT public: explicit InfoItemLine(QFrame *parent = 0); ~InfoItemLine(); void setInfoKey(const QString &key); void setInfoValue(const QString &value); QString getLineKey(); signals: void clicked(const QString &context) const; private: QLabel *m_keyLabel = nullptr; QLabel *m_valueLabel = nullptr; QString m_key; int keyWidth; }; #endif // INFOITEMLINE_H youker-assistant/info/infoitemsgroup.cpp0000664000175000017500000000435013260315532017540 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "infoitemsgroup.h" #include "infoitemline.h" #include #include InfoItemsGroup::InfoItemsGroup(QFrame *parent) : QFrame(parent), m_layout(new QVBoxLayout) { m_layout->setMargin(0); m_layout->setSpacing(1); this->setLayout(m_layout); } InfoItemsGroup::~InfoItemsGroup() { /*if (m_layout) { foreach (QObject *child, m_layout->children()) { QWidget *widget = static_cast(child); widget->deleteLater(); } }*/ for (int i = 0; i != m_layout->count(); ++i) { QLayoutItem *child = m_layout->takeAt(0); QWidget *w = child->widget(); w->removeEventFilter(this); w->setParent(nullptr); delete child; child = nullptr; } /*QLayoutItem *child; while ((child = m_layout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; }*/ } int InfoItemsGroup::appendItem(InfoItemLine *item) { m_layout->insertWidget(m_layout->count(), item); item->installEventFilter(this); return m_layout->count() - 1; } void InfoItemsGroup::removeItem(InfoItemLine *item) { m_layout->removeWidget(item); item->removeEventFilter(this); } InfoItemLine *InfoItemsGroup::getInfoItem(int index) { if(index < 0) return NULL; if(index < m_layout->count()) { return qobject_cast(m_layout->itemAt(index)->widget()); } return NULL; } youker-assistant/qdbusservice/0000775000175000017500000000000013265005454015530 5ustar fengfengyouker-assistant/qdbusservice/systemdbus/0000775000175000017500000000000013265005454017732 5ustar fengfengyouker-assistant/qdbusservice/systemdbus/systemdbus.pro0000664000175000017500000000142113260315532022650 0ustar fengfengQT += core dbus QT -= gui TARGET = kylin-assistant-qsystemdbus-service TEMPLATE = app CONFIG += console c++11 link_pkgconfig CONFIG -= app_bundle SOURCES += main.cpp \ systemservice.cpp \ customdata.cpp \ customdatalist.cpp HEADERS += \ systemservice.h \ customdata.h \ customdatalist.h unix { isEmpty(PREFIX) { PREFIX = /usr } } unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } unix { service.files = $$PWD/data/com.kylin.assistant.qsystemdbus.service service.path = $${PREFIX}/share/dbus-1/system-services/ dbus.files = $$PWD/data/com.kylin.assistant.qsystemdbus.conf dbus.path = /etc/dbus-1/system.d/ binary.files = $$TARGET binary.path = $${PREFIX}/lib/kylin-assistant/daemon/ INSTALLS += service dbus binary } youker-assistant/qdbusservice/systemdbus/customdata.h0000664000175000017500000000264113260315532022246 0ustar fengfeng#ifndef CUSTOMDATA_H #define CUSTOMDATA_H #include #include #include #include class CustomData { public: QString hash; QString name; QString description; int index; bool valid; // friend QDebug operator<<(QDebug argument, const CustomData &data); friend QDebug operator<<(QDebug argument, const CustomData &data) { argument << data.name; return argument; } // friend QDBusArgument &operator<<(QDBusArgument &argument, const CustomData &data); friend QDBusArgument &operator<<(QDBusArgument &argument, const CustomData &data) { argument.beginStructure(); argument << data.hash << data.name << data.description << data.index << data.valid; argument.endStructure(); return argument; } friend const QDBusArgument &operator>>(const QDBusArgument &argument, CustomData &data) { argument.beginStructure(); argument >> data.hash >> data.name >> data.description >> data.index >> data.valid; argument.endStructure(); return argument; } bool operator==(const CustomData data) const { return data.hash == hash; } bool operator!=(const CustomData data) const { return data.hash != hash; } // static void registerCustomDataMetaType(); }; Q_DECLARE_METATYPE(CustomData) void registerCustomDataMetaType(); #endif // CUSTOMDATA_H youker-assistant/qdbusservice/systemdbus/systemservice.cpp0000664000175000017500000000351713260315532023345 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "systemservice.h" #include #include #include #include #include SystemService::SystemService(QObject *parent) : QObject(parent) { } SystemService::~SystemService() { this->exitService(); } bool SystemService::userIsActive(const QString &user, bool active) { return true; } QString SystemService::demoInfo() { emit this->reportAlert(0, "demo"); auto callerPid = static_cast(this->connection().interface()->servicePid(this->message().service()).value()); qDebug() << "callerPid="<exit(0); } youker-assistant/qdbusservice/systemdbus/systemservice.h0000664000175000017500000000307113260315532023005 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SYSTEMSERVICE_H #define SYSTEMSERVICE_H #include #include #include #include "customdata.h" class SystemService : public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.kylin.assistant.qsystemdbus") public: explicit SystemService(QObject *parent = 0); virtual ~SystemService(); public slots: Q_SCRIPTABLE bool userIsActive(const QString &user, bool active); Q_SCRIPTABLE QString demoInfo(); Q_SCRIPTABLE CustomData getCustomData(); Q_SCRIPTABLE void sendCustomData(const CustomData &message); Q_SCRIPTABLE void exitService(); signals: Q_SCRIPTABLE void reportAlert(int ret, const QString &description); Q_SCRIPTABLE void alertCustomData(const CustomData &message); }; #endif // SYSTEMSERVICE_H youker-assistant/qdbusservice/systemdbus/customdatalist.h0000664000175000017500000000041113260315532023133 0ustar fengfeng#ifndef CUSTOMDATALIST_H #define CUSTOMDATALIST_H #include #include #include "customdata.h" typedef QList CustomDataList; Q_DECLARE_METATYPE(CustomDataList) void registerCustomDataListMetaType(); #endif // CUSTOMDATALIST_H youker-assistant/qdbusservice/systemdbus/customdatalist.cpp0000664000175000017500000000025513260315532023474 0ustar fengfeng#include "customdatalist.h" void registerCustomDataListMetaType() { qRegisterMetaType("CustomDataList"); qDBusRegisterMetaType(); } youker-assistant/qdbusservice/systemdbus/data/0000775000175000017500000000000013260315533020640 5ustar fengfengyouker-assistant/qdbusservice/systemdbus/data/com.kylin.assistant.qsystemdbus.service0000664000175000017500000000021013260315532030507 0ustar fengfeng[D-BUS Service] Name=com.kylin.assistant.qsystemdbus Exec=/usr/lib/kylin-assistant/daemon/kylin-assistant-qsystemdbus-service User=root youker-assistant/qdbusservice/systemdbus/data/systeminterface.h0000664000175000017500000000516113260315532024220 0ustar fengfeng/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp -v -c SystemInterface -p systeminterface.h:systeminterface.cpp com.kylin.assistant.qsystemdbus.xml * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #ifndef SYSTEMINTERFACE_H #define SYSTEMINTERFACE_H #include #include #include #include #include #include #include #include //NOTICE:add by manual #include "../customdata.h" #include "../customdatalist.h" /* * Proxy class for interface com.kylin.assistant.qsystemdbus */ class SystemInterface: public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "com.kylin.assistant.qsystemdbus"; } public: SystemInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ~SystemInterface(); Q_PROPERTY(CustomDataList Customs READ customs) inline CustomDataList customs() const { return qvariant_cast< CustomDataList >(property("Customs")); } public Q_SLOTS: // METHODS inline QDBusPendingReply demoInfo() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("demoInfo"), argumentList); } inline QDBusPendingReply<> exitService() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("exitService"), argumentList); } inline QDBusPendingReply getCustomData() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("getCustomData"), argumentList); } inline QDBusPendingReply<> sendCustomData(CustomData message) { QList argumentList; argumentList << QVariant::fromValue(message); return asyncCallWithArgumentList(QStringLiteral("sendCustomData"), argumentList); } inline QDBusPendingReply userIsActive(const QString &user, bool active) { QList argumentList; argumentList << QVariant::fromValue(user) << QVariant::fromValue(active); return asyncCallWithArgumentList(QStringLiteral("userIsActive"), argumentList); } Q_SIGNALS: // SIGNALS void alertCustomData(CustomData message); void reportAlert(int ret, const QString &description); }; namespace com { namespace kylin { namespace assistant { typedef ::SystemInterface qsystemdbus; } } } #endif youker-assistant/qdbusservice/systemdbus/data/com.kylin.assistant.qsystemdbus.conf0000664000175000017500000000176613260315532030015 0ustar fengfeng youker-assistant/qdbusservice/systemdbus/data/systemdbusproxy.h0000664000175000017500000000106713260315532024320 0ustar fengfeng#pragma once #include "../customdata.h" #include #include class SystemDbusHandler; class SystemDbusProxy : public QObject { Q_OBJECT public: explicit SystemDbusProxy(QObject *parent = 0); ~SystemDbusProxy(); QString demoInfo(); bool userIsActive(const QString &user, bool active); CustomData getCustomData(); void sendCustomData(const CustomData &message); void exitService(); signals: void reportAlert(int ret, const QString &description); private: SystemDbusHandler *m_handler = nullptr; }; youker-assistant/qdbusservice/systemdbus/data/com.kylin.assistant.qsystemdbus.xml0000664000175000017500000000267613260315532027671 0ustar fengfeng youker-assistant/qdbusservice/systemdbus/data/systeminterface.cpp0000664000175000017500000000135113260315532024550 0ustar fengfeng/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp -v -c SystemInterface -p systeminterface.h:systeminterface.cpp com.kylin.assistant.qsystemdbus.xml * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #include "systeminterface.h" /* * Implementation of interface class SystemInterface */ SystemInterface::SystemInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { } SystemInterface::~SystemInterface() { } youker-assistant/qdbusservice/systemdbus/data/systemdbusproxy.cpp0000664000175000017500000000172513260315532024654 0ustar fengfeng#include "systemdbusproxy.h" #include "systemdbushandler.h" #include #include SystemDbusProxy::SystemDbusProxy(QObject *parent) : QObject(parent) { m_handler = new SystemDbusHandler; QThread *handlerwork = new QThread; m_handler->moveToThread(handlerwork); handlerwork->start(); connect(m_handler, &SystemDbusHandler::reportAlert, this, &SystemDbusProxy::reportAlert); } SystemDbusProxy::~SystemDbusProxy() { this->exitService(); m_handler->deleteLater(); } QString SystemDbusProxy::demoInfo() { return m_handler->demoInfo(); } bool SystemDbusProxy::userIsActive(const QString &user, bool active) { return m_handler->userIsActive(user, active); } CustomData SystemDbusProxy::getCustomData() { return m_handler->getCustomData(); } void SystemDbusProxy::sendCustomData(const CustomData &message) { m_handler->sendCustomData(message); } void SystemDbusProxy::exitService() { m_handler->exitService(); } youker-assistant/qdbusservice/systemdbus/data/systemdbushandler.h0000664000175000017500000000235713260315532024557 0ustar fengfeng#pragma once #include "systemdbusproxy.h" #include "systeminterface.h" #include "../customdata.h" #include #include #include class SystemDbusHandler : public QObject { Q_OBJECT public: explicit SystemDbusHandler(QObject *parent = 0) : QObject(parent) { m_sysDbus = new SystemInterface("com.kylin.assistant.qsystemdbus", "/com/kylin/assistant/qsystemdbus", QDBusConnection::systemBus(), this); connect(m_sysDbus, &SystemInterface::reportAlert, this, &SystemDbusHandler::reportAlert); } QString demoInfo() { return m_sysDbus->demoInfo(); } bool userIsActive(const QString &user, bool active) { return m_sysDbus->userIsActive(user, active); } CustomData getCustomData() { return m_sysDbus->getCustomData(); } void sendCustomData(const CustomData &message) { m_sysDbus->sendCustomData(message); } void exitService() { m_sysDbus->exitService(); } signals: void reportAlert(int ret, const QString &description); private: SystemInterface *m_sysDbus = nullptr; }; youker-assistant/qdbusservice/systemdbus/customdata.cpp0000664000175000017500000000147413260315532022604 0ustar fengfeng#include #include "customdata.h" /*QDBusArgument &operator<<(QDBusArgument &argument, const CustomData &data) { argument.beginStructure(); argument << data.hash << data.name << data.description << data.index << data.valid; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CustomData &data) { argument.beginStructure(); argument >> data.hash >> data.name >> data.description >> data.index >> data.valid; argument.endStructure(); return argument; } void CustomData::registerCustomDataMetaType() { qRegisterMetaType("CustomData"); qDBusRegisterMetaType(); }*/ void registerCustomDataMetaType() { qRegisterMetaType("CustomData"); qDBusRegisterMetaType(); } youker-assistant/qdbusservice/systemdbus/main.cpp0000664000175000017500000000366413260315532021367 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 . */ //qdbusxml2cpp -v -c SystemInterface -p systeminterface.h:systeminterface.cpp com.kylin.assistant.qsystemdbus.xml #include #include #include #include #include "systemservice.h" #include "customdata.h" #include "customdatalist.h" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); app.setOrganizationName("kylin"); app.setApplicationName("kylin-assistant-qsystemdbus-service"); registerCustomDataMetaType(); registerCustomDataListMetaType(); SystemService service; auto connection = QDBusConnection::systemBus(); if (!connection.registerService("com.kylin.assistant.qsystemdbus")) { qCritical() << "QDbus register service failed reason:" << connection.lastError(); exit(1); } if (!connection.registerObject("/com/kylin/assistant/qsystemdbus", &service, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals)) { qCritical() << "QDbus register object failed reason:" << connection.lastError(); exit(2); } return app.exec(); } youker-assistant/qdbusservice/sessiondbus/0000775000175000017500000000000013265005454020071 5ustar fengfengyouker-assistant/qdbusservice/sessiondbus/sessionservice.h0000664000175000017500000000234113260315532023302 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SESSIONSERVICE_H #define SESSIONSERVICE_H #include #include #include class SessionService : public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.kylin.assistant.qsessiondbus") public: explicit SessionService(QObject *parent = 0); virtual ~SessionService(); public slots: Q_SCRIPTABLE QString demoInfo(); Q_SCRIPTABLE void exitService(); }; #endif // SESSIONSERVICE_H youker-assistant/qdbusservice/sessiondbus/sessiondbus.pro0000664000175000017500000000121713260315532023151 0ustar fengfengQT += core dbus QT -= gui TARGET = kylin-assistant-qsessiondbus-service TEMPLATE = app CONFIG += console c++11 link_pkgconfig CONFIG -= app_bundle SOURCES += main.cpp \ sessionservice.cpp \ ./data/sessionadaptor.cpp HEADERS += \ sessionservice.h \ ./data/sessionadaptor.h unix { isEmpty(PREFIX) { PREFIX = /usr } } unix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj } unix { service.files = $$PWD/data/com.kylin.assistant.qsessiondbus.service service.path = $${PREFIX}/share/dbus-1/services/ binary.files = $$TARGET binary.path = $${PREFIX}/lib/kylin-assistant/daemon/ INSTALLS += service binary } youker-assistant/qdbusservice/sessiondbus/sessionservice.cpp0000664000175000017500000000225613260315532023642 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "sessionservice.h" #include #include #include #include #include SessionService::SessionService(QObject *parent) : QObject(parent) { } SessionService::~SessionService() { this->exitService(); } QString SessionService::demoInfo() { return "QtSessionDbus"; } void SessionService::exitService() { qApp->exit(0); } youker-assistant/qdbusservice/sessiondbus/data/0000775000175000017500000000000013260315533020777 5ustar fengfengyouker-assistant/qdbusservice/sessiondbus/data/sessionadaptor.cpp0000664000175000017500000000224113260315532024537 0ustar fengfeng/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp com.kylin.assistant.qsessiondbus.xml -a sessionadaptor -c SessionAdaptor * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "sessionadaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class SessionAdaptor */ SessionAdaptor::SessionAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } SessionAdaptor::~SessionAdaptor() { // destructor } QString SessionAdaptor::demoInfo() { // handle method call com.kylin.assistant.qsessiondbus.demoInfo QString out0; QMetaObject::invokeMethod(parent(), "demoInfo", Q_RETURN_ARG(QString, out0)); return out0; } void SessionAdaptor::exitService() { // handle method call com.kylin.assistant.qsessiondbus.exitService QMetaObject::invokeMethod(parent(), "exitService"); } youker-assistant/qdbusservice/sessiondbus/data/com.kylin.assistant.qsessiondbus.xml0000664000175000017500000000054213260315532030155 0ustar fengfeng youker-assistant/qdbusservice/sessiondbus/data/com.kylin.assistant.qsessiondbus.service0000664000175000017500000000020013260315532031004 0ustar fengfeng[D-BUS Service] Name=com.kylin.assistant.qsessiondbus Exec=/usr/lib/kylin-assistant/daemon/kylin-assistant-qsessiondbus-service youker-assistant/qdbusservice/sessiondbus/data/sessionadaptor.h0000664000175000017500000000246513260315532024214 0ustar fengfeng/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp com.kylin.assistant.qsessiondbus.xml -a sessionadaptor -c SessionAdaptor * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef SESSIONADAPTOR_H #define SESSIONADAPTOR_H #include #include QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface com.kylin.assistant.qsessiondbus */ class SessionAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.kylin.assistant.qsessiondbus") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" "") public: SessionAdaptor(QObject *parent); virtual ~SessionAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS QString demoInfo(); void exitService(); Q_SIGNALS: // SIGNALS }; #endif youker-assistant/qdbusservice/sessiondbus/main.cpp0000664000175000017500000000413613260315532021521 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 . */ //qdbusxml2cpp -a sessionadaptor -c SessionAdaptor -l SessionAdaptor com.kylin.assistant.qsessiondbus.xml //qdbusxml2cpp com.kylin.assistant.qsessiondbus.xml -a sessionadaptor -c SessionAdaptor #include #include #include #include #include "sessionservice.h" #include "./data/sessionadaptor.h" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); app.setOrganizationName("kylin"); app.setApplicationName("kylin-assistant-qsessiondbus-service"); SessionService service; // SessionService *service = new SessionService(); new SessionAdaptor(&service); auto connection = QDBusConnection::sessionBus(); if (!connection.registerService("com.kylin.assistant.qsessiondbus")) { qCritical() << "QDbus register service failed reason:" << connection.lastError(); exit(1); }//QDBusConnection::sessionBus().unregisterService("com.kylin.assistant.qsessiondbus"); if (!connection.registerObject("/com/kylin/assistant/qsessiondbus", &service, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals)) { qCritical() << "QDbus register object failed reason:" << connection.lastError(); exit(2); } return app.exec(); } youker-assistant/qdbusservice/qdbusservice.pro0000664000175000017500000000010013260315532020734 0ustar fengfengTEMPLATE = subdirs SUBDIRS = \ systemdbus \ sessiondbus youker-assistant/component/0000775000175000017500000000000013260315533015030 5ustar fengfengyouker-assistant/component/mythread.cpp0000664000175000017500000000253413260315532017354 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "mythread.h" #include #include #include MyThread::MyThread(QWidget *parent, QString command) { this->m_command = command; } void MyThread::run() { QEventLoop eventloop; QProcess process; connect(&process, SIGNAL(finished(int)), &eventloop, SLOT(quit())); process.start(this->m_command); eventloop.exec(); QString re = process.readAll(); if (!re.contains("Failure")) { this->m_result = true; } else { this->m_result = false; } } bool MyThread::getCommandRunResult() { return this->m_result; } youker-assistant/component/kylinswitcher.cpp0000664000175000017500000000545713260315532020445 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinswitcher.h" #include KylinSwitcher::KylinSwitcher(QWidget *parent) : QWidget(parent) { setWindowFlags(Qt::FramelessWindowHint); switchedOn = false; m_mousePressed = false; pixmap_on.load("://res/switch-on.png"); pixmap_off.load("://res/switch-off.png"); this->setFixedSize(pixmap_on.width(), pixmap_on.height()); this->setCursor(Qt::PointingHandCursor); } void KylinSwitcher::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; } } void KylinSwitcher::mouseReleaseEvent(QMouseEvent *event) { if (m_mousePressed && this->rect().contains(event->pos())) { m_mousePressed = false; switchedOn = !switchedOn; emit clicked(); } update(); } //void KylinSwitcher::enterEvent(QEvent *) //{ // if(this->isEnabled()) { // update(); // } //} void KylinSwitcher::paintEvent(QPaintEvent *) { QPainter painter(this); painter.drawPixmap(QPoint(0,0), pixmap_on); QPoint off_point; if (switchedOn) { off_point = rect().topRight(); } else { off_point = QPoint(this->width() - pixmap_off.width(), this->rect().top()); } painter.drawPixmap(off_point, pixmap_off); if(switchedOn) { QRect rectON; // rectON.setTopLeft(rect().topLeft()); rectON.setTopLeft(QPoint(rect().topLeft().x() + 10, rect().topLeft().y())); rectON.setBottomRight(QPoint(pixmap_off.width(), pixmap_off.height())); this->setStyleSheet("QWidget{color:#ffffff;font-size:12px;}"); painter.drawText(rectON, Qt::AlignLeft | Qt::AlignVCenter, tr("ON")); } else { QRect rectOFF; rectOFF.setTopLeft(rect().topLeft()); // rectOFF.setBottomRight(QPoint(pixmap_off.width(), pixmap_off.height())); rectOFF.setBottomRight(QPoint(pixmap_off.width() - 10, pixmap_off.height())); this->setStyleSheet("QWidget{color:#7c8487;font-size:12px;}"); painter.drawText(rectOFF, Qt::AlignRight|Qt::AlignVCenter, tr("OFF")); } } youker-assistant/component/kylinbutton.cpp0000664000175000017500000000435313260315532020122 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinbutton.h" KylinButton::KylinButton(QWidget *parent) :QPushButton(parent) { status = NORMAL; m_mousePressed = false; } KylinButton::~KylinButton() { } void KylinButton::setPicName(QString pic_name) { this->pic_name = pic_name; setFixedSize(QPixmap(pic_name).size()); } void KylinButton::enterEvent(QEvent *) { status = ENTER; update(); } void KylinButton::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; status = PRESS; update(); } } void KylinButton::mouseReleaseEvent(QMouseEvent *event) { if(m_mousePressed && this->rect().contains(event->pos())) { m_mousePressed = false; status = ENTER; update(); emit clicked(); } } void KylinButton::leaveEvent(QEvent *) { status = NORMAL; update(); } void KylinButton::paintEvent(QPaintEvent *) { QPainter painter(this); QPixmap pixmap; switch(status) { case NORMAL: { pixmap.load(pic_name); break; } case ENTER: { pixmap.load(pic_name + QString("_hover")); break; } case PRESS: { pixmap.load(pic_name + QString("_pressed")); break; } case NOSTATUS: { pixmap.load(pic_name); break; } default: pixmap.load(pic_name); } painter.drawPixmap(rect(), pixmap); } youker-assistant/component/kylinfontdialog.cpp0000664000175000017500000004050213260315532020731 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinfontdialog.h" #include "utils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include KylinFontDialog::KylinFontDialog(/*QSettings *mSettings, QString flag, */QString cur_font, QString skin, QWidget *parent) : QDialog(parent) { this->setFixedSize(600, 500); this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setWindowIcon(QIcon(":/res/kylin-assistant.png")); this->setAttribute(Qt::WA_DeleteOnClose); this->setWindowFlags(Qt::FramelessWindowHint); this->setAutoFillBackground(true); /*title_bar = new KylinTitleBar(); initTitleBar(skin);*/ title_bar = new MyTitleBar(tr("Font Dialog"), false, this); title_bar->setFixedSize(this->width(), TITLE_BAR_HEIGHT); cur_tip_label = new QLabel(); cur_font_label = new QLabel(); font_label = new QLabel(); style_label = new QLabel(); size_label = new QLabel(); font_edit = new QLineEdit(); style_edit = new QLineEdit(); size_edit = new QLineEdit(); font_view = new QListView(); style_view = new QListView(); size_view = new QListView(); sample_label = new QLabel(); sample_edit = new QLineEdit(); ok_btn = new QPushButton(); cacel_btn = new QPushButton(); ok_btn->setFixedSize(91, 25); ok_btn->setObjectName("blackButton"); ok_btn->setFocusPolicy(Qt::NoFocus); cacel_btn->setFixedSize(91, 25); cacel_btn->setObjectName("blackButton"); cacel_btn->setFocusPolicy(Qt::NoFocus); font_edit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); style_edit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); size_edit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); sample_edit->setStyleSheet("QLineEdit{border:1px solid #bebebe;}"); style_label->setFixedWidth(140); style_edit->setFixedWidth(140); style_view->setFixedWidth(140); size_label->setFixedWidth(60); size_edit->setFixedWidth(60); size_view->setFixedWidth(60); font_edit->setReadOnly(true); font_edit->setFocusProxy(font_view); font_label->setBuddy(font_view); style_edit->setReadOnly(true); style_edit->setFocusProxy(style_view); style_label->setBuddy(style_view); size_edit->setReadOnly(true); size_edit->setFocusProxy(size_view); size_label->setBuddy(size_view); sample_edit->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored)); sample_edit->setAlignment(Qt::AlignCenter); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->addWidget(cur_tip_label); layout1->addWidget(cur_font_label); layout1->addStretch(); layout1->setSpacing(5); layout1->setMargin(0); layout1->setContentsMargins(10, 0, 0, 0); QVBoxLayout *layout2 = new QVBoxLayout(); layout2->addWidget(font_label); layout2->addWidget(font_edit); layout2->addWidget(font_view); QVBoxLayout *layout3 = new QVBoxLayout(); layout3->addWidget(style_label); layout3->addWidget(style_edit); layout3->addWidget(style_view); QVBoxLayout *layout4 = new QVBoxLayout(); layout4->addWidget(size_label); layout4->addWidget(size_edit); layout4->addWidget(size_view); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->addLayout(layout2); layout5->addLayout(layout3); layout5->addLayout(layout4); layout5->setSpacing(10); layout5->setMargin(0); layout5->setContentsMargins(10, 0, 10, 0); QVBoxLayout *layout6 = new QVBoxLayout(); layout6->addWidget(cacel_btn); layout6->addWidget(ok_btn); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->addWidget(sample_edit); // layout7->addStretch(); layout7->addLayout(layout6); QVBoxLayout *layout8 = new QVBoxLayout(); layout8->addWidget(sample_label); layout8->addLayout(layout7); layout8->setSpacing(5); layout8->setMargin(0); layout8->setContentsMargins(10, 0, 10, 10); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(title_bar); main_layout->addLayout(layout1); main_layout->addLayout(layout5); main_layout->addLayout(layout8); main_layout->setSpacing(5); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); cur_font_label->setText(cur_font); familymodel = new QStringListModel; stylemodel = new QStringListModel; sizemodel = new QStringListModel; this->initDialog();//初始化字体对话框 //边框阴影效果 QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); shadow_effect->setBlurRadius(5); shadow_effect->setColor(QColor(0, 0, 0, 127)); shadow_effect->setOffset(2, 4); this->setGraphicsEffect(shadow_effect); this->setLanguage(); this->initConnect(); this->moveCenter(); } KylinFontDialog::~KylinFontDialog() { if (familymodel != NULL) { delete familymodel; familymodel = NULL; } if (stylemodel != NULL) { delete stylemodel; stylemodel = NULL; } if (sizemodel != NULL) { delete sizemodel; sizemodel = NULL; } if (title_bar != NULL) { delete title_bar; title_bar = NULL; } if (cur_tip_label != NULL) { delete cur_tip_label; cur_tip_label = NULL; } if (cur_font_label != NULL) { delete cur_font_label; cur_font_label = NULL; } if (font_label != NULL) { delete font_label; font_label = NULL; } if (style_label != NULL) { delete style_label; style_label = NULL; } if (size_label != NULL) { delete size_label; size_label = NULL; } if (font_edit != NULL) { delete font_edit; font_edit = NULL; } if (style_edit != NULL) { delete style_edit; style_edit = NULL; } if (size_edit != NULL) { delete size_edit; size_edit = NULL; } if (font_view != NULL) { delete font_view; font_view = NULL; } if (style_view != NULL) { delete style_view; style_view = NULL; } if (size_view != NULL) { delete size_view; size_view = NULL; } if (sample_label != NULL) { delete sample_label; sample_label = NULL; } if (sample_edit != NULL) { delete sample_edit; sample_edit = NULL; } if (ok_btn != NULL) { delete ok_btn; ok_btn = NULL; } if (cacel_btn != NULL) { delete cacel_btn; cacel_btn = NULL; } } void KylinFontDialog::moveCenter() { QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); } void KylinFontDialog::setLanguage() { cur_tip_label->setText(tr("Current Font") + ":"); font_label->setText(tr("Font")); style_label->setText(tr("Style")); size_label->setText(tr("Size")); sample_label->setText(tr("View")); ok_btn->setText(tr("OK")); cacel_btn->setText(tr("Cancel")); } void KylinFontDialog::initConnect() { // connect(title_bar, SIGNAL(showMinDialog()), this, SLOT(onMinButtonClicked())); // connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCacelButtonClicked())); connect(title_bar, SIGNAL(closeSignal()), this, SLOT(onCacelButtonClicked())); connect(font_view, SIGNAL(clicked(QModelIndex)), this, SLOT(updateAll(QModelIndex))); connect(style_view, SIGNAL(clicked(QModelIndex)), this, SLOT(updateStyleandSize(QModelIndex))); connect(size_view, SIGNAL(clicked(QModelIndex)), this, SLOT(updateSize(QModelIndex))); connect(cacel_btn, SIGNAL(clicked()), this, SLOT(onCacelButtonClicked())); connect(ok_btn, SIGNAL(clicked()), this, SLOT(onOKButtonClicked())); } void KylinFontDialog::onCacelButtonClicked() { this->close(); } void KylinFontDialog::onOKButtonClicked() { if(font_edit->text().isEmpty()) { //提示 您还没有更换字体,请选择字体进行更换! QMessageBox::warning(NULL, tr("Tips"), tr("You haven't change the font, please choose the font!"), QMessageBox::Ok); } else { selectedFont = font_edit->text().append(" ").append(style_edit->text().append(" ").append(size_edit->text())); emit this->rebackCurrentFont(selectedFont); this->accept(); } } void KylinFontDialog::initTitleBar(QString skin) { // title_bar->setTitleWidth(600); // title_bar->setTitleName(tr("Font Dialog")); //// title_bar->setTitleBackgound(":/background/res/skin/1.png"); // title_bar->setTitleBackgound(skin); } void KylinFontDialog::initDialog() { //列出所有字体的名字 QStringList familyNames = fdb.families(); familymodel->setStringList(familyNames); font_view->setModel(familymodel); QModelIndex index; index = familymodel->index(0); font_view->setCurrentIndex(index); //列出系统对应的所有风格 QStringList familystyles = fdb.styles(font_view->currentIndex().data().toString()); stylemodel->setStringList(familystyles); style_view->setModel(stylemodel); index = stylemodel->index(0); style_view->setCurrentIndex(index); //列出所有字体及其风格对应的所有大小 QList sizes = fdb.pointSizes(font_view->currentIndex().data().toString(), style_view->currentIndex().data().toString()); QStringList str_sizes; for(QList::const_iterator it = sizes.constBegin(); it != sizes.constEnd(); ++it) { str_sizes.append(QString::number(*it)); } sizemodel->setStringList(str_sizes); size_view->setModel(sizemodel); //默认的字体大小显示为11 bool flag = false; int row = -1; for(QStringList::Iterator m = str_sizes.begin(); m != str_sizes.end(); ++m) { row++; QString size = *m; if("11" == size) {//默认字体大小存在列表中 index = sizemodel->index(row); size_view->setCurrentIndex(index); flag = true; break; } } if(flag == false) {//11不存在列表中,此时让光标定位在第一个大小上面 index = sizemodel->index(0); size_view->setCurrentIndex(index); } } void KylinFontDialog::updateSampleFont() { QFont font(fdb.font(font_edit->text(), style_edit->text(), size_edit->text().toInt())); if (font != sample_edit->font()) { sample_edit->setFont(font); } } void KylinFontDialog::updateAll(QModelIndex index) { font_edit->setText(index.data().toString()); QModelIndex styleindex = stylemodel->index(0); //更新stylemodel QStringList familystyles = fdb.styles(font_edit->text()); stylemodel->setStringList(familystyles); style_view->setModel(stylemodel); //设置光标默认值 style_view->setCurrentIndex(styleindex); style_edit->setText(style_view->currentIndex().data().toString()); //列出所有字体及其风格对应的所有大小 //更新sizemodel bool sizeFlag = false; int num = 0; QList sizes = fdb.pointSizes(font_edit->text(), style_edit->text()); QStringList str_sizes; int row = -1; for(QList::const_iterator it = sizes.constBegin(); it != sizes.constEnd(); ++it) { row++; str_sizes.append(QString::number(*it)); if(*it == 11) { sizeFlag = true; num = row; } } sizemodel->setStringList(str_sizes); size_view->setModel(sizemodel); QModelIndex sizeindex; //更新时如果大小列表中存在11,则大小的默认值设为11 if(sizeFlag == false) { sizeindex = sizemodel->index(0); size_view->setCurrentIndex(sizeindex); size_edit->setText(size_view->currentIndex().data().toString()); } else { sizeFlag = false; sizeindex = sizemodel->index(num); size_view->setCurrentIndex(sizeindex); size_edit->setText(size_view->currentIndex().data().toString()); } QString curStr = font_edit->text().append(" ").append(style_edit->text().append(" ").append(size_edit->text())); cur_font_label->setText(curStr); sample_edit->setText("Ubuntu Kylin:做最有中国味的操作系统!"); updateSampleFont(); } void KylinFontDialog::updateStyleandSize(QModelIndex index) { style_edit->setText(index.data().toString()); //列出所有字体及其风格对应的所有大小 //更新sizemodel bool sizeFlag = false; int num = 0; QList sizes = fdb.pointSizes(font_edit->text(), style_edit->text()); QStringList str_sizes; int row = -1; for(QList::const_iterator it = sizes.constBegin(); it != sizes.constEnd(); ++it) { row++; str_sizes.append(QString::number(*it)); if(*it == 11) { sizeFlag = true; num = row; } } sizemodel->setStringList(str_sizes); size_view->setModel(sizemodel); //更新时如果大小列表中存在11,则大小的默认值设为11 QModelIndex sizeindex; if(sizeFlag == false) { sizeindex = sizemodel->index(0); size_view->setCurrentIndex(sizeindex); size_edit->setText(size_view->currentIndex().data().toString()); } else { sizeFlag = false; sizeindex = sizemodel->index(num); size_view->setCurrentIndex(sizeindex); size_edit->setText(size_view->currentIndex().data().toString()); } QString curfont = font_edit->text(); if(!curfont.isEmpty()) { QString curStr = font_edit->text().append(" ").append(style_edit->text().append(" ").append(size_edit->text())); cur_font_label->setText(curStr); updateSampleFont(); } } void KylinFontDialog::updateSize(QModelIndex index) { size_edit->setText(index.data().toString()); QString curfont = font_edit->text(); if(!curfont.isEmpty()) { QString curStr = font_edit->text().append(" ").append(style_edit->text().append(" ").append(size_edit->text())); cur_font_label->setText(curStr); updateSampleFont(); } } void KylinFontDialog::resetTitleSkin(QString skin) { // title_bar->resetBackground(skin); } bool KylinFontDialog::eventFilter(QObject *obj, QEvent *event) { if(obj == ok_btn ||obj == cacel_btn) { if(event->type() == QEvent::MouseButtonPress) { QMouseEvent *me = (QMouseEvent *)event; dragPos = me->globalPos() - frameGeometry().topLeft(); } else if(event->type() == QEvent::MouseButtonRelease) { setWindowOpacity(1); } } return QObject::eventFilter(obj, event); } void KylinFontDialog::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { dragPos = event->globalPos() - frameGeometry().topLeft(); event->accept(); } } void KylinFontDialog::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton ) { move(event->globalPos() - dragPos); setWindowOpacity(1);//0.5 } event->accept(); } void KylinFontDialog::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { setWindowOpacity(1); } event->accept(); } youker-assistant/component/toolkits.cpp0000664000175000017500000000574113260315532017412 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "toolkits.h" Toolkits::Toolkits(QObject *parent, int width, int height) : QObject(parent), parent_width(width), parent_height(height) { this->alert_width = 200; this->alert_height = 75; alertBG = new AlertDialog(); this->alertTimer = new QTimer(this); connect(alertTimer, SIGNAL(timeout()), this, SLOT(updateAlert())); this->alertDelayTimer = new QTimer(this); connect(alertDelayTimer, SIGNAL(timeout()), this, SLOT(hideAlert())); this->alertGOE = new QGraphicsOpacityEffect(); this->alertBG->setGraphicsEffect(alertGOE); this->ao = 0.0; this->alertBG->hide(); } Toolkits::~Toolkits() { if(alertGOE != NULL) { delete alertGOE; alertGOE = NULL; } if(alertBG != NULL) { delete alertBG; alertBG = NULL; } if (alertTimer != NULL) { disconnect(alertTimer,SIGNAL(timeout()),this,SLOT(updateAlert())); if(alertTimer->isActive()) { alertTimer->stop(); } delete alertTimer; alertTimer = NULL; } if (alertDelayTimer != NULL) { disconnect(alertDelayTimer,SIGNAL(timeout()),this,SLOT(hideAlert())); if(alertDelayTimer->isActive()) { alertDelayTimer->stop(); } delete alertDelayTimer; alertDelayTimer = NULL; } } //启动alert提示 void Toolkits::alertMSG(int x, int y, const QString &alertText) { this->alert_x = x + (this->parent_width / 2) - (this->alert_width / 2); this->alert_y = y + (this->parent_height /2) - (this->alert_height / 2); this->ay = this->alert_y; this->ao = 0.0; this->alertBG->move(this->alert_x, this->alert_y); this->alertGOE->setOpacity(this->ao); this->alertBG->setMSG(alertText); this->alertBG->show(); this->alertTimer->start(15); } //alert提示框的步处理 void Toolkits::updateAlert() { if(this->ao < 0.90){ this->ao += 0.02; this->alertGOE->setOpacity(this->ao); } if(this->ay <= (this->alert_y - 150)){ this->alertTimer->stop(); //5秒后自动关闭alert提示框 this->alertDelayTimer->start(1000); }else{ this->ay -= 3; this->alertBG->move(this->alert_x,this->ay); } } //隐藏alert提示框 void Toolkits::hideAlert() { this->alertBG->hide(); this->alertDelayTimer->stop(); } youker-assistant/component/kylinlistwidgetitem.h0000664000175000017500000000240313260315532021304 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 . */ #pragma once #include class MainWindow; class KylinListWidgetItem :public QListWidgetItem { public: KylinListWidgetItem(const QIcon &icon, const QString &text, QListWidget *view = 0, int type = Type); ~KylinListWidgetItem(); void paintPointSkin(); void setMainWindow(MainWindow *window) { mainwindow = window; } void setSkinName(QString picture) {point_skin = picture;} QString getSkinName() {return point_skin;} private: MainWindow *mainwindow; QString point_skin; }; youker-assistant/component/quibo.ui0000664000175000017500000000116213260315532016505 0ustar fengfeng QUIBO 0 0 400 300 Form 0 0 5000 5000 youker-assistant/component/myswitcher.cpp0000664000175000017500000000373113260315532017735 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "myswitcher.h" #include #include #include #include MySwitcher::MySwitcher(QWidget *parent) : QFrame(parent), m_isOn(false) { this->setFixedSize(76, 29); m_offImage.load("://res/off.png"); m_onImage.load("://res/on.png"); } bool MySwitcher::isOn() const { return m_isOn; } void MySwitcher::setOnStatus(bool b) { if (m_isOn != b) { m_isOn = b; emit this->statusChanged(b); this->update(); } } void MySwitcher::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->setOnStatus(!m_isOn); event->accept(); } } void MySwitcher::paintEvent(QPaintEvent *event) { QPixmap *m_nowImagePix; if(this->m_isOn) { m_nowImagePix = &m_onImage; } else { m_nowImagePix = &m_offImage; } if(m_nowImagePix->isNull()) return; QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing, true); QPainterPath path; path.addRoundedRect(rect(), m_nowImagePix->height() / 2.0, m_nowImagePix->height() / 2.0); path.closeSubpath(); painter.setClipPath(path); painter.drawPixmap(rect(), *m_nowImagePix); } youker-assistant/component/kylinlistmodel.h0000664000175000017500000000247013260315532020246 0ustar fengfeng#pragma once #include #include #include class KylinListModel : public QAbstractListModel { public: KylinListModel(); ~KylinListModel(); virtual QModelIndex index (int row, int column = 0, const QModelIndex & parent = QModelIndex()) const; QVariant data (const QModelIndex & index, int role = Qt::DisplayRole ) const; virtual bool setData (const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); int rowCount (const QModelIndex & parent = QModelIndex() ) const; int columnCount (const QModelIndex & parent = QModelIndex() ) const; bool insertRows (int row, int count, const QModelIndex & parent = QModelIndex()); bool insertColumns (int column, int count, const QModelIndex & parent = QModelIndex()); bool removeRows (int row, int count, const QModelIndex & parent = QModelIndex() ); bool removeColumns (int column, int count, const QModelIndex & parent = QModelIndex()); QVariant headerData(int section,Qt::Orientation,int role) const; void setTitle(QStringList title) { m_title = title;} void setGuid(QString guid) { m_guid_list.append(guid);} QString getGuid(int index) { return m_guid_list.at(index);} private: QList m_data; QStringList m_title; QStringList m_guid_list; }; youker-assistant/component/alertdialog.cpp0000664000175000017500000000277413260315532020034 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "alertdialog.h" #include "ui_alertdialog.h" AlertDialog::AlertDialog(QWidget *parent) : QWidget(parent), ui(new Ui::AlertDialog) { ui->setupUi(this); this->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint); this->setAttribute(Qt::WA_TranslucentBackground); connect(ui->alertBG,SIGNAL(clicked()),this,SLOT(hide())); ui->alertBG->setStyleSheet("QPushButton{background-image:url('://res/alert.png');border:0px;padding-top:-10px;}"); ui->alertBG->setFocusPolicy(Qt::NoFocus); // this->hide(); } AlertDialog::~AlertDialog() { delete ui; } void AlertDialog::paintEvent(QPaintEvent *) { QPainter painter(this); QStyleOption opt; opt.init(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); } void AlertDialog::setMSG(QString msg) { ui->alertBG->setText(msg); } youker-assistant/component/basewidget.cpp0000664000175000017500000000124213260315532017650 0ustar fengfeng#include "basewidget.h" #include #include BaseWidget::BaseWidget(QWidget *parent) : QWidget(parent) { this->initUI(); this->initConnect(); } void BaseWidget::initUI() { m_vLayout = new QVBoxLayout; } void BaseWidget::initConnect() { } void BaseWidget::insertWidget(QWidget *widget) { m_vLayout->addWidget(widget); m_vLayout->setContentsMargins(0, 0, 0, 0); m_vLayout->setSpacing(0); this->setLayout(m_vLayout); } void BaseWidget::insertLayout(QLayout *layout) { m_vLayout->addLayout(layout); m_vLayout->setContentsMargins(0, 0, 0, 0); m_vLayout->setSpacing(0); this->setLayout(m_vLayout); } youker-assistant/component/loadinglabel.cpp0000664000175000017500000000606013260315532020152 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "loadinglabel.h" #include #include #include LoadingLabel::LoadingLabel(QWidget *parent, QString flag) : QLabel(parent), category(flag) { if(category == "firstkey") { page_count = 18; this->setFixedSize(150, 150); } else if(category == "clean") { page_count = 18; this->setFixedSize(96, 96); } else if(category == "upgrading") { page_count = 32; this->setFixedSize(182, 181); } else if(category == "working") { page_count = 36; this->setFixedSize(182, 181); } this->setWindowFlags(Qt::FramelessWindowHint); this->setAttribute(Qt::WA_TranslucentBackground, true); currentpage = 0; timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(changeAnimationStep())); this->loadAllPictures(); this->raise(); //init animation QPixmap cur_pix = png_vector.at(0); this->setPixmap(cur_pix); setMask(QBitmap(cur_pix.mask())); } LoadingLabel::~LoadingLabel() { if (timer != NULL) { disconnect(timer,SIGNAL(timeout()),this,SLOT(changeAnimationStep())); if(timer->isActive()) { timer->stop(); } delete timer; timer = NULL; } } void LoadingLabel::changeAnimationStep() { if(currentpage == this->page_count) { currentpage = 0; } // qDebug() << currentpage; QPixmap cur_pix = png_vector.at(currentpage); this->setPixmap(cur_pix); setMask(QBitmap(cur_pix.mask())); currentpage += 1; } void LoadingLabel::loadAllPictures() { QString path; if(category == "firstkey") { path = ":/movie/res/loading/"; } else if(category == "clean") { path = ":/movie/res/loading/small/"; } else if(category == "upgrading") { path = ":/movie/res/upgrading/"; } else if(category == "working") { path = ":/movie/res/working/"; } for(int i =1; i <= this->page_count; i++) { QPixmap img = QPixmap(path + QString::number(i, 10) + ".png"); png_vector.append(img); } } void LoadingLabel::startLoading() { currentpage = 0; if(category == "upgrading" || category == "working") timer->start(50); else timer->start(60); } void LoadingLabel::stopLoading() { timer->stop(); } youker-assistant/component/kylinlistview.h0000664000175000017500000000203513260315532020115 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINLISTVIEW_H #define KYLINLISTVIEW_H #include class KylinListView : public QListView { Q_OBJECT public: KylinListView(QWidget *parent); ~KylinListView(); protected: virtual bool viewportEvent(QEvent *pEvent); private: }; #endif // KYLINLISTVIEW_H youker-assistant/component/basewidget.h0000664000175000017500000000061613260315532017321 0ustar fengfeng#ifndef BASEWIDGET_H #define BASEWIDGET_H #include class QVBoxLayout; class BaseWidget : public QWidget { Q_OBJECT public: explicit BaseWidget(QWidget *parent = 0); void insertWidget(QWidget *widget); void insertLayout(QLayout *layout); void initUI(); void initConnect(); signals: public slots: private: QVBoxLayout *m_vLayout; }; #endif // BASEWIDGET_H youker-assistant/component/mytitlebar.h0000664000175000017500000000273213260315532017360 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MYTITLEBAR_H #define MYTITLEBAR_H #include class QHBoxLayout; class MyTitleBar : public QFrame { Q_OBJECT public: MyTitleBar(const QString &title = "", bool needMin = false, QWidget *parent = 0); ~MyTitleBar(); void setLeftContent(QWidget *content); void setMiddleContent(QWidget *content); void initLeftContent(); void initMiddleContent(); void initRightContent(); void initWidgets(); signals: void minSignal(); void closeSignal(); private: QString m_title; bool m_needMin; QHBoxLayout *m_layout = nullptr; QHBoxLayout *m_lLayout = nullptr; QHBoxLayout *m_mLayout = nullptr; QHBoxLayout *m_rLayout = nullptr; }; #endif // MYTITLEBAR_H youker-assistant/component/selectcategorywidget.h0000664000175000017500000000361313260315532021424 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SELECTCATEGORYWIDGET_H #define SELECTCATEGORYWIDGET_H #include #include #include #include "mytitlebar.h" #include "selectlistwidget.h" #include "../component/utils.h" class SelectCategoryWidget : public QDialog { Q_OBJECT public: SelectCategoryWidget(CleanerCategoryID id = InvalidCategory, const QString &title = "", bool needMin = false, QWidget *parent = 0); ~SelectCategoryWidget(); void loadData(const QStringList &arglist, const QStringList &statuslist); void moveCenter(); public slots: void onClose(); signals: void notifyMainCheckBox(int status); void refreshSelectedItems(CleanerCategoryID id, const QStringList &selecteds); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: CleanerCategoryID m_id; QVBoxLayout *m_mainLayout = nullptr; MyTitleBar *m_titleBar = nullptr; SelectListWidget *m_listWidget = nullptr; QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 }; #endif // SELECTCATEGORYWIDGET_H youker-assistant/component/tipdialog.cpp0000664000175000017500000000577713260315532017527 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "tipdialog.h" #include "mainwindow.h" #include #include TipDialog::TipDialog(QWidget *parent, QString msg) :QDialog(parent), message(msg) { this->setStyleSheet("QDialog{border: 1px solid white;border-radius:1px;background-color: #ffffff;}"); this->setFixedSize(410, 180); setWindowFlags(Qt::FramelessWindowHint); title_bar = new KylinTitleBar(); initTitleBar(); msg_label = new QLabel(); msg_label->setWordWrap(true);//QLabel自动换行 msg_label->setFixedWidth(380); msg_label->setText(message); okBtn = new QPushButton(); okBtn->setFixedSize(91, 25); okBtn->setObjectName("blackButton"); okBtn->setFocusPolicy(Qt::NoFocus); QHBoxLayout *h_layout = new QHBoxLayout(); h_layout->addStretch(); h_layout->addWidget(okBtn); h_layout->setMargin(0); h_layout->setContentsMargins(0,0,0,0); QVBoxLayout *v_layout = new QVBoxLayout(); v_layout->addWidget(msg_label); v_layout->addLayout(h_layout); v_layout->setSpacing(40); v_layout->setMargin(0); v_layout->setContentsMargins(10, 40, 10, 0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(title_bar); main_layout->addLayout(v_layout); main_layout->addStretch(); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->setLanguage(); this->initConnect(); } TipDialog::~TipDialog() { if(title_bar != NULL) { delete title_bar; title_bar = NULL; } if(msg_label != NULL) { delete msg_label; msg_label = NULL; } if(okBtn != NULL) { delete okBtn; okBtn = NULL; } } void TipDialog::setLanguage() { okBtn->setText(tr("OK")); } void TipDialog::onOKButtonClicked() { this->close(); } void TipDialog::initConnect() { connect(title_bar,SIGNAL(closeDialog()), this, SLOT(onCloseButtonClicked())); connect(okBtn,SIGNAL(clicked()), this, SLOT(onOKButtonClicked())); } void TipDialog::onCloseButtonClicked() { this->close(); } void TipDialog::initTitleBar() { title_bar->setTitleWidth(410); title_bar->setTitleName(tr("Tip Dialog")); title_bar->setTitleBackgound(":/background/res/skin/1.png"); } youker-assistant/component/scrollwidget.cpp0000664000175000017500000000601413260315532020236 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "scrollwidget.h" #include "../info/computerpage.h" #include #include "../component/utils.h" ScrollWidget::ScrollWidget(QWidget *parent) : QWidget(parent) { // this->setStyleSheet("QWidget{border: none;background-color: #ffffff;}"); this->setWindowFlags(Qt::FramelessWindowHint); widget_count = 0; zone_height = 403; scroll_area = new QScrollArea(); zone = new QWidget(); //set white background color zone->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); zone->setPalette(palette); scroll_area->setGeometry(-1, -1, 750+2, 403); zone->setGeometry(0,0,750,403); zone->setWindowFlags(Qt::FramelessWindowHint); scroll_area->setWidget(zone); scroll_area->horizontalScrollBar()->hide(); // scroll_area->setBackgroundRole(QPalette::Dark); scroll_area->setAlignment(Qt::AlignLeft); scroll_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scroll_area->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); QVBoxLayout *v_layout = new QVBoxLayout(); v_layout->addWidget(scroll_area); v_layout->setSpacing(0);//设置间隔 v_layout->setMargin(0);//设置总的外围边框 // v_layout->setContentsMargins(5, 5, 5, 5); setLayout(v_layout); } ScrollWidget::~ScrollWidget() { if(zone != NULL) { delete zone; zone = NULL; } if(scroll_area != NULL) { delete scroll_area; scroll_area = NULL; } } void ScrollWidget::addScrollWidget(ComputerPage *widget) { if (widget_count == 0) { widget->move(0,0); // if(widget->page_height > zone->height()) { // zone_height = widget->page_height; // this->zone->resize(750, zone_height); // } // else { // this->zone->resize(750, 403-3); // } zone_height = widget->page_height; this->zone->resize(750, zone_height); } else { int y = zone_height/* + PAGESPACE*/; zone_height += widget->page_height/* + PAGESPACE*/; if(zone_height > zone->height()) { this->zone->resize(750, zone_height); } widget->move(0, y); } widget_count ++; } void ScrollWidget::resetWidget() { widget_count = 0; zone_height = 403; } youker-assistant/component/selectlistitem.cpp0000664000175000017500000000505713260315532020574 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "selectlistitem.h" SelectListItem::SelectListItem(QWidget *parent, QString description, QString tipMsg, bool hasTip, int itemWidth) : QWidget(parent) , m_description(description) , m_tip(tipMsg) , m_hasTip(hasTip) { this->setStyleSheet("QWidget{padding: 2px 0;} QWidget:hover{background-color:rgba(43,182,234,0.1);border-radius:2px;}");//#2bb6ea this->setFixedHeight(30); m_mainLayout = new QHBoxLayout(this); m_mainLayout->setSpacing(0); m_mainLayout->setMargin(0); m_mainLayout->setContentsMargins(0,0,0,0); m_checkBox = new QCheckBox(this); m_checkBox->setFixedSize(20, 13); m_checkBox->setFocusPolicy(Qt::NoFocus); m_checkBox->setChecked(true); connect(m_checkBox, &QCheckBox::clicked, [=] (bool checked) { emit this->selectedSignal(checked, this->itemDescription()); }); int maxWidth = itemWidth - m_checkBox->width(); m_descLabel = new QLabel(this); m_descLabel->setFixedWidth(maxWidth); QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(description, Qt::ElideMiddle, maxWidth); m_descLabel->setText(elided_text); /*QFont font; font.setPixelSize(12); const QFontMetrics fm(font); QString msg = fm.elidedText(description, Qt::ElideMiddle, maxWidth); // m_descLabel->setWordWrap(true); m_descLabel->setText(msg);*/ m_mainLayout->setAlignment(Qt::AlignLeft); m_mainLayout->addWidget(m_checkBox, 0, Qt::AlignLeft | Qt::AlignVCenter); m_mainLayout->addWidget(m_descLabel, 0, Qt::AlignLeft | Qt::AlignVCenter); } SelectListItem::~SelectListItem() { } bool SelectListItem::itemIsChecked() { return m_checkBox->isChecked(); } QString SelectListItem::itemDescription() { if (m_hasTip) return this->m_tip; else return this->m_description; } youker-assistant/component/labelgroup.cpp0000664000175000017500000000402213260315532017665 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "labelgroup.h" #include "utils.h" #include LabelGroup::LabelGroup(QWidget *parent) : QWidget(parent) { this->resize(ITEMWIDTH, ITEMHEIGHT); //边框 // this->setStyleSheet("border:1px solid black;"); //背景 // this->setAutoFillBackground(true); // QPalette palette; //// palette.setColor(QPalette::Background, QColor(192,253,123)); // palette.setBrush(QPalette::Background, QBrush(QPixmap(":/background/res/bg/6.png"))); // this->setPalette(palette); h_layout = new QHBoxLayout(); key_info = new QLabel(); value_info = new QLabel(); key_info->setFixedSize(180, ITEMHEIGHT); value_info->setFixedHeight(ITEMHEIGHT); QFont font = key_info->font(); font.setPointSize(14); key_info->setFont(font); key_info->setObjectName("titleLabel"); value_info->setFont(font); value_info->setObjectName("grayLabel"); h_layout->addWidget(key_info); h_layout->addWidget(value_info); h_layout->setMargin(0);//设置总的外围边框 setLayout(h_layout); } //void LabelGroup::pushMap(QString key, QString value) //{ // this->name[key] = value; //} void LabelGroup::setLanguage(QString key, QString value) { key_info->setText(tr("%1:").arg(key)); value_info->setText(tr("%1").arg(value)); } youker-assistant/component/normalwidget.cpp0000664000175000017500000000707413260315532020237 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "normalwidget.h" #include #include "../component/utils.h" NormalWidget::NormalWidget(int cardwidth, int cardheight, int space, QWidget *parent) : QWidget(parent) { cardcount = 0; number_per_row = -1; this->itemwidth = cardwidth; this->itemheight = cardheight; this->cardspace = space; scrollArea = new QScrollArea(this); scrollArea->setStyleSheet("QScrollArea{border: none;background-color: #ffffff;}"); cardPanel = new QWidget(); cardPanel->setStyleSheet("QWidget{border: none;background-color: #ffffff;}"); this->scrollArea->setWidget(this->cardPanel); this->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); this->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); this->scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{margin:0px 0px 0px 0px;background-color:rgb(255,255,255,100);border:0px;width:6px;}\ QScrollBar::sub-line:vertical{subcontrol-origin:margin;border:1px solid red;height:13px}\ QScrollBar::up-arrow:vertical{subcontrol-origin:margin;background-color:blue;height:13px}\ QScrollBar::sub-page:vertical{background-color:#EEEDF0;}\ QScrollBar::handle:vertical{background-color:#D1D0D2;width:6px;} QScrollBar::handle:vertical:hover{background-color:#14ACF5;width:6px;} QScrollBar::handle:vertical:pressed{background-color:#0B95D7;width:6px;}\ QScrollBar::add-page:vertical{background-color:#EEEDF0;}\ QScrollBar::down-arrow:vertical{background-color:yellow;}\ QScrollBar::add-line:vertical{subcontrol-origin:margin;border:1px solid green;height:13px}"); // QVBoxLayout *v_layout = new QVBoxLayout(); // v_layout->addWidget(scrollArea); // v_layout->setSpacing(0);//设置间隔 // v_layout->setMargin(0);//设置总的外围边框 // v_layout->setContentsMargins(0, 0, 0, 0); // setLayout(v_layout); } NormalWidget::~NormalWidget() { if(cardPanel != NULL) { delete cardPanel; cardPanel = NULL; } } void NormalWidget::resetData() { cardcount = 0; } void NormalWidget::calculate_data() { this->scrollArea->setGeometry(-1, -1, this->width() + 2, this->height() + 2); this->cardPanel->setGeometry(0, 0, this->width(), this->height()); this->number_per_row = (this->width() + this->cardspace) / (this->itemwidth + this->cardspace); } void NormalWidget::add_card(QWidget *card) { int x = int(this->cardcount % this->number_per_row) * (this->itemwidth + this->cardspace); int y = int(this->cardcount / this->number_per_row) * (this->itemheight + this->cardspace); int nowHeight = y + this->itemheight; // qDebug() << "nowHeight-> " << nowHeight; if(nowHeight >= this->cardPanel->height()) this->cardPanel->resize(this->cardPanel->width(), nowHeight); card->move(x, y); this->cardcount += 1; } youker-assistant/component/workthread.h0000664000175000017500000000146513260315532017360 0ustar fengfeng#include #include #include "../dbusproxy/youkersystemdbus.h" class WorkerThread : public QThread { Q_OBJECT public: explicit WorkerThread(QObject *parent = 0) : QThread(parent) { // qDebug() << "Worker Thread : " << QThread::currentThreadId(); } void initInterface(SystemDispatcher *systemiface) { iface = systemiface; } protected: // virtual void run() Q_DECL_OVERRIDE { void run() { // qDebug() << "Worker Run Thread : " << QThread::currentThreadId(); QMap wire_info_map; wire_info_map = iface->get_networkcard_info_qt(); emit resultReady(wire_info_map); } signals: void resultReady(QMap value); private: SystemDispatcher *iface; }; youker-assistant/component/agentlistitem.cpp0000664000175000017500000000462613260315532020414 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "agentlistitem.h" #include #include AgentListItem::AgentListItem(QWidget *parent) : QWidget(parent) { this->setWindowFlags(Qt::FramelessWindowHint); m_mousePressed = false; label = new QLabel(); delede_button = new QPushButton(); delede_button->setFocusPolicy(Qt::NoFocus); delede_button->setObjectName("transparentButton"); QPixmap pixmap("://res/delete.png"); delede_button->setIcon(pixmap); delede_button->setIconSize(pixmap.size()); connect(delede_button, SIGNAL(clicked()), this, SLOT(onDeleteButtonClicked())); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget(label); layout->addStretch(); layout->addWidget(delede_button); // layout->setContentsMargins(5, 5, 5, 5); layout->setSpacing(5); layout->setMargin(0); setLayout(layout); } AgentListItem::~AgentListItem() { if(label != NULL) { delete label; label = NULL; } if(delede_button != NULL) { delete delede_button; delede_button = NULL; } } void AgentListItem::setCurrentItemName(QString name) { label->setText(name); } QString AgentListItem::getCurrentItemName() { QString name = label->text(); return name; } void AgentListItem::onDeleteButtonClicked() { QString name = label->text(); emit removeItem(name); } void AgentListItem::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; } } void AgentListItem::mouseReleaseEvent(QMouseEvent *event) { if(m_mousePressed) { emit showItemName(label->text()); m_mousePressed = false; } } youker-assistant/component/kylinscrollarea.h0000664000175000017500000000250313260315532020376 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINSCROLLAREA_H #define KYLINSCROLLAREA_H #include #include #include #include class AutoGroup; class KylinScrollArea : public QWidget { Q_OBJECT public: explicit KylinScrollArea(QWidget *parent = 0/*, int width = 0, int height = 0, int spacing = 0*/); void calculate_data(); void add_card(AutoGroup *card); QWidget *cardPanel; private: QScrollArea *scroll_area; int cardcount; int number_per_row; int itemwidth; int itemheight; int cardspacing; }; #endif // KYLINSCROLLAREA_H youker-assistant/component/commontoolbutton.cpp0000664000175000017500000000501513260315532021156 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "commontoolbutton.h" CommonToolButton::CommonToolButton(const QString &pic_name, const QString &text, QWidget *parent) :QToolButton(parent) { setDown(false); setFocusPolicy(Qt::NoFocus); this->setText(text); // QPalette text_palette = palette(); // text_palette.setColor(QPalette::ButtonText, QColor(230, 230, 230)); // setPalette(text_palette); setToolButtonStyle( Qt::ToolButtonTextUnderIcon); setPopupMode(QToolButton::InstantPopup); QPixmap pixmap(pic_name); normal_icon = QIcon(pic_name); setIcon(pixmap); setIconSize(pixmap.size()); // setFixedSize(pixmap.width(), pixmap.height() + 10); setAutoRaise(true); this->setObjectName("commonToolButton"); mouse_over = false; mouse_press = false; } CommonToolButton::~CommonToolButton() { } void CommonToolButton::enterEvent(QEvent *event) { if(isEnabled()) { mouse_over = true; } } void CommonToolButton::leaveEvent(QEvent *event) { if(isEnabled()) { mouse_over = false; } } void CommonToolButton::mousePressEvent(QMouseEvent *event) { if(isEnabled() && event->button() == Qt::LeftButton) { emit clicked(); } QToolButton::mousePressEvent(event); } void CommonToolButton::setMousePress(bool is_press) { this->mouse_press = is_press; update(); } void CommonToolButton::paintEvent(QPaintEvent *event) { if(this->mouse_over) { this->setIcon(QIcon(press_icon)); } else { if(this->mouse_press) { this->setIcon(QIcon(hover_icon)); } else { this->setIcon(QIcon(normal_icon)); } } QToolButton::paintEvent(event); } youker-assistant/component/tipdialog.h0000664000175000017500000000266613260315532017166 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 TIPDIALOG_H #define TIPDIALOG_H #include #include "../component/kylinlistwidget.h" #include "../component/kylintitlebar.h" class SessionDispatcher; class MainWindow; class TipDialog :public QDialog { Q_OBJECT public: TipDialog(QWidget *parent = 0, QString msg = ""); ~TipDialog(); void setParentWindow(MainWindow *From) { mainwindow = From;} void setLanguage(); void initConnect(); public slots: void onCloseButtonClicked(); void onOKButtonClicked(); private: void initTitleBar(); private: MainWindow *mainwindow; KylinTitleBar *title_bar; QLabel *msg_label; QPushButton *okBtn; QString message; }; #endif // TIPDIALOG_H youker-assistant/component/commoncheckbox.cpp0000664000175000017500000001503513260315532020536 0ustar fengfeng#include "commoncheckbox.h" //#include "../component/kylintoolbutton.h" /* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CommonCheckBox::CommonCheckBox(QWidget *parent, const QString &picture) : QWidget(parent) { // qDebug() << "init main....."; // this->setFixedSize(260, 90); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); img_btn = new QPushButton(); img_btn->setFocusPolicy(Qt::NoFocus); checkbox = new QCheckBox(this); checkbox->setObjectName("mainCheckBox"); checkbox->setTristate(true); checkbox->setEnabled(true); checkbox->setCheckState(Qt::Checked); name_label = new QLabel(); // name_label->setObjectName("middleblackLabel"); name_label->setObjectName("smallgrayLabel"); name_label->setAlignment(Qt::AlignCenter); // name_label->setText(tr("Records Count:")); description_label = new QLabel(); description_label->setAlignment(Qt::AlignCenter); description_label->setObjectName("smallgrayLabel"); custom_btn = new QPushButton(); custom_btn->setFocusPolicy(Qt::NoFocus); custom_btn->setObjectName("checkButton"); custom_btn->setCursor(Qt::PointingHandCursor); custom_btn->setFixedSize(91, 25); custom_btn->setText(tr("Custom")); // custom_btn->setObjectName("blackButton"); // img_btn->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 // QPixmap label_pixmap("://res/camera-uk.png"); // img_btn->setPixmap(label_pixmap); // img_btn->setFixedSize(label_pixmap.size()); img_btn->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/camera-uk.png"); QPixmap pixmap(picture); img_btn->setIcon(pixmap); img_btn->setIconSize(pixmap.size()); // img_btn->setIconSize(QSize(72, 72)); img_btn->setObjectName("transparentButton"); // checkbox->setAutoFillBackground(true); checkbox->show(); // checkbox->move(151-checkbox->width(), 0); checkbox->move(100, 60); QHBoxLayout *h_layout = new QHBoxLayout(); h_layout->addStretch(); h_layout->addWidget(name_label); h_layout->addWidget(description_label); h_layout->addStretch(); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(img_btn); main_layout->addLayout(h_layout); // main_layout->addWidget(name_label); // main_layout->addWidget(description_label); main_layout->addWidget(custom_btn,0, Qt::AlignHCenter); main_layout->setSpacing(5); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->initConnect(); // suggest_label->setObjectName("whiteLabel"); // result_label->setWordWrap(true);//QLabel自动换行 // result_label->setObjectName("tipLabel"); // scan_button->setFixedSize(204, 65); // scan_button->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/scan.png"); // scan_button->setIcon(pixmap); // scan_button->setIconSize(pixmap.size()); // scan_button->setObjectName("greenButton"); //// QFont scan_font = scan_button->font(); //// scan_font.setPointSize(16); //// scan_button->setFont(scan_font); // back_button->setFocusPolicy(Qt::NoFocus); // back_button->setFixedSize(50, 30); // back_button->setObjectName("underlineButton"); // //set underline // // QFont font = back_button->font(); // // font.setUnderline(true); // // back_button->setFont(font); // //set scan button text color //// QPalette palette; //// palette.setColor(QPalette::ButtonText, QColor(255,17,135)); //// scan_button->setPalette(palette); } CommonCheckBox::~CommonCheckBox() { } int CommonCheckBox::getCheckBoxStatus() { if(checkbox->checkState() == 0) { return 0; } else if(checkbox->checkState() == 1) { return 1; } else if(checkbox->checkState() == 2) { return 2; } else { return 0; } } void CommonCheckBox::onZoneClicked() { if(checkbox->checkState() == 0) { checkbox->setCheckState(Qt::Checked); emit this->spreadStatus(2); } else if(checkbox->checkState() == 1) { checkbox->setCheckState(Qt::Checked); emit this->spreadStatus(2); } else if(checkbox->checkState() == 2) { checkbox->setCheckState(Qt::Unchecked); emit this->spreadStatus(0); } } //sub item's change to make it work void CommonCheckBox::resetMainStatus(int status) { if(status == 0) { checkbox->setCheckState(Qt::Unchecked); } else if(status == 1) { checkbox->setCheckState(Qt::PartiallyChecked); } else if(status == 2) { checkbox->setCheckState(Qt::Checked); } } void CommonCheckBox::initConnect() { connect(img_btn, SIGNAL(clicked()), this, SLOT(onZoneClicked())); connect(custom_btn, SIGNAL(clicked()), this, SIGNAL(customButtonClicked())); // connect(img_btn, SIGNAL(clicked()), this, SIGNAL(customButtonClicked())); } void CommonCheckBox::setLabelText(const QString &title, int count) { // QFont font(name_label->font()); // QFontMetrics fm(font); // name_label->setText(fm.elidedText(name), Qt::ElideRight, name_label->width()); // description_label->setText(fm.elidedText(tip), Qt::ElideRight, description_label->width()); QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(title, Qt::ElideRight, 100); name_label->setText(elided_text); description_label->setText(QString::number(count)); // elided_text = fm.elidedText(tip, Qt::ElideRight, 260); // description_label->setText(elided_text); } youker-assistant/component/selectlistwidget.cpp0000664000175000017500000001437013260315532021117 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "selectlistwidget.h" #include "utils.h" #include SelectListWidget::SelectListWidget(bool hasTip, QWidget *parent) : QWidget(parent) , m_hasTip(hasTip) { this->setStyleSheet("QWidget{background-color:transparent;}"); m_gridLayout = new QGridLayout(this); m_gridLayout->setContentsMargins(ITEM_LEFT_RIGHT_PADDING,0,ITEM_LEFT_RIGHT_PADDING,0); m_gridLayout->setVerticalSpacing(0); m_widget = new QWidget(this); m_widget->setObjectName("transparentWidget"); m_listAreaWidgetLayout = new QVBoxLayout(m_widget); m_listAreaWidgetLayout->setContentsMargins(0,0,0,0); m_scrollArea = new QScrollArea(this); m_scrollArea->setStyleSheet("QScrollArea{border:none;background-color:#ffffff;}"); m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_scrollArea->setWidgetResizable(true); m_scrollArea->setWidget(m_widget); if (hasTip) { m_gridLayout->addWidget(m_scrollArea); } else { m_titleLabel = new QLabel; m_titleLabel->setFixedHeight(30); m_titleLabel->setStyleSheet("QLabel{background-color:rgb(233 ,238, 241);color:#000000;font-family: 方正黑体_GBK;font-size:12px;text-align:left;}"); m_titleLabel->setText(tr("Clean Items:")); m_gridLayout->addWidget(m_titleLabel,0,0,1,5/*, Qt::AlignLeft | Qt::AlignVCenter*/); m_gridLayout->addWidget(m_scrollArea,1,0,5,5); } resetToDefault(); } SelectListWidget::~SelectListWidget() { this->resetToDefault(); } void SelectListWidget::loadListItems(const QString &title, const QStringList &cachelist, int itemWidth) { m_itemsMap.clear(); int count = cachelist.count(); m_titleLabel->setText(QString("%1 %2").arg(tr("Clean Items:")).arg(QString::number(count))); foreach (QString cache, cachelist) { SelectListItem *item = new SelectListItem(0, cache, "", false, itemWidth-2*ITEM_LEFT_RIGHT_PADDING); connect(item, SIGNAL(selectedSignal(bool,QString)), this, SLOT(onSelectedSignal(bool,QString))); m_listAreaWidgetLayout->addWidget(item); m_itemsMap.insert(cache, item); } m_listAreaWidgetLayout->addStretch(); } void SelectListWidget::loadListItemsWithTips(const QStringList &arglist, const QStringList &statuslist, int itemWidth) { if (arglist.length() != statuslist.length()) return; m_itemsMap.clear(); for (int i = 0; i < arglist.length(); ++i) { SelectListItem *item = new SelectListItem(0, arglist.at(i), statuslist.at(i), true, itemWidth-2*ITEM_LEFT_RIGHT_PADDING); connect(item, SIGNAL(selectedSignal(bool,QString)), this, SLOT(onSelectedSignal(bool,QString))); item->setMaximumSize(itemWidth, 30); m_listAreaWidgetLayout->addWidget(item); m_itemsMap.insert(arglist.at(i), item); } m_listAreaWidgetLayout->addStretch(); } void SelectListWidget::removeOneItem(const QString &description) { SelectListItem *item = m_itemsMap.value(description); if(item == Q_NULLPTR) return; } QStringList SelectListWidget::getSelectedItems() { QStringList text_list; /*foreach (QString text, m_itemsMap.keys()) { }*/ QMap::iterator it; for (it = m_itemsMap.begin(); it != m_itemsMap.end(); ++it) { SelectListItem *item = static_cast(it.value()); if (item->itemIsChecked()) text_list.append(item->itemDescription()); } return text_list; } void SelectListWidget::scanAllSubCheckbox() { int selectedCount = 0; QMap::iterator it; for (it = m_itemsMap.begin(); it != m_itemsMap.end(); ++it) { SelectListItem *item = static_cast(it.value()); if (item->itemIsChecked()) selectedCount += 1; } if (!m_hasTip) m_titleLabel->setText(QString("%1 %2").arg(tr("Clean Items:")).arg(QString::number(selectedCount))); if (selectedCount == 0) { emit this->notifyMainCheckBox(0); } else if (selectedCount == m_itemsMap.count()) { emit this->notifyMainCheckBox(2); } else { emit this->notifyMainCheckBox(1); } /*int count = checkbox_list.count(); int m = 0; for(int i=0; iisChecked()) { m +=1; } } num_label->setText(QString::number(m)); if (m == 0) { emit this->notifyMainCheckBox(0); } else if (m == count) { emit this->notifyMainCheckBox(2); } else { emit this->notifyMainCheckBox(1); }*/ } void SelectListWidget::resetSubCheckbox(int status) { /*if(status == 0) { for(int i=0; isetChecked(false); } num_label->setText("0"); } else if(status == 2) { for(int i=0; isetChecked(true); } int count = checkbox_list.count(); num_label->setText(QString::number(count)); }*/ } void SelectListWidget::onSelectedSignal(bool checked, QString description) { this->scanAllSubCheckbox(); } void SelectListWidget::resetToDefault() { m_itemsMap.clear(); while(m_listAreaWidgetLayout->count() > 0) { QWidget* widget = m_listAreaWidgetLayout->itemAt(0)->widget(); m_listAreaWidgetLayout->removeWidget(widget); delete widget; } } youker-assistant/component/kobemenu.cpp0000664000175000017500000000454213260315532017345 0ustar fengfeng#include "kobemenu.h" #include "../mainui/mainwindow.h" #include KobeMenu::KobeMenu(QWidget *parent) : QWidget(parent) { this->createActions(); this->setLanguage(); } void KobeMenu::createActions() { help_action = new QToolButton(this); features_action = new QToolButton(this); feedback_action = new QToolButton(this); setting_action = new QToolButton(this); about_action = new QToolButton(this); help_action->setIcon(QIcon(":/tool/res/menu/help.png")); help_action->setIconSize(QPixmap(":/tool/res/menu/help.png").size()); features_action->setIcon(QIcon(":/tool/res/menu/features.png")); features_action->setIconSize(QPixmap(":/tool/res/menu/features.png").size()); feedback_action->setIcon(QIcon(":/tool/res/menu/feedback.png")); feedback_action->setIconSize( QPixmap(":/tool/res/menu/feedback.png").size()); setting_action->setIcon(QIcon(":/tool/res/menu/setup.png")); setting_action->setIconSize( QPixmap(":/tool/res/menu/setup.png").size()); about_action->setIcon(QIcon(":/tool/res/menu/about.png")); about_action->setIconSize( QPixmap(":/tool/res/menu/about.png").size()); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(help_action/*, 0, Qt::AlignTop*/); layout->addWidget(features_action); layout->addWidget(feedback_action); layout->addWidget(setting_action); layout->addWidget(about_action/*, 0, Qt::AlignBottom*/); layout->setMargin(0); layout->setSpacing(5); layout->setContentsMargins(5, 5, 5, 5); this->setLayout(layout); } void KobeMenu::setLanguage() { help_action->setText(tr("Forum Help")); features_action->setText(tr("Features")); feedback_action->setText(tr("Feedback")); setting_action->setText(tr("Set up")); about_action->setText(tr("About us")); } void KobeMenu::initConnect() { connect(help_action, SIGNAL(clicked()), this, SLOT(forumHelp())); connect(help_action, SIGNAL(clicked()), p_mainwindow, SLOT(newFeatures())); connect(help_action, SIGNAL(clicked()), p_mainwindow, SLOT(questionFeedback())); connect(help_action, SIGNAL(clicked()), p_mainwindow, SLOT(setupConfigure())); connect(help_action, SIGNAL(clicked()), p_mainwindow, SLOT(aboutUs())); } void KobeMenu::forumHelp() { QUrl url(QString("http://www.ubuntukylin.com/ukylin/forum.php")); QDesktopServices::openUrl(url); } youker-assistant/component/quibo.cpp0000664000175000017500000000355213260315532016657 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "quibo.h" #include "ui_quibo.h" QUIBO::QUIBO(QWidget *parent) : QWidget(parent), ui(new Ui::QUIBO) { ui->setupUi(this); this->colors = new QStringList(); this->colors->append("blue"); this->colors->append("purple"); this->colors->append("green"); this->colors->append("orange"); this->colors->append("red"); this->colors->append("black"); this->colors->append("white"); this->cindex = 1; ui->bg->setStyleSheet("QLabel{background-color:" + this->colors->at(0) + ";}"); this->show(); this->setWindowState(Qt::WindowActive); this->setWindowState(Qt::WindowFullScreen); } QUIBO::~QUIBO() { if(colors != NULL) { delete colors; colors = NULL; } delete ui; } void QUIBO::mouseReleaseEvent(QMouseEvent *me) { if(me->button() == Qt::LeftButton){ this->changeColor(); }else if(me->button() == Qt::RightButton){ this->close(); }else{ } } void QUIBO::myshow() { } void QUIBO::changeColor() { if(this->cindex >= 7){ this->close(); }else{ ui->bg->setStyleSheet("QLabel{background-color:" + this->colors->at(this->cindex) + ";}"); this->cindex ++; } } youker-assistant/component/kylinlistview.cpp0000664000175000017500000000304313260315532020450 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinlistview.h" #include #include #include KylinListView::KylinListView(QWidget *parent) : QListView(parent) { } KylinListView::~KylinListView() { } bool KylinListView::viewportEvent(QEvent *pEvent) { bool bRes = QAbstractItemView::viewportEvent(pEvent); QEvent::Type enumType = pEvent->type(); switch (enumType) { case QEvent::HoverEnter: { qDebug() << "hover enter......"; } break; case QEvent::HoverLeave: { qDebug() << "hover leave......"; } break; case QEvent::HoverMove: { qDebug() << "hover move......"; } break; default: break; } return QAbstractItemView::viewportEvent(pEvent); } youker-assistant/component/cleangroup.h0000664000175000017500000000245613260315532017346 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANGROUP_H #define CLEANGROUP_H #include class QLabel; class CleanButton; class CleanGroup : public QWidget { Q_OBJECT public: explicit CleanGroup(QWidget *parent = 0, const QString &picture= ""); ~CleanGroup(); void setLabelText(const QString &name, const QString &desc); int getCheckBoxStatus(); public slots: void resetMainStatus(int status); signals: void clicked(); private: CleanButton *img_btn; QLabel *name_label; QLabel *description_label; int tristateStatus; }; #endif // CLEANGROUP_H youker-assistant/component/itemcard.h0000664000175000017500000000351713260315532016776 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 ITEMCARD_H #define ITEMCARD_H #include #include #include #include #include #include namespace Ui { class ItemCard; } class ItemCard : public QWidget { Q_OBJECT public: explicit ItemCard(QString title = "", bool flag = false, QWidget *parent = 0);//true:custom; false:system ~ItemCard(); void switchAnimation(); void showUsingLogo(bool flag); void resetdislayDelBtnValue(bool flag); QString getCardName(); public slots: void slotShowDelayAnimation(); void slotSwitchAnimationStep(); void onDeleteBtnClicked(); signals: void sendBackgroundName(QString name); void sendEnterBackground(QString name); void sendLeaveBackground(); void sendDelteSignal(QString name); void sendAddSignal(); protected: void enterEvent(QEvent *); void leaveEvent(QEvent *); bool eventFilter(QObject *obj, QEvent *event); private: Ui::ItemCard *ui; // QTimer *switchTimer; // QTimer *delayTimer; bool showDelay; QString switchDirection; int py; QString iconDir; QString iconpath; bool dislayDelBtn; }; #endif // ITEMCARD_H youker-assistant/component/kylinmenu.h0000664000175000017500000000401513260315532017213 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINMENU_H #define KYLINMENU_H #include #include #include #include #include #include class MainWindow; class KylinMenu : public QMenu { Q_OBJECT public: explicit KylinMenu(QWidget *parent = 0); ~KylinMenu(); void setLanguage(); void initConnect(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} //protected: // virtual bool event(QEvent* e); private: void createActions(); public slots: void forumHelp(); void questionFeedback(); private: // QAction *help_action; //// QAction *features_action; // QAction *feedback_action; //// QAction *setting_action; // QAction *about_action; MainWindow *p_mainwindow; QWidget *check_widget; QWidget *help_widget; QWidget *feedback_widget; QWidget *about_widget; QWidgetAction *check_widget_action; QWidgetAction *help_widget_action; QWidgetAction *feedback_widget_action; QWidgetAction *about_widget_action; QLabel *check_label; QLabel *help_label; QLabel *feedback_label; QLabel *about_label; QPushButton *check_button; QPushButton *help_button; QPushButton *feedback_button; QPushButton *about_button; }; #endif // KYLINMENU_H youker-assistant/component/kylincheckbox.cpp0000664000175000017500000001340113260315532020367 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylincheckbox.h" //#include "../component/kylintoolbutton.h" //#include "mainwindow.h" #include #include #include KylinCheckBox::KylinCheckBox(QWidget *parent, const QString &picture) : QWidget(parent) { // qDebug() << "init main....."; // this->setFixedSize(260, 90); //set white background color this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Window, QBrush(Qt::white)); this->setPalette(palette); img_btn = new QPushButton(); img_btn->setFocusPolicy(Qt::NoFocus); checkbox = new QCheckBox(this); checkbox->setObjectName("mainCheckBox"); checkbox->setTristate(true); checkbox->setEnabled(true); checkbox->setCheckState(Qt::Checked); name_label = new QLabel(); name_label->setObjectName("middleblackLabel"); name_label->setAlignment(Qt::AlignCenter); description_label = new QLabel(); description_label->setAlignment(Qt::AlignCenter); description_label->setObjectName("smallgrayLabel"); // custom_btn = new QPushButton(); // custom_btn->setFocusPolicy(Qt::NoFocus); // custom_btn->setObjectName("checkButton"); // custom_btn->setCursor(Qt::PointingHandCursor); // img_btn->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 // QPixmap label_pixmap("://res/camera-uk.png"); // img_btn->setPixmap(label_pixmap); // img_btn->setFixedSize(label_pixmap.size()); img_btn->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/camera-uk.png"); QPixmap pixmap(picture); img_btn->setIcon(pixmap); img_btn->setIconSize(pixmap.size()); // img_btn->setIconSize(QSize(72, 72)); img_btn->setObjectName("transparentButton"); // checkbox->setAutoFillBackground(true); checkbox->show(); // checkbox->move(151-checkbox->width(), 0); checkbox->move(152, 60); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(img_btn); main_layout->addWidget(name_label); main_layout->addWidget(description_label); // main_layout->addWidget(custom_btn); main_layout->setSpacing(5); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->initConnect(); // suggest_label->setObjectName("whiteLabel"); // result_label->setWordWrap(true);//QLabel自动换行 // result_label->setObjectName("tipLabel"); // scan_button->setFixedSize(204, 65); // scan_button->setFocusPolicy(Qt::NoFocus); // QPixmap pixmap("://res/scan.png"); // scan_button->setIcon(pixmap); // scan_button->setIconSize(pixmap.size()); // scan_button->setObjectName("greenButton"); //// QFont scan_font = scan_button->font(); //// scan_font.setPointSize(16); //// scan_button->setFont(scan_font); // back_button->setFocusPolicy(Qt::NoFocus); // back_button->setFixedSize(50, 30); // back_button->setObjectName("underlineButton"); // //set underline // // QFont font = back_button->font(); // // font.setUnderline(true); // // back_button->setFont(font); // //set scan button text color //// QPalette palette; //// palette.setColor(QPalette::ButtonText, QColor(255,17,135)); //// scan_button->setPalette(palette); } KylinCheckBox::~KylinCheckBox() { } void KylinCheckBox::onZoneClicked() { if(checkbox->checkState() == 0) { checkbox->setCheckState(Qt::Checked); emit this->spreadStatus(2); } else if(checkbox->checkState() == 1) { checkbox->setCheckState(Qt::Checked); emit this->spreadStatus(2); } else if(checkbox->checkState() == 2) { checkbox->setCheckState(Qt::Unchecked); emit this->spreadStatus(0); } } //sub item's change to make it work void KylinCheckBox::resetMainStatus(int status) { if(status == 0) { checkbox->setCheckState(Qt::Unchecked); } else if(status == 1) { checkbox->setCheckState(Qt::PartiallyChecked); } else if(status == 2) { checkbox->setCheckState(Qt::Checked); } } void KylinCheckBox::initConnect() { // connect(img_btn, SIGNAL(clicked()), this, SLOT(onZoneClicked())); // connect(custom_btn, SIGNAL(clicked()), this, SIGNAL(customButtonClicked())); connect(img_btn, SIGNAL(clicked()), this, SIGNAL(customButtonClicked())); } void KylinCheckBox::setLabelText(const QString &name, const QString &tip) { // QFont font(name_label->font()); // QFontMetrics fm(font); // name_label->setText(fm.elidedText(name), Qt::ElideRight, name_label->width()); // description_label->setText(fm.elidedText(tip), Qt::ElideRight, description_label->width()); QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(name, Qt::ElideRight, 260); name_label->setText(elided_text); elided_text = fm.elidedText(tip, Qt::ElideRight, 260); description_label->setText(elided_text); } youker-assistant/component/systemtray.cpp0000664000175000017500000000327413260315532017765 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "systemtray.h" SystemTray::SystemTray(QWidget *parent) : QSystemTrayIcon(parent) { this->initTrayActions(); this->setLanguage(); } SystemTray::~SystemTray() { } void SystemTray::setLanguage() { this->setToolTip(tr("Youker Assistant")); action_open->setText(tr("open")); action_open->setIcon(QIcon("://res/icon.png")); action_logout->setText(tr("logout")); } void SystemTray::initTrayActions() { this->setIcon(QIcon("://res/icon.png")); tray_menu = new QMenu(); // tray_menu->setObjectName("mainmenu"); action_open = new QAction(this); action_logout = new QAction(this); tray_menu->setFixedWidth(250); connect(action_open, SIGNAL(triggered()), this, SIGNAL(showWidget())); connect(action_logout, SIGNAL(triggered()), qApp, SLOT(quit())); this->setContextMenu(tray_menu); tray_menu->addAction(action_open); tray_menu->addSeparator(); tray_menu->addAction(action_logout); } youker-assistant/component/cleansubgroup.cpp0000664000175000017500000001211013260315532020377 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleansubgroup.h" #include "cleansubbutton.h" #include #include #include #include CleanSubGroup::CleanSubGroup(QWidget *parent, const QString &picture) : QWidget(parent), tristateStatus(2) { this->setStyleSheet("QWidget{background:transparent;}"); // this->setAttribute(Qt::WA_TranslucentBackground); this->setFixedSize(160, 110); this->setFocusPolicy(Qt::NoFocus); img_btn = new CleanSubButton(); // img_btn->setAttribute(Qt::WA_TransparentForMouseEvents);//屏蔽鼠标事件 img_btn->setIconPath(picture); img_btn->setCheckboxStatus(tristateStatus);//全选状态 img_btn->setFocusPolicy(Qt::NoFocus); name_label = new QLabel(); description_label = new QLabel(); name_label->setObjectName("smallgrayLabel"); name_label->setAlignment(Qt::AlignCenter); description_label->setAlignment(Qt::AlignCenter); description_label->setObjectName("smallgrayLabel"); custom_btn = new QPushButton(); custom_btn->setFocusPolicy(Qt::NoFocus); custom_btn->setObjectName("checkButton"); custom_btn->setCursor(Qt::PointingHandCursor); custom_btn->setFixedSize(91, 25); custom_btn->setText(tr("Custom")); // QVBoxLayout *main_layout = new QVBoxLayout(); // main_layout->addWidget(img_btn, 0, Qt::AlignHCenter); // main_layout->addWidget(name_label, 0, Qt::AlignHCenter); // main_layout->addWidget(description_label, 0, Qt::AlignHCenter); // main_layout->setSpacing(5); // main_layout->setMargin(0); // main_layout->setContentsMargins(0, 0, 0, 0); QHBoxLayout *h_layout = new QHBoxLayout(); h_layout->addStretch(); h_layout->addWidget(name_label); h_layout->addWidget(description_label); h_layout->addStretch(); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(img_btn, 0, Qt::AlignHCenter); main_layout->addLayout(h_layout); main_layout->addWidget(custom_btn,0, Qt::AlignHCenter); main_layout->setSpacing(5); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); this->setLayout(main_layout); this->initConnect(); } CleanSubGroup::~CleanSubGroup() { if(img_btn != NULL) { delete img_btn; img_btn = NULL; } if(name_label != NULL) { delete name_label; name_label = NULL; } if(description_label != NULL) { delete description_label; description_label = NULL; } if(custom_btn != NULL) { delete custom_btn; custom_btn = NULL; } } void CleanSubGroup::initConnect() { connect(img_btn, SIGNAL(clicked()), this, SLOT(onZoneClicked())); connect(custom_btn, SIGNAL(clicked()), this, SIGNAL(customButtonClicked())); } void CleanSubGroup::setLabelText(const QString &title, int count) { QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(title, Qt::ElideRight, 80); name_label->setText(elided_text); description_label->setText(QString::number(count)); if(elided_text.endsWith("…")) name_label->setToolTip(title + QString::number(count)); } void CleanSubGroup::setLabelStringText(const QString &title, QString size) { QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(title, Qt::ElideRight, 80); name_label->setText(elided_text); description_label->setText(size); if(elided_text.endsWith("…")) name_label->setToolTip(title + size); } void CleanSubGroup::hideCustomButton() { custom_btn->hide(); } void CleanSubGroup::onZoneClicked() { if(tristateStatus == 0) { tristateStatus = 2; img_btn->setCheckboxStatus(2); emit this->spreadStatus(2); } else if(tristateStatus == 1) { tristateStatus = 2; img_btn->setCheckboxStatus(2); emit this->spreadStatus(2); } else if(tristateStatus == 2) { tristateStatus = 0; img_btn->setCheckboxStatus(0); emit this->spreadStatus(0); } } //sub item's change to make it work void CleanSubGroup::resetMainStatus(int status) { tristateStatus = status; if(status == 0) { img_btn->setCheckboxStatus(0); } else if(status == 1) { img_btn->setCheckboxStatus(1); } else if(status == 2) { img_btn->setCheckboxStatus(2); } } int CleanSubGroup::getCheckBoxStatus() { return tristateStatus; } youker-assistant/component/kylineditbutton.cpp0000664000175000017500000000126113260315532020763 0ustar fengfeng#include "kylineditbutton.h" #include #include KylinEditButton::KylinEditButton(QLineEdit *edit) : QPushButton(edit) { QSize size = QSize(40, edit->sizeHint().height()); // setMinimumSize(size); // setMaximumSize(size); this->setFocusPolicy(Qt::NoFocus); this->setFlat(true); this->setIcon(QIcon("://res/folder.png")); this->setIconSize(QSize(16, 16)); this->setCursor(QCursor(Qt::PointingHandCursor)); QHBoxLayout *layout = new QHBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->addStretch(); layout->addWidget(this); edit->setLayout(layout); edit->setTextMargins(0, 1, size.width(), 1); } youker-assistant/component/kylineditbutton.h0000664000175000017500000000034613260315532020433 0ustar fengfeng#ifndef KYLINEDITBUTTON_H #define KYLINEDITBUTTON_H #include class QLineEdit; class KylinEditButton : public QPushButton { Q_OBJECT public: KylinEditButton(QLineEdit *edit); }; #endif // KYLINEDITBUTTON_H youker-assistant/component/cleansubbutton.cpp0000664000175000017500000001142713260315532020570 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleansubbutton.h" #include #include #include CleanSubButton::CleanSubButton(QWidget *parent) : QWidget(parent) { // hoverPixmap.load("://res/shadow_hover"); // grayhoverPixmap.load("://res/shadow_gray_hover"); // this->setFixedSize(hoverPixmap.size()); this->setFixedSize(48, 48); QPixmap pixMap("://res/checkbox-tristate.png"); int width = pixMap.width(); int height = pixMap.height(); int num = 9;//9*12=108 for(int i=0; i != num; i++) { checkboxList.append(pixMap.copy(i*(width/num), 0, width/num, height)); } //设置checkbox的显示位置:x(36), y(34) checkboxRect.setX(36); checkboxRect.setY(34); checkboxRect.setSize(checkboxList.at(0).size()); } void CleanSubButton::setIconPath(const QString &icon) { checkPixmap.load(icon + "_check"); // midcheckPixmap.load(icon + "_midcheck"); uncheckPixmap.load(icon + "_uncheck"); } void CleanSubButton::setCleanButtonStatus(BUTTONSTATUS status) { buttonStatus = status; update(); } void CleanSubButton::setCheckboxStatus(int status) { tristateStatus = status; setCleanButtonStatus(BUTTON_LEAVE); } void CleanSubButton::paintEvent(QPaintEvent *) { QPainter painter(this); switch (buttonStatus) { case BUTTON_LEAVE: if(tristateStatus == 2) { painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(3)); } else if(tristateStatus == 1) { painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(6)); } else if(tristateStatus == 0) { painter.drawPixmap(rect(), uncheckPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(0)); } break; case BUTTON_ENTER: if(tristateStatus == 2) { // painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(4)); } else if(tristateStatus == 1) { // painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(7)); } else if(tristateStatus == 0) { // painter.drawPixmap(rect(), grayhoverPixmap); painter.drawPixmap(rect(), uncheckPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(1)); } break; case BUTTON_PRESSED: if(tristateStatus == 2) { // painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(4)); } else if(tristateStatus == 1) { // painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(7)); } else if(tristateStatus == 0) { // painter.drawPixmap(rect(), grayhoverPixmap); painter.drawPixmap(rect(), uncheckPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(1)); } break; default: break; } } void CleanSubButton::enterEvent(QEvent *) { setCleanButtonStatus(BUTTON_ENTER); } void CleanSubButton::leaveEvent(QEvent *) { setCleanButtonStatus(BUTTON_LEAVE); } void CleanSubButton::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { setCleanButtonStatus(BUTTON_PRESSED); } else { event->ignore(); } } void CleanSubButton::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { if(rect().contains(event->pos())) { setCleanButtonStatus(BUTTON_ENTER); emit this->clicked(); }else { setCleanButtonStatus(BUTTON_LEAVE); } } else { event->ignore(); } } youker-assistant/component/kobemenu.h0000664000175000017500000000123013260315532017001 0ustar fengfeng#ifndef KOBEMENU_H #define KOBEMENU_H #include #include #include #include class MainWindow; class KobeMenu : public QWidget { Q_OBJECT public: explicit KobeMenu(QWidget *parent = 0); void setLanguage(); void initConnect(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} private: void createActions(); public slots: void forumHelp(); private: QToolButton *help_action; QToolButton *features_action; QToolButton *feedback_action; QToolButton *setting_action; QToolButton *about_action; MainWindow *p_mainwindow; }; #endif // KOBEMENU_H youker-assistant/component/labelgroup.h0000664000175000017500000000234413260315532017337 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 LABELGROUP_H #define LABELGROUP_H #include #include #include #include class LabelGroup : public QWidget { Q_OBJECT public: explicit LabelGroup(QWidget *parent = 0); void setLanguage(QString key, QString value); // void pushMap(QString key, QString value); signals: public slots: private: QHBoxLayout *h_layout; QLabel *key_info; QLabel *value_info; // QMap name; }; #endif // LABELGROUP_H youker-assistant/component/kylincheckbox.h0000664000175000017500000000362013260315532020036 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINCHECKBOX_H #define KYLINCHECKBOX_H #include #include #include #include //#include //#include //#include //#include //#include "../component/kylinbutton.h" //#include "../component/kylintoolbutton.h" //#include "../component/systembutton.h" //#include "../component/loadinglabel.h" //class MainWindow; class KylinCheckBox : public QWidget { Q_OBJECT public: explicit KylinCheckBox(QWidget *parent = 0, const QString &picture= ""); ~KylinCheckBox(); // void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initConnect(); void setLabelText(const QString &name, const QString &tip); public slots: void onZoneClicked(); void resetMainStatus(int status); signals: void customButtonClicked(); void spreadStatus(int status); private: QPushButton *img_btn; QCheckBox *checkbox; QLabel *name_label; QLabel *description_label; // QPushButton *custom_btn; // MainWindow *p_mainwindow; }; #endif // KYLINCHECKBOX_H youker-assistant/component/normalwidget.h0000664000175000017500000000251313260315532017675 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 NORMALWIDGET_H #define NORMALWIDGET_H #include #include #include #include class NormalWidget : public QWidget { Q_OBJECT public: explicit NormalWidget(int cardwidth = 0, int cardheight = 0, int space = 0, QWidget *parent = 0); ~NormalWidget(); void calculate_data(); void add_card(QWidget *card); QWidget *cardPanel; void resetData(); private: int cardcount; int number_per_row; int itemwidth; int itemheight; int cardspace; QScrollArea *scrollArea; }; #endif // NORMALWIDGET_H youker-assistant/component/kylinscrollarea.cpp0000664000175000017500000000400713260315532020732 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinscrollarea.h" #include #include "autogroup.h" KylinScrollArea::KylinScrollArea(QWidget *parent/*, int width, int height, int spacing*/) : QWidget(parent) { cardcount = 0; number_per_row = -1; this->setWindowFlags(Qt::FramelessWindowHint); itemwidth = 400;//width; itemheight = 50;//height; cardspacing = 6;//spacing; scroll_area = new QScrollArea(this); cardPanel = new QWidget(); scroll_area->setWidget(cardPanel); scroll_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scroll_area->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); } void KylinScrollArea::calculate_data() { scroll_area->setGeometry(-1, -1, this->width() + 2, this->height() + 2); cardPanel->setGeometry(0, 0, this->width(), this->height()); number_per_row = (this->width() + this->cardspacing) / (this->itemwidth + this->cardspacing); } void KylinScrollArea::add_card(AutoGroup *card) { int x = int(cardcount % number_per_row) * (itemwidth + cardspacing); int y = int(cardcount / number_per_row) * (itemheight + cardspacing); int nowHeight = y + itemheight; if(nowHeight >= cardPanel->height()) cardPanel->resize(cardPanel->width(), nowHeight); card->move(x, y); cardcount = cardcount + 1; } youker-assistant/component/utils.h0000664000175000017500000000421513260315532016342 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 UTILS_H #define UTILS_H #include #define ITEMHEIGHT 30 #define ITEMHSPACE 10 #define ITEMVSPACE 5 #define PAGESPACE 20 #define ITEMWIDTH 650 #define SHADOW_LEFT_TOP_PADDING 2 #define SHADOW_RIGHT_BOTTOM_PADDING 4 #define MAIN_WINDOW_WIDTH 900 #define MAIN_WINDOW_HEIGHT 600 #define TITLE_BAR_HEIGHT 39 #define ITEM_LEFT_RIGHT_PADDING 5 //const int windowShadowPadding = 10; //#define VERSION "2.4.1" const QString KYLIN_COMPANY_SETTING = "kylin/kylin-assistant"; const QString KYLIN_SETTING_FILE_NAME_SETTING = "kylin-assistant"; enum CleanerModuleID { CacheApt = 0, CacheSoftware, CacheThumbnail, CacheFirefox, CacheChromium, CookieFirefox, CookieChromium, TraceX11, InvalidID, }; enum CleanerCategoryID { CacheCategory = 0, CookieCategory, TraceCategory, InvalidCategory, }; typedef enum{ YOUKER_EN, YOUKER_ZH_CN, YOUKER_ES, } LANGUAGE; typedef enum{ CACHE, PACAKAGE, COOKIES, BROWSER, TRACE, BIGFILE, } CLEANERTAB; struct AutoData { QString appPath; QString appName; QString appComment; QString iconName; QString appStatus; }; typedef enum{ BUTTON_ENTER, BUTTON_LEAVE, BUTTON_PRESSED, BUTTON_DISABLE, BUTTON_FIRST, BUTTON_SCALED, }BUTTONSTATUS; typedef enum{ HOMEPAGE, CLEANPAGE, INFOPAGE, SETTINGPAGE, BOXPAGE, }PAGESTATUS; #endif // UTILS_H youker-assistant/component/kylintitlebar.h0000664000175000017500000000350313260315532020056 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINTITLEBAR_H #define KYLINTITLEBAR_H #include #include #include #include #include "systembutton.h" class KylinTitleBar : public QWidget { Q_OBJECT public: explicit KylinTitleBar(QWidget *parent = 0); virtual ~KylinTitleBar(); void setTitleWidth(int width);// { title_width = width;}20161228 void setTitleName(QString title) { title_content = title;} void setTitleBackgound(QString img) { backgroud_image = img;} void resetBackground(QString name); protected: virtual void resizeEvent (QResizeEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); signals: // void showMinDialog(); void closeDialog(); private: QPoint press_point; QPoint move_point; bool left_btn_pressed; // QLabel *logo_label; QLabel *title_label; int title_width; QString title_content; QString backgroud_image; // SystemButton *min_btn; SystemButton *close_btn; }; #endif // KYLINTITLEBAR_H youker-assistant/component/kylintitlebar.cpp0000664000175000017500000001253713260315532020420 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylintitlebar.h" #include #include KylinTitleBar::KylinTitleBar(QWidget *parent) : QWidget(parent) , left_btn_pressed(false) { this->setWindowFlags(Qt::FramelessWindowHint); this->setFixedHeight(32); this->setAutoFillBackground(true); // min_btn = new SystemButton(); close_btn = new SystemButton(this); close_btn->setFocusPolicy(Qt::NoFocus); // min_btn->loadPixmap(":/sys/res/sysBtn/min_button.png"); close_btn->loadPixmap(":/sys/res/sysBtn/close_button.png"); title_label = new QLabel(this); title_label->setAlignment(Qt::AlignCenter); title_label->setStyleSheet("QLabel{color:#ffffff;font-family: 方正黑体_GBK;font-size: 14px;text-align: center;font-weight:bold;}"); // logo_label = new QLabel(); // logo_label->setFixedSize(22, 22); // logo_label->setFrameShape(QFrame::NoFrame); // logo_label->setAutoFillBackground(true); // logo_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 // QPixmap label_pixmap("://res/icon.png"); // logo_label->setPixmap(label_pixmap); // logo_label->setFixedSize(label_pixmap.size()); // QPalette palette; // palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/logo.png"))); // logo_label->setPalette(palette); // QHBoxLayout *label_layout = new QHBoxLayout(); // label_layout->addWidget(logo_label, 0, Qt::AlignVCenter); // label_layout->addWidget(title_label, 0, Qt::AlignVCenter); // label_layout->setSpacing(5); // label_layout->setMargin(0); // label_layout->setContentsMargins(2, 2, 0, 0); // QHBoxLayout *btn_layout = new QHBoxLayout(); // btn_layout->addWidget(min_btn, 0, Qt::AlignTop); // btn_layout->addWidget(close_btn, 0, Qt::AlignVCenter); // QHBoxLayout *main_layout = new QHBoxLayout(); // main_layout->addWidget(close_btn, 0, Qt::AlignVCenter); // main_layout->addLayout(btn_layout); // main_layout->addStretch(); // main_layout->addWidget(title_label, 0, Qt::AlignVCenter); // main_layout->addStretch(); // main_layout->addWidget(logo_label, 0, Qt::AlignVCenter); // main_layout->addLayout(label_layout); // main_layout->setSpacing(0); // main_layout->setMargin(0); // main_layout->setContentsMargins(0, 0, 2, 0); // setLayout(main_layout); // connect(min_btn, SIGNAL(clicked()), this, SIGNAL(showMinDialog())); connect(close_btn, SIGNAL(clicked()), this, SIGNAL(closeDialog())); } KylinTitleBar::~KylinTitleBar(void) { if(title_label != NULL) { delete title_label; title_label = NULL; } if(close_btn != NULL) { delete close_btn; close_btn = NULL; } } void KylinTitleBar::resetBackground(QString name) { backgroud_image = name; QPalette palette_widget; palette_widget.setBrush(QPalette::Background, QBrush(QPixmap(backgroud_image))); setPalette(palette_widget); } //20161228 void KylinTitleBar::setTitleWidth(int width) { title_width = width; //#ifdef __aarch64__ close_btn->move(title_width - 36, 0); //#else // close_btn->move(0, 0); //#endif } void KylinTitleBar::resizeEvent(QResizeEvent *event) { //width this->setFixedWidth(title_width); //backgrond QPalette palette_widget; palette_widget.setBrush(QPalette::Background, QBrush(QPixmap(backgroud_image))); setPalette(palette_widget); //title and font title_label->setText(title_content); title_label->setGeometry(QRect(40, 0, title_width- 80, 32)); // title_label->setGeometry(QRect(40, 0, 40, 32)); // QPalette objPalette = palette(); // objPalette.setColor(QPalette::WindowText, Qt::white); // title_label->setPalette(objPalette); // QFont &objFont = const_cast(font()); // objFont.setWeight(QFont::Bold); // title_label->setFont(objFont); } void KylinTitleBar::mousePressEvent ( QMouseEvent *event) { if (event->button() == Qt::LeftButton) { if(event->y() < 5 || event->x() < 5 || rect().width() - event->x() < 5) { event->ignore(); return; } press_point = event->globalPos(); left_btn_pressed = true; } event->ignore(); } void KylinTitleBar::mouseMoveEvent ( QMouseEvent *event) { if(left_btn_pressed) { move_point = event->globalPos(); QWidget *pMainWindow = (qobject_cast(parent())); pMainWindow->move(pMainWindow->pos() + move_point - press_point); press_point = move_point; } event->ignore(); } void KylinTitleBar::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { left_btn_pressed = false; } event->ignore(); } youker-assistant/component/settingaction.h0000664000175000017500000000421713260315532020057 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGACTION_H #define SETTINGACTION_H #include #include #include #include #include #include #include #include "../component/kylinbutton.h" #include "../component/systembutton.h" class SettingAction : public QWidget { Q_OBJECT public: /*enum SettingModuleID{ ThemePage = 0, IconPage, MousePage, SoundPage, PanelPage, MenuPage, WindowPage, FontPage, TouchPadPage, EnergyPage, FMPage };*/ explicit SettingAction(QString cur_dekstop = "", QWidget *parent = 0); ~SettingAction(); // void setParentWindow(MainWindow* window) { p_mainwindow = window;} void setLanguage(int index); // QString getModuleName() const; // void setModuleName(const QString &name); QString getModuleName(); void setModuleName(QString name); // SettingModuleID getModuleNameID() const; // void setModuleNameID(const SettingModuleID &id); signals: void showSettingMainWidget(); private: QPushButton *back_btn; QLabel *img_label; QLabel *title_label; // QLabel *description_label; // MainWindow *p_mainwindow; QString desktop; QString m_moduleName; // SettingModuleID m_id; }; #endif // SETTINGACTION_H youker-assistant/component/scrollwidget.h0000664000175000017500000000234013260315532017701 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SCROLLWIDGET_H #define SCROLLWIDGET_H #include #include #include #include class ComputerPage; class ScrollWidget : public QWidget { Q_OBJECT public: explicit ScrollWidget(QWidget *parent = 0); ~ScrollWidget(); void addScrollWidget(ComputerPage *widget); QWidget *zone; void resetWidget(); private: QScrollArea *scroll_area; int widget_count; int zone_height; }; #endif // SCROLLWIDGET_H youker-assistant/component/mythread.h0000664000175000017500000000201113260315532017007 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 class MyThread : public QThread { Q_OBJECT public: explicit MyThread(QWidget *parent = 0, QString command = ""); void run(); bool getCommandRunResult(); private: QString m_command; bool m_result; }; youker-assistant/component/kylinaction.cpp0000664000175000017500000000120313260315532020053 0ustar fengfeng#include "kylinaction.h" //KylinAction::KylinAction(const QString &text, QObject *parent) : QAction(text, parent) //{ //} KylinAction::KylinAction(const QIcon &icon, const QString &text, QObject *parent) : QAction(icon, text, parent) { } KylinAction::~KylinAction() { } void KylinAction::setSkinPath(const QString skinPath) { this->mSkinPath = skinPath; } const QString KylinAction::getSkinPath() { return this->mSkinPath; } void KylinAction::setRealName(const QString realName) { this->mRealName = realName; } const QString KylinAction::getRealName() { return this->mRealName; } void KylinAction::hover() { } youker-assistant/component/threadpool.h0000664000175000017500000000220313260315532017336 0ustar fengfeng#ifndef THREADPOOL_H #define THREADPOOL_H /* * Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 class ThreadPool : public QObject { Q_OBJECT public: explicit ThreadPool(QObject *parent = 0); ~ThreadPool(); static ThreadPool *Instance(); QThread *createNewThread(); void moveObjectToThread(QObject *obj); void exitAllThreads(); private: QList m_threadPool; }; #endif // THREADPOOL_H youker-assistant/component/systembutton.cpp0000664000175000017500000000360413260315532020316 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "systembutton.h" #include SystemButton::SystemButton(QWidget *parent) : QPushButton(parent) { status = NORMAL; m_mousePressed = false; } void SystemButton::loadPixmap(QString pic_name) { pixmap = QPixmap(pic_name); btn_width = pixmap.width()/3; btn_height = pixmap.height(); this->setFixedSize(btn_width, btn_height); } void SystemButton::enterEvent(QEvent *) { status = ENTER; update(); } void SystemButton::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_mousePressed = true; status = PRESS; update(); } } void SystemButton::mouseReleaseEvent(QMouseEvent *event) { if(m_mousePressed && this->rect().contains(event->pos())) { m_mousePressed = false; status = ENTER; update(); emit clicked(); } } void SystemButton::leaveEvent(QEvent *) { status = NORMAL; update(); } void SystemButton::paintEvent(QPaintEvent *) { QPainter painter; painter.begin(this); painter.drawPixmap(this->rect(), pixmap.copy(btn_width * status, 0, btn_width, btn_height)); painter.end(); } youker-assistant/component/kylintoolbutton.cpp0000664000175000017500000000647513260315532021027 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylintoolbutton.h" #include KylinToolButton::KylinToolButton(const QString &pic_name, const QString &text, QWidget *parent) :QToolButton(parent) { setDown(false); setFocusPolicy(Qt::NoFocus); this->setText(text); // QPalette text_palette = palette(); // text_palette.setColor(QPalette::ButtonText, QColor(230, 230, 230)); // setPalette(text_palette); // QFont &text_font = const_cast(font()); // text_font.setWeight(QFont::Bold); setToolButtonStyle(Qt::ToolButtonTextBesideIcon); // setToolButtonStyle( Qt::ToolButtonTextUnderIcon); setPopupMode(QToolButton::InstantPopup); QPixmap pixmap(pic_name); normal_icon = QIcon(pic_name); hover_icon = QIcon(pic_name + "-hover"); press_icon = QIcon(pic_name + "-press"); setIcon(pixmap); setIconSize(pixmap.size()); // setFixedSize(pixmap.width(), pixmap.height() + 10); setAutoRaise(true); this->setObjectName("transparentToolButton"); mouse_over = false; m_mousePressed = false; pressed = false; } KylinToolButton::~KylinToolButton() { } void KylinToolButton::enterEvent(QEvent *event) { if(isEnabled()) { mouse_over = true; this->setMouseHover(); } } void KylinToolButton::leaveEvent(QEvent *event) { if(isEnabled()) { mouse_over = false; this->setMouseHover(); } } void KylinToolButton::mousePressEvent(QMouseEvent *event) { if(isEnabled() && event->button() == Qt::LeftButton) { //kobe: don't emit, it will emit by click it self. // emit clicked(); } QToolButton::mousePressEvent(event); } void KylinToolButton::setMouseHover() { if(this->mouse_over) { this->setIcon(QIcon(hover_icon)); } else { if(pressed) this->setIcon(QIcon(press_icon)); else this->setIcon(QIcon(normal_icon)); } } void KylinToolButton::setMousePress(bool is_press) { this->m_mousePressed = is_press; if(this->m_mousePressed) { this->setIcon(QIcon(press_icon)); pressed = true; } else { this->setIcon(QIcon(normal_icon)); pressed = false; } // if(this->mouse_over) // { // this->setIcon(QIcon(hover_icon)); // } // else // { // if(this->m_mousePressed) // { // this->setIcon(QIcon(press_icon)); // } // else // { // this->setIcon(QIcon(normal_icon)); // } // } } youker-assistant/component/selectwidget.h0000664000175000017500000000350713260315532017670 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SELECTWIDGET_H #define SELECTWIDGET_H #include #include #include #include "mytitlebar.h" #include "selectlistwidget.h" #include "../component/utils.h" class SelectWidget : public QDialog { Q_OBJECT public: SelectWidget(CleanerModuleID id = InvalidID, const QString &title = "", bool needMin = false, QWidget *parent = 0); ~SelectWidget(); void loadData(const QString &title, const QStringList &cachelist); void moveCenter(); public slots: void onClose(); signals: void notifyMainCheckBox(int status); void refreshSelectedItems(CleanerModuleID id, const QStringList &selecteds); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: CleanerModuleID m_id; QVBoxLayout *m_mainLayout = nullptr; MyTitleBar *m_titleBar = nullptr; SelectListWidget *m_listWidget = nullptr; QPoint m_dragPosition; //移动的距离 bool m_mousePressed; //按下鼠标左键 }; #endif // SELECTWIDGET_H youker-assistant/component/cardwidget.h0000664000175000017500000000250013260315532017312 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CARDWIDGET_H #define CARDWIDGET_H #include #include #include #include class CardWidget : public QWidget { Q_OBJECT public: explicit CardWidget(int cardwidth = 0, int cardheight = 0, int space = 0, QWidget *parent = 0); ~CardWidget(); void calculate_data(); void add_card(QWidget *card); void clear_card(); QWidget *cardPanel; private: int cardcount; int number_per_row; int itemwidth; int itemheight; int cardspace; QScrollArea *scrollArea; }; #endif // CARDWIDGET_H youker-assistant/component/toolkits.h0000664000175000017500000000327013260315532017052 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 TOOLKITS_H #define TOOLKITS_H #include #include #include #include #include "alertdialog.h" class Toolkits : public QObject { Q_OBJECT public: explicit Toolkits(QObject *parent = 0, int width = 0, int height = 0); ~Toolkits(); //启动alert提示 Q_INVOKABLE void alertMSG(int x, int y, const QString &alertText); private: int parent_width; int parent_height; int alert_width; int alert_height; //本次alert的x坐标 int alert_x; //保额次alert的y坐标 int alert_y; //alert message提示框 AlertDialog *alertBG; //alert提示框timer QTimer *alertTimer; //alert提示框隐藏timer QTimer *alertDelayTimer; //alert提示框GOE QGraphicsOpacityEffect *alertGOE; //alert提示框透明度 float ao; //alert提示框y坐标 int ay; private slots: //alert提示步处理 void updateAlert(); //隐藏alert提示框 void hideAlert(); }; #endif // TOOLKITS_H youker-assistant/component/itemcard.ui0000664000175000017500000000422613260315532017162 0ustar fengfeng ItemCard 0 0 132 87 Form 1 1 130 67 0 0 130 67 104 5 22 22 1 50 130 18 3 2 16 14 5 67 122 20 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 0 0 132 69 youker-assistant/component/kylintoolbutton.h0000664000175000017500000000274513260315532020470 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINTOOlBUTTON_H #define KYLINTOOlBUTTON_H #include #include #include class KylinToolButton : public QToolButton { public: explicit KylinToolButton(const QString &pic_name, const QString &text , QWidget *parent = 0); ~KylinToolButton(); void setMousePress(bool is_press); void setMouseHover(); bool pressed; protected: void enterEvent(QEvent *event); void leaveEvent(QEvent *event); void mousePressEvent(QMouseEvent *event); public: bool mouse_over; //鼠标是否移过 bool m_mousePressed; //鼠标是否按下 QIcon normal_icon; QIcon hover_icon; QIcon press_icon; }; #endif //KYLINTOOlBUTTON_H youker-assistant/component/itemcard.cpp0000664000175000017500000002001113260315532017315 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "itemcard.h" #include "ui_itemcard.h" #include #include ItemCard::ItemCard(QString title, bool flag, QWidget *parent) : QWidget(parent), ui(new Ui::ItemCard) { ui->setupUi(this); ui->deleteWidget->hide(); ui->coverWidget->lower(); ui->coverWidget->hide(); dislayDelBtn = false; // switchTimer = new QTimer(); // connect(switchTimer, SIGNAL(timeout()), this, SLOT(slotSwitchAnimationStep())); //delay show animation showDelay = false; // py = 87;//67 if(flag) iconDir = "/var/lib/kylin-assistant-daemon/custom/"; else iconDir = "/var/lib/kylin-assistant-daemon/default/"; // delayTimer = new QTimer(this); // connect(delayTimer, SIGNAL(timeout()), this, SLOT(slotShowDelayAnimation())); // ui->deleteWidget->setAutoFillBackground(true); // QPalette palette = ui->deleteWidget->palette(); //// palette.setColor(QPalette::Background, QColor(100,100,100,50)); // palette.setBrush(QPalette::Window, QBrush(Qt::red)); //// palette.setBrush(QPalette::Base, QBrush(QColor(255,0,0,0))); // ui->deleteWidget->setPalette(palette); // ui->deleteWidget->setStyleSheet("QWidget{background:transparent url(:/background/res/skin/1.png);icon-size:20px 5px}"); ui->baseWidget->setStyleSheet("QWidget{background:transparent;}"); ui->deleteWidget->setStyleSheet("QWidget{background:transparent url(://res/conceal.png);}"); ui->coverWidget->setStyleSheet("QWidget{background:transparent url(://res/skin-cover.png);}"); // QPixmap pix = QPixmap("://res/menu-big-hover.png","0",Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither); // ui->baseWidget->setMask(pix.mask()); ui->deleteBtn->setFocusPolicy(Qt::NoFocus); ui->deleteBtn->setCursor(Qt::PointingHandCursor); ui->deleteBtn->setStyleSheet("QPushButton{background-image:url('://res/remove.png');border:0px;}"); // ui->deleteBtn->setStyleSheet("QPushButton{background-image:url('://res/remove.png');border:0px;}QPushButton:hover{background:url('://res/cache_logo.png');}QPushButton:pressed{background:url('://res/cache_logo.png');}"); connect(ui->deleteBtn, SIGNAL(clicked()), this, SLOT(onDeleteBtnClicked())); if(title == "://res/create.png") { iconpath = title; ui->name->hide(); this->setCursor(Qt::PointingHandCursor); } else { iconpath = iconDir.append(title); } // ui->icon->setStyleSheet("QLabel{background-image:url('" + iconpath + "')}"); ui->icon->installEventFilter(this); // QPixmap pixmap; // pixmap.copy(QRect(0,0,212,100)).save(iconpath); // ui->icon->setPixmap(pixmap); QPixmap pixmap(iconpath); pixmap.copy(QRect(0,0,130,68)); ui->icon->setPixmap(pixmap); ui->name->setStyleSheet("QLabel{background: transparent; font-size:13px;color:#666666;}"); ui->name->setText(title.replace(".png", "").replace(".jpg", "")); // ui->using_label->setStyleSheet("QLabel{background: transparent;}"); ui->using_label->setStyleSheet("QLabel{background-image:url('://res/choose.png')}"); // ui->using_label->setAutoFillBackground(true); // palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/clothes.png"))); // ui->using_label->setPalette(palette); ui->using_label->hide(); } ItemCard::~ItemCard() { // if (switchTimer != NULL) { // disconnect(switchTimer,SIGNAL(timeout()),this,SLOT(slotSwitchAnimationStep())); // if(switchTimer->isActive()) { // switchTimer->stop(); // } // delete switchTimer; // switchTimer = NULL; // } // if (delayTimer != NULL) { // disconnect(delayTimer,SIGNAL(timeout()),this,SLOT(slotShowDelayAnimation())); // if(delayTimer->isActive()) { // delayTimer->stop(); // } // delete delayTimer; // delayTimer = NULL; // } delete ui; } void ItemCard::resetdislayDelBtnValue(bool flag) { if(flag) this->dislayDelBtn = true; else this->dislayDelBtn = false; } void ItemCard::onDeleteBtnClicked() { emit this->sendDelteSignal(iconpath); } void ItemCard::showUsingLogo(bool flag) { if(flag) ui->using_label->show(); else ui->using_label->hide(); } QString ItemCard::getCardName() { return this->iconpath; } void ItemCard::enterEvent(QEvent *) { emit this->sendEnterBackground(iconpath); if(this->iconpath != "://res/create.png") ui->coverWidget->show(); if (this->dislayDelBtn) { ui->deleteWidget->show(); // this->delayTimer->start(300); } } void ItemCard::leaveEvent(QEvent *) { emit this->sendLeaveBackground(); if(this->iconpath != "://res/create.png") ui->coverWidget->hide(); if (this->dislayDelBtn) ui->deleteWidget->hide(); // if (this->delayTimer->isActive()) // this->delayTimer->stop(); // if (this->showDelay && this->dislayDelBtn) { // this->showDelay = false; // this->switchDirection = "down"; // this->switchAnimation(); // } } void ItemCard::slotShowDelayAnimation() { // if(this->delayTimer->isActive()) // this->delayTimer->stop(); // this->switchDirection = "up"; // this->switchAnimation(); // this->showDelay = true; } void ItemCard::switchAnimation() { // if(this->switchDirection == "up") // { // this->py = 87;//67 // if(this->switchTimer->isActive()) // this->switchTimer->stop(); // this->switchTimer->start(30); // } // else // { // this->py = 48;//49 // if(this->switchTimer->isActive()) // this->switchTimer->stop(); // this->switchTimer->start(30); // } } void ItemCard::slotSwitchAnimationStep() { // if(this->switchDirection == "up") // { //// if(this->py < 0) //// { //// this->py += 3; //// ui->deleteWidget->move(0, this->py); //// } //// else //// { //// if(this->switchTimer->isActive()) //// this->switchTimer->stop(); //// ui->deleteWidget->move(0, 0); //// } // if(this->py > 48)//49 // { // this->py -= 3; // ui->deleteWidget->move(0, this->py); // } // else // { // if(this->switchTimer->isActive()) // this->switchTimer->stop(); // ui->deleteWidget->move(0, 48);// 49 // } // } // else // { //// if(this->py <= 48 && this->py > -18)// if(this->py >= 49 && this->py < 67) //// { //// this->py -= 3; //// ui->deleteWidget->move(0, this->py); //// } //// else //// { //// this->switchTimer->stop(); //// ui->deleteWidget->move(0, -18);//67 //// } // if(this->py >= 48 && this->py < 87)// if(this->py >= 49 && this->py < 67) // { // this->py += 3; // ui->deleteWidget->move(0, this->py); // } // else // { // this->switchTimer->stop(); // ui->deleteWidget->move(0, 87);//67 // } // } } bool ItemCard::eventFilter(QObject *obj, QEvent *event) { if(obj == ui->icon){ if(event->type() == QEvent::MouseButtonRelease){ if (this->iconpath == "://res/create.png") emit this->sendAddSignal(); else emit this->sendBackgroundName(iconpath); } } return QObject::eventFilter(obj, event); } youker-assistant/component/loadinglabel.h0000664000175000017500000000251013260315532017613 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 LOADINLABEL_H #define LOADINLABEL_H #include #include #include #include class LoadingLabel : public QLabel { Q_OBJECT public: explicit LoadingLabel(QWidget *parent = 0, QString flag = "");//flag=ture:big picture;flag=false:small picture ~LoadingLabel(); void loadAllPictures(); void startLoading(); void stopLoading(); public slots: void changeAnimationStep(); private: QTimer *timer; QVector png_vector; int currentpage; int page_count; QString category; }; #endif // LOADINLABEL_H youker-assistant/component/alertdialog.h0000664000175000017500000000203713260315532017471 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 ALERTDIALOG_H #define ALERTDIALOG_H #include #include namespace Ui { class AlertDialog; } class AlertDialog : public QWidget { Q_OBJECT public: explicit AlertDialog(QWidget *parent = 0); ~AlertDialog(); void paintEvent(QPaintEvent *); void setMSG(QString); private: Ui::AlertDialog *ui; }; #endif // ALERTDIALOG_H youker-assistant/component/cleansubbutton.h0000664000175000017500000000313013260315532020225 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANSUBBUTTON_H #define CLEANSUBBUTTON_H #include #include "utils.h" class CleanSubButton : public QWidget { Q_OBJECT public: explicit CleanSubButton(QWidget *parent = 0); void setIconPath(const QString &icon); void setCleanButtonStatus(BUTTONSTATUS status); void setCheckboxStatus(int status); signals: void clicked(); protected: void paintEvent(QPaintEvent *); void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); private: int tristateStatus; // QPixmap hoverPixmap; // QPixmap grayhoverPixmap; QPixmap checkPixmap; // QPixmap midcheckPixmap; QPixmap uncheckPixmap; QList checkboxList; BUTTONSTATUS buttonStatus; QRect checkboxRect; }; #endif // CLEANSUBBUTTON_H youker-assistant/component/myswitcher.h0000664000175000017500000000242013260315532017374 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MYSWITCHER_H #define MYSWITCHER_H #include #include class MySwitcher : public QFrame { Q_OBJECT public: explicit MySwitcher(QWidget *parent = 0); bool isOn() const; public slots: void setOnStatus(bool b); signals: void statusChanged(bool b); protected: void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: bool m_isOn; QPixmap m_onImage; QPixmap m_offImage; }; #endif // MYSWITCHER_H youker-assistant/component/selectlistitem.h0000664000175000017500000000272013260315532020233 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SELECTLISTITEM_H #define SELECTLISTITEM_H #include #include #include #include #include class SelectListItem : public QWidget { Q_OBJECT public: explicit SelectListItem(QWidget *parent = 0, QString description = "", QString tipMsg = "", bool hasTip = false, int itemWidth = 0); ~SelectListItem(); bool itemIsChecked(); QString itemDescription(); signals: void selectedSignal(bool checked, QString description); private: bool m_hasTip; QString m_description; QString m_tip; QHBoxLayout *m_mainLayout = nullptr; QCheckBox *m_checkBox = nullptr; QLabel *m_descLabel = nullptr; }; #endif // SELECTLISTITEM_H youker-assistant/component/kylinbutton.h0000664000175000017500000000303113260315532017557 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINBUTTON_H #define KYLINBUTTON_H #include #include #include class KylinButton : public QPushButton { Q_OBJECT public: explicit KylinButton(QWidget *parent = 0); ~KylinButton(); void setPicName(QString pic_name); protected: void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *); private: //枚举按钮的几种状态 enum ButtonStatus{NORMAL, ENTER, PRESS, NOSTATUS}; ButtonStatus status; QString pic_name; int btn_width; //按钮宽度 int btn_height; //按钮高度 bool m_mousePressed; //按钮左键是否按下 }; #endif //KYLINBUTTON_H youker-assistant/component/commontoolbutton.h0000664000175000017500000000271413260315532020626 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 COMMONOOlBUTTON_H #define COMMONOOlBUTTON_H #include #include class CommonToolButton : public QToolButton { public: explicit CommonToolButton(const QString &pic_name, const QString &text , QWidget *parent = 0); ~CommonToolButton(); void setMousePress(bool is_press); protected: void enterEvent(QEvent *event); void leaveEvent(QEvent *event); void mousePressEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event); public: bool mouse_over; //鼠标是否移过 bool mouse_press; //鼠标是否按下 QIcon normal_icon; QIcon hover_icon; QIcon press_icon; }; #endif //COMMONOOlBUTTON_H youker-assistant/component/cleangroup.cpp0000664000175000017500000000622313260315532017675 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleangroup.h" #include "cleanbutton.h" #include #include #include CleanGroup::CleanGroup(QWidget *parent, const QString &picture) : QWidget(parent), tristateStatus(2) { this->setAttribute(Qt::WA_TranslucentBackground); this->setFixedSize(260, 150); this->setFocusPolicy(Qt::NoFocus); img_btn = new CleanButton(); // img_btn->setAttribute(Qt::WA_TransparentForMouseEvents);//屏蔽鼠标事件 connect(img_btn, SIGNAL(clicked()),this, SIGNAL(clicked())); img_btn->setIconPath(picture); img_btn->setCheckboxStatus(tristateStatus);//全选状态 img_btn->setFocusPolicy(Qt::NoFocus); name_label = new QLabel(); description_label = new QLabel(); name_label->setObjectName("middleblackLabel"); name_label->setAlignment(Qt::AlignCenter); description_label->setAlignment(Qt::AlignCenter); description_label->setObjectName("smallgrayLabel"); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addWidget(img_btn, 0, Qt::AlignHCenter); main_layout->addWidget(name_label, 0, Qt::AlignHCenter); main_layout->addWidget(description_label, 0, Qt::AlignHCenter); main_layout->setSpacing(5); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); this->setLayout(main_layout); } CleanGroup::~CleanGroup() { if(img_btn != NULL) { delete img_btn; img_btn = NULL; } if(name_label != NULL) { delete name_label; name_label = NULL; } if(description_label != NULL) { delete description_label; description_label = NULL; } } void CleanGroup::setLabelText(const QString &name, const QString &desc) { QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(name, Qt::ElideRight, 260); name_label->setText(elided_text); elided_text = fm.elidedText(desc, Qt::ElideRight, 260); description_label->setText(elided_text); if(elided_text.endsWith("…")) description_label->setToolTip(desc); } //sub item's change to make it work void CleanGroup::resetMainStatus(int status) { tristateStatus = status; if(status == 0) { img_btn->setCheckboxStatus(0); } else if(status == 1) { img_btn->setCheckboxStatus(1); } else if(status == 2) { img_btn->setCheckboxStatus(2); } } int CleanGroup::getCheckBoxStatus() { return tristateStatus; } youker-assistant/component/autogroup.cpp0000664000175000017500000000722513260315532017566 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "autogroup.h" #include "utils.h" #include AutoGroup::AutoGroup(QWidget *parent) : QWidget(parent) { this->resize(560, 50); splitlabel = new QLabel(); // splitlabel->setGeometry(QRect(0, this->height(), this->width(), 1)); splitlabel->setFixedHeight(1); splitlabel->setStyleSheet("QLabel{background:#e0e0e0;}"); logo_label = new QLabel(); name_label = new QLabel(); comment_label = new QLabel(); switcher = new KylinSwitcher(); connect(switcher, SIGNAL(clicked()), this, SIGNAL(autoStatusChange())); QVBoxLayout *v_layout = new QVBoxLayout(); v_layout->addStretch(); v_layout->addWidget(name_label); v_layout->addWidget(comment_label); v_layout->addStretch(); v_layout->setSpacing(5); v_layout->setMargin(0); v_layout->setContentsMargins(0,0,0,0); QHBoxLayout *h_layout = new QHBoxLayout(); h_layout->addWidget(logo_label); h_layout->addLayout(v_layout); h_layout->addStretch(); h_layout->addWidget(switcher); h_layout->setSpacing(10); h_layout->setMargin(0);//设置总的外围边框 h_layout->setContentsMargins(0,0,0,0); QVBoxLayout *layout = new QVBoxLayout(); layout->addStretch(); layout->addLayout(h_layout); layout->addWidget(splitlabel); layout->addStretch(); // layout->setSpacing(5); layout->setMargin(0); layout->setContentsMargins(0,0,0,0); setLayout(layout); } AutoGroup::~AutoGroup() { if(logo_label != NULL) { delete logo_label; logo_label = NULL; } if(name_label != NULL) { delete name_label; name_label = NULL; } if(comment_label != NULL) { delete comment_label; comment_label = NULL; } if(switcher != NULL) { delete switcher; switcher = NULL; } if(splitlabel != NULL) { delete splitlabel; splitlabel = NULL; } } void AutoGroup::initData(QMap data) { dekstopFile = data.value("Path"); logo_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 if(data.value("Icon").isEmpty()) { QPixmap label_pixmap("://res/ubuntukylin.png"); logo_label->setPixmap(label_pixmap); } else { QPixmap label_pixmap(data.value("Icon")); logo_label->setPixmap(label_pixmap); } // logo_label->setFixedSize(label_pixmap.size()); logo_label->setFixedSize(40, 40); name_label->setText(data.value("Name")); if(data.value("Comment").isEmpty()) { comment_label->setText(data.value("NONE")); } else { comment_label->setText(data.value("Comment")); } if(data.value("Status") == "true") switcher->switchedOn = true; else switcher->switchedOn = false; } bool AutoGroup::getSwitcherStatus() { if(switcher->switchedOn == true) return true; else return false; } youker-assistant/component/cleansubgroup.h0000664000175000017500000000310013260315532020043 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANSUBGROUP_H #define CLEANSUBGROUP_H #include class QLabel; class QPushButton; class CleanSubButton; class CleanSubGroup : public QWidget { Q_OBJECT public: explicit CleanSubGroup(QWidget *parent = 0, const QString &picture= ""); ~CleanSubGroup(); void setLabelText(const QString &title, int count); void setLabelStringText(const QString &title, QString size); int getCheckBoxStatus(); void initConnect(); void hideCustomButton(); public slots: void onZoneClicked(); void resetMainStatus(int status); signals: void clicked(); void customButtonClicked(); void spreadStatus(int status); private: CleanSubButton *img_btn; QLabel *name_label; QLabel *description_label; QPushButton *custom_btn; int tristateStatus; }; #endif // CLEANSUBGROUP_H youker-assistant/component/kylinlistwidgetitem.cpp0000664000175000017500000000216713260315532021646 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinlistwidgetitem.h" #include "mainwindow.h" KylinListWidgetItem::KylinListWidgetItem(const QIcon &icon, const QString &text, QListWidget *view, int type) :QListWidgetItem(icon,text,view,type) { mainwindow = NULL; } KylinListWidgetItem::~KylinListWidgetItem() { } void KylinListWidgetItem::paintPointSkin() { mainwindow->reViewThePointSkin(point_skin); } youker-assistant/component/toolbutton.cpp0000664000175000017500000001005013260315532017740 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "toolbutton.h" #include #include #include #include #include #include ToolButton::ToolButton(QWidget *parent, bool whiteflag) : QWidget(parent) { this->setWindowFlags(Qt::FramelessWindowHint); this->setAutoFillBackground(true); this->setCursor(Qt::PointingHandCursor); this->setFixedSize(90, 90); this->setFocusPolicy(Qt::NoFocus); QPalette palette; palette.setColor(this->backgroundRole(), QColor(255,255,255));//#ffffff this->setPalette(palette); iconLabel = new QLabel; textLabel = new QLabel; if(whiteflag) textLabel->setObjectName("backgroundWhiteLabel"); else textLabel->setObjectName("backgroundLabel"); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(iconLabel, 0, Qt::AlignCenter); layout->addWidget(textLabel, 0, Qt::AlignHCenter); layout->setContentsMargins(0, 10, 0, 10); this->setLayout(layout); } ToolButton::~ToolButton() { if(iconLabel != NULL) { delete iconLabel; iconLabel = NULL; } if(textLabel != NULL) { delete textLabel; textLabel = NULL; } } void ToolButton::setIcon(const QString &icon) { QPixmap pixmap(icon); iconLabel->setPixmap(pixmap); iconLabel->setFixedSize(pixmap.size()); } void ToolButton::setText(const QString &text) { QFont ft; QFontMetrics fm(ft); QString elided_text = fm.elidedText(text, Qt::ElideRight, 90); textLabel->setText(elided_text); textLabel->adjustSize(); if(elided_text.endsWith("…")) this->setToolTip(text); } void ToolButton::setToolButtonStatus(BUTTONSTATUS status) { QPalette palette; switch (status) { case BUTTON_ENTER: palette.setColor(this->backgroundRole(), QColor(233,238,241));//#e9eef1 this->setPalette(palette); break; case BUTTON_LEAVE: palette.setColor(this->backgroundRole(), QColor(255,255,255));//#ffffff this->setPalette(palette); break; case BUTTON_PRESSED: palette.setColor(this->backgroundRole(), QColor(233,238,241));//#e9eef1 this->setPalette(palette); break; default: break; } // QPalette palette; //// palette.setBrush(this->backgroundRole(),QBrush(Qt::green)); //// palette.setBrush(QPalette::Window, QBrush(Qt::white)); //// palette.setColor(QPalette::Background, QColor(233,238,241));//#e9eef1 // palette.setColor(this->backgroundRole(), QColor(233,238,241));//#e9eef1 // this->setPalette(palette); } void ToolButton::enterEvent(QEvent *) { setToolButtonStatus(BUTTON_ENTER); } void ToolButton::leaveEvent(QEvent *) { setToolButtonStatus(BUTTON_LEAVE); } void ToolButton::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { ToolButton(BUTTON_PRESSED); } else { e->ignore(); } } void ToolButton::mouseReleaseEvent(QMouseEvent *e) { if(e->button() == Qt::LeftButton) { if(rect().contains(e->pos())) { if(this->isEnabled()) { emit clicked(); } setToolButtonStatus(BUTTON_ENTER); e->accept(); }else{ setToolButtonStatus(BUTTON_LEAVE); e->ignore(); } } else { e->ignore(); } } youker-assistant/component/kylinlistmodel.cpp0000664000175000017500000000647513260315532020612 0ustar fengfeng#include "kylinlistmodel.h" #include KylinListModel::KylinListModel() { } KylinListModel::~KylinListModel() { } QModelIndex KylinListModel::index ( int row, int column, const QModelIndex & parent) const { if (row >= 0 && row < rowCount() && column >= 0 && column < columnCount()) { QStandardItem* item = m_data.at(row); // item->setSizeHint(QSize(80,130)); return createIndex (row, column, (void *)(item)); } return QModelIndex(); } int KylinListModel::rowCount ( const QModelIndex & parent ) const { return m_data.count(); } int KylinListModel::columnCount ( const QModelIndex & parent ) const { return m_title.count(); } bool KylinListModel::insertRows ( int row, int count, const QModelIndex & parent) { beginInsertRows(QModelIndex(), row, row + count - 1); for (int i = 0; i < count; ++i) { QStandardItem *item = new QStandardItem(); // item->setSizeHint(QSize(80,130)); // item->setFont(QFont("微软雅黑",10,1)); // QPixmap pix("://res/box-hover.png"); // QBrush brush(pix); // item->setBackground(brush); m_data.insert (row,item); } endInsertRows(); return true; } bool KylinListModel::insertColumns ( int column, int count, const QModelIndex & ) { return true; } bool KylinListModel::removeRows ( int row, int count, const QModelIndex & parent ) { return true; } bool KylinListModel::removeColumns ( int column, int count, const QModelIndex & parent ) { return true; } QVariant KylinListModel::data ( const QModelIndex & index, int role ) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole) { QStandardItem* item = m_data.at(index.row()); // item->setSizeHint(QSize(80,130)); return QVariant(item->text()); } if (role == Qt::DecorationRole) { QStandardItem* item = m_data.at(index.row()); // item->setSizeHint(QSize(80,130)); return QVariant(item->icon()); } if (role == Qt::WhatsThisRole) { QStandardItem* item = m_data.at(index.row()); // item->setSizeHint(QSize(80,130)); return item->toolTip(); } return QVariant(); } bool KylinListModel::setData ( const QModelIndex & index, const QVariant & value, int role) { if (index.isValid() && role == Qt::EditRole) { QStandardItem* item = m_data.at(index.row()); // item->setSizeHint(QSize(80,130)); item->setText(value.toString()); emit dataChanged(index, index); return true; } if (role == Qt::DecorationRole) { QStandardItem* item = m_data.at(index.row()); // item->setSizeHint(QSize(80,130)); item->setIcon(value.value()); return true; } if (role == Qt::WhatsThisRole) { QStandardItem* item = m_data.at(index.row()); // item->setSizeHint(QSize(80,130)); item->setToolTip(value.toString()); return true; } return false; } QVariant KylinListModel::headerData(int section, Qt::Orientation orientation ,int role) const { if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { return m_title.at(0); } return QVariant(); } youker-assistant/component/autogroup.h0000664000175000017500000000246213260315532017231 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 AUTOGROUP_H #define AUTOGROUP_H #include #include #include #include #include "kylinswitcher.h" class AutoGroup : public QWidget { Q_OBJECT public: explicit AutoGroup(QWidget *parent = 0); ~AutoGroup(); void initData(QMap data); QString dekstopFile; bool getSwitcherStatus(); signals: void autoStatusChange(); private: QLabel *logo_label; QLabel *name_label; QLabel *comment_label; KylinSwitcher *switcher; QLabel *splitlabel; }; #endif // AUTOGROUP_H youker-assistant/component/agentlistitem.h0000664000175000017500000000265313260315532020057 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 . */ //#pragma once #ifndef AGENTLISTITEM_H #define AGENTLISTITEM_H #include #include #include class AgentListItem : public QWidget { Q_OBJECT public: explicit AgentListItem(QWidget *parent = 0); ~AgentListItem(); void setCurrentItemName(QString name); QString getCurrentItemName(); protected: void mouseReleaseEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); signals: void showItemName(QString name); void removeItem(QString name); public slots: void onDeleteButtonClicked(); private: bool m_mousePressed; QLabel *label; QPushButton *delede_button; }; #endif // AGENTLISTITEM_H youker-assistant/component/kylinmenu.cpp0000664000175000017500000002126513260315532017554 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinmenu.h" #include "../src/mainwindow.h" #include #include KylinMenu::KylinMenu(QWidget *widget) : QMenu(widget) { this->createActions(); this->setLanguage(); } KylinMenu::~KylinMenu() { if(check_label != NULL) { delete check_label; check_label = NULL; } if(help_label != NULL) { delete help_label; help_label = NULL; } if(feedback_label != NULL) { delete feedback_label; feedback_label = NULL; } if(about_label != NULL) { delete about_label; about_label = NULL; } if(check_button != NULL) { delete check_button; check_button = NULL; } if(help_button != NULL) { delete help_button; help_button = NULL; } if(feedback_button != NULL) { delete feedback_button; feedback_button = NULL; } if(about_button != NULL) { delete about_button; about_button = NULL; } if(check_widget != NULL) { delete check_widget; check_widget = NULL; } if(help_widget != NULL) { delete help_widget; help_widget = NULL; } if(feedback_widget != NULL) { delete feedback_widget; feedback_widget = NULL; } if(about_widget != NULL) { delete about_widget; about_widget = NULL; } } void KylinMenu::createActions() { // help_action = new QAction(this); //// features_action = new QAction(this); // feedback_action = new QAction(this); //// setting_action = new QAction(this); // about_action = new QAction(this); check_widget = new QWidget(); help_widget = new QWidget(); feedback_widget = new QWidget(); about_widget = new QWidget(); check_widget_action = new QWidgetAction(this); help_widget_action = new QWidgetAction(this); feedback_widget_action = new QWidgetAction(this); about_widget_action = new QWidgetAction(this); check_label = new QLabel(); help_label = new QLabel(); feedback_label = new QLabel(); about_label = new QLabel(); check_button = new QPushButton(); help_button = new QPushButton(); feedback_button = new QPushButton(); about_button = new QPushButton(); check_button->setStyleSheet("QPushButton{background-color:transparent;border:none;text-align:left;font-family: 方正黑体_GBK;font-size:14px;color:#666666;}QPushButton:hover{color:#0396DC;}");//background:transparent; help_button->setStyleSheet("QPushButton{background-color:transparent;border:none;text-align:left;font-family: 方正黑体_GBK;font-size:14px;color:#666666;}QPushButton:hover{color:#0396DC;}");//background:transparent; feedback_button->setStyleSheet("QPushButton{background-color:transparent;border:none;text-align:left;font-family: 方正黑体_GBK;font-size:14px;color:#666666;}QPushButton:hover{color:#0396DC;}");//background:transparent; about_button->setStyleSheet("QPushButton{background-color:transparent;border:none;text-align:left;font-family: 方正黑体_GBK;font-size:14px;color:#666666;}QPushButton:hover{color:#0396DC;}");//background:transparent; QPixmap check_pixmap(":/tool/res/menu/upgrade.png"); check_label->setPixmap(check_pixmap); check_label->setFixedSize(check_pixmap.size()); check_button->setFocusPolicy(Qt::NoFocus); QPixmap help_pixmap(":/tool/res/menu/help.png"); help_label->setPixmap(help_pixmap); help_label->setFixedSize(help_pixmap.size()); // help_button->setIcon(help_pixmap); // help_button->setIconSize(help_pixmap.size()); help_button->setFocusPolicy(Qt::NoFocus); QPixmap feedback_pixmap(":/tool/res/menu/feedback.png"); feedback_label->setPixmap(feedback_pixmap); feedback_label->setFixedSize(feedback_pixmap.size()); feedback_button->setFocusPolicy(Qt::NoFocus); QPixmap about_pixmap(":/tool/res/menu/about.png"); about_label->setPixmap(about_pixmap); about_label->setFixedSize(about_pixmap.size()); about_button->setFocusPolicy(Qt::NoFocus); QHBoxLayout *check_layout = new QHBoxLayout(); check_layout->addWidget(check_label); check_layout->addWidget(check_button); check_layout->setSpacing(10); check_layout->setContentsMargins(20, 0, 20, 0); check_widget->setLayout(check_layout); check_widget_action->setDefaultWidget(check_widget); QHBoxLayout *help_layout = new QHBoxLayout(); help_layout->addWidget(help_label); help_layout->addWidget(help_button); help_layout->setSpacing(10); help_layout->setContentsMargins(20, 0, 20, 0); help_widget->setLayout(help_layout); help_widget_action->setDefaultWidget(help_widget); QHBoxLayout *feedback_layout = new QHBoxLayout(); feedback_layout->addWidget(feedback_label); feedback_layout->addWidget(feedback_button); feedback_layout->setSpacing(10); feedback_layout->setContentsMargins(20, 0, 20, 0); feedback_widget->setLayout(feedback_layout); feedback_widget_action->setDefaultWidget(feedback_widget); QHBoxLayout *about_layout = new QHBoxLayout(); about_layout->addWidget(about_label); about_layout->addWidget(about_button); about_layout->setSpacing(10); about_layout->setContentsMargins(20, 0, 20, 0); about_widget->setLayout(about_layout); about_widget_action->setDefaultWidget(about_widget); // this->addAction(check_widget_action); if (GlobalData::globalarch == "x86_64") { this->addAction(help_widget_action); this->addAction(feedback_widget_action); this->addSeparator(); } this->addAction(about_widget_action); // this->addAction(help_action); //// this->addAction(features_action); // this->addAction(feedback_action); //// this->addAction(setting_action); // this->addSeparator(); // this->addAction(about_action); // this->addSeparator(); // this->addAction(play_widget_action); } void KylinMenu::setLanguage() { // help_action->setText(tr("Forum Help")); //// features_action->setText(tr("Features")); // feedback_action->setText(tr("Feedback")); //// setting_action->setText(tr("Set up")); // about_action->setText(tr("About us")); // help_action->setIcon(QIcon("://res/icon.png")); // help_action->setToolTip(tr("Help")); check_button->setText(tr("Check and update")); help_button->setText(tr("Forum Help")); feedback_button->setText(tr("Feedback")); about_button->setText(tr("About us")); } void KylinMenu::initConnect() { // connect(help_action, SIGNAL(triggered()), this, SLOT(forumHelp())); //// connect(features_action, SIGNAL(triggered()), p_mainwindow, SLOT(newFeatures())); // connect(feedback_action, SIGNAL(triggered()), this, SLOT(questionFeedback())); //// connect(setting_action, SIGNAL(triggered()), p_mainwindow, SLOT(setupConfigure())); // connect(about_action, SIGNAL(triggered()), p_mainwindow, SLOT(aboutUs())); connect(check_button, SIGNAL(clicked()), p_mainwindow, SLOT(openUpgradePage())); connect(help_button, SIGNAL(clicked()), this, SLOT(forumHelp())); connect(feedback_button, SIGNAL(clicked()), this, SLOT(questionFeedback())); connect(about_button, SIGNAL(clicked()), p_mainwindow, SLOT(aboutUs())); } void KylinMenu::forumHelp() { this->close(); QUrl url(QString("http://www.ubuntukylin.com/ukylin/forum.php")); QDesktopServices::openUrl(url); } void KylinMenu::questionFeedback() { this->close(); QUrl url(QString("https://bugs.launchpad.net/youker-assistant")); QDesktopServices::openUrl(url); } //bool KylinMenu::event(QEvent* e) //{ // switch(e->type()) // { // case QEvent::ToolTip: // //show action tooltip instead of widget tooltip // { // QHelpEvent *he = dynamic_cast(e); // QAction *act = actionAt(he->pos()); // if(act) // { // QToolTip::showText(he->globalPos(), act->toolTip(), this); // return true; // } // } // break; // } // QMenu::event(e); //} youker-assistant/component/commoncheckbox.h0000664000175000017500000000365213260315532020205 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 COMMONCHECKBOX_H #define COMMONCHECKBOX_H #include #include #include #include //#include //#include //#include //#include //#include "../component/kylinbutton.h" //#include "../component/kylintoolbutton.h" //#include "../component/systembutton.h" //#include "../component/loadinglabel.h" //class MainWindow; class CommonCheckBox : public QWidget { Q_OBJECT public: explicit CommonCheckBox(QWidget *parent = 0, const QString &picture= ""); ~CommonCheckBox(); // void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initConnect(); void setLabelText(const QString &title, int count); int getCheckBoxStatus(); public slots: void onZoneClicked(); void resetMainStatus(int status); signals: void customButtonClicked(); void spreadStatus(int status); private: QPushButton *img_btn; QCheckBox *checkbox; QLabel *name_label; QLabel *description_label; QPushButton *custom_btn; // MainWindow *p_mainwindow; }; #endif // COMMONCHECKBOX_H youker-assistant/component/cleanbutton.h0000664000175000017500000000304713260315532017522 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 CLEANBUTTON_H #define CLEANBUTTON_H #include #include "utils.h" class CleanButton : public QWidget { Q_OBJECT public: explicit CleanButton(QWidget *parent = 0); void setIconPath(const QString &icon); void setCleanButtonStatus(BUTTONSTATUS status); void setCheckboxStatus(int status); signals: void clicked(); protected: void paintEvent(QPaintEvent *); void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); private: int tristateStatus; QPixmap hoverPixmap; QPixmap grayhoverPixmap; QPixmap checkPixmap; QPixmap uncheckPixmap; QList checkboxList; BUTTONSTATUS buttonStatus; QRect checkboxRect; }; #endif // CLEANBUTTON_H youker-assistant/component/selectcategorywidget.cpp0000664000175000017500000001000013260315532021743 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "selectcategorywidget.h" #include "utils.h" #include #include SelectCategoryWidget::SelectCategoryWidget(CleanerCategoryID id, const QString &title, bool needMin, QWidget *parent) : QDialog(parent) , m_mousePressed(false) , m_id(id) { this->setWindowFlags(Qt::FramelessWindowHint); this->setFixedSize(464, 500); QWidget *containerWidget = new QWidget(this); m_mainLayout = new QVBoxLayout(containerWidget); m_mainLayout->setSpacing(0); m_mainLayout->setMargin(0); m_mainLayout->setContentsMargins(0,0,0,0); m_titleBar = new MyTitleBar(title, needMin, this); m_titleBar->setFixedSize(this->width(), TITLE_BAR_HEIGHT); m_listWidget = new SelectListWidget(true, this); m_listWidget->setFixedSize(this->width(), this->height() - TITLE_BAR_HEIGHT); m_mainLayout->addWidget(m_titleBar); m_mainLayout->addWidget(m_listWidget); connect(m_titleBar, SIGNAL(minSignal()), this, SLOT(hide())); connect(m_titleBar, SIGNAL(closeSignal()), this, SLOT(onClose())); connect(m_listWidget, SIGNAL(notifyMainCheckBox(int)), this, SIGNAL(notifyMainCheckBox(int))); //边框阴影效果 // QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); // shadow_effect->setBlurRadius(5); // shadow_effect->setColor(QColor(0, 0, 0, 127)); // shadow_effect->setOffset(2, 4); // this->setGraphicsEffect(shadow_effect); QDesktopWidget* desktop = QApplication::desktop(); this->move((desktop->width() - this->width())/2, (desktop->height() - this->height())/3); } SelectCategoryWidget::~SelectCategoryWidget() { delete m_titleBar; delete m_listWidget; delete m_mainLayout; } void SelectCategoryWidget::onClose() { emit refreshSelectedItems(m_id, m_listWidget->getSelectedItems()); this->close(); } void SelectCategoryWidget::loadData(const QStringList &arglist, const QStringList &statuslist) { m_listWidget->loadListItemsWithTips(arglist, statuslist, this->width()-2*ITEM_LEFT_RIGHT_PADDING); } void SelectCategoryWidget::moveCenter() { /*QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); this->show(); this->raise();*/ } void SelectCategoryWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->m_dragPosition = event->globalPos() - frameGeometry().topLeft(); this->m_mousePressed = true; } QDialog::mousePressEvent(event); } void SelectCategoryWidget::mouseReleaseEvent(QMouseEvent *event) { this->m_mousePressed = false; setWindowOpacity(1); QDialog::mouseReleaseEvent(event); } void SelectCategoryWidget::mouseMoveEvent(QMouseEvent *event) { if (this->m_mousePressed) { move(event->globalPos() - this->m_dragPosition); setWindowOpacity(0.9); } QDialog::mouseMoveEvent(event); } youker-assistant/component/systembutton.h0000664000175000017500000000270413260315532017763 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SYSTEMBUTTON_H #define SYSTEMBUTTON_H #include #include #include class SystemButton : public QPushButton { Q_OBJECT public: explicit SystemButton(QWidget *parent = 0); void loadPixmap(QString pic_name); protected: void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *); signals: public slots: private: QPixmap pixmap; enum ButtonStatus{NORMAL, ENTER, PRESS}; ButtonStatus status; bool m_mousePressed; //按钮左键是否按下 int btn_width; int btn_height; }; #endif // SYSTEMBUTTON_H youker-assistant/component/selectwidget.cpp0000664000175000017500000000763113260315532020225 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "selectwidget.h" #include "utils.h" #include #include SelectWidget::SelectWidget(CleanerModuleID id, const QString &title, bool needMin, QWidget *parent) : QDialog(parent) , m_mousePressed(false) , m_id(id) { this->setWindowFlags(Qt::FramelessWindowHint); this->setFixedSize(464, 500); QWidget *containerWidget = new QWidget(this); m_mainLayout = new QVBoxLayout(containerWidget); m_mainLayout->setContentsMargins(0,0,0,0); m_mainLayout->setSpacing(0); m_mainLayout->setMargin(0); m_titleBar = new MyTitleBar(title, needMin, this); m_titleBar->setFixedSize(this->width(), TITLE_BAR_HEIGHT); m_listWidget = new SelectListWidget(false, this); m_listWidget->setFixedSize(this->width(), this->height() - TITLE_BAR_HEIGHT); m_mainLayout->addWidget(m_titleBar); m_mainLayout->addWidget(m_listWidget); connect(m_titleBar, SIGNAL(minSignal()), this, SLOT(hide())); connect(m_titleBar, SIGNAL(closeSignal()), this, SLOT(onClose())); connect(m_listWidget, SIGNAL(notifyMainCheckBox(int)), this, SIGNAL(notifyMainCheckBox(int))); // //边框阴影效果 // QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); // shadow_effect->setBlurRadius(5); // shadow_effect->setColor(QColor(0, 0, 0, 127)); // shadow_effect->setOffset(2, 4); // this->setGraphicsEffect(shadow_effect); QDesktopWidget* desktop = QApplication::desktop(); this->move((desktop->width() - this->width())/2, (desktop->height() - this->height())/3); } SelectWidget::~SelectWidget() { delete m_titleBar; delete m_listWidget; delete m_mainLayout; } void SelectWidget::onClose() { emit refreshSelectedItems(m_id, m_listWidget->getSelectedItems()); this->close(); } void SelectWidget::loadData(const QString &title, const QStringList &cachelist) { m_listWidget->loadListItems(title, cachelist, this->width() - 2*ITEM_LEFT_RIGHT_PADDING); } void SelectWidget::moveCenter() { /*QPoint pos = QCursor::pos(); QRect primaryGeometry; for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { primaryGeometry = screen->geometry(); } } if (primaryGeometry.isEmpty()) { primaryGeometry = qApp->primaryScreen()->geometry(); } this->move(primaryGeometry.x() + (primaryGeometry.width() - this->width())/2, primaryGeometry.y() + (primaryGeometry.height() - this->height())/2); this->show(); this->raise();*/ } void SelectWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { this->m_dragPosition = event->globalPos() - frameGeometry().topLeft(); this->m_mousePressed = true; } QDialog::mousePressEvent(event); } void SelectWidget::mouseReleaseEvent(QMouseEvent *event) { this->m_mousePressed = false; setWindowOpacity(1); QDialog::mouseReleaseEvent(event); } void SelectWidget::mouseMoveEvent(QMouseEvent *event) { if (this->m_mousePressed) { move(event->globalPos() - this->m_dragPosition); setWindowOpacity(0.9); } QDialog::mouseMoveEvent(event); } youker-assistant/component/normalcard.ui0000664000175000017500000000322413260315532017511 0ustar fengfeng NormalCard 0 0 119 139 Form 0 0 119 119 0 0 119 119 92 92 22 22 0 0 119 119 0 119 119 20 Qt::AlignCenter youker-assistant/component/mytitlebar.cpp0000664000175000017500000001046413260315532017714 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "mytitlebar.h" #include "utils.h" #include "../../plugins/widgets/mytristatebutton.h" #include #include #include #include MyTitleBar::MyTitleBar(const QString &title, bool needMin, QWidget *parent) :QFrame(parent) , m_title(title) , m_needMin(needMin) { this->setWindowFlags(Qt::FramelessWindowHint);//this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowCloseButtonHint); // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//Attention: Qt::WindowCloseButtonHint make showMinimized() valid this->setMouseTracking(true); this->setFixedHeight(TITLE_BAR_HEIGHT); this->setAutoFillBackground(true); // this->setAttribute(Qt::WA_TranslucentBackground); QPalette palette; palette.setColor(QPalette::Background, QColor("#0d87ca")); this->setPalette(palette); initWidgets(); } MyTitleBar::~MyTitleBar() { QLayoutItem *child; while ((child = m_lLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_mLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } while ((child = m_rLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } delete m_layout; } void MyTitleBar::setLeftContent(QWidget *content) { QLayoutItem *child; while ((child = m_lLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } m_lLayout->addWidget(content); } void MyTitleBar::setMiddleContent(QWidget *content) { QLayoutItem *child; while ((child = m_mLayout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } m_mLayout->addWidget(content); } void MyTitleBar::initLeftContent() { QWidget *w = new QWidget; m_lLayout = new QHBoxLayout(w); m_lLayout->setContentsMargins(6, 0, 0, 0); m_lLayout->setSpacing(0); QLabel *titleLabel = new QLabel; titleLabel->setStyleSheet("QLabel{background-color:transparent;color:#ffffff; font-size:12px;}"); titleLabel->setText(m_title); m_lLayout->addWidget(titleLabel); m_layout->addWidget(w, 1, Qt::AlignLeft); } void MyTitleBar::initMiddleContent() { QWidget *w = new QWidget; w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_mLayout = new QHBoxLayout(w); m_mLayout->setContentsMargins(0, 0, 0, 0); m_mLayout->setSpacing(0); m_layout->addWidget(w); } void MyTitleBar::initRightContent() { QWidget *w = new QWidget; m_rLayout = new QHBoxLayout(w); m_rLayout->setContentsMargins(0, 0, 0, 0); m_rLayout->setSpacing(0); m_layout->addWidget(w, 1, Qt::AlignRight); if (m_needMin) { MyTristateButton *minBtn = new MyTristateButton; minBtn->setObjectName("MinButton"); connect(minBtn, SIGNAL(clicked()), this, SIGNAL(minSignal())); m_rLayout->addWidget(minBtn); } MyTristateButton *closeBtn = new MyTristateButton; closeBtn->setObjectName("CloseButton"); connect(closeBtn, SIGNAL(clicked()), this, SIGNAL(closeSignal())); m_rLayout->addWidget(closeBtn); } void MyTitleBar::initWidgets() { m_layout = new QHBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); initLeftContent(); initMiddleContent(); initRightContent(); } youker-assistant/component/toolbutton.h0000664000175000017500000000257613260315532017423 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 TOOLBUTTON_H #define TOOLBUTTON_H #include #include "utils.h" class QLabel; class ToolButton : public QWidget { Q_OBJECT public: explicit ToolButton(QWidget *parent = 0, bool whiteflag = false); ~ToolButton(); void setIcon(const QString &icon); void setText(const QString &text); void setToolButtonStatus(BUTTONSTATUS status); protected: void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); signals: void clicked(); private: QLabel *iconLabel; QLabel *textLabel; }; #endif // TOOLBUTTON_H youker-assistant/component/normalcard.cpp0000664000175000017500000000477413260315532017671 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 "normalcard.h" #include "ui_normalcard.h" #include NormalCard::NormalCard(QString title, QWidget *parent) : QWidget(parent), ui(new Ui::NormalCard) { ui->setupUi(this); // ui->raiseWidget->setStyleSheet("QWidget{background:transparent url(:/background/res/skin/1.png);icon-size:20px 5px}"); ui->raiseWidget->setStyleSheet("QWidget{background:transparent url(://res/theme-cover.png);}"); ui->baseWidget->setStyleSheet("QWidget{background:transparent;}"); this->icon_name = title; iconpath=QString(":/gtk/res/theme/" + title + ".png"); QPixmap pixmap(iconpath); if(pixmap.isNull()) { pixmap = QPixmap(":/gtk/res/theme/disappear.png"); } pixmap.copy(QRect(0,0,119,119)); ui->icon->setPixmap(pixmap); // ui->icon->setStyleSheet("QLabel{background-image:url('" + iconpath + "')}"); ui->icon->installEventFilter(this); ui->raiseWidget->installEventFilter(this); ui->name->setStyleSheet("QLabel{background: transparent;color:#666666;方正黑体_GBK;font-size: 14px;text-align: center;}"); ui->name->setText(title); ui->using_label->setStyleSheet("QLabel{background-image:url('://res/choose.png')}"); ui->using_label->hide(); } NormalCard::~NormalCard() { delete ui; } void NormalCard::showUsingLogo(bool flag) { if(flag) { ui->using_label->show(); ui->raiseWidget->hide(); } else { ui->using_label->hide(); ui->raiseWidget->show(); } } void NormalCard::enterEvent(QEvent *) { } void NormalCard::leaveEvent(QEvent *) { } bool NormalCard::eventFilter(QObject *obj, QEvent *event) { if(obj == ui->icon || obj == ui->raiseWidget){ if(event->type() == QEvent::MouseButtonRelease){ emit this->sendSelectThemeName(this->icon_name); } } return QObject::eventFilter(obj, event); } youker-assistant/component/cardwidget.cpp0000664000175000017500000000745613260315532017664 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cardwidget.h" #include #include "../component/utils.h" CardWidget::CardWidget(int cardwidth, int cardheight, int space, QWidget *parent) : QWidget(parent) { cardcount = 0; number_per_row = -1; this->itemwidth = cardwidth; this->itemheight = cardheight; this->cardspace = space; scrollArea = new QScrollArea(this); scrollArea->setStyleSheet("QScrollArea{border: none;background-color: #ffffff;}"); cardPanel = new QWidget(); cardPanel->setStyleSheet("QWidget{border: none;background-color: #ffffff;}"); this->scrollArea->setWidget(this->cardPanel); this->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); this->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); this->scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{margin:0px 0px 0px 0px;background-color:rgb(255,255,255,100);border:0px;width:6px;}\ QScrollBar::sub-line:vertical{subcontrol-origin:margin;border:1px solid red;height:13px}\ QScrollBar::up-arrow:vertical{subcontrol-origin:margin;background-color:blue;height:13px}\ QScrollBar::sub-page:vertical{background-color:#EEEDF0;}\ QScrollBar::handle:vertical{background-color:#D1D0D2;width:6px;} QScrollBar::handle:vertical:hover{background-color:#14ACF5;width:6px;} QScrollBar::handle:vertical:pressed{background-color:#0B95D7;width:6px;}\ QScrollBar::add-page:vertical{background-color:#EEEDF0;}\ QScrollBar::down-arrow:vertical{background-color:yellow;}\ QScrollBar::add-line:vertical{subcontrol-origin:margin;border:1px solid green;height:13px}"); // QVBoxLayout *v_layout = new QVBoxLayout(); // v_layout->addWidget(scrollArea); // v_layout->setSpacing(0);//设置间隔 // v_layout->setMargin(0);//设置总的外围边框 // v_layout->setContentsMargins(0, 0, 0, 0); // setLayout(v_layout); } CardWidget::~CardWidget() { if(cardPanel != NULL) { delete cardPanel; cardPanel = NULL; } } void CardWidget::calculate_data() { // this->scrollArea->setGeometry(-1, -1, this->width() + 2, this->height() + 2); this->scrollArea->setGeometry(0, 0, this->width(), this->height()); this->cardPanel->setGeometry(0, 0, this->width(), this->height()); this->number_per_row = (this->width() + this->cardspace) / (this->itemwidth + this->cardspace); } void CardWidget::add_card(QWidget *card) { int x = int(this->cardcount % this->number_per_row) * (this->itemwidth + this->cardspace); int y = int(this->cardcount / this->number_per_row) * (this->itemheight + this->cardspace); int nowHeight = y + this->itemheight; if(nowHeight >= this->cardPanel->height()) this->cardPanel->resize(this->cardPanel->width(), nowHeight); card->move(x, y); this->cardcount += 1; } void CardWidget::clear_card() { foreach (QObject *child, this->cardPanel->children()) { QWidget *widget = static_cast(child); widget->deleteLater(); } this->cardPanel->setGeometry(0, 0, this->width(), this->height()); this->cardcount = 0; } youker-assistant/component/plugininterface.h0000664000175000017500000000251613260315532020363 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PLUGININTERFACE_H #define PLUGININTERFACE_H #include #include class PluginInterface { public: virtual ~PluginInterface() {} virtual QString getGuid() = 0; virtual QString getName() = 0; virtual QString getDescribe() = 0; virtual QString getPicture() = 0; virtual void doAction() = 0; virtual QWidget *centralWidget() = 0; }; //Q_DECLARE_INTERFACE定义在在qobject.h中,用来告诉Qt meta-object system 这个接口名称 Q_DECLARE_INTERFACE(PluginInterface, "com.kylin.Plugin.PluginInterface") #endif // PLUGININTERFACE_H youker-assistant/component/settingaction.cpp0000664000175000017500000002370513260315532020415 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "settingaction.h" namespace { //const QMap titleMap() //{ // QMap m; // m.insert(SettingAction::ThemePage, "a"); // m.insert(SettingAction::IconPage, "b"); // m.insert(SettingAction::MousePage, "c"); // m.insert(SettingAction::SoundPage, "d"); // return m; //} //int filterTitleAccordModuleName(SettingAction::SettingModuleID id) //{ // return titleMap().value(id); //} const QMap titleMap() { QMap tMap; tMap.insert("ThemePage", QObject::tr("Choose the theme what you want")); tMap.insert("IconPage", QObject::tr("Set the desktop icon theme and the visibility of desktop icons")); tMap.insert("MousePage", QObject::tr("Replace the theme and size of the mouse pointer, and theme change need to restart system")); tMap.insert("SoundPage", QObject::tr("Set the sound theme you want")); tMap.insert("PanelPage", QObject::tr("Setting the panel mode of auto hide and icon size")); tMap.insert("MenuPage", QObject::tr("Manage display of the start menu")); tMap.insert("WindowPage", QObject::tr("Window Manager settings")); tMap.insert("FontPage", QObject::tr("According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings")); tMap.insert("TouchPadPage", QObject::tr("Setting the relevant properties of your touchpad,make the operation more convenient")); tMap.insert("EnergyPage", QObject::tr("Save energy to let the computer longer standby time")); tMap.insert("FMPage", QObject::tr("Manage the file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked")); return tMap; } QString filterTitleAccordModuleName(QString moduleName) { return titleMap().value(moduleName); } } SettingAction::SettingAction(QString cur_desktop, QWidget *parent) : QWidget(parent), desktop(cur_desktop) { this->setFixedSize(900, 150); this->setAutoFillBackground(true); this->setObjectName("transparentWidget"); m_moduleName = ""; back_btn = new QPushButton(); back_btn->setCursor(Qt::PointingHandCursor); back_btn->setFixedSize(91,39); back_btn->setFocusPolicy(Qt::NoFocus); QPixmap pixmap("://res/back-arrow.png"); back_btn->setIcon(pixmap); back_btn->setIconSize(pixmap.size()); back_btn->setObjectName("backgroundButton"); back_btn->setText(tr("Back")); connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); img_label = new QLabel(); title_label = new QLabel(); // description_label = new QLabel(); img_label->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 QPixmap label_pixmap("://res/systemset.png"); img_label->setPixmap(label_pixmap); img_label->setFixedSize(label_pixmap.size()); title_label->setObjectName("whiteLabel"); title_label->setFixedWidth(650); title_label->setWordWrap(true);//QLabel自动换行 // description_label->setWordWrap(true);//QLabel自动换行 // description_label->setObjectName("tipLabel"); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->addWidget(img_label, 0, Qt::AlignVCenter); layout1->addWidget(title_label, 0, Qt::AlignVCenter); layout1->setSpacing(20); layout1->setMargin(0); // layout1->setContentsMargins(20, 20, 0, 0); layout1->setContentsMargins(0, 0, 0, 0); // QVBoxLayout *layout1 = new QVBoxLayout(); // layout1->addStretch(); // layout1->addWidget(title_label); //// layout1->addWidget(description_label); // layout1->addStretch(); // layout1->setSpacing(15); // layout1->setMargin(0); // layout1->setContentsMargins(0, 0, 0, 0); QVBoxLayout *layout2 = new QVBoxLayout(); layout2->addWidget(back_btn); layout2->addStretch(); layout2->setMargin(0); layout2->setContentsMargins(0, 20, 0, 0); QHBoxLayout *main_layout = new QHBoxLayout(); // main_layout->addWidget(img_label, 0, Qt::AlignVCenter); main_layout->addLayout(layout1); main_layout->addStretch(); main_layout->addLayout(layout2); // main_layout->addWidget(back_btn, 0, Qt::AlignVCenter); main_layout->setSpacing(20); main_layout->setMargin(0); main_layout->setContentsMargins(20, 20, 0, 0); setLayout(main_layout); } SettingAction::~SettingAction() { if(back_btn != NULL) { delete back_btn; back_btn = NULL; } if(img_label != NULL) { delete img_label; img_label = NULL; } if(title_label != NULL) { delete title_label; title_label = NULL; } } QString SettingAction::getModuleName() /*const*/ { return this->m_moduleName; } //void SettingAction::setModuleName(const QString &name) void SettingAction::setModuleName(QString name) { this->m_moduleName = name; const QString title = filterTitleAccordModuleName(name); if (title.isEmpty() || title.isNull()) { title_label->setText(tr("There may be a mistake.")); } else { title_label->setText(title); } } void SettingAction::setLanguage(int index) { /*back_btn->setText(tr("Back")); switch (index) { case 1: title_label->setText(tr("Choose the theme what you want")); // description_label->setText(tr("Choose the theme what you want.")); break; case 2: title_label->setText(tr("Set the desktop icon theme and the visibility of desktop icons")); // description_label->setText(tr("Set the desktop icon theme and the visibility of desktop icons.")); break; case 3: title_label->setText(tr("Replace the theme and size of the mouse pointer, and theme change need to restart system")); // description_label->setText(tr("Replace the theme and size of the mouse pointer, then click the 'OK' button to confirm. Also, theme change need to restart system.")); break; case 4: title_label->setText(tr("Set the sound theme you want")); // description_label->setText(tr("Set the sound theme you want.")); break; // case 5: // title_label->setText(tr("Click the \"Custom Picture\" button to select the picture you want to add, click the picture you want to set and push the \"OK\" button to complete")); //// description_label->setText(tr("Click the \"Custom Picture\" button to select the picture you want to add, click the picture you want to set and push the \"OK\" button to complete.")); // break; case 5: if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "ukui" || this->desktop == "UKUI") title_label->setText(tr("Setting the panel mode of auto hide and icon size")); else title_label->setText(tr("Setting the Launcher display mode, Icon size")); // description_label->setText(tr("Setting the Launcher display mode, Icon size.")); break; case 6: if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "ukui" || this->desktop == "UKUI") title_label->setText(tr("Manage display of the start menu")); else title_label->setText(tr("Manage Dash and Panel menu settings")); // description_label->setText(tr("Manage Dash and Panel menu settings.")); break; case 7: title_label->setText(tr("Window Manager settings")); // description_label->setText(tr("Window Manager settings.")); break; case 8: title_label->setText(tr("According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings")); // description_label->setText(tr("According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings.")); break; case 9: title_label->setText(tr("Setting the relevant properties of your touchpad,make the operation more convenient")); // description_label->setText(tr("Setting the relevant properties of your touchpad,make the operation more convenient.")); break; case 10: title_label->setText(tr("Monitor Check")); // description_label->setText(tr("Monitor Check.")); break; case 11: title_label->setText(tr("Save energy to let the computer longer standby time")); break; case 12: if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "ukui" || this->desktop == "UKUI") title_label->setText(tr("Manage the Caja file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked")); else title_label->setText(tr("Manage the Nautilus file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked")); // description_label->setText(tr("Manage the Nautilus file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked.")); break; default: break; }*/ } youker-assistant/component/kylinswitcher.h0000664000175000017500000000256213260315532020104 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINSWITCHER_H #define KYLINSWITCHER_H #include #include #include class KylinSwitcher : public QWidget { Q_OBJECT public: explicit KylinSwitcher(QWidget *parent = 0); bool switchedOn; // void setSwitchStatus(bool flag) {switchedOn = flag;} protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *); // void enterEvent(QEvent *); signals: void clicked(); public slots: private: QPixmap pixmap_on; QPixmap pixmap_off; bool m_mousePressed; }; #endif // KYLINSWITCHER_H youker-assistant/component/cleanbutton.cpp0000664000175000017500000001104613260315532020053 0ustar fengfeng/* Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "cleanbutton.h" #include #include #include CleanButton::CleanButton(QWidget *parent) : QWidget(parent) { hoverPixmap.load("://res/shadow_hover"); grayhoverPixmap.load("://res/shadow_gray_hover"); this->setFixedSize(hoverPixmap.size()); QPixmap pixMap("://res/checkbox-two.png"); int width = pixMap.width(); int height = pixMap.height();//20 int num = 6;//6*20=120 for(int i=0; i != num; i++) { checkboxList.append(pixMap.copy(i*(width/num), 0, width/num, height)); } //设置checkbox的显示位置:x(62), y(53) checkboxRect.setX(60); checkboxRect.setY(53); checkboxRect.setSize(checkboxList.at(0).size()); } void CleanButton::setIconPath(const QString &icon) { checkPixmap.load(icon + "_check"); uncheckPixmap.load(icon + "_uncheck"); } void CleanButton::setCleanButtonStatus(BUTTONSTATUS status) { buttonStatus = status; update(); } void CleanButton::setCheckboxStatus(int status) { tristateStatus = status; setCleanButtonStatus(BUTTON_LEAVE); } void CleanButton::paintEvent(QPaintEvent *) { QPainter painter(this); switch (buttonStatus) { case BUTTON_LEAVE: if(tristateStatus == 2) { painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(2)); } else if(tristateStatus == 1) { painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(4)); } else if(tristateStatus == 0) { painter.drawPixmap(rect(), uncheckPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(0)); } break; case BUTTON_ENTER: if(tristateStatus == 2) { painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(2)); } else if(tristateStatus == 1) { painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(4)); } else if(tristateStatus == 0) { painter.drawPixmap(rect(), grayhoverPixmap); painter.drawPixmap(rect(), uncheckPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(0)); } break; case BUTTON_PRESSED: if(tristateStatus == 2) { painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(2)); } else if(tristateStatus == 1) { painter.drawPixmap(rect(), hoverPixmap); painter.drawPixmap(rect(), checkPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(4)); } else if(tristateStatus == 0) { painter.drawPixmap(rect(), grayhoverPixmap); painter.drawPixmap(rect(), uncheckPixmap); painter.drawPixmap(checkboxRect, checkboxList.at(0)); } break; default: break; } } void CleanButton::enterEvent(QEvent *) { setCleanButtonStatus(BUTTON_ENTER); } void CleanButton::leaveEvent(QEvent *) { setCleanButtonStatus(BUTTON_LEAVE); } void CleanButton::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { setCleanButtonStatus(BUTTON_PRESSED); } else { event->ignore(); } } void CleanButton::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { if(rect().contains(event->pos())) { setCleanButtonStatus(BUTTON_ENTER); emit this->clicked(); }else { setCleanButtonStatus(BUTTON_LEAVE); } } else { event->ignore(); } } youker-assistant/component/kylinlistwidget.h0000664000175000017500000000250613260315532020431 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINLISTWIDGET_H #define KYLINLISTWIDGET_H #include class MainWindow; class KylinListWidget : public QListWidget { Q_OBJECT public: KylinListWidget(QWidget *parent = 0); ~KylinListWidget(); void setMainWindow(MainWindow* window) { mainwindow = window;} public slots: void onItemClicked(QListWidgetItem *item); signals: void sendBackgroundName(QString name); protected: virtual void leaveEvent (QEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); private: MainWindow *mainwindow; }; #endif // KYLINLISTWIDGET_H youker-assistant/component/selectlistwidget.h0000664000175000017500000000400313260315532020554 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SELECTLISTWIDGET_H #define SELECTLISTWIDGET_H #include #include #include #include #include #include #include #include #include "selectlistitem.h" class SelectListWidget : public QWidget { Q_OBJECT public: explicit SelectListWidget(bool hasTip = false, QWidget *parent = 0); ~SelectListWidget(); public slots: void loadListItems(const QString &title, const QStringList &cachelist, int itemWidth); void loadListItemsWithTips(const QStringList &arglist, const QStringList &statuslist, int itemWidth); void removeOneItem(const QString &description); void resetToDefault(); QStringList getSelectedItems(); void resetSubCheckbox(int status); void scanAllSubCheckbox(); void onSelectedSignal(bool checked, QString description); signals: void notifyMainCheckBox(int status); private: bool m_hasTip; QGridLayout *m_gridLayout = nullptr; QScrollArea *m_scrollArea = nullptr; QWidget *m_widget = nullptr; QVBoxLayout *m_listAreaWidgetLayout = nullptr; QLabel *m_titleLabel = nullptr; // QLabel *m_countLabel = nullptr; QMap m_itemsMap; }; #endif // SELECTLISTWIDGET_H youker-assistant/component/kylinfontdialog.ui0000664000175000017500000001145213260315532020566 0ustar fengfeng KylinFontDialog 0 0 512 390 Dialog 0 0 512 30 0 30 512 359 126 10 371 20 <html><head/><body><p><br/></p></body></html> 444 59 51 27 14 9 111 20 <html><head/><body><p><span style=" font-weight:600;">Current Font:</span></p></body></html> 250 39 71 17 Style 444 39 91 17 Size 16 59 211 27 16 39 71 17 Font 250 59 171 27 445 90 51 161 17 90 211 161 251 90 171 161 426 320 70 28 OK 426 280 70 28 Cancel 20 260 81 17 View 20 280 391 71 youker-assistant/component/systemtray.h0000664000175000017500000000245013260315532017425 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SYSTEMTRAY_H #define SYSTEMTRAY_H #include #include #include #include #include #include #include #include class SystemTray : public QSystemTrayIcon { Q_OBJECT public: explicit SystemTray(QWidget *parent = 0); ~SystemTray(); void setLanguage(); signals: void showWidget(); private: void initTrayActions(); private: QMenu *tray_menu; QAction *action_open; QAction *action_logout; }; #endif // SYSTEMTRAY_H youker-assistant/component/commonwidget.h0000664000175000017500000000034513260315532017676 0ustar fengfeng#ifndef COMMONWIDGET_H #define COMMONWIDGET_H #include class CommonWidget : public QWidget { Q_OBJECT public: explicit CommonWidget(QWidget *parent = 0); signals: public slots: }; #endif // COMMONWIDGET_H youker-assistant/component/kylinaction.h0000664000175000017500000000160713260315532017530 0ustar fengfeng#ifndef __KYLINACTION_H__ #define __KYLINACTION_H__ #include //#include "qimpanelagent.h" //typedef enum SkinClass //{ // FCITX, // SOGOU //} SkinClass; class KylinAction : public QAction { Q_OBJECT public: // MyAction(const QString &text, QObject *parent); KylinAction(const QIcon &icon, const QString &text, QObject *parent); virtual ~KylinAction(); public: // void setProp(const KimpanelProperty &prop); // const KimpanelProperty& getProp(); void setSkinPath(const QString skinPath); const QString getSkinPath(); // void setSkinClass(const SkinClass skinClass); // SkinClass getSkinClass(); void setRealName(const QString realName); const QString getRealName(); private: // KimpanelProperty mProp; QString mSkinPath; // SkinClass mSkinClass; QString mRealName; public slots: void hover(); }; #endif // __KYLINACTION_H__ youker-assistant/component/threadpool.cpp0000664000175000017500000000263513260315532017702 0ustar fengfeng/* * Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "threadpool.h" #include ThreadPool::ThreadPool(QObject *parent) : QObject(parent) { } ThreadPool::~ThreadPool() { exitAllThreads(); } ThreadPool *ThreadPool::Instance() { static ThreadPool threadPool; return &threadPool; } QThread *ThreadPool::createNewThread() { QThread *thread = new QThread; m_threadPool.push_back(thread); return thread; } void ThreadPool::moveObjectToThread(QObject *obj) { QThread *work = createNewThread(); obj->moveToThread(work); work->start(); } void ThreadPool::exitAllThreads() { foreach (QThread *thread, m_threadPool) { thread->quit(); thread->wait(2000); } } youker-assistant/component/kylinlistwidget.cpp0000664000175000017500000000322213260315532020760 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "kylinlistwidget.h" #include "kylinlistwidgetitem.h" #include "mainwindow.h" KylinListWidget::KylinListWidget(QWidget *parent) :QListWidget(parent) { connect(this, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(onItemClicked(QListWidgetItem*))); } KylinListWidget::~KylinListWidget() { } void KylinListWidget::onItemClicked(QListWidgetItem *item) { KylinListWidgetItem* listitem = static_cast(item); emit this->sendBackgroundName(listitem->getSkinName()); mainwindow->changeSkin(listitem->getSkinName()); } void KylinListWidget::leaveEvent (QEvent *event) { mainwindow->reViewTheOrgSkin(); } void KylinListWidget::mouseMoveEvent(QMouseEvent *event) { QPoint point = event->pos(); KylinListWidgetItem *item = (KylinListWidgetItem*)itemAt(point); if (item) { item->paintPointSkin(); } event->ignore(); } youker-assistant/component/normalcard.h0000664000175000017500000000334713260315532017331 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 NORMALCARD_H #define NORMALCARD_H #include #include #include #include #include #include namespace Ui { class NormalCard; } class NormalCard : public QWidget { Q_OBJECT public: explicit NormalCard(QString title = "", QWidget *parent = 0); ~NormalCard(); // void switchAnimation(); void showUsingLogo(bool flag); public slots: // void slotShowDelayAnimation(); // void slotSwitchAnimationStep(); // void onDeleteBtnClicked(); signals: void sendSelectThemeName(QString name); // void sendEnterBackground(QString name); // void sendLeaveBackground(); // void sendDelteSignal(QString name); protected: void enterEvent(QEvent *); void leaveEvent(QEvent *); bool eventFilter(QObject *obj, QEvent *event); private: Ui::NormalCard *ui; // QTimer *switchTimer; // QTimer *delayTimer; // bool showDelay; // QString switchDirection; // int py; // QString iconDir; QString icon_name; QString iconpath; }; #endif // NORMALCARD_H youker-assistant/component/kylinfontdialog.h0000664000175000017500000000531713260315532020403 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 KYLINFONTDIALOG_H #define KYLINFONTDIALOG_H #include #include #include #include //#include "kylintitlebar.h" #include "../component/mytitlebar.h" #include class QSettings; class QLabel; class KylinFontDialog : public QDialog { Q_OBJECT public: explicit KylinFontDialog(/*QSettings *mSettings = 0, QString flag = "", */QString cur_font = "", QString skin = ":/background/res/skin/1.png", QWidget *parent = 0); ~KylinFontDialog(); void initDialog(); void setLanguage(); void initConnect(); void initTitleBar(QString skin); void updateSampleFont(); void resetTitleSkin(QString skin); void moveCenter(); public slots: void onCacelButtonClicked(); // void onMinButtonClicked(); void onOKButtonClicked(); signals: void rebackCurrentFont(QString cur_font); protected slots: void updateAll(QModelIndex index); void updateStyleandSize(QModelIndex index); void updateSize(QModelIndex index); protected: void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); bool eventFilter(QObject *obj, QEvent *event); private: // Ui::KylinFontDialog *ui; // QSettings *pSettings; QFontDatabase fdb; // QString fontFlag;//字体标记 QStringListModel *familymodel; QStringListModel *stylemodel; QStringListModel *sizemodel; QPoint dragPos; QString selectedFont; // KylinTitleBar *title_bar; MyTitleBar *title_bar; QLabel *cur_tip_label; QLabel *cur_font_label; QLabel *font_label; QLabel *style_label; QLabel *size_label; QLineEdit *font_edit; QLineEdit *style_edit; QLineEdit *size_edit; QListView *font_view; QListView *style_view; QListView *size_view; QLabel *sample_label; QLineEdit *sample_edit; QPushButton *ok_btn; QPushButton *cacel_btn; }; #endif // KYLINFONTDIALOG_H youker-assistant/component/alertdialog.ui0000664000175000017500000000120413260315532017652 0ustar fengfeng AlertDialog 0 0 200 75 Form 0 0 200 75 youker-assistant/component/commonwidget.cpp0000664000175000017500000000053413260315532020231 0ustar fengfeng#include "commonwidget.h" CommonWidget::CommonWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(110, 110); this->setWindowFlags(Qt::FramelessWindowHint); this->setAutoFillBackground(true); QPalette palette; palette.setColor(QPalette::Background, QColor(233,238,241));//#e9eef1 this->setPalette(palette); } youker-assistant/component/quibo.h0000664000175000017500000000216613260315532016324 0ustar fengfeng/* * Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * 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; version 3. * * 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 QUIBO_H #define QUIBO_H #include #include #include #include #include namespace Ui { class QUIBO; } class QUIBO : public QWidget { Q_OBJECT public: explicit QUIBO(QWidget *parent = 0); ~QUIBO(); void myshow(); private: Ui::QUIBO *ui; int cindex; QStringList *colors; void mouseReleaseEvent(QMouseEvent *me); void changeColor(); }; #endif // QUIBO_H youker-assistant/man/0000775000175000017500000000000013260315533013601 5ustar fengfengyouker-assistant/man/kylin-assistant.10000664000175000017500000000072613260315532017024 0ustar fengfeng.\" Hey, EMACS: -*- nroff -*- .TH KYLIN-ASSISTANT 1 "22 DEC 2017" .\" Please adjust this date whenever revising the manpage. .SH NAME kylin-assistant \- launch kylin-assistant frontends .SH SYNOPSIS .B kylin-assistant .SH DESCRIPTION .B kylin-assistant It is used to launch frontends. .PP .SH SEE ALSO .BR kylin-assistant (1), .br .SH AUTHOR kylin-assistant was written by lixiang . .PP This manual page was written by lixiang . youker-assistant/man/kylin-assistant-backend.py.10000664000175000017500000000076413260315532021042 0ustar fengfeng.\" Hey, EMACS: -*- nroff -*- .TH KYLIN-ASSISTANT-BACKEND 1 "22 DEC 2017" .\" Please adjust this date whenever revising the manpage. .SH NAME kylin-assistant-backend \- launch backends .SH SYNOPSIS .B kylin-assistant-backend .SH DESCRIPTION .B kylin-assistant-backend It is used to launch backends. .PP .SH SEE ALSO .BR kylin-assistant-backend (1), .br .SH AUTHOR kylin-assistant-backend was written by lixiang . .PP This manual page was written by lixiang . youker-assistant/man/youker-assistant.10000664000175000017500000000073413260315532017213 0ustar fengfeng.\" Hey, EMACS: -*- nroff -*- .TH YOUKER-ASSISTANT 1 "22 DEC 2017" .\" Please adjust this date whenever revising the manpage. .SH NAME youker-assistant \- launch kylin-assistant frontends .SH SYNOPSIS .B youker-assistant .SH DESCRIPTION .B youker-assistant It is used to launch frontends. .PP .SH SEE ALSO .BR youker-assistant (1), .br .SH AUTHOR youker-assistant was written by lixiang . .PP This manual page was written by lixiang . youker-assistant/man/kylin-assistant-session.py.10000664000175000017500000000076413260315532021136 0ustar fengfeng.\" Hey, EMACS: -*- nroff -*- .TH KYLIN-ASSISTANT-SESSION 1 "22 DEC 2017" .\" Please adjust this date whenever revising the manpage. .SH NAME kylin-assistant-session \- launch backends .SH SYNOPSIS .B kylin-assistant-session .SH DESCRIPTION .B kylin-assistant-session It is used to launch backends. .PP .SH SEE ALSO .BR kylin-assistant-session (1), .br .SH AUTHOR kylin-assistant-session was written by lixiang . .PP This manual page was written by lixiang . youker-assistant/man/kylin-assistant-system.10000664000175000017500000000101213260315532020333 0ustar fengfeng.\" Hey, EMACS: -*- nroff -*- .TH KYLIN-ASSISTANT-SYSTEM 1 "22 DEC 2017" .\" Please adjust this date whenever revising the manpage. .SH NAME kylin-assistant-system \- launch backends .SH SYNOPSIS .B kylin-assistant-system .SH DESCRIPTION .B kylin-assistant-system It is used to launch backends. Need to use root privilege. .PP .SH SEE ALSO .BR kylin-assistant-system (1), .br .SH AUTHOR kylin-assistant-system was written by lixiang . .PP This manual page was written by lixiang . youker-assistant/kylin-assistant.pro0000664000175000017500000000050713260315532016706 0ustar fengfengTEMPLATE = subdirs SUBDIRS = \ src \ plugins \ backends \ qdbusservice TRANSLATIONS += \ src/translation/kylin-assistant_zh_CN.ts \ src/translation/kylin-assistant_es.ts \ src/translation/kylin-assistant_de.ts \ src/translation/kylin-assistant_fr.ts \ src/translation/kylin-assistant_ru.ts youker-assistant/backends/0000775000175000017500000000000013265005454014603 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/0000775000175000017500000000000013260315532021175 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/0000775000175000017500000000000013260317316021766 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/cleaner/0000775000175000017500000000000013263553572023410 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/cleaner/softwareconfigfile.py0000664000175000017500000000354013260315532027631 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import subprocess from . import common class SoftwareConfigfile(): def __init__(self): pass def scan_configfile_packages(self): cache = common.get_cache_list() final_softwareconfigfile_list = [] status, output = subprocess.getstatusoutput('dpkg -l') result = [(line.split()[1]).split(':')[0] for line in output.split('\n') if line.startswith('rc')] for one in result: final_softwareconfigfile_list.append(cache[one]) return final_softwareconfigfile_list def get_configfile_packages(self): cache = common.get_cache_list() softwareconfigfile_list = [] status, output = subprocess.getstatusoutput('dpkg -l') result = [(line.split()[1]).split(':')[0] for line in output.split('\n') if line.startswith('rc')] for one in result: pkg = cache[one] softwareconfigfile_list.append('Name:' + pkg.name + ';' + 'Summary:' + ';' + 'Size:') return softwareconfigfile_list if __name__ == '__main__': obj = SoftwareConfigfile() a = obj.scan_configfile_packages() print(a) youker-assistant/backends/kylin-assistant-daemon/src/cleaner/osslim.py0000664000175000017500000000310613260315532025255 0ustar fengfengimport sys import apt import apt_pkg from apt.progress.base import InstallProgress from . import common class OsSlim(): def __init__(self): pass def get_unneed_packages(self): cache = common.get_cache_list() unneed_packages_list = [] if cache: for pkg in cache: if pkg.is_auto_removable and not pkg.name.startswith('linux'): unneed_packages_list.append('Name:' + pkg.name + ';' + 'Summary:' + pkg.installed.summary + ';' + 'Size:' + common.confirm_filesize_unit(pkg.installed.installed_size)) return unneed_packages_list def get_spare_packages(self): cache = common.get_cache_list() spare_packages_list = [] if cache: for pkg in cache: if pkg.is_auto_removable and not pkg.name.startswith('linux'): #if pkg.is_installed and pkg.name.startswith('linux-headers'): tmp_packages_list = [pkg.name, pkg.installed.summary, common.confirm_filesize_unit(pkg.installed.installed_size)] spare_packages_list.append('<2_2>'.join(tmp_packages_list)) return spare_packages_list def scan_spare_packages(self): cache = common.get_cache_list() final_spare_list = [] if cache: for pkg in cache: if pkg.is_auto_removable and not pkg.name.startswith('linux'): final_spare_list.append(pkg) return final_spare_list if __name__ == '__main__': obj = OsSlim() obj.get_spare_packages() #obj.clean_spare_packages() youker-assistant/backends/kylin-assistant-daemon/src/cleaner/cookiesclean.py0000664000175000017500000001022513260315532026406 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os.path import sqlite3 from .common import get_mozilla_path class CookiesClean(): def __init__(self, homedir): self.filename = 'cookies.sqlite' self.path = get_mozilla_path(homedir) def scan_the_records(self): save = [] if os.path.exists(self.path): scan_browser_conn = sqlite3.connect(self.path + self.filename) scan_browser_cur = scan_browser_conn.cursor() sql_select = 'SELECT baseDomain, count(*) FROM moz_cookies GROUP BY baseDomain' scan_browser_cur.execute(sql_select) for eachvisit in scan_browser_cur.fetchall(): tmp = list(eachvisit) tmp[-1] = str(tmp[-1]) tmp_str = '<2_2>'.join(tmp) save.append(tmp_str) scan_browser_cur.close() scan_browser_conn.close() return save def scan_cookies_records(self, filepath, tablename, keyname): result = [] if os.path.exists(filepath): scan_browser_conn = sqlite3.connect(filepath) scan_browser_cur = scan_browser_conn.cursor() sql_select = 'SELECT %s, count(*) FROM %s GROUP BY %s' % (keyname, tablename, keyname) scan_browser_cur.execute(sql_select) result = scan_browser_cur.fetchall() scan_browser_cur.close() scan_browser_conn.close() #result = ["%s<2_2>%s" % (eachone[0], str(eachone[-1])) for eachone in allvisit] return result def clean_cookies_record(self, filepath, tablename, keyname, domain): if os.path.exists(filepath): clean_browser_conn = sqlite3.connect(filepath) clean_browser_cur = clean_browser_conn.cursor() #sql_exist = "SELECT * FROM %s WHERE %s='%s'" % (tablename, keyname, domain) #clean_browser_cur.execute(sql_exist) #if clean_browser_cur.fetchone(): sql_delete = "DELETE FROM %s WHERE %s='%s'" % (tablename, keyname, domain) clean_browser_cur.execute(sql_delete) clean_browser_conn.commit() clean_browser_cur.close() clean_browser_conn.close() def clean_all_records(self, filename, tablename, keyname): if os.path.exists(filename): clean_browser_conn = sqlite3.connect(filename) clean_browser_cur = clean_browser_conn.cursor() sql_delete = "DELETE FROM %s" % tablename clean_browser_cur.execute(sql_delete) clean_browser_conn.commit() clean_browser_cur.close() clean_browser_conn.close() def clean_the_records(self, domain): if os.path.exists(self.path): clean_browser_conn = sqlite3.connect(self.path + self.filename) clean_browser_cur = clean_browser_conn.cursor() sql_exist = "SELECT * FROM moz_cookies WHERE baseDomain='%s'" % domain clean_browser_cur.execute(sql_exist) if clean_browser_cur.fetchone(): sql_delete = "DELETE FROM moz_cookies WHERE baseDomain='%s'" % domain clean_browser_cur.execute(sql_delete) clean_browser_conn.commit() clean_browser_cur.close() clean_browser_conn.close() return True else: return False if __name__ == "__main__": objc = CookiesClean() objc.scan_the_records() #objc.clean_the_records(['1188.com']) del objc youker-assistant/backends/kylin-assistant-daemon/src/cleaner/searchsame.py0000664000175000017500000000651213260315532026066 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import os.path import fnmatch import filecmp import hashlib class SearchSame(): def __init__(self): self.style = ['.gz', '.bz2'] self.style_dic = {} self.tmp_style_dic = {} def search_by_style(self, spath): if not os.path.exists(spath): raise Exception('no such path!') else: if not spath.endswith('/'): spath += '/' for name in os.listdir(spath): tmp = spath + name if os.path.islink(tmp): continue elif os.path.isdir(tmp): self.search_by_style(tmp) else: front, behind = os.path.splitext(tmp) if behind in self.style: addf, addb = os.path.splitext(front) if addb == '.tar': behind = addb + behind self.tmp_style_dic.setdefault(behind, []).append(tmp) def search_by_size(self): self.style_dic = self.reduce_the_dic(self.tmp_style_dic) size_dic = {} for k in list(self.style_dic.keys()): for abc in self.style_dic[k]: filesize = os.path.getsize(abc) size_dic.setdefault(filesize, []).append(abc) return self.reduce_the_dic(size_dic) def search_by_cmp(self): final_dic = {} size_dic = self.search_by_size() for k in list(size_dic.keys()): for content in size_dic[k]: sha1sumva = self.get_file_hash(content) final_dic.setdefault(sha1sumva, []).append(content) return self.reduce_the_dic(final_dic) def get_file_hash(self, filepath): with open(filepath, 'rb') as f: sha1obj = hashlib.sha1() sha1obj.update(f.read()) hashvalue = sha1obj.hexdigest() return hashvalue def adjust_the_dic(self): final_list = [] final_dic = self.search_by_cmp() for key in list(final_dic.keys()): tmp_str = "<2_2>".join(final_dic[key]) final_list.append(tmp_str) # init self.style_dic = {} self.tmp_style_dic = {} return final_list def reduce_the_dic(self, tmp_dic): for key in list(tmp_dic.keys()): if len(tmp_dic[key]) < 2: del tmp_dic[key] return tmp_dic if __name__ == '__main__': path = '/home/kylin/ubuntu-tweak' obj = SearchSame() obj.search_by_style(path) #obj.search_by_size() #obj.search_by_cmp() obj.adjust_the_dic() #obj.get_file_hash('/home/aya/test.py') youker-assistant/backends/kylin-assistant-daemon/src/cleaner/diskanalyse.py0000664000175000017500000000453013260315532026260 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import os.path from . import common class DiskAnalyse(): def __init__(self): pass def hundred_large_files(self, size, path): mypath = path final_list = [] if os.path.exists(mypath): for rootpath, dirnames, filenames in os.walk(mypath): for filename in filenames: flag = True filepath = os.path.join(rootpath, filename) if os.path.islink(filepath): continue filelist = [os.path.getsize(filepath), filepath] if not final_list and filelist[0] >= size: final_list.append(filelist) flag = False else: for index, values in enumerate(final_list): if filelist > values: final_list.insert(index, filelist) flag = False break if flag and filelist[0] >= size : final_list.append(filelist) else: pass return final_list def adjust_the_list(self, size, path): final_str = [] tmp_list = self.hundred_large_files(size, path) if tmp_list: for tmp in tmp_list: tmp[0] = common.confirm_filesize_unit(tmp[0]) final_str.append('<2_2>'.join(tmp)) return final_str if __name__ == '__main__': obj = DiskAnalyse() obj.hundred_large_files() obj.type_of_file() youker-assistant/backends/kylin-assistant-daemon/src/cleaner/oldkernel.py0000664000175000017500000000561413260315532025734 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os #import apt import apt_pkg import re from . import common class OldKernel(): def __init__(self): #cache = None self.flag = '(\w+-)*[.\d]+-\d+[\D]*' def scan_oldkernel_packages(self): #pkgs = self.cache.packages cache = common.get_cache_list() final_oldkernel_list = [] current_version = '-'.join(os.uname()[2].split('-')[:2]) if cache: for pkg in cache: if pkg.is_installed and pkg.name.startswith('linux'): if re.match(self.flag, pkg.name): #version = pkg.installedVersion[:-3] version = pkg.installed.version if apt_pkg.version_compare(version, current_version) < 0: #tmp_oldkernel_list = [pkg.name, common.confirm_filesize_unit(pkg.installedSize)] #final_oldkernel_list.append('<2_2>'.join(tmp_oldkernel_list)) final_oldkernel_list.append(pkg) return final_oldkernel_list def get_oldkernel_packages(self): #pkgs = self.cache.packages cache = common.get_cache_list() oldkernel_list = [] current_version = '-'.join(os.uname()[2].split('-')[:2]) if cache: for pkg in cache: if pkg.is_installed and pkg.name.startswith('linux'): if re.match(self.flag, pkg.name): #version = pkg.installedVersion[:-3] version = pkg.installed.version if apt_pkg.version_compare(version, current_version) < 0: #tmp_oldkernel_list = [pkg.name, common.confirm_filesize_unit(pkg.installedSize)] #final_oldkernel_list.append('<2_2>'.join(tmp_oldkernel_list)) oldkernel_list.append('Name:' + pkg.name + ';' + 'Summary:' + pkg.installed.summary + ';' + 'Size:' + common.confirm_filesize_unit(pkg.installed.installed_size)) return oldkernel_list if __name__ == "__main__": objo = OldKernel() #objo.get_the_kernel() aaa = objo.get_old_kernel() print(aaa) youker-assistant/backends/kylin-assistant-daemon/src/cleaner/systemhistory.py0000664000175000017500000000334413260315532026721 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from xml.etree import ElementTree class SystemHistory(): def __init__(self): pass def scan_the_xml(self, homedir): if homedir: xml_path = '%s/.local/share/' % homedir else: xml_path = os.path.expanduser('~/.local/share/') full_path = xml_path + 'recently-used.xbel' hreflist = [] if os.path.exists(full_path): tree = ElementTree.parse(full_path) nodes = tree.findall("bookmark") for node in nodes: hreflist.append(node.get('href')) return hreflist def clean_the_xml(self, homedir): xml_path = '%s/.local/share/' % homedir full_path = xml_path + 'recently-used.xbel' if os.path.exists(full_path): tree = ElementTree.parse(full_path) root = tree.getroot() root .clear() tree.write(full_path, encoding="UTF-8", xml_declaration=None, default_namespace=None, method="xml") youker-assistant/backends/kylin-assistant-daemon/src/cleaner/cacheclean.py0000664000175000017500000000440213260315532026015 0ustar fengfengimport os from .common import get_dir_size from .common import confirm_filesize_unit class CacheClean(): def __init__(self): pass def get_apt_cache(self): apt_cache = '/var/cache/apt/archives' #aptcachelist = map(lambda filename: '%s/%s<2_2>%s' % (apt_cache, filename, str(os.path.getsize('%s/%s' % (apt_cache, filename)))), filter(lambda filestr: filestr.endswith('deb'), os.listdir(apt_cache))) aptcachelist = ['%s/%s<2_2>%s' % (apt_cache,filename, confirm_filesize_unit(os.path.getsize('%s/%s' % (apt_cache, filename)))) for filename in os.listdir(apt_cache) if filename.endswith('deb')] return aptcachelist def scan_apt_cache(self, path): aptcache_list = [] if os.path.exists(path): aptcache_list = ['%s/%s' % (path, filename) for filename in os.listdir(path) if filename.endswith('deb')] return aptcache_list def public_scan_cache(self, path): publiccache_list = [] if os.path.exists(path): publiccache_list = ['%s/%s' % (path, filename) for filename in os.listdir(path)] return publiccache_list def firefox_scan_cache(self, path): firefoxcache_list = [] if os.path.exists(path): firefoxcache_list = ['%s/%s' % (path, filename) for filename in os.listdir(path) if filename in 'Cache'] return firefoxcache_list def get_softwarecenter_cache(self, homedir): centercachelist = [] if homedir: softwarecenter_cache = '%s/.cache/software-center/' % homedir else: softwarecenter_cache = os.path.expanduser('~/.cache/software-center/') full_path = softwarecenter_cache if os.path.exists(full_path): for one in os.listdir(full_path): tmp_path = full_path + one if os.path.isdir(tmp_path): size = get_dir_size(tmp_path) centercachelist.append('%s<2_2>%s' % (tmp_path, confirm_filesize_unit(size))) else: centercachelist.append('%s<2_2>%s' % (tmp_path, confirm_filesize_unit(os.path.getsize(tmp_path)))) return centercachelist if __name__ == "__main__": obja = CacheClean() obja.get_apt_cache() obja.get_softwarecenter_cache() youker-assistant/backends/kylin-assistant-daemon/src/cleaner/historyclean.py0000664000175000017500000001467613260315532026471 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os.path import sqlite3 from .common import process_pid from .common import get_mozilla_path class HistoryClean(): def __init__(self, homedir): self.filename = 'places.sqlite' self.path = get_mozilla_path(homedir) def scan_the_records(self): save = [] if os.path.exists(self.path): scan_browser_conn = sqlite3.connect(self.path + self.filename) scan_browser_cur = scan_browser_conn.cursor() sql_select = "SELECT moz_historyvisits.place_id, moz_places.url, moz_places.title, count(*) FROM moz_historyvisits, moz_places WHERE moz_historyvisits.place_id=moz_places.id GROUP BY moz_historyvisits.place_id" scan_browser_cur.execute(sql_select) for eachvisit in scan_browser_cur.fetchall(): tmp = list(eachvisit) tmp[0], tmp[-1] = str(tmp[0]), str(tmp[-1]) if not isinstance(tmp[2], str): tmp[2] = str(tmp[2]) tmp_str = '<2_2>'.join(tmp) save.append(tmp_str) scan_browser_cur.close() scan_browser_conn.close() return save def scan_firefox_history_records(self, filepath): result = [] if os.path.exists(filepath): scan_browser_conn = sqlite3.connect(filepath) scan_browser_cur = scan_browser_conn.cursor() sql_select = "SELECT moz_historyvisits.place_id, moz_places.url, count(*) FROM moz_historyvisits, moz_places WHERE moz_historyvisits.place_id=moz_places.id GROUP BY moz_historyvisits.place_id" scan_browser_cur.execute(sql_select) result = scan_browser_cur.fetchall() #result = ["%s<2_2>%s<2_2>%s" % (str(each[0]), each[1], str(each[2])) for each in allvisit] scan_browser_cur.close() scan_browser_conn.close() return result def scan_chromium_history_records(self, filepath): result = [] if os.path.exists(filepath): scan_chromium_conn = sqlite3.connect(filepath) scan_chromium_cur = scan_chromium_conn.cursor() sql_select = "SELECT visits.url, urls.url, count(*) FROM visits, urls WHERE visits.url=urls.id GROUP BY visits.url" scan_chromium_cur.execute(sql_select) result = scan_chromium_cur.fetchall() #result = ["%s<2_2>%s<2_2>%s" % (str(each[0]), each[1], str(each[2])) for each in allvisit] scan_chromium_cur.close() scan_chromium_conn.close() return result def clean_firefox_all_records(self, filepath): if os.path.exists(filepath): clean_browser_conn = sqlite3.connect(filepath) clean_browser_cur = clean_browser_conn.cursor() sql_deletehistory = 'DELETE FROM moz_historyvisits' clean_browser_cur.execute(sql_deletehistory) clean_browser_conn.commit() sql_selectplace = 'SELECT place_id FROM moz_annos UNION SELECT fk FROM moz_bookmarks UNION SELECT place_id FROM moz_inputhistory' clean_browser_cur.execute(sql_selectplace) delete_place_id = clean_browser_cur.fetchall() delete_place_id_str = ','.join([ str(one[0]) for one in delete_place_id if one[0]]) sql_deleteplace = 'DELETE FROM moz_places WHERE id NOT IN (%s)' % delete_place_id_str clean_browser_cur.execute(sql_deleteplace) clean_browser_conn.commit() sql_selectfavicons = 'SELECT favicon_id FROM moz_places' clean_browser_cur.execute(sql_selectfavicons) delete_favicon_id = clean_browser_cur.fetchall() delete_favicon_id_str = ','.join([ str(one[0]) for one in delete_favicon_id if one[0]]) sql_deletefavicons = 'DELETE FROM moz_favicons WHERE id NOT in (%s)' % delete_favicon_id_str clean_browser_cur.execute(sql_deletefavicons) clean_browser_conn.commit() clean_browser_cur.close() clean_browser_conn.close() def clean_chromium_all_records(self, filepath): if os.path.exists(filepath): clean_chromium_conn = sqlite3.connect(filepath) clean_chromium_cur = clean_chromium_conn.cursor() tables = ['visits', 'urls', 'keyword_search_terms', 'segment_usage', 'segments'] for tn in tables: sql_delete = 'DELETE FROM %s' % tn clean_chromium_cur.execute(sql_delete) clean_chromium_conn.commit() clean_chromium_cur.close() clean_chromium_conn.close() def clean_the_records(self, history): int_history = int(history) sql_exist = 'SELECT * FROM moz_historyvisits WHERE place_id=%s' % int_history self.browser_cur.execute(sql_exist) if self.browser_cur.fetchone(): sql_delete = 'DELETE FROM moz_historyvisits WHERE place_id=%s ' % int_history self.browser_cur.execute(sql_delete) #self.browser_cur.execute('DELETE FROM moz_places WHERE visit_count=0') self.browser_conn.commit() return True else: return False def clean_all_records(self): if os.path.exists(self.path): clean_browser_conn = sqlite3.connect(self.path + self.filename) clean_browser_cur = clean_browser_conn.cursor() sql_deleteall = 'DELETE FROM moz_historyvisits' clean_browser_cur.execute(sql_deleteall) #self.browser_cur.execute('DELETE FROM moz_places WHERE visit_count=0') clean_browser_conn.commit() clean_browser_cur.close() clean_browser_conn.close() if __name__ == "__main__": objc = HistoryClean() objc.scan_the_records() #objc.clean_the_records(['36']) del objc youker-assistant/backends/kylin-assistant-daemon/src/cleaner/dashhistory.py0000664000175000017500000000353313260315532026314 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import subprocess import sqlite3 class DashHistory(): def __init__(self, homedir): self.full_path = '' if homedir: path = '%s/.local/share/zeitgeist/' % homedir else: path = os.path.expanduser('~/.local/share/zeitgeist/') self.full_path = path + 'activity.sqlite' if not os.path.exists(self.full_path): raise Exception("Dashhistory: path did not exist") def scan_the_records(self): self.browser_conn = sqlite3.connect(self.full_path) self.browser_cur = self.browser_conn.cursor() sql_select = "SELECT COUNT(*) FROM event_view" self.browser_cur.execute(sql_select) number = self.browser_cur.fetchone()[0] self.browser_cur.close() self.browser_conn.close() return number def clean_the_records(self): tmp_path = self.full_path user = tmp_path.split('/')[2] os.remove(tmp_path) cmd = "su - %s -c 'zeitgeist-daemon --replace & >& /dev/null'" % user (status, output) = subprocess.getstatusoutput(cmd) return youker-assistant/backends/kylin-assistant-daemon/src/cleaner/__init__.py0000664000175000017500000013062613263553572025531 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import sys import apt import apt_pkg import shutil import subprocess import threading import ctypes from apt.progress.base import InstallProgress import time from . import historyclean from . import cookiesclean from . import searchsame from . import diskanalyse from . import osslim from . import common from . import cacheclean from . import oldkernel from . import systemhistory from . import dashhistory from . import softwareconfigfile HOMEDIR = '' def get_user_homedir(homedir): global HOMEDIR HOMEDIR = homedir def return_homedir_sysdaemon(): global HOMEDIR return HOMEDIR # clean up by one key class OneKeyClean(): def __init__(self): self.objunneed = CleanTheUnneed() self.objcache = CleanTheCache() def get_onekey_crufts(self, sesdaemon, mode_list): homedir = common.return_homedir_sesdaemon() crufts_dic = {} total_dic = {} flag_dic = {'history': False, 'cookies': False, 'cache': False} for mode in mode_list: flag_dic['%s' % mode] = True time.sleep(1) if flag_dic['history']: historysize = 0 objhg = historyclean.HistoryClean(homedir) filepathf = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) if os.path.exists(filepathf): tempf_list = objhg.scan_firefox_history_records(filepathf) for onef in tempf_list: sesdaemon.display_scan_process(onef[1]) #sesdaemon.display_scan_process_msg(onef[1]) historysize += onef[2] filepathc = "%s/.config/chromium/Default/History" % homedir if os.path.exists(filepathc): run = common.process_pid("chromium-browser") if not run: tempc_list = objhg.scan_chromium_history_records(filepathc) for onec in tempc_list: sesdaemon.display_scan_process(onec[1]) #sesdaemon.display_scan_process_msg(onec[1]) historysize += onec[2] total_dic['history'] = str(historysize) sesdaemon.total_data_transmit('h', total_dic['history']) time.sleep(1) if flag_dic['cookies']: cookiessize = 0 objcg = cookiesclean.CookiesClean(homedir) filepathff = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) if os.path.exists(filepathff): pamf = [filepathff, 'moz_cookies', 'baseDomain'] tempff_list = objcg.scan_cookies_records(pamf[0], pamf[1], pamf[2]) for oneff in tempff_list: sesdaemon.display_scan_process(oneff[0]) #sesdaemon.display_scan_process_msg(oneff[0]) cookiessize += oneff[1] filepathcc = "%s/.config/chromium/Default/Cookies" % homedir if os.path.exists(filepathcc): pamc = [filepathcc, 'cookies', 'host_key'] tempcc_list = objcg.scan_cookies_records(pamc[0], pamc[1], pamc[2]) for onecc in tempcc_list: sesdaemon.display_scan_process(onecc[0]) #sesdaemon.display_scan_process_msg(onecc[0]) cookiessize += onecc[1] total_dic['cookies'] = str(cookiessize) sesdaemon.total_data_transmit('k', total_dic['cookies']) time.sleep(1) if flag_dic['cache']: cachesize = 0 objcache = cacheclean.CacheClean() apt_path = "/var/cache/apt/archives" temp_apt_list = objcache.scan_apt_cache(apt_path) for oneapt in temp_apt_list: sesdaemon.display_scan_process(oneapt) #sesdaemon.display_scan_process_msg(oneapt) cachesize += os.path.getsize(oneapt) swcenterpath = '%s/.cache/software-center' % homedir temp_swcenter_list = objcache.public_scan_cache(swcenterpath) for oneswcenter in temp_swcenter_list: sesdaemon.display_scan_process(oneswcenter) #sesdaemon.display_scan_process_msg(oneswcenter) if os.path.isdir(oneswcenter): cachesize += common.get_dir_size(oneswcenter) else: cachesize += os.path.getsize(oneswcenter) total_dic['cache'] = common.confirm_filesize_unit(cachesize) sesdaemon.total_data_transmit('c', total_dic['cache']) # add by kobe sesdaemon.scan_complete_msg('onekey') def clean_all_onekey_crufts(self, sysdaemon, mode_list): homedir = return_homedir_sysdaemon() flag_dic = {'history': False, 'cookies': False, 'cache': False} for mode in mode_list: flag_dic['%s' % mode] = True #if flag_dic['cache']: time.sleep(1) if mode_list[0] in '1': try: objclean = FunctionOfClean() objcache = cacheclean.CacheClean() apt_path = "/var/cache/apt/archives" temp_apt_list = objcache.scan_apt_cache(apt_path) for cachea in temp_apt_list: sysdaemon.status_for_quick_clean('apt', cachea) objclean.clean_the_file(cachea) sysdaemon.status_for_quick_clean('apt', 'end') swcenterpath = '%s/.cache/software-center' % homedir temp_swcenter_list = objcache.public_scan_cache(swcenterpath) for caches in temp_swcenter_list: sysdaemon.status_for_quick_clean('software_center', caches) objclean.clean_the_file(caches) sysdaemon.status_for_quick_clean('software_center', 'end') except Exception as e: sysdaemon.clean_error_onekey('ce') else: sysdaemon.clean_complete_onekey('c') #if flag_dic['history']: time.sleep(1) if mode_list[1] in '1': try: sysdaemon.status_for_quick_clean('firefoxhistory', 'start') objca = historyclean.HistoryClean(homedir) filepathf = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) objca.clean_firefox_all_records(filepathf) sysdaemon.status_for_quick_clean('firefoxhistory', 'end') run = common.process_pid("chromium-browser") if not run: sysdaemon.status_for_quick_clean('chromiumhistory', 'start') filepathc = "%s/.config/chromium/Default/History" % homedir objca.clean_chromium_all_records(filepathc) sysdaemon.status_for_quick_clean('chromiumhistory', 'end') except Exception as e: sysdaemon.clean_error_onekey('he') else: sysdaemon.clean_complete_onekey('h') #if flag_dic['cookies']: time.sleep(1) if mode_list[2] in '1': try: objcc = cookiesclean.CookiesClean(homedir) sysdaemon.status_for_quick_clean('firefoxcookies', 'start') filepathfc = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) pamfc = [filepathfc, 'moz_cookies', 'baseDomain'] objcc.clean_all_records(pamfc[0], pamfc[1], pamfc[2]) sysdaemon.status_for_quick_clean('firefoxcookies', 'end') sysdaemon.status_for_quick_clean('chromiumcookies', 'start') filepathcc = "%s/.config/chromium/Default/Cookies" % homedir pamcc = [filepathcc, 'cookies', 'host_key'] objcc.clean_all_records(pamcc[0], pamcc[1], pamcc[2]) sysdaemon.status_for_quick_clean('chromiumcookies', 'end') except Exception as e: sysdaemon.clean_error_onekey('ke') else: sysdaemon.clean_complete_onekey('k') sysdaemon.clean_complete_onekey('o') # the functions of search the same files class SearchTheSame(): def __init__(self): self.objs = searchsame.SearchSame() def get_scan_result(self, path): self.path = path self.objs.search_by_style(self.path) samefile_list = self.objs.adjust_the_dic() return samefile_list # the functions of manage the large files class ManageTheLarge(): def __init__(self): self.objl = diskanalyse.DiskAnalyse() # def get_large_files(self, size, path, sesdaemon): # objlg = diskanalyse.DiskAnalyse() # finalsize = size * 1024 * 1024 # largefile_list = objlg.hundred_large_files(finalsize, path) # for one in largefile_list: # sesdaemon.data_transmit_by_large(common.confirm_filesize_unit(one[0]), one[1]) # sesdaemon.large_transmit_complete() def get_scan_result(self, size, path): self.path = path finalsize = size * 1024 * 1024 #self.objl.hundred_large_files(finalsize, self.path) #self.objl.type_of_file() largefile_dic = self.objl.adjust_the_list(finalsize, self.path) return largefile_dic # the functions of clean the browser history class CleanTheHistory(): def __init__(self): pass #def new_get_history_crufts(self, flag, sesdaemon): # homedir = common.return_homedir_sesdaemon() # objhg = historyclean.HistoryClean(homedir) # crufts_list = [] # cache = common.get_cache_list() # if flag in "firefox": # if cache['firefox'].is_installed: # filepathf = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) # if not common.process_pid("firefox"): # if os.path.exists(filepathf): # temp_list = objhg.scan_firefox_history_records(filepathf) # sesdaemon.data_transmit_by_history(sum([sin[2] for sin in temp_list])) # else: # sesdaemon.browser_status_by_history('fruning') # else: # sesdaemon.history_transmit_complete('funinstall') # if flag in "chromium": # if cache['chromium'].is_installed: # filepathc = "%s/.config/chromium/Default/History" % homedir # if not common.process_pid("chromium-browser"): # if os.path.exists(filepathc): # temp_list = objhg.scan_chromium_history_records(filepathc) # sesdaemon.data_transmit_by_history(sum([sin[2] for sin in temp_list])) # else: # sesdaemon.browser_status_by_history('cruning') # else: # sesdaemon.history_transmit_complete('cuninstall') def get_history_crufts(self, flag): homedir = common.return_homedir_sesdaemon() objhg = historyclean.HistoryClean(homedir) crufts_list = [] cache = common.get_cache_list() if flag in "firefox": filepathf = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) if cache['firefox'].is_installed: if os.path.exists(filepathf): temp_list = objhg.scan_firefox_history_records(filepathf) crufts_list = ["%s<2_2>%s<2_2>%s" % (str(each[0]), each[1], str(each[2])) for each in temp_list] else: return 'No' if flag in "chromium": filepathc = "%s/.config/chromium/Default/History" % homedir if cache['chromium-browser'].is_installed: if os.path.exists(filepathc): run = common.process_pid("chromium-browser") if not run: temp_list = objhg.scan_chromium_history_records(filepathc) crufts_list = ["%s<2_2>%s<2_2>%s" % (str(each[0]), each[1], str(each[2])) for each in temp_list] else: return 'True' else: return 'No' return crufts_list def clean_all_history_crufts(self, flag): homedir = return_homedir_sysdaemon() objca = historyclean.HistoryClean(homedir) running = False if flag in "firefox": filepathf = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) objca.clean_firefox_all_records(filepathf) if flag in "chromium": run = common.process_pid("chromium-browser") if not run: filepathc = "%s/.config/chromium/Default/History" % homedir objca.clean_chromium_all_records(filepathc) else: running = True return running # the function of clean the system history class CleanSystemHistory(): def get_scan_result(self, homedir = ''): objhg = systemhistory.SystemHistory() url = objhg.scan_the_xml(homedir) return url def clean_the_cruftlist(self): global HOMEDIR objhc = systemhistory.SystemHistory() objhc.clean_the_xml(HOMEDIR) # the function of clean the dash history class CleanDashHistory(): def get_scan_result(self, homedir = ''): objhg = dashhistory.DashHistory(homedir) num = objhg.scan_the_records() return num def clean_the_cruftlist(self): global HOMEDIR objhc = dashhistory.DashHistory(HOMEDIR) objhc.clean_the_records() # the function of clean the cookies class CleanTheCookies(): def __init__(self, daemon_obj): self.daemon_obj = daemon_obj def get_cookie_crufts(self, flag, sesdaemon): homedir = common.return_homedir_sesdaemon() objcg = cookiesclean.CookiesClean(homedir) cache = common.get_cache_list() crufts_list = [] if flag in "firefox": if cache["firefox"].is_installed: filepathf = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) if os.path.exists(filepathf): pamf = [filepathf, 'moz_cookies', 'baseDomain'] temp_firefox_list = objcg.scan_cookies_records(pamf[0], pamf[1], pamf[2]) for one in temp_firefox_list: sesdaemon.data_transmit_by_cookies("firefox", one[0], str(one[-1])) sesdaemon.cookies_transmit_complete('firefox') else: sesdaemon.cookies_transmit_complete('funinstall') if flag in "chromium": if cache["chromium-browser"].is_installed: filepathc = "%s/.config/chromium/Default/Cookies" % homedir if os.path.exists(filepathc): pamc = [filepathc, 'cookies', 'host_key'] temp_chromium_list = objcg.scan_cookies_records(pamc[0], pamc[1], pamc[2]) for one in temp_chromium_list: sesdaemon.data_transmit_by_cookies("chromium", one[0], str(one[-1])) sesdaemon.cookies_transmit_complete('chromium') else: sesdaemon.cookies_transmit_complete('cuninstall') def get_cookies_crufts(self, flag): homedir = common.return_homedir_sesdaemon() objcg = cookiesclean.CookiesClean(homedir) crufts_list = [] if flag in "firefox": filepathf = common.analytical_profiles_file(homedir) + "cookies.sqlite" if os.path.exists(filepathf): pamf = [filepathf, 'moz_cookies', 'baseDomain'] temp_list = objcg.scan_cookies_records(pamf[0], pamf[1], pamf[2]) crufts_list = ["%s<2_2>%s" % (eachone[0], str(eachone[-1])) for eachone in temp_list] else: crufts_list.append('None') return crufts_list if flag in "chromium": filepathc = "%s/.config/chromium/Default/Cookies" % homedir if os.path.exists(filepathc): pamc = [filepathc, 'cookies', 'host_key'] temp_list = objcg.scan_cookies_records(pamc[0], pamc[1], pamc[2]) crufts_list = ["%s<2_2>%s" % (eachone[0], str(eachone[-1])) for eachone in temp_list] else: crufts_list.append('None') return crufts_list return crufts_list def clean_one_cookies_cruft(self, flag, domain): homedir = return_homedir_sysdaemon() objcc = cookiesclean.CookiesClean(homedir) if flag in "firefox": filepathf = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) pamf = [filepathf, 'moz_cookies', 'baseDomain', domain] objcc.clean_cookies_record(pamf[0], pamf[1], pamf[2], pamf[3]) if flag in "chromium": filepathc = "%s/.config/chromium/Default/Cookies" % homedir pamc = [filepathc, 'cookies', 'host_key', domain] objcc.clean_cookies_record(pamc[0], pamc[1], pamc[2], pamc[3]) def clean_all_cookies_crufts(self, flag): homedir = return_homedir_sysdaemon() objcc = cookiesclean.CookiesClean(homedir) if flag in "firefox": filepathf = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) pamf = [filepathf, 'moz_cookies', 'baseDomain'] objcc.clean_all_records(pamf[0], pamf[1], pamf[2]) if flag in "chromium": filepathc = "%s/.config/chromium/Default/Cookies" % homedir pamc = [filepathc, 'cookies', 'host_key'] objcc.clean_all_records(pamc[0], pamc[1], pamc[2]) # the function of scan the unneedpackages class CleanTheUnneed(): def __init__(self): self.objc = osslim.OsSlim() def get_scan_result(self): namesummarysize = self.objc.get_spare_packages() return namesummarysize # the function of clean old kernel class CleanTheOldkernel(): def __init__(self): pass def get_oldkernel_crufts(self): objc = oldkernel.OldKernel() pkgobj_list = objc.scan_oldkernel_packages() crufts_list = ["%s<2_2>%s" % (pkg.name, pkg.installed.summary, common.confirm_filesize_unit(pkg.installed.installed_size))for pkg in pkgobj_list] return crufts_list # the function of clean spare packages class CleanTheSpare(): def __init__(self): pass def get_all_package_crufts(self, mode_list, sesdaemon): if 'unneed' in mode_list: upkg_obj = osslim.OsSlim() temp_unneed_list = upkg_obj.scan_spare_packages() for upkg in temp_unneed_list: sesdaemon.data_transmit_by_package('unneed', upkg.name, upkg.installed.summary, common.confirm_filesize_unit(upkg.installed.installed_size)) if 'oldkernel' in mode_list: opkg_obj = oldkernel.OldKernel() temp_oldkernel_list = opkg_obj.scan_oldkernel_packages() for opkg in temp_oldkernel_list: sesdaemon.data_transmit_by_package('oldkernel', opkg.name, opkg.installed.summary, common.confirm_filesize_unit(opkg.installed.installed_size)) if 'configfile' in mode_list: spkg_obj = softwareconfigfile.SoftwareConfigfile() temp_configfile_list = spkg_obj.scan_configfile_packages() for spkg in temp_configfile_list: sesdaemon.data_transmit_by_package('configfile', spkg.name, '', '') sesdaemon.package_transmit_complete() # the function of scan the cache class CleanTheCache(): def __init__(self): self.objc = cacheclean.CacheClean() def get_all_cache_crufts(self, mode_list, flag, sesdaemon): homedir = common.return_homedir_sesdaemon() if 'apt' in mode_list: aptpath = "/var/cache/apt/archives" temp_apt_list = self.objc.scan_apt_cache(aptpath) for one in temp_apt_list: sesdaemon.data_transmit_by_cache('apt', one, 'False', '%s' % common.confirm_filesize_unit(os.path.getsize(one))) if 'software-center' in mode_list: softwarecenterpath = "%s/.cache/software-center" % homedir temp_softwarecenter_list = self.objc.public_scan_cache(softwarecenterpath) for one in temp_softwarecenter_list: if os.path.isdir(one): sesdaemon.data_transmit_by_cache('software-center', one, 'True', common.confirm_filesize_unit(common.get_dir_size(one))) else: sesdaemon.data_transmit_by_cache('software-center', one, 'False', common.confirm_filesize_unit(os.path.getsize(one))) if 'thumbnails' in mode_list: thumbnailspath = "%s/.cache/thumbnails" % homedir temp_thumbnails_list = self.objc.public_scan_cache(thumbnailspath) for one in temp_thumbnails_list: if os.path.isdir(one): sesdaemon.data_transmit_by_cache('thumbnails', one, 'True', common.confirm_filesize_unit(common.get_dir_size(one))) else: sesdaemon.data_transmit_by_cache('thumbnails', one, 'False',common.confirm_filesize_unit(os.path.getsize(one))) if 'firefox' in mode_list: firefoxpath = "%s/.cache/mozilla/firefox/%s" % (homedir, common.analytical_profiles_file(homedir)) #sesdaemon.path_transmit_by_cache('firefox', firefoxpath) temp_firefox_list = self.objc.firefox_scan_cache(firefoxpath) for one in temp_firefox_list: if os.path.isdir(one): sesdaemon.data_transmit_by_cache('firefox', one, 'True', common.confirm_filesize_unit(common.get_dir_size(one))) else: sedaemon.data_transmit_by_cache('firefox', one, 'False', common.confirm_filesize_unit(os.path.getsize(one))) if 'chromium' in mode_list: chromiumpath = "%s/.cache/chromium/Default" % homedir #sesdaemon.path_transmit_by_cache('chromium', chromiumpath) temp_chromium_list = self.objc.public_scan_cache(chromiumpath) for one in temp_chromium_list: if os.path.isdir(one): sesdaemon.data_transmit_by_cache('chromium', one, 'True', common.confirm_filesize_unit(common.get_dir_size(one))) else: sesdaemon.data_transmit_by_cache('chromium', one, 'False',common.confirm_filesize_unit(os.path.getsize(one))) sesdaemon.cache_transmit_complete(flag) # the function of clean cruft files and cruft packages #class FunctionOfClean(threading.Thread): class FunctionOfClean(): def __init__(self): #threading.Thread.__init__(self) #self.msgdaemon = msgdaemon pass def clean_the_file(self, cruft): tmp = cruft.encode("UTF-8") #sysdaemon.data_of_remove_file(tmp) if tmp: if os.path.isdir(tmp): shutil.rmtree(tmp) else: os.remove(tmp) #def clean_the_file(self, cruftlist): # threading.Thread(target=self.clean_the_file_thread, args=(cruftlist,), name='CleanFile').start() def clean_the_package(self, cruftlist, sysdaemon): if cruftlist: cache = common.get_cache_list() cache.open() for cruft in cruftlist: pkg = cache[cruft] if pkg.is_installed: pkg.mark_delete() else: pkg.mark_delete(purge=True) iprogress = MyInstallProgress(sysdaemon) cache.commit(None, iprogress) def purge_the_package(self, cruftlist, sysdaemon): if cruftlist: cache = common.get_cache_list() cache.open() for cruft in cruftlist: pkg = cache[cruft] pkg.mark_delete(purge=True) iprogress = MyInstallProgress(sysdaemon) cache.commit(None, iprogress) #def clean_the_package(self, cruftlist): # threading.Thread(target=self.clean_the_package_thread, args=(cruftlist,), name='CleanPackage').start() class MyInstallProgress(InstallProgress): def __init__(self, sysdaemon): InstallProgress.__init__(self) self.sysdaemon = sysdaemon def status_change(self, pkg, percent, status): self.sysdaemon.status_remove_packages("apt_pulse", "percent: %s, status: %s" % (str(int(percent)), status)) def error(self, errorstr): pass def finish_update(self): self.sysdaemon.status_remove_packages("apt_stop", "") def start_update(self): self.sysdaemon.status_remove_packages("apt_start", "") def cancel_mainpage_function(target_tid, exception): pass #found = False #target_tid = 0 #for tid, tobj in threading._active.items(): # if tobj is thread_obj: # found = True # target_tid = tid # break #if not found: # raise ValueError("Invalid thread object") # res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(target_tid), ctypes.py_object(exception)) # if res = 0: # raise ValueError("Invalid thread ID") # elif res > 1: # ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(target_tid), None) # raise SystemError("PyThreadState_SetAsyncExc failed") def get_threadid(thread_obj): found = False target_tid = 0 for tid, tobj in list(threading._active.items()): if tobj is thread_obj: found = True target_tid = tid break if not found: raise ValueError("Invalid thread object") return target_tid class MainPage(): def __init__(self): pass def get_cache(self, sesdaemon): flag = False totalsize = 0 homedir = '' cache_obj = cacheclean.CacheClean() if sesdaemon: homedir = common.return_homedir_sesdaemon() else: homedir = return_homedir_sysdaemon() self.cache_dic = {'apt':[], 'softwarecenter':[], 'thumbnail':[]} aptpath = "/var/cache/apt/archives" temp_apt_list = cache_obj.scan_apt_cache(aptpath) if sesdaemon: for one in temp_apt_list: self.cache_dic['apt'].append(one) totalsize += common.get_size(one) sesdaemon.check_scan_garbage_process(one) else: for one in temp_apt_list: self.cache_dic['apt'].append(one) softwarecenterpath = "%s/.cache/software-center" % homedir temp_softwarecenter_list = cache_obj.public_scan_cache(softwarecenterpath) if sesdaemon: for one in temp_softwarecenter_list: self.cache_dic['softwarecenter'].append(one) totalsize += common.get_size(one) sesdaemon.check_scan_garbage_process(one) else: for one in temp_softwarecenter_list: self.cache_dic['softwarecenter'].append(one) thumbnailspath = "%s/.cache/thumbnails" % homedir try: temp_thumbnails_list = cache_obj.public_scan_cache(thumbnailspath) except Exception as e: print(e) if sesdaemon: for one in temp_thumbnails_list: self.cache_dic['thumbnail'].append(one) totalsize += common.get_size(one) sesdaemon.check_scan_garbage_process(one) else: for one in temp_thumbnails_list: self.cache_dic['thumbnail'].append(one) if sesdaemon: for key in list(self.cache_dic.keys()): if self.cache_dic[key]: flag = True break if flag: sesdaemon.scan_complete('True') else: sesdaemon.scan_complete('False') size_str = common.confirm_filesize_unit(totalsize) sesdaemon.check_scan_complete(size_str) else: pass def clean_cache(self, sysdaemon): totalsize = 0 self.get_cache(None) for key in list(self.cache_dic.keys()): for f in self.cache_dic[key]: totalsize += common.get_size(f) if os.path.isdir(f): sysdaemon.info_for_mainpage_clean(f) shutil.rmtree(f) else: sysdaemon.info_for_mainpage_clean(f) os.remove(f) size_str = common.confirm_filesize_unit(totalsize) sysdaemon.mainpage_clean(size_str) #----------------------------NEW YOUKER-------------------- #---------------------SubPage--------------------- def append_cacheinfo_to_list(belong, path): info = [] info.append('Belong:%s' % belong) info.append('Path:%s' % path) if os.path.isdir(path): info.append('Type:directory') info.append('Size:%s' % common.confirm_filesize_unit(common.get_dir_size(path))) else: info.append('Type:file') info.append('Size:%s' % common.confirm_filesize_unit(os.path.getsize(path))) return info def interface_get_subpage_session(session, mode_dic): homedir = common.return_homedir_sesdaemon() cache = mode_dic.get('Cache', []) if cache: cache_obj = cacheclean.CacheClean() if 'apt' in cache: aptpath = "/var/cache/apt/archives" apt_list = cache_obj.scan_apt_cache(aptpath) for value in apt_list: info = append_cacheinfo_to_list('Cache.apt', value) session.subpage_data_signal(info) #else: #info = [] #info.append('Belong:Cache.apt') #info.append('') #session.subpage_data_signal(info) if 'software-center' in cache: swcenterpath = "%s/.cache/software-center" % homedir swcenter_list = cache_obj.public_scan_cache(swcenterpath) for value in swcenter_list: info = append_cacheinfo_to_list('Cache.software-center', value) session.subpage_data_signal(info) #else: #info = [] #info.append('Belong:Cache-apt') #info.append('') #session.subpage_data_signal(info) if 'thumbnails' in cache: thumbnailspath = "%s/.cache/thumbnails" % homedir thumbnails_list = cache_obj.public_scan_cache(thumbnailspath) for value in thumbnails_list: info = append_cacheinfo_to_list('Cache.thumbnails', value) session.subpage_data_signal(info) #else: #info = [] #info.append('Belong:Cache.thumbnails') #info.append('') #session.subpage_data_signal(info) if 'firefox' in cache: firefoxpath = "%s/.cache/mozilla/firefox/%s" % (homedir, common.analytical_profiles_file(homedir)) firefox_cache_list = cache_obj.firefox_scan_cache(firefoxpath) for value in firefox_cache_list: info = append_cacheinfo_to_list('Cache.firefox', value) session.subpage_data_signal(info) #else: #info = [] #info.append('Belong:Cache.firefox') #info.append('') #session.subpage_data_signal(info) if 'chromium' in cache: chromiumpath = "%s/.cache/chromium/Default" % homedir chromium_cache_list = cache_obj.public_scan_cache(chromiumpath) for value in chromium_cache_list: info = append_cacheinfo_to_list('Cache.chromium', value) session.subpage_data_signal(info) #else: #info = [] #info.append('Belong:Cache.chromium') #info.append('') #session.subpage_data_signal(info) session.subpage_status_signal('Complete:Cache') cookies = mode_dic.get('Cookies', []) if cookies: cache = common.get_cache_list() cookies_obj = cookiesclean.CookiesClean(homedir) if 'firefox' in cookies: if cache['firefox'].is_installed: ffcpath = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) if os.path.exists(ffcpath): ffcpam = [ffcpath, 'moz_cookies', 'baseDomain'] firefox_cookies_list = cookies_obj.scan_cookies_records(ffcpam[0], ffcpam[1], ffcpam[2]) for value in firefox_cookies_list: info = [] info.append('Belong:Cookies.firefox') info.append('Content:%s' % value[0]) info.append('Count:%s' % str(value[-1])) session.subpage_data_signal(info) else: info = [] info.append('Belong:Cookies.firefox') info.append('') session.subpage_data_signal(info) else: session.subpage_error_signal('Uninstalled:Firefox') if 'chromium' in cookies: try: pkg = cache['chromium-browser'] except KeyError: pass else: if pkg.is_installed: chcpath = "%s/.config/chromium/Default/Cookies" % homedir if os.path.exists(chcpath): chcpam = [chcpath, 'cookies', 'host_key'] chromium_cookies_list = cookies_obj.scan_cookies_records(chcpam[0], chcpam[1], chcpam[2]) for value in chromium_cookies_list: info = [] info.append('Belong:Cookies.chromium') info.append('Content:%s' % value[0]) info.append('Count:%s' % str(value[-1])) session.subpage_data_signal(info) else: info = [] info.append('Belong:Cookies.chromium') info.append('') session.subpage_data_signal(info) else: session.subpage_error_signal('Uninstalled:Chromium') session.subpage_status_signal('Complete:Cookies') history = mode_dic.get('History', []) if history: cache = common.get_cache_list() brohistory_obj = historyclean.HistoryClean(homedir) if 'firefox' in history: if cache['firefox'].is_installed: ffhpath = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) if os.path.exists(ffhpath): firefox_history_list = brohistory_obj.scan_firefox_history_records(ffhpath) #for single in firefox_history_list: # info = [] # info.append('Belong:History.firefox') # info.append('Id:%s' % str(single[0])) # info.append('Url:%s' % single[1]) # info.append('Count:%s' % str(single[2])) # session.subpage_data_signal(info) info = [] info.append('Belong:History.firefox') info.append('Count:%s' % str(len(firefox_history_list))) session.subpage_data_signal(info) else: info = [] info.append('Belong:History.firefox') info.append('') session.subpage_data_signal(info) else: session.subpage_error_signal('Uninstalled:Firefox') if 'chromium' in history: chhpath = "%s/.config/chromium/Default/History" % homedir try: pkg = cache['chromium-browser'] except KeyError: pass else: if pkg.is_installed: run = common.process_pid("chromium-browser") if not run: chromium_history_list = brohistory_obj.scan_chromium_history_records(chhpath) #for single in chromium_history_list: # info = [] # info.append('Belong:History.chromium') # info.append('Id:%s' % str(single[0])) # info.append('Url:%s' % single[1]) # info.append('Count:%s' % str(single[2])) # session.subpage_data_signal(info) info = [] info.append('Belong:History.chromium') info.append('Count:%s' % str(len(chromium_history_list))) session.subpage_data_signal(info) else: session.subpage_error_signal('Working:Chromium') else: session.subpage_error_signal('Uninstalled:Chromium') if 'bash' in history: path = os.path.join(homedir, ".bash_history") size = 0 if os.path.exists(path): size = common.confirm_filesize_unit(os.path.getsize(path)) info = [] info.append('Belong:History.bash') info.append('Size:%s' % str(size)) info.append('Path:%s' % path) session.subpage_data_signal(info) else: pass if 'X11' in history: # x11_list = [os.path.join(homedir, x) for x in os.listdir(homedir) if x.startswith(".xsession-errors")] x11_list = [] # .xsession-errors not found, TODO for value in x11_list: info = append_cacheinfo_to_list('History.X11', value) session.subpage_data_signal(info) if 'system' in history: syshistory_obj = systemhistory.SystemHistory() url_list = syshistory_obj.scan_the_xml(homedir) #for value in url_list: # info = [] # info.append('Belong:History.system') #info.append('Count:%s' % len(url_list)) # info.append('Href:%s' % value) # session.subpage_data_signal(info) info = [] info.append('Belong:History.system') info.append('Count:%s' % str(len(url_list))) session.subpage_data_signal(info) session.subpage_status_signal('Complete:History') packages = mode_dic.get('Packages', []) if packages: if 'unneed' in packages: unneed_obj = osslim.OsSlim() unneed_packages_list = unneed_obj.get_unneed_packages() for value in unneed_packages_list: info = value.split(";") info.insert(0, 'Belong:Packages.unneed') session.subpage_data_signal(info) if 'oldkernel' in packages: oldkernel_obj = oldkernel.OldKernel() oldkernel_list = oldkernel_obj.get_oldkernel_packages() for value in oldkernel_list: info = value.split(";") info.insert(0, 'Belong:Packages.oldkernel') session.subpage_data_signal(info) if 'configfile' in packages: configfile_obj = softwareconfigfile.SoftwareConfigfile() configfile_list = configfile_obj.get_configfile_packages() for value in configfile_list: info = value.split(";") info.insert(0, 'Belong:Packages.configfile') session.subpage_data_signal(info) session.subpage_status_signal('Complete:Packages') session.subpage_status_signal('Complete:All') def interface_remove_file_system(system, fp): filepath = fp.encode("UTF-8") if os.path.exists(fp): info = [] if os.path.isdir(filepath): info.append('Path:%s' % filepath) info.append('Size:%s' % common.confirm_filesize_unit(common.get_dir_size(filepath))) shutil.rmtree(filepath) system.subpage_data_signal(info) else: info.append('Path:%s' % filepath) info.append('Size:%s' % common.confirm_filesize_unit(os.path.getsize(filepath))) os.remove(filepath) system.subpage_data_signal(info) else: system.subpage_error_signal('Non-existent:%s' % filepath) def interface_remove_firefox_history_system(system): homedir = return_homedir_sysdaemon() firefox_history_obj = historyclean.HistoryClean(homedir) ffhpath = "%s/.mozilla/firefox/%s/places.sqlite" % (homedir, common.analytical_profiles_file(homedir)) firefox_history_obj.clean_firefox_all_records(ffhpath) system.subpage_status_signal('Complete:History.firefox', 'history') def interface_remove_system_history_system(system): homedir = return_homedir_sysdaemon() system_history_obj = systemhistory.SystemHistory() system_history_obj.clean_the_xml(homedir) system.subpage_status_signal('Complete:History.system', 'history') def interface_remove_chromium_history_system(system): homedir = return_homedir_sysdaemon() chromium_history_obj = historyclean.HistoryClean(homedir) run = common.process_pid("chromium-browser") if not run: chhpath = "%s/.config/chromium/Default/History" % homedir chromium_history_obj.clean_chromium_all_records(chhpath) system.subpage_status_signal('Complete:History.chromium', 'history') else: system.subpage_error_signal('Working:Chromium') def interface_remove_firefox_cookies_system(system, domain): homedir = return_homedir_sysdaemon() firefox_cookies_obj = cookiesclean.CookiesClean(homedir) #print(domain) ffcpath = "%s/.mozilla/firefox/%s/cookies.sqlite" % (homedir, common.analytical_profiles_file(homedir)) ffcpam = [ffcpath, 'moz_cookies', 'baseDomain', domain] firefox_cookies_obj.clean_cookies_record(ffcpam[0], ffcpam[1], ffcpam[2], ffcpam[3]) system.subpage_status_signal('Complete:Cookies.firefox', domain) def interface_remove_chromium_cookies_system(system, domain): homedir = return_homedir_sysdaemon() chromium_cookies_obj = cookiesclean.CookiesClean(homedir) chcpath = "%s/.config/chromium/Default/Cookies" % homedir chcpam = [chcpath, 'cookies', 'host_key', domain] chromium_cookies_obj.clean_cookies_record(chcpam[0], chcpam[1], chcpam[2], chcpam[3]) system.subpage_status_signal('Complete:Cookies.chromium', domain) def interface_remove_package_system(system, packagename): if packagename: cache = common.get_cache_list() cache.open() try: pkg = cache[packagename] except KeyError: system.subpage_error_signal('Non-existent:%s' % packagename) if pkg.is_installed: pkg.mark_delete() else: pkg.mark_delete(purge=True) iprogress = NewInstallProgress(system) cache.commit(None, iprogress) class NewInstallProgress(InstallProgress): def __init__(self, system): InstallProgress.__init__(self) self.system = system def status_change(self, pkg, percent, status): #self.system.status_remove_packages("apt_pulse", "percent: %s, status: %s" % (str(int(percent)), status)) info = [] info.append('Pkg:%s' % pkg) info.append('Percent:%s' % str(int(percent))) info.append('Status:%s' % status) self.system.subpage_data_signal(info) #self.system.subpage_status_signal(info, 'apt') def error(self, errorstr): pass def finish_update(self): #self.system.status_remove_packages("apt_stop", "") self.system.subpage_status_signal('Complete:', 'apt') def start_update(self): #self.system.status_remove_packages("apt_start", "") self.system.subpage_status_signal('Start:', 'apt') youker-assistant/backends/kylin-assistant-daemon/src/cleaner/common.py0000664000175000017500000001230513260315532025240 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import configparser import apt import apt_pkg import psutil import re HOMEDIR = '' def confirm_filesize_unit(size): unit_list = ['B', 'KB', 'MB', 'GB', 'TB'] flag = 0 while True: if size > 512: size /= 1024.0 flag += 1 else: break tmp = "%.2f" % size finalsize = tmp + ' ' + unit_list[flag] return finalsize def get_dir_size(path): size = 0 for root, dirs, files in os.walk(path): size += sum([os.path.getsize(os.path.join(root, name)) for name in files]) return size def process_pid(pname): pid = None processinfo = psutil.process_iter() for one in processinfo: one_str = str(one) patt = re.compile(pname, re.I) if patt.search(one_str): pid = int(one_str.split('pid=')[1].split(',')[0]) return pid def get_cache_list(): cache = None #apt_pkg.InitConfig() #apt_pkg.InitSystem() apt_pkg.init_config() apt_pkg.init_system() cache = apt.Cache() return cache #def get_homedir_sysdaemon(homedir): # global HOMEDIR # HOMEDIR = homedir def return_homedir_sysdaemon(): global HOMEDIR return HOMEDIR def return_homedir_sesdaemon(): return os.path.expanduser('~') def analytical_profiles_file(homedir): count = 0 tmp_pro_section = [] flag_pro_section = '' finalpath = '' app_path = '%s/.mozilla/firefox' % homedir profiles_path = '%s/profiles.ini' % app_path if os.path.exists(profiles_path): cfg = configparser.ConfigParser() cfg.read(profiles_path) complete_section = cfg.sections() for section in complete_section: if section.startswith('Profile'): tmp_pro_section.append(section) complete_option = cfg.options(section) try: cfg.getint(section, 'Default') == 1 except Exception as e: pass else: flag_pro_section = section count += 1 if cfg.getint('General', 'StartWithLastProfile'): if count == 1: if cfg.getint(tmp_pro_section[0], 'IsRelative') == 0: finalpath = cfg.get(tmp_pro_section[0], 'Path').split('/')[-1] else: finalpath = cfg.get(tmp_pro_section[0], 'Path') elif count > 1 : if cfg.getint(flag_pro_section, 'IsRelative') == 0: finalpath = cfg.get(flag_pro_section, 'Path').split('/')[-1] else: finalpath = cfg.get(flag_pro_section, 'Path') else: pass else: pass return finalpath def get_mozilla_path(homedir): count = 0 tmp_pro_section = [] if homedir: app_path = '%s/.mozilla/firefox' % homedir else: app_path = os.path.expanduser('~/.mozilla/firefox') flag_pro_section = '' finalpath = '' profiles_path = '%s/profiles.ini' % app_path if os.path.exists(profiles_path): cfg = configparser.ConfigParser() cfg.read(profiles_path) complete_section = cfg.sections() for section in complete_section: if section.startswith('Profile'): tmp_pro_section.append(section) complete_option = cfg.options(section) try: cfg.getint(section, 'Default') == 1 except Exception as e: pass else: flag_pro_section = section count += 1 if cfg.getint('General', 'StartWithLastProfile'): if count == 1: if cfg.getint(tmp_pro_section[0], 'IsRelative') == 0: finalpath = cfg.get(tmp_pro_section[0], 'Path') else: finalpath = os.path.expanduser('%s/%s/' % (app_path, cfg.get(tmp_pro_section[0], 'Path'))) elif count > 1 : if cfg.getint(flag_pro_section, 'IsRelative') == 0: finalpath = cfg.get(flag_pro_section, 'Path') else: finalpath = os.path.expanduser('%s/%s/' % (app_path, cfg.get(flag_pro_section, 'Path'))) else: raise Exception('profile.ini has error!') else: pass return finalpath if __name__ == '__main__': print(analytical_profiles_file('/home/aya')) youker-assistant/backends/kylin-assistant-daemon/src/softwarecenter/0000775000175000017500000000000013260315532025017 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/softwarecenter/apt_daemon.py0000664000175000017500000000161413260315532027502 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import apt class AptDaemon(): def __init__(self): self.ca = apt.Cache() self.ca.open() if __name__ == "__main__": pass youker-assistant/backends/kylin-assistant-daemon/src/softwarecenter/__init__.py0000664000175000017500000000002313260315532027123 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/detailinfo/0000775000175000017500000000000013260315532024102 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/detailinfo/cpuinfo.py0000664000175000017500000022235013260315532026123 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import sys import os import re import uuid import socket import fcntl import struct import math import binascii import platform import subprocess import random from pprint import pprint from gi.repository import GLib#20161228 import locale import gettext ##from gettext import gettext as _ ##from gettext import ngettext as __ #locale.setlocale(locale.LC_ALL, "") #gettext.bindtextdomain("kylin-assistant", "/usr/share/locale") #gettext.textdomain("kylin-assistant") #_ = gettext.gettext CPU_CURRENT_FREQ = "" CPU_MAX_FREQ = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq" MEMORY = "/sys/phytium1500a_info" KILOBYTE_FACTOR = 1000.0 MEGABYTE_FACTOR = (1000.0 * 1000.0) GIGABYTE_FACTOR = (1000.0 * 1000.0 * 1000.0) TERABYTE_FACTOR = (1000.0 * 1000.0 * 1000.0 * 1000.0) def get_human_read_capacity_size(size): size_str = "" displayed_size = 0.0 unit = "KB" if size < MEGABYTE_FACTOR: displayed_size = float(size/KILOBYTE_FACTOR) unit = "KB" elif size < GIGABYTE_FACTOR: displayed_size = float(size/MEGABYTE_FACTOR) unit = "MB" elif size < TERABYTE_FACTOR: displayed_size = float(size/GIGABYTE_FACTOR) unit = "GB" else: displayed_size = float(size/TERABYTE_FACTOR) unit = "TB" #print "displayed_size=", round(displayed_size) #round 不是简单的四舍五入,而是ROUND_HALF_EVEN的策略 #ceil 取大于或者等于x的最小整数 #floor 取小于或者等于x的最大整数 #print round(2.5)#3.0 #print math.ceil(2.5)#3.0 #print math.floor(2.5)#2.0 #print round(2.3)#2.0 #print math.ceil(2.3)#3.0 #print math.floor(2.3)#2.0 str_list = [str(int(round(displayed_size))), unit] size_str = " ".join(str_list) return size_str def get_interface_mac(interface): DEVICE_NAME_LEN = 15 MAC_START = 18 MAC_END = 24 try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', interface[:DEVICE_NAME_LEN])) return ''.join(['%02x:' % ord(char) for char in info[MAC_START:MAC_END]])[:-1] except Exception as e: return "unknown" def get_interface_ip(interface): DEVICE_NAME_LEN = 15 IP_START = 20 IP_END = 24 if interface == "unknown": return "unknown" try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) info = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', interface[:DEVICE_NAME_LEN])) return ''.join(['%s.' % ord(char) for char in info[IP_START:IP_END]])[:-1] except Exception as e: return "unknown" #try: # sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ip = socket.inet_ntoa(fcntl.ioctl( # sk.fileno(), # 0x8915, # SIOCGIFADDR # struct.pack('256s', netItem[:15]) # )[20:24]) # return ip #except Exception as e: # return "unknown" def get_interface_driver(interface): if interface == "unknown": return "unknown" cmd = "ethtool -i %s |grep 'driver:'" % interface fp = os.popen(cmd) msg = fp.read().strip('\n') fp.close() if msg: tmp = re.findall('driver: (.*)', msg) if tmp[0] in [None, '']: return "unknown" else: return tmp[0] else: return "unknown" class DetailInfo: #Computer: # ComVendor 制造商 # ComProduct 电脑型号 # ComVersion 电脑版本 # ComSerial 序列号 # node 主机名 # uptime 持续运行时间 # system 操作系统类型 # platform 操作系统 # architecture 系统位数 # release 内核版本 # machine 内核架构 #CPU: # CpuVersion 处理器版本 # CpuVendor 制造商 # CpuSlot 插槽 # CpuSerial 序列号 # CpuCapacity 最大主频 # CpuSize 当前主频 # CpuClock 前端总线 # cpu_cores cpu内核数 # cpu_siblings cpu线程数 # clflush_size 一级缓存 # cache_size 二级缓存 #Board and BIOS: # BoaProduct 主板型号 # BoaVendor 主板产商 # BoaSerial 序列号 # BioVendor BIOS产商 # BioVersion BIOS版本 # BioRelease 发布日期 #Memory: # Memnum 内存条个数 # MemInfo 内存条信息 # MemWidth 数据宽度 # MemSlot 插槽号 # MemProduct 内存型号 # MemVendor 制造商 # MemSerial 序列号 # MemSize 内存大小 #Monitor: # Mon_product 显示器型号 # Mon_vendor 显示器制造商 # Mon_year 生产日期_年 # Mon_week 生产日期_周 # Mon_size 可视面积 # Mon_in 屏幕尺寸 # Mon_maxmode 最大分辨率 # Mon_gamma 伽马值 # Mon_output 当前接口 # Mon_support 支持接口 # Mon_chip 当前显卡 # Vga_num 显卡数 # Vga_product 显卡型号 # Vga_vendor 显卡产商 # Vga_businfo 显卡总线地址 # Vga_Drive 显卡驱动 #Disk : # disknum 硬盘个数 # DiskProduct 硬盘型号 # DiskVendor 硬盘厂商 # DiskCapacity 硬盘容量 # DiskName 设备名称 # DiskFw 固件版本 # DiskSerial 序列号 #Network : # NetProduct 网卡型号 # NetVendor 制造商 # NetBusinfo 总线地址 # NetLogicalname 设备名称 # NetSerial MAC地址 # NetCapacity 最大带宽 # NetIp IP地址 # NetLink 连接状态 # NetDrive 网卡驱动 # WlanProduct 无线网卡型号 # WlanVendor 无线制造商 # WlanBusinfo 总线地址 # WlanLogicalname 设备名称 # WlanSerial MAC地址 # WlanIp 无线IP地址 # WlanDrive 无线网卡驱动 #multimedia : # MulNum 多媒体个数 # MulProduct 产品型号 # MulVendor 制造商 # MulBusinfo 总线地址 # MulDrive 驱动 #dvd : # Dvdnum 光驱个数 # DvdProduct 光驱型号 # DvdVendor 制造商 # DvdName 设备名称 # DvdFw 固件版本 # DvdSerial 序列号 #usb : # Usbnum usb使用个数 # UsbVendor 制造商 # UsbProduct 产品型号 # UsbBusinfo 总线地址 # UsbID 设备ID # bcdUsb 固件版本 # UsbMaxpower 最大电流 def __init__(self): self.lshwstr = '' self.machine = platform.machine() self.osname = self.read_os_name() # print platform.platform() # print platform.version() # print platform.architecture() # print platform.node() # print platform.processor() # print platform.uname() def ctoascii(self,buf): ch = bytes(buf.encode('utf-8')) asci = binascii.b2a_hex(ch) asci = int(asci,16) return asci def strip(self, s): if(len(s) == 0): return s while len(s) > 0 and self.ctoascii(s[0]) <= 32: s = s[1: ] k = len(s) while len(s) > 0 and self.ctoascii(s[k-1]) <= 32: s = s[ :k-1] k = len(s) i = 0 while i < len(s): if self.ctoascii(s[i]) < 32: s = s[ :i] + s[i+1: ] i -= 1 i += 1 return s def uptimeinfo(self): with open('/proc/uptime') as f: for line in f: string = line.split('.')[0] seconds = int(string) minutes = seconds / 60 upminutes = str(minutes) return upminutes def read_os_name(self): platValue = platform.platform() if os.path.exists("/etc/ubuntukylin-release"): with open("/etc/ubuntukylin-release", "r") as fsys: for line in fsys: if line.startswith("DISTRIB_DESCRIPTION"): tmp = line break # kobe: remove '"' and '\n' front = tmp.split('=')[1].replace('"', '').replace('\n', '') platValue = front elif os.path.exists("/etc/os-release"): with open("/etc/os-release", "r") as fsys: for line in fsys: if line.startswith("NAME"): tmp = line break # kobe: remove '"' and '\n' front = tmp.split('=')[1].replace('"', '').replace('\n', '') platValue = front if front == "Kylin" or front == "YHKylin": with open("/etc/lsb-release", "r") as fp: for line in fp: if line.startswith("DISTRIB_VERSION_TYPE"): tmp = line # kobe: remove '"' and '\n' id = tmp.split('=')[1].replace('"', '').replace('\n', '') if id == "community": platValue = "YHKylin community" break else: community = "" id = "" with open("/etc/lsb-release", "r") as fp: for line in fp: if line.startswith("DISTRIB_ID"):#if line.startswith("DISTRIB_DESCRIPTION"): tmp = line # kobe: remove '"' and '\n' id = tmp.split('=')[1].replace('"', '').replace('\n', '') elif line.startswith("DISTRIB_VERSION_TYPE"): tmp = line # kobe: remove '"' and '\n' community = tmp.split('=')[1].replace('"', '').replace('\n', '') # break platValue = id if id == "Kylin" or id == "YHKylin": if community == "community": platValue = "YHKylin community" return platValue def get_os_name(self): return self.osname def get_url(self,v,p): vendors = { #CPU产商 "INTEL":["Intel"], "AMD":["AMD"], "VIMICRO":["Vimicro"], #显卡产商 "ATI":["ATI"], "1002":["ATI"], "SIS":["SIS"], "1039":["SIS"], "NVIDIA":["Nvidia"], "VIA":["VIA"], "XFX":["XFX"], "SUPERGRAPHIC":["Supergraphic"], #显示器产商 "AUO":["AUO"], "AOC":["AOC"], "PHILIPS":["Philips"], "PHL":["Philips"], "LEN":["Lenovo"], "SEC":["SAMSUNG"], #电脑品牌 "HASEE":["Hasee"], "FOUNDER":["Founder"], "TONGFANG":["Tongfang"], "TSINGHUA":["Tongfang"], "ACER":["Acer"], "LENOVO":["Lenovo"], "ASUSTEK":["ASUS"], "NEC":["NEC"], "HP":["HP"], "HEWLETT-PACKARD":["HP"], "SAMSUNG":["SAMSUNG"], "TOSHIBA":["TOSHIBA"], "APPLE":["Apple"], "DELL":["DELL"], "FUJITSU":["FUJITSU"], "PANASONIC":["Panasonic"], "SONY":["SONY"], "IBM":["IBM"], #虚拟机 "INNOTEK":["VirtualBox"], "VBOX":["VirtualBox"], "VIRTUALBOX":["VirtualBox"], #网卡产商 "3COM":["3COM"], "D-LINK":["D-LINK"], "RALINK":["Ralink"], "ATHEROS":["Atheros"], "MARVELL":["Marvell"], "BROADCOM":["Broadcom"], #硬盘产商 "EXCELSTOR":["Excelstor"], "HITACHI":["Hitachi"], "MAXTOR":["Maxtor"], "WESTERN":["Western Digital"], "LITEON":["Liteon"], "SEAGATE":["Seagate"], "QUANTUM":["Quantum"], #光驱产商 "PLDS":["PLDS"], "PBDS":["PLDS"], "HL-DT-ST":["LG"], "OPTIARC":["SONY"], "TSSTCORP":["TSSTcorp"], "PIONEER":["Pioneer"], "MATSHITA":["Panasonic"], #声卡产商 "REALTEK":["Realtek"], "CREATIVE":["Creative"], #摄像头 "SONIX":["Sonix"], "ETRON":["Etron"], "AVEO":["Aveo"], "SYNTEK":["Syntek"], "EMPIA":["Empia"], "CHICONY":["Chicony"], "OMNIVISION":["OmniVision"], #鼠标产商 "LOGITECH":["Logitech"], "SUNPLUS":["Sunplus"], "PRIMAX":["Primax"], "PIXART":["Pixart"], "TRUST":["Trust"], "1BCF":["Rapoo"], "AVAGO":["Avago"], "MICROSOFT":["Microsoft"], #键盘产商 "RAPOO":["Rapoo"], #主板产商 "GIGABYTE":["Gigabyte"], "BIOSTAR":["Biostar"], "COLORFUL":["Colorful"], "YESTON":["Yeston"], #指纹识别 "UPEK":["Authentec"], "AUTHENTEC":["Authentec"], #闪存产商 "KINGSTON":["Kingston"], "KINGMAX":["Kingmax"], "KINGBOX":["Kingbox"], "HYNIX":["Hynix"], "HYUNDAI":["Hynix"], "MICRON":["Micron"], "06C1":["Asint"], "ADATA":["ADATA"], "ZTE":["ZTE"], "EAGET":["Eaget"], "TEXAS":["Texas Instruments"], "MOTOROLA":["Motorola"], #电源产商 "SMP":["SMP"], "SIMPLO":["SMP"], #BIOS产商 "AMERICAN":["AMI"], "AWARD":["Phoenix"], "PHOENIX":["Phoenix"] } tmp = v.split(" ")[0] tmp = re.findall("([a-zA-Z0-9-]+)", tmp) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] else : k = p.split(" ")[0] url = vendors.get(k.upper()) if url: return url[0] else: tmp = p.split(" ")[0] url = vendors.get(tmp.upper()) if url: return url[0] tmp = re.findall("ATI", v) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] tmp = re.findall("SIS", v) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] tmp = re.findall("Intel", v) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] tmp = re.findall("ATI", p) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] tmp = re.findall("SIS", p) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] tmp = re.findall("Intel", p) if tmp : url = vendors.get(tmp[0].upper()) if url: return url[0] return v def get_computer(self): #Computer Com = {} hw = os.popen("dmidecode -t system") computer = hw.read() hw.close() ComVendor,ComProduct,ComVersion,ComSerial = '','','','' if computer : tmp = re.findall("Product Name: (.*)",computer) if tmp : ComProduct = tmp[0] tmp = re.findall("Manufacturer: (.*)",computer) if tmp : ComVendor = tmp[0] tmp = re.findall("Version: (.*)",computer) if tmp : ComVersion = tmp[0] tmp = re.findall("Serial Number: (.*)",computer) if tmp : ComSerial = tmp[0] ComVendor = self.get_url(ComVendor,ComProduct) Com['ComProduct'],Com['ComVendor'],Com['ComVersion'],Com['ComSerial'] = self.strip(ComProduct),self.strip(ComVendor),self.strip(ComVersion),self.strip(ComSerial) with open('/proc/uptime') as f: for line in f: string = line.split('.')[0] seconds = int(string) minutes = seconds / 60 uptime = str(minutes) # platValue = platform.platform() # if os.path.exists("/etc/ubuntukylin-release"): # with open("/etc/ubuntukylin-release", "r") as fsys: # for line in fsys: # if line.startswith("DISTRIB_DESCRIPTION"): # tmp = line # break # # kobe: remove '"' and '\n' # front = tmp.split('=')[1].replace('"', '').replace('\n', '') # platValue = front ## if front.startswith("UbuntuKylin") or front.startswith("Ubuntu Kylin"): ## platValue = platValue.replace('Ubuntu', 'Ubuntu Kylin') # elif os.path.exists("/etc/os-release"): # with open("/etc/os-release", "r") as fsys: # for line in fsys: # if line.startswith("NAME"): # tmp = line # break # # kobe: remove '"' and '\n' # front = tmp.split('=')[1].replace('"', '').replace('\n', '') # platValue = front ## if front.startswith("UbuntuKylin") or front.startswith("Ubuntu Kylin"): ## platValue = platValue.replace('Ubuntu', 'Ubuntu Kylin') # else: # with open("/etc/lsb-release", "r") as fp: # for line in fp: # if line.startswith("DISTRIB_DESCRIPTION"): # tmp = line # break # # kobe: remove '"' and '\n' # id = tmp.split('=')[1].replace('"', '').replace('\n', '') # platValue = id # if "Ubuntu" in platValue: # platValue = platValue.replace('Ubuntu', id) # if not os.path.exists("/etc/ubuntukylin-release"): # if "Ubuntu" in platValue and "Kylin" not in platValue: # with open("/etc/lsb-release", "r") as fsys: # for line in fsys: # if line.startswith("DISTRIB_DESCRIPTION"): # tmp = line # break # # kobe: remove '"' and '\n' # front = tmp.split('=')[1].replace('"', '').replace('\n', '') # if front.startswith("UbuntuKylin") or front.startswith("Ubuntu Kylin"): # platValue = platValue.replace('Ubuntu', 'Ubuntu Kylin') # else: # with open("/etc/ubuntukylin-release", "r") as fp: # for line in fp: # if line.startswith("DISTRIB_ID"): # tmp = line # break # # kobe: remove '"' and '\n' # id = tmp.split('=')[1].replace('"', '').replace('\n', '') # if "Ubuntu" in platValue: # platValue = platValue.replace('Ubuntu', id) # Com['platform'] = platValue # Com['platform'] = self.osname Com['osname'] = self.osname #Com['node'], Com['uptime'], Com['system'], Com['platform'],Com['architecture'], Com['release'], Com['machine'] = platform.node(),uptime,platform.system(),platform.platform(),platform.architecture()[0],platform.release(),platform.machine() Com['node'], Com['uptime'], Com['system'], Com['architecture'], Com['release'], Com['machine'] = platform.node(),uptime,platform.system(),platform.architecture()[0],platform.release(),platform.machine() return Com def get_cpu(self): # CPU Cpu = {} if self.machine == "aarch64": if os.path.exists(CPU_MAX_FREQ): fp = open(CPU_MAX_FREQ, "r") info = fp.read() fp.close() tmp = float(info.strip()) / (1000 * 1000) freq = str("%.1f" % tmp) #processor Cpu['CpuVersion'] = "1500a v1.0 64bit" Cpu['CpuVendor'] = "phytium"#(飞腾) Cpu['CpuCapacity'] = "%s GHz" % freq #Cpu['cpu_cores'] = "4 cores"#4 核 if os.path.exists('/proc/cpuinfo'): fp = open('/proc/cpuinfo', "r") info = fp.read() fp.close() cnt = info.count("processor") # Cpu['cpu_cores'] = _("%d cores") % cnt Cpu['cpu_cores'] = cnt with open('/proc/cpuinfo') as f: for line in f: if line.strip(): if line.rstrip('\n').startswith('model name'): modelName = line.rstrip('\n').split(':')[1].strip().strip('\n') if "phytium" in modelName: # Cpu['CpuVersion'] = _("%s v1.0") % modelName Cpu['CpuVersion'] = "%s v1.0" % modelName Cpu['CpuVendor'] = "phytium"#(飞腾) else: Cpu['CpuVersion'] = modelName break #Cpu['cpu_siblings'] = "4 thread/core"#4 线程/核 #Cpu['clflush_size'] = "32 KB" #Cpu['cache_size'] = "2 MB" else: #处理器版本 Cpu['CpuVersion'] = "1500a v1.0" #制造商 phytium Cpu['CpuVendor'] = "phytium"#(飞腾) #插槽 #Cpu['CpuSlot'] = "插槽" #序列号 #Cpu['CpuSerial'] = "序列号" #最大主频 Cpu['CpuCapacity'] = "1800 MHz" #当前主频 #Cpu['CpuSize']= "当前主频" #前端总线 #Cpu['CpuClock'] = "前端总线" #内核数 Cpu['cpu_cores'] = "4 "#4 核 #线程数 #Cpu['cpu_siblings'] = "4 thread/core"#4 线程/核 #一级缓存 #Cpu['clflush_size'] = "32 KB" #二级缓存 #Cpu['cache_size'] = "2 MB" else: hw = os.popen("dmidecode -t processor") cpuin = hw.read() hw.close() CpuVersion,CpuVendor,CpuSlot,CpuSerial,CpuCapacity,CpuSize,CpuClock,cpu_cores,cpu_siblings,clflush_size,cache_size = '','','','','','','','','','','' if cpuin : tmp = re.findall("Version: (.*)",cpuin) if tmp : CpuVersion = tmp[0] tmp = re.findall("Manufacturer: (.*)",cpuin) if tmp : CpuVendor = tmp[0] tmp = re.findall("Socket Designation: (.*)",cpuin) if tmp : CpuSlot = tmp[0] tmp = re.findall("Serial Number: (.*)",cpuin) if tmp : CpuSerial = tmp[0] tmp = re.findall("Max Speed: (.*)",cpuin) if tmp : CpuCapacity = tmp[0] tmp = re.findall("Current Speed: (.*)",cpuin) if tmp : CpuSize = tmp[0] tmp = re.findall("External Clock: (.*)",cpuin) if tmp : CpuClock = tmp[0] CpuVendor = self.get_url(CpuVendor,CpuVersion) Cpu['CpuVersion'],Cpu['CpuVendor'],Cpu['CpuSlot'],Cpu['CpuSerial'],Cpu['CpuCapacity'],Cpu['CpuSize'],Cpu['CpuClock'] = self.strip(CpuVersion),self.strip(CpuVendor),self.strip(CpuSlot),self.strip(CpuSerial),self.strip(CpuCapacity),self.strip(CpuSize),self.strip(CpuClock) with open('/proc/cpuinfo') as f: for line in f: if line.strip(): if line.rstrip('\n').startswith('vendor_id'): vendor = line.rstrip('\n').split(':')[1] elif line.rstrip('\n').startswith('cpu cores'): cpu_cores = line.rstrip('\n').split(':')[1] elif line.rstrip('\n').startswith('siblings'): cpu_siblings = line.rstrip('\n').split(':')[1] elif line.rstrip('\n').startswith('clflush size'): clflush_size = line.rstrip('\n').split(':')[1] clflush_size = list(filter(str.isdigit,clflush_size)) elif line.rstrip('\n').startswith('cache size'): cache_size = line.rstrip('\n').split(':')[1] cache_size = list(filter(str.isdigit,cache_size)) Cpu['cpu_cores'],Cpu['cpu_siblings'],Cpu['clflush_size'],Cpu['cache_size'] = cpu_cores,cpu_siblings,clflush_size,cache_size return Cpu def get_board(self): #Board and BIOS Boa = {} hw = os.popen("dmidecode -t baseboard") board = hw.read() hw.close() BoaProduct,BoaVendor,BoaSerial,BioVendor,BioVersion,BioRelease = '','','','','','' if board : tmp = re.findall("Product Name: (.*)",board) if tmp : BoaProduct = tmp[0] tmp = re.findall("Manufacturer: (.*)",board) if tmp : BoaVendor = tmp[0] tmp = re.findall("Serial Number: (.*)",board) if tmp : BoaSerial = tmp[0] hw = os.popen("dmidecode -t bios") bios = hw.read() hw.close() if bios : tmp = re.findall("Vendor: (.*)",bios) if tmp: BioVendor = tmp[0] tmp = re.findall("Version: (.*)",bios) if tmp: BioVersion = tmp[0] tmp = re.findall("Release Date: (.*)",bios) if tmp: BioRelease = tmp[0] BoaVendor = self.get_url(BoaVendor,BoaProduct) BioVendor = self.get_url(BioVendor,BioVersion) Boa['BoaProduct'],Boa['BoaVendor'],Boa['BoaSerial'],Boa['BioVendor'],Boa['BioVersion'],Boa['BioRelease'] = self.strip(BoaProduct),self.strip(BoaVendor),self.strip(BoaSerial),self.strip(BioVendor),self.strip(BioVersion),self.strip(BioRelease) return Boa def get_memory(self): #Memory Device Mem = {} if self.machine == "aarch64": if os.path.exists(MEMORY): memnum = 0 all_exists = [] total = [ f for f in os.listdir(MEMORY) if f.startswith("memory")] for p in total: exists = os.path.join(MEMORY, p) if os.stat(exists).st_size: # memnum += 1 all_exists.append(exists) # Mem["Memnum"] = str(memnum) for i in all_exists: fp = open(i, "r") info = fp.read() fp.close # dic = dict([tuple(x.split(":")) for x in info.split("\n") if x]) dic = dict([tuple(x.split(":")) for x in info.split("\n") if x and ":" in x]) if dic in(None, {}): continue else: memnum += 1 #if Mem.get("MemInfo") == None: # Mem["MemInfo"] = "DDR3 " + dic["Speed"] #else: # Mem["MemInfo"] += "<1_1>" + "DDR3 " + dic["Speed"] ###add by hebing at 2017.01.23 for 206 if Mem.get("MemInfo") == None: Mem["MemInfo"] = "DDR3 " else: Mem["MemInfo"] += "<1_1>" + "DDR3 " if dic["Bank Locator"]: median = str(dic["Bank Locator"]) else: median = '$' if Mem.get("MemSlot") == None: Mem["MemSlot"] = median else: Mem["MemSlot"] += "<1_1>" + median if dic["Size"]: median = str(dic["Size"]) else: median = '$' if Mem.get("MemSize") == None: Mem["MemSize"] = median else: Mem["MemSize"] += "<1_1>" + median if dic["Manufacturer ID"]: median = str(dic["Manufacturer ID"].upper()) else: median = '$' if Mem.get("MemVendor") == None: Mem["MemVendor"] = median else: Mem["MemVendor"] += "<1_1>" + median if Mem.get("MemWidth") == None: Mem["MemWidth"] = "64bit" else: Mem["MemWidth"] += "<1_1>" + "64bit" Mem["Memnum"] = str(memnum) if Mem in (None, '', '[]', {}) or Mem["Memnum"] == '0':#20161228 Mem["Memnum"] = "1" Mem["MemWidth"] = "64bit" Mem["MemInfo"] = "DDR3" fp = open("/proc/meminfo", "r") info = fp.read() fp.close() dic = dict([tuple(x.split(":")) for x in info.split("\n") if x]) MemTotal = dic["MemTotal"].strip().split(' ')[0] Mem["MemSize"] = GLib.format_size_for_display(int(MemTotal) * 1024) else: MemInfo,MemWidth,Memnum,MemSlot,MemProduct,MemVendor,MemSerial,MemSize,BioVendor = "","","","","","",'','','' hw = os.popen("dmidecode -t memory") memory = hw.read() hw.close() num = 0 q = re.findall('Memory Device\n',memory) if q : memory = memory[memory.index("Memory Device\n")+len("Memory Device\n"):] else : memory = '' if memory : mark = re.findall("Data Width: (.*)",memory) if mark : for k in mark : if not k == 'Unknown': num += 1 if MemWidth : MemWidth += "<1_1>" + k else : MemWidth = k Memnum = str(num) tmp = re.findall("Bank Locator: (.*)",memory) i = 0 if tmp : for k in mark : i += 1 if not k == 'Unknown': if MemSlot : MemSlot +="<1_1>"+ tmp[i-1] else : MemSlot = tmp[i-1] tmp = re.findall("Part Number: (.*)",memory) i = 0 if tmp : for k in mark : i += 1 if not k == 'Unknown': if MemProduct : MemProduct += "<1_1>" + tmp[i-1] else : MemProduct = tmp[i-1] tmp = re.findall("Manufacturer: (.*)",memory) i = 0 if tmp : for k in mark : i += 1 if not k == 'Unknown': if MemVendor : MemVendor += "<1_1>" + tmp[i-1] else : MemVendor = tmp[i-1] tmp = re.findall("Serial Number: (.*)",memory) i = 0 if tmp : for k in mark : i += 1 if not k == 'Unknown': if MemSerial : MemSerial += "<1_1>" + tmp[i-1] else : MemSerial = tmp[i-1] tmp = re.findall("Size: (.*)",memory) i = 0 if tmp : for k in mark : i += 1 if not k == 'Unknown': if MemSize : MemSize += "<1_1>" + tmp[i-1] else : MemSize = tmp[i-1] tmp0 = self.strip(re.findall("Form Factor: (.*)",memory)) tmp1 = self.strip(re.findall("Type: (.*)",memory)) tmp2 = self.strip(re.findall("Type Detail: (.*)",memory)) tmp3 = self.strip(re.findall("Speed: (.*)",memory)) i = 0 if tmp0 and tmp1 and tmp2 and tmp3 : for k in mark : i += 1 if not k == 'Unknown': if MemInfo : MemInfo += "<1_1>" + tmp0[i-1] + ' ' + tmp1[i-1] + ' ' + tmp2[i-1] + ' ' + tmp3[i-1] else : MemInfo = tmp0[i-1] + ' ' + tmp1[i-1] + ' ' + tmp2[i-1] + ' ' + tmp3[i-1] Mem["MemInfo"],Mem["MemWidth"],Mem["MemSlot"],Mem["MemProduct"],Mem["MemVendor"],Mem["MemSerial"],Mem["MemSize"],Mem["Memnum"] = MemInfo,self.strip(MemWidth),self.strip(MemSlot),self.strip(MemProduct),self.strip(MemVendor),self.strip(MemSerial),self.strip(MemSize),self.strip(Memnum) return Mem ## 2017.07.27 add by hebing def get_monitor(self): ret_output, ret_vendor, ret_product, ret_year, ret_week, \ ret_size, ret_in, ret_gamma, ret_maxmode = "", "", "", "", "", "", "", "", "" Vga_product,Vga_vendor,Vga_businfo,Vga_Drive = "", "", "", "" Vga_num = 0 if os.path.exists("/var/log/Xorg.0.log"): with open("/var/log/Xorg.0.log", "r") as fp: info = fp.read() value = re.findall("EDID for output (.*)", info) for monitor in value: ret = {} p = re.compile(r'Output %s connected' % monitor) for m in p.finditer(info): # p.finditer(info) 返回一个迭代对象,通常只会循环一次 Vga_num += 1 #print info.split("EDID for output %s" % monitor)[1].split("EDID for output")[0] #ret.setdefault("Mon_output", monitor) ret_output += (monitor + "<1_1>") localinfo = info.split("EDID for output %s" % monitor)[1].split("EDID for output")[0] result = re.findall('Monitor name: \s*(\w*)\s*(\w*)', localinfo) result_bak = re.findall("Manufacturer:\s*(\w*)\s*Model:\s*(\w*)", localinfo) #ret.setdefault("Mon_vendor", result[0][0]) #ret.setdefault("Mon_product", " ".join(result[0])) if result: ### 笔记本没有Monitor name ret_vendor += (result[0][0] + "<1_1>") ret_product += (" ".join(result[0]) + "<1_1>") else: ret_vendor += (result_bak[0][0] + "<1_1>") ret_product += (" ".join(result_bak[0]) + "<1_1>") result = re.findall("Year:\s*(\w*)\s*Week:\s*(\w*)", localinfo) #ret.setdefault("Mon_year", result[0][0]) #ret.setdefault("Mon_week", result[0][1]) ret_year += (result[0][0] + "<1_1>") ret_week += (result[0][1] + "<1_1>") result = re.findall("Image Size: \s*(\w*) x (\w*)", localinfo) x = float(result[0][0])/10; y = float(result[0][1])/10; d = math.sqrt(x**2 + y**2)/2.54 #ret.setdefault("Mon_size", (str(x) + " X " + str(y) + " cm")) #ret.setdefault("Mon_in", str("%.1f" %d)) ret_size += ((str(x) + " X " + str(y) + " cm") + "<1_1>") ret_in += (str("%.1f" %d) + "<1_1>") result = re.findall("Gamma: (\S*)", localinfo) #ret.setdefault("Mon_gamma", result[0]) ret_gamma += (result[0] + "<1_1>") h = re.findall("h_active: (\d*)", localinfo); v = re.findall("v_active: (\d*)", localinfo) #ret.setdefault("Mon_maxmode", h[0] + "X" + v[0]) ret_maxmode += ((h[0] + "X" + v[0]) + "<1_1>") Vga_businfo += "<1_1>"; Vga_product += "<1_1>"; Vga_vendor += "<1_1>"; Vga_Drive += "<1_1>" status, output = subprocess.getstatusoutput('lspci -vvv') if not status: for local in output.split("\n\n"): if "VGA compatible controller: " in local: Vga_num += 1 ret_output += ""; ret_vendor += ""; ret_product += ""; ret_year += ""; ret_week += "" ret_size += ""; ret_in += ""; ret_gamma += ""; ret_maxmode += "" Vga_businfo += "pci@0000:" + local.split(" ")[0] for line in local.split("\n"): if "VGA compatible controller: " in line: print(line) Vga_product += line.split(":")[2][:-30] Vga_vendor += self.get_url("", line.split(":")[2]) if "Kernel driver in use: " in line: Vga_Drive += line.split(":")[1] elif "Kernel driver in use: " not in local: Vga_Drive += "" ret["Mon_output"], ret["Mon_vendor"], ret["Mon_product"], ret["Mon_year"], ret["Mon_week"], ret["Mon_size"], ret["Mon_in"] = \ ret_output, ret_vendor, ret_product, ret_year, ret_week, ret_size, ret_in ret["Mon_gamma"], ret["Mon_maxmode"] = ret_gamma, ret_maxmode ret["Vga_num"], ret['Vga_businfo'],ret['Vga_product'],ret['Vga_vendor'],ret['Vga_Drive'] = self.strip(str(Vga_num)), self.strip(Vga_businfo),self.strip(Vga_product),self.strip(Vga_vendor),self.strip(Vga_Drive) return ret def get_disk_obsolete(self): dis={} disknum = 0 disk_manufacturers = [ "^ST.+", "Seagate", "^D...-.+", "IBM", "^IBM.+", "IBM", "^HITACHI.+", "Hitachi", "^IC.+", "Hitachi", "^HTS.+", "Hitachi", "^FUJITSU.+", "Fujitsu", "^MP.+", "Fujitsu", "^TOSHIBA.+", "Toshiba", "^MK.+", "Toshiba", "^MAXTOR.+", "Maxtor", "^Pioneer.+", "Pioneer", "^PHILIPS.+", "Philips", "^QUANTUM.+", "Quantum", "FIREBALL.+", "Quantum", "^WDC.+", "Western Digital", "WD.+", "Western Digital", ] DiskProduct,DiskVendor,DiskCapacity,DiskName,DiskFw,DiskSerial = '','','','','','' n = os.popen("ls /dev/sd?") line = n.read() n.close() n = os.popen("ls /dev/hd?") line += n.read() n.close() if line : line = line.split('\n') for k in line : if k : st = os.popen("hdparm -i %s" % k) strin = st.read() st.close() tmp = re.findall("Model=(.*), F",strin) if not tmp and DiskProduct: continue if tmp: median = tmp[0] else: median = '$' if DiskProduct : DiskProduct += "<1_1>" + median else: DiskProduct = median i = 0 tm = '' while i < len(disk_manufacturers): ven = re.compile(disk_manufacturers[i],re.I) tm = ven.findall(tmp[0]) if tm: break; i += 2 if tm: median = disk_manufacturers[i+1] else: median = '$' if DiskVendor : DiskVendor += "<1_1>" + median else: DiskVendor += median tmp = re.findall("FwRev=(.*), ",strin) if tmp : median = tmp[0] else: median = '$' if DiskFw : DiskFw += "<1_1>" + median else: DiskFw = median tmp = re.findall("SerialNo=(.*)",strin) if tmp : median = tmp[0] else: median = '$' if DiskSerial : DiskSerial += "<1_1>" + median else : DiskSerial = median ds = os.popen("fdisk -l %s" % k) d = ds.read() ds.close() tmp = re.findall("%s: (.*)," % k,d) if tmp: median = tmp[0] else: median = '$' ### add by hebing at 2017.01.20 ### NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT disklist = [] status, output = subprocess.getstatusoutput("lsblk -ab") for line in output.split("\n"): value = line.split() if value[1] == "8:0" and value[5] == "disk": disklist.append(int(value[3])) if not status: median = str(sum(disklist) / 1000 / 1000 / 1000) + "G" else: median = '$' if DiskCapacity : DiskCapacity += "<1_1>" + median else : DiskCapacity = median disknum += 1 if DiskName : DiskName += "<1_1>" + k else : DiskName = k dis['DiskNum'],dis['DiskProduct'],dis['DiskVendor'],dis['DiskCapacity'],dis['DiskName'],dis['DiskFw'],dis['DiskSerial'] = self.strip(str(disknum)),self.strip(DiskProduct),self.strip(DiskVendor),self.strip(DiskCapacity),self.strip(DiskName),self.strip(DiskFw),self.strip(DiskSerial) return dis # writed by hb at 20170517 def get_disk(self): dis = {} disk_manufacturers = { "ST": "Seagate", "IBM": "IBM", "HITACHI": "Hitachi", "IC": "Hitachi", "HTS": "Hitachi", "FUJITSU": "Fujitsu", "MP": "Fujitsu", "TOSHIBA": "Toshiba", "MK": "Toshiba", "MAXTOR": "Maxtor", "Pioneer": "Pioneer", "PHILIPS": "Philips", "QUANTUM": "Quantum", "FIREBALL": "Quantum", "WDC": "Western Digital", } DiskProduct,DiskVendor,DiskCapacity,DiskName,DiskFw,DiskSerial = '','','','','','' diskdict = {} disknum = 0 statusfirst, output = subprocess.getstatusoutput("lsblk -b") for line in output.split("\n"): value = line.split() if value[1].startswith("8:") and value[5] == "disk": disknum += 1 HDSize = get_human_read_capacity_size(int(value[3])) DiskCapacity += ((HDSize if not statusfirst else "$") + "<1_1>") # DiskCapacity += ( ((str(int(value[3]) / 10**9) + "G") if not statusfirst else "$") + "<1_1>") infodict = {} status, output = subprocess.getstatusoutput("hdparm -i %s" % ("/dev/" + value[0])) if not status: singleinfolist = [ tmp.strip() for tmp in output.split("\n") if tmp] for mid in singleinfolist[1].split(","): needinfo = mid.split("=") infodict.setdefault(needinfo[0].strip(), needinfo[1]) for key, va in list(disk_manufacturers.items()): if infodict.get("Model", "$").startswith(key): infodict.setdefault("Vendor", va) break DiskProduct += (infodict.get("Model", "$") + "<1_1>") DiskVendor += (infodict.get("Vendor", "$") + "<1_1>") DiskFw += (infodict.get("FwRev", "$") + "<1_1>") DiskSerial += (infodict.get("SerialNo", "$") + "<1_1>") else: pprint(output) DiskProduct += ( "$" + "<1_1>") DiskVendor += ("$" + "<1_1>") DiskFw += ("$" + "<1_1>") DiskSerial += ("$" + "<1_1>") DiskName += (("/dev/" + value[0]) + "<1_1>") dis['DiskNum'],dis['DiskProduct'],dis['DiskVendor'],dis['DiskCapacity'],dis['DiskName'],dis['DiskFw'],dis['DiskSerial'] = str(disknum),DiskProduct.rstrip("<1_1>"),DiskVendor.rstrip("<1_1>"),DiskCapacity.rstrip("<1_1>"),DiskName.rstrip("<1_1>"),DiskFw.rstrip("<1_1>"),DiskSerial.rstrip("<1_1>") return dis # writed by kobe 20170318 def get_network_obsolete(self): # net = {'NetNum': 2, 'NetSerial': '00:23:81:21:e4:0b', 'NetProduct': '82574L Gigabit Network Connection', 'NetLogicalname': 'enp1s0', 'NetDrive': 'e1000e', 'NetIp': 'unknown', 'NetType': 'Ethernet interface', 'NetVendor': 'Intel Corporation', 'NetBusinfo': 'pci@0000:01:00.0'} # return net net = {} NetNum = 0 NetType,NetProduct,NetVendor,NetDrive,NetBusinfo,NetLogicalname,NetSerial,NetIp = '','','','','','','','' # fp=os.popen("ifconfig -s|grep -v Iface|grep -v lo|awk '{print $1}' | wc -l"); # NetNum = int(fp.read().strip('\n')) # net['NetNum'] = NetNum # fp.close() try: fp = os.popen("lshw -C network"); lines = fp.readlines() fp.close() if lines: for line in lines: if ":" in line: line = line.strip() if "description:" in line: tmp = re.findall('description: (.*)', line) NetNum += 1 if tmp[0] in [None, '']: if NetType: NetType += "<1_1>" + "unknown" else: NetType = "unknown" else: if NetType: NetType += "<1_1>" + tmp[0] else: NetType = tmp[0] elif "product:" in line: tmp = re.findall('product: (.*)', line) if tmp[0] in [None, '']: if NetProduct: NetProduct += "<1_1>" + "unknown" else: NetProduct = "unknown" else: if NetProduct: NetProduct += "<1_1>" + tmp[0] else: NetProduct = tmp[0] elif "vendor:" in line: tmp = re.findall('vendor: (.*)', line) if tmp[0] in [None, '']: if NetVendor: NetVendor += "<1_1>" + "unknown" else: NetVendor = "unknown" else: if NetVendor: NetVendor += "<1_1>" + tmp[0] else: NetVendor = tmp[0] elif "bus info:" in line: tmp = re.findall('bus info: (.*)', line) if tmp[0] in [None, '']: if NetBusinfo: NetBusinfo += "<1_1>" + "unknown" else: NetBusinfo = "unknown" else: if NetBusinfo: NetBusinfo += "<1_1>" + tmp[0] else: NetBusinfo = tmp[0] elif "serial:" in line: tmp = re.findall('serial: (.*)', line) if tmp[0] in [None, '']: if NetSerial: NetSerial += "<1_1>" + "unknown" else: NetSerial = "unknown" else: if NetSerial: NetSerial += "<1_1>" + tmp[0] else: NetSerial = tmp[0] elif "logical name:" in line: tmp = re.findall('logical name: (.*)', line) if tmp[0] in [None, '']: if NetLogicalname: NetLogicalname += "<1_1>" + "unknown" else: NetLogicalname = "unknown" if NetIp: NetIp += "<1_1>" + "unknown" else: NetIp = "unknown" if NetDrive: NetDrive += "<1_1>" + "unknown" else: NetDrive = "unknown" # if NetType: # NetType += "<1_1>unknown" # else: # NetType = "unknown" else: if NetLogicalname: NetLogicalname += "<1_1>" + tmp[0] else: NetLogicalname = tmp[0] # if tmp[0].startswith('veth') or tmp[0].startswith('virbr'): # if NetType: # NetType += "<1_1>VNIC" # else: # NetType = "VNIC" # else: # if NetType: # NetType += "<1_1>unknown" # else: # NetType = "unknown" ip = get_interface_ip(tmp[0]) if ip in [None, '']: if NetIp: NetIp += "<1_1>" + "unknown" else: NetIp = "unknown" else: if NetIp: NetIp += "<1_1>" + ip else: NetIp = ip driver = get_interface_driver(tmp[0])#enp0s25 wlp3s0 if driver in [None, '']: if NetDrive: NetDrive += "<1_1>" + "unknown" else: NetDrive = "unknown" else: if NetDrive: NetDrive += "<1_1>" + driver else: NetDrive = driver # for line in lines: # if ":" in line: # line = line.strip() # if "description:" in line: # tmp = re.findall('description: (.*)', line) # if tmp[0] in [None, '']: # if NetType: # NetType += "<1_1>" + "unknown" # else: # NetType = "unknown" # else: # if NetType: # NetType += "<1_1>" + tmp[0] # else: # NetType = tmp[0] net['NetNum'] = NetNum net['NetType'],net['NetProduct'],net['NetVendor'],net['NetBusinfo'],net['NetLogicalname'],net['NetSerial'],net['NetIp'],net['NetDrive'] = NetType.rstrip("<1_1>"), NetProduct.rstrip("<1_1>"),NetVendor.rstrip("<1_1>"),NetBusinfo.rstrip("<1_1>"),NetLogicalname.rstrip("<1_1>"),NetSeriali.rstrip("<1_1>"),NetIp.rstrip("<1_1>"), NetDrive.rstrip("<1_1>") return net except Exception as e: return net # print NetType # print NetProduct # print NetVendor # print NetBusinfo # print NetSerial # print NetLogicalname # print NetIp # print NetDrive #write by hb at 20170516 for 20x_server def get_network(self): net = {} netflag = "" NetType,NetProduct,NetVendor,NetDriver,NetBusinfo,NetLogicalname,NetSerial,NetIp = '','','','','','','','' try: #fp = open("/home/ice/networkinfo") #allinfo = fp.read() #fp.close() fp = os.popen("lshw -C network"); allinfo = fp.read() infolist = allinfo.split("*-network")[1:] for singleinfo in infolist: infodict = {} singleinfolist = [ tmp.strip() for tmp in singleinfo.split("\n") ] netflag = singleinfolist[0] for info in singleinfolist[1:]: if info: tmp = info.split(": ") pprint(tmp) infodict.setdefault(tmp[0], tmp[1]) pprint(infodict) NetType += ( infodict.get("description", "unknown") + "<1_1>" ) NetProduct += ( infodict.get("product", "unknown") + "<1_1>" ) NetVendor += ( infodict.get("vendor", "unknown") + "<1_1>") NetBusinfo += ( infodict.get("bus info", "unknown") + "<1_1>" ) NetSerial += ( infodict.get("serial", "unknown") + "<1_1>") NetLogicalname += ( infodict.get("logical name", "unknown") + "<1_1>") NetIp += ( get_interface_ip(infodict.get("logical name", "unknown")) + "<1_1>") NetDriver += (get_interface_driver(infodict.get("logical name", "unknown")) + "<1_1>") net['NetNum'] = len(infolist) net['NetType'],net['NetProduct'],net['NetVendor'],net['NetBusinfo'],net['NetLogicalname'],net['NetSerial'],net['NetIp'],net['NetDrive'] = NetType.rstrip("<1_1>"), NetProduct.rstrip("<1_1>"),NetVendor.rstrip("<1_1>"),NetBusinfo.rstrip("<1_1>"),NetLogicalname.rstrip("<1_1>"),NetSerial.rstrip("<1_1>"),NetIp.rstrip("<1_1>"), NetDriver.rstrip("<1_1>") except Exception as e: pass return net #kobe:测试发现服务器上有个网卡名为:lxcbr0,其通过lspci -vvv找不到对应的信息 def get_network_test(self): net = {} NetNum = 0 #NetList = [] NetProduct,NetVendor,NetDrive,NetBusinfo,NetLogicalname,NetSerial,NetIp,NetLink,NetCapacity,Subsystem = '','','','','','','','','','' fp=os.popen("ifconfig -s|grep -v Iface|grep -v lo|awk '{print $1}'") interface = fp.readlines() fp.close() ip_dic={} for name in interface: name = name.strip() if name is not "lo":#20161228 mac = get_interface_mac(name) if NetSerial: NetSerial += "<1_1>" + mac else: NetSerial = mac ip = get_interface_ip(name) if NetIp: NetIp += "<1_1>" + ip else: NetIp = ip NetNum += 1 #NetList.append(name) if NetLogicalname: NetLogicalname += "<1_1>" + name else: NetLogicalname = name n = os.popen('lspci -vvv') network = n.read() n.close() bus = re.findall('Ethernet controller: ', network) if bus: #tmp =network network[network.index('Ethernet controller: ')-8:] #network = network[network.index('Ethernet controller: ')+len('Ethernet controller: '):] #addr = network.index('Ethernet controller: ') #network = network[:network.index('Ethernet controller: ')-1] #print network while bus: st = network[:network.index('Ethernet controller: ')-1] tmp = network[st.rindex('\n')+1:network.index('Ethernet controller: ')-1] if tmp: if NetBusinfo: NetBusinfo += "<1_1>" + 'pci@0000:' + tmp else: NetBusinfo = 'pci@0000:' + tmp network = network[network.index('Ethernet controller: '):] tmp = network[network.index('Ethernet controller: ')+len('Ethernet controller: '):network.index('\n')] if tmp: if NetVendor: NetVendor += "<1_1>" + self.get_url('', tmp) else: NetVendor = self.get_url('', tmp) if NetProduct: NetProduct += "<1_1>" + tmp else: NetProduct = tmp network = network[network.index('Ethernet controller: ')+len('Ethernet controller: '):] idx = network[network.index('Subsystem: '):] tmp = idx[idx.index('Subsystem: ')+len('Subsystem: '):idx.index('\n')] if tmp: if Subsystem: Subsystem += "<1_1>" + tmp else: Subsystem = tmp idx = network[network.index('Kernel driver in use: '):] tmp = idx[idx.index('Kernel driver in use: ')+len('Kernel driver in use: '):idx.index('\n')] if tmp: if NetDrive: NetDrive += "<1_1>" + tmp else: NetDrive = tmp bus = re.findall('Ethernet controller: ', network) #if network : # if re.findall('Ethernet controller: ',network): # tmp = network[network.index('Ethernet controller: ')-8:] # NetBusinfo = 'pci@0000:' + tmp[:8] # pro = re.findall('Ethernet controller: (.*)',tmp) # NetProduct = pro[0] # NetVendor = self.get_url('',pro[0]) # tmp = re.findall('Kernel driver in use: (.*)',tmp) # NetDrive = tmp[0] #n = os.popen('ifconfig eth') #network = n.read() #n.close() #if network : # NetLogicalname = network[:4] # tmp = re.findall("\w\w:\w\w:\w\w:\w\w:\w\w:\w\w",network) # if tmp: # NetSerial = tmp[0] # tmp = re.findall("inet(.*)",network) # if tmp: # ip = tmp[0][tmp[0].index(':')+len(':'): ] # ip = ip[: ip.index(' ')] # NetIp = ip # modify by kobe(LP: #1310882 ) # -------------------get eth interface and ip address------------------- #fp=os.popen("ifconfig -s|grep -v Iface|grep -v lo|awk '{print $1}'") #interface=fp.readlines() #fp.close() #print interface #ip_dic={} #devName = '' #for name in interface: # name=name.strip() # if devName: # devName += "<1_1>" + name # else: # devName = name # # remove 'wlan' # #if name.startswith('eth'): # if name is not "lo":#20161228 #print NetList #for netItem in NetList: # try: # sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ipaddr=socket.inet_ntoa(fcntl.ioctl( # sk.fileno(), # 0x8915, # SIOCGIFADDR # struct.pack('256s', netItem[:15]) # )[20:24]) # ip_dic[netItem]=ipaddr # except Exception as e: # print e #print ip_dic #if len(ip_dic) == 0: # #NetLogicalname = 'N/A' # NetIp = 'N/A' #else: # #NetLogicalname = ip_dic.keys()[0] # NetIp = ip_dic.values()[0] # -------------------get mac address------------------- #mac_addr = uuid.UUID(int = uuid.getnode()).hex[-12:] #NetSerial = ":".join([mac_addr[e:e+2] for e in range(0,11,2)]) try: n = os.popen('mii-tool -v') network = n.read() n.close() if network : tmp = re.findall("basic status: (.*)",network) if tmp: NetLink = tmp[0] tmp = re.findall('capabilities: (\d*)',network) if tmp: NetCapacity = tmp[0] except Exception as e: print(e) WlanProduct,WlanVendor,WlanBusinfo,WlanLogicalname,WlanSerial,WlanIp,WlanDrive = '','','','','','','' n = os.popen('lspci -vvv') wlan = n.read() n.close() if wlan : if re.findall('Network controller: ',wlan): tmp = wlan[wlan.index('Network controller: ') - 8:] WlanBusinfo = 'pci@0000:' + tmp[:8] pro = re.findall('Network controller: (.*)',tmp) WlanProduct = pro[0] WlanVendor = self.get_url('',pro[0]) tmp = re.findall('Kernel driver in use: (.*)',tmp) WlanDrive = tmp[0] n = os.popen('ifconfig wlan') wlan = n.read() n.close() if wlan: WlanLogicalname = wlan[:5] tmp = re.findall("\w\w:\w\w:\w\w:\w\w:\w\w:\w\w",wlan) if tmp: WlanSerial = tmp[0] tmp = re.findall("inet(.*)",wlan) if tmp: ip = tmp[0][tmp[0].index(':')+len(':'):] ip = ip[: ip.index(' ')] WlanIp = ip net['NetNum'] = NetNum net['NetProduct'],net['NetVendor'],net['NetBusinfo'],net['NetLogicalname'],net['NetSerial'],net['NetIp'],net['NetLink'],net['NetCapacity'],net['NetDrive'],net['WlanProduct'],net['WlanVendor'],net['WlanBusinfo'],net['WlanLogicalname'],net['WlanSerial'],net['WlanIp'],net['WlanDrive'] = self.strip(NetProduct),self.strip(NetVendor),self.strip(NetBusinfo),self.strip(NetLogicalname),self.strip(NetSerial),self.strip(NetIp),self.strip(NetLink),self.strip(NetCapacity),self.strip(NetDrive),self.strip(WlanProduct),self.strip(WlanVendor),self.strip(WlanBusinfo),self.strip(WlanLogicalname),self.strip(WlanSerial),self.strip(WlanIp),self.strip(WlanDrive) return net def get_multimedia(self): Mul = {} MulNum = 0 MulProduct,MulVendor,MulBusinfo,MulDrive = '','','','' n = os.popen('lspci -vvv') multimedia = n.read() n.close() if multimedia: if re.findall('Audio device:',multimedia): tmp = multimedia[multimedia.index('Audio device:')- 8:] multimedia = tmp[30:] if MulBusinfo: MulBusinfo += "<1_1>"+ 'pci@0000:' + tmp[ :8] else : MulBusinfo = 'pci@0000:' + tmp[ :8] if MulProduct: pro = re.findall('Audio device: (.*)',tmp) MulProduct += "<1_1>" + pro[0] MulVendor += "<1_1>" + self.get_url('',self.strip(pro[0])) else : pro = re.findall('Audio device: (.*)',tmp) MulProduct = pro[0] MulVendor = self.get_url('',self.strip(pro[0])) MulNum += 1 tmp = re.findall('Kernel driver in use: (.*)',tmp) if MulDrive: MulDrive += "<1_1>" + tmp[0] else : MulDrive = tmp[0] elif re.findall('Multimedia audio controller:',multimedia) : tmp = multimedia[multimedia.index('Multimedia audio controller:')- 8:] multimedia = tmp[30:] if MulBusinfo: MulBusinfo += "<1_1>"+ 'pci@0000:' + tmp[ :8] else : MulBusinfo = 'pci@0000:' + tmp[ :8] if MulProduct: pro = re.findall('Multimedia audio controller: (.*)',tmp) MulProduct += "<1_1>" + pro[0] MulVendor += "<1_1>" + self.get_url('',self.strip(pro[0])) else : pro = re.findall('Multimedia audio controller: (.*)',tmp) MulProduct = pro[0] MulVendor = self.get_url('',self.strip(pro[0])) MulNum += 1 tmp = re.findall('Kernel driver in use: (.*)',tmp) if MulDrive: MulDrive += "<1_1>" + tmp[0] else : MulDrive = tmp[0] Mul['MulNum'],Mul['MulProduct'],Mul['MulVendor'],Mul['MulBusinfo'],Mul['MulDrive'] = self.strip(str(MulNum)),self.strip(MulProduct),self.strip(MulVendor),self.strip(MulBusinfo),self.strip(MulDrive) return Mul def get_dvd(self): dvd = {} Dvdnum = 0 DvdProduct,DvdVendor,DvdName,DvdFw,DvdSerial = '','','','','' n = os.popen("hdparm -i /dev/cdrom") cdrom = n.read() n.close() if cdrom: tmp = re.findall("Model=(.*), F",cdrom) if tmp: DvdProduct = tmp[0] DvdVendor = self.get_url('',self.strip(DvdProduct)) if not DvdVendor : pro = DvdProduct[:DvdProduct.index('DVD')] DvdVendor = self.get_url('',self.strip(pro)) if not DvdVendor : pro = DvdProduct[:DvdProduct.index('CD')] DvdVendor = self.get_url('',self.strip(pro)) tmp = re.findall("FwRev=(.*), ",cdrom) if tmp : DvdFw = tmp[0] tmp = re.findall("SerialNo=(.*)",cdrom) if tmp : DvdSerial = tmp[0] DvdName = '/dev/cdrom' Dvdnum += 1 dvd['Dvdnum'],dvd['DvdProduct'],dvd['DvdVendor'],dvd['DvdName'],dvd['DvdFw'],dvd['DvdSerial'] = self.strip(str(Dvdnum)),self.strip(DvdProduct),self.strip(DvdVendor),self.strip(DvdName),self.strip(DvdFw),self.strip(DvdSerial) return dvd def get_usb(self): usb = {} Usbnum = 0 UsbVendor, UsbBusinfo, UsbID, UsbProduct, bcdUsb, UsbMaxpower = '','','','','','' n = os.popen("lsusb -v") usbinfo = n.read() n.close() bus = re.findall('Bus 0',usbinfo) if bus: usbinfo = usbinfo[usbinfo.index('Bus 0')+len('Bus 0'):] while bus: usbstr = usbinfo[:usbinfo.index('Device Status:')] flag = usbstr[usbstr.index('\n')-8:usbstr.index('\n')] if not flag == 'root hub' : if UsbBusinfo: UsbBusinfo += "<1_1>" + 'Bus 0'+usbstr[:2] else : UsbBusinfo = 'Bus 0'+usbstr[:2] tmp = re.findall('idVendor(.*)',usbstr) vendor = tmp[0].lstrip() if UsbVendor: UsbVendor += "<1_1>" + vendor[7:] else : UsbVendor = vendor[7:] tmp = re.findall('idProduct(.*)',usbstr) product = tmp[0].lstrip() if UsbProduct: UsbProduct += "<1_1>" + product[7:] else : UsbProduct = product[7:] if UsbID: UsbID += "<1_1>" + vendor[2:6] + ':' + product[2:6] else : UsbID = vendor[2:6] + ':' + product[2:6] tmp = re.findall('bcdUSB(.*)',usbstr) if bcdUsb: bcdUsb += "<1_1>" + tmp[0].lstrip() else : bcdUsb = tmp[0].lstrip() tmp = re.findall('MaxPower(.*)',usbstr) if UsbMaxpower: UsbMaxpower += "<1_1>" + tmp[0].lstrip() else : UsbMaxpower = tmp[0].lstrip() Usbnum += 1 bus = re.findall('Bus 0',usbinfo) if bus : usbinfo = usbinfo[usbinfo.index('Bus 0')+len('Bus 0'):] usb['Usbnum'],usb['UsbVendor'],usb['UsbProduct'],usb['UsbBusinfo'],usb['UsbID'],usb['bcdUsb'],usb['UsbMaxpower'] = self.strip(str(Usbnum)),self.strip(UsbVendor),self.strip(UsbProduct),self.strip(UsbBusinfo),self.strip(UsbID),self.strip(bcdUsb),self.strip(UsbMaxpower) return usb def judge_sensors_exists(self): if os.path.exists("/usr/bin/sensors"): r = os.popen("/usr/bin/sensors") text = r.read() r.close() if "w83795g-i2c-1-2c" in text or "w83795adg-i2c-1-2c" in text: return True else: return False return False def get_sensors(self): # origin = {"IN0": "0.75V", #"内存参考电压" # "IN2": "1.0V", #"SATA控制器电压" # "IN3": "1.5V", #"内存电压", # "IN5": "1.8V", #"CPU管脚电压", # "IN6": "1.25 V", #"桥片电压", # "TR1": "1.65 V", #"ATX_3V3", # "TR2": "1.67 V", #"ATX_5V", # "TR3": "1.0 V", #"ATX_12V", # "TR4": "1.0 V", #"CPU核电压", # "TR5": "", #"CPU温度", # "TR6": "", #"主板温度" # "FANIN1": "" #"CPU风扇转速" # } origin = {"IN0": "", #"内存参考电压" "IN2": "", #"SATA控制器电压" "IN3": "", #"内存电压", "IN5": "", #"CPU管脚电压", "IN6": "", #"桥片电压", "TR1": "", #"ATX_3V3", "TR2": "", #"ATX_5V", "TR3": "", #"ATX_12V", "TR4": "", #"CPU核电压", "TR5": "", #"CPU温度", "TR6": "", #"主板温度" "FANIN1": "" #"CPU风扇转速" } opposite = {"IN0": "in0", "IN2": "in2", "IN3": "in3", "IN5": "in5", "IN6": "in6", "TR1": "in17", "TR2": "in18", "TR3": "in19", "TR4": "in20", "TR5": "temp5", "TR6": "temp6", "FANIN1": "fan1" } product = {"in17": 2, "in18": 3, "in19": 12, } status, output = subprocess.getstatusoutput("sensors") for line in output.split("\n"): for key in list(opposite.items()): if line.split(":")[0] == key[1]: if key[1] in ["in17", "in18", "in19"]: value = (line.split(":")[1]).split("(")[0].strip() origin[key[0]] = value[0:1] + str(float(value[1:-1]) * product[key[1]]) + " V" break if key[1] in ["temp5", "temp6"]: origin[key[0]] = ((line.split(":")[1]).split("(")[0].strip())[0:5] + "℃ " break origin[key[0]] = (line.split(":")[1]).split("(")[0].strip() break return origin if __name__ == "__main__": pass #cc = DetailInfo() #cc.ctoascii('a') #cc.strip('a') #cc.get_url('a','a') #cc.get_computer() #cc.get_cpu() #cc.get_board() #cc.get_memory() #cc.get_monitor() #cc.get_disk() #cc.get_network() #cc.get_multimedia() #cc.get_dvd() #cc.get_usb() #pprint(cc.get_sensors()) youker-assistant/backends/kylin-assistant-daemon/src/detailinfo/__init__.py0000664000175000017500000000002313260315532026206 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/systemdbus/0000775000175000017500000000000013260315533024167 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/systemdbus/daemon.py0000664000175000017500000007406713260315532026021 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import sys import os import signal import glob import fcntl import shutil import logging import tempfile import subprocess import re import dbus import dbus.service import dbus.mainloop.glib from gi.repository import GObject #import apt #import aptsources.sourceslist #import apt_pkg import threading import _thread from .server import PolicyKitService from policykit import KYLIN_ASSISTANT_ACTION import time import cleaner from detailinfo.cpuinfo import DetailInfo from beautify.sound import Sound from beautify.others import Others #from appcollections.monitorball.monitor_ball import MonitorBall #from softwarecenter.apt_daemon import AptDaemon from beautify.theme import Theme log = logging.getLogger('Daemon') INTERFACE = 'com.kylin.assistant.systemdaemon' UKPATH = '/com/kylin/assistant/systemdaemon' #------------------------------------apt start---------------------------- from .apt_handler import AppActions, AptHandler, WorkitemError #class WorkItem: # def __init__(self, pkgname, action, kwargs): # self.pkgname = pkgname # self.action = action # self.kwargs = kwargs #class WorkThread(threading.Thread): # def __init__(self, dbusDaemon): # threading.Thread.__init__(self) # self.dbusDaemon = dbusDaemon # print "$$$$$$$$$$$$$$ ", type(self.dbusDaemon) # def run(self): # while(True): # if len(self.dbusDaemon.worklist) == 0: # time.sleep(0.2) # continue # self.dbusDaemon.mutex.acquire() # item = self.dbusDaemon.worklist.pop(0) #get first item and remove it from list # self.dbusDaemon.mutex.release() # try: # func = getattr(self.dbusDaemon.aptHandler, item.action) # if func is None: # print "Error action: ", item # res = func(item.pkgname,item.kwargs) # if res is False: # print "Action exec failed..." # except WorkitemError as e: # kwarg = {"apt_appname": item.pkgname, # "apt_percent": str(-e.errornum), # "action": str(item.action), # } # self.dbusDaemon.youker_apt_signal("apt_error", kwarg) # time.sleep(0.3) #------------------------------------apt end---------------------------- class Daemon(PolicyKitService): def __init__ (self, bus, mainloop): self.infoconf = DetailInfo() self.otherconf = Others() self.soundconf = Sound() # self.ballconf = MonitorBall() self.themeconf = Theme() # self.daemonsame = cleaner.SearchTheSame() # self.daemonlarge = cleaner.ManageTheLarge() # self.daemonunneed = cleaner.CleanTheUnneed() # self.daemonclean = cleaner.FunctionOfClean() self.daemononekey = cleaner.OneKeyClean() # self.daemoncache = cleaner.CleanTheCache() # self.daemonApt = AptDaemon() #self.daemonApt = AptDaemon(self) #--------------apt start---------------- self.aptHandler = AptHandler(self) # self.worklist = [] # self.mutex = threading.RLock() # self.worker_thread = WorkThread(self) # self.worker_thread.setDaemon(True) # self.worker_thread.start() #--------------apt end---------------- bus_name = dbus.service.BusName(INTERFACE, bus=bus) PolicyKitService.__init__(self, bus_name, UKPATH) self.mainloop = mainloop @dbus.service.method(INTERFACE, in_signature='', out_signature='') def exit(self): self.mainloop.quit() #--------------apt start---------------- # def add_worker_item(self, item): # print "####add_worker_item:", item # self.mutex.acquire() # self.worklist.append(item) # self.mutex.release() # package download status signal '''parm mean type: start:start download stop:all work is finish done:all items download finished fail:download failed fetch:one item download finished pulse:download status, this msg given a string like dict msg: a message of type, sometimes is None ''' @dbus.service.signal(INTERFACE, signature='sas') def youker_fetch_signal(self, type, msg): pass # package install/update/remove signal '''parm mean type: start:start work stop:work finish error:got a error pulse:work status, this msg given a string like dict msg: a message of type, sometimes is None ''' @dbus.service.signal(INTERFACE, signature='sas') def youker_apt_signal(self, type, msg): pass def start_install_uk(self, pkgName): self.aptHandler.install(pkgName) # install package sa:youker_fetch_signal() and youker_apt_signal() #sudo apt-get install youker-assistant=1.3.1-0ubuntu1 @dbus.service.method(INTERFACE, in_signature='s', out_signature='b', sender_keyword='sender') def install(self, pkgName, sender=None): print("####install: ",pkgName) # item = WorkItem(pkgName, AppActions.INSTALL, None) # self.add_worker_item(item) # self.aptHandler.install(pkgName) _thread.start_new_thread(self.start_install_uk, (pkgName,)) print("####install return") return True def start_update_source_list(self): self.aptHandler.update() @dbus.service.method(INTERFACE, in_signature='', out_signature='b', sender_keyword='sender') def update(self, sender=None): _thread.start_new_thread(self.start_update_source_list, ()) # self.aptHandler.update() return True # @dbus.service.method(INTERFACE, in_signature='as', out_signature='b', sender_keyword='sender') # def upgrade(self, pkgNames, sender=None): # print "####upgrade: ", pkgNames # item = WorkItem(pkgNames, AppActions.UPGRADE, None) # self.add_worker_item(item) # # self.aptHandler.upgrade_pkg(pkgName) # print "####upgrade return" # return True #--------------apt end---------------- @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_homedir(self, homedir): self.soundconf.set_homedir(homedir) @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def adjust_cpufreq_scaling_governer(self, value): # cpufreq_file = "/etc/init.d/cpufrequtils" # oldvalue = '' # if os.path.exists(cpufreq_file): # fp = open(cpufreq_file, "rw+") # line = fp.readline() # while line: # if line.startswith("GOVERNOR="): # if value not in line: # oldvalue = line.split("=")[1].replace('"', '').replace('\n', '') # break # line = fp.readline() # fp.close() # if oldvalue not in ['', None] and value not in ['', None]: # cmd = "sed -i 's/%s/%s/g' %s" % (oldvalue, value, cpufreq_file) # os.system(cmd) # os.system('service cpufrequtils restart') # else: fpath = os.path.expanduser("/sys/devices/system/cpu/") for line in os.listdir(fpath): line = line.strip('\n') #pattern = re.compile(r'cpu.*[0-9]$') pattern = re.compile(r'cpu.*\d\Z') m = pattern.match(line) if m: filepath = "/sys/devices/system/cpu/%s/cpufreq/scaling_governor" % line if os.path.exists(filepath): cmd = 'echo %s > %s' % (value, filepath) os.system(cmd) @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_cpufreq_scaling_governer_list(self): cmd = "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors" fp = os.popen(cmd) msg = fp.read().strip('\n') fp.close() cpulist = [] if msg not in ['', None]: cpulist = msg.split(' ') return cpulist @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_cpufreq_scaling_governer(self): cmd = "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" fp = os.popen(cmd) msg = fp.read().strip('\n') fp.close() return msg @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def copy_file(self, filename): des_path = '/var/lib/youker-assistant-daemon/custom' filename = filename.encode('utf-8') if not os.path.exists(des_path): os.makedirs(des_path) try: shutil.copy(filename, des_path) return True except os.error: pass return False @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def delete_file(self, filename): filename = filename.encode('utf-8') # output = open("/tmp/default.txt", 'w+') # output.write(filename) # output.close() # fp = open("/tmp/default.txt", "w") # print >> fp, "--------------" # print >> fp, filename # print >> fp, "------22222222--------" # fp.close() # if os.path.exists(filename): if os.path.isfile(filename): try: os.remove(filename) return True except os.error: pass return False # set cursor theme @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_cursor_theme_with_root(self, theme): return self.themeconf.set_cursor_theme_with_root(theme) @dbus.service.method(INTERFACE, in_signature='s', out_signature='b', sender_keyword='sender') def kill_root_process(self, pid, sender=None): status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) if not status: return False cmd = 'kill -9 %s' % pid subprocess.Popen(cmd, shell=True, close_fds=True)#加上close_fds=True,避免子进程一直存在 return True @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def kill_uk_process(self): cmd = 'killall youker-assistant' subprocess.Popen(cmd, shell=True, close_fds=True)#加上close_fds=True,避免子进程一直存在 return True @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_user_homedir(self, homedir): cleaner.get_user_homedir(homedir) @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_system_daemon(self): return "SystemDaemon" @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_computer_info(self): return self.infoconf.get_computer() @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_os_name(self): return self.infoconf.get_os_name() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_cpu_info(self): return self.infoconf.get_cpu() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_board_info(self): return self.infoconf.get_board() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_memory_info(self): return self.infoconf.get_memory() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_harddisk_info(self): return self.infoconf.get_disk() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_networkcard_info(self): return self.infoconf.get_network() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_monitor_info(self): return self.infoconf.get_monitor() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_cdrom_info(self): return self.infoconf.get_dvd() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_audiocard_info(self): return self.infoconf.get_multimedia() @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_time_value(self): return self.infoconf.uptimeinfo() @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_sensor_info(self): return self.infoconf.get_sensors() @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def judge_sensors_exists_hb(self): return self.infoconf.judge_sensors_exists() # -------------------------sound------------------------- # get sound themes @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_sound_themes(self): return self.soundconf.get_sound_themes() # get sound files in current sound theme @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_sounds(self): return self.soundconf.get_sounds() # replace a sound file @dbus.service.method(INTERFACE, in_signature='ss', out_signature='') def replace_sound_file(self, newSoundFile, targetSoundFile): self.soundconf.replace_sound_file(newSoundFile, targetSoundFile) # restore a sound file @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def restore_sound_file(self, targetSoundFile): self.soundconf.restore_sound_file(targetSoundFile) # restore all sound file in current sound theme @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def restore_all_sound_file(self, soundTheme): self.soundconf.restore_all_sound_file(soundTheme) # -------------------------others------------------------- # custom plymouth bg by plymouthName @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def custom_plymouth_bg(self, plymouthName): self.otherconf.custom_plymouth_bg(plymouthName) # add new custom plymouth #@dbus.service.method(INTERFACE, in_signature='ss', out_signature='') #def add_new_plymouth(self, customBG, plymouthName): # self.otherconf.add_new_plymouth(customBG, plymouthName) # get existing plymouth list @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_existing_plymouth_list(self): return self.otherconf.get_existing_plymouth_list() # check and save current plymouth when init @dbus.service.method(INTERFACE, in_signature='', out_signature='') def plymouth_init_check(self): self.otherconf.plymouth_init_check() # get image path @dbus.service.method(INTERFACE, in_signature='s', out_signature='s') def get_image_path(self,name): return self.otherconf.get_image_path(name) # Delete the boot animation from the list @dbus.service.method(INTERFACE, in_signature='s', out_signature='s') def delete_plymouth(self,plymouthName): return self.otherconf.delete_plymouth(plymouthName) # -------------------------monitorball------------------------- # clean up memory # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def cleanup_memory(self): # self.ballconf.cleanup_memory() # -------------------------monitorball end------------------------- @dbus.service.signal(INTERFACE, signature='s') def clean_complete_onekey(self, msg): pass @dbus.service.signal(INTERFACE, signature='s') def clean_error_onekey(self, msg): pass @dbus.service.signal(INTERFACE, signature='ss') def status_for_quick_clean(self, flag, status): pass # a dbus method which means clean complete @dbus.service.signal(INTERFACE, signature='s') def clean_complete(self, msg): pass # a dbus method which means quit clean by clicking the policykit's quit button @dbus.service.signal(INTERFACE, signature='b') def quit_clean(self, status): pass # a dbus method which means clean single complete @dbus.service.signal(INTERFACE, signature='s') def clean_single_complete(self, msg): pass # a dbus method which means an error occurred @dbus.service.signal(INTERFACE, signature='s') def clean_error(self, msg): pass # a dbus method which means an single error occurred @dbus.service.signal(INTERFACE, signature='s') def clean_single_error(self, msg): pass @dbus.service.method(INTERFACE, in_signature='as', out_signature='', sender_keyword='sender') def onekey_clean_crufts_function(self, mode_list, sender=None): status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) if not status: self.revoke_clean_onekey('yes') return else: self.revoke_clean_onekey('no') daemononekey = cleaner.OneKeyClean() try: t = threading.Thread(target = daemononekey.clean_all_onekey_crufts, args = (self, mode_list)) t.start() #daemononekey.clean_all_onekey_crufts(self, mode_list) except Exception as e: self.clean_error_msg('onekey') else: self.clean_complete_msg('onekey') # @dbus.service.method(INTERFACE, in_signature='as', out_signature='', sender_keyword='sender') # def onekey_clean_crufts_function_by_threading(self, mode_list, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # daemononekey = cleaner.OneKeyClean() # try: # t = threading.Thread(target = daemononekey.clean_all_onekey_crufts, args = (self, mode_list)) # #daemononekey.clean_all_onekey_crufts(self, mode_list) # except Exception, e: # self.clean_error_msg('onekey') # else: # self.clean_complete_msg('onekey') # return t def onekey_clean_cancel_function(self, t): daemononekey.cancel_onekey_clean(t, SystemExit) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender') # def history_clean_records_function(self, flag, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.clean_complete_msg('') # return # daemonhistory = cleaner.CleanTheHistory() # try: # running = daemonhistory.clean_all_history_crufts(flag) # except Exception, e: # self.clean_error_msg(flag) # else: # self.clean_complete_msg(flag) # @dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender') # def clean_system_history(self, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.clean_complete_msg('') # return # daemonsystem = cleaner.CleanSystemHistory() # try: # daemonsystem.clean_the_cruftlist() # except Exception, e: # self.clean_error_msg('system') # else: # self.clean_complete_msg('system') #@dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender') #def clean_dash_history(self, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.clean_complete_msg('') # return # daemondash = cleaner.CleanDashHistory() # try: # daemondash.clean_the_cruftlist() # except Exception, e: # self.clean_error_msg('dash') # else: # self.clean_complete_msg('dash') # @dbus.service.method(INTERFACE, in_signature = 'as', out_signature = '', sender_keyword = 'sender') # def cookies_clean_record_function(self, flag, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.clean_single_complete_msg('') # return # daemoncookies = cleaner.CleanTheCookies(None) # try: # daemoncookies.clean_one_cookies_cruft(flag[0], flag[1]) # except Exception, e: # self.clean_single_error_msg('cookies') # else: # self.clean_single_complete_msg('cookies') # @dbus.service.method(INTERFACE, in_signature = 's', out_signature = '', sender_keyword = 'sender') # def cookies_clean_records_function(self, flag, sender = None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.quit_clean_work(flag) # return # daemoncookies = cleaner.CleanTheCookies(None) # try: # daemoncookies.clean_all_cookies_crufts(flag) # except Exception, e: # self.clean_error_msg(flag) # else: # self.clean_complete_msg(flag) # the function of clean files ### input-['filepath', 'file...] output-'' # @dbus.service.method(INTERFACE, in_signature='ass', out_signature='', sender_keyword='sender') # def clean_file_cruft(self, cruft_list, flagstr, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.clean_complete_msg('') # return # try: # for cruft in cruft_list: # self.daemonclean.clean_the_file(cruft) # except Exception, e: # self.clean_error_msg(flagstr) # else: # self.clean_complete_msg(flagstr) #def dbusstring_to_string(self, string): # tmp_string = str(string) # patt = "u'[\S]+'" # tmp_list = re.findall(patt, tmp_string) # return [ok.split("'")[1] for ok in tmp_list] def clean_complete_msg(self, para): self.clean_complete(para) # def quit_clean_work(self, para): # self.quit_clean(para) # def quit_clean_work(self, status): # self.quit_clean(status) def clean_single_complete_msg(self, para): self.clean_single_complete(para) def clean_error_msg(self, para): self.clean_error(para) def clean_single_error_msg(self, para): self.clean_single_error(para) def revoke_clean_onekey(self, para): self.clean_complete_onekey(para) # a dbus method which means clean complete # @dbus.service.signal(INTERFACE, signature='s') # def finish_clean(self, msg): # pass @dbus.service.signal(INTERFACE, signature='ss') def status_remove_packages(self, type, msg): pass # a dbus method which means an error occurred # @dbus.service.signal(INTERFACE, signature='s') # def sudo_clean_error(self, msg): # pass # the function of clean packages ### input-['packagename', 'pack...] output-'' # @dbus.service.method(INTERFACE, in_signature='ass', out_signature='', sender_keyword='sender') # def clean_package_cruft(self, cruftlist, flag, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.finish_clean_msg('') # return # try: # self.daemonclean.clean_the_package(cruftlist, self) # except Exception, e: # self.sudo_clean_error_msg(flag) # else: # self.finish_clean_msg(flag) # def finish_clean_msg(self, para): # self.finish_clean(para) # def sudo_clean_error_msg(self, para): # self.sudo_clean_error(para) #-----START-----------NEW-YOUKER--------------------------- # # @dbus.service.method(INTERFACE, in_signature='a{sv}', out_signature='', sender_keyword='sender') # def remove_select_items(self, mode_dic, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.quit_clean(False) ## self.quit_clean_work() # return # else: # self.quit_clean(True) def start_clean_all(self, mode_dic): filecache = mode_dic.get('file', []) if filecache: for tmpName in filecache: cleaner.interface_remove_file_system(self, tmpName) packagecache = mode_dic.get('package', []) if packagecache: for pkgName in packagecache: cleaner.interface_remove_package_system(self, pkgName) bashhistory = mode_dic.get('bash-history', []) if bashhistory: for tmpName in bashhistory: cleaner.interface_remove_file_system(self, tmpName) x11history = mode_dic.get('x11-history', []) if x11history: for tmpName in x11history: cleaner.interface_remove_file_system(self, tmpName) firefoxhistory = mode_dic.get('firefox-history', []) if firefoxhistory: cleaner.interface_remove_firefox_history_system(self) chromiumhistory = mode_dic.get('chromium-history', []) if chromiumhistory: cleaner.interface_remove_chromium_history_system(self) systemhistory = mode_dic.get('system-history', []) if systemhistory: cleaner.interface_remove_system_history_system(self) firefoxcookies = mode_dic.get('firefox-cookie', []) if firefoxcookies: for domain in firefoxcookies: cleaner.interface_remove_firefox_cookies_system(self, domain) chromiumcookies = mode_dic.get('chromium-cookie', []) if chromiumcookies: for domain in chromiumcookies: cleaner.interface_remove_chromium_cookies_system(self, domain) self.subpage_status_signal('Complete:All', "finish") @dbus.service.method(INTERFACE, in_signature='a{sv}', out_signature='', sender_keyword='sender') def remove_select_items(self, mode_dic, sender=None): status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) if not status: self.quit_clean(False) return else: self.quit_clean(True) _thread.start_new_thread(self.start_clean_all, (mode_dic,)) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender') # def remove_file(self, fp): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # cleaner.interface_remove_file_system(self, fp) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender') # def remove_package(self, pkgname, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # cleaner.interface_remove_package_system(self, pkgname) # @dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender') # def remove_firefox_history(self, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # cleaner.interface_remove_firefox_history_system(self) # @dbus.service.method(INTERFACE, in_signature='', out_signature='', sender_keyword='sender') # def remove_chromium_history(self, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # cleaner.interface_remove_chromium_history_system(self) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender') # def remove_firefox_cookies(self, domain, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # cleaner.interface_remove_firefox_cookies_system(self, domain) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='', sender_keyword='sender') # def remove_chromium_cookies(self, domain, sender=None): # status = self._check_permission(sender, KYLIN_ASSISTANT_ACTION) # if not status: # self.revoke_clean_onekey('yes') # return # else: # self.revoke_clean_onekey('no') # cleaner.interface_remove_chromium_cookies_system(self, domain) @dbus.service.signal(INTERFACE, signature='as') def subpage_data_signal(self, msg): pass @dbus.service.signal(INTERFACE, signature='ss') def subpage_status_signal(self, msg, domain): pass @dbus.service.signal(INTERFACE, signature='s') def subpage_error_signal(self, msg): pass #-----END------------NEW-YOUKER--------------------------- if __name__ == '__main__': os.environ["TERM"] = "xterm" os.environ["PATH"] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" os.environ["DEBIAN_FRONTEND"] = "noninteractive" if os.path.exists("/var/lib/apt/lists/lock"): os.remove("/var/lib/apt/lists/lock") dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) #gobject.threads_init() #mainloop = gobject.MainLoop() GObject.threads_init() mainloop = GObject.MainLoop() signal.signal(signal.SIGINT, lambda : mainloop.quit()) Daemon(dbus.SystemBus(), mainloop) mainloop.run() youker-assistant/backends/kylin-assistant-daemon/src/systemdbus/server.py0000664000175000017500000000220113260315532026041 0ustar fengfeng# This class is modified from gnome-lirc-properties project # the original file is gnome_lirc_properties/backend.py # GPL v2+ # Copyright (C) 2008 Fluendo Embedded S.L. # Copyright (C) 2010 TualatriX # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd import dbus.service class AccessDeniedException(dbus.DBusException): '''This exception is raised when some operation is not permitted.''' _dbus_error_name = 'com.kylin.assistant.systemdaemon.AccessDeniedException' class PolicyKitService(dbus.service.Object): '''A D-BUS service that uses PolicyKit for authorization.''' def _check_permission(self, sender, action): if not sender: raise ValueError('sender == None') kit = dbus.SystemBus().get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority') kit = dbus.Interface(kit, 'org.freedesktop.PolicyKit1.Authority') (granted, _, details) = kit.CheckAuthorization( ('system-bus-name', {'name': sender}), action, {}, dbus.UInt32(1), '', timeout=600) return granted youker-assistant/backends/kylin-assistant-daemon/src/systemdbus/apt_handler.py0000664000175000017500000002545613260315532027035 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- import apt import apt.progress.base as apb from apt.debfile import DebPackage from apt.cache import FetchFailedException import locale # application actions class AppActions: INSTALLDEPS = "install_deps" INSTALLDEBFILE = "install_debfile" INSTALL = "install" REMOVE = "remove" UPGRADE = "upgrade" CANCEL = "cancel" APPLY = "apply_changes" PURCHASE = "purchase" UPDATE = "update" UPDATE_FIRST = "update_first" ADD_SOURCE = "add_source" REMOVE_SOURCE = "remove_source" GET_SOURCES = "get_sources" class FetchProcess(apb.AcquireProgress): def __init__(self, dbus_service, appname, action): apb.AcquireProgress.__init__(self) self.dbus_service = dbus_service self.appname = appname self.action = action def done(self, item): # kwarg = {"download_appname":self.appname, # "download_percent":str(self.percent), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) self.dbus_service.youker_fetch_signal("down_done", kwarg) def fail(self, item): # kwarg = {"download_appname":self.appname, # "download_percent":str(self.percent), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) self.dbus_service.youker_fetch_signal("down_fail", kwarg) def fetch(self, item): # kwarg = {"download_appname":self.appname, # "download_percent":str(self.percent), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) self.dbus_service.youker_fetch_signal("down_fetch", kwarg) def ims_hit(self, item): print('ims_hit') pass def media_change(self, media, drive): print('media_change') pass def pulse(self, owner): if self.action == AppActions.UPDATE or self.action == AppActions.UPDATE_FIRST: if self.total_items!= 0: percent = float(self.current_items * 100.0 / self.total_items) if percent > self.percent: self.percent = percent else: if self.total_bytes != 0: self.percent = float(self.current_bytes * 100.0 / self.total_bytes) # kwarg = {"download_appname":self.appname, # "download_percent":str(self.percent), # "download_bytes":str(self.current_bytes), # "total_bytes":str(self.total_bytes), # "download_items":str(self.current_items), # "total_items":str(self.total_items), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) kwarg.append(self.current_bytes) kwarg.append(str(self.total_bytes)) kwarg.append(str(self.current_items)) kwarg.append(str(self.total_items)) self.dbus_service.youker_fetch_signal("down_pulse", kwarg) # cancel the operation if self.dbus_service.check_cancel_worker_item(self.appname) is True: print("download_cancel") self.dbus_service.youker_fetch_signal("down_cancel", kwarg) return False def start(self): # Reset all our values. self.current_bytes = 0.0 self.current_cps = 0.0 self.current_items = 0 self.elapsed_time = 0 self.fetched_bytes = 0.0 self.last_bytes = 0.0 self.total_bytes = 0.0 self.total_items = 0 self.percent = 0 # kwarg = {"download_appname":self.appname, # "download_percent":str(self.percent), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) self.dbus_service.youker_fetch_signal("down_start", kwarg) def stop(self): # kwarg = {"download_appname":self.appname, # "download_percent":str(200), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(200)) kwarg.append(str(self.action)) self.dbus_service.youker_fetch_signal("down_stop", kwarg) class AptProcess(apb.InstallProgress): '''Apt progress''' def __init__(self, dbus_service, appname, action): apb.InstallProgress.__init__(self) self.dbus_service = dbus_service self.appname = appname self.percent = 0 self.action = action def conffile(self, current, new): pass def error(self, pkg, errormsg): # kwarg = {"apt_appname":str(pkg), # "apt_percent":str(self.percent), # "action":str(self.action), # } kwarg = [] kwarg.append(str(pkg)) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) self.dbus_service.youker_apt_signal("apt_error", kwarg) def start_update(self): # kwarg = {"apt_appname":self.appname, # "apt_percent":str(self.percent), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(self.percent)) kwarg.append(str(self.action)) self.dbus_service.youker_apt_signal("apt_start", kwarg) def finish_update(self): # kwarg = {"apt_appname":self.appname, # "apt_percent":str(200), # "action":str(self.action), # } kwarg = [] kwarg.append(self.appname) kwarg.append(str(200)) kwarg.append(str(self.action)) self.dbus_service.youker_apt_signal("apt_finish", kwarg) def status_change(self, pkg, percent, status): # kwarg = {"apt_appname":str(pkg), # "apt_percent":str(percent), # "action":str(self.action), # "status":str(status), # } kwarg = [] kwarg.append(str(pkg)) kwarg.append(str(percent)) kwarg.append(str(self.action)) kwarg.append(str(status)) self.dbus_service.youker_apt_signal("apt_pulse", kwarg) class AptHandler(): def __init__(self, dbus_service): self.dbus_service = dbus_service locale.setlocale(locale.LC_ALL, "zh_CN.UTF-8") self.cache = apt.Cache() self.cache.open() # get package by pkgName def get_pkg_by_name(self, pkgName): try: return self.cache[pkgName] except KeyError: raise WorkitemError(1, "Package %s is not available" % pkgName) # except Exception, e: # print e # return "ERROR" # install deps def install_deps(self, path, kwargs=None): debfile = DebPackage(path) pkgName = debfile._sections["Package"] debfile.check() deps = debfile.missing_deps if(len(deps) > 0): self.cache.open() for pkgn in deps: pkg = self.get_pkg_by_name(pkgn) pkg.mark_install() try: self.cache.commit(FetchProcess(self.dbus_service, pkgName, AppActions.INSTALLDEPS), AptProcess(self.dbus_service, pkgName, AppActions.INSTALLDEPS)) except Exception as e: print(e) print("install err") # install package def install(self, pkgName, kwargs=None): print("real install->", pkgName) self.cache.open() pkg = self.get_pkg_by_name(pkgName) print(pkg.installed.version)#1.2.0-0ubuntu1 print(len(pkg.versions))#2 print(pkg.versions[0].version)#1.3.1-0ubuntu1 print(pkg.versions[1].version)#1.2.0-0ubuntu1 # if pkg.is_installed: # raise WorkitemError(7, "Package %s is installed" % pkgName) pkg.mark_install() try: self.cache.commit(FetchProcess(self.dbus_service, pkgName, AppActions.INSTALL), AptProcess(self.dbus_service, pkgName, AppActions.INSTALL)) except apt.cache.FetchFailedException as error: raise WorkitemError(2, str(error)) except apt.cache.LockFailedException: raise WorkitemError(3, "package manager is running.") except Exception as e: raise WorkitemError(0, "unknown error") # except Exception, e: # print e # print "install err" # update packages def upgrade(self, pkgNames, kwargs=None): self.cache.open() for pkgName in pkgNames: pkg = self.get_pkg_by_name(pkgName) pkg.mark_upgrade() try: self.cache.commit(FetchProcess(self.dbus_service, "#upgrade", AppActions.UPGRADE), AptProcess(self.dbus_service, "#upgrade", AppActions.UPGRADE)) except apt.cache.FetchFailedException as error: raise WorkitemError(2, str(error)) except apt.cache.LockFailedException: raise WorkitemError(3, "package manager is running.") except Exception as e: raise WorkitemError(0, "unknown error") # except Exception, e: # print e # print "update err" def upone(self, pkgName, kwargs=None): self.cache.open() pkg = self.get_pkg_by_name(pkgName) pkg.mark_install() try: self.cache.commit(FetchProcess(self.dbus_service, pkgName, AppActions.INSTALL), AptProcess(self.dbus_service, pkgName, AppActions.INSTALL)) except apt.cache.FetchFailedException as error: raise WorkitemError(2, str(error)) except apt.cache.LockFailedException: raise WorkitemError(3, "package manager is running.") except Exception as e: raise WorkitemError(0, "unknown error") # apt-get update def update(self, kwargs=None): quiet = False if kwargs is not None: quiet = int(kwargs["quiet"]) try: if quiet == True: print("quiet=True") self.cache.update() else: print("quiet=False") self.cache.update(fetch_progress=FetchProcess(self.dbus_service, "#update", AppActions.UPDATE)) except Exception as e: print(e) print("update except") class WorkitemError(Exception): def __init__(self, errornum, details = ""): self.errornum = errornum self.details = details if __name__ == "__main__": ad = AptHandler(None) ad.upgrade(['khelpcenter4']) youker-assistant/backends/kylin-assistant-daemon/src/systemdbus/__init__.py0000664000175000017500000000002313260315532026272 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/single.py0000664000175000017500000000245613260315532023626 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- import os, sys, shutil, tempfile import subprocess # ensure that single instance of applet is running for each user class SingleInstance(object): #Initialize, specifying a path to store pids def __init__(self,pidPath): self.pidPath = pidPath self.lasterror = False if os.path.exists(pidPath): # Make sure it is not a "stale" pidFile pid = open(pidPath, 'r').read().strip() # Check list of running pids, if not running it is stale so overwrite pidRunning = subprocess.getoutput('ls -1 /proc | grep ^%s$' % pid) self.lasterror = True if pidRunning else False else: self.lasterror = False if not self.lasterror: # Create a temp file, copy it to pidPath and remove temporary file (fp, temp_path) = tempfile.mkstemp() try: os.fdopen(fp, "w+b").write(bytes(os.getpid())) shutil.copy(temp_path, pidPath) os.unlink(temp_path) except Exception as e: print(str(e)) def is_already_running(self): return self.lasterror def __del__(self): if not self.lasterror and os.path.exists(self.pidPath): os.unlink(self.pidPath) youker-assistant/backends/kylin-assistant-daemon/src/autostartmanage/0000775000175000017500000000000013260315532025163 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/autostartmanage/autostartmanage.py0000664000175000017500000003412213260315532030736 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import configparser import copy import shutil from pprint import pprint import locale SECTION = 'Desktop Entry' OPTION_H = 'Hidden' OPTION_N = 'NoDisplay' OPTION_O = 'OnlyShowIn' OPTION_NOT = 'NotShowIn' OPTION_X = 'X-GNOME-Autostart-enabled' class MyConfigParser(configparser.ConfigParser): def __inin__(self, defaults=None): configparser.ConfigParser.__init__(self, defaults=None) def optionxform(self, optionstr): return optionstr class Desktop_Autostart_Manage(): def __init__(self): self.dic = {} def function(self, filename): #config = ConfigParser.ConfigParser() config = MyConfigParser() config.read(filename) #flag = '' current_desktop_env = self.get_desktop_env() all_sections = config.sections() if SECTION in all_sections: all_options = config.options(SECTION) #pprint(all_options) if OPTION_H in all_options and config.getboolean(SECTION, OPTION_H): self.dic.setdefault(OPTION_H, []).append(filename) #else: #temp_h = '-' + OPTION_H #self.dic.setdefault(temp_h, []).append(filename) else: if OPTION_N in all_options and config.getboolean(SECTION, OPTION_N): self.dic.setdefault(OPTION_N, []).append(filename) else: #OPTION_O in all_options or OPTION_NOT in all_options or OPTION_X in all_options: if (OPTION_O in all_options and current_desktop_env not in config.get(SECTION, OPTION_O)) or (OPTION_NOT in all_options and current_desktop_env in config.get(SECTION, OPTION_NOT)): self.dic.setdefault('*showin', []).append(filename) elif OPTION_X in all_options and not config.getboolean(SECTION, OPTION_X): self.dic.setdefault('notautostart', []).append(filename) else: self.dic.setdefault('autostart', []).append(filename) #return flag def get_desktop_env(self): desktop_name = os.getenv('XDG_CURRENT_DESKTOP') if desktop_name is None: desktop_name = os.getenv('XDG_SESSION_DESKTOP') return desktop_name def _walk_dir(self, sdir): scan_files = [] for root, dirs, files in os.walk(sdir): for name in files: absolute_path = os.path.join(root, name) if absolute_path.endswith('desktop'): scan_files.append(absolute_path) return scan_files def get_autostart_dirs(self): dirs = [] dirs_home = '' dirs_dirs = '' dirs_home = os.getenv('XDG_CONFIG_HOME') #pprint(dirs_dirs) if dirs_home: temp1 = [j for j in dirs_home.split(":") if os.path.exists(j)] dirs.extend(temp1) dirs_dirs = os.getenv('XDG_CONFIG_DIRS') #pprint(dirs_dirs) if dirs_dirs: temp2 = [i for i in dirs_dirs.split(":") if os.path.exists(i)] dirs.extend(temp2) return dirs def check_dic(self, filename): name = filename.split("/")[-1] if name in [s.split("/")[-1] for s in self.dic.get(OPTION_H, ['']) if s]: return True else: return False def init_dic(self): dirs = self.get_autostart_dirs() for one in dirs: x = self._walk_dir(one) for value in x: if self.check_dic(value): continue self.function(value) #pprint(self.dic) def function_home(self, filename): #config = ConfigParser.ConfigParser() config = MyConfigParser() config.read(filename) current_desktop_env = self.get_desktop_env() all_sections = config.sections() if SECTION in all_sections: flag = '' all_options = config.options(SECTION) if OPTION_H in all_options and config.getboolean(SECTION, OPTION_H): flag = OPTION_H else: if OPTION_N in all_options and config.getboolean(SECTION, OPTION_N): flag = OPTION_N else: if (OPTION_O in all_options and current_desktop_env not in config.get(SECTION, OPTION_O)) or (OPTION_NOT in all_options and current_desktop_env in config.get(SECTION, OPTION_NOT)): flag = '*showin' elif OPTION_X in all_options and not config.getboolean(SECTION, OPTION_X): flag = 'notautostart' else: flag = 'autostart' return flag def get_final_status(self): self.init_dic() autostart_home_dir = os.path.expanduser('~/.config/autostart/') if os.path.exists(autostart_home_dir): home_desktop_files = self._walk_dir(autostart_home_dir) else: home_desktop_files = [] if home_desktop_files: for single in home_desktop_files: status = self.function_home(single) #pprint(status) if status == OPTION_H or status == OPTION_N: autostart_1_list = self.dic.get('autostart', []) if autostart_1_list: new_autostart_list = [d for d in autostart_1_list if not d.count(single.split("/")[-1])] self.dic['autostart'] = new_autostart_list notautostart_1_list = self.dic.get('notautostart', []) if notautostart_1_list: #backup_list = copy.deepcopy(notautostart_list) new_notautostart_list = [x for x in notautostart_1_list if not x.count(single.split("/")[-1])] self.dic['notautostart'] = new_notautostart_list self.dic.setdefault(OPTION_H, []).append(single) if status == 'autostart': autostart_2_list = self.dic.get('autostart', []) if autostart_2_list: new_autostart_2_list = [d for d in autostart_2_list if not d.count(single.split("/")[-1])] self.dic['autostart'] = new_autostart_2_list notautostart_2_list = self.dic.get('notautostart', []) if notautostart_2_list: #backup_list = copy.deepcopy(notautostart_list) new_notautostart_2_list = [x for x in notautostart_2_list if not x.count(single.split("/")[-1])] self.dic['notautostart'] = new_notautostart_2_list self.dic.setdefault('autostart', []).append(single) if status == 'notautostart': autostart_3_list = self.dic.get('autostart', []) if autostart_3_list: new_autostart_3_list = [d for d in autostart_3_list if not d.count(single.split("/")[-1])] self.dic['autostart'] = new_autostart_3_list notautostart_3_list = self.dic.get('notautostart', []) if notautostart_3_list: #backup_list = copy.deepcopy(notautostart_list) new_notautostart_3_list = [x for x in notautostart_3_list if not x.count(single.split("/")[-1])] self.dic['notautostart'] = new_notautostart_3_list self.dic.setdefault('notautostart', []).append(single) else: pass #pprint(self.dic) def change_single_status(self, filename): #dirs = self.get_autostart_dirs() status = '' new_status = '' hdir = os.path.expanduser('~/.config/autostart/') mdir = '/usr/share/upstart/xdg/autostart/' ldir = '/etc/xdg/autostart/' hfilename = hdir + filename mfilename = mdir + filename lfilename = ldir + filename if os.path.exists(mfilename): #pprint(mfilename) status = self.function_home(mfilename) #pprint(status) if os.path.exists(lfilename): if not status: status = self.function_home(lfilename) else: pass #pprint(status) if os.path.exists(hfilename): new_status = self.function_home(hfilename) #pprint(new_status) if status == new_status: #change if new_status == 'autostart': #pprint("change false") self.change_option_x(hfilename, 'false') elif new_status == 'notautostart': #pprint("change true") self.change_option_x(hfilename, 'true') else: #remove #pprint("remove") os.remove(hfilename) else: #touch if not os.path.exists(hdir): os.makedirs(hdir) #pprint("copy") shutil.copy(lfilename, hfilename) if status == 'autostart': #pprint("change false") self.change_option_x(hfilename, 'false') elif status == 'notautostart': self.change_option_x(hfilename, 'true') def change_option_x(self, name, value): #cf = ConfigParser.ConfigParser() cf = MyConfigParser() cf.read(name) s = cf.sections() o = cf.options(SECTION) if SECTION in s: #if OPTION_X in o: #if cf.getboolean(SECTION, OPTION_X): #cf.set(SECTION, OPTION_X, 'false') #else: #cf.set(SECTION, OPTION_X, 'true') #else: cf.set(SECTION, OPTION_X, value) cf.write(open(name, "w")) def get_desktop_info(self, filepath, locale_language): cf = MyConfigParser() cf.read(filepath) info = [] iconpath1 = '/usr/share/icons/hicolor/24x24/apps/' iconpath2 = '/usr/share/pixmaps/' s = cf.sections() o = cf.options(SECTION) info.append('Path:' + filepath) # if SECTION in s: if locale_language == "zh_CN": if 'Name[zh_CN]' in o: info.append('Name:' + cf.get(SECTION, 'Name[zh_CN]')) else: info.append('Name:' + cf.get(SECTION, 'Name')) if 'Comment[zh_CN]' in o: info.append('Comment:' + cf.get(SECTION, 'Comment[zh_CN]')) elif 'Comment' in o: info.append('Comment:' + cf.get(SECTION, 'Comment')) else: info.append('Comment:') else: info.append('Name:' + cf.get(SECTION, 'Name')) if 'Comment' in o: info.append('Comment:' + cf.get(SECTION, 'Comment')) else: info.append('Comment:') if 'Icon' in o: tempicon = cf.get(SECTION, 'Icon') if not tempicon.endswith('.png') and not tempicon.endswith('.jpg'): tempicon = tempicon + '.png' if os.path.exists(iconpath2 + tempicon): info.append('Icon:' + iconpath2 + tempicon) elif os.path.exists(iconpath1 + tempicon): info.append('Icon:' + iconpath1 + tempicon) else: info.append('Icon:/usr/share/pixmaps/app-autostart-default.png') else: info.append('Icon:/usr/share/pixmaps/app-autostart-default.png') return info def interface_get_status(fobj): locale_language = locale.getdefaultlocale()[0] try: obj = Desktop_Autostart_Manage() obj.get_final_status() up = obj.dic.get("autostart", []) if up: for upvalue in up: up_list = obj.get_desktop_info(upvalue, locale_language) up_list.append('Status:' + 'true') fobj.autostartmanage_data_signal(up_list) down = obj.dic.get("notautostart", []) if down: for downvalue in down: down_list = obj.get_desktop_info(downvalue, locale_language) down_list.append('Status:' + 'false') fobj.autostartmanage_data_signal(down_list) except Exception as e: fobj.autostartmanage_error_signal(str(e)) else: fobj.autostartmanage_status_signal("complete") def interface_get_single_status(fobj, path): obj = Desktop_Autostart_Manage() status = obj.function_home(path) if status == "autostart": return True elif status == "notautostart": return False else: return False def interface_change_status(fobj, filename): try: obj = Desktop_Autostart_Manage() obj.change_single_status(filename) except Exception as e: fobj.autostartmanage_error_signal(str(e)) # else: # fobj.autostartmanage_status_signal("complete") if __name__ == "__main__": obj = Desktop_Autostart_Manage() #obj.main() #obj.function_home('/home/ice/.config/autostart/ubuntu-kylin-software-center-autostart.desktop') #obj.get_final_status() #obj.change_single_status('ubuntu-kylin-software-center-autostart.desktop') #interface_get_status() #interface_change_status() youker-assistant/backends/kylin-assistant-daemon/src/autostartmanage/__init__.py0000664000175000017500000000002713260315532027273 0ustar fengfeng#!/usr/bin/env python3 youker-assistant/backends/kylin-assistant-daemon/src/start_sessiondbus.py0000775000175000017500000000325413260317316026125 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2007-2011 Tualatrix Chou # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os, sys import dbus import signal import dbus.mainloop.glib from gi.repository import GObject from single import SingleInstance #import gobject ## fixs bug embedded null byte on 1804 import locale locale.setlocale(locale.LC_ALL, 'C.UTF-8') if __name__ == '__main__': myapp = SingleInstance("/tmp/kylin-assistant-sessiondbus-%d.pid" % os.getuid()) if myapp.is_already_running(): print("Another instance of this sessiondbus is already running") sys.exit("Another instance of this sessiondbus is already running") from sessiondbus.daemon import SessionDaemon dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) GObject.threads_init() mainloop = GObject.MainLoop() #gobject.threads_init() #mainloop = gobject.MainLoop() signal.signal(signal.SIGINT, lambda : mainloop.quit()) SessionDaemon(mainloop) mainloop.run() youker-assistant/backends/kylin-assistant-daemon/src/camera/0000775000175000017500000000000013260315532023214 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/camera/capture.py0000664000175000017500000000570213260315532025235 0ustar fengfeng#!/usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # Author: Kobe Lee # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE #sudo apt-get install python-pygame import os, sys import time import pygame import pygame.camera from pygame.locals import * import threading def get_local_format_time(): ''' year-month-day hour:minute:second 2014-05-07 13:51:30 ''' local_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) return local_date #class Capture(object): class Capture(threading.Thread): def __init__(self): threading.Thread.__init__(self) pygame.init() pygame.camera.init() def judge_camera(self): clist = pygame.camera.list_cameras()#['/dev/video0'] if not clist: return False # raise ValueError("Sorry, no cameras detected.") else: return True def call_camera(self): threading.Thread(target=self.call_camera_real, name='Capture').start() def call_camera_real(self): self.size = (640,480) self.clist = pygame.camera.list_cameras()#['/dev/video0'] self.display = pygame.display.set_mode(self.size, 0) self.snapshot = pygame.surface.Surface(self.size, 0, self.display) self.cam = pygame.camera.Camera(self.clist[0], self.size,"RGB") self.cam.start() going = True timevalue = "00-00-00" while going: events = pygame.event.get() for e in events: if e.type == QUIT or (e.type == KEYDOWN and e.key == K_ESCAPE): self.cam.stop() pic_name = get_local_format_time() + '.png' print(pic_name) going = False if self.cam.query_image(): self.snapshot = self.cam.get_image(self.snapshot) self.display.blit(self.snapshot, (0,0)) pygame.display.flip() pic_path = os.path.expanduser('~') + '/' + pic_name #pic_path = os.path.join('/home/trusty', pic_name) #os.path.expanduser('~') #pic_name = '/home/trusty/' + timevalue + '.png' pygame.image.save(self.snapshot, pic_path) pygame.quit() #exit(0) #if __name__ == '__main__': # mycam=Capture() # if mycam.judge_camera(): # mycam.call_camera() youker-assistant/backends/kylin-assistant-daemon/src/camera/__init__.py0000664000175000017500000000002313260315532025320 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/policykit/0000775000175000017500000000000013260315532023773 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/policykit/dbusproxy.py0000664000175000017500000000456513260315532026416 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2007-2011 Tualatrix Chou # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import dbus import dbus.service import logging log = logging.getLogger("DbusProxy") INTERFACE = 'com.kylin.assistant.systemdaemon' UKPATH = '/com/kylin/assistant/systemdaemon' SHOWED = False def show_message(*args): from .dialogs import ErrorDialog title = 'Daemon start failed' message = ('Kylin Assisant systemdaemon didn\'t start correctly.\n' 'If you want to help developers debugging, try to run "sudo /usr/lib/python2.7/dist-packages/kylin-assistant-daemon/src/start_systemdbus.py" in a terminal.') ErrorDialog(title=title, message=message).launch() def nothing(*args): return None class DbusProxy: try: __system_bus = dbus.SystemBus() __object = __system_bus.get_object(INTERFACE, UKPATH) except Exception as e: __object = None def __getattr__(self, name): global SHOWED try: return self.__object.get_dbus_method(name, dbus_interface=self.INTERFACE) except Exception as e: #log.error(e) if not SHOWED: SHOWED = True return show_message else: return nothing def get_object(self): return self.__object class AccessDeniedException(dbus.DBusException): '''This exception is raised when some operation is not permitted.''' _dbus_error_name = 'com.kylin.assistant.systemdaemon.AccessDeniedException' def init_dbus(dbus_iface=INTERFACE, dbus_path=UKPATH): '''init dbus''' proxy = DbusProxy() return proxy if __name__ == '__main__': print(init_dbus()) youker-assistant/backends/kylin-assistant-daemon/src/policykit/dialogs.py0000664000175000017500000000457713260315532026004 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2007-2011 Tualatrix Chou # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import _thread from gi.repository import GObject, Gtk, Gdk class BaseDialog(Gtk.MessageDialog): def __init__(self, **kwargs): title = kwargs.pop('title', '') message = kwargs.pop('message', '') GObject.GObject.__init__(self, **kwargs) if title: self.set_title(title) if message: self.set_content(message) def set_title(self, title): self.set_markup('%s' % title) def set_content(self, message): if self.get_property('text'): self.format_secondary_markup(message) else: self.set_markup(message) def launch(self): self.run() self.destroy() def add_option_button(self, button): '''Add an option button to the left. It will not grab the default response.''' vbox = self.get_content_area() hbuttonbox = vbox.get_children()[-1] hbox = Gtk.HBox(spacing=12) vbox.pack_start(hbox, False, False, 0) vbox.remove(hbuttonbox) new_hbuttonbox = Gtk.HButtonBox() new_hbuttonbox.set_layout(Gtk.ButtonBoxStyle.START) new_hbuttonbox.pack_start(button, True, True, 0) hbox.pack_start(new_hbuttonbox, True, True, 0) hbox.pack_start(hbuttonbox, True, True, 0) hbuttonbox.get_children()[-1].grab_focus() vbox.show_all() class ErrorDialog(BaseDialog): def __init__(self, title='', message='', parent=None, type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK): BaseDialog.__init__(self, title=title, message=message, parent=parent, message_type=type, buttons=buttons) youker-assistant/backends/kylin-assistant-daemon/src/policykit/__init__.py0000664000175000017500000000010313260315532026076 0ustar fengfengKYLIN_ASSISTANT_ACTION = 'com.kylin.assistant.systemdaemon.action' youker-assistant/backends/kylin-assistant-daemon/src/sessiondbus/0000775000175000017500000000000013263553572024340 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sessiondbus/daemon.py0000664000175000017500000030330113263553572026155 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import sys import os import glob import fcntl import shutil import logging import tempfile import subprocess import re from subprocess import PIPE import apt import apt_pkg import dbus import dbus.service import dbus.mainloop.glib import time import threading import platform import cleaner from autostartmanage import autostartmanage #import pywapi import urllib.request, urllib.error, urllib.parse, urllib.request, urllib.parse, urllib.error from urllib.parse import urlencode from xml.dom.minidom import parseString import re import json import locale import aptsources.sourceslist import datetime HOME = os.path.expandvars('$HOME') #import mechanize #import cookielib #import random #from BeautifulSoup import BeautifulSoup from beautify.desktop import Desktop from beautify.unity import Unity from beautify.theme import Theme from beautify.system import System from beautify.sound import Sound from beautify.filemanager import FileManager #from beautify.cloudconfig import CloudConfig from sysinfo import Sysinfo #from camera.capture import Capture #from weather.weatherinfo import WeatherInfo #from weather.yahoo import YahooWeather from .common import * #from unzip import unzip_resource #from piston_mini_client import APIError import httplib2 #from weather.piston import WeatherPistonAPI #MySever = ("http://service.ubuntukylin.com:8001/weather/api/1.0/") #WeatherPistonAPI.default_service_root = MySever from .piston_remoter import PingBackPistonAPI #PingBackSever = ("http://servicPingBackPistonAPIe.ubuntukylin.com:8001/youker-assistant/") #PingBackPistonAPI.default_service_root = PingBackSever PINGBACK_SERVER = "http://service.ubuntukylin.com:8001/youker-assistant/" #from piston_remoter import ServerPingBackAPI #WEATHER_SERVER = "http://service.ubuntukylin.com:8001/weather/" #from appcollections.monitorball.monitor_ball import MonitorBall #from sso.ubuntusso import get_ubuntu_sso_backend log = logging.getLogger('SessionDaemon') #from slider.wizard import Wizard INTERFACE = "com.kylin.assistant.sessiondaemon" UKPATH = "/com/kylin/assistant/sessiondaemon" POWER_PATH = "/sys/class/power_supply" BATTERY_PATH = "/sys/class/power_supply/BAT0" BAT_FILE = "/sys/class/power_supply/BAT0/uevent" from gi.repository import Gio as gio from .common import (BOOL_TYPE, INT_TYPE, DOUBLE_TYPE, STRING_TYPE) #Depends:gir1.2-gconf-2.0 #from gi.repository import GConf #import gconf #TOPKEY = "/org/mate/panel/toplevels/top/size" #BOTTOMKEY = "/org/mate/panel/toplevels/bottom/size" class SessionDaemon(dbus.service.Object): def __init__ (self, mainloop): #self.wizardconf = Wizard() # self.ip_addr = None self.distrowatch = [] self.ubuntukylin_dict = dict() # self.cloudconf = CloudConfig(self) self.sysconf = Sysinfo() self.desktopconf = Desktop() self.unityconf = Unity() self.themeconf = Theme() self.systemconf = System(self) self.soundconf = Sound() # self.ballconf = MonitorBall() self.fileconf = FileManager() # self.yahooconf = YahooWeather(self) # self.server = WeatherPistonAPI(service_root=MySever) self.premoter = PingBackPistonAPI(service_root=PINGBACK_SERVER) # self.weatherping = ServerPingBackAPI(service_root=WEATHER_SERVER) # self.daemonsame = cleaner.SearchTheSame() # self.daemonlarge = cleaner.ManageTheLarge() # self.daemonunneed = cleaner.CleanTheUnneed() # self.daemonoldkernel = cleaner.CleanTheOldkernel() # self.daemoncache = cleaner.CleanTheCache() # self.init_mechanize() # # sso - Robert # self.sso = get_ubuntu_sso_backend() # self.sso.connect("whoami", self.slot_whoami_done) # self.sso.connect("logout", self.slot_logout_successful) # self.sso.connect("fail",self.slot_login_fail) self.token = "" self.user = "" self.display_name = "" self.preferred_email = "" self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') # gtk theme if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": self.interface_settings = gio.Settings.new("org.mate.interface") else: self.interface_settings = gio.Settings.new("org.gnome.desktop.interface") self.interface_settings.connect("changed::gtk-theme", self.gio_settings_monitor, STRING_TYPE) # icon if self.desktop == "mate" or self.desktop == "MATE": # self.interface_settings = gio.Settings.new("org.mate.interface") self.interface_settings.connect("changed::icon-theme", self.gio_settings_monitor, STRING_TYPE) self.background_settings = gio.Settings.new("org.mate.background") self.background_settings.connect("changed::show-desktop-icons", self.gio_settings_monitor, BOOL_TYPE) self.desktop_settings = gio.Settings.new("org.mate.caja.desktop") for key in ("computer-icon-visible", "home-icon-visible", "network-icon-visible", "trash-icon-visible", "volumes-visible"): self.desktop_settings.connect("changed::%s" % key, self.gio_settings_monitor, BOOL_TYPE) elif self.desktop == "ukui" or self.desktop == "UKUI": # self.interface_settings = gio.Settings.new("org.mate.interface") self.interface_settings.connect("changed::icon-theme", self.gio_settings_monitor, STRING_TYPE) self.background_settings = gio.Settings.new("org.mate.background") self.background_settings.connect("changed::show-desktop-icons", self.gio_settings_monitor, BOOL_TYPE) self.desktop_settings = gio.Settings.new("org.ukui.peony.desktop") for key in ("computer-icon-visible", "home-icon-visible", "network-icon-visible", "trash-icon-visible", "volumes-visible"): self.desktop_settings.connect("changed::%s" % key, self.gio_settings_monitor, BOOL_TYPE) else: # self.interface_settings = gio.Settings.new("org.gnome.desktop.interface") self.interface_settings.connect("changed::icon-theme", self.gio_settings_monitor, STRING_TYPE) self.background_settings = gio.Settings.new("org.gnome.desktop.background") self.background_settings.connect("changed::show-desktop-icons", self.gio_settings_monitor, BOOL_TYPE) self.desktop_settings = gio.Settings.new("org.gnome.nautilus.desktop") for key in ("home-icon-visible", "network-icon-visible", "trash-icon-visible", "volumes-visible"): self.desktop_settings.connect("changed::%s" % key, self.gio_settings_monitor, BOOL_TYPE) # mouse if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": self.mouse_settings = gio.Settings.new("org.mate.peripherals-mouse") self.mouse_settings.connect("changed::cursor-theme", self.gio_settings_monitor, STRING_TYPE) self.mouse_settings.connect("changed::cursor-size", self.gio_settings_monitor, INT_TYPE) else: self.interface_settings.connect("changed::cursor-theme", self.gio_settings_monitor, STRING_TYPE) self.interface_settings.connect("changed::cursor-size", self.gio_settings_monitor, INT_TYPE) # voice if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": self.sound_settings = gio.Settings.new("org.mate.sound") else: self.sound_settings = gio.Settings.new("org.gnome.desktop.sound") self.sound_settings.connect("changed::theme-name", self.gio_settings_monitor, STRING_TYPE) self.sound_settings.connect("changed::event-sounds", self.gio_settings_monitor, BOOL_TYPE) self.sound_settings.connect("changed::input-feedback-sounds", self.gio_settings_monitor, BOOL_TYPE) if self.desktop == "Unity": #unity launcher position self.unity_launcher_position = gio.Settings.new("com.canonical.Unity.Launcher") self.unity_launcher_position.connect("changed::launcher-position", self.gio_settings_monitor, STRING_TYPE) #unity launcher self.unity_settings = gio.Settings("org.compiz.unityshell", "/org/compiz/profiles/unity/plugins/unityshell/") self.unity_settings.connect("changed::icon-size", self.gio_settings_monitor, INT_TYPE) self.unity_settings.connect("changed::launcher-hide-mode", self.gio_settings_monitor, INT_TYPE) self.unity_settings.connect("changed::launcher-opacity", self.gio_settings_monitor, DOUBLE_TYPE) self.unity_settings.connect("changed::backlight-mode", self.gio_settings_monitor, INT_TYPE) #panel self.datetime_settings = gio.Settings.new("com.canonical.indicator.datetime") self.datetime_settings.connect("changed::show-seconds", self.gio_settings_monitor, BOOL_TYPE) self.datetime_settings.connect("changed::show-day", self.gio_settings_monitor, BOOL_TYPE) self.datetime_settings.connect("changed::show-date", self.gio_settings_monitor, BOOL_TYPE) #power self.power_settings = gio.Settings.new("com.canonical.indicator.power") self.power_settings.connect("changed::icon-policy", self.gio_settings_monitor, STRING_TYPE) self.power_settings.connect("changed::show-time", self.gio_settings_monitor, BOOL_TYPE) self.power_settings.connect("changed::show-percentage", self.gio_settings_monitor, BOOL_TYPE) if self.desktop == "mate" or self.desktop == "MATE": self.toplevels_settings = gio.Settings("org.mate.panel.toplevel", "/org/mate/panel/toplevels/top/") self.toplevels_settings.connect("changed::size", self.gio_settings_monitor_diff, INT_TYPE, "top") self.toplevels_settings.connect("changed::auto-hide", self.gio_settings_monitor_diff, BOOL_TYPE, "top") self.bottomlevels_settings = gio.Settings("org.mate.panel.toplevel", "/org/mate/panel/toplevels/bottom/") self.bottomlevels_settings.connect("changed::size", self.gio_settings_monitor_diff, INT_TYPE, "bottom") self.bottomlevels_settings.connect("changed::auto-hide", self.gio_settings_monitor_diff, BOOL_TYPE, "bottom") elif self.desktop == "ukui" or self.desktop == "UKUI": self.toplevels_settings = gio.Settings("org.ukui.panel.toplevel", "/org/ukui/panel/toplevels/top/") self.toplevels_settings.connect("changed::size", self.gio_settings_monitor_diff, INT_TYPE, "top") self.toplevels_settings.connect("changed::auto-hide", self.gio_settings_monitor_diff, BOOL_TYPE, "top") self.bottomlevels_settings = gio.Settings("org.ukui.panel.toplevel", "/org/ukui/panel/toplevels/bottom/") self.bottomlevels_settings.connect("changed::size", self.gio_settings_monitor_diff, INT_TYPE, "bottom") self.bottomlevels_settings.connect("changed::auto-hide", self.gio_settings_monitor_diff, BOOL_TYPE, "bottom") # kobe: test GConf notify ## kobekey = "/apps/metacity/general/titlebar_font" ## aa = '/'.join(kobekey.split('/')[0: -1])#/apps/metacity/general # self.client = GConf.Client.get_default() ## self.client.add_dir('/'.join(TOPKEY.split('/')[0: -1]), GConf.ClientPreloadType.PRELOAD_NONE) # self.client.add_dir("/org/mate/panel/toplevels/top", GConf.ClientPreloadType.PRELOAD_NONE) # self.client.notify_add(TOPKEY, self.gio_settings_monitor_diff)#, "top" ## self.client = gconf.client_get_default() ## self.client.add_dir('/'.join(TOPKEY.split('/')[0: -1]), gconf.CLIENT_PRELOAD_NONE) ## self.client.notify_add(TOPKEY, self.gio_settings_monitor_diff, "top") # gc = GConf.Client.get_default() # print gc.get_int('/org/mate/panel/toplevels/top/size') # gc.set_int('/org/mate/panel/toplevels/top/size', 1) # print gc.get_int('/org/mate/panel/toplevels/top/size') # menubar if self.desktop == "mate" or self.desktop == "MATE": self.menubar_settings = gio.Settings.new("org.mate.panel.menubar") self.menubar_settings.connect("changed::show-applications", self.gio_settings_monitor, BOOL_TYPE) self.menubar_settings.connect("changed::show-desktop", self.gio_settings_monitor, BOOL_TYPE) self.menubar_settings.connect("changed::show-icon", self.gio_settings_monitor, BOOL_TYPE) self.menubar_settings.connect("changed::show-places", self.gio_settings_monitor, BOOL_TYPE) elif self.desktop == "ukui" or self.desktop == "UKUI": self.menubar_settings = gio.Settings.new("org.ukui.panel.menubar") self.menubar_settings.connect("changed::show-applications", self.gio_settings_monitor, BOOL_TYPE) self.menubar_settings.connect("changed::show-desktop", self.gio_settings_monitor, BOOL_TYPE) self.menubar_settings.connect("changed::show-icon", self.gio_settings_monitor, BOOL_TYPE) self.menubar_settings.connect("changed::show-places", self.gio_settings_monitor, BOOL_TYPE) # window self.interface_settings.connect("changed::menus-have-icons", self.gio_settings_monitor, BOOL_TYPE) if self.desktop == "Unity": self.gwd_settings = gio.Settings.new("org.compiz.gwd") self.gwd_settings.connect("changed::mouse-wheel-action", self.gio_settings_monitor, STRING_TYPE) if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": self.titlebar_settings = gio.Settings.new("org.gnome.desktop.wm.preferences") else: self.titlebar_settings = gio.Settings.new("org.gnome.desktop.wm.preferences") self.titlebar_settings.connect("changed::button-layout", self.gio_settings_monitor, STRING_TYPE) self.titlebar_settings.connect("changed::action-double-click-titlebar", self.gio_settings_monitor, STRING_TYPE) self.titlebar_settings.connect("changed::action-middle-click-titlebar", self.gio_settings_monitor, STRING_TYPE) self.titlebar_settings.connect("changed::action-right-click-titlebar", self.gio_settings_monitor, STRING_TYPE) #font self.interface_settings.connect("changed::font-name", self.gio_settings_monitor, STRING_TYPE) self.desktop_settings.connect("changed::font", self.gio_settings_monitor, STRING_TYPE) self.interface_settings.connect("changed::monospace-font-name", self.gio_settings_monitor, STRING_TYPE) self.interface_settings.connect("changed::document-font-name", self.gio_settings_monitor, STRING_TYPE) self.titlebar_settings.connect("changed::titlebar-font", self.gio_settings_monitor, STRING_TYPE) self.interface_settings.connect("changed::text-scaling-factor", self.gio_settings_monitor, DOUBLE_TYPE) if self.desktop == "mate" or self.desktop == "MATE": self.font_settings = gio.Settings.new("org.mate.font-rendering") elif self.desktop == "ukui" or self.desktop == "UKUI": self.font_settings = gio.Settings.new("org.ukui.font-rendering") else: self.font_settings = gio.Settings.new("org.gnome.settings-daemon.plugins.xsettings") self.font_settings.connect("changed::hinting", self.gio_settings_monitor, STRING_TYPE) self.font_settings.connect("changed::antialiasing", self.gio_settings_monitor, STRING_TYPE) # touchpad if self.desktop == "mate" or self.desktop == "MATE": self.touchpad_settings = gio.Settings.new("org.mate.peripherals-touchpad") self.touchpad_settings.connect("changed::scroll-method", self.gio_settings_monitor, INT_TYPE) self.touchpad_settings.connect("changed::touchpad-enabled", self.gio_settings_monitor, BOOL_TYPE) self.touchpad_settings.connect("changed::horiz-scroll-enabled", self.gio_settings_monitor, BOOL_TYPE) elif self.desktop == "ukui" or self.desktop == "UKUI": self.touchpad_settings = gio.Settings.new("org.ukui.peripherals-touchpad") self.touchpad_settings.connect("changed::scroll-method", self.gio_settings_monitor, INT_TYPE) self.touchpad_settings.connect("changed::touchpad-enabled", self.gio_settings_monitor, BOOL_TYPE) self.touchpad_settings.connect("changed::horiz-scroll-enabled", self.gio_settings_monitor, BOOL_TYPE) else: # 20160119 if "org.gnome.settings-daemon.peripherals.touchpad" in gio.Settings.list_schemas(): self.touchpad_settings = gio.Settings.new("org.gnome.settings-daemon.peripherals.touchpad") self.touchpad_settings.connect("changed::scroll-method", self.gio_settings_monitor, STRING_TYPE) self.touchpad_settings.connect("changed::touchpad-enabled", self.gio_settings_monitor, BOOL_TYPE) self.touchpad_settings.connect("changed::horiz-scroll-enabled", self.gio_settings_monitor, BOOL_TYPE) # release_info = platform.platform() # if "15.10-wily" not in release_info: # self.touchpad_settings = gio.Settings.new("org.gnome.settings-daemon.peripherals.touchpad") # self.touchpad_settings.connect("changed::scroll-method", self.gio_settings_monitor, STRING_TYPE) # self.touchpad_settings.connect("changed::touchpad-enabled", self.gio_settings_monitor, BOOL_TYPE) # self.touchpad_settings.connect("changed::horiz-scroll-enabled", self.gio_settings_monitor, BOOL_TYPE) if self.desktop == "Unity": self.canonical_interface_settings = gio.Settings.new("com.canonical.desktop.interface") self.canonical_interface_settings.connect("changed::scrollbar-mode", self.gio_settings_monitor, STRING_TYPE) #file manager if self.desktop == "mate" or self.desktop == "MATE": self.filemanager_settings = gio.Settings.new("org.mate.caja.preferences") elif self.desktop == "ukui" or self.desktop == "UKUI": self.filemanager_settings = gio.Settings.new("org.ukui.peony.preferences") else: self.filemanager_settings = gio.Settings.new("org.gnome.nautilus.preferences") self.filemanager_settings.connect("changed::always-use-location-entry", self.gio_settings_monitor, BOOL_TYPE) if self.desktop == "mate" or self.desktop == "MATE": self.mediahanding_settings = gio.Settings.new("org.mate.media-handling") elif self.desktop == "ukui" or self.desktop == "UKUI": self.mediahanding_settings = gio.Settings.new("org.ukui.media-handling") else: self.mediahanding_settings = gio.Settings.new("org.gnome.desktop.media-handling") self.mediahanding_settings.connect("changed::automount", self.gio_settings_monitor, BOOL_TYPE) self.mediahanding_settings.connect("changed::automount-open", self.gio_settings_monitor, BOOL_TYPE) self.mediahanding_settings.connect("changed::autorun-never", self.gio_settings_monitor, BOOL_TYPE) if self.desktop == "mate" or self.desktop == "MATE": self.iconview_settings = gio.Settings.new("org.mate.caja.icon-view") elif self.desktop == "ukui" or self.desktop == "UKUI": self.iconview_settings = gio.Settings.new("org.ukui.peony.icon-view") else: self.iconview_settings = gio.Settings.new("org.gnome.nautilus.icon-view") self.iconview_settings.connect("changed::thumbnail-size", self.gio_settings_monitor, INT_TYPE) if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": self.thumbnail_settings = gio.Settings.new("org.mate.thumbnail-cache") else: self.thumbnail_settings = gio.Settings.new("org.gnome.desktop.thumbnail-cache") self.thumbnail_settings.connect("changed::maximum-age", self.gio_settings_monitor, INT_TYPE) self.thumbnail_settings.connect("changed::maximum-size", self.gio_settings_monitor, INT_TYPE) bus_name = dbus.service.BusName(INTERFACE, bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, UKPATH) self.mainloop = mainloop # def gio_settings_monitor_diff(self, client, cnxn_id, entry, params): # pass def gio_settings_monitor_diff(self, settings, key, type, diff): if diff == "top": if type == BOOL_TYPE and key == "auto-hide": value = settings.get_boolean(key) self.notify_boolean("auto-hide-top", value) elif type == INT_TYPE and key == "size": value = settings.get_int(key) self.notify_int("size-top", value) elif diff == "bottom": if type == BOOL_TYPE and key == "auto-hide": value = settings.get_boolean(key) self.notify_boolean("auto-hide-bottom", value) elif type == INT_TYPE and key == "size": value = settings.get_int(key) self.notify_int("size-bottom", value) def gio_settings_monitor(self, settings, key, type): # value = settings.get_boolean("home-icon-visible")#get_int get_string get_string if type == BOOL_TYPE: value = settings.get_boolean(key) self.notify_boolean(key, value) elif type == INT_TYPE: value = settings.get_int(key) self.notify_int(key, value) elif type == DOUBLE_TYPE: value = settings.get_double(key) self.notify_double(key, value) elif type == STRING_TYPE: value = settings.get_string(key) self.notify_string(key, value) @dbus.service.signal(INTERFACE, signature='sb') def notify_boolean(self, key, value): pass @dbus.service.signal(INTERFACE, signature='si') def notify_int(self, key, value): pass @dbus.service.signal(INTERFACE, signature='sd') def notify_double(self, key, value): pass @dbus.service.signal(INTERFACE, signature='ss') def notify_string(self, key, value): pass @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_os_release(self): return platform.platform() @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def currently_installed_version(self): apt_list = [] cache = apt.Cache() try: pkg = cache['kylin-assistant'] except KeyError as e: return [""] installed_version = pkg.installed.version # print installed_version if ":" in installed_version: info = installed_version.split(":") apt_list.append(info.at(1)) else: apt_list.append(installed_version) # print pkg.installed.version#1:2.0.3-0~704~ubuntu15.04.1 if len(pkg.versions) == 2: # print pkg.versions[0].version, pkg.versions[1].version if pkg.versions[0].version == pkg.versions[1].version: apt_list.append(pkg.versions[0].version) apt_list.append(pkg.versions[1].version) apt_list.append("0") else: tmp_installed = '' tmp_unstalled = '' if pkg.installed.version == pkg.versions[0].version: if ":" in pkg.versions[0].version: tmp_installed = pkg.versions[0].version.split(":").at(1) else: tmp_installed = pkg.versions[0].version if ":" in pkg.versions[1].version: tmp_unstalled = pkg.versions[1].version.split(":").at(1) else: tmp_unstalled = pkg.versions[1].version if tmp_installed < tmp_unstalled: apt_list.append(tmp_installed) apt_list.append(tmp_unstalled) apt_list.append("1") elif pkg.installed.version == pkg.versions[1].version: if ":" in pkg.versions[1].version: tmp_installed = pkg.versions[1].version.split(":").at(1) else: tmp_installed = pkg.versions[1].version if ":" in pkg.versions[0].version: tmp_unstalled = pkg.versions[0].version.split(":").at(1) else: tmp_unstalled = pkg.versions[0].version if tmp_installed < tmp_unstalled: apt_list.append(tmp_installed) apt_list.append(tmp_unstalled) apt_list.append("1") return apt_list @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def run_selected_app(self, pkgname): run_app(pkgname) #---------------------------------conserve energy------------------------------------ @dbus.service.method(INTERFACE, in_signature='d', out_signature='') def adjust_screen_gamma(self, gamma): cmd = "xgamma -gamma " + str(gamma) print(cmd) os.system(cmd) @dbus.service.method(INTERFACE, in_signature='', out_signature='d') def get_screen_gamma(self): # p = os.popen("xgamma") status, output = subprocess.getstatusoutput("xgamma") gamma_list = output.split(" ") gamma = gamma_list[len(gamma_list) - 1] return float(gamma) @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_idle_delay_list(self): return ['60', '120', '180', '300', '600', '1800', '3600', '0'] @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_current_idle_delay(self): return self.systemconf.get_current_idle_delay() @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_current_idle_delay(self, value): self.systemconf.set_current_idle_delay(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_lock_enabled(self): return self.systemconf.get_lock_enabled() @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_lock_enabled(self, value): self.systemconf.set_lock_enabled(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_lock_delay_list(self): return ['30', '60', '120', '180', '300', '600', '1800', '3600', '0'] @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_current_lock_delay(self): return self.systemconf.get_current_lock_delay() @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_current_lock_delay(self, value): self.systemconf.set_current_lock_delay(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_sleep_timeout_list(self): return ['300', '600', '1200', '1800', '3600', '7200', '0'] @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_critical_low(self): return self.systemconf.get_current_critical_low() @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_current_critical_low(self, value): self.systemconf.set_current_critical_low(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_lid_battery(self): return self.systemconf.get_current_lid_battery() @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_current_lid_battery(self, value): self.systemconf.set_current_lid_battery(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_lid_ac(self): return self.systemconf.get_current_lid_ac() @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_current_lid_ac(self, value): self.systemconf.set_current_lid_ac(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_current_sleep_timeout_display_battery(self): return self.systemconf.get_current_sleep_timeout_display_battery() @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_current_sleep_timeout_display_battery(self, value): self.systemconf.set_current_sleep_timeout_display_battery(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_current_sleep_timeout_display_ac(self): return self.systemconf.get_current_sleep_timeout_display_ac() @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_current_sleep_timeout_display_ac(self, value): self.systemconf.set_current_sleep_timeout_display_ac(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_current_sleep_timeout_battery(self): return self.systemconf.get_current_sleep_timeout_battery() @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_current_sleep_timeout_battery(self, value): self.systemconf.set_current_sleep_timeout_battery(value) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_current_sleep_timeout_ac(self): return self.systemconf.get_current_sleep_timeout_ac() @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_current_sleep_timeout_ac(self, value): self.systemconf.set_current_sleep_timeout_ac(value) # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def check_user(self): # try: # self.sso = get_ubuntu_sso_backend() # self.sso.connect("whoami", self.slot_whoami_done) # self.sso.connect("logout", self.slot_logout_successful) # self.sso.connect("fail",self.slot_login_fail) # # try backend login # self.sso.find_oauth_token() # except ImportError: # print('Initial ubuntu-kylin-sso-client failed, seem it is not installed.') # except Exception as e: # print('Check user failed.') # print(e) # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def slot_do_login_account(self): # try: # self.sso.set_show_register(False) # self.sso.get_oauth_token() # except ImportError: # print('Initial ubuntu-kylin-sso-client failed, seem it is not installed.') # except Exception as e: # print('User login failed.') # print(e) # user register # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def slot_do_register(self): # try: # self.sso.set_show_register(True) # self.sso.get_oauth_token() # except ImportError: # print('Initial ubuntu-kylin-sso-client failed, seem it is not installed.') # except Exception as e: # print('User register failed.') # print(e) # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def slot_do_logout(self): # try: # self.sso.clear_token() # except ImportError: # print('Initial ubuntu-kylin-sso-client failed, seem it is not installed.') # except Exception as e: # print('User logout failed.') # print(e) #update user login status def slot_whoami_done(self, sso, result): self.user = result["username"] self.display_name = result["displayname"] self.preferred_email = result["preferred_email"] print('Login success, username: %s' % self.display_name) self.youkerid_whoami_signal(self.display_name, self.preferred_email) def slot_logout_successful(self, sso): if self.token: print('User %s has been logout' % self.display_name) self.token = '' self.user = '' self.display_name = '' self.preferred_email = '' else: print('No user has been login') self.youkerid_logout_signal() def slot_login_fail(self, sso): print('Login or logout failed') self.youkerid_login_fail_signal() @dbus.service.signal(INTERFACE, signature='ss') def youkerid_whoami_signal(self, display_name, preferred_email): pass @dbus.service.signal(INTERFACE, signature='') def youkerid_logout_signal(self): pass @dbus.service.signal(INTERFACE, signature='') def youkerid_login_fail_signal(self): pass # a dbus method which open folder by kobe @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def open_folder(self, path): root_path = os.path.expanduser(path) #if not os.path.isdir(root_path): # path = os.path.dirname(path) if os.path.isdir(root_path): os.system("xdg-open '%s' &" % root_path) # def real_get_ip_address(self): # self.ip_addr = get_ip() # if self.ip_addr not in (False, None, {}, '', '[]', "['']"): # self.access_weather('ip_addr', 'kobe') # @dbus.service.signal(INTERFACE, signature='b') # def unzip_signal(self, result): # pass # @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') # def unzip_resource_uk_real(self, path): # value = unzip_resource(path) # self.unzip_signal(value) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='') # def unzip_resource_uk(self, path): # t = threading.Thread(target = self.unzip_resource_uk_real, args=(path,)) # t.start() #-----------------------------distrowatch rank----------------------------- def copy_distrowatch_default_conf(self): distrowatch_path = HOME + '/.config/ubuntukylin/kylin-assistant/distrowatch.conf' distrowatch_path_uk = HOME + '/.config/ubuntukylin' distrowatch_path_youker = HOME + '/.config/ubuntukylin/kylin-assistant' if not os.path.isdir(distrowatch_path_uk): os.makedirs(distrowatch_path_uk) if not os.path.isdir(distrowatch_path_youker): os.makedirs(distrowatch_path_youker) if not os.path.exists(distrowatch_path): if not os.path.exists(distrowatch_path): os.mknod(distrowatch_path) srcFile = '/var/lib/kylin-assistant-daemon/distrowatch.conf' if not os.path.exists(srcFile): print("error with distrowatch file") return else: open(distrowatch_path, "wb").write(open(srcFile, "rb").read()) # def init_mechanize(self): # #copy distrowatch default file # self.copy_distrowatch_default_conf() # # Browser # self.br = mechanize.Browser() # # Cookie Jar # cj = cookielib.LWPCookieJar() # self.br.set_cookiejar(cj) # # Browser options # self.br.set_handle_equiv(True) ## self.br.set_handle_gzip(True) # #self.br.set_handle_gzip(False) # self.br.set_handle_redirect(True) # self.br.set_handle_referer(True) # self.br.set_handle_robots(False) # self.br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) # index = random.randint(0, LEN_AGENT-1) # # br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Ubuntu/3.0.1-1.fc9 Firefox/3.0.1'), ('Accept-Language', 'zh-CN,zh;q=0.8,en;q=0.6')] # self.br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Ubuntu/3.0.1-1.fc9 Firefox/3.0.1')] # @dbus.service.signal(INTERFACE, signature='b') # def distrowatch_ubuntukylin_signal(self, uk_flag): # pass # @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') # def real_get_ubuntukylin_distrowatch_info(self): # self.ubuntukylin_dict.clear() # try: # r = self.br.open(ubuntukylin_distrowatch) # html = r.read() # soup = BeautifulSoup(html) # except Exception as e: # self.distrowatch_ubuntukylin_signal(False) # return # contents = soup.findAll(name="td", attrs={"class":"TablesTitle"}) # p = re.compile('<[^>]+>') ## ubuntukylin_dict = dict() # try: # result = p.sub(" ", str(contents)) # aa = result.split('\n') # # print len(aa) # for i in range(0, len(aa)): # if 'Last Update:' in aa[i]: # start_pos = str(aa[i]).find("Last Update:") # self.ubuntukylin_dict['lastupdate'] = str(aa[i])[(start_pos+13):].rstrip() # elif 'OS Type:' in aa[i] and 'Based on:' in aa[i] and 'Origin:' in aa[i]: # pos1 = str(aa[i]).find("OS Type:") # pos2 = str(aa[i]).find("Based on:") # pos3 = str(aa[i]).find("Origin:") # self.ubuntukylin_dict['ostype'] = str(aa[i])[(pos1+8):pos2].replace(' ', '') # self.ubuntukylin_dict['basedon'] = str(aa[i])[(pos2+9):pos3].replace(' ', '') # self.ubuntukylin_dict['origin'] = str(aa[i])[(pos3+7):].replace(' ', '') # elif 'Architecture:' in aa[i] and 'Desktop:' in aa[i] and 'Category:' in aa[i] and 'Status:' in aa[i] and 'Popularity:' in aa[i] and 'hits per day' in aa[i]: # pos1 = str(aa[i]).find("Architecture:") # pos2 = str(aa[i]).find("Desktop:") # pos3 = str(aa[i]).find("Category:") # pos4 = str(aa[i]).find("Status:") # pos5 = str(aa[i]).find("Popularity:") # pos6 = str(aa[i]).find("hits per day") # self.ubuntukylin_dict['architecture'] = str(aa[i])[(pos1+13):pos2].replace(' ', '') # self.ubuntukylin_dict['desktop'] = str(aa[i])[(pos2+8):pos3].replace(' ', '') # self.ubuntukylin_dict['category'] = str(aa[i])[(pos3+9):pos4].replace(' ', '') # self.ubuntukylin_dict['status'] = str(aa[i])[(pos4+7):pos5].replace(' ', '') # self.ubuntukylin_dict['popularity'] = str(aa[i])[(pos5+11):pos6].replace(' ', '') # elif i==6: # self.ubuntukylin_dict['description'] = aa[i] # except Exception, e: # print 'exception->', e # self.distrowatch_ubuntukylin_signal(True) ## return ubuntukylin_dict # @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') # def show_ubuntukylin_distrowatch_info(self): # return self.ubuntukylin_dict # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def get_ubuntukylin_distrowatch_info(self): # t = threading.Thread(target = self.real_get_ubuntukylin_distrowatch_info) # t.start() # @dbus.service.signal(INTERFACE, signature='s') # def distrowatch_all_signal(self, update_rate): # pass # def real_get_distrowatch_url(self): # self.distrowatch = [] # update_rate = 'Last 6 months' # rank_list = [] # os_list = [] # today_hit_list = [] # img_list = [] # yestoday_hit_list = [] # try: # r = self.br.open(distrowatch) # html = r.read() # soup = BeautifulSoup(html) # except Exception as e: # self.distrowatch_all_signal("") # return # p = re.compile('<[^>]+>') # spiderContents = soup.findAll(name="option", attrs={"selected":"selected"}) # if len(spiderContents) > 1: # try: # result = p.sub("", str(spiderContents[1])) # update_rate = result # except Exception, e: # pass # else: # try: # result = p.sub("", str(spiderContents[0])) # update_rate = result # except Exception, e: # pass # spiderContents_rank = soup.findAll(name="th", attrs={"class":"phr1"}) # spiderContents_os = soup.findAll(name="td", attrs={"class":"phr2"}) # spiderContents_hit = soup.findAll(name="td", attrs={"class":"phr3"}) # for i in range(0, len(spiderContents_rank)): # # print spiderContents_rank[i]#96 # try: # result = p.sub("", str(spiderContents_rank[i])) # rank_list.append(result) # # bb = spiderContents[i].findAll('img', id = 'src') # # print pa.sub("", str(spiderContents[i])) # # print bb#[=] # except Exception, e: # rank_list.append('') # try: # result = p.sub("", str(spiderContents_os[i])) # os_list.append(result) # except Exception, e: # os_list[i].append('') # try: # result = p.sub("", str(spiderContents_hit[i])) # today_hit_list.append(result) # except Exception, e: # today_hit_list.append('') # #156= # start_pos = str(spiderContents_hit[i]).find("src=") # end_pos = str(spiderContents_hit[i]).find("alt=") # img_path = '' # img_path = str(spiderContents_hit[i])[start_pos+5:end_pos] # img_path = img_path.replace('\"', '').replace(' ', '') # yestoday_hit_last_pos = str(spiderContents_hit[i]).find('Yesterday:',start_pos) # yestoday_hit_str = str(spiderContents_hit[i])[yestoday_hit_last_pos+10:] # yestoday_hit_num = 0 # yestoday_hit_num = int(filter(str.isdigit, yestoday_hit_str)) # img_list.append(img_path) # yestoday_hit_list.append(str(yestoday_hit_num)) # for i in range(0, len(rank_list)): # line = "%s+%s+%s+%s+%s+%s" % (rank_list[i], os_list[i], os_list[i].replace(' ', '').replace('-', '').lower(), today_hit_list[i], img_list[i], yestoday_hit_list[i]) # self.distrowatch.append(line) ## print self.distrowatch # self.distrowatch_all_signal(update_rate) # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def get_distrowatch_url(self): # t = threading.Thread(target = self.real_get_distrowatch_url) # t.start() # @dbus.service.method(INTERFACE, in_signature='', out_signature='as') # def get_distrowatch_info(self): # return self.distrowatch # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def get_ip_address(self): # t = threading.Thread(target = self.real_get_ip_address) # t.start() # @dbus.service.method(INTERFACE, in_signature='', out_signature='s') # def show_ip_address(self): # return self.ip_addr # True: has camera, False: no camera # @dbus.service.method(INTERFACE, in_signature='', out_signature='b') # def judge_camera(self): # if not hasattr(self, 'capturemode'): # self.capturemode = Capture() # return self.capturemode.judge_camera() # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def call_camera(self): # self.capturemode.call_camera() @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def judge_power_is_exists(self): if os.path.isdir(POWER_PATH): if len(os.listdir(POWER_PATH)) == 0: return False else: if os.path.isdir(BATTERY_PATH): return True else: return False else: return False @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def read_battery_info(self): bat_dict = {} if not os.path.exists(BAT_FILE): bat_dict['error'] = 'unknown' else: try: fp = open(BAT_FILE) allLines = fp.readlines() fp.close() for eachline in allLines: eachline = eachline.strip('\n') if '=' in eachline: tmp_list = eachline.split('=') bat_dict[tmp_list[0]] = tmp_list[1] except Exception as e: bat_dict['error'] = 'unknown' return bat_dict # a dbus method which download and use kuaipan cloud conf by kobe # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def download_kysoft_cloud_conf(self): # self.cloudconf.download_kysoft_cloud_conf() # a dbus method which upload conf to kuaipan cloud by kobe # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def upload_kysoft_cloud_conf(self): # self.cloudconf.upload_kysoft_cloud_conf() # a dbus signal which download and use kuaipan cloud conf by kobe @dbus.service.signal(INTERFACE, signature='s') def download_cloud_conf_signal(self, download): pass # a dbus signal which upload conf to kuaipan cloud by kobe @dbus.service.signal(INTERFACE, signature='s') def upload_cloud_conf_signal(self, upload): pass # a dbus signal which tell widget to change titlebar postion by kobe @dbus.service.signal(INTERFACE, signature='s') def change_titlebar_position(self, position): pass #@dbus.service.method(INTERFACE, in_signature='', out_signature='') #def display_slide_show(self): # self.wizardconf.show_slider() @dbus.service.method(INTERFACE, in_signature='as', out_signature='') def onekey_scan_function(self, mode_list): onekeyfunc_obj = cleaner.OneKeyClean() # change by kobe t = threading.Thread(target = onekeyfunc_obj.get_onekey_crufts, args = (self, mode_list, )) t.start() #onekeyfunc_obj.get_onekey_crufts(self, mode_list) #self.scan_complete_msg('onekey') # @dbus.service.method(INTERFACE, in_signature='as', out_signature='') # def mainpage_scan_function(self): # mainfunc_obj = cleaner.MainPage() # t = threading.Thread(target = mainfunc_obj.get_cache, args=(self,)) # target_tid = mainfunc_obj.get_threadid(t) # self.trans_thread_infor(target_tid) # t.join() # self.scan_complete_msg('onekey') # @dbus.service.method(INTERFACE, in_signature='i', out_signature='') # def cancel_mainpage_scan(self, target_tid): # mainfunc_obj = cleaner.MainPage() # mainfunc_obj.cancel_mainpage_function(target_tid, SystemExit) # @dbus.service.signal(INTERFACE, signature='as') # def get_largefile_list(self, filelist): # pass # def tell_widget_largefile_list(self, filelist): # self.get_largefile_list(filelist) # @dbus.service.signal(INTERFACE, signature='si') # def get_history_number(self, flag, num): # pass # def tell_widget_history_number(self, flag, num): # self.get_history_number(flag, num) # @dbus.service.method(INTERFACE, in_signature='s', out_signature='i') # def scan_history_records(self, flag): # historyfunc_obj = cleaner.CleanTheHistory() # crufts = historyfunc_obj.get_history_crufts(flag) # figure = None # if isinstance(crufts, list): # figure = sum([int(one.split('<2_2>')[-1]) for one in crufts]) # elif crufts in 'True': # figure = -99 # elif crufts in 'No': # figure = -1 # #return figure # self.tell_widget_history_number(flag, figure) # @dbus.service.method(INTERFACE, in_signature='', out_signature='i') # def scan_system_history(self): # daemonsystem = cleaner.CleanSystemHistory() # url = daemonsystem.get_scan_result() # #self.scan_complete_msg('system') # #return len(url) # self.tell_widget_history_number("system", len(url)) #@dbus.service.method(INTERFACE, in_signature='', out_signature='i') #def scan_dash_history(self): # daemondash = cleaner.CleanDashHistory() # num = daemondash.get_scan_result() # return num # the function of search the same file below path ### input-'path' output-['filea<2_2>filea','fileb<2_2>fileb'....] #@dbus.service.method(INTERFACE, in_signature='s', out_signature='as') #def scan_of_same(self, path): # tmp_list = self.daemonsame.get_scan_result(path) # self.scan_complete_msg('same') # return tmp_list # the function of sort the hundred files below path betown big to small ### input-'path' output-['size<2_2>biggestfile<2_2>filestyle', 'size...] #@dbus.service.method(INTERFACE, in_signature='is', out_signature='as') #def scan_of_large(self, size, path): # tmp_list = self.daemonlarge.get_scan_result(size, path) # self.scan_complete_msg('large') # return tmp_list # def real_scan_large_files(self, size, path): # filelist = self.daemonlarge.get_scan_result(size, path) # # start to send the over signal to UI # self.get_largefile_list(filelist) # @dbus.service.method(INTERFACE, in_signature='is', out_signature='') # def scan_of_large(self, size, path): # t = threading.Thread(target = self.real_scan_large_files, args=(size, path)) # t.start() # the function of clean the cookies records # @dbus.service.method(INTERFACE, in_signature='s', out_signature='') # def cookies_scan_function(self, flag): # cookiesfunc_obj = cleaner.CleanTheCookies(self) # t = threading.Thread(target = cookiesfunc_obj.get_cookie_crufts, args = (flag, self)) # t.start() # #cookiesfunc_obj.get_cookie_crufts(flag, self) # @dbus.service.method(INTERFACE, in_signature='as', out_signature='') # def package_scan_function(self, mode_list): # packagefunc_obj = cleaner.CleanTheSpare() # t = threading.Thread(target = packagefunc_obj.get_all_package_crufts, args = (mode_list, self)) # t.start() # @dbus.service.method(INTERFACE, in_signature='ass', out_signature='') # def cache_scan_function(self, mode_list, flag): # cachefunc_obj = cleaner.CleanTheCache() # t = threading.Thread(target = cachefunc_obj.get_all_cache_crufts, args = (mode_list, flag, self)) # t.start() # a dbus signal which means access weather by kobe # @dbus.service.signal(INTERFACE, signature='ss') # def access_weather(self, key, msg): # pass # a dbus signal which means scan complete by kobe @dbus.service.signal(INTERFACE, signature='s') def scan_complete(self, msg): pass @dbus.service.signal(INTERFACE, signature='ssss') def data_transmit_by_cache(self, flag0, path, flag1, size): pass @dbus.service.signal(INTERFACE, signature='i') def trans_thread_infor(self, target_tid): pass @dbus.service.signal(INTERFACE, signature='ssss') def data_transmit_by_package(self, flag, name, summary, size): pass @dbus.service.signal(INTERFACE, signature='sss') def data_transmit_by_cookies(self, flag, domain, num): pass #@dbus.service.signal(INTERFACE, signature='i') #def data_transmit_by_history(self, num): # pass #@dbus.service.signal(INTERFACE, signature='s') #def browser_status_by_history(self, status): # pass # @dbus.service.signal(INTERFACE, signature='ss') # def data_transmit_by_large(self, size, filepath): # pass @dbus.service.signal(INTERFACE, signature='s') def cache_transmit_complete(self, flag): pass @dbus.service.signal(INTERFACE, signature='') def package_transmit_complete(self): pass @dbus.service.signal(INTERFACE, signature='s') def cookies_transmit_complete(self, msg): pass #@dbus.service.signal(INTERFACE, signature='s') #def history_transmit_complete(self, msg): # pass @dbus.service.signal(INTERFACE, signature='') def large_transmit_complete(self): pass @dbus.service.signal(INTERFACE, signature='ss') def total_data_transmit(self, flag, msg): pass @dbus.service.signal(INTERFACE, signature='s') def display_scan_process(self, msg): pass def scan_complete_msg(self, para): self.scan_complete(para) def trans_thread_infor_msg(self, para): self.trans_thread_infor(para) def display_scan_process_msg(self, para): self.display_scan_process(para) @dbus.service.method(INTERFACE, in_signature='', out_signature='') def exit(self): self.mainloop.quit() @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_session_daemon(self): return "SessionDaemon" @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') def get_system_message(self): return self.sysconf.get_sys_msg() # -------------------------beautify start here------------------------- # -------------------------desktop------------------------- # @dbus.service.method(INTERFACE, in_signature='ss', out_signature='b') # def get_default_desktop_bool(self, schema, key): # return self.desktopconf.get_default_schema_value(schema, key) # @dbus.service.method(INTERFACE, in_signature='sss', out_signature='') # def set_default_desktop(self, schema, key, type): # self.desktopconf.set_default_schema_value(schema, key, type) #--------------unity-------------------- # show desktop icons @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_desktop_icons(self, flag): return self.desktopconf.set_show_desktop_icons(flag) # get show desktop icons @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_desktop_icons(self): return self.desktopconf.get_show_desktop_icons() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_computer(self, flag): return self.desktopconf.set_show_computer(flag) # get show homefolder @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_computer(self): return self.desktopconf.get_show_computer() # show home folder @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_homefolder(self, flag): return self.desktopconf.set_show_homefolder(flag) # get show homefolder @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_homefolder(self): return self.desktopconf.get_show_homefolder() # show network @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_network(self, flag): return self.desktopconf.set_show_network(flag) # get show network @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_network(self): return self.desktopconf.get_show_network() # show trash @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_trash(self, flag): return self.desktopconf.set_show_trash(flag) # get show trash @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_trash(self): return self.desktopconf.get_show_trash() # show devices @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_devices(self, flag): return self.desktopconf.set_show_devices(flag) # get show devices @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_devices(self): return self.desktopconf.get_show_devices() #--------------cinnamon-------------------- # show desktop icons @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_cinnamon_desktop_icons(self, flag): return self.desktopconf.set_show_cinnamon_desktop_icons(flag) # get show desktop icons @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_cinnamon_desktop_icons(self): return self.desktopconf.get_show_cinnamon_desktop_icons() # show computer @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_cinnamon_computer(self, flag): return self.desktopconf.set_show_cinnamon_computer(flag) # get show computer @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_cinnamon_computer(self): return self.desktopconf.get_show_cinnamon_computer() # show home folder @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_cinnamon_homefolder(self, flag): return self.desktopconf.set_show_cinnamon_homefolder(flag) # get show homefolder @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_cinnamon_homefolder(self): return self.desktopconf.get_show_cinnamon_homefolder() # show network @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_cinnamon_network(self, flag): return self.desktopconf.set_show_cinnamon_network(flag) # get show network @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_cinnamon_network(self): return self.desktopconf.get_show_cinnamon_network() # show trash @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_cinnamon_trash(self, flag): return self.desktopconf.set_show_cinnamon_trash(flag) # get show trash @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_cinnamon_trash(self): return self.desktopconf.get_show_cinnamon_trash() # show devices @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_cinnamon_devices(self, flag): return self.desktopconf.set_show_cinnamon_devices(flag) # get show devices @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_cinnamon_devices(self): return self.desktopconf.get_show_cinnamon_devices() # -------------------------unity------------------------- # @dbus.service.method(INTERFACE, in_signature='ss', out_signature='i') # def get_default_unity(self, name, key): # return self.unityconf.get_default_schema_value(name, key) # @dbus.service.method(INTERFACE, in_signature='ssi', out_signature='') # def set_default_unity(self, key, type, value): # self.unityconf.set_default_schema_value(key, type, value) @dbus.service.method(INTERFACE, in_signature='', out_signature='') def set_default_launcher_have_showdesktopicon(self): self.unityconf.set_default_launcher_have_showdesktopicon() # set launcher auto hide mode @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_launcher_autohide(self, flag): return self.unityconf.set_launcher_autohide(flag) # get launcher auto hide mode @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_launcher_autohide(self): return self.unityconf.get_launcher_autohide() # launcher icon size 32-64 @dbus.service.method(INTERFACE, in_signature='i', out_signature='b') def set_launcher_icon_size(self, size): return self.unityconf.set_launcher_icon_size(size) # get launcher icon size @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_launcher_icon_size(self): return self.unityconf.get_launcher_icon_size() # set launcher 'show desktop' icon @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_launcher_have_showdesktopicon(self, flag): return self.unityconf.set_launcher_have_showdesktopicon(flag) # get is launcher have 'show desktop' icon @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_launcher_have_showdesktopicon(self): return self.unityconf.get_launcher_have_showdesktopicon() #add by kobe for v1.1.0 # 透明度 @dbus.service.method(INTERFACE, in_signature='', out_signature='d') def get_launcher_transparency(self): return self.unityconf.get_launcher_transparency() @dbus.service.method(INTERFACE, in_signature='d', out_signature='b') def set_launcher_transparency(self, opacity): return self.unityconf.set_launcher_transparency(opacity) #图标背景 @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_all_launcher_icon_colourings(self): return self.unityconf.get_all_launcher_icon_colourings() @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_launcher_icon_colouring(self): return self.unityconf.get_launcher_icon_colouring() @dbus.service.method(INTERFACE, in_signature='i', out_signature='b') def set_launcher_icon_colouring(self, colouring): return self.unityconf.set_launcher_icon_colouring(colouring) #Launcher position @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_all_launcher_position(self): return self.unityconf.get_all_launcher_position() @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_launcher_position(self): return self.unityconf.get_current_launcher_position() @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_launcher_position(self, position): return self.unityconf.set_launcher_position(position) # Dash背景模糊类型 @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_dash_blur_experimental(self): return self.unityconf.get_dash_blur_experimental() @dbus.service.method(INTERFACE, in_signature='i', out_signature='b') def set_dash_blur_experimental(self, blur): return self.unityconf.set_dash_blur_experimental(blur) #面板菜单透明度 @dbus.service.method(INTERFACE, in_signature='', out_signature='d') def get_panel_transparency(self): return self.unityconf.get_panel_transparency() @dbus.service.method(INTERFACE, in_signature='d', out_signature='b') def set_panel_transparency(self, opacity): return self.unityconf.set_panel_transparency(opacity) #日期时间格式 @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_all_time_format(self): return self.unityconf.get_all_time_format() @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_time_format(self): return self.unityconf.get_time_format() @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_time_format(self, format): return self.unityconf.set_time_format(format) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_seconds(self): return self.unityconf.get_show_seconds() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_seconds(self, flag): return self.unityconf.set_show_seconds(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_week(self): return self.unityconf.get_show_week() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_week(self, flag): return self.unityconf.set_show_week(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_date(self): return self.unityconf.get_show_date() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_date(self, flag): return self.unityconf.set_show_date(flag) # 电源 @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_all_power_icon_policy(self): return self.unityconf.get_all_power_icon_policy() @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_power_icon_policy(self): return self.unityconf.get_power_icon_policy() @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_power_icon_policy(self, flag): return self.unityconf.set_power_icon_policy(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_power_time(self): return self.unityconf.get_show_power_time() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_power_time(self, flag): return self.unityconf.set_show_power_time(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_power_percentage(self): return self.unityconf.get_show_power_percentage() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_power_percentage(self, flag): return self.unityconf.set_show_power_percentage(flag) #-------------------------mate------------------------- @dbus.service.method(INTERFACE, in_signature='sb', out_signature='b') def set_mate_panel_autohide(self, position, flag): return self.unityconf.set_mate_panel_autohide(position, flag) # get launcher auto hide mode @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def get_mate_panel_autohide(self, position): return self.unityconf.get_mate_panel_autohide(position) @dbus.service.method(INTERFACE, in_signature='si', out_signature='b') def set_mate_panel_icon_size(self, position, size): return self.unityconf.set_mate_panel_icon_size(position, size) # get launcher icon size @dbus.service.method(INTERFACE, in_signature='s', out_signature='i') def get_mate_panel_icon_size(self, position): return self.unityconf.get_mate_panel_icon_size(position) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_apps(self): return self.unityconf.get_show_apps() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_apps(self, flag): return self.unityconf.set_show_apps(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_desktop(self): return self.unityconf.get_show_desktop() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_desktop(self, flag): return self.unityconf.set_show_desktop(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_icon(self): return self.unityconf.get_show_icon() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_icon(self, flag): return self.unityconf.set_show_icon(flag) @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_show_places(self): return self.unityconf.get_show_places() @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_show_places(self, flag): return self.unityconf.set_show_places(flag) # -------------------------theme------------------------- @dbus.service.method(INTERFACE, in_signature='ss', out_signature='s') def get_default_font_string(self, schema, key): return self.themeconf.get_default_schema_value(schema, key) # @dbus.service.method(INTERFACE, in_signature='ss', out_signature='d') # def get_default_font_double(self, schema, key): # return self.themeconf.get_default_schema_value(schema, key) @dbus.service.method(INTERFACE, in_signature='sss', out_signature='b') def set_default_font(self, schema, key, type): return self.themeconf.set_default_schema_value(schema, key, type) # get themes @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_themes(self): return self.themeconf.get_themes() # get current theme @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_theme(self): return self.themeconf.get_theme() # set GTK theme and window theme @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_theme(self, theme): self.themeconf.set_theme(theme) #---------------------------------------------------------------------------------------------------------- @dbus.service.method(INTERFACE, in_signature='sssss', out_signature='') def set_ubuntukylin_default_setting_str(self, schema, title, key, type,value): self.themeconf.set_ubuntukylin_default_setting(schema, title, key, type,value) @dbus.service.method(INTERFACE, in_signature='ssssd', out_signature='') def set_ubuntukylin_default_setting_double(self, schema, title, key, type,value): self.themeconf.set_ubuntukylin_default_setting(schema, title, key, type,value) @dbus.service.method(INTERFACE, in_signature='ssssi', out_signature='') def set_ubuntukylin_default_setting_int(self, schema, title, key, type,value): self.themeconf.set_ubuntukylin_default_setting(schema, title, key, type,value) @dbus.service.method(INTERFACE, in_signature='ssssb', out_signature='') def set_ubuntukylin_default_setting_bool(self, schema, title, key, type,value): self.themeconf.set_ubuntukylin_default_setting(schema, title, key, type,value) #---------------------------------------------------------------------------------------------------------- # ----------------window theme---------------- @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_window_themes(self): return self.themeconf.get_window_themes() # get current window theme @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_window_theme(self): return self.themeconf.get_current_window_theme() @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_window_theme(self, theme): self.themeconf.set_window_theme(theme) # get icon themes @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_icon_themes(self): return self.themeconf.get_icon_themes() # get current icon theme @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_icon_theme(self): return self.themeconf.get_icon_theme() # set icon theme @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_icon_theme(self, theme): self.themeconf.set_icon_theme(theme) # get cursor themes @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_cursor_themes(self): return self.themeconf.get_cursor_themes() # get current cursor theme @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_cursor_theme(self): return self.themeconf.get_cursor_theme() # set cursor theme @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_cursor_theme(self, theme): self.themeconf.set_cursor_theme(theme) # get cursor size @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_cursor_size(self): return self.themeconf.get_cursor_size() # set cursor size @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_cursor_size(self, size): self.themeconf.set_cursor_size(size) # -------------------------fonts------------------------- # get font @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_font(self): return self.themeconf.get_font() # set font @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_font(self, font): return self.themeconf.set_font(font) # get desktop font @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_desktop_font(self): return self.themeconf.get_desktop_font() # set desktop font @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_desktop_font(self, font): return self.themeconf.set_desktop_font(font) # get document font @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_document_font(self): return self.themeconf.get_document_font() # set document font @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_document_font(self, font): return self.themeconf.set_document_font(font) # get monospace font @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_monospace_font(self): return self.themeconf.get_monospace_font() # set monospace font (use this func to change document font in ubuntu) @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_monospace_font(self, font): return self.themeconf.set_monospace_font(font) # get window title font @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_window_title_font(self): return self.themeconf.get_window_title_font() # set window title font @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_window_title_font(self, font): return self.themeconf.set_window_title_font(font) # get font zoom @dbus.service.method(INTERFACE, in_signature='', out_signature='d') def get_font_zoom(self): return self.themeconf.get_font_zoom() # set font zoom @dbus.service.method(INTERFACE, in_signature='d', out_signature='b') def set_font_zoom(self, zoom): return self.themeconf.set_font_zoom(zoom) # get smooth style list @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_smooth_style_list(self): return self.themeconf.get_all_hinting() # get smooth style @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_smooth_style(self): return self.themeconf.get_hinting() # set smooth style @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_smooth_style(self, value): return self.themeconf.set_hinting(value) # get antialiasing style list @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_antialiasing_style_list(self): return self.themeconf.get_all_antialiasing() # get antialiasing style @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_antialiasing_style(self): return self.themeconf.get_antialiasing() # set antialiasing style @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def set_antialiasing_style(self, value): return self.themeconf.set_antialiasing(value) # -------------------------scrollbars------------------------- # @dbus.service.method(INTERFACE, in_signature='ss', out_signature='s') # def get_default_system_sring(self, schema, key): # return self.systemconf.get_default_schema_value(schema, key) # @dbus.service.method(INTERFACE, in_signature='ss', out_signature='b') # def get_default_system_bool(self, schema, key): # return self.systemconf.get_default_schema_value(schema, key) # @dbus.service.method(INTERFACE, in_signature='sss', out_signature='') # def set_default_system(self, schema, key, type): # self.systemconf.set_default_schema_value(schema, key, type) # set scrollbars mode overlay @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def set_scrollbars_mode_overlay(self): return self.systemconf.set_scrollbars_mode_overlay() # set scrollbars mode legacy @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def set_scrollbars_mode_legacy(self): return self.systemconf.set_scrollbars_mode_legacy() # get scrollbars mode @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_scrollbars_mode(self): return self.systemconf.get_scrollbars_mode() # -------------------------touchpad------------------------- # enable/disable the touchpad @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_touchpad_enable(self, flag): return self.systemconf.set_touchpad_enable(flag) # get is touchpad enable @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_touchpad_enable(self): return self.systemconf.get_touchpad_enable() # set touch scrolling use horizontal @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_touchscrolling_use_horizontal(self, flag): return self.systemconf.set_touchscrolling_use_horizontal(flag) # get is touch scrolling use horizontal @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_touchscrolling_use_horizontal(self): return self.systemconf.get_touchscrolling_use_horizontal() @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def set_touchscrolling_mode_disabled(self): return self.systemconf.set_touchscrolling_mode_disabled() # set touch scrolling mode edge @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def set_touchscrolling_mode_edge(self): return self.systemconf.set_touchscrolling_mode_edge() # set touch scrolling mode two-finger @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def set_touchscrolling_mode_twofinger(self): return self.systemconf.set_touchscrolling_mode_twofinger() # get touchpad scrolling mode @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_touchscrolling_mode(self): return self.systemconf.get_touchscrolling_mode() @dbus.service.method(INTERFACE, in_signature='i', out_signature='b') def set_mate_touchscrolling_mode(self, value): return self.systemconf.set_mate_touchscrolling_mode(value) # get is touch scrolling use horizontal @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_mate_touchscrolling_mode(self): return self.systemconf.get_mate_touchscrolling_mode() # -------------------------window------------------------- # set window button alignment left @dbus.service.method(INTERFACE, in_signature='', out_signature='') def set_window_button_align_left(self): self.systemconf.set_window_button_align_left() # set window button alignment right @dbus.service.method(INTERFACE, in_signature='', out_signature='') def set_window_button_align_right(self): self.systemconf.set_window_button_align_right() # get window button alignment @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_window_button_align(self): return self.systemconf.get_window_button_align() # set right click menus have icons @dbus.service.method(INTERFACE, in_signature='b', out_signature='b') def set_menus_have_icons(self, flag): return self.systemconf.set_menus_have_icons(flag) # get is right click menus have icons @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_menus_have_icons(self): return self.systemconf.get_menus_have_icons() # get titlebar wheel action @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_titlebar_wheel(self): return self.systemconf.get_titlebar_wheel() # get current titlebar wheel @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_titlebar_wheel(self): return self.systemconf.get_current_titlebar_wheel() # set titlebar wheel @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_titlebar_wheel(self, value): self.systemconf.set_titlebar_wheel(value) # get titlebar double @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_titlebar_options(self): return self.systemconf.get_titlebar_options() # get current titlebar double @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_titlebar_double(self): return self.systemconf.get_current_titlebar_double() # set titlebar double @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_titlebar_double(self, value): self.systemconf.set_titlebar_double(value) # get titlebar middle @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_titlebar_middle(self): return self.systemconf.get_titlebar_middle() # get current titlebar middle @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_titlebar_middle(self): return self.systemconf.get_current_titlebar_middle() # set titlebar middle @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_titlebar_middle(self, value): self.systemconf.set_titlebar_middle(value) # get titlebar right @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_titlebar_right(self): return self.systemconf.get_titlebar_right() # get current titlebar right @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_current_titlebar_right(self): return self.systemconf.get_current_titlebar_right() # set titlebar right @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_titlebar_right(self, value): self.systemconf.set_titlebar_right(value) # -------------------------sound------------------------- @dbus.service.method(INTERFACE, in_signature='ss', out_signature='s') def get_default_sound_string(self, schema, key): return self.soundconf.get_default_schema_value(schema, key) # @dbus.service.method(INTERFACE, in_signature='sss', out_signature='') # def set_default_sound(self, schema, key, type): # self.soundconf.set_default_schema_value(schema, key, type) @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_input_feedback_sounds_enable(self, flag): self.soundconf.set_input_feedback_sounds_enable(flag) # get enable the login music @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_input_feedback_sounds_enable(self): return self.soundconf.get_input_feedback_sounds_enable() @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_sound_event_enable(self, flag): self.soundconf.set_sound_event_enable(flag) # get enable the login music @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_sound_event_enable(self): return self.soundconf.get_sound_event_enable() # set enable the login music @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_login_music_enable(self, flag): self.soundconf.set_login_music_enable(flag) # get enable the login music @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_login_music_enable(self): return self.soundconf.get_login_music_enable() # get current sound theme @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def get_sound_theme(self): return self.soundconf.get_sound_theme() # set sound theme @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def set_sound_theme(self, theme): self.soundconf.set_sound_theme(theme) # -------------------------filemanager------------------------- @dbus.service.method(INTERFACE, in_signature='ss', out_signature='b') def get_default_filemanager_bool(self, schema, key): return self.fileconf.get_default_schema_value(schema, key) @dbus.service.method(INTERFACE, in_signature='ss', out_signature='i') def get_default_filemanager_int(self, schema, key): return self.fileconf.get_default_schema_value(schema, key) # @dbus.service.method(INTERFACE, in_signature='sss', out_signature='') # def set_default_filemanager(self, schema, key, type): # self.fileconf.set_default_schema_value(schema, key, type) # Set: Use the location entry instead of the pathbar @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_location_replace_pathbar(self, flag): self.fileconf.set_location_replace_pathbar(flag) # Get: Use the location entry instead of the pathbar @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_location_replace_pathbar(self): return self.fileconf.get_location_replace_pathbar() # Set: Automatically mount media @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_auto_mount_media(self, flag): self.fileconf.set_auto_mount_media(flag) # Get: Automatically mount media @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_auto_mount_media(self): return self.fileconf.get_auto_mount_media() # Set: Automatically open a folder @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_auto_open_folder(self, flag): self.fileconf.set_auto_open_folder(flag) # Get: Automatically open a folder @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_auto_open_folder(self): return self.fileconf.get_auto_open_folder() # Set: Prompt or autorun/autostart programs @dbus.service.method(INTERFACE, in_signature='b', out_signature='') def set_prompt_autorun_programs(self, flag): self.fileconf.set_prompt_autorun_programs(flag) # Get: Prompt or autorun/autostart programs @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def get_prompt_autorun_programs(self): return self.fileconf.get_prompt_autorun_programs() # Set: Thumbnail icon size (pixels) @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_thumbnail_icon_size(self, size): self.fileconf.set_thumbnail_icon_size(size) # Get: Thumbnail icon size (pixels) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_thumbnail_icon_size(self): return self.fileconf.get_thumbnail_icon_size() # Set: Thumbnail cache time (days) @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_thumbnail_cache_time(self, size): self.fileconf.set_thumbnail_cache_time(size) # Get: Thumbnail cache time (days) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_thumbnail_cache_time(self): return self.fileconf.get_thumbnail_cache_time() # Set: Maximum thumbnail cache size (MB) @dbus.service.method(INTERFACE, in_signature='i', out_signature='') def set_thumbnail_cache_size(self, size): self.fileconf.set_thumbnail_cache_size(size) # Get: Maximum thumbnail cache size (MB) @dbus.service.method(INTERFACE, in_signature='', out_signature='i') def get_thumbnail_cache_size(self): return self.fileconf.get_thumbnail_cache_size() # ---start---------------------autostartmanage------------------- @dbus.service.method(INTERFACE, in_signature='', out_signature='') def get_current_autostart_status(self): autostartmanage.interface_get_status(self) @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def get_current_single_autostart_status(self, path): return autostartmanage.interface_get_single_status(self, path) @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def change_autostart_status(self, filename): autostartmanage.interface_change_status(self, filename) @dbus.service.signal(INTERFACE, signature='as') def autostartmanage_data_signal(self, info): pass @dbus.service.signal(INTERFACE, signature='s') def autostartmanage_status_signal(self, status): pass @dbus.service.signal(INTERFACE, signature='s') def autostartmanage_error_signal(self, error): pass # ---end---------------------autostartmanage-------------------- #----START-------------------New-Youker------------------------- @dbus.service.method(INTERFACE, in_signature='a{sv}', out_signature='') def get_scan_result(self, mode_dic): # change by kobe t = threading.Thread(target = cleaner.interface_get_subpage_session, args = (self, mode_dic, )) t.start() #cleaner.interface_get_subpage_session(self, mode_dic) @dbus.service.signal(INTERFACE, signature='as') def subpage_data_signal(self, info): pass @dbus.service.signal(INTERFACE, signature='s') def subpage_status_signal(self, status): pass @dbus.service.signal(INTERFACE, signature='s') def subpage_error_signal(self, error): pass #----END---------------------New-Youker------------------------- @dbus.service.signal(INTERFACE, signature='b') def check_source_list_signal(self, result): pass @dbus.service.method(INTERFACE, in_signature='', out_signature='b') def start_check_source_useable(self): source_urllist = [] bad_source_urllist = [] good_source_urllist = [] source = aptsources.sourceslist.SourcesList() for item in source.list: if item.str()[0:4] == "deb " and item.str()[0:9] != "deb cdrom": #print type(item.str()[4:].split()),item.str()[4:].split() source_list = item.str()[4:].split() if source_list[0].endswith("/") is True: str = source_list[0] + "dists" else: str = source_list[0] + "/dists" source_list[0] = str if len(source_list)>3: urlend = source_list[2:] for item in urlend: urlbegin = source_list[0:2] urlbegin.append(item) source_urllist.append(urlbegin) else: source_urllist.append(source_list) for urllist in source_urllist: source_url = '/'.join(urllist) try: response = urllib.request.urlopen(source_url,timeout=5) good_source_urllist.append(source_url) except Exception as e: print(e) bad_source_urllist.append(source_url) if good_source_urllist == []: self.check_source_list_signal(False) else: self.check_source_list_signal(True) # -------------------------monitorball------------------------- # # get cpu percent # @dbus.service.method(INTERFACE, in_signature='', out_signature='d') # def get_cpu_percent(self): # return self.ballconf.get_cpu_percent() # # get total memory # @dbus.service.method(INTERFACE, in_signature='', out_signature='s') # def get_total_memory(self): # return self.ballconf.get_total_memory() # # get used memory # @dbus.service.method(INTERFACE, in_signature='', out_signature='s') # def get_used_memory(self): # return self.ballconf.get_used_memory() # # get free memory # @dbus.service.method(INTERFACE, in_signature='', out_signature='s') # def get_free_memory(self): # return self.ballconf.get_free_memory() # # get network flow total, return (up, down) # @dbus.service.method(INTERFACE, in_signature='', out_signature='as') # def get_network_flow_total(self): # return self.ballconf.get_network_flow_total() # -------------------------weather------------------------- # get weather information of six days # @dbus.service.method(INTERFACE, in_signature='s', out_signature='') # def get_forecast_weahter(self, cityId): # self.weatherconf.getWeatherForecast(cityId) # get real forecast weather information of six days # @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') # def get_forecast_dict(self): # return self.weatherconf.get_forecast_dict() # is Unity or Cinnamon or others @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def access_current_desktop(self): '''env |grep XDG_CURRENT_DESKTOP''' desktop = None try: desktop = os.getenv('XDG_CURRENT_DESKTOP') if desktop is None: desktop = os.getenv('XDG_SESSION_DESKTOP') except Exception as e: pass return desktop # is x86 or aarch64 @dbus.service.method(INTERFACE, in_signature='', out_signature='s') def access_current_machine(self): return platform.machine() # # is Unity or not # @dbus.service.method(INTERFACE, in_signature='', out_signature='s') # def judge_desktop_is_unity(self): # '''env |grep XDG_CURRENT_DESKTOP''' # desktop = '' # try: # desktop = os.getenv('XDG_CURRENT_DESKTOP') # except Exception as e: # pass # return desktop # @dbus.service.method(INTERFACE, in_signature='', out_signature='s') # def judge_desktop_is_cinnamon(self): # '''env |grep XDG_CURRENT_DESKTOP''' # desktop = ''#X-Cinnamon # try: # desktop = os.getenv('XDG_CURRENT_DESKTOP') # except Exception as e: # pass # return desktop # -------------------------pingback------------------------- def get_last_time(self): time_text = None usrPath = os.path.join(HOME, '.config/kylin/kylin-assistant/pingback.time') if os.path.exists(usrPath): fp = open(usrPath) try: time_text = fp.read( ).replace('\n', '') finally: fp.close() return time_text def set_last_time(self, time_text): abs_path = os.path.join(HOME, '.config/kylin/kylin-assistant') if not os.path.isdir(abs_path): os.makedirs(abs_path) usrPath = os.path.join(abs_path, 'pingback.time') fp = open(usrPath, 'w') fp.write(time_text) fp.close() # @dbus.service.signal(INTERFACE, signature='b') # def weather_server_pingback_signal(self, result): # pass # @dbus.service.method(INTERFACE, in_signature='', out_signature='b') # def access_server_pingback_real(self): # pingback = self.weatherping.access_server_pingback() # self.weather_server_pingback_signal(pingback) ## return pingback # @dbus.service.method(INTERFACE, in_signature='', out_signature='') # def access_server_pingback(self): # t = threading.Thread(target = self.access_server_pingback_real) # t.start() # @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') # def submit_uk_pingback(self, cityname): @dbus.service.method(INTERFACE, in_signature='s', out_signature='b') def submit_uk_pingback(self, appVersion): last_time = self.get_last_time() now_time = datetime.datetime.now() if last_time in (None, ''): #version_youker_assistant = get_uk_version() distro, version_os = get_distro_info() try: pingback = self.premoter.submit_pingback_main(distro, version_os, appVersion, '') # pingback = self.premoter.submit_pingback_main(distro, version_os, version_youker_assistant, cityname) except Exception as e: print('pingback failed...') print(e) if pingback: self. set_last_time(now_time.strftime('%Y-%m-%d'))#'%Y-%m-%d %H:%M:%S' return pingback else: last_time = datetime.datetime.strptime(last_time, '%Y-%m-%d') now_time = now_time.strftime('%Y-%m-%d') now_time = datetime.datetime.strptime(now_time, '%Y-%m-%d') # myseconds = (now_time - last_time).seconds delta = now_time - last_time#两个日期相隔的天数 if (delta.days > 0): # version_youker_assistant = get_uk_version() distro, version_os = get_distro_info() try: pingback = self.premoter.submit_pingback_main(distro, version_os, appVersion, '') # pingback = self.premoter.submit_pingback_main(distro, version_os, version_youker_assistant, cityname) except Exception as e: print('pingback failed...') print(e) if pingback: self. set_last_time(now_time.strftime('%Y-%m-%d')) return pingback else: return False # def real_get_current_weather(self, cityId): # self.weather_data = self.server.get_cma_observe_weather(cityId) # if self.weather_data not in (False, None, {}, '', '[]', "['']"): # self.access_weather('weather', 'kobe') # get current day's weather # @dbus.service.method(INTERFACE, in_signature='s', out_signature='') # def get_current_weather(self, cityId): # t = threading.Thread(target = self.real_get_current_weather, args = (cityId,)) # t.setDaemon(True) # t.start() # self.weatherconf.getCurrentWeather(cityId) # @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') # def get_current_weather_dict(self): # return self.weather_data # return self.weatherconf.get_current_weather_dict() # get current day's weather from yahoo 0.3.3 # @dbus.service.method(INTERFACE, in_signature='ass', out_signature='') # def get_current_yahoo_weather(self, latlon, cityId): # self.yahooconf.getYahooCurrentWeather(latlon, cityId) # @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') # def get_current_yahoo_weather_dict(self): # return self.yahooconf.get_current_yahoo_weather_dict() # @dbus.service.method(INTERFACE, in_signature='', out_signature='a{sv}') # def get_yahoo_forecast_dict(self): # return self.yahooconf.get_yahoo_forecast_dict() youker-assistant/backends/kylin-assistant-daemon/src/sessiondbus/unzip.py0000664000175000017500000000375613260315532026057 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # # Author: Kobe Lee # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import sys import subprocess import shutil # unzip -o test.zip -d /tmp/ HOME_PATH = os.path.expandvars('$HOME') def generate_tmp_path(name): assert(isinstance(name, str)) # dest_path = HOME_PATH + "/.config/ubuntukylin/kylin-assistant/" dest_path = HOME_PATH + "/.cache/kylin-assistant/" folder_path = dest_path + name if os.path.exists(folder_path): shutil.rmtree(folder_path) return dest_path def unzip_resource(package_file): unziped_dir = generate_tmp_path("uk-img") if unziped_dir[len(unziped_dir)-1] != "/": unziped_dir = unziped_dir + "/" subprocess.call(["unzip", package_file, "-d", unziped_dir]) dest_dir = unziped_dir + "uk-img/" if not os.path.exists(dest_dir): print(("unzip '%s' to '%s' failed" % (package_file , unziped_dir))) return False else: print("unzip ok....") return True # unziped_dir = unziped_dir + WS360_CHROME_PKGNAME # version = get_package_ver_from_manifest(unziped_dir) # if version == "0.0": # return False # extension_filedir = "/home/trusty/360-deb/" # shutil.copytree(unziped_dir, extension_filedir) # shutil.rmtree(unziped_dir) # return True #unzip_resource("/home/trusty/uk-img.zip") youker-assistant/backends/kylin-assistant-daemon/src/sessiondbus/piston_remoter.py0000664000175000017500000000504313260315532027752 0ustar fengfeng#!/usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # Author: Kobe Lee # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE """This module provides the RatingsAndReviewsAPI class for talking to the ratings and reviews API, plus a few helper classes. """ import os, sys from urllib.parse import quote_plus from piston_mini_client import ( PistonAPI, PistonResponseObject, PistonSerializable, returns, returns_json, returns_list_of, ) from piston_mini_client.validators import validate_pattern, validate #from piston_mini_client import APIError import httplib2 # These are factored out as constants for if you need to work against a # server that doesn't support both schemes (like http-only dev servers) PUBLIC_API_SCHEME = 'http' AUTHENTICATED_API_SCHEME = 'https' class PingbackmainRequest(PistonSerializable): _atts = ('distro', 'version_os', 'version_youker_assistant', 'city') class PingBackPistonAPI(PistonAPI): """A client for talking to the reviews and ratings API. If you pass no arguments into the constructor it will try to connect to localhost:8000 so you probably want to at least pass in the ``service_root`` constructor argument. """ default_content_type = 'application/x-www-form-urlencoded' @returns_json def submit_pingback_main(self, distro, version_os, version_youker_assistant, city): postdata = PingbackmainRequest() postdata.distro = distro postdata.version_os = version_os postdata.version_youker_assistant = version_youker_assistant postdata.city = city return self._post('pingbackmain/', data=postdata, scheme=PUBLIC_API_SCHEME, content_type='application/json') class ServerPingBackAPI(PistonAPI): default_content_type = 'application/x-www-form-urlencoded' @returns_json def access_server_pingback(self): return self._get('pingnetwork/', scheme=PUBLIC_API_SCHEME) youker-assistant/backends/kylin-assistant-daemon/src/sessiondbus/__init__.py0000664000175000017500000000002313260315532026431 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/sessiondbus/common.py0000664000175000017500000001317213260315532026173 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # # Author: Kobe Lee # Maintainer: Ubuntu Kylin # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os, sys import urllib.request, urllib.error, urllib.parse import platform import re import subprocess import subprocess BOOL_TYPE = 1 INT_TYPE = 2 DOUBLE_TYPE = 3 STRING_TYPE = 4 str_agent = [] LEN_AGENT = 10 str_agent.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)') str_agent.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; msn OptimizedIE8;ZHCN)') str_agent.append('Mozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre') str_agent.append('Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101213 Firefox/4.0b8pre') str_agent.append('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; Alexa Toolbar)') str_agent.append('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.53 Safari/534.30') str_agent.append('Mozilla/5.0 (X11; U;Linux i686; zh-CN;rv:1.2.3.4) Gecko/') str_agent.append('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; Alexa Toolbar; SE 2.X MetaSr 1.0)') str_agent.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Maxthon/3.0.6.27 Safari/532.4') str_agent.append('Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36') ubuntukylin_distrowatch = 'http://distrowatch.com/table.php?distribution=ubuntukylin' distrowatch = 'http://distrowatch.com/' def get_distro_info(): ufpath = '/etc/ubuntukylin-release' lsbpath = '/etc/lsb-release' if(os.path.exists(ufpath) and os.path.isfile(ufpath)): uf = open(ufpath) lines = uf.readlines() rtn = [] for line in lines: kv = line.split('=') if (kv[0] == 'DISTRIB_ID'): v = kv[1] rtn.append(v[:-1]) if (kv[0] == 'DISTRIB_RELEASE'): v = kv[1] rtn.append(v[:-1]) uf.close() return rtn elif(os.path.exists(lsbpath) and os.path.isfile(lsbpath)): lsbf = open(lsbpath) lines = lsbf.readlines() rtn = [] for line in lines: kv = line.split('=') if (kv[0] == 'DISTRIB_ID'): v = kv[1] rtn.append(v[:-1]) if (kv[0] == 'DISTRIB_RELEASE'): v = kv[1] rtn.append(v[:-1]) lsbf.close() return rtn else: dist = platform.dist() distname = dist[0] distversion = dist[1] return [distname, distversion] #def get_machine_id(): # fpath = '/var/lib/dbus/machine-id' # if(os.path.exists(fpath) and os.path.isfile(fpath)): # f = open(fpath, 'r') # id = f.read() # f.close() # id = id.replace('\n','') # if(id == ''): # return 'unknown' # else: # return id # else: # return 'unknown' def get_ip_again(): ret = '' url = "http://members.3322.org/dyndns/getip" try: fp = urllib.request.urlopen(url, timeout=5) souce = fp.read() if not isinstance(souce, str): souce = str(souce) fp.close() ret = souce.replace('\n', '') except: print('get_ip failed!', file=sys.stderr) return ret def get_ip(): ret = '' url = "http://iframe.ip138.com/ic.asp" try: fp = urllib.request.urlopen(url, timeout=5) souce = fp.read().decode("GB2312") fp.close() ret = re.findall("
      (.*)
      ", souce)[0].encode("UTF-8") except: ret = get_ip_again() return ret def get_run_command(pkgname): fd = os.popen('find /usr/share/applications/ -name "%s.desktop" | xargs grep "Exec"' %pkgname) exc = fd.read() fd.close() command = [''] # 截取运行指令部分 if exc: command = re.findall('Exec=(.*)',exc) # 有些软件Exec后面会有%U %f等,进行过滤 if re.findall(' ',command[0]): command = re.findall('(.*) ',command[0]) #split the command to prevent the error: "OSError: [Errno 2] 没有那个文件或目录" fullcmd = command[0] if fullcmd: fullcmd = command[0].split() return fullcmd def run_app(pkgname): cmd = get_run_command(pkgname) p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) def get_output(cmd): '''status =0 : success''' status, output = subprocess.getstatusoutput(cmd) if status: raise return output if __name__ == '__main__': ip = get_ip() print(ip) youker-assistant/backends/kylin-assistant-daemon/src/appcollections/0000775000175000017500000000000013260315532025003 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/appcollections/monitorball/0000775000175000017500000000000013260315532027325 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/appcollections/monitorball/__init__.py0000664000175000017500000000002313260315532031431 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/appcollections/monitorball/monitor_ball.py0000664000175000017500000001012013260315532032352 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import psutil import time import subprocess class MonitorBall: # clean up memory def cleanup_memory(self): '''force changed to disk, update the super block''' pone = subprocess.Popen(["sync"], shell=True) pone.wait() '''drop pagecache, dentries and inodes to free the memory''' ptwo = subprocess.Popen(["echo 3 > /proc/sys/vm/drop_caches"], shell=True) ptwo.wait() # get cpu percent def get_cpu_percent(self, percpu = False): return psutil.cpu_percent(0.1, percpu) # get total memory + cache def get_total_cmemory(self, symbol = "m"): mem = psutil.phymem_usage() value = mem.total return self.bytes2human(value, symbol) # get used memory + cache def get_used_cmemory(self, symbol = "m"): mem = psutil.phymem_usage() value = mem.used return self.bytes2human(value, symbol) # get free memory + cache def get_free_cmemory(self, symbol = "m"): mem = psutil.phymem_usage() value = mem.free return self.bytes2human(value, symbol) # get total memory def get_total_memory(self, symbol = "m"): baseData = psutil.virtual_memory() value = baseData.total return self.bytes2human(value, symbol) # get used memory def get_used_memory(self, symbol = "m"): baseData = psutil.virtual_memory() value = baseData.total - baseData.available return self.bytes2human(value, symbol) # get free memory def get_free_memory(self, symbol = "m"): baseData = psutil.virtual_memory() value = baseData.available return self.bytes2human(value, symbol) # get memory used percent def get_memory_percent(self): baseData = psutil.virtual_memory() return baseData.percent # get network total flow, return (up, down) def get_network_flow_total(self, symbol = "k"): network = psutil.network_io_counters() sent = network.bytes_sent recv = network.bytes_recv if(symbol == "b"): return (sent, recv) elif(symbol == "k"): k_up = float(sent) / 1024 ups = str(k_up) ups = ups[0:ups.find(".") + 2] k_down = float(recv) / 1024 downs = str(k_down) downs = downs[0:downs.find(".") + 2] return (ups, downs) else: return None # byte to human by symbol def bytes2human(self, value, symbol): if symbol == "k": value = value / 1024 elif symbol == "m": value = value / 1024 / 1024 elif symbol == "g": valuef = float(value) / 1024 / 1024 / 1024 values = str(valuef) value = values[0:values.find(".") + 2] else: pass return str(value) if __name__ == "__main__": mmm = MonitorBall() # print mmm.get_network_flow_total() # print mmm.get_network_flow_total("b") # mmm.cleanup_memory() # print mmm.get_cpu_percent() # print mmm.get_cpu_percent(True) # print mmm.get_cpu_percent() # print mmm.get_free_memory("m") # print mmm.get_used_memory("g") # print mmm.get_total_memory("g") # mmm.ttestt() print(mmm.get_memory_percent()) print(mmm.get_total_memory()) print(mmm.get_used_memory()) print(mmm.get_free_memory()) youker-assistant/backends/kylin-assistant-daemon/src/appcollections/__init__.py0000664000175000017500000000002313260315532027107 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/sysinfo/0000775000175000017500000000000013260315532023456 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sysinfo/__init__.py0000664000175000017500000002241313260315532025571 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import sys import os from gi.repository import GLib import platform import math import apt NO_UPDATE_WARNING_DAYS = 7 FILEPATH = "/etc/lsb-release" RELEASEPATH = "/etc/ubuntukylin-release" KILOBYTE_FACTOR = 1000.0 MEGABYTE_FACTOR = (1000.0 * 1000.0) GIGABYTE_FACTOR = (1000.0 * 1000.0 * 1000.0) TERABYTE_FACTOR = (1000.0 * 1000.0 * 1000.0 * 1000.0) def get_human_read_capacity_size(size): size_str = "" displayed_size = 0.0 unit = "KB" if size < MEGABYTE_FACTOR: displayed_size = float(size/KILOBYTE_FACTOR) unit = "KB" elif size < GIGABYTE_FACTOR: displayed_size = float(size/MEGABYTE_FACTOR) unit = "MB" elif size < TERABYTE_FACTOR: displayed_size = float(size/GIGABYTE_FACTOR) unit = "GB" else: displayed_size = float(size/TERABYTE_FACTOR) unit = "TB" #print "displayed_size=", round(displayed_size) #round 不是简单的四舍五入,而是ROUND_HALF_EVEN的策略 #ceil 取大于或者等于x的最小整数 #floor 取小于或者等于x的最大整数 #print round(2.5)#3.0 #print math.ceil(2.5)#3.0 #print math.floor(2.5)#2.0 #print round(2.3)#2.0 #print math.ceil(2.3)#3.0 #print math.floor(2.3)#2.0 str_list = [str(int(round(displayed_size))), unit] size_str = " ".join(str_list) return size_str class Sysinfo: CACHE_FLAG = '' CACHE_PACKAGES = '' CACHE_SIZE = '' CPU = '' RAM = '' HOSTNAME = '' PLATFORM = '' DISTRO = '' DESKTOP_FULLNAME = '' UPDATE_TIME = '' CURRENT_USER = '' HOME_DIRECTORY = '' SHELL = '' LANGUAGE = '' def __init__(self): self.CACHE_FLAG = 'a' self.CACHE_PACKAGES = 'b' self.CACHE_SIZE = 'c' self.CPU = 'd' self.RAM = 'e' self.HOSTNAME = 'f' self.PLATFORM = 'g' self.DISTRO = 'h' self.DESKTOP_FULLNAME = 'i' self.UPDATE_TIME = 'j' self.CURRENT_USER = 'k' self.HOME_DIRECTORY = 'l' self.SHELL = 'm' self.LANGUAGE = 'n' def get_sys_msg(self): CLIPS_DICT = {} CLIPS_DICT['currrent_user'], CLIPS_DICT['home_path'], CLIPS_DICT['terminal'], CLIPS_DICT['language'] = self.get_userinfo() CLIPS_DICT['distribution'] = self.get_distro() CLIPS_DICT['desktopenvironment'] = self.get_desktop() CLIPS_DICT['hostname'], CLIPS_DICT['machine'] = self.get_systeminfo() CLIPS_DICT['cpu'], CLIPS_DICT['ram'] = self.get_hardwareinfo() return CLIPS_DICT def get_userinfo(self): dict = {} dict['username'] = GLib.get_user_name() dict['homedir'] = GLib.get_home_dir() dict['terminal'] = GLib.getenv('SHELL') dict['lang'] = GLib.getenv('LANG') return dict['username'], dict['homedir'],dict['terminal'],dict['lang'] def get_distro(self): '''It should be: DISTRIB_DESCRIPTION="UbuntuKylin 13.10''' #FILEPATH RELEASEPATH distro = "" if os.path.exists(RELEASEPATH): with open(RELEASEPATH, "r") as fsys: for line in fsys: if line.startswith("DISTRIB_DESCRIPTION"): tmp = line break # kobe: remove '"' and '\n' front = tmp.split('=')[1].replace('"', '').replace('\n', '') #(LP: #1240862) distro = front + '-' + platform.dist()[2] elif os.path.exists("/etc/os-release"): with open("/etc/os-release", "r") as fsys: for line in fsys: if line.startswith("PRETTY_NAME"): tmp = line break distro = tmp.split('=')[1].replace('"', '').replace('\n', '') else: a = platform.dist()[0] b = platform.dist()[1] c = platform.dist()[2] distro = '-'.join((a,b,c)) # if not os.path.exists(RELEASEPATH): # with open(FILEPATH, "r") as fsys: # for line in fsys: # if line.startswith("DISTRIB_DESCRIPTION"): # tmp = line # break # # kobe: remove '"' and '\n' # front = tmp.split('=')[1].replace('"', '').replace('\n', '') #(LP: #1240862) # if front.startswith("UbuntuKylin") or front.startswith("Ubuntu Kylin"): # distro = front + '-' + platform.dist()[2] # else: # a = platform.dist()[0] # b = platform.dist()[1] # c = platform.dist()[2] # distro = '-'.join((a,b,c)) # else: # with open(RELEASEPATH, "r") as fp: # for line in fp: # if line.startswith("DISTRIB_ID"): # tmp1 = line # elif line.startswith("DISTRIB_RELEASE"): # tmp2 = line # elif line.startswith("DISTRIB_CODENAME"): # tmp3 = line # # kobe: remove '"' and '\n' # id = tmp1.split('=')[1].replace('"', '').replace('\n', '') # release = tmp2.split('=')[1].replace('"', '').replace('\n', '') # codename = tmp3.split('=')[1].replace('"', '').replace('\n', '') # distro = '-'.join((id, release, codename)) return distro def get_desktop(self): apt_cache = apt.Cache() try: package = apt_cache["kylin-menu"] except: package = None if package is not None and package.is_installed: return "UKUI" desktop_dict = {'ubuntu': 'Unity', 'ubuntu-2d': 'Unity 2D', 'gnome': 'GNOME Shell', 'gnome-classic': 'GNOME Classic', 'gnome-shell': 'GNOME Shell', 'gnome-fallback': 'GNOME Fallback', 'pantheon': 'elementary OS (Luna)', 'Lubutu': 'LXDE', } try: desktop_name = os.getenv('XDG_CURRENT_DESKTOP') if desktop_name is None: desktop_name = os.getenv('XDG_SESSION_DESKTOP') if desktop_name is None: desktop_name = "N/A" return desktop_name except Exception as e: print(e) desktop = os.getenv('DESKTOP_SESSION') if desktop in desktop_dict: return desktop_dict[desktop] else: if desktop: return 'Unknown (%s)' % desktop else: return 'Unknown' def get_systeminfo(self): return platform.node() , platform.processor() def get_hardwareinfo(self): model_name = 'N/A' # MemTotal2 = '' MemSize = None # CPU with open('/proc/cpuinfo') as f: for line in f: if line.strip(): if line.rstrip('\n').startswith('model name'): model_name = line.rstrip('\n').split(':')[1] break elif line.rstrip('\n').startswith('Hardware'): model_name = line.rstrip('\n').split(':')[1].strip() break # Memory # with open('/proc/meminfo') as f: # for line in f: # if line.strip(): # if line.rstrip('\n').startswith('MemTotal'): # MemTotal = line.rstrip('\n').split(':')[1].strip() # MemTotal1 = MemTotal.split(' ')[0] # #MemTotal2 = GLib.format_size_for_display(int(MemTotal1) * 1024) # MemTotal2 = str(round(float(MemTotal1) / (1000 ** 2), 1)) + "G" # break with open('/proc/meminfo') as f: for line in f: if line.strip(): if line.rstrip('\n').startswith('MemTotal'): MemTotal = line.rstrip('\n').split(':')[1].strip() MemTmp = MemTotal.split(' ')[0] #print "MemTmp=",MemTmp #MemTmp = 1000204886#8156252#7889972 MemSize = get_human_read_capacity_size(int(MemTmp)*1000) break if MemSize is None: MemSize = "N/A" return model_name,str(MemSize) # return model_name,MemTotal2 def get_codename(self): codename = platform.dist()[2] return codename if __name__ == '__main__': c = Sysinfo() print((c.get_sys_msg())) import getpass print((getpass.getuser())) youker-assistant/backends/kylin-assistant-daemon/src/start_systemdbus.py0000775000175000017500000000344613260315532025767 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os, sys import signal import dbus import dbus.mainloop.glib from gi.repository import GObject from single import SingleInstance #import gobject if __name__ == '__main__': myapp = SingleInstance("/tmp/kylin-assistant-systemdbus-%d.pid" % os.getuid()) if myapp.is_already_running(): print("Another instance of this systemdbus is already running") sys.exit("Another instance of this systemdbus is already running") os.environ["TERM"] = "xterm" os.environ["PATH"] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" os.environ["DEBIAN_FRONTEND"] = "noninteractive" if os.path.exists("/var/lib/apt/lists/lock"): os.remove("/var/lib/apt/lists/lock") from systemdbus.daemon import Daemon dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) GObject.threads_init() mainloop = GObject.MainLoop() #gobject.threads_init() #mainloop = gobject.MainLoop() signal.signal(signal.SIGINT, lambda : mainloop.quit()) Daemon(dbus.SystemBus(), mainloop) mainloop.run() youker-assistant/backends/kylin-assistant-daemon/src/beautify/0000775000175000017500000000000013263553572023607 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/beautify/unity.py0000664000175000017500000004767313263553572025352 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from . import gsettings #from .compizsettings import CompizSetting class Unity: '''if compiz: key is icon_size; else if gsettins: key is icon-size''' desktop = None def __init__(self): self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') # self.setting = CompizSetting("%s.%s" % (name, key)) # ---------------launcher--------------- # -----------------默认值----------------- # Get Default Value #def get_default_schema_value(self, name, key): # compizsetting = CompizSetting("%s.%s" % (name, key)) # return compizsetting.get_schema_value() # Set Default Value min=32, max=64, step=16, key="unityshell.icon_size" #def set_default_schema_value(self, key, name, type, value): def set_default_schema_value(self, key, type, value): #default_value = self.get_default_schema_value(name, key) #if default_value is not None: return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', key, type, value) #else: # raise NotImplemented # launcher auto hide mode, True/False def set_launcher_autohide(self, flag): return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'launcher-hide-mode', 'int', flag) # get launcher auto hide mode def get_launcher_autohide(self): try: value = gsettings.get('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'launcher-hide-mode', 'int') if value == 0: return False elif value == 1: return True else: return None except Exception as e: return False # launcher icon size 32-64 def set_launcher_icon_size(self, size): return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'icon-size', 'int', size) # get launcher icon size def get_launcher_icon_size(self): try: return gsettings.get('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'icon-size', 'int') except Exception as e: return 0 # launcher 'show desktop' icon True/False def set_launcher_have_showdesktopicon(self, flag): launcher = gsettings.get_schema('com.canonical.Unity.Launcher') icons = launcher.get_strv('favorites') desktop = 'unity://desktop-icon' if flag == True: if desktop not in icons: icons.append(desktop) launcher.set_strv('favorites', icons) else: if desktop in icons: icons.remove(desktop) launcher.set_strv('favorites', icons) # get is launcher have 'show desktop' icon def get_launcher_have_showdesktopicon(self): launcher = gsettings.get_schema('com.canonical.Unity.Launcher') icons = launcher.get_strv('favorites') desktop = 'unity://desktop-icon' if desktop in icons: return True else: return False def get_default_launcher_have_showdesktopicon(self): return self.get_launcher_have_showdesktopicon() def set_default_launcher_have_showdesktopicon(self): self.set_launcher_have_showdesktopicon(True) #add by kobe # 透明度 def get_launcher_transparency(self): try: return gsettings.get('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'launcher-opacity', 'double') except Exception as e: return 0.0 # 'min' : 0.2, # TODO : Check these min max. Most prolly wrong. # 'max' : 1.0, # But fine since they are ignored anyway. # 'ticks' : [(0.666, Gtk.PositionType.BOTTOM, None)] def set_launcher_transparency(self, opacity): return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'launcher-opacity', 'double', opacity) # 图标背景 def get_all_launcher_icon_colourings(self): # return ['0:0', '1:1', '2:2', '3:3', '4:4'] return ['all programs', 'only run app', 'no coloring', 'edge coloring', 'each workspace alternating coloring'] def get_launcher_icon_colouring(self): try: return gsettings.get('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'backlight-mode', 'int') except Exception as e: return 0 # 'map' : {0:0,1:1,2:2,3:3,4:4} 0:所有程序,1:仅打开的应用程序,2:不着色,3:边缘着色,4:每个工作区交替着色 def set_launcher_icon_colouring(self, colouring): return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'backlight-mode', 'int', colouring) def get_all_launcher_position(self): return ['Left', 'Bottom'] def get_current_launcher_position(self): return gsettings.get('com.canonical.Unity.Launcher', None, 'launcher-position', 'string') def set_launcher_position(self, position): return gsettings.set('com.canonical.Unity.Launcher', None, 'launcher-position', 'string', position) #Dash背景模糊类型 def get_dash_blur_experimental(self): try: return gsettings.get('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'dash-blur-experimental', 'int') except Exception as e: return 0 # 活动模糊smart: 2 静态模糊static:1 非模糊0 def set_dash_blur_experimental(self, blur): return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'dash-blur-experimental', 'int', blur) #面板菜单透明度 def get_panel_transparency(self): try: return gsettings.get('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'panel-opacity', 'double') except Exception as e: return 0.0 # 'min' : 0.2, # TODO : Check these min max. Most prolly wrong. # 'max' : 8.0, # But fine since they are ignored anyway. # 'ticks' : [(0.666, Gtk.PositionType.BOTTOM, None)] def set_panel_transparency(self, opacity): return gsettings.set('org.compiz.unityshell', '/org/compiz/profiles/unity/plugins/unityshell/', 'panel-opacity', 'double', opacity) #日期时间格式 def get_all_time_format(self): return ['locale-default', '12-hour' , '24-hour', 'custom'] def get_time_format(self): # if self.desktop == "mate": # return gsettings.get('org.mate.panel', # '/org/mate/panel/objects/clock/prefs/', # 'format', # 'string') # else: return gsettings.get('com.canonical.indicator.datetime', None, 'time-format', 'string') def set_time_format(self, format): # if self.desktop == "mate": # return gsettings.set('org.mate.panel', # '/org/mate/panel/objects/clock/prefs/', # 'format', # 'string', format) # else: return gsettings.set('com.canonical.indicator.datetime', None, 'time-format', 'string', format) # 秒 def get_show_seconds(self): return gsettings.get('com.canonical.indicator.datetime', None, 'show-seconds', 'boolean') def set_show_seconds(self, flag): return gsettings.set('com.canonical.indicator.datetime', None, 'show-seconds', 'boolean', flag) #星期 def get_show_week(self): return gsettings.get('com.canonical.indicator.datetime', None, 'show-day', 'boolean') def set_show_week(self, flag): return gsettings.set('com.canonical.indicator.datetime', None, 'show-day', 'boolean', flag) #日期 def get_show_date(self): return gsettings.get('com.canonical.indicator.datetime', None, 'show-date', 'boolean') def set_show_date(self, flag): return gsettings.set('com.canonical.indicator.datetime', None, 'show-date', 'boolean', flag) # 电源 # present:电源总是可见 charge:当机器充电/放电时可见 never:总是不可见 def get_all_power_icon_policy(self): return ['present', 'charge', 'never'] def get_power_icon_policy(self): return gsettings.get('com.canonical.indicator.power', None, 'icon-policy', 'string') def set_power_icon_policy(self, flag): return gsettings.set('com.canonical.indicator.power', None, 'icon-policy', 'string', flag) #电源时间 def get_show_power_time(self): return gsettings.get('com.canonical.indicator.power', None, 'show-time', 'boolean') def set_show_power_time(self, flag): return gsettings.set('com.canonical.indicator.power', None, 'show-time', 'boolean', flag) #电源百分比 def get_show_power_percentage(self): return gsettings.get('com.canonical.indicator.power', None, 'show-percentage', 'boolean') def set_show_power_percentage(self, flag): return gsettings.set('com.canonical.indicator.power', None, 'show-percentage', 'boolean', flag) #-----------------mate---------------------------- def set_mate_panel_icon_size(self, position, size): if self.desktop == "mate" or self.desktop == "MATE": if position == "top": return gsettings.set('org.mate.panel.toplevel', '/org/mate/panel/toplevels/top/', 'size', 'int', size) elif position == "bottom": return gsettings.set('org.mate.panel.toplevel', '/org/mate/panel/toplevels/bottom/', 'size', 'int', size) else: return False elif self.desktop == "ukui" or self.desktop == "UKUI": if position == "top": return gsettings.set('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/top/', 'size', 'int', size) elif position == "bottom": return gsettings.set('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/bottom/', 'size', 'int', size) else: return False # get launcher icon size def get_mate_panel_icon_size(self, position): if self.desktop == "mate" or self.desktop == "MATE": if position == "top": return gsettings.get('org.mate.panel.toplevel', '/org/mate/panel/toplevels/top/', 'size', 'int') elif position == "bottom": return gsettings.get('org.mate.panel.toplevel', '/org/mate/panel/toplevels/bottom/', 'size', 'int') else: return False elif self.desktop == "ukui" or self.desktop == "UKUI": if position == "top": return gsettings.get('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/top/', 'size', 'int') elif position == "bottom": return gsettings.get('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/bottom/', 'size', 'int') else: return False def set_mate_panel_autohide(self, position, flag): if self.desktop == "mate" or self.desktop == "MATE": if position == "top": return gsettings.set('org.mate.panel.toplevel', '/org/mate/panel/toplevels/top/', 'auto-hide', 'boolean', flag) elif position == "bottom": return gsettings.set('org.mate.panel.toplevel', '/org/mate/panel/toplevels/bottom/', 'auto-hide', 'boolean', flag) else: return False elif self.desktop == "ukui" or self.desktop == "UKUI": if position == "top": return gsettings.set('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/top/', 'auto-hide', 'boolean', flag) elif position == "bottom": return gsettings.set('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/bottom/', 'auto-hide', 'boolean', flag) else: return False def get_mate_panel_autohide(self, position): if self.desktop == "mate" or self.desktop == "MATE": if position == "top": return gsettings.get('org.mate.panel.toplevel', '/org/mate/panel/toplevels/top/', 'auto-hide', 'boolean') elif position == "bottom": return gsettings.get('org.mate.panel.toplevel', '/org/mate/panel/toplevels/bottom/', 'auto-hide', 'boolean') else: return False elif self.desktop == "ukui" or self.desktop == "UKUI": if position == "top": return gsettings.get('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/top/', 'auto-hide', 'boolean') elif position == "bottom": return gsettings.get('org.ukui.panel.toplevel', '/org/ukui/panel/toplevels/bottom/', 'auto-hide', 'boolean') else: return False def get_show_apps(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.panel.menubar', None, 'show-applications', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.panel.menubar', None, 'show-applications', 'boolean') def set_show_apps(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.panel.menubar', None, 'show-applications', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.panel.menubar', None, 'show-applications', 'boolean', flag) def get_show_desktop(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.panel.menubar', None, 'show-desktop', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.panel.menubar', None, 'show-desktop', 'boolean') def set_show_desktop(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.panel.menubar', None, 'show-desktop', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.panel.menubar', None, 'show-desktop', 'boolean', flag) def get_show_icon(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.panel.menubar', None, 'show-icon', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.panel.menubar', None, 'show-icon', 'boolean') def set_show_icon(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.panel.menubar', None, 'show-icon', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.panel.menubar', None, 'show-icon', 'boolean', flag) def get_show_places(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.panel.menubar', None, 'show-places', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.panel.menubar', None, 'show-places', 'boolean') def set_show_places(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.panel.menubar', None, 'show-places', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.panel.menubar', None, 'show-places', 'boolean', flag) if __name__ == '__main__': uuu = Unity() # print uuu.get_launcher_icon_colouring() # print uuu.set_launcher_icon_colouring(1) print(uuu.get_time_format()) # bb = uuu.get_default_schema_value("unityshell", "icon_size") # aa = uuu.get_default_schema_value("unityshell", "launcher_hide_mode") #aa = uuu.get_default_schema_value('org.gnome.desktop.media-handling', 'automount') #uuu = Unity("unityshell", "icon_size") #aa = uuu.get_launcher_icon_size_test() #print "bb->" #print bb #print "aa->" #print aa #uuu.set_default_schema_value('icon-size', 'int', bb) # cc = uuu.get_default_launcher_have_showdesktopicon() # print cc #uuu.set_default_schema_value('launcher-hide-mode', 'int', aa) #bb = uuu.get_default_launcher_icon_size() #print "bb->" #print bb #print(type(bb)) #uuu.reset_default_launcher_icon_size(bb) #uuu.set_launcher_icon_size(48) # print uuu.get_launcher_icon_size() # print uuu.get_launcher_have_showdesktopicon() # uuu.set_launcher_autohide(0) # print uuu.get_launcher_autohide() # uuu.set_launcher_have_showdesktopicon(True) # uuu.set_launcher_icon_size(48) youker-assistant/backends/kylin-assistant-daemon/src/beautify/cloudconfig.py0000664000175000017500000007511213260315532026450 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import configparser import os, sys import threading from . import gsettings from shutil import copy class CloudConfig(threading.Thread): def __init__(self, sysdaemon): self.sysdaemon = sysdaemon self.conf = configparser.ConfigParser() self.home = os.path.expandvars('$HOME') self.youker_path = './' self.kuaipan_path = '' # write profiles def write_conf(self, section, conf_id, conf_schema, conf_path, conf_key, conf_type): value = gsettings.get(conf_schema, conf_path, conf_key, conf_type) if (conf_id in section): self.conf.set(conf_id, 'value', str(value)) else: self.conf.add_section(conf_id) self.conf.set(conf_id, 'schema', conf_schema) self.conf.set(conf_id, 'path', conf_path) self.conf.set(conf_id, 'key', conf_key) self.conf.set(conf_id, 'type', conf_type) self.conf.set(conf_id, 'value', str(value)) # Save system configuration def save_configuration_to_local_file(self, file_name): pass # self.conf.read(file_name) # sections = self.conf.sections() # # 桌面图标显示控制----------------------------- # self.write_conf(sections, 'show_desktop_icons', # 'org.gnome.desktop.background', # None, 'show-desktop-icons', 'boolean') # self.write_conf(sections, 'show_homefolder', # 'org.gnome.nautilus.desktop', # None, 'home-icon-visible', 'boolean') # self.write_conf(sections, 'show_network', # 'org.gnome.nautilus.desktop', # None, 'network-icon-visible', 'boolean') # self.write_conf(sections, 'show_trash', # 'org.gnome.nautilus.desktop', # None, 'trash-icon-visible', 'boolean') # self.write_conf(sections, 'show_devices', # 'org.gnome.nautilus.desktop', # None, 'volumes-visible', 'boolean') # # 启动器设置---------------------------------- # self.write_conf(sections, 'launcher_autohide', # 'org.compiz.unityshell', # '/org/compiz/profiles/unity/plugins/unityshell/', # 'launcher-hide-mode', 'int') # self.write_conf(sections, 'launcher_icon_size', # 'org.compiz.unityshell', # '/org/compiz/profiles/unity/plugins/unityshell/', # 'icon-size', 'int') # # 触摸板设置----------------------------------- ## self.write_conf(sections, 'touchpad_enable', ## 'org.gnome.settings-daemon.peripherals.touchpad', ## None, 'touchpad-enabled', 'boolean') ## self.write_conf(sections, 'touch_horizontal_scrolling', ## 'org.gnome.settings-daemon.peripherals.touchpad', ## None, 'horiz-scroll-enabled', 'boolean') ## self.write_conf(sections, 'type_scroll_bar', ## 'com.canonical.desktop.interface', ## None, 'scrollbar-mode', 'string') ## self.write_conf(sections, 'touchpad_scrolling_mode', ## 'org.gnome.settings-daemon.peripherals.touchpad', ## None, 'scroll-method', 'string') # # 字体设置------------------------------------- # self.write_conf(sections, 'default_font', # 'org.gnome.desktop.interface', # None, 'font-name', 'string') # self.write_conf(sections, 'desktop_font', # 'org.gnome.nautilus.desktop', # None, 'font', 'string') # self.write_conf(sections, 'document_font', # 'org.gnome.desktop.interface', # None, 'document-font-name', 'string') # self.write_conf(sections, 'monospace_font', # 'org.gnome.desktop.interface', # None, 'monospace-font-name', 'string') # self.write_conf(sections, 'window_title_font', # 'org.gnome.desktop.wm.preferences', # None, 'titlebar-font', 'string') # self.write_conf(sections, 'font_zoom', # 'org.gnome.desktop.interface', # None, 'text-scaling-factor', 'double') # self.write_conf(sections, 'font_hinting', # 'org.gnome.settings-daemon.plugins.xsettings', # None, 'hinting', 'string') # self.write_conf(sections, 'font_antialiasing', # 'org.gnome.settings-daemon.plugins.xsettings', # None, 'antialiasing', 'string') # # 主题设置------------------------------------- # #self.write_conf(sections, 'gtk_theme', # # 'org.gnome.desktop.interface', # # None, 'gtk-theme', 'string') ## self.write_conf(sections, 'window_theme', ## 'org.gnome.desktop.wm.preferences', ## None, 'theme', 'string') # self.write_conf(sections, 'icon_theme', # 'org.gnome.desktop.interface', # None, 'icon-theme', 'string') # # 窗口设置-------------------------------------- # self.write_conf(sections, 'window_button', # 'org.gnome.desktop.wm.preferences', # None, 'button-layout', 'string') # self.write_conf(sections, 'menus_have_icons', # 'org.gnome.desktop.interface', # None, 'menus-have-icons', 'boolean') # self.write_conf(sections, 'titlebar_wheel', # 'org.compiz.gwd', # None, 'mouse-wheel-action', 'string') # self.write_conf(sections, 'titlebar_double', # 'org.gnome.desktop.wm.preferences', # None, 'action-double-click-titlebar', 'string') # self.write_conf(sections, 'titlebar_middle', # 'org.gnome.desktop.wm.preferences', # None, 'action-middle-click-titlebar', 'string') # self.write_conf(sections, 'titlebar_right', # 'org.gnome.desktop.wm.preferences', # None, 'action-right-click-titlebar', 'string') # # 文件管理器----------------------------------- # self.write_conf(sections, 'location_replace_pathbar', # 'org.gnome.nautilus.preferences', # None, 'always-use-location-entry', 'boolean') # self.write_conf(sections, 'auto_mount_media', # 'org.gnome.desktop.media-handling', # None, 'automount', 'boolean') # self.write_conf(sections, 'auto_open_folder', # 'org.gnome.desktop.media-handling', # None, 'automount-open', 'boolean') # self.write_conf(sections, 'prompt_autorun_programs', # 'org.gnome.desktop.media-handling', # None, 'autorun-never', 'boolean') # self.write_conf(sections, 'thumbnail_icon_size', # 'org.gnome.nautilus.icon-view', # None, 'thumbnail-size', 'int') # self.write_conf(sections, 'thumbnail_cache_time', # 'org.gnome.desktop.thumbnail-cache', # None, 'maximum-age', 'int') # self.write_conf(sections, 'thumbnail_cache_size', # 'org.gnome.desktop.thumbnail-cache', # None, 'maximum-size', 'int') # fd = open(file_name, 'w') # self.conf.write(fd) # fd.close() # system settings def setconf(self, conf_id): conf_schema = self.conf.get(conf_id, 'schema') conf_path = self.conf.get(conf_id, 'path') if conf_path == 'None': conf_path = None conf_key = self.conf.get(conf_id, 'key') conf_type = self.conf.get(conf_id, 'type') if conf_type == 'boolean' : conf_value = self.conf.getboolean(conf_id, 'value') elif conf_type == 'int' : conf_value = self.conf.getint(conf_id, 'value') elif conf_type == 'double' or conf_type == 'float' : conf_value = self.conf.getfloat(conf_id, 'value') else : conf_value = self.conf.get(conf_id, 'value') #gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) if conf_id == 'window_button': value = gsettings.get('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string') left_list = ['close,minimize,maximize:', 'close,maximize,minimize:'] right_list = [':minimize,maximize,close', ':maximize,minimize,close'] if value in left_list and conf_value in right_list: gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) self.sysdaemon.download_cloud_conf_signal('window_button') elif value in right_list and conf_value in left_list: gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) self.sysdaemon.download_cloud_conf_signal('window_button') else: value = gsettings.get(conf_schema, conf_path, conf_key, conf_type) if value != conf_value: gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) self.sysdaemon.download_cloud_conf_signal(conf_id) #----------------desktop icon settings---------------- #if conf_id == 'show_desktop_icons': # value = gsettings.get('org.gnome.desktop.background', # None, 'show-desktop-icons', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('show_desktop_icons') #elif conf_id == 'show_homefolder': # value = gsettings.get('org.gnome.nautilus.desktop', # None, 'home-icon-visible', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('show_homefolder') #elif conf_id == 'show_network': # value = gsettings.get('org.gnome.nautilus.desktop', # None, 'network-icon-visible', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('show_network') #elif conf_id == 'show_trash': # value = gsettings.get('org.gnome.nautilus.desktop', # None, 'trash-icon-visible', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('show_trash') #elif conf_id == 'show_devices': # value = gsettings.get('org.gnome.nautilus.desktop', # None, 'volumes-visible', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('show_devices') #----------------launcher settings---------------- #elif conf_id == 'launcher_autohide': # value = gsettings.get('org.compiz.unityshell', # '/org/compiz/profiles/unity/plugins/unityshell/', # 'launcher-hide-mode', 'int') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('launcher_autohide') #elif conf_id == 'launcher_icon_size': # value = gsettings.get('org.compiz.unityshell', # '/org/compiz/profiles/unity/plugins/unityshell/', # 'icon-size', 'int') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('launcher_icon_size') #----------------touchpad settings---------------- #elif conf_id == 'touchpad_enable': # value = gsettings.get('org.gnome.settings-daemon.peripherals.touchpad', # None, 'touchpad-enabled', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('touchpad_enable') #elif conf_id == 'touch_horizontal_scrolling': # value = gsettings.get('org.gnome.settings-daemon.peripherals.touchpad', # None, 'horiz-scroll-enabled', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('touch_horizontal_scrolling') #elif conf_id == 'type_scroll_bar': # value = gsettings.get('com.canonical.desktop.interface', # None, 'scrollbar-mode', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('type_scroll_bar') #elif conf_id == 'touchpad_scrolling_mode': # value = gsettings.get('org.gnome.settings-daemon.peripherals.touchpad', # None, 'scroll-method', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('touchpad_scrolling_mode') #----------------font settings---------------- #elif conf_id == 'default_font': # value = gsettings.get('org.gnome.desktop.interface', # None, 'font-name', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('default_font') #elif conf_id == 'desktop_font': # value = gsettings.get('org.gnome.nautilus.desktop', # None, 'font', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('desktop_font') #elif conf_id == 'document_font': # value = gsettings.get('org.gnome.desktop.interface', # None, 'document-font-name', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('document_font') #elif conf_id == 'monospace_font': # value = gsettings.get('org.gnome.desktop.interface', # None, 'monospace-font-name', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('monospace_font') #elif conf_id == 'window_title_font': # value = gsettings.get('org.gnome.desktop.wm.preferences', # None, 'titlebar-font', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('window_title_font') #elif conf_id == 'font_zoom': # value = gsettings.get('org.gnome.desktop.interface', # None, 'text-scaling-factor', 'double') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('font_zoom') #elif conf_id == 'font_hinting': # value = gsettings.get('org.gnome.settings-daemon.plugins.xsettings', # None, 'hinting', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('font_hinting') #elif conf_id == 'font_antialiasing': # value = gsettings.get('org.gnome.settings-daemon.plugins.xsettings', # None, 'antialiasing', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('font_antialiasing') #----------------theme settings---------------- #elif conf_id == 'gtk_theme': # value = gsettings.get('org.gnome.desktop.interface', # None, 'gtk-theme', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('gtk_theme') #elif conf_id == 'window_theme': # value = gsettings.get('org.gnome.desktop.wm.preferences', # None, 'theme', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('window_theme') #elif conf_id == 'icon_theme': # value = gsettings.get('org.gnome.desktop.interface', # None, 'icon-theme', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('icon_theme') #----------------window settings---------------- #elif conf_id == 'window_button': # value = gsettings.get('org.gnome.desktop.wm.preferences', # None, 'button-layout', 'string') # left_list = ['close,minimize,maximize:', 'close,maximize,minimize:'] # right_list = [':minimize,maximize,close', ':maximize,minimize,close'] # if value in left_list and conf_value in right_list: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('window_button') # elif value in right_list and conf_value in left_list: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('window_button') #elif conf_id == 'menus_have_icons': # value = gsettings.get('org.gnome.desktop.interface', # None, 'menus-have-icons', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('menus_have_icons') #elif conf_id == 'titlebar_wheel': # value = gsettings.get('org.compiz.gwd', # None, 'mouse-wheel-action', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('titlebar_wheel') #elif conf_id == 'titlebar_double': # value = gsettings.get('org.gnome.desktop.wm.preferences', # None, 'action-double-click-titlebar', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('titlebar_double') #elif conf_id == 'titlebar_middle': # value = gsettings.get('org.gnome.desktop.wm.preferences', # None, 'action-middle-click-titlebar', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('titlebar_middle') #elif conf_id == 'titlebar_right': # value = gsettings.get('org.gnome.desktop.wm.preferences', # None, 'action-right-click-titlebar', 'string') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('titlebar_right') #----------------file manager---------------- #elif conf_id == 'location_replace_pathbar': # value = gsettings.get('org.gnome.nautilus.preferences', # None, 'always-use-location-entry', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('location_replace_pathbar') #elif conf_id == 'auto_mount_media': # value = gsettings.get('org.gnome.desktop.media-handling', # None, 'automount', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('auto_mount_media') #elif conf_id == 'auto_open_folder': # value = gsettings.get('org.gnome.desktop.media-handling', # None, 'automount-open', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('auto_open_folder') #elif conf_id == 'prompt_autorun_programs': # value = gsettings.get('org.gnome.desktop.media-handling', # None, 'autorun-never', 'boolean') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('prompt_autorun_programs') #elif conf_id == 'thumbnail_icon_size': # value = gsettings.get('org.gnome.nautilus.icon-view', # None, 'thumbnail-size', 'int') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('thumbnail_icon_size') #elif conf_id == 'thumbnail_cache_time': # value = gsettings.get('org.gnome.desktop.thumbnail-cache', # None, 'maximum-age', 'int') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('thumbnail_cache_time') #elif conf_id == 'thumbnail_cache_size': # value = gsettings.get('org.gnome.desktop.thumbnail-cache', # None, 'maximum-size', 'int') # if value != conf_value: # gsettings.set(conf_schema, conf_path, conf_key, conf_type, conf_value) # self.sysdaemon.download_cloud_conf_signal('thumbnail_cache_size') # desktop icon settings #if conf_id == 'show_desktop_icons': # self.sysdaemon.download_cloud_conf_signal('show_desktop_icons') #elif conf_id == 'show_homefolder': # self.sysdaemon.download_cloud_conf_signal('show_homefolder') #elif conf_id == 'show_network': # self.sysdaemon.download_cloud_conf_signal('show_network') #elif conf_id == 'show_trash': # self.sysdaemon.download_cloud_conf_signal('show_trash') #elif conf_id == 'show_devices': # self.sysdaemon.download_cloud_conf_signal('show_devices') # launcher settings #elif conf_id == 'launcher_autohide': # self.sysdaemon.download_cloud_conf_signal('launcher_autohide') #elif conf_id == 'launcher_icon_size': # self.sysdaemon.download_cloud_conf_signal('launcher_icon_size') # touchpad settings #elif conf_id == 'touchpad_enable': # self.sysdaemon.download_cloud_conf_signal('touchpad_enable') #elif conf_id == 'touch_horizontal_scrolling': # self.sysdaemon.download_cloud_conf_signal('touch_horizontal_scrolling') #elif conf_id == 'type_scroll_bar': # self.sysdaemon.download_cloud_conf_signal('type_scroll_bar') #elif conf_id == 'touchpad_scrolling_mode': # self.sysdaemon.download_cloud_conf_signal('touchpad_scrolling_mode') # font settings #elif conf_id == 'default_font': # self.sysdaemon.download_cloud_conf_signal('default_font') #elif conf_id == 'desktop_font': # self.sysdaemon.download_cloud_conf_signal('desktop_font') #elif conf_id == 'document_font': # self.sysdaemon.download_cloud_conf_signal('document_font') #elif conf_id == 'monospace_font': # self.sysdaemon.download_cloud_conf_signal('monospace_font') #elif conf_id == 'window_title_font': # self.sysdaemon.download_cloud_conf_signal('window_title_font') #elif conf_id == 'font_zoom': # self.sysdaemon.download_cloud_conf_signal('font_zoom') #elif conf_id == 'font_hinting': # self.sysdaemon.download_cloud_conf_signal('font_hinting') #elif conf_id == 'font_antialiasing': # self.sysdaemon.download_cloud_conf_signal('font_antialiasing') # theme settings #elif conf_id == 'gtk_theme': # self.sysdaemon.download_cloud_conf_signal('gtk_theme') #elif conf_id == 'window_theme': # self.sysdaemon.download_cloud_conf_signal('window_theme') #elif conf_id == 'icon_theme': # self.sysdaemon.download_cloud_conf_signal('icon_theme') # window settings #elif conf_id == 'window_button': # self.sysdaemon.download_cloud_conf_signal('window_button') #elif conf_id == 'menus_have_icons': # self.sysdaemon.download_cloud_conf_signal('menus_have_icons') #elif conf_id == 'titlebar_wheel': # self.sysdaemon.download_cloud_conf_signal('titlebar_wheel') #elif conf_id == 'titlebar_double': # self.sysdaemon.download_cloud_conf_signal('titlebar_double') #elif conf_id == 'titlebar_middle': # self.sysdaemon.download_cloud_conf_signal('titlebar_middle') #elif conf_id == 'titlebar_right': # self.sysdaemon.download_cloud_conf_signal('titlebar_right') # file manager #elif conf_id == 'location_replace_pathbar': # self.sysdaemon.download_cloud_conf_signal('location_replace_pathbar') #elif conf_id == 'auto_mount_media': # self.sysdaemon.download_cloud_conf_signal('auto_mount_media') #elif conf_id == 'auto_open_folder': # self.sysdaemon.download_cloud_conf_signal('auto_open_folder') #elif conf_id == 'prompt_autorun_programs': # self.sysdaemon.download_cloud_conf_signal('prompt_autorun_programs') #elif conf_id == 'thumbnail_icon_size': # self.sysdaemon.download_cloud_conf_signal('thumbnail_icon_size') #elif conf_id == 'thumbnail_cache_time': # self.sysdaemon.download_cloud_conf_signal('thumbnail_cache_time') #elif conf_id == 'thumbnail_cache_size': # self.sysdaemon.download_cloud_conf_signal('thumbnail_cache_size') # Restore the system configuration def use_cloud_configuration(self, file_name): print(file_name) self.conf.read(file_name) sections = self.conf.sections() for conf_id in sections: self.setconf(conf_id) return True # Get kuaipan directory address def get_kuaipan_path(self): kpconf = configparser.ConfigParser() kpconf.read(self.home + '/.config/ubuntukylin/kuaipan4uk.conf') return kpconf.get('client-info', 'Root') # Determine whether kuaipan process starts def kuaipan_run(self): ps = os.popen('pgrep kuaipan4uk') kuaipan_ps = ps.read() ps.close() return kuaipan_ps # Configuration file upload def real_upload_kysoft_cloud_conf(self): if not self.kuaipan_run(): # 快盘没有启动或没有安装,提示用户安装并启动快盘才能上传 self.sysdaemon.upload_cloud_conf_signal('upload_norun') return self.kuaipan_path = self.get_kuaipan_path() + '/[Ubuntu Kylin Sync]' if not os.path.isdir(self.kuaipan_path): os.makedirs(self.kuaipan_path) self.kuaipan_path = self.kuaipan_path + '/kylin-assistant' if not os.path.isdir(self.kuaipan_path): os.makedirs(self.kuaipan_path) self.youker_path = self.home + '/.config/ubuntukylin/kylin-assistant/' youker_abs_path = self.youker_path + 'kylin-settings-cloud.conf' self.save_configuration_to_local_file(youker_abs_path) copy(youker_abs_path, self.kuaipan_path) self.sysdaemon.upload_cloud_conf_signal('upload_ok') # Configuration file download def real_download_kysoft_cloud_conf(self): if not self.kuaipan_run(): # 快盘没有启动或没有安装,提示用户安装并启动快盘才能下载 self.sysdaemon.download_cloud_conf_signal('download_norun') return self.youker_path = self.home + '/.config/ubuntukylin/kylin-assistant/' youker_abs_path = self.youker_path + 'kylin-settings-cloud.conf' if not os.path.exists(youker_abs_path): os.mknod(youker_abs_path) cloud_abs_path = self.get_kuaipan_path() + '/[Ubuntu Kylin Sync]/kylin-assistant/kylin-settings-cloud.conf' if not os.path.isfile(cloud_abs_path): # 云端没有备份的配置文件 self.sysdaemon.download_cloud_conf_signal('download_notconf') return copy(cloud_abs_path, self.youker_path) self.use_cloud_configuration(youker_abs_path) self.sysdaemon.download_cloud_conf_signal('download_ok') def upload_kysoft_cloud_conf(self): threading.Thread(target=self.real_upload_kysoft_cloud_conf, name='UpLoad').start() def download_kysoft_cloud_conf(self): threading.Thread(target=self.real_download_kysoft_cloud_conf, name='DownLoad').start() if __name__ == '__main__': pass #cc = CloudConfig(None) #cc.upload_kysoft_cloud_conf() #cc.download_kysoft_cloud_conf() youker-assistant/backends/kylin-assistant-daemon/src/beautify/sound.py0000664000175000017500000002142013260315532025275 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import shutil from . import gsettings from . import utils class Sound: homedir = '' desktop = None def __init__(self): self.homedir = utils.get_home_dir() self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') # sometimes need set homedir manual fe:the backend run by root dbus def set_homedir(self, homedir): self.homedir = homedir # -----------------默认值----------------- # Get Default Value def get_default_schema_value(self, schema, key): return gsettings.get_schema_value(schema, key) # Set Default Value def set_default_schema_value(self, schema, key, type): default_value = self.get_default_schema_value(schema, key) if default_value is not None: return gsettings.set(schema, None, key, type, default_value) else: raise NotImplemented # ---------------------------------- def set_input_feedback_sounds_enable(self, flag): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.sound', None, 'input-feedback-sounds', 'boolean', flag) else: return gsettings.set('org.gnome.desktop.sound', None, 'input-feedback-sounds', 'boolean', flag) def get_input_feedback_sounds_enable(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.sound', None, 'input-feedback-sounds', 'boolean') else: return gsettings.get('org.gnome.desktop.sound', None, 'input-feedback-sounds', 'boolean') def set_sound_event_enable(self, flag): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.sound', None, 'event-sounds', 'boolean', flag) else: return gsettings.set('org.gnome.desktop.sound', None, 'event-sounds', 'boolean', flag) def get_sound_event_enable(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.sound', None, 'event-sounds', 'boolean') else: return gsettings.get('org.gnome.desktop.sound', None, 'event-sounds', 'boolean') # enable the login music def set_login_music_enable(self, flag): configdir = self.homedir + '/.config/autostart' desktopfile = '/var/lib/kylin-assistant-daemon/autostart/libcanberra-login-sound.desktop' targetfile = configdir + '/libcanberra-login-sound.desktop' if flag: if os.path.exists(configdir): pass else: os.makedirs(configdir) shutil.copy(desktopfile, targetfile) else: if os.path.exists(targetfile): os.remove(targetfile) else: pass # get enable the login music. need fix text check in 'libcanberra-login-sound.desktop' def get_login_music_enable(self): targetfile = self.homedir + '/.config/autostart/libcanberra-login-sound.desktop' if os.path.exists(targetfile): return True else: return False # get sound themes & check and bak sounds def get_sound_themes(self): bakDir = '/var/lib/kylin-assistant-daemon/sound-theme/' dirs = ('/usr/share/sounds', os.path.join(self.homedir, ".sounds")) filters = ('index.theme', '') valid = utils.check_dirs(dirs, filters, True) valid.sort() # check and bak sounds for st in valid: if(os.path.exists(bakDir + st) == False): if(os.path.exists('/usr/share/sounds/' + st)): shutil.copytree('/usr/share/sounds/' + st, bakDir + st) else: shutil.copytree(self.homedir + '.sounds/' + st, bakDir + st) return valid # get current sound theme def get_sound_theme(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.sound', None, 'theme-name', 'string') else: return gsettings.get('org.gnome.desktop.sound', None, 'theme-name', 'string') # set sound theme def set_sound_theme(self, theme): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gstheme = gsettings.get_schema('org.mate.sound') gstheme.set_string('theme-name',theme) else: gstheme = gsettings.get_schema('org.gnome.desktop.sound') gstheme.set_string('theme-name',theme) # get sounds in current theme def get_sounds(self): results = [] currentTheme = self.get_sound_theme() if(os.path.exists(os.path.join(self.homedir, ".sounds") + currentTheme)): soundDir = os.path.join(self.homedir, ".sounds") + currentTheme elif(os.path.exists('/usr/share/sounds/' + currentTheme)): soundDir = '/usr/share/sounds/' + currentTheme else: return results for sound in os.listdir(soundDir + '/stereo'): # pass the link file if(os.path.islink(soundDir + '/stereo/' + sound) == False): results.append(soundDir + '/stereo/' + sound) results.sort() return results # replace sound file def replace_sound_file(self, newSoundFile, targetSoundFile): newSoundFile = newSoundFile.encode('utf-8') targetSoundFile = targetSoundFile.encode('utf-8') currentTheme = self.get_sound_theme() if(os.path.exists(os.path.join(self.homedir, ".sounds") + currentTheme)): soundDir = os.path.join(self.homedir, ".sounds") + currentTheme elif(os.path.exists('/usr/share/sounds/' + currentTheme)): soundDir = '/usr/share/sounds/' + currentTheme else: pass shutil.copy(newSoundFile, soundDir + '/stereo/' + targetSoundFile) # restore sound file def restore_sound_file(self, targetSoundFile): targetSoundFile = targetSoundFile.encode('utf-8') bakDir = '/var/lib/kylin-assistant-daemon/sound-theme/' currentTheme = self.get_sound_theme() if(os.path.exists(os.path.join(self.homedir, ".sounds") + currentTheme)): soundDir = os.path.join(self.homedir, ".sounds") + currentTheme elif(os.path.exists('/usr/share/sounds/' + currentTheme)): soundDir = '/usr/share/sounds/' + currentTheme else: pass shutil.copy(bakDir + currentTheme + '/stereo/' + targetSoundFile, soundDir + '/stereo/' + targetSoundFile) # restore all sound file in current sound theme def restore_all_sound_file(self, soundTheme): bakSoundThemeDir = '/var/lib/kylin-assistant-daemon/sound-theme/' + soundTheme if(os.path.exists(os.path.join(self.homedir, ".sounds") + soundTheme)): soundDir = os.path.join(self.homedir, ".sounds") + soundTheme elif(os.path.exists('/usr/share/sounds/' + soundTheme)): soundDir = '/usr/share/sounds/' + soundTheme else: pass for soundFile in os.listdir(bakSoundThemeDir + '/stereo'): shutil.copy(bakSoundThemeDir + '/stereo/' + soundFile, soundDir + '/stereo/' + soundFile) if __name__ == '__main__': sss = Sound() # print sss.get_sound_themes() # sss.restore_all_sound_file('ubuntu') # print sss.get_login_music_enable() # sss.set_login_music_enable(False) # print sss.get_sound_themes() # print sss.get_sound_theme() print(sss.get_sounds()) # sss.set_sound_theme('freedesktop') youker-assistant/backends/kylin-assistant-daemon/src/beautify/settings.py0000664000175000017500000000757013260315532026017 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # # Author: Kobe Lee # Maintainer: Ubuntu Kylin # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE from gi.repository import Gio as gio import os, sys import types from .common import Schema #http://lazka.github.io/pgi-docs/api/Gio_2.0/classes/Settings.html class Settings: #db = None #BASE_KEY = "org.gnome.gedit.preferences.encodings" def __init__(self, schema): self.db = gio.Settings.new(schema) #def open_settings_db(self): # try: # self.db = gio.Settings.new(self.BASE_KEY) # except Exception as e: # print e def get_value(self, key, type): try: setting_type = type get_func = { int: self.db.get_int, bytes: self.db.get_string, bool: self.db.get_boolean, list: self.db.get_strv, dict: self.db.get_string, type(None): self.db.get_value, }[setting_type] return get_func(key) except Exception as e: print(e) return None def set_value(self, key, type, value): try: setting_type = type set_func = { int: self.db.set_int, bytes: self.db.set_string, bool: self.db.set_boolean, list: self.db.set_strv, dict: self.db.set_string, type(None): self.db.set_value, }[setting_type] set_func(key, value) except Exception as e: print(e) def get_schema_value(self, schema, key): schema_default = Schema.load_schema(schema, key) if schema_default is not None: return schema_default else: raise NotImplemented # kobe: test notify func # def connect_notify(self): # #def connect_notify(self, func, data=None): ## gs = gio.Settings("org.gnome.nautilus.desktop", None) # self.db.connect("changed::home-icon-visible", self.kobe_test) # def kobe_test(self, settings, key): # print "notify test success----------------------------" if __name__ == '__main__': #list_on = ['GB18030', 'UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] #list_off = ['UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] settings = Settings("org.gnome.gedit.preferences.encodings") ##settings.open_settings_db() #value = settings.get_value("auto-detected", types.ListType) #print type(value)# #print value #if value == list_off: # settings.set_value("auto-detected", types.ListType, list_on) #else: # settings.set_value("auto-detected", types.ListType, list_off) #settings = Settings("org.gnome.nautilus.preferences") #value = settings.get_value("always-use-location-entry", types.BooleanType) #settings = Settings("org.gnome.desktop.media-handling") #value = settings.get_value("automount", types.BooleanType) #print type(value)# #print value default_value = settings.get_schema_value("org.gnome.gedit.preferences.encodings", "auto-detected") print("default_value->") print(default_value) youker-assistant/backends/kylin-assistant-daemon/src/beautify/geditmanager.py0000664000175000017500000000667713260315532026615 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # # Author: Kobe Lee # Maintainer: Ubuntu Kylin # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from .settings import Settings import types class GeditManager: def __init__(self): self.default = None self.settings = Settings("org.gnome.gedit.preferences.encodings") # -----------------默认值----------------- # Get Default Value def get_default_schema_value(self, schema, key): return self.settings.get_schema_value(schema, key) # Set Default Value def set_default_schema_value(self, schema, key, type): default_value = self.get_default_schema_value(schema, key) if default_value is not None: return self.settings.set_value(key, type, default_value) else: raise NotImplemented # 在Gedit中自动检测简体中文编码 # on=['GB18030', 'UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] # off=['UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] # default = off # Get: Auto detect text encoding for Simplified Chinese in Gedit def get_detect_chinese_encoding(self): return self.settings.get_value("auto-detected", list) # Set: Auto detect text encoding for Simplified Chinese in Gedit def set_detect_chinese_encoding(self, flag): list_on = ['GB18030', 'UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] list_off = ['UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] if(flag): self.settings.set_value("auto-detected", list, list_off) else: self.settings.set_value("auto-detected", list, list_on) # Get Default Value: Auto detect text encoding for Simplified Chinese in Gedit #def get_default_detect_chinese_encoding(self): # self.default = self.settings.get_schema_value("auto-detected") # Set Default Value: Auto detect text encoding for Simplified Chinese in Gedit #def set_default_detect_chinese_encoding(self): # if self.default is not None: # self.settings.set_value("auto-detected", types.ListType, self.default) if __name__ == '__main__': gm = GeditManager() #aa = gm.get_detect_chinese_encoding() #print aa #list_on = ['GB18030', 'UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] #list_off = ['UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16'] #if aa == list_off: # gm.set_detect_chinese_encoding(False) #else: # gm.set_detect_chinese_encoding(True) #gm.get_default_detect_chinese_encoding() #print "default->" #print gm.default #gm.set_default_detect_chinese_encoding() #aa = gm.get_default_schema_value("org.gnome.gedit.preferences.encodings", "auto-detected") #print aa gm.set_default_schema_value("org.gnome.gedit.preferences.encodings", "auto-detected", list) youker-assistant/backends/kylin-assistant-daemon/src/beautify/filemanager.py0000664000175000017500000002746713263553572026453 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # # Author: Kobe Lee # Maintainer: Ubuntu Kylin # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from . import gsettings class FileManager: desktop = None def __init__(self): self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') # -----------------默认值----------------- # Get Default Value def get_default_schema_value(self, schema, key): return gsettings.get_schema_value(schema, key) # Set Default Value def set_default_schema_value(self, schema, key, type): default_value = self.get_default_schema_value(schema, key) if default_value is not None: return gsettings.set(schema, None, key, type, default_value) else: raise NotImplemented # -----------------使用路径输入框取代路径栏----------------- # Get: Use the location entry instead of the pathbar def get_location_replace_pathbar(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.preferences', None, 'always-use-location-entry', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.preferences', None, 'always-use-location-entry', 'boolean') else: return gsettings.get('org.gnome.nautilus.preferences', None, 'always-use-location-entry', 'boolean') # Set: Use the location entry instead of the pathbar def set_location_replace_pathbar(self, flag): #gstheme = gsettings.get_schema('org.gnome.desktop.sound') #gstheme.set_string('theme-name',theme) if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.preferences', None, 'always-use-location-entry', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.preferences', None, 'always-use-location-entry', 'boolean', flag) else: return gsettings.set('org.gnome.nautilus.preferences', None, 'always-use-location-entry', 'boolean', flag) # -----------------自动挂载媒体----------------- # Get: Automatically mount media def get_auto_mount_media(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.media-handling', None, 'automount', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.media-handling', None, 'automount', 'boolean') else: return gsettings.get('org.gnome.desktop.media-handling', None, 'automount', 'boolean') # Set: Automatically mount media def set_auto_mount_media(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.media-handling', None, 'automount', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.media-handling', None, 'automount', 'boolean', flag) else: return gsettings.set('org.gnome.desktop.media-handling', None, 'automount', 'boolean', flag) # -----------------自动打开文件夹----------------- # Get: Automatically open a folder def get_auto_open_folder(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.media-handling', None, 'automount-open', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.media-handling', None, 'automount-open', 'boolean') else: return gsettings.get('org.gnome.desktop.media-handling', None, 'automount-open', 'boolean') # Set: Automatically open a folder def set_auto_open_folder(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.media-handling', None, 'automount-open', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.media-handling', None, 'automount-open', 'boolean', flag) else: return gsettings.set('org.gnome.desktop.media-handling', None, 'automount-open', 'boolean', flag) # -----------------提示自动运行的程序----------------- # Get: Prompt or autorun/autostart programs def get_prompt_autorun_programs(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.media-handling', None, 'autorun-never', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.media-handling', None, 'autorun-never', 'boolean') else: return gsettings.get('org.gnome.desktop.media-handling', None, 'autorun-never', 'boolean') # Set: Prompt or autorun/autostart programs def set_prompt_autorun_programs(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.media-handling', None, 'autorun-never', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.media-handling', None, 'autorun-never', 'boolean', flag) else: return gsettings.set('org.gnome.desktop.media-handling', None, 'autorun-never', 'boolean', flag) # -----------------缩略图图标尺寸(像素) min=16, max=512, step=16, default=64----------------- # Get: Thumbnail icon size (pixels) def get_thumbnail_icon_size(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.icon-view', None, 'thumbnail-size', 'int') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.icon-view', None, 'thumbnail-size', 'int') else: return gsettings.get('org.gnome.nautilus.icon-view', None, 'thumbnail-size', 'int') # Set: Thumbnail icon size (pixels) def set_thumbnail_icon_size(self, size): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.icon-view', None, 'thumbnail-size', 'int', size) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.icon-view', None, 'thumbnail-size', 'int', size) else: return gsettings.set('org.gnome.nautilus.icon-view', None, 'thumbnail-size', 'int', size) # -----------------缩略图缓存时间(天数) min=-1, max=180, step=1, default=180----------------- # Get: Thumbnail cache time (days) def get_thumbnail_cache_time(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.thumbnail-cache', None, 'maximum-age', 'int') else: return gsettings.get('org.gnome.desktop.thumbnail-cache', None, 'maximum-age', 'int') # Set: Thumbnail cache time (days) def set_thumbnail_cache_time(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.thumbnail-cache', None, 'maximum-age', 'int', value) else: return gsettings.set('org.gnome.desktop.thumbnail-cache', None, 'maximum-age', 'int', value) # -----------------最大缩略图缓存尺寸(MB) min=-1, max=512, step=1, default=512----------------- # Get: Maximum thumbnail cache size (MB) def get_thumbnail_cache_size(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.thumbnail-cache', None, 'maximum-size', 'int') else: return gsettings.get('org.gnome.desktop.thumbnail-cache', None, 'maximum-size', 'int') # Set: Maximum thumbnail cache size (MB) def set_thumbnail_cache_size(self, size): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.thumbnail-cache', None, 'maximum-size', 'int', size) else: return gsettings.set('org.gnome.desktop.thumbnail-cache', None, 'maximum-size', 'int', size) if __name__ == '__main__': pass # fm = FileManager() #value = fm.get_location_replace_pathbar() #if(value): # print "yes" # fm.set_location_replace_pathbar(False) #else: # print "False" # fm.set_location_replace_pathbar(True) #value = fm.get_auto_mount_media() #if(value): # fm.set_auto_mount_media(False) #else: # fm.set_auto_mount_media(True) #value = fm.get_auto_open_folder() #if(value): # fm.set_auto_open_folder(False) #else: # fm.set_auto_open_folder(True) #value = fm.get_prompt_autorun_programs() #if(value): # fm.set_prompt_autorun_programs(False) #else: # fm.set_prompt_autorun_programs(True) #value = fm.get_thumbnail_icon_size() #if(value == 64): # fm.set_thumbnail_icon_size(48) #else: # fm.set_thumbnail_icon_size(64) #value = fm.get_thumbnail_cache_time() #if(value == 180): # fm.set_thumbnail_cache_time(120) #else: # fm.set_thumbnail_cache_time(180) #value = fm.get_thumbnail_cache_size() #aa = fm.test() #print aa #if(value == 512): # fm.set_thumbnail_cache_size(500) #else: # fm.set_thumbnail_cache_size(512) # aa = fm.get_default_schema_value('org.gnome.desktop.media-handling', 'automount') # print aa # #aa = fm.get_default_schema_value('org.gnome.desktop.media-handling', 'automount') # #print aa # #fm.set_default_schema_value('org.gnome.desktop.media-handling', 'automount', 'boolean') # bb = fm.get_default_schema_value('org.gnome.nautilus.desktop', 'font') # print bb youker-assistant/backends/kylin-assistant-daemon/src/beautify/utils.py0000664000175000017500000000346713260315532025320 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os # get ~ dir def get_home_dir(): return os.path.expanduser('~') # check dirs with given filters and filtertype def check_dirs(dirs, filters, filtertype): result = [] try: for onedir in dirs: if os.path.isdir(onedir): for f in os.listdir(onedir): if use_filters(os.path.join(onedir, f), filters, filtertype): result.append(f) except: pass return result # check the fpathdir with filters filtertype: True == include, False == exlude def use_filters(fpath, filters, filtertype): # not a directory if os.path.isdir(fpath) == False: return False if filtertype: for onefilter in filters: if os.path.exists(os.path.join(fpath, onefilter)): continue else: return False return True else: for onefilter in filters: if os.path.exists(os.path.join(fpath, onefilter)): return False else: continue return Trueyouker-assistant/backends/kylin-assistant-daemon/src/beautify/system.py0000664000175000017500000007004313263553572025511 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from . import gsettings import platform from gi.repository import Gio as gio class System(): desktop = None touchpad_remove = False def __init__(self, sysdaemon): self.sysdaemon = sysdaemon self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') release_info = platform.platform() # 20160119 if "org.gnome.settings-daemon.peripherals.touchpad" in gio.Settings.list_schemas(): self.touchpad_remove = False else: self.touchpad_remove = True # if "15.10-wily" in release_info: # self.touchpad_remove = True # -----------------默认值----------------- # Get Default Value def get_default_schema_value(self, schema, key): return gsettings.get_schema_value(schema, key) # Set Default Value def set_default_schema_value(self, schema, key, type): #fp = open("/tmp/default.txt", "w") #print >> fp, "--------------" #fp.close() default_value = self.get_default_schema_value(schema, key) if default_value is not None: gsettings.set(schema, None, key, type, default_value) if schema == "org.gnome.desktop.wm.preferences" and key == "button-layout": if default_value == 'close,maximize,minimize:' or default_value == 'close,minimize,maximize:': self.sysdaemon.change_titlebar_position('left') elif default_value == ':minimize,maximize,close': self.sysdaemon.change_titlebar_position('right') else: raise NotImplemented # ---------------scrollbars--------------- # set scrollbars mode overlay def set_scrollbars_mode_overlay(self): return gsettings.set('com.canonical.desktop.interface', None, 'scrollbar-mode', 'string', 'overlay-auto') # set scrollbars mode legacy def set_scrollbars_mode_legacy(self): return gsettings.set('com.canonical.desktop.interface', None, 'scrollbar-mode', 'string', 'normal') # get scrollbars mode def get_scrollbars_mode(self): return gsettings.get('com.canonical.desktop.interface', None, 'scrollbar-mode', 'string') # ---------------touchpad--------------- # enable/disable the touchpad def set_touchpad_enable(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peripherals-touchpad', None, 'touchpad-enabled', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peripherals-touchpad', None, 'touchpad-enabled', 'boolean', flag) else: # kobe1510 if self.touchpad_remove: return False else: return gsettings.set('org.gnome.settings-daemon.peripherals.touchpad', None, 'touchpad-enabled', 'boolean', flag) # get is touchpad enable def get_touchpad_enable(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peripherals-touchpad', None, 'touchpad-enabled', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peripherals-touchpad', None, 'touchpad-enabled', 'boolean') else: # kobe1510 if self.touchpad_remove: return False else: return gsettings.get('org.gnome.settings-daemon.peripherals.touchpad', None, 'touchpad-enabled', 'boolean') def set_touchscrolling_mode_disabled(self): # kobe1510 if self.touchpad_remove: return gsettings.set('org.gnome.desktop.peripherals.touchpad', None, 'scroll-method', 'string', 'disabled') else: return gsettings.set('org.gnome.settings-daemon.peripherals.touchpad', None, 'scroll-method', 'string', 'disabled') # set touch scrolling mode edge def set_touchscrolling_mode_edge(self): # kobe1510 if self.touchpad_remove: return gsettings.set('org.gnome.desktop.peripherals.touchpad', None, 'scroll-method', 'string', 'edge-scrolling') else: return gsettings.set('org.gnome.settings-daemon.peripherals.touchpad', None, 'scroll-method', 'string', 'edge-scrolling') # set touch scrolling mode two-finger def set_touchscrolling_mode_twofinger(self): # kobe1510 if self.touchpad_remove: return gsettings.set('org.gnome.desktop.peripherals.touchpad', None, 'scroll-method', 'string', 'two-finger-scrolling') else: return gsettings.set('org.gnome.settings-daemon.peripherals.touchpad', None, 'scroll-method', 'string', 'two-finger-scrolling') # get touchpad scrolling mode def get_touchscrolling_mode(self): # kobe1510 if self.touchpad_remove: return gsettings.get('org.gnome.desktop.peripherals.touchpad', None, 'scroll-method', 'string') else: return gsettings.get('org.gnome.settings-daemon.peripherals.touchpad', None, 'scroll-method', 'string') #----------------------------mate-------------------------- #选择触摸板滚动模式。支持的值有:0 - 禁止,1 - 边界滚动,2 - 双指滚动 def set_mate_touchscrolling_mode(self, value): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peripherals-touchpad', None, 'scroll-method', 'int', value) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peripherals-touchpad', None, 'scroll-method', 'int', value) def get_mate_touchscrolling_mode(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peripherals-touchpad', None, 'scroll-method', 'int') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peripherals-touchpad', None, 'scroll-method', 'int') # set touch scrolling use horizontal True/False def set_touchscrolling_use_horizontal(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peripherals-touchpad', None, 'horiz-scroll-enabled', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peripherals-touchpad', None, 'horiz-scroll-enabled', 'boolean', flag) else: # kobe1510 if self.touchpad_remove: return False else: return gsettings.set('org.gnome.settings-daemon.peripherals.touchpad', None, 'horiz-scroll-enabled', 'boolean', flag) # get is touch scrolling use horizontal def get_touchscrolling_use_horizontal(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.peripherals-touchpad', None, 'horiz-scroll-enabled', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peripherals-touchpad', None, 'horiz-scroll-enabled', 'boolean') else: # kobe1510 if self.touchpad_remove: return False else: return gsettings.get('org.gnome.settings-daemon.peripherals.touchpad', None, 'horiz-scroll-enabled', 'boolean') # ---------------window--------------- # set window button alignment left def set_window_button_align_left(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": value = gsettings.get('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string') if "menu" in value: gsettings.set('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string', 'close,maximize,minimize:menu') else: gsettings.set('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string', 'close,maximize,minimize') else: gsettings.set('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string', 'close,maximize,minimize:') self.sysdaemon.change_titlebar_position("left") #return gsettings.set('org.gnome.desktop.wm.preferences', # None, # 'button-layout', # 'string', 'close,maximize,minimize:')#close,minimize,maximize: # set window button alignment right def set_window_button_align_right(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": value = gsettings.get('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string') if "menu" in value: gsettings.set('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string', 'menu:minimize,maximize,close') else: gsettings.set('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string', ':minimize,maximize,close') else: gsettings.set('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string', ':minimize,maximize,close') self.sysdaemon.change_titlebar_position("right") #return gsettings.set('org.gnome.desktop.wm.preferences', # None, # 'button-layout', # 'string', ':minimize,maximize,close') # get window button alignment def get_window_button_align(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": value = gsettings.get('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string') if value == 'close,maximize,minimize:menu' or value == 'close,minimize,maximize:menu' or value == 'close,minimize,maximize:' or value == 'close,maximize,minimize:': return 'left' elif value == 'menu:minimize,maximize,close' or value == 'menu:maximize,minimize,close' or value == ':minimize,maximize,close' or value == ':maximize,minimize,close': return 'right' else: value = gsettings.get('org.gnome.desktop.wm.preferences', None, 'button-layout', 'string') if value == 'close,maximize,minimize:' or value == 'close,minimize,maximize:': return 'left' elif value == ':minimize,maximize,close' or value == ':maximize,minimize,close': return 'right' #elif value == 'close,minimize,maximize:': # return 'default' else: return 'custom' # set right click menus have icons 菜单带图标 是否可在菜单项旁显示图标。 def set_menus_have_icons(self, flag): return gsettings.set('org.gnome.desktop.interface', None, 'menus-have-icons', 'boolean', flag) # get is right click menus have icons def get_menus_have_icons(self): return gsettings.get('org.gnome.desktop.interface', None, 'menus-have-icons', 'boolean') #-----------------------窗口控制按钮位置---------------------- # get window button #def get_window_button(self): # return ['close,minimize,maximize:', ':minimize,maximize,close'] #左边/右边 # get current window button #def get_current_window_button(self): # return gsettings.get('org.gnome.desktop.wm.preferences', # None, 'button-layout', 'string') # set window button #def set_window_button(self, value): # return gsettings.set('org.gnome.desktop.wm.preferences', # None, # 'button-layout', # 'string', value) #-----------------------标题栏鼠标滚轮动作--------------------- # get titlebar wheel def get_titlebar_wheel(self): return ['none', 'shade'] # get current titlebar wheel def get_current_titlebar_wheel(self): return gsettings.get('org.compiz.gwd', None, 'mouse-wheel-action', 'string') # set titlebar wheel def set_titlebar_wheel(self, value): return gsettings.set('org.compiz.gwd', None, 'mouse-wheel-action', 'string', value) #-------------------------标题栏双击动作------------------------- # “toggle-shade”卷起/展开窗口,“toggle-maximize”最大化/还原窗口, #“toggle-maximize-horizontally”及“toggle-maximize-vertically”横向及纵向最大化/还原窗口, #“minimize”最小化窗口,“shade”卷起窗口, #“menu”显示窗口菜单,“lower”将窗口降低到所有窗口之下,还有“none”什么也不做。 # get titlebar double def get_titlebar_options(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return ['none', 'toggle_maximize', 'toggle_maximize_horizontally', 'toggle_maximize_vertically', 'minimize', 'toggle_shade', 'lower', 'menu', 'last'] else: return ['none', 'toggle-maximize', 'toggle-maximize-horizontally', 'toggle-maximize-vertically', 'minimize', 'toggle-shade', 'lower', 'menu', 'last'] # get current titlebar double def get_current_titlebar_double(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.gnome.desktop.wm.preferences', None, 'action-double-click-titlebar', 'string') else: return gsettings.get('org.gnome.desktop.wm.preferences', None, 'action-double-click-titlebar', 'string') # set titlebar double def set_titlebar_double(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.gnome.desktop.wm.preferences', None, 'action-double-click-titlebar', 'string', value) else: return gsettings.set('org.gnome.desktop.wm.preferences', None, 'action-double-click-titlebar', 'string', value) #-------------------------标题栏中键动作------------------------- # get titlebar middle def get_titlebar_middle(self): return ['none', 'toggle-maximize', 'toggle-maximize-horizontally', 'toggle-maximize-vertically', 'minimize', 'toggle-shade', 'lower', 'menu', 'last'] # get current titlebar middle def get_current_titlebar_middle(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.gnome.desktop.wm.preferences', None, 'action-middle-click-titlebar', 'string') else: return gsettings.get('org.gnome.desktop.wm.preferences', None, 'action-middle-click-titlebar', 'string') # set titlebar middle def set_titlebar_middle(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.gnome.desktop.wm.preferences', None, 'action-middle-click-titlebar', 'string', value) else: return gsettings.set('org.gnome.desktop.wm.preferences', None, 'action-middle-click-titlebar', 'string', value) #-------------------------标题栏右键动作------------------------- # get titlebar right def get_titlebar_right(self): return ['none', 'toggle-maximize', 'toggle-maximize-horizontally', 'toggle-maximize-vertically', 'minimize', 'toggle-shade', 'lower', 'menu', 'last'] # get current titlebar right def get_current_titlebar_right(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.gnome.desktop.wm.preferences', None, 'action-right-click-titlebar', 'string') else: return gsettings.get('org.gnome.desktop.wm.preferences', None, 'action-right-click-titlebar', 'string') # set titlebar right def set_titlebar_right(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.gnome.desktop.wm.preferences', None, 'action-right-click-titlebar', 'string', value) else: return gsettings.set('org.gnome.desktop.wm.preferences', None, 'action-right-click-titlebar', 'string', value) def get_current_idle_delay(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.session', None, 'idle-delay', 'int') else: return gsettings.get('org.gnome.desktop.session', None, 'idle-delay', 'uint') def set_current_idle_delay(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.session', None, 'idle-delay', 'int', value) else: gsettings.set('org.gnome.desktop.session', None, 'idle-delay', 'uint', value) def get_lock_enabled(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.screensaver', None, 'lock-enabled', 'boolean') else: return gsettings.get('org.gnome.desktop.screensaver', None, 'lock-enabled', 'boolean') def set_lock_enabled(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.screensaver', None, 'lock-enabled', 'boolean', value) else: gsettings.set('org.gnome.desktop.screensaver', None, 'lock-enabled', 'boolean', value) def get_current_lock_delay(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.screensaver', None, 'lock-delay', 'int') else: return gsettings.get('org.gnome.desktop.screensaver', None, 'lock-delay', 'uint') def set_current_lock_delay(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.screensaver', None, 'lock-delay', 'int', value) else: gsettings.set('org.gnome.desktop.screensaver', None, 'lock-delay', 'uint', value) def get_current_critical_low(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.power-manager', None, 'action-critical-battery', 'string') else: return gsettings.get('org.gnome.settings-daemon.plugins.power', None, 'critical-battery-action', 'string') def set_current_critical_low(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.power-manager', None, 'action-critical-battery', 'string', value) else: gsettings.set('org.gnome.settings-daemon.plugins.power', None, 'critical-battery-action', 'string', value) def get_current_lid_battery(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.power-manager', None, 'button-lid-battery', 'string') else: return gsettings.get('org.gnome.settings-daemon.plugins.power', None, 'lid-close-battery-action', 'string') def set_current_lid_battery(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.power-manager', None, 'button-lid-battery', 'string', value) else: gsettings.set('org.gnome.settings-daemon.plugins.power', None, 'lid-close-battery-action', 'string', value) def get_current_lid_ac(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.power-manager', None, 'button-lid-ac', 'string') else: return gsettings.get('org.gnome.settings-daemon.plugins.power', None, 'lid-close-ac-action', 'string') def set_current_lid_ac(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.power-manager', None, 'button-lid-ac', 'string', value) else: gsettings.set('org.gnome.settings-daemon.plugins.power', None, 'lid-close-ac-action', 'string', value) #---------------------------------------------------------------------- def get_current_sleep_timeout_display_battery(self): return gsettings.get('org.mate.power-manager', None, 'sleep-display-battery', 'int') def set_current_sleep_timeout_display_battery(self, value): gsettings.set('org.mate.power-manager', None, 'sleep-display-battery', 'int', value) def get_current_sleep_timeout_display_ac(self): return gsettings.get('org.mate.power-manager', None, 'sleep-display-ac', 'int') def set_current_sleep_timeout_display_ac(self, value): gsettings.set('org.mate.power-manager', None, 'sleep-display-ac', 'int', value) #---------------------------------------------------------------------- def get_current_sleep_timeout_battery(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.power-manager', None, 'sleep-computer-battery', 'int') else: return gsettings.get('org.gnome.settings-daemon.plugins.power', None, 'sleep-inactive-battery-timeout', 'int') def set_current_sleep_timeout_battery(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.power-manager', None, 'sleep-computer-battery', 'int', value) else: gsettings.set('org.gnome.settings-daemon.plugins.power', None, 'sleep-inactive-battery-timeout', 'int', value) def get_current_sleep_timeout_ac(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.power-manager', None, 'sleep-computer-ac', 'int') else: return gsettings.get('org.gnome.settings-daemon.plugins.power', None, 'sleep-inactive-ac-timeout', 'int') def set_current_sleep_timeout_ac(self, value): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gsettings.set('org.mate.power-manager', None, 'sleep-computer-ac', 'int', value) else: gsettings.set('org.gnome.settings-daemon.plugins.power', None, 'sleep-inactive-ac-timeout', 'int', value) if __name__ == '__main__': gsettings.set('org.compiz.gwd',None,'mouse-wheel-action', 'string', 'shade') # sss = System(None) # print sss.set_titlebar_wheel('shade') #aa = sss.get_default_schema_value('org.gnome.settings-daemon.peripherals.touchpad', 'touchpad-enabled') #print aa#True #sss.set_default_schema_value('org.gnome.settings-daemon.peripherals.touchpad', 'touchpad-enabled', 'boolean') #bb = sss.get_default_schema_value('com.canonical.desktop.interface', 'scrollbar-mode') #print bb#overlay-auto #sss.set_default_schema_value('com.canonical.desktop.interface', 'scrollbar-mode', 'string') #cc = sss.get_default_schema_value('org.gnome.settings-daemon.peripherals.touchpad', 'scroll-method') #print cc#two-finger-scrolling #sss.set_default_schema_value('org.gnome.settings-daemon.peripherals.touchpad', 'scroll-method', 'string') # dd = sss.get_default_schema_value('org.gnome.settings-daemon.peripherals.touchpad', 'horiz-scroll-enabled') # print dd#True #sss.set_default_schema_value('org.gnome.settings-daemon.peripherals.touchpad', 'horiz-scroll-enabled', 'boolean') #print sss.get_scrollbars_mode() #print sss.get_touchpad_enable() #print sss.get_touchscrolling_mode() #print sss.get_touchscrolling_use_horizontal() #print sss.get_window_button_align() #print sss.get_menus_have_icons() # sss.set_menus_have_icons(True) # sss.set_touchpad_enable(True) #sss.set_scrollbars_mode_overlay() # sss.set_scrollbars_mode_legacy() # sss.set_touchscrolling_mode_edge() #sss.set_touchscrolling_mode_twofinger() #sss.set_touchscrolling_use_horizontal(True) # sss.set_window_button_align_left() # sss.set_window_button_align_right() youker-assistant/backends/kylin-assistant-daemon/src/beautify/compizsettings.py0000664000175000017500000000625013260315532027233 0ustar fengfeng#! /usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2007-2011 Tualatrix Chou # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is 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, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA import logging from . import ccm import compizconfig log = logging.getLogger('CompizSetting') class CompizPlugin: context = compizconfig.Context() def __init__(self, name): self._plugin = self.context.Plugins[name] @classmethod def set_plugin_active(cls, name, active): try: plugin = cls.context.Plugins[name] plugin.Enabled = int(active) cls.context.Write() except: pass @classmethod def get_plugin_active(cls, name): try: plugin = cls.context.Plugins[name] return bool(plugin.Enabled) except: return False def set_enabled(self, bool): self._plugin.Enabled = int(bool) self.save() def get_enabled(self): return self._plugin.Enabled def save(self): self.context.Write() def resolve_conflict(self): conflicts = self.get_enabled() and self._plugin.DisableConflicts or \ self._plugin.EnableConflicts conflict = ccm.PluginConflict(self._plugin, conflicts) return conflict.Resolve() @classmethod def is_available(cls, name, setting): return name in cls.context.Plugins and \ setting in cls.context.Plugins[name].Screen def create_setting(self, key, target): settings = self._plugin.Screen if type(settings) == list: return settings[0][key] else: return settings[key] class CompizSetting(object): def __init__(self, key, target=''): plugin_name, setting_name = key.split('.') self.key = key self._plugin = CompizPlugin(plugin_name) if not self._plugin.get_enabled(): self._plugin.set_enabled(True) self._setting = self._plugin.create_setting(setting_name, target) def set_value(self, value): self._setting.Value = value self._plugin.save() def get_value(self): return self._setting.Value def is_default_and_enabled(self): return self._setting.Value == self._setting.DefaultValue and \ self._plugin.get_enabled() def reset(self): self._setting.Reset() self._plugin.save() def resolve_conflict(self): return self._plugin.resolve_conflict() def get_schema_value(self): return self._setting.DefaultValue youker-assistant/backends/kylin-assistant-daemon/src/beautify/desktop.py0000664000175000017500000002461413263553572025641 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from . import gsettings class Desktop: desktop = None def __init__(self): self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') # ---------------desktopicon--------------- # -----------------默认值----------------- # Get Default Value def get_default_schema_value(self, schema, key): return gsettings.get_schema_value(schema, key) # Set Default Value def set_default_schema_value(self, schema, key, type): default_value = self.get_default_schema_value(schema, key) if default_value is not None: return gsettings.set(schema, None, key, type, default_value) else: raise NotImplemented # ---------------------------------- # show desktop icons, True/False def set_show_desktop_icons(self, flag): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.background', None, 'show-desktop-icons', 'boolean', flag) else: return gsettings.set('org.gnome.desktop.background', None, 'show-desktop-icons', 'boolean', flag) # get is show desktop icons def get_show_desktop_icons(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.background', None, 'show-desktop-icons', 'boolean') else: return gsettings.get('org.gnome.desktop.background', None, 'show-desktop-icons', 'boolean') def set_show_computer(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.desktop', None, 'computer-icon-visible', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.desktop', None, 'computer-icon-visible', 'boolean', flag) def get_show_computer(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.desktop', None, 'computer-icon-visible', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.desktop', None, 'computer-icon-visible', 'boolean') # show home folder def set_show_homefolder(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.desktop', None, 'home-icon-visible', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.desktop', None, 'home-icon-visible', 'boolean', flag) else: return gsettings.set('org.gnome.nautilus.desktop', None, 'home-icon-visible', 'boolean', flag) # get show homefolder def get_show_homefolder(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.desktop', None, 'home-icon-visible', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.desktop', None, 'home-icon-visible', 'boolean') else: return gsettings.get('org.gnome.nautilus.desktop', None, 'home-icon-visible', 'boolean') # show network def set_show_network(self, flag): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.desktop', None, 'network-icon-visible', 'boolean', flag) else: return gsettings.set('org.gnome.nautilus.desktop', None, 'network-icon-visible', 'boolean', flag) # get show network def get_show_network(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.desktop', None, 'network-icon-visible', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.desktop', None, 'network-icon-visible', 'boolean') else: return gsettings.get('org.gnome.nautilus.desktop', None, 'network-icon-visible', 'boolean') # show trash def set_show_trash(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.desktop', None, 'trash-icon-visible', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.desktop', None, 'trash-icon-visible', 'boolean', flag) else: return gsettings.set('org.gnome.nautilus.desktop', None, 'trash-icon-visible', 'boolean', flag) # get show trash def get_show_trash(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.desktop', None, 'trash-icon-visible', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.desktop', None, 'trash-icon-visible', 'boolean') else: return gsettings.get('org.gnome.nautilus.desktop', None, 'trash-icon-visible', 'boolean') # show devices def set_show_devices(self, flag): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.desktop', None, 'volumes-visible', 'boolean', flag) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.desktop', None, 'volumes-visible', 'boolean', flag) else: return gsettings.set('org.gnome.nautilus.desktop', None, 'volumes-visible', 'boolean', flag) # get show devices def get_show_devices(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.desktop', None, 'volumes-visible', 'boolean') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.desktop', None, 'volumes-visible', 'boolean') else: return gsettings.get('org.gnome.nautilus.desktop', None, 'volumes-visible', 'boolean') #-------------------------cinnamon-------------------------------- # show desktop icons, True/False def set_show_cinnamon_desktop_icons(self, flag): return gsettings.set('org.nemo.desktop', None, 'show-desktop-icons', 'boolean', flag) # get is show desktop icons def get_show_cinnamon_desktop_icons(self): return gsettings.get('org.nemo.desktop', None, 'show-desktop-icons', 'boolean') def set_show_cinnamon_computer(self, flag): return gsettings.set('org.nemo.desktop', None, 'computer-icon-visible', 'boolean', flag) def get_show_cinnamon_computer(self): return gsettings.get('org.nemo.desktop', None, 'computer-icon-visible', 'boolean') # show home folder def set_show_cinnamon_homefolder(self, flag): return gsettings.set('org.nemo.desktop', None, 'home-icon-visible', 'boolean', flag) # get show homefolder def get_show_cinnamon_homefolder(self): return gsettings.get('org.nemo.desktop', None, 'home-icon-visible', 'boolean') # show network def set_show_cinnamon_network(self, flag): return gsettings.set('org.nemo.desktop', None, 'network-icon-visible', 'boolean', flag) # get show network def get_show_cinnamon_network(self): return gsettings.get('org.nemo.desktop', None, 'network-icon-visible', 'boolean') # show trash def set_show_cinnamon_trash(self, flag): return gsettings.set('org.nemo.desktop', None, 'trash-icon-visible', 'boolean', flag) # get show trash def get_show_cinnamon_trash(self): return gsettings.get('org.nemo.desktop', None, 'trash-icon-visible', 'boolean') # show devices def set_show_cinnamon_devices(self, flag): return gsettings.set('org.nemo.desktop', None, 'volumes-visible', 'boolean', flag) # get show devices def get_show_cinnamon_devices(self): return gsettings.get('org.nemo.desktop', None, 'volumes-visible', 'boolean') # if __name__ == '__main__': # ddd = Desktop() # print ddd.get_show_desktop_icons() # print ddd.get_show_homefolder() # print ddd.get_show_network() # print ddd.get_show_trash() # print ddd.get_show_devices() # ddd.set_show_desktop_icons(True) # ddd.set_show_homefolder(True) # ddd.set_show_network(True) # ddd.set_show_trash(True) # ddd.set_show_devices(True) youker-assistant/backends/kylin-assistant-daemon/src/beautify/__init__.py0000664000175000017500000000002313260315532025700 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/src/beautify/gsettings.py0000664000175000017500000000323713260315532026162 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE from gi.repository import Gio as gio from .common import Schema import logging logger=logging.getLogger('kylin-assistant-daemon') def get(schema, path, key, type): try: gs = gio.Settings(schema, path) return gs.__getattribute__('get_' + type)(key) except: logger.debug("gsettings.get: can't find value for %s" % gs) return None def set(schema, path, key, type, value): try: gs = gio.Settings(schema, path) gs.__getattribute__('set_' + type)(key, value) return True except: logger.debug("gsettings.set: can't find value for %s" % gs) return False def get_schema(schema): return gio.Settings(schema) # added by kobe: access default schema value def get_schema_value(schema, key): schema_default = Schema.load_schema(schema, key) if schema_default is not None: return schema_default else: raise NotImplemented youker-assistant/backends/kylin-assistant-daemon/src/beautify/others.py0000664000175000017500000001524613260315532025462 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import sys sys.path.append('/usr/lib/python3/dist-packages/PIL') ## add by hb for python3 import os import re import shutil #import Image # from _pyio import open class Others: # custom plymouth bg by plymouthName def custom_plymouth_bg(self, plymouthName): plymouthName = plymouthName.encode('utf-8') existingDir = '/var/lib/kylin-assistant-daemon/plymouth/existing/' linkFileDir = '/lib/plymouth/themes/default.plymouth' # replace the config file shutil.copy(existingDir + plymouthName + '/default.plymouth', linkFileDir) # add new custom plymouth # def add_new_plymouth(self, customBG, plymouthName): # # if plymouthName exist return false # existingPlymouth = self.get_existing_plymouth_list() # customBG = customBG.encode('utf-8') # plymouthName = plymouthName.encode('utf-8') # plymouthName # if(plymouthName in existingPlymouth): # return False # else: # existingDir = '/var/lib/kylin-assistant-daemon/plymouth/existing/' # customScript = '/var/lib/kylin-assistant-daemon/plymouth/defaults/only_background.script' # defaultplymouthfile = '/var/lib/kylin-assistant-daemon/plymouth/defaults/default.plymouth' # # add new plymouth conf dir # os.mkdir(existingDir + plymouthName) # shutil.copy(defaultplymouthfile, existingDir + plymouthName + '/default.plymouth') # # modify config file # fileHandle = open(existingDir + plymouthName + '/default.plymouth', 'a') # fileHandle.write('ImageDir=/lib/plymouth/themes/' + plymouthName + '\n') # fileHandle.write('ScriptFile=/lib/plymouth/themes/' + plymouthName + '/kylin.script') # fileHandle.close() # # add new system plymouth dir # os.mkdir('/lib/plymouth/themes/' + plymouthName) # shutil.copy(customScript, '/lib/plymouth/themes/' + plymouthName + '/kylin.script') # #shutil.copy(customBG, '/lib/plymouth/themes/' + plymouthName + '/customBG.png') # Image.open(customBG).save('/lib/plymouth/themes/' + plymouthName + '/customBG.png') # return True # get existing plymouth list def get_existing_plymouth_list(self): result = [] edir = ('/var/lib/kylin-assistant-daemon/plymouth/existing') if os.path.isdir(edir): for f in os.listdir(edir): if os.path.isdir(os.path.join(edir, f)): result.append(f) result.sort() return result # check and save current plymouth when init def plymouth_init_check(self): existingDir = '/var/lib/kylin-assistant-daemon/plymouth/existing/' linkFileDir = '/lib/plymouth/themes/default.plymouth' # add 0619 if(os.path.exists('/lib/plymouth/themes/ubuntukylin-logo') == False): shutil.copytree('/var/lib/kylin-assistant-daemon/plymouth/ubuntukylin-logo/', '/lib/plymouth/themes/ubuntukylin-logo') # locate the current plymouth theme dir linkFile = open(linkFileDir) fullString = linkFile.read() linkFile.close() index = fullString.find('ScriptFile=') theLine = fullString[index:] # cut 'ScriptFile=' & '\n' scriptFile = theLine[theLine.find('/'):theLine.find('\n')] # scriptFile = theLine[theLine.find('/'):] scriptDir = scriptFile[0:scriptFile.rfind('/')] scriptName = scriptFile[scriptFile.rfind('/') + 1:] plymouthName = scriptDir[scriptDir.rfind('/') + 1:] # check and save current pl linkFile.close()ymouth if(os.path.exists(existingDir + plymouthName) == False): os.mkdir(existingDir + plymouthName) shutil.copy(scriptFile, existingDir + plymouthName + '/' + scriptName) shutil.copy(linkFileDir, existingDir + plymouthName + '/default.plymouth') def get_image_path(self,name): name = name.encode('utf-8') # if not os.path.exists('/lib/plymouth/themes/' + name + '/customBG.png') : if not os.path.exists('/lib/plymouth/themes/' + name + '/' + name + '.script') : if not os.path.exists('/lib/plymouth/themes/' + name + '/kylin.script') : if not os.path.exists('/lib/plymouth/themes/' + name + '/customBG.png') : return "False" else: return "True" else: return "True" else : return "True" # path = '/lib/plymouth/themes/' + name + '/customBG.png' # return path def delete_plymouth(self,plymouthName): plymouthName = plymouthName.encode('utf-8') fd = open('/lib/plymouth/themes/default.plymouth','r') animation = fd.read() fd.close() used = animation[animation.index('themes/')+len('themes/'):] used = used[:used.index('\n')] if used == plymouthName : return 'use' elif plymouthName == 'ubuntukylin-logo': return 'sys' else : shutil.rmtree('/var/lib/kylin-assistant-daemon/plymouth/existing/' + plymouthName) shutil.rmtree('/lib/plymouth/themes/' + plymouthName) return 'ok' # plymouthName = plymouthName.encode('utf-8') # fd = open('/lib/plymouth/themes/default.plymouth','r') # animation = fd.read() # fd.close() # used = animation[animation.index('themes/')+len('themes/'):] # used = used[:used.index('\n')] # if used == plymouthName : # return False # else : # shutil.rmtree('/var/lib/kylin-assistant-daemon/plymouth/existing/' + plymouthName) # shutil.rmtree('/lib/plymouth/themes/' + plymouthName) # return True if __name__ == '__main__': ooo = Others() # print ooo.get_existing_plymouth_list() # ooo.add_new_plymouth('/home/shine/heihei.png', 'hoho') # ooo.custom_plymouth_bg('hoho') # ooo.plymouth_init_check() youker-assistant/backends/kylin-assistant-daemon/src/beautify/ccm/0000775000175000017500000000000013260315533024337 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/beautify/ccm/Constants.py0000664000175000017500000000501513260315532026665 0ustar fengfeng# -*- coding: UTF-8 -*- # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Authors: Quinn Storm (quinn@beryl-project.org) # Patrick Niklaus (marex@opencompositing.org) # Guillaume Seguin (guillaume@segu.in) # Christopher Williams (christopherw@verizon.net) # Copyright (C) 2007 Quinn Storm from gi.repository import Gtk, Gdk # Current Screen # CurrentScreenNum = Gdk.Display.get_default().get_n_screens() # Settings Table # TableDef = Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND TableX = 4 TableY = 2 # Action Constants # KeyModifier = ["Shift", "Control", "Mod1", "Mod2", "Mod3", "Mod4", "Mod5", "Alt", "Meta", "Super", "Hyper", "ModeSwitch"] Edges = ["Left", "Right", "Top", "Bottom", "TopLeft", "TopRight", "BottomLeft", "BottomRight"] # Label Styles # HeaderMarkup = "%s" # Image Types # ImageNone = 0 ImagePlugin = 1 ImageCategory = 2 ImageThemed = 3 ImageStock = 4 # Filter Levels # FilterName = 1 << 0 FilterLongDesc = 1 << 1 FilterValue = 1 << 2 # Settings Only FilterCategory = 1 << 3 # Plugins Only FilterAll = FilterName | FilterLongDesc | FilterValue | FilterCategory # Paths # DataDir = "/usr/share" IconDir = DataDir+"/ccsm/icons" PixmapDir = DataDir+"/ccsm/images" # Version # Version = "0.9.4" # Translation # import locale import gettext locale.setlocale(locale.LC_ALL, "") gettext.bindtextdomain("ccsm", DataDir + "/locale") gettext.textdomain("ccsm") _ = gettext.gettext # Category Transaltion Table # Just to get them into gettext # CategoryTranslation = { "General": _("General"), "Accessibility": _("Accessibility"), "Desktop": _("Desktop"), "Extras": _("Extras"), "Window Management": _("Window Management"), "Effects": _("Effects"), "Image Loading": _("Image Loading"), "Utility": _("Utility"), "All": _("All"), "Uncategorized": _("Uncategorized") } youker-assistant/backends/kylin-assistant-daemon/src/beautify/ccm/Conflicts.py0000664000175000017500000004700313260315532026640 0ustar fengfeng# -*- coding: UTF-8 -*- # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Authors: Quinn Storm (quinn@beryl-project.org) # Patrick Niklaus (marex@opencompositing.org) # Guillaume Seguin (guillaume@segu.in) # Christopher Williams (christopherw@verizon.net) # Copyright (C) 2007 Quinn Storm from gi.repository import Gtk from .Constants import * from .Utils import * import locale import gettext locale.setlocale(locale.LC_ALL, "") gettext.bindtextdomain("ccsm", DataDir + "/locale") gettext.textdomain("ccsm") _ = gettext.gettext class Conflict: def __init__(self, autoResolve): self.AutoResolve = autoResolve # buttons = (text, type/icon, response_id) def Ask(self, message, buttons, custom_widgets=None): if self.AutoResolve: return Gtk.ResponseType.YES dialog = Gtk.MessageDialog(flags=Gtk.DialogFlags.MODAL, type=Gtk.MessageType.WARNING) for text, icon, response in buttons: button = Gtk.Button(text) button.set_image(Gtk.Image.new_from_stock(icon, Gtk.IconSize.BUTTON)) dialog.add_action_widget(button, response) if custom_widgets != None: for widget in custom_widgets: dialog.vbox.pack_start(widget, False, False) dialog.set_markup(message) dialog.show_all() answer = dialog.run() dialog.destroy() return answer class ActionConflict (Conflict): ActionTypes = set(('Bell', 'Button', 'Edge', 'Key')) def __init__ (self, setting, settings, autoResolve): def ExcludeInternal (settings): for setting in settings: if not setting.Info[0]: yield setting Conflict.__init__(self, autoResolve) self.Conflicts = [] self.Name = "" self.Setting = setting if settings is None: settings = [] self.Settings = settings # if the action is internal, include all global actions plus internal # actions from the same plugin. If it is global, include all actions. if not settings: for n in self.Setting.Plugin.Context.Plugins: plugin = self.Setting.Plugin.Context.Plugins[n] if plugin.Enabled: pluginActions = GetSettings(plugin, types=self.ActionTypes) if len(setting.Info) and setting.Info[0] and plugin is not setting.Plugin: settings.extend(ExcludeInternal(pluginActions)) else: settings.extend(pluginActions) def Resolve (self, updater = None): if len (self.Conflicts): for setting in self.Conflicts: answer = self.AskUser (self.Setting, setting) if answer == Gtk.ResponseType.YES: setting.Value = 'Disabled' if updater: updater.UpdateSetting (setting) if answer == Gtk.ResponseType.NO: return False return True def AskUser (self, setting, conflict): msg = _("The new value for the %(binding)s binding for the action %(action)s "\ "in plugin %(plugin)s conflicts with the action %(action_conflict)s of the %(plugin_conflict)s plugin.\n"\ "Do you wish to disable %(action_conflict)s in the %(plugin_conflict)s plugin?") msg_dict = {'binding': self.Name, 'action': setting.ShortDesc, 'plugin': setting.Plugin.ShortDesc, 'action_conflict': conflict.ShortDesc, 'plugin_conflict': conflict.Plugin.ShortDesc} msg = msg % protect_markup_dict (msg_dict) yesButton = (_("Disable %(action_conflict)s") % msg_dict, Gtk.STOCK_YES, Gtk.ResponseType.YES) noButton = (_("Don't set %(action)s") % msg_dict, Gtk.STOCK_NO, Gtk.ResponseType.NO) ignoreButton = (_("Set %(action)s anyway") % msg_dict, Gtk.STOCK_STOP, Gtk.ResponseType.REJECT) return self.Ask (msg, (ignoreButton, noButton, yesButton)) class KeyConflict(ActionConflict): def __init__(self, setting, newValue, settings=None, autoResolve=False, ignoreOld=False): ActionConflict.__init__(self, setting, settings, autoResolve) self.Name = _("key") if not newValue: return newValue = newValue.lower () oldValue = self.Setting.Value.lower () badValues = ["disabled", "none"] if not ignoreOld: badValues.append (oldValue) if newValue in badValues: return for s in self.Settings: if s is setting: continue if s.Type == 'Key': if s.Value.lower() == newValue: self.Conflicts.append (s) class ButtonConflict(ActionConflict): def __init__(self, setting, newValue, settings=None, autoResolve=False, ignoreOld=False): ActionConflict.__init__(self, setting, settings, autoResolve) self.Name = _("button") if not newValue: return newValue = newValue.lower () oldValue = self.Setting.Value.lower () badValues = ["disabled", "none"] if not ignoreOld: badValues.append (oldValue) if newValue in badValues: return for s in self.Settings: if s is setting: continue if s.Type == 'Button': if s.Value.lower() == newValue: self.Conflicts.append (s) class EdgeConflict(ActionConflict): def __init__(self, setting, newValue, settings=None, autoResolve=False, ignoreOld=False): ActionConflict.__init__(self, setting, settings, autoResolve) self.Name = _("edge") if not newValue: return newEdges = set(newValue.split("|")) if not ignoreOld: oldEdges = set(self.Setting.Value.split("|")) diff = newEdges - oldEdges if diff: newEdges = diff # no need to check edges that were already set else: return for s in self.Settings: if s is setting: continue elif s.Type == 'Edge': settingEdges = set(s.Value.split("|")) union = newEdges & settingEdges if union: for edge in union: self.Conflicts.append ((s, edge)) break def Resolve (self, updater = None): if len (self.Conflicts): for setting, edge in self.Conflicts: answer = self.AskUser (self.Setting, setting) if answer == Gtk.ResponseType.YES: value = setting.Value.split ("|") value.remove (edge) setting.Value = "|".join (value) if updater: updater.UpdateSetting (setting) if answer == Gtk.ResponseType.NO: return False return True # Not used for plugin dependencies (which are handled by ccs) but own feature checking e.g. image support class FeatureRequirement(Conflict): def __init__(self, context, feature, autoResolve=False): Conflict.__init__(self, autoResolve) self.Requirements = [] self.Context = context self.Feature = feature self.Found = False for plugin in list(context.Plugins.values()): if feature in plugin.Features: self.Found = True if not plugin.Enabled: self.Requirements.append(plugin) def Resolve(self): if len(self.Requirements) == 0 and self.Found: return True elif not self.Found: answer = self.ErrorAskUser() if answer == Gtk.ResponseType.YES: return True else: return False for plugin in self.Requirements: answer = self.AskUser(plugin) if answer == Gtk.ResponseType.YES: plugin.Enabled = True self.Context.Write() return True def ErrorAskUser(self): msg = _("You are trying to use the feature %(feature)s which is not provided by any plugin.\n"\ "Do you wish to use this feature anyway?") msg_dict = {'feature': self.Feature} msg = msg % protect_markup_dict (msg_dict) yesButton = (_("Use %(feature)s") % msg_dict, Gtk.STOCK_YES, Gtk.ResponseType.YES) noButton = (_("Don't use %(feature)s") % msg_dict, Gtk.STOCK_NO, Gtk.ResponseType.NO) answer = self.Ask(msg, (noButton, yesButton)) return answer def AskUser(self, plugin): msg = _("You are trying to use the feature %(feature)s which is provided by %(plugin)s.\n"\ "This plugin is currently disabled.\n"\ "Do you wish to enable %(plugin)s so the feature is available?") msg_dict = {'feature': self.Feature, 'plugin': plugin.ShortDesc} msg = msg % protect_markup_dict (msg_dict) yesButton = (_("Enable %(plugin)s") % msg_dict, Gtk.STOCK_YES, Gtk.ResponseType.YES) noButton = (_("Don't enable %(feature)s") % msg_dict, Gtk.STOCK_NO, Gtk.ResponseType.NO) answer = self.Ask(msg, (noButton, yesButton)) return answer class PluginConflict(Conflict): def __init__(self, plugin, conflicts, autoResolve=False): Conflict.__init__(self, autoResolve) self.Conflicts = conflicts self.Plugin = plugin def Resolve(self): for conflict in self.Conflicts: if conflict[0] == 'ConflictFeature': answer = self.AskUser(self.Plugin, conflict) if answer == Gtk.ResponseType.YES: disableConflicts = conflict[2][0].DisableConflicts con = PluginConflict(conflict[2][0], disableConflicts, self.AutoResolve) if con.Resolve(): conflict[2][0].Enabled = False else: return False else: return False elif conflict[0] == 'ConflictPlugin': answer = self.AskUser(self.Plugin, conflict) if answer == Gtk.ResponseType.YES: disableConflicts = conflict[2][0].DisableConflicts con = PluginConflict(conflict[2][0], disableConflicts, self.AutoResolve) if con.Resolve(): conflict[2][0].Enabled = False else: return False else: return False elif conflict[0] == 'RequiresFeature': answer, choice = self.AskUser(self.Plugin, conflict) if answer == Gtk.ResponseType.YES: for plg in conflict[2]: if plg.ShortDesc == choice: enableConflicts = plg.EnableConflicts con = PluginConflict(plg, enableConflicts, self.AutoResolve) if con.Resolve(): plg.Enabled = True else: return False break else: return False elif conflict[0] == 'RequiresPlugin': answer = self.AskUser(self.Plugin, conflict) if answer == Gtk.ResponseType.YES: enableConflicts = conflict[2][0].EnableConflicts con = PluginConflict(conflict[2][0], enableConflicts, self.AutoResolve) if con.Resolve(): conflict[2][0].Enabled = True else: return False else: return False elif conflict[0] == 'FeatureNeeded': answer = self.AskUser(self.Plugin, conflict) if answer == Gtk.ResponseType.YES: for plg in conflict[2]: disableConflicts = plg.DisableConflicts con = PluginConflict(plg, disableConflicts, self.AutoResolve) if con.Resolve(): plg.Enabled = False else: return False else: return False elif conflict[0] == 'PluginNeeded': answer = self.AskUser(self.Plugin, conflict) if answer == Gtk.ResponseType.YES: for plg in conflict[2]: disableConflicts = plg.DisableConflicts con = PluginConflict(plg, disableConflicts, self.AutoResolve) if con.Resolve(): plg.Enabled = False else: return False else: return False # Only when enabling a plugin types = [] actionConflicts = [] if not self.Plugin.Enabled and not self.AutoResolve: for setting in GetSettings(self.Plugin): conflict = None if setting.Type == 'Key': conflict = KeyConflict(setting, setting.Value, ignoreOld=True) elif setting.Type == 'Button': conflict = ButtonConflict(setting, setting.Value, ignoreOld=True) elif setting.Type == 'Edge': conflict = EdgeConflict(setting, setting.Value, ignoreOld=True) # Conflicts were found if conflict and conflict.Conflicts: name = conflict.Name if name not in types: types.append(name) actionConflicts.append(conflict) if actionConflicts: answer = self.AskUser(self.Plugin, ('ConflictAction', types)) if answer == Gtk.ResponseType.YES: for conflict in actionConflicts: conflict.Resolve() return True def AskUser(self, plugin, conflict): msg = "" okMsg = "" cancelMsg = "" widgets = [] # CCSM custom conflict if conflict[0] == 'ConflictAction': msg = _("Some %(bindings)s bindings of Plugin %(plugin)s " \ "conflict with other plugins. Do you want to resolve " \ "these conflicts?") types = conflict[1] bindings = ", ".join(types[:-1]) if len(types) > 1: bindings = "%s and %s" % (bindings, types[-1]) msg_dict = {'plugin': plugin.ShortDesc, 'bindings': bindings} msg = msg % protect_markup_dict (msg_dict) okMsg = _("Resolve conflicts") % msg_dict cancelMsg = _("Ignore conflicts") % msg_dict elif conflict[0] == 'ConflictFeature': msg = _("Plugin %(plugin_conflict)s provides feature " \ "%(feature)s which is also provided by " \ "%(plugin)s") msg_dict = {'plugin_conflict': conflict[2][0].ShortDesc, 'feature': conflict[1], 'plugin': plugin.ShortDesc} msg = msg % protect_markup_dict (msg_dict) okMsg = _("Disable %(plugin_conflict)s") % msg_dict cancelMsg = _("Don't enable %(plugin)s") % msg_dict elif conflict[0] == 'ConflictPlugin': msg = _("Plugin %(plugin_conflict)s conflicts with " \ "%(plugin)s.") msg = msg % protect_markup_dict (msg_dict) okMsg = _("Disable %(plugin_conflict)s") % msg_dict cancelMsg = _("Don't enable %(plugin)s") % msg_dict elif conflict[0] == 'RequiresFeature': pluginList = ', '.join("\"%s\"" % plugin.ShortDesc for plugin in conflict[2]) msg = _("%(plugin)s requires feature %(feature)s " \ "which is provided by the following " \ "plugins:\n%(plugin_list)s") msg_dict = {'plugin': plugin.ShortDesc, 'feature': conflict[1], 'plugin_list': pluginList} msg = msg % protect_markup_dict (msg_dict) cmb = Gtk.ComboBoxText() for plugin in conflict[2]: cmb.append_text(plugin.ShortDesc) cmb.set_active(0) widgets.append(cmb) okMsg = _("Enable these plugins") cancelMsg = _("Don't enable %(plugin)s") % msg_dict elif conflict[0] == 'RequiresPlugin': msg = _("%(plugin)s requires the plugin %(require)s.") msg_dict = {'plugin': plugin.ShortDesc, 'require': conflict[2][0].ShortDesc} msg = msg % protect_markup_dict (msg_dict) okMsg = _("Enable %(require)s") % msg_dict cancelMsg = _("Don't enable %(plugin)s") % msg_dict elif conflict[0] == 'FeatureNeeded': pluginList = ', '.join("\"%s\"" % plugin.ShortDesc for plugin in conflict[2]) msg = _("%(plugin)s provides the feature " \ "%(feature)s which is required by the plugins " \ "%(plugin_list)s.") msg_dict = {'plugin': plugin.ShortDesc, 'feature': conflict[1], 'plugin_list': pluginList} msg = msg % protect_markup_dict (msg_dict) okMsg = _("Disable these plugins") cancelMsg = _("Don't disable %(plugin)s") % msg_dict elif conflict[0] == 'PluginNeeded': pluginList = ', '.join("\"%s\"" % plugin.ShortDesc for plugin in conflict[2]) msg = _("%(plugin)s is required by the plugins " \ "%(plugin_list)s.") msg_dict = {'plugin': plugin.ShortDesc, 'plugin_list': pluginList} msg = msg % protect_markup_dict (msg_dict) okMsg = _("Disable these plugins") cancelMsg = _("Don't disable %(plugin)s") % msg_dict okButton = (okMsg, Gtk.STOCK_OK, Gtk.ResponseType.YES) cancelButton = (cancelMsg, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) answer = self.Ask(msg, (cancelButton, okButton), widgets) if conflict[0] == 'RequiresFeature': choice = widgets[0].get_active_text() return answer, choice return answer e youker-assistant/backends/kylin-assistant-daemon/src/beautify/ccm/__init__.py0000664000175000017500000000010713260315532026445 0ustar fengfengfrom .Conflicts import * from .Constants import * from .Utils import * youker-assistant/backends/kylin-assistant-daemon/src/beautify/ccm/Utils.py0000664000175000017500000003112313260315532026010 0ustar fengfeng# -*- coding: UTF-8 -*- # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Authors: Quinn Storm (quinn@beryl-project.org) # Patrick Niklaus (marex@opencompositing.org) # Guillaume Seguin (guillaume@segu.in) # Christopher Williams (christopherw@verizon.net) # Copyright (C) 2007 Quinn Storm import os import weakref from gi.repository import GObject, Gtk, Gdk, Pango from .Constants import * from cgi import escape as protect_pango_markup import operator import itertools import locale import gettext locale.setlocale(locale.LC_ALL, "") gettext.bindtextdomain("ccsm", DataDir + "/locale") gettext.textdomain("ccsm") _ = gettext.gettext IconTheme = Gtk.IconTheme.get_default() #TODO #if not IconDir in IconTheme.get_search_path(): # IconTheme.prepend_search_path(IconDir) def gtk_process_events (): while Gtk.events_pending (): Gtk.main_iteration () def getScreens(): screens = [] display = Gdk.Display.get_default() nScreens = display.get_n_screens() for i in range(nScreens): screens.append(i) return screens def getDefaultScreen(): display = Gdk.Display.get_default() return display.get_default_screen().get_number() def protect_markup_dict (dict_): return dict((k, protect_pango_markup (v)) for (k, v) in list(dict_.items())) class Image (Gtk.Image): def __init__ (self, name = None, type = ImageNone, size = 32, useMissingImage = False): GObject.GObject.__init__ (self) if not name: return if useMissingImage: self.set_from_stock (Gtk.STOCK_MISSING_IMAGE, Gtk.IconSize.LARGE_TOOLBAR) return try: if type in (ImagePlugin, ImageCategory, ImageThemed): pixbuf = None if type == ImagePlugin: name = "plugin-" + name try: pixbuf = IconTheme.load_icon (name, size, 0) except GObject.GError: pixbuf = IconTheme.load_icon ("plugin-unknown", size, 0) elif type == ImageCategory: name = "plugins-" + name try: pixbuf = IconTheme.load_icon (name, size, 0) except GObject.GError: pixbuf = IconTheme.load_icon ("plugins-unknown", size, 0) else: pixbuf = IconTheme.load_icon (name, size, 0) self.set_from_pixbuf (pixbuf) elif type == ImageStock: self.set_from_stock (name, size) except GObject.GError as e: self.set_from_stock (Gtk.STOCK_MISSING_IMAGE, Gtk.IconSize.BUTTON) class ActionImage (Gtk.Alignment): map = { "keyboard" : "input-keyboard", "button" : "input-mouse", "edges" : "video-display", "bell" : "audio-x-generic" } def __init__ (self, action): GObject.GObject.__init__ (self, 0, 0.5) self.set_padding (0, 0, 0, 10) if action in self.map: action = self.map[action] self.add (Image (name = action, type = ImageThemed, size = 22)) class SizedButton (Gtk.Button): minWidth = -1 minHeight = -1 def __init__ (self, minWidth = -1, minHeight = -1): super (SizedButton, self).__init__ () self.minWidth = minWidth self.minHeight = minHeight self.connect ("size-request", self.adjust_size) def adjust_size (self, widget, requisition): width, height = requisition.width, requisition.height newWidth = max (width, self.minWidth) newHeight = max (height, self.minHeight) self.set_size_request (newWidth, newHeight) class PrettyButton (Gtk.Button): __gsignals__ = { 'draw': 'override', } _old_toplevel = None def __init__ (self): super (PrettyButton, self).__init__ () self.states = { "focus" : False, "pointer" : False } self.set_size_request (200, -1) self.set_relief (Gtk.ReliefStyle.NONE) self.connect ("focus-in-event", self.update_state_in, "focus") self.connect ("focus-out-event", self.update_state_out, "focus") self.connect ("hierarchy-changed", self.hierarchy_changed) def hierarchy_changed (self, widget, old_toplevel): if old_toplevel == self._old_toplevel: return if not old_toplevel and self.state != Gtk.StateType.NORMAL: self.set_state(Gtk.StateType.PRELIGHT) self.set_state(Gtk.StateType.NORMAL) self._old_toplevel = old_toplevel def update_state_in (self, *args): state = args[-1] self.set_state (Gtk.StateType.PRELIGHT) self.states[state] = True def update_state_out (self, *args): state = args[-1] self.states[state] = False if True in list(self.states.values ()): self.set_state (Gtk.StateType.PRELIGHT) else: self.set_state (Gtk.StateType.NORMAL) def do_expose_event (self, event): has_focus = self.flags () & Gtk.HAS_FOCUS if has_focus: self.unset_flags (Gtk.HAS_FOCUS) ret = super (PrettyButton, self).do_expose_event (self, event) if has_focus: self.set_flags (Gtk.HAS_FOCUS) return ret class Label(Gtk.Label): def __init__(self, value = "", wrap = 160): GObject.GObject.__init__(self, value) self.props.xalign = 0 self.props.wrap_mode = Pango.WrapMode.WORD self.set_line_wrap(True) self.set_size_request(wrap, -1) class NotFoundBox(Gtk.Alignment): def __init__(self, value=""): GObject.GObject.__init__(self, 0.5, 0.5, 0.0, 0.0) box = Gtk.HBox() self.Warning = Gtk.Label() self.Markup = _("No matches found. \n\n Your filter \"%s\" does not match any items.") value = protect_pango_markup(value) self.Warning.set_markup(self.Markup % value) image = Image("face-surprise", ImageThemed, 48) box.pack_start(image, False, False, 0) box.pack_start(self.Warning, True, True, 15) self.add(box) def update(self, value): value = protect_pango_markup(value) self.Warning.set_markup(self.Markup % value) class IdleSettingsParser: def __init__(self, context, main): def FilterPlugin (p): return not p.Initialized and p.Enabled self.Context = context self.Main = main self.PluginList = [p for p in list(self.Context.Plugins.items()) if FilterPlugin(p[1])] nCategories = len (main.MainPage.RightWidget._boxes) self.CategoryLoadIconsList = list(range(3, nCategories)) # Skip the first 3 print('Loading icons...') GObject.timeout_add (150, self.Wait) def Wait(self): if not self.PluginList: return False if len (self.CategoryLoadIconsList) == 0: # If we're done loading icons GObject.idle_add (self.ParseSettings) else: GObject.idle_add (self.LoadCategoryIcons) return False def ParseSettings(self): name, plugin = self.PluginList[0] if not plugin.Initialized: plugin.Update () self.Main.RefreshPage(plugin) self.PluginList.remove (self.PluginList[0]) GObject.timeout_add (200, self.Wait) return False def LoadCategoryIcons(self): from ccm.Widgets import PluginButton catIndex = self.CategoryLoadIconsList[0] pluginWindow = self.Main.MainPage.RightWidget categoryBox = pluginWindow._boxes[catIndex] for (pluginIndex, plugin) in \ enumerate (categoryBox.get_unfiltered_plugins()): categoryBox._buttons[pluginIndex] = PluginButton (plugin) categoryBox.rebuild_table (categoryBox._current_cols, True) pluginWindow.connect_buttons (categoryBox) self.CategoryLoadIconsList.remove (self.CategoryLoadIconsList[0]) GObject.timeout_add (150, self.Wait) return False # Updates all registered setting when they where changed through CompizConfig class Updater: def __init__ (self): self.VisibleSettings = {} self.Plugins = [] self.Block = 0 def SetContext (self, context): self.Context = context GObject.timeout_add (2000, self.Update) def Append (self, widget): reference = weakref.ref(widget) setting = widget.Setting self.VisibleSettings.setdefault((setting.Plugin.Name, setting.Name), []).append(reference) def AppendPlugin (self, plugin): self.Plugins.append (plugin) def Remove (self, widget): setting = widget.Setting l = self.VisibleSettings.get((setting.Plugin.Name, setting.Name)) if not l: return for i, ref in enumerate(list(l)): if ref() is widget: l.remove(ref) break def UpdatePlugins(self): for plugin in self.Plugins: plugin.Read() def UpdateSetting (self, setting): widgets = self.VisibleSettings.get((setting.Plugin.Name, setting.Name)) if not widgets: return for reference in widgets: widget = reference() if widget is not None: widget.Read() def Update (self): if self.Block > 0: return True if self.Context.ProcessEvents(): changed = self.Context.ChangedSettings if [s for s in changed if s.Plugin.Name == "core" and s.Name == "active_plugins"]: self.UpdatePlugins() for setting in list(changed): widgets = self.VisibleSettings.get((setting.Plugin.Name, setting.Name)) if widgets: for reference in widgets: widget = reference() if widget is not None: widget.Read() if widget.List: widget.ListWidget.Read() changed.remove(setting) self.Context.ChangedSettings = changed return True GlobalUpdater = Updater () class PluginSetting: def __init__ (self, plugin, widget, handler): self.Widget = widget self.Plugin = plugin self.Handler = handler GlobalUpdater.AppendPlugin (self) def Read (self): widget = self.Widget widget.handler_block(self.Handler) widget.set_active (self.Plugin.Enabled) widget.set_sensitive (self.Plugin.Context.AutoSort) widget.handler_unblock(self.Handler) class PureVirtualError(Exception): pass def SettingKeyFunc(value): return value.Plugin.Ranking[value.Name] def CategoryKeyFunc(category): if 'General' == category: return '' else: return category or 'zzzzzzzz' def GroupIndexKeyFunc(item): return item[1][0] FirstItemKeyFunc = operator.itemgetter(0) EnumSettingKeyFunc = operator.itemgetter(1) PluginKeyFunc = operator.attrgetter('ShortDesc') def HasOnlyType (settings, stype): return settings and not [s for s in settings if s.Type != stype] def GetSettings(group, types=None): def TypeFilter (settings, types): for setting in settings: if setting.Type in types: yield setting if types: screen = TypeFilter(iter(list(group.Screen.values())), types) else: screen = iter(list(group.Screen.values())) return screen # Support python 2.4 try: any all except NameError: def any(iterable): for element in iterable: if element: return True return False def all(iterable): for element in iterable: if not element: return False return True youker-assistant/backends/kylin-assistant-daemon/src/beautify/theme.py0000664000175000017500000004430613263553572025272 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os from . import gsettings from . import utils class Theme: homedir = '' desktop = None def __init__(self): self.homedir = utils.get_home_dir() self.desktop = os.getenv('XDG_CURRENT_DESKTOP') if self.desktop is None: self.desktop = os.getenv('XDG_SESSION_DESKTOP') # ---------------themes--------------- def set_ubuntukylin_default_setting(self, schema, title, key, type, default_value): if title == 'unity': return gsettings.set(schema, '/org/compiz/profiles/unity/plugins/unityshell/', key, type, default_value) else: return gsettings.set(schema, None, key, type, default_value) # -----------------默认值----------------- # Get Default Value def get_default_schema_value(self, schema, key): default_value = gsettings.get_schema_value(schema, key) if self.desktop != "mate" and self.desktop != "MATE": if (default_value in (None, '') and schema == 'org.gnome.nautilus.desktop' and key == 'font'): default_value = 'Ubuntu 11' return default_value # Set Default Value def set_default_schema_value(self, schema, key, type): default_value = self.get_default_schema_value(schema, key) if (default_value in (None, '') and schema == 'org.gnome.nautilus.desktop' and key == 'font'): default_value = 'Ubuntu 11' if default_value is not None: return gsettings.set(schema, None, key, type, default_value) else: raise NotImplemented # ---------------------------------- # get themes def get_themes(self): dirs = ('/usr/share/themes', os.path.join(self.homedir, ".themes")) filters = ('gtk-2.0', 'gtk-3.0', 'metacity-1') valid = utils.check_dirs(dirs, filters, True) valid.sort() return valid # get current theme def get_theme(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.interface', None, 'gtk-theme', 'string') else: return gsettings.get('org.gnome.desktop.interface', None, 'gtk-theme', 'string') # set GTK theme and window theme def set_theme(self, theme): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gstheme = gsettings.get_schema('org.mate.interface') gstheme.set_string('gtk-theme',theme) else: gstheme = gsettings.get_schema('org.gnome.desktop.interface') gstheme.set_string('gtk-theme',theme) _gstheme = gsettings.get_schema('org.gnome.desktop.wm.preferences') _gstheme.set_string('theme',theme) #------------------------窗口主题设置 # get window theme def get_window_themes(self): dirs = ('/usr/share/themes', os.path.join(self.homedir, ".themes")) filters = ['metacity-1'] valid = utils.check_dirs(dirs, filters, True) valid.sort() return valid # get current window theme def get_current_window_theme(self): return gsettings.get('org.gnome.desktop.wm.preferences', None, 'theme', 'string') # set window theme def set_window_theme(self, theme): return gsettings.set('org.gnome.desktop.wm.preferences', None, 'theme', 'string', theme) # get icon themes def get_icon_themes(self): dirs = ('/usr/share/icons', os.path.join(self.homedir, ".icons")) '''filters: if use only one filter string, the 'for' block in check_dirs() will split the filter string to single chars...''' filters = ('cursors', '#') valid = utils.check_dirs(dirs, filters, False) valid.sort() return valid # get current icon theme def get_icon_theme(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.interface', None, 'icon-theme', 'string') else: return gsettings.get('org.gnome.desktop.interface', None, 'icon-theme', 'string') # set icon theme def set_icon_theme(self, theme): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gstheme = gsettings.get_schema('org.mate.interface') gstheme.set_string('icon-theme',theme) else: gstheme = gsettings.get_schema('org.gnome.desktop.interface') gstheme.set_string('icon-theme',theme) # get cursor themes def get_cursor_themes(self): dirs = ('/usr/share/icons', os.path.join(self.homedir, ".icons")) '''filters: if use only one filter string, the 'for' block in check_dirs() will split the filter string to single chars...''' filters = ('cursors', '') valid = utils.check_dirs(dirs, filters, True) valid.sort() return valid # get current cursor theme def get_cursor_theme(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.peripherals-mouse', None, 'cursor-theme', 'string') else: return gsettings.get('org.gnome.desktop.interface', None, 'cursor-theme', 'string') # set cursor theme def set_cursor_theme(self, theme): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gstheme = gsettings.get_schema('org.mate.peripherals-mouse') gstheme.set_string('cursor-theme', theme) else: gstheme = gsettings.get_schema('org.gnome.desktop.interface') gstheme.set_string('cursor-theme', theme) def set_cursor_theme_with_root(self, theme): try : fd = open('/usr/share/icons/default/index.theme','w') fd.write('[Icon Theme]\n') fd.write('Inherits=' + theme + '\n') fd.close() return True except Exception as e : return False # get cursor size def get_cursor_size(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.peripherals-mouse', None, 'cursor-size', 'int') else: return gsettings.get('org.gnome.desktop.interface', None, 'cursor-size', 'int') # set cursor size def set_cursor_size(self, size): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": gstheme = gsettings.get_schema('org.mate.peripherals-mouse') gstheme.set_int('cursor-size', size) else: gstheme = gsettings.get_schema('org.gnome.desktop.interface') gstheme.set_int('cursor-size', size) # ---------------fonts--------------- # get font def get_font(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.interface', None, 'font-name', 'string') else: return gsettings.get('org.gnome.desktop.interface', None, 'font-name', 'string') # set font def set_font(self, font): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.interface', None, 'font-name', 'string', font) else: return gsettings.set('org.gnome.desktop.interface', None, 'font-name', 'string', font) # get desktop font def get_desktop_font(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.peony.desktop', None, 'font', 'string') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.peony.desktop', None, 'font', 'string') else: return gsettings.get('org.gnome.nautilus.desktop', None, 'font', 'string') # set desktop font def set_desktop_font(self, font): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.peony.desktop', None, 'font', 'string', font) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.peony.desktop', None, 'font', 'string', font) else: return gsettings.set('org.gnome.nautilus.desktop', None, 'font', 'string', font) # get document font def get_document_font(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.interface', None, 'document-font-name', 'string') else: return gsettings.get('org.gnome.desktop.interface', None, 'document-font-name', 'string') # set document font def set_document_font(self, font): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.interface', None, 'document-font-name', 'string', font) else: return gsettings.set('org.gnome.desktop.interface', None, 'document-font-name', 'string', font) # get monospace font def get_monospace_font(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.mate.interface', None, 'monospace-font-name', 'string') else: return gsettings.get('org.gnome.desktop.interface', None, 'monospace-font-name', 'string') # set monospace font (use this func to change document font in ubuntu) def set_monospace_font(self, font): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.mate.interface', None, 'monospace-font-name', 'string', font) else: return gsettings.set('org.gnome.desktop.interface', None, 'monospace-font-name', 'string', font) # get window title font def get_window_title_font(self): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.gnome.desktop.wm.preferences', None, 'titlebar-font', 'string') else: return gsettings.get('org.gnome.desktop.wm.preferences', None, 'titlebar-font', 'string') # set window title font def set_window_title_font(self, font): if self.desktop == "mate" or self.desktop == "MATE" or self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.gnome.desktop.wm.preferences', None, 'titlebar-font', 'string', font) else: return gsettings.set('org.gnome.desktop.wm.preferences', None, 'titlebar-font', 'string', font) # get font zoom def get_font_zoom(self): return gsettings.get('org.gnome.desktop.interface', None, 'text-scaling-factor', 'double') # set font zoom def set_font_zoom(self, zoom): return gsettings.set('org.gnome.desktop.interface', None, 'text-scaling-factor', 'double', zoom) # -------------------------平滑性---------------------------------- # get all hinting value. none:'No hinting',slight:'Basic',medium:'Moderate',full:'Maximum' def get_all_hinting(self): return ['none', 'slight', 'medium', 'full'] # get current hinting def get_hinting(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.font-rendering', None, 'hinting', 'string') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.font-rendering', None, 'hinting', 'string') else: return gsettings.get('org.gnome.settings-daemon.plugins.xsettings', None, 'hinting', 'string') # set hinting def set_hinting(self, value): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.font-rendering', None, 'hinting', 'string', value) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.font-rendering', None, 'hinting', 'string', value) else: return gsettings.set('org.gnome.settings-daemon.plugins.xsettings', None, 'hinting', 'string', value) # -------------------------反锯齿---------------------------------- # get all antialiasing value. none:'No antialiasing', grayscale:'Standard grayscale antialiasing',rgba:'Subpixel antialiasing (LCD screens only)' def get_all_antialiasing(self): return ['none', 'grayscale', 'rgba'] # get current antialiasing def get_antialiasing(self): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.get('org.mate.font-rendering', None, 'antialiasing', 'string') elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.get('org.ukui.font-rendering', None, 'antialiasing', 'string') else: return gsettings.get('org.gnome.settings-daemon.plugins.xsettings', None, 'antialiasing', 'string') # set antialiasing def set_antialiasing(self,value): if self.desktop == "mate" or self.desktop == "MATE": return gsettings.set('org.mate.font-rendering', None, 'antialiasing', 'string', value) elif self.desktop == "ukui" or self.desktop == "UKUI": return gsettings.set('org.ukui.font-rendering', None, 'antialiasing', 'string', value) else: return gsettings.set('org.gnome.settings-daemon.plugins.xsettings', None, 'antialiasing', 'string', value) if __name__ == '__main__': ttt = Theme() # print ttt.get_window_theme() # print ttt.get_current_window_theme() # print ttt.set_window_theme('Crux') # print ttt.get_current_hinting() # print ttt.get_current_antialiasing() # print ttt.set_hinting('none') # print ttt.set_antialiasing('none') # print ttt.get_font() # print ttt.set_font('Ubuntu 14') # print ttt.get_font_zoom() # ttt.set_font_zoom(1.0) #ttt.set_monospace_font('Ubuntu Mono 13') #print ttt.get_monospace_font() #aa = ttt.get_default_schema_value('org.gnome.nautilus.desktop', 'font') #print aa #ttt.set_default_schema_value('org.gnome.nautilus.desktop', 'font', 'string') #aa = ttt.get_default_schema_value('org.gnome.settings-daemon.plugins.xsettings', 'hinting') #print aa #ttt.set_default_schema_value('org.gnome.settings-daemon.plugins.xsettings', 'hinting', 'string') #bb = ttt.get_default_schema_value('org.gnome.settings-daemon.plugins.xsettings', 'antialiasing') #print bb aa = ttt.get_default_schema_value('org.gnome.desktop.interface', 'cursor-size') print(aa) bb = ttt.get_cursor_size() print(bb) ttt.set_default_schema_value('org.gnome.desktop.interface', 'cursor-size', 'int') #aa = ttt.get_default_schema_value('org.gnome.desktop.interface', 'font-name') #print aa # ttt.set_default_schema_value('org.gnome.desktop.interface', 'font-name', 'string') # print ttt.get_theme() # print ttt.get_icon_theme() # print ttt.get_cursor_theme() # print ttt.get_cursor_size() # ttt.set_font('Ubuntu 11') # print ttt.get_document_font() # ttt.set_document_font('Sans 15') # ttt.set_window_title_font('Ubuntu Bold 11') # print ttt.get_font() # ttt.set_desktop_font('Ubuntu 11') # print ttt.get_desktop_font() # print ttt.get_document_font() # print ttt.get_window_title_font() # themes = ttt.get_themes() # print themes # print ttt.get_theme() # ttt.set_theme('ubuntukylin-theme') # ttt.set_theme('Radiance') # ttt.set_theme('Ambiance') # ttt.set_theme('HighContrast') # iconthemes = ttt.get_icon_themes() # print iconthemes # ttt.set_icon_theme('ubuntukylin-icon-theme') # cursorthemes = ttt.get_cursor_themes() # print cursorthemes # print ttt.get_cursor_theme() # ttt.set_cursor_theme(cursorthemes[1]) # ttt.set_cursor_size(24) youker-assistant/backends/kylin-assistant-daemon/src/beautify/common.py0000664000175000017500000001413113260315532025436 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright (C) 2007-2011 Tualatrix Chou # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is 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, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA import glob import logging import configparser from lxml import etree log = logging.getLogger('CommonSetting') class RawConfigSetting(object): '''Just pass the file path''' def __init__(self, path, type=type): self._type = type self._path = path self.init_configparser() def _type_convert_set(self, value): if type(value) == bool: if value == True: value = 'true' elif value == False: value = 'false' # This is a hard code str type, so return '"xxx"' instead of 'xxx' if self._type == str: value = "'%s'" % value return value def _type_convert_get(self, value): if value == 'false': value = False elif value == 'true': value = True # This is a hard code str type, so return '"xxx"' instead of 'xxx' if self._type == str or type(value) == str: if (value.startswith('"') and value.endswith('"')) or \ (value.startswith("'") and value.endswith("'")): value = eval(value) return value def init_configparser(self): self._configparser = configparser.ConfigParser() self._configparser.read(self._path) def sections(self): return self._configparser.sections() def options(self, section): return self._configparser.options(section) def set_value(self, section, option, value): value = self._type_convert_set(value) if not self._configparser.has_section(section): self._configparser.add_section(section) self._configparser.set(section, option, value) with open(self._path, 'wb') as configfile: self._configparser.write(configfile) self.init_configparser() def get_value(self, section, option): if self._type: if self._type == int: getfunc = getattr(self._configparser, 'getint') elif self._type == float: getfunc = getattr(self._configparser, 'getfloat') elif self._type == bool: getfunc = getattr(self._configparser, 'getboolean') else: getfunc = getattr(self._configparser, 'get') value = getfunc(section, option) else: log.debug("No type message, so use the generic get") value = self._configparser.get(section, option) value = self._type_convert_get(value) return value class Schema(object): cached_schema = {} cached_schema_tree = {} cached_override = {} @classmethod def load_override(cls): log.debug("\tLoading override") for override in glob.glob('/usr/share/glib-2.0/schemas/*.gschema.override'): try: cs = RawConfigSetting(override) for section in cs.sections(): cls.cached_override[section] = {} for option in cs.options(section): cls.cached_override[section][option] = cs.get_value(section, option) except Exception as e: log.error('Error while parsing override file: %s' % override) @classmethod def load_schema(cls, schema_id, key): log.debug("Loading schema value for: %s/%s" % (schema_id, key)) if not cls.cached_override: cls.load_override() if schema_id in cls.cached_override and \ key in cls.cached_override[schema_id]: return cls.cached_override[schema_id][key] if schema_id in cls.cached_schema and \ key in cls.cached_schema[schema_id]: return cls.cached_schema[schema_id][key] schema_defaults = {} for schema_path in glob.glob('/usr/share/glib-2.0/schemas/*'): if not schema_path.endswith('.gschema.xml') and not schema_path.endswith('.enums.xml'): #TODO deal with enums continue if schema_path in cls.cached_schema_tree: tree = cls.cached_schema_tree[schema_path] else: tree = etree.parse(open(schema_path)) for schema_node in tree.findall('schema'): if schema_node.attrib.get('id') == schema_id: for key_node in schema_node.findall('key'): if key_node.findall('default'): schema_defaults[key_node.attrib['name']] = cls.parse_value(key_node) else: continue cls.cached_schema[schema_id] = schema_defaults if key in schema_defaults: return schema_defaults[key] else: return None @classmethod def parse_value(cls, key_node): log.debug("Try to get type for value: %s" % list(key_node.items())) value = key_node.find('default').text #TODO enum type if key_node.attrib.get('type'): type = key_node.attrib['type'] if type == 'b': if value == 'true': return True else: return False elif type == 'i': return int(value) elif type == 'd': return float(value) elif type == 'as': return eval(value) return eval(value) youker-assistant/backends/kylin-assistant-daemon/src/sso/0000775000175000017500000000000013260315533022571 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sso/enums.py0000664000175000017500000000407713260315532024301 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2014 National University of Defense Technology(NUDT) & Kylin Ltd # Author: # Robert # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . import os import errno from xdg import BaseDirectory as xdg def safe_makedirs(dir_path): """ This function can be used in place of a straight os.makedirs to handle the possibility of a race condition when more than one process may potentially be creating the same directory, it will not fail if two processes try to create the same dir at the same time """ # avoid throwing an OSError, see for example LP: #743003 if not os.path.exists(dir_path): try: os.makedirs(dir_path) except OSError as e: if e.errno == errno.EEXIST: # it seems that another process has already created this # directory in the meantime, that's ok pass else: # the error is due to something else, so we want to raise it raise # ported from ubuntu-software-center to support Ubuntu-kylin-SSO UBUNTU_KYLIN_SSO_SERVICE = 'https://login.ubuntukylin.com/api/1.0' SOFTWARE_CENTER_NAME_KEYRING = "Youker ID" SOFTWARE_CENTER_SSO_DESCRIPTION = '注册或登录优客账号。' datadir = './sso/utils/' PISTON_GENERIC_HELPER = "piston_generic_helper.py" YOUKER_ASSISTANT_CACHE_DIR = os.path.join(xdg.xdg_cache_home, "kylin-assistant") safe_makedirs(YOUKER_ASSISTANT_CACHE_DIR) youker-assistant/backends/kylin-assistant-daemon/src/sso/login_impl/0000775000175000017500000000000013260315532024721 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sso/login_impl/login_sso.py0000664000175000017500000001205213260315532027267 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (C) 2010 Canonical # # Authors: # Michael Vogt # Robert # # 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; version 3. # # 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, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import dbus import logging from dbus.mainloop.glib import DBusGMainLoop DBusGMainLoop(set_as_default=True) from ubuntu_kylin_sso import ( DBUS_BUS_NAME, DBUS_CREDENTIALS_IFACE, DBUS_CREDENTIALS_PATH, ) from sso.login import LoginBackend from sso.enums import SOFTWARE_CENTER_NAME_KEYRING LOG = logging.getLogger(__name__) def utf8(s): """ Takes a string or unicode object and returns a utf-8 encoded string, errors are ignored """ if s is None: return None if isinstance(s, str): return s.encode("utf-8", "ignore") return str(s, "utf8", "ignore").encode("utf8") class LoginBackendDbusSSO(LoginBackend): def __init__(self, window_id, appname, help_text): super(LoginBackendDbusSSO, self).__init__() if not appname: self.appname = SOFTWARE_CENTER_NAME_KEYRING else: self.appname = appname self.help_text = help_text self.bus = dbus.SessionBus() obj = self.bus.get_object(bus_name=DBUS_BUS_NAME, object_path=DBUS_CREDENTIALS_PATH, follow_name_owner_changes=True) self.proxy = dbus.Interface(object=obj, dbus_interface=DBUS_CREDENTIALS_IFACE) self.proxy.connect_to_signal("CredentialsFound", self._on_credentials_found) self.proxy.connect_to_signal("CredentialsNotFound", self._on_credentials_not_found) self.proxy.connect_to_signal("CredentialsError", self._on_credentials_error) self.proxy.connect_to_signal("AuthorizationDenied", self._on_authorization_denied) self.proxy.connect_to_signal("CredentialsCleared", self._on_credential_cleared) self._window_id = window_id self._credentials = None def _get_params(self): p = {} if self.help_text: p['help_text'] = utf8(self.help_text) if self._window_id: p['window_id'] = self._window_id return p def find_credentials(self): LOG.debug("find_credentials()") self._credentials = None self.proxy.find_credentials(self.appname, self._get_params()) def login(self): LOG.debug("login()") self._credentials = None self.proxy.login(self.appname, self._get_params()) def login_or_register(self): LOG.debug("login_or_register()") self._credentials = None # print "login_sso::login_or_register:", self.appname, self._get_params() self.proxy.register(self.appname, self._get_params()) def logout(self): LOG.debug("login_or_register()") self._credentials = None self.proxy.clear_credentials(self.appname, {}) def _on_credentials_not_found(self, app_name): LOG.debug("_on_credentials_not_found for '%s'" % app_name) if app_name != self.appname: return self.emit("login-failed") def _on_credentials_found(self, app_name, credentials): LOG.debug("_on_credentials_found for '%s'" % app_name) if app_name != self.appname: return # only emit signal here once, otherwise it may happen that a # different process that triggers the on the dbus triggers # another signal emission here! if self._credentials != credentials: self.emit("login-successful", credentials) self._credentials = credentials def _on_credentials_error(self, app_name, error, detailed_error=""): LOG.error("_on_credentials_error for %s: %s (%s)" % ( app_name, error, detailed_error)) if app_name != self.appname: return # FIXME: do something useful with the error self.emit("login-failed") def _on_authorization_denied(self, app_name): LOG.info("_on_authorization_denied: %s" % app_name) if app_name != self.appname: return self.cancel_login() self.emit("login-canceled") def _on_credential_cleared(self, app_name): LOG.info("_on_credential_cleared: %s" % app_name) if app_name != self.appname: return self.emit("logout-successful") youker-assistant/backends/kylin-assistant-daemon/src/sso/login_impl/__init__.py0000664000175000017500000000000013260315532027020 0ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sso/piston/0000775000175000017500000000000013260315533024105 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sso/piston/__init__.py0000664000175000017500000000000013260315532026203 0ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/sso/piston/ubuntusso_pristine.py0000664000175000017500000000153613260315532030447 0ustar fengfengfrom piston_mini_client import PistonAPI, returns_json from piston_mini_client.validators import oauth_protected # These are factored out as constants for if you need to work against a # server that doesn't support both schemes (like http-only dev servers) PUBLIC_API_SCHEME = 'http' AUTHENTICATED_API_SCHEME = 'https' # this is only here because: # a) ubuntu-sso-client does not support verifying if the credentials # are still valid # b) the restful client interface is not really needed because we just # need this one single call class UbuntuSsoAPI(PistonAPI): default_service_root = 'http://localhost:8000/api/2.0' @oauth_protected @returns_json def whoami(self, id=None): # return self._get('accounts?ws.op=me', # scheme=AUTHENTICATED_API_SCHEME) return self._get('accounts?ws.op=me') youker-assistant/backends/kylin-assistant-daemon/src/sso/ubuntusso.py0000664000175000017500000002221013260315532025206 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (C) 2010 Canonical # # Authors: # Michael Vogt # Robert # # 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; version 3. # # 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, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA from gi.repository import GObject, GLib from gettext import gettext as _ import logging # import os import piston_mini_client.auth import piston_mini_client.failhandlers # mostly for testing #from fake_review_settings import FakeReviewSettings, network_delay #from spawn_helper import SpawnHelper from .login import get_login_backend from .piston.ubuntusso_pristine import ( UbuntuSsoAPI as PristineUbuntuSsoAPI, ) # patch default_service_root to the one we use from .enums import UBUNTU_KYLIN_SSO_SERVICE # *Don't* append /api/1.0, as it's already included in UBUNTU_SSO_SERVICE PristineUbuntuSsoAPI.default_service_root = UBUNTU_KYLIN_SSO_SERVICE from .enums import ( SOFTWARE_CENTER_NAME_KEYRING, SOFTWARE_CENTER_SSO_DESCRIPTION, ) import dbus LOG = logging.getLogger(__name__) class UbuntuSSO(GObject.GObject): """ Ubuntu SSO interface using the oauth token from the keyring The methods that work synchronously are suffixed with _sync() """ __gsignals__ = { "whoami": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT,), ), "logout": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (), ), "fail": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (), ), "error": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT,), ), } def __init__(self, xid=0): GObject.GObject.__init__(self) self.oauth = None self.xid = xid self.show_register = True self.sso = get_login_backend( self.xid, SOFTWARE_CENTER_NAME_KEYRING, _(SOFTWARE_CENTER_SSO_DESCRIPTION)) self.sso.connect("login-successful", self._dbus_maybe_login_successful) self.sso.connect("login-failed", self._fail) self.sso.connect("login-canceled", self._fail) self.sso.connect("logout-successful", self._logout_successful) def set_show_register(self, show): self.show_register = not not show def whoami(self, token): auth = piston_mini_client.auth.OAuthAuthorizer( token["token"], token["token_secret"], token["consumer_key"], token["consumer_secret"]) api = PristineUbuntuSsoAPI(auth=auth) try: res = api.whoami() except piston_mini_client.failhandlers.APIError as e: print("api.whoami failed with APIError: '%s'" % e) LOG.exception("api.whoami failed with APIError: '%s'" % e) if len(res) == 0: self.emit("error") self.oauth = None else: self.emit("whoami", res) def _dbus_maybe_login_successful(self, sso_backend, oauth_result): # LOG.debug("_login_successful") # print("ubuntusso::_login_successful oauth_result: %s" % oauth_result) self.oauth = oauth_result self.whoami(self.oauth) # self.loop.quit() # def verify_token(self, token): # """ Verify that the token is valid # # Note that this may raise httplib2 exceptions if the server # is not reachable # """ # # LOG.debug("verify_token") # auth = piston_mini_client.auth.OAuthAuthorizer( # token["token"], token["token_secret"], # token["consumer_key"], token["consumer_secret"]) # api = PristineUbuntuSsoAPI(auth=auth) # try: # res = api.whoami() # except piston_mini_client.failhandlers.APIError as e: # print "api.whoami failed with APIError: '%s'" % e # LOG.exception("api.whoami failed with APIError: '%s'" % e) # return False # return len(res) > 0 def clear_token(self): # clear_token_from_ubuntu_sso_sync(SOFTWARE_CENTER_NAME_KEYRING) # sso = self. _get_login_backend_and_connect() self.sso.logout() # GLib.timeout_add_seconds(2, self.loop.quit()) # self.loop.run() # return True # def _get_login_backend_and_connect(self): # sso = get_login_backend( # self.xid, # SOFTWARE_CENTER_NAME_KEYRING, # _(SOFTWARE_CENTER_SSO_DESCRIPTION)) # sso.connect("login-successful", self._dbus_maybe_login_successful) # sso.connect("login-failed", self._fail) # sso.connect("login-canceled", self._fail) # sso.connect("logout-successful", self._logout_successful) # return sso def _fail(self, sso_backend): self.emit("fail") def _logout_successful(self, sso_backend): self.oauth = None self.emit("logout") def find_oauth_token(self): self.oauth = None # sso = self. _get_login_backend_and_connect() self.sso.find_credentials() # self.loop.run() # return self.oauth def get_oauth_token(self): self.oauth = None # sso = self. _get_login_backend_and_connect() if self.show_register: self.sso.login_or_register() else: self.sso.login() # self.loop.run() # return self.oauth # def get_oauth_token_and_verify(self, no_relogin=False): # token = self.oauth # # check if the token is valid and reset it if not # if token: # # verify token will return false if there is a API error, # # but there may be httplib2 errors if there is no network, # # so ignore them # try: # if not self.verify_token(token): # attempt_relogin = not no_relogin # if attempt_relogin: # self.clear_token() # # re-trigger login once # token = self.get_oauth_token() # else: # return None # except Exception as e: # print "token could not be verified (network problem?): %s" % e # LOG.warn( # "token could not be verified (network problem?): %s" % e) # return token # # def find_oauth_token_and_verify(self): # token = self.find_oauth_token() # # check if the token is valid and reset it if not # if token: # # verify token will return false if there is a API error, # # but there may be httplib2 errors if there is no network, # # so ignore them # try: # self.verify_token(token) # except Exception as e: # print "token could not be verified (network problem?): %s" % e # LOG.warn( # "token could not be verified (network problem?): %s" % e) # return token def get_ubuntu_sso_backend(): #get_ubuntu_sso_backend(xid): """ factory that returns an ubuntu sso loader singleton """ # if "SOFTWARE_CENTER_FAKE_REVIEW_API" in os.environ: # ubuntu_sso_class = UbuntuSSOAPIFake() # LOG.warn('Using fake Ubuntu SSO API. Only meant for testing purposes') # else: ubuntu_sso_class = UbuntuSSO() #UbuntuSSO(xid) return ubuntu_sso_class # # test code # def _login_success(lp, token): # print "success", lp, token # # # def _login_failed(lp): # print "fail", lp # # # def _login_need_user_and_password(sso): # import sys # sys.stdout.write("user: ") # sys.stdout.flush() # user = sys.stdin.readline().strip() # sys.stdout.write("pass: ") # sys.stdout.flush() # password = sys.stdin.readline().strip() # sso.login(user, password) # # # # interactive test code # if __name__ == "__main__": # def _whoami(sso, result): # print "res: ", result # Gtk.main_quit() # # def _error(sso, result): # print "err: ", result # Gtk.main_quit() # # def _dbus_maybe_login_successful(ssologin, oauth_result): # print "got token, verify it now" # sso = UbuntuSSO() # sso.connect("whoami", _whoami) # sso.connect("error", _error) # sso.whoami() # # from gi.repository import Gtk # # logging.basicConfig(level=logging.DEBUG) # # softwarecenter.paths.datadir = "./data" # # backend = get_login_backend("", "appname", "help_text") # backend.connect("login-successful", _dbus_maybe_login_successful) # backend.login_or_register() # Gtk.main() youker-assistant/backends/kylin-assistant-daemon/src/sso/login.py0000664000175000017500000000573513260315532024264 0ustar fengfeng#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (C) 2010 Canonical # # Authors: # Michael Vogt # # 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; version 3. # # 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, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA from gi.repository import GObject import logging # import os LOG = logging.getLogger(__name__) class LoginBackend(GObject.GObject): NEW_ACCOUNT_URL = None FORGOT_PASSWORD_URL = None __gsignals__ = { "login-successful": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT,), ), "login-failed": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (), ), "login-canceled": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (), ), "need-username-password": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (), ), "logout-successful": (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (), ), } def login(self): raise NotImplemented def login_or_register(self): raise NotImplemented def find_credentials(self): raise NotImplemented def cancel_login(self): self.emit("login-canceled") def logout(self): raise NotImplemented def get_login_backend(window_id, appname, help_text): """ factory that returns an SSO loader singleton """ # if "SOFTWARE_CENTER_FAKE_REVIEW_API" in os.environ: # from backend.login_impl.login_fake import ( # LoginBackendDbusSSOFake) # sso_class = LoginBackendDbusSSOFake(window_id, appname, help_text) # LOG.warn('Using fake login SSO functionality. Only meant for ' # 'testing purposes') # else: from sso.login_impl.login_sso import ( LoginBackendDbusSSO) sso_class = LoginBackendDbusSSO(window_id, appname, help_text) return sso_class #if __name__ == "__main__": # logging.basicConfig(level=logging.DEBUG) # from models.enums import SOFTWARE_CENTER_NAME_KEYRING # login = get_login_backend(0, SOFTWARE_CENTER_NAME_KEYRING, "login-text") # login.login() # from gi.repository import Gtk # Gtk.main() youker-assistant/backends/kylin-assistant-daemon/src/sso/__init__.py0000664000175000017500000000000013260315532024667 0ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/slider/0000775000175000017500000000000013260315533023247 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/src/slider/wizard.py0000664000175000017500000002435113260315532025125 0ustar fengfeng#! /usr/bin/env python3 # -*- coding: utf-8 -*- ### BEGIN LICENSE # Copyright (C) 2013 ~ 2014 National University of Defense Technology(NUDT) & Kylin Ltd # # Author: Kobe Lee # Maintainer: Ubuntu Kylin # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, 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 . ### END LICENSE import os import gtk import gobject import math import locale #samples:https://developer.gnome.org/pygtk/stable/class-gdkwindow.html class TimeController(gobject.GObject): __gsignals__ = { 'update': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_FLOAT,)), 'completed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), } def __init__(self, timeout): gobject.GObject.__init__(self) self.timeout = timeout self.container = [] def start(self): tmp = (self.timeout / 1000.0) * 30.0 while len(self.container) <= tmp: curve = lambda x: math.sin(math.pi / 2 * x) self.container.append(curve(len(self.container) * (1.0 / tmp))) self.container.reverse() gobject.timeout_add(int(self.timeout / tmp), self.update) def update(self): self.emit('update', self.container.pop()) if len(self.container) == 0: self.emit('completed') return False return True class WizardEventBox(gtk.EventBox): __gsignals__ = { 'close': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),} def __init__(self, slider_icons=None, pointer_icons=None, button_icons=None): gtk.EventBox.__init__(self) self.set_visible_window(False) self.add_events(gtk.gdk.BUTTON_PRESS_MASK |gtk.gdk.POINTER_MOTION_MASK) # 显示图片事件 self.connect("expose-event", self.on_expose_event) # 鼠标点击滑动点的事件 self.connect("motion-notify-event", self.on_motion_notify) # 鼠标事件 self.connect("button-press-event", self.on_button_press) # 幻灯片图片 self.slider_pics = list(map(gtk.gdk.pixbuf_new_from_file, slider_icons)) # 幻灯片总数 self.icon_num = len(slider_icons) # 滑动圆点图片设置 self.pointer_pic, self.pointer_pic_active = list(map(gtk.gdk.pixbuf_new_from_file, pointer_icons)) # 开始按钮图片设置 self.btn_pic, self.btn_pic_press = list(map(gtk.gdk.pixbuf_new_from_file, button_icons)) button_size = 55 self.pointer_dict = {} self.index = 0 self.dsc_index = None slider_pixbuf = self.slider_pics[0] self.slider_width = slider_pixbuf.get_width() self.slider_height = slider_pixbuf.get_height() self.set_size_request(self.slider_width, self.slider_height) self.pointer_width = self.pointer_pic.get_width() self.pointer_height = self.pointer_pic.get_height() pointer_width = self.pointer_width * self.icon_num + 10 * (self.icon_num - 1) self.pointer_sx = (self.slider_width - pointer_width) / 2 self.pointer_y = self.slider_height -40 # 开始按钮区域 self.btn_rect = gtk.gdk.Rectangle((self.slider_width - self.btn_pic.get_width()) / 2, self.slider_height - self.btn_pic.get_height() - button_size, self.btn_pic.get_width(), self.btn_pic.get_height()) self.alpha = 1.0 self.active_x = 0 self.dsc_x = None self.slider_y = 0 self.showing = False self.show_index = None gobject.timeout_add(2000, lambda : self.start_slider(1000)) def draw_pixbuf(self, cr, pixbuf, x=0, y=0, alpha=1.0): if pixbuf != None: cr.set_source_pixbuf(pixbuf, x, y) cr.paint_with_alpha(alpha) def on_expose_event(self, widget, event): # samples:http://zetcode.com/gui/pygtk/drawing/ cr = widget.window.cairo_create() rect = widget.allocation cr.save() self.draw_pixbuf(cr, self.slider_pics[self.index], rect.x + self.active_x, rect.x + self.slider_y, self.alpha) if self.dsc_index != None and self.dsc_x != None: self.draw_pixbuf(cr, self.slider_pics[self.dsc_index], rect.x + self.dsc_x, rect.y + self.slider_y, self.dsc_alpha) cr.restore() dot_start_x = rect.x + self.pointer_sx for i in range(self.icon_num): if self.dsc_index == None: if self.index == i: dot_pixbuf = self.pointer_pic_active else: dot_pixbuf = self.pointer_pic else: if self.dsc_index == i: dot_pixbuf = self.pointer_pic_active else: dot_pixbuf = self.pointer_pic pointer_rect = gtk.gdk.Rectangle( dot_start_x, rect.y + self.pointer_y, self.pointer_width, self.pointer_height) self.pointer_dict[i] = pointer_rect self.draw_pixbuf(cr, dot_pixbuf, dot_start_x, rect.y + self.pointer_y) offset = self.pointer_width + 10 dot_start_x += offset if self.dsc_index == self.icon_num - 1: if self.button_hover_flag: pixbuf = self.btn_pic_press else: pixbuf = self.btn_pic self.draw_pixbuf(cr, pixbuf, rect.x + self.btn_rect.x, rect.y + self.btn_rect.y) return True def on_motion_notify(self, widget, event): self.show_index = None for index, rect in list(self.pointer_dict.items()): if rect.x <= event.x <= rect.x + rect.width and rect.y <= event.y <= rect.y + rect.height: self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2)) self.show_index = index break else: self.show_index = None self.window.set_cursor(None) x, y, w, h = self.btn_rect if (event.x >= x and event.x <= x + w and event.y >= y and event.y <= y + h): self.button_hover_flag = True else: self.button_hover_flag = False self.queue_draw() def on_button_press(self, widget, event): # 当前不是空时,重新播放 if self.show_index != None: self.start_slider(1000, self.show_index) # 点击“开始”按钮,关闭启动界面 x, y, w, h = self.btn_rect if (event.x >= x and event.x <= x + w and event.y >= y and event.y <= y + h): self.emit("close") def start_slider(self, animation_time, dsc_index=None, direction="left"): if dsc_index is None: if self.index >= self.icon_num - 1: return False dsc_index = 0 else: dsc_index = self.index + 1 else: if dsc_index < self.index: direction = "right" if not self.showing: self.showing = True self.dsc_index = dsc_index self.timecontroller = TimeController(animation_time) self.timecontroller.connect("update", lambda source, status: self.update_slider(source, status, direction)) self.timecontroller.connect("completed", lambda source: self.complete_slider(source, dsc_index)) self.timecontroller.start() return True def update_slider(self, source, status, direction): self.alpha = 1.0 - status self.dsc_alpha = status if direction == "right": self.active_x = self.slider_width * status self.dsc_x = 0 else: self.active_x = 0 - (self.slider_width * status) self.dsc_x = 0 self.queue_draw() def complete_slider(self, source, index): self.index = index self.alpha = 1.0 self.dsc_alpha = 0.0 self.showing = False self.active_x = 0 self.dsc_x = None self.queue_draw() class Wizard(gtk.Window): def __init__(self): gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) self.set_decorated(False)#去掉默认标题栏 self.set_position(gtk.WIN_POS_CENTER) self.set_resizable(False) self.window_align = gtk.Alignment() self.window_box = gtk.VBox() # 图片与边框的距离 self.window_align.set(0.0, 0.0, 1.0, 1.0) self.window_align.set_padding(2, 2, 2, 2) self.add(self.window_align) self.window_align.add(self.window_box) wizard_dir = "/usr/share/kylin-assistant/qml/img/zh_CN/wizard" wizard_root_dir = "/usr/share/kylin-assistant/qml/img/icons" slider_icons = (os.path.join(wizard_dir, "%d.png" % i) for i in range(3)) pointer_icons = (os.path.join(wizard_root_dir, "dot_normal.png"), os.path.join(wizard_root_dir, "dot_active.png")) button_icons = (os.path.join(wizard_dir, "start_normal.png"), os.path.join(wizard_dir, "start_press.png")) self.event_box = WizardEventBox(slider_icons, pointer_icons, button_icons) self.event_box.connect("close", lambda widget: self.destroy()) self.connect("destroy", self.destroy_wizard) self.window_box.add(self.event_box) # 鼠标拖动界面 self.move_window_event(self.event_box) def destroy_wizard(self, widget): print('Kylin-Assistant slide show is over!') #widget.destory() def is_left_button(self, event): return event.button == 1 def move_window(self, event, widget):#kobe if self.is_left_button(event): widget.set_can_focus(True) widget.grab_focus() self.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time) return False def move_window_event(self, widget): widget.connect("button-press-event", lambda w, e: self.move_window(e, w)) def show_slider(self): self.show_all() gtk.main() youker-assistant/backends/kylin-assistant-daemon/src/slider/__init__.py0000664000175000017500000000002313260315532025352 0ustar fengfeng#!/usr/bin/python3 youker-assistant/backends/kylin-assistant-daemon/dbus/0000775000175000017500000000000013260315532022132 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/dbus/com.kylin.assistant.systemdaemon.conf0000664000175000017500000000164613260315532031432 0ustar fengfeng youker-assistant/backends/kylin-assistant-daemon/dbus/com.kylin.assistant.systemdaemon.policy0000664000175000017500000000135013260315532031774 0ustar fengfeng Kylin Assistant www.kylinos.cn kylin-assistant <_description> system level settings <_message> To Change the settings, you need to authenticate. auth_admin auth_admin auth_admin youker-assistant/backends/kylin-assistant-daemon/dbus/com.kylin.assistant.sessiondaemon.service0000664000175000017500000000014013260315532032270 0ustar fengfeng[D-BUS Service] Name=com.kylin.assistant.sessiondaemon Exec=/usr/bin/kylin-assistant-session.py youker-assistant/backends/kylin-assistant-daemon/dbus/com.kylin.assistant.systemdaemon.service0000664000175000017500000000015113260315532032133 0ustar fengfeng[D-BUS Service] Name=com.kylin.assistant.systemdaemon Exec=/usr/bin/kylin-assistant-backend.py User=root youker-assistant/backends/kylin-assistant-daemon/data/0000775000175000017500000000000013260315533022107 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/data/ubuntukylin-default-settings.ini0000664000175000017500000000234113260315532030460 0ustar fengfeng[font] font-name=Ubuntu 11 font=Ubuntu 11 monospace-font-name=Ubuntu Mono 13 document-font-name=Sans 11 titlebar-font=Ubuntu Bold 11 text-scaling-factor=1 hinting=slight antialiasing=rgba [icon] icon-theme=ubuntukylin-icon-theme show-desktop-icons=1 home-icon-visible=1 network-icon-visible=0 trash-icon-visible=1 volumes-visible=1 [cinnamon-icon] show-desktop-icons=1 computer-icon-visible=1 home-icon-visible=1 network-icon-visible=0 trash-icon-visible=0 volumes-visible=1 [file] always-use-location-entry=0 automount=1 automount-open=1 autorun-never=0 thumbnail-size=64 maximum-age=180 maximum-size=512 [unity] icon-size=48 launcher-hide-mode=0 launcher-opacity=0.2 backlight-mode=only run app dash-blur-experimental=2 panel-opacity=0.2 [mouse] cursor-theme=DMZ-White cursor-size=24 [touchpad] touchpad-enabled=1 horiz-scroll-enabled=1 scrollbar-mode=overlay-auto scroll-method=two-finger-scrolling [window] button-layout=close-minimize-maximize: menus-have-icons=0 mouse-wheel-action=none action-double-click-titlebar=toggle-maximize action-middle-click-titlebar=lower action-right-click-titlebar=menu [datetime] time-format=locale-default show-seconds=0 show-day=0 show-date=0 [power] icon-policy=present show-percentage=0 show-time=0 youker-assistant/backends/kylin-assistant-daemon/data/beautify/0000775000175000017500000000000013260315532023716 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/0000775000175000017500000000000013260315532025577 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/0000775000175000017500000000000013260315533031127 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/xx2.png0000664000175000017500000004347313260315532032370 0ustar fengfengPNG  IHDR |l pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3;iTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-28T17:10:16+08:00 2014-03-03T10:55:40+08:00 2014-03-03T10:55:40+08:00 xmp.iid:06275ec7-05ef-c240-8285-0e7f64152a22 xmp.did:bf7b41f4-b3d9-1a49-8a5e-ca59dee38c96 xmp.did:bf7b41f4-b3d9-1a49-8a5e-ca59dee38c96 created xmp.iid:bf7b41f4-b3d9-1a49-8a5e-ca59dee38c96 2014-02-28T17:10:16+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:688cd297-4052-5649-a9b8-a5d904880ad9 2014-02-28T17:10:16+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:06275ec7-05ef-c240-8285-0e7f64152a22 2014-03-03T10:55:40+08:00 Adobe Photoshop CC (Windows) / image/png 3 sRGB IEC61966-2.1 1 720000/10000 720000/10000 2 1 12 12 0 cHRMz%u0`:o_FIDATM.CzWP4-FVHc8CØI$IFJ$Ɂs-`ɭc%Yzuν$|')»?HIǗ %9ʳvd&+[376d*)#I$%I$I vzIENDB`youker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/xx.png0000664000175000017500000004355413260315532032306 0ustar fengfengPNG  IHDR |l pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3;iTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-28T17:08:29+08:00 2014-03-03T10:55:19+08:00 2014-03-03T10:55:19+08:00 xmp.iid:1d777673-79a3-3247-a77a-3d987d673684 xmp.did:39c198ec-b967-3e49-b180-e8229f74daae xmp.did:39c198ec-b967-3e49-b180-e8229f74daae created xmp.iid:39c198ec-b967-3e49-b180-e8229f74daae 2014-02-28T17:08:29+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:95d11a64-c087-c049-95d9-e00208f0fea8 2014-02-28T17:08:29+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:1d777673-79a3-3247-a77a-3d987d673684 2014-03-03T10:55:19+08:00 Adobe Photoshop CC (Windows) / image/png 3 sRGB IEC61966-2.1 1 720000/10000 720000/10000 2 1 12 12 . cHRMz%u0`:o_FIDATO+^ ҫFaK Ep3%$Ww>yڮ(̈cɡy-s 5"6Ӷcǣ?UeVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3EiTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-24T11:05:48+08:00 2014-03-03T14:16:11+08:00 2014-03-03T14:16:11+08:00 image/png xmp.iid:7aeb4ea0-4213-e149-af22-999bbd3e7935 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 created xmp.iid:b9f03e06-8a9e-ed42-b19f-6965f63f7488 2014-02-24T11:05:48+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:9046a85f-7e2f-e544-8a38-689aad1d37e0 2014-02-24T21:32:15+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:db8eefcb-4641-0e41-a02b-07f505dca552 2014-03-03T14:16:11+08:00 Adobe Photoshop CC (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:7aeb4ea0-4213-e149-af22-999bbd3e7935 2014-03-03T14:16:11+08:00 Adobe Photoshop CC (Windows) / xmp.iid:db8eefcb-4641-0e41-a02b-07f505dca552 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 3 sRGB IEC61966-2.1 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin 拷贝 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 1 720000/10000 720000/10000 2 1 1980 500 P2 cHRMz%u0`:o_FvIDATx-pj̽M{g/b;K 0>%VIl$&o& :Y7 yS,{UOR 3kHx0ĒR&'sL.gOB7;\ЯwOL8 7F2ːŭ+@<}ܠzMWT25c3ܩ.3}9L.rXa3ށ 4on \Ӛ/NGAsf5P_{R-?GvW5:ǝuT"ZMLs7okBKv]jlg]x8>uJnT(}f80/^H uh]: |<,L^7oeXmQ7mMh @f&z7? n.eeY^l o cDM )>+WL@h wǽS1j},t0 /D΃C`,B&KZ}~'c_]<,Zxj"yB|x| Dt^-!c?rk| \c7-lw_C^/ōf6bWP{I=^ѥ{Ӻy=2O,{g,2<%/"}dOGB|c!o:7p# q=*\\&ڇM&<OhLbÉ߆.%D#B-yOrԮ^yڗ|_\/Y$Ku:WbT#L >{ 1 9}"p5.+#n+:Q^9RqC)ꜘG'OnYH{~C3+n邉k\xwn^CQ8EJ{kS|w؆9w7M7p1{Bs$Ķ" y=Y6?s3@+0U1'`vჾw͗ʿYrpE?.8fe;A3%όqo"<% ɭ69C±nd-`9!^@_>.V xJ<-{KX;# # KD07p2؈8g0my΍U;B?BiL }iRx^rCזs${CN^^1%燎)x<\&YNӉn۟}zwm)?ݑeIoKɨ!yR -Ü2ﻊНsGB:Y-뭤|9]Rw94s Wף%\y/l.<aP8ie d'~{>e8f]iφ%|`yp6Ӳ'7zD.=uL̒Gwȫ:Qu]'ȦpVl'zD~ #x287j{ z~yH$w1SoUi3d$y=C"Thh% ױ@wmˇÇ0}-$/߭$GڽQh!>X{bVyA|œgң; b*|1PN&P=;8Rc=sky}o!?H>eIԁ;>g%<#w-ŕ8+ uw3ԡp Jd 8x6K՛7Fz<= cY|Azj%M^O";W]Ds "7 =GYO70|镨ۈVyDoAnn{JEKs)Mua̓: y~{WzN'Jb滷Ѯ%^';B|w>\nx{/7q?jA~_58ō-ZHlj|V 6^wk+M.[}}OA,Mﴍuq >ּh'lZ}A~^O#;; t\{*9խ9û 6N%o#[a׷؏3uB]Fy;p 2}kzH])}}Y'${"+x<%. yȾ:Sj,>4 賗^5|gO~F(7ΟJoy-]^%HwcN#ovرW ϗbz' ˁ/Ydwݏ$5l-*|1z=h|@xlpa~} ".{*񿎍x㸸1Ht 3Tj$.o쳡c?~ƶ5& Q2W`+0}I%kqJ(߁n u^]=}COO< !̏״'oGr=+FNM\i wl8UOpvz6: R8=NL]I^ޯe$? yvGS:$jOrgX߆df`G{uOa󳽽] o  +UNJ9X: e*m|۝FVIcB/;.ʀ~@[Zlٹ e.)͕z$D7 &[H'[1e7[wo䓈ooj PVZr}DݴPsv6b']6Mfkhoz>37pXӡUd +5v ?Ct>6% .xHdT?5M5,Sӕܴ\N9יj}}w(; qx3cۑ~K *T(\"nL2z֧Ȝ 2콋죺`{Ơ LꝽ; zZD]:aBc YCTs}ࠤ 9?EwGKs|uĐg^_1t"Bg;1kυ9ﲬB#dpU2_Cpo@6h7T:P+q܎ վkʚ7K{%~g7:F~?z|!$L#i>+['鶎s^4_9gM]ҳ;k~egMT}B"CōB|=+t@_v"6"w[أi$/:qg]K#D ,E_puO0t0=ow;MѢ@zp k!؛{۴5tZsK6\A]+_b=n0_x)PLR?*tߤL+;e ؿvͼ?CCݮ$ϯVҋޡ8O)K-;8n>sxAz dH(;J6qMs/(zq#IoA i= J*TI@;?*v3Ne$Hx8 2[^}.Bhߍ~ 4Oeɑkh0f~Η;Vebt$xz'm=wsS/  b2s#ud܇ O~%l~}n?ٸU}IU凶^,;{~-.Љ/`ǃn}݃w=IsITOSv͝GP׶4] M|__mQs{[O/><|sG7?ڹYV?!89vIN2Wk*ޭŽMftLBC]PAvV2:a`xxT-՘~Uʑ*T l+'ۧRA5+%BNT;f w]cY"!Jp S!ƀviރP(U<ԮAS_Iީ/Vx|_lg.+_n,1]&7~^QOxgO:[7/}@ol7 r ōC س0J7}/H&nL ?1%͙ NggY:S ~pȈp'ݘC6U9uM bOk-L9ĞM#ǯdm`%_:/h&f;7n' 7Zp/=h#w$gj\ lkZg;tQrz^uبwV$A(G 9OԷW\-̰Fz<棶yZN9Gɕ:&A'8!Ν ZȏDwJsۚR2:9Qz w?ƇJt.| YzA:tw1HZ yr]E߾g`cmG6ptdI\ًI(U6*",fˣ;]j]ɳdxЋN;x޻uCE8yז@)X)jm9;v؛tXwNEm>B\s"@ʵtH;r'~2;jt~}?9st 15C4釿p"|Ci{=ޥgﭛBKPXF|ڒeOL.0kd)qady[KzN{'MW5y36U ebZCu =ui8 AMMޚ*:a(ݮ`Oɭ!pAG1ܤRu{JTzrS]߼d>l+0oXMg|;d\mכ1<lCHeeXCkeX٪]|#(@"oAk뾚:sQ}Ibbw/ufpKq;]GZ}ߵ2Vg>=o!!ey55W ًHlIqע_y,?殥6 onjw%9HohHxmlMq\9aH ^}2B6/A QO)yW'BEl%y=Cc[ř=ZL5q|=䛴Sz! .4~Jdw{IT8Kz,Mk8񞲯% ts\?;ܜRFPc_=w_9Zޛ65Ho8ŷݝAM{[ݴ3d5宎QhWW^߳X%?Uŕ?5DX§keuW_:RHƢt}Ycju;y<77AWQ{w b^yߡB7>g\]$]v{&q<&ڼ;u_mOW.Aypcz W)#X&|m-,8[wXzM{ o$Fxs ޏ^Dƫços_sS]twʏ9{tsǷg6 u9U"}r CmGӷmNB0gh#ͫ1DՌpٔi oOm;t^tWo|ph;x'7MI|)酳m):.iJW{%!_՞\2Jhzc mi@F5Znowa2s^ᅫ;f ;e80 ժ>2)wyu=ѶvnΖrL_ݏȚ rh~ I3u/ A%Zܨ%K]yEFfT? : Jչlw`=|l)g\W /\;mO r?ٓÚa=JQ½\{Yf ܏&f@J(geLᖰܪ-;+7Zn!Lů 9ca~0:p=r{Ѩ"^=pEpBgbMū3>Ǟ(/\^jӑkwdds>jV\CYԲ|Fu^ꭹEImU }FA}iPf#ڭCih<t@)vw*bTC|ICaOzuH":WKf~Fw1C^DǓWQK zK=.,19Wg/+g Kظ3>{ޞy| =;~ih^/ -eaR܍Wh,`ޕ{krf 5s\sHw¤[~g+9Rޤ2!En{byRг~m6 MX"H63$&:Ö]z] +&E}|'>?[U (zInUvͻ1r{G 9ܿ)R\ŵzDvv.gbZ*E~8Ƿ>cH$})MĔA|KSa}_A|ݔgb3Dhsޏ[ Ip6<2sb[UuvQ i$uwh[mm!T4v+YAhS-kSEғ"3.ߨ-1JOsJb}o>S_3/Sޠ5^*Lk9-F@8cZr|y{!ythQ.K@DđGkkG˽s=^-mNMX{̬5QS!25K.Z 5[אߞ k/k;?!=!)\=wa? }邊߶$wؼGM}mtӗy{g:~S0WjF,`_d8y9G!y6G;l*#~_ĔV?Q_.6к}Σ.I 4Hou=y!7hiJZݗ.ٛdXll)\\=": Ri!SLXMa-s++-) kjhم"-ݜ7 lX5:.dId4&ˡ'3~`v~pe*G5.3JmFIY$oV/;: {v*5hiQ)wtڽw)Ͼ֟\>m]BӨ&eCfO,0;v$<d=:y'jΦH~3>+* ݾ1ʈ!ɋf!C WNI| qnet;ςi4p`aǁ{}-;3=ZwN_$dy^ܥIM ƒO=lх XYm2Oۂpml ;(I;>T:lB_:`W!N/YJy@ c._RaᗔN 3ͩs(3{bCw y':ZAԆ`[#{8O%$  /"nomYu֓:mdc#Ub.Gp h3)-痒zn6٪92}mpiey["̸WBGxO>ݓvUj\7i^z+M>ih0뾦rNGqNg"YI߱;`~uX&VW͹-{|p;Mg?Fr1i囩C;FMە֔mkO䔲H>dIWa9?Xk1hsPG[;iv7 ;1HoE  VFKQQ(OIQ˕n7w̤. c,j;BļҔl|~*iܭJFfyɻz!i:)Dz5yX;Bc-ePܳ&,\%}tt-E^ػߏ9X'jCP;]]&Jf7xsLF`s2HxsrŨ͞D t2v;lmj|}_cq]&ӷC#|Lw3XqrFHGM$._/4?uڭ2!m! }J $IāT|ćFeǒΑK*q(xqBդ2h;Y5{|tX2嵏6-/ &.th`'L˺ieSf>\Zf4fd)n*uD?fOvKd&2T[CTz0FEo\B/7 } $w3[- N~R?O=MJy,$O ޡUy+R}X']nkC`?Fr_Qןt0 f~ rwq.Jvݸ.,2~T0mqs;1lP0`!I&MHmqXu^+*| LC 5hYП97xl>ѻGQ3߼nU!6q j40n!c[Bz_yâV  Sn-OWJ{*ܓ'#d}\rʍ#}irޖ6-dhCN,ʙmWAg9TY$:!LiͻQ>/nSykHoT=Uz=vCydЋ]=TNۛtC)YD S{}-mMbv.;rrz1sbxtm}fU~ϒlcuz8xu~Ȝ]wxːd+ZFۍa.5`lD·hKQq=]KxCaK_4o4X%sG-'svi>>~\+ 6$TIK,QNj-{Քֽj?ۇa"ݖN m󰹰**v[L:Yԗ6)}'NtR=*Kv Cmpf|XE{}MRzw=KUwR/S>Q4oQ 6S`^/y3g3 ED7#Gx}_H|[x&^7'Dz]h|FG88k71${JNXΦ[eoE^]/-Kʓʅ|1Tk=:*O,[=LMX%fe:3,54Lzv{Zhb.WAkR^VmAyQ, .K6w:O2N,Ⱥ :hn`ˁ{}\m]JalfDkһTg?5GD|83A矪beqY ԢXTry&0 q{_o;v@zj \oVVhgUJL ׊{}GJF;a9rƿkC4 -0O djQ( MoZڄLðoDc¦E>rgI0;'I3O+ z|knCŵׁ9в=@;HW$µ6^o̞7}R5X_(nTym!r!{{W=zZCDk׆~dاTy3ZkSoos-^y7,?'留c$5RuP7sl$w.T=]eٹ^MQh]D${9 o、VޡNJz. 07`@ 3ko_0[m%ܠ_0':>\ҖsDz/Y.$e ^т~ ΈVgݷ 8qvʙtsqhI뛝φ?i1e2$?$^jNzo:Mxc5.miLǨ%sR }s.̔z֐4]/Qq/τǗsDagdHWae lY5ہ8WtWaicjxz vwq5¤^A8ő##~0Cr'C%\2Ȧ_ۥ#H#r)ī[PKk׿"#܄gOvD7$ MӄTv?n\co}8mfM AЋ0k}8h||MSnK-FmqπeNv*wNءt"} pk;ٹ*3nM KD79Cgqpp#b(Қ7*ΑμdQΔu';l7??(^"(mZ֝zIzF\װ7:cKلx9'd@NdNSk:`, .^.$[Z< WjGS< 7,/dP||bצ{_)wG{Erc#QHν@xQ NJ.rI_^Fk_! ~5ȅy}zB?s܎Q; aQMwޖ眊{7"7} ~)9?*<&Wת2+{HfxOs4~vY&ڮWoμM"Lmy]Rڢ IKNH0,߳g1*f\u?tw^"+frmGPW=.7G6o{G:Ov펌׻.Kmʴw87D66K?Pby Kd ghrOҞ_Q&Tݍ.zm린%RhDܕ'%}׋fdHibBC?(4Ly7L9Ć6DAb)BGR}Q4sf::y}S9tVxvNup΅q?zmw=0yt3Fiubto)mݽ*IC5w/yZ|}\p.@x2-<>/USBbbO?cd1,#{"T\naMʅn- |.P[t/i+gg/6=ñɂL!pPI2JBc3K_u?byG:Op* xMHr X6eÀ$.3A nLl(ۙ_u99B,S(2FL!YH7yD";fG8.st. e2lg3[mC%on+ 4?ÝMdnhbsP5"I\oE| ]%tQaH}g<6Nw -Rsqϛe3mWˆcw^_-4w{o8.7n-gyk1U+whTװMٺrRӵg;2|$*_Y PQq9ɕ\; +^"HZSd#"!i9T MWlP3qbco I,y}' =O ڻ{g*Jܯ%1=Iˡu$C=턩`~ ]C{WEҩ@:$D`a 4LbVݒ{!MZ;Tc(oi::IJ~'sSjt z9\W^3>́394oœGV`c[A埬k.bB!̃/s2szϞqS{4wߧ",aAgz„rfK $<ArE5/KKnc7&X~%Sm9ܼNζ \3t4ܯHڻxዕ :$+OL1NmSSy>Wb Y˜G za Hh[@ 4Ĺ-gC3&msc{iϳ|:(<)q %(I5-1>3`wJ|cEn;k4)K$[t#74MH oά!qa{?7rĶ}3!;7ܹ^XˏH b]ucG;B9yUT>n$?/{ҞzV`STwx@ĕbʖ-DB\X *D֟KO{M~3n){tZ|Kv6zvø[6TudAs橛6KkGvu- v["AS2BC\rKxolKj._Y]SlOQaqIe [ѣ7 NaRIx6}DpfuxyWZ/c&:޷Om{+ vsbꐻ>D0E\:S%\~^&5ay%9TL.$/ aFJ>@. $dpCpi~ؐa1d[ U3:Txvoo,ٻ8V*B9G>%.92ޜkb2Az_ އ,\|Bn|^z'XW}bUS/fwty(s8.WErӹI m\l]o)M=>8C{)k!mIt~ߙ)'Fت)a%VZCa!W*Ն״ze X3zHdfZЅJ"Wjھo\HD!xaM 0$8BsQBET ~\\vC=%/cFoһ0և4jJtW7;fc ,By<&\~aLJfquF++dl/ +f{=d]?ZB}NV'dt8_- H7D ʝpPfL$L y/VQZTҹsH9M|el _ۤ ]S>!]?+34]+zy=šd8]Q-,x{'|J>o6 bt?]󺧐ݽP[]۝Sy=lmN7&¶2޿[ eG"sĪ& G1&ҀdQO؛ljm4oo.\zSs0nJ;TW[mO~wVǶ>$"OD2/C C=iS4Qr`Z^ ;wXо Mys REIj\8^ϹɎ:(X'ϥX}).g`)ʆb'q&Ogf\~.l^wMőq(Ȕ s k8tli3~]^e&~~&J(ȭZM\ <ɬK 0֙uIyOP D 13!aLb'%ڂME!ivN.fi:;I|-DĽu@%e-C!XuFP qn Un%dUx;s|{^_stCaPH]V!9#}\&;D!gt9u7)K[ǹY mn&.qA)mTϔԩջ۰A]vs,JYT7x2('R(l 9P"ԬFH''j=@BHrnӔi)3L*f{ Z38yUxq)dص pl| Zl 2T,f c]ҞDfbD:Q!E L]*2,. F4 YBs۰`{bbHқ* fL.}>{yђV=,gg.e/[)A6a]2V佮1Ge~so6dm!! 9sD'mYT.\{nnl7|DhFnpn\x?͕Y᥶g~'L~ui1~܎ Ni|l04;rQr ,Q{! $9srOD.}z sVlC3bu/|NΘ؋ݖw> EN5\OBfxa9͐y;gE;X&a3\< [RBhWEpeB Q;Fښx\*5=:^D[j=^κ]Znj2s-=y0͹ZS[;yyt=W2e1" <.%#ْs$\{ѦlZ]S RyS;1\qSfMWzZ $±{!,}.|݋z7 nĜ}j;l5l7KM<0_&@ NE'yPc:b^y?3GlC!|}^>Tr \Iw* VR~<;9Zo6Tښ{ۚxi><d %bZZ⻆&:G|DəFk0L,ϗ(s)G-ow"!HA]-cfW?m0faۻ"ĹqՔRFO=C>. ?^!i\oqt Cf#~ ټ~-V)a0p:GD|$G8ަYr%ޖJ@CZ&0YoIf\Вۢ>Ц=U^T۾HH.6@57lN=AR4Fzt|o2Y"(kX"1ikBJ4M$<Xr\b&;mA;qą9<7A6Nwiޏٹma j/:"2)GV|( 0r*һwP$wCv@xwaNCno[A +]PugM¿.yN,{Az5d{+=cbG6NӐob L&DyLٝo(;;r·h9DMAQ!@UevגP <##JJGA F u>y.12a wq(Οd45S%RI7loP+p!GlPfԒR'vWf>nT$.L~ZDh&&}8^\ S1TQ֢wJV{59'aq쯚Zz }}_ܚaMHsuWxBK[ćLNkUzwsRȿΫ]voouKb=qw:뼛޽"HswV_SvBM|̓4vXH5i|sՉyc}lo6(N:MY+xۗxƃ(vEN {S,{rJn9LC=cbd<<71Gii4m+6'9'EGg"2]9 e^*?ؿ(3N9ܕrTxVrew)|@&&sJ@(49ѐnEH$䠯Gz3lݕ7ǖ>YHO.*!]P/˞&rGۛo /"ƿ{n5d™kv GE (J㢿9Ds."UDq,8Em3ʗ=M-z:<{I|K< [Х7=m9> aNƙ+QGccҡR9<7O%æ{ʹEcicO|mRϵ8>pf3!;x;aYk5LNͲ86!r^iD䣳iSwl;# J:Y/MOԅU{r_9RЍn&&m&`(j5$qt|"MuRa ը s [Ai's<ҙDr٦^'PlWB23㾈uoG9o?+K<%JLY/}X4!ɜ? `˶͗1Jdbg,) E2xaH4srȖ1aZd! qWė=lޚ]\w)G h".#Ú]R?m"~.j2KLE(05!{4- qKuS03XEVȐ4ͅB!Wn[.~\-/ܘyEKYz%󯄱3DYKBCʘ5=e;IM >Y zh'8$c`Ty2O7.@U.onU7/zӻ8I"xyW-&{ < Y1;ݾ!_wZDvVP#۫NP s."'=9{xޜ̹ ͎y>l9|oq~>&obD0ӳ|,p;c:I0{=Wr|ʡl;\o"GxY˗tXecݗ6&V2xb>񁳙 QԦW]v/ F{n;rIWj |$*C/{r{ IQ5K!C (:IA4:aǔ.xmZzcKD΍%&3=u&yPM I_jJt=M gBH[mu靪]sz_ϻ < W3Ov ;ٽ覨tGSt3[G=*߯ȶ& &8;TW!ʪ2B,YeoŽι6BC7~LPۻhDO;I]Y$8wi7*`8>>$}axJ7^66çk^"gl˧;r'wsʇh&T>d&'2vAضSfcǑM$'kA0Rj on5Y0JZ; x}J!_US-v'bE)5OqƠv0D*\GBjC=}ݨe)/.;IxD~iCrhHy۟sqSsW7Rt;&xKj SlV:֯H,] fMwM(8p2~ӕS7iPc9B>i衻73k6/ص#:~)9\C;x[5C)7U yJ !#)HlͮkJrx׉;uG6vU& uRhsU!&yEdXel066';<.#3{ ySsocTᤴMߧ|aÅibzS"3&戭sFA{|W&. ;G}J`$/.$[}]P}X;ujn'i ioYW^1|#!b̞3XyU)d _;~GY]y?"T Fg|.SOM! j\FyW=cqJ#Z3q -N !Y6dF6ޗKX`v?h33Dq@"RE׮ . kP3kgId%_o0 (v[JRNcx p,.#)r~Lh'; 'ׇr畅$T'R us( ԐDF/e|H&x4Mz85e8^6u^#4`X ˜ܲ<:2h$mNlD>suP`}sQDY۹_^J!Yl%G=iK F/RWī -Źasv83@$Yt/5ݤO_ٻ9fW#[L@ gJq2e T_|5z2o[^W0|eHw<<Jؾ>QBe慆8/7'^dUv̘ρj+K`?Yg@;ď~$O؟ϋ}mZknpkޫ.[`)2̒vsw/#^!{fz|RJA;ԕby􎶤_ z\л[xw fyo۶m۶m۶m m/ #6S;8;;ҷv%#.s2Yd@F`w p'wX-.!B!{WYB5`or>˅(ctZf[2~E*9 9"il2xͣk3`iP#λlI䏝S|FL$.V΃D{v_ǂMAtl'9?Եq`{cUyŋy5;htʋ"l+_MTNRn0}G+V>IKq9јVƂۗAP置&(YN,(>n_'sP"I8 *΃n>ߖ1'z^.MF=6w6l̹%g";$zl痣ψj{ 2;na>"}2:qqV?#Y$6-9;A=ZIs0臰hRY9sJ"cޯގZkV>RP02mnH6?;/@aԯ%XT^,s[<6)a?7GI~넙o]ǿDuՂ>+ Thnʰ "'?K "80WȸZu*^cXЖM՜M)'@  ﰱW@WG(bA ֋w>kʱ$.qdo#8;gCnl0sߎ2x!z4"{91ZN3_'A:eV_^24xe wp&=O (ڥYKs,n哇5\9|{ 7ڟafo<وx-<^GC2"'XA~'W 7WL~۶m۶m۶m<]_|eCc~gs$̩op)~Ja;`p'8|eXa[TbQ"@Ob&qn lf@ 8ȆmM05Ahj=O=S]?(X؀>,Ս&S̡!c~`k:,(]J 72Vnb>sy 7ї຺eD8T=~Wh?kdYPoPG B-g:y7>. D෕)xP@&ưdF$}kp].  S eVn59gVBڦ2;原V^z{H|Ʃu|ͧy>awk\mJ:`!GOwݒ= @вlmby|ƔpA>Zp Γ~:auAo%i[JE[JK=>zWew{cǙ+۶m۶m۶m۶&%;2l!؈i{K7~k6yZt{]8NdϤ#䔥]˞9T|V(E!Si=s9'WR6f#`9`iVDò_aQty{m=ߍ.9|_JKp0VE]soNQRn*S25{U#' &~@?܆FTƆ#,өa^p<u" eb+v?$ {u i_Qou'=j;SRxZp @0leyEχ-|ܒ*Ep~ؾRx@3oҡWl @! $_vX+_͹+`!}+(W.قvyi6t.ހ_֑[)ݭF..;JV>> Pdŋ#37kqZȏThac9'}mO Qл6۠ zcP_Ev|E9kt۶m۶m۶m۶Dv{׷\*v,>^G\Wϝ+p;8י$%Z5#mTy`A}F3tU;h“JUN\ | &`# ɮ5PIKdغ=NcƔdsm#`$5^ȇ[ v`Y1ɑ95T=;y~a<]>_[[ n??$6:ˎ[k"ANxOz 9~,3Lb+a.dD6B$)V'׍?Aimq \ԢJBl\jOJcIQ.4%]a$t˴ +y24:@}y .u3[Ⳬ擲糏2r^x2cD'Dژh ('926ݽuŨua/ͼQbUn 7)C|*pvKW8^[4`9|9C_au#^PI@`N[e5?;K[v] (òOխ`T޶m۶m۶m/MlWۨ:2¼~K˟6: \Vऺm;rYƽM0 3`*b(yrabIv28pƠ%`灞M.P}>˓D%s8[Y]JwhC(/l'jU4R<4+={ɬ H9(;#%88$rQm?7& Z;O Ճ?; (pq NсdR99NvRJto5sɤC-11hh X>79pcqr8r}k3X… B3k5. 5qi%ªOc:W Q{W5/}/A>K?EwNo Ld5 ҔT7)W iX)Yt{S\イ\Չ'(DU ׀3*v'CXe 5 zWȏ2M(S&;,gUcsG>΢͋p^nf=l<psuTVEkW N} Ƕm۶m۶m۶mfx/~g[hěUr~~;\rv}~wsfüc^Wz${>"C/$D+It@3<ꁕ FȍH}`1Jpd'4@H3xsn]ĤeL`%/AZ5(Y%π/OEng42hٶIp!(GyWS:"y* B7!<,J77WR/~۶m۶m۶m۶}ve3W7'x^ewj7+i]9ei3*`@r%Sf!}%qK>"G]ޱ/g3t9@?GT@Es HX/?qe Hʃ1 d@wTɸeX;unjTxrxv"/3ٌHڽ7\^>dN9WC5d3kEuOsN$&)lS#Xؠ4^p ґэPrJV7x6f˅Z_XMҼSXbfYKV7;J's;|է{^A/%b}ܨ|NQ0Y3uut~; `ByqHV5U:i_zGP()٤\8%`w0^.>`;;zd *WǞxxlruG`u0 uQyG0R={v#>)1e /fž=]?1nyvmuM_t}~HE8s >Ӕ]Op`V1r> }1 !|,}!GIf`5!y`;7`ě(wfz(؈=IYt4r8}6 Eg/TN ZrAA I;hfخ4)dȱǏYlDYG7383(U&,e1tY^,^ojqpjJdim z)c| =G="tATO ~ PlMQ:7%woϗWgA_+@#t8eICd $>kDž;@ƇK׽|^Hj u=O24.9o^4,}LKe3G:kӀd=uG(w|s??=z[eyCɓ]@Wm(m۶m۶m۶m?6r'gw( 6Hpsާt m -5k{?ʛPж"-u M*&^;Jyd~ UqRG8;NF%m70XJWuCA0)~XvLc/F;}~)Aڲ,,ȇnQ-ɯ CdΫw@;|C sʓ8bxJZw(X i,|wȁbB_l=a]>P<ʛh+rSg#Ī CI1I][8k'=n '9A a/k\ir9ĖyS,t:z&w,߿30aWvYf-9rdν znʒ$Wl^o*Y~#39( Ju?B@$ ^?0??E+9cSJYa/~>@V774(F%&a|y`Ռ*L[c Tnø+ yVsd4_}E$|Jl?&dy倇dPKQ{ vvAʮ:ŚSdmD_Stg8)YS1inTSeb9d'pJ&8Q#[x2^d(]Fv\ tq?QW}i27i/L "6Q;Jn/{lp o<߸}C^r%߷OLW+9n~vĥm۶m۶m۶m~%[߫8M 7oɺyH{϶`D$v]'se]-E2VoTS6Ip a"uuؒ:+Rؒ(嘱٭Y3VrbJox\.کC?g^t l$؎؜Ѱ"DJ[jk,r Xs'g!Wow3=BS|S.ݏ{ tE̛]q#4!,63C^, K34?Υ|~53AiO];ǔyTIGU{/[:,*1y:W)rVܾE#|vL#|c} d ":k꫰ 3%}Ydh953=zNRoEBI$G8di]kүZf3Tc?[U(/Y~ dom۶m۶m۶_6=?+loޭpa,ҕd{ UO]=r9LQ&N~IFE?X9T]bUVY{4Яziϛzyz&흄p@֓lvY~&gK_pl9X>﯏&[_WXöm۶m۶m۶mwwGk, }wם{W\*[-3f O8w6rmev A%1kXcА7Y3t &9[[Zl]T#]Tn%qH#npa'7%wF!8c0^r*߳)ul>m򓃧igA?<-'>0T|E]em+ y[U#/ފ/etP1('2r7E#t|}d3'|=ɧ 9<N]6BYȄ}\]0Wr$mP _Fgێ.>㍩ + ܾV =j!w[WR<F  d.E| ,^y\ҩwOZoSO.?Lw6_XzNB,]ao+^.ݨ%%EDڧ9^rỐ/Y쳤uZz^*r6\e{:y?l rǢQ91A r[?E2|0;CC=+ceh1cy>'nm;q(Lu:ώ /"eƈ-mVMB"kszaq`3#dˍRCTq~8U-t?|q%v{TTy ^ZɻqJC^;];Z_[r9- B*rHvޙܹ4$(בj9{m#[eczGNJ;Ʋay\t7{۶m۶m۶mۯc}o;+;?niՓC={=>i=6X.ε0)*" Hhy=VȗS2%uS>OHx"0/z|^^Y\y?4lp #C/2Dr}+FGR{"Lʌ:70p5;|Z?yxu J 8ӿ#H瘵r"( `h1D d60]YO`ΟxğIk@5W :3h_Q"0NUzەgOi\ϰ4 j@0AD٠RA~x qڢ9HEF2Y5D'd1QwCҁ%ސe0sҥ“YE=uJgM:[2g>Zf692 ouR(2ݡp}y /Ur 5oس~%nɖy_ >+'޲Yw;5}۶m۶m۶m۶m/z/Wov%;ݜ58衸I1'`e>ڧF*ݯ@qH#9H1 b3' @Z)J1Noi=dF7zU;w_keEܱ۽Rd8~r?4ϯ@o,m۶m۶m۶mlK"vwxɃ̍Yѱ<:g9 IUueq4H{pmYJ׺mr. %XAЬ,BV6NJJ3/M<#{%60j >n9}<0s_I`aʙ@|`TRrGJ"hY7t53iv&N^" PRֲ8't1ucٹz KJx:;lpqٲk3 PַVYN1Fm NYj0gNϳޜ`*,ߑT1ן 0±(5Xf{);zf39 &A'JGF@ lW@FՃ+qG=tzV.%և:IfܠJn]1d]1K@iL FgH#@S 3;Y376| z=i?`6 |%nm}F3lơ'ya`/Jsh.\B9s3`ځskdzk;ܟ0;{ov0*oy=+#kr:]>p%[s}Ҥn*Hm7`S PPp -G,YëfJc͋ [3Г?f2YyUL@=9 9O3f7 ߲sD.'fr/䕓ޢyW//\Y {x2yUÑҷסQ`>eV:oB`ʮ2Gc^G?p2qŸ oɸMT:MNK8+J8`]Ri.-N~o8o(v}-<_mJou gNjMB_2_(gX"0]_;'n5aAIH^tmק.'Zj|nO %ܘ%s?/-'eUW ʵqm۶m۶m۶m?vxs?{V_Ǘɫ`7Ycsi4ÿR 햕3 0ݖٝCnjJ0y$zH唓b/ly4'y̖!=( @ kܲsLݏ\Q@ moOf@lkH'}8ǠF!`0Φe;_Yϖ%ig Ta^9r4@Ng =~ Dëxog5o2c{`LS?2ĔkVuh&K׾*O Im˓`|suR5d#ƇHwL:6@)oWIÚs'Ǜ*[zrW GT45d.8Y`>ryVj2!o,!鳤4:ྗNU$$2@}A=%1>qO4=߶,9+x1HVh,8bK~P)u:^5&tp4v?7yts; }gysaeϋ1jG9w|WCqg[,#9n#9nWQ150Iy@o޹N)(ǩf!@gK_ͷ|3X߅}۶m۶m۶m~m{\rM_?WvKT/?lo{HfPwRlu~L֪=0HS)`PC<}e8L>(v]\ʘ{Q9;d-g˛Hk I{:!ru_4EqǢ&l@p>sbg@e3xFɔtml}ʼ,kKY L:|E9 TG$W" |TY[v  uuYt>@d}'> Fxv86.bH(`z 4c&gJYEF}ӴW\*^ȿk Exhr8X`K>wU=;M،OpqUh,'D1a ou*ʂoXN2ЊBUoEY{R2⏀mc؎v!頚w% uVaDwe"{Ѭ^kOTٳ~J20E :U{_drxd5I.a0SsK7x%|wt/_$i!O홏慻,~9"(t>|_ZL@ĽŠm۶m۶m۶\ے9sv*~@ުa} vBdsC_ e<6^c&+{ &9Xo$`w. ->іR B9# SazC2 %$2ߣ N6B0 {49xf\tHW_2j%wJ=MPYFd{Zmp7{`wldCmKMT Lv AI433<8gc;V>#΀%}?჉UaFNwr*oO0L(u"&" گT1L,|F/(4?e j#$TAFWB^e6maZ `!\Wٚlj',yOMv|_o $˺. /q Jƽa+.kQ[ݔ ݆Զ/RAz.B,mM=VM&%u*݀!ݙ(rLjnĻ8ghb΀/}MCyc k?L>}uC}a]Չ:'稬wZB]i/ ˷ @%7_0L:3ُHK}=-*<PKhi]zJG7WA[&|۶m۶m۶m۶K/mrݍ'\`,/nNq$HS x'x酺e7\׌vcԎX877d1EN{*{y0"05.5 E) YoF{^>jy-A$YA\ĺq_]0F<Z1 t6+I.܀&~ac wwMa]9@ ~P"X@U.o'o0ꮪeďCZD`-N]Ym&x1vޭP/8Ao/f5Gu4^hE@\:ROm1>3*BAZ'4sLF![Ք,E_@jhTPЅ-0X"&q/9j|E~UQ8FD8+"Ewb0݃)n\z$RSLVs d>0u5FR#?V?sQvWcF-Z)`wf+4U@ٽUub>[]\7~JG(^Ur \گB_kiCpm(hςWrź߱<[n3m۶m۶m۶lSۅܜ:PƆnȣ瀣AzW#eFpBF :M;z43VJ{ꁊu-]/ K0KA|Xo\!`,scPUi bƸʁT#AykH׿>C1=$ ifV/=h9tpx`(/k! Z=Y{BM].D\zk  ն`{ۂYEnLBA#Ntldd=e* -_y^tG9S{[FuVTj^ -WPԲ6ٟ>FxG^Nv^\—U,ru(Yk,A%~xt^S&%D w dKH!'\RA0{M5 )cM"MH U:4] 9rY M T˵2`1ѼbU #T@ v@+je[ "xxKpGZ`cn\ ηrmb: v|Rl :n@)3ᤎaw>.2}6LgxEͼGvm[}FqOk Ufj@{y[%IHx޽NAH*_ JJc?/o{۶m۶m۶mO\U3݈:xEcn~3c{~e[[hHzPF'8z 1Lw5F.깼 > Q x|Abl^ S`l?-0r`|{촗<[#ӏ[GW tGgZ$8"ƀ)_$.11#e`#Yc`YYcX|PcR Rsaϡ! Iryg=K:}/>6`s6@7MdAs\šu,Nֱ5Od?+&)pt@gz>JRk ښ۷v2pNQ=$IDFۉYw; 9ؚ<ץʹ<_Y ~`!vj,E^ֹ.ͳa{_aUAzOk3h |d7-5{;Lb(u;p۶m۶m۶mofqQ\j\Ct0;g`w :CQYA?p85W4yisgBLNG6ݭ!gP}@J +}((E2Y琅tdx_X+~e}/Sg&@zϗR?W"8Vfe|G\,8EB*ؕ :?K0mrG&kGeˆ޾7#"1%nPf*Ʒۭ8nE9+rC6K=E]'aQu$Э4AV-LvC}~/A$Ӭk2=3p1p֟=uTruϧɴeFв ^YI0 bwS"w&;z%"3~:\4p侷ݛw*] vklV?S{թu z^^Q7%nGscY2[vY-~B-km۶m۶m۶_&n;q7ڤч6p\>!1sǑGd&ۇg|Sz(ǔHd^wq]zu{vr :dX?I-  lVDri\0s94͞:Fܑl&XC&i$ yScBR'Y(%x&_ awb– FyH)#<- 쫢u|RnџB0 c{xO3_[R@ "6XԘ CJMyD47![>qЗE~j\@E@`6R4*&FVwloRU,UBؔgtag1&gs0zŸ4I.rwb΄lbqn*qMwk.pXy"_.3 c9J0&ߗ': lp +oI< s$]à @DQHl *P6mdʋ{/W얫d4JLlYuȟ~T芻.>S7{.|Ӫ)zy)q'ӭ}Tޚޟw_:1`>t^yNcy_T,tfmJ vo۶m۶m۶mI_ ބU@ag.]yB}a D;$V< g#qk<$%Mcs@\vȁ]T.=qKD; n%ɂ)y?w'Y%3Y̨٣LkglCk0 )WwVVZW)'޷2]"4.ʓ5QXJ[.+fTKːgR5gwgwwvFm)iMj aQO)G|$~;{oG R6XShC;f/grg/K*(03#qf%Y 6hV@ װSFrlJru( hzWb*xi$_4gKľr+'wZ.?S>笘ނ1rXxe*cc4J`w^Xw7&'ɚ텮lm۶m۶m۶Ǯ?}ɎB1(x*Vl6p@(9wFIٱ 1kw@*xe2%Sގ7C[ -ѓ8i!Uø rvEg/P9g7n?LG=v'O酆xs~S4`[ayCxtm۶m۶m۶70Waw|g_sn{`c+$oae bXr<)Ȩ2rz&$8ϜdV-@oJIN $دS!>,A_[X@vK&m,2䴟L0R N-I*}퇶Io#eXq}{d)(PAj]~0SgWz-[|%s ro^=B,+u$VeɃ4rm1,U? 9"Oh!C&SԲx2@0Ueѿ|m_vpX^Ȣlt >"xnI\G%V$Y J` 2'wI)wOk0`ۋ ~OHO1RW84AW*cW:^,s{مbXGr^Աz`+ۓs/N,cTee zserz'^Χ/bjЬY]ZޥKo"E H?f>pYU3OR22)9kB>V hY;[*o^4P}:cet_<׋/py HC nbpih筨N.m'D"|fκ.O\^~fb[^yPܔry3Dm۶m۶m۶쁈K`irZ`1dyAp^3+k4Q7T{ CeyyQrW>>&ekR27  vS|<[~<43`H_(Z +X\2s@ z2p˙Mq|'hf`Y1$GƟlཟ" Z@ l,X;r;N\h- 6+d:Q:qe(#;ԱhsW$ȺM)8=>f9G2$~) 5HU;-J;۲@Ck*~CJ`&2)[9t$J%5-AJ<0?FZ֥_e㍺KTJBm>w$n&%ZV*ax:Q<5U/˾B$z$g EqNW/)Dy].e[B 5zlk ÷H ^Fp~}ƶ9w=f¿rF|t)*(0>۠O7nV܁˽;Ue"Əڨe~mU1DZ؀} ,:qKݧ82x͎AY(r&G޶tFݴC=r 6~Nf~lx9zXޞӫmyE o۶m۶m۶mņ?__|䚺]"{G?!j6vUQ2o7;呧&Ӱ3je duɲ.)q> ƐH9c徉RG3A9X T~ nlrK7{}[~.yXޒVG ;tok6Q9H! &9}Ud-*VJsexYsɩjOnغb rCMg)^Ym{ԖA{h>p;)!뀜b[=Oͧy$`uЄh1jƓ'y#l2*ALĸJATfeli2>Cc߀ ut1k5<<c XZH5ɑЭє2V@`n9c""08FpZFZ9{o,X̲ryL- 1pP]ϙ:x }>ǿ!xvg˜Urɖ!!@ϡ"Ṅ-Ege1#X6w5fl;靳P?]SvMl|ΆaN0Y"`"G/5Nc.[⣽u:2,cx,RjB,֠37O,ٹ~?yğحӹg$bwǿóXwm۶m۶m۶m?v?} HWn{'fpwm%j`wM);sQ';~2| CNK}0XMby%[1oɼE%]I‚Ν .s) P{ЇȑƜң\+}< tLܥ;ۜBݺ EK\]D籯;ZSv2Drk㥈S yO$%ς8"DB,SHS9&p:g! x=t?D"L _;$dIMj[}Ė34]*^ѷEN9jpU./i&ۘZVN`*:D ^VvZ}+]ꜝ *Xðsu6S(s( :|VΝ kZU#eBXKB>%gQmw4+} #\&K@/D*8gȡo=~՗=D6\yu. ъi,&71%ᮭ5[uh2HSI ݧp_2q|W}(=zoGr});H/d7)N'i2c$ ʿ oR_7j/o]|U'yȠj(];ziF+o,UEK7ݶm۶m۶m۶OdQ}no"r U>mQ &!<F 1t$].g=1x*V 6l\A&wr,8|v 0u@,7K~hvp):ATFfjVR* dD1<ޘ9\eٲ*sɿ[c@˾< A5X!;y% P[Ƚ5dTƩJ9%_lD$ #Н:!C>< Z'ZˇR?7 r>Ib-w^0騹4` N| FD?J?sAQh\ \07dZeWa VL;)Ԟ@Mc+ڀ7,Aq !nD\f86 fçOA` yA/Gӆuech:oXg)'r69bڵsC}Ad{޳k'p|\p%G Fdi , Y_K"=B ʑKAi467!PkY0;SWY@H)N\q6) l=[*w&.3XcmsF7\g1\gOήsH_B>ޖ դޑc7Cl}NYrʔ ղ}0U}YL&PX] ]&_b=]z<Ϟ"mn6b=ğgy\}?޶A^i-km۶m۶m۶fx5dz\իX)g2%{} 3ݍIom"wwy5t䮑%O,OJ:ؼ28Gbms\/Sxi"y\7-&'(>5 Sd9m]=Ch+@@6jo};⋸^|q/L΀ t@2u-v8Ľ2 xjAz,o lX@3nX4<Ǖ> }W)m,4@3YDtߏ[2"}Ϫ >vk( ei#tL'm~rYcs y:{:UXϚQύ:7R}Y}S֜_m@6}zm۶m۶m۶lv_e^m> ?C:]8bjlټfX>h~w1AGAV`c{gNwd.m2`zTNjzu@Ҕc9H:OQ$ux„N@@]XUjfe$7%aD cð }GO 9啀L9(m T` *9"QQJG8@0+yg!\fS߼;lٌ<0ۊ*@)Kfe+@R^Im?XLݐ#SUѲբb$hSK` ])u1ПJ̅>B1d 6oXK}FyX8פ.kޞѤ=9S@C+# 92 A@Y*&I(cT` WY^߯=s9Bﺎ\?!cjYWzL{WzVy*h釚彴~ח'CI)ؘxlh'RuH_끳F`^ ]75R'}_&W-W?ÚKx oJ|\^T 6xo۶m۶m۶m,rQ?uOOZ ] $P `f!<.oOǼ` [j@rϵY睮ylf 2ǜce[,IE?In@1th0W t ̂덺{AA)Ͼ_}v, f 3x`9kÄd 7s"EN?.g}3V`7-q |ѧ!:U-Scz] dvh`QH-MqVk [ڋq%Kbe-;gs|w8w"wξډoSjtT2r^1 -|ɂ|EMU*=,oގPQOohhݶby?n;wm۶m۶m۶h{Hr\Y=zt:] @4tRܫwNWoO?> o~33gfw}G &SՁ'Γlv8ebA>TZ/E7UQFX4eF ůt~db#jz]x|cu:婅1'1uuP;+ 8-jyy~/@6~SW|. m#`5֛: Ϡ^fw){j'c($ U$xgAxQinmPڢ5c.Phk|YǛw]C;bJC%"$ѧ (p}=wSf.|" ?6Nm0MX`uC{Y׉&e?$0#s㘘f(%W\c[M`a4Yuy8M8;qBtu0n8vr>vz؁Qi!hE5協(0 1E 3j g)%/UMUH"&8OGTٗvwO4;clHI}X/^WT^:Q,mx dQl1v@7 ^E"#\c={2%j3k[ iigy#)oĊ_D-дԩ߉t? 5ܘX'4|.xij{ JLbĦ7Cira|y/p|ʓWhp&1w=%_`s jl[flғ3w *[F[/eӋlXM˒&xLV*2pdVT"<"P[U֙63,0Zv%ϏDr!-\Z'iꟉ> 8ݣ,:=YD}'.ybvVEE &k#)8LpW |&}^d]".E"~/\  >ǒ)y#QKPcrՍ>"2T4Jы W5'c-Ns֥>J f"zr"JWMm 7\}V6ƹWO}b@no:-t$l F!s.RJLn/6:zi9FwvTFk s6DbӜ;$+?˸9}??z6zE#u=4OHC#&< ,ϭ83FTFۉd%^@P/s|o Q ({hPN}zτX@mŢS }сxb=&xWWj/^}ChͫGy/Q@o.w]r. hu§`Wb=S?rz2Tw(Du)QN5e*އHeT8r(>%EGɑ#+"{';p~[3.`޺k!І$F7)[OARE<ߣ 3٣yTtAy\haO2 /NۑᪧlZL*LֈDI,Vgbjf@x 3n 1mO*0 l6N BH}0h$8G2>ilq3<@Oew>> 3{QwΟ8HؓcBˤ>@kN@1儓y_CA6IPjLOD:s$x8hkuCew F:DgkAofZR:מ 2Y9Teȋysx<,Ʀ{sS Nqv2Xt\$VMx/0)Fh̥t#s:Lugڭˌg<'YXA|)6;e  ?/`ߣP5FJ1u\CugPd}Q5L-}jo]l|y05[Dž;S͛{D]ٛ\&ok1^2^ Px?.YrI=?X;@4bh@$鯮Ó\vې5`#CU.|jČmhpdk(F9t't2GȲt4X^Ū):rwgd{;0Oy}X/ LFIg&>Aj`&1[M*t3JL>]'y4^>wܩsY}6~d 9lwMk<ǘ㧿?/mT8z_ cʮ3%R AEu$& 3O"R*dִ=óqkޏ?gk$5 DƂ;C2C1π<$d[EhI3I d>GЍw7m ]$xgP(2SqK;xl6ZYm۰=dz1̼n_OdSMq&Rg'`y dӚٳ9&ѡ0'DĄ88~ RoFʿ/qyb8 u I"_#'4g}@?B}جi/,fIOIfϮK6*0uϼgXoOںn7owH0k_TgK$z+4ǠTS)k'QRo.w]r.jRe̿Ou'=3f7Ng,v ʟ} m ,F(k$EIKK)gATq)!= "Ƴl,8 @zcX*A>.rdO_3s2޴z~7қz*/%L#;!? eBƠM\+|mU'd6f@Y'x gEP;֍$?Peck+[5}7mA9bMyX1c"2R% ֮$:0!ZBlU" kWk][+8Gfx;XdSsaoƙ'puƞU(ho/$o3nAxxO}jk5߷"ψ1 5y7θ2Zyg%ϕ0rpZ*ڟ2(s 1pmF@٧+zE8S5XKyoИv\{yY5EAEcFaHn~V6rQ7ar29[! `CO`E VKp[:8bVrbPy.D8hxnnS%ȩ:'2 ue[M9%ũJl F*p0^{n=e ِx/yOXޟ){8RiX2{ FϾv&kt.w]rc A_޽(o>4sn/R{ş)EEuR9HKD΁$ue6{;ς@&4"  25sIggInC6s;P8w@8n|`:)ܙʣO+=Hق>Yz- z|2RUx;&`^WLbQ$˱%GJk|wm5MDpd칃=yaw5$t@s1v9@-2ر4YF Z$%=Kd{/jI(Ikz&mi`[r`r\"xݜ21cbwoOO!&&'j˚PR`cU'TESfPK٬."X8j:h\AdH.dσYsawlaþv6)iS2<];`P_+.Km"s}c&:l.kń~v4hVO6uXAyRm&58$amf(b1tdݫ99i=5:nٷxϹע=SU #HEsr;!$CRCII6b^ID9L<94O] ap2/lbc?=01jaʫ˟7} [+̞PC d9"Y܃`J@Ԗ@Bݣ?+M.JK=TGzUN٭H$f)7j:`&m(C\ 2L[GE)s.Qp"ʗ6Ag|\:!%ue @F 8ޜSc֯ξHv y{Sq\8@q!9E׃&v YXI# :zs@`ךl/w_0Jgxu(aNBܪ1#)@SW`3md`}ieF21`f11`S"Dͯ^МMv0XVז|$l`OX?f}zvf3Hhm^m@MT)>=;wȧ|_\5+ٜH^oz+ d4'X(J%FV[أx$gg~{PEy2^^*c4+,N ])e_[grЍsKl;-MK2Js{})hr(QT1P }qǓ o]r0˭N'U#4(^{"~>Լyv8S`F3z(S`6DEϼAa ʇkl/mD@_W[uMd6y/U _}Χؘ)=ʇڒ$,lo0 x2|/+mC[w6Ydڡ]S꺧U0"F8R>4}$t$q .6ʰ qb&e[ 6!vDRqN:艮D{z~vjzncǃ}쫜qi]}+Wedݗ3`qZ"6)K9o-zsL>iyqo^_, FKT%wR+CŤ I=޼no ~Mo,vmvu#79h~gv'ԫ.0%7o+y6MϾ]r.w/)i9|=3?9m#]J( n/jYRߨ@<O"|nR2{F j\ yg@ oMl(L1BJDE15H|ƿ{tMcer ^"0`賸G7ufwl r؆p/yK bib?OpG$ƾZ辵}FRеuu\:& vzn :a%`gjU?_x|5iW:a %0%vI`s`oN!1`; vUy,ƒ \(WƔR?(nC9O{"gAzZ7a +[sc4z(e^eyl } FwXSޮM#I[u!bs6J3ν"!f1&?a,^a*}:c5br 3i)^]K8nT 't+#I܁lPh̒|]yJ}lr!+%ld)rHl<:4QkG!?V {3ːbwd}>9"Dvɇ?|O B|N񠑈õvjrs9Ds_ƞTįL 0R?} zkڜǷY1 ~P:$eE4U wAoӽ%ЛV tҼ%*3f \˼_uDwC3oM!weAy<\h.w]r.w]4ݻx8snVgJyW~Wn7nzwb=PğrIݲJT QxVY.A\6Zɽxcp!Ra;wP=A$ϳ̾_'8h`J.P^L313sYo寙1QltcdAtgJ\`:pbU=dPrG}mxؿڑo40PRۤq@{1R^B$5iʅ#'%IeS>)(ֱ]~YLT󍚀BjOR@C Bu>~@}f_?Һ8QgfּU\h ހ91o F6\aJT:2xIcȡ}eJ% kVy6 'A|h&)5햇/igs7V5*oJ(>2rYηS#&!}D5A&z}?SNE.||D8+R> KS+j_ 叽![_3] aݵg m@dZ}it5ׂ|sޘWX ^ kBmrwPd-4z2 w"y#rc(ŷgp֯ޕ}.w]r_Wn[?`3կ>>l~՗/xrr:-;XIsXDbTI؃yHoVciR1OA~jUR*~xE.f[bH7`vIrmdkFE ~o }83k4zP>!- Ϟ{O0u0aI)&lx)9ey'vAS]F^k|jJ+(Cnխ6^-w:FuL;}_#1/j ;ZVd{,SFU7g=d=9׻Wxv̽]uKۭmt[hn|&zD#NiI /~}}^x5w]S|~k0ɧY'rh& cR^n¹ur.w]r__n{O"/d`uʋGOT[O^޻;3 ̸Zd >|'bgJ.*#@&[͔\F{J]6rAa~( MP_n k=wk;KI2.uu5,j6n5~Mswo.o\@fâ%sTa V`i>Gvc Ab j[خa` "pSa}yav}vSb*_`sKt;HL`}śv*5:UdDr$ 9i`$kdn?tMۙ?iH{&DD{ʰ%nf2ĝ$C~sZȔmSLvɯHB53u칙xȞ7tyX ϙ/<>%_dK@!CA QCILA:%*VV]0ljŏL\ ;)8S[; ?csJ{2ѱ]3k2}T՘gQUH$.T3%z9f oŀKwG1瞚$1>љ*&s`95^ }ĸ@tmHcu4Tv-pؚtM.i]x-|>OE P&FxR1&l ,r6}ndǻq?S~5]Ѷc̲h|Bm>#-esZZoGH J1O~'Pz=hp!8/m 50, xg=\ɝÞlrx|tFH( o9>F|wBߕZ} p4K<[T,*3D F[J1"* D82-ƏI/Pw*!+dqɦeNS$Z@iKxJcZ3SZ0ߘ<| @; ڈ[3УD^GY1k'Bl.g1~ݎ UdULM2y6}}l,曠Eػd7Nx2,. |t]e=E%q 7X5`:jɻ%l %0jJacFљu-J .gfOT:˜e2J XK6LNyr?y\<=g)⸠Y7P7\}H6POLr sK=jNrO65\|~.{IJkϚFw0@e|t>HW_ ް'}1)P;7`u3  Ŝ[a$ao'sZ'?sWx坿[Uo}?Ѷ_VWϟ%OV]r.w]~w?ɳ\{ޝ< (O|U"zX~J7ƅHrv*`Sbo `ypТ"%Pզd9J I Tgۮ}l$ nvf vd`p~!B? -u)Nv GF)8AŀnvK<{Dw,|$ dr2؍Έ2n 8`tI,5wa{| AImy[ 0lc\zd5a`|F!4l* BHQ9 |SUx3-|;A+HM9 őɿqVTs1%!@+SG=U"V`20z$!bO8a`rI"y^%UWJ-M:>ֶϜ*4XCTk, =1jyPu0c)X>Hh@>ngx>7ݘㇵCutEI9*U sŶloAR L Tmk uRnTAb.gHykdCgt_>N/]%I*hؓ~ ~l{`eMlj'-(ߌ{gmI6gӛRrl1v/@b.7En#c#"fE<(|qjxVvUAk&_n epXTҾ6.YޯYk"B8'?aey>}r.w]rw xEe p^334EIJ<63tɨ<}貲I.YJQ`[5C4 Nm={ YO m(U6@tt'FD5m^:$YΤtR%X"{AB4O}aT'J 1Z|)cC]tHC&4۳ z06GFZr=eNW|4G4 ewjxo uqOoIJߵ׏1O<@p6PԄPvI<@7 ~ʲi #x2&Y`=Au^9%yРJؼ\濟Eb}0z qColnCKRܙ=0gf1u-% 6'8u G>aF&/ l@/&69p+m>t0< :|jJ".paBDI\4RL:@:Qbڻ>mNQ:v)d pk%D3Cs&*m /k=*`c 'h9{L<}R` `7$y[ ɌhT\xZN{,8%+(;64D5\c`¦.TJ~I!>lO*6֘VUb&Q"=Aoa[$@:ڍP(2cJ6nske%,Ǵ.8il󼭗I#І~zr{O-4N1Y +J98մ=*vVz9}%P/ 1uz$@ isOJ#0_OOO 1aL"UKXp?ng]dc:ǩ{vwogF%)AN:AO]"j 3{.Pӓ[,yM|x@ 墎 "FS3qf_2=<fheT'[|n{ʦKY/vLhJ&2;ueN#kՕȜZ(*e̹-hb0w' ;c־/:+3"z]VZ:}f?:%]`u{ݷ=M9; {"zZRL37um0%%|>&hu#Z3n7%]6Y=I︷﹃xP1 }fK80pk/Y8Mx-D{Aa)g{\#hVk7mWK"Dqᔀ0-6 kboȱΪu.?jGW(S<-z|BA|] M}яM\oT]b^G6d?_ U<ͥXғIh*L֧5^:_/p>[}#{$Lk6՘ϟO<@W'5y21AfDÿ{3oZnsi.ܞI UE~v焨.w]rYfx/: }/*QNxSdo RDF,W]6&=X(7rroPGAjA[-`BL<D"ekM.>BM2i$=T2y`|V6:gfhg@&_bSEHMO`9Lnc|vƦr^65j 1$tU&8d"]A NrKs8bLA"w!xm!,#:C,MZ;#9>+M- GǩQ3itXЋszN->?zP.=@`LvA:O),X`xp ն> ~+w_97FS5O{,HNU')&ә F}<@umJܣ%]aT?lUB0 mzcWQWĶ7pܦrgA_Jy`,oZ@軂6zWyH|g%*\'e}X l6n^]^=aҙA9f]2!LJe|b}7Aqi~sv2q[FO,PhkA?'oHū5ҭF9oz@̆QU7s'΅Xq97% ,k31sȻC7i)L*0;Z9UL!y cu&hOh2  asƏ3)q= c#=SV-LTY"u9A:>c&*:ۄԍ|j3@HU۳#@= ެF' * #jM3Y^PsƢPR8͂:Ab&t >oW C#:%)~$Gu^(ozb9no`J mV2 d2pW~dp5Rdql}}KrػG4ѿl6I>Go"`#2ھ3+$m)'ZaJL}Vc-?xN5[OօW>ᚇv0~ٌ0y#NoX[ԚN=Ft-5U%x=TK@.YŇ_ZP3?9rQZ,k[^cluH֛>'f|;3sgkYO+?ˎC8z]r.w]O0oN?`ȗNW'꫓}[W'=G>y7g_b@amN* r~,jb)&E`dE9A2)"{LHf|1X&fFoo|=U6@)=&g[F_8jUv2qƘn.w]re|::lãBStsucMq}h %Rݨɤ9[o>r7l19+2`FSgbN\F$lfhύQA." +&.4GyJDf{B|7-}6YpT1%6{2 Ozb}ƫV 4`LExdL1fkyb 4 # O%36:Ar(w"=q:SdGa鷭2g`Yq[RXY9VvT/$2uں[|H-Ai:erm̩xg,k_W$-D]˛4>+-鞿dG}< V7XF+3]APepf !AJ 5k}]tob6{`:ya)!J!?jb9x*3I7HRr&l?kR kX=0o1_k@l$ X^TlR" }xd@,r C}AM'w:nm5w6GaJ}$ ?wF%Oz"T[qfKэM TzRz.5@݀]a[Ϡrh?stwU}uw~]0,07=ؚN%r☗x.!_"_׻'Ժh+R;_U-xfu>_K0ZQNn}qʵl_H D.XimR/,uw]r.ws x3u˛_D)HLe}^SBW7BC7t }(-(De{ ˚u26|2x3($ }&Ճ M׃m#ɨV`IUd9jǔ0w3}O)dypGEH&}Ŗf=@? =q>`pI]9 Q"P{i hsjմ e#Qw:_s|?k[&TXn&%3sN~o¥88%`Ԕ2J}' )GA>ZCnD³e{OYr"BR~! EY7Uً]Ko'KUo.w]r._g}~_;ʙg)遲YH@:OX"() m|8bV3Ӌ! ]z:n,ǐlJR~`Oa$@d =mvD' `׮J.ZNOm[}]w9Y.}܏Lj]6KzMխ@o>BINA.`(n)F( ra&3YGn4-xod"c1?taNKs0V7^L.砓[,Kxj` z* _|ANy]ɉPsqZܤ JGL!DS\+Lsv>pkLG!:T98d/{zD]5h;sҫ(i]'(`غM݊S(sLVt.Յ k)ԥy0APpH;|y$(0kIggnL+DnS"p)kYa?z.Mq`|J ,Mw;bK㐙ar) . ?^Jg`8gEloCpv7z|6ؠz!`)Lt }]&&Kt9e}23$sI LQUk$%wYSWnBy}I!|FLՙڪM/?{ߺ%$@U˳3VyADUw˲-#α%uW kFFEr^n9ӻh|ɖ0%5MDS\7yiziV뇓k #\+ {UIA>I(ܾl'X_}ӝh'?;NGnV(}\*WUr@S? ?tU9JP&Ow/d}pP5!yzސ_MICȝ{r28`?:aԧ 466RZЅρQXތ)%bnsf_u&v,+ZɅo6 W/).3\C*Jm<_<-֭tC!H<#qږ"c|S#^&v"BSg+,97O$` ˸{]ĔaM%;'G6~Lp ߳ xY>=wB v? -^y,]#ku:b)w1[k~Xs 2Fܺ1֓;˸%[8/{cH8\\qK9x0PæBZpoo"wXn<_2;]u:#;@M/wZSw*нw,L_))$^ kݙ H䞍iY~lֱCND W? uɢG EN~>/3BŸE^RZ%@5!EZZ\޼&@5 OHYuheu9XCʼBNc1%..߂奟 >^=Ydao*oQ[  d֨&Kk+ƁE-VeȞw%;Ml G0!׽Ku'<ͧ>ꒀ]%]D=3]Y]g :)sxȡm,BTx1ѡޡ%MD:)HurU%&(sl\yJR5p9f6ȕ& 5MS{ȷjY~WLhۑ6%9Rk w 4dI$ V-9o 6wt1WB~_cB0yXLOj ڞz{B_N3ZfڇeZ\}RTy6}$4<0sbbGԪ`xxA6I}glw#=ͩՋnsӰ9ђtеb}}ľM')qB;_yg'1EdZLj ɋ>?ٴYg JK/o;-09i,.E叱jÄᰲtieb]Md=o{()^o@ϗŽ$=폟i/E|>e,b⮼>gȚo-dmt:Ur\*WUr;]-,l-OSA<=ɗSa8SdD&;K ^8dvyȴRAA'u e\Z{G 6Ff( {41gпld}Y^.=@zhj 2,I`ɜ3J1ipM u z;&y* x5^ˋIyj. 6{r1f^$"V_\H @!ԬZ_$(޿4&-ybζQ).OpFsf݈;;eocAt" >p곴1F1xǎ| 1.J ^62wI<ey\OfOI膍};I˭6OPXK\cF4+YU;l\A5MZY2nY Yv"Ӻ1 ]9v}lj^rjݪmgX Ty7g{c'(ԑTݮr\*WUr_DZ쏦n3˗.|/ o'0drg,oR PUҤ>!OQR~^^=DM#(Y~Fsf ۉ̴=5+mUTxۿ(D,=?)U7v 8Ӓ\͚Ţҍhwx oެ 1{8=ǽ8 \ex< *{e4j #֗՞0=i!F| 5wob*שڗ&`)E"'dz!9F;pU}RC+h[DdY3c s`Φ)Ew3ty/7$|f3ю'_<d}ib0EK>>s6mBel⥿"O9KCY2T:L$=)@*:t$IIrmюK7x3sW*@o3K4M+Pf`R<:'uL}I]v 𩄒Էh.A;?Cc-Mlo[͛ɖv8h_*%ǰG1ԒԈS[NSsTw0<޽';UEqZB {;6_^9Fq<&KU45o++hA{{ *gN_Iי7zlrì)K ڀ( $syf٫[Mf/T p8Q\XC$1L9Tۊh`f/}=̙&9X B3c]̸|&*`LlmP|fff$Jz"UY dmP%?xȊig 鹰A_3'NO",`*.Uw׈~%mNE,W4`> wT&!~C<@^wa#7={K e<@JISAN`P%9~c4ge25bs#&|gF!cN$>λ;IoIwI[PJ{RLڿn^^%.wk픓| @uq@kRH1t+0vu6ε{Ȓ =uw&#eI$=)xĒ\ =?Q 4ソt*a3`Aԟ)}zW) f`r9oY̮-ՙRe$i;MX8'IYIy^둹~}{zmX/6/2~\*WUrP7_o/-~D 9=Rτ*ś-s뿇3z&, 8K%be*$ʼn^1{ K/ ]#d5)%/d`t$.rԬS9ZB;=$U]Bf߿`i/8UPx]U|CmֆVdrJ@w!֜#X@oKAw 嶹 M.ntV'v6AiEth0K hݒ @؆ۻRĂ4ـR}oݴ 3){[_el }LI݁ -^!oǻ+=ϬkٵEojܓM68Mc- ^I˜,R2{v$_쓲]N}_ǔ,SYPiYG[ TeL99Ӻj5u]\R >J B<ǾY9P r^C))P!hJb!L:Sթڴߊx8':w!THo ՝ﻜU$~}V\JHK{}'Js3O?' [^봯]?)c ,OdaV"?[+Ar&~WUr\*Wʦ\ JGX%>ST'R/;O'm׫sOr.VNjEp?ףDCi(t2~ռ ͻ:$#P|`e)hэI+ AOa/ϒؾvIf V'Y]lyz;Ϳ-KkvPLsM 0ԻDWKPte+*.U7d {Vcz]1?Ԅ ?ƳqL<5JO* @c6X!X,%qLyRRIfaЛlMR#-/1`":ك=y.)x?؜t )gPc?fv {a ir {wqӤ(l*ML@xu P^t?B'keC>GN7fg!Io5>_X>Y6W@([+v\*WUrgB; FR߫lfd= ,~zy}=Nس@rl@R׃5;(@+ HpȐGYiΉjgҕ,q>s] vN*S 7x)?cĐ&w5unT \&pf}#\JGO(; gө l7L[n+)tK]c˥y[bgu[2dKr== %nPͼ-aÁ{fcuU|?&%m NؔgU,* hU! 2|53)(LE϶2WI& zWۈ`C A&#RoX)X5܁?_Bݟ~E~,i-p-i"|(7?ONҰı5` x߽9̗ɡdi/:>\@Uj|ʰoE-EIh"c o5sZ/d?W@)j -c#xy<ȓ$W?L<O}?/*~\*WUrd_,?eYR9ug9cOjc8uC"h.L#Lu6~^㜊J,mJb jnҎ#$2<[g!i#1uY1d"y0&,@LS!Ͳuxf p?y%{Jâ(NdmA(cqF#nG@EwZYpYJy@/ r&n6r_8 ]>yw< ܃ծ-Fl s<1Ա(DƘ+k88:.7*$`t(x{O2!WY #dx?$tr ~}UF6{bSV(k40 mgսhx^U"<] Q "OA E)ֳj}O:Y<'kpbjrNaAlO1W? ,@I cԂ61#o6lI*g pN ]+pʖXPnMwrg .^i쁻M[۽+Y–CއO)gZ C7,q$@}{R]|[K5 n˞,m,=K;e4zD fo6&x&6 ^s FBc*yRNU6/yyltl+,rLR "56ł$̝Zyr$:1pc@8|qt@eGllcu; ]A:U{b`>+sQ%[=P?dXspCAB~fT.4@0Dzki2RLdX OhD)fo@ѱk,*}6&&q]J>^z7P 4f/$gЧ "sWZ$Jiay$1E,a>$f|-ߖ@Y]0 0zڗs :-x6>!8sPEUnsGx?>/B`<;*7 cL rD#HRbQ3Qy0Ӽv :)3hU{5ݣM*7ǗUǻIm2zM^n*_~ϛ:'a}=IJ>N7|e[`)%1t[Sl/iLI }NkIcD|clfddڽQHYuebd@0$Ou0,KMN'SH$x?=BƕXbOxxI]=<&ĽB5@i.ʢ]o *&`&u֚߁ZuxӁT i۟ln6w= D=|_ h,Qş5rJ2'9}Aml T̚O?,EiT)9mj*w>u>3 {ITqof. vL@G@f>5D$)Keo=]#"ϓxQdhPp҈eu֐F,Sb0inؘť=6snz0 {)%\gO`1 >@ę<=I#yd+ #9sdbDpov Is6O㑧m}a.-DY4[4옳j֥Ode&TpR Y*Lvβak (3;޻XG?)yAbQ{̚IWz3`҄od4tccLXi._\Wur'wf\v:e< HG=0Fػ|{;,*kI؁4n4;\|>=fCەH%,mf/K: X .6^8-91'?TSM奷=f3tI}[o=my/'pi@HJ8)-@vy^X椢:|PWoyPZܪ=Ʌ|NA椞A0y-zl㡉]MyC㼥b|,`mq 51;-mI o9IqmnL$1Ĕ8v?^NE%Ʊ|t㍟xH@W*Acx|ْzӹ[9{Gbtɟ?,ZyS/slr;'tI?fYHf/?\WUr\*W(-כi<>:}N;R T5OMus6/O)Җ"Vu.ei`{ndz%+>% %*}icWV&ތɗ)OQkZ f*l@k`t{iz]N>Ş*O}*q8t3Io1`wUV8+ٓB!H(C;2ϔgW9svVxNo sE3 ݨbyMYbkL rb ӞM%SM#dpi8APL@ d&dEנ6 YpȈQևtyϴ {`uF,u c l[Q}vi'-ԝSRޏeyu0$|q49'v~<_;-YBFIy9=vNpgӱg.@7f0^J ֿ䒙Z! i%#lY()ȁxjAQUbZ Xkfgn=M+ڵ ǻMٳ˃IO;[s#7KVÛX4#RwG504X\Ia?f~Xw"=/jnm!2 ?1=}Y|ւ&:Xl[)"2Kg q]V?(i/8w%إLI^m/=1 Ƌ8}߳ЬHJH`Sy\+DUI2IjǕ(iR@)ζaxw\~accc%۟ĩ"a`4ԞHz>ie:hb'&|:W YS VZPQEO isF2 mKx9uRwj eM"OJ 'hq !`^Ur\*WU%iO9%={.}Oh`,gN!T!V%nXpuːS9 @c L dՇ7 P*]F.ŀ갆`N;ĻHos/M>bao= [R)=3[}SJ $f&q@7LLzlK_m<0؋~ 9(g(UvfpN@]_V`*=7a;,ް~XDY2k4(1AzX}q-N!25<5Mim$rĞ^ŞV+3\!6Nn?{1>nZA7Kz7ޕvy 2||;']m* _n7ݍ]Mv޵5I6{%FϯuY?;|^|ay0%i;n҉Acm)˰(uo&aqT\xI"a%}rF5DMޑ9JlOp6rh t,۳Oϔe r>>;, l+Kr~y%ˏ }\*WUr ;X/~R9 ?@G[Iww:i%&gi^ ޜꉥN.~~"N]Cx0.ֺt. lH4g u{7 8-ʘD^lvxm芉3nm/e)m'r̩FYLpG(`m`6ZP3ROWI݃/,]r\۹7 XQ&o\ ƚ4DЃq^tS 73[ Vyd~2_e  H]1͊J R_ߏe]cR*S C\syW`R2hB1nVCEv?#aB\nfh,* K=-rL"l#23t6ۂz'7>KFo8OGq@RB,9SL@Vo>XU0^'$e)jsT$]!-}v^߉*Kl_1{f5rg5MŰNexg))k?00X+w XكΞ+dcwBb5ynL{ Nߔ ݀e LbнlmwSzG?D64fsa`WvӺRT7L\hBRڧ8q #9䍍>N9ɣo}&T3sDy}TMqߣ-o8c[JW5-A_?C/ oqA1x)#T߿.G.'戀zn!2$Uen]3t^zR+vc'},u$V"N0KrӶy2JNk$ήRSqޛ_m%ykD÷0M'9Ĥ'*+ۘ"4[r=o T#IJA89iD)j~(ʜ`7fykRs Ye%J Mp#X:b>i~.aJE,8@d&)M ]D5t b7[ȵKx!N艬-cțj{x'bi$k_ٙL/F"Umfp4QHrnmzeVϵT 2+1dVԺrcjO:Xħ#ëҜE\q\@x9`.\[ךHђ&9yI'd1^T_K&JIR~yR@{+Ht/F7cr7wMX}>ˏ; @kʌď:r*= #a&뺣D'OXܮls?9Kյ{o$dMՁBDYO6e ppKR^ܻ,9>:ւÑ.[2?=}tk6чxU@lAYqc‘0@?/cK@z~.4c_c'D?ի\*WUr\,/z?q8t- GϛHr 9lAˁ6ֵ!{E>x;Ǡ4DjWs_gP A׃s"pwa>Y+3v'y~Fl+mw1ɋ4犡^ {@Mm:b2E ~r@7K(@1twP+`n[DH C3«1-Atb 4/nj YiR.)1CpI3 fiATa#Wf2I8ϑ zuۻ `Lq+IN<.<Cѧ#y] ,3,Aˎ*1JǻөAq%'f3-j/i\1iq$yq`G{U92-vs(S$r ?c#1*<ڬ#uPI :k@RԱλ&);탈3`vYB]7k ^׮`zXj#ٞ hۭDyIwc6wÔ.LEERu1_cqn#P /d ƙ1',saeyͻLI2EP|LzR,G͞d@L2^S xH6{2DH5܀J,=ޣ<,g!Wa|yp|ݒMq':(KҔؾ M\=Ez9+]t.G3w ;sđػώ0; .?:piX过Qy IqԫxS/O6~fpױ,oN~Hr;lc@lYkߠv>N"d\K2+Kzgо%@kqOl~|!a%6NKbxČ Q=r\*WUrϗ*"W+ ݫ.h&/Otқ|t%#Ki_ۦ=(x]<5k eW)C*ƨ΢%/;M+ІHtz-[+;9|xvnhTMhJSţOrr#}L[\ʳKdI<я`y2o/%8T٣3@w{M17؂T*Q˻sܬMfCqX>'Ƞ!$~qaj{[&0eg7ܙ$=+Pv86u3n@txIמ)0C=3-er urFdI&`WB%DOӓ=S9}rYnW/R=?{$ 4S➰ycb.+KOvz'FKʱH(C4hLݟ=~T%d "-1TjM4 ܾܷ=a@}sifqsyڝCU <|,Eqh 1ѷzjE..os! W:Xo:1 ,^$e͕V:g>JuwHOs"㏕5~FRRk8)![-ɬo*>e網 *>3w}yDfm)qEb.@ľ2yD*f +;T%DZlKclƩ`U:[\ҥe[jG(ov%DӍ NjVu|m09Qcaw<'z&!4I>-l69v*(pSv{QX;̀p˃^ `Rѿfݻ;K {ԎTĔ |ωm}ekU|W}W>wr'8?Óz'3mz\*WUr\_PrUO;\J:wcq lzyF0r,}<>{ :'̗X2߻`A{(Vcęb^ t23PR6 pZe\$2M$>sc&(S,VeH8J}S[2<k7*o&g>,eFޭ/JCAZmW%FX-h'8L4Kv&66&Wז;`l2QA)59?eVpl^՝4A[`dOcX ft9(Ƿ@?iְ) ~2= 4Lp4[Y j{m. 3>:F,x duxc@qbapҁd-e-M;p"@ ͹C;/eWp셬3=r %.rO*F;uQ/s/Gwa {hKRPy )"I2eK5>U>Z)pJ;K`X$SRp-P(3  $|F?.C *wSiyJM*n~n7O2y*IDf/"ߞl^V5%yUw1;kԳNv_vZT<rވ1?>\/@9gC,Hpfz_6l)g@tC؟CTZ@d\ tXK zաZ$ޏ_# OY 22G? ggr\*WUrҟ+)?0SO(@ް<ȁ?Uu^?Q_=Q7΁gl{+ z~v1x}ۧ;z}cΑ{I,Xs|bvOL)*'$ NΘr7Q@oNK Y}b7ˣcwS)6ںh $5ț1[OI@~&9' .eaߕVFތ{`/f> Fb_m6_$Ba4*Ӽו򱝘su^XVP#YN4O)iyN;HT0=-4 / =ʦ}}-nc@Q19  ՊjH }-!3wmϩj60'1b6m֩uv|3nA,Ƀ0ZedNk- |4XqDr/ u{scp'PoOS~QI{-OW I\ |3Ih[`:G}51uSd[?V>K*o A|Ɏ_*WUr\-?9LbCE;P5``G[y˃Q͂}yw=yߙ3 i?8NGēLDL%E(%!{^F &|.!)vJb{枺9u|f ^n 5\!c.l}v޴@>\׺w Y _cHr՟g\a,jga;^oWOڇ p>1yC>(-fr^yKbJlC0<wB`-D7R cl%89+W0' Sl̚_L8b?_2(K=3c2`H/Q̻-I;3d$1Cv;+Ds$3&yK I6]{cF2=[,w^GE"[wU25!{Tnst]Fr,Kp7(>mMb@Z}3n-ߍ% ·m`EUJh'mt;6 F?S-mM&gMU@҇EؙؔLn*sK%)#L~I^T3#)wVw:-@=q琞ަ`"zKjHұ11k3e{wW3;4U(l0d6>HP`a7UF]? Qj n 6iʼva^ɗ T 3ُͨS}2Mȥ):5^UvFq!ة L4y^{S, J n~Ixl1?QKZDeˣB< rsȜ( it`GPm"KG]iJbs (ytOmij GvW@W Xguļ i왜hYD._pϠ,*#`%8y16>vieg>6A DbLؽwRm^k+4y-Òf ۔ q,RYء68*A>/!2x @R.}!-cJ {`ױ'K=B.@w !X9fYjq$lwb#$M"^wU%<{*8.7X`9 9g{M㞏qc̞Ԇ@jQY>2a,oچ_O^ 2}m~CciͬuDwlϛ;4l]:6חY 1'TWd`Wvˌcp/u7Mm}D 52^{EzQx>%lYHVv~x}{+th.#ۘv^J]ぇbr tឌѻyB]FFX"HVFS˓Qy쭾tV0}yo )ZF^ WM'g,IM>.YrQkّl-}gxk}]{Wc -,Sb!w{\*WUr)?ۃ Rx͡vM#"eCr_@F r{QhReA_T&ij"NAM-! hĞؽ,NK-p llOB %1`n]RWjFQ_oy{nָxyz-cWzЬ>g+k*pmٕ;@xK}A-%318ʼn5(yq;J55ڮVn޾MT7gAJ5,K*zǣ @@}YuMj#1ԭv5Ý <̦5'-.c>uglUE0[if~_Ǚ=@ObY,B9\nsf Zc|ߒ2r6/"U*!%% 1gH?'˜]HP:)#*y Q;*uts7ޗk*󟥂(33grA;ЌyJ7r8t^d*&Цst0!R-B;% sDlt^{ vV$mLc1k!MD 俼)8~9IеCiDgwKV>Ͷ%IA'ɩK% @ywSŔT\T 0i[Hǜ)%ic?l5/ ))u2VCn6]N~wݺ:ݍc#vceL8&2AtŶCuG2;ue狜38vL4U>wHg '~>d6S?tɞk_C3=۴Y'ՀCmrs'-7~;?|߽ʍή ֓w)OοOVgURY?G_*~+.$^}WUr\*WKWۧ_')˥|RKF>>:>=-I6Xύ:@o9 T J?4o{'LeؼɿЀ`  OX!)ȋq | |??A9M:OUbTݙ)=9: 솃xW&I}NW$ D@[} ZCn4c;5sX o4^T\~Oa[ -nL! NFI>ڜ:[Z٦p$w4gMT^\8ƯY )wcm?[8vRopݲ+tAP Pj@Ms0ލ ]myJ@:)Ɇ7Ք,Hday[ͤ9#3%s={OwEr8ws=yv/k׮C񊴖LlRg?BO 凿e x{WUr\*WrSC~zMgY+W݋n%4XV`>W4DD409G\5%gRiKP(`Q{{⠰X$Bo4ziI*zk;Vp${ٸ4I;;̄uc>3AnE˓pf Gd+L$גMc҂-y Xy9LAV)2&pNCtO !\

      ˽@#PmZw{:Bn6P1Āk%z\dfGw*bD*}8`;Ix-Xu\u(<0GYϧˋKk<% inz}PppUzBf^8GP9>IDA_d0vC sQ? 0 BA~ R{Fb Oc poR)[Z={ZD,|{OmjI.>ҳ пC~}7m}}H7ԏ25kt60myúu16^f de$A>82Ltн4qJ5x9m~ /W2.wr\*WM$;%vHo%` ABfB;h!4בֿpҴ03HgFflgvUeF4'9jW_]?{wU%YZ;;xb댩g64isrВN9sK~4oqNclݭ wIH[}ĕ$Qoj `,B2gI!yt塍LΜc.+p6fd`#n;Ҥqaް |JaM@N RX>fSumG0\sp5<'mLg٥ȫD1ӻTĮISQ#s [߽f:ybTaC ^ RtANDO/&c;rYڵ FqbH؟ ! .28u;cIrx"k}NRH ~ N 8H723oP!fV`Kjު06 8 T eȲ%}&diSn*}>{٦.9wUgۘJF {x(͐+e fd|՘*>vT aY8O]"kץL"XmR o{N<.U@-qb}W>(`lէ Sjm嗇nsqO$$V@b㬚Bb@='êԣ`Onn~Zu1? Ouz`!,-Vyb[6<KRs{~<# D ݮ}.2 VܘC򴟛vOob2#Y3WionB? qv]jWծkk1:Ip>9zSjKK/76;̑غPr]r~:R[V$ "Ex+yM (0c=FpI VcI}BcsϮցɊ$4 8~v/M R*(G {Rt\)FxVv>IfvvtO@ܐz~wf{T@m#c ̌oB%`8xc9yƌ%Ua{>UVTQt4wy>ߓovR/ BXRy캈?37hQ`r8LneR "bFE"^ҙD4EhA2ia3oAI͒a.j^m(,xf211z-gd;g޻Z}D>{J? ծv]jWڟos|Z]aNcwm{»{H!I,!=qLVҙ}39ҩw4=aNS_3U=8/R:ժr]Y`$(A~Sbϋ7ƴ]Q3csRfIT. 4%F7. {D>^E2evSōd NɔwfLI;RI$)He>Q9y(NS $ V-QP x{Yq%$ ~ Jw ٞ#7pViy*[77Fdm kn mb~ћPz$(ZZ`=D&QUT]IN27s=2yp:+*R_80bILQE׳'@%wl|QW =R/PO?CbpZ1|=\+s`OcSj"cs`{60iaEBRv]Ւ+K[PM2:E ƈ{5q**R6q)d,粛H'8!IW^1_:ԯ]V]OjQ!hd#%<KH1E&>,'䁉*7S{eV'882Et)qbY^p 03j~>@L6,z[+©![%ebWl@ ͿTlμ؛F D/^B~0 )4߿n}H@W#h3oY8');Xd%ep\j)i{x=T?1#&aM%L2q2ɲa~dfP{ҠTڤRzW}xbSϬ ԽVkWp0鸶{ڥQRN:%3Gؼ82\SL+Uݛ9i RȰ6.uNu#%J]ƮΩ.Aa;Y)d͛~o ?DtNR/Jƫoiݺ(eE vTB!U[g#6&NMAo^ĕh4/9"X&K4W:fffyyPҒ t ٭Br8/,S+Py>X׭{cfų>]l]jWծv}_',YEW1Pƿ7@r98E mK6ON -OEjo}lڭz_g*RPݭyMnlL26IϺ"bQgiC#a$GM:Qop͐XҎU?%xYUȦ$w ^q\ $PVR{% NӆbB&}SB4Y H"4mK7t2@0Ev [b6esT&=IQ4LV! w$z֐a"L#R7tTI(I7<BuvP3yj/g6t4ɖtwyuGvrgyw'>Xzlg}[rpLΠT{=<H? nj4^_7Ԭeb2n-)-C8gpގljc”SP'SX}8*c39<mWkn/{riܖ D1;QZթ NymSmm<Ê?|7xwwºiZ$tu:9XP!K+op_dK%  x"AkOqO "9aSWծv]jWgngXoDH}vu0;}߃z1|ñg@VdTZ nz{tÿ{܊ܣlpH? yUksTv_6cw)Bz Oh*f%5?m2@;n0`JpiteTeY:JA1'#兵yK 2yrYXҽ@] x'dKIQ T.W a6Bk@qv w0)-^ @MBN󸺁{?P>BgƺV/H{x* [<3?fˍ Ƙ%~!IwVI@eRF Uz1J(W37,f %ok11wL&x t@oѬLAB@Z*RDۘv3F wu0C$*'Sl݉dYLҦ3$OL0L(%쏿$70(_@rS) A 9K/v@Zk&~*{(Boݞ:3ʅ2Pw {:i²nE^S7Hc t3j[1Ojݺ`\}-b d/?̻ڿ.`/W<*DFg'V69n*k }M%I t% $ůԳ^A;^6<>P6Zk>2v}d|3}IL+9.֥{#aNͫ8_K1fQ6|%Pfr;LP>g}^4)ظuӘˉ;BQrjMriw@(d"ueFVfTR mT@v3;RaөY}c/m A5}: sWծv]jWڟ] ?jᕷƍ;BL<ر7q3L@GF#4./ O2 ^T a8u+EU)7N]"n*>r~qG_sqv7QrxU=W?-rt҄QTVzY6$C 4A0b0V4Asa 80|L| gTK8.Mc]"*K0I~5=sfS%L^&:O8ihI"}8^޵FD| ; N3Qex#Y!BfF1! 3@7o+ef+*m znw@5EGAmq#h+v%0webΌQ?sYk2ͿۋvMBȑq- ,Z!:C^ֵ%)ٻDFP鬉t`vR_һ{5P BE~`MV\\bGTB!<jK_l E&e~ͨתj6޺؏ק ۛ~D(3AIaO?"Yy_jWծv]𾼻f-nv>Qkxu>aؖpN˼'9n9ދǢ*U[ T ʁaA㱇cm .eBMp%И<@oh! ntgyd #|$(ݰaNa~σ|ỹVIGHnwHsZe;-su&}Z1%5|$/VˣG$kLE鴜AfyNZ_MO}MC{6Vw]2?{UNm╛L?1P- sWp;/Yg)qbR wM8!$3{Ȓ1kȹf!E}je ߆j,wG_eSk so>ݼg =xZ\5iO|ي 8&c /e{c[:!J5IbZtT/@n32K1➵~VDRC|&O*lJ:TW6e($De+Zֺ+<[;ʇ5SPSimkVP:/ ɭdd R,–idJ&^)RP;yxzQ\?=3E#ɞsX d;,Ja[#cY{ ]oI9W;7?"'i2a)QŏHZ̍S{ED8osÒ[N֬;]wv]jWծvg_w7A$U}ibބ;mSmT<|;^{6?K< &3I)n"3uiD$U\M/&=_kRvի=N gNvXbO4BQ"o‹~M3([+0 Jl7lDperH - ߀TyZI liO}%v1sׂ*w0߆w'o3nzl?MH&ijjǮ bсh(C$̣{10/]9{!!c x"\ji ᤹˛::pV̌9A`!ƞT#bu&(&9i[qy1@IJ@ePE-,1=!cNX,yՃe΄!xq@G]ML4oj;=`1?W6Gt>?)lݻ䍭{1S+"tdzƢBE_,E *!0"mϝJVs9/~cMu_AtyIMa~>19NY{. [)NL],]jWծv%inO|9-8L[rd9hb}Oה#E`RH5@1Ng\ usY疊ݍ|D q4ATc)1Fh&@n֞Vͨ:4&B Z$E=f˛(w2q0`1/r8vK'H@h0n(v?%:ߋ*',0./[CF":u[9)օbI 1d>q,2t21GU"K 9G9.s0AnGMC"fޛ~#x)ևA*( !֒1 v }}gCݛܡlTicgNZU GX'ֱYj2p,~J1X鴈7-  $ ^H՟72geqg{4ťx2f|eMZMهi1LZ,^ dˉ7oo8]`%'Ŧb!X^gӴW ?:O$e'gHVk j$4.X/cms terkWH1D@ElP|ĦX!Mhj U{;0cG 2}<'FyIڙj@OEK,R(q\ u,^+;),K :͙m٣krZX \]/%+]pBc̫PP8>{#@Sr M$jf&_iYY)0)w=ν4Ng|o[gyDY: WUJ9CJ~ͧS)GሤE e\B(ӱڐAb%&W 1VrLe\& k_~Go\y2,h=]Wծv]jWk(}X} yn{'a+ncN"q@?ic[ۗ81Ry#@FUvVqρc8\zƊ|:k%I+ȼɜF`< !1#`頡w(\c[?D|'W0ّDKh̯E@ÔϭQd7 PlOo7Pč#G#<GObLs1 4q,f,%;#'s T_t[gl[̵:^(_Ņ&T;Kf<2ɳ?$"|SiiyDRB)%ԧrxrc{u.:P%ن1+gU^8.wX$~6_hRKr vL7bZy !4{Q<+I{m0xŶgA]$GC?3כ;3{+K[YƐzAGT}[&!~`2^A_ >nQj@b-d=>5@v2W{7f?8#$IO_ u_ @:H/ހ d.pŒ, 7H'{q@U>BH9+1$T "Q\SEס`kZH~OJl:m~ 0eT.FVѓ?TϿ͖#9UQ9\o3l? uϤT~vWծv]jW_'Y2%{֯+q>o?C+u@/* | ̳g$5_V?qdvzIml5TcX 'p ;6m?3=i 7Lڥ1-N>&*=L[}R1ƝL^b2#XݘȋdOGnjL~W sa"^進}ܻTۃb2Z%os)>ss[/<0E͋ui|p}/m?ZZ({|?zn/}׻@ gyrkPm T`8BRb'P jnm?6ܜ!~79QE }~-{~/p:Clծv]jWծk= XkXF;p#;:l/K}x͢ܒ?"nhw[$<%p蝫s6ędF=evohB$l eȸ4D_"t,om0S|&yQAzTN4F s&@v"2пٰNOLLܐ_g7J&#efK2tT'Woߪ$ͲԀK?tH@Բq v$#6\LlIXkwG 6^MfOou〈r^SzopcSp_ T;ZX<*F(MbrA-%)pODe43wûe` 㻓GYHdbp'1Ŕ>ܷ؀sƂJ.1(!g:!|S`8+Г^#a츌ۿ_[(lVFЛDXRe^hZUm k+j 3A$7wVic7G<81dm.4+%S>wA7uw"0#MARHI ZC=uEA[oͶFж5c)(%H)dR _LkI >I` jW/C) 5U1 R#؀NvhS}'2 [}=hC j;Wȷ;Cv8Vƭ@V@;xaEI><˴j-6sn/Q968B/雓q X60UA9'|즜{J֜ޞKOgm'~]jWծvϷ ֟~ݖ>p3GI@er좠ojv^]Aԝ YހJ6) evߠHvr[ۀrFMȖxylPh2F!e-0j"r\25f%3.b`xRnp- #Q?ee7|G{dm1 l6ץ{n$1=}Ѧa{ 4[ݷ:6LNMh_QRSdo JԦ܁.E ܮ!2`z:OԊ% -V_Τ=yӳ8|3%2&rZ!Y޼|ƭ 42u{+i_5iRqmS ''#lVKj%$zẚv)(Y^Ej-'"b{m8ocmT{QEHՇ $u(gm( ʞPj,yH݀Lۆ4$(P'/nþ}Qय/@hӺ3ڌQM> KR,TS*I-oE!^ܔ4Vގ< $XKdδ֠cĵ.bXlnNw 8˪eKΟTiC^﹑G_A!ISkY 4Ma=l)V[CD9dg[J?YLYY};Whq"j6&(Wvxt vݔ}$g{fu(:lSJKQR{ N !@lQPxdfL,֔t$W/:g[\d9BM0yscb+;ۻVK2je;'FAQpp(5C UYmu1{W$RJ(|ҠIV]KuM_H~*=cpXb'6]Xx|؝{uGnծv]jWծv\^?YiF͏dBc4` JBa$h]JDޒ&=G6^R]R jw7\Y G&Zgf'wU`(%2'$L9#? #h6l<9OW-`zAYƔ>1hysiҌST*+`8 +R#}\(oݠ[=o bHaeFXv%/ұz[{;{>E-(Q<MƺO)K9I:ϧw+>܏AQ<೸VYcTWrяtfCȖ(.&"/ AJ[&8kwI&;@M%ïO_D'5y9H;"7(N^P;0gRWj Tcfu³O}1,~.˙Sߠ- _4 #2dp3: hC_@v;@b!p n}zsxJo??C(n .=P}m8j Ue ëN{NDvƇ$bLs Z&e_o}zTn RH63(zAI]>:_C~MH'ϟZ_W> {V'TЀ+,"3)e|ۚhךgr/~ru<5e]B)njJ NZxh7uwW]R30)ݲ])+ijC$ Z @DxFkKDOUޏ{1X>Ula>-]ÔS3Gl~` DC[רƜ]{' ,c M$,yeMQdX%Z Kk/L9ӮIe<@ vI<4/˜Ω$ga<>W~TU5h}kH\7tGJ;$А X(4%C|kLƎ$c1I3w֠sY Q$M'Rkuq(cwcDi[ޕ7]?Xry_&PW)d+]K1o$ (1p %g`y5r}f믐[;s=zķiZj xKJ qʣ+T0Ao(UpJz=}ְc:@Ǔ8swXbc΋7jg$ 8f$(XI,ҌiR>W #VyIhR$?oמA ͘qqgrKJSqrc\w"ٺiŠ(P C4eI 4紶S{tjG p{Hz7bͦfPnIπzA`ѽϋ@G} c dsN죭5*bBc;mTc:oDΧ/C?eԝ||W^5}X :|ℐI!t>w Rg"gi*8hM\w+|B Njt״(ڄNzywe -&˜tC8)dȾ]{~ɇofWƷц}| G}Ec,ݵi;Mi,.?Spm@y:}A\߁ծ13mFp 1Uc{Pƺt :/%.zD|q́n~^ j %(qfO}}*qNg}/\k{n=2Ca ݺ ܶ)^˺G| _ \@rQߛ?\00(dX$6vq0O ZXz S: H/Gq`DJMdS\c'$(Hogwvyy>=]R$mFާ^5vY(*:2P =Cqb`! >ȹsp?}]jWծv/xF_orN/o%&h,װ=L oێKpS;#馒]w4rFx\PS] !)lN4`> %)=Og Ӟiqo$JtYb^AoVX)#D T+葆DJ.-Nfqp `'vM;qgzP,R~IJ\ E5KҀrB1 6,>8\{LCܩO.gzC=k[l `~}i!JV5#Jm*ܥILAuowA GU6/CXsL1qf1cl!ݠ7uد~&/l\3O7ˬOTcnåT?.~uW(}=vj$r1IrB~'Uz^))b92(,'V{jcJn֢lEuDt[3}]Ɂ߹{sFKK>{->7$d/ 4쳿T7ernoߌI^C,kV `kvSXئIDM.]>vYmջ( I6)6hQ[븍,rh X踏Ŝb~ɜɎ['j+I:EjCdt/4#F6}0/:ӻWt)y2 ?5G|N})-ծv]jWծ'ojOmnDŽ[>3#v _~#P Yd,|p x [p@vd;qo\O6IM8| OV\wU߯5([ `m* IE%>j f@!A5/=C-ڔd&pyU-p a vOkVx`j5Py {`tGYqosrJ:!3UVB =n_N`Ɗu9&d5 I[,kz.|2VT'A&[" ]a,K('&[pҙvjJT>YglPRU }!E١$l<+Ԡt嗮Yk,Dmf.ؿ,j2.gJUc}ɥN ɥ KP'qx2E pT{~R/Z:`Zp1B .=ټ9_SwE&3[OgCɐ>'G^bB*j~i׾J|& ;P=Ӵ{bs*`* 1>*HwqDV(>scj8;_) 'nTS/OeLy%s6&b)w4%2`u}jbG;WAY`7=@E<9ۂʓ+g}dk ꖍ冏!>{ޫxigv]jWծ w$y,As9EN9eь>g?7351c@p%J<:ڈ@枫.2彯ZΖh cFEq,x!h =djBإa2#)E΢`!S#K+wYk:tEZD7 r~r׎7aZt8Q_@؝}I ToZN1ZA )2& q81T=u} fc$U% @]7-6tQ͓˿2 CaTpTU*=M@^A&/TU6:r}H:UL/bfnϬ]PH|&r6? L\WĄz)ߝ휀)5 9k<}^;hX4[CAkRvqݽ/Oe^ؤƣ7 PVju1Ո "r $ZYydn`QGgp)\㟩'TBƄ zKVc-=adsVqNcO/gҋb?=N]VtsJ3 1P*vN@)=>>/@5uyy2E! &m mSychg*Q_9zhlV;w Zs #cth')tC:c*IͽbbRi.O: JaGKs`W`7E>[d}t>E=}T!ϻ|&|7˅v~.Ŵ" }g֯v]jWծiz`;xnwwݟ| yFJ!W%W I ^Hl]Xm˻ns{.-տ&]Agph@Svc Rٖ=r䀹A{v%Oל9Pg/ Ξ#HEAmm(* @$L^\F +wr;X'p;M%6Y~mlsr@T WX$5:2Y'O{{Jibq?\[ #=1kg?Zm!)P9d; J2owVYP +( mZeYb?z_e}#CM^ʜ[۪W5 l)ۚAUmbƊ7T\6Ȧ0BL]7Αz]^ְqL'߳{Q\2vu;cj%lB(zc?4*܀/|1̓Mik=͠w2Ee|||n3S`72}=jWծv]jWL  {-on }q.~d|sb\ 4!cҫ1Xp\6k)ݳ[vOI^!V˸@]x%LrK,kJ<^?orK|3;$ Jcv*voVMeyEvmr:ȂRqŽ)dJ J_(5Y(+b&@q@ YEg3psl%w2XNEԲևMiFRqf%!QBP? qb Ҿm.6w=1I 0(PPAIʔOg*ofܣ&ePX=&^s5h[ϿZ[L8q%CVCp99Vc Ugm|"ƭW \\_ In8$څX jcwRd@Ӣ8@`+ [J"lw7_:^"d2xDehsrxϱO`ھ_F*ӧ}/ֿkBosF6u+Pv{iuc P  =N.U.UOhXxU4}ݑE c*\kJ<ÇO-.s^֠|ϴjs51Hq_t`.2H%} B1ٖmXDt߀wͧ ۷@C A@.wP%hسwS&y?_|ܤJMgi Hy?B7un<#Dm'PAQ2怔22b`-ec[$m<{6l8{Bޛn~{aY{E_=,]>N O'H%?[!nKE{{>Ē&Gz$p}˓\y4oTW^-M |#-&9qf'+'q7o/#+Dtw*@ppܕ^R&.k%SmeUֆ}H|ѤN)q|ER0%)e6l?ONZJrl阔C']"N=ڄd<>#;^^y[ĺjv#@CB-'a)8dEI&6d$LB1\ژ Ĝ"3?.eڬ@Kf\5r2Z@EMs1o^`ҿ[:Lcfvn 4Vdl9.KXk\2%d̛Z)vczD6jZ%W'(˕%~IRޏ׀4C+){ K(=2ɍO r=~tvR w8/կ-9*9XYJαs`N6Vx,rcK֦!߯Ԯ*(BI Ny>5N"7JƧX6%'dn&{qeAT@SG͛zsϧ?-+ܽ>}HOܩr>ʡȎP|<{*c\TpQU"ByZ"SV \jnU:0ܤhEW4}޶=T:d1%Wq^y ȖG-;dZ~ _* 6qazSu]/o_q돇ew}Vl!H ]{rSy/'m[t{{{{x!㞧b)ep.r=y@@,q^{I@Y/Cvnc 0fФ ̓ҮkOi5 Up,޷y\{)dqKc-wH2qO6`oxo*L" Xߧ_X|*M<9`UYI 2N$݃!H2߾X|%݆l>.lړD1P'En foM_ 0IBnJgNgwH2z2 c @J/î1&HP]$>!ʬtQ=UhZEHj_+(M@*3ę,C̵M);+h+lEX/A,f{]i9t2>HT <,u#Ǥ1fI7Px@X)R<8@SIY%z14D NZ_C hv N#2&#63p1i\2O7_g-)I=TS\Ji4M~߾t0rPi**K@o?2P)Ƞ(' MrLm@hbMlz 48/A5hqj=ψ N2R|Y@| {2:qm,P.? 0˅:T]$3cR|TqSGD <t5`VgM*%I8wdhɢ:LS99 K/1n2H.҅W>MJ}T=r,(45=MXV,0mxl cl{\˕V_.l}H8Jb!Oo`nۭc=c=xa:=US]pI8 f]{ZjO)^ao-Uе xIDW4>* E IkMrٳFod(yTP{فU>o&4?ǎ)%h -[W foW/*",nDʊ{SR^~Y"',jlp! u_؁+ݓ++)@VZ  蠲 ^Ȉ͝=KR}"cy׉jfUzKs*lhIi{cg6u3- 0Ϸǒ 3 %dO7(s6)N:^.zZ,^nR  :I k"Znh]Ҷ|WڗI;PXXKع<犤l >}թY/o,ZCPAAܡ4~)i2]/5}~vܚF2"pnl=u|2& Vc0C/&5{z:cbqmZ.K=;heԡ ޻K 5U)fA. o>@-;Kɓc߰68*{߱'g`|r@÷~ʘcL.ݝtUZL*)?cfk'/czƊ723Hj#!_hL~̻wlB, @` xɛEMT(Q,.-]kp.Xo{W*Sin|ƃ5n] H1) d}\T3F~߲ќbƽTO_jb vKþ{{? 9}Z2kO5PVZITÌXs:*(F+ =(`'EZLZ*+U$k`)"zY5Dw(Qs`k6cJp+o \QAk6S s*Q7*%mYɔLRnu{NA/nEly~48T`~̠tIKsU}MYA7^[p5ofݷ E8;\)$rw-ϙ< Aq(aI7&zt!T<_?:J/Hc$M *mJ"e,p3tL.,xJ䄱@Y#C%&9uKZc UE3p ξȖ el^!76jEA&߲ '+'ۤ0{tl*\m0^tT)OoC~7ev23'U7S%t-"rBƴ" xX=gPT6ݔSD3@\=Oq<yXX0efew[bL":S1Yh SgQ, `Y̹k[ƭ!ab%5R~U+Krbbخc:āތ=v_oÿ@^=3:?8|_{IjB{@c')u@Pi!K(E!Tr'N)cOg ,r$4ΒRbP}kS5K4`t M>Ю{ndxBLɧ9B>4}շ4)GoǬ^ ԑ~.˕ @7; >/uF|#Wk-Y96ۻ\yװ=pOIc4׭_Ȼ'/qa|6-u*ukmDRpk"H/'P £&rxx@7msV:t5 á("9z=')w~m;WKl普 ˻@!z4yAA `cA k~zܔq"2~*d´d7a(دIU`”Aa5a_ ) lb8U[Oyn<ox~ b@67qۦ\RK;H,e.))KT KQ't,.Q t_ׁy>TU[x64}FJja@9Q>V Z\J~-a 3'H.d>߾ ?!? /*+X h@m'Abǥ7薔?,~;?5tTeSs\'"e@8_7~2&1!>=O /H?铧45 O;o}I:4; 달Y <}o;=:6Y|ocX|o=c=c=A|iYv#&5Nz&u-'7H?]ş/o|ǿ7~+=ox@*Mcmq}ᩱoͼ)K 43c+mq?.? '?E e10uL?iZ*?Kpkrwx71z]]ñ0iDMȏr%_5ݽ\(?۩ v?gy]k4EmΫm|B >{{{챾u'v10-3mL)^X{R" @ȀȬ3ޥwәq"e c޶JADNYG-)ٿOI jd cxi*wlU2چd5o!&{H@TzRݦNU7 DT>PrR D{(m?cQH85R4vp#Ѱ'6#IAm^\ku^ӝԹ35kl>U5v^>CԱ?c^Vmo7x`he/VgsƔ5O@H7.R\Yk"$;) XBUbYʞDjK${+Ղa0z/Z9а dFr)ț9_1˔:WPp]b.`X 3TЛxʒS+G-!ccyž,P K?+2؍iR]_s$19[Dtae 1.sE*9/b"v [%iY^%юa*eYY&~ kNqw";~gjtȷpDΧ> e~~1{#@IR>bxl_oݓ6Y&ΓʡI\'?!>? O>w~+xwX'c'{O;a$Bb)cx>)D:F'/r#H_[>;ke p]T7(U.c=c=c4b8"\-tm yg}pUgT0d"ØG*HYzڤsu!*+ҤE7>H?|sTɳKB{݀ hRR[Ur7wWOLz׺ ~ɱ>;@rX2KBfKz'9닻+3Rid"mS@Ө`TPoɔT- cwܓGf^J}/eMjn+( L~\?AR&~KŴ֗4)e8I.Ҵdz|.6 pڞ;z/c@EeFg=P2'9 e{RU?~G'rZB7ިEa{{kC)ɹ2OXejIJ 2XHgIǯ9Sv'ڿ2c] IcnT5|Cvyk X6uRʠiV^-(#n,0fS~~ ;FɰK)̬k;DK{?xb>L?9kOڶ"/ "-:oK|hfkh1lSj)ɠ$s:&}?c,{?Ve@Slu쓴s}(~x!rǖvuHd_6s}>uzo|YŮm[Apu@J"v h.5}Km=c=c=>//еʗV>r/HI2_:SuL"2YEN'H:<"(=Ipt*R˂U.=9+wʦ7ǹF @LddPb#=ctGVE)C0塠gZ;ROipf}\nӛ}䗹n5XHo;NMaʦ\2uEJmԞ: wׄ7p|%Ij00+k䕋Aݝ ?hn V?[wmm'xN3x-Y̗6& :7, ʾu6^=k-L"BcF.&0gi =cGH:dT2r ܌ D[8`.A|h:{#?7t@0X<q1 VH0T ȓLy>6;@mq'Z\HZ}RPi־G.?h,M#xս߽ZI6}Bu:  @x`z&s ',^#dvXyCFug$0ՉǤzk޴C Wu\)i}FJxi$N4)2X|~B'מdIU<Hx aǂBZ)Qnҫ*gUe(2e\L<2i\l5塣JCZqREAQ 3X$y~ {4QYhX^}Bf n*Еrկ:EEeQ-dhyS7}֤QEgjʅ dRΝ vT.r z@,iǟ3_~#Y"DM2͍1wy;]'Y*|h=SR,əIỵhyܑx:Zd@ ~ژ*1v#(cN܈s;Ymf:Tyq&ε}Ws <>dY^TǏD)ֺ`:h dڶ0F7):Є8u 4kb,gYJ;v,nl6.2餌yb 72E2KZ>xo ;CiG#qY!hyo4Haoۘ4M#~OI$v/1&!_,C9rY7?ӥNحP&%Y>l˕j_̗~蕺txۏp >7i\_q >sxKۮOlIMe{{{1}uo}_M:|cr4OrvwElYRY9' Ӓ{E.݇,W "1pS"@`~ƞϴH :(NoXJؙ?16}=:AJWf~33fZo>H, D^`@כa;K崒BIF>cuZ!Cɉ2c&?8,悳aiI6Z3Z=ِ7wʫLʚ͗NKƇ, K79Pa>ƗNf;6r EwI>ܟNڟhm~CDk;fSS j{Io^v>9R^EۈI? 7-U.Vǿuԏ@ӁnfH̖{^s'4A+ 249M\xs^"Lٯe3ɝVvzcfS߱6hw:- /fu@e < Y"B"Iv4-Zd@E#0(,5ڶ'sY?/uO1r5%2j!_x;L?-LXՠZSu;4I^:\Oa2Sf#jІK_~m^~ޛW}SMTQ *ȧkjx: mr')Dn̗$zY/>R&cn2+}z$KR[Lac=c=c%&J/п7ew _{Xsܘ1J<MdhZWwVp;3mc:XsϻӵcKEaI [΀PuV'`zم\iQ&[=Rs6 rQ Q\a<.cŻ |JeN3C,'f q)&T{l^M\ 0BR> |q<ww QP0: e 聧YUW0 \S  B*e1ߍYG٨`.X^<}O7۾sEKY[Ny>\)K9R|!:tYy7ٖ?|7Ą<#~)䧟 =:/~_%Ugy~80y8ץ.\hDirzf4Vc\\sZlm?*BxiZ%6=oo7wkWhmo6{{m1Ey>%}#*O5nKo!*gmvhAfL*[؏"XY&դ̋4P+W;ꆹo4}iQ?hq@I!Á *ڣ\YNҀș)l8:Z9q.^l6Q(L dd.T *Ad~ /Ovo >Է㜨QXݒe#0Rzm zo_Mk{ C\XCQHuI9]NCClvrMQϸ;'QPwV0,a*.̰TKPӋ2%yCwܥ ]hLF&Rp4_zr X"Sĩ32ELV3QDcy$.Խ\ -Ȼki{9O,H3 OF0V^%8kwM 43 y$-S/XzE2 KQZ^p+K#U'H|, l)dO3$Y w`&M~!/On{nw9IC0Շ%_Q96Sp3L|1ae@7 ?7^ ̫JJ j7>^5`ܺS8cb"5qU-N"M&Ku/*ӧxz9 VFqƌMUH1Rb|"0e -616_oE170?p_V?Nxra[]2X~'uY n8c-0\_>+ }#{?oSPǷG J"՝(?m $c.VkV;I'бu)lcackDw,c=c=|3'=8?}Aˍ^ nlI{[ɑ)LFq OaUWөzO@GQE/O Lk[y*vTLF]TvJ7rd ~v@}+N/l8pI6;G$d &e:ObvUo27wBT[ Z MX#܎Ft@Φ77ڪY-zzwScKwUxp" 棶* cDRA&nxDIi nܹ°g]r˸M K huB@-RVF%tF^߳o@2$ă؃vW̕[ug 7d :-ߨ!N5&2ډN}x~*LRjj X45*:oYЬI9@ADxtN=qc]Ҵ2-ñu1Uf\ҼwRڱ O?u_jy|=G΀>՜V2kX;(:"YrsIUܒ2e`O5\< $)vp&=ĕ5~ ]^N "|#HH)i-%70_ _g| fȤj3%{:m`50%Ld6|2Hy`[Jeٍ*t0/`7߯^bۿM ˼}΢\たE%٨;荒UۂolNނ-UВ>|5)N}&|(1o?5;ުW~m]c=c=1x//Óűh&1}E"[ j]h]̜k/ί;EżMXC&wR1ψۻ\ClgҀ*NN݃qօfà /j ˺oc0Mc| d_:arIQ$yP~(qg l'#ļrRj,9n(+mw;7P9|Qu'ʾ] !'CLh5&=C!Rlb_mէݏ& V?ZJ7eVq)(Ô}\ J~<7HYz͒ƛ"WwhWuM2ƅ1sP`4XT;iޜn?K)ɕ;0&-S4rf~#/ϋECeg{Fy"Ƭھl'7h?0u%@lFʱ4) mo{E f)8\WW'vp ODY}ѯnՎ(߄N˫v_b>1hAW?Zy&m@YOQ}Y%}?{3`w=7~Fo74JƦo} ot|~~GSRs?ҁ)΅=m,zWdIJ@oYc}:p%P<_x7CWPmOW?؍g#|jaD0Y-(yTK4O[Ǐ?^PbI?ks-r+ ]rjΦjڜT"75۶Dc=c=cw;{}yC1K4x,;ھ" ,Q@ @}M Ë OY]F/9nOcKR \bak&ģ*ͫ ާ0O8ή驽Kku1ШVc@0%9KB}-4?vՋ& ]\B^_T=yq eu{jᨘOh$Ѹ( 3A{ JΎ,47|c) F%d7 /Pؔ;YN ͥKKX[` e\jwj!1kh])|?gw? 3Ҧtk{rrպY]kJlljm15-u1}Z9}iodLVމtV/+&ZA:'RG=KCZAbVtXޜH#)S`~s {j'1сXW!0?8 =Q{h@2uP{T̈́Ϫ"jeto+UH:тlG-yb~{2\90Hq2X.kӯZn[,wX?|7z} 3d>[ͱi{S91Rea;_bb˩S"r , E}Apġȇo(p2.TUW}+{럳l-@*UAΕc㋛=IKrU s劗].qn Iv@se .ם H\7`۴TD 3]2=6/Y@ )?3؛Gn eXz=[55qDn'f `}lhP&y8ri[hdفޓͩ7=LĀYc}o /zO1f/2O7=.EckKt8uoL4! 2nLAlυsIkr| ) ܰSĀxw8W <VyWup[P=?CNϐSQϳ]A/%G \|e @*|U4cw};W%/ۉWM| h_[z-Ge_NHz%I xү-6B*(DzZRdfr:kYJ|/ 񿀼@N'<77R.-FP[Nz)eyŀ(s[[ }T&Z} nWX{f~G#h}ٟQOm5q-29[]s x/8x$89siȜ]&pg{(AͬɶGvY.}0nO ĩtSytc=c=c4qdr]QOwϟkFv׮MI#/Ynx%990Ճ@kiTP{s3pa\g]0_nm'uc|;׬K߶D[B(A) >nP=gR Gh+-8epD8i2@(PҨ䖢fnUnG }9-'rƖK{ЍzE<.9!!/˒x\/@ntuRȀ5KWKWڵ`v+@!9X%6YW(:)502-*YL}GI8$DYҗZ3p(@ܖ]{HW}C#&@ ؖGXZ9DčPWIk{v1*LP;XZlPP;"cxjRH>UYֈ,k罈#0M#2.k͔ 첃g7;0嬽j.W96uωҿ%u߰+cmlӾ ^o7$7fL }pĢ4vOMY-JsOZtgiAjq_0_'m#̠dQ$q.Vy/οHM>MS.i&n̮|2Y^s}ΒDb'ư5FhkVqIAF$*!|N?ӟks\r"i{&w_&%.a\v)ha*Bܰ$kiws@˚&CԴayX%\$.mt]{{G??̗I3o0eP cZ1^$by ' [;m7/td Zw,&5SJ4 g|S㪇vfKWڜ//-o>--lSSe# պME|6iVWdaYDgZqUmME7A7on{o(#QtM#xޞ/ ゚c꯷HMGm+{1Cl۾%+ゥ @fb<ƥFUoҧN w3'Hs%Ɛݍ\P& Ɂr}k>InYQ2;kn?&_YxØjxWTYއpI]˘[8C⡾+-zD/ׁz:@RKb1dJZ-dL+|w/,etք2V*?$n|RRZo7" j R7DD mey5{{_[W_4!@:P`mu;䦣zhw ¹Wƣx5:fw1- >1x|agbSt/<rhc~w0'nڳ3(m R3ou*0Q6USZʠ{Pvn' .qDA%Nݗ{s)J͇w%9,-;M}ܽJD=n:tzxH E3[; vJ l;L \J?~]&f!Sۃhg~+Ͳ0w2/cх_A/$O"56&!GjRSg]@Ա7wJ'7p&@X ehRea%OHU@5u7Z༖rN~z_H=S3dP8ty A3PRܦ:A rlsMe 矂x\=ʴ[ ^>/ٻ{> 9+be1[YXa7&IRwm_z=*u:w:lp u!'qPԵ[MoӱmA6} ,/B"ྨDzݴfBIn߀y_rnz]mj~|c࿖9̀b ¡5!)Ϸ]88M!h|1:;&Qj4߅]MJ 8 Dϐ'|`| b SAη阏%N>Lno]>IW:NaMh@o1uPPjleUed9'm^XAU^wJe-Euv.^6^Nw!kR AMxi);o`n\2KFj:t za#w:. Nښkw䠛هNCv^Q!O'GC)v4%9SM=ON$Rv桕H|xd׏_ H:WoIYL^R*NȠp_z sRu%6Xiuw{%4ItoN޼.d/Ij Vei1޲D&{Je-ED_uzi<#7o$A~|{JُUrքq PZ| h/k-Yg pf@[.4DxެszMeՖ5zWTa.hØ1J%AEB]v8$@޽9q"T!%%4~kkQ𑚘zզ|6/hS{{{x_~{/s~NyKU'l}qсtgXt}-RNY0o/2[.<ۆWE;q-;jp Р\Qzqp1OE|ձu{NrO*:ilq(Q LTn.ooֳA[2xn-wr,)Բ +sz_I K#gn՛zr H4n rg;&ԍ R^ѱâN[_jdo8M"?j6(Tb>gUooZPdCilmBҶ=X^'}4Z˸cRb煄w7̕K6gemf7 q0p5%]bRBJ7!IG:g%ߖŬ -¼:mk߷Ĺ!x9p%pHFI[o}(˺w1Omu5HS 1kח.9oGn@c3k̚8|6b)K3P<=c=c=xoc |7= p<}vk%fJ;E_|+D9Id1fs@֍=ϢYN;s0ls^5?/M%TIP#c#[u/Ǵ"9&sWEn{]ڲ`m/5fgNǀT6$ogVwToj!kg!)c\2]DT,g =7M v mgé>t nl,DΩL<4_eӳr$2YR'^ßcSݝZf{5ey,ಜ;ıdPM-0bq*=D4oBOK̡dp4@7ggRMG kDF6[ETP)G,WM5&wrR5%%]MĘu\CI)E0v% \2+k__fW?o97&\ @<;%W0V:˽>y ZT3"vYṷ d)p6.7zsžLh}זdr?>%Yn} +DgfHUxO>b~:ݭ 1A^{sK[An#Y^_Id3c=c=c/C*ǻG7^2{g@we׳Deu.kgQdüTz#}>!B4|mH(ʿ@ (1@3pBT;BKҀ"sK113vetOvd|\sǀkSfxS1eP:SfyNvI! \%@NJ_hm8Zծ0ŽkBUs* ?n7C /ܒ6$B IRGVw`TS 3Yr/)͵ㆠg:n,%3'Nytw. Sxi,~yv>4{rj9n@*]HAc:iZ. Øt%1@ocvo-o3wVB4v6@1AvX o|HP-Lmyv s>gfv z{R^m[Ur<@e6{<; ?r@:6[zh:!.ܱ׺E:/q3Wzu 7m$GĞutLs.ea_p)B;;vOVwnP #:RvP{$;x%+0DduS/AHo]w`Io@19b^tA5I3|rWU:[Mx0OĜB3rwsH7u+z}nh졨g0-&7%,OUu*R⥄"_Kʓ *~~?SCN|۳ߝS'bȬBVYs^;ֽe/{^|e~#Iߨd^~*f^iݦu\ns+M}(?I5r"};>Nsۍ]vaD7](t]K 8KОu8ت-R2֚xdOnǞ~! emVad3F N/?*AK'UN)IsCc)IfuFRUuaLȺ؃pm*8]BUiث S4LU׮?<)}nlyrLoTZf=?t -Ci@npmmX/ /M!-IÄ7SZоɷfA+UK>!HSIǺkj4k3Si|Z:xh(J])CltҝMP<urnvUn<?rDU*#/7gjR 0x\9CwY8dP"i.)Xr+I9+%W˚}JkڜnMq kڗ}ڬ"fŁ!NUqE\_7Q* 2x^8ׇʽ:SX(!p=o\ `4uOddwQm:` +~Lv`@iV61$Ir.%"KfBumo 4%3 K:NJ+j2|Q00Id6!2uliVj:nͫt#f8/F&>?o1&4x6YAzז*ʌ"ʌ zgO '붉7DoaIRQȠʙ# &< *fpދLO ]F p~}GdP&}c xv"#r IW9m{Th협mkV l%,}{1nKuf4o5ް.^c.V*ً{LE}ؼ#g=uv.?I*uw5OP,ynCocdv tf*R PA)c)u>`TPe>M}VFw@QM֠TY˼2N[}/0TecN}RDϊLɅnhٵEcO=>YВWAur[}X&.u卞NʨHN:@ƈE29~& JX I)iC*U(TRbf!ZZꗈr{[]I 82A&E!ZͷlO8^≶#[5ݶH/rؽ4d>Kv [d7YYf~KL6q1&#׹9bu,/>+1/5:fT0OhOB) IXtͅ+|yɒ,kGB҄hre7X轥2EO\GM4KxtWM7Q]~2xc軂WּÓ8q;`uInК<.u+N>Պn S٬gsd/Py}/bb~FFezuΐxTy0 kQu!je/{^Xߧ{ߴJ^Bq@ܱ㔑9Gg P7%7`QZk у:4p nvQnc5q-w}ak(y6y=Jzɛ~Se *1Ad[]d?=e0aRA H MR%+Mj9ttgv1 cFLsJ9..Tg\D\\d;9UB-F+|n#bwߤ6\1eWUjAs^ݍt14sO]v@QPe(>y+w٬abT{ dH&Ivߎ)->g5לRc}Jٷ'7]*5ߔMTH5T;UG^N:YЊeXr6WXk}"PM~{)$ӱUeĥvP5Ȗ0rDd}!VwI2;dM>עDƶ S{*$7rWUG=tMi3"эorsNv}l]'qr$tC߻6Θ#NͅqȂ b n,[tԮeǏ?_˯`["+R(x~xNiM4EЅA\YI@΋^e/{^>3!'_cC{AA/׺2ltORjв oا}%9 Pۤ횙ͬ"vW#KJ`SH*qϯv0iڍ`58c 3'&]w\Yj "-S,ރɨ RJHzVe'MF ()m^.{:GNͦR,fv[;%U+siQwvvɎ3 3fmOw2yI;ѱkS *Hnmm[LAWZx=FH♉[vbn̕k1B,Iub,eK ÍPIf:9n8aqY5!f QESn#+zgtʼoZ/>PsVw-@EH Կ)fnN t_N;7?n;i:"KCDyDs+i)}'i[ۍ8sD30 %ppuzK`uo㗐t0$7z*U=~ x_y}Znv"^e/{^xKϯ~.S G.hͽw_`=[oSe{iv| ][9]$ޙ=r'7:2ws^vጎ RN*84* [&zip|fɋ֟o*͙[{(#\2_dv#8qqq9BȞHSGA_,כb dcOo s{0{V~d0Z='=/aZƓ;Y>ٽ!= v.y0fwm&d,U>*l8FH.ko{T7h crMv8 !Sq&DiH-Y>[; e/$?ɩgҳ@E-0r+J*s@xTs9kP#1>ns{9?ف} 'MPo6$G)n,zXDVfaG]ۋ$磝1OEa'y7}-*a\Pȋ֯Y=|;/Д l98d?UحAh~~gW6u璋D' zTvIH0sBXhH@#LiO6"RVx7ǒ&$m*Lt`iYjcƽ%l^nlփO׃ G#;%]1m|hy!čc Kmm'=UBpyzؑIhO-{Fr}H?X<UI $  )vkv]JW:g1^hMӜ.LQuf؂'ybъd>gE GW'X2]܅NJ 1nA-@.tcZ2 hė' Y%YۧsCَϗAVbEv+ 3k!M!5o%&,x"HmLt e}6 sBF-os/Q,,^"uM &l}/_IcKyoЅWJ RohH2{ v' DyWɵv%AUi± OA ?CcO?/zsaVa}- eyGz7șo޽e/{^e/3*}l(\uzo{z/4 6׌ǻ]y7p99^;a92̧2Lh?:]|G<:`^&.EKF35g^S?w"2+ě,/1vHS IHI?2 .R 29e" ʌLLAt6B&g @r=0Ecñ\e x}uX:gm{pR2AqF&L~fm`VUmOQqנ`l!bX̳ty@nׁLGc,Ҋ*nYAQEڵ`@zwBė ܁+IEr:4Dr䮎MVR4Ags{z  89~/6Qr r&;*oHY$]= vcÑ >!, O;@TdαH}K!A]|?]H%rt;u\x~RH|hw~:-U#^ɪ1`dlPr͘1Ƥ>NK-zyރaٴxƲ%P=t~=1m8xxظT&fK5X!n}HDQg+ Oe>yR t4xE$o?ɛb-5a"~xKY6] SmeVnl@lvm8է3*T;wsBo/Cv cwsR5`)"WoMDȤ) tg <_gvc n^eLh7^u@Y5w+uIod-f-I86.rw,&TI[ ( a/p\T- 傤OX2rgg=( 'ZrÜ%˹ԁ v 櫍6 @6BJ R sΙ<)sݼS{ IAȈ h:N1#tPT7jN%-Y-Gz h@o( @_ e_[t&aIrb`kU{ōF-@c;qbNW TnqfP߳I+YeJg#7ctzPv!3ga!ǰ6+/e>k܇[2ZޞAĺQDnjۋq+y%4# =_U?%pAkyymݓ觪ge/{^x?_MϺ`QQ~|&Ư{p=E-R]ȍ_?9U2y(]{ 2f20#m#ɝ$ j9!ez'Wұ9LEnyڎ,Q+8vrERMP6B'{V+T+/ڏhpryۗ:2{ (@2[cϙ cۥ`J r7AiX@GJ|z^e؍םZZF9 _<u"ä-, x_ٕF7y' VNB^e/{^>o KM_I+A Ҡ{K:v)%ɁGyY+l6ϛO]G֛x ]cvoCMyv% @gtv3~f9_ɿeX=\c2o~ bvQRLd{sץc#gRdu7݌cgDD@3v DPx#.XI8ӆWJ}0wQ:ucX@Z2X*lĚx[F'^7X#^ @NoL;T>ŭaRЄ FocA華_a?`8oW/aP=taϰTPfPI)=$SA;qYcX6Lܵ3c:"wJIe Oee JL a%b)MΚECcea*26sniu}V?!e?_?1Ոx% 6d zazj/o=YYC_ƞSCjڝe/{^);UnQ^%W\\g6m>ޣ 7#dqhe[ KS]la)+˛Ė4 .=I֢ ~e5tv^<Ǔ G Ғ`2sRȉ23wW0̫47 31؝L`)(/pk.)۱Q;>6g/-> 2[>qV V VC x{S!S-X iKxPYd6 ܲbd;rM"'?X p햅}ݨtք7F_:(ZcEv8u”$ZM =G ˘᝙q7dݳ5Tcr@Z/7¤M, #֙=Bc;PL^Ļ&ObjS(:]cFu>͂N 8: rQlFfLt}\G.ǔ` z^_ 78ML $ۂꥠڒ<$D}y.H*sN{fTIż2F-j#U^_߁/~ 4}ZzxŪ%lxlH1" aioÃ1S7r_^SE90(~_|_8!#Р5Dt5rяK{[kS7Uj-(JD䔚fAc9TeJy }xgg*s:o VxC35"q:L=d56qO҃ y*̫^W_ݽavrg-sh{g Wgs^7=ceM?e.;e/{^11oA24=FabqXbμ!XJvWַ^󹶿'-GLOZF{k 12ag0OEBfƆ j/>)ԫ xf8!+'3$:H2$w䐔g"3CPAnc{W$Mt}OYx[GohgY7ksawxdr!rr!f+;,qYzL+sLXoJE6# g(He` PeQ3k l`Qp}1 J]b,(-0-2~@Al*M^s呻sO[D!}Q9T0YsKQU\x7_,S̛wd>lϖ# @['RUwP,$X<sÌdo x; N݀ssexөm9V+7R[|G}±ze1$u֒|$O?IB+^Ay?P-{MP*]"ݽ~)ʅjzo9vfNEtA5Yŵsx-M-xli䛯;Y1HV,0yw*0`q'%22*ɧ_-LgցOOFSo XUh51Wyo %I _׀flxv Czy{gF)r/a~+-9+{i^ȼ2AXYə>qam~ye/{^e^Ti7T>"8e|T<@*cJ:_pM`v>G؃_,UN#T *;qH 5Ltl%3z|*l<aCYԤ_ K"wxPTɹ<#9?~BuV~""RJ"ʞw ɒ7f,6 vpjiV몆0C4n᨟F> OېnC.Ulݬ~391!~TXz6֞,%qۺ,VYtjHQ1IBw@8N8n Ѳ}. !,쐒޷{os Rw 󅊿WHB)Fĺy4~T vcnK3CR:r{&жf| -9?ݕ RFIN 3 H2߁%]3a@uʉӃ ls|lL3;6 >BM΋9}k̖sȠLj|Yc/&] 7 r>To[GHp%SoA~.{5EbON|%`Y$f|ۦQn2gT[c^ؕ!l K×WN?N6&I]c~=<#['&ғ]6mVo)VxP)Ўu/mrJ[>TR^ p}[ΈwpoM5$2O>yi5IWa+\u7Šϵ T9^W´9mí(+\sK/nzdly ^e/{O0/7xPчV/H[y b}F v0VyOK߃^NZl5-WY~ "n-5.t^\Y9x3%I9 ?ݮ>Dz3Ws >|֊e[_4I973Ae/{^e/{V~襁zW5/iǻÓnz7Q[FוIA7!x@F@TsA{zq5&<ˌuw[0e+)c'42Z&1ϭcHzcx d;+瑐 @\e mI@,b/Z:5L"zCYֽq|KZPkǣfU%9(8(/sWMRױnD nbD?+жa.܍ ׇvXm,i$)N5c\``F׃:B׹E|K*k|rKqmXkYTz<K.HNEhݓc`> ;U]Lf -4 ΋H.qxg[ ycK;` *0ߘڶysBS Iq*4a e&Wġ'ÔY{Ώ;*Xar`H ?c)d<&?h}S&_TI-=jG rL뮦\ABcQԍCQ` &WޘO.vɅv=Mray.Nݶ ?)/VB:ɼ9{!`քA? _wvzl!ʈp nshϝwE]͇^d8Ơ1/x7xJ߳cA*DHg j"fy%%ZD$cTҕc5r%4|~9u R1@_7%WWs;ؽe/{^l*l}yr%lm6|^݈˚ʀ,|aJV8 5:<yxʒaߙsl鐥X㯀!xhS.@p^ 0ooy, M OZg6qa0j="?]<3P_;C1dꂬ.&Qئt/3Ŷ5oIE0T.>,bk<Ɋ.}?&xة\c=;Kkkm>sk3[_V$Vͥ$D<#? t7"?k_C +)W8|VJ0}e`sd^--~ၚ# 2ϓ&Ҭ~LjaCjǺYrX"+I9+5Vk6kI-n9 pX{wmb%VgxKxHEpnZm'. 1ܰe]zE$FLÒٻm1e/{^O^E?TϦ]WL'kڔo>áXc*[<ίȩMonsUO߽dyNvP]@uen+@ b8Tϻ*K-9@qO|.N` ꟊ2k$ .u*#<}fIIBHBgw8%NN)fc݇19 MRm]BeZ_{X8vi^# ~-c55" \Y ,vy-)g*O&Ue=zlw( QMxBĜ&[Ƭ{oɅAlY )!=vaBXF*Z |'n/ujM(UP!"B"Ӝ ^'ף8I  ^rB^F2>=],r _PJԿKq<&~ۜd`DϘ7ݜW(+D͆dt,1Tg> K} R(:x 串ka7N*ǚ@(̦ nޱBdVUaIFg"Wu. ē/Χ|\<Q3 1sF K܏u7>e[V\Ӫ.{R)_C\44grar0ի~% V; .v%ߦNڿIHJ2Jw.Mϯ7ş,7M-X.ݽ83 zQ+_Ku22!HWg \nDPVbLﺦJ_1"uA*kgk_GwUuYG R Y9#Mzh0Ǐeչ9ΣzbBD D냺?3|RMK7c#rZQĸLޣߧwF:u5|:V7>ly.',)LEno02oVOY.#)8]ڦF=-Ws_j_gzle/{^.i׷\gm(!P:3{3QmKm?6}V3_~[Y\xcnh^VVjbzY.mWf,1ޏdo0y்ƌ}ΝsfJ0`߿ 03SD JAEg ݈&ebRfln2C&L ׃~>WJ#e9"M~<8;J=C#T̰ X+ceո䤿 9HD(8#A PWtuq5Xz@LK\j}(ݒJ$r 0&t3t]`,l&jtaȝ=XkcswlY[Z2v<*N;<~TI~MPcSJZP7{󬃄2Ơf iw$jDMx#<&J&?yt mRrus˵rXd/-sԕ^e/{^~BeDoKS9vIЀ |'>{='o`y;6 t@K ؽvEЃb?Yٱ0x]>pX%GUGՕ9"T"@ɞ7 MD" cXe!|_)e_Dc*QRY Q6bʬÄpmHBԱ!Lw=sg> Qsm}Sֽt^b5;WIkRTȇ ̦9W7 )~%My>m,2S􄄥 Vc]cc&`,fwO^~z /E] vK݈]"MPa~d/x,q-oQ*h\꘲>I=۽o9r"oH2[6sT4흟e %%w?Z66"K$e1k=Gze[|0'e["Yr9iAr,,@U[R`$05ʩݜZ8tLR@87~E{vs(@Hﴎ̺)W@<$^dU|mnm%߀G2zG,Ec- w+ ?[ ]gQ,6.㹋!ޯ7&ǜ;/4À`,~[Ukp$[y<^ͭR152!U2k[ԭ*{ւҧ(+z"&$cI^#W7%oGuf^e]oZb!&-}m7؞dImX40bэ*g3>AoLfc"`􋲽߫4^e/{^G)?S//~GΕno Y j̯~CEY|dUxE'&\%X-39qTNpW9yٰqr2}r>ݱ{2Y6ީ o_«$e=//\ދS_/lry8\1) )K[*w? L|ٶXdlJU_0n%e"&G?0t)[lbdS 'aOG9/n)7G 4) ̀zr* ܌k3`Ql*K)c)7u$q!x-ߝJD)o=QD@K*}#~f8`.^\ OIsW8|C6 oa G &WP<=KSXV2bpe zLFƚK!evBA.@@d{$(A$@J#t Rgg *ljS>d HS<*UAzC,oN< 5V0p:U*aAdn@o .I`>7Anpw #(W[C>ضt{oٟ8ƴf ^<3/!oi >ֻlEIN%!k׮%&v a OH,)|ocvN즡 u瘯 7xx]u{vNAMQ,ItC|%'2l?,_y0R%K(py͈,>iCͿUf,}(O~ה |߽AxupwKh#W^?3W"~5ϥWy.q&z\(J2}Gi3^kk}9oLLJ>f^ƥ^dY{^e/{OL$f/\57¢evT}1`#ľ=WKC81e@<Ă _M~5?Ǻܚ`NN7paY|pou^ۃQ@BʗP%S=&{k?,OZƗ]_7K~X* 8.yb+̨\LTl5PEo{; Xlw庒#,zeKYw[`_ 84bv 86PB6굝RA } yͫL:܁>_<6dj2@srF& _B?C:;X_  W|"闿b"4U(@wY =''[9BD$ɓY8Ǫ:EIsZq}}Q_ ӟGg^Ar"y]eԲTG ǃSٸc[Wud}v[A𒕽i!<}}k{z꾟Eh 6j?o/^fv>.ˋ7$se/{^e/x=?!x~f-qvVWyU{I\ay =]ڱpT$5Nƪev~Q];yw/7ɚ.'rw 2b}c`>h%@2]\P,o<|[@v=I.'3gެ>XBd*"I;rbMQdA#|Tt1F&A*辫Ow|OPfĊ@1)VSUpƓdF>)$𬛾'*,B:cT}Q S2/W2IMY ԏ F\<#5&J9&C  Fc콻x1c~ Uc1WpV]67o97^@uKeAdc)U[9sC^4)wW_Q{R6`Nm"9ӜRhL" Tej JNARfr8W w漎),A!BCBu*Ix6ͅ)gpfqg8v=Zo>l\WƬ%&(dYi0f(c(wU%EG̙)>jܕ+| WB!~ Kh,S.{x!_f: ߊ!_k4^&P7% ט׿ ^dIo0oM// :ށ>tw_0?$_mM @:-'0ntqe}D\8 yQ$stݍh"RhN<|6$`+̿ U:fo9e9'i|N1w4aF#|=;ߝ@@&\; H*sNvih~ߥ*mwi74ephl\+ݜ@-? ~19sz+s1e/{^"Fܫ4$Gb;UrN yz/I. sQbfhIB0j^n.vj2\9@}h׌Uu:`w ^^~IN*Oѳ=cBx gj%_u,ǐpM}6(fw ȋ,e/{^e/{˰xRܿ5.<$o_g WE6S$ Ab3cT23Bԏ=^W*;n3bi !oH(؇\W"1篝BZ]P"HDgh)zGSTVfh,!ض_2]Vp@w 0]ӔCO YFNUUv8(b& ] js!sSÒD2%JLq޸ $jKstt, MN2Iؤ7Ora]6*^~\UNjդU@`ߏ^jHNX}6HTrId6t */<_{#:ɛvIw;'(Κ9l/M1*f'{o\!N:Ub}s2UyNKJI*5ӹR943V.z5ª pC3=3AYCʘ[[m\ܒ|l\|ߙj5O;dҽl W&x_BƇ\_*؃:$t1ډ.!bC8t= Rrv^q+uMvqf]xk!)H E/^79Ƽx57"d,-J\|'?h*.U D1_|evv7|;vtlkկ~q7 z $O~ve/{^e/v[6S֜WyJ<8ˠnE5p]\ͳ{Ys,8V/ԭ oa}Kn xIY&k$0|:8>>6y?'[y+o~줬CR訒塃` V6:'@((ۺ (:XDYvhj#󙚲@+a~qK ǜC>tl/cDxη4>޼f%pv&s8'( + PfZ '?Bҩ% Un.!xI=D+-mq&XZ7$2k%Iv=nfutcC \Q@D? itU 77s7{3+;̛qs?vΉ05;eydJgv/8j8'.ON^13X.6X`2u cdS`~&c}sMyb>\ 1ft o # RGs.F7pY̗y锭+kG dxz\۴^kpek~.}}Kjv&λ"{݌+JU} %.|2YkBOYDϑ+\MOv('UD$>B:yo\:C*dXW8%rA3mR i\}_q?MCc~<0):6aۦԶ)8 aT=-.F2z?Eo?l05%awXO_7o{[.~uNo> %iUV%XJ}WzC r~[U3},g9YreBoꆽsEvNcpdd'klY3g,I$D; w$v37߱q')<3GF3(=@0&MH2wPf 7KAJ~M;U;]Ȩ'V2<۵o,#9A%0jmz@iQ{r_<$zhtvO)Q)T(55w$jAEIURuP;;i&maZdX|`ֵp)v$֎@-u/šu4$d`˴x/EuMjI&pue6>NXE.|G[҆ο2׳8$B \^Nc*_'M}mq0۳7XoU͕2J+0Ϯ/+ /X%ot›\QS=lMo\/eR%+8 ⴛQ #cq]J#($%X^hmв-m>w/),{ޮޗX<vdSyFw)NTIHazۢ,䘧;U@Via CC`+6P*1=ȊE*GU[?(r`^FP (!6p%7#0:ޕ߷yv۰bqI/^u "?[pN!RQ?.RԲr>,qcLucߌkـ/%/]]8v p['}`5feޕSr9fX<:ިCFa-v};Q76ִ34*6ɵ:-!þsqUW6q,~頕jѰAi@ܙ99dx_URGA㚄 )gXo:^yyl d"}2fŃ{_{BAEǁy3:;5M;2-mh^ֈSO>6ߵ/ ;F%{/pLw!{Ot8H\S_=\1pZ-/ ?o q#=~߁韾 )E}TL}He UqQ5`2fB F>bT^7Q_țqaߣϐ?³A_Hʼny'n=,0(MëI̯*vfg )K6g9Yr,gr?U68IWP-]vL=L$o ˯q:fovɼD8`uc0s* (^Y,wK8uo\Xtށ ASˡ]*XTwl?HQOEY@orݿc+ m3 JF4RDxZmv.*Yn` v4:{rj |V;c1u!rE <]/ n+KU?o/lgj|XwY3p RGf.՝r=8q*V<['&9dhaI3}(y\@cV]@ hm-YS8yݪ|}R[;W^ק^?3E'奯;Dce`z1rT"2ØT\" ua1ЬM}~;?O)#/W7$ڤ4"8M#ӗ]@zx>yPHwRrӍ&@e"![_5?ӗ[#}.~ W/ RYYa;=MsUTMP? \}Yl jKzyuꏾ;:)sD UkBYϾ. I[N< ;l޻r܆L-/**o)AVKU:}q#;᭚Xѭ2^Gus/URho{XN 3#6ckLUye>1zZG4iR>:)miojɍ+jaB[6rɮٝ+j{f (s{bsvϦa@dmtiXB$SQ*  4-uaݒ\zZhA',6!y@c!2AWX3_C!gȟߐL W_l/Ra#{/ЇoA| ''3Ƿ]~o@̥1z%lε݃rO퍾Zq\W:t$6f_7AӟDH. ҇wVC}^( |]EriɠAKv*-8X+b4/`7Boћ~7/ߥ5dwm^Q&0)k峫S7-*{Hwś Ɵ,g9Yr^Çӧ_=&^\W94GP(*ϞɃ2e^GI~g);;WrǤc'Fix4ADNٱ *?9Jx*s20ȷg_NЦ4)0z/L@AR/tg]@(=ԟ@ }o L+dNJ/K51TC R7NF>u]X \J˪k?3ő(Oyp *O~ #?BSc6 bh^q{A"WD$i;ВNxf lMd34y؇Z< @GP BA?0ޓ$D(Aɻl*?C RpIDL:fGx0Sq'wIH "'cV?ְJ[QuuT} xdd$TE~]0V`w}FDpq:i b.fL(; [^ldr'㽋]KVWeĔ¥g]5fDFq&7=19C.>Ȯy!PSx^՟[wzȔ'~|ϵ>&Zx|_t@ I !!UߝwiӅn^vn(}}Ľr,g9Yy忟 {y1i?8/32T4yKLؤq{ab6؞12"zB 0ͷ<ǽS;Gykפ_ K{7/1י#Zʢ;ݏ{iZB@BXñ@'Pيːo2u~@<t@|6j[ڻaqZ_ae[\nR(cnl+DVy2sm}<{jn%\0 Y[oUql1l wy̺ݴ3*9ztӘ]%c6Ni @rI,{&Zto~S;cq'D6mtAi 4B1=pA!"`!MabFOYmcFoy/KcO mR𢡄6rp ׭y)@yVWcWKV"PIs(|/\\X8sZ:%ϠPJ0'P_B Eǘbu-@W4(cB@q<X1y$ Ͼ3grX6?w =< ozlK븤Q5:{)D,5ĎoKĪuBd;/Ga /߹dbFyf4Kc|_ @6ߏVIJ3{5իu3 rT1Jn"ܿ5eW>GAh8kq& o\1ݨy W0~=,g9Yr} xd[|hz7?)d0c*pEݙ;Έ4X&_"x2v7 ^tQ` wJ5MqB! H (ns9y6r0Y~0Ɩ^Pa-n3M40D͕@ߢmU;yk$. lٍAmohuscE amblm5Ó+Lv,D\o1 o)ϖAq'߱Z}6@1ksv *1!Rd'96ٳ&vkXZD EbR[-J@slܗR)\l5&N*E%!mlRgMB h2O츈-~YwXbE~ Lޞ rN[1=˸ ]#Hrw%ɘ-*m;x;.R?/s堾hg-F-uY?ס'2Se,Y*_rovI>Yr,g9YNPܧ鵠{eK1Tº&]k,әl7^njϓc `zn/=g #_,MJ/9'acYzk7n4 N7XnUEU:6U7 f tgb*#䱭渲H. Kcإtm[n*'bS5.]$7H2񿅻 p bGKQnȝ; rW&IKkr},`}{!xDŽ-CYLB8ؚ|86@,JzgF  )sr u' {8@{W/V9H&,FhU`Β85[ u ғ%5$B!Ak?/$}w-DIP/6Pהai9(翛ky Nc py#Z)${PN,g9Yr,oP~aK?w5W_8ߜ}l`fRvދ[9s0V7jIlnlwQ-07HFƕ>ՙ1 6~|=knc{L(]¬] ,+Rk$cBVꥋkKP+V/S(՚@:AV3A nn(s{QByt^8k{S+uQe]!\?B r]40![ɖ$j}Q$Cwc"|ͽV~$ɶ][&+l+B|ӾOvg:grp,HOtT+ڞм-qe kTǞQ\\qA4d]=@ۼP "8`mZ\Y%LUc@duj`xlS>HcC'{;"fݏ gJ<wz}Q4÷]e4z+U+F1ۀ=Xs%J%CuH= \}fKz/v}ҏ7^jؘ-2ĜXC0=CqK%6Vyw8*{B1i]EUرS\Bĸb/^&[;,l<{侮#o=l7 ³YeZqU;Vh%&d0baCBfULqN Dǐ'd@*MYo۽\V<@sntkԉ^@QxvW֎C%UMC;vMJ6nq܎INWJtS򆻭V+DrʭΝW-$̍W땣sW;n[7 *KGm4h"E9e RHH@0rN]kjFu[ *[ܶ6 :BQH|lR8080m,ۣTɡ(8qn 3v#smPRQ }V~ Tt~Xf=? T@tv6ײס<2KW5&V$Z|t]7ngw 챮51j…T! e{},ƵKBWPP\Z\Y6c|S 䘜yh 2wkCl8o4$m-WGKcXD䲑F;Э6sMg4:PE|!=ntT={ ͺWtlHr` 2,"WzT{ 6M0gĔe3ŗ;~?2tRDG;W2 r;qo DXD!z!P}}s7vkL%i1ZRJ3b(zKiI'Fs#s}v ut5}lbw|4LD-ib"Li&{!N=~}W1i~?ދtUnvm@D /:+},g9Yr y"Bov[ tD0|Tл>;XHw:Z~?p̧_<_r/MwwûJzrYr,g9Y޷ Dj^Ft[L~;[/o9"d%m6D-Z}GJȎ'ABqdܑΫIdgMYOifSw~wkߠdIqWیU˰EJzsWd#)Wy_V(gj^\2m+$=VZe:<5`o֨eSXNmlk^܌HlSYSA%EMf YTur~dCg,K;cmdQrgDz(O c8wx;zow52E+Y\ @KC\,*P9lϴ2;3_ ^k'8V&p YzII:[Wvz|>c;|>c*A ǸޑE &\/jln?c*yZ׫Yp t-k[zoK좡^ Goʀvy]ٮzVNiH|ɗpDu%I:ȹ/.X%jR* GѡO!KR~ݜw?~M0y o-Qc&CKsDpR"|mؼ+ `' ^Է$jwFrOys:MN d2E *K{_KKȧYr,g9Yr?dߖ!;|| ֒Twd~v!j?jn୵XG^19&H=!!J9CYp&F笭ܵ62;:!`0o#۔; Me8 аuXPegT0U jUnr״>ϠЊUZ@9++?yV=Wb+u܃\zx,z1'n^`&cL dIBz"Y7;M^"RQT0R*19z}c6F!++;JzMw{-فNس<7*@!-0U EX^AljD.(cǨ's }6IQ)fb2Љ3t+Qrn)dPVP&#yG<$KF̒2Uμޥ]s|:pؘ ._m>+A;kcv/ݎBm{-.$X*_Yά`3W⒤ʓfxz?XT Yg'q*S} c]0?e@5~Xd6̼?M`bSXRr#,m;8 $vJ 4Wޛ{`Z5(q΁;_Fkm:@[y/QyCABBe%D#ֵD< 1fTۛ NRm tYߺ~ߒ0!&Ә,_}kaq n-k5Ԝ$Wcl&(W]%)ɚ5(,㳶g @gf硏^=HdXs|gA}&9.!y$@q3zDY/ɏng09l1߼ݴ<*M~ úU'{_㶼co_yS'},g9Yr-'K*_m#פ{y3٥ux[u; %%Y_csuxv߉e'Ol׍eT~ 1*PܘfޡzqM`$nRNޜ ^ŶvLB풇w}J&)g]wW}[S.@T_! nJdà.ma=wP<$g! _QS2TQ|gU^*2PQ68꿇L}y6TwMm*Xswe{a٣\1{ Wlu2r;ziEi4i?{n>1fd yr}+]%:SuyOol屾0u >z˦`aXPf1G6z1@ -Vc'ƔgwUf^x^K@ PYqNpZ($x3)u/+7SM<y%8kwA3  $q^aas4/v80J ibغ֤ѾN0jeqsD:.yq]21_c'А 垁H'r2-@ y~[%ɝPVmRsUheR2rn8I sjlkk2/#siEw-j!HLc>K<(f9gL@˞N zGfUN}>.'nC}^cmׇ㹬QO`Is=4s++pQ7FMeo# >T5'J5I"_ɨQ)bb{pf{Gm?}+5vط[X[`dG$%( ~0:aHX! ЎEÏ\-.Yr,g9Y >7iog&09 oM{w6:{, @o$ēs:8/m3Zx}mXn㣞>+\ֹٝf_u_  eU^>H*kvHKP2VRٍ]dyGT>{F3\pxv;;(߷;P~}Y!IYEEK >gE4}~L4q, ;;hD~H݈qY#C]z';FBT>UЩN80 X. ,6O B[mL5`$sYoozE!IBLW$|K=/hX;/mRZAfQ7nټděAV9qh?.%<yT0nA|/MrUGNEۆ #,8 &KT=.-'-󹖺ǺTi>y v@npt`xKL~ r~{)R&}b:-F=yhCL`KX+ÂKȪpn'ae/)'5ly2)E@Hr~34Hh/c%GK rO%QR s<5&@Ԯ})Ql҆lSMQn c=pdS>J/V ȎuO.lr#5G]۽;Ab< }M>z]Wc^-qxw]W> ~;]-=,g9Yr,?Z9?[P/fy9ZxǶͷ ߬*iGPzx:kQDmx̌RR4~ԁGC2I`{eu/anjn؀y6ft2iM/oxMtI&(* knI@%!Y e霕2˓A%2,2&|:0bx!c1\\ѺVqOE4{m%&WZjny2ބ~Y2[`{a8yAR%/e N'T >W&9s : ]81ķD Tֱ\M4-P,. n &eU z&?׺F Ж'|ƒX !80Y2&% ;s%3bxeL{l0dHkSp@2MA?xa\v?3eu'tpK{d;._{5KwΙm(ϥ~g'G(%O=%X4Ǐ®iOO^JyN +ScR$|>{ѝX%!"MVNYr,g9YU>[fy4aq'){; 8`GF@Lu#L:;S2xcՆWd6$#ӷ:M|"EY~3U`&^@\ ncc@o?SBH}Den,P,k=o~p햔G)f2 z DJU\WC˼4 \*`8{UWr /m{rX.X!Xs,`y@Q DTMhOH{u I`3MР17V?K;>&^m1enl8i 5zN"wF:2?#,8?$VrI@V9gbI#hL@Y]H7lemVv%k3 N@&~azt`KlZ|NU+e&X4(YKZ)[RFo~ xtmVį0MhU6֞aꯓ<N*O~Uv&N_R&˔V\[`!>i˫7j1et~^Lfr6ăءA=t@"q9(%XP-,nZt2,uɕ胧 N0;In,kN{봞hP,Nz%YSu*K!' =hHƶq Q;&@a,&ѩ?cI9 +Dw8mK0e(nm=!A3>&{\O3Zԧ[vo7*ͱ+<125L&ƽ^ɫ 4!={ýtU6=]5!_L0Tſ8g9Yr,gy @ot%]zy GҖi-O Je{ >߹[qF7k L~'ƣރl" pb5i^F 0 /N=M@E=5&%ίQހg iR RD) ջ_B 2I RИu/iZ蟳,Փax~ǍCPty)qu3Ԣ ?o! <A~Kcʬ$IJ<Jۘ( x)A;}{o|'M1vz;ԙ74y"a\ iR%%!8Buvc~R;;^@Xpigvpua'S.&#~ih L6t?0JIn^<\Y%8 2EpSU@ުA}@U">[[焈fqMbB1fk,tNlAp'&A꺩p][1ɯN%$0$ydDO-dbL'Qa'.Y238Z8deyZ&I i~ሗ$x?ޡ|,Ms!r:~q1B^[dDxAЮ2do9$BI/;uR`lњ  ll9|?[HSE9#Ihy&}<ŚGyc@}ʹAmc:vV gD+c,! &Mx}gRD$`zE-i 06~`F:^"#>~d'#Κ&TU DAn8b-i48f  liX˲ }nAN,O'tl,Mä/y${p'Ϻ[#S}{VIohi-XZʰ4?Η{gfrGy-Lpbjy؜6;+{I#zIg7K =%r,g9Y +')?uFۖE_f ,o~(^G7u+g|\~M9پZgX[ʁ~0{x.эd 4vQYwO K|mI I=w5a UY $ @:Z'4sEzTV$,()@&*zP' ҤG'TPTKݨbRlr!ԺVէ'M5[nW%MUbIO)w kL K`7\7U [oqk7F9hDf`"wS1nϒI~t/R` M> J6A!NJ6V|ga)So`j۠z;v צiYefE q)'$`$[KP%tֆ]urdGOp^&t&H#>x1ѱK=kR􏧑 QA6n"qDnaWƫ難0dEI}Ig.utJT_xW('.E%|Y7n<-A\6c5@{'vh*)emoKwiׯp߻1!X;b,ǯUܼIm774wrƲ )L#h*I~|NA '[ R췛wvhcarmҶ}~nM9Q{G]q>icqKV2J)IEKW.psHn|7krG)%&5MDՆ[P?IC\F\[&o;qswiϑ|L,g9YrD_i;/cE4˽x92_೓ΆKj|}vL9lJnv|vؖ @ {•ݶDw|ʮIi @)ڜ$pu'﵍kcn%r#h.RzQƞGYSw9R@XrRM +h-zPDZˣ3T H_BDҔhi8\ۜmʛW`i޻URe=GQ]H.e{፥&LacrEcIٟr Jyc\W}n;a<%in~@)U7]LI,QMByku*nsSv\V? I1پ aum_7Sʫ6o)[Fuإ˜[\taȵ%{y% ɱ՞ݿ/3EU_p XU-rR`me),O1lق_ftWeA`7۠?dȕ!L,R}rwqJƅڸ~z0,c\oA Q&w62CѯZ(,3č P-h:l! b},'?/i;DܹwR"Yc+x &Ʌ+۵`xAS ;nF?qLx5Y>G~ݳ'ĺ`S{,^xئң$HߑHq2ҝC*Yr,g9YS,/y!O?z|{y)S_:I4CݭSM_ ƙF N"G o~[~ԎrU>qޛ;Oq%D99RT (e[2G >W9aR͒!|mʨ.TX dmnx#*k . +? ~,ɉouƷ߳k$ $M7E@y2Mh?ʛcloƀ3$aͧp&ʟw}}9Aү,M!5QݧHViq2.F:ɾ>Fe1\򯓝Mk qj"{<:%; = 1ld+g69<[e{x)2)q_=/C_wͳε?=m,OK%>.i#g D׎c\ISX@R "M\)} ᤠ,Îy]cp`Tp&VYu+f6>i#MYsKp'H6;9;LBUmcL8ι!LPL3chy.IjSCR.m?lc$[v9}Lueu HcIDVٷx­4ì~KAͭț!&eۊ\PKF 2yeKf?hj:;0Ýi@=nvgF)yTn~1}aa翽W#plW Zck=gv˭߾t8\ʢT=or7(wskMzU#އ|S,g9Yr,r2?-j '!u~9{F}:Q|m^F_}n`JACeKWf6g;j,%czv۱p Hz- R!nHD!I(E{KJ^'zRTҼc3U}3H?b^x3<@'-|~+򱱘T"]=.))=VomU܁`~ڌ?_vɡ{isiHIszgOdغCRYҤ(mHm74nDv?dME553oK-EMxm2VWf;>$mRRQ\Tk mS&@nwƝl|y-.Q4݃k+'[I%ny:`ֺwK^;[E܁U붐*SFU¼J'HIwIyTo9xF=ozl 2vp=R(Gs+ [D4,uSB6'qO(ȨE@Ԕtz+M R `[I"O/6^݄'z/c1Ig8 3xOݰ73[񒽙+]]Fh9pC 5,Vzv~H&=QeFF.Q  @=}fƃF39 7ֵ2,X_36n.ƗzjBM!"]T:$1 i6yE&9Lψβ?N!w |`wM$$+w6u3w^/ez l{vdAzË( 9ٷ$_ q3?S56F[ٝ,g9Yr,SNﯦذwO^^eiᷯ&n{yX sw#/ij{L#'kn /\4oIw[$nR1sz3JQ7i!ώ [vIl7.A![g1 ]ce4ҢzjcWtjyvॲ _kg*@^=ϋtQ sHNv%4Ϛ+To{:sTʴgb(,*a^"ԝʢe@!xAj$jRmPb ԮR}nlb'o}DR~YaW tIMښ``MbKP/TVֱI@_%2z/qK<Cj%,D$ycã$p{T#WدD*fLVYo [W)<mĺlVO}݀_NJI5k򇬝g[Au=r`{Y_gQ^̿-bWT[\䡬,0#DpH*M[9g`]cGy d<]FeFjCw=@;@rr;-d @8A@n bƛgHRt7˕ū[oJKOj!̒&mXOzv)]=2e"\\œټᙠ $z$5D ^w.}-.G.M2Z+c%j q佮?#lޚMnf0 @8{GMG̼e7i^j> 1S0KZ{m{7/D.oww,g9Yr xn:X }g}&W{_6c܎r``7h2A YɣNr'Cط1t*P}W[$S:.o*k#((N^Fo/aq7 L&NcvQ.Vpo ziU ]Si#u#(n>ഀңS$:??BX`5P?U!yz_puS E,~wٺq=2eO]RH ޣ,QVMRikpf"es5 ,2GHyHMdlO^ԓD#@q"ƈ+q6*N"cE3ٓe1YTyJx`IcW6Eк˯ֈ&ks [(o*SQԲc&kh64If(~[uѻȆ%.@89>M!K'|VU{Z,Y[RLjgc`uSg&-iaD`m8-v>0Mt1@[p v,wGɌoʓGnՐ0U ޻RȌq^x(=%Uw)Crά] mXz,&3Z%˦bk✂$[8$km.Gwʃ󞴛{kq<³n&Z}{j߻/Pc~YʗY? _{Y_\Dr,g9Yubt_$4TDEIp@6=ű_R7B @2G6 ,q>"ikjAs#]otsy6c"9~og{i&XvW 1REJ_\ٲ^Y#/cxߵ@jA(8=f͑\H^{=,\ĩ1_{RbJk׫2+'-(ge2كɕ **H.o WWHY3Jen'(P*#[%I`2Ϭ :\[+ݍ&}Ɖ1cٖ#ug[V.)̨j9U!s fJکSv=_Q~x絠 NJ <3,+zjCHfF*.2\AX5g y\"PѦjPza.ycXn_jݬәM]b*I8U0[;8=B;$pŘ_(brZhǽdK3c;m{Ȧ <г>ʉuҀxg]˔H˱~Y?;ZPJ9蝨1[qOt;'j)*dvҪG_jcbL)~d < {x nzO,Iez~،)\^-S9// UdGc{2A mn q^)Fzƭy/=)hk4CQsVcdf޷ʞGQmd#cqoGfh"oMQnm>,9_-S-00;d{Gqo~ O8>u|Lxг >t蔇/c,j7+IͣJQ|+]JWҕt+]Jxktey.LJd7V,yx|6A|g>}xбE2,mu^HIll7טR*.5\ziDȤ<ǜArؤ[Hk/Ra7%J*.>Iwc23D@f!5}o6Yt*w"6I_km|PuJO0"0Fo囁&._D&\E{띴20ݘ fTޣJfsWV0@ㅾ,K&;CZ.;$l]XT]ҀT Fg]vUdpi|U7t0=tz'&ӮV&dIEZB)H#+Oq0 G(tɅB| (0D؀  @?Iav#h80.V47,Y=i!2y׽/դ&t6_S`]VkI`J֖mM9 E`wP~*B)y-7y"cuJ#qSށ ]}@" :l~JI0)]83KnrΕQ-@ny P } $Dbj<Hf%qs, y۰qU$4{c\G{Ze,a}}Z8.'kY>va0g-޴{O2e""'| €/6] r>ifjJ:`o;rp*r~^:(rR]b 0割(}ϻU}/3Y.+]JWҕt+J=~w@~n\_A[ Aϱo=>6Vd$6KH~v| tKcJ"7˟hPmV!2@oZG:3g -Elo&q>nAcWlCƌh޶vbZ.Z E+"MecKiwu˟Ie۸绱E%E{{=4NRv3 Dj@w2V yW]S1 s_7iT>J~^SJͻo81! !Cc49v兘4EQC/U ֈ6e@ar>Zpqy[=\F:#;|36y8 ۜcΙ^=*O,f(~3*8FQ|ޞ͆@ZPA> M!N S6V>*x}Ʒ[_OkwdM-?| @ HdHh*1%T6b$%W,m*-Pv~AG }K`q)is0oMl`.g?f }IWœp\{w?+IYϗ뱽)Mϙ**")Ʈ331}]}UIuuvے#yXc6 42: '>fawĿH~מw@+]JWҕt+}_ﰫ/W}>~Uuvbզ G gA8T wdV/@~W}!Okd6SF# ɭ'`YeNrJ/j%CU6{ ,. l|ȼ?Sg 7QαB!O0qjRͣ$nټޏטV4*iLI棱]jf.D!w1ocjV_*\i0wZM]D\u5onaƞRfb>?[6nd &]ހzALdjKY'Qu.:;Ɠ08SKN>8Ϗ'ϫyxe.++V^mg?x (|*Ӯ. )拒~{sN(|c2%&[ҩ%"zP t_*,Cs@n:|{H_̻xͺ5[i RDjrxNcۘ=YCIc<9XY,Ȟ<(eb֞Yn3>0%Ta >C=ѶAc}.0f[iײT:Ek9 &4c:Ѽj~`.>=KT]綩=Ͷo)%!!~'*{dڢ~W U ._݁ڪV-MuS Ý? A뼗h Sjb3Ck4D{dǺI/4sy h11Bq@u- wߑUFBJgJ ReNBc~ [NXR@喏~q'Ε/݋s2&FGGw;^^sWҕt+]JWtSի?잼]l:-1 K%}~+xPoќVLlx2}&Es=w@z14yrd$S 24Ȭm>baԙ:ChlύfaeƸf` >R-.5ӛuw"~_;yq@׊Ҽԁ/e&:ވA4~>Dt7U-Dˀ#u&,0U5_Dt'eIү /l`='&x宅 +piL &IZ7/,Rማ*ʷA'PrDGg0A9KDDrQ9݂sC#q/FknF &G#|#KG6 s#Rch]XY'3}kb~_*ݸg}n*Ow0SΡevaaIƍ>:քg(>%e3حO)o'G~zbv?-g~w_JWҕt+]Lq)3H|,lpdʏpP\;^v*o 6r6ޣ{%i!</)._s+O/z.˻L+9&GOs5v7u 5K+6x]KʔD"Kǩ7Ay T24K2(jQKxŠj39w&yw3fcʙJk\V .C~Jt|~W0`NM^NAsRrD|8xϱVLB]ޣFͪZ|h5A/7́84a 6޲ A"x%M8ЬK3y|p.Bb_eB9TbhkB(w[ ;;,ұ:dgnxr8Ņ~Jwgu#_sA n`@֪˼`{/nރ޹jޓYo$\/!@XaA}Uxw7cN ѩWX8: ^|x]?@O}1Wy?iͯwU+yt~z$>>ߒsv_JWҕt+]x8S}*wԕ~m}n#m z!M%䚗xsmp o8gn*F/Nj޵<{.4@oeRs+ nSl=' ik+Td:zՃx,yzfx ( 5]WpCZ*z?\^HS 5(!K{ (<$ا^yhqV6fR; uaG$چ#Lt+=P}Ez'7fm^6Rbg%cˋ b $NA|'rg_ys ޒp?@C.}=~;XYA} &7 ?*}qx.FrG8gmҷ}@=>C6}>A*l}Q6J*'u6W@RY0WK}covƙ坙/nV,hֵݻ.:oa_l+{`{x2GvvݶUQs>uTu& ?L*`AS: /{}:My;?3C_t+]JWҕ?]ˇpzEM폧^޷̧Oe{&dR>"+ 1̘NLr\r3{Z"M"uw`#x)״o䪑+tD6XXKy;"c'j})$ƥH9d6߃pR r١^~-,y`֞JLK_xU"PC8 iS_cc쮊#qTR\źuw%u,6Km zV,]G Tgub1g4J平'+˦C?:p?q>:WBTh#w`1ۯuG*%ɶ|[JWҕt+]JWti~YxTmw ,O~9?@*ʍ?4.UOk@qHh pځb`\`Mͣt{܁*}jE$A'itua O_ꍘIdq,v&σ:q#7|V"LS`w]_"߫iJmbzB Si2v/H*D5).a >RI8(5ff7 pk&9>. %!0Dj&Rqg8Ζ- DlΚz;vm"i>D26p^+%؄$Xw,gNuhC6𝚀^s%cӻy3W!WY2a%rQ`3-GQ&f·@.;ǀ4[: |%Yq*L~ ׸nsv ?+Y!HA=IMluߞӾǰŠD}),@E[0,txZ[K SèG;Y57,ƞHAz. cisY-'죭1SW ϫ2Y!`W+謺ARBWw7Sڊ ٭{9}+n\.QJYgN,a~VF=;߆].?w>a?Z0/vt+]JWҕ~_C࿐YVzImmܼD?'NǔڹOKMѿv̼p'7|.fV٘[x\y6S`^/HekpHBvcsAj-\>(ۄJBT[tmxi'Ҙ"CAVYZ-p6;gvFlI}*10 [eȖ VRyo_rluEAyd7k+7m|649L`G+wOyo5Y.=1u/":\ODt6/r͞lI!sdpMj+N`l&alz9RHg 'iq~dmXqƾaQI3W]jYЬ}ۂ+v+:jceW J>jҳ sB窫%@?~$Am2u3Or}^ Q-&T5SFB9ؤX*mmh3̕JK/N{1 gZl;aK!,lQ>~ڟM.}(3hUNݘUbH˰& @6gJ2v1^}xW |S`QSgw969NuTIY;س{i.R=6Nok,C0ƄḵyzJ~V`òxg[WӅ~%7(+uK<{6}`ܹc\^E?sLh '.JWҕt+]Jtҷ?y^ڜ;%WSޞy E^\4<.[EROl@:cwx)56F(QHޚJΰR͝#VjW%Dh.vx.K 3JV.?Ug>s@{}8sXL/O'ۀ/ӵ"`pi@x `CwxI2K1{]<2#(PEt8X?ʞٴM9Hg=0"`D ONc;"{:ɂkGŁv%$w'̡/Zb~<0z Syz:Ai)M@&;xJW7k6P۳$?|?*ZV }f*c^?Y~6`DW~xﶃƂj uU6`*U 92wWCv"u@C%⛗>w݉YI:h* rPYhrryK,&`yc93A47RL~"C*'f%JU_Qhl"GiRں&C;8#h{&=\igjUCztʚuv;>[OuSVk'7×A/pBF;N] _Tgօﳂ$uL׏J׾GD=sW7D?ig߭R^KG`s]ᷳ ~ɢgQ]+]JWҕt+]t7д5gON4A `VITw $Mtw r|fOG;sAQylew6/N,S=owb%]ff7w L_h@p1aI*\،U/-Ϛ<;Q`xDz7ÍDRMjHm@}@V?PDw`r@?޺t{'dn,vG:h|ͫ}du}cX3Jq a$yD|uz2|e1VDBcJ+9x7 <]@n7ԽǼY8[6zWy)+ syal<x4eiJHZ{h O6x(u8AY]ne!5f Z=0wb̆»t b*2=,}'rN*B׍jI9Df.poU26qd@,p 'op~4>CYbci܄f/ o*wp9 <9)%3 0wXd~(w (q›$t5೅䴦_yWHLIJm'4NyiO{4Km}%vn,ƿ AvÈT/SrӾ|M^0P^niSO*SUgŇ(O޿G8 s+]JWҕt+}_ӝT 2u{K!k,kL2os,"iNTQOmpY~d!`P^=覽5]B[}{JTaD&̓ 2Ux&?݃|yh_Wb9u$$i i^X y^h%d+5.O0@!Pрag BF0z_sw y ړ$aiJN3Oßi?L'sJ+F ޴;F1o@g"[&79}3iP). vY5yAEېJUۯ$y/QA4Qp- T/ǣ.2+Re@~yY{e}[5}#Hgc~p|q+]JWҕt+tt8+ #4V6P-+7}I^?ȱtiw Tx/;N>_em%I:V`!-Ї84ș) 'O]}A? lT<>b0eP˕feOs;J*)Kr;̓{1&==r8Pt 8ٺv6X_IP$+8s}3I<#V{>ZP=&oNP!xfA>X˦s֖է| 4" )͛z_# :+70~RܧNǮ[}?&=4S-]SЋ]R (/% uNᚃc<)Jt[zi\v}B=k/*ct^ PjI}.oLgTM3xIl镐nmRNcxԔ,8~2?/awxlV,Df^ybѓ~C\KgyT`!?x6n}^)-e;N/JWҕt+]J ]z =~v*~穟w&4?4pD9X,oIp\7yHQ*e%/@WyDʣhcMq,Z_yjpҙT`stRvt}Q<̧ vd pI郹zp18]dB~ (R.n82؅Հkm{7&nMJx5~8J: β̊]ZWC pz7 Y̿䱍ORR]j?&64ȃ !Du0ՂsWgMRd iE{9p,j>egD8ܷ2Sy}9_C=sa;k=3 NӰ_;r:ҼppO!ߦ~T+|7=j@ZVU@)KrU`R 6S?VP=q)0%>u\Ub6Fot{ԉ;.^G;羯Xχ][AGHCbMW҃5>z Du/?f[;! foW`w~vǪK^ȋ|k>xUWҕt+]JWҕ~[8[~c|^|< ?o{ײۑ] ٌYƷ'>"/v¤z:o]Cwl[,8 sm1Uk@L5`O>@e6 J]7`R[Q&MG}|8RlyuӗMM01nwpna!~P߭Oȗ۳"OgQJvCh Sy:RK:]:WziG;4]L+]xE "ݕdU`Y,f*02_;n 5Jy|дuu0,J\ cx7qoWsv~]xإaLOXJ|=fsŜ6| yL 28mL;dq&Nqbqve!TbyȾkګOjyWrK]Ht+]JWҕDNR+W~gwKKf}"+ ?@yAˉB.%K'(V%wϡk[.Zk\8qSg̗Yp8%t%sE+0 TZUuQ&kyQgw03[|k`2.,JtT=\vwóIgQ.ez2P&xZ};HNwKs8X23% I ,e@t̫Kge=˘ʽo9zM]ښz ԋHl7{༁r=NRt7^2[wC KkIE|'I#ݓ_U\u_L$/xYLE3Se0D_E eKL).wHk?ݽL˯t+]JWҕtO ~/ey?{Pr]AG ~8.xz#隷<'0tQE;+KA LQSM̱~ɫJT >8{ț8Pn2-G`K:@v10T|@y /~&R8@|%wXNW>ť3ǻ{AN.$VSqrRXA];;nÐlHbgd6;u{^X&,˩/Kes6ȦShbJn+GV%韁9G6^"{ʜ7q]PHD㽌x :CP6]. Tfe c--Mp̗ov{CYfy^MǷ2ҩ6zcn )s;DđyHiPFEr2M{Ds]hW:ɛIg;c[[й izqF]=?#;'8--E'O ЌxB9wϜN}*s.eAV"2Ojq[9vU }28Vǟ WN֭xPO3хؿi+(i?)gF8"ƫa.>v?'e%Zs> X_xt+]JWҕ@O=P9Up~?с>{՟ FVOZFQw%ˑmf /n?kw`\4bn`aj~v.#3[{f 1Fi'urXv&> jy;| QRob:GvOXN25|4QtIϖILhף݇ҁhj+ v1 @Dʷ: dͻ~;]($ )լz@30^Lƨަ1Y(2 ֥K3l`2x!qjk5|Η:_qQl lIS|EQKcEpC`永O>ZeCSl?G`B; *[ŗ(n 䝌)^h*1+zQ;9HڳYYG5 \)CQN[m'-*$/2.$y?iy|I9Mgoe@F8; e3`(g6JCKS1u-ysj>duZT 21Wq @X}%Fh\:'P-kN]U=-萤䒷ֲk(hl$N|8)ؓ3`<-ڔݞ~8ϸnNu'".<"vUǾg5=):᳀Zl@->+=3<#_x6%v'HWҕt+]JWOHg,ozXist `2>b߽~QR|\""gcHcI. ]{e1 ^4E_k?'G;7u&3k]P~C\f+XL!vwQҽS\ IyB5/-b-?8qN,l-y\w~"-kʯkAyx>f&Yl3CLT3z#%g5/X2KOVR(AocB\˨k*k>e)o]~9f͘ڕῩR({öЏ*5Ieչ @n}Kg(k: V'jdb6$.e6QYVZ#{sM@D fNb I($QX<}Eo#^k[̎ƥ:8o %1_DUY|wWgRt25I/Z<Ν&eE}۰\S,橔c Vyd&'Jr [T?76y ldÇx:<'i>f,|lXi_jtk2}/')t+]JWҕx?})b~*GIAvcΗ :Ynxud0M^82w<;wEpSR2d 1pwgδ/~㇌vO^vn``Zib#sLLTLЏΠr)<h)RUE[g,I ON>c]0\A[ķ{UZ1p"ةKP8y8O^-'sÕ~[+ DyqAYw>"lq-)AP=`b_FeՎ [l@9vG]t4OC)QdSzbT9I.F"Nl]7I7r@ , TMDzYі@lûd.;zz.yCOo beLt;uU 1K>d=oTpٌS^2>b޲>Q!U&J3P:Ô_@~ّdul 4/fԡ;?<8jbu˃qUp,|g//by?.6E;ҕt+]JW?7]K_}Vgm~ {OԟUf;KU6]t^|#+/ysMz stgt;X bp:{Mpg}Ul^)@&.$&NTXHҬ E9z ,R6jw.K_R)^B>+~퀳&_ lC.⪤,c}L n>yccxp^ܾv8O09sBge}鉈p6car,eA5'xٵ?'}]WR&`fm'.E% foW5ʞq[BkgĺǕs<wJ)^ sRUTWX7Xϰhm?d+]*v0$SBahL$OֽסrM(Z7*nMR]UQI3# zAr=;"`4]v739 @]l[s'B|A^d^Mt+]JWҕlҿD܋"gLv&*{[޹c6yszΟA ϣA- [;^ $һqLgNANq_i'"t8 dOI?&L;Wҕt+]JWLBg%,M,o|wJ<]@|$j~ ro{v9\`}x9.Ivqu0>f,i)\,_ ͪ%S% `( ۟j3y{_sF42"6 a.(2|Qz6ﴔI$jnvqf=k|PR Duߪ8;[>}!1X6`rL}$[g0M4D@VO*svˏy_<3#g˶<.35ss!2tI{LJ.e9? k3a}d9=|=(>v_R;.ᎿnXƜG ,?@$j U3u΀ܖk:¹,AILm(!4*oPCp.I'ͱh9F[gyAI?w}7%J<$C/{$Hk~C'0G"sq]A'ļ>m[Y]=tS0ͻ}n8˘8/XX2W v$#8|y|Z(H:MGZuS!X嵱ٜhQIswYRp9/FayH}O2&] 4W'ơ37Z/LKs.ّ 1QeI `#1hp%p^ڞ \W ?Clsy^u_v MG,G\JWҕt+]Jȿ}v⩓:BoF9lAoNH=n{wUC;lHHva&mn{aun-E,fanvooƜ9͝Y]O'~|OE.{K9֗*zy$JjgʧV(d5kzt]1490^z*3cPdBoIba4Z˱^hRX'AYɇ2[i2jw'"04]_T5>+ xGV>ZukAV[Yg3:dDC||vu!<`בVp)N]41WDsekJciA;(M'Fi< B/} e40}SMqź> PFk3,c)Fe.m+(Ssܹ}Y?*$3݂\tYμ5KuV3Yۉ>߮j#ghԒƪ6j+ճ6ާ = ozT|ϫV|}X޴a﾿/v,|V 0W3QSIQ(sk.ʹ g ?HfY>.g8igd%K1X`p~{: wSM7<"4Kiiʡڠ}B yJUӖUe락ʳiS.%+!`w()i|sBwWҕt+]JW?u8)?<*{&ǩ9UKX>:+;J|}`!DUVȌ)_Hܬ½h~e҄ E!+YޜoW@=f |^BW%_~AGqD%g2ܨwَV΀:/T*֞Mʗv\%UUP@D.pf~`%ޥ\i!wPf9OP[Ae@?}Rͽ . iLlUrBWAvAh0%Wb qur)ɷ뼲0<]" 9K{`Fjf{cYV)N=@!lĦ nBw_e,0(319 ?l"xb.$\NQݫtF7ܛ'>o"\k>1ds[Āu,3Da+gxr ڮJyF3 'lwE{mk!ˎ$T*@n\ '7 ,'fhfx9-4@S]$>Z='JwyXZ} آCB(.ǶɝL j8&ݠ2q'l9 ;d @(60[TNن9YcJw(d m+V'6fن< [qWM.K3@g֟/:8eZR;{k =FzA0R@~wep,P/{ߏV*f@+BHM 2M$e05GdSr1낙΋uu|bJ{ʳioqãӘU5-Vp v47%=~^ &ܱ>6= :2@u\z`u]@Ż%럹Q?w3 vsl]-Hn5[k>)ޭmKZFU " |2 W)դ.\iPj9&,"_*-o?30x^D.pj':ř\>g!Vן䗘CnS9_k3xn׮t+]JWҕx`/5W. $M]*\ K: /eɏsvRd259dƟBLYe,2IhŘ7&;z\8q6Xg9{KOu#>0#u,5Ҝ::VъkbWWHRs* 딑@{.qK2G0)7&LtR=b8lЀwi1ـYژ׀4cpH5/I֥YAN]qBKs ƴ 49a70 3MleS .`I>p}WDJc  !oBCHMl`i u I%W]ݞ׃ P ^3mԨ76 y-ÌG;)|1PqU.za:Ǎf+->bSY}'͓h|E`u3XuN(2\E7۹(^FW\4">zw:x 深6UgC:BFPuR{_x`amɓWWe Sz@0n͖-IH+c_Ei>q!>g^ 8VQAغ4nf7-Qʃ&'{X>zݯh5-ϣWƟ+{2svхv_JWҕt+]駤 ~9o>A)}7QΟ9ddO@>b!]30ʉz3 Y&az|3#8v$Qcۑ ně{h7nٷ:X;XRL.<Zs.zoej5z #A( q'xw7܆PR;e/+2G$3W\!H\ϱeKIs=7m>zm2Cׅg4| .YJi}. 7t(?`|E$n?qX\Eˢuxb/c=䬂]oD HGm,76aAYw" )2G\*5`{eTi ]}7w%T6ށMJc4S؂i=Q{2s蛼EfK\'A}zdu<[Z@`aN^ȃv^Oշhc?iYntm]<ew>;3_ x $;YY9ݕ$w2,a//^?͇߃=vzR0~,bwXbŊ+VX u 'd5'Tߘ+{ zqYWj ĝ zw(/%p{_͂+ vx$3@D?o>_q1/'&bs~ pN=S?sO< RS16}ҍ2칺g.NmN@0q&\Rzy[嗙nL>o۸}[FI⬮l6lD^Z8cӖ3^ͦm=iߙ [R Y ͈9)HWfn n{q̶AB9{0P8?~:R(YFRXZ}pco:p A<F;=oM'#ٳCY-)0~%Gτ p7&0ytR*JN{/,)JslKN 0?{U^voIӕʳg =E1~KM䞟3Evv L c=B t@kgurqN}Y@̭S6hbi9F6+)rppн7\:`P; k`N({2o 4!l'{pB[\#*!A3jjD;Xz" O?]>eb鶩uEDRuzH'Epн9ӨnܓA SD䘄\U26$64h#W 0K_⵶NcfטzӭOT5糺[ke1Wn{Kd{Ŋ+VXbŊxmšefw{q!e(F^ l4$vGm ސc{ |0g) ٢ 7‚R]ѽ+m|yo)PY,B.L |eu P>ߎ(gkF$o7eƩ\5ʌ>wy/}^@knxD- ; y,*f%-V~|+{ X[M69hC+4`+ lvvO0'=a_R|!3)nH#7LPY(;gdÕK #WPXsl[HmE9fƧdU+DDrPt4:vGjpQK&z==pOO]uAD/1[%Go{o>ῆz|2sr/&).s_$Tuػ >_]7lqp.pchF=EԹdrv&ȩ<(c{4OLp+KX|^tу@ӋgiDIknveve'pmK5J~_|^wTwXbŊ+VaW(gKbyZvG5л߃3L|cF@ Oj]M^6ֳu;Mrv籲)yĤ"En|O5iA"'Ej7J1z ;x|+S./. Ž%Ap +lMa 8_! lj 6wF+U.w#DJug3rXigEIzr-ui߁o"C@>>a{*{C*זK~ `AodZ6iiB"W놺(YǤt',r)YlA}H=~ܭ͖6JwL*x 31dc]={H QiGU,mud]7%a5[=}S^8 ,1xS1f7[¦ ~zVn' S%P'-6ƕ*%ϫȽ c @7AO`s?fL,Lr+'  o2yѽ.ةN[< mGǼRhe u)T@{g^|x1݁N6(A!ޖ 7<9p~+ T[za+#(PV+fH!W$lQyC-8>ZNU/Ie4>.+g񷱻_ ۈ ^bŊ+VXbޟ_y$ᯐ6gyEdb>̪N*GZ7dQg=o?6Vf'i->zWvmx&`7zo]3R R8DIsRڠR'd9bq]d͛s9 uB(- :*=*m⥝}ͼȦ'SP:cƙ>9]bڷՃAǻ&[ 6k;0I<8 CZ$`og'Y^}3"sew0~ݣ܃?0Oݿyk323mO wi`+QkP踟٫aFW V*Ǩ" v Y)?v`m~(c xIRv( g&Fa*%u1^$**Cx&WȻ `L C:;LvLmS(yV9K ( %75 `gڀy7IƒPe"q*ufbK/YB6W2u"}4?[gf0%I_e mΧ0wFRGy<;孲xݚB H/?o~~__>]>~| cuDwb;\4̌QٗxɿruM-E91hv[*7 iaO37_U8M\+VXbŊ *Oavm 'ee65|]>&;8 w Wf)tGRB$>Jן7Rɀ^m\x\o-6g[/\oҕDyۙ8A2%h3l<)wfыX-2L _dl|{ѻ:цddK'rHJ=Mխ=/d"{7Q ʁozfNF] fLz9H Xoݫy~WW'Q"&Uqw69P ]gD`.Q\P! OqޯȲz$)W* ׾4LL\WV:iܧ}o'W4?29h]V )+݋tiw6#z%7sԀ: i-Pf;-0=KuCQO:-j]UJV-mz `eN>*Ւ' 0GvpyxNxMluߤ#f2t7={ñ{E#Sȁʦ({Hnh#~ɱ6Przھgc \sW$R@D/ǎr@!ۡ=pigZ7{MTD7h#T=y |:~"`JgKp83J|>pgt}8e*@g׭~ǒM 38j>rU>{xh_+&xvPN 6 M;)MF{Kr<4*)lJkI1TJN݀Hr:=ckվr>i^?^w ={ bAf>يxwk1~B~{l@+VXbŊ?.nNvSZBo6) zwl2BGqTy*JЧ=!dieۄd000g>j~lXʔNF%knRqk4o`~"m C&"n3X311 1=w2hsJ|o>̉r9݉(oON*+z"VAYK8m~Zr%& |iQHgseP6 ҡ]@8%6 wL* 6y3ȧ~=ɟzKR!+KOËǶTKVhAhࡽ0tutdA&"9{VJ؆YA zev?Cƹ:y&Usgp7'qGZn\g>vKI,s ėks+x!DfY.!qa >>{ucBǫ,8óy>zy:C}`]⠍8fYq~ ~^]|ƺ4Zcܥ]0^U5'wĎ{ S(2yv٪;12VJ<XU82{28 Ҩr>/&GWw0K*Au;LA|,J]_@+VXbŊY"m+Ùv uNʭSxnoX偕AT> Hb(>l9$u7 =￙j[W){N zApSwԍ{49| RXIL,.bQ@֚wwRLU;Q.;@VGv2=%"2NYVQdFָ v呝zxIXP{0P@7H9λfJWLD;XC=f֣vKxyqfUVqYgxfM4UK=y-$]ebWَe 'BHk@eOJ]<ԕa-Ró̯wbwXbŊ+V﷬X6Wiݞe+>)2$#XHjЍ2MKZa^Alߙg2"niىGY( Zu%Hi'DeP=)znʘss2ߙЏ<=^<[y~gv𚹁wxlsJwQzSq8R-"Ȏ=`Ν/ErvRb櫩NHN}$6[&(8jʻ303}^蘩?%rS}U':EG ,2A ?Cӡ46]HxƋG;?#Ч6mdy6.4t $[K?b;п6X&88'**cwnTh("s]{6;DD::q@R(>UW>v"Bʛ1[AB$"ǹ 3~ݞEv*3Jt&%+|M3`A+څF%IJ]K:C($ɨӺ 2@w |c IW4~^#cM4}"zw+ö7;[OO@Y|WXbŊ+VXbdiiv<-їȚ/]'noLlRW4|{B8z-1ElFVv6 нwGT-2ܼ`.@t ߷} ݶ^6UT Jgw;Urk `wpQ="Z"N0ɳ!ڟXFFȒÆˁ c./ޛ)"߳iuz6 ʺΓ;(l7u2ߛ^OFtz^iLUD*#5 p; 9jYom>N$=pgw@ۃD̥sXV|@<5^?Vʋ563NHf6k\ C0Róy~ױteNThvmm^O}ܖv5Өȳ]YR,v+VXbŊ??is}2_2p'h렷uѮB{Zлwzdrczy5:NTvyxWOA9u6 sˠwF[ !.1Qҝ n H.mƏ{9'^So1_uIya]V v#;1>[{k3ߚyfٕa So˛h"`r@*I똓{fe!m[yވjb뻅ltY$r )vCj`ԍL[ƸFr3JX)dhò|X'O55}Mφ^?|HuFcnEl}dM`"HXǍ)]aHs]\9>0ƮrF^Y&YxR}oغz{s;ȝ:m4w~:<YI662)g{0Xpy fO4Sp~#aOe,y[C6nC_*5} }n^4RW78Uz cugwGay`F QDػbX'hWDgc柬6\e"kn3d^G~saPJܴ͓t?| OT|r OWo\E? t?m3Uٯ%+!ݻ:ӻ wq(?Ac̡X +Sq'i zO%ج.?meKz&nMse ۛ ҝ1\;cl ׏LabI5Y_ΜOn'fܬ]œx#{2GgG8إ+*U^ÒkW7Pf,M^Ԁ)+[T$ 7ۍl\|[}LmV2LdX0J4H+U[Fy?lRiY([*#(Faq }Գ rЀ|:5/SSZl$޹eJck0d! j Nt%mȐn rH#u<ВXPG2uѦ .G¨Ueb`8IGyz0<%]Zad)4QyV`|&{?,Mm6gEmS/: ɪ? Uځɳ#ƶ/ qmDD:G GlC5 >%[2뻛G{ez1mnl@+efFQs>=`Ye%RQVJNjZxK2Pv m2>㵭峟{_W@FR1OׁOJ_RݽbŊ+VXbŻbo],tY!Ofq \gM}"3.>sKjVr V/NJ tKanJ]wZt]po^W3"loh!DRۙRgHq YhgPȍ21xoZ(|ȳlckÃTxuϬA;`>cwiEְ? pĀ0bAKe}zf|Z)nEEʬg`^<8 ;*u[nDt_&/3,(MRݽbŊ+VXbEjYYwI[-KXl_ |rߜ$K^tYvij 蟫Ho`{/ h'AclM)fR7].\ a6s9GNr!ۉ]JviZ.S"*BD3xcJZS;7Wɢ[r]]^Qa*H%}(i3|$(3 ƶR]T殯N Zv 6fNs\R r czM>7FVTV}* naLA?s=&r=PF}C`ryD69;Vpe+3M8yUULM4 lJ ̨h<ܢ$N-\V|ŶP$=ƮˬsC$+; AZ( 46k1%uƣ#@u +QrvrYh#(tIMO(`^ 櫭Omro pS|c}U-(آ`h˹Eߺr q`={{?kRwAEmyp\$$U._%#e!2CZ?Wl^t,5}On^uI[g93 ޳5a+sۏ g,}#vXbŊ+VXvK{ +VlzlEkIʙ|e՝5T@jljgJKinQX1]}YUH.8 LJ<#7PM4 6&'vg{g[k9ѽ=_t)k̔ALopΤAYS*D4QUAo݋WLtݣ]mp|r F_kKr "5xuF[;{ְʽoq:ZxR`F&U A1!7rnsJQb]csߜJl+S6ɩBb0=;h' b\M@ ;ص* xR0(FXÙ,/ǤھeySKc;`Ķdyb;i{;ɸU`Ru1bF,Rop@³cc {̗$ TnP(721^C϶ ֡niʟy^k3^xBJ$®C0;>Xٱ=h* 6%OQ P&@zC{L ƬОfs<Ȭ,4,O>87C/=-&?xO_ؘ.6"+;=5 ];i:ᚾ Oǯ~';e'OuׇDF=,&}|\ zr5/Q Ѓ'%9 [6Cs_)e> ^bŊ+VXd󇲼gZM Qfܳo;S"J7b'Fy#.,F_lyV7!vzW&x+ NEKR2\1ϑIuRإN;_}rm!v*Ƴt-WE:5y뼹:n8A[gg>Pޏ}<'{&aMg`ͥ/hulКĖ.:\%id ůlYMcw[+kMG0Biu&VxUN1Ӝr={pNc9ÕULΆǺV%9VƶgO@?wQhNϱoSn ^_W3Q=Evq&۬=:L`ƶ[N$の*M7m'";ӿ~97X|8a1i[xh %@r@כ,0T.l5܏c{`1<F lQQ68gK&K7=ND"z-1< ]tkcӣO~X\c^wv}je>'9n>oֽ7jWXbŊ+Vɱ/{Ok@/{tƾi";Dx/ɲZypQJцV9P~ݿ$f9po]&mled{/T?T BYϣr"6+[ʋoĜY啋=mZǣe!s*=yTTJcug+\@'ڕaJȅ{rjrځ")w \I W` \^"ɁyD De?!ꙓbYȊOeUw`ߦڵl@ejQ ؝v <'MIC{ffv=,?{o's$d{G8ߺ~s;y=Gz~;R%з_݇Wq)llAKU+ho7b2NƧ3dF||;ϖ4;vdr4.+E$玆dr43ӟs+yoG[?~_ 'ӗcw]+VXbŊI-ze,op oʖ6gKH}r` O b!SIA%`ׯ؍ԾAxRR?w'n o0A$MNVuN5Oo%Ӿo9Dq=lh;`lX-ͼ;ñnW]57*kˬu[|۱*}(mNMN{ɉTFV{L{\EKIm^.\ahVw!b 2+>G6z>c^o<+_\@>dUG=1K} Yxc|e)kGFOaʌ qoޡ?{ iá@܀hPW#Ӓ Y!>Ysø>&L;b3#a@ZG!W9ygq'_n36uoڎ*EruO;ٵZr@%oP%m+S Mx}NǶpe[p_ؓv^uw A6ǒvb*Ͻ-.EȢ+"4uY^웼Łu@&>қnڀ^@yuU>$>3>pg_x+Z]jjWݯdX~ŏ';vO݋ݽbŊ+VXxK,W@wS5dq+e/~4uDvhgJ/@(nI<rU&ᾕm7?3 GxeV:Ɲ'׍Q\3dy&mN8X^@}~ވd c $eg{7q)r=@1 ]-^J@υA-]nJûK͆@A am7ntL&Kͣ0uxg ogP}0_K&ծ;ܜYdbOh-y[I6_U.7/>]WžσGQ76S_V!Qy"oXy}O&U@wB{W}/ԨWo¿0VR8_X;+VXbŊ+~X/];>t-^I-^<#xZLR *3ł+7ynAo]d!%ϣ]rܸGHi6P S!.ąܬTVAb-j-x?3 k]\w<\tޏ'$hkal3_ k"NZV>d_qÿ<#ODkXw&=ؠď^SV=~Wn *a֡D f`w ru QHI٭Tv"N2݆ %BlgzSGgz.לy}]/ JՍq/PPEAuNw說:2ssL}e*F0t}5ߪŵz`lu$fxwvdÙNF oDۣ^YWwպn|*CF)hk&@񎺞:ig+aJaǧd? !9>'oX <ׇfUlrmu,ׇv%6}C9 (kje<Zcu\ߎpžGA8}:Rg8D1 Bf4kAq!B\ȳJavղgg2gxǵ+VXbŊ+~X/,oJW@Om7ks;_a_й}$Y>GS\JBR.uZKaތu'Wv@ulp%ȿsgu1m;VRfbJq_&FLii 3=6cy{U@\d+A]e¹|X;X7WylؽhɎ VWһtiI;Vӣ mK*bA&gކ=*wHj\EَIMTF Vlef̅WА F=2_+C1vUO\ʩI.B+n"Ŷ?4]] jSNlzf^|&@\>F c&LD߻SO5k9.QA5::GPg=c9#y`N~pHG (-nu}R޾~Swx"$ǟZ.g MjUA:Qex`xصx/nWL>ظ>+:tU\yEimob㛧g{'wUv3zG oAu&~L ~auS.'`iސuY7>6{~5]qѿ5ụQ{dM<yuS>a%]3[;ddzpks}x3m_3o\r#hYҷt)1= (=Pw9ӽXyfbL͔R"dR02ݬTvX. \l|ވ8wvKߪsE@H3KE5ݩ ۼڶ6lZ>.ߞx=X@B/ee‡%޲UP]],@g$IEUM 0C '䦖Afo5 kTX\۾҈T^6NIVې_g5j~_,{Ŋ+VXb EQ'$}&c~6hsM7F+ԑFwݥk y  \h#3gݠ|^_Q{[`as"m_ZՁDη]Xſ[I7b_]:V޹I _.nߕ(#Rg;Ô(n/DOٖjq`)R~.^u9=iʞUzD4gS;ۜ&7N +'R5%&>8?`w_ }g-;ˮ Wzf& .UkMþm<Ȩ)(}Nғf.4Sko㧗+ec`r%K#lބ,$I%[]+y/S2 ;~裿Bz|a+VXbŊ+~XYU+ߊA{pP)Ӱf.)X!GLVyvܖ<~'|M$To(݆?rA&{rUe57WlAlndgdz xQKRIu#~!1ߨޢe dkR"AoYfC`L1RgkVyb< ;]+AZ`TrHVeeW`* W`Us5PԵl~hWcpM^E%wP-*,kF>Jd;ko+n5sEȁ-2>γw&q\|+wW B+]& Ϛ_Ȣ+dYyKñؽbŊ+VX7x*_>?0@ֻZޓ+h{Ț|KDP2I.)SDUn:Job++Ұ8t*5Nvqlxn%ѾRz}SiĤ`\Z} 96~SHSG}n=x}c`~h7c&t)v& BTҥud:txM2*ħXbŊ+VXu{ ?_}+vuHݯq7 Z%˥-]oSB&ll6wʆPg&\6O96=\Fn5@h=r%H9 ҒeoW7"/"{Nwr[WD1pug<+SS3>>c8ގlny}se\51=8QJ?q\oMbށ:0&#;G6NEv2VMP Ua rJ{XOO/z^B@qE518KxV:fv`{y-F ^bŊ+VX'}/6?#D㙅<|م>ҹ/{螸^oxzŦ7Q᛽lɟ]@DxVFbzy> 9p]2*wO3zw~׶K˗3݉ߥxnIg';1mh0E]~\uvl"~k:'Ro Ǎz `!P:R. ^&L~&mqm0^g7!ŽU&&zunS2LS\pߝ3-uf>O"#p)@A_guEf'١ٶglud%:$}15f^G@CԏijE4,`_ v,a$*I~iFK۱f36ٍco䩇29HƜ,m3å:\FuRNt|:j^?n?j=)cmlYp7`jOkC+~9Sު@ A]v(i^nƴ -;ہ>]ںDW/xuYNO.aA;*<9>NwEL 8uO=r:$rNu§7A1Ha3*;*C=2>ިYauPEKι?'9 :L+mxFgFXl6jR.Nj=!AqN{Kmtǥ2Mi| PRQ^]gu3>T 9+~B*eR+VXbŊ+V_x,?OHxܛ䛑y(jA jdӅ6P_\h2^l~sy+Kwй<(U?lzJAd uU=6wyd-TVZ;+f5Vѽ{7n\E4|uw^N._D/"":n(:E\6Q>1Wdf 9UGazXOlb:=ېJęAJz};bI@zm*b6m0lβ_<i6M'@]Q@7<^>k 3ʇ'1ݮ; C:PQұh7)N^*t|zm2rU&\/ٸA~6ZBߺp;BАQH2qԾk{F~"y: QMa"Ao|N|~c/0s9W!Buģȣ?twk{ 7xLCn)3GGW`㛈SR8T`8\t }گ&W_t26<`O,tbŊ+VXxK/W1W79<_YrZ5/' :`+X0Matή X|t &R7L'XI V5A׎ՀUn _0>^a1\V!X?y'}[xyP~ޚ߰e䧡0> ކ־WO{V 1?g`9oPGF"n0G\~Ӥ+lן܏:jn {/ rs7aQN#xœ淚V;,?F>MҧfW\[~O"[0s|R)?.uR~ >S|/ md ֏_d7 o>avvXbŊ+VCb޿l%]7=ynr -Jz?/fle}2 >c,b1J2Z8 h |sz-m*2fʐ'\DoHtv+g\Fk (k.i=K]_v&y #gxuk͔lGVyέԘ 齜TA+\ 9mtmHնL{n `tmT.uBi}5EC0fsg/Yer h>-.ԏp6'?^c} E]T*[{:naz8h#4톗4 dd|ݛ=K`X:KQ%C-|g}G)z̋GJ?8cOn~zO 3GK雃Ryp$>e/JgDʒYG9Q1bFŬ>≸~aMVr>Ct |G`PVo1 :o9ׯXbŊ+VXsc޿|1/7qaJ7zfkgXĬ3B' ÛSgJPA/v0Sށ 5 >)Ee%2]7uOu8L.RMK,鞧J֗}gԻlUښKڢ8( ʉ McU)5?zݾO㻴}*76 dgf~G7侪r&8IgշJP(z dk{T'pɧz z P(ݰOށ_} qJB\ o&yK2(Җ8a$0 x!;@mЏ1Lq[Nz\l~.gtQ|Idި/[8[س{>gK|pO9nlt]ۻiZDԝD`о׺zrY\Jvc6XewhϨCۤ8G0_/rquf3+:}x2E5gyy2Xxv^d&o*a~Rw}56σ|Ŋ+VXbŊ?$#V{ z;6O"hGyvt~%<'|{&J- l&!4&QcI^ riϥj/wcO lN(^笉23m"T;`T<^Ywx+oNūotsy]K֦"~#̫d: nue?4~6{=(NDMޙe" J%zl7az ώeir^+cҦu酶~LAwj@w?|ITw+ )pDw`Fq}0 (I vW(wIP A5/9N{Ϝ=ɾ1F >IAaCp@{>fL<I]DqyyM8K$?L"--H/˥AoL1slyyqADE{n/ 󤝵Q۶Grm8،3,4>G s"Ơ$'Sa#gzaj@35OfSx#ȭVk7#;x =(L͗-}m#**)+VXbŊ+X}+׾7G2!"M=?;ۉp@z}GpUZj/05d6Xmt\,Mq9hl-j1U$suSn>Хv߹˚sc<;MQ64yP3TՏNl.mZ|{saDxVʙXpo#l0``@ Y?v&<ηiu Gn;2_caz0ŸggE PcsgBE}62r=3ZƱ=A$y5燬`L|0/P1A}*M/qu]ZPMdjކVQ5pHQ%Y;E`CZ>g2*W|sv'A3a/llDfu+LBI;cZІ% L}`:l(7\: cO+w~+pGe(إ<+ js\+ >Ƌt0g˷)z+qOegWơ"+t <?ޫMRo¾WXbŊ+VSYޞt5/az/,eTx H uMa_(-N2Пz>{WRAS݀'ў|W-vwjr(vƚQ63!FUjg'w9_ŷ.$ٍ4ȣ##JWfn婀7` QN=j!3> kyqf& J(:S9\39{aW-@,Yڎ8~lkc~FlONiJS- ܒIw(+C9r>*X'|?u~þ?r8=b;leJuyg.rps4ͮxURfv?m+ή@N+=`vc}ЋsaQWWOd4?ܾ4Ur-h'ԛ}W~D,ϛdͩQ>_x<,ju?sT}SjLozJ,T/z xQ_+[$<5Yj__׮+[߼3aS[}WXbŊ+V㦪+V|o Ϭ:>xg{~#N6{"# Zb+8Wu,z?Q5'm{ l'Hc#9vsFCA pd BK# ʴsP+gmHwV~DX[`CSs iU}`|,Nf)~M%2UZJdteU*J{u{wٷO)yQG`ٴ^A* h0pRʯg1_>>+h`Y|z}Γv ~Yv  !jOUZK ;{ۤIG U(L?RV`Om$y{ @te߽ C`pgA.}& 0*[<:[MUּ 7$ e4QLmV{^\gajbPM'}N͉^C?7W~Zg̀O؉8:3>j/=i^bŊ+VXbxןϿ!/,ޙgc$5W_/] | gEٴ<ۿ vyP~+i ?HY>>@Kf`?Wg? SC/zP;iv\nQ݉<%o', .2Ys`"^-a~G[ZxR7{ƞǘRGx}kY'c7M:Tvz۞v7'_XHHf:!?Vtr}Krgq?,egsmnl ʟP]hJؽbŊ+VXxןz{ɛ겘jϒmCyYy'{xH:@1yvAzT$1McP[;X):3m-wG޳o[зlpN޴Ir#_&> lmԹg'rj͐uRutkH`0;ZG>\kXD`k Acqpqv+`mϤ[g.d=ϧj[lNe[2#p6NT^Þ!fZn.]JwQ2/׏=.6%Kr̻a16L@^J7军iy"4jZVF]>5iLXu2K;+bX/HxG y+H ^#Krg{cdS,Ln]T^cYZW }.),Mr|ceVVޢǡc2kX://25nX촋yw:z٤7w`:eo^/:ϟr|Zl]B{wMXk]{g ~ 1č#| =؃¹%˫;-]gvzXt߽FyTdס{|+o[fM]Do6; Y|L.<{+pg-nDZa l-İ;jxM8cpF%5TND-!ob׿7"߅¯E!,9y۽*m]D"}W%{L6wn͋&qq_xm]~E^,wzty]Dr^n$ɲ4/áX6^ڜ 8\׋5.%*&Km*pEV7yjn一nC2^SYԛحơSK;^zNDžo|lXN/rÊU;1#nl$w5 |q☯K[ m-7<{|/%H2a<̪kӓܨ-VziW8p»u+8^u8e׫kc񃽋G8Y^Er*+/L}?^4xuPwmU~8ʜE5 >Suސ.lkq(=h 7J(Gb\nF sڬDwY.h߈ADhZk7%퐿1j!.%+.?ϏYZP;GSH Eh'eqTp*v\YrIέNKK˗m-8s|p҈cW/{ **~eHY b zYf:Gj.JCg߲ˌ0s6*}ήr=e vGlnk͵d"Z~g_{ }|yKbc˽]yY2}[zE9tEw))x#V*Ŝ v_UxF>{C]o19 ǨһOxjC6@ո<8NM(sϾK]?-,S@[gG;f/V]Ų9XHc!wJln7ʽ8/|ѥ*?j_[<5]U9,GӴ%IOj%Ryqc8]nIY{~@V;̙5Us=Q1眿dG֖mu15Fn\eQ'i>v{uvM{S0\S6;ӐJKvгλվ)sca(]OÖZR9c ٘#NYϲ[5bv`=i(Vz`+$8VvL(ƦvT;7nWmuImo)1W).i@.'*iT:ݙRe[ůט7o%m8qk:Nxt U݄xб0t-8i4 ^3-/=0QP/O^Wn|dú x-$v?[[+<=~2O`l\kT*[}mݙ S"Ib.o^7ș"> QekڏBsdfnrLUPiZ8jwوStww5-h[pwQY!/ݼ,ua;^gq{V!=~s]3Ba_{A)www]AqM91WpL/2$2773\}Zb|A:Xdbkc 'Pq= [#Xߥ\ߞbYg1bܗڸ V~'o%R57Yaq%S@GZi"ǞTAe>Q{زm~:607u<7D[vs_L7_NĨ5^+n}mb7excs)oCEwN%`]]@o.<xk1yO\o~F=ꂭbr5/w)zUX.m 䖟b7.kcYw$7ihMloVjm 5m?o^-3;qujz3#]@ogS.]f{ 5oӮo~ۭ47Zr|756eə&4.͵8g$'J@:=)voSWú/A1llu.,BG:7ortt<;fˢ@wnYUֺ{:sͅwn+ݸg36~ՌEITiNU~ ,Ũ_fR)|"s:| ʑ`]*G"*w=]}62(ܤpPpGokY5y?>4!%$]o֭%tkQUoB.Mj#"Movv^s<ѹ~sqh$LMBr3j[p3۟G&c_{1.G/o4ll1*W\BF&C o'ZzzDo'[{WoVUu0Λhg uCT!,wZt^ k\I -s`R֦ kyW*rVkE ~p[v#:K6'.ȮQrܗ߳Xhq?Co*KYܘK zDGeoqBo&!bTd)XF>b*v,wx9q늋lvXƖ5?%\(ndT UӗY_Rpel\Լ9'sc])-y=}75ձ[Xu=ƽ39FYH%uaYxg^ek7'/OWGJ[r~6&;mH-dTCT?6"`YBH߸kz即o: Ҥ|J%D7ܚwݺEyF^eu_k,pL ^Aңg [7g},}(v=ΟΊݭ Cd!c#oy[yw~v ٙ`gҽ5X̵UV^_ī`m.hw౑^&,b#j$r{l>H ^,X_c$</剚}r+B/sURUpS l9l{ VqjclHXXe!ӒUm7{6"K7XF|5D>&ܫ)_9V[ z\y+)Ǯ/w|u>+d#}by,G_l*=L ad3OН#][]ѹbwPϚūnh&ޚg6ç$Nf㹾'j |"|.OJ/Kl!rjQɎ &e#~-|a.ϙ)lrMyY[m箖awX/D/'^/"o0/n-7zZ҉MIemO\EoIqheBm}.^sWVq;oIn,嫗'4<Y'|K{Xyϱ7ٟ v8tǼ]8 Ia=>7TjĽKeoȕ%RZږr9[x!ZVփjͭkSy݂:9Y΋ 4GLg\jK̤X»ks@z!C=\Ԋ{gJc{n뻋9k깶m&+p87}h~ڜyytY٬ku MtK]7G ϭ2x. s.l3FgjVj )R^+ZoGg  U:3!7G[<[^܊(h݇އ1|]ލ>tEz;TWؽ'P 8Gw/L}<-Ok?R|ą̇;o ]St>T,ҚnW+3U=j"tx^# >?mkx7sI\x`*-n[]0E]Vz._ž(vcG5[ɗ'{Mg~xl |Q+Wqۚ\1 E<?\u?[Xo굄ҒZ>ݗFVH:UmBwci*uK:yj, Odjºfm :& Cr7 7 {݆CNmoip[; T"v'.]Fv q[ؽYKAЍX뛂MJ~s.T1e5̃%V⸊Ō@崼ޗɨXScܻz\S܆U\քm6Yz=\g43XP%JJ{mqϿO %˝B<w5˼CL@YԥN$*o$3/mk& u|W!!c9/1ʛ<_[rf㓣RА~&fc3u- g+"nB-k X ?¢ϭpy6^,PuADWq`\˱s'cG 4),rћ-vtJ&"2ݒ|tZ(]olܲ%yԑo] h.d!(KM"qg"법75z])lZvY伺X3 jC͏cꜗRRLhgJX\Ѱ& uhv'^K/6D$~{5J#M4:k4/93&16;ҾJ넋Wv"\˔kk|ܟ2‹Tq+ 鱦Uzh[ 3ޱۧw^9t'Bq[ۊ=O>be2VO߯sZzz, oR{NkU&vVOOƷY<\/jIs|e{w|#I՞'j/ARެ8w7GJZ#fn{DlytMLen턆c/t̛%|7J}Mʅd6Kζ7"(LֶU/^)wsYدJ9|Be7-7q4Up/Y,f$V뵎V^RYcsO1[ܕk~R?UbڬKqU=bZqlÏ{Spirq]L$)g3Wets#dE݅+V{L{$Hg3-T4XKsxrR*x0e[qCWa2`ݯ)CȉZYDoYW Cu76CEl?_Hq}o5](׳w=CP="T5Cm.ys:bOt<#,>Wk vU~,IhD@ \ :FU$ yVQ|x:y0N 3†7bGK(ַ%8saJcl k X 1IeD^P@w[4߄UL[tW]ĶZܸD`clBtv ) bތ^Ӝrk ̂Ȟ#9syhciַ}Gb{~=u 7-ta]kWzCZeK-ȯq5]'s[J=sL<u%?'rOTus\rг -Mi\s-h n]DPq1B<)ﻝsgę/MT O>sk#N/ ~g9W1ŒKU/EdzaX3GraӴo718Kr}#G!'z+ۮ anGkW碞~pfdI'q7=[a7Q, Vk<\Ef }%m¿_6ܣB 1DM!C0\PXCsg D2Hce;Vn.A"a[uvyK?-9.zH٪:j*K.d}u~Vg6]jJk`y>>F8.ZWZ ,e Tuٴ/rZ-F>/2& v"VO=W{'+K5k;BZrËePn(K~nSHą]ZUf-|[t}_sz|&Z {s )IK[Zǹ^{Y4+C ƞ4^ 6_nLqW;x sTH2oř;&3P\X}5fb m*䝋&/kM8.hV6wqiHfZ\=QiW#O%л=4CzcKeNZ<{Ni%8w.KrίXvK)At?XxV7~?%vj죵fwRv[҉B~'GL6 eb{1 U:\[Od[\ Q-H%1E a^V .&IV^BV\j({?oLؓG:\GS77tqqvmapzmWڵr| ?D7sTSx*Vȟp[EeL>sQv;)}A8.m ,D z[縅qUi]3MY]5^~Zk]S:͚1^]F8 IIX{=T՟[ȜD±gЇ׍ۺNi^-V Zb $\:3}Tɵ$h1օnKO$äHM' [ܪ:|0Y?K:vӝc]՟g;[N,KLb-徰cV?_h)`NLvDEvL(Qzf(×Sq& LNwjm/i?j^+:*WMERnrnyY a d~-?Sp;Ti$&^t`fwOzyC쵨VV>(.Tf:uh8*;,}&J}T$TRrrkp]Gmǔ|kh ܭ:,ո+l,g?^>Ͼ]5RӘ[4A\1K*bf-3M+eaQ5񳛹T/ΓY59j=Sm'N$t2v ~k. w"OqzW\{u;>@Ƃ,:[-n?;߉Uu^|R)iNV.%j&\z_kIfAYdn~σP\6)84%eKu%:o({VP7[1WXIzE$WmgWr|5O!61fۃt6KO9&YlKe)zmgmNg{JG:YW)>:zy=/!Уq=#/\φW4 gYeb{qXѨ]MkNau:Kߒ_sTrwb9cuBb&O[Rg3b}*gݟא:y:C'o+-{^eŽCmUanYҺmr? F?}4N7cxxׂO)⋖UϣiGrUYu,=tT> ܎3nN߭:b{[Hp`^uڰ!TY4κPK8zLrXh7 oqmBy$b^?3BxCNr&աd/k},s%gҬ?E !Y]BZcR˿k'$"5;Xg"; b(GwerVCy,1OTst~ҺG{a>ۅtЅCߏLyz]}(!=.Yn=ߝx ~O͛Dv?{_F7 {*E;CYhK ,xΎ?Z\'GU *3+hRv}ND2? s09q!!VO_:`~*ޘI,olKsX'F;Kz\1MjyI-X=2 +cny ?|/v3.Dyp1vּ[b̜dټ?yg!jMⲝMghO{0kiBZ|o=Z9]P 19EwcR1޿J̔w4OA=2fwAf2o;n͢wQ ߭gܬK/:#=}gͰR^ϋhm z\+77,^/ӫ7./B]CၪۥWx@)Y'BuE^bl=>ems׶6>nr1'6D,󉗇Ď,c_`}'pK>#|KsrOT;/V6%`2ZJChFw=ẞ]Vݾ7HiVli񌧞WZz?ϖQI G.="BI`D 3zcŲb7CAO?  :to1K' 4D/KJRZP,7w:O|t}8X]uGc~*Xn/םl*AܡF [:W_~\Y%.ޜWqv$@؝ {|chBh9VTDܺ[mP:NTw;BjEkeI%R9B἖1=μ3If>OkGψtb/iFg8y߸޿h+O=7C}9O$I*[mKч ]p8o{ݽc_'s1Z~kA;ų˲t׉BUw^$ xJ~5UܸF5wa( [t3{M8ڕc c} ꘨H\Gc`l3Um8*+%y)!Ye?jz6kbw\/0Mv\n@N$HnK=."KV]" 鞨 9V# Eȷv֘q7t2pT>zpَ祦3LNw&'T>uOzb1b4oyΗ=ыZ?ZYí&t/wI; m\Fq4Ś:"G"o*TힶDbŪQPkX5ЉUn_ 0?pGD yw3JuHټHE.dzMd%dc~"q'Td &z?,;#/j{EY)'\ p ,X}yym4Fr ܥ]%..нsne;k^n+l % [h0LFf=.v~Jgͦg-yE.I:T[oyzq/ll ?yYuWMSx]]c.$x o 's,rbށ~頕3XK:@2Zοp{y` B77Ȟ¦+ Wc"Ӝt_lOOnG-oώanK_\?)TBD"z7kͷĎ|`5ղ $fgbey lXLEtڮ^]^KUǕz\,AK}!gb#Gwk4.v Y߶^ s2AiS_g#$)jݜ y;Cc'm|)u>K]6۷DD,tX=UuJ.͛c8^JT|ăn6nXu xEw{gxq?`l7O&z+pĖCJ eK5=*M뼻Y@˿Hfk lXKV ^k ,níz̪Zyٞ>sʃY=a.c?j~,YR:k3sKJϋ#XdL%6Q_?%A*l /8_\W;Gbd}&;őeęhBZ|;Sޫ1^B"I"GT<\/~.zqq\۱s1]Mn^ o|x&W9QnKe~˒WDuKM\ uZWW M,v?{.sXnK^n-zY`QW苵oGbfomoz2[vQG䕤i?m\puVx,}C'-i.Q襥ju0Ϯ2.+/ Q~{8#b2#l[K!9 &n5P1 {M89QQXU+b|Sg> nGw׭4nC@N zp$|6 q4%% .\[NrKkab]eU*o׎t@Y6nӼ[ER*9*iԝM]ʷBYOwsIk㵋^~Xo).W>yL=ն8_S0R9v`Wf4 i!ГuVۏT-s_<3Gew7` ;\}" ?@*|u7M+o3m+A}Xq]~u ,ϵh;Xr;!%wDDU:d$Y'_T_Raw=?6V_GvZ%7]K["y~.v/N<<͍6o%k̉!x8᎟nxm^I'=hYU~vKSD}1JXz({D-~x.o1iy|%ow?uIbt>b7ooЁaw2Z̵ߵ!PR|;/̶ݐ]WJevX=8qVKZqԹ5iEneys+K;y`'u%7!)9Y(n'Q1ȕuY @y,pQyv<ē+׌ي ^:ǚ5$'&ֆ7'{zf\g\[v;> 0\wq{T/KVX>{ T+%dug~Rۻ^ْZݺT ґLBm1XsQm,tUdENeJbUy[]nZ:K{3] b\+ obiLOoJwuEC+t['~NtIKD{jd޹_=qa1W.P{Ss:6 tv@'VOa;HK7MLgeorJj8̎* \;KpZYs7s!?{rf}N[(zUo?jR ޏ8ݣTMreܟIEk|2ͩjF)DF0xB(mΊ-ۚ<90$}]."A=ȋ݈{_:;b7o opJQrQk˴}@VkJ d1ⷮ3;mkAgn`nnY78ΎEG fbmhJrfcjwJ'cWVa%fB]~ȟBi1ɓr'k$owoٻ eZÉ/'ݵw ox7g\NiQ^/v i./(d.e/8R7| WZ9_\s ?羇eȽDŽ@Ӏ < $zkn=hmǠ> yhwS&\~eyT-mtfJ_ p8/.t8ov089r7f=;9?A6&BYt(27! <'0q_k= 2ϵeJZ.skTI!\d\3ڼ]/3fr9ӔO4}u+$,f:޹NaZQAEG,o3~ nk7vß:#o"3HSS!rYw2<9Ax-4׏+\'7O>DYn܋nϳJ݌'濎SnO}Czd[i9V ^9n&~JsM(Jnn7z'w>@c[9䩷I/|^oa#01,VD x'?"hBuv͵\>2hCr$ݢwo9jǖܐISlgb=-KH2]]v01'G}Mn8x5K uGXuSbgOy -D7Mf}tXY9ݶEk#ԮŜs{7Q(%Sg\V%7qhX+ Q]_ݷΌI=yYov|7<(zɟmq},t/?Ț;8ݵwjY߳B oħa9wi"K \hs΃]5 ܅}ERXI0]*yLҌm+D#8E yh2o!PU֤qn´!8KInm'^쫿ѽp>.F71]EA~q @/"?au-Kr̖ks+?ܑ'q jKMVxLDъ#tTD ˆЪqUF"L'/W1BWk ۞kX$*g_黤Wy~1כp&}yd۵ľȚ{^n~;_ ڮt}7{ԑ][^쎍D-ӎcȑo:Y\ޘϛvWybx4Sj] :$M^ȫb}W'F$p9hV\x p(x=pyް@X}^@@@fF-8` # # # # # # # # # # # # # # # # # # # # # # # # # # #QrIENDB`youker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/xx3.png0000664000175000017500000000022513260315532032355 0ustar fengfengPNG  IHDR 2Ͻ\IDATxڭб @ F[8©. 88dm_cׄW$+AF|xa# 6N80C0ŀxl0IENDB`youker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/all_1.png0000664000175000017500000232655713260315532032650 0ustar fengfengPNG  IHDRR pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3EiTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-24T11:05:48+08:00 2014-03-03T14:17:45+08:00 2014-03-03T14:17:45+08:00 image/png xmp.iid:9cf392ac-aacd-9d41-9f77-abe672bf7615 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 created xmp.iid:b9f03e06-8a9e-ed42-b19f-6965f63f7488 2014-02-24T11:05:48+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:9046a85f-7e2f-e544-8a38-689aad1d37e0 2014-02-24T21:32:15+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:f5b3daaa-1b43-1742-b6b9-b0136d07a50d 2014-03-03T14:17:45+08:00 Adobe Photoshop CC (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:9cf392ac-aacd-9d41-9f77-abe672bf7615 2014-03-03T14:17:45+08:00 Adobe Photoshop CC (Windows) / xmp.iid:f5b3daaa-1b43-1742-b6b9-b0136d07a50d xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 3 sRGB IEC61966-2.1 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin 拷贝 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 1 720000/10000 720000/10000 2 1 1980 500 _ cHRMz%u0`:o_F ]IDATbZ(%<]t^<4Ac;#3 fi.J"+rB#p4 &pa),}a)i&i @%$&ifǤ녥 FO>tRJ)RJ{i~ʫHR~PJ4 댾kIY"$HI +]$ vZC+RJ)/gc0K%Rw&/Rʏ2#ByDYIL$kǭvWtp`qFKKwm55zWJ)RJ)_J)ހ,&uY(eJ9-a1tPJy rpT4 Kieai_ZL&XfKiVJ)RJ)啭m M@*)K PJRaT(W"VR$¾/aFwg4zlp$V])RJ)Rϐ&R^KRW&% "ʫaAF F 1Xh6xafѻRJ)RJy%+|;F4|oPqsRO%0*4*eai>`o6Fk,k4NJ)RJ)ӭ 0 }DI(?Y"|i)RD]j6=\bTY;o@e fn5tRJ)RJ4+| }# 0KJ)Tєa'?ǨitNFѧ,o4i kh4RJ)Rn/m0KF  RD(e)].GjJRUe5w2 /?atFKO70f}nh6:])RJ)ƀqS &F GvZCyIC+RJ)[),hhHKrk rZ ]&K,򉚍fp^z# &|je!V{"&.I:.}L:,ҾI:m<`c`iiltj fiJ)RJ)aVJyiɈ҈DX Y(h^^vY4'ZzW@*Gjnlt_Jwq·02a+VOKtL"M6`>F`2TvFh&suF4RJ)Rn|fu44# r@:+RyZsV+ %B)OM&NʴL"iOL; Y2D8)67:k480Ic56ݤyn4tRJ)gjւn=^ؗ^_@zpZfᰎf<_nw-5[/!Vee2pPr`itր47 _k&mID`2*RJ)R)_L YXa)>_3K(&Maͅ$Gs^\5]/]eXDY&v2ɴG$Ne*tT$‡d2mE F{ҬF'tIwn]$B[DIMdA;kfYͬL7kf C5zݤyFJ)RJ)?J)wӔW&Y}tp^ 4 'זh&yH Na!S) -e"|{2'LEe"leɴ:RwR3.M#ICPͤ^7i~k"1`5`TJ)RJAVJra)MR8,. @$a KkKn]y$Li60 J)/.ӏi+L;",dڊ2D2-DY[u'5nMI0ͤ^7i]Ihk02`TJ)RJ!VJf)..$a) Ku__sZwXwpXtX]A1XL$BAL"\%V"ȴ'eeړi!M2=_3Njf qݤ94aIwnl4t5bhkRJ)ͭrfДgi^Z& `jpf}Oyuu>MICw2frGDZ_Z&N$B&!2$AL_S3Nj&ͤ;5&ͤ{f]4 F[FR/lRJyUD(zͬ)_ qt0 / g%op^ 4Ij랫+$V.-u|;dA& 2mEtV.L{2L?O3.̺㺥f4aYwnl4t1b0m RJy@VJ)J)Wi:h]4tI,Dx4kfc%Z}T4J"TN$LwA5"ͬ;4 ݤtLtFadĀQ)\+L+DžٻRJ)b+:rg4 I1,? N ד&D-$,_ZJzaz]9"ݮ^WJ)Etir0 i'M$LF}i+MotP:.MFku'5nl4tf=TCwfH҈`6*}a.HHysػRJ)eJ)'5t4Yk#RYM5fvBpXҾpRGw0IRޚt$2wgYzWJ)[)e)[m&iOqIR|\ }H tpt$MuۥYͤcT~pRKؗfU_yai$ݦ+ɴ';^C4ͅ/JY"L2l3w>W2pP=AR:/_3*w̺Iw\i6I3th61`2Y+ ?v[*kxû])oj;w'YzWJ)X)ES]oh2]&@J ]&hf,|@J.HϑI8,];-МMa6`0yW~pB`tWz])_[stZj6:㺻>`L"Wi"t2][ʴ0wku*ͤ;tuf5t]y+2m k\&$eZ BһޕRJׯ_[ro,\eFG4'ˤI[3fR3 הrQ u f1{-i^KeExL?eR)1 OZ$~/ce6V?HK/A8/ii+N7:,QdAsFZHӕugu5]!_XmRr_!dړi'eXywwR^)?TSـ1ݮ|0 tt4f_HW KɈ@4/1P-=]E(D'Ҿ@e.VHY:/%m f1Di;iufLIͤ\AXa5+RJ/WeD7+򅬔)4 ' &#p$](6:¬ /A/'6iriaqRCws5 |'IwlteҾtXRyW5kdag4 tiKI!&if+ ͤ;;yrf+YaYȴvk-~/gELYzwЛwR^Jar/Ij])L0I9!L9g HV&kK}*섿KIi!By*FwR$a4+g &a6V fa#,mfi A!qs%Vsh;f֕fLIs@CwWͤ܈Z),,eډP>nk[k?׿\闫E2}IDx7wG+bVҔ{h&ijn70 #}5 4u4 s"ZIDMᰆ fI4kq2|9FG3tt2B/ž1D8( H kH WH2}Y&t$K[Iͺ}4K]LInUCwۅ3XZV+ +"|?+Ya+rwA=dz[^ޝwR^J!QM:  }eu4p0 :qa=NznL:2eDž>$=F W\i_zLwi!ҼFF:ZhNt_BͺIe5D$B"l`#Y0[$L[a팴",.H.kn,u?T3j&qݤCGCwWͤh2x5V֬ie)VVX[XJ| 뵝L7t7x3{wԛɻRJ)/`MpPCGw4 d4t4Ӻ>9.,IwX"n͚jk&kfѝL,fu&1AD8,tfnu+|Lpv,NK7II/͚Y3I.,$|p4 tZx湺JK`k6=EEsN3 Q0DE؉ e:*[ltTpWdJth$i2Z^G7i>&VN.;o*uF[I2mE(7pgE8("aOL",VMοVCfi#M6c"4XA4X;iRcw???w:-MVCwDqi!,5$}i͚tp^pi_L:.].LiV-|\7 zy6yi)fc t\vRK:,$%}pXGsBrfD:i&at4u/ M@붺Zݨk9l OB-0)"\$t@b\3Nɴb>$I#!E22ݢ9Y7k^C7i>dIXZc>t5h&Nxgt@>, ޕ5dڊP>("\$Ana[_۳ZYX;le_!mߒ6ҾnO675ia !2MNZ+rO5f|M@L :#I;`+G4ǭLҾnNKK:i_8.\/-dڗ.>&qa'!<6a_ ܮ;nt\ryaC_R _aj<,Gztto4 $\. Ki_8^w^C:ffRh&A4",? lE="\,ӞLlkRH=&N2],m!-4]"HO4Nk]&~{5`c F7 λT+{VL{";p'V;D8*z+ +Yxސi+mك6]$ot$H=7Vcg*-e((ՃB߹H,Ѭut*Gv;Dc[gv>}ƧfueQZ̺4~TӚcuCC(?hZsrܮ,X$辯ɢu4C74t(C\kN+S~O?XGs*ogݦm` Ţv24Ä膆rY]]ܮxe,bhםVfr2Pfq"b-3b辏n-n-cĢ]G AEk8!1g1B_9R(cU(#nI}?qZ9fQHy3ܭ5b/>VHsY|"fqA !^؋Yb $bQT+GllY)/Ed$Ϊr5*w|*ui͢{6&oW慆8+^+r[7+# >}*%>Clr^J f -DzCQʱ}7[}ŧUsy 1kq],gq576vkfrrB8/o!֚QV+)+ͱ8!n+;W.ֺە˶.kN˺+S qVV+xrP^()G6Ьm )|rAX&)bۉEbVE; 1_SGfHśXHCGs^^ eGi+7hP%^+{x!ͪH #:+EPPWEs^(5tuCiֺ+ q,(čbgPPh Pާ|śUotBAO@M, ~P8[K՜*O WPJH+BlaRlUvY(亭aCB{h4͊nc7{ͬ[4FqʳW8/kfu4{} ;{e~udl#Gxn6%֜UU{iw Rc-vkB ypd8h(+Ay@ykK(yZc1{PxCwPgݑQ΢5 evEBfӚogY,v>}Ӎo՗/_|5kϫ|kqRG~e-&̪Y+וʢ,>F|)eVf$.+,^ ʓ;H\ˑrEVbѽ]WN.N[cNY\Wfe\W*g溲>夠OC9kN⅝o#UwkNiVE.:onObb{b/Jb - " YbVE}t7>ӳ4W5k}o#({ &M YP>1ӂr fQn<.jve-!bQ.+CPđZ!HPg,Bw( "rYsYߎŧr^yf|;O9O8vnD!5t7iު,(XVVbbQEw^w,boVf !Ԏ$v!bmVB q* UAB夠REb`֑*oUX UNeKwK|< ͢[4,Y(C&)7xf4Cw놆nŬM]\5l6zG<IG69UޤwWijּYCjOvnge!b5$J Gk(5}qR9V+5w*lytZ&jfgXBc2:6a ;>}o~&ZGs+Yt7X7jF*rr^9YPq9|<)U|[e4CGCGbQIX<\7I|<Eywb(!(C8e-:⻋;ı^ܦ XIyVnW A&eEynℝ?&ͷPΚӚ˺7ME96],d q{qVb%6YlG ^9PlV+eXI,bu[7rA#y,#U_M*OyXyo;;y[z!8/\/i%`xtPtsݢAuJsF3ZC8b%^!^ٰ=_ۑz#ܤJ[YbVe8 qMfCG3+{ݢ09f=!Mmrع]v.ӧOkoV_|g,:[yFCw^!4Ji20Q qarZ ePަVr5œ.xZ9,gqY%n4#(+6Mtu5rrZ\&}qdYⲠTY+rZ3LEM9h݇\PV>Xy8k焲7+v{kVRfѼ]&44CV; BAMֺ" 1KI#*C# Gg2lI 1UarXLY*/UcEy|WݍWaX!S7y!ֺb/G/ı89!l|1;<<I5to9xA3PY"q0Mvvib8U$`{aGu„dVv6YYYΫrv>}$gҬu4Yw^,5)`20a2K2"h\cq\rYPShj ]7MUVާ;)k捂rYUܢ,XWIfUVtݢhe֭iy-r{ҕ!Nk(5CW\,4dy(ךP0yTTwQEvE ^)8+ 9$|[uǚY euqb(G l2ttkdC,IV"x@Unc@ًL^x$A!b+ʳ'D2ܢPHr΢[kfEwAhw qd!(S:<B&R1b} xmlzw5Cw{ AC3t'XK\ܯ:ӝ nhE5OocsdH=`1ı_ [g8UU~EZ/(Ӷ 0Q;rl24tttCYajcͱ*sքO>}~͢w(o\Cݧmxe09Abxp]* ͱrYy-nh΋yAMs44C]9(ʢ++e'D\/uSY_\ޝ5vMb&Vb{!Đ_7UfU$fUNrUٯWfeQ(Gy弭ogj&Yl-v4쬵tosΧO>ƧH;i!(k ;0I&L,4/5u{\W⢠Z qZ,eA9g2sX&)C4tZVNYYﴢWݓI3t+kVjN]"Ή[ų qR)C,|UyEy|w(uYcM앫i^!jn0Y 4fͬ5Y4hNP^Vⅆf\(b/V*fBe-ij8tSL;+BLf%D`(qV& 5L>L&ʢ/5uݓ:f(WZk^j!nSnS<+_5OʓC|b(u]=I$ݫPN:bV>@UV:!Y%qX 6)T E+_r^Q^))G&T*[*{~q[ qI, v'T9`As,Y3t#1Ģ ʳf q{=4Z9RųXX48H 15tm3$b/OXy[IhxRe2YyVM^KbC^9({T(q0MNJ [+eQ堰+_U]֬5Cs ARWr^A74>^⛫B9 ,⅘esAl+qFc#[l/`(+?i JЬ44L^ JM!(>@G7^h4JYbeg-11$"!<fgb({Eʑ'(G J2TmAyC9(F9|f(!NVnh5Gbg1KQ楸R4{!_E&21a^ Im"-hQرX+rPrd"qQard(ke:eMGsf;Y4n\P(V !gchnhkQeI iͳ8b+u[l<+P WNGllb܃6~;ҼJCkL^kAY4t+^sVCkn\fC uZQeG,*ʳc qV_T/I9Vh-.xp0=8Xg[Ь5 ;kZkf;HC[.s҄O>}^O?fh}횋bQӜok}O eJB5C+kyRteuǂ,^k5rYC!qJ9,k{EűECG ^[uNe2xk"^,~ux-bXPfU^+eP(^E9R.+7T]JI/8VY]\V>^Q^ ֿCCY)4P J7{>r]sU >q_ fV^)Pʱht4rn XE#i A et) ,b-XYR)BiqJ3tAy(?}|C^̂rZDR)AbC$1ZTUB e(|UUv`VomAUgtUUn$(ⵈųXmӊxf-ޣ{t_5/ijHt4oVN5b+bYʬC+/Z{Ab/$""$f BtOKxtF2VTٛ|"$ ʬZyRU4y*+۲2ʬЕQVJ4ltI9/:ӚE׺&C]74 A\"4{BGG!f4Z'&"𧵍3Be/ra2TZw+[i Ƒx!֊6h65i3ZsQl6 mXGok>D nksCcAÆ/1|q$=%V~G({?<ѳ?^*_UYS\T6Ah5L}?G4ܧ"frRbmZk*EihBGC9V+Z4/154FY^uk2"Vfe,K|+ⴎUf\ԋfX9-YA7t7k(tIUMǢ&bC 1ۘEbB,ʱ2WUeܮظ)C ܡܦ?Yg*.qYU A3t4m-6}۠;)}..k#A\Wⴲhbių !N+Jbi!fb/!1؋Yl]HHuYUc92rIUyP(+IUo+ͪ\YS;rRӺKzx)ce9{;$qk5%^$+85UV&^uJ󞎆B&IMК?DGs_h(ݕr?9t:ݤ(*|XY(gr+VG8Mb_z_KezjeZcFA::q)hv+eVn(2)e1Y]UxA([c%8&e$NpDU%J~ $q%VFyN'/.+qi͢ݪ 1P?'5ӧd߿Ǐ>4Oyy4rWu n hW*n` ѬXŭXt ݪךzCfѽիx+^ufG7b[ VkIy+VUyN7 (sʢ*X_Ҭ7}e[e<\Tye_YEQeQX,K<gq}O{~I%xNPY4kʻ+ Vq_Y h0H{XuĢ[g4qL ͬ9kUkhjNWYLʢIJl !e'VURen_ xU>$EnQʟ}??O桲i~Qj+/fUSV+AF $b14u*,^u)UheUE\kJsW?'*2KU\_WʻlŢW Ut"~R^t*ωʭX[屲ʭʬʭ0ľX,&ዳIP]1̺IU&VtfVW{ʕ*7Fg屲/OQVq޽ꊸjVbWy#"6:UeQVVѼQr՝e])IPvu4'ݮ*U.L̪,ʬ0FUT:*A$Ţ(A9+Bb8X,&EL2)Ģ,,#1`2 F\$Nb؈I5B,n5rҽ= Yc:)4zfAYTM]ebSVQ1 ʎrҜ5f+$t4b8ElI\wŪ\){ʕrVvUyhUUYNFy$6*6:{ʭ*/ޭʾ+]U+֨Un*RNFĬ,q/8X,1-!&1K;FLhIͺQۊKruU~J)7ʤ쪸8z>?l̚FbѻUVnt7JP(IYyيEYĭ}eWЃFfCsҋltglyceVeVeQfeRTYUUTQMjTH &!&1;QUp$* bQ$E)1ECHMb6j8 1_#Ģ*e2kW"jn"tgUњnһY/(>ls}ݢ(4b8Ra!U.8Y]@0I2zZs%.z5zLݤu44ӻ?:x߱shv$6j@t4?*fQh//7r_U"ʬ}ͤ,oODbc8 IE @Lb' Y݈W/N&(_]4Y,:Uqa QA}O>};G}=?~ߩOF]?~wU#+x^*TV徲h+44rW[[e+`p2,F #XV8uVs{_sA7+ge֝+XHl ^ū,bxq+W>YVYů yNBu'J"6]U~]Y+[AyUeU$fUnEUYkrE"q%fUI\$N$ĭެB;?~0 ;CՈ"Wn*甏VQe5xbϠ%TUYt%k*IHF,[EPRZ(qPhjU%x8 b[!ĵ[AيUR2)-cʪ#. U(WnB{ F_W)7*ʪ+_QD)'D,.g!U%.7bfE<#fݢ![3hq#~^WBGFctћU(`pE &Lŀ21bpQEBGw0`HYFF =/!?\bcGhq޽5nuqqAYXK|X[FC8FǕrV6EYVW5b~լjEG|HbVf1 qčE*%Yr1Fa]E'+ #19poӧOjEwE<*?!(QfQ~րQ3K̪PI[!Ĭi& jUMEuI3UV fhvYYb ^I<bRJx_.F*%Ҝk YLG7ވ?Fʤlo&+W͞"eWU!VB1 -"IbW\Yč`,f1t ɋY1+1ɁѳNf#tFC:bUH7h͇_0F>}WG}=?~6XUx,ye_VVY fJYE3`4 .*rmpגfz1qlcBкC+L,ʬLʭ+ $q{bQ.b[A܊YūRdTʾQ ([}ez0ez ([*=9*rRU.|LY&ʭ*[!&q14b,:Ilt⎆kbWw։Unu)OUYF|L 1 ݬrVV徢Q>(#cbg1k,4ĢcQ&P('͎rV6'5*t+e֜Eh Ejew&eltBCʬEnMT:2`, 5*eQE5q<*EXD!$f/(gEŬL /."$$.h"fEIIl 1 ǸH,$2ֈE]4/ YⱲM1kκYvف%ȸ/rϱCMfBAUU*Mհ>0nx.Ý71Dx'..M[qH9O,8s‚즥vUW)u؍r].b7W*k=U,XmpX[bb`ҪM]Ԯʼn+ε9W7?aatuX0]M7u1ɠnb ZĝVz_~wiqSSP_O~xn`0Wq7qjbsxo8Q: Z7uh0NsN;xMV?ougNJވ&.tSAlP^XP.~C'bӺ)uX6euQԡ WUwZU+MLȴ.NlᙪP;uk6aKtc)B| v\mAQ}Ç։а]m&@<7@[F9:;% Pouf8U 7F]սe6ax0B0mfz,]"BB!A$'N6 5^?.!ACm()gpx!A|Ciwdsv!bעvCi/7ZծuzƝ\]!MOur3mJ1{6D:{:}huf b3Q7AL;ӽaz*qjWV/J/,, \kc&?&(00|,nbq{` ծÃī{˰[Yծu(a``vc t0x`\}IPCQ:T=W6u*M+A3( Apz#e""65s&ꫦ=jW7 ީ8!~N|(qE2M]u@7b_6?AԽ M0\ ƃވ`8+CU\ĮTLf<50␈ 2)IlA%$$ovjW"^Uo( M8ԡ*ڝ./$.JkײBRզԦvJkڔ1jk7ljWte`:Ss'?V̺6% LdGӽ{>1 İp/7V,n&twsÏMćx.|Êo/ja +bB,'feE9G'ZV7Z1պ.t>6ܛӉfqΜyMFďMdLHmseMϭg;q3.o!Dy/ał`*ġMbjIIYwZzLzt!a,CbPOծtq(u0փovqGăbO%nPaqz#njqQjSV]m;(O fFnbD+u1}S"(ďŇ{υD!uC=1\zjeՏMUmábvׄxL8u 9L L NaŦnB\jWԝ1܄CPt/dƝfڭȂHa $d* BBpE lo*U~ y Bŝ[UZNNN9$n.J˲TMZZW粮pWmYPզvsR 9.'MݩM]Mj3u.A;^%>6m݈݊ޛ>N⍸~lD\;\\;s՝.X\,Xăăye\W]Sա6jjp1\j8 c:8aNNh/] }g?4=zfx#ģx!gx';!~sQ7Y'b )ԃULwZ,.X\-X`EEBW ε[W7-]&]W(G-]g &b:Qb7ܬ7ٗM..iSͤ(ćwZծ~_los?Gɠ>X|ţsC<nq+ԃpH`]lfص@s:yfAi=b{cC֡u]n갰`M{uSW"ω7UԮ+Q^MS=D<7oMbSqS7qQħ^u :,OeڍB">VAbqX#uU2WwŰ .B16]զTXuͤ2I0=ӣWoM?0mC|(Ms'BAPA_3gN'dMX<`EXY7r"-n?кgWgzPP՗v; L ?6;1O g`*~BԽZ>p;;u7g]|, q;!ވWŽO q/6ov!bw;',,բ qպZz7кjZW:柫.]ݬnFXNaӃ+Ӯި7V>6=î1à.bWŴ"q'qu5<[]գ/˟?xg]8s&?G;pC<-^` n^}nR"=Ak78սf`2j=xn`Axk$^Ebզ3U֡{]JmWMF6uSꢮZo[u/B| vAкƝNg껢ncCGU}$ުz#vuSOL_xfC)W ZU]sި;CZ7uoP7q6ebxvPwꢾ,XoMԝ&n&dt';qSq Q'ī.]:ġ;3wu՚sz4ʰ Wu5:su/ YnMMPp5<ӧWsz1 BlBl;մ$,A`!A09!+V'$Ax ]^I܄819ouW8ԦuE:xY:Yr^QΥu(‚UU:R@mv'aӣ9CcMNLWU>RW)@{'&ì c!q/gCFՃΘ6g^^X'߰xc`qXl^ڔĝSX9|INk:,XO;YI\vuugAjSw9=8sBOs:q_$ BܫM.CvŊz~Z>!%$؅߼]otUEl~K\%,U"vq88Ih3RV7;+Ff8UjaA몵[1jX:6ZaN:JZWŬ;c2'⦮7vbN [>71JPL&vtab`IZVWu_~s?R8sE&n-WECV,Ţ{v˂`$v]Q7X'jL 7%$ ^ ) ^Xj7] .P*:OAݫGs)Ab7&J=zԽ"igxkzADSpp~b:9M\.[,dEIZ؂ԮMWGu(ETaW.FbN7M| kU|UP?V!O%Ľxt3S ^ܩj &'j7Q10|, s>Wfx4l01] wj7Xk%Z7ͤeMPs\M ؽj A0ݫRƫ.KH ߂o&vCۮpr .EJœvˋWIPw,,n(\= L{ӟlSi7\LanfbaAV,t%tP 6u)ָjVX0m) NX1/C Vw)@&`v]"nJ= k5?bgSs, fXVV,au3 wN~ydLW)/B0]mx*6aDQnB)ʹ">WĮ"]m鰪/7 u)BbXi❿ڝmή L$^&$D:Qaج!Cm7K)bմĽ0z0PsսxcA,X]գa;L wF! YW>4 _`C8~_~_ Q2š&0qqNLg7+,Y|xo+@0[i< °d̺9 OԧZBὸaR vca,ӦuC MJ:ڄ!ţx.ab`QQER0x5Mw1,Vos&kp' 0|7E78'+^bnq:RšjգbLR:,GA=E0NJm*>ġ>Bxn*^ j3Da֮~h=Μn2,>WAcQEl4(nnzg8 G Qĝ"v3XPWc00QhzВx4Jf؍aĝ1݉w&/n^ ,$otCM'KBBmūz|vՒSo7zAs܄.qrFb7˂֝wR깱حu(æ |[to,vG#>7<7ݙn7Nģި]A]arB}$A05M1L'f6aN050ܜQԡnqBZn,X},6u,t2A]Lb8L 9u5jt`qX:,_~嗟os?Oɠ>x?a`bcs'nQ5ī".`ł"[|7<Ԧ@VcLzuuSZ7'[CH61"!E\~l;SqӲZw❸)+ƊԮ6U6uS^ܫzØ̒C=3zīkceu{]=?_FQ jVebԫvXY'V,u3i=:!>8uUCZFGa1ˆ+09OZwPz0tSu> 93bj²0W vW ␸Zw3,.uU!IXά':7u"m)QZWĮekmE1u]Y10vã؃[6:?6 ({ ŔqpW~ ծ ꛁn~luX=i݈,#vӏ%_G_~?xWJš>'_401c.^)S<vX<7ozoX &jWb aZF50:uS=iG"&!v o"NqZV: ^G=hQ:mP&RYMQu:$(*]TkN0P8ĩ6E>ZM{B駦SbW76ũ,qz7a6!vC-6EVuCPkXܭ[zibYajb_~?˿Q s'>vlx`x)fj3Kӳ+7f7kULOxnb8a/;,v&b$AMAj8ԓ:ţna3< 8ծ6u(*)~ Ll֓bnŨ& UDTśMce:0/~ d"4>V:&!6Z]ăiv7Ԧ :Lꦞ&N(ԓԇ,6îXGÃ0f`2m&:ěxiW/Ûv&7Sg[0ò0'3$$ӛ%v BgP- CHh%qo˅1oKZoZ!(/-8+ -sҩKii9[ҢkQTƮk &jS/]N~^pz6=$lz:ksu &8EL2ܭ$%f2 ni313f=ZMj3NA}Nfb8J׫0bL,|bMXm&M]J=CqJmTVizX1mn`ύ֣/^[M=xnax2 L B0=J%ãziNJ&SlI:).nbo.ea]V!❅,\be2/v KdEouZC|E؍P7AmJAiKKKkzXpg)FiYoJ100f:ôL iWhZX}uN1kNq(q i3j7l,cOZ=_~#_bb+^C0}O0ųgãxe7+@ 8LoV2XQ8 i5:  AC7EP" ׾--MQԛzSզv-#(JMաv"zSvCPţ"^8TMxRo &F<']m]j3IGDDYN!މGqNF=&Nij b$qCRԳR&NXT?UTMnuCz2wu,vkӮ꽈B1AOiqxgEh}BRG;e8]]l⛸I֛é^M=~~nIk7aWL?6 Evqebi7L"np(,fQoTz,+f|LK|o&&$0["6#,` YIf%B"؄K\or |p]WAm-:+k{]Jk72'sjKKA˨]KKujRz0CCӣԇZ9=ӡ .ZQ?QOkZX&8e8Ltv Yaz wL6q&L&&vCݸpvSL z`6_ӳ0bf!ӓ߂?kBjŦ\PTԮłn]abxzzv$~h W?⋻šbs~uNqW@:= &pNhb`vs2jSư1t3<Rl&)ύM}Sq%I%^[+wBsY20)  mIlVoVq,6 NA` 6.1JNM4*BUn PM2:ś jauS2PT}3]B /Aě*`8{A}g nn8!CAKʴ)B8MuCL 58Ňp6en:kM oqC0bb(Xbu(NYmIN=+Q=(u 0ީE=NC:w?$*MէM/ăӃׂz'd`:KT`z!Nq "Bf>Pς¨La7q-b2MhI1j`x3L ehͰKGp3)`S}h- fPWCL00LM; ݲ:-D"d:.r \^\|%qFBMI]=Sw¿9|u/P3L4rvW,nծ@PVP 6RLԳ0NM[OtStN1MPwl8up70LwS LQ6&&w L2}`NEtA|uX:].KEj7ðY`zgpA|'vW\µ\. `ł%%MP ճ0|. .]\CB\05a hĘt8:nn8%A013܍7i7sn6bfua710}'M,.nœQnb`Y=Xf2=[X0,ݴʟW9MYwvBVNr!HVaC_~?ϴN^p~n'5a8L 028,a873q/6hx2X&f,Q~u֏ԛ: {8]0L8ĮE=n٤j7BR(R7qAPjڵu!]m vq30z>Rf)QPQQDꛈhV8ųz2;A x;su 6i%vYYRզd,ĩ6uGw[86ձ2/ԦN6Z=(Yn8fqg">?dج(b7݄xR}g%N?x'vӴk=.nf"b]lZojvCT7e@ԓzvN6Ó1M n0;c2 aSߴuL7`.v!vc-^%1mDM6ML.fd CH.rur8$dH+\c"M[OZw$\$Nߝ ?ZN(s\QԮ֡vZ?71ܭnjwqhsҺ[1z j7@D#޴e`zPJ㽚@| uY`b`: opZ/M qb/N8\.\^txT靉+\݄ $>wj,v ݊k].6dMZ+ʊMvéKtqNKfص;%HVbxg ģpH<6\03n OjSis"dص(`o]QL?ڍ>%dpI']M->,auX,dŮKVŃKXb%,XVV,$\q!VKxV7\kS.w--duwAkiXщ+Vºڭîk_u+&z0h'Lz40M+f0]CW7ڊŪtթe8LaЉaWIA\/7F^ &_<7oI2=Nf|AjSU]m. ugu PYI8}a]l"6aaд)&Ná7N(UԡBPR:ԣ:kp 4eKS1}Y튠CuM$guӊx]bfE1cDPAx7qNRlM B`R,(I:ţ?,q ˊ/Ԧ(7]kעN6Z=&&BPQÃ^\: .I6Pte`NM&à M&œġNáMjSz2jSPb3@Sw`Nwc]PDӉQ&&ו3q4'cM7^k,^Jx3',X$e^iLaY<6A.ae"Xt`%nu5dxPevkrEK|^գz ǡڵYe)s2vskQRVڢvnz6<6!Z&AsiS?Pwoz00t]!(BV7ţ8M?1GÛ&k=iMM<~bx-J10ݬ^za20v@&oX/$\k)znYZvN=Y0|dn^|cg?: ORO0WݜP0|g`%ÃL&&FP!'!Nvs2=8ZrH{gF%"n  $Iꝇn3wcx5ii1>jGӋZIS9q."06wAնltY"NˆS† ξasʴl U_d $^M,7Iܴuqh\w\P Ii:8dw\6֩ՖYzujZ&QvԡZ\eutbL n!91|T;:s-CބY/bdX&Oe NA'ş=G~o_ahbogs20.~N ip3017MOòa6v6uRZjBfxSGMRK|OIJ1xHWMo7MWjzˤމXS): 8' qS $6K}8īRԧZ6CCxRZTZ:]10(dԏD}_ZOԷM=E|֋Uk)e`:͟SXʌNu/||W˅Cٮ>50#F0m¶#n01%vwS¾sHd ; n$N[-[>-ὶN SB낶\ˬuUNta/2:u YP;e$q%ujPOYc:M@jx_=ԋԲOib)وN&!hhԩCSBK)^}ȯ~+ L  L?g7 ?61{i```b)~@ mޛa_v)b}ԋ:MRK00ZMRK|+B4°L0}#N۰DCf,E^Mwc󭁁N"(J&IɈR"(MRPŏnN&馳!qvj(DbzJ$U,SSnbTߨW%)NqS[)}ql8%q$쾯E}.N)Sٱ9lS=Ų{J(uSk)u/Aݕi~Bh7=c LwqqfbCS,uS(AS꡾o2,Ŭi&R)Ӌ) bs21EL :CC0= U=LnzS-ihٽS?7O]^$ &&.>|_/\K0|n R&&9Z1qS ߸8!Na7`0-ebia~`8L21aXdXjN"_iۼH;_6iNF}8mDaGp vŶyvv; !8].݈W=n%J[Z۶:%NS=z.ʵ\(JNjm8tnoNJzhϩ?1=a&nA"$^e70G!ٜJbZfSkD= ?o D f|0P .(2bټ֩\BƆZ6:ԛ0Z7TӋ1|#Zbqʴ!K$Æ-$>._\8 dl:\]i=$vW 7˕rq%w˅'A"c5N̝V[7qFfulIKKKJɆkiiZ֩Uuj=ԡnhYedZF|tuS0P7Q[?%wU,Ն7qDRK>x36f01ЉPˈ W(W?VK,ŠW:˴+6piXazSBbSb 5?xl\,SzzivK만Z?t/|\C1C|Ke ؘӜNA0x ÒT!MKw]c8%NNct^U}!IO0@mds|#ljIZq%؉/$$RK \$_2\bck#nYW8%; +/֥CS7~0ʵ+ZeMu(ݍ1עt{zQ\}qM;SթW;jzݠӋkOӫ4Nt:mNSJkWuR>7[Zbi F )ě8:]szX%>7x'IJ/Q?C@-0PL z驵 F LBGu*&2(ŜWR C``8 K20MA=ԡ>7e K7tJ,%i)qJ8%| ƫ+B8!IB˿V\]KBBb8$v7%{OO { ɜ]:qԖNZZ:iiݴEiiZZKZ7mi-50Pá*;ß9qLiNpNuWߪ(Cq PO1:)$bDe:)e>70R\-ax10N5wq; r|W) %$pXV¾;>h= ;uζO].\~E= 91: PN1<Q2L˴dx(bIl:NSSCBвūR}-s2'c0eX&Iw&&ưL:&A)ezH0}+n?'A°$(67H8A-Rī8$ԛ(0c 8udzQwuwb%(J3f`hzË:i"D(E|_I"WTKHwBy'" Ei-Ԡë ROu(7i`KWKQ?C,BPI\JX ⦭--scաCXJBk3\%?W~wwAK;ZuJ_}׶aPwL;C2-ӫZ:NicjP@Lqi^EMFfSZKHͲ{9OCݠuh200~NħZ)(t!!t')0<$攰$l;Ɔ)\pq:""\p1pFdHaN_I[VmTdRr-ځ}8;S {wp`g2F O 6/:1 bxfiL Xj 00XAn:툥(b?1id2t(q(u6RN9b+)v/6_;6,;^⻆esÿigx0|fxğ)i4-/p3/uW n.6T=Nj`PzS=2C x1݅/fz5*A:Q;*Jx*fZj*Z꩞TwT7}q!⽸I<թ87Eؽ1!zUK1= .*S"ob)E=]|x?-"A,!AHR;o%uJ'^6w:=lؿxEMCe`(Sk)ueZ."~NTO nTK ԋYOӋ OԧZ4L !÷wЉXexiC`sqoIJ &!^ա~Nu)ƘNGc8N26L7qWq32Eqqū6P.n" Kb0lԡi^MKZpi2}8%Cx az_ŋ N;oj uN"Bě?.!_s!r /^T[9餥V[ujQPphQ:tԡN;ibx5'azd:Zw֛[ԋzz(Z Q24TbLTbS0'0<]qLKzgb!N ]pAxӴ$ذ髻ׯ8%%ruR:]J~wjP/~>xm>7PbZ`ZWc0aXP2i߱y;{pȑX ,poCmXRn&٭sguNIMOd pIJ&6Z_612MKa:5I1w75h}8{O% qqӒB[ IQDI)LWÓzAS'sa2/mͲcC°L9ó̰L4-g'/l"6é^U={fSK}X>CC@-īaC|0c)ën0+>@Hg4,[-t&n( d;A-qJ)1PKPl7ExSb &wBXbXjxS`LYR:)މS6KRĩ^A=ijX.E7qslZ,ÓD<׊N"UI% AC=+ !a$&"/і"b%:iDzilh-AB00Kw ZK-ҥ"- ~ މbꃁ9= OK,A*lNZ9Qmx% &ӏ L6 WX'gE|N &Y^?&>6jİLj ꡖLab0p%n8Y]ư2H0݌1,HxK-,RIBs1A!qw:e >ishI qS9$ph &CH0]Ժ:-rاDAWߜC[.Nr՛뜚0I8%Z y *up׺CPRB˰\p;C< %(eԓAS8M;6LK,# ̲cN`z)óz"f:u001góxa:ճxN$)!AHe (9]…awעҢN-6:P]8 lVUԡSw RJ}4(6ws:Vwuޫ\|`\I\⧆%qWJL YfM)mcN6$f6f[e7o!8\ ZnwFH$/c wvaL}2M[W椴ECpepjivlZ][ZT[ӚԁdxUB'&a8M0g0fH06s"2Mbu7˘ZJ}bs7wtl}:2?mN4"))u)v_?yَͿ?c3e{Û%n2,A1-@xq>(>>SmdLDSa p*ezq7 00p~a3@cf/nQ;ա(JbLMQϦEP U7A K}'EPAA,UCWˎ7MK7fX&én`707a!aIN@bZBb uf+zԟ3h+ NEWz4P;PڨLL ai)1t("3db,+n" A\D{q OJ R:)'#W! L˰l>s"is`AJK$NSl!ԩխnO7-l ps.eĩRU\^%鷖} $d#/^Boh}_ԡN-Bʌ*3NW6Ԏz ճRϊzS .>Q?7؂bh,YL:LwL^U,QP?68ūMz$|Fbw N Æ}#mŲ}C/Ɔɵ;Kv; ;ZlnA.$$\ 2=|cn֓\f欶̢ԡn6uQc/)0D)^ fdF 7\e:LEu0pڽ$$Na21 )́R;S=fn{6<A}n pLKS_WPä>gut41z2}lpM lb0!xOlN%P1zSE1 R;W&{9-!7I4l̈J[;. w;$A -JI{춐l\-v_H Wݡu'6d2H^yIՕW9SY6hM{ņZ ZZ7UzzZ]F-aYSDĦ!bRLfؼSߛw6L9z/B}4,:24 nb`8RO$]4*Rue`D՟tpǦu`+#́XI]0x3Ax ߹%POzSkԡرaRS^, - ]< ߾9XZԺZ]J:)%͓Z!q `!qWS69%~%&jIԒ8nZ&s2=k1HZ&e;2Û*uưg߉S<$>Hh}$q6 dC01HHq! 6lNN͞8m; vvm`0J"#l6վlicdg ֩}gY7miө֩lteNvŕNK9Fm{iCT5$2P14:]؝栞dN&&ZZi)ZT?f*MD܈LZN L OdžWOM_=g~ڰc|T{ŧesp7ӟ7@L2<= D< F70\%>Wu@|xpa8aizV2ӳKe bb$N0Ia`0*j4R7CPˤQ5RRKi-JZZ?X n"ԫ"2DMʹ\1VL5̄Nb$( ԛSbgW?sab\UnNKQ\Y"CfIP# ̺Iß45^hmab6"MjQ0ZMft&Na ۲!$$$$%d \e"NvҒ8ꔈ8dxn6k~)ޞxmu%!oWG/aN!uI}wFi`NLmh\0hu e`Z.)q7ē֧dN\00waZm:uws:MJXPdsKaě`ZF d2q>W :}of8A&':T៳[.z646N1`'vK‹7C!!8෸KyNK:>WPv;;U}YS//|tZ{21z2-ÈS&Nd:l.iI6͛͡h 2)]4H8%$l)B)z$Mw- éӜNsz ˎ IԺkJg-!?ZSK21qa`Z^  qA&!Hbgc;i#ya .h 6Qfmw116=wfIS[ZFN7Kis2j^mc0Q3aRu3ZTM0DC!9M7Y^F<ԳD'C'-u({P 9e"iI1FK¾I bt؜RLABJSS j`8eX&uS"ݡZtcxoja26F0H4m'#aCTk]QZE1PUE-!QETQ:@=u*UC-uKWAo0ZMMCH A 7u3Mo`RIS1MNqaJ'#N3$Cbx}fb-Ess!މ7IKaKKީeO)NZ (JJ'_@Q:P.^oRZ[s֩weZxVbkdh룉8Gz2;=8Zr#kXg$qDF$dn[]O&CjSs8,OKO G "X㛙,K\Pď4SzKey7eS%jy.0Bx8%Ļx fl!$ a|P8uWc/N1?7ka3K-7Adi٩a/I7~) "Sn q C8-Oq Bna q~b7{پ|qCvذ"/lf/Hqj靄y1#_B0#ۢr޲Z*--kQmugZRi8V[֝uN1)rk9.:,:cyXE2Nky*°{5wi-(fHRLY.EP,yď[.Æ}y(?m,5]HZ.?X~n۽}n_`Îe?677x3.Zx\6e8n7oF\ Fե`”⛠ee<-f|TeXK&> U-솵\Je(J:̠i 3A=Ļx%(xCa b%JlfꣅL|o-irԠ..AP`x$dPTb\ꩈB}4{gBB?υqQyS)TEP:CC-lpEIi\(K]xanPZ\6O4!Q2$E=թY^ u?0>.3R`a\  '2ԫa<,/:daepkaJ\xS0i[(ԛxUr,OŰ˩EKQ 6)qja 8CI i:l(qZ>CSK8$.U?:8K2lFPe/zEB_V{ovԡlEP˶T}aG:xu$/{ +Re!kݛvbq6NkoMiˎ=uP vrj=eTBNK ˛  L0.h͡uSxZ$Xkԛm.T!bTԫU$NuOe_XYSCZƏzWz5wn~F|,وw_V<$.aߜ:AHNͥ-ܱw)<իzذc+s.A],O;ԩF:; }17ƻx0CƩ.-꒡X6a1u bSJªSBKBZ~*&̸,H(Ɔ ¾;,`: )UDQ23>Tī$~)(0LX -N˫, ;FasȍYw%V}g_ȆN۝aǾ웧E{ޤw&tڰ{wm>[jkMi6)-::%~'mG!a(ͥ(Z.Yt,3X!ZNub1+FX޵,"SS)6,da{0,O EB]'v?(ݫ`smb: `r ej//?/͟W}SD\0vf\ooqB0ec6qooSK¸$.ԺSfH0"::uq 3ތz6q2  a9-EUZ".EIjzSujԫCz JKQK<$"WZkRDfRRRR\77!iyW!R)qjOjԻ%Nqw)Esa<BA2N GqӶ!.u 7/Zpv9tJKiQZ.m=esp.ujQPZŋ4 u u՟Zhe>s:hN\AWps_S!qJ<byB:N2 +.5겈W+`DB1Xӄ8,wC saƛY$$q q!0Ȱ +lqJ"P7CI}gsSwīb\JE⛅ x ,IȆ!;E=ؼI[p'!_kzbyZ.;B {5.'UCsQf,o6qYx7Nf1J(u(00.˻d9u9ĩiaƛjlx3)bK`sY,MYJx3ƥ:Т(jRPMQԩEP?PO)ěxԥ^EZ%Gqe!X.˛.K-eUBiy)U0Xa!"NK\*кԫX8%w-ωWas)^Sn B%N /Zq)z866J!qj}..:.:ԩEhmQxj=թEJz莠~*XeJ⧖AS E(;QߴT$b)v֢kuEKr_W2NqX.0f?x1>1^zx3X.3:K\z7.qS1q)BE!ƸY>Z.41k٬m\inH dY޵ic --S熖ĩECZⲂ!q!l]-ĥ!;)ݿzW"-,=$$.7mvovҢݝv$"Lln!nh27vlܝܱm.֢ԡZb ;uLRe6ԩu8,Z?hqsZջ).*xکE7U,v,:SGAY>SؼY/W!.C:X"8+XNZFIP/]86VrZ8i-qtwbx` rqs sci_rY x*kb쿳vqqʎoqJo^^꒸xhQZ:hΎ {CD~8_ 6~ۢe ]N ƫ- aa\l8-$ka1` 6r $X`X> AEx:%I┠.!rJ<$NQV\s8,V%!˛7AZ<$~i|.a9υl.E|%T"q%ذHTemQ0X(ROj:E|nP? KƩSOTB]HH=!aKi_J$ďaC<՛ě 5NA}^-z#˥&A ey%TL]TGSob)C[aF,uXaS]2O C2oWEX8Ȍ58u q ذ {HěCB!aaC=oƛR$^q9UIeCjPҠqn)BxUoܼ7ݡӆGm7n R{ٜw7n_wlrˡMA)]uxKԍ)vPUˋ !hY"A;Tx1XfcԻe8uU !" ֩~n0A7aTī,TUVx7]fīī尜f,"uJh=-ȰaweøL,/Ļ;ixX!Ȏpÿ!a7/KR{\BR?ㆻKPԫA߰[ZOrc}e_`qƻb1 /E+)caݰXXt`& 8 qXԡ-AKzZ$.񩖄~e qɰ۽HZ^`g\f9; qXX. a$t1OI kY.x0H8,",9l7Ǝ);v9;vF!vޅ:7CMf3,CqFĩe7]eVE;ro6N~ DT[)PZE:ԛL`1Xê0i"iy1XEvOC*YԥqYRO݋qX,xY~pw6`PBܸ,[{ذ`__"_ˎͯԸ,?^csTG&~oS,4. 3N;`:zׂaU k N;&ތ" 6O.a07x52n)>ZXRO4FTǻ҅APREQPĥ.Ei=%^՛zSD)qxS&O%7MY>K=-D|Se9ա{* a9eP &tqJOb[.TzWAMD7zW? V ^$ ʾ<$C!qj\BƋ}C$Mԫ:TZK[[;ի0^:u)uSؼ.T/!^՛ayUkTh}*KBYNuo!˫N|0.s˰W0Xu S}P:ԫa9,eQOAX~:%N)Kȸˏ7#Ä8iƠS8%i Z!qYU ulTil.7j=d-vԻ"ZKf#AHreW<*4"~zgEdTf)h]Ќ!,޸a" 8evO#Svh7w9m $!L#(uejnom-{m-[K616zC{wZo mӅRl;-ŔSP:J}ī!7KXX.)eƋ) A)qh]0gu)Vhƥ'q)lSKݥޅ ~0X!X,XŻBZY]Pw `\Ea\ - o x qO֛"a|0!┐AHHI<$.qJQڶxS8SOo6?KeD<,UW.>-wSݍxZ.mNk9-?X-,7jջbarYKOōiiZC6O;ֲ꩖mx7a-߭qX.u ]Z߭2ޕm:T}֥.-8(UEQ:8~jLT"wE:R]CŸwqW:]P..uWD\wiS"Sb|(⻪Wuӛw q&qJS. $Y^$CqC6$SFCRVjѲ;l؝PZe' ECZՋbťXuC}n8D/0x S,⳸$]6ӸweHI*.uKSbrEZw]]4Xj<ˡCEBKenS am28%Ⱆ"EH-f l$ 6E;L)6i!q%.ZX-{]]Q,CB"YS$$dHo!( KnK][z(;^$qJ8FC?JkwWw "k| *uvvh7T[ZZ:nwhRBݡaԩEKzWPiC8-bgu긔e0.aRrX^N,,+.q .E$ō) B..u*c-waya3>kp,tlxsUC\6  ~!C!!!m'7 n7EBE~'7l:8eg8.C8e-nX̔Eܭ܍ SCǩa\Z uԩ8%(^˸`w?qx}a=K|v[N3K,-".E}Vl吰1wERUz4LYD<-a8i„exB=UTDS\naggqK%-cn.ˆCKԒ8(6eN E]0U(%.uˢ;qYEi]J_\4a ]NqYPEZDm>8x,Su0^5t%K*!A1`AETEgx/NW%az|e.w ?Z +,OZN?X!5PY 1X$̐4.qXX(oh%хw`X`!$i P0R0B]*a%CJ*P}wjm7/RʊlNW8=AyWEhrӆʞҺm ԡN-vmPbCR갰P!(Ek,e߅S r0u*rwkkSi\ C]`:` AB봕: 3 u[u"Aʆ 6*zec 6%!X],,,`y*``0XT_fCC!AHHY c°-*AO-6Сe<-a<(A/IĻ8ey0;{H\J98l6l[ætc:l + {wqao.'tܕ ~7;vwm_HfƶovuZ{ވx_%%?b;E]N[iloNYuG6Z¶6cv8Xt 6R)SqVb)R jeYZX̰ x `CR:uO˥XK7S`<,"Aٰ۱{K\}qKP ̰Ɨ6-?O6]KO-/ċgy,qsK,,Ocm\iw6,ŋvwT|J1e|\zX7> Z.qK-x VXqY̰e0.n0BUi\ڢ(-Su8zK\|ݸx(5 qKxHPSI:8>Q?zbh)n*3e$԰ N-)x*Y}0!>k,ŋ8SbvC.E07 $>i~ %^ K}E]".EYX>tthݵ2R:l]Yuj=(J!3.qC,_0OfPG>ӊ2^Ż8!k%N3>:Ż%X.amya0.q)$!,xJPE[īR|aK\V,Z]|XqPzX8qJ<,L8%B8aot9͐Zt!>eX,2>Y%ߘ2o B*Yd# #y#Fnd~7eg| Y97}=!qjKxS".uIl6fsh6.!HHӦ&lJ7w[]P6;›&FUZ:]ũerh$z,υ0I00-JJuʸqYCi:58a)xQ?06ԡX,.*S`yi-w!.xyWơ2f+ay qZ71؈Cƪ8);3Ƅ [< ̍%qnߜ~tCoxE.Ai=mٱa/.N-߾:ԩ,:Ͱ ヲBriR,,)|7NkqàA qX.E%NqYxHEK<$,)aa|-!!qJ6쾴mc2SġZ?5^%.o,Oo?ϿGۿyڱsO?WO˗x-}weB|7es06Oa-^m][6zע,"6_  ˡ0.˫Z%]e\XnBQ#[~A=m F=%e6aZ-"lUuj.gEZU -EӪ(Tz7.E\k3) -  A1.jG$qY,O{; gwcw][]GiM.N-+qJ<qysŋSP QqYf) d!$.AHh~ -ꔐ(nyzuJ|Ғ6:tPZ:Zԥt](J`TC EBz:ġk}P*(.qS:Pğ>vQ?xc9,/YN YnXA}m9%Cպ_A<,:e`\qY ujwXRn4.!N\" S & BmsHw `ˢKho(u%lNc|,z5h]ev7 vS,,&Y+B#9fsa*=E8%nvmQw{BY}{sj=(:iǶmE\꡿l-! Uw]:,bV]ww~[j}7Jں޺:U֢ТU}Y)X &N!>1N0JJ4!XġTꡘEJ=Ի`i`yrq*2 X BA >YH|i+`1!)qZxF6n7ݩ?a[ !$w!̍YN76n!q9)z~,:q?5.7ύo{*⯩Sb/X-?Ww XK|7esYibr?͢ ]ݕ.,זK||Pf!2Nk-lX.Twmoh4e!X zˆ%%,NukA ZUe9TZ41XU?SqX^ zO% NK1ԡFxe\xג L뻴S4e-i9D˔%.aC1; 3^ŋ_2_S\vE,_@Ǎ4_P;]bwX)umqJqH/EZ\6,-.Tx颋.VxA2>>a!aPe9LQP,SzZ>i8,OjwExJ\)XkeSqY:%~RI__-,!.u {u\o qCCRxð 'e,Ka |rYQeduCc#e76 qJ$6$l!>۲unsH0L|=ԡA4n(4SUnuWujWEdzm6EIƻz㲜PiQA=,)(x.%~-RV:Z~O!4R]]&ZIfZ;. e׊xKGEU/K:C7"%5SI\`9BI]-f~2e ˇ28ť8ĩBPax!ƧLHY^ `zx!XԛIͥ(.A!Yfb8e͢!Lhl |+ °cmd[}ʶtƾwM6J#"hJ:r (Jꥈ)J͸,N\͡teq fRZ̍â"f-vZr رHl B;6qsNidžps) w[U=Ňp PP8lIw:4Joԍ5SP`h]0BŸ3+NilBi˥SB1rXu(-NŠCx3XhQ"AKxN3N 71N3^vi/`_/i! i\݊`XXKl 6U! 8K ;]Sif,vn7n`7wZeC#?K>$޴uiICZP 6.2(Aitc@)jaiħX2X(Z.YXkPVYf9-1˧ҐEB]PO]0. uٽ,".ݰS?vvlv `߱1rK"(-.|1pwZ/ 3㲰"CZP@UC}2qj1(JJRO )TxWOK]˻qY>)X e9]/u`OR,5. Kx,_ /q P ¸,2$laa^=Mn *:c8)?[O3lڐ%"!F6!mH&ۍol>,6fmD) ͆ס% J\u JJ2 ty7qٝVH"K YN a)%RaadžQ!־E\ZZew9t*J)A$˞ލ0Ei7m}J⡭MZA봗CZ NF[t:^ ,`zjDR bwKQSuHYX)u)r(](ˡZPOP],%l ^_l'nMS)bPĥuj<f4Bi2 b07`9%N Bm#%72$odiGw׍)A;-fK,7xss(-u(-SK"!.u A$;6NKK˽LQZ: 6N-˸ v: ԡ%m!Z2ԥHCbewF\AHBIH<%$ޅ JSį0Xiߙ!і ;/uՐ"EڙiyJM!(6Zlo5lqa gll;v͡6vlIa s6uFn]N)Z0ߙνNNɢt/]UZYC\fذaXeU<;+pGt-S53־du_Xkb0}aa9PXA"b Thw,uZXHX˻ر{u)BƯ uN-eve"hḬo5^,/]/A"~/2?O?aY3cٲ0ذis0؝ol}3Ưh}^L$N+%,a˧/3ج BiJPˠV%aƧ1.5RO3rCQzW%. SJ|EPCKEiԡ{ ġX8%$v&JA]:,xY1e`ũj<ğ-,CB\CVe%:a!:MPVZO*%k6AiaTZ,Co )-!ݧؕyRR,2AK{!erL<5L؋0(eRƩ.ԛU).{zxx!.XL,AIa!,n,] eb 6 X Ƈ!ؗKR\`  Ưԩu˩Ou(qYb!OP¸ jqS| e.% k沑8T۰-$H\bYl 1NC<8lh5 ;"Աyiаq٭I=MHE"H,ujQ|4n;6[┛$]vOewPdaaCZ$r/jvzvwFvCjRlXƩ0eck8NqCi=te_.Šb'HiPZL)t8M-XCEUf=.qrI,]^"C`y,! 2dQqYRE2~ka_LO'AHaQvLPoRְa0ćPU.EC\j% ;%؝fq Snn7O l%C_8%Nw;lo#~'o<%d;.tAvؾJZ$$,]q| ½SxNndq-r]̰;SӠ3o ,.YѲӌ`sw u(k'.x8尡a؂b,/!4&)-Fe.,7bbߜmb2i-)nL|v$.Zd`|Hmxػ$NY8NC7m t! m7c}n;ߘM#myJMVէpC(h˔V]LXuZz#)/ )ۍ-N?68?B?^÷ХXk7fda6Z;I<͢8-EZa EaZJ,V=Z,,Z?ٜXKzx닸 q6PVxK\ l6}aw8lؽ Zv`>p4v`_Q/3^KZQ_dR@ԩE0""*S%^&NunK=t)4(ڢ.A2.uKC]J]PRZ!"XuKZEZeK]꥖~ݯħTKQԧ ӾP!LWkqr_w"JlN K!d_$!$ E!EazݼC\P.P\u(S);ơ,?)ŔxJY~R:S2 ТĥWea\'ŠԯKw,wAx;˥˛KPePoU' B[`P"qKde!iSS}(u:Ua\/.c2W"Y.#>S15:$ Ya9Nk#Ȱ%m ;-K,mfWp!qjQBMYamQZ_'n) 8aТ.!a-fXwVHEx Y.7$yH?<6ICwom{EرO]JJvl{CP{c󔈐ԩz!+NSkͲ?rjuhQZCC,ZȸTZ/A}U8L"0zSbpP2ܼe\0aaŒ3f2#>HåN-ݢA[:Mĸ Pen~بCUQ%.ujNSP&(u8uuZ4 JhR$(KPE+by BĎ$"+^겼[.AQ?ZqY,R8 uڃx8MO%rԻR?]?)AÐuD )Đq 7֥۠ħq)JN lnYԺN7uҢ.uXSECQb * %wO`"r)CQ{0>$܃:ŧ}U5`ո(k"Xe)~SaPPu?WЅ,w?A,/]O1PCaL`-ky)*k9K0nÎD2d>|,Nqڱ[}ڵw{(+[!T[Sc߰Tv8-;kHH|jh!AuS J>((Oe:N-B%%Kk%qHBLNq U[CYHYEiZ,{%.U0R%(}GHHi0faZ )qtOq8`P%rZ>jyIqSQirJ;%X e㾜˝ 2dcߝn7SvFۍK7 3N.Vf8 NHXi-솻ӷ_=}֩UZZ8MY eGK2ei6֎L8 --J[Q6 XeJBǩRi,A0r?E ġ AqCzJZ~T%н,N1.)aa-hHh ;DSOmcmwKDwۯCw:kl7͚Fkw4q*ί7&$|qڰiSK딐l-ՖSKb-N=N3;qIZ vT)-Svu*ZZ~:h5a;ZV반r.&־Y.>.PfJ.varjO -AQSf.-2.:SZĻxY~j{6r̸,%N ˥uJ"wo/??oxY3S*?7gf\,wu!.es|uzSP2~naqO 3"ذy3 \brScY]KQ0. ATRZUMĩEQ2A< b,Dջ".u(*%S8Ruj}"xKX.RuJV&ݡuKK{\⻅7-kyW{K%^vA"q wiNB!.u(B.6KKP%!!!A"3onXX7u%b1$XO ZXBČOe8!B mEi62rCJP fQwvcQ;Z/ $~aBqolÌm$!}g_lujiuhu_Բ#qJHdnaǺkK!,2ew(k[jN-]q]FKrC%¢h,Z/ڗKMqZd\CQBBt9MKQv˩baEZePԻ/A|}gavƆ}wڽ[ d2K4ݛ;ϿO, \q\,_kG,1!.,wu/ WlXA}P?7^R˧ ey V1i0K\6le<,Z4Ai= ~4.EfuSAl."XdP1u*:XPx JOIE>%$N--%%.S.(AXAmaR Ze)u˸l(겡eZ^ ]CiLX UAť P?WĥN;!SĩuJfwjKqC|*э$kآ$muJ|Q6㴡Yt:K[ lN,֘]=MieB"d1˧AQSxsuY~.Nw&>-EBeˢ?xWaK1>nmL,iBn! Ei.dxWVbySzW/cqJpAH\,&N+:u0aa8$ ) elXXe5Nn$27ơ6NBkS {$!dHHB0!!!|[9|A>q ^t"S)!7!O.{6V}$tc!;:ԩ `P˸ٱ\BBJPdQE8A,"^6ݟJ`c9/ZOSĩ%S[E^6fg9aÎll;-$(\ⴼO a B=vAX”_BndG!L$l7 im{e6fgG68bv6MMaO;tۘ CO%6_F[;N]eU:ki[YX$XCh¶!%Cˇ&LUm-Xw5dC0 hF8 `aa\B.ZqYfSТePB>fa"(uI\q"^L\Jʠ^"(&N SdaOnξyڰ{ ;:0D= wO71IoU,83{{ahYwuK8Ļ?,2ՆRC]&l{]KX.0]a nNލEesYԢLh ujE}5"Bͻ:aPZՆuY6q +Ӡ.(z(JN:NwREUcuKOAK8%.E0Sv!r)uX(iyh! ?-a/*KDK|Q;)]ĻxJśU,!~/‡ORS:%^iS6)DK/!avaBHMzh -]6z.,Zbf|l&b2.uqbe+嶑1 3N-b| 6>!6}Wc-t8fHȐxlZZ˩u.Z.oZwU}kg%a-%. }i Cd)q^6v܆|e˥laQZ!.E\ڲ/þ;eCz˞f!(옰~eGq-[ZmڰZ)UXuj=UC&ܽV1(cP qYNS⋬7)Jv -* -qZu6', ]ħ8U$_4^B5NV08:)B)"^⒡X6 2a B,,iaaþpwOqJ;%wd0B;6 $$oïS8o>~ 9%$N7Jӌ{a r[dXwfe-ZZ֢uZĩ7)!qVOE^Zfw4C)ZPZ 8T6Z;n-ki8u8lNu 3,dԔ7/e;ˡN;7 ħHdHHevlN!k}-?K0ᾳzjuI鎄!bX KbiyIw,?3k K&`SBbeFnĆSڍ6oƶ[lYllx !_ɩņ]^>2qݸ>H)qV]Cͯ>ҖUZwC[]ؖ72Cn- ~wKRL]-COqID|Kp<| B"%!ջTt> =+ uJjO>0Һ外z)JZ'[]ZАR/U2>pi̸z)KѺEPW >`]KOnA\IOCCQ/eRKǥ^Vz);nu/qK?AC?Keq0>jW%^ƻ$m&Ӂ.-30Aq2cfC+9x9d Cr0<9N,#a"wҢڥEiw5]n2[; '!8huiX;q;ܞu'x a#N΁.I|H[uiQ,rwZ)nuK ֻKˌ9Oqwq$TLuJɴYr.=OR?m+-.3`UD`!!(0h,9EJŲ.en1ei]Kh%rb]fzYvr$$KdHH{ eˇ o3 3.xCKoο2\t[tx~(S7,-=1A9O'A]ZѐeB%aJ1'sк$df\v}*qEaJH$!qIHHLb$$̰̐O, yoo<gO΃KwoiΒyևqͷ7ϧm9xCćapMHX%2!q;0$86]po'_}j<9peN/7/Spo[~?]B#m88,on'puy{<9p9OIxO^2ֻ.Sw)ՖԢϓć,d'8R/u;IO?uҥ~Ғ'h9Ѫ'CNK㉠1sٵ=xnϥ^>.]&fY̐D%cw)%u [buOfX?(vW,ƭ"nOR_-WӇ<]Nnݎ!">,mH\??hY/8j|z3pAu x"Lz73jŔPİWkEr1~Ftթ[Uq-4 -֧a5 ] .㇡%.-*E}CU$XDJ+ό >.j.2EQnV)AР3eO`W!Xh`]]Um0nVĻ5ƻEZ4>OUQ݂AUA}_RJrć%q[Q(g EuJˁT]:Du92ur.3.-OePCpXӈE܂".Rć]%EH|5L|–֥E}OVħ%u/[L9u+Ui܂q[A0pYIx [Ҡì[P_ŧ[$e|j]R_ b21,$.[0~Q&l\-qݢl E 3n0vܖFHLT yAKRwlx<~Ƿq.y8!. Rt]֧$j]ZUZ$Ap[,ɨ<7\C2̰/!#B1#/<9ĭ4$E-AWŧ[^Pևetí.{`P67/GxwЪuYmjte,]Q"ji!K$KKA[_вHh)6^e1Kx,Y*~K$z7>8JaOć !FJ6ؐ!^úe~(]AAlq2v0!nGu90~ztyv١^ 7,B8q0wDFW$ҒꞜ$APH:L]N~wûԖ^цƙ5j1zvŪoϓƻ؃UN3ôDP/2hiXֺKgLQ>LtҥhCOa!"ǰRħ[,)?:NNӇ`q,)2nń-- `1X_˃>]x-?7X/(_Ϳq[_`s_3sASs?3n ?Wk[nS)K/jÛwo>K.Ou*R9.pe1~x7X13]/qL]-$~ZZ0?A2bUc2EU|&Bq;܂Vխ`PFP%tnuEQ[LSTUZmU?wAp*֟CS LA`i]RޝEʮ?ZE}[HU/-*U[nn/qYc$?W$h}aH"ޅ qO'ƥ>/O!#OB "[|Hdp0EUDBƇХEuBVZKiI\T^NeJR/gWx[Y/۸0t+I)OqI|u>2nĥbb\$n^CZ>-񩬗`ܖeu a2RNvɁEۮ2d .C~wx^VeU}hJ}/ub/RȐxi/vxI L`1Kȁ01.oon! y0o#Cj3L89peqq0xזKsOd=OzQqKnr0n]<\eˠ898ep. |/gX<u{ "8rǸk'VeRr.)u9ϓQD8D25ץUSI9JKK2C*ں[x)&>-?"Om]-3>-A˖VwPԇ]wU.;.-R/s]qA,,{ "/2Ki][t0ջC0hz9QPv]%^%˄ ؃w=I981nwe~_xEȃ%r ; ysyp/!'72| |guI\ o^ͧp<ǃ9x|xq 3Ov99e%8K݂ҥeӥo'Ɇ)yАr>铖ozr ui=oXZti5إ%ȸHN. q%ᲧOe1Á֥XACPL\pIHH A$1 KBb]R.8HH\v w|b]rx78z9OZ .̐0^"Ywfܖw[)$[ lHxqV~t:pxyqΛ-PnVB"S:9z>9׻ڲwZZm9Ww]-#,[|:0'E8poC|;['-jŇ>}x4kֿ˿_ڿo+LXn?7~s?3SuN`e|:0.rp+C1nUu)pC-㫍AP00Ń]18c1VE} O]]%(jiQ,:F$>UE1E;A]:dCCĭ~)e݆J]w[ex)X)~O)髺-]_$.iKx:W[u /q[?J St9S_N[wx_q nKR_՟ ""E\Vx7XUa">$n!A$>$!Az!-瓮KWx.S ..Z) qI.V3OŞ!K1>x^C˔%2AQ\KYEbt{!a,`\.S2$.-ŲHuR?4.wx?0K}hu>ix7b*> YDD Ҹ$n8ƊK,f\v1_a'3qKqz7k]r~f$E9Kr|o,GO22 " qhwgKwݓ>fOzҪOA$Vx7~%(֧~N"uiAwI}ؐp<Df8Jx)G8pnt˸<"}rƧPmiSgywm*֩nkv|w;Bpp+wZsĸK2f8ZK5^ZV[ZZxUZ,%^ÌwI܊#nR/A.tZ(O?ԭ.-q;ŢPKx)R$l1J z%qIaJВ _q Β K8A%"BrC\Pl]Zabzmbe-Şb8v} Xr0CqIbIa$$8IBa' ē'JH؃oxaeܞOv9< R R?$$$$$$$$ /O㤇 u.'k$.-֧1IӉAs\ZIqR-3XXEl\% E|rG/yxwzw _^&e\ZZ=;!-$8x-_exqxwI|8ƻG]2-z>zFϥeWwD!!{p$ǁ] ύ,6M?:fUlVPj[^vR/DBH=iRz2NjO'l5ᛗR/-eXw,gS/t$ڲu;u4֭b|U,b"/,K}/RߝN?t9 eS|xMYŇ2X">=]__??_XI7q? ֻT1Ƨo>.K}@] b|q0p"nq[ s%nCpù(Ai_́Va4TDW >OT4( ƥEY/w^V6.(ۨEuğ [\ej2SZ /èZŸ)lP`]SC9qٺ %!ƭrK\a܂Ew"-SA⫸U*~5~ħP->lР.*-^K8H(ZZU_.]E],ֺ>鋥SaqC0ޝEH*)-xz⥴. A0_0ŭ>խ(ž2n%a}W, qk/)Ƈ}`Y'r0^Ƨw=Kv"tj\]l}к=!H]!~/c%+9, p& A0SN$ֲsZEH084qZ2v䐄.FkZ,]ƻl'="e}8"6cpIH҃ -O7D9q Auys5 -[0إa;r,-!o$EPrT- yE]eZ8uTEqc9aJRN7A9QLKRVlY)Qumwx ƪ[\a}W/Au#lPĭ^BeKP/1l >4m!'bKx7Jar,`;HA)nK|b݆ Ƈ`Qan], etUz&4.eQ92s1Ld< $o=\7< Aq<~7<|z=v KK?Gh%CN9V'Pl OuyAG|cCKBŔYrɉ.3L{YA"n )E!O'"aK}7, ui]R)b AֻABrВù#)yS 3.3|CB%1Вˬ!=A±A*O$l!07- %wmx ՛_ůC 2,ObĻďC[%i;zֻ0y7uc =R.^ZEi`ے۸ 9`u(9l]fq)2uKQ "=ƻQ2^J0 EB(S[U*>UĻd|[^uٵ^ZA]& źV.-Vbmcun.6x"0~RĪKbźR_ŭ֭n>$nOUe2>-.C/q B" j ֧neJg]Zeqqӻaܖe( NV/Y[T}ZC뒸>UŐť^Rnqi} ۸%nĸt?(⫓ղՖ.A)n n2ذW˄.)u;|ѺջxL0l}H|_>-](Bw Lٸa<Ȅ90ұ⒃9"8m׻ЖXì= #2sqpxCJb3 !o<Tvx#%NKrvH䍄YNA9:櫃=u|;uNZvbbD#.oxt]2$l9牒Uߝn]seCˁ bO9B‰oKǛoq7yD7m<:eO:2nSQuz9qbC%$.T)U0lHJ1gJYCKJY 6Kɠ4,%XK\fΐ͌KԻvQ ta`hԖLXK9atDe-$"w'ևab N/K,g2,[ćG%^F_KR Xq A}ˢ^ź-{Xfv}devYr dybq9$n$!xe}:˓ǃ`8 It0; N~ ox$ξ19eOOo<ɱK%ۓ߾ђ -rl(~?d~2e8'oKCKZZI A!A˖cEh҃.K. C0Ö2nKA)Ç}@ z g]-"q9/c%2!!&!/Kɉ%8߈[J\ZfdIxqwoq:?xwN98OÇGfذ[Mqoo2%'O}tF.ZZvukΓs5aˁ|[e\Ƀ]roHgo-=7?N=<2îsi8TOۘeȮsC,O59]˒KZ/^zs w)R޵"ޭePO㥜"n`}WZy2X/2غԧx98O?ޝ.Ყ%"m캌b:}(~5s/0n_3Wq[m+#ƻm|Zb|*283ՠ>E*VecP"lbp+Xݑn|%hA1n)nTPE]ħ%x(* N)–9EQېq/aLJ-ĻpIPZ[/!A n)]CRڢn_*F*6.t"xŭ†+ md V&"n%A1~ލR :X/>-KD2>X.MiSɁ7l2.=ԥ^Ŕnк~13>nu S|:pfH]Z.-hP?ېE|5A" sи[Bb<:1.zK.-q_2-0X [D]&˸XE|a%K-[|XWuKؒ/!^ݸK`Epi,As0qmqc̸v898$2cxY:A!ǐq9㷿thrևqxKaBh=yE-HG-9Z2lBvoqIX%![3t9-> ]O9ƥa6$'qiyLrp"hÔֻg9qU,I1ˉbK9Ӝ^]lZrpkQ,0~rzw縕qR] a-^X5Ew륾+)Em,TX^2H/e. .SŌ˔"ظ[QAg8,r"$(`}W̐áxwziOi|w X- B,tn0.B֭ŠX zp`eeI`Bx`9'oY<8] aO68~mq`8KC'q{ .y޼<`Hxw3d[83̃}oӇ&,aC~Ão]7X&ti-xsy"x,'Sv(2OZ$H8O9\ÇD&.ðO{oL8\I<t\I0,}8 ֿ2ZӺçqn$.GoWOo wUÖAݶ? yލu4n1:07F|>8EVjŸŻO„RC0tT/ yC} - n6QUE2nu+J["]*],~"WŸ$ܺջ(uKkJɔz)]JO]"jjq['RnAl%O&Cӯ*֧ո$ wUէYC[0$AH\2nCY%T$XeJKK]VV:j$<ӧtPz)n]]9Nae$q[u2qź- ƥuۄ9]v1R. [1bonA']-)EVzɠ6nu;"KB~ínҺzÔbBƻP?34"6q2Gxw lybcZZ1ޭÄ39_w<8$cdHd1px0wq=%3ڥur$޵KKǻv]f.JҪY,] A$Á>:ݲ$O- }޵Ce!p.Nv]  匶%rxr|Cr8hYBzQbC[l?bzKm˄E.mJ]aƇ$.G(6LKi|Uliy ni}1+r$b)2n^껸(epfYR/!X߅A*CcHq `z R0lK2ޕq+`=cz7X/ ԭ$g9 avŒu|'X,' Aі$%FY y ʊB g;zXa!꒐8w&dhy o!![Hx'3778N=S&ID.dhxà!qId#㖸$.=y{s쒐$$>KˌKr g9Ir@OeXd99p"$CyuXہg%$~< "IHH ZI|,~y0o/7!1LuJKK& uVFޤ#xE. xS'S[ZZZmi\sR Ԗd{ru#8.'e5˳<к쯜NYZ'3>Oz)u(Z/uy_2Ӷ {RwYkyz3/5[b>tץ"$eRUdnUg,) M=),[KoN.88Oqk\Ne2_wl֟}amq[ƿ3X3[{g2K|9'u[|e,81cV0t8V@ a3na Ƈ |;,7`-f]PD/af1XnŃE`l~V Rc|9D|(6ŨS-KA0K4AVK:Q!A|)"nunU'CS2[Dq2V%X%Caߊ1և!ơVnVl0>ė" K[ĥ~6+I|W&Anq/ŁY0ϊ]6R/%p֧[v1X-[_FeoK!^&* [4.22q;)Z J|`BQ Z", 8%qɺl8r1xh~u)t</Yvy_q2 z wK"A>D|98ϓ_eFK 'uiqr:Y.]mt8h m]6LN]{Y-R-SeiC -i=SNE8ɆfwVL}:nOeQ?+RQeʎKкLq'CJC"#lɐ naN5ƭ(J6vI8p8X6`̐0H0o|#o'a'QOˆ,8. 0w!HKBy'Od\ɹT>o>[`|)-JŢKU1/1>1V}נTKΆIA? ĭjiA&(-ZrABėҢ(-/A"X^^&`K[-nR/Ep*ϊź?aXZk. aFCuIص<Ӣ'ŧRd|9gu+Eqy/!C%qI\=9KHp9)]̺q[/jx9ƇRLY/v.[]&L]Z~Һ%%'C{*KҢn/u!^K'!~/aw/KEV撠dXe-nO_` =]d ž? >Q xKOKҲ^m]'uY  3(xYRC}a>ĭ-.p/qI0>ԇb8f]&4A!똰D8ްSzy` B&f|x8R2t8bؒH7y|c*rxp˓[Oɐ VO.-[v\Nh8qqq9K%뉖}.--A=Գ$˓]Zd.˹<6.99|:Oy<Жå.o8Wu9Ometq; ]6ø>eA}: RЖeQ/C[a9|K׌/ Ɨ$~LP ,a"uI}؞l\Z`˞-lC ?, .-]KB.a1Xdd')۸0I\ZR&v A#^!/!^BbĸxrO2DBepڎˠ^YKHGȰ'ezbi1H`{wN'pIN#8HW2, y/.O2<9[?xod8< ~a`p t]vy>9{-INc|ÛOv;-yr]οR/C.K77ZOoY}, =QiRL'gǸ<$>e1$>8h5"]R-!z A#3^2ngIH8 ) 44XfY?8hI$!0]ZZv9]v]m$>;%6^ByĿp GBBKûć7'oCKYNm.ǁovq_w<1orIoxm$!7"oC3<<8Sw9]?jN}Z<\yrVw]j9ZzbC[t)dÆ GX2A‰IbGY'b Rڞ.fHI?eT'Z<ڒPv(-3^sm. Y슊ڳҺEꥪ,Ąe\u)IzZORZӗíe1!n-R.[껃<}8}8 rt9q z)ź .]֗2X t[7?OkO`15ak#oVprZ`Of|`N0Z_Ɨ~n8|Y@\680e`S@Eq[]m|)SBFP?ā"~8YhE}ߕ ˸,]A]KzC52.)Siպ՗Ԉ[Q-Xb\2ZEP [|wa^X?P[w'!Ξ.hUa0.)!"E0$X;n&lxߙq+Ynq4[Y.ukRD1(?+] RNY鐸֧Y<-̉2R/F6>.[]ŠKR/!^2n6n%(K1AOK"x)SۺC0a!{r~/n.?92!2^JXŒͭ.]$!aweB-X,v.e2̒lEpR.qkEa.3(%nǖq).KPnr`q2E /uX, %cs!LpLJaFo$My!eNY3\Γ.o8XNn[Һ89"Gp"8qw:$,#a%x-CSYNN/8z`(Cu9'%(mpbK=>llŸ w6.G\Bq^Nv|ZQ&*>-NtPZ&,z*gN'YZJP!.0wzɁ5>,!neB[oƇzUeV|(A]ΥAe+q4.EJgY BP/CRv2AXߕL4X/aJx9bgaΆ]"(Т@R2dHH/A)(C잴4ː'ce2R$=^-n)adh,,Y7<8w"8oNӧ#=Qw}>8_,oC `6$o<~xq6nqp/.p>%";R($KaO`_ˁy2إ4 }kP/t[Rv1`rsu;]Kq[0qũ2h94k%.u+RZ)ʌ[Bť!E8KdIH e]`Ƨ'|s3Y˸94ONo0n;[zhݞx`BqyhV΃Not}gC\(_+7~[aK]$ڇK)0'db1aʹΔ#%hފƇ4IYrȳ<Ңn^ָɞEp0p!q!֊ 9JR$ U2qiP,/!,[ ]v쉓8Hɖ e–]-f1X O-m?/_oxBk76~[kQn-Yl8ŗ$.-@]-CL}W3ovcB1ް+[P!# oE$v`PzZT--"wb*j/EXAV`Ti݊"uĭnq U%nEqς0!".]??;u+g!q9KVԇUbiQ⥾Ԉ[|(E.e1q$/EQ[~=0X/Ix Sj}%q KVZ~o|//ŗna%r.Y%A`|z[P,"ѳ8D\28R.P/Ei՗R/3%AJ.e!˖Z"El0.O)SU/-'KⲾ,%e1K~mƗ2[,Iuˮ/;iqi,ݢZ?ђ$ֵٕjO+#*4fhC(뵘ƸS zMƭ|iE"=).q rm /%ZܚUEʯBR1 MK V">e4(խwrjR!q,AS˥.YXKb*Ƀ.8H\I|;$)y,HHIne4x/0 Uf63̘L1am*f?!ac!M {S%K? 3vO&i{e1{cքҶ0O|Jfo/(/-USK%( cioA C;̠\ƇPa2i0dP&aS-=f"aA1/|(OA Z $E B-ĥnE̠JƐv0C7Mg|J\LHHQ`#BXۧ)]t1r :l.4RT&Ez 5t噸÷?H$xHVۿq<*·Re;]~7hf|c~a~ {bX1w~$lfofXb;fa1Ϧ1c!a0 5La\ka/ˌZ?Y Piy =fФRqIq EBBB2^-) (*2LXKfhBOT3>ͨYKHBL1BF?Qjf ۧMI-ee?4ʥ76śbrI{ A&!ae-,wCVfIHCdFފK6Xi۷|nSCyfovf),Ԑ1>͘cv3w ;≯$>uH KŧfO|76=ӌ˦|aqya6l`9.3ffx6/3O/Pc2h:0F/mE0x=ʐ4)q 3Mb43Oøm,0Na6r ݌[M_~ {Rhf\[ǥSRNF}ھڟS_*K0DFyi?,r 6r , K_ R ۇr`PQ3/UbQN] R7jO/AYJ-/A!n1[㶰XCeb85  ((\jP n奼RU.=$n  AqR~r/eiQq/f dϢ6hQʯF{ k2t{v#X:AkQ6▊JyQ4 aK9E5KLJ:̸ Bqi&Lr:heh &ĥ B\ʭJ)NUq 8 W - -q [l&D0)/kbM!cySRf85͌/S1miRrB³,jܞX {#%ƥƭPg>u!$S|[|JB[7a0EaB8-HФhtbM#.Pa&nSo@Ѝr;( 4 0PN8m2¸ua\ nEʗcʇ8K|0KMa *JAPeƥv0a$tQ:jv*]CS)59,VEV:8CYF' }b3%β<%p8ul,YôU =ަf0̐PN縬o>ŗ(Hof۰6r4Sj Ƨ$fa9کQFc Zri3%39L?%Eʬ`2s2K7lz1C=5S423 s8"ֲjPAaf\8 j6.q 3eSEu(KcQ FP'C+:в”2.=~t*$NQCO d8-/3CEB0$zAhI1) +^f˄r 4Vv2HiU$ TAA\U*4 vZ^zPJ !4%yR(KvI5vY8-:<4].*b0Y!hs3OV10ClTQw!)Zx2nRx'-ޟԓ:|'y5.߇;؛h7wH3x<\ Yn38p|mSao1q9F75x(4]˭-˲Cr|Yn` 3O%զbF TC˗r "x)j\q[)RRʥƧ 2K!8OAKFPn#(?c B4N XOf$gT9 CM%~h#ER̶FPhEf0Vh ]2,ePaťdH{fmP 6^J5ƭ(? i O Zqn㥝?) A/K4> [\f\  VXCBe]n2N!q*Raڗb/jaq)_23}h,U$/ UF\qKKçrf^VKf:܂vIHЍPr/C?SQ<>).rPN!B1M5 Mo4B)i.k1a6V|aq n岆6CB J1>UƇvk/Ĥ/S|A;qh,$RJ\ BH12\VU*N-*JkRJI)+-j`K'LQXN.kG]6V8 3c-`:y3L{NL[)4 ]?l4=3#G|*ʧ#!,;- ˞Q>a$(ؚgl:<Ǯ Ћ_6K%h/m3 "da!a k2n Om13"`I nVnaBbfSԁfm0el` eKėP(&S0afTEi[!%Nm|ie袪̌50 >ħPA"qy6:45X>O=(ĭ$C9qIc>DB3N3,L1Ty!n4A)$v*A`Ƣ BhOR^z5J%LL-B/4{O&4ʩx N.Yc؃*'qnlmF覊z`IHSE~A-U|G9Z^o򏇗ywomt xTHkަK2xe~CN0-yjfXxbB4k( 6YC-LaPavZ4&>eԃP%NUVPE?0`&>0qwQ$ėFTe gS!|IH\f\a#Ţ y.3r,jB- x{0O,`O%3&Fc!OZA5ϐa*4q_a?L5<=~]VqHr2sxc 2hRMB= 2Gx ]-E5b-fHW"XZ-< |+_xf?t~6Ly$)n؛ {6KVFR^2<:xzyaf<) m-H!952քB#c3Fńv U>B5˥K6#fKMt[10ƈ[6.ƠʥS2$Ʃ2n)iB l?[6{4/l,ifҾTnj˭][Qc??!_o?U>_XwĿVn?-qe:Rn/[v[̸mUThAӣ˲P ˿v2ne-R CP4ʥc S^X}xʁf\@HXʗA1Ʃ 0 58 iz2jf08MAPr(/2Ӂ5J|ir+ JO`\*> 4J,j6^eAaf-/(h?tx)vhK/inBnA\E!]ʭCKl]LDF5JDD ([S[\D?~mfP~e~63`܆qOn*:ėǁF5i 2 q:)F\fLa_FcK%!_Hf|i-O4!NAmNi=>͸$iOڗ`\vQ>͸`F\ƐIA 40?[i%~H-ƗCyfP.L%qaBD=JfQ]*U{ F84 m"#ʛbĥN+oFZQҶoboJ91Y.3.Iwf~~ʹL̐,ll$mIH1M)fyli9-w+KYf;mfQy2g"Mb.1ei BZr0K2$63FaAXÌy>)fi34ǥ&ʗAB󴍞q0.݌[EV Nbĭ:~6%8ԸS.qy҃23~V O/UK0K2N){0C#Ѓ qn4 B´[5QE)B U.54ia|iĥ_mHAlf8ZX"H$(V t(,at7r ĥ1}|X /tB9K WmSP([2({SeVʻZ%XX.viCRa%NP]/fڇ.* ݈KјFt0h/ma^K: ՋApàũ[! r ] ʠ4˩1.2ܨA!(F)/T-B rfJep0 Q)dU}0(rYSƩ ˇ`^yi?jo~i|'$rIE60ޕv Ay:\vjTa9WHxSn%>!l?B1qvy*PN}s_5BS{Z̠z1A#.E{ ]8HH!dF2 E%ZEUhĻ*\*])C-1(#~oĻ Ӣɢ^t3_5 B/F\fPhP4FO1wj* qiTTO4IyU)-(- '].L\6SIPEchS)KZ´1]D[h#ҶQZyYAU.ҖPǨ^j露eca7,OU:~v]>cg8ᷛ˒ ,2$!!K {{I E-KYj^T)4PxjY:.&#>RmW[R4EY7/.WydkK pHfU. X}Ӓ!n+%U(q'b1]fCо)TEy ޤi"&K#^jԈ)?h!(O6n⩨BP7CUh, -ΐnt,]c)t;14 NStPh*r V36 22 ވHKUYîAQMߨ"Hh$N BA0ݾSN}^{&<(:8w'n ͪ7/Ƹ$M< ) .AfPF4UT%Ny 0($hz9O!!!HqagˮP**jU..3(֢eP8P2$(`, =t~Pa<5Rxl6*$)t8wp)2PT&^D+pof:TH1FwB5ԁ6X^S/\cКQUBSJU3QZKJUىSU(oeE5G4oӢ9) !!EfS#6a42T7TݨXޜf;U\6U/Ei62!bkOi;D2d7+f8)/.;A8UQzQUT:%R5 MF!#yqn4@^nxW*vHO2by4%(EƠY˩AQqH$(t1 Q 5h)Ph 1h̴6^S6hOCNxjCPОi%By*OEC(.1!(*]ZU*EYT0NY(A1JzZSRB5nh;u؍ i0Ux`XnRqM/xI=N]8oZ<lO_Pz7UjB/zoNMoUM7N헎_>WKngfF|pF2<|g!aojp:\3ͧtfQ0$&x ) &Pl&A-D|S 0r8E5U*Lަ ʩ=4#TQҷjU~)PEٛ*Mb*5Bk9cXqۢlT7qꦛz 3Tq|ƶ;$^f1]neT U>qضl,_%N-aᾩ*x(nZN )t7Nk9TaQ)Ɣz1n7neXj5U>Gv,/MAI;0waFfH̖D:T>]MdofdB.ݲHHxl ١0.u4Cf{q՝ ?HX] qʦ1RNq)`(Oqc}.ADyJUyyxM)w*RSTɝPU&.8%>ˣ)߈KQe\BPH|t3M0ᩨB9UucK!(EО*r)gBd0~:B萐 qIӞˏBʇM ;V9uN ┍ KHBʇ8%UQN]CʩjUTIũʥxQ6 GC] 㩨Ьr`yjvH0  ݌w q,f_Jq>\8P{UN& JU\R^Lt7ڻiJf}NUtj)г8nv٤M[4STEb>Pfa}B|gyZqP7k-6QT=ddfFfnfQMU%ljRQT {7* 2f0d;]ryP4#⡨qb x"C%Ħ0EjMTm0Ať\ .  ڻ$.3$.qn<Iv8U`ћ:EDT;KQ*Bt(?1hPFzTKvʈ.cR m*b0*&.MaEaTT$)*4!rq)ST.RtUj*P"˩iN U X43RU}Oͣ _\ ionШbpQNfBFUzHRj 5tPMém t#U>qצZuNfƩ^^x_k9ŧKC3<ݸQ; oA7)_>$NU8fs܊V<6+fJ'$tHHddB6B-vX!HT!R]]LhT$ %AX1R'Uivr..qSNU. **AMU*a4U^iotX$qJC͗* }KƢPe%N5.wܼKBU u$Ni/f] UqZc)T[QYx_-Ej-u;\>G>9uҷY>|Syl <6U* 5yLHiKx7%s'!)`mT!3!.]=ݽ=U]l1$NA}#xe-`Dj=&H #&SKSK-nePGMNQCȠ$Cn"!.(AӍ!.E..͌S GcQT]OAF\6UH $YtU4Q&r*OTBQMSCQ*˃"]Ʃ͌S7CTC=~a!=4AAHlB64C =hAN3N]̸7Ufо*7IЪx~TtD￙< k4s#ȦU#X~1fozml6$MLC79xfP.FBL#(bn"LS2 ? R$$!^2%ORnEB%!J2ԡ3bZC$.{̐a=\j$cGQZhfH$ac!v[.u6f|q!q<}Z3 $L+ n?!EK"U<.&r1 $,emVK±Z̐C% %d<:<~un6k_Wz/r,oP%J~yx6i~n09IHJQ1kX^֢"M3/<1.Fe\pn{Rn~XX`_#)۠4)9MMo )j= Z\<]VMLIP)1$&L`PU̘oYmv{K1ofzDdIa3XaOBBܦ]VORf|7岷5UCRhAڧ(BF __j =~6[AQn?r1ނA-S-5.(B`Hh`/ (ʥ?ZbhaAP,Rnn#~4K0 ĭʟtQv+cqToU iR(Bܦ (߅*?Ye,APw!2X`܊T9ܖF|mGe0h,hCx ft"^Rno=.VJ24ҳ݂03r;ܶk#;h,%aKy;m!6- ʭ1 ֔ VE64o0nӌ?[oƧgUn j +(fX^qz\3 4[܆Aq4jH؈xOfnf0nC wq+[>Bux_bZd\jP%=̐ Шbڭ ⟪`Qj)&$)/E{I*.} VჄĥCo?kAy)z tB-mX Mu$G1Лv0e6\$TEm&(Rtca0 HmFKOi`|?)t}eK(2$^Fy)?TUeBA+ EhCEb{,;maoI\wۥnM NKqZl?fcZnֲ-):En2E-"<9bnᘇ`~nu`/0 hnao:]cOVM7bįU3L{ `(fħFⲛ\(l3!a.EK+`pO0Dk:Z^f|S*T-hV-a6!xRLPdC TdĐxKocҨ4B˸%YnaK%H 420bU5n%~pA01=c!R!^BjRn')T\.A:y6 jb>1(&//AS_?;~of\m~}ۦO-d<. ֜,Z|t:bLef^|A `c9 `4 s0PMdLF,3c 3!!E f0L!4KpRqߥc$/qa-H⛙q0sx AHKWsAu0'%4uJ=PcEk{l { +KoML {/ m)fdČɃQ1١y1ñp0cf 0LJK/$c1驪!NT[?>|2SzsiYXlfDf胠0Ձx/ =*,p.]%,߭7۬Gu/<}Zءj(҅h:kfb3$0 1by9Vux =20i[0c$Иb6Œ1 eaBcc Lam,,l N6* ca-.B5о+ڟ5?Wh/mϩ/BkT!Yb+epxޖ`0nۭ(?(ߍ[?xhnqIVbU|Uj'n EQKf|MA,0VF3l43=ٴьM[-n˥4 F9 [* AJDˌEyB0.=f6ILO}"646n 3.զۥ4%woƘi [DcrgM}5.Lk?j[h/`|w".( nvzx+MwM=^w l AH|kV`xio㫄 S/gqe_ť|?JR@\j0.3nô` e`K\R~R0{|orYM-Of`d*f\f(̸O2Teܖ0AH92.)P寅 ?vϊ`K73(ħi66 0e$qf\f|馼 3Lc`m%nnm?=h =*?*?AFP.-*C8E5ݬ_UBdޖڭzӋUhCb㈝_<$a*>y<ȯrĴ#a-Rj MD,m>UEPE^d#LDXn;$.3,r44s*= z3043~V$}*x Ld=4Hb,x . M[y)g|:fXѾF!fqFE)zȠ܆)K6Jw+E=!(0a e܊An*K[a0LhTOqɦ(6'x"eƟxdEy 2d!$LHXEbe SL mX9I*HhaP.n4u2CoY̰P_ؘۥ&&Rl,j6Ѿԃ)zHq4x.dA-|V˥)_efǯ:'/n4<>f%2os1̘5.᣽̌N,w]fnk1R/i%ay6f ϧٛ lf 3t0N iߍ[\qN43TQh4vF 3n6=^bSD1NmzSNEqm8`ݖ[; ݤIvMa-vA5[4SSHXROOXӟz?-Y};|Ynmv+hFm)BA%nV,/ok\0.=ԁ 8^r`a-?[nbmN-/PnMӈeݖKow.6‡r*ƨ)lq *46ėK+奍ƭ(Jtq*^_ RĭB;Z)A! ”۠,Xn0CʥnVi(@k/6aK)R^ZkAHj0(djjM7nFQ^U(Q.=,DrBc" ⶨf|7/3~VR~4CPSGƗЃ3%")~ky^q[o/-!E7g* A 3(f SC /E6EOʩ4%+( )ã*]fl4 )&(4a (L+AB B%!!N!il*] ؛zӄ<0$.i|hEx+KPMXI荇'S2iFY3Oirv/2&hTffCSr) `Z3f-T$.3hA߫Zz=`ߩ7j=YOaiiv3*R4za>Vad7<`a6GQoh:Ixypyқ7Fm&_Q~:0NiZ<3M7Ǜ?4MxG/4]982N3ɄC}CGc1MT1a: lm3H$*i#^CZ%0}ZvڈK/U˥ Ufh[8%SVV0C"it%ƥ 3>Ml {16"=L-Ä́zqM6k7t&nH6RhO' ;}OA\ ]tSM?Th>'ʭ)ⶰOz+;ܶ,˗ 0>Sh, X~8(2(/; meR7o$7\ ,b Q~RU.3/KXFHS (. PӦ[*nq+4[YF|C!t-n-ڐ0Qh)%H\q*%Ad[gMATƩ)M7F*&f]ѡjPֈAUD!F#Tn%ĥʥ-Q(XXn6TQC" Z  ea)b۲Ș )!a?Pn6-aƥeA\f *e[ /UbKc*Uw˥ 433X(L\&)nC{AZ- @B\v 3 jqLSÄl 5.)[%Na6r*-a!fHHDS S|)R.eU:H܆^/˭0$XqY*r.*̰´K-vv3FK9e|jFO 4=*i}F!)DU\)dH$~X~ ˗B )Bel $KqTC&AqPHZZMe-}mE5=Hf*& 1)ְePaŒ`:Aa4.q[ ĭL"4F"3fKL60!0(t2Naa| ) K0a} Лr[~MFn4UBA=QxO KO__WB.PKxY^_oXlVXn e-q+O37*M=/a7-h7c $e!xjVLڧ1)x~1fO/Zx) xE)exʹ8BouZF\&A0$BB?E$3ӊ14jl 3:.aA0qA\ʭK "E$AэEX1FϐaYX5fYQ:2MRŴ1L36 ).KX8 +.3 ]%)j,&n!q*L3qiil}KSaC0CR$BHZ<7$.Y$%!`la>PL3nqzӛ'n BXLۭQ408mvmfH3lq5Eof(tTvy: nøq[h?[܂qjUfƧ t|XTDJSNDk/e5z,ƥR R$d$$.3ncjh %KVH8ԃz)yLrZ,Zo$^:x6G1 |#lz0ZaM?ǯt $$$%)3a~u&%)R~`.I1$XLomtnz 6O]c\v3eb 323^m*0c`j؛'j)va=lf\,63&KUS5cf3 8)$n/!3nR06()^fF:˴4Nۥ=(fIBУ 9܆q/3QBϧwaeЍr`"M-z02a1Xn82 C 6.KK„UDĥEIEH!萐,Vȁ*I\'Aʥ]RE 2nZ* 8R.U(F BS*KQM7(K*ok#$dK55S\4&\V3A^>\։aB~`Pt3ja$z6dt^Zq}`\ӈ4r(T0j6R nR? i3Ey) P e*heQaAKU/&.UTRT$CPU(i Q$TQÌO2hT7lnfyn*<$'.M`5*?ƥU8Eϓ*Inڭ6fǐEc렆*ǃ4"}+S o6>97_| !.w~F!;Xpp~w+hx6)9PZqۍݲBS*fo2BqqkPOɩ@("T8鲖K6BX$>N/͹96&~p߾B5:UF=s[*zy<kB;>y򱬵UF&V)quڛMGq-|/f|b-[BEi% ?œrHEr8dG/mVa7jdS& ?/UzUpG>q&!ވ[n&tX͜t1+v)ħbdP̸T!K!n)B UZ7{Q2tk-V*-JUd#*@qiYn{[yn>AcmƠKc1`z/_꿞?PO(jêc˯OKyʥ_Łdm_'4O6 =X.Z_$Rޢx"qe'ėjfXnuEBK/h F!# ]qqdTP>5HrvPE5UTT7(OE5 zYT i2$p9qʌJjQM{9Ƣl$ayY.ָ2h 6 K=%~mLƸ̐i8}LTUn6VE(/m4US풠nWai*oSh^KfSUC QeWTV*o"V^풐GJ=f-5GšQn˥lI:aMT߾$dC2Ԓ} ϧdT`qоVAU!EKUQ$rɐqRSƖ4VrP%Ojo˒9Itz)^IBY'bo4ْ!c7voR^B嶍R26b”ZEOCB[n 6F=$غK3ݘT*3E7by)v0cЍ[$eztamVY]z)TU,j0l!b5 S[PUHKBHeƗM^̰2`%H| 5> \ubfmp LCT\X0K2K!2(/"M҅`СPJu"R UtQS5 î뤖JSE)SaUl/K 5&Oݬ1<8OM~I ۥIUT1EPi5)n 'S.ur|lYQʦTSZ|ߨoQǃe7~|_~<}oOg.ٛ<p<2(ǃ)Ţ؛E;kxPO3]T8doٛr̈́Dt[2Vj*||,LpFvIDf!C^4q`xyn99e5CUQx<)v$2atz9ΓP 簷$T8y˄*[ TIPeŪM;T1A\fS tД2OI%_d3b *&.`- *v(Aĥ0l?mo>(lj.2 i_.y7Zc?uῤO*cʭ\}ʗ, 0VK:܂r)/!^-.u[RPnaEa㱴v^fؚZXt!VU(Rگͧ i ʭE:hey+ xa´[#(Fh vRڗZDY(pAydv (FF\(4PڠUڭ[j|վ,&J[Q hF?)N'*`*%~$n]ڧeI.O=n/RZ([)Q4z*#ޢLh<1hK[ :fP P4A  4o6^2ĥ G!h >uh/aFKIFr4ea!( ˯ #~j܊:XF3ւB . i!(Ɵ *ڗŊhULLQŠ6BۥʧebШƸ-;"TTh(^. B% mUժԇ(:ا6T"A4Tʥ9]. h栊Z*,/ ]f{ TdS^*r|/̓DKQ^BqiL!L\jԡBZBhCZ73咸TF*4UޢhSe*݋3KbKjl/ =f^OX`o&ڡOKXOoɃ3Bē^TS9nAe6hfaHI89~<^jZH\,yzP2 *XLЪGM!8fMl惏X)!ӎϰ\AH VciRTHX ⡌㶽|KPE)]:t(.uZ43h/mʩ&To%4UFͮRR1tSRrPᣕ/E!BKncg )nz\vSPb7Z,fTP(~Jvk/ͤPhxiC؃F M),IYR`BH0Ԡ) V#h*,v ^FBPBTS(KPq{jˬPCC ]PmjzQPJWB~)IPCr+t\875fM7;js"EAj M66I=zy78 k1qyң|7}pXƹΏͣo>}?yN.r8]w|٬CIXpy>d $LHO#&7|J%K $[ƧRT$VPhni/E*/B Mڗn'Z.uEq+x+-B[x90tM-UT| ADe,lTX>ebyY8Q(_x&AH\XEEuCNlR$nhXڧjU* ݦڮ^(n] $z /f&a۸[C/(IO Z4lvl2$;䤆noa6zoCmR, B25 rRBħ22(RhVtY6$hoLX*4 FrY2WQx+MuB7U.,VF*R ǃ$Xd#xoj`B" oIM[Ma-$Vq[>U),jfcylUO 5o K?.Id?%l2㭔8eͦF˘=ݱ4ͮk?'4|i@fԕ磻=!X,2kKh_ẘuu%D8p]qNk]JÔ^ڢ\jritLL%ǖh){x0Lի%AY2iL>>e.nyzsw~g/?o|}ow/p]S΍s#]닯|ՖYE4 -&baWw ZztKKАRt5%4=֢ 0^ea03$j[0Oa N(Jz⇖!!Et1 $H ^wn79aa2#WqHb<\C<|`K|ynC0ҋKB⥥3^ZvMj eaçO927Nv>qpq!7%z\pr[oηuzaץ{h9$~EOm!)&^姭\Z.Z?K{iuX.zs-^Ą`=~qpFb$,e2r/zJk_һNի\hu˖]^KQO~jib=_,6LjPzUEZEimW!\Ch/PCmQUi=\^o#LHކzX/3~_/?\;c_3o7/_S!ݼ8`08~9LXzy1e8z*{a d9AA8i?xatPᢞ)hE`S1-~u8~ 0DO)? eFp0-ۑ9ttz;􆈐cZM.O*^BХC5~\!L0%zAE2ƔV %4D0S]4 ZXOBSDJPzboa=ܩ_Q4jZ6(B<,xEbPoA0^2E b`=xj!eXx0^~qCA\셛Ur%abHiɠ^p]E?S?ᄫ JХA"' JBbR?$lz !'!2^^ZO;e1bp1Ö^$%ndqa6XR2^Cj2p] ~xVІ]~!xŔ]_k i\~ZKŒ䐑- $Zc3$i݌pµ;g]KjG%x8&Y// >$M9Ir_~wC[ZW-t~ۍZݥe/UZWC+uyZo,Aqy;8~!7o;$.wpB>\W݂Y?]/9$UG[/4\[C<= v%6oarU&Œ܆p+ah.,zXck{PRdln)[Kz 2.2 񲈷9vt !$4N,_. J+aZR;C 7v-x([Q E.' -֊IL0KYOak0t8VBC<ˠ!a)x"T/ YOQ`]F-l9ƆpEX0bM.{f0r]Zz^1ws108?d97|Bn>32wIn7,3-Ç/޾㛟5|#opo~.N_|aF8n)/fjՌg|gn5=㺾h<\uq>UpEΰr$h%㩳r>qa--]-r%aý`|i/v(eku\{U{yjZz)-3˵ak[3+Knao0EAHKZz)2""'u]HH[O%AQӄM%;~*E*2t 5)(!~rappE0COg ab8~`z ._F7=??_x_n~ug_aIrpa1⭎OA4bm\NpB=a8pv0d -Jx'X ϲѹaC2ذ/cp$2Q%heHnPLzAvx; rhILc9xiC`ɄTZOz7),9R]% w[Tj`;kAQtP/)'mM,Ҩ2Ö-u!2ފFݙC<]d0xF2Ÿy(KB/:d1A pUEIAE8q]^zt/ r;\_\woCpʖ|"xx;nX`+-;32eB^.$!Š pܽ,V5lux+㈗)Pe  / 3z21-̎Y6pnAP3e)-~:0Ì -0|T-в%U#,˄s88\E%ekq0띆Dndp<ܸ.OgPoEmvvq,ۺ_]uɇin.Wr>C/vd=7i R3Aj~oKvhm~xaaJ3z2j3./=\8eD%Xp`/Kr3[mK9 5-k=. 3Ŏ;&L 6ҋ+eۘDz]uV[&/f˄V е/-d /AˌEBKHP H4([P/7K~aɍCq:r )ƴ0~3p0 7|[CJbo6dȝ]pLb wbp>A>h7R?|>߼]}O|: ?9~߸7w찇=(Z{ קޗ#\w~CW??_ z9Oo hɍ..:tCKЪ n8$CP t=Lxеb&0фx눪Fza، zY%7/롚"$f$$^a(A.0!4ؕ.)DldɰX 7e3ѽ˄$^/||=ϕ%[OOsPohWͯ>\sZ9)&Sn!%7~i]Wl͹Xzt][aEp tג琐Cq;s:Ρ[Sk~}1a.Z`hK˅) ^&VU.g07O1.{Jc<e!EH(nw v}1eK )bBCYU2))Ep]~'"F(a+%N=0C/9t R-]bDmbP%e-60eÄ=puc\gqÝbb`>//?,޹R_1/w_N0WtDwOAToutVw-ᎃ{9C.? .o`ƿDiQUoorsX>ʖ9FЭ3Ƅ!AA> [ȍ. "3z괎޹.M[OI-u"ގq<T (Ja`PjQZ&޼UzI08$܆1P[ňSO97Z2̰A<ݺ/ ]T{ѻ򔌷x+";(J멖.BZEObQB \XQ,!X.ӤXwoj6K<#EmdOwE$C~yiI0e/(P\(SU2%Ap_.(J^bpP?[Ð!A,eCrFzC ( WE*7o) 9AXVi]+&A$=d a!K‰BKfً]%-AHtzzIxJ{C0!CAAq>9z靮|Z/--M.oE~B,%!K$:$Xҥwm2*^^z靖T"^Z/,-⇖]LD`9ƟfY2864Ʀ9RZ?̐pʮI,19Kpn)9,v9^fft]>d>a=9uep 2 3dH-C'!a i+.'Sw]]˅7/|>b.9ʹq>|S|vson~?tb>?ዒ,Xv'6(M$nKUY G/p-l~ѠO~G,|N]EC/)]]<r/˥!~Wʜh"fJ"kp$`/-Cb0.CS/[h`KbH`aKq-l<ِCK2$$$ !!!eBJYpf䖬_Z$Op/0Oğ„]eH~ ^2.x/'>'m9$p9G%?HJȌ~/qC'ӽG42[0Rv}ɳ $j+ rF9?>'x~N\oKO ̥g5Y\e1~Ih~bIa/{8Y?c_F?⯊ONU|;Hxr.CP;"ןSÇA~1†n 8z;Ɵ][i =G E"jFwa`}ah,*垘^D cTV)Тކ"?eqd ,RZ&^"`̎o!k2[ ]nIE0TV,*yG([oVح:.q06d)"<Ʒ6. )xРLzq>X8k v(ꗄ%=Ro×2 偻ķ1p]$(.-Re-;3! \xNhza $<o?vbF}[ H4ԗ!0x5ʏd Aa.dPi<9A$$& -h}Y/9^D2^r0fZf9Nr^zi[?'<fh'ఃp-AX5޶b0s/7za(BK,s//?oQxɠFb,E, 9kǦpU`-ܐX/,e߶?jT-'Xvl8(o8W[t- CБ<8ep|HWotdzKb!./3Ow ePo%{4baeZk5]mI{֤2cX [Έ![\Sܖ';Վa=[]~KV)ePKH Z-1ˠKhP&t8/KA.9^/Öb"OVҠ48]3EH-)fP %tMQR$zb !ނ-`) `0VKb%$"ޖ<ȃyo6|z%wrC%A}zźcxrO7p?9^Z,ˉ]_-p2"IWziYΓKOx7_pgƮYK?gďK.]}2?Qfpp'Oes]`s4Ҳ)wI9%KҐ`8eJBÄ B2%ON".FD&Ж`?2_J`pAK] e.̐hK" 3LhK.Jx KRE]oǟB\vit.B2$<'\Kr~XmtV!э|~r>~<\71﮺wp|Ʒ>O>?0s- r|K"peՊz+\z/p%D?U?u{)vlOzhgI+-|RKb]z8ǐzYl|5ŵ_X\ڒc,-hPY/AK /34o'mշLتE0e}.a.Nj+ BKEI(J|xrpq1p-%[<_K.\uqo/? ok/(w_ŷ#x?շtq8(r?R;9QۃU-"8$^>x9Ʒ^_„[ qqxA| QEhQ~r0j[md\Z`4X#Ʒa"9V/OF-Bk1aou^T}E|ԺA&ކ }zHDvP*-SK@1mĊv Xo#ķڧ6-?`U{U{EjןG3,T.2^˖T*Y+[oA, "/bqH /a%x*cs/IbPomiQzIҋng1ڮ_fh%! g슃Q2zI|k˭ǡp2WOZEiy -[,KK`dfZ2 yH!AHaB◩oE{5avH J_oI/9-A ")ydn%IKK/}{ p2vɿxkKJ?xr/[Z\f E?9'ЧWsKmE/^oH|Ym((--CTC球0^kI0ַ;ÇO3OmḡbH,fAolȃaɐ< !|VZ3eoa烟םR.q9ԷMw~y>I ?zI1$2r";2~ińK|K.}e1O_ebG7/Po ַeCJziA| ۥA/)† E/F %0CGC rB O/燬/E0XqR>Yu>r?Rv}N3v`BBp/ 04ά+%!C2|90\Y/]e_2ܿ˿o/||9O9|o/{--[x |.3KR~^|8Y19|!G\#<Ïa? y8:. ["$~!<֖S)宻Kκd.s1|.SOZX|z&x[>Mj/?.rvu.ҥWStKrKH"XrK[ խpE/_n_Ʒ`r/Cݕ C/(a^~R\$,Rapb6%O<  2^>eğ|>_/:_o[_/[kzv=-tP֟\\ėu2ԟ~9R$soAp[Q"E0gqG!o s}֠/HpqV ^Ƈo^?oAԗCF_xЊh|)J}2(-98dX<<<ķ!aKy-je#om}D 9L)(_Uܖ{>0KN>td})a. )vNpdd~p.7tǃg,3^:\=IhdVA<biI/E-˔2hWa JKdz`ŷ`HL w$lx:^κŒ#9?'ê14$ކ%Low4G\:l!h CBƗÖ ?c]u19Yg쩻5ĝ,s|>L<'K%83K꤮[Sf8K.\9?<~<|bܣ,}reχ8r>"AvJ◖~OǺ] n`}0b8tec >A|` rWKfPr8K'v/u??S^~e/_΃}>8O'7vؿq??I~^ -]dX>^DWGȃ [-9Lqh}5jST A"9K/;sJl&A0xhud8^9Sq-)-9J 1U1^r8 !S?L18dѺpDƅ-"2#"8xx$xҺ[7G1~Ue18ꖢX d- u+ZP/eT,oqZn3ȐA݂`sPt2Ql&nz0n )3 " CХ"EpIݮm尼[B)Y<:!!u&Ahp#,\o2fX72~8O2ǐ2vA7rk[<L$C."ÄY )CNl\qhyly~ i \hy¦eoܦ( A/C7aq84`E Y^\dH^NKKvrY.,\( fp|08Iv|1 XX\Cz05vEBeFO^ꄙ%A,{sӲYk6Ậ;cy,z4̲2fKd7 Gizŵw N5120.e?/9E)mqo̖Twl oG ~I`jAEQ'ɘ }9q,Q1rq" ΰ#˭[qҧC9qZm .x?Mr gӒ)&p0aExHF;A6ú|[B. ]\顥Ea-N}`jJg0u;, a*ڋCBzX&n{HPa&RqMCm.!K6g SZ:3Aĭa2h0B sF2<HdR\N븴Z|9kgq;^\sHeΗL963,2fs2,/G؋zL\k_m]Pd,V^K\$L-`TnSO Aݨ m:AYt(F[[ 3>1#2&P2Rea$"y`1quˈzQ S/Ko)3? mFemA2 =N^e*l/%$8jtc*̈ǯ!1-{ZbzB9fC鐸up:cI%aJq|,(x/_$">6d須۠s|"҃P fA߉s08A}Ԭ:-V/#nGK5kH:n- AhEAh1( `!>˸ :n[\Cb&pBXl+> 2oEJfQn!A,HȰ<.$b 2&íBmr¶-{ac]{# EcyYz~„!_!f8E8~¿΃}pC,z$%ypXԟ AKP6^j,rK# J`p I9C Yrk$.cy9>A dq !q[8<\#o^Z~ iQs83zX E Kyv7?<1teeӧ}X+n k؛,L2q˸X>zmCc#㶺m/gd.rtSPoTD.o~6~ nfѧu6QoUZoqzZEfN ep-Kh!X8>[V(?$>Bö́2[8ɔBHz.C0u =0CZo-ffHɸN8u18&s%Q%>GUS/4-BPńz_  CBaQ`q}\xz18~88Oo1l'G zp|ԭ%㬰-[B4찰z0PMZ|}9\%/rzmEx<~4O2/ 鶱7{c'=/wNlCKj<-MB.9-ң-r8>z?o!$ 2a -& ^'։zΡhr[K88eփeJsӃt'rN0!8YdPZ>Ž hQیfqB\䛏M֒Pޖm SsutZqKUDrĢPNf=l_:>1֌X̃يgu{YM#3(G*jow-l_Eoj/O_{_]IX'Xؖ"X~X~Z=xxD b x+ x7o!\q{Ņj`Ab] b n޸hQT: / aBB-oMom9:Gݺ5~j}GcfY`2rZn[oҠmDܮQ%,? R?}AیWWSnOEQqzEQ[*{ (LU唃q0>#p-x)8 d1 vEQ2D- %D 6-)`;؈EOVEdZ/ڢ(p"k<-!#Ӓ-Vp̐q;xк%! 2rkI%.lzFɸu>6& >B!- Y%,2av[8>m]9G[?~B b.f\b.&!a.2`$Ì}F8ㇳ顇>-/=([:͙MX=~X,E썍ӭY/ߕڴL_ +% XŃ/|fzkbx,kccz]vYXcKeYt[pq=d)\v%bz^dpѣ=x2/Xq[30sا:y N%z<}C=a; gvE qhҢn.Ң(2)LHHPI23W%3d0鐸5x񱰗,Q,Q<9àiiM'-( C8 qZfx.*G 22Cƺ8aõsHܾ-Y"az.?o?,_z6=g fq}cod˗'7a|lh顥l"ORm9OB}8HQ %D[06#aF`I =(N1QS?U#D⣘ų)-%x9L萒AH  '$r +pY\vr~r؃]VhiA"8V吖Gh`ۈ3籽/zA1m+=nGm/Sa?#8ޞ_l5YnpP'_n_~Z^/Zs?7/O,EPկX`⯂-!nmP|CTEPf"!~XBQ`|,PDG[`Wv g\,5ѕlE] KpJW ->A/So?5F 2Abdm/[;x;o 82ԥXh+Ғe>cH|0rޖ_RJ]˱oaķ`0~ b2a"K*j/"tXEDo YbVRԭ)] X jEg-IJXkZfСa2QoOmI1" $90/YZ' 8y 'w?);s=:)}Hqxɐ/2ޮa>`<ַZ/O?K׷yJB֗2mXdR_>eߖ- }%(Ka} >$e><rL،8b3$6c2muqoeoi9miРC2b2CrÇ\EAq ty5jSnILJO<>09Ig0 (dʽLh9h0x[ 3eBc|ɱlېT>, g80 )z+-ACFQ^uHy spKV`萐j" p|9HC *Eb| %X4xOrPoe!a"8?iܵ4ː ,+GI_bee!` O2|>?Eߘ|wy'R/3^yuLKO:|.zٟFtXrv.[˔2OvIyg9G[vqH%Onu4,Z2Ũ/3K){$*^BD _`H_`2ޖKb_ -l%(z$( $&g CS#ܲ:p/ S/thqd`ķė-$#[!chy]2Kp_<2 fF]܈%=⩏r1{8Xz|ԗWb%\:+9zK, hWrHx|8dt" ).-/] wuRzidde?K2x,>>4taVA]y|kÆ>yfD&ZdZ,7LCO_O7!Cʮ߆ vL˄;:( x ח2e qk[sƽWvMvaJeB% oroaB[|m^>Koe;~8;_I?Qo)⭾=ճO]VupvptCx  1uy`ov|z *?+38eh2j}]߲=ocP/EU+B|o1o9!ޒֈ :ŗ'\zِÌo0o#(toCk]`6SJ->-"x[6rHWRG˚r)v V2/aD^ߒ[k2bl0XQo˄RIͬooK˄-ER/;_%>0큥K^>OL v/z[se~!CB3|E}0˦%CCBJ0b%aV:$~;o.`w[J`/Y<"~o;2aKA0N^s%>sraҒ A/3xya<~|qfr8]o)wK|pΔotCcXr\?⠎Kph8C2d`m2s92Eӗ'KBKMe%!eė\VZ/%$vƷIi dp# I/u!!Zu28%2ۄؑҋ/ )Fa@0R-E^'L.o2 ^ZrǜbP\_K[%!G\uq|2zd\<ő~O##3p1?}^_C?I[yf$0G0+>8eGI4ЕFs J\/s ߊ`Q 8zvc|iR_(>-?A1vK// _m%$ !q"8c]Tŷ }R_ᔽzÌv)-& E|) !J "ѭMMkKe})3, G [DTK-ނzlLdk%aFoE0'ŒS.gاep4ނ%kIJLQvgq0Rv,.o䃄$-,îeǒ'~'/oO.> x??9'vPۖ>^.-~p/_x<(>{e.-{-ey )^$ė!-/Ő0eȥC0!Qߞ^69e҄.Kh%(&^:w% E..[o"X:ܕ 8L 4!#ֳEKАu1{A2/.ni]ҲOM_v9ҧjK\OcRsaۧnq'4dho^ᔌ)Ӈ\(Snt/§r)3e0T^2$Lixx+ wI8œ]/tF{\/-(/[ѻR<.ϪJC!KGU˚[E ۥXoS2(AoO_Y" 귖3lɒz 균 ַԗ"*,&ή"^faZR]\fb'e1!K E-2ܧ/_;'>\soogaR;ԿWVm][q1rpgǷx SFo-*z<lpN÷Mv1tmPoC2>e6؃tELUa#oH$r'y`hҫЋ0-(A[C@r@jbhnԌߒEYq|U+[XCH x[w6>~H_sdr~xƑ9a>2a?sՑ||yK~N~.OrdC>{qdV^.'Kc}?uz/<)}KK/.!>q8%!AI ) 2%apSSddAb?8ˆs}]˟DO/v/]/S[/<IKϿ8Ɇdýur>؟<txķ>t9abʍR|^fKITfu9LHCCˉHbs/3#/D[oK})",Ɨ[p/oY-,EYoPd$r`9u!,'b f?

      /C% ?qVfx '.-mrП.[$lCfp>xdz^z;,&--OZ>>H秙1C気,?xo4lUS}j)x[$~yV # ?/.G·L]/ W>yYZ^> )z[L$D$.ė·!y1T}ۄb>dm?$ۃrB`|C26# xC]Z=]_zjtɊbٲhxoC2aCL΃VGS/}brHQE0X zz RT .;vfa̵hIC˸YԴڎpȓlZ#!d6%!cv%(>Ҩ2K/Eh,Lo_ IEiUަԻc]fH0fҪJ֢$?5C,rp]r06H0.$"vQ1-m=1d1L}b/ZɊ$Xo`2Q.z $$>-.oY/%C5КNKyHw2enaō OIe0r?Ő ]neOo/\nr' ߿0$$an$C}sOo]vqaey~}qt7 8 -Ġ 77S1JCX/S룃ΰEP$ &1EzIHLb3$p8Xfqr-Przq0xCp\paCrz\'p<޺sH<薢me]O9N΅AhRm֬dHh}kW:y][F8}2Cߟb.o7~n2yy9$dh2NEa947Y'C]c_>jZַ, Fb,f6N~HPa roq~Lѻhp!!AdFo)Aq3CװPΰx;(7ghȩo+1y3ذE09o bauyjeD Sz9îZؔ"% E18VtidKq6Kd]o}".ަ>J2dv_ߩ ar\s3a.$ѽIe pvy./ŖY|;]Γ ˡ7Eˆ.x?xy\Zo˓I}좴$<8.9l қ,68ʄ'{a7>`pÄ-n\Eo3m 0ȠdtȠzķ4bȱJHHa)6 !`S}""("+ c)EY'%K[A-3vXa`=Of shDJ֛ _:>uFf=l=,'$>[GtӖ`.3Sγz3>|Ҳ_L9cܷ#s'r;L'{auǣOZ%Kr|,- nQo!>!gG2C.&HceǷx%1)u}.u{lyB|`QMI0}3hxS [n8n??/R=/_U_HqS[pwn/"E"^AcHiۆc}LԷ[};~DzD1h7oErnAPA頨etIȹaN2(=XfZJoXvX \fd-Q.S!V{;>E0<|knl.Hz;|xRM)ƷOv:6F!Y TPITX5X߂РLam/cjB/e.Ű7.qYUOC&3Kx!X)y&9QSo BX\>BCpPk,>E1bXJOstCAiRR2~aS1s\#*E[AQ\=Abқ0^/!H1~a.!%̐Z<n߆Z8f{/\20É"c2cNOvvķ{5(/]v\ 'r{~'<2̡yrB/~㭸sq/3˃.q/ѿE|kEE.r_ -36C„Dg6LbSIL2#ݎs8yp}#roCҺ7]o-rnpd$! .:V=pЧg< 3f.֜PoU9s`m~5oٲà-#s9dСO$<O-;888\`\e^ΒKه{DC=};>Go\_\d>]̃eVΥGK7ƷdCoZU%Csqƙ:2XجM|X?bnz/=evCD&,vIK} q]\Ľ$o-9$v >dp=LoŲXeo8._~>]yR/`k',z3eC}!n2š#Q!^ x>QIQõdLǷLUD:}ĶX ַCXrp#$#9lzYDwEiWbhS !PÆ\(fph8< Apce.CBcxx{>8u;>~߽'3<..ǿx ?mo~p//Z3,/|]vQviQ,[VwYEusi(!OZZm맠hhbԷI  0[D2CcpSf'CpPꗔhI)RA0̲أAVo;)A[%ADE,Mr>Hhu+p.z㨈!# I`FERRazq\=qE:j5H|[zAIovWXԣZz3z#إ^.:\IX96Ay$d4oJb]oznqNX(5Qzi:G%R/-t1zGgPZx;5^~ a[BC|^r ~:Coq>DJ}9bĥA׷t-6#p\l$A|K 1Nv} jaxY/9,Z9+R3mOC-Z"&Z/mNY/2TeD{⠸%k}+ B/氋"8jQmn "]ax)(2(R?J."jT'mӷNe㗢[%2ӮoHH>Jb't%ˉB9:"C!8H`!A}k}c$',2̒=A80{s-A4恧E^4LȐЧ0GPߒAi%C[?nosXoqp_͟b _AB/$\ nd nz so!PzܫZ̐ $F-CVp{iHt r0̰㗃qK9Xۅr =23XnfoߎNп7ǥOŽd2zM9t獄 AfP/06d}c֦`V&Ro}m2C۰eo+B/">F[#gH(BNxK%>:L$ \>qmbj&_-j9TE|ΰ%v";N{SBK0V Xޒa6z=7g">,AJax4 6tzv)AP[GX_EPU1d1AbS꥾51Qߊ)E14^J~dH)fLk3Ĥܶqƹx_,2\Aq:|-sӲa~A-'rO3dyOv/E<.e|a[\ti!-/viw(ަr,IxiiiP6kIiBJ/7Ac}nBC /Ex rf\%.3K/a=<%hHŔE,PE$t8Y?_eoOZvxrC, &,Nɥ5\m0EϲK4%(ʔbʍ_fe'~d]]x2-r eZmK),V%=W~GfWl1tSS46OfXR[g0ҘrLJW g|Dp^ˍqE۠$Y-KK]oM& Z, ;X-e7E¢`g݋hKzkP\z) }jŽ YX{&AEt]KPo0e?oA_Can8dtliKb}DVajw{xZ [o#Nۅ_ƍ/?:w87W7O[ʿo=W\SC___9G/ON% >rp.\ꨏG`hb w8'9 '/QZ76o~,FFB7 ]u30tQ-.# s8F-]2Dfc|k/ !|KwɠOsqSeDTo\8=`r1hh _X5TMВc ی\?0XkZo T*]tQ] ^Z63(-GƟvo]`lR/(VEet}.okKی[ KF$(%s!2ArcC-9Xm}˒#2^]ZԗRo)2.[#A|#\\AP(E.&~) d"!a^sHK3/uAQ, abO "9 '{p#Yveus_TQixg;3=$-ۂ̵2߼3Mf0̐p|zۧ.wJC2vP9pr}g.\!e/?\{o^t?K9 cSdx|cKK8^Rvɰ~&cO;~EM?4~p{鮗'c{5қ}Rz?Q2:e+>%^_NJ"$ er C|Kp!!ƔstH%fz;l4|c+A8xI=7go`i5'<ǺL$e \23GRy0OWx.9+!7_s˹eFr8Ǘv}ɹ$OCpuo[mqk܈UjY̐˙#Y;RisSKKOrAm)-]zz24$?ۄD2$arʹ0Kz%s2}b=7bIhizI7:1⪗Vw"Ei}2> s%7-Os.Ozcî ]&C/VfВjo[Ee )pB.ƟdBӲ\IH,XraQO_^R[/AK]2xpb7}s|9>aoO\̰7+sC>N-n0C|Ώo|x_uyr_^>*;'3^EW3z!{eY}K J9Lqr-]}]&^fixci.Kڐ$^R"L|,}~PdN%% {3$9$-r52gckv/sqJK=EhE&L0/-tYܷ3>!^:>OK}^t8HdsdZO#m9S3bd51|68Zn!eK+0fW -]қ)2\! |Ç|ŗŴ&sq}00÷H.50ap w qD[R^XzJKGIh%KB *-/52ÌpFrKK͝-zK]o,uGOO^6k|E%tŗۧ޺~*Z/wi7ݢ^-֒p//iڲUˮ-JKKb)wozK=Hv.2$)) ^7ܷr{Ȑ:< ebݗw~ .2'3^ó^>ۓܜ%:lpp{9(O {ӐJ_KBZEixt|Cr=(k[-%b| qO2V Sn㐺gȐ`D-s4K1#3xܕx h8^ ryÉzI~|ǧ9C2O2,+ /[_K3"d\/-a]>h*te.KFˮnHn_up|yH!vuo.~cVwsKZMUY\8ܷykذ /> ɥ]ᾙCLyr]mHp2X_"962>&h5t}ǚ9tmƗ3>EoMh2d1Ɨර8$%OFǗ%uH%B2K.7pB"7)ˌ]ͬ;ښ?YԧaYInE 7'tH񒆖`'D}:\7zd<0EqEwpO)3'>UwOÉǮY<|5 $/8dmWs,}+)=\çi+a,˩n\C}ZvtSveK2qxi^9?Ǝ}jo/wiu{I]/ysWKCrW} {JV!aʮ^zjK9l$?,pe0քg6Xr#rEo$$tiР#}0> w5%RdT%>[>՗/w/ BSv(Z&ԧ(NYєKKe7mDlteF˹]!11671Vpe 4L)p")'\_.'Oşs?wpݍC/˿O.%-wnO\z;w#n܅[()~  *vr[;(}qHq*BKK9z2Xn:⠨eR Vi/3CΠjŠڛRFLҪzep2$c2ˈx/K0 F hqŐ`P1VMמq|:G\ T/A#Ymj%2*[UOE15JT_V|ɽb$nIP hzUaV"֗Z?է/bae0&&c/O]j{HPEo] ި,~YEL])f0e/E X/wKxzIO2ނE!1 1{0ݒɡZZۧxErv=ݒ27񲫭"83d0LsёbC^| -ކt˽HcHe% ?t"b0,l5#ΐ ]|ABͧ,w5p| n23^%d/]2h]8Ys w0>zxIhCJKnEqP .) xO/9XxiE5Xevld0 N=~ }dvH2(]o'dpHI?4+2R'cnt.g ["%]{8q|'gK㭻r SRf0pnn!sxis!|/dO/1&Ko/_{]Y~_{ė˙ ߇izpb7$W;G[4z G0(Vzjˌ-.w{iuQ\7KSakNlaBKėN| /p# Bފ%!\(w IH#psvs'x\Y ϛE 剄KBt%㗛7Ny>'Msٛi6O yj.偍7n$b!yexO2i0,f1dȍ3^[.0)8xFtiioAY+Si> ) )"-)m5eW\xb%0''lr䢷r#!%hiRl)oY$6˅;rO? 7wSd1>=#-T;͖+3f'=7A%C5dtKKk&ZZ_IHHxi3zi^ZZm^VZfvi*֗!إ[Be鍬Х%T%sg&<2^ǰE=%a]ˡO Z=evL|KJ~)([EDZ- AEYGw8F[,FPCKLZmoE',3^n0,?uq򒧗n/r_W)$^wAoDğ\BƗ4MTS^$t So![p6􁧷rRo8bIG,;ԗqUs۠e4fC|ÅǞۗE47>Pq0f 厗Ohחv%Hp$oݍX`$˘%dP[_-/A8^/EC˄88(3$$H23l0^(7eazr04dHBHȑ2B]9xrt48XɃ$ˉr܌q<(2,]fɰSfK_.\Kzɓ|1~. on 9w__uO ߿<xy\ )E.w谋2y0KDpsѥ1ɌR/)֧-O_.C&8$p2$&cx& vX? K钃 S饻8hO uNhiy 4SN0G·^&8q ]1eoXIR9tde3kF^7ΡO/'ԧJ[&1X_YsfPx٠0 xh"s1O6$^2R'Ρ47K0MEw&9u'X|8Yo88~s9!C9M.΍o\?~,o?2ho,mкODp]fH\aOSZ"z/]e} n$ҔMٕ$.M1,aG4X^J CqçK?rpc/(3 r\x޷CS wsEaKJOsrjd+S$!aK%r=h",RgQNKâ%2 nf5Lc[3F {Pԧ`8=lb^p/?s<=1Xxov#^x3S;=qnn/WO,ފ(OnrqP7_S/x J.\TEoAC|9/)MOAzɠb*7n"Kqθ=aZ!旇_*=dDDž27.Z AH}c2]f)`}>ᄃqȐ#sY>ɅSJ} n7 Y8HƗ%LKHKsL҇\7/'f-/DrjU֟CР$߰[|)-%hK骛֗`ZC[v'қT/JeP_Άp[:$"a}*=6L֗A\n4CF-%mMc- oO> a?eJ\$xi9~.9ħ7Ks4# 3B.w`pd[QoJƌOˈ(A˄x 2ņ '\J .W8>x)F ΡR86 ;X2˄ɡ,]/u}/3l 'ܷ/  u˝rm xM\d;7 <}8ex<%~ۡ]<͍O7~|b%xi̳v O/$ӄwf738.2OMOdHL&1ħx9"vPlx,߾1߼$07SH)E.%S 36氘0-w}Y㜸[ۈs v$r]0Yuћbo\ BaЋ 簷]<;ratX\^' |sfdyru渻2OpElb'e}:є n+MJW-ZfOrћTZK&G[fofMNo/Y hdMBD:I Wq{y ;qACi7Іy8qOr/_!Sx;O}S<\v 3^x ʳL`OG42r"j -`?dnTxK„A} ִd^:#ZN%rhpK|*sq8oz[7~|`nWo<73<aoħ1N_[z[Hh鲋j)JJ1aK}u|,-"> mqx(.a]O]d(;r b\^!a.9C&\> p@r2h$mhye%娟Z/]/A$hBˮ'L0%!u|`bOb#6 h^sx^ZM ޞtF=:hIlPk~17Ӫ%q7 z½p :lwf3O܇&ET:/AKhE>S=#Pbp8]{Yft,3O2 Òt-2 ORNe\bI:܋r]X7]62;ܤXEJ])}Jâ) "e,&~b|9rP);t [O]ZėN%S1g]&&E̹} a:Fʔ3A..<ёC[t"{9>KPD_n˟qsk׿O`xm$\~ppRoVou\?n\ۍoz;noXo!~%xI¹$/h*A1z\c9[z︜|oǗzC\d0\}#_r.K{b1r09Қ>qBp$q1>5dpz_FX^^~H_VS??tڥT{IWDd{5X7]))KT|) }v+j-E魊"ӪEQ?)J]*ߛ[b3͈֗}dx[d}ZU_* v޴z-_^e B?˔9tiQ,K맔!!"\HSo#OeʽfKK}2N2!CJE/%p.R^aKIY7 ^NH!ek3nZ΃dxI%s$\C ddFK2/ffK?`-2lBǜ㑋; eZ:rqBˮ - -5. ƌ0Gx ])!#!.79]_~>㷿9?j,2GNr|r.3mS?rhhC?n/Kަ]sݹt^tOeAz3#MŒJUzCsӚEjʼnEW.YvvSa AHleFN\\v2#s:2Gy-wtKBWۺ罜˗Dra}ZrHLn8!KeEK"6Iҥ7)]_㧠"vtħJ"bS$썐!O'y/) ]2hCȰt73C|:K&$=)3"73$V Z/{{#>\{!7qs 7۷o7Mn| C}&%.yzii{Л}~j1̍grSIKKBK3ʹz9.g ]3|SAy x LO!>HHxۃeb rsFT؛.eeZœVSGX/-E1AQbd!E;$l8!e\$fq}AKH]/S620e?x/'С?HḪ/ۺZ/ -܋rp^o+0\$]0Y>]/  \1>fz}|h)rY]y$H%K-f!3r_b8񇜋xj˖Vwiix]/[m{hfoeL<i-O˰>O3L]viU1\Mt{)>Kr=oe֬OP?l(R/Eˮҡˠ.SwR?eH½LTl+gВՖF6XwʢƧRriu)%~ɃO_>eY,iqC0KrG_/sz_GgEv8Avz/O.%"K$.Zo#F/`Qnvs-qo.tPP*XT / Yw>5^fՈT-RZMD4/h1}V*{|i aC] Zrr/ɘ". ;+g|i9ya|c}Y3-mdom'SrO V"5ު[3XzKh]zc񇆶&+ە魂mSIn/]U/{3%VBv^E-U/b1.ѩ/3(Ues',Zmp{iQ/z+H`Ax!(-Ҡa} 4$KB0U/S/]ƧAM맻cOjRƨg ?Ȑ i$2CB5ΐC.o x)?!dp/ )܉jo]N%؛Y]f>p^vˆ< ɸ ! olvy9xɃao %$ yp^KYBAo?X<t~J?)4VxrA<,6i'̐!!ȱj1JW$Æ΃!C 9~qb"iFK..0x;xָe9Dp'9|$'`K?hpnD\Cy:F>Βx9/>'^O^7z\KŇ~pFYr\xi]ÍYO|0OQlclqXoQ`;S/ 5>mqXQtkR;kvI\KK i=8\̮Økbh_$uru5pA ͱ ${2#io2$e`8c2X# 2?kpxD0U\ G90%~2>Op{96%K\k oLy%]Yl=zgbΐ Od. 3$ab7 ͠ nNbSzEr*{EKҐ%!t!Aѩ3j^ -YZ J஦$xCJbv&d8C̘Ek3!8vKbޜ=2Ȳ\<72Ɇr0ܿ8M> rOoanoқ>~eߞ( 3> fƷvp#9w#8?՟..?1>#p9X0HQ]3-Sߪ]uJgKVfhWr X,F}Y2,魢3~\l%|xxi$i .,2Xߎ2c3q2Í n}Cff}UQOqXfT%?a|Ymm._IF.t|pII875]o -mI6(F%hK8vOE< IcԠXZ2("bP$^xذ"ƗUADFH!C [| --"tP mo HB1[BK ,. ?fZ%a⧆2!!GU -Cן2`|R>Ւ6a2$pz1d9eZ\N2 /'8qK C{^Iïavsiחfd.oX GaFw`Fgp\hsfe/mqy9Ҹ1#yg9!]44 XBΨ0ؐp..>pX\8%!Kf|s13rddo9,9s"/&CoES_v/-pq/rp/ϭ<UI9F{y`<\.wzʮ>?m rm^/3O]#$vAK=^˹Ff+)΃`K%^Rێ`KCȹ OoyAY>#\$<9/ܷ>0$C6.# Чt%h>B.?],V\pKB~ػQ7_H<F^қ2erF>1O9(2Pdeo& DD[LtoƗV2޶(U!67墘Fْ!a+9rR9d59>C׷à%\:\dȏqXo]΃ -o܇8CK yXrqnnZOZy 0xoxYn s" )'~ڥ)>I_Z/7<6mF۳$x9̰x 7&\raR!!aiȅ<~ $ܷʖ\Xm];dBJ-Ƿ"|~shoz|LDܷ{}6a:-Cp35qَoǜ؃2uhՔ]BpFf|/Zbh$2x{޴:M+̠ FVKRh+ϵWt\$-s`9_)neq3lIhKsBFpG.7-tՆ)]%w[O} [0^a]sq/Ƿz Yx.ԗ"4mXg1iKb0-shII&-lhxxt3O\?}~,.;?/i?:ǟnw"p[y{? 8 ]b~KD[\o7ƍC|Zj%GApz-ń=17n36L}҃e|+x!>e.=`:R,. \҉×x[Ǣ9b|;8d,ekɠb<8燷p~o8(t})bȅ'Km!}]EoUVdth"UT./%6?[z{ˬI|mP Vշ&HT. bROo/uK.+n5j$VU^B/(bݾo!Zַ)_%$$!66\L}|y/) bx 2̐ԷʔOַC BRo –bsӡ~wdKƷ e H8a.2$rp%z9e2tȢtO7 BK ຤8sa||[BȐmh!#B%-6!C9yv8*u5z3ˍr~`|[{a?_[.=˖˓]mYܟMo[fOOKo) m1\l<>Hx">ْz9cir.'[1 א!Cq w C.i8azY98CW.Yvi]83#HrXTsc.vm 0؛rR--KEvq sD8&e.o׃ı YphoǑCa~|ؿo/<?Ϳ/ȐO)qԆF[u}RKBcdYs?1=PۢLo6,º} -Z_s8)͘|([D4mO)e1/m1̑\CFK6\ r~zW(y ƽΏx?Ч{qwNV<סC+xa3fHC2X_ Tfx%C+ Kz N4r{ J 2Kȳ SmEXd)vMmҰ7߆8[0ЃEd v9$$>m큛g >9M#oZz'7k0W!!xc?铆&}qԲ~zKhz,So[Zo -ECТbh%(¬ȐY] ńX:p#ɅaǷp=!2̲7.\A8Ǘmo7354l9{a0A shIPV; Sg._K'K r xf'9,6hiIH%vXܫ)-xlЛ̒VẰd%o-\HviFB0}zI|2QCWeeà5stb,Jm'MԷ)6Uc8Yr޺L^]o-쓭Ֆ;βlm;?Bzܡ!^fO9zx9:ڛRڥK;5]ԍ6`Q[݈9Z場3Lt${vbx˅1(Fsa#UN.o]:Pg+2Xfs/e0xh]1ja|K#: 9K{V{-UaѢO:ܾ"[!T}XLAe653-,U$xDqU5˒˒5ݚgHVwAHԠ%a[OҢLjJŨ%?[[$pė+Ӯ߅ &~1^o=s/OOnƗ2a ֟xPx[)Hރ2^neYRr\a3$Vd zV/zx`P B B-Clzː\2/ ]owۮf n?]Gwi&1-DQnL  f'<]h.7AOZ_Ѯ44s? .a˄-Ƿ,]]/ƒ6cG}\d Ef^[ovOsH/c\k4,r 7w9$Aȹh~ti/匪r.fH!y!#$+C>.o>t/ݕ!`.}>䐒_荿_ n KW>p=쭽"OsC7vD3R_n?H-61Eo{-`T[z]o}>ˈ*U/bP/`hɡؚ\e_ȓ<8'qɸ]/?>c|p$̇t8G͍C.ɑ9?~r2،3ս{`[ė="vCn9̑ =8P,K'%3%#LW8ʚ$( # C)w!(ZB&LE[%SZ]pOл)/AG j6vJ1~Weke1^Jon/HȰKK|k)2X n,_%K„]o3AR.fY_ 7[Jܨ^eʳ($p~#}=޸a0~R/K]ϛn -Ֆ_ZZZZEp#hIٛ9XƷabIh"([)Yz֗zō%T[BBBo!eq!7!aq ΡKKq[z ]) AB˄ԷJҸJ$X4ŷbIi0^BˆַHHAY׮kP$XZo RpWObe [b߸Ì'9tzyxYɘZotpyT {jZ!j z)7&Ҳլm=8ϛA"3XRz;cՅҘ]nfk,ZZonz9]oEkZm_YkKIGU$0K'[n OfV c$L,=xr{Y 1˒z{K&bRM-(EEIcIf P/RdPzaJH 3z o Snrc&9dP 3,z3KؔYn.oOLH/ Xoosp9S~svprpwjߡdw.5Xm};/Kp -zKhq[Ux ?8g܊_y K/9Z<}G `Qe/U O7&^۠^E0Z5VR,fcN/B>87raPorx3'l ,&<O28̍Oo␡>Cùm2ޮOwe59ZIp9_[[96\#=ase.6p0C'Krp.o'qzu\OdA>Xܷ=+ܜ|o&pMv}c0!s9C .&뢥gfaƤL8\ޮo 9`Eoooo3lQ~- -)]v4lIPrV$<ǰ^a^)o9$ 3r 9OTNeh*9Лv]'.\ wMv-0 ey$[v[uio!8D[yk./o{WpuPqm^ g|xku֗~՟?6DO_bvFiuxzemCT7aуEDf~p82,3w]ӗo>lSzHxf- 3Q<-nEo[CQ5]d0[PNiIL aBiICa_rfƨJ3/de]3+Ak= 7.rz_n vp/spǿw˺7WFn$)_ -8/ǟomP,B/-ZZ߂4K%[0"(Esq=R/+<)E|+ON| >xDpCi<ܘâVFPo KBorMKcbbh5+T$beFJJoU^Z8%6Y%9XCFC//Y4]rE}!sx;~h֗`|^ !i%<Kh9ےaHp.VK2XXVJƷz'J+3K/eh}鮨4VEElַHVM)X+ m%^.ŬJ VshhoEmIZwom?7!ƷjX֢E|?DEf8!^zےxҒB f0l>llh1^*m{ŷafCHX#37 sIoTpy):'axZM 3~0m|r}`q Ő0y&0. #28n侽7\}s_θoomsqo]ݧ 30pm7ryO`r{<)f82ϟ×b0'122^$o]¹=VZ]dvS0W|'q'u.} @[nbSD̃3ҡ!<%mF/cupnR)R-f=t|ɹ'su7jB wO2̒XAFh3,EJH[K̨,3[wiI[[o-,ҢvzKjVrjbЪBV,\R$ rmq1CC2/.rLx<e\xrӆoe* 7 -EҐ79vQ2TlkEKaK,!EN^$`2f2!}S%LtvCD{{wp.턽W7<>}o>ot!Pܸqnnrp;??Cl/$/oǷ_v|9Íۍxyx oǗc} ".\u KVo7ΥKyҳ<||Q/7n_.!ߎoC/=axjviPmP s3J/5Ը4XK0 C EF%$8f928._bp" !"vp]c']/ _ŗo73A\⁃['h3ޟ0Cˌ/ߢ>u_%}bjWI/]IKoSOݟV7]ӗnbQIq [vU}A֗P/5]v,ubQۖ Z ["BC++JXKIAXmbZ'JKzMn_[ZZ߈d8# B֥7%Px|񻥫-,㐐# z0^}2^[oHNP.Q!a$#8۟v.92?0~9gHx6o7{ӛ`s!'9\?rt0?}s.2ݓ]oߎ<nv`>rM?l~pIqO}o7Z˹}ŒI y.wҧ/;Cַ;]K K.2&O-[&r=CǗCBzkℎ!'\X [.™cti SiMN0Cΐ܎"<ͽuww-/ی/~pc!C>!o/r.r9ՑAFyp}_똏]_~E>8 >#=OOO}f>v$%7{s=S>zWܿiK?˵ˍ7OS[h5{kŭ]_EteoZԗ4oGȑ9&/'q&2\n#2~fƗdKey;䒿og>܇uK/Yqvnzznɽy3ս9rX;Ip8&ι|'7$)-OTtKy37{5EHX/0Kcm" ,J`[V߂bz C 9A٧=xAkj?NdE H,vU6H.2689\de)yA&=aΌM؛yp]/+禥!_~Ys2'}bIx~ Zܴ t\Z(mi' s(<6 %0C ',v|+-n5yZcۉ.C:{{! sȒ! 'bxRZzkE)KYJoZRZ,AvofH&m$ΰmJs$ɠ 6;VhǏMo*d8#'X<|uFt}k\Үxp\c>s0oҥ;ܿy.ė16ڲ^~J$ ˄n=1^x{p DfHBB]:Zonii湴6.s<+]\,B{)9di$뜱$2X.kwYs ֖7>Ѣ[zsGNy3hxVVlc-Ki)}bZ֒a --w.RoeIDŽM.ǸD֘O}3qw=qx/s6/Hӧeo6a8o~Et?:}Qo Zuշ#n;}" K#c;p\Q/EE r@1bHpv|[h^>0⡞Q7ˠ^&tеj,ECJO? sjba)YmGNP`$-5wH.5FO'=<[%KKbpsƗF_xkoǨܸ8$x\֗vI]ƷE5oťnCUhVnֱHe D%l|kpp,cs{K ]HX/1sE$LM?PƱEZf|IKb} 5Xi5oK^%~WFxh2a$4$ r[z)KCYɱ&.`m0s:Xo Yo [eb?8O[\`bLJsSr0 y>9CD\\n\)#)3~a.~/tyÅo7K[oo9ܸooG38~J`>H\%r}7op簷_.oǧY..ZM{P S$|x#CQ`^7+2ؕT}p#AoTRԴXwkŗcHHH=rI zL%~ZH[ǟ‰t8:7R0.a3ۑ};;I0ph^ZI.|pP/C~3tq9d~Kj3MFEmCp]0d!C.q/dHɃWy>e|>a~xs!\A}q~^ 魟.qKvS p]mhh.Q,-!!(o&ަxp?iyVh5֥>^JaƗⲻR?=YJb/ YT2l1SАȹ9d$Jn:+hI8ȑ9"θ[#79\+ׇ>tq?s,dt~pCWxEW|Ֆr|ۄa159*f/ f?qh!$gȲK7]:gy%yeJן Xl7-ʖ ]o~L)璒0(fS&l-=g\9rCcK/K V/u1*3ޮ\z ) [-URdPdH-Zo[F|-3xK)2- ho`Gq/y܈Qv\. >q!? eDf0fH\L%'-Yme\Vp>hf\fq/`b1 njۮ&;I8^ַ]gxڰ-s ZéziVwjC֗z[ח=t1d☳eomqI(ΰ̬c2ՄaBJ!k[|[Iumk^ 6(62XjjoRfKPΰe[/ˢ8^TCJxɘ}vm0$eJg|rpvћup\ýrkK\ذCeKv vw< ]"r{;EW~W?.w;EX=n7oߊ-4b˷.uϋV\X5(p㈗'CDpa܉1A"ŷSbO\6o`Җ 4X\KIh vq%g場4LuD Jf/w2!aė ͈ O_n_pc񋻥KAp?vZ}.3 /do0{亜K"CWw%|·|<}yse/×a~pֽ0\dʹ\|~z{x;W3ܿz..ϡʏ#>7ùx2S~}ϋ/S[=R8Yn`s+ ,-iu{f~ҪQe|`tKbΡC-[Dِеy`XՒs1#NpDS9LJd|Y+˔Yp._=r`ЧnHBap,nu>".2cxx9u}z>+|=uCB|'d0i886_]->9<KB.\q[{r. 7ېؒe>e.ow'Y_aBoo9՟z ---deKea} :޶L({$-`2BmN1~a3rY& v ; n;'RYK̐(:\z)]PaYJķKKoom"aK0K )3tq" \AJ=x &%aC &rY9̠fqpȍ۟یEJ"3$p$4fzii%r 3^?eVz]X_Cfh װKK2-d}m%{8ajKu2]]$eS֗mii?etorĐ[][VOMHp"({K ]-ɢ8=<$?$Ǘs$.oAؑ]?Nɠ-VvhǪ^E_Co_/Q^CKWRcզğB+"fŐbH8[PߞZI)r!$bzJt/5[ KiK([wao 3  5?셮?AKZXZo33&GIr}iu7f7ܲ'?9,Jd>sȃx8ޞsfnvzyz~' Who ̐p7]w {faMO'EB/}){$2e=Pdcw b`"aȆ 'ڑ bV+ׅ2o>/rgl"%s7_r'̑/K Z" >'77述߼toqG'sC搋>erd^W< =8v|;X}Sݸ%ƙvT7JB>odYEQ_JGs[m.5L+l۽̈aZraVr^$d Cpmq\7XM\-]`"vX<şfC!9vph3̧~~ʹw{v謜]mc8|OM2\ao'B Of>`< 9;e};jxLuJ3'Oeqx!eVrWi՘ #v1&l$z+m2!a,)`A"aBTsKF:vJBjq r bZۛ^Wy-zqo%C.䌷soŽ,ZN~eORnpe}7-=[3MOėU!@+ TʟnY&${.,?0ޖ`1(a"â>U^zX!PMCM.v*(jw)/vpUE Pkw" u;t8Kf0N?EF}e=)ȝ]^O`VHy9{xԅ!"HaPtT +( av壨]P6ˌ?QXo*C., Bi8A(A1{ؕ-ԇ=G:/>pu1nRXzIlZeaw]jmJ{Of.E$1,Ϊ!֞.d3Rig8e "Xdر,XQbvY$^a 6F5ES˄*`/iwmx+1],[vbA(T#a(l. ^"s$m=NVj[cf""!k/m2:q UKsez*UKHe:f.jG_qΐbJeL7!!SB*f wr×*vC9CX[8?9_GO*[-+1뗣[#8E])ﻰ$ZvO)0))/mhvvFiܱZvba1j:9(v/,.[VxX\-fI"TPͬE.Qt! +$Ӥ]ӎar\uY?au ;^1ltyI>e=vQ%>.qII%7B%P|Z_˜OUiRhvαum< [̰X\v7qX>S5 9^pPaG/Anpx{gŝ-fH87oװ.)ԝ=l1Ovu.O{76u);$fl(,vp3it\E}mf{o_m a,qȏY.r}Qe<:朖C}24%5^R:1)/o)Z/_H6o̍|ab=D֐Plaì_֊Tn2!Dˆ0KpA_l.up1K]d(_H`Y2CA\vK}p?|`*ۅ*87Om~-8_4/ƍEۇh/0ܿ9\kGań`KܩaC ɍ^|a; g.YvY,]vpPŲs5zvVpbpM*E0sAxƒYu)[B蠚 gAKn%a ( sgM1KyaC]"A-)oeP&$^Ρ 2a1{y9n/UEC3{)!!c=$5x AJ] ٘K?T_tHKBdUt1պBG+Yor+P쑺e3a?Ȕj2좤,6’i?}\zNs Ey(<|kGz-am*oe$BOD]B]1Y:XfKRb6vWv 0(s#*ݥ4KnE}C”1LXlK#.Z 5"jCXSQ愯)̰]+lc0TK*Mb<t{ٰKMȔuHaD.4{:V?%O͍VӤHىq?\RTs߾y\&uyJSyE} ry//6\ECEo݇oN}sstR~]ܥq1קbgu})nw2fc?CKq!A:8TsQ(Ogx( f;,;)B8keSΰCJޝd#>Ln?J6>v<}͝4Y0_Lc-hÖ* g a쐘dI#TU,v=ut!-6fIQX vb- VpabB-jByō'Y ݖP6 >8wp՜/\̰v:ls4vV6\ņ 찋a9$ KA[w8fQd,aV5hvqXj9K ǟ-XCZE KUcYv Ƞ-4C؋fo^rC0v]r1ˬnOB,K]e1B<vEĿW8K<B J ^ ab!h0EZiUE uֲz`%FHxJBB%q6r*RU8x8_i+/U\;!Ue7\ \%{>ew*jÐeYx x/-&Ayh9LBPHbw I`Aˠ_C]OوbkOpF]]P -#irQbP]bx U cZ a_,v=br\XNBk6YR%p<Y$d ]w X%zUgY ^Yk<$ebQrеRZv٠ΚDmK3BFRL뭼Ma=7|Sc8h_8?)0T~/qXޠ?"b(/HvZ/X]o9AyJΥKx`SuO A+-"wO,Bx[YZa2EƺARC> - e i>~|J.<%oŇ֎?ZSe?9~2P-a11I>7v/ɍiqu$&a)!$^B57;_ M|yƺH;qgkmŌ%a^oˎƦ,ֲc&$\aFe ?-v)EAԐHP T,%a&B)]iO-VfCʊXa/Rk0(.R^j$Ovb9쐲ER|y8td黩 JPު!$E7}ySvH^8i4}5뛧>) x ?~'^_*iOoR7\~j]\|ܽݩ_;4狯;>"CB7]f3; 2hƹssz;n8~.fp [6FŌfD U*܋U٦ÌT>\e$hQMƲz(O-q}8׍!jnvPT{5#|kV\|]rpݩ9ԥ"Ei:E_REnd9ιY\o럸7?a;,OΗw;{ ?*>.uw}r|[{t뛓K.󯗝Z&vK]s7+͔V9K>IIβe%WӮa9u; 6!!=K%Aa^cO4^[^ !A.ZnEJWS%)u_(DQT{k]T]3eAr[ΗXr B EMU%O1(LlyRnv7brs{Q܆*OɈRG,ιG%̧n8h4TfIns|q0bYR԰.xh,xxYrĤTʟU<,p !^v`^R,ˆۈuYl5j) /n)vc<ݸ0lH 7.. Y΍7ܹ}pAc *n n2wb w$̒,X&CI0X/ 0RXb=S*\\% *UtD/}㥢0ءY4JR\ bC-U^ YvH{CP\Fv0e(I\Wbs˪)#]q?3AJJ ;A -3Ldŏbl/,/r-n9dd]5L$%X21sǙaxpJJ.GIfc!{ `;%!ulkʽF!av 3\5Km*WSste/] |ز̶x88jy9d\qĥ2,Oа?ҨhBG!& i15z ~szDB[s-1܏Om5dHucy'f%hܱT~p̌I4ՖOiqsڣ=\84櫒ܙr{Ŗ*gpJK[raVIep̒fa5hz9C!Yt+!fAx+jʉg;~3^g%N6*= ig3̒a18ktpn%~J-XhyXެ+R?m-l鿍+wZX-l77v Jtݼ-/T;Uğ]U:/\X=,,OBm %r[,^rybu0kxjbB6,p0-o4c!EC^fܺH.OH>X>$EFMr$!k}Mz6rueYۇi7K| [>IqңwMmfq%xxY,=$ԍܘR=\j~͡c<Jw3pQ)-9h8&QHx89gP\:)P fp,zhS=xJiѩJ)ac,E쳱b#*uD2孪"!$BR,ozh2m/-JS/]Fp4Hdq>_fޮ-Yz‡!;g#Lp؛Obo/]YO/>_||~ž'E{إw\r밋0"(s>X>LAIPaᎻ!eC0ŝhq&t\YǍbo/cr6?x-uHDf/ a-aޤteͱ3~J̄.2 ,dYF{YoK2^f%,o7v:7 YȺ$Cu鰆5'{vc}6|7k}$]|O[8N.|Po7|,΅[B/拃\|\_܆/w_wO62sKs"~'e.%гZr*S>K}#sÝwlb`8kyPV,z84ZFsL=!c]7w77_~ipfэA?U naoO="oPo[Ifd{;-h<]`yJ?Ɏ ;|.l,-?%taP۠~Y8r.MY w,7eJA eA=UA$rEA<儌,-ptS-e qOɐ2d$ Krc>ȇ+˟-/EYZr~X/6rߨ,o[SхoZ楛ۢa` 7w>O.wz26B,s\Kߴw7lz8C,m1`Ҏk-o-IQzj2:Cz8 6A뭈ΑfSHx[7hEB:؎iK"CtSʼn8ߑ>.㥽#,1vᎥ_Oql/2K% ۸>|Z(fX)/lm$ږ+\NX# ki~EʊջG53qNdA$e_"zY8DHHAaB"^rp}P vբ~jIQaKž9Cpq`!XҭA/loCJ7k1h-:;pP|r1ShQ/JCR( "^Z"{i-Znjr̢Obcpu퐋n:"K=5h$4$񒐐r0$̡ E6!נJa"!AY`pKhApd P/ žSn:LVr!$Lp'LdJSa) A)r08$2nTfyj7Bxi]E8!A4t(͡CB Z 3ud>Ֆln9C"sԬ?;Yކ!{X|.&q"qhc㭕/3zer~Y8҃CQ4\̄{ sHSIqZƬВ 6Z\IEpT4s9u.pJrp<ğ$.je)eRARdp8o`{c;◜2˜4/gpHpBJ< +tHi%4ڮsq0aq48E$Ύ+qz$)go y Y޾_^?6?ϸ4忦mc!~Y~? lBKxoEYoAS7qFK2zI0am, "@PK/q7)`fe09X&Qc6ሧ$\ . 7f06iH<$#G\VoXˇC,z~avkEᎏۇdƖ7,n#YV-K7Ydyʐ$\AE)VZx; {1%F<5\[8ùwoIDբHwepx[=^.dWA.>.UfߙM_;W߸``o\w9 _nu#|,w,/intz8?/N9$^z?=9z6)ki<4zPeTAp/- #ڹ]: e :2C=,I4L\p$ )7q8(&6,  sM][ \#f},-O͗oI^n,ŌqOo~so̍s0ܣU>?=~پZr}gn:wxN8-ź $zJxpЃ "194ξS4dɡ⥖8jHIhhC.drb.a|py,o0aC',q㺑bKbn/Í^V`;Y9dȍ e?a<%&CMPzȅz 3by;o5 `AZ$%5w7ܱ0( ע03$!sT)\!Kͱ5Z^ U(veD-H+ UdW/Sk 3G6t脄6(od)$$5gٵ]_Pڳ>E/WILu0KCesFMT7ͿPx4)fhY#8LO/ |Cu/8b12k7jOGakK4gM0._[,^ӲD?[jzIc!B`paPOvI/]Dm_Q&XصeKr`V8\Y*FC. vVR޾!$Ty+RiKEか)x(i[k{9>n-ͷrث2C[][~{$w)?$\ry%̲KeCղmPL7(Ǝ5DY%/IS l:Xf%[62\^MBŒXgA ۨkՔ%ZZZ`2VP4($6TĦa,ESegxAaQaC$̡)/ĊˆG""~6`?aYzZoK-LH,^bQC݈!C-X66m-B5!E-A "!ۡ/]ڹRH(OTz0TR8(Rȃjs|О.s#ix .o\qBq5)&_EyKbr}%7N(tS+ʹ9h+7{r}RM]7|Gpa0ƞAs8|+L\\N0McC]AP^fb/x:KiI82~m}i`iܞ CB%'ŢKE+$ErG?ы](ITH_vB[xs0Gɍǿ3b %IS|ux|o\oouͽ|k{+s-v%y负 L(,&0ŎSYb]!E~]) RRY?t&^/)4U$q fckMH#Rڱ*_mzR$\$^64}I_Έ*/'omͣ%x?|PM7sD=N} <~#fp}zi&w>toQn\`?=a]җ`/'"vB4gd)z*_t0!2E.XOKUˬdQ-)8uHBP8hƈfha4TT Pt\a":f>}AE9L2mdi/sHq?ԃZ|1v?8 Wئ[X e e~C||" "],gZve;$^o†4t!YRE K ^%*eB4v&Tye\A8U>"K5X\b°KT$vinOA Td#)zI{)ol!!alQHbb7Ҹ ^j; A/U&k-)^x[Gy(/^rY̐>J?9Z֧BRͣ?SLdBBi=v<=Y/l{PER$Ԫ֮*H8k:Je;Vٹb=-⇫=KaAcʗ4˲]k\:;~Rj6bwЏbBG Tq*I\3Jw%- b`p]ܦ6r7YlAAPÐG%%Yj9R f%KRaBMe#Y?$)XE!Xo*0%%;&r' ӠETHQS*mzHx+/gp~G>OI5e0oWA:h\?oOWi pa!ޖxj/x["j1˵"h|k[Yz "$xxIҋ=Ku00 -y~%*^ S,U~VZ9K⭨ЍAdV% Ixݕ %yCko:,zjG;piͮj߬/i_~h9C,=5'e]|`x[l|9voVS.ۢ iQ)ȎF]6XOpX%FR,3T슰e*T1`QEy #Ba.(m5Xxb.vOa=5% [bKcAA3(zdM vnAy[O&a H R.=^ ]/Y8FaQA&K")/vz9XahHQY+3Sci2Ƀv|IKo4C} ˣ?|\(.| /oƟ\G˰ws{^Ź[ps㥚:|;Î R,j8C.,YQtFXAn/]h' Vh{IYv!Mv":R/٨;O O K{*YȒ˗R3Î(.vuj]M_qE.[tsS&tK Î~4pQvŊ^'sоl^jGU\˞jKC>\M=~؛\˅<]^_a<o仗|ك enxKg?OǞCJ曝ᄂ39)h?]vذfea e.v=6첑es]dRRÖGB(dL[TSբ9]܃&0eϧjyPPG8*Iy9Uv.f֞>tQ{|99;A5aՇs=MJS b"EHc\a0Xoi/dI-5.j6%~],` A0ŲV8.,Uk Yv})KB Ofj6䰡{3T82' 멨O.=aaS(z8lbo^vE%֜%xbz[te,*3$TPK£vѸ`8 R~XCzɪ.fY("^pHRePŢ ivr5;l^2(/U deH! ƗT)2o]/mP[$2aK< .N(oY A!nK- FR(jX_6KO+CF0%Uo6^MBKU|Io0mkeϱ~#Ly N+OXZszx ֑\ˮߝa}f> DUy%~R6 [̌llaXO2K)Xp B…b/LJDv=\э9jEe;7}I57~ESEEHp3=&{|/]|Ur<{ZQu|^8_7 vLᐢdÆ`ADH$eÆ]Rt1-J,Y?jlHXj.;`jv,,U)`ۗmjn$tI m%"!k:(DH*f, 9m0˒E/YEZΚ=8ܑ,IhY= @G=U!J;fm`{C<gHK45h펤S8"eofq0H)b^ 6"{JazH^rq6"Cа.B^Ô k8EHdi_`l#çõ8>q0؋u,x?p48~?6GAp4Cgm\~ z޶ey"^Z.,O,ol-z)C.ucPO:SE % % F-%M{tBYR,R1YH -A4qyx,+^ZB"Y%YeyK.&$eXtS>}zl=jk-kEeK+_KB%AXXAHhR?x JbqBRv9Ř޾l4ކHo/FK1>p[wV9Dէɇ4[O0(Y(,Q9UY") -1uGDoь1**xoDߘ߼䯬b~o=7f>Y^WᥛK7Is>V/U9^2aTtHɦ]J(]38Z"aK̒Y̢Kso2.Y%cK"GSPzJ/%,×SΧ9ڃ%)\:G2l 0ǗX6.򍩷Y~.l=K`y9Zv?Xg=:[ϖb kZKO{CBcy tn;G.,,ܲG㩴~MoJ2CKxF%_zRPZo%!H"rn$zJ3!t!,8k} )HMo/^Hyx/{8s3X" [gI zwr6 AoNOlÄ*&C=]xZ89t4$(BPL(R:( OQ [dX {cVhiq%Őx9p 3pw+%j1%VOC,擖,:LxOoCBx -d2A9C9OS܇)~tZ af_2ݞC\ p IK !a$Cm`}.]#sya-эҽه)kHه9&[\8^3fx0~2 Re} x>8?-o--)^R-A" 8zJg#DSL9R6& 328N=ކCׇ^V9O(!aN9͡(:h 9O ]r# 'f0qUx +Pj"tpVlf9fPtэei©9zFVsLROC -Y&q2/g3p9X8E0ТOSK{x%hc.,{{Yl\7|_baeOie|/~g?b,l, my;S{uX-_ꗈ p=P<|IR!AĒ<%`apX:M=(8,o̡(AP:_`!rmp!\,1dIM2!Si6`[,kmM!APo g/= [utѲZ~:n9xێ) ChPzǑ ujdbj#zkxz0(:ڪ a=/1KDT-84*ROU$цaB=5&MJ,/=n{{vY>,#Ӷl,C%zװpazڑ`2gq}%AhA!^okqOzs}p2 nO?b>uqc~/_q{t>Ƕl_zns]zVǙtk E=9zX:G6箙):nOemuEvck 1ץ9 Դ`88kȒ a̘֒pA-/OK+3zkI,IАe%>kc,{ְ'Mq- ">Y^Y\/MXk,85,f {Y…l]۲퇧%%eI}^w''Ɨapnn {1dg{;l {1^$?hJ% ,lO )]SNepAɐ)AfH9hph9!Hi$1KZLyqqeחMja Sh;&X\dl2؛vQo[ɰPog39*wx;^%Cz?pRfP֐r/K7./384q4^Dג03庐+$r9 &$0dW{xF),Z/+ނEth)2$(s0ǹxHYHJ889dx)ABB˄ p0C+ȦA am$fe|L)CFbV|IK B/+5b$XGxspB?!aQޜ2.%8qdt1ѫd0vpHi9Ѣ Y֖Š$O>ْ%3q6hDKVsd0L1sO}x OEǹo]7NaFYjoTZE#֜:A*_"܇T/SA aM,:C-z"T7s]zd,xР3tIih`{`GnpVƬ }8Ydx`o0qlf>x`{{_:~z,>|_~,Vdcy[Z~ZoNm,I?IOo(GH-t)vr.lxZOou Eh<A$5QO<,_*K$ e#BF sy^~\|XQcy6+5RS1z0ė$F[,C./["LE,_.`!N" d, >,AX^Ѣ8]5(oAt$~9 3pSi.SAiImmPhp*emk9AK*4$rj&5.z#N*>і}Pr T:p4b0oC/lll\~Y`X헋?ns.ܜKǿҳ#a{z|c!w֦IC})\ͽ.ZX$),p,iiI?z\- Yl)3PoTNEm8eIp}22A*\dGf!Y3dp˒G9堇92zXؘ 6{XCȺRpգx=K[|\^rv{,֡?6%|!.\0FJ7^7MJ'̿O\^rMAdƍס?.Eo/Y vh5߆Vo=z*HŹ1Pd08dkNMb6'aWtPul:%7P3$.S/ 5!Kۦ3&G~V8A"Ȗ6Ӑ%%) 3 uǗo#kdsmm,.^|,_zlfyY-k8}MKm gspqY(%S.z| .Ͷ,9'Y 1ypY d1(=)S6T[]Uhp#d8"CB94z,zI0LI(/dře<°oNXa|}0|z}Y˾B7)yp6-d^CKKt1e6ݴ(&H%nbz)= )zh_" R"!C6]fsvhHL8aPtH9C7&:L}xY^=$^fFaU"A#\ΦalB8_6d0/nPanI98X1I}23ʙOcQPh㻙%24F0jnd|.3C0%uO!./{dbgohB2'$L&qAȠ|L01!Jy8b%td!2x #] [| 3!!C!xPP˗2x)QH38^ra` 3A35Ly9t00A!"fx )Fa&Yl_ ShV{+oEZ"ǗaB C/&0YLqzhM޺P%iXAp3j %[&bf>,|n4ApeHyZcQhl%w w/߸ol?4E6X;k1a,rq6oC܇T346B>llRd0&Aa,=v"jDM {3Bt89$dx3R,'#iY&eD0Robn_f7= 2Mf8E/?6}3ert年>ŎZISy<IQns>ڎ۟/YꁇX^ly|`O퇔n<<]b ooI]~bn?d407u'4787&}19v2͹ (aĔ.¨ZbIDXegJN'-_(e0REjdه9/#}I7a)PtH(OA ubf80:8S#aUeqaL>8T`bqOa8!ýPgL6M)ΡP)GHdaBn9rbOQ3e3&vpdKM1#>Na!#Ȧs$Ǻھ7gfj ¾pµϖqVk}Sb-U^Jcx`F#aj>7]~JOASX~_ 7ڿ?Z9WWimcS K-?$~` 1"~1ؒ ShRrŘiJRZ|x CVў|'KF$1"^Sa4sl O"Ì1b|&JPBc&iR:E[{k/36)ڧho5ur٤Ѿ9tMW0/,/ )/}pO :iEd%ʗAʟOa`bQ1z#Ƙ$c gKQ)O3SL0daCŗ(3dPȨ.lDo613)[)F!!%˗c85x;K ZSԄWvRO 9^ )0O3^SA{ fS$$oAf8Q9 ; !Byj Aa܇(Ә%U Ap=2t_NB򖅦.YM sc3퇔ɢa7גuQmi˖Cl ~A/;&~*oޚ8j?M?^Ҩڶz;Txzb.Mr曮du{Y փwYTl$C؜nbB 3ʵc 3NsHM Uy8\bQ7![[٬߹1 }57sܟ8 {6 j=HSa28p69aF)S2s0"f8ZA/'BxkH8 9XC A8^z6d_T;7U\UO0*L8|졃 fPo)'簚gTpgS87姃 g -aBj d6Eco2 fbp:bpi }Ќ):pv8ALJZf6FZuC7Ua9ފ^̐_r'Ƞ}I-;s3Qi(d 3SoC< U L1)f06iءc&8T4H!Mn/]tEpZL1U2T<NsZdpSAPoۗb{:\ * DPd/> õ6,6 c>x2#)fITI8*M8Qp"ÌV E!Ǔ/Iq")OLshs{ie6FBs*.3dPpv1# g8tsHAGps9P1AQrzpnq;QƖ.NaH06x18Jў1jb4ЅÍ*lp8Ȑ08!!a8uJU%O9(/5eʗT p8HԽLolpDyơC>e#A{*lFSUw>?y|Vihzt7E*p_L!!X^Hx0%L1`XM3 S!BicHHD`$VBT2"e%9D U5LIB )&tNRr`hOCUb$xIAI2i #F*!YdHH{IQ/Q$b?D UTȐ!`02^B-$!A0*B-.*t3-TxVYԇH57?(i@5y…" pKHBCpȠxZ^r}ox7A0,u [53sq 4B)B Ʌ)fA$Hhc sp\E A ¤HADacQ\R((9rx90#^3c/aK0FR$(/A۹bIa2N(%Ms Fm1p 4b)0!*3 A8FU ̘9HCABJ0T!zIbjLIu腑L!Cft"sO/3hfHmHH ^P>`io 9dH a<TA%dPaKP [a6"CC]$T3%+f"LЋ2)I`j>ty;LҔCuȌt$E/2t! COAB5C"ÜO B% Om? /UE U$jR!C0EBBxH0tJfT )成0!- a-IQ L*ENB- Ž xIQQP1f3EpM0ۜ0FH-b3$閵H(R%)$*"O(TKUΌ ED2Dq 3^)f8! A0P2"] %)ҤH[R)cNDH0R!%/Q_KĘ3ur ʤq؃%IJzzDVc_(\ve5cGwzf!+Ubo/YAnbdZi\fHT t"aӤ Xt$*I&DR226YʘTOq0㒈D0GHS aBeY12`2݂/Y1Q=!Q,4٘!",oۯC,4TEy?8QX5Q/ [s_快?_/(u?\C;'ğ"oo xKo`<9ķx;$X62̐r[\˜ qciIRj- n26Sd*S/q0%9)h7I7IȲrܼʇ?͜^:iniֺ۳TPmY=moTKo24,os o!nXH/U\RvIC Qobf[RLĶe$ESRK aă)l%ơ´ cd|JRQZP943dPv9(O)/`,eF aS*/` 8dZ#YFVpz+d2fN=К!|f%AaQkأgXa;Vc[b6i4k1My ZnZ*42*R.MB,O4X !2MH^Jʗo0K-b-z,}Th~"YIolMfl m}X NCNO4NVyv'e6>'hm$|"䓵ylOzsܱv9a{M~~hf'5~>7i@7$,_&XYݬG`Xw 'Xnn;J`YeʞOb!a6NfiTH XECג>YNB=MHvY )Zqƍ݄7}Xn9<ݰx]n8i+'c! >KkOd؛*+EJ_F/k-o6YR˥-9;:s؋O<W؞aU7 K{1l1;tt0STJ3$f-M"%)GT頖t:&]/0 AÊ)4b6M/Yi Po7j~6 X .OɲFoyǧ|Moez9V џجCncqc}e-ܗvr8m-{ϟ>8N;n̍{oj̶TUj =̲fmUQ>SYfBq04i)jBcRA[<Ep =$.UXƟFMGN213̢ E NaA-f( k1ˬnnA Ǎf5xYfaԐP7Դb?Xpb Q[.F6?'\xQ1d0$̰%C?T3 Ay 0M"a*TQ7zS`%EBB'YT0K)zQ.2.UQLDq[.(byjjn"᷃% 15Tcqlf|9p"A3pY ;`S9!`O\boVe6&E7 `C$tBRQ Y*C Q.&iL$fTQd-6 AB,*.͜'pkr jq`q?.!Q)2.)Vt$T5Rǁ(9R^rܹ*fX#anCZK/UHR"Á[Rfo#)Ѭ ̘=K6 "T!Hd F3KeM=^z",4eLQݤѤ{X/u9z<-u QM)'έRԘnDQ&'Uc݈d=Z17Ɛ0M19#d)eXa02aoֲu GުYaB!C!6uJw+/Koͱ9CjZ3Cj:]6 ;>%~qǧo_:qxO_~܁ ۿKR53$Ajsco˯69oˡPxf WACm!(%rXd1[r6$ܘm& b9̜(ӖfHfm] ,1˱A1L &wAD5"nb+ѬdY)R 0!ЊiĚI7{okJ1l/3.3$ap[dq,)IHHo婨ʗ 1- =,߂ )O-|0L-OIہF8?Rx0e*doQF6Jrx *qYʠ4*dho YxOd\ 42ƈH % /ey!Tze"̘%EK)0CR.djHsDSyi/Eu]n+lcfHMt< K *Ha֝w$X.Ǎ]E6zS\Ru~Xdݰijnreo%splrZRhOuXxڧYc>Ofbz*/UV*ɲ,?6M>n.H-3'M]иf6r\@P7oԍ~?KcpLp N|Pdd2%<8wcyr=~c#ʷu}Zgc*L̴%3LLFSkTcȠh&w"٤tJ% V-j6Y5!*BGmk$fJҞd2Q<vD!)}(oIlHݨ/M~4ޒ6WuoYm:^!6Ӧ`=EolOԝFn?`B|;qx8=-ʧ9C9,evK-c8f7BL$r2LQ0iRؤA>1LM6LrA# S0Em 3$QRaTOk1Cj,to/Y%sgn%۸$h2j\fކ  B, =d1HHHj~AEB AQTBy {Hv14faBPht#$ڎZFB6&:Ҳ13`6U4դ|OjуVlb\Mńi&fM2vȠ#raf .?TQnjF&L3L%k oE7߫d 3!c<"7?ܩ>m{:nb߱:޾v1ZDQ%CHK9ȁ@4U'f )".*񶇴K M3,6ė 3.OQ@PE(3T\fE:Ѓmd +t*4Q7©09C][ _8};qo;㿥񲰍l.S 6_p6ނqq9 A |9N$@;Zr`Y11^mS26㩙cP$Ԕ`a0aO0.?"Q\jP,Ot-4KxjR^%ʷ29XdiYsnn3[LN w dea<3$/,R$Hr7n, +Lf0m -_߂y) v&E 4 wll@(Kl(aƬHfM5E nIPAaIR AK|ɌK1$2VK `pjyI"=QZ@UL̔S3fFef(Oq `o¶qSaˤ0{R$TfvI\fe bPCbP /Gq"1 zȐBH7 4fZP&,_fFVJ袐Z-tIE>Dʥ. [ow;,, d-Nm,m'4r[6Ywp9MvbU4j*Mܸgss2PAzi Ia05Y~HaNfZ8x l )7R-t-fHB܊B?LD,fݰ};YUCFq"ԖmypQI's2nlLp!8]fsC,,,l)laBq.?eh=ff+, sN5mjU'f̴dPL{LLӃ JIq!eR&!%JbC[PuH[#QRe"% ?AQ3 ^X.;slR*ߖ˭ؤZ :'LXf߰X˚GXkUNB1AmvK×-hہMoz.2Aʗ0 L#?,O7<<-vR{=Ȱ]4FT&"1IqI1j5(j؃E-,o Cb%m1Lt0KP}XC"xi"顺]zY8pz"c)f08H"Pai`ABƗ*0> Bۿq6PAa>1$̐Ӧ Kf($(S0㲊 iE< %rpl q' 00ѨtP nL7D YM+h,&(X9VJeH0CHKI1$13 )l[6@jQf" U( ZM\"H=DT`dƥ !m̐*BiUKR^fZ,|k֒3&,/ p[89z0x)15>OLFTc0Ct"[%:(CBKPo+jx_f<((0a7)$15toAR"! TӘp Id ' 5J#5 婘 ,9ЪU23Dfѫ2=-U2㥵(x)\RNOlB&$V=bj9$`0XU О2z0%5!aȄP)m0M3$ B؃-IL31])2:e5]+k_v(0Cu9A<%%CkyٸY8o ߶q¾l\Oc%Auga`xi 7paEr[9+ %/)IȻM2 i/e/5m)c`X1LzF)ldIy)!o>E1HmjO-$Sw7eY(,VtaL{)i5dj򲰘fOQ1iY Ie{&!!Eė>d3 ! 3`,dPL#%in̅7Ę)l?\ibXkeST8M aQ̘i/EB/jОfDIFex)IK, Ճ Y^B$AR^ʧn!^*$JDe 4/ C! A᠈aHyifHLoV_fc4USCd?KČl"aMh578ΰ=*w4i2*i΍kQۗ9fQ w|\(4n(_nX< 6yrᆅew .,?,l\^BCk[9td7,·9:l ,,fU8 &܃&mF8OO8~( 5̔/ݜa^$h՘!EnL1^ZtaAfVnuUw)_)NLcl_:^BmGM6notI-,޿kFc0.1폖%x[V g<-L3),ƑZ8}[m;xh4;dqϤxdsu׍;7a.Od3K& e3s1;n^9%@?v~gb-q\Vޜ2s Hob-&ZXCHs69~x#X!S-j9ɢqE_%dr0ams>ర2)zъn񩰱/vX+.Ä.!!7fpPBaxaƤd-OM9zjMa/N U4塘ЅP.f$$hDlO3QL$FV<-ץV4)f>ٞV$i#xh0($L.2VsV0XhjL(dL",ң&X B3# ){bFYXr S8OPhneU>XVs EDVEڟ$y\pqyX8\wg%7\^(?'~nj ~4Ìx`Bl O)f;WH~)FIAl0M<,I޼,2L+97O)B(xYh8Jcħ̄4Sm:R^Z^68aPz#˧R%6 JE}3Xf.ˍ,&]LOᎲYf<<-&/0!,Rif`qw!f=4a YiO&L=5I)bR^S4sȱ0Z88Kf˸f0zZ1w`6!%̐l2&ю4cTP7IT>*O)?[*Į8C|ẄeT\ܼ mq,,/w/8<N|7ۯסQ=}ܹ-xAkި7БOF<4 O3asO|E-.T}EߍaF'zFCӃV݇)jY 4p' K-ifSmP "8THZ˗lOլe7Cs.Y ,,noRoOǑZlIx_7.omS²b^fXSux/s.Y >cyx[(Ӈ :N-e0ߎvd-,)6vX_A~vcyӨN6ӄ of~a00'O~<vÅ9{7'E[Vq6>ȞmͭsF4gH 3ًtTYx .&re,_ Y!T-+B,mfl維)km9ԠLA}|\wR,"x))+EGV" )!MfeyXf5tM*S<;ݝ;jzӵ؇ږeY\运_zbyXzm߸p&;!LH- כO g-n 9rgvn|Pr73C"OUm1cW7STGfhCh7NF #b$P_`:l݇VyR}h3EdS)RE50Q0LybsX QT^:MQZOsOUp{X"h\jf0<*`M **;S i`<fb*l$~(_rc!P0B\ =!P ⩍xbp[a]ėBM&$$fBʹ婚^XeafXCa*SA Ӥlb5fH&K|9ڬEPohjq.,nGb;%U8X(SE2A `⛙ 3 ė>̐BO9JfaƧ6s,& i0&- d"E5!Q#XF!xM̴"g{@491s-޸.OԛOq0}ĒZfm}nߘ~[囹wZZi׺a7ⲬmUQ&Y>wU> G·bvX07jqyݧ>!nSp#7=lOl?3` _ם񋗋a5_2q:.nL̇JF_TOJɌTCc1  !fEaP$>e҉,P*a'TYU(u/sCK蘒qPs4(_0- +wYt.R}Jfd~UNtUԢ9}Iq$*;{{|JJByxc-,?9rizaaqa|y[: .ޱ:\ 9#LӬ7ƹL*1|;h2PUtjaS-4 5fQ)*&t5(I1CE2 3C1C`q(jJ[5 FEEGg*a F68(/+dSu"E1ͺB*.B 'b +t3adSs~X7O3̝ U42L< C ^FFITQAQK{qg} kEŧBWfMcbPn42aai'dkS<B1SE_f)E 3ݧRfiK<isc5߅YRLR!0L$U3(jS2Oጧ kdX[2$t$T/=5RwHZ*IU}c E"Un"M Kx9Qy;rB_fҒ8kqa2T"k"C-*$-ħ2ܙ0 bC f\/C 3U[2 P%7 ݬp5 <͡E{hVѣ ift*[ =} Uʰ7g%9cD2RiF(nZrx(0ERVC3Rf ɐQUTh/R&`(Ls+!($9a.YCqҫ贚 8Z`BCe8)4F,B|y[>x{㛟.d{ xX^B056.4K[%ڿ2? ?AP ?4gA0,$fH1c\!,LaȒڸIn{p$YdQ߬]g1]]ޙ䊐 G5d3Ӭ0mfc*QS,6Ơ0r9s|Ibfehj3c4 ƗbQZ"e#ajQew2i1OM|YO"-O,!ax1԰7f!Aa_& 2⩼`y0a֥f08hRMڜ|ɴ9%>L[yx )-T)>a"}L.*ֹdM00e afA)_?uS5ނeDl"O1˒Y_6}SEE< VKhx Uh7 $d0 R͈fn= 1S 24R& af$Mscf5E!E40!0AHBз$(a/m!%"EqI}Y%E-RLJͺ$|0A /K6W|CSd1ioy,jᐋ|~O۟.pEpaϦ'\TS~0 ,<؛oȄZh> U^ 3҆ `:ۅyƒ|g~E..d8ҸMe3> =Pywx|̐x[7<$,2TpÄ˗B׭,s 3ti/ [O*PKdbSdQ[+أ7T_RuKڙ0iėxv*3 v1۟ 'ّ}ɺ%*ΐ]8dCp!.hsnb]`9X>,LPXXR,ܟX8}>X7lA8Xx}91'q"uAkf>4=7UrK0cr[h7nd0bo %N%Ee/x%BQn/ZĜ5*'d(7L0LӥV Sڨ\%Zٺ ֢Ms8@]\~K?XЬ!BV>셐E(AGz"Tc(bByjl/}s-ӍEHaAO(S E5b{ Up7f{[Uń,bmlfXER,/B HHTA/n u*fLaʗQVa< */jHч{Vy9ޚ!uy${a$B`VQB1.2^(T$S+Ǘ$SDVOTaP+֊VyH}.|I˔\-6ac\KO0oŌK|ii/JyPUjƗef("#2^BPd mzfߙ13f`" AUQ$$I]^۔>TfXXTRLZ&*TaFus0B=ܨ(a+*abst%x["2zP 4OHZ$ӦBݤ]>$IX{!m)GoZjy*UJkoE5MhO:d/?!oxw/wm헃[8_ec{6AOۿ/~]dp3,~/(ğÎ"D,r%~CI.R䒹|zۗ+aY$(o'502n05~6x º0( Ii2u$HHS{I-n!2u EyhOi!*4B„oE.o7 EB/5}4s( i %Cnj3GI02s31c  3  7 [ f<V6Zb氊 e&h,2 _0,e)RԒuaHiE)aiOU8̰>BayAiY(X|7|Í% K{۸ _^rせouؿqw* ,|z܇\f}`_k|,{ƶ_?9C7o߹s葵̹a~pP^1$bci/`\EjB5M0i#&!!C6Z6*py y1h/Yf>,P @YO X p~2)ٷ2ˬ M/.7o|0܇bxY[|x,HbwEJ UtiN||'=\zpo/}ÄQl܍07+6x`_.\1߼M wdSߙ1߹ٸY69&>Lsno=mM5]T.Q*zė>btS,1f! tn0eb!0*B%ƲM>Lb1Cf?5z/ԲH.5(/ e]<-1}iv,ss-2C,s?X9pZ,7iO|"F>KcnG?6 g"a2ne4l|ɴaB RhZ[ 7Ŵڇ,,3[ܒF]AqM!901:mCj؛n!a5Ъ8{UEC5n 3 9^ZTq]^~qpZ(l 3L>df)bx2NxolzXƗTE„)4x*L4{3d3Ci:d4*8td &S(#B}caa7]bT'Jn} l79EB/UZܣ*3"%a奆n,6ݤ Vfi"Ŏ.V+ ً*j3#n2C*&ML/IHx)okQH*Ih _r-"ab]eJ|Zj/s0Iz0q&Hm99.3k_Js]b>˪ЧZ&ù"Yf ]Ì &c]1Kk,ڗS̡B75i9 =ȡiE d#3Xc$!!H$F2(jQW; M&#B5Y&8~)ux Ax i;~{`Axrc/ٸqchu S1mNJxÿom*/A))_؋,I&K/EY~Kr\Ɉ ۗFؖ@1Ẍ0 sE2[HP2ISiĘKR1/b]_Fx+/Qxx$xgEfT87CZKCiTELd _F#݌QXL?$L3t{2cOaƗШF0wL‘qd_|\^!M?X841}mu,>tLݖ?-kˣ]f9KjQmwR ^"VSz,}12rayodȦ/E]xОnoy{ c7w6~07s?IӇisۢ"~nU[s*4Ta^SC ͌)lZ(I谂E6)_U/3Z3N! ^[Ph٬baBe *C Cm ̐P*4$$VKx*"UVstKFZ0-X8tsU,]N[MU)v.jjXISn)f3w#+LYP)ok6VT(OEffaKb: ! >D*OAC777R,Où ^EB\x[0bn&C{C/1TBR2iRtmB /QiH -Dio%Yf$f4P0CJCИBc$ڡH3*a$!8$x U)4RhP!a7g<:t(FK)G{Ƣ AFTd0CAc{;^ )~J0\?`_Oqcnx@,?6AHY$仗i_b_VBU n3<[ aRf2C f򶽤D}xj| [$~K }9? mUtoI JLq4dG=FIqܕ7.k3f6sJ-[ $,/R$/mv _S-LH ->-esC"XzRLXVbf3ۧ 4z1o͔t2ֈD!XxkD,f-eBL Jg )I #Zl UFhɐBQnUDm -˗Bqx?lbF凶T^63nsȊlz3ۧiV) a-l1hKP!0ނ`P$݂`D%z7Ƨ I(!LPUfv+o)&LEF͡ "EQ!I~Ӡ,fkX ؋X×7rrdnO7_]X`,\4Gj4dbz~R'f-֦,kEl*k|oWoumBp-8Y'N'wV1'9迺MƟ'wfo8ff>k=1FKUcQZ) c},vNfmfBɓfAAQqRY:CJaEuXuR TU(VT脢&$REʭ*\qSۄU8q,VeB&Bjao66,fqpf`T~7Y~EIovѱj,/"[\r.|p Ѭ\96σ Mn3'[ы=y݄YkM[Uc`4:`A/qqkmfPj^JYH\&*46Tq$tt:#.T c1a*B/KN {nVެrKpM6)Gpx90C{+V\  S$n3T͸e3C5#+Ш QBӤp0/#%M UERY/XMϨciIԌd/i=bA*{sެEҡSZt/YM:|ju ֲZmB'4B.l)$*` 4nj+-)4gq%3싄Բ%YTZlԦ7YƲ֢?TDzOm.jyz?걷íq[n2H{_lru\C|'.?'36S_?&~_Ko?&nif[*BK|rK'd|$EY`s63E<_[b VE6 anO%$8HOEbV!3^!CɥfI̖,,Z(?E McYf-9-/AėPQnUn )qKb.~ UXtc0X f00n`[yKNiz?\Y[Z4hrgK(QblhS5 [0"*-o[6i0_T!$t0F(/Uڸ,j ƤĠ(ėӌی/CiTy+4 ƭ!)o 3:M00-Qi&Io*FCCftF 3L۴!-)r0Ca0CyYn3(4EBuL$TQKi4D́6Ky[x;pEpˁ'N/ޞS~WYen;x~7[76=fZԅbk Y>%S5酪&Ex),moV̅foe0CoƯ9„efӘ=6 Uj_Z.44I1n`Q0$BP(?E&eL3m2MҸH܎r!c>6nUfHЗõLG֛-eZf_xH-.ُ%v<LeXTYBlj,M";Cy(2](o7N mNu[fpwƅ̿2ʹ/efmz)%+f>5)fa {nf4א퇙P(vr`!1 Mj|fPt|L {eyex&)P4R,/SdЗAaoy`ۧ[[m&La%=Xr/E-,j\lZ;b/̇/}POfS՛df7mOm,f_ip7ݤE-&̘9pIhUL3~)tdQ0C ePx i`0K#$Lz6 )?Mns5 3I0@!щRLcIb6XnUhAKBBOv"%{ְ Cƾx ^uOf1q"KqЍf6Ɨ '&$cSfUQB 3fB0[A#(O-/!q[ f7s̰LhJ&! Mn1J(_ m \>%ef-`HT^&$T!!f Ɗ VXVdN"ZRE!8N&,rH-dB6 )9[n()&,TɱƧ֤$NZRLlS[̄ S%kDա6f&"^YVT-nVВe$2c&%S13n_)iHb t% naO EV`_,oU\q#n6HfHV1 /HaBƧ:YLK孖[_`۴4SfZ )0!E/o)F|"c QRm bȴɐ$BH6nj^P%4ш3(o֒NzIy6mZhOs\FLh/ w|w%n_'ş}.\8.O??r!.1˧?ĩcf48&VfD|)I/-KPd%9x>%'Y r'L?q05s60SD͌/cQ,L06f 3DP&PX2d4i$crDB{!H!ʁBY>MD%UhZUM-syi,3-|*3O%9qb-, B"qK%n3~bBO3Ta O񋣨x 9&E-zQ $[{/aPCO=H1L~7T.6mrX(\C4iQBhմfJraN`.DL}g[,1ZMh,o0&-Ie Y5L|PU]%Ya\Nz^ʡ5K4(Rn|63͌JhMփ ކ_F& #LE-o)ˆi4 40"")[Rn FMȠl -m6v22! $&ae5ԐRH^Ea6Sj9*b6F=qhb6-eǓ&Am|-/N8𻷓俸x{z;`̅'dks}`biRnk2! ˶ߩ%YxtBc1 Uni. (ۢB=(cbIE63K(nz0խrBhbR(V/E$]:IUbl+h"#Pmⶊ>6CUX}Q% >bVɣOy8<7{}sF C.V6 is0vtYTt%wӍ&rbcjc)+c5}-Y%'-I~7:Icx/<<0_XnsՁb`~O2CiOY)3˵VQ}ll9J?lf$eQni2tDR|[`PQIaH #bIHQ) (81%+vKO*i٫dʬ )YŔB8fL8$lͰ ¸|J %7ӭlEN9~'#(o88P޲ǃAc6ŲYZrNmhr|P { 3Ot]mmZi̾.2 Z1&[~^ti )4„V|p,!'\|loM/96ej*KbmXfAF"NtcYBs,PYzzrz9x' l&nv8lI9&6-hj rKykFˠЬ :E-6^*O*(Mol4֨fZ i&hY~`Á2(nE0X\TQLF;REoۄ+溘#kƗn*nv+4$̓i0HM3 Rv LHk!vKHHܪP"fH$p,M- EBŒUe)s*VIU?LTq*r;=R'Fx|T!-i:Vz^c\K6MaxXG٭x+t&:LiL`6ű۰dXEB-ӛ\4S[Ƹe(LM:E凚*eB ĭ\x/\)/ 6Y(!)2h"VdhR6cfp,ɘV'fį{Vbr6fo\1ìbӶSdO[M0fb87 QG&KlVL6]M衖2zjl$ZLn9S&TiX9VvAs`=CaFei!0aቢE-,lfLJlfHfHU?7կ.OL?F mC$xa4[IHP 5*2"F01v4bB1u)Z|,m%J!fFfa@+l;mɴ0o(f=SM^NɉO !AHo˗_)IrK|Y(~Ͱ o[yЛn4x |ٴE0O(cHHYִgLZ ՗m 4"NI^Z,=I̴O1ݲnC=ˁ Bn V цj[7R&E_?P 4uj/3x$~͠FvKq`oۊ&ZgB]}o]VJ00 ZLdt"h0j @2KΌֹD#32UVi6ejnO#P" T2(!Ba zy`|5,*2!fиE& 8*|*bc18:7nZ\^ЬeOEoyCar8rt9|A0ٿX7AF^|;/:lf5:>7ct0{XlOa1A53f_V٧TSҦõ96[-_nw\?_Ko2Glv|ZZ<>Y ;̣[ '*ka7`ڞ;YǖI9ܚ(_ef.nBZNd|s6p arp=8`w0~l3[xco՗y03jĘiY̲%JυFѡlhTV-ST f(*_U1BLF&E-ز^nEAUT͔ƒB蔤,:ħԩG*VZnPGɼmv}SSY!UVtEۺX>KN&Y|ެ ˧r,f|0& ׃as}l<`ì7Ƅi_;4z3aZO*z탡R46,0(/ *HCP袑x)3֨^z.UtFT:f,l6=%ychU'Byp.D!Zf4)fa-Q,fpq4MBOP__ȿOHEģ2IBtTS03ns1^2(`{)՗5iT6S{ʧ600(/S1n:VHёi΅$43(9# 2qca+,&fΨfolUE6*ÄmT$x\xfR:#Q>յ]Ci7+"S2Q&a71$2Jw*̌[0 ӉfozB*X}ضѱފhOv+mܺq$i/ LI‡[=%_8)8O0?0\~r{-ll,';G!_|_۾ ipf|2eW A|pgq7[l(33m 5s6 7Rza|f⥌!,dHPn^KEHbR"nSAJ8R5Sig>jj+T/˧v^\-9NnY $$$$n 9fʌ۴MaK$!,,R 60 Ӿ0b fHLy)LRarYSh]-s)0S>yjݬi2C;̒y\.j0l2L{i1SanL##4((O,B-QAaP6(,EofU(H|?Y1~!AH1Ä.SUHG' Ky"cjH0S&~>,SA ^*{Ua iU4 .ɢtt0f<&!-*2A +EY^Nʭ)RZX(O'!,jvmz4-brz(,;2k'A=[N9pb>b5ubWj1u7yンx{cnXnfӋv]'=`zp7viz&Co.fJ}4uPmff(LLJVa͸U1CB-R qa5Ȅ3n6f(bkIKQ\/f_xGzt_oG7/ZǏ>ޮؗb7(R(kyMcis]z#` ٲ?$y$^KP[cM-p~ f{٬Eޱa6U\'`0nYn34dm[H )+p.vѸpDg*[E-:!BB7[؛6k1KH{ICq{\ժBPKQdTZbnx 3 1$nzJ22ZT7Y VQB" G6lm$0HX`7UV1Zi U~%!B|*bIO*i΃]}M7aoKsUfxPΞ8Z:a<h3cVOmp  ƭ8H7Ѝhk fܪ̌rvKB eft=nݢU|SDVXi$# I_(r,.O͊a6:L鑣=E=L3Q?#OnMK͘FPL#GR*t5S1bPX֬B؛d1͠*n*lЋJtG"XE<\QTA YL|=6 Sن=$vD AN}X=>q*fB A04xpr<nԅw2O??Q82^%^!2A6>DAbe0x7% d!daY"x;| Y&dOfL~ަ))gIaaD7eJђ/A0^%~6&>SlH0XuP"(,2I"945^mdD|Y'j6{I4㩼Sr]nY(_UWS8xf04C[ĭ$j|xygWY'&Mc<fJ`K[0MW Ӈ 74J3msT)5t.3O68*:ŒLY0C`|`Tm n  /ASINdy[3̸:PdK͊Oace|f" 9ɐffyj?li?OcƐ!-'6K!0f|嫔[)/̠4 R0qQr0)L">HQ9}S(3dԟQ:tnu0`qK eo f-9&A@p7 `.8}5<-'0yON/?x9~KLs.. ~rfA$n&EX 'bU 3n9a>hdczM<3(5Cl͔(z3a0CIHfMQ"j"Y\2Eܦ73SBLtSXp#kcAlryZT.~w EoFofSz|Hel:VUq:InkbUsQ,Oo'g1GF۲B„arP_x9|^+/5\(l"uPQ'`Gr0nw\T0(?~-k[wC#fR1z`f3fܦ[DR:%b)Ap$2ED$K%El3#Yrm**>u 1Vmk1Py'QE{:ƉefIƧ٭2ư//(-:RmVfڧ|-omdY8Yf7y )4ecI6=kaK-E-kxs9fo^.06Y\mDyٖOfz0.{ iM, u A ˤ9kTюbvPI"д&! 3$:4Y&ehx)2ni ѾA Qda+myYd3~ԉqK"%9"u0Aq`)\<:ȦC56C5&o'^ qPon8g_$s1 VجbCՃ٬F&P^A 57 T3b eԦ7AB/EcЛp婘}*dh4;&a)2LzCd$z,T|]TIc 5B/!#<Š1ZnWCnM$">͌73$SH1ÄUJHhOfqt°4B"~hfZ><Ր-k1 KꠖT*>BoIqX9j Ko=mfr;/x_fXk*K]qlձS:˪e沾+!;9N#u7Aʨ,*aRQT8v ljac,2Uǘ!i3n)۸%LʧԠȰ>< 3TQ$%RQT\Zf0"AQEoV$1)6)mt;̃&ħpFΰ" if a]1tC-\[WytSe&芺NjavSK 4 )lboOAHФhOY$LԊHH$*$SS, H(u`fƜQCy&LcI%h,jj'à[l0Cb2 s=.<8O0u_qˁɟt'g x~f1^.$a㛈 Jqw<ӉOa,Q3B".3`~0^˧f,$S1BljVK,25ߓTQوeKu`P$R:j-E!qaam Wai&[7m , Y(`$$T"izE1Mi4-`eH1C0-KE8<) 76d%f4 mahl,ɘ)ˤE"0 FPWAEdQ:AH4U,T4Y^N-߯ UOQfޢM.43/RnPb67mOܲ_U0nY~>e`RP l)& a-APTQ !B=ZJ{BaGZ@{w-g&=Uf0 2xi c&̙4]7'HquK$Ӭͪi˵o`6]i C.,|!? B[_'SN'sa{9nzf쇜r۞NjSK۠UmZS N{s{uʹOdBH.FQa(0`ڇ4U2L/|/qOMPXntʧjݾfF{% p+̐fbydZn3m-sgί?nכPZ,s,8E܎e׃6jja)fײKi搔HfXnIa7ňcxؔ ,"Uem )KΥ7A< 6XXd6)>Po؞Nlf3iAbr6=L ', em/4=<()O0C9QZj&$daZ|(FMnPݜE 9X(4Pgh.\[WbQ)Sx*rJ7iKFafdJra_"s:af& `0P0AB-1Z`B4vqK/!1  R$~+ZF#^J< *&MyjfD*X$kFc)( iB:P^)yu2Z}0MUXC G/C:MBfQ# *ƭNz-LHaG8Geq`l{,$,j[Z~Q,OM{Yh/`į5͉w߶u gawwo;n7mc^|:ſ1530^eIBR"X^ʯ"I(/eRhpKbff}HN))%0ifl,B̼423 s&~1!)mBN3a1M0CZM%9PRhM|a=>FKyiS%i}R̰/4 3^fxOs!L3aB[O )RӸ}y) Rn3 (3ƖAJ6ђILŴU5Sh<$LclS32`.2>ć6-A0~kf+tJ,⥼?4 x-)/C61q,%daUx3KQhf`$AQ>$!eɸM"6a-U2nJ0d3>lV ) *i%oÌ #/jd,;MESB>MLGVe F3ɖ,dafcRnX7 <`./'9%݉wO-OMs=ž6 4vQEwSBB+}0 [uc|,k10su1!lBf*Ll**Th/32'H.p B;h4)ff_$"ay Ƨiӗ8\$;?˱mpZ,՛ZQSoXllAozNXNzPn3[^[&'y#urbX?PҾl/7 `O3==p1s1'Eiz3i6 lV6-l&n`=u1f0CL-䐣$^̐1EȌRS2fFۜ%N/j)OLC!B1CB5}J%pt)m.O-hjxS86|Q˒̦ެԒB-ы [^6L3E5Sn}Qo^ks-Y z^Xhil{)OUR qq㩘!M-a7 mSC\rM!Ӧ#Ɛ $$>eX)$uOBaYx`[64Nan Yz]ʇB!I-f&S]Q=[ff.g1anV(RQI-ànzSm7TA1iQ7oNUd|YafB!!aZTQ^fRLXEGq [7 ivWH)IQ8$aAnf\ŭQNb*p ݦ&Ha:fƇ@tcMIQ#k6%) 9ݤؾ*bB= fH^SMJ* ;2"db j9<-t&K2[[7!TCe]`SeGZwohh:+gVT34kўU-kQѪY Euy%a#ux[ld-3TFkD%̠Q^_CI|Hˠ)fJ O4vb"5$$$:ᛊ5;u8f 6 #m6bF(x ^F0j̈hmfHD1Myj!Bm!M6nR`2> qkRGу. AQƁ6 3[[4⛡iSS!xRV*KB1;aI!Lq.Y!Jm~pzٛL)hRhyÁWvaWrx9qxK07~q/́[o=Haas3MտPbJ@N(^MƠ6s1? :f.dYb GLiY/4EXք)8d ]/b3$!1KLɌTapm0clfb,j2Mɛi RRCبP"')΢\ۇuuԛZ,dѨ,ڜr,9nR4sFl n'/_.4GsxcH!jNN{~c2s`./0w/f"ca )zbPfbjeFXEƇ aH- (f<4s2 bxX`hU^a޾UJUT bF(Zz*4eu{#O;F&l =~f/VX'}'ź?5aU;Oh;')E{(K*R>Ӟ&Cj88(TI]f!!'S%98*>tSjCP5' YTy \K!Hq`)t{TE:|Bfs^&E_\df\[evaOf!AI]=2AS H*x9OUfU8(/EnpܩbSiU͗ 1C2$Kwsoj$epnyO'3-%?cN ޴иuuZ`1:M\r澩SW߰YZvٛcPM伱uQT8J΢Q%5M/9Ǽy(O~i-2{c ?YE"1a_JEB =P4R(3T&d!n,*z5̘=bЬbv3#LD,CL\Š IAŚM m*iL3k=f6F }4}wBXCa&ezF2T#M$f- A_ t,2!'"1SH!E;$$rLԴFRfHba.xC0|u eTyY~KuҬͺ{)8$Kywٳ q4)(c推/e=bbLa#rc!.`!D{7/3a7ft 9tE(ILC 3Kd3!]{4閭i4*ef(f,fPd0!aZ,D*&$F!!^ʇi 3A0*A@$W,,THaByj԰/H 3B1L.C'b-,$(OӤ WÇl)9w8q#{ke}uY`䆍uۜ7z7ћ*ެEe1H_L38o9뢇vq߭xayifdX9؍`xUKSaS2Cb0dwz̒Bc6Ex(vH=rx*,E3f ie̖Bs]tsJ dqH,vZfCFNlˢ>IIg2rd8nvāI)֢;I<ՠ K{Gi6GgW'&Xۻ eoލ;eEE-Ei5%U0mꓗԧEBz޵,j,3Q9Btu(cE7PRtОf(X,3#5)+0Hy63r 'YLaXYnav{ZY'!iTϬ M`.rZ7jQ˻-MƵ9wu`p25`0hp sa1E KnhXn)]0җI*2n }Qͅ#(Vdb2Am&=tPaEjR EpG[ NL#$LIqa63VU675u0R wfd5̉Дu]y0) ker٘Vu.5SO T~b|(rwܱ)j7/ԿS8op}!˅\h/ E1 IIb$d= 7pb6Y*Ty6ג:V!Lq*ٛAF,} MyW2'fL75 $!fD4Lp5+A4ޥ<2*fKU0#f*OQ C"ޅ>Tcj<=-%VQE cӡǪPE)-R#&d-`-ͭЦcT8?:ܿ2RZ5F,9uxrqΒ[,r`y9ʻm|җwᠪk]x*fڜns]ڇOѬ%wSCs* d1CYA=Ma- [ ƥnGVfsaU8<}13h iְALaZk(Uji [#Ш}EjN3Ä a/b fCq&$tVI kaLQa#qx8x< f2ccgHTo[w BaShCO=l=>tUnxW3$b0㯵-l_m,ma?KO~i/^W /7O3 erxJB %%!K/g3qGJw>̴/=Z4iEp1A3sIX(Qn(7PKx1=6Hbfaʻ1]03&}(,lf.$%YTa䋟u.)ɩ\TC[iz3Co$$3nFXjbi7 fH1)!aӌ2Z _wF)V-\ei%l. a1a!0^=CbFRĻ1*id!&e&r%^K<Iy*/3*-Cd3WC OT4bF)SaK{? lm!ޥ,RC!)CǤك!~2Lc4ABr h4ATMMXQ T^ꤖ>,֖;nˁYɹ+'? w˯x9q'1f닾6y0u3ofo*v{)k}y.3}Ch:ޒb6OGP$rVDY$ Yh*VBCkFBuxJ3̌J{C2C 2cD}2wbA4 by(w[\WqHyYOPj4e{Z|'ԛFKR(7}՞O^,/7l,l\Xhl,qߞzcI2Z9()E_2,YLBc7KJ)$cSK -]*m4N̰I73d*fFBi`LMPhiD1vIe*{84u7ٞ6pƴQ2w`.qc.S<Ebf V1pfq!;cO9.23d8_%Ԣ' {QEHh܇xIؘv8_Xi LS7/0EA|U5l!aizfefcb"GF!c孩i4)*6$t{J<͐"C:$0E6f)CPM!f x* = ԗ"<u'a{&eamb38p纳2Z'wO*;3$rmW/A,3S-OSdS7&`zHc! 3\AyO 3̰S L{ D.P68<̛Ɓ%bfbSJab bW Z@1Pe31"bfR|! =L#bv#~63 &],OBFtw2ؾwI3!iebH!s}aY>$b43ԃM j0AA0"EB-SA*=E-PfFP&˴KuC|Ggf1&_pz)(r 'BNķ%~mV0|f6gfeofN؞zo&x;7̰\Ma{Xt3!6)/PܷnzcPdpXdI0Q[g#~P$̝Qw01Z&̰>UT0cnf̌Xb.Ƣ)Ō1/ӿ}fen6o+pgzvM}:X"ir~D2MsGFwAN63; b,/A0_?po8E=a~$qljwOߨ;4s6M\TXi\wLYaw1fII-l8١KptE$HPh!a^ZwQ̈́⒠K*zEԢ Ae:LiwiْEFYqCZ'pI3v6['bJ)R^,!un^ Y^δoԁl/SraT\M7Wcon^fh-6٬%޼3OOr uf+ǿZq^rIj5x&ZKWӭfBBf0Bn$'{?󓗢ZAk*ۄ ю]:I׀ !q!FB$$G6ϩks}\>21*Itń{PaB+T7j4*h;i4gSNez&clҬr nxćt/1F_dF6=M-7< f|k/cfa#I30M-;٬"i-WEvPۦC# 5 99"0{́!d,4{0!ET1 TCn&0у}RH*1588ग1"ҏP Ӎ41/C6fHȸ̠'RII f*ƠOIQdH$a3$R0a-̰g#nrAPw2*8X ͽXT$^]Lb69I[g*8J:Xr#mSrHݬMM~m^RνبCwd}.)xbaT*j^"P%:$KCE1inޑٺB?DK *f7=O2IH| CᩥUS{h {TɌj6]a(!UfQ)hK!cInSQGOC#$OjzoݞZWXC+t$Q#:45(jDq6&$*ƜHYaYn H`ćّ )=a Pax $޼[4 = 3 qA|E@7Z{<-4B/4̐e9̐0C ˌx߼GhaB1'?o^T|Rx!K%0AH"" 3. In7fF06}8ВKnT1c$3X’*f8UrC/ĥRAiI\ff,JҞf6JR,Sm&EH^n^꒔ 2maM>LSiU37FB0Pnߑfay. +̐u'!n$Ф\ɝ:"97tӛi& fOA/Qf2.A Bb`-x:ˇB$3mrl{NBnr2HdK҂w&̒b!rsRjy9@HH3PcR1.=s,K*`HLF<%&$ATC;ЬMOIBŐ1Ӭb2sJ43.ˌq &F͌Z!  MP0aƥ R\2$dU.) =B ir)$"!!Z(fN (̒{(b%w,,?5818g/>M Oſ?89K蛅1?nu7ˠZ[7Lhjڞ0Mg3i )ry مmSbaofPEmUL< Sj(tT,]d*f0.3(vS29D1C!7/ZԸC/6jeZu8D-=?.uba6zDSJ,]qN 9w;?pPd),pp.G?iyY^ Ɯo]{Oq2.s8qtp>Iyjaz޴,ikaX%sْef1rl:R M;Y|HBH-5VCE+*jġaRj3۬f.]˥KBy)SǿʿOK3ؒ*Zujsk-&˚()tIԲ!5]wT{Y.,2*9㝅.owoX% %Mr0^Y,zrFwi3dNsKڄ'"~"ͭaJJBofP&z5C&U$_?k!! ʇS!`A<# EVe*"ȰPUzUbofh E$zoa7,SCWS˄:蓅s8p,j[8QZ,wr+́y<"vث. ^1a%'­1q7l:~`-Js"P^QTqN-y?1/w9ʇߙ1.̐ܘR.Uhl3eP$یE"R.YaftIMH⥌"lZTb c|)e0(4=ƁqF4!qG)!+B#X8ahV32!Itc%ˇFBac4ʚṼ&fMai o c؛eyIHR>%TrIQCc E:!']f0~xo%aƥ1BX=KI1C Sy*}bQ9SL̉`)[g) f ꆦyP}hOweJΦnҞjInwGeX=wH9r#O'~| y0^r9a}1e74)ΐZi7.0YFoljK2]0& 3>(s!!K%u#CMωQ;JugZ.ed56iʥ p/ÿ?ϝ?YEzƞ9Z03T`ٍX7bJ;Gad\v|Jy,f͏嶤pA48\y`Nݰ ;fr24Ӭ̦;,Tx)<!f.؞R~Pf8*KU1cMVUTtvKY_S!E},쟚OmvSSB#(Ê ʥn a6nhjX7LOnf83 =hf*lJM_ 2*l uOnXqu2Bެ{P8bH\fH\Z\b5dȠɁ s`d#7eNI>PFK1f GsOV-+W3[V[ 3ia\iB4MxJ-}OYDe4~Lf V8Hȸ͉UTNBbDXExZU9cXZ撢2ݢ\}s3/9*2C]wq'Cc[ٷ[Vp`K9nɝ,̐TQXELEtKtRf=qxHB3Mj!7mS'urIP8TH|XÜm1SVhڛUTPz ڍb|6eiN` ,Rc*}`XfPR̢FV)V!C3>TvnRrSq ; sP}Y !a9߽biZ FE*m)l&.U42T ܲi]}PuԶ7nz"Ҟ ]]Fzû/~`}>0em ?!Z&$~O%c|KMDL|&%w wd1i-\$DLF2>Rc%a%L0`\$2(6i!! |h Ì]T9 xqYa<5 WIiA m9hrEm˜f}UB6seGrس$b6ˌO;o `,o7RF-RȦ?1>%R'3ħn/%d?5C|: ^ 틐4C M q ESqE!)ӧ("jZkC|HbfaRLRz%12}(T_͌$f%2flz3BPSOCʇU~0E2)uЋġȒ5:lA1}J_C-ɠ}i 3L%[. =Lx20&,l4P,"Y.USS4BQ%uPU$kFa&n΅%a/4hZhr#7rɝA`K~*^K0~qz9eccayi4q^,l;6Kͼs6}>f~z|0($ЛŒK>dḧ́ KSʹ1$VZ 5O3.R~q j勢Ѕ68/ @ؘ1LdBU2.")UG~7oߩwrz}ZyZRK,۝K-;%PK|i}9 )Eԝ,X`}' F{)/yA}SSɄ N,zL\Ȑ?)ܘdjz߬inNZLˌ٧T3}>*ft,4E*Ԓ)MTы4bZE$L:7I1=54O[UafTNfO;>$!e4H7swCrs4FFREѶ)7qAyB!U$L3C7>ͺ1Ƨ*z`/C20`< RHCş5`|X~9e}1'I*P=8n hI/*KϠIaAyqXf<iflv6$Ѓ1a I`L0m< 5!e=e Q,$RSf&`0ؒ 3KB3Sf|%aT3ŌK B! 18x)BȠHA*ɢ˔j2!e2ez2ݺ}Wvc7՞f/0XBQ.QXX/o 81'9#_ ^A- ?2w8]yyߐ7 ]B-޼#Žy=֌ɝN Z>7 f s":&Ky57NB5-a„*kP(jB{A&A%abDz47zLT|,Y7m!C4G}w]zllڧZ,XX\jyuȱLyg%Kn(oHn7y]F̝9??d^#֦7Nޘ;lb/ S2kX?=% }gV>BB %!aڑ,!l5Ԣ8n`SE4{5Y-bE-nfqPhĒ}x{#eN$7m77YRci򰤖 d! ,|qɛ/xi0~vwI1ltYM#nf[KGv mNL#tY}v6b6~o_?y!7eޢ&ÔKUQb4:ȰTa`Cc C)HqnK{)jQ87(wA` #j” U(4]F1sX U( )2.i U7f. V<}2M/^ )sn6nn钢!ĥe1m*t*vs.l2RB{P6=BSX }۬;'"AN-A#re.)3t0C%䶌UI71S(̘f\Q(,9t>2ad:xX}n:FdHa):0hfaC̴3҅6C;hif8bmֵH*ttfr.5KDYB62d|ZmfH࠷^+rƹ# Hp'nfX7d[8=ҺnQjQao](}cʯ6,ξq!a-֋~ wi_!q/x!rda10>,~.a2>_0^KH|*e"ŴxķbhCq2ۯ܍mʹ)2NOI2A{Z߲1LO *3$hEFrx*OJX 0CiIQs*9,6Sj)/3-a4$fT]CLi̠؛q2̠MMC„3L3WfA}HE-Pɼ{ B  40^6%,qÌKQ> %Yf<*>A|M0l3K3KIi|mN+ycqx$'/|O }$of9n;i&P;d(e4:e\jћ؛=j37PTX?I!Qj5EQT踴ΌT ¹Yń X9ɢ%X)s3b?JHqic8Okp},g&wf%a!~婾`yx8؋da6Yru#(Yq1c.wɜ2,vr2a6ULXe4i,~&鍍Ӧ0Lrn$o,fn%ӄXKRL1f졂2x(/.4VTfni%4å}䠂%#}94'Y.9Q ߔ!7HXW 㒦K.EcpXDf$c<- +Tb3>TM_&4!̈́CEz-3#AK3婎TKP:|mrI&K#YRfźB3Q젨2,QPb-+cIp$R],Z*^%^g30~E)e/ !?aXk؋c-ˬ{ޖƁw>鰆vY-99鑴Q+|E4դR,[<-:Fr9b4vE McyJ̌LLUt3גE ĥ w*C!K1Ao4`IX J)$>͸0cf9acfK05fPA3HT1\zTJfP*exf*)VT1'BR m˥i<ʡg#T!aG^3H8 aPŐjۥ6{sòY]XhTi :pdMtyoO޿|wf3ogcm kcwww?4>_4C şƧfn4/ FH\. wƈʹ70?2ml,4i80B{YF47&f6Xhi<ڴf`{F x3M6ӾV~ўBX lNEɛˇa{hO3-Yb(rie6 e6yF ̰70b=L IPoirʇn8%ʹ)!M2M0 S^ 3/XF/!aFT%4Fr͜Tb%3$!,2h ̌hf1Z bN(] &ac8QA⥘ao!F`̴hW)?4 Q(bff%a6fX̒l/(+ )5F ]& Uځ|X4/CKtKVIaQaK RbiMcC{MKkˍpl/ 7r.oI3mqۼS7,~li0f f|%EaZm/3SaTSoL3AS֌P tT!a0͌ɁQOhd(/38I\$7VFr)6bR,/gs`iOW;OI۬{XRZRoԒx%E6+yÉ'Ydp91>5ڧ۝=1'2ˉFmf3ۥf8 ۸L8eڸƁMjQl/l̈́&awU&ЊIx>1Dtn:qp0ZRR1]ҹf%r,X9HXol.}gy2 iE{8%PMmsǍ4j*soQ-R.oXhλ̖F-Kjy:=,9Hce!C ˻ؾ0̝,Kkpgzߥ^E/OlQ\}j/{ӱRiRBp=T pKEHh$ɏlkpao*rlT"=4AB*2$>$XŹLb5ʇ^R>&Coꠚ]8QnIb^ HK+OE#kH)__| _~w ͠0C{I&"i]YCN?RA1AX!7y+L\  Cy 3 `bf87Y( iREFP9bmn-z"ĥv)r\*foX8#9O/2R4YMn SVnTkYP%UPKGÌjT)+=T|ؘ1u)7XX(|aoo. 77sPŽơi9(ܚ"rCp 1rSfQiz3a<3ePˇ)?[.5T|8J(Eif ҨTH^Zpһ$Lxn=*âg$eUY 2fF75aƜ(̰ i&sPmfc4fN"`j35Cf0RCxj!2;f!18$ $ b*Ș$rPBPh/!ƇB< SfY ]hٴ0XHCoZl _6[eelaO w'wxox[ K K|cKPC\1f<%BE1e7͜8̜ qN 1aQbbc4sp4P.afЌ4i Fa,cdQ(4nSgxܖFJrx)3<,I[⋧;9l,IPjNLhɛ2*ABo Sfp2a%!EB*/kTqpbij0 K4> !b XC\l"aƇ N,*Ox:d#Y CYثI3Jf!-qn(Mϝ11QN$2bP3Fk( PT$Jt3(x*DRK(Ԇ > %xJI3iQd<%E_Ĉ=8ֵ-փھ9w HXHX@ A85x{j9ޙk̽>ԭ㪋5i͌ Änԍ0Ӂ0aB ȸ)RK!(\fB1#ͤ(I9fDo&āMP$MOڍ"wB%HQX(' l/|(2jjH4j!ejAZl4nqyfx*$*ṴO!Y$=DU釬O~0%2XHe˲ᥙd%?BQ>2.㩰\f]fa6̉Mn`sЋaiűY(l/eoviM#~>pnTM*3n9f%f3>o~OBƜ, !>+brP^rH%k1bMPQO1=tSEo*TOfBK YdP^~P"%aV<a6Yj{6OɿIs޼ h*Ԡ\`b]j{{3ZtHnҍV E  Ge2L $ 4M[p0',h\CXmΖۍB7Y$0LD̐8xiM-R$̴XWY^zݍ7V$~P%My*%!1{HT*dr_d !ETaTrFczr45.S$2eeHPX8ʥn.7fq 4ڻoνwՎy_\{2~ٜ>xx:pbaa`#d17l~OZ.iSZ.)֍ۃ9>^Iʥ=7=>dd(OÄ."u0ÄKeEĥ07OEf}FN֝AYj&EŒ̉iz~m'H uagᮕ_b<n>u3w9t[i%ǒ`p'wlll/CYd,Nrd7pc1^Ӈ9}'?R'Rw ?tIqx:]<xoFo7M3,R5OU)lOU6bmpRTi>X.3 S*%i,iF宷nƇ1 jĻR!Դ2UEw38ԱԺSg,RZԒb,)p0!o^0h,f",/{aN,ܘ7E>aazQŢ v#^ͱM87ݤZJ&X7AʻIiŒRS̘_Dӿ[_?A@X2h ):H-]„E,nQ3Sc6A#^rۻs|h,ǐbF)Ԣ7K4~ a BEiK_?˿oPmdoET fG0e!CBK=X$ۍl 牖,#M 5Ɛ hQ&C0KeLR.)q K2La3!*jH)ԐQ=.Ш"R~P*sSq9IL3C Oa-q)/U.g8<&)Ij k8ȧMr pVY6IhӧK{"*P% !H UrT*#4Y,KVs-7Mvbm{oefXN?vez[nHn> 1VTI8(Ts+IYG)OOcBA-977O(*fݪx7=fo Sk BД?P칳7:#)=R3XXjf2.$~cdaS:]C#Qc\vaOAB4]CBPa531Ut4e Em CUieFLHQ:h 3YŔhR&jg#Jvs[1Vt6͉KBbf-zye0!5rG݌\43c͜b|Sg$cN.1 f\3'SdfM⫲ʭ A3Ӓ|%Y.t4 ma+6M 4,2f<aP( NKBB-RTyu#!̈́i:HȝA7%qb .)R<|x /*t1M$.fNBqI|'a,oBA0)q3`>MȌӞ&H1Ȓ)Gӧ8h-0'Ct\zHEiRZ f< 1B[ƌ`41Ia&҂b!h3`*L7 .%AʻsR5 KS if|( :S !!C„cP!L{1f^[&{0scZE ]V1'bR8lq# eHEn~G</f0O=r+z`NNԍ=ظQ3T3ù ƻRzCB fK7/$IB] =dƯ c44!]"E Uᥘ!&f#L8sjq(I6>I,ͥگx.k1f7iRE/-br'.?Eqr0's$ե$us9 KP7qN֏}O<,?!8a/ڜ奷Rۻy<vU{<-2(RBjpP'=.[I-zйS-RH,_T̠7}U)w3Ô9hPHn$X$8]RjZgKD{W k2"$73[X\XY(wl w2yl ,vp9~0!ˉeZfF{,f&2S8?<5=r,OlzHɴC3bיMB"f{s"APEfZRt3Bn^zH.  I3Mc$ao)LKr ӰL\B Bo\"z!Eh]jC͔K#kQ(OQa7{HBݼ4v.irAPE5i*576j1Š+a[q o-uPJj5tQÄ,f%J*TKTq>SnT,nB(Ǻq(#e3oMa*¹9>Smy4J>9n28f5ǢMgX̣%@ƒjn.snv!^XK!Mi U$RKTQ To;6{/[{˟ٿTlr?i/S` /e\WI-)rE|"^r7fcjmlfl31Jer`f͜x0>Ti3$/afh%fm4 ۇieh,[n1bĻpfZ*6^ayd-bmQi4Zi)XF{)ilJR-l`\}H1$,/ o_0rn, L48C:HqvIyfhOq)x %!ABB0;,f xJ2M|f4撲-nT191T*d L$awi 3b SlOUfK{ALDHi%%*q& 1RwHlc3FĬ`|(O]&h bDr)O2CFE UKH,j!&7i49|B A4B0^CNR8If8w3LaaKfN#OL37Maaon>r߹/n ` {0pbށwK|~f|~'NV;L̐1ĥ=LqKSDvX`ƶZw3kc SO6M9~J͌L\ n}L#[ kdpn^40̢S!KjXMjbⲷd028s\RGQeAL0RE:r^8190*q!bR)Q)1Tn:&19Yˇj9)Xv!E AQx*HQIOEFz7QU pC UR`{JZ%v(0㩏{A700ܑt0>326n]`_z{CT}P/+XW)?]AGP+/R,(ğ<`PjUj:AyjISYdI![<̉&#KYF%bS!dNrzY%$b$ddAKx٤%&KPZE5T[:`C\6Cjnq(}xj6*x:8SO$VuPFcQL&Hj`E ]TQM-,^$$(}' >t3ÌK/, UhKBHX7A i*d\Ty )!Hĥ ˥a|Z&#=V/nTTF&NP"wP:Dġ⎨jOq2jO1 (ORU^xYAFXh*E5 %٪Z,z*KE/Iݘ=j4JO!jt5lJ5NҔOSyBRUԍ^U"qBڥKPe4ڇxf2BN(un&Zi.чdf|OE7 ˢF}͇>Ox;Rw|:8P(j93l֢}b6/7 za#QB t!T6)^Ey R̰dI-/#H`_#s?b!:$QHEX,2~dKM0[fcنMSǛX8\}7jQuه9]r%wrn2^p{n^N''B8prӇ1~8`3T/&v21sö0eɜ"=TىպxiO)v+xky*OڢȈ=&'U:C0>5Q-^.Rm02d0X(R8KmEm/&Qh 'A?Hm[Sٺi/Z=xiRYBac5K/:hM)lJRWGUt3̉-BF}R38P8 }P'6q r`1 Ԣ9XEyjeo EUh4kq`7:VGQZXɎZĝ(2 nvco oYB}SVC A".&q VMK0X e}C[HH"MǢ< {Ѩp[TыKd*f<%[Unza|X]PF- :<*r oZTHf5Nugؖo{˻߱[<- 5'Cu){Xde78[ӸƲXo ݧ;6~~F7V)b-y?Uu7dF%o%wyhVǡf>ΡUX(ßDΓ2.{2]ܷ/KTڇ=t E=̘A2= ]EӞQ)9ʥiVK31iPE$Vg;W{t3[P=L3#Yà)N5# 5ZDGbTtr3zQZKP%Ŝ,[V2M*T!Bu0ÉSML>r}ja1}aK= iΓ9" ՌֶOMHGCQx)g"Jr"w[oOR!V$TPeU|SPⷂKM5O!FUQ@jӍFQ- [ )1. 2- 2$d$TCFՒx`0hd$ll,U"W)\CIAy vISSQ֡T.TѬZXPОA-AjT{YXKJUajYUQ$rIlXuPE-_$$.RC5.3KB&E):2`q KUTU>_WEcB! hÁ!1CP䐢E:$'ʦ2RxdFħIȨJ1)ĥ PU^*/QheC)V-~^2R<5 qeH"CPM 'xh1TK ^SUTKCxYU&CP!jU(j24UTy)AMyٞu١QafZΨnܥJeLHjoX7Gh,/ 7U|{rO>p<,8^6z1?1}r"!CBe1.H!..A`H[ff \C ) qTT%$ B 3(/:<%B0dH\F6$QsK5{Jͦ˚(驐;Ƈ҃RMnoe\lS uPuP7úo?3}sOɇ)/7]n79I6wE\N{Þ2^f{d$#Ce72}4R~JRdȠd}f-)Mnl'_ۇjPEuУ4ժnwFO$0K.Zaq%Cyh/C2v4ް}ͧ;h!Z>d0X88,rb{QB3w%`;dHIKj0dccэUԍhlOU/M*&o_?/t$dTksh$Ty*.azaXLQT(ÄUc 5BifjݨM٬B}q!!!M6]2UT!. ħ!MHf 9qMPhŽ\8PmݖT5]7=EbKl4vZidD*TP(-= 1AQBհ)P& ﴇ&!*ВlKZ )Z˥ d(dXK:[zPd>5WQoIJeUEZ*:(Ջfաt1Ҥ1ThT39ԡjQ>nSq`Sk^j,by[xÖ]aݰ'l͍ꦋ^)=ÊÌG}[2(xiUДj>AȖݤ/DM*%Ԡi/}&[ 3IЌ¢QJ֨:}؛*T̸TYUB5A*u,Nx*?%bХ*XPtQJuI]LT1Zjen%.AZm{HQڥ.)KИ2S҈/YC#$^&^`y*F0l!fc^_˯ʥ7|*[Q* *(%( W>^OQ^⇈R%ZՒjOU˥,jaK-KwɢHC%W)ie䔉E-/!D2h$)tȡm. CB Ac!"6i%(BByVEj,42t$2Ҫ,pɐ9dMU!C`yٔOUԢyuCyi2 M5^.3dpx.|ȝ T},2dP*z ~gUy)}&1 ٭<-jh2ߕCʶCjR2EV [TPh ZU3#6c2ؒ *U{( ATJ* 塚0~'<)5rɦATxhZ凪BTA{C]2d#$g#>U:%hDAB+^$M zyj# q<$-Z [uS j=hc|(Ae/zûx 7y?NN B5Nl_ݖ~gB9zIU2d43b6)fc۽*t{nI  U.)z$"TX XՔdbV7d(U8P咢2(11:tɉ*aFi*n͹͍lj,;X> %}lCohl~`çUN2wg$')Sb~!' 'ul5Y3w 9c!ƛKBZlK+z3HHTt!ʍ 6OpZDU,d[vp[tb[/*T5M㪗/T5u~æJR' =Ee=e3]F/Xo1jl,,/C6q.8KRds_d6l0${{Z4⡩]˜dcɾd/dfNK%BMЉ_k?A6 ar0j:,xz16 &!a-ӁPBȝ^TibȐ`BPPEcoRh EBaK697 T!59%CQ'Ia4O?Tu .3j-jXd66NRLF0 FB/{Ӌ TKCfNBɠIe7ᥴh/CP6FB#90^$i2[i4`ABK-f\]h,dħƠMJ5V)jmwԷFLaTnf;'BݪPEb7Cq`f2ü9 ~Qja|K}[ Ӱr;袆մK6U#ȱzn1do63ry) 8N7eV`(y 塛;wќut+Y-sʜTd)dƇn 2͌r>˚OxXK nBUZ 4!3p+C\xu/c0. Awt`TݴKC݂"UfGTA袊Mu*`IcQNaCCy(CЬ T}ܨpq])ZKR3M25> {&] .\7k*w [4;yHB(Y‚5 X. J`vy$,Il*aNl}I4=h'31Brz*挗F){͢ZXxo%m,maW /3>gğg2!`qI!^x4>w?>dcYdS_elhl3'F$Ad8=43m,O4 Ƙi̝ѦKjbxi R!/clfyi3.1Y^/EJfIc7IP^r#YfK7O~h3LVu1F"hOU1sҨa?40LA|HHHP4}I&KK$o$CUUK%7IḦ́ S?!`0r0C´K`_HXP~'%렘xjaAhfPʌ̘3  iPD6!dAK˜Ф0hۈ $̐6i"Eʇ:H@!^60Xt)fw݈(!j/a<4Ƈ&t%,Ci=$IQeLfʥHnK.9L6!bx 13≯6 bz3ai,FRfRMuPfcQ( 2!re//׍#NܙϜ'sz9f<4޽s6WiizқhԢ1'BcE!38R h}b!+14âU:d Xh!)}Gȁ"!/DH1C{E }n6qS#kλ976$evM&Me9rDm_)7,Di䈙5MnfNzkORif,NbJr0nhR ) A^K}QwtU&u3ʜp[2ezIL$_OdppLŁs_w/Y0,sL4e f7 Лn:.mz;}'lZ8%%b7/s4(rz>`fC?o%n$szDZ$d^feq橻 bF'jF)mѨ2z0iD杄 3nn9}2aF64]hf,4 0CnrPE7{fovpЃEɌ1;AF-mYr C 3tہӜa4j f!7j~<NF1r/U^&zS C )4 L ! aMB8ZLTA`o99]2&d-*.=LKPmz"XjK|w͍\m{wM88( s;qcEW"iz]nT/mf3aơ~bFh3 3; 3xf<%a<˸4C0( (/ČK )4BR"ZLelOIiܼ(Bi<ٴ`0f mf6}2MʇiP>an,zCB70Ŵ?k0 oJA0.9nf $7Of1mef wetƉ#63dCь!fZA0.0(Q= + D`3‰njr2a6ʥfФ<`&EPh!4)Ԣ{e3F6sbpG3wNol,:idv37%t0㲰KQ0gٛ3C1lQ2CB PPȹB* (lf`ER.3ݧ3-8{绅XXқeM,3bCY,|qAn.uF|œl˜je9qb,/8ioJ-OF6ڑ-!EJd MLPaA`19I11s2'B4Y̠IHIh9߫<=,L?Ѹx|Z^BflӦJ,?,fq`86e0?c3ˉwNodpp63h/gÌ)43w*(z&,kvo476%LB{II1~U2ee7)Y7㩙b %`h?Hn0"M% :yAa]2iz,9T!p f-1fI ?P7j0v`Ӎb>; }zi2D#'k3{؛ )d-&L'Z&(%~X"V4`,ÄмEpfB;dzcM }=4RBV `0<l,fHLZyjC1m&0 "2bΓ'XHf6LBRܢzlzF}V.U(ꠛBBQJrHTUR%e _OzS(NnErYAte:~K<-kyٛFs+e~n),K m;͒%kamt߼w&n,e|SVLJXLf#OUݦxJ7U>ƐUܾKfFxJw"%G 砼lI1YPHdeu8k,tŒEY98Y*%Q2C7 !RQ"&a`B1F*f*Vؘ>A3˥tId̝ UfFSPh$^6,sP$Z &;DM{}0v), aߵ.=jvbo3f0q)Xags,ЄtcHqɻ᫧qt6ocgZ0m`/x&oK+d]2 2AP$Od,-iF"^o EM 3~ݘii)KVQJUnzy)P|Y80wrF0~l<ܙ;s2?cc>;}2NqāPhhac9I̝Iav`E MQ*4]'(a63 faF!ebC*LHtR([49 & P2fo/][u"uFolOjܛٲnf>Ozm%\zqB'l,?ܱͥo^N}9WoÇ9qK`3vpz8I3>i4kֹeaۨc!fNbݬȲ$ߙMnRL:ٍ咡:-&#b9Uo3Jc<n8}V*xS EKsT"=&KR(j|hTQ a "NX%i%Y.xhNac|ŁY'0eQXL,%XfM43M7 M#M)RE.RP"9M5)J:hzH%[{-} e!,L̍CⲾQdYd E^mj(/N( F37lh&"cIrfJ鄵}l6 3!8ᲇ ɠIQYE a.)/dᛛ`+bn1"`F*e}Ow9xͭa( 3nl2飙a:dэa:`P0T43ORfRƇblOB7 )i 3h ꠚYGlT0C"t1=R(Afr9"l9e}7:86)riRo7*(R[yY~*^ts)ʦ*OӃXUTI-Yzs)e=-jv "kan,nZXf{جZ. k%-W#xGޖw:t\n%TP.aa=nsnm|hS k1[T%+e$"Ko*hOI4Uz|^nxޒBm9Qma7i]$jݨrq{3 B5}THF+kM)G,fg"3 *&^t3,4٧{,t#f0HMu* k7H,VVDƼ#?#HԺ7;X']O0,/Fy)tH)t\М*6eShQ^VU>{8/9C⻷qqpn-WpW/7K%20?2A$A,ܽ q!Ci ˟3ӂ)gin&L3mfl)O3asLP>0S`qBL'O3'3MoT ^94h/ʹA4Zܘ6im"~&$ 奭D73-YF34)dIXR9]iRfʹJyJb-iriRPKEȍZL{ꠊ 6ɐ4S. ,fŴ˾'4)RLӛ. >"q!Q^KbPLa|2MB!aK0?R>AhC($a|Sff\fôA0`$0xɈ U%v0"KŒ҃*4SfH53R )((?H\A+/"!E< 'iH H$1)/`a)ILKwDcA5a4}xjM֛c}P_zrM7w/G9q2 'b69\g8?ᒿwݹ{X^66ܽ,w1]?Lg v)RРAM!cD1!R8匄#c41 4r@!# DӖ BBۡt<{ggfmZ^9^NsaG<(E/BKojFi<*O͠ Y>Ԙ.R>BB7OB4k!Eڈ$*-Tu!IhBOjbӺ8eH\P3V{?=qoF_o|W:~ٯ; IEzB]pdwWrwkSʓA\j9e3/xR}gɦ?M].&ʩxj.Y2[ ٛBxéֲht.~z7~?y?mo][ ٻo^ MѪ.2$TTʇJ&EU4aUu!t1e iUWrPE_T"S7AGxTT{PaPM=xzOQ4^ S&^} ׮X؞ɠA5l "U-)9nkFHng7bd0hL{2襊TQkPzBe˼$4||W{|o?T&F73TSXB5lj2 l CݜCBS5s9ʃV`zH ut>PE-*d0Cnt1lXtAA aSǩ ^!) UXV1 KQM늢"],|O5_1fOSۨoe/_EgMHb$E-.ultٔEEx *&EeELsREPXQf2Cc9FȠrģ Gka쑉ZW=Y˩qr /Ix5\/8jlf3 v7Fiq:mza#2 ]Q .m:L ˃v Cm"3,,FfmYؾ~N]_+/(壂r¦>^y-(_,幃,*(ʗVToxSe^zy%ԍ )+MRdKl!L6!\wUd!iqEI$#bP) w% myTբ<, = =F(dXݠT]򠖻VՒQ^2#3rUUnɍ C]ZiQNiwi&hCe4.FcAUGmzC]G?v|7|_.T[Sl L゗(=[m{_U#f6kyfr<ʫW0$ܘٲ ոџ"CmXW4\j]Eh PMB73}w^}Igɧ_󵒰o_9|`Pa<wg|mNJVM74d>T2xx'|9+w\XBhoPGm4isvwo'Tq,n,"?W~n|%GH~?fo֯u.;WH9M1 kv&C/G(Z4ByPBE3t$%*Rk1^KdD*zQx7jɡq/t9u.nQfd4raMœ4 >en j5^ qGB- nwu`a{qjl8dZuk[ B;ԋG^QՊ&6{^2aXX_zҸ^ fJn5q-QB8׺f0-3pEp4{˱۩[yBoB]"ha`{IRE.,Ic|1>4hUEǣu"*ULj#RQr:xЭVa0hגۨ**tMpYjU1 ʃ{4UMt&E lԦjƃvo]X*:=8<*ܘ}cco^NAQU;&hDͅr*P%,mFB]<ɖG! ZH|7~ fB6)&dEB], ?gs,`MaA ACU%|y'oA0 /h66o%lϬBgɁ`k) h/|?ϥuu|\W}ZWUTQ"^EQ*$T)!EB'@9%d-fh2[Mѣ=v0i"}`P.Tn /ټ)Lyf )(ӪEu`5N32<#M/V+XȔLyFyЋn㴇naJ Q.bP`Y ˃^,v[bYS{j-6>2 N]t 8=\32a| NN3JUxT>sPuTјvת4ńL<9vJx qb[.)fhTZD&4PTq)vP(CLMQ%REBU(*T=WE5RU(wEB0t 3Tp+*|KW=*jSESUtEmO EP4VJUQdqpk`` ?6\|W=Wt(I@VkqwQ!*{j5UT=*4ƛMryII$)J2dI$.  .%CIE2dCA2b IPErV5rS<IG] NNUhBc(*UQU{Srw{Xh5M_+Xa#reQEE5UN UT *qWT{2n}et{ҋTSE5U$d8eHz1*jȁPMUP^[rJ(ē*TxrwjoX]3%I-2he$AĨ)B0xTZ՞ԅFC]Th SGC)#˦]{S)B]H覂$"UK]d rJ(T)%)ZEUZ B5Jو/TTjPlf e<*%S-Dk@;es}CM5dcY .XXh,m%Q]SkAHqwSާ.Pv 7KE+n^>wHK֢ۡ2^k+{t;6k(s0Q*TMlwEF|"UT"E$0E/ITB)*Oƃr8 2o/U-hXNnx[/M'GN? B]w2S_} ^ <8 ׃Ohl̰7U7ޕ}g? A__˿GTlAjwCLK!-3x+p&Ld_v`Pp@ɫtsd6̖M<ԍ4{î8e./f^]in2V^~^'QDdlēB50PÌ/5[}|ۿ1f6]d0̐k PDģ^ӟE:ȅp%[KwnPN<*|+3( +wEwU"2^k2T0jf ޱ3T\j)KΓi {c s(d*JJer)4v-V֦!fZ7so2aM5glɨ^TddBT$A-/ˌ7g}_5}/!诈]r(OtDO3ϛtf>dddd6Yj'W/ {t3Q܇tċI\W{W/S!r_|!QP(ʷH'Z.6A懒g2.dK6" !dK$wI62dȐM6ْSr<<F,)LNPMB6:C  V*U塔rIH0AMYM5=T<U R N ^ED2^ED7ɉMSZ+5 )2We$#$^àPީ`0@oUEZä́={k2^xiU - $0v)TQ"^o^GM8\f$l9 EC66y&Yg:<8|tdG8||R j4n8ayڛK>X7d$xc6!!fNdNf3wl2̐ dEU.)gkSEIBBB  A9Cěod| DcH|3+?o7&rtɝS>,A\jD6)*d>0INoqdM6~Fj1#^l۸ywgs~0jUTETQE*KVo){32d|/E ɝ1>Q7&CƥT B 32[fG?}?ӫaG̉KIȠP^ sˋe>'{ÿ??o>į:~ׯDP0!QC$-")u?}k jIŽ̖)3TȰF* UnE~?C?1̰7Μ̳V^U B*=O\dH ϣ?ӞePŐ  BÐ0AQEF**KBBB IHR.ɐ$Z{hd$of=.9'jMw9IԡXb=a3y|8Jfc#`\fFrR2)sǞqi5ج۫Xޛ=7{5bĈWKMtֆ0wggj2|SV^7h򢨢B M7UTQM.]TskofnR:jj$ީvjݬj M[;E|-$$$$ AZgt#d$'}}JNIВ ^WhWUaVޔzQK[kFTQb5]$&# SFlk2d0Zw.tH㻵"Cqi$BPTnB{UU 咸TQE- U 1$d.qI" F{1ouʥڛ.VQ^R`< C`04|jccpn>[ݨçn8E}/Krѝp/}rMFm*Ts{bPEUlrn-f  3'f3aⒸ *MS"1i*Ќ&0 ,olfH$sӾڛD_c~MN$'Q 6~ hXOԢ| lv23d3wG~˫u,_:XXOy/J7U*Շj5aIȹ%ee? 3>GBdȉ|,U#m;cn]se9}g,'糜w[gOnf6}/gIꤊ_~SQ?'~~ťi/2ڥiGLf}7݌M¹};s9MFFfo[ "C f65>KUj4U>ZXK\*'s"TQfFjX1zyvIH"~\N7UTDNT$㒐hHHd0j M}h`'wQ{t3ju^,FOmY%JݚPݪۛn?I{I$aB]tIMVRkQ.RC-M7G^,o֡Vy$˛.ƫ^u}jO4*TSEJn򪎥C**V_,U*^h]VӋ v9.9.UTjTZTHBU^eA7}x1CUTq,An7u<Ա@*ofᶼYRh*|mSQL5ժ*T[ eʋBc/llNx/!~SӅ3[~:T_iDByħϸ!P4ʛ*omH"slH6 C ƐC!!%$w."($E"FDجE67Jxd4e$QvI!(P(5%]J{U** A"rڤS ir*$Knت~ɏj q')"U**ɨ E㣢ڛ^K$f$ޙM5c8N7UTdj>KKKljo j KC̈́ AB彸 '6zDH5Ec=KK6NR,IUI5e<V+1JUBHĨPTjv (C-B(B".S\7&Ї"q &#]!A$%BQKuZ&'*YKU&Ch9HZ}⣄K5xSZ.b-u|E73R'qlf/k_aQ_ԍB([!^|_lj 'ԗԗ!8qtox '8=|yqOCq_B lV#ݤPp#̸dCŽ.d.{BvFy3At )uPgKQEGLMn\2(I 9q0w٪^%ۛP^u2>ۄ!=T{ջ͢RǢj ϻOk79]KK(mA|:I.9]jQ KK-Z.L6j;yk,2̹-˫W˷*?w$7ZJ>[f̦7P4N92vY77j.uPM .- !4i=OrɏT:j2fPo MR7-C0#sw}_W}8ٛ- 4CPT3Y x3?+N ^.&rLD{ou~cbhԦnԐ,] ]ۥEe:;8`0.CP{H\g-^ՎtCUh**ޔvĈB#BB9"Pj7IdUM {#.UIFUS'k|K!a +Tcf":a-E;2JQK}{j:xU7}s?T/=VVCo.qxժ0j4].ML\BX㲣I\֍Jpk5LQ(TQE*bK*#l, [B|j=1.UTԁ/9O l,? o[UP~sENӫ TE<_ (R(*Fx<{8$!#99NMF22d$و"pbB\Rb$"- F K6 ڛċ T$CQPU :(Ћj4%t\U;> B#LN,Bj&`ȸ4ĥ 5 U! J6*UU+ŠQJ*4EM-Duh meFd\]McF22u0 >*-$o*jyxQM{ZYbDMPW]7[!C7; B(4jKBЅE-2*'?`p %ᙠ&w\O%NB8qz8|t+~S=8սM|ʹLKJ5i{ #$6L*a޲L6b nSFO%Kߢ=IV)722B\=Z.=UCq:'hZ'kaql&WWf댝=r&C{TB CFCHoBx 9$5f!>>κrQOכ1 ·߫AQ0$df6B il,*(,_._k~&_s_k!aب٤Hp14f?C/k!(פ,ИBMGCR XULG3~>;~?*7qbjը8UyB%ģ ު^Z͘T!MV*ڣxSU$nbTjO2lĚС"j$,jGB{iéYv#Jnglfd|j8thx-n0#3vSk4hk3 …uUW/ DAyWx; 5.Uo_*ʳ⥐P H"(ÕgR `|V2rHŕM2 41$c#NQ`(Il7wiw!&6P46Jq#ㅄ*&OAi,ʢB7w˓lʅlFbBWån\.x?OoƟ#?C>CT8VV I6NAԁ +ɕl2ćːٖctSt &_үO~ɗ'#q2|'??}/_!dTUC}NU'NU( Z(QP$7}A$C/UMCevZ +iʳ8!!>TfM0d>؇Xyp n~j06T1X >T]NĩG{p ~~o~_[ǿh`TZBf{64 B  6n7k1q?c}`3!2 ME]$ff#1O$eJUaҸv7 3(<(ʣB(A1U(SUoR헩Wbv {I流j:h9GEBBP"(]=J ҞTQ .ƠO]Mfc-7AU* ݞ]0 )nfdny*2؃9VRŒHcyXn-3ʣn5̃|re_Y=j?jyW`n6hw֒bzh3ު&ZT\5* Uj Tmw];UY&0]GUTQ2_e!ᔸnQQrAaqeVQ宨da/z3]BF BPĩ7r|7BrB An+ $(__ ]`!uکZբvŃ I -y#%)D&[H$WI#oȃSRbc0d$&*Ba,"d"MFrĻB% ٢j7U%f[{)ZljQ\}j$ƒl'B*_c쌮`=ړjBP^rM5Sy' 4 .ݞ< 5۩SɌS5rJ!CTM6$TQTEPTqW(F"C|*GSZuO&f$lFgatȈq=0苪x+Jrxxt!REyPM-wnFF4T+-4ʳtUnZI5B5ɦAܤǩZSG!a P ECQETZiʩj.T;U+$C┡M&WZsh^NUZ2(j$/ԃ'9PXtj)BZ崆)/ BPzIPBgS9 h{v\=Px<ϾB6`6+|+75aGŒ'yڳ/$ǁ&CSc"xab] ]4QPadt7/tS*P2䊖4=*͖*ƣ7rfGɐ=)Uӄw}~yU-)CQHWw{]_-7?_c؏oY཮WǫEwd#(\|]fƇ;s,wU^ycF1_tX4fA2[pͿ:S~O~}>Ɨtū_+H-TlHIuڇo]TQ͊ Pz9U8r&f %vʈC2>Z^H!Fp=&q7>\&qp9b=F ZͥX}-5dTtC]GM|ZPd~?{|u/RanR(E 3M"C<O9Ȑï5b0lAj5hZ1$]ߐs>D}p,MZUSẂ.GMmͥpY$>XnjFы,2T`k~~金Sc6sddf}wQ_?>8fyTThZU $dVe(0&t- q見UnV)i 8MafvqfB ND`0*ZLKǓF {3q}nH8ƺ\dёMo7=aaoq8Md[ӥGMَVٛa2NXM\:êϙf-,7q,Z+imPb#׫hT\.Ȍ=)h,0vSeFf,dƇ&ZME&\z[]3t7dMqw 3njiPۓy85s. 1K TYh.qj.% iV%9*B]ûڣ 32CaGXEnBBbAUIbv9MJ&ŲK0:…SPjOʣ2ŽS!!~F SPޕxrWx~|7| $? OP>^Pw)q;=.(}JQ5jkA"w-iג2dC ݁%lRN BA(N)w-4&J dM"I (⮴JUZœA;%c*wSMJQ`l7UZR<jwvP>#TQIM5U$Tydꁽq0CQ/e3S}q.d0hf!qE UTQMƩũ*f(T!! n0䐹bM2N{loM lb]&x gP(7E.JBQ5Ruqjy!GSF2 UģYm BƓq"A<՞5EUQM-妪P#$T^Qު~! /w* Q!q8Un\MU&M6 IWC-F0A#TY""ʅU"즨7dF9ͦOV c$lg{[}ӯ{UӾJ5u =0J;|#ov7 9reB=hd3ɦM6Mg\1(z~#Xr dK#"3@/^]vShPVn.mi{~_C2TI(4D|^^HT/1F$}F7hHw vwO&tc3MBIqTCBgA9]=j4tsO9~c "]lLhw;V;%$^,ʩ*jnʧR$TОHPf4d:T0Q]ˆGk`q>`d 2}p4S׭q0#VݲOCr8Uvn록C\Tӌ\|0zM_+zȌfln7j-,l,7啷+71Xh_Vճj.M=#Z=nj53Ȍ a"0KES7Rtcb-7ESrS'3LQ97WRL 3RaFvQd˨*K֫jIQV\fbwU妪t]/ՋC4QYlL "A U AQUAT ̘nTQqRn$lۓ*Znʣ*UIB.|QFVKu7\b]宊rP{ ]BP~ Q_]Z 7|K~#$"Ty+JD%7 H2C2 Ƴv?F{iTw)*馊j_WBBy>HxͺPCS635s!TM5T;eW5UTы^TSE5^RNUTQxG I62o$!Z rHI0 l&A](n E*ՅJUSM-UZRK u../h ZMoxVާ}*!RJQM]'Wr%WtD-w'dMO\ɕ2W .9-`aYeYTPYZjuVTSm/+?ZUSVS*t5M|}PYF"dMF2n Ѩ uLYqSM wC!`##+oٲ>!Cʜ) M$2[f7{n *sʜO?w|3?+yHHHȰf7I܌gAHM!!qSG3 (PB"2$$̰7lfs՛|$$nfT5(o]B U" M jQ+R$nf1' 2 nllja"n3XY?cDUnxTEFQE.jMi'Ul0apO9O9O٧Sf\!#fa2d|Ȍ̸z9752Ì\bO)0 9kF_OyaFFxfml {d ˳)вMff5W#6=)KY;坲嵅`n[zwQARRkfeD&exR]jRUt{TS*Uhխi/URUJUGUE]nT:::Y֡fZnVTѪDIX ) ժWUKu.rUM7ݬ*PEEꢛrWEyT)ԢJU^k/bQEۣ^$$$R{υKA݁ +A$8 ӋrWTyR}kC6" "Ur%#dKdpnzH gJ2M6dr-2*d#%[rbKF d-BF =KP(pPEB{q!F!T_hH$'9e䔜b0y0ArS2 2?VCƋVHFBM E՞UQ8.ATyVE5^I8>ٛ}E-72dX: 3nfU{%CjE/|"a6 UͥݕW$T$^? 9`$CI0*y y<8piыZ *F|4*7ӞUEj3l&CB  2d0ٲ쫜Wfofa91BB&!QT{%C[}Ud_e_e_ٛ {ˎ f&EF2ll̃vٟ{_O#׿CO=[{sr%'9ymp }l&l7!y`MNo|oS6'PfUzbe<|jw?qPwTb.M'P2ԐJ*UzʾlEfEUT]PuړdE]^WɐMC9P'@΍Ix}ʹjed$#3jG;d_aL87 }>%E]eΐ!qa_s~`u|wW?!2L0asʜd0'|[I[fK"UbH/1MN ̸ɐf3)s0Wf3a6?Eq*,ڣFy C-jE5B5iB-/f {3M@ 776{cS!'9e4bcUTy1=냛*TQxTE:nzQM-+3FvLHܴܵM"97PY"v|$$O'+++yr>#do0!#{޲7){3aIunM{-\WʾUC`<ɌMN:e'Wy F.^Ɍgn7)eYn}Ɍd=xw,,p-ON{R)wh >jsi..jZYu9T7t 39Oyx0Wy+90#+ܒl"{n˗U:ݪ͌RǢKT/ԱqcwUMg& RǡRC**QU>q>X|YuE.jZC].ݡ/b5ǡhuvSE*խr$nB*d)VᦪXͥU7A7U, $n*$TZԱ^[X*խU7Ujʪꢚ.fb܅`{mRUԸI<]B܅$?F.$$npwo*[ԸkO+*WT+R(/E+BVk&WP-sb$' | :sYҶdI!$"B6"FPR(w''Vdqd5F !#GT1KDR (2Q *2dERT`VUblr ʅ&W,O#H5ƓF2ɐUF{ʳnUnFyV&qSEfSl75&Z ^YO$%$ $U!T_S.Tml7uPn EܕʋE! 'yO!ѷݔw){lE66>ā+/9?+JE/Rn4/ n2=a_$KΓ*"סY[fȸ[ qnZGG(IAk-&2[)gCFܬ'{y^i\L,7 k=w'ea{O>V6E՗$jo7u9!{[0# 3N/$rn]'U$n&qӘުK]ڳLQ.>I]`BXLIaХk2Q]d!$!A$1Y2JPMċFhE]T-* EEʓV~TiP)Ѣ &MA A$$""d'!!#ْMMFeّ$XXGEH$T5.jR-UfvFjy6EQ+%$dO$d܌ NORbTSwPjwF k".nYJP +,!k tS 3QTSM!M/A/zXhRg.tӅbnH0ur]PޮHV|  $d$[f f6M",ijA;Td-[|/A+dا\ON&ȹlϾ[?6d|`yONW&2:=&lreg'W 991o |/؞$۞זƦ}IkWFi,wUP×%C5jʛYT{h#gI5|"QM7 ]"lrb0791a{8Wze?WP[2*s!#e6̖lAΫSfMBB  ÐٜW2 ɸdP?}㻿GIȐ!!adc|YIPd}2 30C";>˷G~+0!ÜH"3b~V_p:f<w($aPE&wrPˋ$d6T!!!to:tQE{ypWxVM5O'Yo57Lf- UtM*tӨ gMVjFI=f$ƐI2T/$$l%[RhUMѪZMʳAVtn{% E5o.TSY-f]X馛jzQ|.ͥ89^ j,!(jx%qW^l1b$W)CɃA 1d- Iʣx&CijZJكU4?}?*ݭ6i(Fc6D"neCAPA' xh 7ZCNTYk?c5Z5VjXUTU-UM] h e0 -Ԕ iO!C"9$[*s9dPl&!d&!HũjSLa63 I 2$ɘ\ZXKY[ UPTf|d fK6o6z~T_ZT;O,OF#TDܕBX|(>\xwë cc= 90#UMکPM*䠇v7C;$4Wqj'eOE5 EB]X oW"EL!h/lDflxf!C$PaCŽl̰f3)o2dlɸ8maF}0[re݋G2͟koM:lr0_r>70ѫM6<2# yϼg2̖yyd {d+3=l;Z7&2M McjVs*rv )OEo7qEu; q }U;eHGMs[U4V1Z(QPT)MPE fЅEQ$$̖)aʫF0[& 3̐0#3r$`{Wfof#Ǖٛ a'n,S73nWBֲd"QhƫliqfcecV__Z>x?>=lea)b=I^0|h1Äd*qb۳۳LdDffd}0a.uYh.\TrSUtQM5Uj]R*SEZmUY>kGThH F2|ݠ5ԃ KՃVMSSO EtӍ)A唡S7XzQnFSj-=Gf]˩)CFaj4)HHȐ! a<).n2WSdK6d&WIrWS*7P'M//zQԃ( qqw.Ph,:pԃSū|,>p#9m 8}\=8- 6 v\n fvSn2 X8b! ǐP$$EE6U찊Bhj;IqEB# "5T*8 j ě͠l;ev:qʵ8VWR"·vi2w7_wS?ۿ-ǟ]6!9mM-MrGj9͏P抐a 9iv5Ti'fa1Q;kxHZny`ڳtn9L~oxㇿ L!*/zfZj-o7T;e$f_jU- 'Rl/&04eEfKP˳d}R ɸɾlهd(r! {4i6j9H*77=H ٔS1ޢܿ̌S`:"3$&$$ha*zQ 3$dH|7!ެBPqTHMHM(åG\mmjэ i$jF]^nz6)M "LB YkfHa8dZU((vW>1 MiBqL ݬf3do&qCrq٭<]'M2LfW݈l0^>0/TZj-NemT/<r܌Ge)b) ﴻA|<7V/Ezr=dfd"V]2qDUXd3N픽IdMu0XHLTgxU]Ǐ90RUtɊĩ۫VB<_i/2QƸ fHR+P"& sM\tG܄AP(ċazF0$hAX*4ijPTr ؤ$[)&!#Ljϒi_7%Vժ[5U((`QEByP~^^jzaq ?E N>|C|5\ޱjzQM)2TSMSNu!WSJb$ wH&[Prj BY(2N^4B:!#3FHDEyUJ<+UgB$taiO'Z(wE5SZa *RъB-Sb]aP^+TҔ 8e 1ԅj'7Mnr!qMBtb VTQ ʩ+.FA}7*WW).?…\ﻻ8ՃSK&8ȗWwCƫ^ZtqZ檺e #@~d*v7&iZcb-wE1LEOE.RN F2PHPT!>d&!MEV3œNPN"af .[%[Zr|b6ղ.WփuKou]?ÿί;]-Q _xM-rx/1h\ȕZN2Ȑ`6$#xr%[0QeFd, bAZ~/S],ѬvvSud|]w;ͦB.S2PM5#{AylW7e[Nb&Mif˾mWe*9dVCN՞%&ݒ0 D !&X\6񡙅C6G ?YO0CMa)&h])CqNv!$ dSMMB;/o-?ї?/3оHj߿-WE xiS ow*9taO9|' bMFM⮙TR4]tqSm'BQk^򤰨A!RUtiR찊.1AGnjHH]jUb0lU$$vWqJfnKՌfdJ4Y/f]<[fP%3NELn/2Uz@]Pwn1t1hwA=4ݞբY_xVk9-<7QyYlw{,wMYxM7kt3Ì\"_nfdFfd7L&ϲǩˋ*5 ۋMu3C/}(fF\TSorNLÃdUGH.j;p'LZl*e3J)UDuS$+rIKˢ,*MZdq^ v$q ZyQEF覊MuQ%U>uK$QGR>DTkʓ*TUT+M{Q%uUbPÊinGRb7)VˋV 6IPV>/`)A1xV u Ɗ$ ^f]EB+ijē`vē`eN 56.FPa˳6)7|1FRT!AHҒC%S=d|(Ti,UjQ(O EF%TQr@/^PTnwEͺKTk /NŒ$>Q[UQ ē{g}N $>Qђ*/BB< W*(UETRۨB*P W"ƫBQԞMA0hϒ$(j NFʫiujHKQA &4m PĨ4Һ_V}AFuIBu;Ud r7hw"iݦ **(O6=YIZxM5jT rw.^]Tq +'K|I~GnT/zaSիjRPjPM.4ƫxփFjОY+Yʋf 4F< Iʳ'!,G@qfǣhbB nv5xux2[?WSIl)$üwvH)9vPd|eXS.d,b|$%5*;Nqb8`1[fzUc/|ڠ\RBvZ)r=~dm,_X{SXز7kd[aqSl&2ÌW-sȱaϒx1CoR] !,s. L(.M&r鑉><(uPE.*UF-#jlTQ[=ťT6BBci*ݔfhOTE"I74sЍl$*!A! CۓPqW$dUMjP#fJHdB*UE7Q). WrSUTQTVYIG%hUyqRSTQHFAJa;bayRWy R>"ʧaa{[m~Orl2h?[gʷd+9p"(&<)wh*qodhi\]<`PB{6Fh$q.A(j[]S.TkDBk_ 4I(r`j7U&n6V5MiF gUw)*ʓ*-.H9U98uSE C=ˋ*XTM=C=QzG`n=ivM|uwWuӑ&i:1 "-* 3Dd 9Q8#8 8p8(Aq BضJۦ}?u?}ֻjWUݘN+udȷ'Ԣgf1$ބz"/X%$$$٘ !9PCH⡊l&# rT;!DU![)jyvTW6%Zh]%j_jRrw/ɩ ]4 %qiwKlH |u*ҋ*ߓ^*K/PAc{d/2*TэAPZB* M56=TSM>VLXH(wl`܅Z^ ByӛoqxoN.8pGNw'N|&3 =u`ȉ^^K7A67{\QAy fjVK)wP ۛa-}XL/BB|g$4ܕ˔BT%>}X0. an4 {K)rZ͢iRlnv7LӾsn|rl%"z_W? w;`SOCӇd[Cj}OT{׫u<7T`II]|T/$^%2ۛ&r^=Tk4)ՋBƥaoMiz>'\f{fp֩Sddof|ԜqIJ-vӃ!a %T䌪% k\&xaGD?H_7_gf6uP4K!AMC$D2TfTӟ'=g ejx&n%nB{#g2XB꓏ Uj8Q!!a7]<TjBMC B-UTt3Dl)ʥʜJ0Q*찇 n*wtùyr7th%[)AhU-6fs *d<\&a̸T)sȐP%}Jb*蓊)T|^Ԩ.3TTM5vB>OT"JPjRà/%59yZn'`hy'ZmRM艵jdo,XXb<Zʲ-c_咗Sfʌ,yUlf$^U˹3ZM=LH|E/.27R{d sdof[tp,uyVET(έ RRVGO^i1ۥZDwT7^l7iJMluL&LSOrnU mfD7STcQEBeSd.;<H"3$*wŔx5Ρ!H$2Q T7⒉*U _~9Ug_ Ԍn^NREn {n_*KUGHr)TbegP.)ШܕK(o<|~/w=l,?r/~B6h4hec !(7q.B O+D)I\ U$.UqYAw #B B|' $hDK.Rآ"`!E7坌&b&A!(7{d!MDxUYK)qQ!M(![܄ë*]bgtN{bkU.ꉢʥj*rWtt0T,wC/*tSE.T2.\f\=TS|rv'ɥ M5jl7Fm<ԏ{' A!{³RqKNdS6ANgxvv75ƥO2n'RYY'U)[E5^5TEBYLa]5KB"v׬bvr>,HHLB!ECvS$TSEB/ PjV_R^Eq`)Y2lTHHFeĨiTTXdZv/y+&Z.yvI!cBN Bj rbȸ̖B/fvH%UgJFsj Ƈ-w3vld=[}PRCAZQ;YR]j:pzU-U =$^%㒡ZZUaT{qlŞVd(leN`|jdoΓS3MI"۪n$Aд.fHiQ$4t+,72C2>~o;~) x1B` ]*MC‰PKK['o&' "UK>?9P!!EzA|Ȅ v=T\)K*'{d) )2>&vI!Vnb,Y.)T? 4=TiILІB-qSnB5IFB\j.v *. )f)Mp6٬6}l& Kø' U.`IjPE7)Vdc%Э**f|D-%a3aϓ6wjfn,wwoчZKEYؾ޲Rϱ},eUll,wKl_v7j-1eeF^Nf{f 973Dݾ6Vxg"{3 3-f9ز7vo<%st]"j-(78:Wt>dƫ>T͔ZJAyU]ꛢzVݪUXDu(7ERոwM *H1Cc )h_,\A=$QrH*LV]TժKU>5kU%QU.ݪ ZUK7)zBѭ:rB-jAQn * B"J3YěCPnBpGga_cK7h}AMP; ě!xrwA{&ST)%H!8͹!6咈q7wC]aHyE(2*(ENj!(=:&*vIHm*{TKB$K5%("B]d*ؒAT- ސZAxU:TUIUUTTSME=abQTQP{}z‰Od0f\ڛ?߉CKe8p qM U2MȐ C'2DUŐ$.=$oB"9ADSMƫ"$RM6**T.K㋪B!(wAbq [2$KB2"d)śBD(E"RTPE]TP _jxzRFk,jaݝXC Mrtwrs|NoNqqb{!n>cmsqnd}nfN5ATM?ۥ~Rn.)5`H\P(NcàpݕKcB#n6AP h 4URMU( 3TSZuT$ABBa Z&ũ,2e^9ñl&m<=-{o~|G/dۇdv[٦,mN%)Cle yy!xo t#dd sUw6O?ÌʫE5ժ!T^>HKNIx7Md\WګiMBQ1 B> ʸLl*Ml8 MȄr7!aUMGefP'83Ÿ)*N"Ho5dQn!HJSE Cw)M6A )aNnECf1ZEH7U,ݠiLa;$lTE U.UPU(6b-dP$xUSQ G 2A3n ;;T\*0EvWnNܕWf7q7Rjq ktSaFPGc0aFE24k3.2hn_dFx٪ߙE(K{f-xfUxymb{U7[llt+͌~0U&.3sKa;3tӥn 3 ީJ&G&l<}R㦙2ڛY2jfPݦ)%IuZvǶ^P'էh-S䉜4ҥT1.THTREb!3*n1E7JDPKB*POɸPT*U<ĥ`rIhdGT) Mm_.eդZJ[=o|ZXhTEJf- )T7irPV1aaP͹|E*ϔ/wM!x_p?~AixS"nRM pʫB|񪔻H+B-~]K BȠuAwAƸ+l) E6qӈɸkwA$q*ʠhq* AHȈ(e2D-+AQڥ݌AnUlMc,1^ܴjUK7^Uj*FPT!*V]1XTӋO8ͧ,8|OqPMƥ%#jT{XĐf%!!CC3.K0$9I|ߠ 962#(RʛAPd#F)U-)]*7RJ,ThwU.ij_|Q(]AM|xRlvdP6B2tUPxE4Br AkzK AqIIƥJ UdPiU !ك!B|T2Q$* BmѪ3'u,jtS2ccَ_ 6 Nwüe?y};$lT{l9}gdː-3>*d܄*u,Za=I&2*[RJQ) ]TP(A33r Q.ʢ ͸Ԣ).Mp,wrwgrTt.]z)=O袊.j硊*V.2JZf.U.v;_[M I\{{KT(wEP? 꾯{bϘkʊD%`(B(Mц$زe;X-RC8S:{9qYk5Z{\' c. CK"Z{STW/Uiݬhr/WQEqS . z0E<TUUQ eEͪb()CKUrGf)uՉ B,r󡇖\Zqy׮5%J)=&泧QxbU|'&D.r.y! M|Ȑ!!CBn!!"H0C.,O])xe=2,\3 7݇ 3~.]ΰw>]>tRO]O]NZzJ.bj.:x\>ě>E颾(zz/jEՒbȈ!Cx "?꧒-_\lKV-](/ ZЊ/Mb!!CbIO!Cx!a.w, C7zh,#R?1.`HE $ddB0/d+Ln27rC_=](txYY&=z"K=ލ7s1sCxspf}=,3men75\7{Ի>=?(ތwqsq<_/?RBY͑ !?kFfi՛Czr KYn!CWqe ukCo>;7a:{7gTGߪ]e<S? $ ],$l^!Co,e/owq'ٿZ_ſk/l=rʮ)JKѢ e.,mdoο{^Q!!G.- EWP%!ovPO3$4JS0~cb1d xZN}V]va.Űwz5rX̰nvKjZNOx ]}r]zHneneKd7"C-Ƈ,3ZZm7s :ÌZZftWrh"90yw>Ì9ބ]f8"p]̐9r]z_Yf"Y35t\ĥxs뫾iջ#.\8~>Z{>yW.?ˮp9-a 0v uQAq_ﺇs0~·]?{:+3\je0./Ż\Ndzwtlś\ޝdĥ2D^.m$z.Rn#Ǜ.#"K>q/W|aFvaWI~POˤ27zY\R\\L2#=X2Lz.rpݼK#nu亘HV}}]_"$%4xu/.]_x_SыZ⯮EX'_s'(omb|qPNo\~q zWCjhW,PCw=eZ,kEiTً'Вj;ƛ; AZx*WQZZ#4jk){W7C~zKzq,ƻ*"d'A2d4fh=$?*/8~^C,3Pt~v\xI|fqC ׋vɰ3{gSHH|QZti=rJ޵w޵}eFC`gzȥJWEZ\PS$"x*4ěcrKFm=tQ_?*AXoUZ ("kѮd$aq0~d$!㡫1˹ӒLJ#aKki=dHenOK2dd.2.bb12xx'r;}ŋ?wzp Eqzw{gs^}XOW !Ka_0~0p8w~&C^\15]%Zv}a.RZz|b ]Pt=K=$$KIC !kUx]r|hْ))茜HҮˍxW|庍\7" 3Nߙ>V=G}aooyMZar U+æqΫx1̻=}㧎կJƏwRn.^ϟ=C.?u#,Fx??f].ҡ]7O#g# HzȍD ]-+ɐ͸6]?pww=z:wgs.{t꛵t9YdBҲCzhn7Geлgm2?oοOizHЃ!Y KKSqhp3q7or_SJӿw}gkZz(SߤeQ&tH "ܽS3K{(z<$E%҃P35~xh=좞¬ve.ҲKBm57 Z 0zΑ2v%aWp_,֛5庆w^nkE^|1\wƛpYr<\]樃 ǏW=Ǐ]=9YvYSv=s{xx8~0bɅ᠋eKÊ^rw)}mś{{8.2\7r+.>Pr1]n7ٻ5Xt>/[ՖأSy}&ϥ̐\+!072廠0x%V-{r`I7zB}HE}mحeqy\Ն_Q)Ndt-Z1.&bխ{NC]f|+=pzH"a"FgY?FCШ/iQoJ??e7'W?gzyE#$~^z*+n/GUŅzS|V7 E)a ꩊVN=t<Eze.,E7袔BRMͮ|Gsw."(CңHzьXr5+A0ŻM|qSh9{ ׍pW2e.{W?0CK+3v7=t\xX77!EKM~־һ=XjSOKWݱjiQIlF\ТzJS8lQsSׅ JjI1.&~KKP_ '"$Cx5XOU"$Ek+{q- SIʔi,`P; a׻haSQ?0庱!r!6\Ѯ=ix %\pyĖゾpp=gOw`<] 1O{tC.x8ϴ~qͥ/CBz!%S|%E5-F<Z-")⩞B"Ҳ,.J뛥n$լܗe)_4K {w/o}5zK|J&vݯuu<|~k= {qirq2oWS|/s#/LJ\x%]])nkn/,ƻyK2XÅ.V!V_n;EIa^02Eƻ0h5,O\wԯ2t +XڕgqKJ{p_%е]OˇYnCKBj#6 ]w8 {oҥww?W~/!KŅ;[fhIp(vQ6Z`=%qͿml"x,[G:oꟓ SiiH=-J=Yx4(<-.7kْR?WX:A[IJKBBB]ХClq|%. 搑Dr.[fy=L}%aHK.⋉-9u)SC2v%]fFeb; -2㡥E)Zv3X͑H񐢤ěVvewݘ*wF.\lX~~"e$ZOKKƻ/zS_iqEqz*BBSxs._jC!Qql. ] B|-!wE "j0"xf|  y]mh$EHnuH<0o\L02ZHYrc._iiIqppYbx}ŋZz}g!/n.x=ez%=;x 2x+v$ѹ-'3c1ěBB ʖxb0Y!))NROx(JF߮beJջhraB)=GIyD3Oje .,n^ַj꒹{ٜW=z^&[6z͒w4'o.{pqry.)~z 9Y KD3tG憐o6Mf=d9J.3,27=%)]2!$aC/ޝe}^nE|ҥ~g9ǻ'wލaEeÖZs4XZTwas!w$f{tx:?r__?/՟+HVS:zZХ eKE<. ?}P$X Zз?.C!h=- +="0zTF=䒆-E ]Է薽 $wmqy!C gYpr;Ԛ+vr]6,=L.,7qS"Ei}->$$єŒxZPJo*26AK{HI$U--W<%[MezzͮY_ky r<3.;..< xxg9{9.3\wE9'=zs8kv=\z]}.>t0#ua}eƻn~~?w$: UTD2S*q _.C($ zkDTB-u UEI$H}REnqW)TfE^%¦evaPE%*vb}܇y2C/OxxꠢA50b6S<)L)COjJRƦJ&TTUThtS#-ITB{ˌnʋs3: kɌ 94ֲ<0coVW}]%kSf^r?HvNj-.5(k5#5|)Sfs3 ?;uKMnZ$~TmVUQUTa.xQ.iVThV}c Ki3:vYmO Z]^TЇW3%RKuj> .'qrpeR$F"x8.2.TV,xQCن:0lT.1b"3tT"A⒡]TyVbG;%=jZO {8ù9=VLP~9qn PU8lB=M a{S_!υOEg?SqُQ^Рa`a{gʫ8ě"A9< Sy3"$$x2FR$0$ċK|/(O\rx*I/mS^UyZTQʉ%(!ᬱ4Eӥ m0!iՅA{*RŠӠrDզn5 IĨMꦔKjld;ZP2^tyOEK!MTbA>0234vCNb}Υ۫ZTxۥeelrcƫn62폴xo7.8I`dBw/RERRNx*oAƛBQE< SP( iՍ; $j:T$7EU^Byb)O x*Ai"RE<Q*4t,VyI0dTJjPP". Fn/z]'E/RTSEFQE-6ABy ظa<} 38 潻vI<|1dSI( ٞByۥ0jouxf:PԡjlVdЋI$HHHS"(5^T&à0hL0; UR^%.ST"!f&^$C2Ћ ȄM2rJnb^r~GJϷR3R2̢F:q}'7}xvk˾# R#R9TsaXA޲̢7ݾXTnUPݶ75$lCOyэj`uPKud>|PNA2!aZ"GfPuRɨjOMN9*M:sT|2~ (2Hp?Y&;H 3LCUdȐ$;+KUT{j4 ;.]TlCh?e–8f!xpTdȐO?s_O?dSEBE 3*CZT) (ߋKB!Q]o~3 G*Z`>$.6fis)|1f߽ȝ!hQRa-eVlSt V}S2\#ՅCd厊R2Q쥚$, 6IޒbnR{Qboc\f5M=OVlLnh&z(IamSK# ea!t)IHCPE2XU-lO(*~K~G?'\P?aAϕK (ě$N Ky8|.SpɐADlО:qɠo)0MB\")$ޜ(O2C:,PRTRSTlɠI(o,/ʛq4xHC%ÒD+d)9l[W{9Z2)F2U{IXaBP!(?P.U.UAEj覚jRM8O4f\[]Y7o4n 7ln2.7̐a]I| ( ĥ ``< {8Iw/b`#(/ T$d+)ObrȌKw^zC[vT]*TJ {Lpz'T-%*ƔKUTHБP{s(uP퓄:fĨTQtQRM (vQR `MmΏeeo7qlO*C/f& B SbjOR-!q$E}TDԌafM0#iUACvIÄ  a L$㩤 Œ/58vq997 |[&Km(&po1ͶuHZ)nZŪXxw]PddOZ72vmM5bz(SjCE-_zu97SK ;JZFUnjܜEQZUVc}WuJnۋ|uSf%ڋRԷ7 ^dƗjɐV3dHjƋC&E:OEJ3dUa4;%,z񢊲MB6=J6Y R H$-} Fri:Y$j5H$n- 틝aTs+.UP!_[>]#7rmp<[#t2!=2ÌˌO^NoCftc0QĥqKJ{ CsKQULS3Fy.b-Jx Q>VrKVMirgoDV]pYM]Rˮv) RQY UBӠE~"3XKwf0?!QͼHsHn{NҪR&ToR&M#qJCmVardXv458IQؒh)jb$=sP]PE¹QUTTQUEQE) *(R**OCyWHw7]گ#kD+/1hm)$(_[ؔ'=P "1. "x5hBW{~BK6p =di,6Xun;ћؔ8EoQ9;piy8Px2.[8}Żv)ўfx:_pg%{{˥Y{yJ`jFӋ^0A7UKi U3$$$d\6zW*ķ:Yg(*$$! . iɠ|-(*f(O9?Vs'c2B%Ah8\:1*QO-(D,2Nj@b_>ٿҋu=Gϸwɸ i_cbZV}#H"GuOà +掛SѥZj4պauS7,>mJuS}=-3dXxkլfl; MR0At_QlxO4{hFwn5M9xڥoPAal;vY!-dFe3 Tӑ3TU$aN?JN /BJ7Koο~_G~O/_(2t1R!P]"3/wT($hj!&M=,BPG3807iP ioSڛ )?PQ^uQĥJUDMR $HT1kqC<ݱiu,=dFiP/_~t{\xn޾f~zvXݬV4cu"{p3-3sK6F*L\aul4Z=&Z5KT5ݾ_Tm1D2CR72ý郦~rt1n]2(Mc^09bĎP̡MnfBPHjP"RbJy5(JQEEu3܃UKj uZī;&w}S%2;LcY]u>rIN*I65Ħ*UP(\ ݪ^RF?~kcwI6 /}m<~ """8AΉ8%#`Uhk*2rě*cxj ""!ȝ M N1F&" Œ72& bȈa#F SdN%Dl #(2H9%`{HN'ɉqH>kw2 _ B򴩢nTQnE5TM7Ѝӛ8oQM/n};=Oc/aƛn}e}72LHH]LٛN6fI# 2C7_PVEJ3Ì&b". *(?OETQMA$DSLI x !5b\1ťSQ+U((7(Ջ>TZ PU.)T Sd`0䅜d$'9~14N{;9%C7UԢoZA/jQ*jQE5)TSE5դʥj4iH䅼a2d0m O&@>3L>;9===qsA-8<83F5>x:q3o3gެM7,RM5ƺnT{ӭ= \`0HTEUTQTT $7F*t^m&F|-~ !AɈ Wߪd-&'s0C̐$UWy3E0$tC"^ sl&rȜdde YlMoerLƷWS_gTv2weeߙ2eXjj򕾩R[MEjZ7njԺ>>j>Z6{U|% 6!CƷJCUejJxƛ$R$' $o!C ƥiY fiw]EI00a0Aof'eFlYL|T$DD1\Q$'_G7}ۿA$ "E M&$-32CBs<o1 d0[_"!CqI($~% BB!!A\ ,a AB`#LHH|x. A!!}gofa|aofd&'=$W8sAThMBMݨS4 UtхRꠖK)RTQE#ABBF{" 3 A{U(_ɐHBB"3$$$̐7i|mFf\T!+ fBe^VݬfRT/~gyy|d~IΓ)32fdO" 32!{dEK].ao[u7TKjQ>ԇ+)ViUZvƱZtźvr4ty[#|vV'~zQR)9Z}>T}ǛMvɍnխ>̭.F7tɜ0E7f"3Jf*4VUtUTT E]UŠjKPEݘE`oD:4UX$!!!!-2l9[ Iv! ]#3tH8C#{$!!!P*5TEUTBxM5UKR-lV* RMERYn+Ԣ NOw9Ozy:OZdSúCqPss`uISw:1{f62$P  ]&$dK -O'2Zƫjk%.T` BBKUISIʫ!TB-Oa!ӠPHQ(S$.KyJT EU|x5#HhU.2j P2EUī%u(7D*2ꛇxl.IqB"E3ԡfDhڻJ31fj}SQ(I|n 䓧ȋw;9û7Չԁ_Bwn5>`iac= M6=mżq9pr!dƛF>֘jjvPa^dȐ\fh_D_$.]*B0E%_+B5RMb~w}ŜLBhUH2DH|6)G"}9 uQ=ܰ0/?E2r~>Gr: *Q,=ݖnaɦn.{3C#`lfjݔ/ ɦ[iUԺf9FRR>5C7n.JRj;վ͐Cf&su"r%~`FU34a2{2*ٛjmf<-v?[eK3Tj'5Ajq?ڠ ݤ踌KUՠH1jOEAA +dȰnU|jHQ*R?gO?|>g֟1l &. Kaǻb~o*IW[?ϩZBQ!C0G"K !B!f2B5 ]dH! srBby(ӸTQ&)*THH|Z.)jYxy1k838Z.Uh}ʺ1㒢.2fИf{bC3Q*{%^eHP(0Cb0X%2ګ ŌK7U&Z!28-54KS&X+Q|g7{#ےvc5˫g[SfKՖ3԰1Ō[ÄC UK`pI8CC]6RU8EDU97 U(xrI|Nj'~ïߋ'ޕ)~.(OAyXYf,tO"jGVk>S:\XĒaPMKwՉ&" Kd{w~e&+f=ОjQ˻;\qc6M{:qޘb#;&ń*M6U9F%eCBrx:+j0^W*ɨ" RM-x*ddl.AY)$TI6xjO]<$[iH7JUd"9Q~ĥ*Z E *UlʻdTИڔ7&-s,֐!wB%2[2=LS%6ʥU.zP Njff""XU.OCn`7"8Zaη sRYg lz_|?~T\ z߱87B]vɝ SYSEMUnOZjon̦Z7u,ګP%,Y[SzVsͽ~d7hVȐ򴜲ow}9Zya0[Ud6H|(z *]t!)wA!J0P!qJHQ)]eR>PT㔡}0ج6;( hwAsyWV_wիSwC!qJjV" [ؿ+E zȐw%?q?f )!&OB!qЋ q7$ z;eHOqoYء*C H0NMU>o6R.8ch&q4ë˅ BB.LXSC^Ea/fhwA3Յ.a65fV!UE*:$&m* UC`lAjbD umUz[j2M0FqI.fH(ZNu#ظ( T*!"%(w񪊔BOB|{TڸdS WAA!P0 $"d(6B{FQAܠ )0hO=ZKDc&EkRPX(*<5]T).Jf~fe!͠C4t$)Ց )JCZXޣV+TTwSۛK\)OE4j\Ytjqp!C=SeyacM- =LS˫Ndf *OBAS$dHA(-IW5M3DUy5j9UP%Q2BBWs!B|.dB6JÅDJ#$(AM{H6kHP U*ES-W( UJO!qPEPHOk) Ԡ]RB8P!馚 մW+z>X$bبE nrR/TapPiaM-hFa_=5jcm\;Q%_B9<}E|R4}n4,ibc;",bmʾ9/iOFCuˠjM*Tc<5 T($4艏Lz>ޫˋAh%OP:A"׼UT5 FoPB5O@` )r-et3Yʐn,*웮/Lo3n #Vd؛g>o1 NnlJ3 S-r}ЋqWc6b _xZX_XEբ[RMdofqPլ+4ժZuMaRo[/?úU9vT1T3ӴxXflo5_UbBiAP[U!03EjUM-> $T!CiL5B/e|&~KƩKUvW.̰qWNwcOY}ko#+/V`(O i.l*SC|Of+2Oޢ/PE.d0$(B#APHy 3) UB ۅ ӄB!*Rr[)\CS#3ޮ9q &Thl*fメj/AqaB..aS(&  I8PEũ)j3r*ߔ8͠ZE9h$Q S܆ iƌS-q1JSCSӌuAu{ȌZYj=lSw32#!ǖpk!-jr;diF2[uh2 34Ht8 3NJvH6̨.o\}rSE-3tv+KTީݞaQZRڼ\^. yr3W+jZ1èݪ#Vsm {%icqPc&Ga@P\)$TQ5ClQjG]P)ilw>.ه nlVZfTSNA9%LDTxCm0#AG4$õ<,}W+ B{SW6.wUTQREEyJ(wE?S?.I? l~ !(4Xp#%7A.TO!A ƫDbA dw`cB!jc@d j=Bpۦ(_WE饝f1N/ôN }aT;U;L6)fP;/~[\/PAyB(L|AUA{ )`_;ު##YmDP42h٥"X;\QxoVET1d I\65moſo1ksɍg~[??/8MԺʾQ4[ X~ͺmw/j9eQ[bYbXTK|GO^rl,l^%Mզ[MU!U/.3Io?Tب&,sY*CC !1d~ۼ?w/t_HLlMGi6SQhY_j^ d{T{S D x}Ð8Ʃ1C7H/~_/{#F~W/) U$$(? dp7X~%S-./95H!TN )2do/AHOEĩ)*]0l )P"aBI!$ަȐM7]ԁPC*&TH*fA{ȌO0*tSEB5PT]6UTSXE5MU$*wrJ(TH1Aa 0$d<IQnR)Cƫ* 쭮D!ZU KLaudc!&rujO}aaZms~ya6kv洇fQjlEfrCf89S0G*-UXU>nEvnOg^WfKi*:>.M塺ԥT7K;Q/劫>- {Wƒyp9zXjou(qvQ4%36iAC b&hfK5HԴf袋ZM6T˩ *i4694 H{dݺCeu5 UԅyaG(졊ҔE{|w`SR*TTJ|PNQEW'BOĻ}+~beо|S +#v}/S")r$((%"8MhЍ & }2Q 6*SEO&6Ӡ} )X$M]FRƠ]PerhBQF5".ң}0*UdSAIQ&KN(D+FPueҒqAKV(TQJB5 tS*[Si{e>ҋٞn֕j}#BCW`Z%v7`v#U&a {\jѐan)#9502q#.T-zP%JVJHBS!qPRqx(r*|C"5]SdnOA!x iJz+> OqVCD)4ZGSUF)qJqBEkɁEGUM(ObUB-*PM4M՞F2b!I{UE/f|S5db]|rCe4]DanE-J;PB7riwaFVPў64/nSM ޑ)&6t 7 ZR/ɁƋwflf3ԋ ^j1/rǰ7]օ۶UCVq*40C ExU"CBϙzw(j*THPNLxH Q.N]U?wO-YERJڷWav7aplF;(HpD Ucݖ?V827fy^~mNzQz} sEW4%9f63jn 6j)KukwN8Zެ/ꅍ/y./W!vYZW7)CM2^M|dުGS-yϠ܍-)*٢&Id썑=8)&NI8&q44”%!AcaBJnj.RL0C24vSwC#,?m~_BM fi YTjDnT} Uu]vZ]Cv37fa4d=CE|!!B:GF2LKū*N\PU">xUHQH|2dc1X}G ?˲}MoZ8XBۄC,B33 S|aK9%()b*j$B`FMҶ%J0Һ^Ra0uaCY!`+yzd_ԺRAKɲlCx 4>*rWE f EUTQETt Yꆅb9 n+2O2Ӎ^a/ܜfx)rcPEdHJd0 3AxʈMƏ2(_s ) -D)0JcRJ AS]Q3*wAP!dPTIq %T{OMBPŠwBQE]$$SSAT-$hErWH$i_} uߘZm)PZZJE)Vb 1 r`M|=HcL%x@A(Ҕz}s|\ .CPjċP'x1#Fj0L ˋPtaj:宖I]I(T)M kVU]ME-l`X Ű,΍ZjM 5h>XE'u$y|a=>8qb`<4p嶇gŹQu,_{3a]W|WF sH3eaB|.̦ZWfCy(q֏k?-cߴ~S&&!A("^M*qS kW~LrWqS StTT#$r3F\/f3Qde U%i{]:(է?Gdt>%Cɐ?#곿wS-U{ jNfܝ8=4C{WѪ5,t#7.K9UqzU8,2ʸPenCg7|b 0b1!^ 99e.H02![=:T/#:1a0h2,^j!!% f3۫B z1 C$ltTd'M"^ovFd0qMiC6'W;iʋ87⮰|٬&ZG/VW~Ϫ@yg4ʷ3 EM2deP^ī* 3T&!B„%mqPM*0rE !EOo̐4+gsx1 ژNXKH6]88)( 8N2IPx1j*M.3aF%$4w{ w*=ARQ AD2uɌZ%QO';uQՉ宪|W lW5rQk,KV2=</5yrnw3ȌŌ.|šCMnFB$]7UE7 f(ֱVG#:M!9nmLrfXT|]ٛP\#spP>] sg>i6WԲZi7nOZs?;?=9(V4n^8}wp X ^% 2CDDHܵ"B{8}M<A|&D|a2F MsA<1"b$#9Ia!'1d!!! "2dcH")IdN1%#J6(l$E ccaNz {؃`bUT(.M7*Xjdw'GzqŻŻE/zP^^UӋj\p]-j.ԢB7TI>{lrķh4MFE/AؘQ e᠖B݌Pګ*Q(5T{5B*, (=M`0*T $>RZ Rk!TQB U)ZԢZUS,PaDȠIvh4)4Z7FGOJR*XօuaSZ UANO:>'^OzRBj{VZPwnl97þ7{gxOc02gx3dJMN 68=dĉpbc~sؤp'¢Blu6B"mkUlf3CdKf2fsfėAŒM $}wN2r>dR'=9%lW?|o%tSdFflf|MuPUʋnjQ.K]KՓZnfl_EuhԢQM5„zzRk^.Oձzfa`$#6l]ZՅ%Y;\p:|lh/ښf+d 2̖9eeoe!^n!*qp=٧!d-oVMӤ*xhf*B-HL$&f#$dHj!la6 s!CFw)7~{c_KuwAAp)R^uEML/V}>HjJMGVխ(E7Fu.u:Ks}QǓlw{Qn[].YøB0ݢ.,,e)KYAI;tOSVE].r[E7pif]T|Xgl.zꦚ.vsZq7X*&eEꨄZ4: UR>2XU6BTTwhl3 {dsH$HN2̰M3a#LHX8=,lX>I9ИB>0a#^ x(F*2(QPSxhMi iQd͕jmFnR'$*Q#vPͦC-ll8N7pBejJzbFf$WUTQM5EvWUTDQf7|p\OO^f0'{w^ n_;>iw3^lIMN2$C6fB rJ&aT-Vcj)MjjyheS"dLVIƗkU4UlaM{Q^U)Uy(/T$SC (rA UT!CfIZMjw٬"a"AT1w8(d|$C5Z3Z}+TKanA)jQZP BMWUKՒ*tԢѬE5lfIjLS 1ndcmưWvUb13bz^l,,U5畳0`0J 3hɠPfV$T("dQI1_yoo׿Wx1LGeB16B^bOq3j*7I99.x2h74:R]2YW 6Un̯]ϲ#s2h7كEJ-$gYO.?_?UiYw6qɉVݪ79.UmU-3wTKwI9 ZXXv(oSmz8٧, ЭRlO~[_?/{vڲwRuP- *62vJ#Sz%AP.?O9_'~Z=zQ%;M=:}2vJ] *j9IL`lw ]j 43T1:%QU!C"U$t_;0t/E*3 F9Mf2̦O3[_W!w ⃔AUrp2)ԏ =d#B!%0dSHBTyŋqP!C AAjx1Tf 3T67I!E!($(*2d8Bo"UvQʛm$( `0qE1a2fF `UZQ YtNGK 'MFW1cB0Ȑ {S޺X̸YiՇ>do\UE:[*&Q\Ra.zTqNT/Rv5$Ԗ=t/figRP9)k8O(2lQOn N̄LHCg؛.lw!jI_YRM"3*G-zuUYUE](6~S>VS U7ؾx1巰}$rF!$?|[YxX>/;,7'hFċ SnbDvX)" .^ kQ]F$F! .&qWJ%dƉCrV!&e:jB!bB5Ք#*"JŨDMɢ,;W5SVil߮**wUTQE/zQE^UӋj57yx|dn\X> ܽz]/'ws>3)fxAH"(Ts Wx(UƐA)-7U^4ūfM-B)MyɩU(cAT)ITJ:tպnĸ)7U*(w(!\| ʫ8]Ji9ZU)$q! վCZjQ T{4լBZ" ų*xBeMSh>|$vCƞARw*-sBf]ʒ٪QmVC6J->aaU.+p*㡩'A{8>XTpbaccq+\?#]*7 1>}gɛƟ7ݿjmYժCВQՒG9Ynu6Fբ[U塱&E{UM]O2̕:/[T->AHF iǏoo]ǧ?tjWӒM7FȐ"cϐ̳0[wn>?џ-PsDfA⦋Px80:%XET7UaQ]fR a(dMCS Un"`SF S7{ OP] AHB1ÄjCNos/Oɟ!CE!>wBSx|/]RUaF0( B|5;dkdAy ZȐ !xb 5̦ JUPahfUqMlL9qh JD4E>hPEJH/jW1#{#TahaC "L( U%<)]!^U!Ԉ9FV(n1$w5r.={ˌfFu7O9OV`FBf0f|L4J:f$qvwBǫ]CrVtQԌW ד*].u\x0#n>O3i:`|Ptkwu),wUKKShYѪvnKCf-.6m,MP"ײ_zqWۋfQ샧VǒU.eðzӋneЅa~ ]fBǂN(iRk6p cn/㞛Ƙ&h 1-bR)4B!@-2빯x׵sYT^8 1j TYMjM^oBcՓbJÄ +¸k2mXۓ1ޏn 3*!M%JeМ!Ltrs+Om{rŁ"^{%TMUxC|T k__Rߝ21>҂ x6~xK<وgKw ]7nr"x]IwAED ўxc[gE*wA܄$#*dE0qbDJD H.̉d$dc$$dMN)ٲ8)`Hl7 Eu!ْ+s!ޒSbDɶl+IZ  *ċ*.^TSM5UTM,EGG/oGsy  0Z\jjꓼw'_j6\xX޶Ȑx#C- AMʓE5h^hZRTS-"@{VI `Bf04ST!TQYUSjQ,ej4E6("T5EW*B2򬔛]HAtMBƇ ,Q>bkRe4ZUFUTԢ}P&P4)ٛRˋ񛪢 -Ԣ_jF{Kq&mҸꠚjVi:4Yձ˖h+~\f69fo%e yŕllll#+yۗXxq$bcĉ{Ep-#-k9|d6}BS1\XTsnPKU*UUԢ)UVTSotoV_M>o BB`cOMavWHI<=_>[ꅐ!!!!B}fd{gɦ鋍 ;$d)Nr?8{Zd1C Y>_9 &HMlVNnыZԢM5jj7b.AAx]T>.>Tj=:qI_Ơ%sR+z0vS$$]( g}w8~o2LM!C`0$n񤽳 !!B0P nJĸk7hR( CRX!ȐM6sz񮒑DfȐM6DBSd fSq3Sw8?0B<7wEUB$^Dާ?u#Nl/E 'b]nj«OzWPEFUTy[$>v7My(Oyc 3$ 0!"3 2&\x QEUB#к֦ZnvSE/VhǢ.v2Rd27IQEʋImfH$$%l2dId"3OJPlɌ0DfȰWfF*U*Q$M10'M`dNft^nf/)׫\GfÌe Fٲ_3Ɍ$ 30#{x`ٜW ]h\pbhWVVP`s햇t.VX4nСC1ڬqha{$"jBMPMfڼyןayUz>!*fTT.V.fFE33tkwlHP젤Z"O^c}3}ﳇr3l*fRTO}E?S??ZnPv7O:C)ku<ű1foyXuyϋU"NËd4ue_PMCdw3dFàզjħïy7ɯBZ2u 疌s"!F!t{b]ޟ]?#~o38}E{l7Un܅˒ lCc1o$'Ƅf*.[jHa;bB7S q\#TB!$ow5?{c߅brzaHTHx;z<~o?O0$ B0'6F*Y?K57Al|Y:̸E0vSńxGŠBC66Avh*n0 5tAP&{KQ¬h&gSt5d78n4]d CE)*$YIHTP&̈́ބҍ*732&C!F!멪D*Y8ʳLRBZE'jn7Z 1dvSa1'#CƕgPq3q5.Ȍlmʰk3#׫MS,sK=rg$MMC5nfH|hiu1(hOr*Idt˅^VǡqX}(O閣zbqiϒbxXrF]7FלԱ<˄wQwmaBK["{Jn.Tz8VnZm,}B9e:eg3ʉ<ɜ'Gk٥1yگIh4k][ 4:RgDw*3T^nazL͉좨(IA1[xەb5B-Mo`y3$&& Ρ#$0,c}HrګM-E5;p\Hq\ܜۋJ%]<k_~W [+?/[PeiۇEm,I8A 6G$nҍ (D7 f|7cvW(/8B< v] AlFDi,XBN,)0XTf&ZgEq4J⦊QJ)B&UFO]PH$.nr2Eo\Z#*KdZ2miTYrWn R8լj:8bQzqrlW\psYf+o\_nRW.ޘ>-`.BpnoK.3ēA)'Ւ1FKJQo-0(O*Uf`dSTr=ɖs5ԺP# Gkɦ.h\qTFm4ޒ+J/mēM-r#\%md6U ^,ImM=2Wkw=dTSMd63(RCYt4+'%Mei2P&*֧4;>z+c\)2$n$4!H}?ǷK2n$Ii*ڳP0f&T1iCLR/q}%U^1GUHKBZrW}՟^?]/=/#?r|馛z,RmM͢jqUؖzyVmǖq^T{&8OGO<Rݞe}ujo.Ȼ__sS}yj葉:ZΑ7ts VlF#U}PI GK1Z= "O֏u,8AlRNM<=K,zY̩*pgUS͢sdT^lMBI„kP%7'B=ʕi6VtSٯYʋ*'{(AM{G_{%(dZ^8-XXxwxcdz$-Ay]񶠼Q7cf7Md؃.{]sLۙTJ!ڂA@@\2ą]sq^%LXF+DZB`F;y{ysfR^n.+> nBPM iwȠPa0jw!A|,s0TjDUPHD i ,R,LWğSCi= .0*c/ogLj"BB. C- ?QQP(o M5U!T!̦`|<L]U .RTPp*p ɋAMwͲ 0^T'&(93)j6tP3" d9a)2$h3&0MU1E*Ek$qHC*$Q $*!1 3jFn„j=1̱medԹ)\pƩpxĄX2nFfL3Ǧ=Ld*r 3ܭp^i,bEcN4o`k#tɎVAك!(W ^H]nf,[FX[ulV)M ,,,eidrhxެ(K3k1{65ۼbꬾ\$ᦪIbp ).ϛZE,dT-e7T-αw֫}\FUI=*JGq>53uAcBǡQ]lo4mKCVT6 Y듕خfj1$jxWHd)ð \ƹTڤBM(oXoM|:`7hifb&(-w䭸K׈76!>]mQBCHn3C*`]`MPpj45X?, ʠ&"B"A NF+øIZn.Xb(7*pZM"YRB-5ZB*(4l\jV0FY+G+;d\ՉBD y85tSE5vۋ8=qznsNOy:1wkv7_e]6d p`]1! A1Flc0ZTԌvS*4PL} d%JPBд7Uj"=TD (e܄j71$TR ]\TxWE ʇUlUwURT{m6T03øMeL]5 2NЮRԉ3}"CVtjw⦪Ed|:SMygzyZˉjox( ƻ.:x8< 6 `p`a{8cxlˇxfћ2d[.f^d}渐񵲷ЃȢ'^$Bc qCo1g\PW}Z7~maW"Ai7ET!On]u~GPNrsoq?M7տ۱~_?NTK\hTpZMU33G~?k}?(x/(E_T߳_ U3{SKy,mYZO7TXX6rj|tEzO*V̅QƖMfڮP'ei+x,q(ijrRk!~:Z:m6}bSqgk.ƶ/L)UEŪV}bMَ瘔nFBdqlB7u*y>HTStV=lQM>J6zk*ʁF$MB6r\Uٗê` }MtQElDbP=LI:eدGu;=-V9r7|PO'w6yz.I(Wx^T_f|$'uOҶxrx=kE<Ax(C^0fab>!A(WkeBHcIB2e!XAa"}(gPb:nJaDH$Et-3jjd腢E9!j"kYtYg6E*4uB5OtS|rtv=^n'+znw̫y^#zQyf6iwzxE7)2)"׸Hm@RJ%RQD&JŸAxG-/:ʒH0TI!hweH<ECƋU HF]C5j)iU5PU7)eS.$AT*CRah媚 "E~xXUVS(TSP7͎Ngo(O*:.&MrzXO\6]<- d<Ad_:SM-C0raR禂boN-,NOP=Fyk{PWFPa/k~g|ԧUK#E~Wܟo%ߊ?gwP5UZV*$L5(R졖w U jMzB!L]FMmTJZ0!E##e!ċ?aK}T B02E*Բ~:~g};N?V#hQdHt3ad?GoeU;Mп$oc듇M⮊4AS>jL<`Cà.dSA3rpnZk872n4FEq}bfélᦪ4ԉ9dZuB6{bAF4Jx+aT7 j#rUj5)2JaB{+1FϡH?lN'7UTs4Sm=-]l:Znb#bw 9b^nljo-Bv4ݴ̨j2 VzMQ̨REnU. Gq,:/sQv)6&#sxʙcݜN'773T˴ќϤ'YL먣uXMf=Jբ7aa-~k0j5ubQMTKl,՛:rnkIhf/ d3uFcQC le[H‰6+n%\#4J=Wqo5CQJMZM|m|LhоV+[!X6xo$xWV+< MM4[ho(eB7!4VC{hlDPDqwO}w3뉅a]xx&1kwff a]]B?#w}rU7rWE F L9Ooߊ&eUyL*&~˾-TQ7FrE`Qr BIa04RaЃl%Tt 7VMaVX(N^<_.ū13b0cEi "InBM`$b]M5 AbԱ"H$QE6j\(FdJf>]EŒZe1GQ{EZMjJCVKJ1%ЮmaeܝF!S:-\dM̐Ȕވ[&q(_oCn*C2nETZ|VLBVOM`d(7ytѸy-7fdȖѪec UZnaժxh[Ziqr^)'pW8i<bz%+gp|+Y'Á,E$:ag`eƜ:e,N8-V6fWW*cӓ&C:9ʜe5f+FVYap!ި^Tq!8ij֜3>3C\5㷱Q`X؋2=UԥCUQCv") A!>*uxׅ߲Ocsoaо3ʇ(*56s]B{k}xˋ&!MPBʬ9!Lhơ,lw) 8, ݠ\m,4Ĉ*o7[Pdj!]"5J#(w5h&%l4FJ&( u!SE6Y̘iLC2r5T1AmٯEK S(:caa<TSÁ'WgNzqp:։uOxjsԜXO8xt֙篺Mdx22aBj4fbxWH(7-ժ)Rċ*_Jl" #匢v7BAP!A&bH"M!C)Ua<w&]Uv7(W.|`{(!]REP ^7ʋ`$&ETUT|M RR EP͠"l P h`bbP&ȅ 5*eJHܭ9whV'̰>^?_]ncLQ`Z?=: ,(:(+ $0!:Ą"3uL]빯kYkHR s2cë=zEwٲ?SyHCq`0hx(MC!Aqxܜ]/z;f\C=s0WF^馚faWSrXgNTcc#"Mov )ƈN[U".qO}?ɟ=eZU{Q!i)THRuŁ*̐rq7{o_MTwC8U3FEdU]XyPҾ 3$Բ*MHd$CU~?//~|sկGP^bT1n_-/Ì!6W2  McLLPAs] ȠDwեAH+Ɖ.MB ZO~ }j] "&KjX?۝?~?.* $TnPCC.w]Gԯ-'_ ] Pk+Ta1S.a_S {`܍EU$]\Nk͜$4pTpss,ITpj^zPt(IE{Usz1vsTܭ {^b܌ =(Rd B!!BB"i 㦘݄5^$j)gEH d*Qu \#Ȓ ^Y,FQK5EOeB0[D%(q7E!u%Eaxr.d6ν%2E9y:郺"]7N1jcf_4W 7OOb6<}ppyO|m>}ÛYO~w?x'G\W̐M}eNL 5P{n$'6C CSZ,(Ъ jQKiwhw]f-b2*U-?Z(UQ\%A2I xxQԢϯM3P)mrycB|E VU*%)jQKա ǢUs!Ō4ե: TDž^^uhU~zjʐ>X>e?3W׍M;r%W2[}*|f`qzN_Ɓ &llzq.XXL#eys'zaRC#C⮚ uPuˬvS}_]j *Us2 UӯiQp _B{U(R!h_2dȖ]AD|oԿ{1̰qF7{s}fF)'Ngf{ d$2|W?ojr=RoAԱ6WwTS.Cj ɳZC#x\'zyQºu!#dYE.b]~_=ٟQ}QJ)UmLݬE <}c~w~G}tHFBˠ !dы*H2h__C 5LM2BnB5/TFSEA-Ƿs~t^T&L(7 UTSתoJB{0ÌVȉ\Ui@3`!h]TQ40(4UTXPM_[q!JB65 FQE{kq(f-.E5@K eqAc:]FċiUTQnMu8ԁȐ CWU{A WtKHH*">""3$^ wU$Ȏ9];2aF[sΑsؑeoy~Nq 2-3yKE>O& 6bJ7gb _޲WR]^%$^%ȌMe[,[u.u,u,Ef 3r=ӓwa<4YڴA|`m3y9O'j] uX\vkjtOrˡV맃,֓~c['[/ʡU^O[[-OZO?uy:XGͺoߨQC](.Ec HqF֢zjުa^tˡ.O.KUPrW\TK*TEՅ*.Z!%{s<30*$ȌHBF>TTJU*եU/BaXn5+TRE&.(UE]|a{qP*|UQWm_C?)(7Р$W{ Ym,,lWBA!%^ChfDUHd(lpޠBB (fPhaDl]EBcljQd(Aet(Pj7[*R6ٺ]FaNnNULE!!(QjNŢ*PEufNof_T1ffu.vכB/w_Ņ^>~#>wܽWǓq~x|xr]/z1'>eH|㡩ÌM6PW1d|M њDWh ^U9Y$AR=%j/J.fPWvcb&Baa>Ce3M#* wUqY):TS222QU!c*TcܝnCp2/iwټ;m'2Q9OPtSk/ՍIhTF"ʕZOdl/&A/N,ݭE~VXONNƫ 080dQ`aY36Eer/쫻4].g2b茻U:ZL >E]nl]-^ 3Q q7.?/?G؟_T/ċ*2AT SWTaP(3"7?[_9n;XC1ŴZE62'e֯)?ߕ~7ƴK *rѓj 'N4oX9f sjaaQU޲lf{8D~'?.TM54 U - U|~24f`0T$ "{Ȑ`nZ$9* $dب&CPjזM(*"i hTȦA)V7(u?m67}'P-&TK(V$T3Q cowbS]#el]a. ! MST}#TQ.R4-9h$T!h {HaP0*WRT <-|m AËjT覚:XMB7T̅[Y^9bܥ/FIn7C!ؤJ0̐vWEBtlMb6EeH x$TI)C5HPQkK8O8U&Eҭfa':}˅=tI"C}R\OڞQݺH1ÌADOɹeofq 32mET1 iu9lݰRèn6ɉË ^j>ќ`ܴċ'z0^l/V};Y(4{Ky)v%{juZko7[PphoũPi#W'f=[}Kq(/B<ćr7'^ b4IQhr+"FLJwY! A$, )){eK$AHTTdNUj([ёU%NeI=j!:Q>0yθd$tB=c5u4Åb>c_7Ō>x~xzú㉍3Ǔ/(& ]T!!!! Ala`0#u"" E/6*ޖ  1$mf0tlwKȐMWU)/2A܍ xC!!nUqSZ )PE{U̸4PA|YBLQVg:|(7m|.n^^dowZYԢv:6l-,3ϾB/ẹxg6fs&˪[M縛0C_2l_1nq3T^YXTZĜnvSEc *0 (G~GE??VO?oOfB2(/QՈL)E#ܔJJPn1S$)~womGqQcND`yhUD)B4I؛V.=wM}g|Yj7gl?sXn&U]vWU<W>e>VM66Y8YfыoO5?o׿ÎZ% '0tI{~O`PBBȹ fŌfƫ  dSn nkrCVtQaǰ4A hh7@(Mr7?;}?>m2!5\(AMP :_|ORQ&aBav0k*&C.Pn a{Q2;~OXŸ}W.*MјAaSEM6{0.4kK.1Gk_]dKPȐrʜ uƬjrU4f,fSmf!E\IHs LMmYΓtM 7CNf7E7; ]qW)lQ ī񐐰P+ PŠDPނSגPᲤK*$n2DӘ]T IO~fcm/r9zu&D'U&jxQU Mn=r=j.n%n[ 8UⲸChfLJ?_%&L q7вOe1[V+7{%s*7] X`Plwk-N887vyp`l+ݹ+(sokоϯ|_򰰱|UP/hU4Jl4! C!t.nfH QhrWA{/xF$E" *%wD+%^4"J%(Di#_T)/-ՠ<CP^a^FMKZBBGfS'S-7P`GHHȕ4{pӳ8?k]޺ެ_EA F $21 2qșĉ;86!ā$JC"HwQeUk=:>}^T5Ut7uE8C!/q\:X3v.|f8|qWǏ'`6UQq7dɐA B| !n6VHw$~1ƓĻ*odU&a_ I!$n|UnH }JX7$B1OvqӛZ(wTXծ.ب&'M! n=,F5LVuQuljaPU5(gɣʃdFM#hϮΡCX/n2\7jҔ'72Ɂn*lXX,VmQfq,ov3ȶmoIjKfܵA`ܝԁ.G%y`[͜n wm\8|ˋWMacmOzd=Vsk n*zP:62W#cR:K%Dv(L*$'!vSWЈDxR* $T)737Mok~/\~OI>K i(2 R1%E {Q(pn],rʟ ^ӷk﵇_wS?G?Y>zERe6_PXTX,?p Ekl`yrR GuucˌgK:Z4hLOƯ%34|_}3K?#UC&ݵZ>dz×߫c+GO.__/3`0 3; 7w $j0APH McoYfidk*o{G[àl t\_3_K~>eR6ZjJ:l.jwl2h՟ k+=0/=)7]4?BaЋx-7 ]*Y2PhP,*$(7n&xRZ*7k覊, x2E XT%̸4(]jI  5E$Z$Qd7lƓE n覈 F.Y%er퍄alVYfXE6Cނ:Sz"*M5M]LXhox|=V7ڪ ){3uL$d0DUKl7UnkIą0L3[&lPJvT.V<֪[[,:r≠;(A/y1q,{gb򀭺EiBgt,4Zxf6OT_EZO[{^( B|pzvS9p*ZDóZYŒEV'%{W y^\ٶ̨:xCɌ\Ƕ3t3Ou<UmX(^m_Z'^.8<{̕*٭:2z`QC3*6"V;px֞4Ƅ 6#ĻUMaŒ'jNoՁ^ 6Xf7p̕G"9‰Z*xO;k^B63~c?ϵÏ3`F)O6~Yw~-}wS=|3/|IQ$Q kycjQ{Tb MTIzo2EBN _[/>_+[w?]>/x'~g:PAɾHGif1_6ɸi 7].|FN\ XX|Oˠr!Ÿz\zz}UC0nӣ=[/?//97ⷫ^|gП软.gIVEfP!Pq3''M"I\|OWlvq|.?S5羮//Ȗ}p*RἪn &*%>6) {41n7f4*$"c}gUrS%B*US4ɈOaASEoB`q4] 1h~ͷ|n<7cHIl7 0Qt$t2q~9~rݬE'FѡMFoj B nfO6js~MwW7TQ *8H/O5LSj&_iBܔ7/$畸+lO"CUTwEB_ey|NB7T{ Uyx`%F8̐a df]^n` FkUc&2Tnw 7DMw.RT;"EDPI/;Ls+t!GUt2WRj\.5O8M"^J%R:B3eo$[Mn&m0**3'3jl&nPńJzV]/ iM){>h9N5xrprSR݈ݸEJJ7ǃ\t\Ժj--Ke)K[R֞A]ډSNW N=W'^> ]<\Tor׫Q#m=,0c˾IEUfj=rXZKuy Y==Xm#x\^TGX~VgKS3DUINv覆ⰸ^1tUp%>=񱹒 OsP>VhQTQ"FyvA- 5j&$\O΃ʺC0WI&BBK X~Gߙc?ϼze^z?TZmh3Jc }7j$<)wnk,n҈Fnh[&qSr4)F12 PAc$hayVh 4I{RR*F QTy,7u0EyPYiȈrP>(RRh]Q[AXf]TgPT8TAuQA UZRՃZnjq馚*@/zq8ܼ:ݼW6dFdl7 0 A s2'?2$#yy%sl1%[MIJjړDIOTgɐ*Ax2]g2 >"vfMF2n$kUڳ2TS-T+FSJYT{I5&'7=F-ՋZ(U5ԢZUxO7=n2nzݝZT{٦MfMjUtn7oTSn:8]Qjp'JMnȜdCM'$a5"8u9pХ^qŠZjbaoW̕ʞqEKzj˻6Ec|l97}l8F͜ 7lfcts^|bY\_ds^dd$f0lf*'1:>1sϚl=#s̐=I-dofSƐa cowƯE5^|F9 n&A~qS4I!FU#TMTJzQEU/Ջ^ޮJۯ#'Y?4U3_ןR9>5_pW Mu4u-S EH.TkO2T1ޑPewͿke^g뫿Ϫ*7$>?BO__t|lƓAUve1겘VY@zzQl&~j}xkS"C u|D=E=`Q\#H-\+Ur}%՜n9'2vw\X͐᣿~wu7?O{?K{ ƓD2$,w&!Zڨ*gH$芛ꛮMo}1G1?_ _F-ċ}_>OM732͜b!Lٜ'{Tfܵ'M"2=)7z1Mf|ll]hTZ|"Dި0Ay6tfTy fȠVE|lK C2$Rn2* gPHܼo c]>OjR!aPl;.4q00 P0Ɛ#y!\|k?M7 9QE3ԢMLMԸ9C' ']7ݴ*BBS'qr3UTX E(Pj֢z(Ջje1%#r3\ŌFϸy(Inf>ZUI6{G9[D" Oɐ`ÓH0[͐&PM*)^RZ\GS}PKMq*VRGtnUjAvSK\Z'RTzqQ0b˳ddo# {3,7Q*hO&$*7ZXEO*YRǡ.KpUQe)vP5WY(/Nqx%!NbzۼH-Cy|4>ʫTWx7%sʹy|XU졇qQkA?4tYyYw<"yܜ' gdc8e\79ݤN3HLY0Y)>̉"F9&L9;THJ夛+j\qmĜcS&WԔcƫcEO* ixVBUTQP PXTBx63nu}Zբ9ѭz1 CC{V+MTyKiw\=jhndn*l4=,,9q&#g5,AȨ!U^s<+_z?`< OXv3KhwE?n1x溽}7BE/浛 tT4ʧ,7˓f퍝Ɠ728IM7&d *nKɌ2Znz=bQI'E5B-AEz=G9SXɐxzhXvILMC3ezh㗿/3C=#֊\$ކ+^zŌd|xeZ/- )[Y JI.[/wEuKJ/ 0Hzix[ƧU`PZTraz)EUrDвGEIo%%!蒲HխނSRV[Hв orZn_HU5"d8%Rz#Kz)>~_OSL87.!!%A}RO%//'Y&^E//[iJuyx \! -$~NI)AK06b4Fr1 r xe}e.= t;w2^2׍ǡv9茸Oː] t9۱em HQ > PzWi!rr-3L[^NHtskV .3z˭iN\me gul9jLth8ǧs5g=rJKOA[񒋳L [~"\.yTgk?|w˪O;dŚr f\9)3L\^Na9,Sd^:\ot2OƗ1E|1ą~7y]ԧA+ގC/G: !]MX\Gf7Mx,c;p`q] >t=\"ߝaSvxI =L\WDqw2 VGQv OE}RO{;ǿ-n /Կcb">-cxC.Z?ㇱTO%VgZoŠ^xOe("("~(b2!R$ vEZG:lYck(x SVe"(V d|%]N]֊jW2zIv`هe=]>-Z|Kye3|n޾xwo~r?p8e==h eN!8޺(XU;],ۢ],ۅ &냐F>OEҒxiQ"v%񩭷wr`4k*JՔ.zJÔZ2t廠HQ\7zH~2>m16?׮6( nr8xo0ZoKEtuQzZ\^6j8s\zp8/޺~|cCJKkrt/Rtn]:dt;c 7/K./ ["r﮲ˠ~2E+·tiKWC-!Ƨz ) -!Lђ&^vuYv(&]vYk|jWra{'z  )[R/!\`߅.Jcf%C¢% E$K!o[/\4tu,gD]OR\~2ˆx*E2Ki" EKx O۸=>mBOԠG (BEBx`BKҥZ/mފX\eK`4L-%ezIH9юO \4Z?)RfADvi>8v\~Xv1emM"T2ޖ<4e.ׅβedoE]ID!L x, z A !CCŅ e1-1\eWVtpsEq.V榻#9Gz7j;G]/> :&`ң-Ő҈ !ui.n{|_qEfX8YHCn\×k 3^ x27,{gMfaM/. C|j n>}Eܼ=_ϊzEEܽ7APOWVo|+&탞]A=zc.{7[_8A~*l2rW{_?=1̡w=5r eWLԍG$AKBB/Ǟcw륇]Ɛ؇=CHBK9t okF\$=LZ2uxt^EE/Q[kI]8^sOb; KB`0X/T[P??,F8AbZCo,mq7nފߕx No6EeCƧm%lB뭚!E] C`DA*>UU,.VS,©\.!!>a<HuG-y.Boorc偲_\7r1sy\r w~Ό~9.?̅7p vVAY΃=(],`}bih%#<0X/Z$>W\ӲKKT$bR?[f$"E%Q.-$X,SPͅ0d" -a !ZUZo+ZӒ}HaHHE zك be]!O+X8.E.ߝ!7OI 07zaЛ%e=-~Dr#Ck!CK?׮.%KJi\CF]r sn_08># ׇt)|W?K)]Oq[a<˔bn, -a%Cn7u-`\/Ð:~u|x>!G]/hK.h\R\r胬ŹqC=/{/}C `8n Cͮ܈\#^:ˎ-g,27Q=wr| {u.i\knᩇ2C0tx` o9܎"tP{9ddB-iJpцTY$$ڲ^ A00Cj<O) 4,YD&"vTN1e/Z4Hh<T,R e=Z/=2AԿ\g|(T[Q JtzZb;(BA$exI)2;x+-Xv2HŢ4%㭾+Z/R<؋2[PtOa]ze8K|w+x٠Lr]2p˖Z.iر5|{g/7;=9(pѡrℏ\<~c1HXFJka%"ħ^L|ڔS/gF&/$OItc P\4A%ފ{V!ORot5#WX#&: !!vF8[#=eKzi}SuixkuGq 3^R?F{׍\.Awvd)Y[o܂ ՙ4}xsne=5nE}5tP.\>BeFrŹ">0 7o7|~Ez{&nx?!çC|n↛zX zU}5_9䯾5kW_3>7ufp[dR_ry:dhr]jǽK"!zYZSfy`=zswz Eq!Xei4ߤ!roGH9ns}|%q{ԯ*-E'T}<8oW_KE=_8_ wk_ZO??*EGg1?N>1ֿ~XZbH=So㇢wAKSc^Z/E.~(x{x "1FvFeVo=&AoD-"EDE|*"l5HQntbJ.&(9,F:F%^=?,7/.u ;+f9o؇/8/:vg/}=^(7XX,]gX-wt9KzoڊCBS)X !C")+%V,w]uhQoҒ9S$AREqY5t">է!HE=-wePObEx )$Au^лҐ~ڇdOCr )an)I2R9Xf1޺Xuen\rVݽ>rxiu.ɍ$tЕ-쵸7.\8t.IYNWwr|3>\}qA>n^%sa3_sKqhz/pmZ5bȐв^+(rP&$VMo8X{V -\Pp%.A뇇V16%Qu` aROKxRORTS WjbbqSZ}_.,zfL¢$er׍3X2]oypj?Ƹz `n kJOeC[x;O)cewZ8.cQ톱 >%[g7Vcܹ8%O]t5d./9I\|\n ]2b9;Ņ㻮z;s||sg<\h1MϝS.G2>e9qKVEK2p梕 i*.=+ M,k펷r-/)Z.Uɐ e CxŒ{e [лDв\eJ/ezZEjV= .E*, d訧A%AXOKh]D P ZQ54L--(A=biR?9?/bv]ފROu$(B1zHS Rm– =l0ކ)CC5l--,!.AA.!"=8V҃Iw! pqp4y  ZAr a,%E J!eAK` EouWx>y'ypn~8͏R\v{=+ '-=XΒ1z/ [rz(Їd8r!eKK$<]΍RSc@?/6?0g<?o`1[bZ Ɨrkbp"^eqsE\KKYLaq'ecƧ-J//x)Qէ>$$E()j*Y1Y:X\^vƗU#-`tznyiS滸e }<|2Kb./{؛v%qf'qqΓb{OOk87̃ B?sV_֧EADSC}_/xI/MPz|JEe ,BK*([b4K|\HhŢT%~WԧME /HxYJ0AT$SovO:6`}"tQ2EGԗRx*:s!2dprLt%>+c;L`%%j-b{X_kyBO){p~R&?pb.i]7:Crzܸ|%4Ap'zpw1uq0<=\ƗsxS2X_}GΓoÅveק2<vi%Yji)R#Xvamf-[Hur9^Ƈ"^/Cs7eà> #[B!EPR$Sԗb4Lz2hI4[Fl_b a1 =<|3ćAŇK.y<(ɐ-JŬv}vOcZ/-F_F[Z.a}ZUhj#>-Ї>nΓ-E%y`JOM`nEJb*ć%RHHP2dԇE%Š?ӠdȥdCԇ˗˄x Z2-eKeQO[DE s?o)~)EKHŖ K-%,C\~WK1eKO tQ%~i钋/P_և!X`_AAh)A0!EHBe.3 R:CC*s=\'W8;Iz˖'>ua=rJn֗psEL]i k*ԇA$_hh5D| %\z ^,i4H堫CO;crE96rꥫgTO}:cZiU9Gb$)Ӳˌ!]V؛A"xV{V&X6 27FFzWf#xcFf|.ǃC[TW͈an]/9\MA|C\㻸C<×՗zzwۧӨ?7i? Oԥo_?˪rWve ~<1omG8kL_6!(KCB"08ėqB yǃ@ ` O7{})SCHpr#772ߏ+Z^?K/KqpP/,/Rėiˌ$]f"/#Z1>?dц KiŅZ/!T'UK$ԗK -WDI_RzZ5]YdJAq+$k]>dE";V2h~p=ӧv.zK^;#q,=~߽̃7a;=\OxÓeK5^|/YҢK}U}Y,%Z>/ 1O֗ ZERvQV%zҵ Je0S%dtE(UC⧳\CD|/GSqćZόޒ֞MP_:jWehխTyp}ɡ7_+cd?ٳzI YR/-atdd.ᗥ=q(t=(F<Z7 F&x)2^қ^^7yr2<73q8OΓ.}ʣzЕwrux|i/C./˧y{Y<.7 Yx`qxRop'p.'Lb^`.#6QC.~E]iX2&eKKX\8~W!!-0mC钐KѢCG)K2C R_R,℄ERj%a14RhJ,&9H^1C!asć]<0#s tia}h9+oCDDP787/C/{Xo2!7f+oaeoΓa:#\-;<Ǘ1|j}X߹xt ̅ {\>Ͽg.\s=7槼?xYw/K']/{s~=2h?S,:yO$]k|JvGy{ꮳ:}]V74e٠ܷ2+b[bpfi,./)mHrpà("\%K >KlD!S\4>%EISVg,V^hD[Qbhp4C0%!\^6t,&$6#O-אaB\$~p\^ZO,-ԨNȡUJC$xMW&dHti$(E֗qKK2E /`<24XaKK2Ee^7EBK`ֆْ2 $ė]ix\Hmyax5Xtvqo7Mf*]ˌ,l0ˠ˳$ %!,#dx/)].itCk{HT!5:dˇƧiZbFNX7$ Ρ<乼 ]J4V}.y0\vBHSܜPƇVϡ[K&fןIHK=!\ {L*"`F|H${y<옭O[0Owir=E ǧfuMbʔ)=O%^k0b\e|p7p=2\>iuW-<剫L[/K}h}y+.z׵Y/O+_Y,`c1>`ě/3\ - LOZ S'uBjG;( RD$Dhd1Тֈ|1DA%A1>WbK|ňOT<Qj\l ITɠ44znM+=>%VĪ]N$>->)y9K7j.zѢa./ r^'~g{~>42e|y'oCo~Z0C_`%IT%SR.҃SI5ShIE/7_.R֗UK%X/!e%/KIiLQ,*~$ԗK*_lR2s >TKC/x\X?ECRv}kAOexI b6#[ޜ=dEhqn~ ֳˍY2$\>t鲷?3]IJG{$a,'µLȒC@7r./'O7^dzٛ'`}=^./vp1A$o~AborpHat1O̅~e 988X/t7Z//E0+\BJoZ؍i0=ڲBH w^^lI"$"f٥eF[NM؎O6> CRԗ]_R+ awE;"rid&)z %> $ ʄ^,&%A%!b/ JY<>%ՄILo}>ISO =J J\R7).Hp?$>fZv.p׷ӕ0ԮpXa].r}'#sadp19d7[0o|s]0!Kҥ7 ?Y=۹ÏOO 9v!̸Z˝wRzܺ^Z,[&vպlR5VgXѮnQ2x%z.-\bY a,KiX;GZNYڵ3re}Keo$]e z{Y>$^:l!R"%>DbRLB|{{eKK˖.JKdbYliՇ.GF%h9%H0(a|(a² x9CBJ.)a!EY R,„ C}iҲ%>2xBq?qy28? . 3(]ALPzH!,=ćAK|A J )]&t.p2)ḦCܸO/=lh9{#a뢾x!Kʉ4:--{!VBM.-Zve+t9Y9̰k}x_/OEr>oyp],񻡇-{ []ޫ3$ۛuGd.J[`{ii]TZzIl"^^Ƈʖ+lI|isO # -\d7w]ŚLeqŒ64`ʵL}9S5<%S^\7K[ a|5w;YzPǜ]nZB>E .+@ ΐ%5?jWE|^|{팈ʬjCc^|hΓΥ%Rcay*wܕp:PR3li[Gہi{)ⓗO2>iܕ>tvͺY?͇*Tj5l柵q0'F7M߹M~/,Dzx?ՌT"g4RfǑaGUI!EN~2T1C"!E;a:C* 5(5ۻ}+32 %K24N!3XJcSQ> U%~!i?o (Y _|1hߴ?/Ac|b~MPX(RU*5]"XY۠%hiPAxR2.AEP QdДPxiAS!!jA)%OJ X"ja"C5m90d`!#ySuÁfoۍIpAMR嫄-i/=?,wfM/40E9ߘ;Ǎ4p?;v!p0C',R _lnjSMZf(/9P "J]\rtcaPhzLxZM!ĦBA0.)gKS*Ko0 K!%-⒢K)T]|ʯ$KFLsF_RȄ$̰eߩ6kh/2[YTfP^9]֢Nli'X$DgW2%C⒓=d6S2!C`Ԣw RNbO`49|btcQڛ޼櫜o^^6}`>Y/|5^˝clq3ͼs9奙2lܚla`1Ü$ {ڪ7T!hf`CX<9z.Lev;;:5'ZMR!U%!򰰍 (/!T1⥨D/AH!KP?M|UxV]$ƐJ&BhAEY`oԐQ]tSLƚ[F9*&f*!C5i&r U2XnBR`\١$43by*F d)02ŜuHNYf6q 脵X%sHFMW]p;O-3*~Z&>֍?%F}T62. l#&f{ȖrɹU-Xr3㋼Yԇ!J>1])YacRS6Q؉B3㥵S{ %MH`M BDDy/C6)XE 'C-ڥi/㛎1’ބ"[WIKťL=UD2ҥk B RԢCRՈB-R lQj1Qb6 P^ &] ; )ĥ W2aD%!Pq?/˄*)RRe<*l ( R!(A\R./qC*a . KTAH1 h:Wi ,L4aM* PMFUEP^RI 91v:ÁN79pceO.9b)s2'Nca3q(;I.GS;]dSP))TȐqɘb lDjQaA 3!E< J fʸTxiA{؛jMUM}dSe!(VQ*Rڛn32L8cgs M'2C*f\2M7; ARExx)/`*iJq*EіʥPTsgcpv2Q]Tѭ:4:[ucca{3n7Kcov)=XJu8?y*EGj-NJέ|>*M|Rܽ,ěxsw~pw"nnnO$NSf-toqZ&z3cVsҷj}Tn8}t(>3=ʈViVR}JZͰngbU=ς:#PU(tZL*&EK.9"C)sR]E U*E9^4UCޙ!1=TZ28 <;wZq NCpWo(y$$~!O_w7~B_*Kc|3h/ %EoeЈޠ A&^rx0Xh "b,eЈ_ 8*4{K%<E!PED\fӇ4R$U AT gh DԄUUsh勱CWp҇ CmCdĖŐa5S.B/Oq};W '2CƥH|#rU*1(*6jU[aFi2.u`{JE 2T?WˈZJ|5(Cc{^b-{ %(dOir!qYA%Q!M TA< Bd< Bо3BQCiT`P^FSCBHeTBQ iPRja#t*ev7AoRNd `lZ>I*zE{8Uþa>\I*_$ddH0^0 =7TG˴*؜C=C2ͦ?Etw |ヺ.}P8w7q?-}ܱ81~f1澙MB){SM}e~2C)֍*D(tP֎̘w/K'ftPe)2 fHh̐(4Ccx`*DP sgx-B*/ KHU<MP  at0[W2J54UOFMؘuXTb>5AݼMRAM631C<T$" xJ¦VЂ2]TdNeS sOtt37\Z,/ZN;PMCf˜r~=Gl6co/Z7fSXKn}e]:z9,:C .iOЧ*TIȨe⩴8Tmj$ˆ1CVj񴫩q fTS)/#)O%o S8X.4썦vdA\cDtl/Pjbc `as KWSE{*X.,9ՌdD{S$% Lj#%K9 r ePTHJ5"Jutb*\zP(V jS7fdo}EfHfdx5J)ÔHB"5*/UﭢePj$j5IyٺZ&.t3C鰖VESfu,U:u+u[tq+nO!n.ZKxj("n_V{Ds,OQ[R~T/w:87%Nr(?*M+~,`QN7Ɓv7Z}Պq>~ m~fs8McKJ>Si*ԡMĥetʥPEJlt1E*:f{RХ)0T*j:rr.u8Nz8l!~ %+ڟ7~K77(?'oxXh %^6eO} R^7s҇RhRRbP~E|Ƅָ(O(% hj!M5ƠSAyX$(ck2⡚=!QU\vF(gj]^Bk# 'nJ04EdAGw.'&͍}t2`G;]n.3ܼdS'}zl ,a.|ow㫄3' 5`SBxUEɝKmYbF%ElTa=e `#B<ԐA\?7JQx ")OU틪ƠP(, 28]~OAI-ՍΖJZf(d-5U(*TKբU8HijfS*/㥱,9qQq !X2a7O>]2d qifxBtjIHPtQE* )]w9P-{wu}.{j,eyN{X;LK73.ƻKRM<,&lj3{PM"3qIƠ~ǰ B,1~RMmj*Ŕ L6L(Z"w"Kɝ]TKPH0d&4N-tH1qiAc#v)AKKBP.!% !E hգV.U6sQYt,z)Tb\VލCU֒:2$dN 5L0dDSi`hHS+4s2XKPjT5)p=4Ӵ*D*>jSVIN;w]SmTKE< lUQHm 2T|"im#'wzlw~}{\r͚-%伛g9dd/9OF-\6\q3KFyޒE G&8$R!2-ҪMqR&E 1CSiI^&.eoK;K)į~eY ?]AB#_nc5/,l Ӵ_/O,Ŀ_|̦K5F9EIHˌ(-AQ&>"&4(s],)0e5Ʋvu㺊7boeeI0KJbDN!!Y\ԧ%C8~E CX$!oÅDtɥg!)K7\tȅ?YSW7㝹d~i/?T/\b$Y|x9ƈ˗Eχ/7te.t'ьǗ^YR2 rqsVwjÈ.K}`EVO=ԧe2JKi1t/3X iiTТR(3֧%>u ,{> eh_" Ư9\$̃^Fk8ii>\hC֗$*v -{_7p#KO $eOЖ,e!AiiQ4d4>S$PAJ,"HiHإaCBK1-XbpB,-]2xP_-˒d EK}Z;?/W.dy<؛Ž1},YecӒ2=]_vo8f.[Zf<eZ1BY7NaJR(aDʄ"> [+t=%I5lPlj`ǒ Ҋr!r..YJh}^o ---Oi+Z<_CHi,_"N>mʐ&yHFK-KkdYZAy\x`ōs8u}swǗ\ěZk5r]\8QO t Cn_VX?pq߷=.s+}CÅs"WdmGMo.w\ ws7ü/mz!᣺~#stחk1O]]_rӲ>-M#}pyHׇ!KB`ç &XۍhQn~W.?]8Y8?r]8^.֧x.Q7󟛇`-yQh1,w"E,Ưe1K?bG֯i1Ԩc|YAS%S/EOR/_j`1/qp鲇v/\8ħ7;1<͍]\[&$lhvO3bxj wˎޖzڐxaC0!!\4_Zr劙]2$̐\88\޸<.>7&^e0S?\\!k=/%1AÆ)]|vi<%l0zj%4آNhtt%aY ]SM.%J!|!]1vVO9t 2^OHSe-lHh֗O--Y- S$eO<6\Ckv 3x%ds!Gew}U7f| Ǘ\#ҏlp㖷\#p}ǟ㸿 uopz"?/o;ߩwT/}s.K_zV OΘ?k|.&ww/w ͱ?qz58m[c޸L5xw囓K6zء7Z)!$ÄG<p &@0 WHBJ88xpO;:ŅԧC\+G-y.ip#ֿ7_V:S`,`1^z)S z,ʖ\7AAbC0آ*`Uŧ-3(?Z-rMryAu?| Z!CZzTE-JC}[sA=_ŗ:=^ǞE颤(],]UEв~UXvIT$1 ǧ腉8S"N(SjAwSo=!b=!4Ǘ 3./b,2s KRoA㩴7.i,֯6LqaUe|ZvqҺvؒrŗZz3Yb.+Cқq#޾MF2%o>Ņ-`]ݥ\2z#CK?$K?a0E.b<2U ]/`~0ħrqeKY^z8%)1Od̲zpŠ7]5\qЪp N5KβK"^:]z1ҥQ(i%hO=6. xIXrb#"1A.2ZW/ Бs˪k߾zRc1:{a]xp]xj}46lu.P_֪i9Eu[lo\ry2K=!~_F~;в]giFėvM)ngCSחMM{\h~;y0; .iܺ#Ap.K _bqέ>wґɼ9Kp 6>Gy\]./ri?BWpܗeF8x)a^OKC.Nl`V\N%%G[AT!1Fb1XZ͢tKOtJʬ.5ZO||UJzYfXz9L)&hItIڢf.T9A`+ !^\S,g5(--e{ز⬧]z??\tA\ *z2d"Zz첇 ,),А0!7Ez\1t8 !rr"si}:(.tq8<>)S%Hi7 2( Z&Ap= b%~ۃ fӣԞwcT5{օeb1`a"y0LӮ..RN-^hѢ7JKKIWg/?<xxmѻ1ơ^n3x7r wqqK7~Ɵ.г<[fqeYι컧vXooǣ\s>̩v6v״ڲ ]0CW24XR2dc7ҰQ&<<$,t~\ԛp]fCQzUG9z/R*'P~ǿiX7x/V*YskwVE `,b$^LHOGTO֗")qa1J׊Ɋ8"aBK+BC񫈢0K.,.^bRВUmOVu[;А:~XCG;4e_8Ke/ӢLY$$^X^vXXaJͪsgbmY69w/b}pm;k1ם/O ѹξpp6E=uV#{ &˖bo->p}-O_}q]{7p?}z+WsUp7Ou_QGK~^߼|t#—۵_L?~X_VXfۯk^\7n|q7:ɹћ|u}SV<ƕm܇\6a0 Zؤ$t$XUn"kыD΍ܙxr>9n֡ 8t{g{;p6w_:IO?K0ӍK_qn_"?[P/cC 7EO`y[,o ÔA1$0XV -   ؂a6P?`{bBNP?CkRKn (9 --Y:آa^%ᦎf[BK0eyGDlSuː!K%u7ZrPYE7|ćnlvSn^Z2 2Y^:KC- Y$^ZY7?,Y$zQ -Ythɦ[Ȣ`ltoR7KKE)h= A))UK9ba< ./٬m7`EziɑzBŔAbOAQZZZVE3ݨE"$(W&]KC=\ڢL08&!AZTŢC4 mӈ`ЋbxZ:3 =tdm\PL1XǴ2=~ZzвuV~Z/))%xٛ5$E)!ʾa{Cq¾,ȡC ulFv{i<"7oAY\8\)SΡ O:^tȒ;Y\wVEڌClvC)s' -b74c9xK-258eef؋ C&˔^= J-a:V`FtjwVHl_ݏ3zNY.dC h·p!~ZS;kx:X;s\"uNIM;Ae.:u33thܸ)VN uwCk5wmi+ Bpmb-u1CBFrl !U+2tqojh93E.Z~ZKR?$~'9cZJ¾&$ v%Šd9z/+$-ef#62Dz|◛}ErPYKQvؕU:_-ÌC|U]Y\/ےoUVqqpswS_?}:͹q!t7_^/nߩ/:_uoz6QOMGOco?/q=\VTW"Gϖ/_Aץ7'ù8+dy3Wqŷs3LJa`&\;$! Uf Uً^}{ڿ~:n7W9^=]NI\^8|nsy8~8P/v jտE[?6X~Z`4X~o7A E0X^Sq0d(]z! PP2j!- XV6ނX[)(`ET8e/ITDP/$*-+,oc&c%nkdHpcBO\\7]E~ٚmBBAʄwxiiqy%7lHp%!KBsꇵ/zɠtaB!!E-fhG-2^7QRT !6gLA</gtz[ðE SӒoj` YRڦ;]T "~JXAI me0G2ڣ=zY˙,%%B%ʈHÊd-YX8VV"?СSOY[KRRpl]Px9xi=BRfX%Y$HHX05Ld}Ћ,a荃 NGbm/áwd7P =|-XrS6M296k; sa{ Y>,\ù"fX3ҐmI`0e-fIG= ¹{i؋Uo,f(9%Ѕ4ޒOCQVZ YBeŠN, Y^SVBb%.ٛ"ÄA7ߕEŒ$G9f ^hEZNi^Z/[iF(+P䰃j?u%f骧eyJCr]2jaQY,ƈM\*YKp8dz_|q8[O=h^,]!^4ⰪCAֲlb޶= , #YVS3:CTThMkxszII؛)xIh,VIC/+VWdG{HD|`a-b-CiQR kY̪b;]-f)-V9ESP bՅUihRfJ]2 u  U2ńbS:$$:񲖧a<,m%4 ˒5ʄ X7֦&d+2X>|XGnao,lɖu'ecUgd//3zpEqCqtFb-rKx}"k.c뗍/铽_x/[n).)n*!*o_ˮ6VOo#{)Dqn>O.?W+_x%7oX;?Aza~Cm"-׿e+|7.%6_?eE#8뛜믲sث x7B%VdA3 CVf19hmz=ŘDqnŪ^tubm q6.{oP3WW2[_Xi0/gPğ,,`;n(w$lOYfHɢ34hbΰCK6F&x+-  aKx[~, 6l/EjaBi0Xt:ؖ StqP|J0l⨱lO:evi5G,=B.b;s4Gz^]??lKMKBKЋ9$`қn~pemdpKBKKCz :ER2!o5$X~*6M,MUT[dF=tPeROmx頪j6f.Xklr9eNI )RFH 9X?Z㰷ͮ &[բ!aΰ=TS s3 6].sh))V覊 )Ρ uzꎧif#TQM4)cDօ ^4fdB46$b*/997\*L(/԰<43.)U(CF PMaB&Fo/U.  dl F 6_?YP";T(_ ժj2TK7xKL;M å<3^ڥP9B1rf< *dtQj؅&*4 U(KM ^B*]E5j*4SM*ب2}bk6G#4l%{H ˧`RЬ" ffsSEB7ݜ'U쭃B3)],V5^6 x4]Aaxif(t|3n )b Ur'kq[fŽjQQ$(]QjB9H豃0xU\*2!!ÌSq*~*Q(l_% (OACukDЇQ]VQR)TGUC nR5zc-=UOQ}8WTX?3rPT9[ TZz<=_t,Al9a}w|Wէ߱ON6c[|ޞjxNMy؞'8p..9Ѭe}'7mދ,O?{s?Q7Qr:ןǸl.u;m[n57NdWSK0S`U.!X;SJv0wU쭄" N~y4%99궪ٛXolRrYH87”r۟v2f-ߍ]?'H⟮SQonin//4iBHyi?GO AMy4FB4 1NKPEGEPȠ 奼D|1K )*1J{KEHy8ZAe.DPPTT -HPTS2 Qc4{+M{kIBPAIS5;u`?ě ,d|s9TE!!73LqK-Bq7U8p&aK/2~P!0RERR}C&jKN8-6NHi4$٬~B*43IPT\&CE6B 2PMХB/l KrYM'oUyKP XLP(TS㥨"v!C0^$T̸*zPThF$%!!A߼U:HPAS2CcLWMm/Mj/QM U.]2bC{.k3F+=tLXAq4`{q,MM 9̉!囊K5&AF"x&{K7>NyzAb]f6NQRRO{aFfȰ18.B/& ePKc3ײfIӠJM%.!U8Kpj  CP5%a,D㥪d%. P&E /Fn:%U.4]JUS9c*"MyƢ&E>xԔX&ȾfEB8:Fǯ Dbٞ! ;zlTM6(SBGof6=.)F.IsUhH*S<4GM>t*V`sXgcޢgwɨݲ}gN٧d`+$CLkmj_|8,֖fsYeiɠHWOb1H 2^6}G/ "Ls".\"MmU5ÌK eeN/QVF)6P&'2M`BBa \MFʥt|*LS%BT4 MB‰*z1tbpMB=f3FhioGWA?~ſTWֿw1. A/A{U.A5Hm `P(B(/CBT#TE !qIQE52'dPM &i=.=Tsk"aƥA) lKn/3Y\VSEB]C$rVk͠qLы9B5C5{A8}2N:֢K&XTT/zԭrtXflaS)UDe2奘a]C7 ت[D%2MQZΥ֒Z^N9|˱O7Ė4 7xVrp[}xf-}ԧS[eeoϟZ7Ov{_:OqXj{>֛ӛZ䌧>Z~R98y/~ρcS/wfwxrpZZWc{'bNMy$7N{coUE5;JdmqGgX7/2.{7h|$I6YHy-P,la{a=ĥ}bῥ&8]nGj?៴x)8* iˠ4wwmUy BRo/AZPe\XV%P U*2hj/AI|W^<"(BZ2(*RBHPeR^"hK<UJ S (cZTkJSCJDX5TSd ygNU7Faj66!AfƥQ5(><8l㋢r!M/'Np0w`\\z!^f\HQȐz3B4EHʢl[iaKDld{)Tʥ M_| qi *[ %((e)2FM0CSJB)Moԡ4"/Uh_%Q ÖDYbT-RJeD`J!$^x b-qھ+jȼZ7,/l/AQyRAQ^2 %?.9123dHb!eo:"E7U.,2nԲ4FB;{J.C"M-jI7ywRE5O. j}}Rl21X2^ؽ97ozY>_8z ur囌|>Y^Meof [1}.vUCB9R$anH#Ttx $qqBSH1q q t ]LP&*]!EPEb<aBdBcNqBB)-S^iUe nlZ7nlq DlV/{ɐ$ܷ0'r CBUddtRTDriASECJLV]ԸLU"H'4Γ^lRw3B2Rm簺UmiCBFCOA.YGpi>8 SISdo?Q^6ɨ]R]k&vSo-3.!#3lq'Wma+d1X2qSC" lODa{h i2 q5TjZբnIT/"! & e؋KBBԃn aMť M#RZ ULSC5K#[*âx8 K!Fz HidF=U5%%Ѷ 1CPBT ǛO/=UE"n~{I40H.?R^(LѨEOKM#"(%r]j(/A &E|/!&B0^B{B [` IQ0F0 3ԁw0.6q4jɠRiv9nTZtt7ij^LV>~}c6̝VU$ޖL1̩馗}{AǾiCa7 h7UTݨ7$TN܇jePdS!RF ٬b7A!R!%%.RtQEy;U.{ӭj6fXTȉX !IS HTmÐ B R袼d`0"BP̨Zfo4ZEFӥ*fRU.V80[Ri 4`>v7e=|˜2zX noCZ훃>>a8q|7?>ޜO9~'O ;S'C9<__}TǛqDJΓ5.}2wqC73mo6ƽKweV0!}2>2;)& C̜^B-l d|&1U"a24U:1247THH  E!<E)) 6ӪzЈ`XP1znK{8U!uW)n7 {<,0]vbT:&Tf0Hh% upxIPUTaBc\z!Ke*ja0 RM Uq f4&aN\&V/Oh%Eك%I+;k? GD_Ґ`Ww2ns;B\AF~-r]o|I3.p{$49r( L#]\#7Q$7\+?"_ pW}}Cnwp翸N|ؿ\\_?s~q ky >5^\^>W_|O<=ȝ\ww}|?Un#/?+7/q/q7^>>̟.#Z7'_~l+dGsF8e<}qϗ~.."װ -> dAF><Ri;{vq\8.ED˷<7>\ =<K'R.AѰzzO?Ŀ~|2~wN[[`Y1b})6~XEbb1G,]&K;˗d(ZoE$~U_E?"l--Р\]\/A|Y-KUx*E&"X c2 6ؐ^Ρ:#(.K掋z;^!2w.䁩aK>Ţwcwl=-iC%Av$cY"b|IC%o*x4xƮ*B0eE"ފ"/UiUlE%%/ KEɠ/IȅAQ&JYZ2~So_ڃ8bȅ-)H!-ېzm&YZ&, Y$8X =^fCbSbaq'^Ţ(;lB/z٢b0쒋>ȐH., !rŗҥ}%^tEndr XXf. wN>x|;`~Rx˿{rR/в%,.,J%e./sNrAn wg9.E8ec_N"]!a.[j膄]ԗMo%U]/./&"Pz rhe.o!!x ,{%!eu4o>̍޹Fg=8rĨxeIA"֗Q኶^UilLxj Q.gKK6װc-#t4$ "4bqvdf)4ގ>2G3$!E]4k ;Orڛy: {rm.}c1r,o:j"âb008wiQ/  3l- YC mHHȐX\.r;;ǧݹKnؿr $:4$<"%}ϻ>L>lpzZpJB/\h$^39̐!Kˆإ~S 6( BЃ!AlBY_"^ XZra <06^^b^Z/ mҥ"BS0HҪHAKoF!aV< )=iI><{:T核>.^q]2ᐋ.Z=°eWK.8΅t"sMu]/ `!%'qMys+>>/}|q/pPPGowuEqmO'fȍW_|Fwzƭg7_or _rnqvK\O|ԯK|T>nO7u.}Jg>r]zn#}9h+hr `L0o8&AiȈsqܗoȲ.;ɹpt8jyz*eAO\s8>)VXo.xGf?/y?Ė _7XY[u xnXoXk|)oo]PV7(lT2 4$4SoUdK![V"b(!"/Zcė*g *1%SFmH5DԺƩd~!muPG72xiKKw =1=^2WhiR'SzyIЋ=bk77u!+]uǗde!-YŅQą 6P <֗UZ?TQ첞.mJ`Đ.KK0bš% )ֿt,Ӗwbҡ!A.)Jk+ނrF.c1$tz:v"r\nXZ/doZ2X38@K>h8$వK^`ɍ 2#ots.} z~EPne+2(ty.ߖ=^.#w]/_uI[z9\Oh|\^{^wI|\2" Πd`IIb|9s"^vvrN9\y}A+u.>1ԗӢfEeqaXT( .j-ERSYkS"L$jBb$C<5$(o!5EOˠcoc rAFٻkp.fCG2\g$p:fj\VUvh,NCJ=^vxbؐҮda0Kˬֈ~ NB|AkxKBނ*ryY,<"eP$C\,wӗz:/]"t+dgWwٚr!{1î^J.Rze9%_\^w9b3F7`p?l%CJȩnx CR zedȰKCI!C WȐp뻏Y_X_vc2̸Œ;΅ROŖu LYNb* S{2m>ŰˢK4tez2"k_B---)/f|,*>]|Iz>~Dŧ/?$Ӎ܃O?_Ʈ\?9AFNK#} W􎋮X<8\᳡ t9w>K|rpq|~˹OZ]2gw{Wi?n?P爷y3X_߲oz^63Xob<-X_"V.ߋ/E0AY,A}%ESomQ2~WėJ oxx JPOCC"T2f "^͘xː!#sy"*WP1\4#{O3K]O,Z^z ; ߵ xnw/=K뭟uvw 7z`nEC*-%Kbi%# \ڢ(ƗeU4EQbC% !aڣײG{H]t0%o-~!-V!Ue8uh7MeFȎekˉU;cPOBРt`4r2ݛxITb=hhmF0,bP\"4l\ldao".%>dǗZm%#qK\dtet/I\XO40F΃kd3b0;p]C!Sib0,AisA9ddIa07ZZ/y0C9\!b0y \YsqatHhq1\/ o| `0Kcܺ܋b1v9xY\{r%[eJXLCކ./E(KAS%ԗJzوaYŲUՍZZ/ţ^.OAKZZ$^mi* zI)pÎ4Ұ+]Ys4pqvW}I/ˬ讗9^d-r o2 n8Kf&sáu|_nz\|_gy|W?'|ϻ;gvyW3|x]fDfsp.re!Kzq0q3*Aߋ;>O>UOowI//,On+\~#NO|>ꃖV[[! ù3.3pqʖteoX\YG [,ꡗc8wJ<f(۠N8ӧM7^w>x\Y?GM?``;[Ŀo1gYE`R3Xx\5x+\b|Y\ފ`ٸ&NF"KYhX ㇒xZY5328BB=-B/"peD,FZ%` ɰVN뜑]#9z^2]fo]SsI.ryEB>9$PO7/]?{P񲇮 ]oէkbﺟtه..]j}Uzu1ewTR[m|~S5%URYKXHbKz6^JZL]~*R?f낢X?OER_b[hQܴ! CcssAP:᭨dY XoY z;ʮ/UҥGzPH A7_ABJZo]/D{čd2Ne],3Y\~:p2⃹a%~u0`0Co\K)JGۡ%..oup%|/_JZ{f[̃I\1]Zwۘ{zKES[teTZ>QA] iԮߩ-OW$RZ$KaТ4 L4# Mh,& [θ2=.M 3pcŷv\nwmmH08E5(-gLh!aa0py-]rtiuKJk1B*OTRW ~YAn~B2!C%|K[&r]~dD\rqgn\J>AXr}X9.Kr&^ⱜ, K+r=fV<!؋~zdH%ZOe9Lһ̍ka bh2S?tEi\+;2aRl9e2YY{yȄ {0p)Xr#)ELHiQZ_,]oz*TSKvTC&v\m}9hBc\K[Ur(ZZ lEiK=]oKRtHI&E"%Æ!AWįHY$XBx.95!4!Jrɟn~tfg|]7|?˷y?qc?5//pqZEge>H^F1:QVa,Es 瓃yu.GOùep].xO?:*{l/RCi17r7OkGova*~*o[-ƿg5Ɨ 2t-bx2Sz[iIMPV R*RbTР[Ņ%~UzhFA|#.\/Q쥩į˄[1HQ1"18a*M0JOQ.!bZe. -tؒATH/㺓vF._Axiiѣ=eri._|`hP2 K-yZZe}zIТ^C{޵wzKW-V(]". /kU^2^vYOaF6M\$_b~biIJJ/2AkSE|i##dQj+Ez/ JCx/)]U_#X/2V`E}K<=4* Jz Ҙ./ )奧tdXKPO78ޖdpP/E=i2h$Dhzy,-YzA-^rrzޙx J,2)fqvq0a;)$\hax23Cs]?k8;a`Lo';].fpa9liRn.RlTotT/{$X#qSK}O1!7FcӺZUz7n֝e=]!w/ ]vDZ^.D]/öj] ,%e_MIV-Tw.#,T zBFC1bN p]/?c9܊9\8K|\vr5p)BƗz)f"f9ee68t 0v.N)i^ CCm obmcT[ z])xJBꒋ>|T{\)s1$%00#_Xi\iBd8(>Qqwzqy[.᪛$ʥ>#\U%ʦÅl"K+²Z\a\Mص(vIx8Y wz<<-=?p\v#1|.C%e>r+|?|_|}7~?*CaKo|=}?NsDEM>VfuWɧdLp8rd-{2>qЋC4>9uy9ަ?2c99O/VSQ7꧃oxx[3M?n?o` ֿOVYY?j16~RӒROEԌ_Ovﳸ|`Э&dT!ѬtP _e^5\~*O!~Z"^ ._BPO"a,Fb0ZZDd$Xo>T]/IDtIIp0jPߙJAg~\$ߜs%CJgQKGrP/ E EO/-ndP?K/[$ti{WPKOt/jZKD--Pr]~5)-V{PВŐ!+En"lChpO{1ZO!!# `UTZd"$ZoŪ#K/[z0CAK sHd.M ge,]:NVzra-[]B!hמ"Ek0WTizTRN1\ .补.c|);a$M%%\$$N륫{Id7SK2]_27/;AƗyy &C||hWs\7_|SCk8eF}hK?_2.`=/ \c|z; K%FDzԠ;1hQT4^^mve<ˆt`0C=آZABzxK&,vR&&^2LvCeZ Y VseaKmQ gI97IzY&^ryVTɡ"V$(S٥%#U\([&^R6eȐ%Xob4)-\,).8B2!Ckn|sY>wѣ./b{w9Tupn|&=2|U~4G>kq3hT2GOc}W|bqO?rpʿ^..04SZ s&,rrIa*婭O; .|2嫺Kq]|)>8L9wxi]'\^2Ņr~KK˗zh3~^W7?n6 ߈bl1"Fb<-m Oce-.ZuE-S/=b!!(rE2h_mPDPxK,!ұzX )،qp!& g n7(Kܬ7֒z#bmix[_ͺ'+]_Gҽ?|x9-=x闗2RogO12l/ bY?흄ҥvt{Wu~b(O,JE~CbU;8p)~HO0+]ɍvR/7m~]m7C' ]?4~*Axz;% p,A>I0Ӱ+J+aÆS˔ xXp ;bϚ흳(t隉˖QOKj`KS\jEoaw)D'",MZ,-xZ+^zX #)9HQAJ2!E(=LY\bI/38̅]ZoN}cCv_~ rE2e g9^H8Ћ~p]!2p–o^r`fk|D:w,`mp/c2e^L04('8s?Džin(RҲ-=$;ep w챭9!27zHXz%^zEkOӠ]e˄ ]RXVK/ "$(} ۡeFaMz1aW!!!! ZZn7.)=$Ff=ՑdaVn/\aWo"7/{u4w`X/s|p'L\~]Eޱ2\]_\]g\)W]uѱ6z{9>rSQ5,.v8srܾK~g_7/΄?\r_ɭr|܌7vx[|z⻧|U͇?ss]wu>dfkg.9Q{Vɍ=:9doKr}vG|q8_zG9rT?9e]{8욌pUU3^ÅR͗Cc__K22XOK`1?f1ߵWO[k\Xx,`1^oV6vbb<-w -18FOA^r04"RkEP1jCp'Y1x5/6;K.q4ТAhxi)z;zb<CٲxX FUNHYwĿ1W9aYrcK%Ųebn2St)\5z,`[ ZO#X?K1[oAP,zihUA~;-) B1BAhȐb/-h".%!BC%72 ܂]p ,39l~ܱ\ !aJ^^RNȍŅ,.r#C!ÄRz0!CBn|s2H0M |~r<\– E;%%渻f7rȉtS,sqL$eC3W3?qr"~C)DN40azIFSZm=͈Ґ 3z+V!2C,,.ݒҐe+O⇖`F#CJ%X%\ڥ~e< -Zra8%CC<0bWQ)E2Y=!÷˄]8zˮp}0w.?p!.O.2(=/pV̰/v#/mz >.|௸y[w|%_c󗻙o>˹Æ)axK=zݥ}Vr~?|g/凭au87 |p>¹fa/:e)Ovq+:îKAaEJ.ήӥw~//sXt]IZZ/a쒥5]ױ^%5=* {`]94^ZDQWĶaiM` FO)xٔQDD&~HRL A=՝zzyqRWo.V_]ןvfdW'Ѯ2d%Y:Ck:]w\eS&aU/eRZi O[[Aptb=,=2c< ΈOzѲ(!܉2]7QMx -Lw\WpHmPB[o!7I֚Da䦳r}c$㇋]LHr<Ì>np8C .~.βa/ɐO] U=Cq sz+!!|hYvmT?]د1g||S}xtqsÝ3wr/.]n/ua/eWX,vdeiU˙/bS~byȖkm;O'!'fpo|9Xc1T-__\?oO~y;d~/ov7yT_MҐe/rOKVzs܇Ï?7׷gԇ#]:?w]GqΡp]CgJâO-BY[MTo]ۿk0/ Կf=1b|? .e};A0"~2񥈗t0>#FPI`1ğlPć">Y:xAك)Plg*ub0$zIh2ZGeTKƠ>7ɨOQ#7HUⲂ֕c\Hjf$#}}:7_.WݟnҒ\ڣ=>'=\92:o".$|E\fK-\^tiѾ[kC}<wQCpS4C/cSėa".ZZ2(B.,bqpPԧE2Uxԧ$^>5>+([ڕ*%xIc&*4'KKO) և] ŧ_&Uħlk1Ƨa$!~S,K>$wD$,[._xI)Ԯ\և.=^| Wx97EKWK!C0tY' }|(Sh$r.Eaا^/)֟"r=~ ÆbOKd|H872\}s -={xQR_ÅǛ|x;o8p?鲫[zw..EQXZvsPΡ>ڭ֧mql]Z,]gk/r񡇖 K eAXRE/!XIK)cėaN-ZF81Ƨ {YraLdǹ7k YkK.]:+uIlF'Qj$L8eƥڪLAkUPdƴ[e9/D/E&&$XxM9!.V֧ Kh|:C" qM+;\,C/78xEgd.2=ߤ&Cn;o [,XΓjoZ=ap{YLp8eaz) ao\9"&= b%'9*^ޏ2OI,YR=.ćҲeq,.IprJSRZL^ڲE Um2 ֗=EBC>a„,z^ 0av. XKEX#vJî]r1O˔SU%hԟt/eO-_Hhi>Z ÐxIėRKCJ}?}Bo˄s#$/7}t8Ȓ2^Br=ȃEdb(CIrrˢ7\Ky(.D[I\.LbɃsӠ^2KNsq]^C_q.OOZs6asel+4زeU/O,0A0v}9EҥìӺTdh(*[ :o\ф*AIA؛&$^.Rd8KC&FeHu#˄D[IHHHI4^Z, 7]66RaDJ.!fdB˲L#=GNƧneh3CcM\l,3&߆5tvz>><.MϷ?Ogy<<#޾DWyx\ݍwvooۑo\<Ϸ.$<.~WLup=_y7/[Og'0xÍb/x˷ǘ/_OrFߟ!o'o7#~;"\zp=pPppu8ey0/߿{9FUYNq%̰^LQR\b(&Y qz\sRP:tPQ*( 7XWJ1Ap8X.#>$8+ՓkpiX!\}> =8tg{?LJ]2^KN.1OjSmQ%Tz%#BK|X wJf}9X,Jw9^x!F3724xIe("(xHB]RZ̈́>n/04:7+>E]fP ֗zyėx0eii97 K0>ݾRri/?䍥HU /}`pPtqqwe.˄]κY wR/5K{9 ~in|clwO[߼t/]vO}rAKS[nlieJKKJ1.'3t:IHYԗvMok?[k -biЖXZħ^ !&z)V1ėE"!sPloKG6 $<–;7o}Wƕ:7w #;es/*5 S%=K+ !YP^H#)-,1@dm\S]/3j8aD]5 S܈M$#I.5to]4^&$23zɃHV.=^EH8nD|.- -N8G(]L͖(*JBʢ1SKl_ ECzI._ˆ 2~sK^0~ڛZƇÎ/ea};., Y/yʔ fEޙ9\Eqd90r=,W؋>dC. AIo _1c%K ^fx{P8^9[ޫ:e=a]Q&$̢ ˣ%Qa0ucԇEXl9KʵlitҢ,<-]N v(A`> .Zb|V4A)fr`Ip e1~ђ\$l_/]!Ce1ءLRJA(0aI'y;=uaH|e߫]2+g4˻҇v3Ό<87>\8h$~vyޚ%7^ıkߵOb-]_ʄ.!tU1ԇ5"ԇr[EXviQ/SJ%.% " gCbǧ-j}ZM† %C`+>ETi2G[/!RNqԠŐ /] % c65J+w0C!!'cs[5tUD^Ob!R%J]/Eˠe.w,CQZ^Pj}i'# W8~SzHKuhH9]f[2 OJS,- |9^^y bd O.zޘ\Gԉ??MsHc=NҺdtY/=^R\kr6ˣ-]&Ɨ 1F2^TeCo)BCh>D1Oˠ\;XZ\îQƇԆA<4>VN5kkbƗr<~s˰Uބ3\yx8]v\\ yDD-gYb|lj4$,B%#O2C[Zf0t9U&>eƧk ng.j1^˧Q˶ jxVOA{2맭/>m{=<\W .ܨ>X/d%7wWR..CfAۗ.;t{kd..h8're閳foCׄb#e1Z]Κ˔AY\.KAˌ=k}8售Y7>iYzS Ab}XƇ½Xn˄>-eϒeE.3^ װhEL²7ˣ ^4^>DzڱfeK],E]p-bRTJrambB,yZ?֒xIHtҐ]X%>C|,  -[zIiY_o4 $txCs񶜐ra-9lY\ee+̅$[Ã+]\}3߼so0a"F/A 2򎋷o]:bwZ/rkL/G}3[Ǔ]e8tYb֍e+mpHi{H(.;`CKiCKàAi$^$rDžR  KQPEŖȲ(Ķh"$znieze}R,RjF|2H(lHH"t<|802)OZIqKά#-}o#]y "I`-}ʹZ/w΅'3)~<|ԗ]=wo}/36~q 8w[>ox9X:.>^ޏ^#{92Y'if~>V7O7Ǘea7?W޿އ|r 7oo2C]EͼyEv5xƅ*Wr1sԇspq/!7p<9T\wa9>Mbq){9K=9x2dgvf5hYHtvV ȡ~l//Ik"R`Z?՟=zY_Xo3V?_~o:)eL?+꿭AEAb"j_zKY[* ? x$)^">%AŌ"Bx )B|MTAH/hHQ̌/!\b$hI.ҌdĐKDA>ES41^dD IDKZubNo.{KlƎXZgoc n*.L>4h80^+k92zra®b7SVϓ=OvMo}bj=X- =⥥%EE dK=ҮvJ"$"2DIDԧxHC $tiƧOx+)ArPAhiii>h^8tAVUJԗ0O-EQ%e"MLˍKH {-OmqQtzkaq,3%Xڧuc1$ZR_BBEXzzFsiiW1zHB.=2,-l}bi]Ȯl-, s6%^ҒC>=,lQvmeWr~`rҲ7 >5Œ0A(iiiizKI*HɎ,J+fȐjמ"[&-W:YImZ}Äo]EۗC)lQХ5[+YUAIJKQ$4>%^S~-JKcwq8Xzc{衋K-)r !^BE!!($-][(Ax\ $|\e/>K-,W0bΓ zǧ<Q]| ~yx!C_Y'1uxx(~JQdز3x7I侹7ĜK#{Y|POE:1lV&սI9ǧZ]"n,rth--s1(NKKm-؛]v Ih)xKXU--+]-[,+tijeK zK/S-Q첇=JвEQZ?R_EfPi8e -[4S,*AШ/pteseٕfG.0pJV9>ooY){he"^J.㖄en{zn`ExzW,?9$,g9g9p~,woP<SͣOb0,w_ԪOzx^/t_9??neW[9Yne.~}#_eW`?ȩ.EU?} +7QU~D{ۧ|f:Z"[34 fYI}ZI,!x[9ħۓ (nCK-ʌ~mQVĿo!^7ƿogo`12 `-F KK%>-_S!%61>-[K-%xu!^BЮB"]zEK(Ӆ2S akqA|S~؛ Qu, _UFdTӧ/dpkƧKWOƧ.G7>%+nz|Jwu0$X_8Ųgm" X/ tbmKQ>E4b/-%7KğT՗reJ`$QUe} B'Kv&x2a˟$XC<뭇QOK d.vtma"CJ[JS{CeY\-SZwz l%X) (,3޺([2uSdz[oZo&)!8KK}.&b. ?-Ro-]p d.&̒o]:rypv)I.&lio-$Xv69Ab1XIBqZosKB)-S!!EQoE nIX1!)B2e(Z⥨/k\2l>lM1>]Xtu= c,sxmfhozÅb\}"챻%-gX/ .h+ =7.\/=E0B9޲\-,BCKȅ5UxjQ_%.J$h$8z9;f Eo2b}jaz)e-[NeNIذ= X/Ru1ֆ뭥vJB BjrP_vi:hI)Z-Z&oz|/ RoB2KhD`AʄC16^ =L\1L%C.r{[[B/C/N83!\\?WxdȃpEח2ܾ]\fva7vu壸xk9E.rHOqW7a/%®2TceS9 ![ÍŔz/"u,AV&H؃[.TvmR6d蒒^JۆqS.Jﺕ5-a$"%~2CP/S0CH2LX"O Вh+ KZݕ>#%+ >[p~_pa2U#[o3>eC1z O[._(1t{{\ 1zrއ]J/~5o0<G{]NuCKCVO Oib|Y _/~:ߑo?z<_g?_?&ۗ'ߋ#޿V_1CO&$/:s}SDN9epkpsj,gxrʠHhI eb/oG:-(I oV"=APu5"~QCQėRV )_Ӡ+ EOOA}Oq"Cė/A| !"r/aBmBA}y򖐐C Hѐ#R!(rO!"Ep]UIh!#VdiiKDD1B/!>EC|Xka={۽%CWTڛ>orH%`pKH޺R!B28/7>uko<7}7jT F ∊ިZ%// \L ! ER_bFEDEEUUuPڥ.]iKKO]ogE( EQˮxIiIQDx/K$c2" !Z/"Qņ"2F\xːJk7ڃ-J!EQ2Wd„ -eOuqeJ-x)JObA%XZul`7=eJL!. 0%KC!v"8lٛ)Rghh&*SY&x^ ([r/qf)t ⒌z v pn-gJ.u<>']ZoEKVzSD-uCs5teh*b:2QMLJ=tiLR4]qJ+ƿP2L3hBFͪ%!~Syʄ`0a.1&\\#`FB&4LHW]+\^1̪حfeFxYj ]#oU_mC 2xː!2 !AH%2#s1A--E2 \zAȐ"AHɃx)`BЛqy˒ I4>x+ƗRɩrr.$L(]6ý$At xKABP1^lY/eiBK&EI0/Do]-E}YL7 A/EQ. -3ނ6_pnZzY_V P/!.E"i vix.I.Y SBwii%A`a$8dQ1K{-g}p*^2,3RM_0\?^áCvp$8زeW͍ E);lj<2VC .0_\\pLJLF\AP,?|z;f%Mr=S Rc{ D @Wei> J>!IXX2niwrI.񖃐]QGv~~]5*7Omt@ ֿ%K껄eKQOMEqvXi0!)Y=%K>e-82#oQc7^g- m/U/-2^"RjTi2czخHBfh}rElimQ(4샔ﲈxOU/),ђ ^A<o, _jb().BKB..ZoõM6)qa]Rap˖{1hQ6J%. ^riz*-4 ˸s>,Ν˕5beux9 .!9`.).|@8w z'_QѳbOiʩ[1خy`bvsִKbmSsb&Q Ԫ/M)BEvRZl̰A AQͅx)1$XXSŠ4zy7Mb0XHBx| 3"qf\ݞ儰]9s|f9J>fw\ޝYݯf#[MqHen>MqSG;jYsb1e<VꔖZZ]mEjBzЋt7*$$4$lP{BxD= x OC2Xflks0~tur]\}jq.o>pG\~SO[fkHqO-IcR<3tS3= x9%Ypvue% JƙxAqt=S/]v"OK<.zEA<$%6$( ]ԨХ`xi`Qa2O 3>]}T ٫LYmnƲԬEh&âhE Z/M$ -t?[?$"C1JBUܨEP?˖x{ 3,ꭞuc"hdb,v_ %!Hʮ; r>H8=6q\vy;Uαg+ׅǍq 7~ǯ>]_Ma??_W?_|/֯W?/|ǻ/.Nχ/~s]r]"|\(g?~ql_e7nӃ]Ї19Ssr ;`8j(re68ew~2oZ_zOoobwi/e߶`miF"`4d1,ָ-$~jDAIDqY1AiISqp)sNB.OńC!OE8O)tP^CJkÊ\1|"n=; M 6ѮO1 tڕ|v/~:!]u'򏚻p*!!Hwu7ڻݯ;k 5Xm>KקMuY$C<D2ʖ!b^&=!L}ڄ0Xvib  RY,-񒌟d}ײ.2)[xkґREP$ v}>m(H.FtV:$>#, A誈˧]S=2~SN2%a^wb8tbYlHCib0<P,\;mIb{@#f[ӈ]~Chӥe"sNp<]j%ǿS24X2\si.}oeקu2>ee`eb08thx9!,is!"tqa}ګ^v}jCBr,4S7-J^2tyoŐz$Zxj°7.[E8VXHS2N7!e=S2wE[aŧ\iHzR&Fi,RZoŅaCJJk /S(J%A6E钐ҋ.3Lآ M٥C!ܘ"^v^-x {`.qQAQN Tw=|ypɗrˇW_?]_?O7OW}}'0~ID5E%%^_!I>7rM/GNWv}tt]Tmo]"%dDH}J"]K_5h wPOCHx*.s.zl͢^ߵ*J[!RD|v$e` z* zIi"^X'lPPUɅAt(ŲKs %VZoEP/ʢz[~rŢ,/PEͩGzIOZf|KBTӥ[ {spuaE\C|!C>d.>՝>/\y8q y)LXE# s9f1>\)AԶlmkʪc]fPik2 ].]Mi%a,RZ2^vIKCHCʍP4^e}!v`OHQD&1  HyBkD uY#u08./Hܮ !îk߰ܖ<:=RCRI)αŸ a\j[')E3(-^z0E K„,66d kRAWh.xK'1 BRӡZ~K {\ {#6!S\dY̒]=]|8mYO)38|%m18a2U>%UK==v]:X^ZŮZRM}J]QCi+̰ROeSnؕ,,㥡 'm27Ei\kQDCi+n>uɔRVΨbhb߭z#J-=XE&QoROaCzY BJ 6̐.<OݛrZ]n7fd.sya9xa_p_CCpEkLKXdpppИx*,[gץl샏/)';˔S J)W)Zxiِ eCX4t$SyKq%P?S O- x$^ZLROYn>.a=. 撹8Ẽ2a3z\à÷R#na-n79rT` Vr\YA$~o߸5tuG&>0]=w..e-7Bf8qi<m8CV8ȃ^#W6\ׇn~k>r~?>/o_7oɟܼ;_|/ׯ\ߢ>Zz?^HWt|v= #?aW7偽s./k޹GKtW2x/911{q2s8ǹ/,>n^xepeAệ˰z[u+ono`u_`1[jXŠJ-ê`1~vU[.͊QEhI|#>ՊKU|:)MQASiE:ZMd"(s,oCW i0ނX[Oq[DZA0t23CuK%ۮ:sEvQMU̳{D0E#>wMNȐseGIdAB{$ԿePoA+9$$"b\z>C_wAACߕ.=`1~A/IQ,Ae[As챍/S| [֧AiSe>zYrMKk 9JTSZvI=u=LUiV=Ox%ŢIq0([eS $(%(")SHPj3` Z!-yâds;Q/!AfQZzJof b"(4^3X <$dP$F<-=&֭b`zZ]ҲKt]lH0p C }Moo̰KM|Ss,ѻ܇a·]ħ1]R9>ůSrزJ(e0cvHWncWݚV%e-ǧ%C%^ $ԧ!CB+BK)vl0 Av|M|Jlƶ&_dbz\dݒk{9<8po?1\S9ﮏC{넏}zq1wQc0h}Ô=% סV:RK> Sep"{1>)ђ"hH|Z/7Teo0g<-ǻ|-sAO]R,}4+yŅ {"·W]w,<單3t8˗ýO7^/dҮ{=z|sO1н9e)`~貥97zZk}9b?O2.JKV5rp(--JW[fha [O-]ni}Z7%AY//{lvP˒Yv2h!SN1̥[m} C E|J 4(Az)Rħbiz*&O )Рd=է \%4E ~2%H:ħ4񴋛S6=X/BoC?wpcȍ Ƀ7t0oR4 zoo0> 7y_̅xr]leN~od oO7f<{!t/O,z^8pС/߹\=HX}5pp/GR/|ƻO1/ӟO o2 ۛ/]=~]_7~׏^O׻Q>뭜Ôsُ951;aYn2Å=;Ȱ4Xvw3>)߷;߱^vaߨ_X ,oVׂxJZ,&CVP_l$֧xjWry)B)_"~HYʔFDZS0L)&p )^wR9+%^!^ XzOS=6H+`\(/TR#iHx 4C:*ڥ]R~ȈH)#yc˗Z`=:w2졇*=~?*ң]/DKp!lH"_bRu!n1 -Jdh /UKSFr.!FR?N|I/ CWS;U..X}`ia`-Ah%ħ/]6L< 0>]Z%\( bR1^ج;li-.!#9xt$d#Y/q]r:J.r%0m2Z5.(A\8$ZOUC=%]v=e(OY⩭!GSݑ\~7䢡!?w%\>]S/IHq[[`%3R(KS8|^1pCSS 3&c 7fUuMT{Z_:{t=8:%<4KbEtOWɻ\WUu`sTAIlkSKg=- 2J&ZViUO]?Կ:)lwq>U/egX 3/ [)9l| 4(S#$^b/=% Ul–Vz G]4^SmSUt )+ ֗N()%!x [A 8%aL E ]2lae4bKJ)\CHr!\9̅t 3Xop ׈Oe. s1'\|?>E?zpT&S" Ov'4!SS.ًǟ|_p$3zQ>ny޾7gƙm}e}EnE0^mS}Z D,J܇R/[R~aLORF,amR.`Tڊ0ťeo6̃ʆ֗+3\KO:kheK[gI=]+Wu],f/Ip~20aɮCofۗ#:j=tUG-r ⢷N|X,.xL̮ۜ?߼ʃ?q_~.?wp=|zO;{/nv}p_E?nogO/}\|d/ O?1ϕ'O/~_>) /`o?̈7Q>\?g>0AxY6`b`,!cAg,?`=`^fYpwe4XP5߲ ֿV,Ɨ1bEAaq-_[K1}Aߕ 7ER+Z1LSx,r͡C"81F\2CJ//K!`uRbH:#2̅ZC˃Eӆ )Z'!k=K.o Gz ~3%ĺԧNW/1^.҃C%$x%#_jC~顫V}bQ,?ZK鎊//!C|*!!0%z%&ZE&/~WԣZv,-">$ ,2^ªvQ(KP/!>Rj^zهۊ$S.U=mT"^֗=(냄S k$>-BqzeQJF-(]Xߕ Ho\:S~$`A– Ų rzEoO-)వ~4!CDm%C/ ҥ%- 0O]%J߹q0.r[1~Р\lk\XRx r5`I̽6BcE LjizjhSPe$t[!N(ҥG;$Ք-`Ic8Őp\o2,Jrq)8߹ް4B0țִ$C̰AH^\l%mE|ZO_CSlVm]]ka*{{BSC.Ä;gupNKq>[Zm=]Dihqy} bZnk*Fj/)ti.w{ӥE.fK"A2>Euҥ7(*~S]S^e1EOA(RS0ԢYӠ4$"8tȠA<%dq2^lޤx.2bpsq]L˅.wQsȰrNp\!ຸo"Fޙ8܇ytnZ,7 yg>x {]|,]D2z:O{6 ">u5]%%AY:*>R,OmZAA.dtHKCR8zlOҠ9:+zܞZє%3hGZMw.fIÔ>]Đ Sꖽ.]·2}LJaFnO v9K„=xΛ} h$cdM?~ӏӬ}sx_urWfoN}}zVa\]0śp??'bGJGv<wgOч>d#>r8=_xn_|?|o޽3%{M?˧wO:|x_?fI~?~ }:7|, reصc6csU,3̰it?^vab/`#x bb\^7;\CK|`Q+VP/UO[Ƨx)WAH}Sn{SE0A٠,Q,C+%!>%]ۑ!zYriƗ(9,Yɍ!.f[rٍ7(n:R?bM|^^tOD1]ZUG{ӥG{c=qHQGKo,w"*S<%",ń_ "QKwK%bբXS)fiq4%F;"*\>.R*6e|*-{]e|XT(-b-nSpcO ^x i]&ԧbmc}!!ie}iHk^e!ګKq#> !.KB}~w{Z,Ţ^ )2/%.3lxj`3k}JM"anw$=찮}bwC6@gʌlGFU|h` ^R+SB(..]ďRen$88yKqA`2~pa}]Cz(Jj1-.,snt=61e-O[{pO;yͬ9GpROm AZmMC<%" )C[OE7m2cOzJbU`|E"lȐ!C.t]9 w*FziY0G YiᪧCfr|syiq;28 u:Aܵ^Kw˖WrXjIS{QzM=xYa./,]Ң22=^RJ/xfpU%x8X vJ Ih)RHh W)KKn,,. $bSːaHtb<6(RZPPz[ֿ,z7A!8fhb}!(RZ^z B% x80XKnXa]rcJ/RnÔO˹*WqEo\Styȅ[p]|fpg?x np:8;O_gdOr.Onwrxv%Ƅ] yfٯv:Ǘksgp80pSA}v8]3r别Cz/! JBAv= /EI"CCIXxOU .ԏttH†-SEx(JC=kX`H:4.&rHKBвrh7K+>-dƧ1w"C -/gť{g=sg:-Y$AAluR#͖qdӡ]+Aճ㫞ӆ]U6\2~z[{r͇q䧻n~5+woz 5z# y)ԇ~|]wM ]x2a27Eb1dYwSʗ/_-y3?߭qƿe~SP7b0^S< %OOߌx<a0^ )-1O\VO1) F|/C<!bS#s! `ɍĸ1KEu/Ne#.4Ax Fr!+H+ . )(7\&r&r!uIyZ>h}+n2"2\dĐ1~޵Xr0ŐHޜ? ]󡖮N>.hڣ}iIeFM#x *.&ldWgd?Oo?}џr ,x?߼xׯrׯw=ˮW-n0?kVs\oC]?>\[wX:;=sл3wq2k?iC67Ww?7=(r4C?߹xYn<G߶g7-vahb?bkU??Z/k1,`o-Ƨ0Xd˲DK/˪?Kx(K= ) .hI,b{7,28e<\`e= ..ZZCH|OEXK\X/Ri^x`)JFfOSofOQ⸄7r$.\X!SF .O]AWO޵>CWUehk}jQ^b}jQꡫh![qhP_Q7%>b.=pEHP+2^*вùAGBRwMHOOɥ]SSB4PF{xH?JTb}Zk[RNď"!;7N}SC9e񴈇 ԯʵVx,S = z2KzXR7%E)zg?]O )%kPD4( 3ElHp)x]縊O}._Vno,Kigt;s`ǴLhq߹.k}qhNAԧhSS! Mi 0E!e "J -]N͉"z "vŧzK F'xjpBIF/KnCb 7ñoÖ%^v]ov;[/]-囄K]ao)wܰݧI|AizhP,zi8^ZΡzX\ ⻖bvkbhƯJEOȅEPaQO`V8,HHH 6l$ZO^fH^"^7ER,x(EkoR`xx ґSCQP VT`S=QB.R/ ^ rSs^e^Z{Sxį 'eˍtxZ 6>(]Zn=$ziQZĞ\  e)Z+./9!Hqp㥤ܗ /E9w\o!8_/p{ g BXM"5FqJi5{nMkZ%CZƯw`էݻqX/xK0a ehQz=dذ$A\X6R%iQ$6\Zt ?\s]6KpGoon|w+'fwkZO]eCKp_.tUK^23oY &,2\u`qҲk1nf&sUXxh.r\FYOit *NAA7o/sک͌r ;_<88C> a#)-_x||?*^?ҥ%aC-uO .O2xxչ9\~U7,_?=P:lMxr{$a,5~ \Տ% So%2ބ\貞 Re[Ȅs\APz"4JipoEP^)ʼnsxOVoP%!wapn_AvK퐡ы,Z,*!NS]D7ңwtFvrJ^e*2 -wi8򩭗]qv8^fr{Ev~Vt<D4^r{>Ye]>ǧ/ƭ2!\au\>dx\.Z\_|5Bs{=uqG__I72Z|ß>r>wx ˄i4]f侙.rV[Ekztܺ%]RYQd]"$t tٛ")=^L`=!ͨQ=jJA$%d0$r\2C%B\ Ĕ$z a+\fs97Y9Z2C0zjC-=[kv`Ih>~z K*ҡ$隹̮0$ QEJJf){S-j5KW{7=ڣSQ:սa"L)`q;Kdk4&1k5;-F¶G]i޴t2K")tW-xIɅb97-YCZ +L8X;,r^lɢO=X],zӥV [brSQOKzVQ]ZT[" ޷֥=KK2%!":KW7dbٲKI2+, {OJ"OR[/Rt)ʖx+^Ph)ħ$~-hR"4E-E!h - aK%!eАx;Xsѐaubo|%a.,ȃkp2_\rsB= y\ ]~/<897ʄ&1|"a.FBC.;44 eHA/"3<0CCp烏/E8 zs>ڲu[5e&1z- 0te"[ڍ].ܥz:SzF<( VfHi)ZR).J%QE~*J+ %DْS.%-.-2^vIxi)/)]ZZZ,I9]/Ҋ,)JҲ+-E0ȒXβ]v,]t|e|_Z졷PiL˒\(z;)+2x|z]_~z]Nctskîf#tI2)Őr뷯^v}-R5/>f||{_ wU Tp؋G]|y#繝)+]1;e_w>ʗ G}pj~ZHsn>j?9X=ˆez(`_]CŰߕĿx[6OwW߷??׍"eKTc-x[[2b⧵oէo]i-UE+"֧xK*b1 Soz+S1L(j*F/9j~b %C B<# ^x\!!E!AMsR#"y,R/y;ޖS F-EimyHƯ=HOcSXz:(]x[(CSҥbQmXOrOA=K%Ȑ` 2Vt./Ed2HiV mQ .$VX^2rE-e(-bKU񩊥Vx Jk=%[XSlK%(W 3A衞x?T٥UOv-?$A;\Veˮ`aŢ4s :a^0Eh)^NZ$ZohTt_ fiIz+x EC sH.<IvM.)Ҳ. 7 {'\o%hE)pC뇌hQGύ]^v鲇&Cage#~Z/LP:H<]Jb/>n/u) x.E"ץgE88Gibv^fUQ+ O㭇pʉY.jXfzIխoױX[kR xKl"^vQ/-+*B?h1^[2inbBx_Ro-B2`Ix+4$$(eYE!/?OK]2$`zi2GIqѥޮ-EC<7!<~ r|08C1kX?]2 2 ZΡ|fpse|hp<\97.x s1^e|2a1!ߘ!]?x<|ʮߐZ|)7u W<>(q|Xvpo[l hPwxz9%h"2C:<EWBK-2CQOEħ *zj:bUY?$!AK"$>5(F&9$$}SiIU`1$ V9xԧ*%3GtcS! Sਧ ;\r?F_-F 3$[/z7=]ƹ8\rݷ:||F#WǖUeABǧnY35Ս8<£Xyq߲+퇏w?Ͽ/Sß/F/zo"{>2|\|\%;Oc7>wS\>_=V)W3Ho{#ϟ|}i^̡kfR2(yX簃~=pr0îEK`[;~6㿱7Xo.[bCUWmT`Z2~ZZ5 ^z )-˧Hƺ"OUCS1ފ,©^JBCb Ä:\CĴlՍt Cnf04500j3^ZάxZzT!7/u*rC|C`~z$SomMo, pK,Xxn7nz`)ToA-֯%EQ)[%VQE^8A> CGTspJJK0C$,=(%CVCzix9fqzOj.)-!z`1KZ?^(Ex!eW!Ǫm Soa.xjO#"X.۲EiQKOeOwaf\\%C؃![p"/\Xb^/3)4X &\3R pOu}҃8܇%pykfpҥ ǭ"jύbQ=&1 ,Îé\#}mELj&l`qs.gj{H8EQe"7 mr]C}L|e ].$bezP</]{k\^z8ez֧4^rߤG{8CFg}:]ԙSZ EKbb|ZKpЛ۠S`CzjKO֧1zs)z[ꭘz ,g1 >.&.f%eӲ” %R/=0i1bUі.Aҥ"?HAo- Be187$"x0^xߕHHb-42~jqZvIiɃ] aG!rġK7A0p-))3<.vǰa\J=<ڕ,1ױA=={M5 z0YՂ%p :^C/~M+tpC-e."}s~ ^f4,Q~5S~'[87;ܘOZuù9AO74`Vqآ6 'Fi[2%6$."!=,ӺJ=Kw- RLl[_-  ߴ^2AhQ ԗ*Sِd݈SDoKp~0&WZ/٢5>_;|r/)Y/{v-P{[fջ]S)̍DpW]<͡ˆS% 72?\_.= ||p~`#q:̘Sz]ptZpab, {ziYOr'OK6~Ϲ[gObkabzϖb,Ɨ1X EdPZire1[Ff1X/`dx 7E kuKBo6^\.%e8bYzr阆=Lzo6(%E^ aOW쮝A~3ޖ"ȸX_bp\"SݸĐKrSHFRo?p8!wp}Rڕ>,=X_-sGQqC.Ţ( o-(EEoKE2%ƗVS|SKJz_՗Υ=XZ/-d|#*Je ]b/3e1Re6vK5=8^X3KoczOX%EbQo {hǗzoC.%Ȓ2̐2a ^!MMK7s,#yp %bV1,s1SCgClbZcj*=e{f]fv vfކ&--S D Eƣ]b[K˴]:Ny <|I\$xxK֕E.n7 KDax*eq:l:{EHǡekv bP&%G3A2hIQ\:C̐0ӵ7׵qE 9ei%Rx~.txK82%$HJ⧻ypZf$6Cm%|.dlpуeW~`$ŰCiV^W {ns.ʏ=tY: /ziQ`XgpXֶ̔%RvEޢt;^BRv09&c- tQ/[6$(Be0hXOe&Xb۰raPc#xŅ0i\4eA1^ÜSQRkآHP*)A*_[+~Ja!eG>wfJa>a|wv'>7o~JixZf\_ڕ ʬ,WMp-'?~r!xΰXSa?HӇ 396H0d1$li†b/㰃ВЛXOCђ%XoA.3|rK K=Sʉ)JeB%%(As$*EK#SziUzjE zْa"JBE4! BQLP;UA|"V` uG CV[i}OZ6^&0/{1h`<] '$21"nZ_2_H|Î/F<_<]|;^]&-s E{eoD:9]m"FL< Kw[uۃ 3^?r<-ߑ5S~2|7"\|GC<.ًo?dn+쑡e?~S'//_|o77.ys>.\7w~8 :ΏۗI)X.NL<Ay`Cm _So?i ?g?<`/ob'"~~* c1Xk1($B˖ dտ#f$ڠ$x"/O_-~S?\̰\"XLi|Zk56Zmi<e%#Y Ɔ lQr&OEQKF-B?] ]ɸ{!/uI˗!7I$aZ?A~w2rFKo2V E.Ji<ŒoRo"x%DHP"VFDSHj]OAK{˩:^ƿa1^^/{">pJV/e=-_65){袾_퍢z]`?hr)ZLoB*=$SrEi.5zzIhHq-EoZӍ"J08EtcE$trt A);l0RƐvxZk<^ ]`/T^CAp i+ א˹/&BV{pJBo:~mt@ˣΖs;CWwQ\]Βrtz9--e,^b0-]mK9*A,U75ؔ]J3ZSUO[KQOˎ\"beJo7EiP3^Z24F!(vn\6BU7K&b<]K[oeoi%ճ$(x)(E&8vÌO{aK7!A-OA$PCC.WICQO޺]dhB%%°š~ sy2"rYvB]ǃ\0e >؋oa~a/\d˹9r]$8 Œu1K\^vt7s/aaWsaf˹`Ko&3Zr]veMKԞCG5 ,{0EKŰ[ h zKilP޶LH4elzҐb9%֗hJB͡dCSėKhQ5K2I$фZҢf=P$!%%JDvh~0l- syaT&/[R&!rj=HC!C$_|=K+|ʌiţOK[irRܫwŠ̊;|DC2lȏu\:?ۇ%3?·r>\CvqLtB>Fg~_r>qO?~/ß~>ESGW}z/?U$/]zr2]Ğb``p6XnG ],;7?4O]obZG?(ZWYLm (x -]2tQbb/1,-[/a1fq#ԗ"*Z+rpA -(8cE%\PL`ABK>)SoKo սdz /#6aO߬%7nq9+$7WoF2\mv}IK]v1%K߄sr-1ڑ4n /^2`I_ߔ~\,BG[7#.4^z!Z_/("/o"tK,eOWxB՗v~/tP/ӧb*Vo<įE,z+>qrI``oobJ=BB)ù|8^4%vir<#讗()߶Apx["~]Z^~3E<7`1$&^MXR!AH8HOKC,r%|r] x郔\?Hq'Er(f*琋>.fH  ,s7Wƒ~P|..%막{&vidHܟ^>of/O7.{p/+ZҡKҿdck8CNuo3C,zbSԤ FAqccЃJFs7["t% r]ZFThԒ~LаQOYiPZ&,mQ?%^]Q/KUPߋ *ɰQ!%eج!rKKCy<vU9+ Y,[4"6l]lu,䔏!S-~7zH$HS#8pŝSQAOK[5]vX\A9 4Gf0Z#_?*=rO{խ}]G˒fus :E;lE3Ug/׭Ɛ RJ<_r2᫧?sv/ rO^r?'Y/3_嗋۟̃?O_Jr1w&7..[d=|aⱇGy}i8eX,'sԪamYZlr_~oz?,Ew_ƿn۬naW Oa1(_U-6Z[P̒R,aqb=\RMS[ԧi1BQ`\({t APxCBRoWQ\8. }،qz+{)NBhryx" S2]D&Rq'.Yo6()]\.?w]vz/%+Y?d= GV/^E87_J$ZO(c 㻌~ *Fz v|_I;i}S#>[\"]oaXmԵ&Ƙ ],*?q,)z[x+ZWSQoeB`IPZS9$$В;)7z =ޖv!5$,gȒ.A(ZZ[-0 (=!A|w?A YH.-!!ع|%!~s]/>]/w=ݼ|yC>xv8WJvIbI؛Oke⥇+a< 8-QvI5֊]l(. ) cI-vQ&E|a^0xI1Wh eːqx |skHO7 0pyrQ9'Ӻ;saIQҥ10ST{N4Vib|3ltICK>7/Ъ᪷Š$<, 4۵YNcWnHpCʆ N^t9 CM1>ȹ9CsKbb닸qrF:Jx|E< C7M)tet3}`ŝA 9G+Y ]vz[r,[,[(,e`=OYD`C$vo=1S/4XZjIiXz0e\L GZx2zY Z eOeAВ. YoE̩V氆۰hqz S-+[\)JKVTztUITAH]t!(aCO!!aB`!,Czii"d!/3}a}0K&ãLMנ0w"zN/W<̑]~ kp܂ex2_u7X|xz0r]||p_CB]vO܆x.3.Oyt|wLr ˆ]~le.$=c=.eG\slCCKI͖N%<r좜2aKzD5=-9K Kx..Er0.j^/);7%%!eˌO#7%~Ӓb(^N ]Zǧ*TJC()hHXdOE#\aq.): -) յ!sv||H0>ScS4^ZeqVx|k|=]<. 3Ovp藯u'wn#r w?_ɹ,rv/?/ܾs~~s_G;[ֻ~u t1~X[$k9qR,Ņ0J=5Ӌa1`Pzi|3Ap!^&B4ʆ %7r`%#E*0N*B~}ܼ{ǡǧ[n \iXhK$t}! V8d>tCp<Ԗczkv=,x[tyi .tx =I0eǧM7ɥzlw%Uq"^/-CfZZ$`Qf7Rbsߤ^dOC=zK`;i&jSŽLAi)IzI(Zf(gdxO!VzYVib2Be]LXo]~gB}BB&[\hQZ1$^"BC۲%wZsL9z`Z.zn;RihX-]/ !!cC%czlucv]ɱ2^GEvVP#/;b Z%cb%0vqc΃ ]bq Wе ="h}a.r -6,. 7p !\^9w/ 8ʅ\ءT3tm)))U16#]7m9]exqzS1Z⥞ SO! [3˖\2VKi풌c v9j+ s4qzx $Q2Aku/#th+FgPΝ Kn%܊ѳCfC+gS{4ƃF; ǧ*J'<]էdx r._ fLKEkR=SԔ,O"(T2vÔ-eABޢAn&KY!7 "8fhC28E0(J=q]Azk Ds!rcVk?Q"c!!Aˌ}]EPFd\)SH|$^zKH:>%!) \$(!aPoWzy|EP2쒋`Eq]?~G`Ћ8 W2\㋗t0d+~WeW?w_\#zcn7b0te< -p}?vܙ Y>zz_Ĺs/?<4ڒd9EBW?}|8]{g0p ). )vuS㩇X`5tErTPOAr&P{ AFh˅EN"[A<h뛈H߉A.K>Szii YVRħ5!H$ˆֶӒzzS1ڋ+52>LJOaA . b&Xvpǐ۸\[ CRtoSS)./=w. :( ,`7<|zt_1X6^-C׿4EfqwFm1- m1Y"M 1YkoAQz ]25n~`|ZoesyA0 6ji* *OUkg -oI\ʌXv."Рc,iE|9>X1Ғ b7Qf`(U4~xZ..oC"OIHHpyQ/Y98^7'i|ڋ%Cx *_.~(zsY/]/T/X,ҮOɨ%G.x. {Ip dqdn2~([$^x[vQUo Juk%뛈OUI|t;KEEQ%XZo҃="2VEQ/-r[p,n^2Oݯb%8y (] O钐 eJKKKҒE𔡞.S<]\^ry**C[=\ZS ]|eˎL1Ţ^LmZb}qSo6(_!!E/;;fȐ0~sy%C2%=4[$ކv|x K)EnX+\\`A>qaY` %,2cd{YmkZZUee2(Z&,ħbKAfPrYZOdTHexŒ`q8ȅ^61)ezZoK 憒Ǣ9Auy)^Z:.}Mi#hˠ]-aKKPo S E" RR)K" Ho7/  ײNR̒dp|sׯE 9p0?3?1?`˟_~;;$ޖ;1Ew;?O?ȍ ᥨOܰgnA/ !3O갋!sq!_tq2Y~-0˵E*]΃tOq1Yg{j轈-WzZev׶vlP|\eeVmH(vuF3<,[v1ACؑYm9Oet`AYZ̢$$[ R.rJB=Kˠ"eקzr>x:LJCz=+V _k>z֤C&̅rJ֧OTr޲>{[h}jKЇOyk8t#3^vV _G[{xaiyZX͝{Y$r |E]gp 3.fzxOٟ%S___e/?p\|sa~Y3u/_ ׃?z"?W_x w~Zůw-v__.^|e̺v]\XU9&]]nc}<<=U{n˺"ewJna1S[.^EPoڈj<"Ab,YwvvTħM}Z1ra1>E31V\Lmb;UuDaoŲ"[b,%"":XTK9^/Kz!xQ) Jwlp.֧V=7<|amG{J=Vo KtE"~KB!z^|{ђdvֵj#zqв" tU޳u =PNq*"9G4lT^_Yc=wSźl]SW-!ZU|* Ԣ&[;G֧z={?tD=$%QOe% b[J!#)SÁ=eO풓,ʖiiHHW`9cti}*] JKw#xcCSP~o;NRb $$,xXӇ#>Í%0scnҥ9ҥC6Pt%oK}ct;]ˉԦdI'KVS;APR@({ةQXl=)E;;ˮTnX M5-e!JK<TR6(7Ri钠Iu~"CYeHа+ ys$Xzr'O{K=9ITγteOspw4u6.- a(jqiɒ8OvEZcIӲ8PCpˢSRKPl1T{Uv%!7S6.3" SOuiC^ܗjqa$.K.Cj+N9SFžaN]giԍ}uStɉSmp⅄`P]ʙТ]--=]Oe=K0aŰK(j<,3K%KK[ͥ8"L, [2e%!K-2 zֻӇй7`Ӕ][$4(JWzSu. dipbeqE< ' dRdNÉz(;A$db~g2t9K {cr2_+^^_='N  Y6a Yf"3~ŝxzOؓep 3n>dqwqu1~'Ξ.3`ܹв/]f)<иdIHe YnDo89{t1*;-.ݒ)av8vɠL]:llROD$)Z$~'.]V[YP&&2uY[ZQOԥHHpAw-9T7NHC{. eˬ"E\SFx(g\׻ww%q$(7 j $;}xFï12Ϋ|M~b~~2篜 w_\~"/wO?nQO|b￘__^r_:ym9noo]a\,p֨N}wŎ7\ݻEӌA wz4ƿj-bǶj?goxWib1"O4(⛺$%ՌxheEEÔ *j1oQ|Z𴞊eŽZe )wOzߕ,S$2">'8Ԋ] C<ߋWO'IHI7xț12Cwɍ?tɨeT{wUOP#S=U'G9TɁTDC=E|wԟ;=Ïi| ǐt"Rz;*ں$UŢAH d,3ZnE;OqYKN%K'և aQk[C.SCt8A|hi(z-E"l0J멌r$ҥ% [m:8]!.91ֻE\ZOS, @| oʸL p98K]4upxCƇ@,r#qi=-3@HP2Nr#C-E뒃s1XjkfOvIlˢE1.o"{`o-]B]ćY eEez(`<5$X" 搹22Bp<}:\>jpdD[%}ɌޭykN'g<,ŁzZ7 Cإ!qEX,!aҚSO).-sH)'&C=D4Y;KҖ$tu 2f1ezZZ5 J|L9GItqif[Zғ9$}ÁXtn7vٓr,E'ppzwZXvږ -9`1d|۠ҥzSQeJ=\z31 hJj#  CzZv=%Aء!"ؐZawR꛸LwO$l^&$ r;KJ46eCΎKCJCŏ2В2b!ȝE%P?jqiC=eT%KK鞒PzO`щé4s$W T$bhx1ڒaʹe=KTXjyjn$8%78qxĻv$o%>8Yn9}aQ!)'GE .2_/Kկ_xcg,Jr_{=O2E0t]nqy'|姓?q+8ů/ysk6-}靭cU=2e_e8O.p]|fu9QEw"zzX Ml/_[ ooPֿۂ.'ƧwzxK9|*G]|û7b.wC.3K)ƻqs9| q $O[bƻ`/ړ-a in2L CqA<ŧA$pɈq%E/C"yan/|ZڻAwzĻ*7tzVKn4xá],]Wo#j}*]S=E2z.YўH<K%SPO. Nm%A<7]OTcȁ>Ξ;ÇK=i=-]r.-ЪCƥnaLbx:HH][SݧhHlGr9LHZ2#n7E`9w.!07ɐP֡{`yw+s_u99;~,0EӻO(gutI$) vij.4 ΓUŸ̰.S73b42!7uiQ,(B<% .>Ȍw]hQ)J".]r 6fфs]2&e90VT,. B)ԭw$MkS2DQgyuOe㏺غ$KB1. !7e<L,3D\rq  -94q"~Pl0Äc!.yA)y9`~x–˾pl8nɆ߹ a#z1+_~qy= npe<=q'8/ep_Fq.~{03ˍrc_Ӈ/..]Zf١_=r~}cӲwˁk{s9O;]ʮw3CB,o V ]v ipiȰ2~'eKKKBKٕKJ뒡EUe=[.EBR4>է"%K2!'⒰#ޕ H\.>qi&dCj`F6!HL#HpV[%1 Xp;$+!tNg}̰.?X$q +s#e8q0\ՙڷw=Ovur A2AFXfd—7r/9B~#Vd^_n|Mg׻=x}&?rs?Ow'r3l&{~~>yׯ=NwջW߾zϿvonz{{cF~uU;su}]Қy,]],.E=tAӟb}dTܩ[Oa|Zh$xw?S9EAӈU4X,APZ.O`"zCCaa˜8|=q]*:s8⩞i1X4bL7RStZkܬˌOiE\(=%ỈwōAPPro#$}UJ+;ࠫ!XBƥ2Mv}/t}K^\Ad+yQ<=Ko.ƧHVI ]O]1.!t" %.tz$>G6~4XA0XhQɁ!aK Cbh߫˹~Š xw.=mhTuv])AEԥHԥA1̩V2. wV^|SCOIK.]fhXJePqd8l=i#aa Vܸ/-ZꛠP&,-B꒺dR$2e7R$9%T%'{Ғ7$KK2)!C_aNC0t]`aɐ8.- =blJb^`cU&;LKb׏NVX!~0>-eba–96$FD1T!!#SwArAɝ76B¹AAF&l}:h=~p'Nzl!ʼnԻv"wKW=L(kZw) Q2teqFImBc[wBKObKj)]r;&UK'2,J­AhOʄocsîٱ}qI(s}hI|hYgW~aO{qPΌ.]rs+AB=KCe-X"8f<-mI[Xv>, F9OB tU"=PY= yڌz:VAII˧ 3XSkvuJÌ[B2^ROE$~/ry)2~PE {1uxȁT\$<  "R&tQԔZq!D裨tKc6^vQa!H|X%x .SZ,Zi9 SvYZ,ya|JH1~(.)O!987]ĉeĒYn1$^>4KGpp'CƵa4_.{յ㠥 ǃ^z*SDӈ-r]n -E 3 †A<-n9PTt a6껺Y:>TE܂-J$4tip!"O%qB< H؋x%Mpb"$& ʞ('!eׇ3p-mV[7chp^Ce:w?dGg*_|y_rVywZƿEdoW|_VCePf1,ka8B*8*2>J"؄c$\JZ,)8e+^N;Vcp^֧Jvد^Rqí`u^.I/UZ?\Xn)S *}a^9'[ˑÊ!q[?$][oJV /ĸ%lf}ZR@WnraD4C /n+^^^ϊEħ)Te.aćP6.wiPu[)B.ZEKߋO)6 nI.[mȰKn (9H0EXY:0t}JtXOe-a2hQD{-%4>) BJ pR[C$d!aCƭ(t):,2i;{p.-[HyӃok.Sy^ 2dl.LZ:^i5bIi8BO.2.^2^QiaS:t?"!TQc2^.CmSXIT%&#.fd?8Za<-$GmGp]EBߘXIukpŸEQ碴z)(%rQfb"bѰ n%Ԗ$$Ovݶ[<,!hHCP,OukP>%Zaj53dPJF[I8hbv] <8{}zs[KtKq2-F'eq!e= J.ENݮ!W*,I!Kji1ڸ[KO`ݶ )]fx[BSH)zY2,Ӹb,jH1!! .,Jl1EP4Վ maТnn [lI A+BECԶ W%4X,CVO2^mG&4A&[4 ,F; ~Ȱ`HiI 9HxskɃ$Xr2o \$saHJ_.!?|9?餿 ]va8q]vIuKe\y]2 bdƇ2Y޸.Nfra^: Ay\YvQo+q⽨4!G\$>}9d/rxzXXbH :ӲiK+ͥ%EB ⥥h[BAQ5HPOSВ/APO[ r t҆qУRIC"feJC" G,A/r-rЋzTz^,U/%Ƈw}zi\ע ¢A.͛t}J]&zj:w.6T(8Pĭ!^xcPԐq۠և1ZA1Ep$˲~AK<ZU7$lvwކ}gBdC[jw9o\1jև@Ueևo]{;`}.]]UXȁ>Aa.X,]Kêĭ-.K$"\른BU$Bvx Je0r[lRfY J]VS\tQZ)%J]/CP?jaiݶnnMݮˇ!)hب!^h/D NA}"8-ch奞.:(b=%>lk|( %lz,Z?Kn뇔GiudhR,1Ӈ$>$IH!ü!O,ER>.-E 9X8a[zRX.9ۚ]t.v(kMݦ4nq)j:MCE&^. Y m^6!CKOx1~.,G6)Z)W/,_"#W.uiu=9 [ZBD{ypSN,Sm٥[&~X,ih*j[T3 `݊\lH*aDwˊAۮ&zx yCڢuMW[?J*r`/ C^K9<}x[ q$lhE1Ŋ e=սIC/Nx:qғEv!36hQ˖AʢRLZmj^,(S64l )V=zO!"ˉAJ a$w,MEd1n(6w% \u*eB^$߄iUX iC¦t`IpnE" `Ȓ%^-Aȃ ^R=|j R[x*-KBKGI %e"J<uE,1'Rޗ:ȗ+|8x?sko\q;;^ٿ2_1(rZuR\%AZۉN<~˯==0#_~o{ ȵW~cr\/{EڃBy<\tOtqP&ae5&˒)ε)–f$%J^KVA -4VĶf+Rˆ-"\[~S7SzZ0J㖠K$^E/ ]\^vi2v$l4&Ai=l|:`u!gj2^ˇeO8Cqr .gv`/ZZaIȰ^xyT_i9뢴KC Ez -![2aK/ݕyMp|Amtr ۛw_!_} ߾_~3oۉSO=_ ?_o7_o_#_=M]ߪsy9 ]_[\FŅ .}?}8޸wʵqС^ vY/C~sp]>>\nr^Xq[/?˗~?g ƧXwRqj ~'>D0am< e>Tِ۔4^2#x:8p!-aAC+qxH|hׇ$8ȸeĐcI&HF;]t7ߵz 1de$o2_pHCN/ՊCuړ]-{KҒ`B<CS,-e}h$/8Q\ 껽.E}hO֧<O$]Uxb[][,]텒չ袨vZ[eHhQUZi^C/XpaP&z ]2V2>n B■Xq%eI1tE-CH-Z&ҪE/,--nC).ZZ\ti1nsaOD{1hubDrarpb0 ")GA.2iHDFfLu%^c8Ǣt:i\(-\(ŵ]9JWs~ڞ>$>̌;{~gLR(] w4CE`/%ᥴLVSSCi=T8B=`lP CcSXAr n ]ŠE1B[!ax*T^CKn"^BGXbH֭!68R$\2$dRy8K.Tr`,'3d@ݦ R`#S.u7 E޹x{#䍬We o_xqO^nzW<|YvvI. '◿(fx"ǃ7]c8Of9_2 se8첗'9o%Z~rѿ<~;vMw2epkͰu5=M^%5Þ$\b.Ñ`eBвKXڢAyrLкiQ V[xiI۵Eaֺo"%[cȘbҲHH˧ XO!rպ%ҵ 9Bvi%Wj2FmKDa[IHII;lCY D1ds-_Γa;Z7B2K8[Fw9OZݲ߸В\ГEeACzqH!*!?1#Cޘyӯ_gx{;ˑ$֕ HTk ȸgU@"5띯>9orӋ|~_]~¿+_վOw^}yz9ݺίz޿zC}cp:vttV}owC9ٳ8YRve~tǁ}ޝ~p i(72CE|Sn=idluῢMi ֏?iQ.waqTDZx*N~JXw A}J~vi`Y`Q R"y'7TL\4jsx78iql[7ua|u8X jVf8Frxwxw.q9 . !Nߴwn Jqɐ!rx:d|9ץK|SKO]鲧*zj9O"Erwf|].JO4ͧxwUO';p.x hMH)('I''jEi'SL֟ ܋ևDͥޕS=:NO>D0=ɒKJ". +61Xz !K2`|زo~[i9JwG8⩾2h1XeҒdPԥE|E]2$~,=P!Lql}:IRr_IH%,0p!qIȐaćO';Tˉ]-BJ͇[]nKtlIq`IHp SO`$6 ݱwlQҵ48KEHPvi>$aga멈!!HVlb1%\ħEKȐvcN1 Oyv2e{r;KSw:%8b(M}*JKK<.{с4ĥ{CwkhR2C0w2"{ħ=}2XOYS Li]M%.--{к$~Ғt".]2ds8$. nl9v2'ao{rؓEe$.]L$4VJ!v,65 )>,L]`Cj1bSA !B,~73.?ȍqi%H|!p,t  ݝWnz80ur?]nӟY݁ey74/.Sε"9OZ[Q,]e=LȒR̰Yf!$֥ VL)=KCXÆ\]rnĖ9,j4dL{J.=إц$h.$-_Faĺ4KJK=iQҺKrMt n($'/_pMF܂aX[0En7z_:rJ|rEQrңNCHhiȐ.3rb'].A= JP-OHQH!`sޕA,-p%HXY)AUN(2K3Q[I^\r2ƻ䬼`W Y $W6qYLŐuiuIz:]ze",g)- {9Dnh8b1:ui\}q[nxUԯ_vxvYLp.NX}{cpW'z?|/_˿7ozӌS/͋a/Jz}x~#udt{]ZZs~;{␌FZa-or ”9Y;rqscb]`}!î[uwm_~ׯ_b0~2>n Zߋ\twXXzjV-Ci]r$w1$F𰜴'OXպ(]Իһ(y!H=$BbwIOOun-NZjٻZzwzSx J˞z*]TqI|z][ħ".O).E=!SDf2 "X2S}S;Bn.K2XOǒEiILiqJץ!?ɔ]lIA袴()bPZerz.$$ޭS B}!!Caɐq dd CJBB7.Kx dp ]ZpS= úܿXptҥ.+Ea}NK]%t9(XC54NeOe|3(%ACB)xfHػF%t&ޝg]%e8n/2r98CXh'w8\Aho YCHh)^p?uήj詖sQ2J$'[mRB C gSc$[ݐRC\ 0*--- B<".E1a< JQ&A,xw ?9 wIِ!#tA{ʠ]8HIX$.-Vt=}ӔӒz ZOE͞ZŔһwt[aOJZ!qYO 3~z*E|jr*FD]<`T9O,PZOn$$#$>7Bμ4bceֻ]dEۭ-=Xt0X,$xE< ACCBe!֥qI\ZӒ! OapFp +&|9/.sܹpw9m<|ᗃ˾u Q^_qqp./ۯ>̰Kq/wr]2/aƇ].I 8 oˡ{./۝YÍY} p -pM;rr/-X ^rS={ٓy.qZ;9 ɼdK]ϓ$NaOZPߴ.f8ç%Ai`< aFRf$("quiK'4%q٢> gɉ !$!A̩ rS=ݻ;w|3 Ke= vqw[f|Z?Y?_nb6Gimi'F?* OE| .G0֧`PO,{c|SO] (;E(a Ł ֧UcD\qi1֏)nn-#~(R6>̲`!A2D2x:.n7] Z;?zC?Cd^ȼ滸᎒A=+7}*N,'V>7CA$xZ?b`QևD~4Xi֥ZE]L'BfKГî=Qc9՞(]tlZNx-~XViQեO]U"("OA鐺.TPvOtq"TZ>>$eE蠌s٢eFTs`PE)( uYXT[Z qiIA"M$AC?ȸ$⩘Ah9%AA:dҥSBDȺuR4=8Z$FVgJ4]lft4H =NpJG 4Fm#9y80=Bb[05 v ,zI\R "VH< Jȹ)ǐ ^am%r̐u[CPA;ENO 'λKIF] 2{٥Fti%2%~Sfآ e S=xzxYYzZep)RXRZeU.3.RE8zKdUFKx bI`(szu)S;%́.[RtjK΄CH]ZZm,=]2 fإ%'և AH0X!AX]2^$PвE}K%.)erڎ DST)-r8D,߰U0aC,=1x]Ð8!Lk)hKJC'/!%)9!^"o!BBn.)> Y/ (-qвȐeL90źaxե~gn;F'~+72w2|E}Wvx{gd򾼽qʞ n3;;2dddN]'t 9tO9? aWy9]ܾpId~eܗ7y90~e*VN8O$3RI!CK-RqyȉfÖHAIH"LZ[!lԑKP?P/KкK} A}A㒒x *,[l],)CX^K)Rfِ讧4 "ќ9$Y'ofE9Oև́0wY6p^N,l\ #aSKKѺSRU&(CBCeCB}ħb[|#.SΛ&lw+_Gx1+-Cr99Oo^t9O/Mw=Or-Cx{_¯eouy?9q_Ww9y{<8ƾc0ݙʼncw,re}C]øl918%.7I|OSz>Y!鿼d|Z2`cW,Z)( "!NxYZ#b&via)X/#[&!Kj,>Etg8i}H$qn~v8٠9w'm%* ǁ֖Qɩ F2L2jfޭ5g.!-EAxX2[r'7i$$l=!H}Ȱ ˽$.GC"*vHe1!ݹ=7|9$+Sbtq8E=EPNl萰.qY{iIP/KТC]-J%REi*bK0R!aBԈKГE=,.? ֺ$^JK=]ĺAApz3q ْåŸ2ŸL\(]]ڲ{I9B" YZε-2`-=KhMCON>uaIi^C=xAKV<ͬb0/uFzKeKp 3ɞF.}݇;o_8Oܹ/{0ˮaN;2x)̰ gIh9.[%Njɻo7͇=l:_點yǝ_r-:CRI aK[;t9{Zٻ l%EkHm97 YVY DZ>ҐP,U%"h"вKTzA}VKR,BBpa-3t/.s2tؐ%lѐ"er#Xɲ!8rǁs9F[i).{r pgTrmٕ܂:#!\/r,sȌ$$$(Y6dSna2X%˹̐HA 4eC²D2o+լ䍽Yiy=|;9[R|xyˮzp덷×7w9Nw|ÿ_˷ꮧϻnoV|[9fqy~]&(wm{wN3'Nv|H\rFr ~CP/9ptua10_۷o`10>lNǍKt/ߋAQOA&O'sx JC%(㡑#%3qŪ*7G|:SO"".s#L .!txj2ɈРLBK$!#nF2T!Hw/o`HzT%7OxFnr"U&)9Owmt^jO(Z;-zJ#d . %d\XZ/Ej;]zjOze.]?+Ym=jקEӦ^j?Z<$^%XE?RZO"p9D KEHMM6t=AqzKD/.ҥer K1.]^J]dEK'%{R V GvpM 9 $́KB‰]Z {ҥb ]`n̍ 7f\vIHhuI8Q .]=;]/S;Ӣtl8.Yz1=Uw917rg,=AYoZ34 쒐!. !q:EGn$̐! y#%%.3drte\Mn_)풓Lxkw:..ΛX=,-j٥[Dwip$8wa Z֥Ee1?T)zZ (ATa㩸cE\2lWo[fld?3_~o/alS -:K=xY/Ca)xc4@̄0Tgfz%b`/"  b<$q`p0.ipCHnC )ÛTOqCIpl6"8MrVnIdJH>Ԯ!=uIW}.[]{jߵ'?0>tI$n`S[VmNS{zY;-KKDrÐ KF!CWtUqzYړkIE]>eezJSQzjQ2(B<ԧYvII2$.$l0JP/GM:Ki> HK‰v܆ ߌ˹^eV{b8z(PUEi,ⲧKrKAB"z`k3̐ېa !7 3dᒐaIK)-=KO>է0scno޸Һ$.- --.Y vxe]UZ֥KuKKDhŝ]XҘk=4Y~ଧLȰHXCdHH .!%7H%!CJˁe!!M۸$2ew]p+6w]]mh`jÞzaJ=ٓ֊diR/[ZZfHPZZT[ZĥeK]&cDi #$.a !Be0"aSaҐĥӐxxImbHBC2^erCX $~ Kg "s0Ƈ-gqj}׮˖.)j%qjuIDxJS<XxX/!1.--gzX?,-eׇREzKpozzoږoD3YeP2ae뒰C&$KbZ5zXnz2e,C^2 Be!!-9ز^pKaޱ$ pCn'r0EH\hyKp e9HηHߘx}'o^N~]m钕w/.p. -˞7NLɸAen._oqp K.֧;_;ސ!qOrp{Cw9Oc~Kr527Oߙ-:y_썣KO8uבy컶rWR-'unn7R=ɐzl]ZZqi0euf.BKP/PoCٸ$$%Hħ,jC([/ a.EeEYԧ.XT8HP6IrXׁsz@Ϧ0]luCPזpܘRP_ 9H]RɁpi0_2/%a"ˁ'B2>lMRIi뇻!AXO2$$r;dMa$'F"1ܿqȌݘ>;!!~·eƗwx.9swOw.{}{$8%S.NIŢ(NO %j'-ʬ"ԖӃ֗(C6K|)GQE]ZR"6E/qAR4Ez멵^  zZ *X1lLX2.2z gKEx)Ɨ!AiקbK1@JMHr(-[ˠ ](/2K&e9Q"\x*EH`KR䛗ӥ~Ry`]E<ŗz p ;')]⩾AQ,;NJ.Sut]tppnJCCpK,v٥ɉNfԎ8LND0eKet 8&^p".ɐи$q&y) T(V捩Ð"$dp:Mq{cӯ&>$KG7}ݐ$b r .{27E8+vF/V-*Ӣ,Rfi<%(g%KbݗbӵeК&.ESb y2g\&eIUDS= Tc8`1l0[/%O'Ӗ0C'-@֧=SϡXEr);X v`RfFK}X49HXXi1Kmk} O)Uԧy@/-Exerx ƥ)8Ke<(A=%q9]FR [-AKI 7/i!ˮ'rÈUUA`]:}P ֧c xY˖x*) [/C- - (Ғ!Š0'O"KOӧ$^ C̃qqqy 7 x.ߗ?Kt9[ 2z=yˁxI4|_;-s'o.-]<;Gv08w~ӯӥeo<\vr.]ۍ R679n~X\'<4COX8HHx$=弳'o.YtYgt;8Ͱ'rb热-űspxvaZZReBKQ eBHs)gd]Yҥ^2>SIY/4^r%Մs9 vIx Etp^"[ER$$ iI\SbzYAڕwbQ9h3SmXz<ٕ $,M$a㲡heC;$>u4CÄuIH\:>$,ePoC”}8< @ܪΈ7ѾF:|W?Ӄ_"g7֧ۍ}`YRO7ߵ_-K_/cMecSC🉗R?ćqĥ~`/q20ROߌ#~gO9|qPU1FQ_Cφxr&"!aF qx9Dlpr9$ooM27WňqCr 'Nm}Hq}#C'!7Ň̟} =e]퉇/v:}!}UjOwEɁ7/=~]qHr@!O-%-=INz>P^NԥuIćdD憐çI}`ur JO>ؒEIVC?eguZJ;e^꒨OZeKbpj KxY?XK/!] f/")rtXt.-]Z,e2BJ_]'cԧb.3tC'tii]ZZE2eNPRև">.7A;A0!3!/AQf  sCttҲw/' r0%Þt]ǃ.}p CBr]'=5Kr\y8>TҐr>:!a4z>9b!fn7,-BKn!6$dn\ A弑ctK 9a%Dty(]=ҥKʞlLNtj.]ڢ,m$>KJ=,C 4let9} ]YK"%A]v]f\fx)B[ 1oA 9ROҒ $".ӥC%>$aR..r,K0gH}e}>TӇ7Ӽ(4Xħt6 Ş$dPRɞb>(U,T/%! e. Zi .qiyx*)[)m]#YhN)"ԗ;FMd⒈6$^RRkK6,7㲞S/>탔zyz%A\2. $Cˆx%$ΓZ2Lyqե̸$ɱr[8nۍF%t?|c;u9.''S`KO_q9z}i+'ZݥKJwb}M}KOrC7mL= ǰM蘃ݘ}<-AB.Ag.A=AuiVϥ%q Rz"X9Pԥˠ. %JC<]YbROE\%Ǡ4( Tԗ`OrFBp#-Ja.e!-9Aև0#[f8"-b뒸 Je1!r>iƧ> C9qc|hN%=}HƧbI8G$L$8xǬ$#x?vDXy |+V8OnD& /zq1o;ooxc}3Wywon|vypۛwqw׬{xͮc}>8O2rOIzYxxxᇇ?xxZ?bb=ˌ/3~`l}_ɿ_~msaW?"^o Ke8<?/q!qI\foB01/CD!>C|( b)^%f]2n AH0o>d0"Yak<%27rHr7r 7IH^ˈp37ro>uEd$o!юod$o2HC8piv^;]j^݇CuڇwHÇdpjrp]7bd|hW2Cr#$=zړV>pF[wK#dHr2>DKx`}hKOj=UuIQ+[SI2%>,"^*/A]Ӫ%A%%>`®pY'FS KOvL$!SC<p*S鉠.`HxCd8'ZvQZ,S /EK](SZ̨uI. [))`6AI1q0!s z 3A$dH\:tԥ.-N:S|x 7rweOZZ][ˉ븟tu.gQpଧXZZK->0IKbECi&APLAAFtc-.7 ކn eF2^n-qs:唼j)'UZ'^K uYO e=՗`e> #.3Ӟ4SO.(=AL`z)Ƈ$lH\>a&ėem\Z,^JŠUmI8pP28i#>A]r EéZqɰEBSOC9mo[7wcG]믿:w'PDqoѺq}88pz*'NwzzG/0eX}n~Vç/iiֿ?be1y,O7[W"WDOA}Yx*e9|/V(br"Cki8<EQ/A-qNO%q3$$GKr!. " xY/pEOړK$HoFΑ77?$o>$Cb>AHCڕw>ԲzS{⤫*BiQZf!^It )' ؃sxxY@Qvq=!de\ ']s]2Au;=xD-EC0|h1c ҥQۚ.EKD'ŔE1aJ6>lː[\v1 ˺- nۉx֥CPD(*륄Y>ՇaUqI܊bi)eY-VfY2^\4~~((eq -KhrSE`QuY"aCi\>u)!ŐwQ/R%nC];4.STr.Rf ÛgJHCU 'OYCtɰˢ/RAC0H.E~~wH\%CpYDschxDŽ  ғGȒs%# íKK]'ǐo 7}I'çc3(q?归񡳜|zxx ~y)ǡe0'}ܖer`û{y36m=!gؓ`P$td6vc|ÉKBy A0!C.VAP.]CPƲK?+u"."u+uiQiJKFŇ(J 2t` RCPTU9H0ӇKۆ$.E".B0RҐ0h8K]ZZ""^֧D,N΃Om]%S7,;Gz q;6nxɿs3."GMxc;yyVq<}x$<*9QZBz~s+ o8|w rnǻ_%t{Id,mXu+Z_֟n˿~i6q[?^LbP/^ ~E0iBAIn 1>ć~`P !n5?`|!K܂$t 9D:$8$Fvq6ÃɁ7hׇd_$BF mS{aIL1ob\07>dpF2;=u]2^NO}hkڧsOzj8骊 9<`|YwO]Ծs$#9d|=uQzP']՞݇~U2 #9\tUjOԧOvQD}hjAiQUm.}bTe\Z/EK})EҪU"X(WAHe\?Vv݂uIDH0d\-A$ɐA2$_N?'".SZu[ %$dD'C[(-KħԧF](]Z*.-%aVĊ!$ ǰH2`!H!Ȑ2$ВQZN(-NqqiK(]ZԇCJ5^̃>i;mtZ,!=݆Ӈ$>U1qY/9$$lQA&d!ApD†,6!0BF <)a!CFwZ]w?%o$N>Kštud鲫J]>A栥jХeEKƥK2-a "C%X?m1ScI%n2/aК!E!aӖćd_Be ZED-\fv%SeɰKKKSK$e,f_up Zt]$.JR/ :a0^((PqCKJQ?uPUd0q[ q /h!q-Aé'REnAįORf\˔Ÿ-'B- JeOAJCqvE)Zyb}θt00a2!$dH\`d> ˹'}ﴴ(Nǃ.&`xwZXw_iW߿Ӳ˞}9-]2>=]ι,{C{b%NE ll'(˖2,r؞>5A I%\(aUAQK n)!">%*EE֗В`+ ԥ۠e꥚"$$aBOtHDIH\D&dAPIO:e"I.'%Hui\K98]2!q[A%nG!˄JII7uE|sS{Jy`ç<]2dD5%!nʹM{b](BHBr楒]iEғpYd1!^%՞8#h+:h%~(_,I0d$-UKׇZS{[QVm}=m%I'[\SV/b1./EjC_⧈*]aӎ/[ėLS|I%ԗ,#8$.[H[bݕ,vHhђ?7([m]BsТuK(ZeҺ`|YE[F-K d/K$46$E.S n'8X/#$(çx ^u+-e}J\ReP֒0Ar"n 'ø!' eo˒ |#;3!'6!;/Z$a]ZO/ƹ|ؓsy0KCC ӧ<'sҺdx,eIF]{=oN6|&p ;ܺr'=}ljKz >9}x,Oo~ʣ Sc}=di5quY̘9>Ina!g4_<D=O& {R/AH]fP4> O񩈺ŭc"( !^",Zz2~XZ^–,C[Reqqi>O;^~$:\&rڪrzOEu2QDIJ)ch|.B=wie28Ѣ[v́'r Z=W=]y'8|#)2IȉK~x)߾{'oFv9/9}7/o>|{sx_'ߞ}o||{ij'{HqY.

      pj6t;pWO]u'bee///~O;Wg,U"?E,Ɖ`ԭED„/v"ڈ"F}Xq[5n+>0F|_⒠%K,- )!#BFr8HO'q".{v$|s%+%C sH77='9$,Շwqꥧh䁧p^S6Ȉ!!H$zT 9$sEQ?9U0b#}~ҕ19ṕҮqhQ([΢,?rK,*]Aߩ[A@X-[H|_V~*">-J,)RT|R$1>b\Zԗ!K3dEŭEq2..JEiTIif\ZuIh". AX/%CR!/r"g})[rdH$.Z֧q Ɵb1YZ_t)ZZêQ_O;2m8N/Uudf8ƥ%auI1x26ԒQ*[e#4 6KX$ė ;g9|I$AAOe~9ԇ*B#SZ<0t]ZOz !%Z[Q0n%-AKBJPVM(g=ȢX_R6$d[ć(HOZn)B/^ʄƭKi"ƧìSMhْڞ|( X,Se]"(bpR$P.{2ŢXaAI\P^zzˢU%e Jqq ʔ%X V6X? A.  KvS)Exm^fP ZKӸq[1u)%^VU=\Zu{`!^K"r%>:$nK0^֟$A!!x ,BR2. %n )ϓ)2dIB[d-E2%72vԮK==t.Kjz)*{ MFSܜ?^JOIj2{wD]g-CttQOYK}(J.]Zv|*%.!CH+UZ/ZKEiiQS[/%eC=P!$N!,s2KB%7r0IR29HȐ!rz9P.JCPeI2܆ sdҺtp9Oݯr`.8iQ<uiі8Ж)JOeʲN!.eӜR!4b G0]#R/ BD !VΕ%!'ɐᆄ2 !q2]Om9·?'-nnM[vi9 Sr0uSGq]] ]eNZڢ$(=QfW]zrz&.=Q:Lh]?Ra<.)ƥuI,-S=-FuIX$"ĥa9p;x !|?<˄-]N8OZĥܰ'dwþaW첫]bհl.&zv G[!aV]OøҒt\a .JP0⒠P.PJQOwb AߵdP!b"EJ4^g$ A`HΓ%>-Y4.KCzڢK/>KIxY/!p,9rHC<,GȄLHH6$uxo=ep|!-| _q<|p_|a;e8|{Y[n7?ܼKxuVuвAqV{]^.G9iKq'N~R7էw ./`ø^ú㻻}Z~~5co+n1QħAPO⠈2~Xz Ư`eN ',%?Yɡ^(S? j**.Ɵ%#~!A.$z$QR AɁ 7%qIHxX$7?t!1?&77iԞ.y̿H"/Knnĥ.N Uowzg읞Iq?$>$B2~tH0diծd>U)]:R{KEPTROb ZA/O%O;))]KIOΓ.-JO/AZ2ASДzKZ/lԇ%E잞wSCA.BPˎ,PY#. E?_rK)KP-'IEi]KА"~Q!>Oк. dH!7,17N/A !A^Z2Xfw%%Ce' E ҥˌvE\zwCiX5JK˝bujBN1\v]0n, 0aT-bNfP[KƇ Ab1.>2[.. JdOe1xY?YC.EҐ.P^.PRĥ5Bp%0~6^JןxxAvk62>4K( "nLdpIYqEP/!!AHhSB q"Z/oLiq'! A,0 Sdq`=8rCN椸{2CO7r8v^޾q˗~r睄z-nw⯽xiqe+NdtO~~w8M~| ΎT#̸nsGNySOmiqrɮSNr8"bݍE0(]z#xOa&Cyjb1 S KP&,U [$>wqi aR6ҺR%zzh1$8Y/P'eLEKCԧ`Аҥe9AQeС%(Rp ՐABCFg$%%/&!X.C"^A}W?OEwDE|7иtxZ6A2,rlDc|LdCd]/_wnn^F6yNWK~o_mn%'%c\NܿΗY7ӷM{㬳_~GQܹ{hH-:h}8ON0)hp2z!18uú㻻3[ׯ_U,OQ">C<4,xx)2X !,%)=ӌçA<+ i Hd1d2@%CFf0$./ 3a.^޿qҽӥ]Oo$_AW[IH.38І=uz9Pwᾴ ]Ԗ.-N]$ڥa(z"d$r %!Pԧ20A?CbĶXfXIz_uII=2 -.eO ĥUOeВx~">-bh=%7U 3^-PKz9K%'{".[geaROȉAYC0d% 8$.[[Z/%X/RRi}ll)[/il9C{rAKׇ)LI|HH.-˗!CВ.oH|h<7no o3Λ ]wދ2ry|c~aOz]7vu,d5IYa]$j Gh1>4ƥu9O3qZ pZ캴(V'>C]L%~z?Kև ꥴ EH%(]1%-[a/ ֥ȐxJeQHb%!!qi(IA`^zY Cl}Z !^&IH\.Y,$y aIHC!!+9v8 >ܜ߾qTw~;|9׃w&.ߊw97o}|ͷ7wvQ=`oj+78i;N)z(h^Z~x{9xX`eƿk1'w֧0>__no?7b|b ?WBX/?RDE_刧"b8PS}:1.=q`YtSW3e qk,N%a,^oI¼şy_+7697{p(yihNz|c% 3%pu;79Oj+u 3Ƈ`o$eZfևuKf>#d~ҲŠGU.;SEc<7T%nqSv0wXL})[0.e#"R"EQH¸lkR,n$~6dӄE[YC^(ꖐBP4N?`,f0nu[?9!%AK.)a[ pq廭j|nz.r՜e-INzNwID񢕣MMr^>|7+7~ͣ g}xG<_~}R'llޜu;f-(&(N'>>x?=6a\Oo;}_;bWBs ?6X"*ZelK1B= b\X.XAG1Y~6f-jYÁA0X^*CXa!BPc % X-.Yn;E+>W%9|˗|Ƈv :^Yv$ 'C[K֟CK&yӼk_^>K7oa ȁK76=,"$$d(~!A|E=:ڡ[KeqBݒhb՗">ed$nz򆖖n֭Ֆ]#X1Xģ]xHem*R"/Em~ˊOYxAMV/Q/-+[BY1JP {H=BFZ_߫{BX{n s\mMu0D,1a G] /,Z6y-cPbr[ad兽xNjٜ.ANu.ˇ^K F:ʋEGO̻/*RJ9t.tZdA`\J]˗n aA\ԥm&شnch[ZE[m<-.QDX&%ePDm`IMd6+G\B kIQ xR"fm6J7 . lXa (WoXnǠaa_b܂ib1HI| c|XNA|ԭKQ?Y.RbaPE)=]bg,7>%'x)eP?mP,Uΰ]NԧU`\6ˋ !. )YdP rВ YnВO_^$ S)6qx8%a8>nYĹYΓB؛, k,fhqEɋ,ݦ(6кpkoZ/!ۇ?_ןr.͌#ojN_aU輹u1CrFTyg`B DI9,^iunzX-Ƹ$ RBm\L]uҘqnZRR0.C6e7r)%HZ_O%A=]6Px$()bBz B=CCӸlE=DQ6I80C`"ӭphHB2tPV7n,fB ֢  {4!.C\-$lƁ5.1-d04ZZ^kq/^^>NgpnzPZ}?-o-q97}ج%1E?7//zۿ=z_߽ !'3FHr*]lZ-{q`co;夾߶b<fw;??jP#w ?) X<`<0 A[;QE<,|/,y֛"C떅X>L5C!.qfcaa¸%e!@b6Y(HH,fr Rs4.b#Ґ"ۉ7dN}/r2qk8v^-a-LTɒ] sʊ*/̰+LX{8Z&.XOe`PmyLZ?i= 5nv܊1n bRH,8 !.F?ҲB4nu[|]WQƥ%,c$0&SJ} 7Nm|PUv=Jazcԥ~zl9m#ԗ)J|i4ć%n[1a k1.-oUi8;7ކc݇Noz=x^DB[8[]rqQto~ݥoo`e-iW?}/_`ooa/P_%.hK]v(`hxH^CkU9\8ȡN]">TT»:1~oª C5t*,_Ƈjգ.bP_q)S%aaAxX,rz4 պ[BaR3~/ +Ԫ~)R.>KPn?[P$t,4(VxӇe1n) q)(: )[!,2@]*[ce{ŁE zlNKٴuxtZCAi}JP2>m|(6XooˠƇ c=ba\q1ja}r"t7rDR-q)^vi=Q;xX /XdoKpħopol yt[o9yE;/fSجq;e~А X,Tu2kXqPVdy(b2XhƗX4ۭ Q&( )V ;"ZIC`bǠqKG&l$/ u $ }[$neN d IXFR_{fmPZ$8$ѷoqkxۧ`yŇf__8}yw{Zڃ) Cw2$ox1HO=O S~o#GiXܵbcHu-h9ynnZw&eUgQH*AReH_껺եOw!EYǸAJƭLKGBQ Y$)Xc%u[AxLYB]VB+ - CU|Ǣ E'˭j|d0:,XVbaeu3!Ccod-V^/BunyR^ǩ 3Ro'߼w~y=;7 kxOo:/}rq6oCP?ywyû}z{~bscycm'e5X''1Öl-f? ӟ믿 Vl2OQ$,_`p|wxoG"ba,?d,,?D"n#?e#Vė%^( DrCdI~! dK YxÇ䐼c?'ˇE[,-/ɒ!9[/$9nyI^7ˇ/?lf7ofB[Ԟct~n vK' ǒd!dq~<h7=[7, y;=E,$(*u]Hw #?v9!MIv!%"P?EA]~zt_VZԥ^VXEi]ZWx J!!AX$>e$X ,.o>JKK֥E9 !7ħ.][݂ҡ\V.S' ?E92trГeb|j~XXAƇg1ږ".#$S$e+xK%dxD

      tR<|H 3 7dAWSwQA]n2$8ҥw<U.vir.NZކ]BOҺU[uY/eBb*[6%.m}ZRZ'h|J\n!$.Oe$>mCݺˌnA}k^ ,6>dCqeA݂֥E]Z?Ԣ4li,2^m}uRNPOV S"A%A|Jx/HﲈQ^F|UU->%CA\JK%$aKKC7$nE0na|W-`]n.=?/uIYU!%K„x BBB³. 2 Gӧ8hݪ źmd<$ %IK`KBJIKSow8I82;2. [ΐEr ! f0aIm|j]d֥uIHH\ZfFקq$ x so-]vuVw%qvr)˼.,-K^rpQ3t9ެۊx -jgeƥe]`y҈pjhlii/U%nO/.]_-X/'BmPƭ;}#(Z!aR/^J`K#)qk1X%!%CF$.]$ ,'.$ R9V u`X!(R>b,KD%K!Ȋu a}Xx#/vy/m2!qxvYpysS&7I9O!O~w/oox%2BK;;eOxSӥeCݭ9y.ˉ^en]i1Of|~~5m鿒O-֯"]IE1~U?"mnA᥈[U,bm0*6=)h|:ABiXS}He%^FQ%Aہ.;>bc]QDP<|H!AȁAP9Đ%Ӑvmd>>$?Jm$Cd$9)О21}7ygI'ttJFsy;Pᒇ֧o>U#] um]rCP=SfSQ~q ېCr \.v9JKn--Jħħ֭d떥h݂AET/> ]DH4KU-[C[/0 [>ʸmX?).*bhQ2>P~/ZP//'tbeXfDPO#ڢ~ ncmK EԲHiHh Zr%qr q <)O -Y  ۢa%uKP_>u⁥AﴨviʮO'~釵 keƺ)IŰB.0b9u$61x>+yϒ9Ȼ.Ƨa9t}1CtiyD=N$!^ڒ"y:4e%A.-]5^VߕA1no(O]}ZbE\^+unKRf%nKPA]ꫲ>AV6n%^S[}UzYeK,]A꥾( f0,<}cChf%.(]I\:4(U3.SwhN-.SC܂m1>,ڲ[Qm)h [e꫸K-.'2 x ])]v9R4ĭBx %!CBCW dI8BBZ2$.RSĐQK>4'}R/q;ob|Uxz[qO牲+KźdP,JWDiKB-$J>v0pbe}WnEU+Uԯ֯$K|W?v]֥Շ/2)ԧE† u %v` nu9%.]%>Ԓк$2E}E]fhn `2qIp-R.[ZOa4._KB!^ꧺA\-S" ӧ 9X _ 38Ȑb _t)% ˞tͱ,-Vg.֧m`R/*[XOcu =I|X9 :X]㥱bܖbqkS>@܆3dT!COO$QNӧFF&L [鶲'Owy;@x<<@<$t;Q'y`s钸$8rey.GhmqևKuybNΓ.A%Á.2,SK`m}~RĥHT}_<}X?fKeOfВ"Kɠnee.Lu;|HORluezK^2X?i|u)ᡄ[[&l0HYO ^j1~X#UKUwAQ2^-> ZW®[EtK† Rea}ħk[q $l}/u %xY[/2:Ȓ!qԿPX/q+%ӧ@Iip8O^Nq~*`>$<'ۉǃG}*NtxEwޗ7r(CO˞X?ť^'KioNO7f9{NEuqa>18"8IVS;hF3'j%H(.-[ԭ6 -AhR-JZ "^BR!n-Ӗ81ڕ px[|:OfRd%A|:1"]emSnሶ%trmnauiX["ħuE(8|o4Sΐ@grJFOӱ8p.g9'}˷Mq2LS'9Xnۡoc|{eO%;ɻ[\$:C-qEZφ=ܞnCPiv}1e|~wJ?O&,~[ԯ?'~Ŀi1nW;GT! Aj0!hPŌOaH|7y*n0>ԇƟD|qAƑ8PAFrdĐH.y !H~ȼa%Wڕ]zb427$%}07O!y?M]N1}jotjA>$sȈVp.?Ob|hdIׇ$d!?U7zjⒸ"zbȸ<ӸڥOUtNZR՞+_Շmx)ZZ,-ҪNZ_nK). W!ŘxYR-%A]/c($.],_$>M.RԧK\(Gd-(nq+OnC.sҺbVKA].Zv/! ˁEbHH$dHHD]2$KB!ȸ]:(][iy /%pAE٥R/uiqjx --]vqObpY/ciA.0.Vć˞.-Bݲ>] j1.MHl$u6! 3# 2dEȐ{Ў-s p$dw}O23{s{q]Va޵ vi≠tQIׇN8kZRں> ˁ/ueꧡb[]-lK%j_j¸- >E%n)4]%>iR&"(34(ߕŔbħ[$(;.C%2㫡u J>4AY( l}]ևŶO3ݧKˮbm9]".]xOxYm:m4I.nC([n0?%6aqYC}Ȍ 9۠n<1wui]Z`˺%^e~q+m\K/ )!Aв!^["!C" BqI$~q8Pr ti9ˁ%dy?wo7nRZs !KA#8IТ<22sm8fH\f|HBӇA2=Ovy/'ohyDZti) %!,ooxo})qy>y`Cw;.G}C/ɓGiVڲONԥKKSO]ATԭm~պW<ʼnb.3~Ox?_6m鿢i0acqw>E⯍b%n݄;`k 6nv"a|ef`&j|x8^%C\2`$ xMF$%o rq !MrjW;؃H+K~HTs4zCv!EFj&횉tN,Y7M֛MEyHnڻºyejo:}Ǜߜ}u~Ew)K,5t\KrP!,]"YAD}gU1Xy wT] vwJhI⍄m&e洕]5tGJ ҡ;-A]bC=DEďZ̸T<q(xOI`\beFZdOP!P+N3XN`ii2u k#t*ZVba.u(kb谂0>ueICs".0jTPRe98 qX1>8EAĩS}ԝA z8֥)ʶAh.,QA|Jöh:B!(E ˇB8ԥQ`u/;0uY,":,ps Y̐28!a;% dq[VrjI;ZeaBB;؝&n~c;qq۰;iSBq[H/wܹ#8D"A\JBXKrH7ZZ:,ZZn7^ 3k.i ⋼9%Ǜ9N[i} m!Ìy[wNlw6fe7-{t+3ٹݘ-ke ]$I0C¶K=%*ơNui=šNҺEP:0C}vDe9,PhQ.!>"Hi"X3()h] ͔!HIHhݖ/R22,a2D& +$#8Ȱ!~idžNgc{x# pɶd;ZvhQle6w;q;xVѿzjhCZޝZ/ϭcrŒZ~2X߽,o+[w`ƟKssAn. XLPa ` K EP//!XHhĩȲ|X%.a-_%a% w" XVEؔl!n%6l$bd9eI$7,b9eIC"Fk.I8&6K6ɛl!~sZ7?u}t~7ߺU;towOwNYKx˧&YQ;tݵwwݩݝ鰕X[zVUZ]ӝ֧wEQ]CS'SZJ*-ꥴ^⫢(_5(%.Z~VeyX>V!q ! ]xZX?҅ԩeP%a0%._w"#BEO!ti/)bBԇrJA"XqKHH"q !HHF[ps rj; -楞ZZO_tѡivjZ}u)]S,*0^괖0C2X$N/a#!anWZ,!,B6q 1$[i-a{nq͖ےYd!$$E BvIE" 7O}/6YiKǥvf{- 63(ܖއf7!NmV./ՖCK:Ғ8N %:,5A(+Zzj=u&ԩ8%.a9/S"7uYNiXjhMb ˡNE]V7LC;-f; :EŒSa-n;eu2bҖ -Ž, +,:N :ՇB(SO BKR%"NC}VQTRrŌKZ Ob!qDg,R1Xćԏ4h뗂}Z8ϖC %%i9l]%DLbm,qvِHB[=,asڑ&p}wƄ6d>nHԻ{#~c~r#NyǍ3%! ;;[yזujwZ;7:˻SŒZO}1,eo+[w/cR -sk˟K*~WB,? BB L6ԥȲ|X_%.A<,7CP ] !"K x#xHMn%yܰ$O5b%y,yݩ]F玛)Kr)Mfo7rGC=w|:U˛v{h2ڝYN5>";YN OSw};vYoXjQ;펢N-)KD!WRKWPŪKK`9YLda`T=K\:.ELF|x\Jq)--R/iAN)am8mEB,kISBY^mEҢaiߝ:N](Sj:ա(KrSw,oagS]e9N3V6bCe9թ2>ħ5aCbCH< r#mDH"q"!A$A"C["|[dN[n7Ӓ8h%pöEF] -b2˩e OmtЪCђҺLqh)8! qK2.quZ.O,R"/)SǩZ_C!Kzqi-*\B)EJ J}'.P:.0jYfƧ:UP:2^4! C|5,YGcq8թJkQ=i7.PiQ<҅Waa!eREP !.e)e-8,iqz)q)` $qX,,K”mc),no̝llAü{J/AYiAž岓7l8:uPZ;vR&8aG!A[Hv_ +.a-OS"ۍHĩeF3$wfѡՖeGvn7y{#nx 3S[/ள;w5.Nybڙ^͍- N-6,];S]ghiiܶZ-Z$4SLII)ZmPZP hu)RJtPIL Z8AP)E&(qP2.t Gqh|RRT}C\WAT.c-HD,F"6l$XeDFMI6_-D7qdmQ;ݏ;YbzE7I3&/?=n:ݧvT;ca0ܵwq=%7CͧΝ,_t0ڝw{HnX.JhwKlYEKBӞq kexҢz|zzhE]Jǥڢ.ĩRE 3"gjP8KXN SP?()>W:32ԥ,%q) i^23ƏJ!qBPҢ.uZ|#d!$KCAIYE7?CBYdGHzRͥ-JrNurZ.ĩ>th]Jx8,/㲨C1NS˧AX7}Xf!J8 Tvqik!()+ +! v$ɆfKȒ BBv[d#xDC;o.[nVg.uʒ7m%AC77ZwUpjF˾#lŢZZ:Ң$S4R,M)Ezj]'uX,?+`\O3^) $EH0>M#8H8b9T%$^e\R$f>u;jW0,:eA)RA4E hC]*ĥCZق>,D=ԪC}U;ZOuPƇ`ұ0"6uYBX)qzZEP&^bc!~6aakyzpCPCHH\ZC BEmm$<%afcξu 7:Ύmg4;bwJ *w,LhwӶ0Ln.0^"y#; YI rAurqswwf0u(;6%7";[[ȍi{a_nt kN7:);Vِ C7JԒ -mZftۜZZ ũ-Zuj=5êCVJ=zU="^Z_)B.!BiV ʆK=$tl~֟ AP-: X]ZIOP`>,_%N!d<= SP2!3%%(+=5N["vsJ.!ncaCf}g;;n;fÊ;wod=^Z}/-w:Sj2֩oU֩;TwǍ51.ӎqYqZӸ,ipwYW'זlۿ?lkAPX/(g"(2X~.q(C/`)"^bKPN A]⎵ F-Q4Bb1+E-PZ5V%Ccs#K;l6.F-aa.,e1N.77${p$Ǚ]0W=a{\]5rC37,Hٰ)i2u$73;v/dgƩ讽&vFP7YN ]6,"7dюda9eCKOD-{v/CB"J˸C{8u蠸R߫:!4.E] K%$:!.70~rK}o$!唸')uR/X"H}R4ć0 -,uhYX>È140K]q)],P&,) 4$et\).q(GEJE<~q+Buwl܇P: ;:.TW1t\JT8ih]`CX%q`>Y5bŇ0.4qf3tCMIHYVe0LZ 3n-![XmM "ٜ:xZi+`! dD-YS6:uV˦C--JwnΎqoq*;AMhz?-3NKS%LY.uZE|x%h .IKz mCP2EJ8ˡVZ?0(]K;'SxKHP)>KW,e0X:E}3NqX PQize\d*RfR)N;#er C4Y)RaPNYְSC$N^0NEm9%$ˎ%AHhC"sIi ˎ7)^,C莲,֥>Ӷ9-i+_) Si0l;]XO-Ÿ)YzgK8݇ R{ r]Ðۍ,fݥ4^z;4tՖ톲w%wmqte9~~̐l.sNlmt1% 6]uJa"ܻaܶ,> -3E),Zu*P"IiZ+є:')&ԥ~"u(uP P ds-S|-ԡژKa"Ū AjCRC[: KK}2%.0ZS\APqX.cY,QP8a aC { a%";Iwݖ)VY;6O ;ݗx<{Ɲp'7F}WNIoFp;o.;$܃K\~͎ݻ/|ݯnNc\0㴖qYi,s_zʢ~-./2XlQgg%> )(Űi-SBn~*񰼉 d`&f-{" >I8%rInY"y#_"Kܲ=ԝ޵!%YNCoH$$og7Cr3]].6}mMc0ڡh(d& KrP`:_ww_0.vex Yb ڻKZ:(tPT;tG]RZC>CGPRcXtPkKZ1>+$Y=u%N!Bil>K]J}/V8ԩRZT}!q S)0e9b9%OOKYeuS8ԇJ}(%!SB&k,)A!!C\Ci<(0tAwC[/^RPZ֥twj]4CBݩqSZ.ކ%X┠ԇ:ڻw`mN3.aOqI0) Yf{n[bφmr )aFOYNo:%It|Y.7mq$^is(-]iKKl][ZKtowvtU:ڠtqjUiQRZT[!A):Z <%iũ^K<%~Sh|겈C0.A~",ԏJRC%„ }  ^ZL0a\8MwԺO-/m]2X.eV2XN񐉇*R,Z8tX8ÊsuCC)6z1YèK0dB]2Z ,%,X bxN 685BI^,!a#ĥ† y#q"a,ݱ3;eɎ iwl!nh2".e/(uw$E0aýć8;F=;#aDuJx[d1!_I$VklreoleSJ Ԓ[n77|He9: }Xw]P;ذa۸ߝZ&ՆrsximjN`;Z-Eb A_(BR:(rEԸP!>! jZLX uI=)ĥEgUߤ .հbRUZ z %3ɐZw"!eE,0(AbS-8BȄ6 !bȶH6 vk/ q6އg!*BEvN $ 7厷7^:%;SKE߸NJ}xÿ;^G31.ӻ2Z˿4^al`LI, V,=곅++[8!^AK}b;.x ++.BOea\+( ƇA  aQ곸%N{Qi9šrY,!V< ,/t_$y'B};(ҡbE}cGKԺ`!,^$,Xˆ}c q5bP8ɒo&,aRʖ;k/C6ߌxX,ĖxXCSqᆽ,,uzM}VntŽN[oM|sкhiwmaý%qoi1K}6L `Q-6Be\ƥ(S!%):ա$N-+ԡ,0!.5NqN=ay OE\C%RQPc,ReCJBB42L$|\KhT`i}ȝ"61. MQOE0I%R/{Uqj9SS-C}6~i~wl~PxX]&qCQccesX+NqZ.SLQ,/r)S- ">iYeq Ei!AHv,4XA˩Y!d{VHui]w)q _6Rސw;v%e/žcs;[vb߱"; w u(HȮxJȐ/+$;atwyw(EQHvS4况1=#tmw.d;5崖 }ud 32uqv,3ڝR;S"qo1XkѲ0,}2,evOA9Dfѝba$ԡ"$N)u)J:E0%(]4hLR%CJ/ ˠLEXCh+Ԗ8EZ)cQĠNeAC k[v,?ayNEuJXt|UC0CB]04 *S,cؑ4$,6> aom;"QvĩhvlOF;%wޝw<}* {yw;wg?wN뛯lw[^\f|2Xuew˗~-3-)P/_c` _"~yXeCsaTlah|gayZ'YdC"qY$ M, X$.KdCMa#K,rCF8.o$ )7ɛS,y"69el'q;jS ~CS?0ڝ. ud#7,Y 1ڝU;˝lN] ˸)C,\w5ta+jCwv:.EN5.EZuSԢJQ=^/%oYO+ćG)E/P4KC'wxRPթCA22-[7SOZfw Jbd'4^ +8FZX$$> Y$Kpw6Z;-ZZ:S-zjQZҢtXq*2X,f BYbeXv#Vb4>;igWߋAti9d ɲIqd)SᖸNdq psp{j}rCtwҒ7:;O-ʶikkrCKX>Ki=-Nv.,u'رv;3ġ4K%ԇz8%ZP<%.!zKh=%.x^O+P/SDZ/!.X.%~0!q)AAZaYkgqJ¢BXqCQJ=}"VK<.iѩqo\E<-.ЭYxR">SEJ㲱|',ørZSć0CP 3.CnwAHPqق r[>CONY 8u8%NsC O-t1^\vKKvicÎ}' ø b>NEl+ $N{XHHX%7m}2E؆ҲU/JJ7?wYÎٝp{{e-}gCכӽlwmc Ϊڱ7NJmiw,蝖4wOnEִ֚mSzgmՅ: jZRuj8ĩhQ-iUZDuC)J&" CUBKvSR`CX"!%Ȋie߄T[xI<%~n,OݝER:Eğle13 q,b۶?5~nko',k/ TSz,TiR/!.EPK]"~jq,kQt9͸i+(ETa!Ah`yo.e%EˎEPF{8e9updžwC ޝ?Nwg]r37j_S,xCK|Uc0(bT\6l~&_[) fwb9e_ (;6j<ġơ!NKAQE}Vk^JcaߌzðKАg>OxS:NPuui,8 e 6,aaHS %tZK]wK/^2i{!7 yE):uSZ;]lCP,Owvܱ0 ZE qZEIXtOPeH-1 ~' 5 Uܭ)8N JK0.f-A\ZKB)0CS?Sv)^R`a┺,J08`ŻagE&e!haۨ;mS}gC7/o%!iq#Fݱs na#Apyj=JpwɎ໇)AJJKS롭~󛗍/w9n0b,8Z/3^ay7>5>w~_[,Oť>Q߳,/gqK,.]]CFS]N;Ȳ:ˆxDBL7BHqBD|qY$.- K!$% 6FSK]]MEWyʒ,MWl 7!yh~tW=$_vtvzqCě,$߫qjqtr`N;6AQZ%d!JǥvPԩEUZڡ;jq ÎE%.ujU{jQԩRTP%Ƈc%!KĻ:xUf\Jթ*%,xJ-Ou/OM!;6rRPJ^z8%!$.! $!qJO Yd N;⥴ԇŽt蠴jK%;KCZ u(xӺK0!aLV\ K\qw,O !iSaE/Rz ]A,Oq8Ne<,fCPP/.U`c,?)vP?[>Ļ/ERE`߫R^P`:ěIqYqӺa!N!.q_KB+u(†PBܙ:!$.񴅆,qH-N7YNXuc-p POf-:ر{ ,˶axWv,L\Բ9NO;O,|6|C)vYX %tnnPKtsر9m^EmrÝ|n7s+JL:Mrʰ.-6,]Xujiȝ}i2 uJhVZk4BkՅԡZ%ICCC>ԩQA:KRqSH"ćW!uYd!!(vDCQA֛8ĥ)aRS!NI Ydh2IfYCĩ!>ZtDecÍ߉wfˆ܈CqH|n'CZLcCa]vSWh?$]݇HBCv;%>8>ZV[CF]?Ul:ˎi\v,r_tg,ܗwSs˟_~~_[,gT-?gy?-/U/EP`O%NX.]ĩ.k!VX`†KX+$<čAHq %B/dlnfMK,P#d$_CI6Y_=&$7?wˎvlCiww;Ԫ_ti|nK/u qZmi|7K8:\"wES]q CNk!l8% [bW_s+N bue`EHMHI/B0֒,{nzIB—!_: n:hZ:ڡCG,] N-Un.>V[RҢՖiN J*2j8E P[KS8,)+L}.t,/Ż8%d\JBCOC &^NYqY^ˎezZu,fTQXSqGćzY[C(k%7$~6a8>SY^ 7S*Sub[-eq)K0e9eS0!.ѡzl!X^J`Ju$.!aBH/uBB%LHHX |;3СCK}/` ba6>6R`Ӷ;e=}HSBMƾ7M6"AP -SMrK)Pzdž$Nwn;66Bn; u}/7r6:[iY Si^O_dhiUZRVԒZwTbaaqEJKB]4>, Z:PZ:ՇP~Î O"~SV &E!HD+0ڡ(z%(xa9,$4^POUa<,fyPOE|CPk-{)a:XŸ$%BBB|a͛mH4IaxKecþӒ8$8);ݜ,C;ZE7TM?~o-~sߜCNey.ei-e}y7>5>s/e?V!RC;.QC/q .˯v,Sei qi8Y˩X>ijS a,Y!aGq qQ,{JwE { rJ^&B6.l]{HhZ=;kwes&$oM}vhktԈzYJE)uO]I|\1N^ꏅzY~A0X"EH\eV֐%x*M봅"@h]8E0B1!;!{2$.O[QZ֢߱EC[j]B|(uSJ]e^R,:,bs NS_9fwfޅ #NBH&B'-e "~Xn.l6ܸ9w!K`YC仈-ev}Pl^Ū)CԢ.uYl4X(RDkUawO%X."A `EӄimEƯz PI*wEP"Xn0$q8,⥃A]e%irKB'iqY3尖7gA]v4C<$e:$L8q(KPDƻ8B\P,A\qYįv,4^BBӊ8ea\BАPYć87-A)ӄ!!! q9D; !CP0XNwⴂݩ}w\6;ʎe]N[ؗ71Iؑa۰ewjxC\va:$A֩ ~Ŏ %qڰaVn؜;?H6{w=ۍ ); i/mwbaahe!qj=xwǢu8FlXBb0;Y 8R hHiH"C=ġQA=axC"ơ4".U%*6q٥DPCJ!uC]J^aTNSSQ",,E]~Q?Y^4 eVi/[X^!a!a|e<a6%NkI;ΎFdCt ;6%qN6֯N37.c7/s e\6/ecC1v>,{Z/Ƨ?7k}/mNOuI-_įE|*.K uKeQ,0.+N,a9>|A\F"Yf[KC"!$7r,,H6,l&J)䋬S6?$Z_rs7_Ckw;erCkw{v]h1ju*'qN%NO1=E\^TzOw?)Cě8ĥKYCB6Ouw._\ZU)faW! ' $  Y.uNԩuj.:NKZO֩uSbagxA0~aW` a\BB"||5jCP q B"B|!AKlS.q),`aS !dWIH<%q!Y%ěSMKjQZN ;arKؐ=m^]9uwn7lti*څ ;vZê;F --k:X`ơR-&4R?)ST:NuS.\:K:E8D]Rv!ud}wR#C֥ԡ~.,`0 E 8-!֊İ!.ńxO]MB`x !.;6? `dž oZ2|*adž8xC".uSI~si^[aHlA=iJILWu*[P_vib 07óK׆6߿? +oÆ7Kw6Xk.ó 2.qiDYb8  &؈CDC [,EB \d\0&BMM jz%\$d]"y*ԝlnadlrMꦝtw&;ݵeC{^uSRKP: CFԪi)nR^]"B6S'ݵ;jSВ (t]M:1iQU77U7&u(z(ES^ЪtSm-ԿDZH,D1& BB%!oԡ}Ef=N"C|mlB,#V'OZ˰L":e`xSjYi11?hH00-uSO21.qjtDR\,SBkujQNZw -S]MZL:Ui1QgU-ŋ~Zn(2ʠ~Ke~-K%,$2w7C|K=~_<ixrOx0Y-0K2QOZKP\0fQa` ⡞qCN †}wjթذ]:!:abaf-,c212aZɘd#A:mennpQa!1} $"S%]r,$ں!$BNt2/ 7~8 vCF-J[uN\iE)UŎNjвOmQ:(u֡N-J-JԡĒT⦈K"~m,mPApS!Nh2RpnWx2Y7UnNnB&tkҸzai=t3CݵN2qJ07A&B=0-Pěx%1hewpX? vKCө8i(!$ [!!A< 0BBAB†kw(JԲm;2mCujni0=zolF&&aCauMKHP%!>)qx_qZⴗ-얭9}ƶa'%ذc S1.\lS:lζ9\Cw^>i/ n$$$')ki}4Z7i(ZkK8ũJJJ-RLRwU?Z KQAQC7Q$⦩%jRRb"n C)>JD0JKS &+j@t.En tz8ųdP_ZY<$N !b%)%eO6Mn'{}-ӎĻqEͯ%nf ;-)^eǤ;62,41ÿg:\pz3L^O5QRWdPR<ggE|'~O܍A&û ) ˰LA1ݸ!n],zHgEQ_e`dL9=D$x=곘n&&! 20,!~!X&APj j j400à>=i-uWԳZ-۴ z7]oBq)aCB 7zSKRPKp8ɜd q nNAٱ̰i!$ - cXjp'n6bk eNˆHœ[$q SM2څ !"=\!A\NKH\@:]^RZi:muNN7;nN׫1Tii-QN⮵TPuECPpjiQpqSV"~_j-0}601zdzVkbX&FL8DDF0hM?h:ġ~6QK8MtR˨9nz޵MPfį Az? t:eO`8NNNԻ)IMiIS.LpgO)qT,؜LaNb,#$NCCHIHCx B Aӆ!N ZJԡ:a0ÛRÎ'3l;6ޔ)WO20/8`wsGiQ-.hi+;.l6·o$l}.Hذ+Z9$A˶9:]lv`cClszZzueNc82' s8޵u^9К&2'U[w֩.zzV0)+I(PL 7m,*#$:w:ҹRʬ/%RwCaC1)F%C݅S2_+b!Nuq7_Y,S6FB aXvlN&/)ݗB':%$7Q_߾C|VtNvLá쓉1~4՛闦 g?~߿a Z/NðLQ0 u!%z6,gilNc8M&P0-c  mX" A!A0^@F!0$.Mb tHSjz\$C{H^ȋ1\dvW7iex/Jwӻvz Nlt:eЩvZKݴwf ҩQL7m^eh'_j-U"vlSNRUZu;gl@=LZT[RgEPt`"(ŻOb!ObT8RP7DI|V!\`SBISA eq$N WE,Jщk-2Q}2H,!2ٰ; etJhiSq v:,SS eϒu(E"A\9].qjد6ms;X6cnJ%yw ;ori`/aٰ3'ݙ7MZ2@ܴu:fҺ֩u3wSKaRxҢ%RPRé4njzRnNX:':p4ԠZ2]Qwu xH-#bIvK<zq_өśds q3%q7'0+a De{<vw v+D,;P컛]= mn٩Æ:ebxS4+a:L_~m=-Ǒ$VYDRhY`؜隴9dóGP_}dxV VmlRK z6,gG`\&F~2MFb!CA!BnB !B6& l"dpA I0<B.n^^J?dO]Mc|u殻eSM:1N!~1:ts@l~Iк⢮J&S(vW\Z&JIzvG=uC=RoeXBኁC[ljZQ_?KxBC=`9ݵ>31k-ӳ"w sz8աZCzҺC}eT$b.@Roꮵ:LROCp29M,!0 N!gq%fJ؄\n!J%\b pJZW\Dw7EáںWZB6Nwm-eNT[ŤMSM";eaaZKPu3CPPzhe0uZ>O&:PGqgԛ\M2b -┸ A%n:Bj ,!~z/%~6n b8;P&4;0 ?LK?Lu3,gRM͚>Qo(q(u(C=İLK0,.2PbC7ӳ8\84 )uC|jb B"c N { KH6C,WZZ˰EʵӆbԲ#mB,w6 :wbc)갓ݲy(Nx8]6)q݆}'ݵ\菍M.رY؝:6vr +ײ0'ۆ6niHa\0Z>HSͩe Z9I TS u7;ݤUV0iUL!NS뇴 -){e {,E1PENmIPqhPQu uChiIZZˤ$Ͱ4ZF|иLi7AH>R B|LOM%1Ɍ8$-m|0ZBw;mlg`_7+v^=k}*n^xWO^WToʎ2,sgqa~00}j{oK___?RSKó!>yS,E,&GaaScؘK #7M3.X dA2 dld^Y&ӷo~hwe!yC2,CMƋMN?$Sw^T^NCNKBwU7 ,MEiU]["WxzS"ųz6=ll9vK BH$N;K!aCZZşNS`iGbb'FNu廻!Nq8|"x,J< 8%NZ!߾j%Ng[=yyξcԲ3Բ[yqecKleǶq-(-ζjmsjiZOZ7mZͩ0莁Im\'ӜN ithIKIhuL[S CFvfa~^1,5biw7u(g%a:M!uC1I&oA= 82t7q_M|Pij8%KtbRq)88LlXM1CَmcRoS_{u3/OzVK| ;6w;u70wr)øbxr4}m=\i_W?^SOK)_cz(@5`:L2,uFx6,0,E`w>ܵ:|s(+jZzO%Ng߫C|TiI⃁YqWP_q 0}X.x(iZ%R8}NzKmbts9= wu4)qebx(!φC|T aZn\8u%LyҾodg`ۜ[0 LD, q؄8R.ԫCݾoNeKiHQzZOppw v.RW.(Zq8\..qz봫*ע6}DwJݵEQ%Qux1J=!( #ӬtMhM:]w_˜eb`zSXD0=C'"S|4&gm L0)01O朖l0,8L!5'ӛDRZ?O9SSP2=ě01φCPl\´lľ̍]PLLlġ;qJSN̉0fb`g2͡B͎+ݜw-Jvn(6oN7vla'Nm#/x{6;eٜ6˼(xPbٜwR8|wjIĩēK[- &pMRZ6a+;6K.\.;;l6ҲYZ7{b{0#aldlO7%/^/Ljyņݳz%/WmvHh<6.}[w uM yyy뫿o001,)b?^B}-Iְ_+ _/mP˰L#@˴ u3 S|21|.bXnx0=8iF !!@؂bq AdȆAI1 vCCileHob#dsW:\t~׾$éW75U[IܴŤCSkhD%SKԺNK0T;H.8uzza+XQN^}NnTQZ;gc#A|TZRm=ީgPUPK}m"uGA7C,Ib%q ʌC,: OM-P+OSbob)uN&7qXI(ZOaIh=Ss~O$>YC|Вͩԩ0}mc:dXC}x%2jC,A;B.`GOԲ[6|a:]b [)ApIpN śn.c%nzN {\ﻫ8$"2m\u--uelQ: RJRKh@ ӵޔֳRoD<B 55>M_'Aъ j!0aKdNq]K#nb)"*:82I2-Sn0)jSnZ;~Ӭ'ug!uC~Óap>PKC=C02=wb)ˆ'alsqC021H L89K0@bb-NAB BaCI؜ZJeOlia;;{jg!>we`6쾔`dž!l]#>WɫO%>H|*uкKws]b+vKVۆs-l-ƾ9]W6ҡ;Fi¾c22c2'S-{épL AIJ0CBJѢN][wNz'ޫ:)AP,!"R2!LA1,z(8!:w$ewR!މx'AHvě88]צX:I !!d`z1# N @ItqH䲱CPlN >Ғa /ab!&nݩP?m'ebҺZ&-ivZKVMZd NohwwS'QKHqSm:]:u(u>WQw;UE{Xx2&áj:>WK=i=CZ%"~HkAbWӛ!)>ÎT=CSx;.ZbN uj=&oNYQJ}_7mZJvozS<x8I!aNK|T:>7@b Nvovld%ZBɾo$d8%.X:].ҪI6Z^:%N-/uAMJk)u[KjkQuC1KnZ(RzSx3ó:տ&?1ѠӒxRK)ShKؑa8$ބaēI?/p(&Njhv6nƬezg2]Bk8LqM8]Ŵ ԡ>h=u79 z'zԧFs, $XӜ'A7EP)18%$$3$}NO.-NAj)lN;6\RzS0zA┐TنТ\uA}FBˆͲذyʨV{c0vF=iKs:NSt"L2Aތ$E;u(ܴu:z m=Ih"(ef&82wPYK-qu(¬S1릊"LN J1Rox?44 AR 8&!b? á>x,}wq8!NӒ S}WM<+k?$AKsW?|՛Z.:^Ocwo.Scl `:צ0}p>5}n}&%⡱PZ{k_gqaK-fZܴ p1,%) Ͱ F~Ka OeCHI2DHKc -o>ڰcfsD'qɶ!bwH<2{WqśZ.EiUiN\W\lډ^,mN?BwRZiԩu3ZcsӖޔ8zL M8]}hC<AS C=MC7 ze4J= ԓēDb>҉0Nݜi:  7qh-W2|tNB|T81[j~RMLoZO7uOFMKi8 Zwz!NgC׺hZl>YZZ Ffuz|uA;Wx(_-lx9e J=t5ysO~Wo4,U@-]R-&~φRK/!0tSClMpCL Ln` @00l B a)"s 71ȰK, 1H< E= "+t:e䫌/no:雚oSwLOZԢNI00-NlNݝ ˤuSN$>ABz(`m>N馦S!:E-UE]MU|ja)Jbh]j~-saP !W °)LS @\թNazw)qUZK>88ŶawpUZi:աJaz6φe:aX.slC=NuM~.>W3bqq e8>ر9mqڰc/ʰl`'wœdy{SBA^b oxsK_0it+/uz{sjj߰{1 _PF7MZw%:ԩebM6]:A2zS EOSDZ8ĩ+Iq70"Mbӓ9EtNwό90:2ӡ&9& ӓ!9 NK\̺D*~.UHLp5,cl؝&C!$N Dxya PR:%N[6lçPvxf ٱcwZ;ջ;P.$!()Yk_\CKg֩u`Æ9=Iwذ9lmsؙqeS;oe°ooNc8b5uj1iS1U\xA=8)ij_<:)qW\wuUPWu*]a$@Bz>Uz׆g!"Zߍ90-qwAC,9cC6CvZ4vw%f;l>'az/>=/ oK,!>B⢛۷o:V[@=kKwT[Űմ::i SCQNR:]`:e"d8 Zx.A|d"0=ա!Nq(8~)11|WeNez9}ntewuSN3ïMM]1|4f́`bX^vK'/uYqӴtW,jxKyyqZwsb#ӳXn"PjXÛ21|]CfCH FKutھZBF'oeÎROP;$/Yx(鮵|]+6:,JS~-ēCHij:NSK⢵l IJcHeCŽQZ_ 1en)ڲﴌ2;/it 4ں9i02E<ԩD\O%N[E8)EB}0CPK1 LbNJR:uWϥ) I#>>"qJw!O%\$.B|bIŻC<⛏^U\;Ϳ`let6w;vWvihax7]M|n{o;'_~뫿7kb;x.6w~PK|nKa~@|7, L K0= 0,CL !M  6K @CD|Wu 77U l$NN/M/E2a.yqAv: IwMtTNԩ:exbZb)ԩ&gRNw]'ꦭI/EEijҢnT\=C_Tٴ2|Mox28Ż=!SnqTkS8)ğ+D]UKK/2|*qjK-q51 4-aXj)aXaitLwx&,ss|)_6PBMDR]HQDzH1F)S-!e҉]MO+yq S:'TIK'St~"Nex#xJ"kS8dCwC$AuJwu'$IZ}mA &W L?5 7C<ďv S.~.%guu]0چenze7 sE"K-өPjIMb".PlY0P!ZE<ճXjm.)LK6],qCcn6)aR@ͦjz;[67X%_=߰;%9/d:6oͲn( [tǨ/_enB`n(c.EB0Ü9i`">3}0x2ġN%Tq1ͰTjؽ>sE,!QA\언RKð2 xC|0}7ͰĻC]MR%q3C,32݌9Lӏ LLfwUN%Ǝ㋇Ub 0C8 Bl- /H(eN;ZZvZ6W<;o$>Ky1«CvO^.(/_˫ճ"m-Wp?Né?^aŶ{ݱY6 ;n̝ݲm~u_Iܼkbv6dͶ}e{uwIŤZa` 1Q `NKC}Vթu.(jKNLwA}0\EPd:e]S0껔 U%ޅAULZ "%]-!N-4w]K4O'SD?W'8$b8%]Z^};/N2]}b]Mblw6ׯԡjCMׯ}}}V?Ku 'Ox6ge0&`ܰL *ne% XbS"n!$bq@v Axy&X8exN-JfdxJK"ByAD攈k 훋NNwK;ݽ8ESSHȆ((q8u:e d:NLOJ (-ꦝ(-&Z&S":^Wԓxfw L!*!~-NqxK|Sύ8mZC|!>%!~R(uè9I>7h]$~_]ZԻ\=51C,⃄]B7?U?SH|uSK,^7_}es uN,u/_,ͲaXbbY^w6uQ:mNWͳs|l`"Ab&}qK"$_3ez_n& .%8!& % !Z]$"x%ACY\M-_*TNw_Т %$b)]⢓u R:-0>(ԉkQĤETZRCZCM]컋1pUWi`zh]C|~LQw.~!x.fFUPOFwqX67 DRzSn̉n'ns=!>1\ԻbzV* S i\(es5K=loSK͡.Zwsԓ] W! %!{x AVتo/CiQRluڽQ7vXKC7ưԩa DCCջCe:T=4q>miA'.nbx0'40-$m=w.LsZ40I'!>3xK YLZCҠngM}7Ӵal 'ĩQ&u>x8N2b)z2jKc> WqC,!͜tô w]zW&FeX&!qJH8 ^.q SѢZ] ZJ+]UwN.l_wwīz%qoi]$cwS.SiZ_mHmswa6(kaҪCK¾24ͮuJ6֓֩ue`!]թՓT:MR&,JBk)ajB,;6C1j q(J!*Ӓmc eF-QNЪ~dB4)Y9GNN<!^I\%NbصxMՓӊ_ObAS1P զMi8 !8xė$ibNDabb`tc]xli,N[Va +tk ]6@J#qڥthRġ].ūi…\;˅ԡV+oJ^-,enxU^.v,ߴeNLtX:ViN@H]evsf(cqU:nx5ؔ7S!)Nuuдk P",s)ޫObMiFqR,iNbL o3M>ū ECPM'!7 fqV2&`q+!ޙ&⇡*މJF2`ucb`8ě!AHqauՉvF_\uV,[nb] {ykxzr*uMTZ7OMBVKXKZgד]_{EyeeX.\,Xqv VVuᯋݜml2\i0Ȩ a ueNWcX-,hYWZ4&RF0Ӎa֡(qM❅a3Q/̸:h{ftugxSZw:P2Pt'N VIʈC\u'(J*FH*6qkE<X {qzoKٳ[A'S,n<{g6Xc߸81xS!n-XWnXAYO +t4}l?>??APdP 8&S4|pšaX0gkA݊p"&qCX8 DlġNAD,{W $]"ⱐ" `%v]SbjWNP5iA.`U:*Yh)(jW:Q8Mab:EUhJ'UMpҢj҉:iQ:Jmj`UwSb!ԫYQaS*GsqպLƂ ǂPKOaO&P#L,vfUBs&t@ݘӽ؍ŦNq#6MpUUWn;qn8M a &>6%Xdx,k\-MCUD7,^M^Pa1AH "N!6AjwxwZֺZjNW͠e-]1j7C; ߆W+\@1Uv#ԛڵ&!>Qe hKsq]mćMS w❸/Nab ua1mV *L'u@bԽ1&s: ;u 񁸊Mܘý1*uXm&N݊Ca7O&Ì4 8:)Ӎx'LXL F:jSC杅[!@H%$$ UKQ V慖֡ԭw,NKjWӳJhIh=b]39uީC=wW\=ErH\>:<9<[I\rar!걅/ee=ٌ:, $+/rQ֮kH*`N2- ]뇶u Ix'uuUjN 0Z7Rz'U00PR]JUJijSTZ&^śq*&]i%@ě\]ºY|"?;UU{NBz^ݨM݊{uZެai[iuHj`YMPZ)]msMo| 8\PxL nĽgkEPS8)Nī8EL ڬvY 8šn)$B '*AɅ,"dStI4~HA$  ;&]bwbҩV$v]:ũv-]QU:š򬝨CZZꂵShIZW[CݫWMܛĦޫguCs A{qcb)q^Ubqu]F<صզU\Q`w8ՌR*.qC|]7î6u: o0fM|(qD00%Ӎ MiE:,uڬޫHφ#7j\a ~qZ.TMF^Eвb`]Q`-][7t(rC)w 0MqR^^ԛԡ%1PWCtީG2Ug%æUծ/awMGœu f7 :]&ՍiSLUf tHp֝ě2ÛLIP?iB| v&La77pgzS :L M :\|(C<98Ӎx'@dx8ԛPWO}ðabCMKXcw BB JkԮu(jڔ֮ jTMXlX*K|ݳ]kbǩ;w8x'5]-j _Jra ! /\'²0ʲwVO3òUsaպ2Wm՜n ص~h\PLt+AWn.9IhDB"]YtLE VNJ"**qku'L\ja]_ESՂW .CuէM7ge7Q*+N÷VtXj3]8Mn?w+OOO}~~ġ~O|,4V\#a`:i8)o"^!$A[)$"qBS&C2E@$,b!q+kJ(J:īd`HY\uNԩv ]ŤU^DաnNJnU/EQFY)E}ƴ)ŴyqMe6МN!>YUYc7q/^ oDNݪ CZ},0@ EP֩ԛjݛ3ꪓb,x L/Ё:LY7b.މ[.q51ذY%q+&fXº8v;u(uW"ޫax5=%WWMī 5JMZnj^F:X_WUeӽuE.\Jmj7Wԭ0U xhNF0vԛ-cjɠ).>Wԡv!S@ZW&~{kH0? A unL^M7&PxXXkn`jS@\e2c7<0𱁺wꗦ@^:B uN{%6qk:7b77ZM=bL8Up bp $$|(.XYNEPֳ/iHhI<m`ŷOPSyq#!;AVuuO.!qppya,v]Xy]1hIiu ֕ACk7sjjkڥ&L$JhG18-/[Ӧ2PjS7fZZE ؔUݘ2}>x?LxUī!qzŇxMoN]|'V-iİ7,NEn-a8,oY6a;&uas?WGN sE!tfb51PčbESį^@t"E"N5"U!CJKZg:ɠ%hbj'YE"v "YpoX/v F+^5h)UQZ"*_ BP)Nu*FPo&iUjWvSCátƅPz]N8_ص6A}hbVNq#n=I ZmzuP_ŧ0Ft]݊M~ LF]Mš~Ccq VAN9(Blʺ2am0 ꟪j*b^MaA5e^E]O(n2ʪuxaqյX1An.eYm,txv50S'#Eʹ bfc[q+8ԍNqAj">?tNM܋S\ Li7vCEY8PnLEWSɴNfbީǦ[n _ĩ(`: ĩNA}jLX˘fE(01ƌt &% -&ԦniEoI!&v KHA0x kiZ/, ^a-{ uC8; -O WAL$n$Ok=iӓ]1ג,$+ ^p![W֕/nݲeee4v-aגhK@7xU?)(T? kaRi8&$nIM26!aZ t8uRMJP"C1*Eiun%E^^7Jg-Oκjb wfʌtNZW_ao8Lnz3{g?~!8_ _3ܚ~Kpu/Ľ8|sXqC\%q"&S2ī8)u "$"6Bt "0.bq#A}vbӢvb:*Y$ Y$.kZ EB⪵Kqաډ:N8ԩ+J:ġEJ'JTҪWEZ ozUJT=uU8Ԧ^e;EVH܊S|YlZ$~{C7uc=0ĝĮ L2 MjW ڵbu/;P_b8qĩL d8%nEbzfqk2:ԭ8SUNP)&N!qqAWuzSiզ,XV VbXW-hj`8\lJmʜv[Šv7q5SV&Ԧn>WqM onp]!vm}*5 !6!7{p536+.~2` L0݋qq]kfMݫ;;q_hdbzW#iӭ8M0pZ!6AI%& $ --J:,n@RַUϮZ7n$$v{SP݊{}k=mÓšOux3OxFUobג%$\XÂXe]Yeiӷov//$`NFڭ@c@1Zi3}hW\Ze8nŮ:(Z:&jabĦ!k4UJUx`Kܛv$>/xs!\2܊Sˋq+q#xFVȷ'PgbWbtUN&ֺB\}@: L|wxL?+OOO}~~Wo2ToM 6<61|I001C}#LĽ8.*^&WC"Bl8!T8!N!A"B ~ EH D,^tuJ:T;"PZAiꇈ*N! ájETEQ:Pj]Fv*ԽҢ]^jת]P^՝:2zS sXML?hnĦ;q5{M7X^ML՝՘ïUf= %víiS*F;%iw7='qk;5ӽ:ĩnԛ )f8ĝ{ACb7'b^P7jS!wE<T%q8(jWoUCX\[mj7laYUJmj7Cxv2hSwb1RVD|.^%čD|6u]$~;#3݈[c&pntիU&bnxl:aw&4lV{uotbUzLoBԛ30';6q5ԛbz&❉`-,)Nk+"L?&&v B BBnصn$n(ݨԗ$jYKX`NCC=TOTSߒPBKbגɮu|6$N\}CBb%v 갰k힞xyqc]YdjpX v.TM9:Qִ &[pՉAk7+(&C뇦zL_4݈]WuKG%bZZKҖץDRtҮzK슸vë+N$.^%J<[BbuQVGi3+ca&fuk8v/nMg?}ד?VQPudP] b71|]ܪ]<61Y}hK1[A)bPI]AZ"xqВ]iB<Ŧ%]Px$D\NxSӭ Z/UWPB"7hD .TB"64$RtDG 6"~{8iUJB/~#v0t=ycx' uIK6N] QWE|jc`2:Yx[jL GuRA.F뱸HR Gívu_ZVGٴvc`łiK U^v/[ONUl&b '+(nLWA +V nu`b50\Ma7:PٳͰ[ÂfNHlW+BbӺ1ճqUA05.oYKZW+?R'EPҒোf)6O>O?mjgE qˋ/imZ-ֳ͋lՋ?ZZZ`]Y_]²Ҳ,6?ڴNZϴ, sҲ`fNZZZ1lZDJ6MKuUWE]킺Nͬ@hlRQ+*vKUjSoBK8h=xgb +ꛖ'a'}!v^1 $V_`j7jbU<0\ Wbbx6uUc[ߚg? Ǐ?_Կ w}EV<6] L;̰7qvE\$8 V7ĭuT՛v!77&,jWJ'-j骪x3H`(k]$1F (N,ZY]3sN⪈$vG-t:*6u2ZMb:&}5՗nN܊،pM즫<#vʫwnuzNOl8 q2wM,<]][Íխ8%I\$v!)$$IHNJѢ6uRI\.((uGݨ:n^VbI]ՍzC֧$YW_gWy%.e 1XW, cج1hQ՛<= 4.L]W7Zk:1몮ʬMA@"ڭ6 i3ީM"6uֺ5]j$$&oW_x(qWX6+EX'n͂bbu4\͕حhC+^}n?_OPQPiA^1pտF킉U}t5j &%vALWobWVD|f]]* \ٓ]l E``P?EJko*6 ]DIQԦt$"$d[P1I"6&BdѮdВIAǪv&vEqNZLo".ZU}Tuh 꽠$u525tcL0V\>]}__(NbqR꾠vqߊ8XlZ靠. $_dx(qXlZ2$FDZ.IL"Vs@|.nQG!>i eɂxzSnL+UM̢n '+`b8MA0WiN8 `YlC.8 ]\ ֺu"6A즓JPf:+uRo`8h 'MF"v#~aUW8p6|.dM 'cE(Wӭ.~5~)A}NhLw q/Άq?0WdNjgq "cNP;Vܕ;6 V'+KYW^&6uR{A=8Y|Y[Zֲ,/i3/$d$n.Fϲ,,+lZ^^lZ/cxNHX`N`N+chmZꤴ.h"n&,.ĦE1iYHlV "ӦvӮ(b$.",}n񩖧v?dug8 V6 Vnq8Y}`A11Cꁕj6 xvq:Ά{ dž``?=Ǐ?ĭ" æg` _víi7PZ&w /^U"q4`&A$.v!oUT}. ~HD.$'$C2@DDNT{Uu+6 $d,dhd!JkU]"dEč/튪ҕVNM vEډ$6*ziQV)J7״J|OI܊M{8]F뽪:ͺjb8&Lō'3N:TGuPw$LY|]7U&h8 &aؤvq'x'qP8bWQ|"qPjmhxSfzSuPUm~*>5bNj3Ԧީ7Um0Zwzo;uGq`"~IQM|WIP7ZězhEJY]6fUU WEfMx30bje '+c1x,6N\Qe]{#%΂'7°.n$vMɊnI܊ I$$$$])ZK]EbZw.Z~nqG"6uRW?ղ,E,q0//6o铋gW#j], 7-B2ve&E&q41l:鬈 LAŭ8uhUXmhNKR GO $vĭi0Wg+ʲbjJ- VVn+U<6`8v+L`zl?_ORQP8hmFl .+nvn\즫ka7UӭqA W+"nqAFAl2Dl"YDTQT;H<۵vvJ-%$+"HUěِAHp#ӛvh=I\EmI\z/[ު^}AuVěUQmL[XPSӷ=qG85u4\cNlR/nѰeNMOMK VO"6Y⯛9Pae-XWG KԦvqTPк/xh)ի2 MMԮL'Eԛᗘ,dbeL2F(֍Y6Ij*AG~:Hu*&]/qRGA݊`:t: nUfp0b)cn GWY܊Oզ~nz3S^m郁'^W L"[qx5]\$~`8! xœZ:,i3(?]_WEAQv V6-;jSgE<&YWpj]ϘIxy~6E`]Z֕9Il՛fY<2Mi0T:h'qR u8 s46"tuPgU NJ]P'e Ij7]&>В^W)q0\en%v]lV,v(V-ꝠᎺ]$ gnł[/OCPԬݴg (LWn}uWu oxaӒiXlZE' 22@J{(@8M%H$bgY$]$ÛvGxq+7Tԛ] ޫEIx2PZ tڕV/&NJBkQ|.vuWb׈nM_StIGElb7 qWPu4xhz'⃸Gq'\UѴ.iWj+7j7x[MbW_44ĭծIڅYܳV,>HUIF$NVV,uNʹ*ދ:]mof0͜d`+nLɴdaS'E9]L 7 1uU7:H| w%fNI7tUh}4]buGieuc:)ͬj=5I7 z/:sE|]WӭᎸ: pVLuDlSYxdM,n$Bt:Y"f&6+V]l$6EkW+^Jl^]IYCkWVԗAQ!O+VV ķX}]݊Oqϵz~gZxyYl֍Q-ϕeaYXWº,6--ʜ^Z❧A|e9l$4.ZRc8HhhE]L'ؕ.jeqԦ s"6q2H]PgA&cխ:Vw%.Xua [Vytؽ0p2\ΤixgjڭX"qcq6] 20}[]MGIحXzll??~ϟOof>]WU}v L'aŭēGDH؅8xWK)aWWIDA%Y2A&bhQTxS?1i՛ڕ&!C 2$nHg OvӦS;1ΟڕNU  OGN:I'uPEi]UH_~]mZE([NڴxFmZ/vueZWS]uVG}q_wVl$saq-b:.nfjS_G#Qw}uW}P__>ߋD<6)20⁸d"J*ĮNkVwZj.IaSE[걸YŰNB&Yu(ӭ/[NMl`شFWԍL+VmĮBj֭kzl`]U=gez3h1|]ܘuc ߈M+If9].v/Qꨎ(ꬮ;azlxg$n8Ս\~؅ ~vq!A\$6uRxuO}y{x6zީz$Btײ:h}jŊ}6Xŭ88͊Zcm_Z77]cڴ'V$6-s4uP'%qNGu0KкvA0m2XM&M0QQKҢVBFiK]XէVO%V_7ALvqVwXWZ Vw-uDUh8v+}WL 7w?WuɈN\]Y|a}qRF0bb}qx,Iě$$]-j؄B"B$"71?$WUEo D{O_SUL$%qk :X-~~gA"P~/KVinѰF0) AYG_S!JCXQwvq2m(ntGZGu>U84p_2 f:dN07-Q"nՍ1VQܪt L$BVWY"> ~caYB8 qڭZw%ڴ:,"q,jYuPn{uElh,YܘN.[]Ŝ,'ᇳ/a׺HXưy}eYXWZQ:<9k1,L/TppzlQ`:]ܚ G(:)i7Ȥn%[bjSLz(imVUL<n$nM"8M8V`v݂eqN>Qwa7&^}{ד?CU+ou5 ƴai7|01*j:B1}QW!L_oJC\]V}Xn" "7$~b *~i7l-I0DMJ*I7tI&M@$qx7vq2Pn$ؕ":) M:Hh8 jjWM}{[uV΂)b3|AmGn%b@C_"t De&/%uTɊvKztQW 8Y+vA)ov]U'ĮjESħ$Wu(kPج1'MPX*U5101݈B\]]"n&n-Y]Loe b<OXݗش'A}RSVͳ<}3:['*vu\F\aeb8k<=]-߿7[x^K%,ͺZZee :e]YWL/vO eRO~N]'vn01}&OC&/EBڅ L,ɰ :M l[6 MbӒJ o,CkYlc/pkoM⬘X\čnj7QZV,:[ëa7ċw}_~?@7<3W'3 ?>~^oqUpAW]HB8&.V]lD&MH^$q&uQUZTxrO W6E2ȐDo,' |tNZW$NZN6-k B\ĮŤ+-&-^IꢮZEQU]uGznԮzU>'*A$5uWKbӺ1]v aֲ`V__<C.(ĭ%VbW 6q71q>exUw~atj(:i]9UZ'Whn@VݴitJj鋦u2!01ޚ6cx,jN0W .ވ*.bgu+nY;jz_}h~%<9>ī8 qBָouEPB\č ͓/ꬵJQ5,znջnL?%bz7,M]szW³[߾F⪵7WC-oڴL:'-Űn8>p#(tc(ELԫ$6cbԫIV g?~:Y OY/ L6\ _3QgIc`wwC V?XkYlUmVꢮeukA߼k~_6Ei7Ůaynx51|NP h|]UwϋWĭR]hI(:+ PL6-:o(-C"AU-Xim.+jx NRԡ(6)-q"hA}NP8ԭCšNgb]WĻgE%է.Zj ucI}BPڊ8 &LPEWa8>:Ի։p1b7ë:~7hłaWpGP_71LY 1]v#՜6ħL9f?tL W1+E9n]d4NWfbzk2\ cfMa7510݊7⾸x,C\IӮ(Pgu_ݘXyrjxc`z,n&q,.Y.v͊UBkВ]n% 3;5EQc9 +zWtQn_(!vqI1Wa8MM(sjM\lvfNt1pxpXng~7a0]Р~N킺ӜE&.څaSwNꢮ_50ި%q/7صP1&d`]'qkLa:.t511`x,.&p1i: 8I*qj1#b7mb3jx, LL LE\Mdq]qo&q'' gu#Co6YU7Z(WAmz[V^ ,=Ul+ jkL'WͰvs _̷o6ćZue]m2, Aw/sf Z)b0QJ}݌CjA c8LVĮd-1lݜ'}[\ _tkYj1[n:L}û8L8fYXWZC0_Sӭ"(ݴxL~/s}_+ _20IO _P_S_3_Mgf}.8&]l"v)[!q+q$ y A!(jӢjQZW B8,d! Y w5W2_hQZŮ6--&(j8!.PqV:i1iQZZ.$]-v/>8++qWBnիoŦ7}ϙ~l~/ſ4|'=1|R}]}8q+>vvӫ+],!.Yjĭ$qq"6 < $vAv]쾣(u 2H d!f,jW EmZo֮v!q'ﱋC@jN-vCN|.ٮNe9^էu_]s$> FHջZխA݊]}JPF}(c?W܈}uA*H\&ӫ0}^}pUDmEīi70]ƨ{1@]9L1n06 fk%N" s:opֺíVluVY M鮸O(WOv;dJ0/WXWqx%PP'~)qp鍸+^ح!v}˳ @lZCKY8czc+^TꍺZo5:[2\,NX|N=6,֕eYW'`NZ,,X11u1@|,gwWFboimZZ7`]]Zpu5?ƜF랺hetk:VHlZduy+º:Yubb.>m"&v;&Xɲj׺1<0IM~/'rWU&c0}ט;>o Aya7./uWsj" ERq~äu B ,^]FJ'6qQxAjW~C $6 E]Ƞ+44ՍaҢ,uEVJPRl3\L_P&.8]܈C.2걺Q_7sΆ[tGwMbW $X5\wM?]P荒YQvDj01sRjڌj8MWÍ`6 oLj7xc nY餈wUFQ*qCan6nzjdi5Q̺nԮ>kᱢn g3bW__RwĮL2 ~001}FW2Į~bxD^lj'g c%(FꡗZ|lt(V2jYlLtƲoĘZ`A9|]nM"nI걺Up'Ż:ez Ά⮸Vx_eV~p1IPӇb7x#n,XŦ%I`u,.bUxU"vAUW.V7gͲfoaYXW6⍅a%NlƜ6߿+aqx~&{o7-NZgZ֍1͜ ACBdwOu%6U70]j3&s8LL'<ŇZWݺ1H\WL lbz_bӺui`8 sVYYjY\,XݨӇV~/6n`#q#qgissz_UwԭUZ*>)WVŭᾸ+CWcu?EfcpjxGljk`1lt5"æUZ8č,>E]j"q5Wu2ڴW$LLgskA}I03B ?:F2?Paz8[KlV] Ovk Y]@}qVz_jSgAUWz#N+R˵61fNpLb`ū LWٺo~4ޘ>N^0/~Jjbi ex(nM W}q(bW[=6\  V|ǂU ?o_{O7`0}ғF}N ?'kg!ވC8 b".,ĭ`  (0Qgq!AH,d@7'v~Iڴ(k 6]=6m:LZW-jbҢvXm6nuA}I:}uUVC2ܚwn2\ BAWW[u\kF}R}Mݨ;꾸UZ*~Bܪ[qnŭᾸL_?\]ԧMBk~B}tæUB*.8Ԧeq (b"dzJVkW'u6'EaNPSbΦ/(}q#6F|NWuWeN L2}lo@d"ވ8Uq#q M\8[qVguEmU}EÊn JYQJej]o.qWBZ7ծuUuUm7']s`uVgu5}pdYv/cqk50M?w LM E?!Lcukp1"v}>os_~߾}/[Ec00c`6;yq+Cxgq_Ugq nvA`tb:La vAM2&v+i`` (bbu"vMĮ$]:Dt(]:)VxGިjSV=Tb79AW::V_ W9uRԿ88}qp+Φs⍸UW_^_j@vA2518uW\ĭoUWCU>oMb87| NPuW!^}q8EWgq8݂j!NCi=V>E^ӡ6-Xm V_PW[FiuPj]1\+sZ`Y\}nE߼n:k]67Ɗf- b8iUjNt2:ZN2]aba 9]6nu4_8[WWևfN]* fe0K&x_yCs |wCs`Ns}_>'nAܪVfvîn wxlx_|]0B[qgAcAqW`qXiQ[m+ip;TTbXQd@^BCFr05a 5:IGPPTY AH7U$n U(CYPU(EY$: b!Sl$iePB9b|BAl"Nvf[|,ʻ;qZYŪ\'>{ w(519mR~Rb#Nn+~7i͗崸[f ) ] i6F:堹IOiYX7:^.ܮMl(gf[+UrR'!(4Pw,f\eBĪOIS*V9('e2"~XAr{1(|^Uqx7ۨltLY;JTY̳4a6aP.grPV?'!xya(aBI,mF4G U77׫HΚ]85V q;YJ+Wnܦrlk3^49ʋ^1Nyï&A*e?w,o Yݪeݪ:^YUh([A,(S[eP:bU([EIByҩN::fPޫUPVAP6*/(*iyqR09(rZQ!~Q6BCu76Ϯ;q^PA,zjV!7((4ߣi78onv&N}v}PnӛИt+g5[HͪS5zPzUC|ܦ[F!>4c}nx2T2q`rٕr첲Uەn͍ jwe])(4BhŒ([PĪ(Cb] qڌ7LV3&*? ʗ/-g%Tw;3yњZͳAFh ibx}uRPÏÏbo6L{}3 qTHwT!Nh$o՛3MEkV;Z9~~墠b(23ۚ|cl5ۛUx5N5<<,(ClbBI[;⬆P.VoVnӭ:UEBuU&Wʇbt4GxW(BQʪ]t4C٩*4tYC e /(eU+ +HbQEbU:3Oyv^lH,$V8 q۽*' qB|Jkt[%6b(]VӚU7tZ34tP95uGݻʗ+A\ֺOi"mT((͗F: yn'-V50Λ. ʗ{sB=LPeQeӓrޙ }r\'݄ΛwAb({*؈wEً\IO!y堬 qAlw'*<ӻibJGݻIbieV7 v^;O.ĻN!dѻ8Y7'GO7WK O<9xfWvњE: AU !fCլZQ*G1rPU7"*~bc\6;i4_{xxx~i:X;fE bܠ qy>gCY+2*[ex2Bb(+ BPT tB9*e(C9 ʢ f U bCBQHP*VUBPr# :Bb+U!8C.Ⲹ]}^9* ]&~72ݿCY14ThbUTs^⤸S\Լ8T 5X8{լ:rP$6A5/VQ"E|]VngNP>/(7(+[e((U=8C _4tRjy[ќ1YUP~RTܧ\V^wq'mrXB\t8jVݢ5Wb-0[~219jvT^G3//v؈Y==9-V/ 337ÓvlPV*GwAYc?2u} 35+rZ9( (~1;)Vfכ_{xxx<<|JGlOݢ5G 8[5tzE*B|Y1WCCd([e(CwZYYʪP(P(eeP0Bj2[PɪUYTМTޕU,Aً^THYTH!(XbhSnWqf8() ƫ<;(%jͪwBlA9Ӛ/QehS6.i9Ň? 6Isrҝhʢʢwu4_EwW)8(C\UJ #6^vͮӜy3i L(Yxff~jmM:15n1;xanb`rTe1MU0ۊa ^^,y~vSZCsmo6}f{SarTxBħ=M~cF+{h*C1!ݷk.+_jhrbcv'ы̮3;{ԏ?:ᛵQwn 1S|^XQޕʪ eQޕ2<Pz3U(C([ E e(Aʪ;LNB!UH7iAY*^HPc8 UHbq+Ū{qY!rYAuQ~*z6I*p*E˚y6 1Vw'5t'4׉ݥXC*hG+G=6ZwA_35C&I\C1ߤ\WVe+כ-Έ'j'U9+qTCӚܬބьbvA!WNlT!VI|,(C!b qWq3^}gZ5tgd5c-fՙkLw娬, oŌFh2\(?) U+[e!BCʢ"1Ī,PN+UQ ! E54娚f+dv^ʢU鈣tCj([ (tC8b1C Mيe|,]GUY$Uvg=.p*߮M Un]|[rԜ}JbĻF5z5AB씭VNuN\).U ||NyW.m$NnbUhƓӪ|ie5 YUnVe5faF?,|,q;qV_y.OwYu;}0wS;`bhVeUeQx !Vqi 6:_"b,^U' h9\GAhV=Bh({e:oP6z])xuTfM~1QΘ-qm&׋󺇇'_:y lњsUtݺU (PGP(Û"blBY8!VB*CY$lu*E,PVe(!$ T B9qY|N0cCipFBؓ3ar}5tg43wݪ4N7BZ] v(++ j|:ⴲ*{ACG}&̎fLC,b(_#n 9b(t{}]w&tf iHg'Mb陗h3j. !hVVb놲~A9Ûyy_L^0S A!([1n7=yxr  oлuttDwnwʻe,r؋ʢBlFyW؈Cl$U(G e 1U[e(SB+"E " *Ļϙo eyqY9).ڛ=$6<\P>E&t߯Ynuf[񵺣q&iX)g4 A G.~Q>V>Vr^}(nӜ ݧس_s]%M(Ō f)P~R堬(΋^F03?h 횭UL4YL3wŌir4<;)j~=[YV=bHPxcoĻ';L=>A e Cje# 1cA2o>Vff[FYU}&Uԏ?4{ q2/|96eQ~R+C*rZ9- e(AV^ e+N+Q9hTCfXPT9J A E3$!VB!q{eQ8 A7 >s&QWN+[UNt_/>e&qVOIHبiUUͳ&/~C͕U\TtҚ?w4QEtC#~]T~ѬN9(;],'!qY<۔jIsFCw^\ܤV\VVT΄*frb((Cq{"^}N7}}٪ON/;h 33&LOV!ޅyfgGWVd#nIOV!.{3le/JwxYfEfq挆^]4tXTH24 0]eAً؊EQ9E*(N\ A!F3=^i!VFief-&Ìye&YMb,yvR뛍8*鶚؋fė&zNB!ݪ=Ί[ej5tΊUVN͓fW)kkh:Hktc弆3畝*CYE9(, e!8PTيVU EPh E5 f([t1!(2U b V!A[~ywʿG|:TInU>oQ/2+5fK e+V^٨f,z A8+t V>\VVM:z!(C\ eqrVyitye[E R* *΋X!֌2bFCle+:l03M3j8jĪluBumu^ًu֌BsXTPSGUWge|fnhWbrHQXi? {!y3պ 8@CG]9S EsW&g;ϮWh0<[Lff[4qt뫓&8!q'y3OBl85Gqb;V*qKѬ˚nh7ˌ0ߓsf>yx#::%*m=*P{张\TP* )A)b/ HQ!rPJBًE$!V! bqAPb$V1bUBW~؋lNY CC 1e ݧ%.}0WWn3lѭ\)~Q?'({]KsA3tt+[*CPh5alw $rK. yqӜV΋]ëճ+]'bLn7d1l1ϴ9jNi"b-f5yIqB\5'QBwZ5-]%.˚_n6zyiACj]fL0ݓ6O]^3/ӽ,b(_#( ATPr^PCNيb#e 4*h+: [u B"PU$'1b#bTP~5י}2mwiV߫ۊu_"nWsw}٪;Q{$E5WC|Q>ԻB<ܪon}N~+V}AيeoŒ٢{Wxb+9^}N*v"Nhcޝ7;m7Ml1Lh- Ehޕ69g'.kQ+r(;('[CAN9>4~mn eriPPPLI)DX+ b@olb8b)XG+tCeB&$*FR+h5W2JR/OM$Z𭊵ΧR1)k8]r3u4&eHv߿ן?$I$Z1'bCc-8Z:Gq@~)[pe<: //|6bƧICD򩀡AgSlՀրƆuM $%XJ hl*.Y8qhF V$h]E$ICSdҠ% tg+&R6 y:tNo`3y`C"j$z1  Qk dahΧ$YKJ 4%4>5H Ƨ(FnI -`T(_P\ErΧ,[4Γ\r}\3X֡$4!I$IT)K>5 يcS,-9 \w ;EދIa`C 46Rdd[!ٮZ0jd| 6KYDc3+F.3F#I$I$]I258[KdйIq@z)6lWۊǗn8un^^ةŬ!FnU|X+zB&P(`XJh̒/VOخEPBq=u[$ոltF#I$IJV@jB$`Ԁ %(v U@pb̊4Hn\xvbi`@bawh=٭Ak|h@%[5&@ 6dA Onu>uP̊Jnq_٭w$IB$ILZGH ]S,G1 ++~Epn'uNS,InIX!I$IzBa%dsj,$iB_ut#M5]g^_,%uMq=B0)( 8_qΨsx5C"IzR+$I$I?TrX㰄Z2)!?u |xQ:G YjG0)(n8Ng9MÒhPlu.l*n8I$I$I:N2|zV$˽rjIENDB`././@LongLink0000644000000000000000000000016100000000000011601 Lustar rootrootyouker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/ubuntukylin-logo.scriptyouker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/ubuntukylin0000664000175000017500000001773313260315532033455 0ustar fengfeng/* * Copyright (C) 2014 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Zhang Chao zhangchao@ubuntukylin.com * * 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; version 3. * * 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 . */ //背景 Window.SetBackgroundTopColor (0, 0, 0); Window.SetBackgroundBottomColor (0, 0, 0); // left_1_image = Image("left_1.png"); resized_left_1_image = left_1_image.Scale(Window.GetWidth(), Window.GetWidth()*left_1_image.GetHeight()/left_1_image.GetWidth()); left_1_sprite = Sprite(); left_1_sprite.SetImage(resized_left_1_image); left_1_sprite.SetX(0); left_1_sprite.SetY(Window.GetHeight() / 2 - resized_left_1_image.GetHeight() / 2); left_1_sprite.SetZ(98); left_1_sprite.SetOpacity(0); left_2_image = Image("left_2.png"); resized_left_2_image = left_2_image.Scale(Window.GetWidth(), Window.GetWidth()*left_2_image.GetHeight()/left_2_image.GetWidth()); left_2_sprite = Sprite(); left_2_sprite.SetImage(resized_left_2_image); left_2_sprite.SetX(0); left_2_sprite.SetY(Window.GetHeight() / 2 - resized_left_2_image.GetHeight() / 2); left_2_sprite.SetZ(98); left_2_sprite.SetOpacity(1); xx_h=resized_left_1_image.GetHeight()-50; xx_y=Window.GetHeight() / 2 - xx_h / 2; xx_w=resized_left_1_image.GetWidth()-200; xx_x=Window.GetWidth() / 2 - xx_w / 2; all_1_image = Image("all_1.png"); resized_all_1_image = all_1_image.Scale(Window.GetWidth(), Window.GetWidth()*all_1_image.GetHeight()/all_1_image.GetWidth()); all_1_sprite = Sprite(); all_1_sprite.SetImage(resized_all_1_image); all_1_sprite.SetX(0); all_1_sprite.SetY(Window.GetHeight() / 2 - resized_all_1_image.GetHeight() / 2); all_1_sprite.SetZ(102); all_1_sprite.SetOpacity(0); all_2_image = Image("all_2.png"); resized_all_2_image = all_2_image.Scale(Window.GetWidth(), Window.GetWidth()*all_2_image.GetHeight()/all_2_image.GetWidth()); all_2_sprite = Sprite(); all_2_sprite.SetImage(resized_all_2_image); all_2_sprite.SetX(0); all_2_sprite.SetY(Window.GetHeight() / 2 - resized_all_2_image.GetHeight() / 2); all_2_sprite.SetZ(103); all_2_sprite.SetOpacity(0); all1_1_image = Image("all1_1.png"); resized_all1_1_image = all1_1_image.Scale(Window.GetWidth(), Window.GetWidth()*all1_1_image.GetHeight()/all1_1_image.GetWidth()); all1_1_sprite = Sprite(); all1_1_sprite.SetImage(resized_all1_1_image); all1_1_sprite.SetX(0); all1_1_sprite.SetY(Window.GetHeight() / 2 - resized_all1_1_image.GetHeight() / 2); all1_1_sprite.SetZ(101); all1_1_sprite.SetOpacity(0); all1_2_image = Image("all1_2.png"); resized_all1_2_image = all1_2_image.Scale(Window.GetWidth(), Window.GetWidth()*all1_2_image.GetHeight()/all1_2_image.GetWidth()); all1_2_sprite = Sprite(); all1_2_sprite.SetImage(resized_all1_2_image); all1_2_sprite.SetX(0); all1_2_sprite.SetY(Window.GetHeight() / 2 - resized_all1_2_image.GetHeight() / 2); all1_2_sprite.SetZ(100); all1_2_sprite.SetOpacity(0); //文字 text_image = Image("text.png"); resized_text_image = text_image.Scale(Window.GetWidth(), Window.GetWidth()*text_image.GetHeight()/text_image.GetWidth()); text_sprite = Sprite(); text_sprite.SetImage(resized_text_image); text_sprite.SetX(0); text_sprite.SetY(Window.GetHeight() / 2 - resized_text_image.GetHeight() / 2); text_sprite.SetZ(106); text_sprite.SetOpacity(0); xx_image = Image("xx.png"); xx1_image = Image("xx1.png"); xx2_image = Image("xx2.png"); xx3_image = Image("xx3.png"); xxnum=15; for(i=0;i 50){ all1_1_Opacity=(progress-50)%314; all1_1_sprite.SetOpacity(Math.Sin(all1_1_Opacity/100)); } if(progress > 127){ all1_2_Opacity=progress%78; all1_2_sprite.SetOpacity(Math.Sin(all1_2_Opacity/25)); } if(progress > 78){ all_1_Opacity=(progress-78)%157; all_1_sprite.SetOpacity(Math.Sin(all_1_Opacity/50)); } if(progress > 157){ all_2_Opacity=progress%157; all_2_sprite.SetOpacity(Math.Sin(all_2_Opacity/50)); } if(star_progress < 800){ if(star_progress%40==0){ xx_sprite[star_progress/40].SetX(Math.Int(Math.Random(10)*xx_w+xx_x)); xx_sprite[star_progress/40].SetY(Math.Int(Math.Random(10)*xx_h+xx_y)); xx1_sprite[star_progress/40].SetX(Math.Int(Math.Random(10)*Window.GetWidth())); xx1_sprite[star_progress/40].SetY(Math.Int(Math.Random(10)*Window.GetHeight())); xx2_sprite[star_progress/40].SetX(Math.Int(Math.Random(10)*Window.GetWidth())); xx2_sprite[star_progress/40].SetY(Math.Int(Math.Random(10)*Window.GetHeight())); xx3_sprite[star_progress/40].SetX(Math.Int(Math.Random(10)*Window.GetWidth())); xx3_sprite[star_progress/40].SetY(Math.Int(Math.Random(10)*Window.GetHeight())); } xx_sprite[Math.Int(star_progress/40)].SetOpacity((progress%40)/40); xx1_sprite[Math.Int(star_progress/40)].SetOpacity((progress%40)/40); xx2_sprite[Math.Int(star_progress/40)].SetOpacity((progress%40)/40); xx3_sprite[Math.Int(star_progress/40)].SetOpacity((progress%40)/40); }else{ if(star_progress%80 < 40){ xx_sprite[Math.Int(star_progress/80)% 20].SetOpacity(1-(progress%80)/40); xx1_sprite[Math.Int(star_progress/80)% 20].SetOpacity(1-(progress%80)/40); xx2_sprite[Math.Int(star_progress/80)% 20].SetOpacity(1-(progress%80)/40); xx3_sprite[Math.Int(star_progress/80)% 20].SetOpacity(1-(progress%80)/40); }else{ if(star_progress%80==40){ xx_sprite[Math.Int(star_progress/80)% 20].SetX(Math.Int(Math.Random(10)*xx_w+xx_x)); xx_sprite[Math.Int(star_progress/80)% 20].SetY(Math.Int(Math.Random(10)*xx_h+xx_y)); xx1_sprite[Math.Int(star_progress/80)% 20].SetX(Math.Int(Math.Random(10)*Window.GetWidth())); xx1_sprite[Math.Int(star_progress/80)% 20].SetY(Math.Int(Math.Random(10)*Window.GetHeight())); xx2_sprite[Math.Int(star_progress/80)% 20].SetX(Math.Int(Math.Random(10)*Window.GetWidth())); xx2_sprite[Math.Int(star_progress/80)% 20].SetY(Math.Int(Math.Random(10)*Window.GetHeight())); xx3_sprite[Math.Int(star_progress/80)% 20].SetX(Math.Int(Math.Random(10)*Window.GetWidth())); xx3_sprite[Math.Int(star_progress/80)% 20].SetY(Math.Int(Math.Random(10)*Window.GetHeight())); } xx_sprite[Math.Int(star_progress/80)% 20].SetOpacity((progress%80)/40); xx1_sprite[Math.Int(star_progress/80)% 20].SetOpacity((progress%80)/40); xx2_sprite[Math.Int(star_progress/80)% 20].SetOpacity((progress%80)/40); xx3_sprite[Math.Int(star_progress/80)% 20].SetOpacity((progress%80)/40); } } progress+=2; star_progress+=20; } Plymouth.SetRefreshFunction (refresh_callback); #----------------------------------------- Progress Bar -------------------------------- fun progress_callback (duration, progress) { } Plymouth.SetBootProgressFunction(progress_callback); #----------------------------------------- Quit -------------------------------- fun quit_callback () { } Plymouth.SetQuitFunction(quit_callback); youker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/text.png0000664000175000017500000013616113260315532032630 0ustar fengfengPNG  IHDRR8IDATx1@?|VD o o0 o00 o00 o o0 o o0 o00 o0 o o0 o00;0 o00 o0@0 o00 o o0 o o0 o00 o0 o o0 o00 o00 o o0 o o0 o00D o o0 o00 o00 o o0 o o0 o00 o0 o o0  o00 o0 o o0 o00 o0X;*3 =DnJčK,n,ƍh,1XD,( "j,AMTty;s6ߕAs=OD(4 ڤcݝ0|e^TkOnˑO/=|~yq9NN`ﰜX^e,طЬDDDDDDDDDMDDDTb1x#D2ҪREɻ{蓛^>sOd\-ṱn"gX?Ad#2V9"}r:9=[%<R^zȑR[=#w= 9Sdx.[@q.\iS?ډTq-DfNtrz9_1 ?`}r$>!z= DDDDDDDDD DDDDX(:Ęݿ8db 6'?Hk{E6;űHobדe>ۑv}+/H$.j8޵}9۾@{oDOCیm'ן:wsvvr"tߵϽqM=EhiS:cw~r{}Dd}lx|\ؓGc]fy77/FWNdۊJ#g%-MϿ<""[twm)AdwvO U^`X7^dY/rCυa?>I:g*3ʉa;!jDh?. pq08LZ.1l'Ǹ)w}@^PkDŽ@[^R&""""o""""b޸ㄘ#~;}b01UH.a+[zaoo6$FϑBmCa8Y ~,"rah-GwOpr~L4I7Oy|ϩ0xQ1o""""ba{?lZ{u~f޷"չB7_Gf{aOVnTO[YO߷ii[c/D޲A"oqO&0}5VDD[,*®ss cpoAyyK0}ὅ1xu'-3c<KցU"}p632 ǥ#mr{dڿRmaz'I u:؀, Ͼ߳.aZP *P,'t&"=L 37=nw9$cǗi&R>&2}g)~ e4xl5Ƕ.-B X1[*C^M ޺^W0PS|ן^ΐ3Av+:B@:""""o""""bƴ0 +՝Qݎe .r?=G>P+y<\ፄ~A]k<"""ut e6%xkw{`F&T>0lR_&[]+:fao5v߻G˛V~"u|GuZ 킾"kr~i<0x(Q jA=>E>Ԅ ryDDD2TCx>!۔o-X7 s.slE85-}۱rK~ûgGנ].9Ȉ>qI|)2fk.SiJLP?[TPσwvF9%-0m!nB55xW*gWwWj3xQL+'ø~u]',h` &Cm.^ ٦ힷ1}Gj)l҃/8wCHK?\wX#"""bVcwhPH D3EڌN"et+>þyOऑSpzb)842ӿ'.<^,x[]϶{>[S~Ƕd{+#Z6_.򮝘+ ɄQxBm>{A#M%"i D_Q"dz-øzuؾ܄BOkVb怛I'v02kQ"NeǮT,,^E6`]7N^|b2 c+G8p^p}ͬ1?{u}.2}kUK-JEV XC%D!e'\yh%Xc6_|Ky ,Bw=hwkO@ D9:m;6i~pyUn 9a80\+ "m VPQ^q=6T brqG !4] pm_6Hy-#-Tk{KYF:G6?Vډocz^:w=U ޥ1x1x{>fʑݥ2v'c4ՉRнa3?}`+솃kFNKB_EfrvrZoB}M>_yN? %+0R!1V^k@CNiWΚF]lᝇ6{/3K۝0xNDDDDMDDDSqBU)ݪmvrv^n0 f;,/LG-z,t?'c Ԁo>/yUmYZr&ν|x>4lcfފ"oɀrޖHgk!xׅP ʗ1k1oM= ՞;3xWZ?mtokz^=J[z{*%wBDDDD DDDD j>tuͫV[wԴtn<<ѵد&= 0F3W6:YևqFd].47 QL {coP^bгW~{7o<T2*Nm(yBłJ%ї}pw#x ϻ?O>3u 淃sh o?-2MGϔl>q|N%AyR }k h %K+$FJ" HIpl$bꋅد90BghBk{ѶGgFNlSmNuDhc3\kR+65xC]w% Nl:c65U<7]H;eyq C]h.Eޭ=x*3v Yp\~Gb`qz_C 4 /Ox(3Y6X.{I,B=xK """"b&"""b \쾻BtQ"u\˗eNphjLwjdĭCFpۭzN }JSל{L94xv>&ơE\N ߝxdw,^^>zPޅEaiS:<>/).컺zj-^3\`xl%F:4>oM;G1xS 6` o[[%c咇g"^ssj".6-v/$nzL`L|sP ?:15_2xgpL;C; DDDDMDDDD.xFsM3D/1t#rnf5u]f^nz^ 4RT0rNNÙޝf(Gk5q^뉟6P-T͠[N͍1xG>Sqѻwx>~P%*4߿r;l^u0zqmhpo,-w |.E]!s\~q)TK䭱7)v̟X@-B﷠f٨s&-.(w4ѳ/a Cx3x7mVA[&RlǍn?4_Ȯ3~3 {a `?,n%5%_cmۺwVGv6ezy2z/{پ+/4ݱиv#N]E utSog[<-u5o*k(t5c/#J?~mz;xX^a* 1 ,xX [1s~#`*6]b7ˏj=%CE CG/uZ5rv?& Y?ԫ˂1.=Ru٫=v ?v{-2ѫV1kW}Qh3H_y3x3xՠ. gwۏM}W!rb7FGxLNTcXa(|-xlsnoxU`a 8:;a{ B DDDDMDDDD!x[MlY ߙ"eb[X4&aTCEOT-;MVհ~w0 f\`|X^+t:yBEhОXC׿"Y(WmѣJ|ߎ9w?{</8r9>ӕKg F1x3x=63yK ;խ#Mݘ&n鸌]܏w/àc75TCsa._ئ k->z*ؔςȤG]NQisz$7v;63l40ZJBwGo΅i0`  v0+a)o'Oj#t&ߴR%*tl1`|KNrCCwek;``}t>VR 3Jo]NuxҤ͊QBwxȹKXoy<*g}ͺjW;wʃ7wE mBN |wQb13Y0@Sxl-B>0a@wh 7:T( 3g&""""o""""º{XE$|#]<&w\iWwu#.\ƶoE5z{ǜvV@}xm#ux>5  `s)]4^"Udl_(ҷڵEJs% XnKonX {@b ޖPAm5t./-4:T/q 71xQ!+?}lBڪ"a'"~f7C!{D7 0};ʏ̎ME ܮ{c5b j-վjI>WV~yqu\U-K`\k7!|W;cǷ0}Z9 eǏkG5MR! O!;X77wmؽ͡. VU*Pހz>R5z&Ԅ-v3x74E$ct7B7y{tfS#?l z݌+G'MBhw/+G*'n+Wލ[fB?tͳbZg%Ķ6zU?g<`%t0X]y-]M|ݘf\rSǙ'N6E/M- ?y>=}7M.|׍~ []Q)'i"=2:BK:oK>of ݧ6!vyK.Xܿ va{ZP*X3h@UP j}aY>o""""b&"""gruoD?kDqױQ].`]{V"XQ5D}c%޾HYR o |:@;Zg!Rc}Jpk%&xosy?yD}&kŭ-/xc>_:pmbO%!j0yE(7 |BBQ PRb9_Lqohz*ݔ{+ہ@ʽ`ܽlr9mLD7Hmew[2x`0c=5v4N.l=WVs~(v-ԄJƱ_owy `c8tg{7\IzG JTF[k*ԴBǿp&""""o"""" _t/ ٭|츙cc+/c]`#,0 &KgGN:NnGB7;[#ٗgf扴5ccx{_S$.'-R FH#/t'|E1˖zSE2jw0HzwpOSN?rlf0waQ)Q{[ݳ-"~^^2 o oj{q7CtЎy[;W4+GD-OMS~D3XL. GÅ]\yp>)NdL-E* %'aَrr]v?TpB(1ڤaQ<ʝ|`|@m>px,] 9ΖiZqS\q=.ҵ xC^~,F+l[ s<a*ƯxsD)G=qΙCk[W[Ag}k*"td؎o_~E/\k ۄOBhwj5W=p)@(!li(ەe UM L qCF^^0 05Nl#.\rlՑYv5_!VR2{Y2D\;*d\9d&o.? _o9]C vfٗy}D\uVmsMq,˽|r-9lY ,! 8~- aȨ774/FA1:\vǂ҉|qƬͲLOC-2=A&E[lkqysua3T ]qUò/~/b0џ%t8'(%5 {OqISc}3Թ;rOof0?M|8 o  7AAD%7vh{`ӌæbU ew00zmV@]ٻ^}@`?~6eA&N6kWgK4E#`L 2;{<ךػ_‘19aSzػPwSV~Zq?W%s"=T9AFO (q,g{u^Σ=l$)AA$  HxUn_z"ũ/K "p'<@ 0)PeC]Ϟw.~#$+cH\r?K-4g0goXe1Q;u_Q2Kܺa]dgxր#0cG0'ǷU= hފ[ݿƣVN,{j@إ%;Vy ֚Ђ oHyHU\煈_-\ꊈϲST%Yۂ ϯ+ ,|C.AV>V_^.SÀ&ۦ$Zm)? sY(-[Z76*w^lb#FY)C?a/݌\~D`(A,ˁ߉Wy.i]\e[G7rY'6o]md[嵤҂}~?q`5ᯂ?xKg_z:g5ńW#_\+s/c9YL7AAA›  |2԰fiNOǷf X7;3@ـ=`1P AAyl4?#t}%=Sc[0ŭS%bqU$.:cً{ҨW@^&@3N( Xsh⨤$Fx!y\kᙷ㪖(p5U o2sj͗FIx[ BD\fX{kRe᭜8t<=ޫ~E:7i(+w8l(ej<"W~Ơ"/f\K+]+m ݥ/Ҏ+A{fsSc~R-old_gǶb4qX؆QYxldVS!/Fn: *r-_ ql^N,,)t!×*g[ 㯰<ܼX }[ZT\T:?K5Pj3rO^$m^l7AAA›  7N[yTZ(dٸDU3bKpp`.00dw94GOw~O>߽z$frͷ+VpX5fLql5S\-,Rgdu~~tmƹC#NWGhAܱO׾ r Sx'YRL'nإAxgyS>KPz͗;{XaY7W) oڵbVŔ y3tE]![<  eTmŲie 㰰 =&ܚ{rc|kj$n%@'PU.9*Q|7ב?a'֏Y\wSw0SF06[G;qUccGW/`]{F>] bAA o  %q"z氕]{ _SN7`h&[]޹/ػ].KlB벘5Cߘ^ƞ<`,)89O+#ͣ[h6e/ޘtr߿y{ C9S @? ,;bghU;Sl^ d ;^aCx] W [T0 =KٖN`|e曄6+@ۧknB|1]B(uKc߭~SW;O޲4Tbчe} ٛbI?GDZ*Jſi^xqX؆QIxksbKDY>ɲK~pgej@3^ǥA3Տw~RN).e T``Hh&?ci ^aGkbDv[rl{\[(ԁ_89po2#+0{vYr~ȋxxumh;E+aK7Ua>Z"2`AzWfghryCwv4<[˃d[1ewc*^{#U>w!BUa?Ę فgĴLδz|bQE#F@cekFtQcɥIŃĤ [qӆ?wD s<<9%hR\Ԑq*>%_Ӽ㰰 \xK[gG̲[O\LO2]M&?wlj@w .rMx. <8}dWVm? vKՅӃSxRJ [ Ɋ8t|'R^3;7)撽ec!Y y(aΆ,# o  AA+Y;a"aT gYIy4`'BwQ'OuyHmLvׂ~^=//1ٝ6,{P0ũOjI?Y'oK򟲕́Ν|L|EB ~esv3M^:s+Gx79;`ba7q yjm^'>ǀ(^sy8Gg0YJA,g'˺?- __ %z@+nǘ _P@∱D0~1of XёwLgQ,VO0X w2]5MR6xQxjsaCΞ~KAٮ&eW}vB?W^]9Z@Սq/0 ^f s@Ga^wus35 9|cWizeG&  MAA|»ND>5e5$sVQ>Oa[[=e緖mro@:vnmƾ?;S\>-͹[Ъ`ďj*RN'R'z큑bz4 ʕ~CTxs\;&Wx~d>/̞g&,s>cW[.^k3Xoa;kyyyZKOC@MٖŲi!눻zqv$gB?.LkϮ +`n0+{ i.U^,~δ8=1_/Sw /livSڜ7AA o  ޲'/ Y8Q3_DkK_5A'g ڼϢFɽgہ= _}u|Rdy. >n.G1$'K[Iw"ݻXFc/IgxGU'jXu.OεٽXzйyy[Aa Wi??ʾ.y7Jh:^4N5nXr޳yf ˜n.(t^C$';: "l9؀bipe9IzOo/._ɶ̖xxa; tbˁe Xq\\, nˈ@E<Aϱ}JTu܉u+aؗ=PM.c_$6X/9{ ; 1=#g 98Oqmͣ1.VYd;C<vM^z׻@{e6 <˽Ė}/VSCw&{CFO {|Wʄ7AAA›  P6\_7a|;.58ntۈnNʷ4vÁі-g eOw/VZW4Y;BӒgc1FCAcn}ޑ1w)d"l*ڷ<$A4^O_Ř4`MY=6򕔲Uqǎng̓;nܟK.2КoX}%{'j9{L+t^{/NȯCA 38g] [.#g;Զ55{b|/!_M_0PK0.70pGdQ XAws¼5{Z_:vWc9sٟ0Ę4*/Q\&)P 9C.\ n$oqyI]s)P/$XR-)<ٸ)pT @Y <K"4|AfcW>T`|~tL{7~lbaA~S^›   MAAϡZ q.Y%w + Om͌JvF=eMK߻IȬ>=۸@]gd4[sS\9,In}$c/KzKVOp}߼!S\Xz")L}5Yn-KdS'[Ctak"r5Td|sw8vdiK]'_g~Q޳x &,3j |FAx={/wvٲ[:b_A lL}3D\v&5/ =^ 4g%)!8f*T#v<C15{lb+HxAA&  .];wzdES"6ڠ;`η;&le@* ˍ-scIp@yy8݋jysyguKbZk2ͥ3ip._̘Bm 3K^,n ON&ݭWM<7fQs&amdݖ,:mضP bK]{2їXR09Azap8!?0? hŕ-VYGgCx58go@, IJ-ؔίqj:~X1uD2uXGci+eF;oѽ{yedu¾:yb4b(+Oc_$jC}[֩ )ƏӺjDv ryGPzY=z2^e'in9 TQ1D~~w͞mTfRLWt3~^кqIQrcj;#9Go`7[Z*7AAA›   r@]T(_ٝ?ķ-f^ d?g3q [{mO~+:Ȍ2$M+q+>Ka, 's w"d Oe9zϮr}).TO6k󖮻kP%[껦U? ;^~lv ͕L6ՙd5wR:#>Q Qc+Y4Qf*ɚ1^<I/ WXf,b|q[kvװbe6߇<pSSgp͓,%[w ĉg^+u $|V,IoEr;7GZ-_-wM|P({65[E $ lo7KDNo|7n.>}6kw oHW(c';'Jxg㚨_,%#/( Ş}tevɮt"_)%qAzay0ne TP)Ƕm){M飗.,CvV?y%>qj:~X15ߧrAzԖ$7_q}X>Ypo_I#xl-XO`F,ʬ UhXjT,Jj1{17dNn.ta_:wg. 0vx@5PI9lo G.WRD*1.Pz; 6Mq;9OqCNt,%<_M_(,s.‚Q mǥl5pYe-Ӕ~P':0+cbxZ:5`Szqw%SoT:AAA›  we)ﺛirrsD`;cT%;V~pm;wr{VI/HGL}1R\xZ7ec/3u)~LaӤs20~9_ѭk0ŶvG:._%7f.@)h``8{Lqˤ- )p@|t*y497O;ϧe~l߁]/ 0h;8Tc%[u%vǓKiJi\JZB|5A?c*?Ł3/|ƢM| m\B(51nCy;Zv9aYei'νXf;{sw~Ҕo-.|'R]vzsmU?mb1۔=j2'ݙB7W"x45^56rˠ ĥ7j2HLOAA&  R Nf1:_Q v]YwZ-K>!7|UEs%Mܾ2ˈ2n82bn't3t?+ՎQI`ڊ=%l⛟-8,XX ošP[Z-ca5*e\hy8`LB>p'`HVV} +nPxk ',մJ4e s(OZzFYxx>v#,٥y(C SWڰ>G%Sgy4S;Ak>8_IZB|5A?c*[#Ƣ'`{ vm^p'ZKjW&FmHqVTt\2״[#lcLe>fXߥ0u0Rx45_qߨ 40_Ln(ߍ7AA o  +ާ]]ЯŮIn}X]Ƕ9dŒ#›4kO鰥jF~+m"جcK=/~V8Hl({{n\+leӛY>S,_:oe.I[.:w]n&ZoozWQOEvyl}B>p:w :s9WCksnoZCYI-n&k |[XIإ R»P`9; ?NmyEȷU%y\!tFyJ1:c[|hEVR(51oC䱧a4]󷭺f׈צMl͞-^ܜ)Ioدeύ ~j TI޷9+{G۶UMcw8ّՀ2s?◈z7*A›  7AA C'%' &,aXOn_*%?"A'ё=t wv{lvmd!!޿ pbQwO ygXhWlK?L AhwclyC?Idy6{Q~Ƣ/dzOu=WaǚB~(itjj_0\ӯ~4S=0Xl;IWϿ( ; =z ˜ <_$y:H/NIRa7vnıiʒp;lqj:~X b}PhDyX?4#l{s"QGi^J(51hCAw!{C{y}lYc pt38e6##v<@#{OsP]^,mj5|[sX[aٟOf-~U7@O1]G~u <<}pU+ |w MAA›   3°P^PE5b1̌sd\8|[+v˪52f >\=%0Kg Eveض嫸3KKH?9\vk;٬SuΜ6GV*,{5ïp6U105` zL1F}FSЄu]Ny\ tdKߋZ"LUbzREj"m(g]c7At_կͮTS2[r:J('AP|׹-*9ފpg.\nϲ JoYΥ6\|PŌ's*o.}?ZK}ʳ3ݞ÷2pJ@؎]oײ;SKW5&S=yMd+ÊDx*nb&j~8Ƶb &Gy:H/ڮġL*>pbLĔJ}RZ@\!/ rVЍW{N/*oh 1 :lIU1.W=8a|[ 2i0I5X v=΃M N>k&u?_ÿ~EvI=f䷞ w`_AA$  \ ^GzDX\9{/=GvyO }+Ϥ]V]ѣ(H` T QX3Yg\8*lIpK>ۏn.s} WKx`ј)6y3_gXWr.Xd1_(`;^'Qͻuv~ɼc7-[a Gx_hfNqRIi}?A;]eNӒ] 9Azavbq~`XWZ)i i4q?,1zVͫg|w.{T N-R Tz=f}ʹËU1aYI=u 1dnk^=o`@E :߸,m]]*vҨxJfE#Mi<=~ま@Sٱ$%4 hkyQh o=)?&7AA o  +EH%%=zw~lzy\Fm. b|Bʩ+VTc} C=$}G:SlgKY߹Vʋ;ǥ;nguErga3Hv*22nOw`<[h'< :cu7ao3Y.\$ܦ]Q .X^%$b-_k;yr'aG`f{LB:H/ڮšxb?_2ˢ`*w(H#'\%%$ԭ8T.{8FhE_6x`L`!ةI~êbZ1#{[|1uQ%}jytj~Tαd'7l;,ǶNrf&L}Ģ'}mh&Hv =f滞s,7=AAA›  wEhˣvQUYڜq{ct{!7{ ,<2(k0xнs+.ͮ6/&:ta`b.?ߍA?+bvd}XUS[uU3OV@lRHkj;C؅yB<븭AM]qQ NbtÖØ6 ^=:,/';;`r<8OA~2fw}ITBŧ_LBB݊eLq%h;>?@|)}MPcS?➀.`U6ac0cz1fIz'[f/wg/yy6'0pt3oHu;-ijw3,\y*mHԑVtA2:/0 h Ry45_qwLvMAA&  plZ)_RBN oŶ,2g,NR1Jр^olwX%޻$/)UʁK[sYΥw:GӃdWl3:#:@y,s QF!b̹rm,0Mvpu|kM o˷b?͐ ,ɹ?pOZ|͗EYxY`M?Ul<8 0$Ǿ-o B~2d>cd)WIZk!M~٧p,gn2ޕ&@_hhhς{﷈Z}m$|$k_6x~Ӏ@`9ط =Dn z_yһ@!>INE14kR;KsX{{,=ak?>ޟ3sdw>2Tlӹ% m9ź0x4.Heuo)uANP`<G}m&i <= e 𞆌+<یZ"j'גNQ7ۯ5Jm=5RGadݼN $&j>+RQEH;=Ʊ) 77gNƛR,`;N& 1αơh -dVzG96_x.xmUe_ >K%w3*ZNג"<ڨ1dI[?ua-<._'!ƅC@qpzG?;L:Oxw 0 0,faao"칲o0j|6>S=_"ra蔷Wnވ03{=YDɿ."䀔KpBn36^_V2r4zKlq]p^f<%$ԣou6AφC(!xOU unޑp4k_Xd9H-N ߸|MBߺh0P@Z"YփN !q,}愛0폷G=uuz->JQ5FeA75i_96AH~Ye((gE`r,ZaвƜlK 2)fh5[>jCۆ ]](ȈUO|ӸR߷c՘ t/=1P_$#_үsiEJd70 0 aanx O _<:WB^Pd4}uat9DOƢ}+RGExIҐkKX|F>HFW6I=9 j}=YUgcdem\h%Rt(:"HWl$zv&GKюTwR}yozz_p+w{>33Re.dlH>2ҿ_oaax3 0 t,IF/8eiK4Tqа{9}ફ]_vE2Re|LBhq2?1(ٮ;*߂ gx.!GN4T,$ xFcP?qtba<rN{ﴧ<4oSzc`ԴFϭ\'.Š[ Eh12E_oksPq }-9ݶSI.{kȷ =Ac,YƣYe_K9~)0Tfx".τ<&[n[3._[8,ǽ6_qWgJ/u\cҿ_oaax3 0 t,4 #_{ !oR0t~PDZsr/՝C]>\y4ސ5.;<U!7-"}H}UT=\Ǧ|_}< 7s}{'~>4I$+MW`UI s{-x&5aggt{TԐMSM<:uD%˜~QV1K$xXſ[|DU88L/ l*PI}}|IM=*r{?} ɱCHu䒿DBZH?i-\qq;B877'Io -s*lv5Ru}!ӻm&!p$ isr}*1,[y/wgԚPGu,z = i¡.sl<{<9OS$VzwH{+5:8L͞"kd ܻuS?PW8>[mۙ{e;ҿ_oaax3 0 0(z/JОX{=%*@YɅ޿_ZhחWSzmf>kGPt 8:!vo7 B됧ûo.}Ut&*A ,g,w )^`H߿Snqv[| {tAokuRdE4 ~kgIwa`gٛھ,p|NKd7N ˵Qxo~ӒpZ3$Ƽ(U Όx[~I+ju>:\4*?]R%ܜÙSJHu.s e173|dϹvS!Y'S;~% v$^6!L^{o%B:v? _ȵHv'H|b'O05YK乽^sqH&d _wQ-GЏ>jօ'Z x_?FsxE^ZP|؉^^"pcEw|d+r*]XJu.{gx3 0 ðaaNm@a6?'*Y=$o $k<篠qo~lPOzA _V0ZSGCo5H 2]GQ4 'D7f",jaf2$&KQ?ZW΃[/_үsˤ=aa 0 0L yw/4MEh1ںrm\0, s@T0N5geȞM}AB*HZRS 7@ݥc!2Ghٷzj}X|ްZy'&ۙK=~4m>䕚;Te0T@:!?>{ %zsxP3QՖRGH5 jmP%jʟMtxiVJsK0M?fj8s Q? 86ro=[<[ 99=|p4)u5|ޛzd J~ZU%ZXRI,=9D$)lz&=$~p{URpXZЍ/&XIw/<Ցw5k`(l ͉7)OZbPXz73z&)^^$l}6Z]L5%=5zg"[_u.{gx3 0 ðaa鮁,Ƣ9m@QY[^Щ7?YgP1 4 p@$SBg4ƣh1Xhؚer?z2smmGVY [dO*]4Wo8q.?Wژv . {2#!ޛ6Z?D QʲT1}!#( v1Z^>뗭Z\wa(\o& Rj PGݽ;[ov-%[(Qϙ-#}om>;Zp wܼl* ](V  Pr bMCl¡%ܜps#ZtRD>uq_'nPo}PWrm~%wǿ?oO̯lԚ"I]4p GUkɖlRxUzX?vBOI=:!t]Xj1=Z(ϕTPst3^V% Aɪv,};U7:7md>:V&b*8sӊܫ_һIzf70 0 aaxad6z~)AdW}纫SqK1W^[촺a%J#H֗PH8sUx9scy{>rBx-CPra'M1I#jwnz }owih8. A` k 5_i#eA񇐳\ #ڳg_ܿk/?(p_/[/>ou,;%, 9;"Un5ky?0Ơ`vxpǣ9&KX~~($.T+V0lk{mBVo ~kW/sl<$YO g9k}Zu|w"LϹrsBs sJ-1UDB毠_A:a\Zb.<ܓnxDycn4sqa\{AM@:_kxM9BsIxZY&M:n'tnA-^1Żgi piwkuNGUhog0ʵ`?Ont7w lgHH1/d+8}R\+y`׹4eR' aaX0 0 t=)0LPgAi=۶6lQhLLh).Zvڻ#mTZP?:,OٴvE'F-*W]XY:(5_#9N_@ٸכn&[:#'l '~tSlۿ?[݊y#+):| ^kגH~6GV<8f!rdЅR\py/V ̴ij?)"/;iOrݏugCqdB(PsOy?0yp4 7W;#(5܏ Ƶx'#ʂRw+_4VlwqƯ4^ԭ~PKU K~!. !\EN~z5/j\p _h˞+Rw~pR-(UQgESG*Ƥğn$ 99H`N3;9NZ, >B" j*]t) V ~9x9 3" K9Ճ/9+Ps2 ̇4Y^ ?&f!{fm8ms|7Z~Bw_kw=X)ZJH顷f t倥cQZj)|99vw _}IDh?p'eNp"*2#+IZU݊kz Yj~\lMkUo<Ɍۿ08Lí@3~d'/BHi -dr|䬇[=_me~J 4%zmI psp~m!$}is! 8`eVY EnWBHQz!LB"צh Z hxGqfJsk xIwv,f:vkp Ԝ 7!o {=rP9Lo_KM6&i3Z o- d֠}WpK{P;d l]kCц G}ƤlZ*k3XV+$RT8#9M_ܹw׺HEm^CvV{Zƚwq0K6m.m&[>R{0RasBjcȿqc*;µ6Uh%[rs1W;\qZƽckMJ(#:cKP:5{BORsdn#}*oEo=drTz[rK)&p+g| ˉ6 g ޹ЈKӥ=xaUBm+Zc9l[5=l$+WH w&@hJpȅk*R Ftx+I目GvhGY-lwUA9ӹ?_@ʬ;*~aC0$c~ È p Ñ+e;|yE;y?C#I@["͔o a<21$bA4 \$ܻuUgk3h;ZH8o1"䁶Jk7\|p4 x-b(wxnLFsW߉}qn(̿dON 1=Xd!Xr ;"T߱k9k?ۏ!bo-m"ХxrP ruCA;:VkX;XGܵ~k\=$ZJHw/4,dVm褱V@i3\ qsUvxfg!uܑUނ́[6_vpzJ)HQԏlQENkw6޹k1C ʏ}F_/c HΥp/$oaa 0 0,"бq:^xTV~'f< C ;-ߟ38ן)9  8$J8<@j8( Ζl06ve[7tg?`ۖ^pλֻ>=_WϪ3\zz;O[B6rc!`A<$m]֛^;M0YxW>}9NL {Jug!xCvuw'88=b$Z"mw7Djot>%/~m+ٽN9br&GfkueһRm\0;ԍ\N'V=fʱZplv!/KO4z7jgcKZrd+rS#6% f"vCR7~q=զZ8)Io"AAނ  Yͻz<>‰88sq9Ԑ &xYۜn[]1?:ݔ_ 8B~@2]7o ,L`kKf9>(.Mv!oɻ z0^پj r<hB\7:3[#pپܸ!tG-GNz{cʁМt?cPN$5@w4Tb4m<GYw;>!x8O̵Iv5S1~LcƢ9ɏ 눬5CF}ۡByVyc=ϛ1v8 w s΀z`7-*d&lBZ!ZFs wb0 {:^j@t'T]^S Pp/3)q  AAͺѥNwnZ8ܪvηyn'c̦eۉubY挬3S#>>1*"4E~ZUTxf]{0X.0ɡgZR*N0hL,֘ [ʷo˛a#4(&B/B7c8D+_XQAYT.[,Тiq\w8D¨IoV/%%mKGgp21$_m o` a8FbA~"rIMMgwhnbŲ{T^=@|':0_v7(ε#zjǮƢE'oނ  oAAT]Q VxH-ޭ>vuުK ;BlVߤ ȵo+{~6:)?#Afb!4: ߐUJxzp``%2M!{rx}FH¼FH8CԮf]PaUA&[?@-q@=9?bUMxcCE]&ViKL5zdv`ӎI]5,؝`v+;Ѵovq5"\Qs W|H \{^y[/w|xbVJT*KمXC-6dt|POc:xǿsԯuV<> kMoAAA  6Dx뷲~h wD\g=ԐNGk8VKCv?{-?xQeD/oCo==H1^7۸mn(rz]PЕ,ۯs0{Vƅ7165zuAlwNJVy^ ur8@b1bY4̈(pXJl#򈒩bC(ݷˏ/{aƘe"mv:|=+:$KeaFzF$,FM>Z.ϑIp"L.Z{jZ5z]"!("XAd*E;=wɒx_,0p%}G?W?'|L%°˅hc=6xɊ|SZlԡ`n{`qIC|oނ  oAAͶ6QCL/;+$jkWFtίMҾ9k}Kʥ.?]珟}8׎~\;3%@;fiRnGFϷީ/WU>U^U~!Qci&;݋wtˑˑq3¿******DƱsmTxo8-'=.ou5ݿ5l|G߿;79x#[8տ|aL&#JbAC.mktriNط񝗅ω#PGND)?1 8`ϗ_ԂUAVk>N5_?ױ{[h{Z"+=zW`s'qb-]/춸W4ͷvq w#9R3"孶>_92Et^fbX* ư){p=Bud,͵݉ GGj@Ղ s\UBuOTF{qLSw BAA  o.I!ͺAHl]["ߔ8ނVTvv`B\ڥ]>ߵB{o8(wX@nz m=Y|o3ʷ2›C ; L,p΂=1{8i>W.Oz5o{,%^p CNz|Kox?,YH"yc;AkI~#ޒpviЋKYW w@BV.wUnm}Mh jVpy>xcLt'!Wa<b:s(2v!b-Ry6d`  +s[1#'wPݻ-ǝWu3֫*q "s3sXQ ](!rQ_ә(t1Yx[xtf/Wu֊J"&LN$e2qL\-X kϝ3^k 0r{lJԵQkDsq&"Z[pGl'Zk1~̩c1؄+.wx\\9?`w+,G.A5C߈ Y_mʺMʓ#޳'~r<ͩSUn^ (m]C> R&zw #{qLSw CAA  o6e7[`0߼&=~F^额inז/)uW@^ҐUOil`.vgCD hX y%wE|:QI&oABd!۟T(ϯ=[κGi:q nn.ڎseB$ *R!@K&|>ƲRa?F)Əˏ="u'b;`wX7w#lA!3sbOd@$`;n& ﺐnTwP'ؖǠ|E E:ڍ?}^y:c;Mʎs(gE'\QHZvZ;|jXc~w2;L<b"q,}&n|׹.&?_bL֪-G&j6 9n'&gWt C}M5؉9-|b1۞Ge">(^p(ʻǬ8Ex0AADx  f77kq.F:Fu\ZWFjDGLv?!ț+јj&N]!±" "v54tR졽9'"ۑD ȣI_e~{!s X uhd3t Xv0~`һ3@8Ɛ iya8{qOs YVb->7 ?*k-:!Mejm- »ju B(cdOul[:1x!ɐ>!!3gnuR@$"AVZctOMٝem13g*v\w7@: `l?j5j~jY+߇^&D=ցD%,ˑ$b4j]2gނ  oAAzoŤlȑD#o rЇoq^àT|[ü{{7BA^\vWc᭗RmNb8$4i&WkP7iL:v'qh'$D;FI_&"'z7 ? @&#3~$D"Ǣn` a_6L~n_?l$1]!ܜtvo#ߍpgd,nw_^9kIx5|(H%&RΌ=>"ٞqشNa>nz5ߕ3XZG}mjAWk{c~PH?r=.GX@[׷ݭ:bñ3kAMx%{Tvu%%\P믟rr߄܎/&2`Zo.AA"IAAͥ762-ci<ЇM|wW^PۣѭƙZr؄'-@1QS5^xz݃gg9XKfx-{8ɭ{@^/1wc4bE7Uh3AE^6uq5Mt7<` @]PuRҍc\URZk|ԏulxלiuϻ_\ECm;"N݀ww "AAނ  B5@&=Pot?bla ևX f=fG[CrV>'>/-r)!d9_j<\tci2D` g_- ͯ"Ov*^:mΦs3^zz;}~}E?ur;NaTkNYlJWV*:WKUlQT)e"aUd.eWnf-{Xv$%t*:3pK|>_<T oI$%I??g(PJAMxGp ߗp'MoM=='~sw&>[Ss%[? }NL?<|yׇťP.uX$` Jè [~oIXLG6 >y{&H=L]?K]-y 8a rn%Id$I2xH Qec.X؃7хc9c / ~o\U\P@?ΡЅcZa8P}ΧJ7v˺y7݃{>lJ j6xW$I ޒ$I2x흍(A9☃X4%8A/xb$fbbA"q?[$-I$=\PRGn8pC$IDQ|-h!tN4NzЍ.@^E `ƣ-$I[$Iӑ@ aH[210)4`Z]~t@'^Gv [5$Pdo[$IoI$e$) 1  XoaZb` 6y4B%ƣ"-$I2xK$I!$I #b#*Tc1ObY <$afaTG2f[$-I$-Ip Qx0!1_tL×0RQ1 l~kQμ{D_fE777 x ~+Ѻ#A{DOn-r#x x pQo@oo@@;@@o@o@oo@@oo@o@o@@oo@@o@o@o@oo@@oo@o@o@@oo@@o@o@oo@@of$x 7 x 77 x x 77 x 7 x 7 x x 77 x x 7 x 7 x 77 x x 7\iI pIENDB`youker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/ubuntukylin-logo/all_2.png0000664000175000017500000234371613260315532032645 0ustar fengfengPNG  IHDRR pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3EiTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-24T11:05:48+08:00 2014-03-03T14:18:10+08:00 2014-03-03T14:18:10+08:00 image/png xmp.iid:3bad303e-8c4c-2642-8646-9d1b39884519 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 created xmp.iid:b9f03e06-8a9e-ed42-b19f-6965f63f7488 2014-02-24T11:05:48+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:9046a85f-7e2f-e544-8a38-689aad1d37e0 2014-02-24T21:32:15+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:47673034-5749-6a49-9333-03f96a0f0ba0 2014-03-03T14:18:10+08:00 Adobe Photoshop CC (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:3bad303e-8c4c-2642-8646-9d1b39884519 2014-03-03T14:18:10+08:00 Adobe Photoshop CC (Windows) / xmp.iid:47673034-5749-6a49-9333-03f96a0f0ba0 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 3 sRGB IEC61966-2.1 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin 拷贝 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 1 720000/10000 720000/10000 2 1 1980 500  cHRMz%u0`:o_F wIDATx}*-V9tY1? 0v{ccBh" +wBK<]:dXAsC z# B=QE:ǔewJ)aY@ Bt գ'fU26ІD^q<1wӍQLW>lwc!@ Bo/܂5'[g"K`:T;a}j9i5YdI"*,߫ݧmG]N@ @pc-rgABU>s03ʕ!ஶMJwQ.?ôV}Wv~*YqU/ [ @ Bx >%_QPQ"\R X>{{s ؾչ\cc]ה?ԅYVՏo@ @p_-rHsB| #rF aιt)\W)}]׵[;M=w'@ 7ނ/D)[ ճ{x[pzrۊ, br*IHj-::!}^LG3JrK@ جRfUmD_怩b_-ջPf^ccHUr ۶F~߄^k} -@ .ނo%[ AtsƁkAL }#?p1^wz G1mk& & Uf%:PUIN7ɒ5"z .^7'i@ -Lalݿ~[Sm3׵i~\rNuN/w~;Ez % ]z N>ҝ{;~/Z>4@ @oQnZoP W97`7 E*%.HxAݟBU-eFf]yt!w0Thfc^ -G/B| @ [&p` W;0{~:0m:)r[rjoTP 3G"t{{"xc!zT@U㮝X %^fkJg@ @Pނ qӜpU+8\C>+:AZ$oX4D"Z@,@ptσ"WGӝB]b뽿!@ ACIp:sg<E/7;@ꖋsCsW}ZY 4zٛ~gő=I@~ރCQbxQBz @ -8?Czvs"Bh:EFƵ.#Ph~$2I -XMEۮoHDo5+1vtKLs9M|G.!@ !' ѿW"F)]{υ?݁72{ T~Wй0PNQ3j𷡔[τXA XeV>| fa@ J I!8cy]'% d\FpԻ#}Q5u=ԔP7Uo_\ߩbsW_Vsq, Bl!c)2[3DS7l^!Ra;Hs@ @$[0|~:zwu!1N \CK3]Of/◑esM,T |ag= /߃}o+@ ނp{sC/w' _p_&HB Z\<`~')!S|ڰ9/wToKs.@ @opqvqq 6S>|u[G7qDBz{<.DXBнq{ȩ`y%ziUؿ+RyRB| @ Bx '8&8~kG.Q.'PBփ5{wN$] M| ,\;V̱ ӝ!UYn@ ~# !?۷4hlap;9-T>DRg9/|Jڇ1WB DeN ]3;QߟF|_egI@ @!D;ʮ70AM5_~ǔŻuv|m_*[_g }߄B e7ڐLC&?vߋ-xPҵ@ 8Bx s5MZ}s p/xһiՏ4ۜb}r2cToaf/7[`n6=u=i% Oaw7-@iob@ !ES=:H/6w;Ddh%!Yn4O~~W躙σ-x:bi"gMcvFƾ!Zoǣ.#!Z ',/_/&s$.'ݘ}Rg8茸~g;# &v6zVI~;X)GrvNzSr ޹a5{ҟr%XuhYί_Oݧ0K(߁Mu^ru9?-b׆@ |#r.6@ hX6ODrd'Ǝ˕$w}6T< 5ϴ-D^x1K^Gxwz}H;߼nԆhз9hxZm!T,n\v>񯽚w7hI`Xu.sc~l2: N!ޮ\MC;:^>Oh'DESzA|{Ǟy9ud]Qn=㘄_!dlmq@ (0*ş w {∓WpfZ(쵽=PI;n}O^kԅ9[7Y:gP`ӭߑ4燷f󮇧yWBqٗ.َ>fWBop {1jH]np@ӟ 7ƊL胪ngLg9d~ q& \_&Wy]9}ܥ`8h?V? u;D|#nOK>t/m#ўG zymw-A`nɮ̫{FwywOU@ z&Jg#;QYs3 3OI&-)pdnf8Fw4wDr FKkn,׭8p8#qۈdjv"}ƄD<ymY+9a9%f9 v>͚GGE;A-jq~`␫=MCwV'}*DNsW9N6Y7m߻ U L &؇?9͍3JG/Ǟ\%Ǜ7=Twx8Qw@`07xuw^Sus(9oK9\t뎆ҩWߟa}cѡ{⼳y55 %`eR*H򾯮xoL7yf%P 6,Sj;1}\@ ڭ?O#=ka(]')m\ȥә뮒w3IFT|hoN,cW:tH?"6,;\Ov ]!kڦr^8E /?XF&C(=EoJm?B|ÅuɪLjy't|q}^e -(e[ډC>)ku}8QċWz hmx>qޱ%:'ӾO5<4?d]: ڧvũ쎅@іtsǮsH$wW ?'}`bnؽ}Ө"AGkcP!G{`߾;ڻa:,##amR}: Ʊ>8w@!K [Gn j{|}D>E͞rRjƊ"JCr7H-)3جrEl`^ze3PNr##T6/ccf2CDt6g3z:%xĖŸx]'(pF6)ؕU9nv{T;|mmHcŀ~ӿP. ˒\ ~Ų,qVd(Ѩym̃:6Rodw PEdGf )>IӇnw<6w];>e;ٮ΍vtBy5L!}YY:m\9[YL(ηܽUvc.1mFBt_'MnkϞ/Bz L:g~S=<~&Kܛiۆ}-k@ cgHO&>wE>1>~x컜˫0G.%QC)@sm`=76^ ])7::=gKQWGDE<9|v6F:; n|bgk#1̪= W31c֍+Kݕ;iS ԉ1 ֯6aչ}թno/$\,W_.n_;e_ȦeB݄m|f},/M)ڑƈnmo^!?`&MC?))(>GѺ a3z>{"Yu{PcILQ[ɰu7ݨŘ2rt`;H]8kZ\}QK֖agV2&ѫ" G>mtDvKsk.gXݽ*8Y΁) ,9Pd<[ҼյF|᭢ޒ)nBB5.B57[Աtʤ8wh @ ΃޿X6f.`{Ƞ1Mn%} c-gn҆S;#ߍ7ȑ9hu}\a;_GiKZ=Р>+ ?̗o0_o{t?5H\!kfWG[/fs.^0nE&P s=~6 .VvŠ;4`e[_\E? cՕ=[Ι_\/%!/Кe 'j{f=ߊ8>~$-gob/:c+u5Tple]Q@p9&D^ z!{ag1 |󐔢k^i@60!uٝRy_}|YOZ"84f-عҙVw=p˓R:9~՗й|a^: UAguɿ!ֲ ҤǣǢK=A 10epM5(q[38PrY|hkh:2&Ho7=#'ĞQmh$R۩& 08:2&NIYo7_w}z:0Lc[zOh!e/Y;GvD]L{v=Q8?NS5Ǣ'Z=Z*CkW/"ks]=;o %0-XG)RȽ.Ŏ噶tILu~~I $o'Evw8$C6tpwȥ9ƸOlʧW Fm{uc6)f?X.mk/^G '+ ;1IQnد,)fb‘gPr=6KzB MNtHB]p;ء[mgA&i[S[oNr8jEg͔l*MkEnSW *:Iq>u ʷ#>Jxh'R!  k]G-1p`ܵ KcE - M ΊHg~~ޕu㗜m .f1%$B|uwmi@sLl^rY]]lҝ~9 挲¸ !)ͿP{٪m[; q[V'p/y(%V)MO%§t5.E;6tdNVu>_\=FG\n\6Iߢ: cn2A] N|HS<ţSV`֩5 f?kѵE{#^5?^oP.»Vvz<˰X3#0Dt7ER4BcyHu2 m Rc} S"ßƨ,sJOTu- H[Fʁ]1IWD]iY]^so7KԮ:"%] !?NvٽrAfsle:"aY `˥-/ErÁj!d7GG]h)tvX|ٙΞ:KM:3o`=X" T\|-b<z^\ Wu1u?ὡY(XѩqzkӮ~76C)>v,7@ oyp׳5Px?7~^>9Dx3OԘIIiY iG`IMrU+>JgRjhx|MCӹ#Uȵ1_C-a3ǎ3^ۨ1VF.œL};r+Hci.m9"O=<_V֥i ߽^sNխƛɭ=44C"u1롭92+h=Y)NdgW/*Mp-!5?@v2|[(]d7۲UmDRmQGR Vm1:gn3823w{JVh$\dt4~T`vR̍;dw#\G\ǻPVm%4Djb:BPan碁 Dڇ }RTOG8tSd-fß1ӭ*~$6kLLSA{/E7o8*aGL#Ӗ(7S]dztZE /2Ϡ+#_Cnªwa%udHVi'=/Ye˼4'1@M:Nρ#ZKG V"d৒'ӴG&V8V|K$ʗE#JJvڕ qsif+>Q#"ud3}oWJ}UژS7!Wti)Ͻuk[sIY;Yb2rsR7|]Gעc%`g,Y9cq.~N!0ubf"Ȕ7wv3P)/?|@";:?%z#zl%Nוhc{ Ԗ=ǙT+e]y4" Qg_orܟ/Xɚq]K<pMVd dfhi.&NbT"7C gP-CW1+/AH_`~"ڷW[ۛsF+=fk=M\[EK\!=`tu~]ʨt 4Y}lA7uNjVXn{èoK?[k ]\i[+- YRX7 쏿[ۙq~CoyYό@h9X,aQB2\]ŷ~XV[ ]H|1k@ KE[-͌oU9R\[Rqȑ֦.6w6MQ PZE5/r8FQX"sY=kitF,pcʎV@\XLݐ~4q$g TƑx5kC} jѭڊH!~j?v9nX){Ms5tYϛwqxT_2$a7*Ͳ^7Gbۻ}q!v,ì0x睍ODۏH' 8df ʯ Չw\΋d*!7_[j&^]e쿇pj+1T[ڇ+S rQv6o[[y]T4_L%wnz='ZI¥Sc+"a} їXl!-g {pH͖RO,uk 5j?PI*'Q!{i9GbIu fƒJe߶jWA9pKzxF]wWV(ˍkUwAMcJCkNm`Lɋ@zsq?NtO`ڐva3y̰/!Wt74Ϛπ"wMȽٲOBwry:/5Dnj1=Gx`N^#q;'y-}'Y̓R1yU'[lHF;lV}zHx1{i]lARGPfIplXj78Ƿㄈ9'(2mȋ]6qԕ+!;,۔,{9rdhwA/tDx ^-WTJ~j}C w@Pޟo솃;Rd,sc>bpU3,dwO=Nsth{=wNTDސIzRGi6۟[X"kJr1n ϞTUNzczHS'R#2Wu!{QNæD`zsP野G{̨0nr 75)K5=٪z26hқR}J#ֲ1ῆ>9mylHIPd"(ִ(P,~kwEvSV"Ҋ|.U~ZD('u6.(Ι+" Oz&rݨq8dǎƅı] CςR;lX0{#(W/E ѽ^%ޥ49G_=G,nIRk$B$lL<.2\q o,`C VNl2YۃNv'lg/xn>빺Cont*$b̻AꭙB7RmF<3y$}_gS.ڧŏ`ŊΕTc WM%IzZ/ۋNғFD/>ٽqT k @/].~*os'Fr41q*`L lp!{Nx?O/vo68؁s8vwa\QVSj!:&Y-iAEW@Ywn+򤞍9s] {jiEyXX,#R^eа(}Wh.eeq7»<+*C|2X65--ݬ3OM΃{NaY79UҴamX  BxAvstm)a$͑vcJQ qBx SaU+mmwjPLBwާf\`dDw RD{-EgwH{Hg*}#tK:=[z:=)ʵ 3bq$vwFxCA  @_pZLxWʉ(EDm* \F 5|dw͎?w'o>90i{ݔ~{L) 9y J$ꃍ&%O{ׯhlN,DNzfһ S7NXUJ=C.;! :D~S!<^}ayz-MW?iM.EN,^*kbf*̼]3>cx;;1MHmZuAdǝ!-(}ɏC7:u7[u[?~,$ {u֎f̕\i)xVBJ2Wc7K#u~mnH~7m$[ zk> ѤdTOV 1SS}^[}ʻC)1~-ZO9:pMLNKW29R v'Zw6|cs̡wGj[uC!TMlfrt~?]\C<0 f~mn@#0sx jɌ@AiXl ZPV @v%.v{jFޣ%B.TzdJ&<8zʶyj \> L|y, u|q>_ߘ*oup9&~vcz 3f$AL(e[~)jxXFG Ul7Jiq/zkU1MD IX>%y"O?85pL}S;vG>/FE pOtlφL,@WoS0)ks^i7[v힪n_i#׻ ]W|bJsz1IFJN\@~Y[  HGߌ_  7yNaΨ;SnPޑGRaNX$Ư}G42N'koO_zԡ&"!{I e2dņ#m'v61x~=m.7k=qc]nxCJFx/RCω`̕\rfF$|4p.[lFM_8 ,>Yc}Z*sf|0,"6nkRV;IT ӛGQQԅ=E$~9ŒGAD6ϝ`~Xc WJiͱvip,?Ĝg}#mxoG6}:"o^l oh.cq({%XTקd.QY!ȹr|'^ߧfH]$J9Rj\uM RQk+TXe ZmU"Ҩv&&#m]3T9ɽՔr?t*4{X+ ='וq_t"jKe!P"Terl"Rk 㜻L#\-ARJe>r=fx蝉]a׍.\g#oERvOmLr}rMq5U(^܅ C /"?MGn ;U)9fS@6p 9ʳ2s gʸ2UJO*ǶL q+WF?te!6n/57CH>)E7Gg\FqGbJr9d8v&3m n~ dp;Mo Il>nKNQ pnuNW>vg=Fti!Q`I%b3q}K#1Kȵ c}ɼ_{xdf3]ZsVfO=Р'xɵ 2ȎQŔ^gaFڹ6r90h3rŬZII#}Z6nO%|kLL3uaR%H^jIߊSʽJҋ{. ^G:8Bx"r9C)1MԤ9Չdч.tEJ.[B6 [2w4&ldCZUY.!47̛ɑTcG St_L?);zSa^L:\5\;eջFSIݏ"CHՖ)r һdo޾LtE\bUwATóQe6񵻬ks{]hn&.tmzH_b%~N!VsDauZPW{N2s98Q,~Y›|'+Ij峍X\G9rKm b Θ!Wq%ryAf(!OCśPgekm?R+n zbe,Vyk ,WǴor~$KG7r.&yH3.OU{sD@EWBٓڨƷsGrr;ԥu|5e 퀊(\CZQ#[栗ϫF\?tD}p&!{Ttg.`$}2f/a%>rRg>8"]Uޡ26 R{BxOmLVYr5hE3R~zQׁPE|*S;{6krֆQّxIՆ*8}nL;1~|fź"Io^uo8AߌWW+o"JG6g27uuYq?4 uzA9]2"PА߯\\80\ oG#}30d[cxʯA\!a]Z3q3D{JpND9zʠZWɀ$-]gғ!D.sT\j2JU,usw)e/TtY1nW>( _ݾg2ϒNsi`D`fJMu:rhUz6zl]zZi#7 ]-"hц{@Άh(]$Ps^TŁl7EkP^[mw` r]U#oRm$;* 䲭_lȔƫ Y5O&YUhg` Gd#竜*r3+^:ZHm{SJ\=ĪJS}mе;XD{\T ʳ^ז*!g@jx쮈T`S{:pCR21oHWMmYڸ'PNrw 2KP? lhwVůUTJ ,=⹼l 6J8\qldd q<]S  @uwں 7 y:Ak;{m.? K Xrƨ%Bszy?fĂW4 @on͛i=Ӂ &{k歙ѩ#T+BsNlR[5x)oZm2#kO[n +f r}RJ+DPdJs_;KVQ]o[Wp/Juèiͽ=z+gM̨.U)9Rz6I3hqlxoØIs"}v >ؗMtefrgSң:=-\ Fzj@j^kZ^;rHJtvkX!UUh.GtNo7yoW/P8Tmlr}+kKe?l8zOd }`'z~rha@.äk١QT9Xmf:RSb͙E& rz)#Nmi--aM{> !2$rhOԱ<`A9a@Hm`$?r2S.MdFG.7NZq]/q*9c [Wj 0EH؉'uA.*-܉m H&Z_ZݘΞ_1CǙcTw);'v^!Lrhz24doput7hu<GډJCC~Ah[H } Fڋ`^ rڜSPHkSY>!8[hJ6M-'%yRF3 cy;6_pϺN胷ȯbBoHlKB Gkh,C8Z@*岴f\/?iCꄝ& /_oOJ=l<65(]rL6ǩÔ*\DU>LCwq=]ț9ׄLSl<ԣWNo 84t-oȚ]n7ˤRQ6_:te-J+P K T v7^s aqO6sql Z_\[L%82}-r`PJ++w(4L3-%gj)9.R33jpq}ӟt9uM1*pFDJ{MnŔEŦfb.T`262~eۯ\Wׁ,;!=Yo}@/@wx]i Hh{ı6 lI3~8x}c;ؓ:EtY 2vDE۠lߚ,&XOiCMhc!JwKݛc@+NtSqK| %\B=V:8I.tm-?S}Q˵"jV1ʉs%s5E^NPvBFZnis.,rz] >ۨÞEgQ($A<ۯ0'2Ht} vG2[lC(Qj UfW9wIVu3@p_DV1460O6CDttQk<װ >᭍|Vq]F?gÿQ*ߗz &tS͏rvIi]i B-Ĵ\ɤ(5JW3Ƿm߲ ZpU4(Шv]Y$̛%z{Q$لz%%1R8@v-E~*ח(5:bѺ|.HR$xѱd}w\r)ƒ){hlLW*c0v_{U+87yڭ$Jhd$?\:Ф{- ٞ凃}=w~}$M??BʆX|Ǿw<ŋVܬWpQړK ~Ez 3ϙX]L_o}`Uy=5 6#VIXJ͓*GSWq4Q~A>_ ->m-HGTt;ӵ;q!\^NnȺӉnUrt(BuXD&V(-zv^l|<4I4gZ{:2UZL'kC[cN o Aa&?=cՋ FӾxt1#KEt5 Oq# P8ۮ3y%SA{zxhV/e ]耊k/ע F Bku_,"]*$By\Iņʂ-ZK`M,X$3hb$[mX%caM 8m}igܦ}`jxd n}wO/u\;G{&ɉ^i IfGwUN^m M7 @Ǹ(B3 dWMo̵9)bxArm:mkzTHօ~\I{֔86%Gx;~N;NDUmq;|U^퇦]aRٵb\Y m oZ[jy[ƚ z)k{8z"ߛq?a[ Bx49IvGm EBv{K*Bw%GX[Tx'߹#V¸'=w*(3\5yհ$ܘ.krӴ >9;A9v4\]-iK6Ư7}㫦قJi=CcVaP`a. ݝ&4Q!vAơ4au{D'TSfJ$_zM((n< /CRDxs m+2l: ԽjQJ)]*( SoH9rLtU6$`M˟{Z+/3CP[y=`64EVNE"+8@^mkR?`UB)JxǙRnp 50o?0sU9NXKܾ,^K(ȺZMAi3zk]ͽK??>WuU7+ ISuF\sڷofBR憳ۃ$hI+_!ɣs}Mo"1q}:DcB77:Z{輟 +>('lM/ ]h>kfy)r؏"a`D_;uM|O^X!6glM uSDAgm[r"G[ BxFՏm_ڒ%6&KRchf܉RjUO߃kUb. Sq3 @كx=Z?@-dR{[ct{|b' P4) Z1%Y› @Rjp&uA}G"kg`u ;ΣsOƷUg dC1Фx †&mr_f$b}Ҥ/]H7mkL;X: W={q~ ώ[eYm5`[2J)k-˥lXsqwF9`r`ͤk=ݶ8y^s{g (PKcKgJiw{^wB&R{s ً)Kx+౔Y hpm5=V{M?{r팡 D_ǒ6)2jvmXzI]5B7{`ψ-s=)-TZ|Q&تkzVBx'`P}sAfvQi^C>o;itLL /آzw^K!3m.gР#Qi5'.mJ/hBn!f\ȺSݨ,']F[j sv\d};֕@փ;e{ywTl+H\DX>08j&<2/ qسހjݝQۇ0EKzsqo3aYY׎1UX{[?ת#tϜ,CB~ I]0n{5 7L݉Lvs-l1EƘsBi$[^'3K}.Xz$~r6ʬ$&43w=!f۝mdt5ir;;GVgXCxj2TlbR/|{?:|$ǯZ: _ʡ8X,1Ҫ6hm)`\ns[!3nv!#&v(\xw͙|.yu@T Ձ""sXPXK'J,7˓FJKtMqh>P rѐ .J}X))DRfqZ!"lxI JySK_up}ļ7(x7囂x} g2W;#-2x,z`ĞCX"ӽ5'ŋQJCĊ/Î)ǬäH`]+,XеunYtbuB~gachBSюgs랫PȲ+sc^~(!U$:id5;.Kvs7ku}_X-,49fR,I p* 89'22GK>݂Μ ktS,3Fe>6]qbfl0fMho dgӑY/]Z^ߨtSy-^3$ {6: 4ƈZ8*dT>Ê]9=œDUht`F㏛IѺM.T[=މJ]oMc=,s3*%\(v?޴3.g<^#.2UD|.ř"UO1[S*roQc]YL2KK-s#*?2=\0H{}vTyk-Oף*B$zYF&/raG+V^RW Rˋ${\fG5 Qs7CzG}Ķ>#ӛ|$InO\G^?3S/uϱ/25!g:ӰclXܚ^9RN {U|<4MNfwRوx+Ng!"8%)O"s,s6%A/:1x,BV)rū۝ zZ/ݟ~yOzeБ[S3+1 ]۫{HFKjBkkwWJl ҏrh-5=ÁG#9[T~gX}F(`}aD&`D=K?[Zx$@Mi1/"E'lU0]f*K2٦76\t>VQ;9C8\e/&aSޚ K+2}1yl1󌫿Jѱ1p6F^Xހ[عPP HTj2]u;U7AdS"ǚk1I.t1=hzت+/Ke%" qD.@VV! -΅|@oE݅Ҏm0PӻĹb.NZא\|nZҠim1ϏňrJ9M~$qۂa@ncK+c a[@DLCs* ";ChE2`*Z"L4--ɨUTdTQ 1G1k74tel9wMQآON]^%9!Tt| `}Pw RSi!j|gQy}N`!KI'Oq ~d1e^ev>ĵ΁7 Yz_jݾMкV~A~wQIJ=nf[EV m.IQ+@UHxMڰ+wagPJMٱZ^X@{&eb>":6*5M W2& n!pE,8][=x|>kVh7.~g:!t.JS[ְvtq8RCralJ%ʳ-DcTX[MoviMWAH@o#ɓ@o)l[Zs/Ô!歍?[{XX+w+]*Ojo>DS͠ %*jr"ǜnn^L_24fuf3(5<`t`$ ]B.BN -&nD#P&fwϗTIS!ˁ54 [ds-5FܜȏzX|*D)i|"=y'TNAsp1PsE'mK#dTg׭nK}ohaE>Z RoS>Hhٷ7r\'_`đ1w OWBjx_ZOzuulP;d 1f٭M]F- C|!^"bVo-ɽ눛ȥ17ݛ쎤^N*@(aeE:Ls}BH񬼴ϼ[:X|jHwU;6DXw<Ơ9y Tk )}ҼzQ$z!c_@'<ə[U۝ءk{G}eWx85y1:Vt#rk$'-X< ^z)}9^wc ,D1&٩sjK1 .}$9gNNTDnĆQA٭N1xuS:{Qm2AFeٝL/%:tZމMp uXHDZo?|Я2و)Y4H%DR]tFr,Rok틸2!UqA<ׂ#S">~%+4?_T"7G"g@+Q~A@L3s%RzC;)2eb4Zd8.3sEr&U*>nODFbqKٲoQqG u7zvp@ }QOno-NDx_ }&oXUt tߚ'Ӯ\k&"(ŒSb)œALC.GPդŵt*eg:Lbjli ( ݱaDkxK MFN((l"4"oQWGT% 821NIz7LU\wٍ&t ͩIX.L. M#ʊ9[rNJ_6C ۫TwXw?Efߩ%dgPkYB'y5ߢkQ?lK_ByKkҘsIZ=X/=Ě0Z֦)LUQ0Kͤ Clm. rNa~@V;dү/C JcS)KvO`iw&c!rhSh)%{-C\sRf6-ո ׹:ԢqM)0k[𢡊s9N.ڼ\^iηgzsg:ɟ1N+*G()`jǙ,zdN.!-]*ri-Y[ŖuUdy̞$F]>'*fxt]<&@0kѬ`)&~'+=@N.˭_ 3h>ds%9zY7DzO*M˺,6VaVl؆LL#AWXާc4չȱ%UɊu'%b</_FۜuC?U(ɋE5UCt&"/k )#7{6[=g r^^/&rmt 4(G({Fk&[]BR#@ Ii~-NxnO5闐~ʧ:?9!ԨHJ+zNx;%HyRBƎd), 6[e;:d@07"sVΖm(4^RPvOɢo)uv7sCEuzy~&u99m|Ct gb668z꒺ HV΅I(({]rkiBzs򓵬۷]2dA\G35&=ן&2/0x+ wy^HfzkZs^`P\b>g,8@Ew #ִ1 2XF2&uKN,(eڷl<*x.ycO{W7DVɊOM7j;,/Я+h!m# r>#RoӪ'R-RDf?_-N6d=[{?pg?i0鄸Glit+K+9˿.M?FƇm~e7rc%rjpɱUtk ޾?MVݯ%GSc\`J@@Ĵb8e.+;y.ڄVշ n JȬmT6KN > `kstJ?Y J}WʙeWosУd}DeX;FcRe]غ%5:3!@Z&fCcnRy6!'9cC_bw%>V&Z TPiAjC%[E ؁!.rPBP=Y{@Dwt{-u̍Z}5^a6K[lJ~낿d+N*c}I8$umdc?i_,=SnhNPdQZI:\1tvKuqg+Co ֔$Û/^N해}MTAd7+iB{/-{.*kտ~qRE|B:C)˭yؒJr0&&w/eYHHo{t?K |ݒ0Kۥ`zv_3;hR([CA.hjP̱ 6Q6w &(jψUDz$¥(ѸCt{꩘RZ.Kmﲶ(5.[8ުKg}_H9V:l(=h mIg2=Q{;K5?H~dߖyy;7)m@wpP1x_/zskK%t.O/[ˬ϶wrtȉ.ftZ&2?{_%9nc Rdu{fw1gcg$"ʞα23BIjB뻳wnꛍWQr 5X?M}9;2m>O A 1Sןr۫vہDWɕ}GZn%i>qr.:?+XI,S^;9WX ~9'Nzy@Vy O9} pŵuI@o/aeUx["AOr9OpEU ?石fU4ʪJ]%U*(Rdc`px+z 3`*#Eߑ~}z/ؕ_<Āط.^ۖ%xc1͍ 9&/ΟrxrJSv"'|O]|Vvn`܇y5:bnd'^UXIFOMD1dBuٖ}J a.#lco }4$W-s0U!=ԞT+׷fm MG&SusU 6+}26DV4]-K]tW+%0}?%UZi^)GdmlNlL:Q&⳽IӨ ~}ζMJ\&.~7 l%>g'Ni ͫpGS{3cɋfhɟԝ__9o4jy孚O]ݰOߎ8k?_67|YUFU<&߾wNzel_4-rd_M"UHn-WËfeߩ܌7|U kc`d*ZG+Mi* n`q JItu?Y^3uq݆5,.ߑ[\>>b_@v+O(xV3~Z5Kߴ&nOs]w+boy&xoI_M0HZC-Qn K9+ 8{Z-vi]ɡeݜx PE{P2W@[J5*ld/r񳤷!R'7 ga Aγ=뭀]DI@D\&;rn2Lf 7s LytL(_)5zH2UH&tJzkAX 4$߿muFdߵ#lbpշ6s4dG48ojj g^S  cwkjz5j>eWR=%u\VY9J@0ރ}ѰV^C'*gaJ#]/gҝAm[o?p.xM&h_!JV~>Ѫ(4{nxh@"uPIaW?8pȹ{*Ώ6q)?T" /:}{!RǜErS,-Wh?%BhT FBQ6&O{ L Ob< ƶ1vq |'M??#?L,KkS<}+.J$3%C,?! x9q^VZ18b !k#_x<*nGw+,{ۊT3ŬC|t'V/9 ^}@JaFƯU;+f3k{)lǛMSfWm3by|V ^,rQ4|>&dcf/rxo3o>~Guvq޶۾zzt:r ݺZ\qѭhN>A_f}*'~sNQqM~PИs}lw 8Z%[,d%Y=yoy#ȺDB)^EEiu yTGYF`Fmk.QRy,4J'ʍ}d r|}k9C7L3!5={@ ЏH *?ܻG>g, P+|]gȕΖ9 IWurVp Iم{ClLvp GZ/[X¤boK*"$Zϙ;lՔz+gHNеpo3IwU\'4I6@w&F޻-Wª˛su F:]Hi/D[Rq@CEF2&Ո*|ɯT$Q% A'/`^.*ȭUgu?׭&J& 억&mvU[,ڳ4J~0wٮӠݺ ,"Y6dg"=u:D*23DoM;J5%soXZ~WhV3?|}~hd?msbE)`dK[+atZ )'?b4*Ob/wt@yMݻ oc_Q ~ GQyjW^ڟ\ABOpbzB_/6<+l֮y'ͷa{Ѷ%hڿb|QfyL)XT%о4 /)8 }x~}&qރ\Hgn3Wo}FM;So{DwK5[̭V-fާ+ߋ@;؋ Jq%=wW=xp"I,q@~M!.rc+"֤,~b@~ʲ Ws㍵& w,۷uExN'1ҵI|ce^G^nMsbQ@ҊR8)hWAT|VJsߟqՏ羅F\6+0 .Jjc;g@-ZԲ |MۜlXl :h X1_ڛ:ڷb;?a |:[MT OG.gnH[a?zBJ2Sg1+| XH Mҭi\4-=;' ^6]TdCdkm o"ڀ7 ws%α[П}]N ln ?w"[*opr䠒|m|9)mK#q$k@Dx+XH@y6 ŝ~^ҜsķSdyF^Y6~C)_d?3է%k$kd'm | xehZ3J&]8W' Gq <v~.ǐISu3ެ9ѸTUt6N0%E.C\ET۶㱊VSմugx2F(qyLpȜleOs<}[?EV1,zxJJ712IvyeLhػ<59{K2-0t?z.?I&9Щ 6GAftq0,/ӛrB[Ơc2!K(F An+u*uןv(~}\owwya|Pν?Na_?`$\%L*\15xLЅV"s8x4FAp{DIa;$COz;ryPz* 'ҚV@;fJs0GZT_A';ILv1WZ&ڍ~Fϲ̸@$ 0 }2=n;'9+#W8.7~F=Y`jUct ]SێUEv8ǞUKk4UJ(R+Q/Eu$%6fd>VȬ xv^DK \U`P3;ttb#ؓjo[I'+'Fte$m?`.Y>O$]ftIH΋uC`-y~1j>`v+*[5^seٗg!Aֿ:|#9P+'"cN9`Mr瓥hIoD) '"U.dDJxkӹ߳neq31P,u:-bw5a\ɚ mo3z奯[6}{S≮Wp>6f3&?hn]0KԎ֦ͷc50:yVuOW+bH,^mqgRaݤޜ7| qyDo[hc$P\eU }}&Dpˏmyӫa{:oMΚK$_'տu+cl&Sy@`R]& Jr$z_T!q3OCEt127Zv}e#moU:ǭKn7 x\:¥JD8{9DqŠF@=0r"k_L?'/KV~S| ErYŷơ\9sqm"xg5/쓫*ӯjTMvU=mtU~q:nd:%m2@W»V>R8e'N^ft>Wj]',V$wۮ2ers-2^&x %[ZN+aB7• -Vs\{s x8pa윥ih$-Y>Hu9[d|N"4UqI цu-Cq 0 iS9VELu \{|?"' ] ,뱑G"D~VLL+ᆞQ Ș 3>ךJAph1Y"aWǬxl՜ڠˉIkf3:F},N,:5U˭D9kJ:s"AHvO5 6 (yW~ W ڛRY˭竪Ȥ;/'"R`eb9'vi&l*:D)?;ĤnG%)|s;pN\unvHnh &y*~ϵR&tUsqonSkicsޝX9pSrJJ0>=s8m*V~'1h]{- LR<VB &bۓ%H߻w:MnXG'dlՊw ,Slٻ R'G^QU;aV!*xvrsWU|saCS'>ǛHVNwr S, zGc|?[D g XARc{k P" H'$hͅN'c" d7,F'sFe-p('0 %[Ep{x3EHCUX2T9C~4%RzF _JͲdth Trs: #w VH-oB!'ݩ.TT\6Qk3"H#8K,ED`DcKue٤;!ҼIJuw6qO1I,4K.>@\s}H#%s M-G` )~+Em5Ny M.]ЭG OhmQT\R_VmﳭNi(uN8N+%-nDZl&rl%*$xǸ'D]H(5qg\pPӜF>NKvk4Vx€QY.M.xmj~Te;ߢf}@6܍QIU%DҜdBy76!K cX36ɟw F]X~heD9Tmg-wl,ZY;Ph26M!P#[~k,/ɢs(]MZhKh_Y1OYc0i*•N0x3UA6'lZD<ٙ\Xvild\uc:_Vʜ'wl5Kη[S~}Ǜ=wj|Uݍ7;eED] UնZD_oo#pø^R x)qs$_|@V\nxGUG}b˃XoIvy ٖ9 sVqʯra뱦{h]gfoe1YSUr["UNNk<ދVރ3^W NjXձ}' ~''=#]߻mXcyZ\tQ+ 傺nѳ $f'1rZشes ΁0mUW=F;q' 8ĩ!1dr$5 i`dNs =ުS? 6f|Nw=Ou9BjEݓ:dWQʂ\CD A*>' I=D2_ 5O?Y01˰NzO ϟxǛsDqľήJgtAJ5vt<. raw籀|LxHDxeU/;Q-Q]TGscnXL#R;C, ^F#۽>^Q濝o UkFh׿g%[^$Ѫ"֕׮ ILyGlo ?i*\_և  D`_|c8:oi>wP  %wz_:߭~߽+B>"'=.M >5({Qޗ>R*LiL_A8!\%%݄UwJwD䷭“#|E)(|t)<x&ڊ:o_Ho]MIч+Agkb罹d& L9T*Mc99gkx6m[Q{9Ur J?:sq>3QG_|ævK6\)$YSUpj %E#ٴ)3 BaKZ{M6hK6Y%yuק^9|Rp$O=kiG巟[7aQBF'XhȁӔEFRks  KwǜKS=](L%yElWEc'T*I9}e;lK#9=0{*dW5Qo{0_6Eo;޸䟂 -.LE EkjnY0EҽiH[{+!!w%T^q1WmypMa~ŸlMa`2LUMi lTqxR5K㣳5'qxdTK%ft>$.s4UMAOo2oO`OmVYpTƔíPY%$CC6Uvq6g$hv$3koIzo馔Lˍ9TǿkRɨ pT4xr&sq{Mm>&A'^wwͨ~t_YJ\*T Df`3^Ooƾg?*@%N/dm×IpUWaIJpsh=){Kb{[>?4߫Nw0,} 34PƪOkx*܆(c 2M ZPђɾFж_@ّdM/՘FUK[6@$Y{*pUVϷs|Ž %s f\) 9էNU{%{I %9XV't=$WULcf #fCfo1U9PJ686A}V\o mK)rZΕߛwApdTjRGvsZlT*"D=39同i3ƨϓQS v S*'5žlkۢˠ/Nȳ)FxL1_p)Bm +TĽ(j *zmU5=^ol sݟU֖ *:H@oYyS%73>w"!JK_.\[{WU{km<$ V/kTk5kP$LIg2`FPVnZҔ%+GN@{qQiqʾg>makLو''dv8O~3()&&q7rqkJF0)\* YÏ`"c/nSX UF#f׏XPwڳkވ\dcgԝ=pf|n-wڌ İ-ޡsS]&{@f2Cq1^ xL 5хW>%&\޿` :X ^ۈ},6S4(3Z(ፁ/)7{QE\;/q5E)dEWJS.{5w}߷﨑хa;lyԫ&Z%;[ij?5YW{\(أZoDta9*nUL.CKzjrh_8D,=;$;qɴϷiph1~ Ĵ6̒<;<4|+(<;¦ΟQ þb7 Øl>v _wo<7}G>[ Ϳwe[2!ѭј~u%*GtLij.ΎQ-g"  2 of˞o  7xX{oK+k%+ٍHK|9౤⅊<+TB=DŽds'IŇAz<+#X\qFr30N.{|q0]FF[ j-.]TGVy_iK&9Û=yw|Pʚ w=ꅒ%*G $꼣+[SWlkGlR%o1nSU {Tȳ_,ɦ׼W8zD'ngr1)eܦd+_QaX[ @"9A:k&&U 7mGx[KPĵHZ*cG J`2{ M[u VR )^ o~(k_0R! 뻀0"zqថr8wR1ʳk&&q/9=sxNzBa l7?*H>aM =x*d=O^aJxQECߠ=Jb'J&IU_ ۓ;7UҊ8hV!ݜI64(*r$Zw @7*("R9%䓨fM!c0y4v&f*6B_Kr6)J!RKAވ!$ٜ? VN>.hs.۬dľ3?Cz-! p>O8[D6>ZjU?GooEgq@`ۣ9Msu37'3*1ȫM2z.{~_مlf ^֊\kDw[h%x~AҲuKoKv)5c3W16䪈gœX#$QۀnLj\(H֭FLb́W@1m'cJUȰ LJ`w j|_D4KbVah\Ea8/24}A9(EŽ_^s}MxwTwh|~w.ݛ'޷,r<Nsl榷#W8wʛLVP5R 7 IE$23ߍ]{N+q~p=("".}q͉rclуԃ c[w:HF@`d4jHB+R'DUysZaH|xV"Ia1>^89G3AXrdg'-w,^c{9EX P/A9p1^!MW9z^NJ R='r߹ƕܻ$W{KLYK|̀؊p3êʁhxط># #i^m'?G@CxBxKrʖJyuM喏أu"^i=/`RQH+|PvO (NL.&ꅯ%#Z?CWZ12ɪX`Wێd7jrCXmLl@G"2-`]fvzoWY?t|c MƆֶ<L9o}h쿸u>S.U#m<'[mly犲`٪3}=zUܴ`!i^>6҉T~X4oO>:̘o$r\*3/SIJcvg2C܌8? d'v!{`7$R9xl]:y[) 2N[4aV:+8~GXU׬ nj5u`6m/Zlͯ#8") p@~ceW٣pO3eC|7-9׽y}x޿u7}qQ=g?JgcwDQk8Wn/p*]߫^Fpo%h9WOas»goYVS v~f "0E6SMbNFT}<%n٭) (d`HbLivlqlɬ ē=#NJSݗ%wybfF;ǞX{nRR5sa p/>_F8[96.ԕ| {el]n﮻翪|&}^ߗ\jbL޳[aj DխM&9` Tx{ݪb@QڞaT֟[uv*txId2׶Dw$>(?S\0'ڞ/zyxէE@y{&1yb"~ 72V[@>Tjt{<`NcTxj\LtG}_A/W'oNg9&7%W5&xo^E޿{8P(ne˪iJܖ@f:cq@bW'^'o` jy{ʗMǁ^gIxﵷ8'DJEY#Qk)RːZ pS6h/3^mɥ*uT@/z.W5%!j\)vwٳJ{h Cor}]6$)ψ-R9* UYI<ޘ_ƽ}_.?.UfdF)pp3ͨFxFwdA' +&Dzjj?ﺗ _f~+y}VLOw_Z*qo3Ur2wiYM[wldI&ޱ>Lb :KQ7wk=2 ("[Ug.WhJ  ND\q3=QB$"U`鉼PՇ8굷TOJSٿ|s1= Wmr5w؋L[fd3)U\up%4koM}ow%*Uf0"t@Dirc%W(Q\e)ːT k%[YUnSpGڪd$(;5 `$qb ryCJ)Cfk85i _˫Xi_;+)5cEcS Y+.@\P:t;_"ڵZroaobsك'. <<Dž1`F`D W]Yژܽ]pRʾ/zq_i1'in;pZ $A FK&.MmQKeYbYچSFx‡VU0&%4]G$ЯKM+sNyFc$- _@Y/}JݏMٯB"swCR=/xtEz7gdnUxE>UIJxd.S<ȆF/b#mO&Ώ`R P:r)vhsaLW*͆>{"FU+?yln=Y/Ɠ_[}}O9c{x.[^^OݗipCPe(ۧZ.dN9^<Ϊj xl`zW~x\- ^5V=t~?Tr+i,NCc}Q࣒Vv1W]<.wa :e|tի=A]^G;*¦Ub%T{lQd.,s.]&n|jo\2PsPj+Sxj۟FQ6{_#q qܕ]m ;~I]ˌgXpCog3'[ޝ7 e½Vq.ŎRXilϿ?,? ?*0P5k2A0׿WDʙ"59sժK۷pDTfS#uOsWr 0'7w7鎑q)v&Q/25iPpQ:|8OXw}(UOjS ZxW܆7s !oo{m;aBcHv=ZR|BвB=mXMqM Lb)~Dυts{: F;EnVؓ 6Dg3cnfIG&(cn}x٤kLO0U$W%A |NZeun"-n|ok:?0|-nZ1y!V-MI#Ĥdpn 1ު 囹8h?a7Gi 狮\3@BE$\$D C*v?Fṍ?%:Қaq?\A6?3R#a& ،Z+ҳ[g+t#'mMHT Z(@-XJ>[d܀]v(Yn\qO{'s^moIm7)缏>wOQ8_c,Ὥn$2CKvL Ḭo3y#@o<gI5RC<ٝ9nA6Fg-" 1?=i"m\KX -2"ӧ ˆ=&천di;{C?7 rpvQ?@Ҥ48g~HAeq} *\y L/^ϗkUm\+TQ,\LHK.ϡX320ȸA! ,#\^iϊ ry:Dr.髈F`$0sR(' _BUMun*&+CKg{ ^MWYeotף%! #2nGYV7{G\@ QTgo0Q`2_ji| #c2 To_Y,]XV] fn 5DQ?W+Mn;਽18YqF`3mOdm]C/cةc ɡZymW_Z8pXiney(rzӖxt~XK{>y Xqth{$2rM1 -1T8q*֨|dMT!i'Vm]Cwp*m9U c.e eJ[?h5Gæ@8[t^rVT_ f2[5c[U ŊM&sKjrDLՐ,*RJZb`G*.]Jh&}U x0e%^9`Bxլn>x 7hU{V꟱vdKFlŎm[y^U0+JM'>f xrS]XBtD42߫ @* Jn]y~T|EJ{)>sħ4߈' hpGhb:%v4fmxܧ;wKm<0==mdռEk⫬mK[LE&Z4zJelȶqWX6ՇڌSom鞝g{.zO%9؜X 'ph쎊 iR,J7m>&sٽ=A;_}[JY|u_|:Gm ػ}AuSOh2d9B''nίDc]sPj9>qec$#J~~&- g9[yQ8ʳNGVhރ'ɐfQAYX %Edʋ;œU3ɥ*gv70Vl.uJoB/QJL#e"[^7_R @Z`t5֯8xZ]LWn9Hܽ~pǿ1Z2;)! G2 Uw,_@"<:d޳u9L&'i*쾌_p d>orJ9V I@[ǜ)?uJ4M"OޘFu. rzo|vĵ°\NVK}IwNM% tC;9_ lS P=Q.=!2N;%_l^4&(p](爸ͦ&H\~M-h6-p9t2y=ml, I.ZLWkL zj?MN&R5ҹLm܀mKmM&3cĸf}oOOx~s7:67Exd"[4ϫ?JN=8JiSNq_7Z/bOL}.LnpbsCd1Sl2{[g [+;'8Eې?0sܟ%]K$+TUvHHb*I,noũ(=##3Y4,d$prɞ^T?MI]4 cc^Lq\n9]4Q%.Ò Uz\YءKB}Ob6YHFRmOeMxq;nSk1bPƼ f(CLxwws?簝-cX 7U8؇]z)9?W]چk\"xRǻs'R掼ܮ.H_=fftC5pAp\t(߅x{RxvO.BئP4C!nq$5E|<hqS(#QG8%f#C>=KUf͎^WRݍ w@@J^O/|eݵS pn{ `P>y9.mCV2W僤E~M~UBVK,mg\NESǑHGe-XZSr|"q^T,R[ HV +[FG7Jsjoa!;W6gxojr$Oצe:5r=, -u9 pm/c~ 6kB5Jz {I) +YV~oPIUjkF~ЪT@f < ƆoDѾ -hXwg+I빻#\, !V{Ũ@I@i>#}g@I"[8K{7Uws n׫pT"G"E|h;YE_>eC֤4 +oMdT*@59;I,1YNqlz9ÐH1 ?avyY)!yk9) B'،.+qQs~V[" ~$c_'87}E`}у^f@/o9@>jn7Ǧ mP!Wd4Uyw<\ˌCӴYkf/fcL}|~PmdXVb׷,\!M Ð }~acjY_N4Vyv=6ȏ<*B" |ӱ]ܻ W'JY\iC8X;\79's*T?MYTk*뉪d:{(I652y@2k ]Q}mJ6'[,%d7.M>iIs2}*|<ҿcos??m2R<&RVH1Фa쬡o_;Ä@Kp &"#|%Q~6qҞ\2gr֘dYRenI gzIWzO# ]><Ed1RqH >4wnߝpw=58:*aRH7@FlZ# V%`n`]! 2l 4UR9b4=K.#Adh2JR*?-I+ ۶]" yٶ7jH=ldZf%ꀵ-=!r.p7m3m~oe'^ZOnT=DŽCyU2UQsJ{͊Nfiݪ*[7?╧`/D GVEmxaޥՎEncL \~%~:1N*n6%rZ51e3D8jt{UXRb.m 920Q'EZ 7;E9sr71C^#!!K X~>D&L!aö[o fV#@ڌt!!Y9Q&o4c&y$TDfHyyG0TV|#;2x%{J%A+H DOrܒ'Yu¼'8W}'z!'`۽2cnɝ(Wh4? |T7 pXcfJ旘_You+0}x>H$V% HÎ (*a"寯jҁf%9w+ 8VhvUjgC%5Ē[<$ƨdJIp@voX6gXyN]$w=xrW)y :/#Ğk-;7{Z:?է![vmz *A!  bn滤ګ{[g n^ў{CLs7kYMhEÜ+buh|aUjz}W֧δBHͿ 7`̑!Rb-CS (rT q<<>'s{s@DX%HB7ZemN0R~s"so %X}dU>r\b+#s2,)7o*ff(5d2}Cw9ب.VU71%Ycn(hȠ4L[XQ+PU?T9a5g{3yՐOm평||/p\b m gnSĀG*2m޷ Hߚ'&fKQb2%b? (ipt^+ :zr*54uC@:QFlZגT U! pϓ;M rANہ\hk=!(UD:+1~nVc C<$/rJ..`m{rSZ:ZLe88 >S,{! ! #ci,M']Olg;#1UCU*cB9`f@5stZ^ze4 %U'W^{]Z~66\}ǛA7G@pRwgV@,3/,Qo-M'E.J{22j\B2@nn^Tq~WՊT'0:+I[{d͚ *i!OD͹R+WVp$Vl o&U^VsT CujgIZa]wIE%KO_(̀VzpZӂ+UIBm*H}{[WІ}sJٶi*{?<ؔYζyq5(fJk`.Mn?J<;\ ޵3sֶ }=4;9{\u \n*ş @|.>J:Jը϶ّM՟f)`o!ÊȪTw:&7klD<ɰQ^7i5A0ߪ>\4X[$t:.^$gȀo JQ' &!M>**ːKvXfԷ/[8 Gm}UYVs!8HZWMD!#PIl8!0m}}jyh׽ hDc^6JB EctŸW_a5AA/VVCtL\E<"y2S-d"cOpy%AًD3;"tnvp-BE9z@nty:$6KPk*KP0RMu:Ӑbi;3#Y?(&qDP%%6`Ń܍]<i$Cn═u}; A6$ ت@M}2Vf#%`nN"Ɩ&J1>'Zn2`gp{\ZL›[5I"mh a/+2jͭs s! 4*`Jl &Y1ړ]zyWSG\ $;&;#C`m,"V|X-f ޏIdA9:V֤sRq CG`Sij<3,bbDHR !Qc 9 ݇t Jo^yf3 Ud ,6֊a1 )b̽Ì%()7\sǑDrٽu"p e穞/MMt:eY"A8Crjog#cQQEdTϔVRy\u -D`(bs_H[B߂agS&r" d2-&x]~ 9$1Sܵ9dSqKBq.?<oC634SY$eO6Е5iL.n? ~ s8x<* FKYuk'ggf%5>)屌|XPZgue `=Pz5S8:ah$% sm|]GDb@Вv6;gZD<49yޜbw-mR%fMjkb_h(ƭ4 Kq}z\Yڋ30l,?nR hmܰxΆ^ k2+^Nդ16J9c^Km;5MKjxnRR}qkI9ʼ9S3Gwk?XLQ$l\6*Kӌ+*׼`a#GXo!I2$!0܁C.ذT[lf`_Y.c|,qlXfQsGmk71)R޷6Y{Z x+W6 Z&^퉱(_HotEۼ?^/>1-TD}. Y\A0ADv\`}7 *ʣB6'\sF^[2c^4N3g]G3ܷNȚ'leGƈxcaٽGOq0z҇mo'@;5~6('ZgXM{6S_'t4d06U<^ͅzÊpQGzƞyWW1aԠ9b:Wy khLi}oI?wot_Qſ^{`{f&mqЕKN|-N껃{N~q|=| % ݒ6WܯE..M2 #\v$WlnL45q\=5)\on4b% 7!0o*GѐٽEׅ.P2"wD$5Ƨdg1B,W -(h 8E1қKH0(yw;/E ~nN"K0h_Y ^_̷oxe|? vFEt3OYa3GHZ8MzS_IUV<`B>croRK`Bzn+~iX$FP ʅTKOfB*HU.V?e3 ʠ芴 Xz[m.i4z\yy0uZ/_c>Ml*NjoYܥ#vEOg=>yR ͳ7&cF;D9}OEj%Sy|qr°mN.i )`mr5.TfvMT;47KWr"KͲvb *D#7oniDQQ/' \|EM8)?0mg [oKGκ7_,ev. o0 |epbҦ|}brާ\l-&jՍTNG*d|\x"L|*9h^y=7z!ѮeДhxLUϸ5OmSq=67hTADT 5hfuvnP1qmsW."po(ӄZ/C*ŶQA UpmL 뚯L4]l^X7!zLHe >5@vro}PKT)Tk&kS*AȂsx=']f@wRDu^~st=;86<<^л+ךoo>o.r@x_~%曗},93 gn(/sv#hAQZFaiLO(lnی !½|Ŧ("y-6M\I-_ߌR/( uy1, ʆ%I uNd.(3$K:dgu/\s27 An.$0u@ז}]^'(A:aOۦ6Yˉ;n3DX]yu)zJ j1f z[Л;ɵ{.- 0YR 1yff,9o+*.}fPpPyfm!)R`Q8KZ/E/_MYǀql)k.M)2 8z{3L-^4{<FQ'#ne=I;'t'PӶM9-@ C/o^󜞥,OZQZZ6y]Q./ ,Yߝ zs~四y'ިfqr\aI%YT T4cz$LPVhրbtB͊"hPDwy!N)t# fm0+RCe?D%U秒9NΟDӥsqNX ]gZs>gOmc4ذɻ?y$PO`&f=-@Ķ_-xyB>($<#Dh֢P)L7`l\XnCNfz ?kfb7 HrA7ʸ<'린wIe3uHC+|^ϛ zǿa?tXw/^viv|y{"'EvsWx[l0[iM7ޮlEFmU"Vd҅}>B,^Lr;Δj{s8']:PՊKd0J_mnk6K^P㹀+Zotx8$İ_Jb3BLp.KZpNsS@1UMW‹0/Ɔ/Sȣ%+t~[*BnK "l 9kdm΋|㣉XBWM[u{ Cu_B;E$,hͺpD((Qt{L[(X:Ϥ.}biߓk27'.+{;͓ng$Yf|ݱ?M߶qBTsxZx?_块aɤk./ƳtyN;uVd E 1L.[s1sOP>'YFs^xg?za{=:Xck}κygղǘsk~O5U*.Hg^;a~4eyRn{ gSYq=ga0e"|bymҰl WXyQ}Dخ@<"rY'@A r4Qh#<[R x^9#W\d#Vr&GS?jlx+&cdx65wd`U"gA?oR}(_q sAIc!,h-.TaybSH؛D^\UM\}ɕ8a4t5gM˾8wD} XbH@A='OssfrG]]fʃt3"+w5&3mE@ӉnD503&[vQ,A:( R--& ݺW#9#vsWwH+XxB (),.V7뭒dվ /z|KzU?/?;Ƴy#[6w1V7V,64 'Nz v/Ƹߣ;;e,Eٔ!S QT :yiO<؛ >~9X>5t/T$ [sVJ}n Os>@JC؞dltzfj+iX8P(5oki)ؒ[cH ]BJ4:];ݘ9"%7 -ET73?îjUy7̦\hp<# }l^|;Q;{k.ߟ_ -zdMVaz7~A_4 Тxow[`1cZD0Ȕ! $Gs?zXGwA`TOUk ,)M燱&o 'I%06sbtdQK@U_\59,|+mWɾd ܒroѢ0 6ޔfY_ Fh% KҊFDgGqڿotr:~L=j *?kWD`(YХP]N%;"im$S8ZhiKԀZsN֌bfUKr?FF1rËh ^DY/_IBN4%*)]%)5o)*'PcV;Lsx= jgǩ>;5΢Qoಹ)8-d9砬޸l%@\xeӸl$ia]C!ڈ }̕^!We8e {w3gևZK$RKs#`w5׼|/C'}-po ♫4P?W8/DJqߨ Ī!,Aaӎ1TtZ#.=4ЮTӺLYYm@#\8g8O>iOP`:UrNkB %, ٺ9!XHOg>;.lt3?.?Kѕ0/HARjtmQJ<˦#7=Kn5=iHRՓV:>UvYfF{`n%= >߉ݝw+v{`~;Xl6t}dr~B]}mڥR3F`C~bjђ>| vR(jt&gĜs;[\6:^"($Yc*$89ûqo"d'g*T0@A| : z06e+0eqK0/ ?B#2s֟Q>7 )mʚ?Fp Bv-ҹOBWUĉsI ”lPPtq] 匴'q~иw% 'D_/Qe;曪F061j`@#2ɒe qB$q9@wsEDJ?ʉc!,.^ k~NmmzBO>P^q:g#ƸdºźRhX @Vq}L]uv]9솁/T|0 Y (_UJ=:QJ )9v͈b\ خBE@]u`MGWl)uʐ<>J61󁃺C3ϛZa^9R?nk=]z嚝4-ԧ*7niQ|5 'lۨ@:o|\{> |sиu]o6sOVve+eگDB 2!TzosKQ\"H6˶'@U84")+DZ'f[X֙ kUjR9j?-^>t͹xw@MKu>*us^ooix{ěƙP1(Λ_mc_˛eέ {5k0t sԺ+}'ȷ B&L3Yd(k~kZ _!qк%50Z%a6=O#o0X({ ]J9&w=?='/ ߿̛sy'v}~7OBTvj$S.Xݬn%5R΄M'L(Opn٫K|7N~/QlZGy mGf}iA瀹4yKuS 3k.iac#!5f~,FQ6bF4(.7%Xr*OzA7:O{#'y~r9"w`92%ĸO2{} /bLp>>5w9z# Pԯ(\_O.(P>]Nor`ϛrœq| 6:gPb,Rȁ&\LErTV[@If}~}4*}\!EUY_\_ "ޥ_V%;%D z5w yDoglr:e]Z BzB[qk}\]|ug+??128RfLؤ{eRnX4((ldIsd ލ/bfPנ7L=x'k^1Ib+HR< "Ք+(]9/غk*k2$)DoV"p|@i>'R键r>α9ѳ-T9]G﷣σIdM>F$rvgѝHW.bz6,zsJ iLh3r6aXF^T1͠ ߰"Y1EٚB@ Edw g- <5K$^nWxex_c"> 2)se`Ѝ-{.f.8S>%5߁KYνn3l$=y_,}|w޵+[_30AK)-f+S%o=mmjX 9vy 7cT,MZlQ%ϮHh`.4$bf2o2 S^}b\9 :L5RßV9e4soo'N `RGktٲo(]Q3R_U}}I; ,SжsEnzxlU!!߉3/Ԯ6v0%.N9׾ĩ{ t>l^ź%CssZPAj/" t7G7W/DhÕ'#{]CҬu0O:Kvň+Z^5h!ۻ;R[bjm62BA?M\d)G`J9w6M xBbbV;k~Tjw^ j,Ưo*,eFakxOҁfqFwc•d*btvk!ĭY}ǃU/o&i'Q77!|^ŚF>MwM3ϒt=c̄hV1`pK[1R5le IJ w!m~{=b5β2QzK+HXHD6͌ښȐ+ |K+;pK3N r`=פ{ ]V;6^$OUjf}3{o𤐋i7j! N)k@>e/k7ߵv?{凉/1buЂyĺu  <}z{+͆|/#x/3,"FsOauP_PֲE4H_y/<AR 9\@0 v&( b|l\flRDi~P'FD܍aXo.82e_F~&+4+(6`uVX{:Us#ڜ<$ʻ& ZdgíSqk"+bN BqoQCG֡KHYM"krDueI-&6:5 5n_*k +Xf\XQe%#PjϐP|j6[kk}gdξ6ʊ?OXney09aDŗ*wJ9m f<>dw|g( =nIl9wME?؀Lo{S>88O0Z D `K8HH`'+Wvv3/ƫbSRR12 rb="%IS%k^mP( 5eu8< pݖ@ /Τ@6ٝeNd\ep>ڃp|]Mq12:s֟7c7 ̈\h Eԍ 8fʒzr> 坿L'sr*zE#K7ؔ1~w{!H5&;[{{:-tu6̒b }b,5#qw{%1sk.L~<^. | |'u~rƴ=*U:=#9t1("F'˅=(8 Ňtieߵ%ۆ϶0SUMzx5 4 bbc|ؚ E(} X,jp F7 1_9D^>q'KCpcl8b9!ț3>hP4a/i454X{-)ڌ'\*ssCTӓ.x , |5ldQh?P|yQ0*Ŕ{ u9#m[|5~M3O3Z@M &ݬi>序Rh@T,v:Dk;$I<_Zzm*Ncs nv+D^6˗YYk^MrbDj,.)ʛ2m@>Gek_K k?o0:ق x#Q#Qo4K$Hk WYot|Q(:6fQX ~[GA0P,l(^7yݖ'&ğKt0_{_ Sdk2P9y{k"nWx~Gq{XzF;$f_aș՛T'k]͍dlū9[Y'GQތX)D{l7\GSgW/T%|͉5z>C%jx|ύȨNkq0V糿AP}&дA|}EsY1>h Wpo>*7ˇMe{.nx`71=`dw;^J`qsx&4H.^25Y ٯt2nBuqz U8%ZPn$gY^I)K>_C6eJ/(z.Ly dpOˬG6cʚJf&YJkgbOjsxw1a~52t&$(kqmtLiP _m.3xͥ@3`^hȥjH]~ $)wz3 yxmNo"Lk{s" ؕ vĽ(v.M?v/9|ݍߺmB-߰<cq(G7_8~T٧Țs!.Xp2^*LqLd?)  0쯕cv?Z0uey/L?=|5[|=yJGc`y.0gpqex1_ؼ,ƦW+~qD4'lƵa/l%_gF!+V;/AB|<\ mYqգ/g9> 9B$}= 7DEփgW13Q婾`:#52;$m0 vK̠؏Ji9Γ, Ys`KJ4w#H4f$/|+y*aelzBqFߑ“9oy;+RX L+o \FDL\=J$8bO~oNPJ7Uo[eDd,M26`6q `!Dh{7}́,3։ާs4:܌7廔‹BH:Aɵ7,ښ]ލ!)<Q>d~V/j :hιeۯ 1f0nvn͇K{y͹V%ѬwQ7BO/n稦¼зpRh5b"zk*I\WAx# i+z(@c';ӛy["C[v97V5[gJ~֭ڒ$79֮wU͜\נ[qՁnPfWP!o 4Rܨu!eyAS}z)⬁>) oՋ lv@Q)m6CE~xQPr$-%ſ9X>4ol=3k X"#V2$Hl3g+!=3ԋ\/ J$""$IO?T{M4H@D 閃c=[MЎR2}N|T4)[7&UDvmRB޿~7-jS`xOKo3]A{{6sH e#P%vm2߱\wy<t"kBa"22pn+(kR'+` $~ Lإc9ij]%(ih\}3GD.)Ӌr|ƈu4ʏɾd!{~dSY6(FӘظoKGIz;#7̈́Cw&aUgyI/4,WPWhĐM%ʼn(Bw?J! I`ߦq9k4ϴXӱQ+h.MJsúW}$LjxpF nBU%wh4{V|,5/:imҥaCXHR;@  /']ou>Zog40~8I)?DkËO c*=@%}'ieF6)zvGȦ%zȮkk0&\157 $RցF{'X}(jHUV}GA_dˆhe.syq^0(8 ѨMYn9[e@C^ݟ7z9$]ZJ/O!j?:}~ITV7:E:겞#J|O.HqbAH3^.s~#+m}|%"}{fDTNgg*fxk/)'7y 3`'kk ^nW.Q’]^^hΩgl1G 9$8e0 -q 0_/4T<C9@[A!qyx^{gb3B\3n[vjȪZlo VC.َ^܌F.xvMfO5+@;`|TxHFk^cO95"#䕎TV1"{+*c=[o4.cFbZhuDbP R&rkz%m7"H5E;VA+bsDC"}Bmα͒l wҤtq^naMW6u緰!Gszo[-lS/S`ώ,XS ~ 6fveu9wvYdj"<ʣƾz-BW"f9Zi`=,Ls|B1]jG#^B~5Ls ;@W-fy\(>V;08> x*gn_CC*zktگi p1Fjju\x.;PmKǗbup]Dnhr:Jrċf^AdTAXAhrp,a4~tm6`GR URnW$3;`JG+%#b>yԔ}mƱlA0yW )7ow阽\酞F6Uwqb"^n3$ҋ'*GYؼQuk)3[aPQVښ8)!c.+Ыm sr4 9byF Ju xMũ<5tȓ;hbXb4`lpS&f5{U,e^?;ك*ێu[Cjp0}ѯ+l1ikNj$)yc$«m"{|Q`yim$6呤R}׵x,k%,΃HR.| Ey> e]s\9kŵP]rR5J+q5R ,Y3CyW⛍5#DsFLMy.> L p&{qՙeo5\{f ED>.u=-"1z3iQkԨ\b^1gme,=uV: ueEaH!a{uE=7# ֳ#eh8! `fnkHWpVf#6=w++f*e͘@|LfFF9%!!(*s ne"z*)ˬ|[-%*xóeFf47G}7L!2Ə^+'e7Iw eK[j:֍.87}|[ˠ_RS?x3{G<޷;K m+!/n/AYكJ5C<]ȍm%}7l-Ldmy&6}r)=1cHGQ>]:F CǏR2 Ye?d]Ex]' fZeZ:QH!<C=˄~,c;F$ӟS> bXȖ:. fOې7mm=54Ex'0^N!8G%/QU`-Jœf,`TN[s\8!J/{`*2r^/9]K nxFP00\|׵[^;*GKHI'dxsw")]_$w%)e=ߗ)ooE/.wlJ T)ԾY)sw$N0??ORb> -JCA*o1k"%.cY SZ^e3Lho nK]C:L7%s _Wrf&#`[^M5K田pr`||ŋY %@B?#4gyY,fV"!Q`_ztŃO9"ΐ'"cjچJ6"bfbѬgY!=,j7Fd5BM:}QV9dڲ}Qv{MRhi81q(< NK+riS޴w |Nm<#@^D-ҧN@?@36v%>mHZǕ7iX\6}oE/m ߢ S/|=OhC7^- ~ٿh؂~Kdց-˩)t獰\rSqz` 0אȈ@AQhnڈFkK*H4;SΟ%UB-An_`3MDuΝy_"xGȀ7~z}Ey6{Ysy;c5֙{Ց;yX(ldyVq~/F>(I5zf_|nuaaomwqw9Jk32&Ez8ԛmT]|e^|e}X"Ǩw /VmX{_`33Ұ1"yz)4h,nOTOj(:tie wk4']gL͙v56ič8aϏ6taWe M.y7۱%Gr@T0L yR>#nxXQ1U՛$1M=>)ADcť I$|Mȝ 06r1 xżulzFqqn: 'E N(ѥۂ"/]}~gznt.Cocm Ϣfbހ(kA F0 >3(:#4O>FYsM2f!:%A@v5E6 #hSΖ)q.5>~}O"D{l}"t,v);Sv[E: wQbvIX.LHuM_aǯ4kP ~b%Q.7U6~~/c#@abwt]V*N֟u99@\F , :<_2N1k+Qc}@At%)sO}]A ,Ӯh[cg!GjF%Zx؞ȦXsChNyUW&JPgYAju)~ڭ+SU7b=P87@%_{܅%9?IIzsKԻY^OwŋIYl;NW{i^ 6@[n9˒?(@w~ jhQ {e1 ۽>_kHȶOpRbYI`27\!=O"uXt`jYD]By*gP(Ewi;X~A+\9{Kpo 6D"%BXۥP'7CmK_c͇@6oXU)ΝO';k7=P|7k1wwuOpϔ7h}'SG`΁BdkYeCk6}>'dxPI8@srUM}J9\'/5Be'sOr5`2@xHsXqMx ?g{LwzP~s>zwSN<kHK xzG~q#|I_o( xK]<}sT_@޻܍.N@g]6oX<\ |! u:O5,=)1pӼ-<@u#wop1:z*.^,P4gG,msNG~;s jX6ӭh d.^˼Z^B3 <5gּ&zz)@'!ŸXw{&;W[]=WFu dyM!ϊr4V{@pSR@{o)K(ɟNavF(z8iZt3u>IWUa-3:/@uݓ^0F?4l;57ݾp>{g/K򧜰1ġ4J6j{z`s&/ٜqw-~=_e e΀MJ92Jd:SgܒemSBe@&-\z*Hh4;D!-ꦰQ|7}.A+ 1Pg|a!9}D9`~Du OHb˫[}8zWo߀xݽ{1#Bm6_xh=_W` lveeMdn]vmx m9lǝ{_ھYǮpޏq*m.:C^t4/A $M 2/K#sJDjJ{Ns!|]A̕~wFqm^,aDLDវ!{c)1DRȎJl͋ w'bcKc@y(.ko}DPuUY# [h;CH,GcJ UF U/ [Fg'iݹԥmYfޭQ n-;އŶw0ڱ=p̻ (4isˉϲkBȾ!y[ 1(YV w]Hʺlg rʬZ4녨L љAn0&YPA4ؘ=\Q?O`wn`-E1zQHS=x[1I7`#sMА #<KorVm͵ <¢d3̳d{` 3n۱0Ev!7,&J&^`C@LY0X3',]Ύ^8~ݼ5\M*K7ËH>H.%NހR QSRٓ*ֿԟ QiF| ٩Ti2*DtzG]lYik$*ea1Tnwrv>1,RpS R%%+wᑇ,&mA*wl0 EBYvK7>QH 9 O"$郳\J˟%ܼJ^oa^0իU$@qDH E]!VI3hyO&Fm9̂|^*wu&hIR5پ:6)O*_}_uʵV*Yt3?2^.֌lv oû[VF%+0\_, &_PFeAt4ƨ5 ,=N z)t=X/ml2-O.6'V|[}J:AUgyp_oBp|`ewY⢀26x9!PI B3c{ր]?dacd9<%p]E90޷]JI|@l\`ΫN*_<#^ٵ~C&Z뽯-/XBy_|UȲS WgWxX&ȍj/:Gon,FTFp,a-]?u&enq&CQXէY4WW|`^9/.go Rj)gr Mfl6"%|Bn`a| m߉Ji'W0Eiidjrww{¬s3,t-!ogysEz4_ol6c:~`YdM2&Xq8՜(GG/ DǏ.o~ *KˏEX'?vF%c޶'t}|LPP27X$ rK  '0[ FՐCV;_ßie}/@zZ(^E 9q0  W|c~W6QKRfL男yAqwk&➏ aȩ\t0+Pc!Yl+|vIR4N/~[nf1Smg':R'JDd TΧo{t>a&k.j1 ~\VPLo\98Q£(N]5|bhz:·WZ*Kىn-1ltiZs!QS` k7AÕsěZJ^z\Z]"VQ&u ?RU 󾁶6Z䃛}&'~R'@ ßAsmaYdzT)@ " 9_Uu^JjQƨZ`nl$ϊ7)u$bܙk]atoV"z4ܢr|/Y}lYdcތݼ(# \/L,5@p0Sjy|i=6\޴CDRԏ~'dRIgHoބ}s.J%z9N *1 7b ` 50tsN1bVj"oc7Tfj"8Y=֨kS3rWp,2d1'rb=Ogfi35'2Z稦z2QZ' ַOF1HRDR=KF-hlNjtdmJO@xwvm-O(i |?q<D7L+-9ez"y4Z+<-i73j#ŸhI]}OyS{umǾ)~FFme;8]&kvFXd5Y{$9&GVMȼKT)julWﺵT<@|Tz- ֏EzJ'qb[47,~st-&De{L%X4e5_@2Pg4(kaN64Uxsí#Q`Ѫ֯:G lv6œ[X>R-hqlruN gC v.ʅ"7)l/Iꠘlb U"W}UWKoZ1p]/Ѳ.ebaY3{|Kb]]+6eS=7tӢt;] @a)cnVn`_gY}H@ŠUW{YmC ;p>ߝVb{ .Gr}dN-ڏ+%Α8@~2T^|Tpސ$DoZ5jŰO% E}p/"o}1_EvцX5AC†?H^D L@S; <6Rgs1r[Cs<G5(|GfD5hFFÑᄊ;41Vr!qkƌCS\"ʯFVbP4_@܇[d1>*qfUcMF܆|20`wmui'pE4z6krzۣy }M}IYmT#40JhM'* &jVҩsэŖmR0j|8Wr/Gk`D|XSJmc0KUD-ǵnיjp?| <콻?7&UV<K~9lwJԪOjM\<{o BZZz@S+ߏǷK_37)} v?"eu\-W;ۺkƎw?}N~񤾃Zl2nZ !gj[i^ioblZt8;Ripk>w, 68Mj5J' 0;Ҽ@gt>@: ؔyʼn׷f=R,B)aw ڮum_u#yF6?Ww$gcE58=|bڈ߹_LM9HWGBi O둏 cquԚ޼64c9.{G xS4ffpvVM&~Vp2#> [6ޙ{Mo^6jܝWhúƇ%mSz(׫Y 8.17[7ozUmPL:=7{H""pT谹t zw=VXH AcÓWt溂8g> ʎm5rMb q\ʘ$@Y,*GcPTB0%Yme95觓eNIHpStDCi]Ü6DtE&>gM *<(ɫ ye!3,9ʐ?Ckc-,׭z U`%Λ.eEX{rRg>Nd;1ukg8E֙ޱI^}1Q֬/Dr`ϼY)rRꀒB[8ndݖhs;k)VJ=>׺0{yD2[> z9s>h>dFm*&쓈 PUK׳}kjJzm o?Zv"WKkA8_[^Ufm=VyP5Qd۽|{VО_󼘠*xng)+m暤(Dz'.תڤ1qߞ=z+gY]!""G'NzkJ?dL+ to)cKP1S ;kgèd*q/.Bs} p?l GqsVg$՞)'hI &SGk|\ fWC|Ju5 g8н4>z v}rT9,K߁wcK6JsiŐi=1dז0s i))9oyukW0Rѽ8^F'y^nLGQ (š1f/^P-9ެt4SSQo+Hj oXk6AkVt!BFfMyaEj^O+13AnMeF 'ح|X3Pt&>JI簿2S2}_5و&-o,y˲hJq_uҁx;w2(AY~ g+@xG-D:t/|~U<,B6vt {Qr*`\(=#QmS5: x0i<@o_j-Afϟv;3tRy%`i]`VPq*Qº']9u/;O :u0%vTvIӕ!}k.S!PvL̚4>܆-sZR@U=^%ThŭiYUd$r.G%昻2k׵!X1"-NT&)B@d Qώi/\]n2 Dgs5'4j lIrM{m][=o@P&a1goPFZnoaoQfj[?8Zfę_țהs|z{%%bDsqN, '=TΜj D2ߙd 8,qyOY6V hsF%yqGWja^|.m]p•pUmmE`Ѫԍ}@fKq=3x+DK\R#\ !4uǹ:i/>g뜞$6UvvEWF̸9u;8IՀc E]+ 8#1mfU|B}$M&chxZ1e[ͽ@NudKy+A68}[b΢ ͔~~-H${T13I0[qNW뿞kj#ז;~Hv+I>m]{rT,7uj\A4;s_}°ǻo_`wV߂wjPt/Rls[tYyz)5~!JvYav/Nf3drf'jT^^~i0g&g@MU=6ưL}'ە{:Љ_?k+7'c)COQM%|df7@n# Z@^lHO>UrQW5 U3#3(/@uux Btڃy,.ΪBWR8gg6d&nزcQ޿-5>"k}j8 htǺ>۞թ E_ϻ=")e;?/YƼ ߁%2׮ iε5:Fw,. s12 n/uur1tKY{gvxi |u~U{P)%лF|i]:cs * )Y T%`ݟ&BGQNrژj6pY_h *؀h.kKًLtpb j&zCM35q+3K6r#РSf9?) /`=q"a8a{V@iHxƸjцmb(#Cw _$? JO?,E=``I΀a013Gu G7a_NJDn+Rh JIeN w\%;5hs*ׇySqg'٢M =2g9/7kϬ"Cf#[4ĸE,$AY %pmu5u+.x;lBdzBOBjcRYyYwBAuo9_(0RMcUZZ%?IQoqY"@aG 9O"#*߃X91>wk+9ap[H!qϨ(8^S*Dg:CqH;-)&ଯ}l /ﭒuD݆X=NU P*wgf4Э xn7cϽe }Cl@{Z0W`70_.kn[ _0KLrQ9U6#Ֆ zUu>P-߄b?`wͬK#?uۗ{[ mJ;@c328j]/0 |6CtUmeԪ%V=m5"nբ+;ܶ1b\^5Z/fa./SO>QO<1JT ֱ(ufY&΃Ѐ2c>/UP@8v5CTJ,}F|8g,*=~)e]BeTMAt1-̯|Xnoɯ)D& qDX {nY+DT ؘ9uy?nd &!m*=PǙl[LJ]vo S5 /_ ,ʻ2hΟpfK˱~.٘g-@yxWJ͟im~QQ[2fâ> [i=$:pEŴT Mv)ɦ\O*ZyٛNSrG1r7d%*e-|e٥7M%#1!#8ְK`_FVBh1E h GZ7Dqc?&$bYjmqj2E67ZUL Ji#zΙN|\yxS\RƋDg%|*/"\⟫}?BȔJ)mo32\FmNf ,jKK}\Km=FLcz%^הVTOH0yQAk7 k hl=? e\kc^2]t,@uҭ!8S5P/BЭ$̕89Inͭ9HoaHද]Ir84FzR5w{'4ja+hFVZ{q3W< h\Bj5ZGvGECwrxp8P.$1?_h^]x={וKQUllxuhB'}HoxO ;'2=$=B=kAJX2|ߌDњ!>5O;Cۨ<(ss[Q{fzC߿޵=6rP!k5u@<~{u">~|? M|Ksbk7vR7`7+ؽЂ4CMǷ̫3Ttjgqճ4OfCZaovȾ\㬂DL `g* {Uqw?Hߔ'c|8`ьXO|LN='Y#O[.=%b/4,:QةOuĮ 1gn-gK(rMմЅӒmN X%Faܬ[Nnk#뷃DѦJKN}{r휧_S5UUF_©m%5*yJ[ K x_20h-ye1\BXx57`GwTs5X HXgٔr=ZDE9'[$Mm] &uR.)8wJ+AfMKg_wG'R8|:aj*Xky!ӂ͈V$Ԝ6}p&_Eԩ$y8iMnHʶה1Ϲj5B,a@E)Yl3_cmKz 9m&f3Vb]Tyr Z; 9ܑ@,&̓xDUOm;3zDΏlS٭lq7\?kcz.3:g1y,8m;^@𘭌t2~:E*d{%gx8 1-w+bm e x #ӕFfQs[ cԆO.v槦iZ[ S ~nOh%~eZԧȁ'tז `QxO/(}}no%fX3Y,P+>v[X@_ϒ~{a7+`K. -'SO`H FŌL۬V7+{zTUʻn6wKEֽo#64/w[&Õsz<\W{t@π\?:Y:5w~bPC?"l҉?XPek_s9ަ@3P+Bw@9ubg+(qf2OyMTaLr)rpyEB,RS+wu-=@#P76P*TeOx SA ~NJ`bi䔵X[t1+]q~z@wcYgChdxDy!+cmux<=@?^nf'8,VqB~pؕPL*||ݪ,6Rxd|qx"EVm_kPkEᡬDRu1BP_~_jV׹V8V NAG)Ivd\:g-kz*mKf.a]=7[؏xs55yDS!2xZ؈_n2Us_%E5}hX9LwW\=F30KOVvڴΏ~ 13|׷E̞3(Hc\T$wK͒3iɔ./6o4\2:_^ ԦQ3U w'NxqQs_XԨ%2Vo{̻ mS8Op/{$J@#֖7JvVg<@dfF(3o.,A+xsTѼq{Af.\[l+[jìi!3MC'%m~Aa_B s"V<^JA\Rw$Cq28 -Y,P#ȨZeN.9y[dzOb,{6SdUg2w53bK9kL6Vtc;&`iφ6Tz;W@M_G@xz95IW)[d\f ڦ M o+!g\^x8=;-.ϴΌcF=2wiOŹY>k1 -k9^Zr Ւ=sIV"]/I䨮+Q{vsOWwzj5m fv]ÁU5|m4ۏ {k-AH;S fl8UiMq N8 8v ӳ^[4FfXiI0 }fPj xH20@w y4zu?] ^Q QX!O/fR'poSĊ&!''t'U_9#O#FG١W$_+Ml yC >r d R9ro첿pGog<D~ZX vк+~A~ܼC vƛvq*|&Zw^ҚY[FGvUQEkn*v޴"Uuv/7(ئm\p T )10ͮ;|➀Ǣ=RM8, N?iN9 Dy y@!yQeY21"CL|N vy\2ڼ/rӸ r$cxsCt Eo $qWԙrmzҤd-XHֿ sXs \8T5l _T?ʹB%{OoZm@/*j|b~9Ti 'h#yڠ AKVv06Rp/GOcj`> 9ۊ!o\6Iܰ*Wy/*2f"DS!28»;fnG޶Z3WKIM3xa`͗,{nͩB)|5+Pzq~1'KzզrBpPNm579a6n;h]v%&z*ݡ;syqu%2!go'aݳ[ylvE>Nϣ&h*]Oz^sf>R 1 1p}#s%91 sU(3jA7B$/+´l@3 A.Բ;Smۏw[Gj U7 F9^)̍5GʊjERlicUkFВLI1]9+lڪ{1"Ug,M:k^sCQV6(9va{9~L7:V(u !35&)TjDlMK2k@a2nТ|x팖 LkJTCqWi)T*WwMesIWQT+Epͼ!]YrJ7c D{e1hkk%4ƨ*qG}&Mtasija1^RCISmQyXj*lTXdD;D'@Ern /(>uG^N.od2z1?8WZOa*(upN.YSMQu: 88Ea SŖT\eIFST,f5y{(\;<ε)㥂ƨLߪz]feVJ]5!h-g+"Z6L|˱HqQ 7 Ƒ5z)}#bZn >/X"CiseU5k"F=.$kP#{%V(.>QV€f&7c||d]^o>wy,(RDN %k5NYB3=SIOUamvDvқ^f (?_?05+ w"r+#y+Ucy{KmF$rVX }J0q_e1k£* Vr-LTHg7@DFf<-'5.Vޞzu_[N?gU\X]LNh広,[S1xxX9(o[-\\Hl췹|eViUeZ;ߓfuLi \}Mer_YVUs{IpZd-ZZJr' +ALEìKEO>Sw:WA|3I%dC˛>4~|?Ƿ=JK_oye^@uצ o~?q=vF8m@w mN*]4+^@[LRwV$L7`ca$Q3߇"GgVApA70= Dqb W-=g*OWr7㣜*f}sRÅPnv%@ngn*UZ`9 ,_+ټZ^61r2z`jsiKд,y7g+Xj#l2t+l Ķ Y_Jj"ytmR<տ[#Q"bC+9kFUq~UnwV% i,|7U@ĭbFA<0J؛SQWFf+g\LurVeADz5toMW_l80%kx9~Zh16̶iL:gwmܧ=_k˸'=Sd%PL~nZTW2ޤؑr/kRmS=QNW[W$E6{?jƴ9&-T1yJ(tFnz̘#U=85ŴhLd954]UPoڐb\WjP 5EG;'-rt`(bB˄Bct @#ܞTf@Q&vʚh Pg&jڰzEf"%S, (lv\?g]EΚ^znj:5f7 ; 4Uns|'9j"< %E۶ߋR:BqZu}z5-i+D &e}-mN$+W1ye;b2v Ʋ,KSe+1dpZ:](w0;PHEɶdWFiuqu8gmeZC*JXZ{W-"$URoTd蛆F Cp)y4M lku^M)$ P{9kWM>Y68 s*d44n8}#Zf(A8qbڵpJӫ|>: #\ȣsg3`I.  OYʔD#y(~q|(k!NԎXoe\}"ozS0^=K|pbD|_6Tl4piX1 GϹcVl: !._֜~I7ឹF>&OS5&5k8]A JYp.Ww<o?z o1Zzs]N_tV܆Z`ҸX'p: 3r-ƛf; |8)֦lMKUYgO<eEA>3A+ ] 483+dIwtjh50Ke5 zG墙24Pd>pPÁ6ދ>HlEU]9~]yr~@of+;OW~? hRkoT}ʁiۺi%o2瀫jX ߕ?kl5J&bf`XRiT$y̞mBo4sY3ₒ\pY+}׸m`/l-^hYy7;@tz z{3f#Hw|v\csVcW7gWu7ߜ*X\mG _iq q7Z%SH:nq z~28tS| U]= l6w.DC_OjǾ"d_l-Ko>>S}c|y(I:u~ 9P*yZ2訨e_=Z~zjYd}mΖTW5֜ߋKCYnk _|w<  %\"Wcĭ6[JTtZ44W0Z4[=;ps|mY;OSGb܀1×ǟfllyc+jYXMY:xr8Mo"zTT8?c4dFs[ZbA%5: `עM j%jt23M&Pf2Jf_U%O󺵻Uoܔ4l`| i/FjW@Y3܋5yMkBj<{1?W`aʍ#re/5'jo5V_ GB]H;t򸛈F+3ZIr5 XtX}GQ7kZl`wuҍX ̽`ݳѤ7#;UJݭW\bއ`ݴeIPgQRpRuGUѓZq6.ƍ6>R^m$K;n h:x>TϒqS>ZHۍ7bu[b1Ek${ԳNA%BiJzP/OD V^{W /1s+u9kqJ6l8H%g=mCD̍f{)׺jhfNߛ^%V?4*{;F-L/b]#fՈCmM| ]<.Lꤽ /WtKJ'=^'?,͜p` f/[ R',\&52{YQkU~T/׺fl$8 V驆BߠT֔'@8~B1Ѕq›z?6\SmkNtX':,(dnT}}l\^c6ň`KU#jrMӰL"ؕ-jG@pyFdH, ^.w5NeE݂]T*]-@rZG ۮl @ռtZG>4$ݪⵘu5-?coTHɂ_UAمwhXBi[Ӧ 6WX`c;H˖FN.X b-?o߷\7|JJbEt+k_^EA֪-wrƸkּ[X4$h6gs\1gbodNciLȅ2[] ڃ YQz>]M%~FHf6|ڷo^pPRc%s5:{uZK%a@TcP6v4W5s1e{\&ܝ[0I6ny9&f[}mk #DCjfxcPyuBuhJ,\!@e}MǍh%smh8n!20} ˖,_^M{T4=O]F[}rdw%.WxfKsF%t xf n" &Ѐ%2dk%&ykF])t!<'P 'Tno gN[zJ8u9Q6x*=wjj_?I3@!ހ5l9vG ~r{[7[ fy6&DlJu= zu981K-E0 J}|nxvr\rmiVۭEEղ^.s3?s2.`w;peGV)xA%tsiqZ/ߝqw[nl`_ .u=mS NjSLX%ǸXǗpnndE=|A=l C輞z_Tޭ>ukK|(V" vESI*gFk$nNFL8 b='^'HI .v)X"W'gt$;Qq `||L~ߏ9<Vn&H>9nGC` 3? 85^''x$ , %(w^+jq WҙDhD8PD zӺ|f|5*'"Y b3I t䓛ZqˑY s\"#3Aլ?Ƨ~zYL릶e+n ؠyv4(?_$ o9IJo_Z6?E]m9oUߏ?(/у GkPx!/*3C\e_~GxC/D*.ZwY7b\Ml\F!<䪫)^ҴG9M_ܼj֬zm$k_~+]f mN(em :cicNt{20ekin_gj^[>6zCy8~"Z(l qepm@ǀ'^؉O!+jF6abdTm'Ʉ``J{wv6FUN}% Q=e(tA[hr/5m݌'JFaI(8-i_-Ysg,Ck.?uUjpk=/iŵ[2 -{ƅD4B5݀=WKлOUBW0+|e *fצS:5:͘F'hyJΘj,qS2֜͑c%Ѧ`ӴMZ neky eHK~֐] %_MD7* q kf6‡Qxm_D}=qS s;y ` CN< yN{i6ROڨJeԕzDvw! >]sx P^O*}&n'˱Cm~x`z9?YmGeB˖-al[@>EHi< ֠P(V@cM1(usl'5zX*@CKPckFxdS\p߅3 s (npUͶ;ɕ߅$ej*scvdYfoy⌬yĈc)qڇ;>P.ghz܎?꿛ײ(2ۚݻisgid)9z1KEd'7%okk1N{%Z F'UAC7VqY 3Ƙzdy Wg_k,R*רtKZ7 b!)5$D0x9 %&{_񣐡(՞,fa?DKD}GuNXv9پ+[ǖ-?>d.'e,mѰohJmQL B :\d(8kts5sQyTIn>,PW؇ԧ^O#:gB4=#~44UxH֌t+Q҇k7y=㹴Jxx 9i';vM'3ۺ}&؛ߏǟ~|[:_Z W`O?3+wi^߀%_7^je~g:nzm,1,o777mvV:ҴG^^"3y&Hf]sҋ  Ѵ( , NA&؛6=Kn[ލXgw!9G  e@Ն::}lߦ9y^ 5ɘ]f% a.BƧْ4̦۔WnsߡߧչsZsJ=g5mKk.Vi @6?%4ڨG:(gvrI9 VYexg_r谜KŹ6>YFNdAzCI螪$gS,ӰY!=e=5V\Y ,`ZokԎ |ڄRy!Qղ|7+}ia͟$Z@iwFv77<Y3v%&?@aao~)TGQPNP wj<ƞQC{yT4%c\:~뙤P+]ǀ6:cZAZ=_(uslv.f)+ɅL{}D<] bYﱃQUq_1[_M*8ǝltiP&6dP0(c詁LVb|HD%B/㇓cЀ O hk 1KV=Rݎ֕-3CEt@n$=V6 k*yfF:8FXQ-7-AKiܻaJ-Q3C` 15˴,Kk}<4/Ho.~ȴVp>i l^O`kݨ`g5vY H"mM<ذRD4L\8* l^HRsIǙ:-V޽tH2&Xh<~\DP\wFf5 \ gyC(`To&jnWz w gcVűDzcZotԙR3/Dr5^{ 9Tg/S&¡\zC9Է$mt`gtKF1IzMB3^'PW-Aɧ1NZ['N+HecW5ڳ 0s©SpUrr[=@=29$N9^nx9'N4ߋ*"0)Hv@U| zp=i9MlYW%2!Ru~&]<`:B'>t}ru/i[n|(wa﭅0lO%#y= *bw񵋛]+.D/Џ]^\f4(x~FZV5fV_c'+FA,cSRәgE42 -| 'Η}EtE3^cāYu@^V'j5]LSJx #ڞGy:2Z G>89 ~E΁$)8ECT:k1h3%|0sY]Ml~$wN%QowX 3 ~?_ypLͥy3  3M+k,.mX{*ENX~|?_NΞ_[W++ܷ`371>}{zw9*PBq+~?{\f f+SmD)9oōl/6Gn(Sh_vocVrw.EXWjZGQKoXhY +XCx͟p?x< x?N TuI6~2{^I^K]deό,ycmMGzUYyA<'ADXNÉ]#,8=\>p;HP; ;"v@*OT$֏v4L\Q /yn9l?WuDQ{ w3ŭ(mm5y9h%pNߪt.Ͻ%gH/J*AȊfH 2F բ_Ig0+L:U@jk㹝_:f-YvTP K5~iE,pYY}颰)5!̡ҮK>IsNyRFX2t v_*yBݕW7?gԬnڞ96 ~b$tcP.0@eUuUe ]=yιuhEU5=ښY<_NSوb# a;sQQZ]'aⴒ\oXCuMzXUR\Ey].O}ՍA3ekb7=4%FܷaR P4Mc M ٨hO+ `I* %<_60iF1tRMfe \^$ZP)Z3)#Dh„ï493o."q:|81؇Wsn} }>k : `.7%Xb};ܰ̍xip]4nFs&|ѐ4Bَya  f=,}Xߧ\,e$#]Sc[j07N{y &-"̊[LD͉`\*%uOKBgujytsY&w^iI몹H 茴P!l+@lG62Iwed}^ l t 0s˱ZVi_^xZ* z ;^#Jj%^S(#b11'>.YSsݕJ,U>`u[=ܭ(m-a!:jg./yhrO)ٱ?6]3 -$\zM^?`(e X-{F?ᠠ8E 13m4o+՞CSYEH:jL@:U-:Ͻ̀*c=o`KDŒP0?JƎͯ7p]KU׈ NIdu0??G}^¶C\VOZ}BӖg( ҫXv=6FMBϽ+ЯYSÜdrw޶m8D[+ݕNYz6?x1^ś]o r-9D`;ͦFpUlOۏosC@¹͔|6.1Fx<SwhfQD}qhl ask1?8h[K9Oό5 1fsLu#zڤd"{ 2&qO/]8* Xo(]N(quk; aҽߜ^K/}sQR3:K[fSPՏD5ӹ<Ėڷq~S}eQ|ODmsMq_IQ= -i5R[Ti hރ>z;en?4 3 +r~RlEֽn넆CGFe9>bSafE ġH& ~GR5>@XH%iffy-(/j^Lo*a!s!{[* 0ΎMs-_GB<'$ ?( 7``t6&>| ~a<r ܘPH0[8Ԥ\F۠hA6TwbE/#\!"'Fw֍!PbhwW ;=[4t+CVx9KOH%]ǕQb2,eܽ .x@7΁3әopS+HsO"X[36#Q2;~ysPTNh~oT|]%FD$]k'(<ʼnR JW|4]K9;_ALMd$U9"C_@}a;o u7+g"( NiKgh~0p}|{t\ umXw>POou~U8yT7y/y݆%W}H,qN u?ôg+ս+ .=o,GZe?a!\M+ğ\ s iA|_Kƞ;]euފ]d #_J_mSPWPV})+/e@J v'5 0|Ŗ:쀘ـaf|oofx 799==0PZt@GR9' >b6?rȦzՇX /g_ P/ +i+%s*اRE\a_~-Y~vbVuߏֶ:+}P`7e} zoo&~y;fR ^_vSoz}zvX̚-3Ctr;-:{.ul.Y.Jk2 s"Mӛ!M#~&b<hJK]I6).+1a_-|"R1LRź7ՇǙ}q 9Zi,Fk.`~4M[F3{4sLgX'qRdD\}$]Hޫ1V)/{CQraq!䔭jQ 5m!A1AQ'/9h35Yټ׿YT3h p鉤k+깘.(Pz.RHŖşm?p`s#P7uw,yD+]Q^Gf}k]wmInjw˺n2s[#, pI ~:r ]ץLa2_+2r0*q|y_3ukҷs&Ĕ٘p()˱:&mQ7c S鯈,6NU>bMg:H1p}c뻼f>}=16k'%'V:j|ޜS/Q\#`Gږi5IL F(լu OUQ\ޓ;(\Cp+}M1̽f/KI(AWH"բA T#YgBz5m{tCw<ѽޕ\ݯ 7Gڔ|:h1r?6-Qƪ,fA_~ 曽g_~5 D~vOܜ[fb}n7VoQuwm1|ɾ@M>li%.UЭfpzhw:Rp}Y1WfgyDG^{W&~@_o~@n]zmrB:O`z; D뀰)y'ÏGI tWz'hu|8x}y)AoOk#p uLE]2;Rq0e(@zJ~ |r{w ܁h!doG~ V%FU`ndrˍ!9dS2T*"T|-|qͳ>PԨ9اu }I7 *zYA/8h{x\acّsNȩfV3O{ n^K9HόEhYpEmU[k V5-%?j}}L(\؇+-g.=sך:ܼi@ԟյI)OU|y!-m19A4[3#PxDőыoXz h/p 0Q}u8Pמ~ _Zk?KJ6bk,Sr,pMfZk]/w űIM{^`~Yߍf0DՉ^\y~ Hkwh k,F*å펭r1ֵ'ؤ8vFh x+֨8*nQ5L6SY&v"S&Z.Wݓe8Tgk%) kp+)dxR̯J=.cpTP[?sD{'^uI3F&e0Tf4bo6F$k9>3wF8V홷9g"_;IGDb9_Hg=1TÛm tX=LLfADc03®Ix3\NݒwƄ:Sfyb#TƧG_Ě ᐈB A>P\k:Ylh:zU"0ĵQۯ"Ud1`mj3Y yLRS?~Kd<"kPa69&`. G3pT؛͗>!迿h絴 z{~(|'V@o5,(9~9/M?F},[JX;(C`ow ~ v=cح vS~#6L?B᥺Α1Vew@ oۇ;̫D OҖjNJYڊ'x7p*, \춍4&0b7Ky@}f~ifust(`^-3ȫVvpî$P Ԋm39>#2C¾هV7^dLX$hŚ_2e>cu{Y,HJ;--y\ܗWtiLpUXsVP[ c&v =b5I¾j@>r[OwRNh] d{Ɨa])f.RV/1មU7DGQlK*sȭ8:$bW O{Ȩ䒧wNAd @;094 Kjf>F}B- 5*shnC x5`Vh, b9Ww\Ar_4Ae/_gu{.2 ȗ9Z'0wSjFum7-EgP)sTl~S<2ʘ}H{MapvŧB=/nq[LtنNNsnsEj 츙.#ot'PX`y844M%l8_DɤaX@f.D hscxLV!遼ġc<,MjZzQ s-<]GCӖ٠ф>Y͑4VҮ+{_Xs-+X9KZ`o;&gV3w}uוc7>'ӎׯWoP^wh#Ye=kkHJ#W[ϵ3HG JҌW[g1ONc7 ß{ub[G/ݼ/?G怾,Wt3*ĐjvN@jsܠ^ )$M0|-==j 6Cf r2#iktŐժ벱+ blSOCr=gMiP?6؇}z볆Jh$$G}IYܘg%`qVqfTt;v2[Ft8iO lpV+LJwYoOgU}x,WJ4nTsoߛ]A_mo?Sw?T͏Y[W_?7/o/9!7'2jP}]yq-Fh.ZDːZ c<= up=Ʌm)lgl\*>P;hPW;^ܥfcrqnaM#zD ;7}3WǕ|sxB:gߡDZ8 ||\$エ͎in:>GAqU uOL,l˚xT}$Vqr M1ue~5[gfi> [՚xl`NDŽg//o~L3}(+~(:VEn T Y 73&~T:DuEY17Bw,~-{VQ(> Bb+b9܊n1-T F،:S=-EEMڻ+`P |qrm j! [f_a Vax+Ruq-\.k@QRڷ^ԕ(ʶ᭛D'R%b7ϲ OűkN.(a!2jU3tnZb`%/3^iލ[ۻ% 62$珨J<ʣz+]c=% o 2H%FN+; '^[|.|ڡM| g3E>Ьs>PދJȟ-qMg,w6Ro4Ehؘb7.A^ydCȌ qT 3f1b W͂}i 7eez x͚d2+M=A;U _ Ė_ B(5Oq۾dJ%bVi]Uet7[^>&TwmCh\o9pՇ:ta-}3FؚM{6\ֽWȼUˎ?Ԗ..AtbѨI몤>16\tVR݄hs"}І7u]񵼋'g$(.LgM=6 r˖-;OAFi  }=] }ٳp|PއG>-sN2ޚ"ı[6*T4IKd>^ ˫Ҿ^1IJv)A4ǞG0Bz'Zطv-Xɜٵ$I ZcDQ%Ne3FxuE}`ၮn)n:ruQ^ۨwzpΚ4IHosJK!<]+-jZ=R6D_ӍlMW2%O:8@,/۬X1b u| ~B [:9 shqt|L"t@Z]m_ݞ"w{s9)iD͵zS~)׶Z>Rڂs*=)0K|6|TEdbvCUY.vN^rwk A' Ci9O7zn [ Z/5Y7D݀31a`ѾB& A+%t"RZyEnvGڶ]Ac+ۢ oڣ'jG*#Ԏ=_ =V>vl68<ܜ08S[s oikcx͎ټd`'t14@w9qjگM5Sή#y{~_IT%X6™,!ͬB<>z3ݰXGWך֦Sh s&:4}R /Z6`nҺ+)7 #Bܺ Lb>i\3tô}VPy` Ӭ@E̦{;5l-{p - 5>bGܜiJTU "Pַi9اrH[]ZTmmCW Bkw8ܴDNZ: nAwk5+Y;;#%bxͯv !K tU@ WdƩ2˔d>0G#=6Jȕ{ vZҷ\aD*Y7/ݒ{L-Ys$si뚬xo[da~=DžA xyl'$#Hxا_rO\ `U6i1@ZEt3m馥XGMlv^0+/ dʺ;G`~56̫ŸhN}ZSd:L dJ?PrG݊}:Swe"xZvů.v/&=G!Quh! *diN(kx;R1'35lC)xo>gm:p$E#'ꄒis{[p+w0[" ۼʹY7@5,O>tҦ驙]p?fOBp^ 7A?~\_Z ^jCфp1E LnyZٞ15u%es"T%Jބ;A[0'Ea t5ǪӮ}#MG>_VQ2 QS޾ՓAA<ux46w |^Y?u9MO1,ރ޻d6+[2K/ \g_A_uK_PJ`?^37?O.M;|ϯ{g\\%;^/P5Toһro7*P"tt@M FjHrimJju8pq7ƾ; OsooG'2UE6}$2;t|_oP?#[N BXnR`Rm 7l T;ia.8L;"_ՓnQn[oi?y6C}Z?-sk.o 54E*2%u\ֵmﮜyKdsZ%6:p| Mh 8޹;d0;sEobZ"P*3E@i!'Z; +I*YZ {8c,Jߍv6K \Ir#%/\O?ppk{[69$;H`_>i<8/5JO=jn}2wPԄ"+j5h6,@Ev8c"R4Cʚꐚμ}Y׼!/d._EEMs;p?Hr?_`q :{]9Fuaqy!x B13o5:cG4|]jȃ4F# p^iUosjŝ4#>rPeGfAtو~Dau%8T\TL~@ŠrՕ,jۢ : =lEC=#Ug+qC4F*x|׭Za x`~!T{ikq^PGV]54h{gJ2huH%OR5ֵϓ/amuE"f{=$X ڠzff `+^phf +U ܖآ[/EȺOM%́ހWQlY^Iy}F"+AAoօ={\ޢ \.D H >;)\pqY-We/GdD;#:G-]o՞{J\A z5b^,m&Dcq2 T iZ"`D_u\[(}^Ӛ "'q;p$W.4kQ?RUo>Lynnɸ%AO+=}_:ou$T60qOt>$8gT\A]缞ÀjO^Z VÏp+uZۢgV#=R894.JMJyS0(l0D~ cǬg:tFy#voRE.b Aj y}v!00G֠/w{Pz3 1%jH<\u%Yc_).q9 rlpap}*>U:0NcÉV#gO"{U 9oSVAJxf]k?' reֵ.i},L͈ދ@$?%~4> z2u2`_9f:]x:~ʜ8y0Zx pݴy?STЋZZdS =عh"Smqj:%0DܼEvkw77þWs7@tnDoSMt x9?ߝukKt8k]:\-59Tݿֹjwk>GB sV=]PwhX /LUTS@ܤa7deS}ϚnavȂZwQ7q&\%Bj55vHʚכZ[ 6P{W&EڌAv2P`mס⛺,w񭮪bPΏ@p*18Nܒ E\r: rX1EmYÉ,r`6HʬM7"p C؋,Π#W}a3;%{\$O)ߎiuS{*Pm^R΢@uByZy~8ņT2>P21lg/yNpo?>*LgSYdc$*pyY5I ԹA9wwB>FEԇ[&sAC:+-j߮cW{WR&15f5lޅN%b}+~LnhcStU *y}&4_߾1O` .hgWրw{OE߇u}0p[ {%Ȗg%oksӅMgT1#H|?- `Zh&?&Y0h$z^Te@D/e{":=D:i}o!ݝ>9J>|8=kDW~fjE|=oaw!J]+==~ W|o_}X+_?쎟,~^6Z4j9܁_m+1ؚkK&/C=jo9Ӗ\'X"̿rkӞ!{Ȇ63-8g*f Ab4wͳZ޺L@[<800rU 1s۱:'}cZUD륙Q嵙@5SM'qzo)d *}0 WfO}[>mh*O(=9$rK2ﱲU6"0Ysnse8;c*Fp~'&^e6es ÚUe5JEC:x3ͮB$CViR9+oϴ|Z],ců#MƦ4u&4 ,nw]D@ *Vf=cCJm: wVB@*,ft'n=0+rjG ܒާ.WP#&@#Hb x({%Dt#75d8Fc^8kqnM9w7׊" ) r~< vDq@iZG/qjtx8$\얭N+#-TgNxX$\QtQ$9Xi{nHRe4^1T T-*0$IX Йo$m PqgyBgZւ=gԂfRKs@z5t Ϥ9@LV,EO!fJ*l]k6B>UlqznN6j3Na7ݭ6psF<9X^wOIz~]FjVU] ܐXVJ`zi@t'|̙ꖟO8_g}Ԫyt*0:凿63RdKm{ *5]JVZcAۄ@]=t$Ԟ$vY{]nRm^RǰnXWrˤVĶԠQUD7:IsƥO/sQ&s*ڍc %8{c*뽯{ L)DZg~fVBBo~P?Cz}7% Fl8* b~$ U vs&6<$z$/ik5ӡ!>P,yϩ 3h0Ao2Ln,"L@vm.;7sM"xr̷x JtI8~]c4n?S5NQ5Ps62 oLiufW+QzUt܁&9K<m*P2K4o|w8loԶRk(s\b= [gЋl(`4HGߖQu+nvV?N,o}a/!+WӚU1 e%wP63hFqftRφtJ:-νE\9Y[B^ ^{X.uSs+M 3X<w .e<;?9.,gqz D\͞Ni $7;O( \cR,yo~aK Glj;>aX\xk`{4TA1`PTIV N[@y}́0vyH2J::$*QR p3]̀2,/j򋺶T<-_

      <F^'N}+LZ zrMl%DTP'26m7w z6J>.u +nfH&J_GG͋=skE.CEs8s2Eų(:`?lV09eiڬoQwRjϡe`. eH^+L[(PV"nalZ#fA &yI%M}p203BMGQ$ͱek{Qdqmè86TgJ!8Y?y} nKC-jN"hvUhL&0:с!6oweoƼ /y t}e<ԟ]RFfs`ēgСY'5@F֮* z (jߴ>MeP`QqR$7pқ7nһ,bwB^.`) ȻfL+˺k\Osn]lϝbRs՞S|]nUz^B /]T{®E%Jao oٷ|?~[TW[!mM7 wC#4 B 'Ɋi:9{aaޒ\)Qy,(W샽CZmdI ͠#S St%DLbR-(En J.Ā ņ_,= 8qp|Ndq^$1Fk>+-$~ tAX0u i@3NדB~hl(rCNړk,3g| x#!|-ThO7L{=W: Le>{̈n4̤^z;=ݿk>st:Ql*in|9@}~* ̮Ufnyn{퀢e?lfSHXϤCйٲ4ښ9l$&yb<`Qn@2.;1Μ)8pjhW C1 1Kv* m6$uMBv೺ԻW; 6oC?Ncs'ȋc 9OD|~سij$HbkYj4si_NbaA3rںn}  gW4p{q8.7+G `jSă>z6nGy_WW,N6_8_a:?7mmW>U_Ք)}q\)حsv3`n ?Rw/>ϢNvwO_x~W^>]Lƨz_7;BLLjKS9}<z0 ۜd3P ]_z,{74z0$W3nQnom+;Ao˔Dٔb}-x1WrT07vŧGđaw 'D>={,n[K>\4g^-pIju6Q*U`g*e`%2{i$2tf]OZ+l}( ~y +WCF#:^l&cAE}1[vK<O̳_qTզIt09w_Ddbmm0Dŕbط6從4.V1񇎒p/J5B>(p;urő#jQAp2/vuE%j9kX6dۯENw+ G1<b36͋Q&b>xyl,}~U=Sͭ ~RBꙪFA-mYuWOfRcWSC/# YN4Z0 bJ!'t@(,|'p1ZnA:ahXK!c)ӝ@"r[_lujym6E>UD SV[{Ck%;Mf'̆e5/2%$ŨB®ӟ7jLMG[|no{Qy_>OcvmF>uڥaZs 3[Fց+{Ij2E[{oj:d 9abN0u9GnIܾ `#kh0Ͽ`Ljs0y,1A⠃BOs|V>CߊJ+1.խU[@>>CfW(RljѬg%;a@ӭF%2=~'btx ӈ'_S-˹5秕{, )G8gڮpZ͊7z%t:ŶX#{֕Ylb VŪ:ܹ$r1ͣݺqo^Z_ԛ}tR#tQͭ#ILQzu^mii9ItE5ӗ&}IXfp!IR!9Ky~1 Gu1g{uϮ{{^y<G!9a6zPw F^C<;ON]1zlLD8/JRL@rT$Dc473srN'>wWu:ޭ؝c@?#;  3ӒZ[]οAӮ:YOibk!p?:q$enrvyz$.dQ:dss p4c߶`S4ᆵ$k$I5%k 5 ;H_ﶚEN`  gk@܌zR6RW! cN+s>~ m?UyK7b޿WUxqc{?_{y/ɿ_W]Y: .?YKL_~v,ۺldxf'gܥjAY/`hSy*"td+fٰ&ְ0I]v m&uZf0܇ũ1uǴG#M~l{%6a' 3#sl{CL3~䌙?BГewXǙ@Ζ3 Ɓ*nYS uK*l$+wi*% %,iO>qU,i(ZA'8#Io۰mi\98hhZt2evK6W=CGݒ<xMzl(I-8>zCPe5yf%WJs!P!yH)Y~ji>\Tub4E=D˛f I?$πBmI-SÕsE2 'q%U>C/SP+xT XŅ QZ J9tnV1Nzjyhd%F"{q6hv5hY0j :;TFd@b@Le7u>])˯T9s=7P!;'c@MN WaW DҲ(1GTGbŸB .P-88/{|r'\͵wt (rӏj'vAfXaD:#WV3#X=kٝ(n v =]:(znNmXيوZ/W,海bMS`0%D {mIE$.3roȵFTgm!kMcBeu;@^HN?^qm"4ƪƝo`$ÒnuקHPyJJ.:;a}%t~<5aL^l֑V+i[usZ3W| ]UEf^ufRvUk|Jق`304]@)HmT bgSD-up"h9wqo9glj^;/f.}ȵ]$Մ*iǻU=*IJ=k"ƞJUIAZG>@zaDG8n (y4C˙:d&pG߄ t,8"j I~kNp4jI! 639ZynAܡP'r'$pQvjNz Ouv3EPc9W Ă 8р@Û" [YAHY>w{[a/*'7<Wb(C:DdO@?Ry˗AM/K|Ox9${3߷29}9T+b*to&}˧yX$ys5%O_L҆Ѝ~f&ip*?BE`l+{3b"R`2oZ6D[ wo]R}aAbKM%~"cIQ&Y:C2,oLG*5ûO5Q ||GTB2<%N5n͑ VZAb]pӯU_WBȒ:Dh HW}X3 k/(Դ}&c3J6_'U-WZ积-˽r8 g[WJW V$J/V@3IpQw+CvѯlTGa?u/FZ'3KBCX^{ o3(8UK+Imn<힇@nTW9\6>TG4^ QW ?ېWF?-^BtUպglف&hvƿ+-mfEM̶ 6r E+esղ=.<Ў-|Hz 1(}6Wygܻk}fC1U[{,A!,2xA950 rR]QŴKz!s뚾DOqݏU:& mڦ>JP $G8@$w\Ma#TaXTj\WӸ:zԒ2NIkȎas9(ȣn2&Εh:]\JLvT*Yk"~`^mHR%sU>A7'd]b'zjU5SVkl, r.C5פ wTvy{:1bf`3k>kN$d~o#VAH,b/sg{;j\_5:+F֞vm|,6y.cTvvER.n|RcE$-i+B=U0{$1Z8Og|\utT2U]ҟc-ыc-r *FoךO$]gJOj-tqdxW=@w}ÂhmeF*-# #ٰ9ٚ2G:qnқ\}BZs([qn9vN 4csvXnn`?=3| Ww,i9vNTDuGnwBgP_r xnm,lά,OA70I}e:6U-: C.F"k [O:Vg=-2(tҶ7%8~UUmW}Gȋ̯ys>TJMR 1ȕUQW׶a^s:0D"$mXi7`j/F%` {8n;|y> g嶚Oް,źa~P I(f#ĹQox PJcXΑV%{^Q1MkcfqS0<Cp 0Y게5HE^?{Rہ<׆-wbn}S`9': ԨeϞf> sU[OҮl r.ֳ 8v~Iܒ^IAKq;1vh07 g} 2G~ܴG!lnc:Ñ$#ˇPUɐ6RWFP럥\v)l3EUCԦSIAR`7qa ]ٵ$wC~Ycp;d-6Ȧ_J ?ϸj%D~!sF {H{N #"A&)3qt"hzSiwי5H7rXeEU+HBUJ IqiأF4[m'pfȊUh*]Y5]צ*g`'vZ7L+{f_:*K.u3P߹*T HFFiue1O`kJ~x>5w7ىTsؾb)SkK%'V># qFh#{9yIVIi`=Zʱ="%<]gOw(&ꮜ6m?: YglZ0 wíQrʓD`-|FZ^Wac=c5iZKѣ99.e8"rGs&sMY_=ڣ9mkk6 C`{Ç:83R?w`2[9*j޴'RFxMyFS eM*

      2eI3Ϯ`y茣>^-zi;Q=M }ӡhPNI8l邟ٝV_q.$AE cYfQԘ6#DC)arĺ4`'_@2y"i/N> s19nuS3KyM#"`0\HfWP  5Bsl 'ir&W MR {[cpfؐ")Aj`[ HK ~ 觠 7X)R_2]<ڭBN̕M5ɛ=p_Ĩ Dwrd's9n [jlkFN+qݡzŴ #bc:I[v\#VR!AwQ_#ܓޑ>h4=v~w hR}"5<ɋ^ 雯b7rZ}vy Ar&.d`A @Yn_A4HP0/󌣉t;yuS]2Sp0@-[%e$D\>#]d۱6ϙ:_y0ϭ8q#`Hd:keki/>Z9.kB%7s՟Ma^vVfADl2[J}9|oX/_H\YH]Z&"Hq(~4`t@@G<_Mέz{12S OZUɁW*=A\N똡Mg,ԍfQ5[?3KR0&p5 @ct+`9H_d uUܾY6l'ͭsOkkA\ĴgL%@(,`nZ>`#ywxbz*YZ7I(d2[Q_<lu? 8#~ʟ%PfF@~ao&\Mg?[5].s*``Ώܺ>;Q>Lr\l䚌x:h9JBx J_&cg",gJd@_ |=2Ps L0 6k=%2-Q* 8H qH#ACAXiU[ւha6§y|uv8x, CDӌ u0X= @z4 Ƚ\ݨsQ 3%ky !󹣖9 >Uhޏ]m9|' y]AlFǝ? =lڜ .Pmͤg?g:,H0\ 8/:!!WbVY-V >p،ϰEdLc=}.^[N=@l{Ri=: c,P( ' F TW$8c/jf.<r'SC),`Z=# <<?㲍 ,{96s~󧥍g]nAp|}1 t+;-ׯ_i+>ns?3_|ˇ ؍g{Q^~♱bnupdװ` )xZ<}K5s뛊aU(6WU+b{W+u̧D'Sћ@B ue7rdtq3}o]M{5hyݙꋵdh ir?o[`N=U 77 o*f Z5W;lW9B%5k+r--c4}Za 004LkQvJߊ[jH ^#jRD3eAm%Zl{\u[V]m xC8+Ex6`v/-Lox7BvZ, [?ApF;VY7RYe1FAu2W2; v%7$6As]Neġ?|>5Z6kCA^ߎvŻK_}J(-\%jʃ9t"vɪ4\tF6QXdK"Ϩ9MWܺ#рBC/O65U+5g}sjTg yimWU*3tqX ),8n%ʭt 9.d-2t]ag6JC2})WgRnKK̤VEcZ K& 0UB̝"^jß6#3pv 5 r7=]Z,kB gQ ܯ$+2>>F 8ဲhW#Bq湢gD m`רvk)}!M5L#t1J0c( < 5Hƴ4(6YrHGqH5:bWM`7TВkQ<ƀ1OI&60l:Mlhe0̾}q9OTٕ S6X:Z՝i>5?h'=as#l@%2t N()%zE~VKNVk^ZQ"TX^^6nUr`,Θ*s5 \Ζ5+ߌƺ+t=?)&e`ף#iLգgz궸6 B-j;8]E{0 6a)+ikF\*Ჟl}?ikdY]"f<8t]ty&/>h8]/t>Pqu-029#gNm=ρaaN׾g'CN=:;/tBZL`#43 ww7V?ȁ)Ϳ=@o9\`LT"gĮcji'Hw}MQkGOS_^+@G激___auG<kN~~ ~ l??Y]^xϢXUz~~4[n]\ r0&r;`F/}Z\F Te\@pܚ}\msx5| 6|l9#:; m,6>s& jÎrlAiI"7z =ėz5/32`edTKѭܡq%Dpzy]1"ēT{r64h F& n'A׏Y[kE-i8ݧϟm< 0;]Ah`;ឣdFpR!l_&H p>;>k4Rx=ј% aE1)=|g~;\<] E[[ϳ0MЌKVF3mw[{G)CF.|=%Bkl-`,UOZI{y7T]n "ĽKtʲdZJ `Qj.w Q{ލZ}T/1[sn>Ўv6I<徰>9@;H@$zr6-{ԣR~F;@슻KP S%zqD${Y$=K{ɚ2sٯ em%Qq^"%k+@Eiа5a ~k:9,< s٧'Q$Ua=ϡ}UgJj,qiBƼe'M .ە\s$7W,3bj|D|g(\i}vn-HȐ$CAdsíF V7-M&;1zhjg[ rR*# pG,?%H*cx}pD %\GZuKA x$HGWhFiC<T-q :b!nq6:YM? -"pξz{3E?ϑLDQew>'}sUQ6[,^qrUyk__%l,E,򀟕{eQn/@~/9 ~kO>O*L4BJu,8|* M`KVDf@nM3/עHQ`RUYrI9a ܃p-upfzۑіyE_Ͽ3=m?~ }=>F3iPSypK?6;#޶-:׊_PW?viҘVq  GmmIAI WK[ʠG15G{MHYM(O8TU@v BʱI)Y8h@-ENxȭ3hңѥ"Js\6VD0(5 ׇiy_VYɡ.٠e(T#@bOT8<^-U;c)0{@%leJe b>֘=qٺS8/hZrpъ}mUVZH% ?G[" Q>`&%1b*34L aaXLm+|Rp8'(fKu;ʺ2G \x#iifm-, ;se=s.6J[bׯgV9mV|[ԊiS`NT`Kd-Yd[3Vqɍ]}pQ:+s Q(,<<7pdsDzC\,>xNLC($swYְKP![bL͟.띟7"P\Di8 Hx=wc\ݜfeT3ٷऄ կ U?Qs7!#|̺fD=e# gI7$9̣XsZ.ԂR즓6 KWR|##9D QLĶ*WixmC{[>^S^; tƪ%uÓVsxI"\*1mQ:|!R h|Y(A'9\_OwusPz%)(&Ӟu^&TȍkO&/E_Yĥ_ {Tp>רÕa)Iʱ6<[tXB>rTCԅPxh7bKy;gޓϽ,G ә<_w]u30\)&YWWRgK3(caH a#]_Bgc^8T'tj_پ6Y Gj >\gL xLQ{$`RhJ˵xDZ[X~O^WU=6.` o0{D%}+ tRm^m<_Ϛqt{ GT3c/]1#cA؛9H%1Aiel*4TXncB)>4N@-a+CVl 0XY30FqPoQlDnU { a~vAFu pX-710)Bղg=v9^)+w~6s<|@#{ !8hαT6Y#IcY&U 樮*x~%^ e6~7s52`R n[gql3;72d#Y  S]VHk0i:JU+2ց TŪFd 2QS`$4,L1\52_i$@EWWXhXĕY菈#S;4 ڣT XAo($]^Cȣ=4\VG>fk p|8Q$ĽބRf|^:@@:>zdoBdP xmr5`% x =:\30wJΐC\U⨹4^MN"5& 2 *m5TIL> `U3Ti!4ZBH0`e ֤IS[%\b) )4{}ƙjj[3PoOE<83eW.J t T+Hצ2d)4I9NmN061sT ^%@B@L,eOf 'k_7yInRW)6I/2$u> 4ߣ]䶢-Ri~E!Yh׋_8]\U |YB6z&+}N([eN6.()ᅚ.:CQ'=FŅ`u+r] g'Df,;pQ*׉9 p~n>gJ5d VJ ٢e-iLAmTܡ~|ރ5wtȔ淐-]}elmxgt '>=hycVzMRL?=%"ք㑖skhsQ7'`IߟFwۙl"p!`V;hr<$rf5' D[kIJ-X~/3T&>wnB.VT~qnSͣsOGSL  {Mapطn 5'(ˆ.L$ E)L$nL%g,`g25-m.kXxFvz.[W߳, Uu0LoN7)ƵX1 y=+IE zQz鐐T>XC9=5ӷ-\J^VmO!c FQ@E.}T\_Q0 gMnX85a.[0E?|y-bvyb`G5)3NpJ8uZ9#g53ؾ q`ND#1xKnYS\e[OaaHf=Huƣ;݁Zzhtn-I앣>[3Ah0fUT &}5^ZjVl/$liaK # }6x/يkJ$3 A*< MWJ 6 R̼'pzlwv)Eg 6ҧbJk|QZٶr *ߘ:s\#HN*K =xIe}ƟW6-Zh\ղ. }"lfr">;d7WlF&پ+9\NE"J- AȺ-\b¦*`3?Yl: L;fL^䖾i/Εʊ0):meQ* ؝.y^,%͵ytDS*A< *w4h.>fE]t<]HuM\9fq"ANt'kh&q~9yFT3[!Ğh8!GXg:ۉnj0&"ΥUoGuS*Ht8>tٲoDhh0pZ K#m[ɱ9'H"#~C\K-ǀ֡\Aa6rݚM kwt|z u#QS~ysH{h49-قmI<ag,fg>qً̹tp;k+?Jm~@T=p4n0}vfnդF0Ca,'_ V`;uokavX|ˉ4+g^ PLk8t$ACْ֨ RdV˨:0PtV3oԺTAx1ЫN:dڕ4mp Xmg>98f{>᯿A\) <6eYπ$)?;֗VZ!6{$R -[o[S\z NENdF S665T QG Ea}-{9x\0#'9=6{eəwڼQCwQ 摙%V?J]3sTi. sq+1=dG8V|XZ9(+.Ci-Yx+<;Jfl>[2;pUl2S!iH.|@G!^8zsu S Rl9]T2:zhQҘ=ӄ^#>ڲϡьbϘTI[x-ki'H S\.{8P-Hx-Pfﻈ>6 b7O> &}Kȇ_-+_tHo ZYc9-+z}h أ2PMlǑ s-ppEjڛ ,s\kN XFz-uR~قKE;2 B5Y5 ZIg/u4ez?'rs_z ̾ Mh+@8cbp%!B?m'IU2fH*< $Pݠ m9ḯCt2"!9+6AiE /pxpVz*L:9rЦ({l'I8. ۬`^og4TkrЩo0Migsݖ%9ƋbL UkȪ)"%O AH>#ٲOϏn#CІmd9+s'ыst/+N1ԜZv~3#D-Gf+,ѵPE}A݀#_Z73p:* @ր+I i3~ $fgz m+K%f? ;`jwkpMGinVco0<2U;Ao0&fwzN]|FokQ_ lo+F/8̮NÈK1CμnԓsSΙFoI5Wxݡ1ݑ0{qہ }) r4H+f4'Udvµ4FcPwÚf~?ȨV ;$ |P;ߓׯD׿Jzs@-kn=}6 GJzƾX`_Isxi8RRM<@홊b@fcU@s@SoS|y_1P/7DŽ#TG eF9@=xPv`pJ4/le:iv+nxϿWcL-fk# '-A^N{|j|nO٣۴ "OnOvZIav.dЉx^MQ9gm5|]tmx1;yíE=[܇ծ"$bٟۤIܻu, uK`xRk=Y 5SЭp(+3 P~pHyflA?87u`7`c!^Y: b,ܚ9pMTmlY.sF"@8#.HZGܬ9 !osM"\'™YfV(8@.=6=}}Is;FRaV~h`(E6GXXUE4~}ҊA;R)D@i,́o<}ZU4LHۀ"ǟQ|B?Z)MA|H aB2B|2].iX 7 VPeync gq82J7G)Re:-D+TÖ"$!zF53IZjSmk@Dp6EI`N׎i4I uhw 4Aggg@: T&"'g}!CS>I@Lղ0RJ뽲+nMKTL0alD8m+p vȜcuPZ; .m (q@K<H-JIF5;n4ܺrHvZþVQovp<#;[系96x z{[<x )Ѹce<j0a 6xV>}Sg@jg+rEQEM=EM}wGɇ$1(mP>K<|fpH*p>4 dc)hu?#ǣ?"$};Ól$ m= { y]FsDFC>&U=sN׻ܽgXCV?Kt-~/muJH.I>?'MhD֩_PuӋ#@ 4mDl G2(ØRV\ʖzmXa+>StS0qL1ѢLd sQeT@uZ:\W)VRqE"I5iuxzն>aؕ :%r*BrHR[aOiQRN ؃e-sJNEcAЧ69y= ޗXSBu Ȇ%י qG*/p>ks[  1>$\^e}۷qOU[\3]@q~Lpl HeGSa,P0ETM V1θ|BUQ-1`D$돨MN1C'[y{H)X m4A+zd57[YǗ=tYxNxޣƌȁ6eg5vutږP.ue'S2lX?giإkQ"mGsbq;}[-a%t;Kլ^Fʚ1Ӽaxe_`sd^MJ+/Ibnd&]c_8%X/v&Vxwf.JI_E l#(m࡭&Yb]rԚBg^^?zSV^B/^(lU@y-`F! k2ayl#m{"K׏zb/ܒʆ79Ա$nM оH Su 6K*< 4@ ’+'m!t m qj~AـV_-(|8a̠. elY/@NCĝpGdlD"J ggR3]OUf"FDx !G¶pp*2ahDЏ /`X3Df 9u)=8SYާXKKh3j}x:Ϳ^??Xx{2"-7p1O~K&џ;Gn82C+ [9_=Y`Sy]7_)Ьv벴f˂s*ImPy[) [d%-KYWe֡NkkE. ezMd1zVC%,K0?^"wSzدUa6"Pbx$0?QJ,#glXu 5 TjOi|u ƴHQˢ6M`ό&gf8SL3 ^{*h1dZP޲vwIӚ'Vi{GƹKi-kp?r_A8rzSZ^U &2N]O4%YZdS2ԣ R!xZCT+1kN"irO]+Wl,&M\SCZXJH3!)׶q-C5Ѵ/$lN[+̋|O2sPc?} Q򑳦:i=nol9 pF;{(RA(',8~?k͛tٵ8G19Ad|18锽HR0XJWAz -H|A$"%2GB !:rQy-eEr}8ߠb7^aFx}\T'8t2;ְ,OWz[OK|n B@ޢQe׹:URPFC5-XEBhan[Úd¬p-8qjqa-2Bk Rcy\6@;{_Eᤗ=MK"뜤}j t{|~$07Wz@cm0c!;:9{߀KtkУы۾~WO;;y~#w&s3#z\0klp$N癊.Gx흷F}G3ao'Fj]0=\>@.W2v9*{yW{tWdO/__Oooo_;uvYIpg]tISʟ޺&n{[_ | l0,*Ι]ׄL\A7qwa[rKm@dLK9aDfedK|,^a Pzx[? k2dۆud1ך.wL[VfY:Q2SJ(͞y t=`vz ʦhG؛SP`-3Dj(uV,%jʞ$dY6#s3Siޝ``E}D xOSyt(YbTX |b5;0I>g7z6$fT@\ )QdIk^S-beac˰. ᚯOF9ԼP)4;|]SWR(u*~0* La ]9b 9\*@J(+ĂmͿo-bRBv_H8W%|,cvk'-+QTΌ6SHl헅>pc}H'Qg 8y kO_5'.s{QB ov'O $p<.Y4B_lu}+{+-\<ْZJFHf 5^iJo &'IX+B8ؼ9KZ^g\IQ]3 ` /|Y`i L~ΈL@R&ON".yi,Nך™YcXq og}E :=l$Km궞5,-v3KԄcbJ8sRN3 ]3[<ƀ;Ў8euB5{۠9"@w6;@ x) w/Hcb駫E1k|MNEt'/ $ݎ,ncq DTlm\̥ff)"R^%ty M\pZ™|XVy)&yoz|$l߳'0ﹴm=a]’70hWN(|$Jh*`0F Q28[T*kP}:g:=2]{Ie{@]qu Tv"g -z#DM :ٜGo^ M@vEgXs^)fgbYu#a+{}"+Afr>vQz}Vn|@mN􎩶GJ8y۳ݐk*$O7ۅJ/~-OZH|LË[D~ +[=z~#l@[-0ENFASAĞXɸWI0iGg3qj/_4ҟ$&[-j>ә[^{GGoCT8Չف*xi.nl_#𽝂,"ht'3HKD|o SlF*$z=(_ b9%82UimKf| G}uܒdY]}<'-j;-cwl3Nb X}fqA=nסnv[{wG}Z=+~o;?=7nI>@~n7ؓW`` ^vlx(dw'-֩ͳA9im`E 9Mjv~N֡`<D ~`,""*2Οѓ6: )4J'BS v^tɜJ3n=x:vc<5FcF ?џn B C ^y\3< .m5sCF$;x.e<Ry:Iۿ6/* .?81ϷY.xCg|? wy ӹ늡%piC *瀫:o'(%^ 2e/2k&8N^6jQ.sC*o %Q؝Dl(srK&EL銠:9F:br.D>LeaxB 0QnPr̤P}[ZVBM!M|6ӎ_ ']@y,L֢5Rg*xGxVMZrnH+lf[pSǣMKiah:?c=_vK*3^#o¬0Rl Q, 'SE#ESՖR1-EUF%-qo#umAi1eEn +лۋ@`*RCXX f0@#W[ힻ7D|k PqsT?c o9sG:yH3i"V5{ʶ=^:@l'8^̌/Yҹ56NÜ;$GoXo}Xm=3DnsN,[(dM9sERǼ l  de4i}ctzЍu'5P£m^}656٭q7rtg{ Z`烏Tdl;/7nJNfrAl j3ĭ{M)HwkOWO= P[z~ i4LH6fQO+zĭ>\zV,QBL1HIqi PgmB;v87O%ñ@nhh4jV@;d0 nlxu#>궖ZZ=NG>+y>V"?pr_Sz~_ E |8?K\ w!H}u{2Qb/{fLqu;]_u5ɗr[b~uU,lk ɟ.@Rl3Su{g{G;իT2H;0\tZrԏk1]IBFi>5 b>N[:'̑|,fM҅[l I+{6@oxh>ef[<Ї"Ϭfݚj?}%;M Cisߪ XoO>$y.Pp>-Ηgs`Wg*=?˂tYGdR Tt!qYҩܨU Bu]3f͕Cb.b>Pq )^/|g[ŜF3a$Uh3@!)CE]O1bH3[M8@6kӁ]M~X.$[ ނ<("N0]  v*m@la{{Z :V}YmEaK7SQb-S~=tYQETX] 0V PhdƦx(]@^v9ZIPm=)ӣ ]>.&CsZM=2 $Ⱥ[ 'Ɩ*c*M{\;KOC&G TUh)l`2\ʦbg."c̬b2Kw8"cEY C\чS%xq|=d GHZXhYdM0ݟM!)p!2q\jM{Jcamd%+9CDD8P8(P˛0"UiOoXW*CL!Gw qp=|R6D(ux*Gyk}LP/Z(ymH wA_!O&*5K~\)Dg(\mmQ 6h'4:?sSUuTUD6r[9V?t>Pm, י$]MBvZV$3-#{yML?KZBe=OZ\L+O}^b 'R8n酄ZgmN%5 *}PJIOz#vW"!N` AHw[IVG3P#}%`(WK'9:rO꺮m:Cc'i%8/(2).0:W G@JP?œVETT^;)iB00GJL6:l֝V]'".zUQ^ +{9::zw9JX۠U5'^#)y̜zGjX;):n <%~8]1. neH3ܭKƠ:"m# ||k|-v? #F & ŘG;Ͷ߿P^ ^t.o2(9|؁\Yia5üdPRCZěfivu.mNm-is[;ݼQB\ƨq"b6ݽE `?3AamUtgr)e|qs&{BE|$,9O4틨Z8,& M)VʹT l1LrerZ }:xs[B! A81wv\rCΩՠ6jP4-"WW3?O+H.2bu&XT׷Tjgh2c3GÞB.뙥 zk`r]m2vb3TaCk)MPưvCxrxߡ%YðS}>z;-\|& ķ2zAA ,;v!"gl_F"?IO'޶9cGH6P.~Ɣak:`|Ay/d>œYዞ3s >ܫ-ʦag/;}gT's|VbZ(FCVC,Y'x$ikP$!Vm2_Uzdý8Kq\ZqCG 5%A$m drZ0l*P@PKX+qbU>`#c.ۋ+t);%=X3Q cY+kEs%)Af}n\tA%p}M튻y 0ȉQKyoY|,|(d ^ϪW~cOj@Aa>Ht3Nrdjb4Fx*< 6{gƶE1P-縨*tLgFs|Q2Ɵ[ҍJ]Oceg͖`h84I{[;YF|˹ BGX& 6N-G'}ލ=5^M^[tʈڛs3_)(4ݽ4k[u)w hk.8$~ Bp8{qagm8VIu.E!F˝Т/n"#1Aӱ `g(#1$Jm<߁~>6P0N 1 jT~vLOu6Sɑeʖ9}Ƚn`(v^̑[($")-̍V n7B8a@7SPFzpq>.X 8 .B췫NBF)F\* AŌ$Iy_q Z_-.uP4gloi,vy E^ogZ`TΩ9E`LBQwleZ zzisAuZF y[*,NJ"SZ!PBa9T,e}".Y xPf ľ0/N<]j iPX*~ Br {+{)f3q!7 mD LUg Ni;b8܋ҮЧ`y<yYe&)x9"?%8W\3c&TOP\pqn3)kXwC` cSy!/4%>C\\5\a#|m< 4E3ws[I30 5#>A1-+15W[Z]{6^NŦJ0d?纑+iUډ&ߗBS]hh"X+EVvZB>KKe[ iL'Q!жhpQ;--΄PY+hԬ٩[4[ȕ[f;f|v:/E}Mk̯ib~j|LsҨwk1(ۃ*>*ʝth;"M;S;K65,v!1Wi芫Պ\\>OnV:RI ,_+%؊K(AJFuG$ٌ]Ajcܚ+D_GZ;!xIoNev<\D0pЏ%kY("kxZKR3+x v,,ywLobnE7li\ } xٯ_/US_s?ug?_`r;Phzʵ)j ظ~z%xعgiflorEr/j"Bj}I Hـ7:lt6k<61 #Ι̌oz MBc>wudYsQsd-0(^D-cҊ[hw #>e٢FoU]s3[0Gt %G1@VEgVN;2Gܹ 1,I }2sj!`(vjJ:HebC S̙7JOfxgR*xX` ёkf[b`TH hOׁ}"˕mfa(~t?5VzXT)F*'̞XK^*(qux>}R[Y+lSk=S9\*dL|%*[Eה~y< -d:Hr X7{ OT+@ʳ>|sOA[xTSׯ#Yy8CίAyQ7*L}(`fRb ƊJbOH!D&h7.Aå>8M@ʑT픱ns8\@nW{*sјq ]ع,AU+J:SnkH@6Ş`[\ 1D]5m9ytvb@nT8 Œ3Afn0Svh|pku"-}(|G *S6L8Ơ A mw0% {! 8}/Iq VWΠd[$6ܧd~vtӽ Pz3APje\2e0kkS+1g]c4mu)&}s]-_yBobgp2gQ@' 2,m9 b*rf{f19ijU V_Kӽ((6ؼ@uk ]Skn3J`+Ε6vo[Z'v]+˥r̕1Sy.5 6^gbAzQp'@B}[G\XTΙ`5]Zfs]bB‹$(QH f8 JӀ; p#Yp@ L^6cJr=k$kY'ʼnrܯ&BFQ%9: c4R!DBψk+G DS/I[I޵*&rj3N5 BQ T藣?[1qVtdat="s'$tJt)D0 'F2 ~~)nlcJJ0ck"ppowS8tn|?FL.]٫3TyvjK &x=:@&!oGrB]+6m{0"ݕԝ G(enfd taMiz*z8odxMtB@F\.?Fyφ_ f$RUՕeU褭hǯ G/?DuK?@QwvN+ukIxd˙ rVf9_hXӜF^ُI\>f~M'|pg -"g!1u[*FHAdGKv+,8TB$vy#r. MmG~ۚ[jE m% xR4rld AE-sϩ +{UFN0Kʡ&v~&04W&\`vq D ǴL*8oCkZkA*G羺YTufYp[BgR 5MK# ^Ca>ʔIu@E0 [ٷ*_(y'537ÌoN 0"aZ]F+ߧbŅ9T>\޹* .l{G<xX\o e}lns [{9'uZ ʋ!\[[X5Tl\qu˖@zZ&ra < ^ŴEs[7lMEP+@ p DžxH殖o P^'+٠2v!ˊim"d^$]NMfr~^Na_sШ}p*7%3Οj,&Kuv&,TLzR r;:ͤtwA ׭DPLXNK+.UFXߡʺnjAԑ{nI}?-<(cbC!&ئͪ@{y)<cƁzA2&œBU_\)lH@(lPŲ+6 ,毺ئgXEj3T'KRw)L{s[, '.8NPSX4jO'i&3Ga-@): P[+;JG.\S&-BMRb%uooy?slc9dU1_G@A0q{"{ %[ul-JN۩Q@}g''8Joj_]a殅H b>h5B9JJDO!ame/r<=(n99_\`cOmY"ѰzSb sn&n(֍_\"ϛ*S 2֥thPYi]QfeH^w~erάo=-jL855'VK<"ޖ$צ] ŹcwH77h23) ^|;hI+{f`ۖxca-o-"J qBtn;p ~+ LJ?+N5 @H>vkD'́;w-A ǀm3 ?D;O7>ܶ۞x7~sI8 @h'>clA>:tl ~8:`c|vsu"lP ! "O؁A:3 9W셰=N5LF}- &zz$'!8AHo > hv"2;?F:ANn8YF"]0vo;5BBU_k_= S81A a}im_*____?+߃^~lu+|a7WN/]O!^ly:UџU'[t]:1 uOw::Wݘ`wU dS@S)A^O{lqwmH^9&nHMsz7 "jD=FX]d`ac9oH'm=V6 (l4m^Eq_t;[ρ"Yi 0@>%Řf֠"EI1ԕw>G'$ MYB V]Y( 7΁6te2l\`}X$di j̇L&޹$6х(˼󢕗5cPEd+oeJ٬Ƃ"6Җ 3C8׍a8\] =ᕏqVXӞ1,tyleA֕{ +N EW; ?|7^SQ_ЪbJmeM5`ʶBXז͍RnΑ!i1 ;|伖Zy^o˘Ŗ8li/y(*)EҨ>~VVL5UT`栗W-ٕh~Y־8 g}6ײ)"'h¶2H:7 $41 +@y6Jo9ϝ9>ӎ :ti :/YQm\q?'s@n{ߗ8Ts0ܴ p̗I+|=pJE67yP\'#]qs5`U3ME~ P xwu›G,D^C;5g}L|Ѱ͗QӸS<X$[b"S;`t[X!.,9\>=ρ': faߠ͗e.T4\:j9/ 0xtDI9zYJf`X ;,VHT^B~|տ+z -D:L"$aQ Kx EگG?rMB̚C_<)^sI@ zmKTPΟ*OԤ.5vr8-A^ƹMUFrrڳ1%G.qK9SwQjڎ`sT laCٯS[rz7(N)UMՅJa)KZԸ(tiVg9uBm,~DyhX)gϼ$ul ҏB}|nФR!"SS+=VmKi'lևsX+րZP&(@l \i"K~9r5z9Umni xK + CHEksWPqv2ٕԼO9I'`?{:h=xs 7%7x(KX5pӠ-l|}7~޶Lj7 @my;uܚ\ {<[9p po z[wh8O]@aw%}~7o>u ?&7laP~5!gLY|mxa`%зw7 m{{{eAv1~c؈ѧבoCdLs]GGI1 [EZ(  uC3dzuBIxmyWpm8 Y $p5w_p7h#_~%I#v__mA__~ݿ// 2?J uy;\y]\,yz]AS5987γ_Zu@n2NmK&3_l gZ3,jToӅؠ<FO L -ztk,,2C*(,t8{O>78r<WUuf40R3Uf$j^b'3Ĩ0Z(HCA5ȓ#A͉ Zct& L.(3I' -VO9 ̦Sy+(cZ =֊ ';\DWj?VYN2sMa[* Mn0%lӺdlͳ 6XWqhX>e}h_ (@Rfq/2RA@P2iwmwz_5 䰏!-i=>źakqKs*6Οļ01?ъa8YO+M:  T.ɩ/*, qE{ gO1 `|TAŲËXq<}H:5үfDصf kZYS(Lp0ԃPWT TI .Oe)= M'Sh[i3yÕIаpg,q0bxaH"W[źПG55WB|@hMk5uH$=ca($3QN8B[`OB߼ r1sV[5"{Cuݹ7zbLLlËelZCIf#6[ h?(}Dȋiw[ fPTiır։6&il[dZ f-9zi#-jz9ye:e3G9UD1kd1E$Dm{YgM'85#:FQޘ]ϑ6=QV[} O=ͲGBr1+,}e:2,žH[|7X'ح1cJ:~*@Ҏ~hᠯ"ZdJ;xo;LI`Օ՝뙸zG"}=0%zƹzVQqhxoBE'nDəgGM ֛,ӝw#DrktKA[X_{dxr5DBӪ [O}uC t7ޣ:;щ.յ$]*:n3b(CnTF3Dc]HơKhPB=@x6AӉXU䠴%^4WG V =2$Mv_t1#΃+Tz>ڼG= d^}Ӻ~ma4VnnP+Aͯhp̢l͟g̣c@'{O#N|ngӣv8l8}wNg6w=sgm>gČm t.N:eg@^t42 Y6Bo#2g~~;p{<0L숸}5;P/yX[04.ĸK{%sȜũ]`f|HJ[I*]h9ǼlǕW0/Uo}},[tozݟViUaפ f 0_1g{󳸠ٷ0ڼGv~r_N:x߫=:,:ů̗c5^}1DRn7v͢.#Di!wLI؇OBǥ/mp[gm+`)j6]bJ5j QZ"l1k{Abp)~Qu621#a_645` jd׬ve6(t=5 g 3T]q^͉C-ãW!)? tK+`*bqJ;E#QIs-V[tZ{{P6A>p*"=ǐdo ͬ)r7In7ge#?|i-umȅտZSdQD +!^ٰ!z7ՒkNkalQj*IbtɦoMM7Rl8nyq}ƙ>k[}kPOy$+W}aujOCAkoKWNghHZ"."q}-7y?hX௺;Ёmcl}\݃xLISN;AZ}߷ +[ &rln }} ]3Rկ߻kmZ[Qe\Җ3ﭸ,h|@6| 9h]NB=W:9q=OXۆjtհ"؝72[X{9p=- skB: Pux?irSGix.AN>kn;|n>܈\3 A4bVAh{F-x\owHm[y\ < 7vDmx:O=E !G)ck$m4̬ݸgKUI̮yvx鍍y2$mtB$lKgtqC_`|;D?2|} t?3|W~pqw+TDߺkh 3*x 6;? ^+i%o׆|7jQtx " мGR^ZZ-Mhw[)n{ w >&)j;{dۇ;AQ[3z7mqthK3>!y]Dt,^06,7u_ce`>o3CL8vۭ8Re4q5uHo9Y[cb E0t4( :͖LѩP)J4e7Cvz=O´ᮤ-S1Ŗtޠ,vTS1?;WɊ CNY [~z=.,V r!d^*@v%^fnbh(pЊD:;JmD+wf: E 0tms8ʮW`Ogm V3׆[6ۻ3xf9Pb7jaF@y|f'0e]뢈8BY}pPTo}3 hKF. ̼ގ0W8L}BAZs,w,eͤ%'K @uE8ȡ%28N`+ 6`;]6r•KaZ=Vv4.)F++_a`fIY-hHc;_Cvt{$R4{a{DmN7Pd1xG󋙯k!8-( Nsl[JޢFdF;Ej48Mue=!P8][ &#y?F:8/L;3:\:8n {l/#E|8`1G%fU+`bEah# `C۴̽w@L-K0x9I@yGhb0 Qh{uRx<I_czc瑼b`/W P Qm+7:Ii{һ-2ZJgad؀N'@_xiw!ۦ7ڵtv&jnΊdIBiJK|MfNY`WP4Qi!uD8@x({,ͭ)T3f_ EV̜O!a&k(t&T -뭀ޯf @\NɛHvͬP91rD^43 x>&G=0k{SXaۣ~7R  C?"9$=Y]Vyns!YqyBDK"Ӱ Mu2D)dR,~rI 6u8HCa2 <څ+ B# ,mXbVA)Xg+NPc)>Mr ַLϒHnjޟPUe3:L0I o{8EMv%}/1ۆɚmϰ xɻjoyclDvm  ruD# D_K0d&z7Xk7 s;aa3辗l`n &6@G@x3Пv;NKU{^m/YI.5)z_C ];x6 '{ۥ$%Oq 51I@O) `x8$H X Vh1p}Vk 4rOWS?C]Eo@8ȍ 9__.wkqϘI-k7U'o?k㰲| pA_m-_(dM_8jItE/H*Jk&H T HS7*?77JpiWe7:l*겙!]A8?0ܖ%LY &"ops_slSŤ`^5c0?<(rf%l~Uj.JZb7`~h q 'Węn\Vko9 eT^BQ K鋏"(>3Zbxat?U^r>sx( `(e!V47r㕀༂?ѩ;UK-+\d:7VimF4,5[c'cmH K>[iK8ZY+dD|Z 0s,yʟ:gSd"8Ģmޛ2wuШ& 9f;v[!Wd-tIecxqLs|e7%Ek,JSk2'z<&YvfY-Y57`ˇ@P)dٻmB-cz+0G$*'&0:bgQu_9Ew mķ>ǓO8 6SЖB/y1A9LZTPC2_B6Aͼ|(m6=gT/^O4Z*1 N\Ԣx+cLK^OkLhQdόD%|d=&k5M1$l2k#~.3Zrhaa0J>Uf.ð4Yx1yۂ&2-,T.,~A)>P@b~b@y֟j (XX$6mCɕTʰ\ .8*PҘ \\Vv7dTuVz:MҞ2cP@ciWid sXڕ`οygl5?[/5L>#@+&dɸ`>_'r^vl4&݀ܩd:Vqִ (UuHKD:Yѯ5օEט=%[dX\p~vmt95VU}uuH.bOq($P v>{!z`j$F؈4˃E+sPr zCHp 촵1&;S؞@PbL< ;tNjYi='.$W+Djq$QxFTPM/K7/#ƀώ=570+I-P\ݾ-X żu΅Q@P9_8}X~. WDSJKZU$cM>b[9HQRG rQ$HK0YrMR׵>.Y\g?9`EZ/3Rd\@|Bn@){9]F%5(-jۥs2?jڕw?lqP3҂/d6(GEVᴞ!)o9Ѻ9Є x4uE^')nkk˵٣7#)ApJ~yޚ'i9OeYUO0ȕ9*s- (ARp%yN.?p0`ǘ8Pxtt&.d[5q{Nr22)YX8cq I`œ@#eqDvrYf0 _4 ՔdTi}ؓkw;}t# {q5%38b`ÏnN';gagTn`9ޣ-mЇhwѱJOxݣ4oA8v8@L8U؟;GFx)) 4mbWgxƬ5F6 C b~Vc3js:ܙ<1/Z$Cw8=%utщi/cT6= ` n0اjW}bt ol{8<SPk 6ad:kq&s2^oPyx"c^kYӘ~gW{:Z 9gJ+b~BO)ƮFB nK5w&٬\^%vP\ݓ5sV[:& f@G<⎣^ƶf`r Nlp7JU$:go)h7߶pN)|7,0\ ^!Zf6;mf^-*RX(Son!bȀ(knKmԊrVNSvn׭0R豟XrTG[{gMý!@pԘ'I ʤQd3/hQ,ǖ,EmLhF>3iYҘ.OJ8G$3Sl8z![=${hYk;s&gZ^uH#2hca&uzӒvRde[Py/j²'lq").3@DZ" .E.з}T"gk?]\X|TZܓ;@]~x3i*֞Wob rMEE⽳"i8#PuP,h.7ԴRVYOTE]x> g,.=Hue3Š.2{4:&ˋjk-$_Antq)(-B!>]+ puws2}ٽFI-a(Eq̳alXZKA`72c(""4kk>kj[$}E@G}[[Z/vg ɂ*sΦ3nN0Uަ'vi)C\˼o?FNN]N$cj7X5!~mV>'`c¶]x\T6lFߺ"pwkqŚǼ(sN'6oP???)va? o#> ?a/>< 86 @uMߠ=[cvm> t}qx/+#q.EP #I<"!ءN0vix:i>61-F H0`aƎct?Z{1\̌.{ϟc)'a~ +F}kƿDJF勾)Ž΋۟˾u U{ 7O kI40Oz~n%aڜǁtk5Ľ,~amb6Da9# I,[8brvRfI‰)XR_T:=Lcg1$׎J cRGS33']@EWZ&5jͫ,K'Ju(t( CF\rbxKz&G}K0haR8:[?2Є\fq"=r6zz֜=^\|Pg+ep J6zO^(drTϟkPPrS±.@|]ZBD !},zbOIiGjQ#%q~{^l;Q:33*Cc&=lROakAV geTژU?C\ x 3g$!_>h5> 'ae s;}[6B<"lI8Lp[_9R%TE~^Ir1NJzsfnSw]*M#'[y$>H 򐫽;saa/V=9"$)?(ݒik/@:O @s " M]*(N"b<#̉W߿(U1he8+XwR Xm]=$x2+2`h&GVF{Vb&OE 0Xvv~gbkt|3ܗr?/G5ҪČ:ad}T#vQ[(ys26z8 fX=',xFDJKXDZkmg'KxA0JpQo>T?[wx%8<mQPIqDHw nFأ~ ٲ.ϸO>cX̠ H̏I]n}>19@ݛ+ޡp+{b$:ङ" ^9eO?}~"7;x/xǯ 7Wz`ݠ%@>{ ::™h <0@$h(P8r ^?{Mc?'8ܠCbNb'0s8TD\16 {n{ź0}Qe1Ucyp RB0EcDtmφ s[e#.y8Kb9](O6㌬o-N-&K |Un?w\쟲p> ϮL~/~%JPd3iYf.軮b^$,=?$Wh *锡yVP|BX3bJ%mYVxv+`]b qRc6hbX4ul@큹T0sHzφMՐ1=3nΠW ߆=RUi(lL]Lou(p3-Wy,%^]D`h3, @pDz9_6Ǎn=D=^*`u7I"3(.MוWv6QJ s(@ąPp:^dpU9|C1) ́W!GfYwXp&7w[TǒEF\,OӲ}36s2|7>h& Z 4 MH%? >JKpXRBqN M%ghPl )AubARg_C# vej$k-.Zyu=m6 I+=WxlV/vuy>C}bp=GgJG<<$ONu3'X534պR,/NDB+ >r$2ًMPi@cyB@`jPYt@), a#-V6QUq7@ISri8*l9]7t2-ٴ4׸\x~ lZ@T:yAh 8G9D`(d}bnΑ }t}f_Z`!Q(5ab/SuPH F 6> K2b-1#I+†a*_NjA͍'mMI$a$<4Fӓ-sA,#_ˊȦ0s hi8kq2,tR7_G{@Tkur^Z%U h*Ks3#РD'>[oAkI:B>#8]Fqǀ%plᶬooق|ר^ӶEz~RuPp&t0֐dPJx\Y]Y X_ɂ@z035PAq%Yd }g Gt}``e݀ߣ@V-8EM# Yާ*3WK$ǥn06FX$ Y:vY@=VwCZ+ukYm-]wcZǛW501h7E301}x2MWY0<޼ף+xgttڞo?@b3>~= wO'&tv _,bmN {` Bb oO__=`k wa'iS|}EOxa&>9y>|~=}YfzOa;Twڛ3? 0> DJRZq GuA>@6z!@s9 $ ұB ؆Ao=Hڣw/6x{O+>Oc|vUאH_@oNk_?'=2l [oĿiy?$ /R/~ uRzgUmtKSpb1qKsJVj N_^֞)?.yӂNE۲6mf~b}7fXvyECdtK;qGy{LKvIXKN,_NqӗHk^4(Q1HYӈн&7r;ij?+T˜J#1Ċ"ԩ;(M\,=_BmZ,dǺY󢜙$4QJˢU x}X \,1rǴBHJ\+Aa5ϫ >O1,Wa-J?@ԻVU_q9#p[ ;Cv`yO,2@eU|4VWx^pW oiٿvĐ-Tܠ9k=U9dԕm lqͯ=UMG->֯IytB ̍g|6 D8|\< _RIT‚1.f+ɴ=2m)?|e ^PǷd}f=cE](-( n饊XDd[ksu´)ծ,q+,̈wkrnsy"b╓QlSvMW1t|/%gE*pDvx}daqlRڿa,eOJ P{]"f(>yKݓgJ3T8StfK O'׵BnbD9V#~EeuovVc96l#"&evTe|m:O){s-zdav!`Z.1 8Ѫ2ɋړaPF' X(OvI|ݯZdSTrzle Ӳ7n|Q}-2*&:-< -vew`txzZP+F2Lr>_eAeXV.,)T ,0da3.Ts62YBلiZ,W61TD 73RF_ϴB\k@3\6v@zXVon1D3tbf5Nx`9l~5˭ j-کkE#qG/*:NS{Tjig#/3W`:yb -}Fuy~0BLŶn+ AVtm g]tٲAYwm ,!KG)-gdp͇x́rC'_ۖ@YɈpkYyڲ&rza5 B $6 5ȶuH=mj=us(.gRI|p66-6vۗpn;~ vˎ l&`NsݣS~_mlNr 0w8{6$N(Ajh4*ǎ&g L$; Z`ʎI.r->K7 G~ ?G³n63~x{Z j{ą hÎẃ޶h݇-hUs,w?4 a䄔dh޻τWWϧ'[={8 F}g_z$} 7  F{~6J#Y `[IA&k) [uE/y#m^[Zq+GՖ]T ll c*33t4̛j_?>#_m|ȍQckֽ H7[M{c@k7$R%) !@ޤ]. ;ot*'MrԕQ"BƲR=;eswת>tmT&t,gC]jJ>[bSļfg{M"t'{"3Umcem@f?,na90nn{#HCPp&#-E`h%+mZ2-\UoI4H1<{ҘV8ׂ2-#=^DSuRf~ 6 lm SJ^CЈ}:-\B|J51!^cmhQR1[ɓ4Y,*L&amn4J"{l n9o<BGg?+m|S M#Pw(3Dϡ<N(-1(҉iLR3+\{Z*q,jȕ5O r*R9W?/|Ymj!V7򨏲No U^I6.0=O'ӷ;םiiK>tP!  <(jTkx/Ls q5@g?I5Y\gGfESѷDiT23n(mBWMAYJ5-%&xsݵV<蕠`5j 3:3GMtqa 8gxgh=K߱m/-`+VݗʹZ7v'ew:,[^qR;O Xg'mQQ D$EB=aټr݁)BAF `,-: @2[CfDISc8ԅIidܝ' j{b{cߞki=5 ,.-IQn 9їe/d jƚŚGQ̶ȼѰ=le$p~OBAg'1r+Lw,g8r"(֠b,pD9q"@ -Ȝ)@ uÇ07T3 К+YEf"a-C;F4x3pAܢAqhNbw0ne' U34)6SpךAD :{8,蠿1XQw7B@7t~mڟcr@r/zہOak 2s ?~=3y;PzϾ@W ɆÖE gR{ \@n7hv6'7S AIuݯwAoco63݂sv wr ,lHG(% rENP4~m tMĬs+Y6@љR-A](e"Nʽ Y3I(i a8N9E⨠7@s(%UI( 2ufL]vp9 *ku`X|AVz.CbӲ:½|0[i9Mgdrg薀fkn]}s뎜!Ìc{?quܤd$m5\%)%8b8Qܻtev"2ϴ$sU393*ÖQ,X#ćǣ?\\<"d7;goQ,hYC$JC!i?꿇5 )ALFM:wkMxovC+[vVѪ(20IEsDf8]ZBas${[gPt$, HXq<+";L7y'P1B_՘%8ԏ3a?Nڼ3W^ueXsBdiPS hi(+IȁZM^ Xw5yZcI3`#/Jb'V P#lZ"PJ 0H!m˒?xZii6ndQR",VO7\̞g)ea:j]5lpsϬbP+-mf6u&jĢ0_*~c/Zġ ~PHlTؓ:RKߚ&h@P":Do>IsehӈvYYlGOj]z;2n HJj-j-U4f\D$O M)"]$lAJYGPkS_@?=N%]{[ GNזCz Yﵗ`<ֻ{==,ʏX1Fx!YZRo\0"]IL4U6'1LY&Yߕ=7$qs8Z\.[("0EH,3ӌc8'خ![EXşzDEeeB 54IJI" D+?ΘbF./g;QDv4vU"5^`yF+< Y4Rlfd=%0m f޽6c,@DmtQ x:De8HO,m7 \-"4ͯ}{c8$^頨k}<O'o;=܊29+dihrx5Ղqlh`qCkcs̡0pǎ7(>vET;Pl1X%K GL[t³r'_vgaHy9 3;7Pln8-s~4FS40r$$M0*0iNZ%YG=#ySO q5፪=\5'qsF@{Z󤴰Y|a,O*\Ny[J0`vḱxyFD r90Q+{f,|q~*1cZYa1ڙ3ఊ́muPUk>}B|F]g*b?ʵ`z!*`fSWb-ׂه'ԙ`s"pkQP[ M v聑Vim|k1|%ns;H/kk û G.:2"kZOH٣.8t(Q{] ׹%wΘ/O Bun vnyHM\,\N2/NQ'`EԃoCKT6EtSQ̠R;l2~P>-VH7d=N?@]`C8ru@jYCܟ~r.ζSO͘aJ=v>޷ >x4LJg\ , w! Mḃӡžjz} |Gf3'8Bexa+2y{+3|,_kJ]2zه~cȀGeF-cjnk.A->  GBXY;Nf{N&t<_q6m KAZ.|κ6G=k)]cg 0ϫQڨ-x|lu9w)IZsmOC7كrw8,< yS {꼦Ҫsl\V܈Re]d \p?SϸiT:yk3;lg&uKL{e:F@LKk[%<(EJ }Uh*.,_F{S}nP?ۭ(Op^dבp~[w0YeLއvS޶pQZ[@.ja%Զ|sXJ<})WDSlW[Q+?rJ(ՅH!V+#j$}죈.^H&1?Nu%kk0=)*8fId` #mOvI$s4+tuA1Pg9(>Od9S'KlAOwǣt P9 ,֚Wwؗ pETܥ q wqf$ a8{=ӊz,wwZq r$I%xS2"U@f.!EB"AEɘV =#j `$Ji?Z+G3jm!AVfs(unBZvF{OS,ww[v`hC~GcG%ÕxᤌA+26{{8tGv@5y$# =iC-ONne6r_v5ƁSSRp߈p:i0Fw+M{t9Y煌D3紾Zb.+IpR}2d<6~8j}h[/o/0;G !7W<. BISxNSLxUp_0.`'_(jN &׃YJ6o}!7.dx֌E&֡AƠ E3 ),[lKfËm3 {BxҶzb7Y$~/]Gt :OIG2.F-,,tƑ1@{4-`U s$W -ôb߯VY򉴫y}sz*ʺ@pܽbsA10(Hv:(yJ0 7b1 PԵM͈+`t rpF]tqkH?g_F'pTC!8ݮAnFaa-P9Fm m.Y*A-&r{,!oOJ+8XLe)C4*JU/."";yH3IvW!s )bu-Q3+V sW|g vcBm7eq Q5,e)t[*NbiĦPB1j^Z]i9rEaٝ׏ DlTu0uRO')@|UAB u MbY}s;P"N5={$VSq|:g̪-lwNH @*W`oO/ciG'%(Ⱥވ` Kv 0)|oNy}=9Y[T3f-bA%SyKh1+_yB+{%O`YAZ< l F_HZ'\ Tu,gݖipiEiMEviRNe$6H$ezԚIR}riYl=Tl(|nL܄xZABS iKܹvˌPWe}DCoUa6x] !Xsq*#=Z_yfC{eJ7`7#k -@A.CX&q-G "`B <ёraͅE9n7NH(]YdF~^Kfw?'3:(c>4I~ٻș0 LRgc55oFsY v5tI]CPBNp2c,` C'/M'p `lC o8SxlqI");'α؝`xWuo-` aql&v0x̂ײ͉XD8C ;ԍ&k׺oཁl!2hA6\ އk3$ֺƶop߲ `d>-īmno!;.p` }O,*JO, w˭t}!o8A j? k`?zzsR9# vpy=6*A{؛wt =t7&v[u.bs^L*|=` ~_3;OZEg '!1:ݠYak]1KRN<(ъ.|5̏0/l߆Lu( kN7_,}<AT6KS|tfsJ9 :&sVk|yO: enPه C'@{Z6A"'l8kK ڃ6aE~,qb T;^Ytn"Q*rcw?|n'-WiUh"KOS !y>f"VoI2~+f@71̝!/f=_YYN-TkXpG&5c-u,'-ʑ%-s"E5ݵL 4TRWճ4U8ր9;JIB9ݢt+k HD"~!s)87[/424#9^E犛u:jG`u/sǕ{v ~I>-("sʝOs̊#IJrֶ)[\]!xgak&Q@ Š( `ȜjgaR\-I4^0kX o}"1#JlxlC~!c9y 4$k̊3`hk{ٰ3qVlym YQS̅4#m*2Ss@94?DgTlxϨS$$w9],Oe $,VmCOdqo&eFXU\ݗʅ[۪W{Ԭ{ROEBlRgLN!U!h rR:aҝ`AXYgdp2AŲUȽ\QЏb/$H4,UJ9PKgBpvv]ap njk\Ooᠶ5hfC=@`Omx _[D f$^Cyw ̙zCAx,G=Mx #סJ)GBw 0vƶvXvPa @}[[vʜ ްt:u+`@CvѶ@?w71sOs=_mnK^a X0HMQ'=$fKR0'|0׶m5/ {!9 Lgqȍm[=Y#Rwylˆbz#mZ O6ɲ٧YŴ^oJ풍Xp0LșQd (sB]/t'}@MT\ %*{\7\Tmla?=pwbQ@&\i>RܺeFO'cpkuTD2+@[3:a!3qx!ZL+&ZVzu"@&\ljc_ $}qm435yq H@Y ALB$2FXY'޿cQ$04 82-5M:Bג 4+͕ Q<y{[ ZVN8 "1%nz,n{$3IRNX9 t%fōeŵI:\/ Y|Z3TݦP,FbixUxƟ" R)앴Vk! dƺePZ<. z?5@N+3:dr:l.5. $h^4$=IN|mYZɩ% Bäz`^;,d,W%p o5d]r$^;05yvط4%iC0{E=o ,{)`tt5I߀DI^8BiwQ"Wט=H>z;lEhag Sq&X [1`H8sP1}{z6)/g:Ou̙= ubms}#++ѕc͗g6XqY-kҳ;F3Ƭe '-Fu~`_cft]✱+GBD$!$٥7 20>S`w GzsE"{#nΘI9 bhzDzWl}x ±L_B0",zBTn}|w6~~/lr/0lw`fOcP~x⍶snqs`JSqC6⺎A2dsw{4BoX yZ_p5Ay38~>{(I6Lv" 69DOl}Pk ]%n'ba84?Wjuqk5]9`f(2 \cH{aq=]E Ï-Tuyd#pW<c:ؐe{ljӹ>׽تkkɅd 11(x"ڀ9hb쫴ܤn ڜH@tgGTv$kSZs`YSX5i0A0n͟㩖XmTÁh0cA`4@r(9jl f.'l# U[%hN85=ڊ&iR$+֦ޤETT$MbE_>8<'ݢ/ie_f)[ hbLB["(8n݉/}sD1 zU5ΞүqY*3%^zZX 0^]/j&X N#8ufx2N@J$L"e_Giw$6X d-{_l QVmբ=pjrV':K}kb1݁[]dz+811'oS-'eô>e^NB?GccIܚ{rp5xSsԕ}[";ؚ5g oqfh_*@y qpg[J e ԡ͍\%\^uSXdå/^Jr=Q馘.S`Wj!Y~J,bE}fOC%­? xs[4(2 `R-/r`L 4\6'G/;ȃϵ]ĝ [v J![Hv4`m6$A 1X=UL'V{;2^7yKnNxF :@zt E 709~j,--|Nexą{㿏Xl B?`h?Aq}60d>>}F* z4ݍOw`>TOxY}dG̷!G0;1 0t 8'ݬz_kK=5-=kPn v~\ppx :xilÜ{b'w@ W*$^=Y3LB 1[8+(x}/B_OPOR'_K޿~2~хyMϘӷ<`4B swXy9Pj9N iw*-@pԛP&LضtEscD Pz4FeC=6KikQ,:0-?fIneGg"s-z ~,|27"* U=PCZ~*\ h )ήϡM%Q!q5CϹDCIzQ3;1<7<#5I`Px<$>+ʗy.!zP#TQZI!ii[I Q)grFK:QVtQJt Wi l ӆFgLBAӎ8Fg>3lĚD-S=>%AaVk(\}k+;T9`N5Z yLJ7|'@efd*xV`yXm@]@U!'01Zv#mC"{ AxX*iQFMe`(98:#XP9߿Z#g-`*K? zE+65ڪYB_x*9 4i8B&g| id2O̰p$`@6n t8XIab0<6*V2u hRIq틣 t8"IP\@͘ŘP9<9&A>p!aRqU4@Æ;hrn^#KKaX#tƌk7SY3H*a q9ec&4fQ suL=6Ȋ:,rTs7~7¥*aAvH p6w8\PR|jG,捸D"q$LZ evI8Id) ":0`%3Wo6Iek%UCBϹ6Hv|5}'3)ںNY{kbު:)Z-N'1ɊYw8ѠdӱrKKsPZ+u /G쵦,G-B9 0^piR'%{t pYZDp!7Ry^0q&IїVr;,|+?EAǀI睁*S2 6n oۼW-aL.5rC1Zc+&d=OL=@ZTS Co%XaJAhčowB6$ &m _ e !$)8-qI߼ẉ=ǩ}a[yK A v[&)oWێmM㙘LCA D=ɼglA Kvsh[{ߺ\";Y7shYv*CN0UN/SYzE{ZLB||D x R 3ˠdptัY˹YɣJXsOOܼ*,bfaS.1L}j5[װNFqpRC' xGs zX'p?#b-2`/Uwd.cD. 4,@T [ޯrm vbα?0/"zLBPyޥ ?266~75(j}Q$b^$SM3uykzm@$+OJt.ҩ+mZ wEk>f괮 Ȟ P8͌yP`20@d[L/eub'{_hZ8B9 LܦG9f++::taIËcМDnNE:2}/KcxKx?F wdǬ]j8(B>"8'ֲ~'VR]BIO\9DΟ͒nnؖ5Uŧ-U3U#tjRڒTPz\VIۢ(B%(-ړ vsO m$'m({c 0m^@y/{F%EJ'6&B?!y`5ˌU4 {ɹ_NMb -s}o }wB>@[[fLB;=\V+.6"|x[s~DF˙`CǫVEtQkRDN}. 3[`t{kҙX=1&]Gd-h^w[n8ÊҚ9yUI>=ͣXګkk3 '8E-,cXY#YzKw^!~MY-?? n;"& :V @ sHLϸ$ aՓ%.fFwƼX8ǘuG56 |~?vw}27o&W:^Jb5o dܯs*^Kda1doG]Al@cXg|*? ?j}@ tPT/I-HT?>?<`13W.V'u0[jt:i!'Ɏu:xᠾHO+S*9qP)F2L1ٮfC_}X`ώߙϡxPs \_`{3$ԮgKOg6}s,r}(:Yc0O9sK58vf $дJM!@"OMaa)PKw6áT&{%<3 qF 6!'\4K׬kYD$R;\LlhINjgysed!;SӧnJ_#J.獉&atp'PE; &F1a.pp };:JmQ&>_0| PH5&*roUO}r 뾉feL-DnCsbO\kz\$2IN; W`ZͼyZ`G6]1 k\j\4s(hCp%V꺞E95z.J1r/j^>fQhVIo)>O1[,(Xb> k~fG{@yį/1OH5V^fI9DJX?ŗ&Çjfb=V- ~ۢ='[2Z4@y#,~Y=h="\M=ӕ6B A 2-qQd7cڪ!g^ s~O45r;%W4gGef*$FO?QLe_DSh&eO6]]+O,9Tm#HAi e+(ðAϸ5ʡ/AUcĨAM[pw_u,9g6nQ֘>O`ŒA9 `8 s\U d1W?(3" \2{[>>Bhۜ0|Lm|+$ ! ֊V \ݝ)ht S zdv ̡U01B͇u4}eg9`@B- w$&E8xem pB/mOQ%\"84IgL14/F?5lMfˡ's9uK wA#C8fdEn|1YA;:R סxu&I8M'Jhvq)'X@v.D <|q_Df"?fBLCv1t,ka,A8ӇON&9<"2*@O\O.拓6^q7pPJct"׌E Z)NH&$dԁ!cDE`4@}ϻW0"n_أ z N[i@E`@\p!;lnB V{\vk =7"C1C7lh >,{I}ɚ]@Xaϰ.~_H~ _@r{--N߁;'j>f;9Co~o7QEqL\=yfYc +$Y1T9=Ձr[CY5o^n:g? ״?=V/cTu`YNXy;]wZ(WfaMEj8)e*Nhͨע:V$ qF#C}7IE4ڴ=3*X@e_p[91|粯EҺlزm62t1XfH+0H-,6G}3K[(Ͻ#t{nF' u:})Fdבa8][ncFK~;͏v>Pc6fF{P"ʻ+7(Kv"-l@~j-, [Jd@(%ϋ]s ~́ߺLZLC54M`HvUߋauðHma PfMni`1XHXθdb&Hevi(zDfl{ =bV֗7sY[kTڇEъmwe`1k X8\E ukMBE=Zss{{=((VVy{VMWV1@Rʩ;׷Zw}t?3ʊR=b#^oh0hDGxTx-6C=ɰS%^Bm8?"~D̼IR6º'w@1Ă\9 zrqiXU(îV1B08 C 5 ^貤=u.[c*sbnKY(]GpٺGKA'j}?%~ɂ؂݂<<KtŴsW*Z @%Q32r)dIvI^ЕNȂh.Gx3vƞzQ۸T A}׽`NbJo` 7.>.+̿oQsv}a#ղY`m߸ r+L~>olLޓ!H$iNoXٹOYߢF`NJ 0k-(@V GN`cHJ dO\E D4?y™B">&#/$AR}\er9IDa\b`:LyL^lY,_kD)$uO牾j|4]nEYM8srP@x,C֩"nB]5:bNB5NQ(rI~TµBUym_DftltM C빍AAG9}xo)I9y1h bm#T^znn : vOljh;D5i?~?9"i {?ܜrq [{ Rpm?VT j5Q3QIt?Ϡ&q vKќS0 !V'a!Qťwb4h;)P0ahF;zzi~J{X]爘р8jv9.KU!d~P].9B53픓i .yl+`hT2v>^]~f');ˎ }Iis0*sl#xHP bNx3xVthLS+䛵Vgºؼ~Zfr`>?I UFsf0&SuJڭQ! TZuT#%;3y#hŞ7%FR h:~.ڶ8isAW'zEB1<˙{ VIK`uan˦벥:218KM)ۭ : (S=8seo:h#:@Zk+q}^GNF 692, sdAbh w; Z"K2& շO2=x}SB00Dhbo.(>;Bͭ3Vh)hk5HpX\٪MG8߄6|A{G -ܗs I℆ޣ $e028Ä:MaG:S% ah_Jf;:bHe]!+{6"9[h-jeg.O w:NTvNPm,%pqk=^`r* QC5f)ÓJf"RN 7_J]$%ss=KDI:)ch:E3aâ?[bɽ * sDx5dq_|ڣ^LT_(_ rjh~GeMv+}N϶JWaozq\po97SAƗ.`X T9yq ^C L\KVR,qyQT{e9,k88 ۲1! 6s=Y( kI̡ `cY4͙ p)=]˸`]#EQ.r,lnTVlc*N2F9x02=#窇:o=SƘ A*Ein\5O ;\ZC/\T<sU2V4ނJH&AK9zT<.]Ӗ]T@g5^ZZG f9]rgZ OTe`(|:yOEZOz@``zq`|y߳ /ہP>U'G P( OлXg4_Ӹ^ap(d1|h`zVGN >ڋcu)"7G\lnX9j3;|QtHo 1q_ ! % AƺB},2@rJXZZ]يr.?x\ϓ.i( Xff+J)86Rg-Q-Y Ă4-VYYXV,-V>عuĢIM@f~ 練+irdk 3A8,c@Ӣ1rK:Y{Z))pqyd96 MDEQ$E|]:QdpLzmfVדCM^Y >V#AW,@DnE9|MXX FD͟Ʈ wg<ŖgǍ 2CG PFE;To.؝1|N؁^E4"1x~-knCȚ;ŐX Q,Z, zØ 'T@%m8>̝$mrT^fZE99#l V"%(9e|0׀NE\fTˡTȆV^#%^.h0S#}&YfZϼ F!RePZQvf fNuv^O-,HPiQLT״\YO^?1 ` Ok˂.S?ܲz[{ԼR3M#*kQu[c:=e ;bo$I(6{ ][C]5$'@)IX_lY>eٞm3CgXYj+&%ag\'xT$_A~JeM \Fα"ώj$ }ۀ#9ϣ4KOG"qn13ӌ!?K;+ ,y NB20l!a 1  g< qq[vpH-= ݝ*GsZIVtw$< tlxN51W6Zv{Hcc 񻛤[R0}9e?\=I? `GF)>aߠ836=`$U;q_M ݓ~47| #2{a/"1+ى5_sKs K/xh@wI"\r4L:1|Tw+NvɔLiǰ@PL; ƪ=7Z| Zu6Y`n8Ǵ1LTj[di,H3ۜVqSe@1B罖xl.)ð>5i-g,@^s-u7jM1xQZ^,+uUH6Cmget2h 3ŋɞU2/9X .fn)c*#sWA/ev\i|>s'ÓJqYfQ*"#KYsᢕ|a` W#<XtwW? <=WÁ}ZqxZO he,"He5 T,aj zA0n>MB1i; y {ݏ$1`?`a'=1$* ֚RWJA"F0 =ϵյnHd*SHvR=ZĘZr* ^ciCLNIZyl!pQ߾=92^iYijڔr!Ά"H&܎%ec,pH#xT}ZGK 1&7`ۍ3BBy6ěLhDh6+s>"@v#DQ'g6$FQn2ejESW-a$%ЯEQH0RO"-*;Pٰ&USLVAe* H~.-q)1 S'TM{YZXk:6vsk"7rϙnVTȈH'I BlynZ)EY ǹvtTu{!F,r= $|氵S4Y5r#Oղ5~ZԣZr+M!B oZWU{i=Xyh;!|-:tI7Q\0I~ӝ)րq4+\<ӛ6݉|)&m M`leV't*Fch_l[8IdoY,AVH`*I !V5k.GSL psO@トK3Hv0sĵy/#l#SEG>_$d 3FWwz@ +m_Vp8 Cf(`4XヌI8VB"pwݲNsM[IWwx<~!i$9%R*#ܔHGU}ȄnĻ&t$Xm#g.DnXĄ؀gty#;|o}@Ҫ}Jᅫ{ܾoO&˰)w''_RԖ˺=A!gD'd( gQ7,w\c:tN {I:vJwρjl%>fƦ?3 xX\>hN>1d]iJ´M\tIP:v~hPש?~_[y |p]ב_ﶧն6g ~ X9RTQRٙTӗ?Ӆ.L0W{EeI<YFZpi~zϦ CڐY\h5q9޶Y![ .}ٿG/r('U٠M)AxAUhomo'fym~,<Cfvع ./ز{GQwǯXu%.{Е37εq1Xg\wNBK> {I i -XUF%Q< fF-/8ؗnf7T{cݥQi- ;w0m+9mc W\e;= ul{Zam}s+3tS-36Ε]lp4F Xu  b H؛lp)\M叮}-] vVu n،O٠k 6ms]=nC]T$jEGzu:Bn&8j}Xբd-A<3}n%lۗ (owņ עA3L;ΩpZA,fi?sb[Ƹ[ge'HU|qnЧokRoxf&#ڰժ$=Zִ\@\ꅌ7HK,Տy&bX}`#@Yrpatv|aIZ yQgzp?n'0 6[tN:eLQH=v?6`*1O4?`—-q*z8&b>{Nہ)TK#gB8j%1Tk1@Z1.bO;mJ'bl6Que<ANQHQ;1sU$AKm9^3NWhw&cb_lwU^E`kN*QOF}ؖ׉D;80;Önyծ| 蜴Tx=I$`\|z$T4zbSYmZ':N<\2>&2{ [+5•aSC뺶܏]\K 6vdSj;Jv7.!OݝJ rXCmi 3ϘgN/wv7Nh=|2AThU4m^v {ĕ Yfu9Y#+}?bI d`.w;uNvySIXoϸ𷃄X?XGW]C <֡T~o_YB qUaSqQj|=゘}έ_im/ow٪' LIbXӚW"w-YÌ].%8Z?? fA*Tݦ2RH[D+`k4H} pdD7_,~&+v鎔Ce-˕"Eʼٵi[-bN{/eƙz9'63Tp/2[d=#Eˋ۶xoϨ]ZX2_/Ьwd&`&&kC5O41ॐ^3, 2焽Έjlo >}I,xFa/4$,d_cF}tH;`c6s ^@\,Jr2-go;_E2o,?!CP_ /zfʫF?1z =[ ǿW>{mh='I1Ϧ11dbOկˍoUFEl#Zθ0.1qtL=c-A>fm.]Z4t=6DUz>~=št5GPG }D~ ǁm߃_Yk:zYfެ%,=\`ٙa|TJʦzI>\FX%M>IK}F iıp;VOj7 |%5?Uv+Ric9}7R*G{c6̗>2w{]:fGߍtG +u5Zl&vmOϰUucs7 Ӎ%w ز5"r/=LL5neيqUZ\&Xݔ&zz0<;mOƥACōf#u6lP_Wyv#pPAN [3|~mZ4H[vgU;3;zH/eRl^y" CЋ,GxA[dY3{-]1_uhN];`SJv澃45eve`5ltjxn>5}›f F\x;KUr;Qhn$C8&L ńV9V8Kאp& ef_+E#h6"cszsY\B򱼜a/HggawBpU}wX?52ꆊxA8CfZ!KHh \gq9.|& f^%k5.es<ӥ +IM1)n]R;f$J{^ Or_f^|z(fy"3է}hfqLBXڣZZ,2O>~uF2`2WM`f QlZIi/Jq^Kl mԍ6l;M|( >+lOm=o@%-CҞ̷rs/\Q?W\iyJmݦS5KD_#180oyx7~z?&tD󟀿+W90l/S3SNf{}׌nim~ Tw Ξʥ_<3F,R,YKMIA/B'/{k˚+H۸L.(.DY%ިƥ-5'?TWݻ~ojH-y?wg66|UwوuhTBeHsuoW@^wa2uE; KzU[c mgȀ/HP#6@h`1 ?nƆ `Aemjg`ߒ Ru8v3QnY4NБ<+0^牂m(lP-շޡy=@!M+)7Zka)Ú# ,:m*[†$mPE{M6rţ' 94^-/͸ sݠt#nܙўA^h񞊥*褣8;|[8զJjܶ NaQwaږp/J]SROM`*^Yg)*$ m[Wܗxy@^RlRإi^7^Th5i)zS|f8o0Vp.\LIC9i~KrY{\2|7tj(X7?XQ4%OF>KgLRjkɩ<;{_i ڍ 3_: L# FڃFɃ`{ɣEv.; t۟R)bVցhd_VsbnI`1Ҕ޽pr cȊ.U8v+GJ.n,V~YB8 $PRj-g5E`Vcg.\roWh&Jq X]ڷ3De?awN)< xmAk;q&[x  3W>mNLZngfz7y!]6. yJ"-qF!C\.h䷭"3?Uڑ9#R}s64oEAUȢ=9bխ5# 5|ƿY CdG` 5!a[5 %sa>F0ER8|'>Hᘌי h=lBXDSc$f]lbAM~hqK E\Bb3U1~Fo s;{ lХQ޶PE7K*^M8Zmn<\UWQ4e=3ٸ1.f޶2go1'$4aN~2$Tj=זX/ת1 s-HIcu{ev2#X:S= MTvk_ Xa{[j~U97ϖV: dܯ=. ::s&95Ox:E获9[FH^BYL4G+>b=s౗*ͼ֋oa]uF yco1 #1@o8;1E d2Ckz8*,8@\Vkjw+Hp#G# p+ѐ͵$?fB ΍{m+; \*l'dY[ )d+ګ6^ k_푗O8FIwaE*):5"sfBc5m!sb lh"-tu$zڙ-GҐ*m`~w`zkiqH%"}ҟ4 F@9:UHnX8Ik֡϶ 4 xہ-{,`7Nɺ%Njfd?-Xc8 :Z潜ƩwNog*~)GZۆ/8qX+Àδ~x?o__ eo#۟W743V-۴3l9Iφ)?.hmiy 9zG%ٷӸyB}N):g)`!"}kGBUޚ琖A( +L#/n3+pGP7患!V< XG~~BB7X~7x }wV[E\MJikџ*jUAl-fQTlj]޴duߖj<@uTn_ydl)}Fv$ CXZIXlXJ]@1[G M6-r3Wexy\Z"z݌N6%p>%xxN0gJnɍVE6֊̹/MœϊK%Q_VMhcݶr*DpHI+6 L,N!bH5Qa?y"{/&]2՗]4b$l8fqM<'%KsAX?d !b;U/q:?^T[ϗ*?էawc5nt YHPdPFV=2pIQ'Re^Xŭܐuã̃LdmnP[ؼJ7 ޭJ0f&i}BtX14Y TFtdcM4|4} Tka?7{,mt = ~кT%-@m0YAja;sE}X ly\U)),wۅ vQK:̜"[tG}R%*+?G lZ|ꥵB|4ZVZQ[E$jOc|g$I>(H{ <="GՎv]frˊ{` 3'BKU2a[Զseo/-Bk^^Ub)j0;nkK g'i,1] VmyLLމ =v# "͹ZҖ }6 \|8 #׳x\0A2FS̠=(ܵ,j'7_kK fT&h3ƈ/q:nN5lZwFXJɅiP@J@rR Gm{s uY`jJ(u:y)6*qĭI޻[5s;f5I'fSOE0*kjěIF,Rɚ8+%F_I,QIzh<_lYGkYjY]HΑ< ֨auǤ%I3ש$962:{{tR[ڪֈ3;dM]OG-* \gR]!QIP K|~= QoQˮ1qEI0pتh+=nFe75Cmt#~2!sbNxԷP&q~y *zI+ḱMZߧ}vW&`/PXDs[%Ҹ͵$QARu">_rw}\;S|d._8<)n5VD_ʾR! >2htғPz;AA hD9@13-; :?ނJ0HTÁv0_5_k xغ$Cel#܉^' ^Wu믰׹:𙽟siي83Ngs96&}k ~ +oAxs!:-/o7IQ/KV/#ܩWI'V&: ~Ν:N\OP|Eña0rpxl=g$V$K/hO;OKacT$^3lAeHL kM ǜt$J/SC՚7]LV|obk[x |XTy xOD_xU|n7Poc~ʽ UOj0j"-`fg.%crx`{W @E|S^ƃɶf.MG\kH k Yst7u(*ܬO)s4ZE,̇MniH# 䒚 +F#v5P]s+y}x?:n^+{ ĪJt4Ju]3N{/tYkx"yxKc|R;piOEj S՛ bj[q eVWo}4ۊbǶ̟\(MhP1VPQzڒ?/Bգr@T uo%]̗eZCEuNY}M* E؛z<۸Zldz) %ia͙}7Xf5k)Ry*TUȡ7S%tLSvv,lPEmٲfhx#p0mȚ}I:ēr@dEyn3&ᨚcl6NK(HV @wZqzceo*;B&"9uxx8so]1u@k,Y %f@{l[Q^]pl|u)]Mj$T,l .WPx}ኢA[ [zę,{hIb*I͌F.žte4n̏K-klŠb8w\XsIjkVPۍ%tC9-'ZlA֕Hj: KǞa r+*LXq۷%qڜ7Z'.hS\.{^>c\$2`\%:Kx.XӐMCHRe>Ko0P"Z5 y,RjQ.j֠9N%Q"жȌJU;?Tc?8G $&d~] x@e pso^o}z>"{oq3~Seh/o<J_c\ j~F|$IQȓ nAcRŘk x-}p@7}0/;Q0_=>T%2leģO_Hu.^5c ^G+a;Aw4;gE_:̨17]ұ/{vM?KQ9@^Ηv;nU[Zg:ZhtvJR[cky: u y 1%@у<[P 4f<#>o&|;}e?4r@8pM;N*!@El`$e%YiA 4y$Ð1Ȅ=Hnk7pNK{O9h.Ϭ♔pkcɞq ?Ňn;2:'::(gl;(^-{w_g8dq7jT UG;b/xp{ARZp Mlpl2f~֘/'{g殰aVΨimj%gAb?&. {GH᷀p5)?K^b,*k?^.?؄_n;~WLyK_GfD6uZu;J1рVY~>0Fx4%&gwh. >b>CٌǶx+>q=tF}&d#v-jX/gaè+^ VC*5& | ܁@6Wce RAǬ TWu=# l[a;LP[g<5 Γ'OT{=A^"ܱ8skRe(6HzkYjw6j?˃ʰ Ew{d.IE넀ըڟ~(+ |XA&&$p~h slu sh$39@5M@EuZ&^Ml0 b4s}|8+6k!jЩ7;F;cL^A 5ݜRi 7GNfdeݒieK hQ]8ǿMls=_q0#:)sn*3Sݙ.MylqjY`U,?ׅKǽoRv W3,16i-j%tM.ؑ3atRk@aRRIVLBh-3YQ,HęlUMCp\ a|Y.ũ^@7}%d$.Ap N' G$=d>%4gZ tܩxmQ#ʤL壂}$5nk?c)5'pR/WK㞩ELqx|>k? Aym$Xk¥w`>׹ 2:"qN+$HLKU&М}lyaq?ǿ ih|(}ͳ 0+z,x?׶ P:ʬ>2gԉn=8^@P[ŏEcRv'^'5PUdژY@'7a筳\gG ڄXz_| Fx[8RI{{ǯ 7% 쥾3Ngchca&㛓yħN(ϿO9:lHVtu b*p:-~+^5T0G=&+!I\HWh$ٸ'Mke.P }/C7'+RW,Gv~n[7p?ʅYEn*X˧@/}9.M}M.d|@*2ۗ IEbH>A 6l%XR1b V_ b^ȜhFP1lWo -VtYE L`~HVTDگLWn$D[dTB&qz|oKA7)RWRkkg]Wa}t* h-UqQ_]8^Zv^4ɠ%;<Fvl ?[8`JIiլ(۟' ̅-M),no 8<뱉냯fF=/eK[+9eXIR36_-hOlkȼtcfmޗ I"H :Uqe X-΅1X5,3}.m#7\;[w$((Ӫڋ ]THtW+/`\JeWWZeT Cz4XDF+m[Y33@oDx_z/c;)@stz!3zb["Da'4zĈ4eԂϫ[3<Pka+CVF5Cr=DHJJ%ӚC~醈;vc@L 8$@28:L=]'y&([k0 ]eMSe5Ba&6!áh-}QD̋ƶ0j3KTwKdm@sڈXm|XR;^RLhr\70eSn,:ܵ8[WR@Z-Q3ZU SR K_/!ƵEs{'Pe={YIlc-KnkiҪ7UuQ1@"A#qӫ\T\A(lSVk'^ e⦑d$|h!ࣝzns^?l 5CKn=qFn iEqs5k뙬ofOV}A18BJkw$~%5΄% |hhtfD2yl>쌪95 7^AB?ys{$rma9 G#?)pEw|89-|E$X3} iJ3x.R&}ufkJ'u2+3o^T;Aÿag;ۃO.MBrB'0~o?4D?xx8c{\ 8cZɸT#6`S-U9n[_6dUtcከv=Bd0`UVaѭe6Q{Vu#ش~q_?|Py~~W6~qn*/eӽ㍧G[c̆|2;O>O*Eؓuנ-/@Y'1:ȆnQ;+ dâcoF&k"3f C%؍ =*B /v[ie4||Qj($:-KZ9x-MVT4 =j f8!hyڇ!1W:04Ր1.d Ȳa Sjcv(7t̬ZUJ7cK6/}7{JѲ@Q2)~U(K,S,OGR-צ? }0I6CZ8&ڋj&m >j&R'PI˹cr \sQne®o9lvlr}n|q_\2ol BDm?W@:gÕyZgpZ,6~@5t8aϙڈշX܌#lKן㽦 SqҖp;R#& / E;0a\ Ku `~is.eO0y?}rw+%*{[)ӷuGz^7c7;/Zr}T1ZDsm/,R}~':J{)@VTl$4#ͮm93*Eǧbx>|ZNuG*j=ys}jL1dm ty=C1Q0lFBO2$Gm,E?Zd=OFʰN=FcBRs덒3#{̒0z_v G4T5 gf'ݚDKwI]3Rc( 29Ye٣APmDLx9&jAe~ѵ%,BiaON- 6]E-Q+á=/I:}҈ݲ`m&%v26"pL y~= :UeφDmJ̶fUˆy^sH;@pvHVL6b6:—n)ZUTZo0k]V8o,o?;H%yh}e\{7Rq2+X Sh#tG7:0L+0Ls Ttk\k){$O|7} yrbjBVpZfL>;Í I֭ڹ, 80C#߾Ğ&h}{\ @//ml:I[`666HnW,QǸw}J!$D=l.M+/.@kujγ|^Ce͡3 s ׫y®TFWkRJ1>ٕ6m,:8_1ӽˎzcHsi;nNFĸG9u oaY1}Oh04:Zo|b``pw'u+o]yVj<Ŝ7|( 96 5*5vto>6oG?Ͱ+G7qxB S<>wgw C9a1MpFny@^KL iϓϽ]ɟŵ x RuLTix;vx?zx?EF6'^~p x9K.? ?믾Skݲ~uSOk *X~k܋O6GѭPBl\\lK;rMky6)Yjw;G@! ңʌMl˅}N79hn /4jN #p9{ 퓁X㏱c^EJts)w6<1tb[~s_qyBlP=2 rDԝB*lΈDm瞧ope/t{`p{2mf*#FXӥnt}Q`nn'?铍`wPfcVΜ<|f'O ~=P~h{!TIYG& R* `zpѕ0-ET8B}]}X (zkcq K9P{ $WV=;AUQXɶƧ޴ӫ-@d!`lZ.c4-wht\[a_5GyO>'ۋה\>̏hZ{w'#unt@Gශ/_! :~`nT{y̼-QKV "U%;Umr- h?_cXQqk[&&DT/* G/J;V(WR@Q,tu+:zoڶ^?Mh?=B3LF{lBT=b5[? Ups`Vy704jmZ8ĢѢg7/__=C#d*jT zt=Vz(5=I9FwВ؀*h I b]*Q45MuCa);KD;`n&Q3!P{m^5UY^+ԋ5L>q+R( :gP[$TB}$(x k൬5Xw)_0oiےY1: /[b63/v+g8{3uX.A /ERa[;MgK!R٘D#}~6ZJMB]1\b&5Wy ۸eO! r;;>Y~.*pʲ_HvDX&TZgC7*$ʶBpCWʹm,2N(K C؅J"tV19}V,9>,qu%$K\$I]ߗ*lg,tJ?@U5d8 8W;ۼ5{iu< S,柾0@dXK76=?#jJ4l缯8_?;uJb 2?u_g _Ō\5@PU!UipY0![Y&AD- 6l"r.}$qmZXV$w.=Ux!NGd)9I)${[^>"idtO\|*q$2ٻ}s>sPQWZm9XItrvp:&awu;sqb$,jG1-kJd\\0HFǕyFd9Hfr<K7yFf֗v?kGunyܺCp)'qR4Q_\:v?_zC|۝5ba|?n`w~O1zU<_8k w@%p)tw\ |kš@U1lEyz3/WZmKr/! @%J83Z`v4J sQ_D>?xԏ^Wp9'pޙɳP}FYc N22>|}$$zxD_AqNJ*MK֦uWͦwGϔV>n|xs+H*}+}z0I[T P*e$ПQ_NwDZTh'1]n)0I{yk(̒\a/x߈(TV!mNEOG!zD-6Q-GV=Zˆ^nlp$WV# 3ʰϻLxFۇ .K5;i%J x;c-/s۪SXхO췏5 V6]kQ{+`. :G%1t54&I6 D Zi oZ)sӦ6-.}Kq8iƉi6NwH~2wo3г#FKlZ|cnf+b JpSbYѲ{lڈ\ p(ĔG#^3nl;.Z W< O6cP:dvlߟh`!mh/e 9+{*?6ni8x?:T8Uv ȾZYZ7.۔ 38%o|XiSM*9˦\XznJVXʃs²i-lUO@oKPzXF-2&A텵ҷfފ{ڴM]3[l-Dp)N̐*a֎`!kFv4 1!!u:V_Ӷ@\\4nxZ2[<@|-ѷKMj]!Ƴ |Eƻ5T7UN1'fQIXj4axpb3&*Lsp6E-Vu AJk C|nHUEb "LG{YYC$`ل*9JG" dT˦괜 F8Տ$dVR ,n֕;Tӡ"'/o@TATRf=b&s\Ml;r4K[Da3E^|AѠJ%Sed#~X^涉Uh8XaE'}y'F(TQH9>cz)1(ܯw(zޛΧ7x dF7CIn+뇬_$|@3ɳc|y $ }I5IuٿJ~WҴ?ŵQ3=taAx~y$Y뮃/lΛ9RnhaVEC_ZKsղY /﷜qu1+f1!Zlp=s:Y:r>IROO|̨x6Jm džFxS->HB.,ϟAGcKu*-{niJ57sx 3~ ௌu~ut`dx_X :!e췌Á?# z__~u;},(z/[9v^x@ٯ q='}y_(:Ź, /@_$>Pj5Xk`[ξ]w\B#d[JMc;'  e s/Em#;lMh=63mW1#^A߲5=_ʟ_?~|j@vw;^m g?brR "5/~ Z3+ r3BkT UBVbjy#uC[;s@{wqx悧kGƼrPIg Ebܕq9[}[k92Q^o96C_+lΰ5x^^GzB-_3-H5  P}NWzE2 -}mTN/$o^NNJ@^JBhjYD ;׋\#0Vc:ԝn6KVw9ígueV܋됏vyڪBzH nﰰ*bZ\|*U8ZⶍMD铤3+WĭiX7 #, 2zdOj(ʃ~ ?h!cWf,2G0!oEC YFO1FUjҾQ%2 ]!Ϩ|4ꪇ5s+GmApYN?2,>>.^[u8 UA[j.ͳ}3 tH c}pLY~ KԱ8 3eɚ>fVUB@#7@7&, 4 a @'hf뮼"0⋵b{2+cʪ{g#V|t?b :E=nU̿7cmXPdcxe?vzo/nnjУo?yͬzҋ>ŧOPn~@毰~fR A t L _Z4g%fw5{w}Ὃ}fGyMN$*;iؼa<udws{c!:hncY|z_}-H-Hsz5:sK3=c6~ƽ1^Ou }l >̛眴KO<'?sL~f1NK5ƺp'p#J=`$HN>NT]fq*?(,Щ!6 ЦQ\84FwӵMZ^% Q[Fdp >Vw6XZ}< ]⦡Do;ƎK'A<yu0U5RCko<ȶt*.L60d}ޝ}ôn*vgSw|nD hgdX!;4t8CK*6*z}g&3Dك {PY֗zi 盻!vvy2( d)9\ٌ`STg.j'Q&^PD;ݣ)CR.XjeTaVpf)o9[b᜶{ zD֯iYٔN{c&,8pJ*|d # rIs}/9wXQu@Ϫqf6ixߞlUY9Vsʕ>3~drbiv"A 书|f/{/F$ēۿ٠`[dl)-ye5e.mrI%c5\v. rFvkC;$V,4VeeJX6P-{-Twg 8Ln5An?O}YgRt^ ssa+9k(':(8#xGHfC"sXN[x\or04vh'vBIЕא{[#٤\h#~ZV,Tޡx H V6#z&p*q rYBB8S(nr]?-X9Z3%NrkE;{|-UA2iB:,ݖꠒ ƄpJM}g [18S'%#B|Ja׽q {kBLke-d3d^CԝUm eA`oάnDWZ> ;o A B*G0^GFk=x-<~Z sMw; a`le۹; &SqtycݨJ?YfėQtHvqLNQYWR#hjĜ\cSڸT]֨+/ktiU{H\[\Sߋ,0IvU\o}n/ U,ڙ"e(k=Ӳwϸ9-=܏pˌvQ@kG2ZO{6 ۪DZD-@׶6໭@P٫.>Q`amy͢1lFȶ,C=n'M'!JT|+(6l(oەwU^N䄨Op+Xȗ'g]:Zڅ YֿW^lCxz=*<",xxhԻ3 j`;6KJ5ts~ϻұEqpǪw4I^▗Q( &fyr?Qw=Ajk*ooo߮?\>F'3u~wxfnyrђYr>2\jM.΍YP&r{e2Z(Vf/C ^pY fw&uSM7 ~3hePn~TB{aC.-e%yQv?9w浩Z'նĬJ_|k]G-G%76XDc$rBxT!K.!۸!J%Υq&ЊC>>UJ4n彴QY*`??Kޔ|$NHj3>!l#[}^O7M3 \f]d FC|Wҩ1D9M֨4 US i7XPk%+o\6' IV:xqЧ[T%̏6_]q!6Bu+*$30UPq,۩#AҽYۀ¨x]<(kwAjA-Y Y0!brEKsz qxo8zc!,Vl׽"`5:E.mY3BVϐ'fBtca;Ohq&q_jV*e-$yl|,=Zh4*Q=%:#!<\fľhiT2a(Q=A?^qRFqb [0CzV ,뎰rwXBF 2HPBK< 蜿{n[*b8>DTcQg/~n!nо%sZϹXs |<04:kΞtӥׯѭJKp{U|Vkw§@ڤWp?W? C찗{yĹdc!PIb[<Ƴ,pRsu1=8$WFJl7믟Z%Jd,~(᧵pSc =idx2 }{}{}~zQ?< _,~jd^-WGҦ_*_ lɓ.aπl$x~ڇi]BaWoN:0G6x+ĩ1p_Fǒ4>hTNF%kȝ|ܬ=y>q 6 NȑϽ ->썅)cHjP:ϼ&T4ENtSg~ulC}5c MCg=DA}1PWm譭x!lVIiڦZ2iEφ#|hdAA%s[*3#AmU2d96? zffUy0hVrEhKܮk&=[쵶˙Lwxr-O~E4ܬvLvR8dtj\K l5MaDBTZ|T@| \>NQh"O~Xb5p-6d^ncь6 o>vl 0ڠ5F*>JpXo#8t; sxЪvu*'SL?k+{!rWJI0*-_9zΫ-# Qg#P8+0M,:y #*rۦ {MŎ7G7տo.Y^ʻ$8lk)-!s@݊ -7cKxX:dxpD8`c%}E.O$2.Oܫ9Df m-KWqbxwwH@_8PFu +UVk.`$Z _cpaJPq@qHh!҂ṭѴ;DFi*P6}{j;SR8"H^XJb7qlOQ uuޣ:!H(b2vHE'`>fÁV+D@Pa+a vv(L<S䘎:SKyZKK2$N XIe^9;^Լku)p+Z:ش8Y_̙VTC5V5~'-Q(}6+_oѰu:hZ 0S= 8Y12IѸ끨 P# &aKD[݂Mqm*7J[>26^ ;UnpюU)d<$( 2haTcow[oo/-߆۶5 I`k4V|Kpr"]5x㑚YSف#jwaTx.6r:XAC^>d g錣=ug$‚{=#%W`uvXKDU$nsԸ`;wkVqN&샵U+"qoiJsX>$f&#xm ?3Ogܥt+Iy&Uu=jT72AqK,B%-I6) +| Kì.? {׌bna0=Rھz'~\KĠ;|}w!y/yymT.[N-_H"AN.:I}(^*e;n<9sg_-2iVԎ1!bsTo_*P s;q@R1tPHx5 *cy͂ay pCЮGyZ! ]S$`i~߿]&ިwD=;@?@yo;{'N?an6,i`ʗ[=@q mᓅqOoeVmAd쵘Fwٽ>K0R펳KI=rzh=թysLp[f+f#"li>ɻSiN/6}uR)UF52:Pm-AZewYe3 Z /搛rQ@Z'"āα3k;c^ \8cT,%άD`uhr)ՉIz(XR7jW4i曎vq??x??;¿xBVGX#,>|,h*wLeTɶuZ`TO9\8l:Zr[*34IgeIe4ťDLf@ <փ:sBRrdi }xdG$> #Ɛ.N6TXKėv((tKT`/ʽѨr{ ](!f<զ'(P;os񲇶FӹiY=E̡7m3:~XC̈́0vKf:+V2-M뎲aTiq ]jßrmtX"k¹Jq>0x+b{p+QRq:"҈^qU$&9q1Mz@B OT?YMbTmbgЌ;DtYj/o1V':TB'CM`֣&Y35L">ϤOלtӎ`m[98_^B.$-ֆ9???oyo[$ =H_Ur#~Jjv77nd3~'1]l6V/xE/ޏX;rُnTtߢVڮ%%ȉA48b?|,@G!T #\;Lþ #qE$o> pNց́`k}E2>4q[qn-n63ϬHW=- )je^dZri5[KP la~b̿cϟb9#&A<ϳ -2x£ A8xN!L M.li 3ug/74ǎs$ь I"n mچOfV!h^z6f~58#ď> nϐ D9 ArQx@{9 ]ڞз V~~9=_8gǵoN֨uGlpypkx|z݀OoS鴲tPx'3I=]cI# 5޵P榶p<:t)"C`b ]ُ ]O+}_[O[,-zWO`zqx5*E 9o9^o_U J__lwi9W_UU2#/ޟ+lcF< ng{MTW) Tgw m٠٦=j[62~Bh*]`˲w q0j,h!Z5(@s=_SO2kHL](ϫFV>잽9KSg6nӨ)d6MUd V?wHo.ćLp7 6g,3GQ}v l<ʦfl~& .}Z!^@O5'ޭ#%%;oM<TR5n;hqs2,wIq-9iw-"MzTh$B$ he>S%= Gdj~9!,m+OV^"2s7fAXh( g](Xp&Ъ 8FuQ= 7:~<(lͅV;pyQ9ʌH\4ݢ=mMJAKMy *~J|Z1F\ Numa%@sA4K̹pEXL2CY^YؤEC\92Ap.uTSk(̰\3Y [ \F%lQ6c5m?8U5h'`hyT*,kLژ)2s}*1t֙QHi/6[QC fTuŧ20Ǥ; !dym3kB4 03u[ĒXq") 3 <6LV/1IjG^Dƙҿ8X+aduc{Bԡ(gJk%8zbd-Ȗ$}ݡ>?"sTVܖ4;mo$\lI V٢.:U=T}7_MFցlW?: )׶w?_뱏::wq8;O9ʼZ;#]/f8欿C~6=P'=DHjK~o67;3FaĽ[9'}xڧ7 n !H!?3eYrKWj!Wݶio9ʥs e|&̴)uZ|EuUYH'@Z y3u_$x TK^IydU0|Zbg.=q[9R>wl\OgZ<Cᢰ@ Mphuw9j2:DBA-<3g&c ?lXOUmɛyy&z*~D9S=5GYB$*p6cLnc9|x'v٧#eR\ݱb1r/3/ },-gcdեӌe* G¦eVn4Hm(j7HQl3zʆ;ȍs-v@[d =M>b(ej׹n> L$뵢6g5t;0&>&'v5H;=q%ht̰c@1a,hdC%Oô&1e8ҵ5fcOZ6Of VTQcU*Kcڡ.̵-ʎ-j^76y#Up Zڥ5-݉X.N@ށ&8u{c &N"ܖ| %j}gYo4zָ7^2v4ݠgzZ=.@d9 ksU[:ϑfMs0lY V4Tb+4rwE@gkg{r= .pBXJ*ĪdP, ^q4 TQ /k%D)\C{|<, cnO~Q<8,q= >1l=a.t-df#t5No>$ygI˅ : ,#"9hޫ Iu\%U]O3g 0ś?^J״g1)9;(xAl'GK%{/[˵IԳՁ"K,P/2/c 0![lw}n/.7 ciw@l=9asȷM3"/p1.!BLo>J8J\H١Qn\'v'}gذ c>ك`lu?K ncRO{9L̆/A{@ =&ZQcq$5hd}h+:"~O6dtC"Yr^!*?s`qchŔޗc8yB87I0`ki; ]9zxv)3Wq6LXƍVFƬl\m 6(OTT`8|6 ̈=`1-b nJ#)H sRiJW&np8#6{r&z+ZoHmyָAq\t[tV1vUen$0ؓz$,b-5]z6TJ?9D[F(5MdI_x*q*K \FqwPϡIkBuẹ#6'B{4x5P,$c5`UDoq:d8{X 9AU6Vcd=3]cem&Ieͭq]*;pM{ kOb1 BnzFIJ)7:I1 (cEmt~J“ix _z-rC<z3pkhڱ'W_cCIx,n NoQ G8"bcO]6 Pv޼o-6?~$5.B!0},Kz?RGη,9XT#k[$ۍGb֞t#Ufyj/ 87B&)G'g^`}2Nu+?fk }~KW/Z;_+̀ q:5&`)=Փo: *_^T6ƳUl8cSgV75}L{bښˍo֖VoP0m òW{E-ڗ3ى/9Ӑgӵ VdXε餚^ȳ0ϖTGEc 5.D$''>uxwd í2p]6q"2Tq(V/rfR nsX/vVwGQg_ sRg6ZXS8'p0^~Vm^Zi q?ʰgSXD5Z:CfMr^̴`Qd8bbwczjShP,-܉w1i*b9oKյ8Gf/.34f~Ô1U'NZQK*ůFnM*V~yKFPfٹEP2{~{+@@Cas;ʈ7ښD%w Q'nZۊh1l,Me$/#^}+S61}-SeU>#ؤIrj4=ɲ( בA(?I|y<>THQz'<晠_;p, D?,Ne=T0nv1#C{OA$+4]ҹY؁PNkLvO7Y>.J})NC0DsӫEfldnǸ2S7 ]iX!iY )`atC|R-iEoֺP}Ns8ׂSmnjǙ·{\D;lUrJ$N[9y(iXtTE~$L\\TWzh hɼ5LZyvl$M+\0/G7,EKDxG2Xn$7]28 r+F4;?_!ڿo/cwqYF{Du+Oo<v[? A׹=\.?29Bvf6H+,W+܂Rf}1M&97:vHg45#֚c\\޵xdT/{E- vy˹Ԋ}.E9DXӵB2EOe4D!du|9"HH>uRμ~@'F`[u='fĔ. +&| Ƚ50,` e+NJ2rfX'q#$m}+'V}i2,Hrrv]Fs\W/~EN >j^>sU矠x`9sjmF&c743 2()k{Wvi|#ICYM~qfۋ+X 9,|Y}G/e[)u<6=@hV--$ *B@Jl +">RIooo %~=Aŗk^>W~h7\,NL3|]w!"ƼW-!R'޶[9͛E0S𗓍蹷Qki-{5UO͋j}$aAt.U;{ q!w"-ל.hb<<˒ <{ O},l}Sy .I8/zX}D6 ?0_N+(Rʦ' 5w4rK%L.zjs/+zʝ\uP !d2?әL@E*Ekt_Z2(t{O$6;7y衕^iy,Sşjq(Z u6~W?^*,;&|TWҍj`N`9o{eiㆥNBaJ}#vF߮,֍OGAقY:llx> :aزY:RZMKw%P_>E sƶ6W̱(TbY8ά2q ep.٨y 2@|mr[<ހӃ_47^cO:[+0^ -Tƽd]5<T 1"!"~F3#>BIK$7cS侉r1G4#<'JOP΄iQ\bf $C&UJr{r->_ur. URS*Vh x߭A@W)+&gј@6y/T[|Cʹ>TPIKu[lzqdd,ʡG#zEKo6? Y$hm,,a,{uF[imlđѳP4 dsSl0q`I0pVWNݽϞWq {ZO?iu̿ "ˠ>WP+hc1#97^wŞ9$Dzy3fnggkldcL88k>Ⱥ gƑŠ #U:O!f_r9 ڣ9zkp /k c EKg8@<'W>tC]{?5(ζ6{9]>FN)-Plӌ 5Wejafy T:t|󶡗cMoec$N%o#ld2tIF^,>2o<7 ˗fߥL;B!b '"Kki~D.Sdp F>r ej@b)>b4GݢAtCҼ K>*,MR(ݸ.+[\*&(f|H &("M# @Yi@}fC(3SI$4BUсT]JbU Vn}YE\;U<^uco$s9BmB[?2ueRpUkZ^{f"LԒ lkwjyM7v[vMalcMļ[ *-x/k_|PmGK(B:"ܣ>$n\M}l҈e}BJ뾲X}L[m%3RV$;^Cn²]yv^0%C>#/MEEܻ VX؜[19 MC!}*ngXT1?0\ } :e5.[l; WgꖪEOu6d5:oŎZ]:b條3ڤs=/Yxk8s+d'*KI,s,YϽfk\tH, ŃkZhcN:G7h,%~]ɪd5*B#ed*lƼVu["b:G#=h pEI9O@ tsMmCG1 I!tKV:R\fYM"7%9 i.=XfKTI Nii>,kSK#m! k%a:. Uk%&W(laIc xI($6 m 8tc2x}M#^m7F :ߢa/n]Y_Dm`lQl-q^nY˃`wǟ ?;/u1oKuQƣ|FTv/tY{0(NQ1"nj;u9M)\W=$-3=$6Z!#%['!oF1­a(Tum}8f$0 E&H~DQ< ]E'a<0%|=j۶EN,) i=ơ+}8w‰HЙa#(sEj{ȀkC} )+`#>Ts@෸ |'x`Lٰ"PZbGivLguKܻ c`#E,5o1ܠ{7agbvԴ;tVr,}fRJQMm7o0ژϷΜhiJVDi8֩HATOp ;ڼRey[Yi4g[*}[Ćm]tPOжi=2~B:x8C@KZ4(6R.e O{[*-[5а3 5-IHu@ŊTL05R}nJY-2m*堷hũEu*DR#npk@Hq`ȥQ3<2UHbGQ(wf6p8'tx{snS/yGZ -Z+|xUㅙ'd-5s|gʀv5|*ʌJ6'n@W qm 2ͧu,k,T Z4cȂ戵wA=> #w}Lڧ u-`7uř;|Pqy"{ڄQCf۳ob\{ϩքs^{5c{uZtTs#(3+x6DeZjr2*ݘNKpĈ3t:[cx}Mfzܕ\ցAyy'O)~cadxޛ#/~[SO^bəȿkD *ju6Izc;)θE쵫Kv=$r*ɴW}RT#c>˝՞*bǮnDԞmJd ^5E ̞ 'y|-]LT"@Mk~ս\|}|6B>^?8,cbmA)nۨQVݛP_ManL5IꁃW.+T{5[vc`au' !6kzVæՃ#_IJ^+G({Spq(VQ(BWD^ [SNG>x@P=8*GpԪ(C9cliýuC"RiW}Y :  LNM alجm\,Zг5=wS9mFbGs;['#,p r4P`d:M1~(N?dM1I95i>9ǫ*e4BU9Dt[X\M|ͥqhp3f#=س5=̴M62vOCFƍem C̄7rXi' dO~v"fGfePHqXjr@խ* 4OL9n uڮ: cyܒ+ZT`}w$9U8+qwS}=WqcfgQbMTH:ҕn@7etO 3oB]Q^frq>禊Ή%NVЎɣ >j?Y8Sy]1!CgJ[GD'2fsb-uq'K?s~_#(z[)6oz;XNG葬W*ڡ.L¦PSU'fׅL)7 eRXSSEj OW:7iœgk7[5Q&44՗:Iȏ1A 9}t[4I@RMO=h@=OkŎ ; ziQC?ݨPp*݋l\-ڼ\سgT w='V YFZ I w L! V!;CAC #c Rw?^o7k r?uo,\}`q1yH|%qh6NC4qp_ZapuDU n-%#M+Xܞ#A]\AWFdbVhjRw/DU;jL>aH/8Fn *Eؔj6n= Ә|3|J)Bb~+4}=&vq1)\-؝?;@|IM" *:} Ft'urdnױaRVf5^ut~k>ojR+6ДPWLgسER7U22#qe|8V6}=_ y͢Qf':scsx &,JEUJ+\1H,uhq\okI@k.jhLkh-)15NPb@5l;pPMIasrJmIC&M|ͧ*oۡ+P'ia$R=Z伧 D'o3wOx"fת cK dȥtCup+f 7;*e-a ÃjA1:@ױ ݀aw"L ݲ D򒔪#dUϏ ҸtMD! 2#<|,CГ85ÖPnC":xfoym<@F@ׂnk3/YI S;›exƩ cm*b5PelpI*@(*3l-_/~Пgu($߇Kd1ۭoX)uM zD0Xq$,q_XsX7N|S [ jAvkB#'D=N`ıkK*i߇?&r 0v6uwk#a˥T6gru%ս($v/(?bH=/POU'ozi{/f{GP/^b5P4@c7"m3O|avs$;? դׂS2d6A88Nb'lu w;*j>qA^ P2\tK wI(6xXwĥ% G.y/ةc-$#V'E K[$rv>{}C#4w"@Q'%yE%\Oj3V2&d=5s-VEin("Ny攪wn)f"'xH>V/PD=f'GFy>X#ٮ2S5 h;'ɯ|uP^}٪h *x!PVOذYa|l*wiˡS! o7_wNIIxdowa<~ !v rQd O6<F4@彩jjDezW)"AR'Zښ9!bD| J6Æ`rB Gmt͗ǜ=ot_>;xMw0 Pٚjx/>~&` }O6k4pW앍 ~H5ٕT`^iyh,eo3у6e)TL|޼HV "l5<-yTpYPHD +l<3olÏEJ3 1:k|cQ]\\zp)kO2px%R3}%rG ݁ /ٺձFHAE7<6ijyUsDG~LMȢb&EZ5|# tq`kpFI@gn||qjƵWb:ՒS 2@k߇IkP`rK\q#s8& a87v>pFP;Yjt/1rݤ32q7.A8vl➀|]~7aڗՋ3U5@Ӗ 3 iSI<-@%]=kE5=*t9Phܥ!_y.d>Z@WlQ9I bnޕ swIroΆhԂz9L1<ѡP9@)_/ Jg ãOo={)o>$=O!*R ھԻƸ gz)I_jFZ[ n$(zzvEuԚ4>L&i ĆT%uwIk& n| I X>e,Sn@pEdN:Du!-EiD͸_kvBuW5a2ա|fC7GdW=_y |/ϚXQx$PyYHx,]ۈ`:I/"ćA8)) 0h͊\)Sm bE;|>= By,QECpdVK߰uaӠ:_^?̮t7Nּ9r=Ap*ɝ0 pe`_nH##zyobqadkKo`N`%!Av %͸$a%INwA؜$w:\c{um[)r_/lwkm-z^7 @1蝎oa;2&{}h9 4] =^b{&#=oZ:C"n>)- ڌ)]8ֻ=39 mCHjM5TefҦ:7u9 e"Km;fHT4A[ N k6]^uNjVb9^ʰme-]}NkI01 ,1r*Q&˩og#˯WϢwYʒi¾vr:c ψR_M!tW7j)k=u}"e5={@?^|ҵRPSLO"zLݛ}hGЯ=gC|esňSY̌ND) AF oxuWᐕz*LJ^h:e]6 U#ii QV\Elu=A3{}&f.3ŕMRP ٭P#*Fx)Q;'3ţ%ɐEI"=i(3(iZTFTd۸jQmPZyRVjDN%6"^%4@ hCG]!AN`4R{x ǯzU@$'"`-5ZGܺŸ½4_D;_̉dz{oƿ:hM7*d{񑏶sVX5nftP.|fρH V3IZF6IxO3gv}3Gy S}8nM]4y)J&X&㴼{);Cr@(=2b!XM 4#XMQ1lӑȞʹ4u[ܱZM(ih{nyRjVYsD 5[š]u0-eg/ٶ.䠹y2#2!V"gvvKsIi&23՛3,oӃqy.`YX 9SyNm@cv[#D ̪|mOpxmO[Vrv3F$@aSGixvkb8@;$)qwm >ۚ*`G> <îbě揵-AgS檇2H"f'BL2Yg@9$lb>Ϧ5 H_bqr)Y翹e)_ ݙ[pn @XWngbb[4ȴmle 55s1GFRMQ @ ݰpi3ki!>n*/ KDs%U1U >^MM(U]&#QϏTMwx8Z=nRIaLхiOfp5=9 G i'Y߄هۭ&K4+)gT{vKݬI=,{"XW@OmkWV hg)+mLt ctFYj給t B@`yԑlޘV1߽K<|S;~JN='s\kTkcL5cd\PױPzu`kz̊vvzv瞗 OhlEBmZ٭ݽDo0tq[7<'+'Ӟ3ncD0]x7ϫ>Qbv񗋗8WkC.'?A,xlؾ*WK'rGlj5pa@jiSd& e~_lHL((9Ō yV$ti8#HKDJ۔N{(2B^hBM=H7B*jNv4>̣I3({sbA*R8SWqOJ{6(1ׯgn3Oê] t}R#*_}m)CImQ*ʰahKk0l X^*"PqD9)N^\DdzFCxCҢc8NDjq+7;W;VQ 7ho fk? ߱MwN\~AUܕ. lJV B+pmF,(ڠTQ, b]`腱mK!ҫfq]aح֠'Q5EܔG-/b{quڨ n i/Q8B?k'xt ŲG#\DP>A)TVT=|M炜=6/=^`Z_2nNlR@dT9Q,h0ҒxEG֕_;%^7eDs1>kLTCU!O_g'a*ıtO}Qplhŝ8rukqcd;iz,a`kq"B]*ar -"TP:W Ӂ&~;~[o=Nv[tu$ ?'j]/ y0;nLsّh"ZUC.R<]ho,ZAHʹ;2")Sڿ(8"kn/ىc@4e'p~Sپ/ *\& 5'(V8QMEChnЗ/jPn[~pkg& 8[~dxWǗЮw@ų pvS`}@,rGqRoFP݄؜yۀdXT_ۡ3k^DmnU]/G ;8s cɁz2D8f|oТA|w0z|m}Ϧ\^_^*%x{pT'}C[chU:ﻉ_\F E_r#k׼/7{IJb4cG= vwk,eK//W.U2@2nz8/%MwDV{G{TQ.k}ż:zy!!`vi8ޯ13 ?yt|u!~PbW{,c*kEwN**c yƶl `z$,_'PNvYu>7xs仆zVdOjo\1 YUﺘյtfi(oWW53Q[(NMY\9r߁jS_@hR -]tc{Iu+عuo%P}hn88?ô/ִv\nk3u2));] PT1@ml$g}zaX%ae/Ξ=$ŗȁmTl\PO l9p>u<,8L: 1nͪ9$ 5NިLR J*׀LbCXS!tFmYUWLY;ġ:yaǞw>r ܉ॡPt{Q6?F]#=Ӌ!o}4>TfSِD?9ǹsUE,+a otc躗Dy[Z6 ѣ"s~N>O J䙋 mFQ4cIo%F+85~mbyﭒf^@PRt(Zg*-:u&!Ǻ|LO"T=u2.hd`!hzukSUNjE;?,ǽ)%se9Xgqº;!h 3ۑ@ p{j@MkPκZq-AQoƪǫ0[iP/ʫ%hlʣ.K]Lċloyl^ba˟OUgΟus=`F VS bekrB<7Wق5\qk&#'>͗ e>ϺH14eZ-0v̙`gVI)TR?r8D-`Tgo'g?ok]G$p;nSށİn6l5ÿNqƭy;DW8h̋qx-z@ߜh~rL 8 UR# .)wLɰ'[o;$Ȫf2#~܏J^0ыP@UI!0GyO`c$EHd <:ʸg=(!ph`HM5y:꠽jptPj?"liv\|?j1 ;Pn[$uW;Wbˢ/ c ~FF(A,L=3҆;Vuj\'MYcY)n<Ч%Hʞ୘c:!Irk'G^'sCT[?]I rNFo=?;b%;9E9BwkUF=Oәl!-9#Biir,b!j)r Dox"c=PkjpBp}x}z{o뛜W_=/zQ@bwIglqk~{NgȖ zk_lаG%wBuFHe(-mfmîBeT>k.3.uu5Xd0H\OĽpk޺> _|ٞ5 3Yzz-Ko>9|Wo = YIeE#Z؏&GVNjط1&Xĩ샻 v'2WYSX<L.O*hR7 R+,,nmn9}R3(M)ټ*HBy7۽hpPΛ,I I=E:77ʮ*beVAA͢|5;Qr*UV )TMUO|f'%ۉ+(`v|3ٚ:W:&KsAMI2D(tTAƈc%&LU[y6يФΧ{ 0/ݚ)ԧM:>Y69Kq.*p4WbZ|vUk›{랳.Nf.4SS}&0K4#Z(y2W)@-a? ּs g1vJNr ܢ F4rk/NX:=8 ,`IzFA3}u)gj\{Wee8n>Z0<<(j s3E1h0Od̈́*Z0s֫zS8bŒbإC#f 2(i+ cr !v@-$H+j4̰K{Cg`sV.Q+xV*Th[~pQuWy1_z]4_ouB72M| 9aT=S$C AUޅULYy,xS 9Ex<FSXE"#aRT[ʜrEŠJiPɊ^tY87^'w~0a3sNyZy /x?^-I W1ELanBV:amXcQG}mZSڸ(,J-ktx ҆*sqcwacޯqX} /% <.v ۜ^K2Z3!"'~?/}xCUj xT+NV2Us1ۡ`|ϋ5r?9x} si*vQ|z2=D  Ote zQv(nC34mfcVbH%P3  V#Z-٩GCqJq2(Q'eAJ,ou?|hQ- MUfuWmy^2΃A#-[`ҿ:U<4 V"1dp>cs`kDmT>͇H'W6vIa zl#lr}3lh~fW3zGf.,7T^g<_w#SxvՍ=A ܠ@.h=.O`ty_A(8⨁g#] =^Vri#y 4TTPb ; *mz%o p&lvҁz6'PݡJj=>. Z -bGy\$d|af'i26\ .ܬo[6qbbʱ1o'2/'C3rsf=.x~֏8n1N\:.U$%'J:1yIq$by1Q7ohp%mb Ru;.'ams)>+C8;K൒W;t$'qh^CȻ. L-AOh&B%ZFjP?'^ꂜ렃ƨkp_|1mzɣ*zZ4q'^'>ܔP#UokG6rOɵڦPRVE)9fvkrlKPsM5\SjX~"~:ٳҐj0P|r5OOM\Sh܋2~Y/T5 iEqq 8mξĒ> y86r0j5V\'@ԭ3¯ *DnG֬^D TɺW3֤>Xsd,}mD+_Ne}O;[+$B}0[Z/emZ禷U {ۏAfbtaoRL;yzPyt XkdZS0e={ső=S4ltǦ,{C2Yr2;{vL%pnɾQtաHg0rAq3/Ai Ro'9l$N)QA pEfWG:ѿ\'qW20t^<֒)J^R8"܋ Չ[zuΕxݦSS8H*kL7aD^O ˉ3A}{Aòr5kX $ۺRc6Lp32poY*hS1Tw"SIז}O7cNW|9HhDse2'z>AwKؒ=9yF0J8k]4nqC{o4z&(mSΠ.خ=FxFΠbW_ygÑfEB ԰H>E}s6·YnU+>4;Bm8=fva6Ɗi#w [p"ZCLzCPPl}}4 NX8ϒP(-:~ #uz&C%GGɏQT=ђ} OD؁L{>▥Dn[)]֩|Wihqodm5,t9)g,nd#oMj$`9<:r-5̂6 N<4S2 v|cPSQk `V,-ـNNl͌ {伴/,H#.8Қ[pxۼK sN@U% ɬfjS݋mA#qxZ1[DJQz uN< k7#&f . zR<\l_}8qƊ"pD}T,mI{=KOm r$&dǼm qQvFaI\S R5D\@'nv"$ n(W g*8/!B'gf6>QnӒ Л9*Wgh(XV }RםD+bJс tc瑸 mt?4-hlmڳ'nQ""#F"\\xo8E?a< y+u VxAvkvwmU'!Qx߀Ꝩͷ!èm5ǔ_󝟧ɉznσ˾U8$Nt4-kq+̺[|`KX8^]X#58]6 ?eyܚD@7C= <$۹}gڛ'hͲӦ1-XI4hR{ }7ѓ^/373VWx+Ԛ ј+fogmڈF#86\ݕ2Muڌwe[Ћ̍j唑?f73lsvbǗ뺋;6toEfh^l< d71}7F2<>r$M3] 8$r# \}LK\ZvR_}l0b׎jjߔόV:[0Nh7,ZG^VO3O2{J3"BXFρ4g nV=-vtm7@IuSj@1s1_3uuGW!W[8Y$ML<4=$h#~%Ιٚns9rM*6(!I7Q`w0ŧ2[526s`it'(6}W%?`~ɫӶ"RD z@dDmasɦyfkԜޔt@k2hdCi H(P:+nCa (һ̈r( i1j֔3|i}Sd( {5EhwF&h's~/_Lxj4cU8<`aD *4ǮG0B>uMRA RZo䲗6&ɟqe2oVb!mx]׵C=G包3xhWs5::LjŇ;I7Cz]Q|:? XLu.1:/ʶa.~\;E` sο]2<4= |O@M^_zCt"ANPpSXi]ūtefVKT}7kB3ځbdmI7=>AsxyW5 2j U<㧈,ڦu#6#-tKO2Onk VT8ꤰT߹4+}/f΁aO[=o8\" (l{ n"gP8pڋgw( tA[}XNդ7hNp qki~Ū'.>&-o@lw^m~3l:1DP7Z(+bD.9B͜g:E1l$1_{'e>Q/Hqx Ϡ_%tha5Oe:m5)h><0]Пi7 ~{]+955ߤ~a7,drU`331Lcʘa`rŸ+5<"2>:U̢~Yy[Uwȋ`ڀz;7h 1!23v*#iȒzTD( RQHDz1OPcΡs Ѿ萳}W,*;Ǎ=3OѨ܂7njs95@o$ܧ\4X82!SF%eY7jIɽk\ 2@չ*fs35y{՛n:YgÀ_YoPS\Dlh1L:SVCa|!aq^RmY*)/Wx o~M|B-5=T޽jcOĞuzM  ԸV1"\E3tW`,&Dgbݑ>@}bto&n O{7Y:I @]n#][>!CPcB<:!\XAD"#c'fk"S4S'!)A:Hqw0FtJ1ē2+ r$͖H 7@<{Ʃ՝>aXc$0ѽ ;Y? %7$N2A=q]N^8IL!}jو HdlsBud{e;#pP;P7Ʊ4Tn$e(/_0/lut*{ꦒ2AbIv.Rx(uu8)h~?S7Ӕv?B^aFg;YO(>3A)' Ru{vR~~tP)cNw>$kͮeD"Y4c{(nf qg(9o .&^2Ӌ>,#{%,~(@3Eu< {3P+ KEˮ4DǴNi=pQ[N'DJQ w.v=q{sBKw)A-}l(n3f] g{ႂS{~ 1-N禧fMÔE(lp.D)^\ALGTv1] _*I<{] =ˬ}~l&ebh5b缘d+,ħ'A'XJ{ *9#gRiJl35҆dz^o}>m@7}OL֛VGowWՔmJ lR#hDe~"ꪔ.3l?{c떝}cU9IݶŖ/!n#~@@lc@ D@N(E:&ݾHqb;ݾͧ޻<1_j:}V-{Wպ9 .CYB;۵]j'u7fg hfu7W99:GdI.:jUI\pϑf&;Q S:f9;Mο?U쳹`XG'R{f6Nk(ب1pGXIemw~g~+F`pE͇kһG*]ɤH _o6Dlv-AR=oc <naY u7j[.uj D s⻐pnkzl)?x&NTm9}t ũ*!771Np:2-Ko> df#"u9{ qdVyŌ/-@P,+9چev܂˰ ֡! 6k^7!gR>Nɸ.UD^ó lש]`z )Sd9"(n.A D}>L$ΚrXRXj4WPY2Ĉw=F^"x])X '7ڙZt/Th|Ή1 `\G~|y>Q#gu;²EUg?%K b=o$ W:iHh:H}:i|FCUu^u\9"D1Z^G`>}xܻCf4WyHN9>E{9a=b'Gq\/NtЃچTƳ=.~VgU2d$MSGv$+N(B]-0+K8b()%H3~ jrމqӿxָ_j?tV_?AuณRwV|xT42`Â8QQmXO3J$ŭ:4s Ek=D# ;eԋ#bvKu? a!dI k̭3hS1='W6߬V/ſ5ٌscMK[SI /~2)y>QqyԊ PQVsMCY`ǩbXFLEr#7 Gc1\t@FPfs#d7}tMt;AMuZzP3-(Q17Є#_1P$.^1ȝ5E Ui|sչXݜLkע@=Ͷ.ϫǃ)eӫFm{+VJέ?Bv;c׶HQ>3p'̉N(jv@kGcf9$sa6KL\%lF8,PY ۖ@iI(sX,ڪM+ ZO 1XB-c]sd⬝?Y7f'b t"PwF#=D!gci-4.+9/=xc{ ]V_z}uz53~nцw84<:u׍4Y]ydہauIcWY%(/rwe]>Lwc[f+>nYi#vuw>\kkKuF&AV8ɥCc8"scm7..N^=*6™1^:}`Mý0\,qg, t[W:s}z`_¦@h4C/lGPTk<8  ٞ!זw~jżt -k&0XvK=mbFו Ɲ;A>4kd?;8jk˹t+%K 1?3plg'y9miZLXSorE/[y?gpLc&e 0׸j-~)K6 6ODHf2MT&;!p[Z rcaM,hA+eA.l5(N^嵀6[*}5·_ & D6XJ>ܫ]4!xWz9AƳJ%-͢W,DM1((4@+#\Ayio@AP@p`S3C,SR.Zvݵ#i*)eIv:&Iq{(|q~ģfJ ݢ[nQ]z@l.s^hbC[ 5Yo Y+ @T}ֺd)V^mb>4C76!C^ fTȑ;@)=F^9hS! ^WC^mҞ[ T],\Ti<džZf0FegΒZ'/R%ZBaNi;ANUM iyd@ ;m%\Dկ6^S|kr3{&@ & 2~Z&Mkgl@RYԕMt5YϩM Bb4a/{߼K%-h\ 鵡>T.en֓\l0/*ѭŜF ࠛ\Q=0qNܠ R1T#WɪKNZ+ٖKw-KMt='GURms*NAۭx ~!^ \ՓϤ7&s* m-v&t-sm%}-cf3*E.iy|j*aGP]EM5Q0g A|cA?ta{@\1ePYBz|jt8hk f[JuCEBHgT.YozO4|9 l:GÍ5U$]42£?Q%HwKlB^u8ۋ7%A\jVVSk3uݗ47"mjuf ڈ;LDM4ʱmVr?lKtcyvHIYԺúQxǾǣJ 1pvun|I}InπD=v/+(T z@Jvנkفqv >mcg֩ mbK!o-j549Z"p"}"3sfUNhәuV9]>CXx&wͰ996CBO}zr}2= }{PKAWxx< sxѮϰϗ<y~ݐhk ̓? J=ǶO>Ԇ^t=Ao8@N1&q` eqQXlƱ&Y/eeuewd~:0q MK&:pIf[ѭ5mgpxn&LStYb4Oe~1|%a8sbIU x,Y:viOoꝻ !Q5{T6tvr~ p70ubGhn(ԻW羪ZO6\-ߟ3[~h853C5Q6ֱ + 񙩸;`vq0*HJ 03w+zIZ-,ؕ;mn\l锞8X-kWc4s_]{ :ҍC1Bֆp `X"0q\ZEpqkSCTmUT)$L5#CMG`m=@k⭙U3s/fF2P{׶$W%HQhq+^L&\A ɓ[Rl P<)D/2Lf IMﯤB m6CjpY$KγĮ{< )'U*^wcqI\`׽tbGa &VamsQ~_j\@D.,憐`7UD]qnm׺gۗʼn *Nb_6_4lyȏg@2P_ڀnB0 `i}X~^iS݃}%5սԘX9olKmoq1h{`'8B[,½=(?3}oOw8Al2E.3"XPzxavf1N¶I484 {2ñng7D&߫cCMh?g)MR:(H㍚ :哥JFxm̺[䈃Lu4ߧ?ckwͺ}bjGl>3Lk[( ^6f@+N$x#.FRaL6i͈sq([€~/='*C(~uEa2eFkV}8c}Q&eff{bEF0% {*nj ;'"hL;W.{'d$r@>-h(XBV4n@}y*ic_/wƃ9Ynt){fv^ap8<tT_[)RѼ\Q< '(LEpyH6uonuiU{xCw:fI&Ɯ PVkuۿJqeG du oz; g&Y-> #8.O1ǖC3& {܇j@uz6~Òԑݏ|'J'/H ̙D# (MiI*5SYw2FyLr TSk‡ni !y7J'%L;\C<㝊.҈ `{t-17=8gdDTsCS'32ooc+q'k1=/c*;;˅%aϞXDRxC--͇ .]ﴞhy3dWP!g}y _dKPi4:Mj34 S15V5ny'6Q!j p]Q]O#/a Bjh uIQ*l't|pNNwi^ChL1ZϫeupMVH/|/lc}nmyq,virI/= l:y>c% "iK@ggc8; ž3C m =j-/6Ft>C2ȶ M)w[$G}du՟nϷ,+pe5PYm$em#>0b Tg&`C/̺UҪeo b'P;R PȔDۏPL'KQlf+jKd8;¶6YŭTx. <%P;POJ jk5OqՏ1Sq90wX+MSO[TztbCunl:@y6vuE> =+4B/K|0(؄%96U,;4֛"AܾtF)ufnfEQىwtG`J=[eRs7Iӷ%5Hpj9 7AVz>U}O! S9H )T?H}v#>SpWys7V;v佁T7<[X:QdOm%v" #)$YI: rv+$ooݿep&tYm4muj7|SG~n+zV:0}u;32qIsnypAAO+q5X 1b߫daKN Z?nȕ9҆X.(g2a ,6Xea.4eoX4/uf>yCYr}~ۤ3km|![MDD*g!~5[#:e^v6ģUY }*8FY]L%NAe$-[󘢁p=e,&ZBQ:82NwV=qvHcJoBᓀu5y}Nanx v :YS|NRlo&* :g/La1 a'V)]7|==ǀi7Ϲg_m{d°<۫2ƧSx ֍gQ~8{Pߛj#p&h.nNz;ӹ>Oǎ OHbAϜ3'g Af҇L]iaA!+HvБhNsys`VuΔfKuvK.%=bD}*B8,zg/w)xW3j$IǑiQx^ _~˥Dtk},}W|G4b%p1eaG &>{ ,\h[_Qtjn55fMk{evKx~Ww ]{ҐS 5c"PjpbJ|n"APפvjgJ~44 4cUG4$V0dojuaM7m rЕYSClx|ٴzhM9Y .8jKywx}#rZ0q!"sQRC-"-I ۞y>Y t7"R;\̺wͥLÕ+7h84 d\~@3k"`{I[q)je9 $5`UM@>@.'u/WťQ1[F}k`yiPP'ųDz K jCE{f|?CO ? ggۿsw 2;;cu  ])XZqcszP)"(f]6m(>iyrNƈ5^TLA:[Z6),7)U}I*65Oxeϭ0nzj,#Tc_lj\am,}GV:2MʝsUS3%T9=h2r4hqG61d&=]\G$% ö5^+zgN7z#2R?ن5`rwŤu8+twy[-!2[-AIܳvt{aOTXvk|x<<AA'8owC>\s鹛[7G2؝RΜt1-9GܐӸ9̓xer ڻxD;pXRp)pl3`.հԤҎnvmfi gdv6> ?(uMv>PÊNţԶ oT"z7ͼm3`Yȫ3 B澤Cs&nf~˗zHszRzץ20I|2HGcp:Dl# ԵצOS]k-{Ve 3õd ! $2rXbRN'Ŗic!P (NcZk" FY@fG>9}‹)9@ C\1 Z6TJ́oBɀU7X&uG:67VvL oЀ0S(Ch$آ\ϖ1Uaz^ix|F;sw87 /XbDW`=:*U(_ $ᰞv];evWS\P' p =u,[}עUPa/C@ دk? b:>&^yد\^M8'/3x~ ^#_iA^ T(EEט*pNC_g7_NO ntgTqP?85߆z)y䂌.; #?t㿌_&?/~;W/A~K19\N]?mfyMaK={?ױq}-gߕP1HrL &aŝ?:9uW^x˿g~t I p\ϴ hTHS˘].q/HQ53_/߆w ы M5EgtBBb}Xg|KԓCtBC>S #T#pNSɝ!H*^oy(Z\ƹt-1HKR˵5͖D=AG"n؅F)6wŏSQjV4Ѻz|gA&:~x\H]vv*BF> [ʡ[[i>پ9xL#KMɋkCgYƖMT^0uxSǿi_>&u3xX%YGݞ~QvםEG:[h1-ܹ+o$K{VϷռ?SAgq>w{M@u2x`] 3rADK=C|i._&3Ҍ5Z DfI롷3PP4b1$zaBdN7r{ '5(gq5[Xll3M;s'+iLDoպ́jA󙆙;.vqZ$X`͎6P W =79ߑ6j6npÛX~AWW5 Z W[Z7jvuI5KGW- qn]DX'Kah ;c/1Um^ɕ Oݾ/ޓ0U QIۨ긗U07;oׄ ^\&20BfHu 0ƙnZOc$r $WYMsMUKbS mfY\2%>[5J \y^5# NЭ;!5:%Q=);Sw\g~k/Iؗ*{)>-;"'~_c{u~{/c^oǛ_EzԇU^OQ<2Y{˥%㙗UK p@YWҖpW8$gh@k_tR5vBڨ0N"R5hʯWmSIqSv_v?z;(/m(HK%TuV?_i̠j2E $Pv>{@붋2=½ ɠ`qtm`g<^-?L̴!'.g}}_a%m1lV:X5܂ZIdƞ{H"D==58x8A A3 D K6i>ձ[멵:a$ F`4;C'W~%EJw!lML Q;9Uu6;swV#P߱tG8g>bpƲ:][.,`ogh.Yk,vkva:y<@t@׵{]]\OKB5e;n8LO4 yjR݆CfBcA#",ÉBH'Nȋ7X>9j~&6t"0 ]"tk[pSEyo}Ok7pgC]}{\NϱΣzQPj$2GtK"vVrhyTfO/*  {Wr@8] h!Mǒ@kȺo0N<>ϊ7VP]EZ\$Uڭ_\F+:9/X+ !m,Kmg [ev8X]:\''x]h~㪕Lj;T?7 ӌzM׹Gv!ΩP j-{ޭP I.%I<ծ*Yʮ:p>TP3ݻION:ע̑ P1pWZdqEut[^sC9ٮN5=oTvbtqgW^VSdh=㳍 "G YK*> ȋ.3]* 8Bx-j>9?^~COx~F H8ٺV("io0%ʰ]dJT_7$(='5e"]nl/5,6[xލǿ^O}'^w:=Y#k爟 Q<2I}a݁Q޴bpl+c$Բ ^qol}o{붳P6|P*'I5Jq/Zb$\v z{19켼z`]?z'mfuK6)OM4w| O/?\~@;b{Kp_w`b7[՜TNn@pwCGؿdSU215 kH^*d5!8O/8cwЧ:F=R}I@;Wp=߃7x/lj;? VV*ɍ0n{=( 12n P}lnMCl>5]?Jds.1y>׼Y tDX7eU+QXIP@͆IzxX-D=>;KfL P#@ d _qgƽ4z ];>gbL"v9ac3\\SG{H!/|Y8+稸{2dnn+mY&VL .yMT3O;qJ5׬4(_Qwc˶ 8Wq-6eʞo9)cR2}|K1e>nbM8UO=~z|yfyչڕkb‹xyF}fUEXx|.%W3@fLܞ*֮i9Vt:-lGfakWtMh$J*Ztt~B,lf٭a)/s*=#B*,5D(r-uMLpveb yo\jٟ]k s lE0<ΐ8cM`bX7\z6SLFAyb`wXr! cOMz42١l@X}^؟c\]x1rLrӸG%זX*GYѸ0zfp NDKcT0cCm2$؇TN+0bWW@N,vmM,Zƫf=]R.km [;P+V.o濄R;6q[gU_>.Eu4CG6_by oKd'p @w67G_xWuPt[I8xcn0<˪=8u'L.v3YfhY Je|^d묢, Οl#{RQGUgRرR/B .",2bq:TW~˶w7}$j(ُ# '~(Q3#]C{!_~o\[I烫 ؅fV#8Y;/*kq*_*f VwЧacVвҽf2"rxhi^ݻ oUac<_U[uԍ8/K &3'U@55p]1c@\!dd.RdN>ݞM4=9oݾ9Z᛼BXgMFOV]Aƺd16bXkqfI1go7:(@MJq{&H- J#&M Zgq+&os5[kE=[8OD@hfɟ"j^YhYT^ Q :!+ڷej7~?\R!:6HW֖9,` +sogp?c2]ܥ.3}m(tU̙ .}-eգ>vRo7v oV/59]wP,%B*YFhn-b 1 {13.sȅ! fsKhVfk.|.8-,tSڐReJ-2׉B.rjJD[X{EVm,o?Qk``& &f83YѦQr-n$kAQhj^\pȖ0"7AJMX naugM% rZLu z٩~^@yjmhL>Ფy~n?y~Nc/O8e؀sKFl7ءx#FؼAj^[%lnv?cc+8w:97)9:zYajpv6W5!.P/u~C6zY_,Cso+, 0hv;Nc@ԗ~}s0{3O]ME<4 S3qgb4!2I/_p?KR6=!:W6*uL ݶ<.V% e)&ޑu޾{X{ d2/uV+meqFzQжzu;bF9i{U=mf䯇չ z\+8m[z-.d.qw6B@516EI~(ZǸ_6u[4 czey)l wx;.A6-վjٮ'=%wǥ*N$0-q!KB=KS[^3}M-6=`R!x=p.w%=] rS|߷}{89_`d̶R1i#/je3|JЩpڥbj鈵DB38]hyֹk14HZfWwy+`y[ne9Fa0@PuCn"m{_k 3[>qN٥Aqm)9s Q3m +h'm6e7@TQTLIGD%gK 9)Jr3$e*#p9%n!_?+ΈvP< beTv_jmKd02".`&vχ}6EYٽgCyYs±+B~gQ>v8-ASCgWrTfaV_{}~JT@$NrǎؿKs)I3[ŜՍCz2;q*ґ5yR8r?M?pS|X ?Ey.Yt f|Sq\:y}RJU]TڎEb첧A uXoȢɉ }ߍ NFIsTͽ~(~SRVgڜ @K$ڵ]ĶVj_c]4g0+z-"={,b\߅S-Z.:p<{4* M@GLuh/~& Wp;3|pKSp^Y=g}2PWqE3F;||‷޵O;nm[LZ V>"ieϖ7!<6i&.ϵ*E''I;y]P *w%rW6tК Znj44ү EFgXF =k־Wi+x?W 0LRwU__õ :w^yF?y3a|I}OD'(h9 g@ DՇˋY-;󵷢sD}.ɴ#ll{krng6d4>߯yBXrhlb?^+edkB]U6u\N!%/cpz{)KT'o'0r+yL <]=xMOHͨei(engj9|aOIv[E o1ĚM z|)]:FAQ IW`\{:&l[X^6^sSnN‹dYYzͨT/_Q_wy6|oCݿ^dp3-%>Zĭ@ǃpm8yp;%T=Mbġe]J,PMyξ.TJn gTl\iC98< `&E?Ns3\E(wq N.)/=i33 4CNMA,h%~y䙛JZF=!H."d nb=CLQH@K4btĽ9kU}L]PƝG6}vۤF$ 58œ;dl<.׏*b˱rMu~4{so enf+dGC\oMڸ5R `w4ঁvWhA6x哖TH @ !mvͰ[Ǎ - bjUFT`Kn8ҹ-1N`\^uר:dǁހ NNHbp)ug&s/ b'xx|gS^=' 7yWgtއq9'Dq̓g}S=cL(٨]Z|7.k`&LUx`D-A]lߋ|k3/w4%EePՅ 65dܹͧ_We'_$ȍHߺy<'0;GM?6Nܸ:@s=*1 (ƀV6Bwpm1h`fM5ayLEqRk *;N'AϮ;ul:V uP`%0Tܪ[^X}Ͽ* -1. RrhXNj[GN5Uvb(5\\?ɵF6/ˈjA;A_#3Jg%w_H1u=F5C,:RV4PrĬj,7\rjN/=L(2np 3<{.b V6 Dkb_ѾΡ_h7D|}=?2;h ֞L]y{`~n_#[kׂf-O@8(ܹ*^J h rcc m GE%jRNd InS}l ۙҙ}&뱜?)柉1z9 :O? y<Jo=sX*C-U-t G0Ym:w38))ξЀFa[<U6ȭ6 a9{g@e"mnǹ#ڝM…X{t"{u4D۸3#"sot` x\7^x޸^g[N!)`K!ϱKÙ7+ַ-y]s1S`h=NmzL3f*ZT E޾!17B3ϱ4߬+}GS:\lBklW2%`3)~6غ*{VI FCH a@ ٔ Ta,æ*T\J)|T~$v\ L9v;F( ()!@+?Zݫ{s9wf3usٻwֳ$ ~2{+R8vjn(kC<79j)1] ~,":L(qJA4dtiW9i/ݜF 5+ PHoGa.]4dm{T 69tުp^K.{л';txu %萵XS֋g܉|tYq}/Imu6-y~a{ZnWc{Зz EKƎP@$tR}^$Χ0,D@Nr|;fjcIjh&+;X!.lZ:h6uPulH/Nf[W`OyKt/7 }/~px]Xpֵr#wē2KF􋿈;ο}x[ e#UuNo1hp`wbvAc~y/JaYӢXt$;n5yc/ԊT:{N5GܯqצVG,7_s VmW,Br_i{Z@R1 #Z7ss 8zxeX[C)ĻTڵyrVpLwo?}: \ѹSƵ*-"B9@2KVRM{L z M|f*qE`I2'Ɂ 6m -[)U`tZ= 0#uba4@[Sh7ϙeL+C}kK=Ǭ5)+5wGE[: r<5]$,:aQllsaH&q C7s|IL(SƷ_&- u z}`K v3nx?m(vb\w zs>Pw#"UX&3dD јT fO@1QD(*B|b#z txҡ6Ʃ/t[]vPoƔފ'n8aLm |&eJSmTa HɷS͍N wVc-cC%@ty%; x v`8F`{h^aCQc_jRĽWYvР:20 2b]Qy޾2hNt 2ׂv1zUd1Hm92jKc y+"X51:T߫zMhaB@!&0 #}XE7 . !9r %MXK\RzzR&_$+Dl2־[N$)zBHvҡT\LlCS `u,7Qjg\Kh# h$S 0k]Ht*J$/ H#!7U\LӮ嘓ĭg̟' o}5!K7q/4f3}d@yi#_Y%Tʀ#VhGIꖓ/4>RԘcϩe=ȪZ;G`y}_6NmeC}f晽77K=^ƒ?-2K0NzvuhO!$̌ycM38ZL5OPe"Q ճ쯙|aU`\}tD\^'EޢI!~r-߆c|xl61{^ڹSتR~,|@SfHk\pNeQ|[y/]#~55HC"zO.Mи`6g(QaP7aekohj>MZسX4x]'ff}!`IsqVP_CX㻄:25R8)n2`wD#'0.tOԖly:۾$I`\aŒK}}`;. 8>s%õXD.`EjRMe,$cDFqPI v*ZEޛ}nc eɘ}>NU= Jm"c/[gp;wE&w )ġF\}g"/hsƏmj CG(m[|kn-(ݖJ-R$ ֎ZKE%gjy=vYYZFA^ KY걥Gf7úXP~;˫5wf5lqU;b|Hٖ"N4<ˁ~qSv-FNj[n˹jA= ʿDiXl㍓5ׯur\@M( B((,2lBC͎4U 9#7uʠcCFZ1fI" 1U;&G 8yQKcl[8w#\/Py O ;tIyqJ13=XB/kl<]_q=|KCY~:_4Sƕ &pt^ /7qc3 +0rX69)C$R ћa \rJG<ҮW\kw)s+؝2 LE<].VQP_jM,EFdS@h M^-4"`xr^Pז2ےyEY0\}fao%XYmpod[3%^~'x[xH+HLz ^!~?zS]Rxo &KoޜR]ór-hyo߱ο6Bf<ޑdpU`4`ROoZ<)oo>?oQea{ m$Cʃ#8jhcS2l)}E a{ PmMCã!i*46[9=l6lH}S-\%ܓGח Ͻ/ci}> PM(j YC\laQ6&esgԢz}cgoN6#Ffښrfy%!:TH<%`7`kW_u?-?Ǹʷ4~~]5Fj^Q)J=Nsɨi3y;*M ]eSQܜIpJW+ kujk+.6آz>쌉:J fqny'ջϽw>V߶nI\3ZfZ$ TP5h5c86s<57KFzmSwp4.Ja1:wcA_M,@d6[LTЛK 2rΈ(kYi 6Dz w ̮2+TCd=m~Zionj19sT= "R+i({iu9D0'=@ 3vq) [ղ- :xi\2 AxiՍSV,'Fצre|zuJ8F͹Ŗ:Ma O }/G?,S_ĿOdv]y#x-a^qD[Aص"V4Z-rJdgZ),3: q餱'FthQa"uγ2@pI ge{Nhuƺ&j|ۥ4<F6.}~^ԀcvS֮GhH>7Bǎ7 avrnBKG)HpNyu|~ _+^׼u>B'ax'7YvL/cc Ptj+)ԧH7 c L H0 nE&GW1 6,,r^/͓4AqݾC{zopiL$gp7vuP//Y%g %`1uN݇CsԴDԗ#ѪNNI]l[2pfw;\YH*G˵t/]uV_XYْ*Iu 1 *1pټOK#VX$M6DiLޒ `NW~ۿCOYhsR$^*,РqoYNPP2x9q^%}i>vOgt`7RJR<߀;_V˓s9EmB\2z3$,xdP0_%!h vtq!WQИھ#V.owߋY'l4|ə/^ kT4X~N~@3mXȝok.h`4RNW3*Wו9l,'.,@f<C.jYq|/_7^Nn5Oȴq )q zyIhQ %?Bɲr. bN\Re~۳`_-9kx:S쎘"aҧ߄''/"\@x;i6 kcFShn)Z C05VńVWp֦֋\8 M|O?^PvX#?:\0@"a:HP|8ѭ~\[j>VvWH=kX?0c0',Ep#tsZJ;ժQmwC3N<`o 45='R4fрx@屿aĠnvw/QJIDlF<,+YVW)M`0-Uߣd򕎡-%mݥ _:l= {P4!PD;@!D(A0iJ;'Ze$Ms٣q9( !H v]sAO'{U:`Jw}.`uKMN[-EuRTTV8brMw7Spw }KI&,+$b.A;N/cQyՅ2wwF;yz%h@k͇=/;'p>hA~~X(HA%*CM60 kr]w._A$@e5 ieBP(|10q??|u^?^q:IcQ3(5HSPiMh'I.լ2Xch%lR&߿"Z,ֲl'UoӇÇq;k~8r#dOq97"^-+J%3 g& X:t!ޤ1gt w T& t<}GܘTwqSݘ^Q-*3C ٍ:bf58dQ3?e'wg䨝pU&Z`c!*%Ox[۟͐/ Jcx[j.(] t/E)@^G^\?!pzײMQinHz0[f;O׼|?|8 lA$1!%#$CLbafDЃKM34w.wo\\ >]4?{w%ٗK&Q6]YGMDF5C/yX!*p[GfYTPI!V+ jrWzr;l}qp㩀1lƒHm!rtb`v 28%}j 8+ͣDȏASh1?mY콩l.-0RV[[,u (7?̻ˡl-AqE}> 2ݿ[ 1Ac: 2Ke _"T '">svQIe q0!'z0k޽Qc]-F2b-imd%4YkV)P205{ێ''ZbRT4O堿8o+Ү\AySeg?{^#p#ڞz;ESSwtئl@go'3'XqS.+J|بU|RnI1)H:! #PBs4ҷ䯊5K'+J1L=we$`TbKOS9n{L{!D,; DΜDe&!%VVsn14ҙi'P 50 PjέéCDcl2*!J(R8)HAKƍñChlڝ )5sl @ 3]wݟ+o#Q`^BSdW0ξ@5dY6~~0𨨬;:s=m"@;g,& {vxp;e4X\38,oP/Y}qo*cP e㜎ot"L,{/M tz9T\;Tܿt|3n=rq*^߲*:;6||4h%,GDzX=>|voyAo~nlŀY`%oHhp-yg,xKQ B9Jy;5bac'87V{=3 A0(bn2>1fG9ˬkp:ݝ}hq8Ϻ Eo m>ɈAڼ#7MU&zK&9m@t&H;~ )*ŘƚV_5՗LO·Ɍ퀰QD"&M>슣EAe#ABMэPقm Ɂ_P벷rzMȕfy"bNdv`L*܈jA?jOŴ}[csEBr3&0lp>*+ cyoܬi~}[W"ۜ|]Ym+^=8hA1? _<7Pݞ@w_@ct^>foqW:g^u#i^1S@l{ 09+l;0gf͛vx-!ەǪzPYʳpaox9s*ou<iP!hҁO~Ηz<e'TyT2;Rc[6ۏbBiDXݾQpg*֣ժG6Xzӟ;n{xnhƱY#f{ދEYCS*:2;)]ɨ+AXaHsJ$7_e Z<ױᘁ힫a%o~ϩ*\ */>'1ބzn 5_Q35bP,x_}9~30?HO{7~ύy:7 i{Kq̯tPΡWȋC*c>⾨u_cK|;,sq0od/F|?N^4H׏\dr50 jBձ&Q2(hw8*@q....\47P(2qEФ)Σ5qz=y ˥_37+\5nFO_[S CxG-ֆ041\R FDښ]B&!OQϫʲsr,Kkuv&5޼)ee(wbad6˨ 1gϹc}z=h2iM¼0N]bW_OE99zOQ$9cE)%lZմ8?o=e3B 8Ӗ$_-8;c֯"]ގr1XcAZb cgEP-戾MMĨs&QB=b/=tϹ|Q^+tuG 6A|Bn7@n}SMXGy#GɩṼyxPD6)e;_3p;ܼƻQYI׿-0qlprAlB*]Y lT-䛈lfӟy:p?5' _9k 5Plt71F螸ސ=-eL8 Q,:y/佐ưE [6*<^~4*k1/O}OOoY~dkceXu6+?q}[A$MtJe]['JDXNy(֒qGq^q~9a}ΧR\RәSoI׋38i$GǂRqR"G*9ԱgB+eegce5.5x__1&e]IuOs)yYNՉ Vs%1_?.5%6И97/o( Kð<ĬYc1X AK#nf ֤ Hс^rhGoq6wqXn*͂ɏ5m1\y'Ԓsq, lsJ.NɮC-5u|YzWIjӻe'Kj(ji٭ !o)Q()-Tr1Xی <xCKH= /Z[K@R4t4Ӊ*I=;իJ[.NNPv4wἺWuu6+{$-n\Ipk&ɹ3t[NDJ2ɘLST {gC<1,Qw-#~vMw(aq-='v Ke!\*[][dYtvba]Cҏ6̓A%eI7'DXuq7h䖌 = mM4Z-CЎVH'grz}f[B5TE Ѕ^Iq5\P6גӕ!;0dV9S]i5P'6.q\{gSHJqDrXTK^<=SqbG 1T]NwHY8G悐I>[P&u\DŒӾu@s{EJrs. !& a#@2n2$1/ϻ}Zeqib׊Lڹ NB j9c\9-LM"zfH1QdPVD-GKLCRm\c\y|j{ŗ:4_o^Res6 %\3hAVsF_-ro֠ ,ӡJQ&$$\bµNIwtlKөӌ#b oN{,YЎkb\U1᫓':@c@m|`thXKЂP m`W:i`y5`vdM\`>TO ؔ8wom.g~r#ƜR{u+F|y#:\v[! A8=hOzd'K`z^&ϼ+1NMiy :z9+X 5xIfcgWT'W)GjlwւwIYґIeuBTm+e虶*߭&/^e5kkha}U{HmRю~½䎗{sil6@JpJpVTsm T>3s@ iSGe+M2Y7}L%w΢3b2yV|BFx)_ (stwO7ro/qNcޟ^n-fa \eKo'\GWtvk,dnvg3Z=}Ay*4E(Y@u-3pCHm{L %abK9o=żڕ̪ jaGfl07V.9 )89΅m"^=،dI|mOuEz>;}jKo!Tr |%x'*1]A9WI/vu>M|ea*SAYO~㿨BU?%'U >q!*/VS\!3_ ZZ?9iqO(5v11׃b25NlS޹~!]=Fzֹ;6/zyFG4^͢d`;##YL...A3h]\H`V)I;mfh);߳y G_0;B[$C/?l@;l__=|F*+&7G+ 9iu$b;/ kLhhn2\jƤΫyV)qAe K>~fpHO8qj %%a,`.#+ $YtB ԾR WOjNn1*EE$8dwa6Aglui] ,2!12!# >=}HoF}d>O8L]腟I]8Ǵu+xNx  `-22inA䕬c;6la,ga9lH[OCqErqj`=RS®nHEqC<+nɶ^mUe`j߂fzN|COZtKkFU54.j4 &&g1MM[' {(۴@%<{VfIP!E{SUEu+xB9_s,vpF fe= ,^ CX%7nիy-1n'9&ZNك0ev5z7^KS=x(h uiX]UڙKV-):Zqڞ- N l*}` 7'% ,0Ӛ [A]`~rQ"zRi빁Kkq7CH}1rBw62^m @9pȳ5U6 {)T8'dr r)'D(k7oI3vʼN P$|LaaG6G)VRVX7RƧK:&YpR/yEOv~ڡ@=pKMU]r g `?O4>^*)]*exiik>ӧAS6Ȉ&?u%?֘K<;h, LHuY*Y1C{~Ѽ^O7S>;_=R5'QUCV؎ܳ@aFqKP y{+dY.fv~ ϺN ́1d1ۥW`qk2{ϱyl{ϱv|rvبUWbt UںRQ%կJt؞!J,X"lܵ5[o /z]t)9X3Γ iMu67W:趞\qĀN=St)gK%iyq6p\k66 dUQXއҼ֑؃q@RpB}lC( Re}m5 w~.HM 悜k{o׬2쵹5SPZcLZ8+N8.q~K 0IAryqփo8^ @E/l,h;Ere9Mcw *MmXKɫ7tBM5,Qd7F)hΣ\pV&|h/^a8<k}>j> ([VfSQYڨaa/q$>*Ԇ嶑0KCE^%`  H}1"`vw>=ώ@ӥ4MyNv(IytGDe5qɫ1;~ْgj{YhynfY,|se20Ozs$0a~i^|{W9 Qr@b1XzSzfI!Ţ#`l9,5|{3sWC^ _VS5 xu' 96c d'ch{9Y_S\;`R)~& ]YӃ} M*n#V`u`*٫&q^z7_}?a^Iw(q^}Sܖ&n1$c4pYegG t6F;r f ?? yq' Kny]\in exOe=L)' irPt]4$\tNx{#{k٦':,CػUYw|9{cBJz[5lY<$H}$ ;Q8"gBYG@ӤJZSh~V02p 6VUXBkxɮ/X\k &}Wt~}@tFDnP˩k5ųLTwA|;r~ 節ޔQm5ck8+(1Z͆` ou o HZ*Cr~ᾹGc! }ߡ侭ق.v 7 h?3in,(ei^ҹ Ǡ=ʕ9g`x^5rB5J~$O\c9<6&ryPF/Uy@~1g\V_M} p-,$UmJag4IJ 8/@{R\~CxK>[jNk &; t.Z\q(ķe{C~[G6e uRã#cq)yݶuS/\0J#B* ~6)l[JFTb[R12<2AD b;L+:U68;v5ocpO.\t;`A5n@{qGSu_bEQ 99v"ȥ?2uܚC 5@g=j?9)c ޹J<˹(5-u]7X]-&$y^TRJY.v5m!|R6֗@q~G%{20+vln&m˓siJm1N 3E 95-JvMv2 xnX?]c!4_vBd`U.pjEZڸر·hʪ#gQ$,rYu "a_8Kvd졽$g}c'p@(Edkc&Q@2Y9-r7}垱ARR^*4ze\bmL2Ba1k|tQcfp(m>='zbGe L='yX.ӗHsRne Y;TiMӡEz􄜝D9$dn4 }&F\i!;&\`g5$.%!\kySAGO9J⭭\rD߃ꑌ>+`f)ɚY ^xzaƱ;uM&p0;PyIi:tn҆)F%sO6ǩ-Ś 16ϗ[eьzop2}B<,@_NcC߃zPߺy%ڬk;o(@1ڍqIѤ;į77ow?>~'?kHbf&YirkӶ/ fMJ% }_38-U DkgOd Y̫8/Y}4E4ST^oG ̹n^NE7B7= SETyHW{`wIʡOp[C稌]r36x֤8®5x"7xkrAAHQd^#(QЦ7Yڬ5vVu$id'奬bbi >n;M]cOuy-wQo[Bur{XW*sɿG؈m8k}e<6cjd̶5j4vv6=]aohlh 40d1)tc,aH-IbqԪ], :c^r=-C5+EhK2@!LC5}SUE @;,J ;UUHj/?3Y 3h 3a>߄妹+[y&5(qDn/Lt&"0&AG\P 8lE~ ZmkQ2ܤXW EJ'-W<,X7Ur /Z9>RϭȻZq.8gqů-W&JqjSLVt9IX֟gCλ:ot< %P+X ~ @ ن|MοnhsK 7oeO\#R DgKOߎ;-kˏ/oWQ !jrNnZRK%%qrJGZV5=Q>M_'wg68ĕ 3E`_97˾"lf>Χ.䌗^%gw->sz Fʨ`O%4 jQs8kɮ`!tnmNTwx f0}~[PtGՋ9 acA_+ p:+;5x_?_= ><+=)jqvI<l+ǃ,z/ms9BdW #poۭ/,s%"`Ջhsy',sҾl/um6SWT"5a]ǡ/ԑźAӴ]Erv'u{H}W"7pbbgYbynhul YHv"ڳA<|~fb k~H WImKn?m{b)M5 7Q乷*1Ȅoe]f-ZDѴ>m7n~<)6yXqD}DNUi+ jqI| O[qtMK|t,=6_;f ]IrѐQO.ol_zէt|/z/*Mk|dK<쏜o][^za!Pr},^Bnm'ABܫ>gk\ɚw[7x,'aLa*g+pV[(J_D!eIT]rr! rI;R!lw.oݸ*w7CX&WfՄ|{^pz't@~t9$5(WPX!d[Ҩ *CD6u1l;1@20/y/7m&?-+Ӈ>H7=}=/G<>:EksC/lku.7qn@7:{6Qʜjw U,mHH]w^=*MCVK &gAis@=Q8x5idkܬkWV$ֵki rI~{Rp_{ͥnqp9Ď1BoQkk<#x탳Vp5~3yXrcvSZ۵J2kZr 7)]A7nAፘ\Ce4s-vwML.T˧6mWFtMĩ ՆZ++rW 05UzJ&<`f)@J*WIp6ercb1gBǰN(xb7)LNTӖBc)Dkx՜TRevсО튔h2EaoS 2e8cڊeǸ$'xbF9c)hϢlN;sH /9e** j(5ɝj+ji.rRVMmv1_XJ _U&Mw2A? -\//HU?ݗWGXǧJZ ,_*OZ올6SAP)՞݀i禅3'`cz=I ]6[®C2 Q&F3b)HCGN,$hBkI"%cw}ߋ>\CDEB=QWS 0󦥄U. : *#in w"dּ-:5Iί/}CAi] YĸdaڒGJ0\:jhJ9^>zg[ ~(A =~U.J3z j62r*V|lv~,NYg>P>/COW=΋:K5ptӜ!LM_v.b}a_OG/c{o}|}X}jRX_E{~:xgSgd\n'ap|ǜ/^0VգY=&N}^4tF&֨/HIX3Iw.\[D*ܩH [b7,g?{ok]]cs<{NOOKk)-hGhK@i*MƏФ*h$AH?T?IԠDih PS=-^s{ 1{s͵Z{Nys͏cq(IOۥIVO%Ə憵Hc K j_Q ֦.!tX肺l$̛oZeH@eÀu'=B%p߬Ɂ"&|xW /Hڀv(hMgt~ψ"˗:$tQwLqm)Ը3nu\Ad pv.z{̆@^N&=%"}nlK梐Iah&K>% ڊwUPCTi* UA'ca1DGβ&=6xɨ0GgՋ+!W)S˚A$!rouK&y^ϑxk@w"/ $UVyso0:\"kH}aknL>N.uzR<&;77쮌ƻw`5rUHqxqEF?SG _4t̗;d_7u``X$V ^ܮ!J/ML"*XU rell2{*@|H` X$tσ,홏, X;SSٯVcoq}蚒PAUAQI>CKM}iva٣ Ҵe;Eϋ`sdtQu?L知2״8"LdL6VO'$\3m[TVlo ]hO=!GwwP>_CjC^l$*'lZ>zICވWMw ) {l!Pܔ %8+E-Ył> .>Xgej:z_z<}z7? ķP)2PV%~)/R) D9__%փցTS煸.- ڛzSӛ%1)q+u`3nUL7˴|1>[~??zqޟHc2صϛ!ێ]߰T-ɟyuT@¸o\w}x_{]wo_,rG":B/}O=;ؗD%_qhr! K^[{Qv޿祽MTuL7&M><"Ŗ.Iv8$|H`&2T﹙I&X3Yz[gSD qnʣvlֶ6_N90`M\N0^AkW[#_*xZW4u_^QcϡhyuS XOLuIܧTݏg &+@Ğ'ӓ1 $xSH5%Iн.](moVywZ]Ҽ,v6{#&n(56\{}DI!pFX DW#y\䚨̬{,jq%-1RV$ǻ ;"ē7dpgeEwSg mBjMw96g&s.V8PbroMB1GG.y#7&Q6~ qIcֻQU}=oWן !jC%݊) u?bYv]Vʃ(t5:mUD| rVnkAIeW_[+~ tAteB9Q*\-uL./PsD~c*<X^,'`9AIp x89ӿ$;:&mStku_%8S0 {PnSkVލ<]F(DCuu16f<=_cw.KXPrxcI ]5BC]}uv5`ڤOJXK%X>|@>1CN@#˽@3w!|}^ j[/#v[3}kʨ>>tf捣~kficw2`)?}5ǙAԣd_e3^Oyy}^ XɯO&EOB"HgnOZۚ=»[ ryQ:잔~gս3fxo;NA=:pd_kOȗ~\Q5kkOXUxaW:{+NBJJP ^Жydzq ÓED9w[ d _%#(eGٗSQ_~n[^̃rוAHb7bYˬhŇ#0?WoY|wծ#fxaAHd1vrF35)dBvW}ziy5s[t9~I*o9B-/Ea9fV*!I |>M@uz\Vͻ#&@W'$=}{|NbSw ` K6&JZ+IJd Kt5DEn&bW.Gܲ\._z^L/IgwwiWYBq&s<ɋY>7UT-'ҧu1{^#c^oxK-^$iI>gN[C . }vEPuA<ƀwwxm?k)}Z+mݨ`wVXO2_% ){65% ׷`S=,#[ . rΆ&h+tq0CȤoc.߶56P, V qJDKkn1Lf|~;O>gƠf7{JƟ93g|9h )"|y>&oJ Opomo-Uo vU]c8q/;$E9I^w$uȺIfڡ4Aod~#}ʵI7{=jK `^|b?w?Ǡý8>+x_)g"Ө*F<=Z lNPoWpu);7*}uovKzNIa:_2M牨P{-FUQ(}DꌫZMr z(0@9uoYWT/ɘ8U५ENyzQL7.0; x4|:^(N8U22{& l吣ŚƊ[<2AXr M [?L)سj+wk~1Hr;f099`|kR0h"c@5!Un( <ji=TlKGmb%&pS xv 6|/L43 {YbyЀGMLʖ7WYKL]=]5ErUPR&Po:!TH?k5<}TV gЭMX1>*IX@ܟ@[L`Puz`- {]BW<<{r`zT=@-&R,+$Ӄ<< `2jokgtZ=A>QkG[ujr{!yU:{,4 vӀk 2S&_Wg/ Ԯ6 $yds"{>W `gc JS[?oo+ϓ50%鐚+{T^8 \<wVΙ`PC++z,b㍅u e%) = Ūcnio{&!3:yPGE0oz>!e݀A Q:nhֳb#^7q~͓5JSھ޴g#玏vbxA%v,KId>_Xǩ #{m儶 bEiծ,3Mǐ$NlJ*sM vA^=ލd%Y7Ӈ0n}Cŋ_k:vUܺ,)h.ת0@7i3gTqe}9~s\~75WʙoFhixiKYA)%uГ[v/^~ t X_n 'Od+Π;krW؜?*qn6!X22ʥ={8;u?@a!R^6kP&軎z{?yOF$.~\υ-XWw"J;soJ{j:?@;2b]Ͽ fg/. *rLuTe^LݕTƑAoPśjJisM * $npaCKd %lι#E_04JC)H֝}0)3A2)OS13h:߼o^uv3N Li)=7iL֟<2 t |J=-t-(Q0{W&DGjMU@IʞxUPx3 *^3&T-b[Im#3Sg/9(h\\V_6V6Tn|L:XC{R 6?Y.-zEH 4QX(xwxOo56+Md䠋?33&,6BT`bHY;Aḫ9@GUkg~voXc`0ZGAVO'_4AO( l`v6JH|`牍 =J}SvRՀWፍDUu1#ճv؆²6vh7{8"n<ȝKm:^x.t#0oz.1-XV8txTHn/ qs\ޒLJYvĹɟy?$&[*60gPT"ֈkn5[(ƨbeo*j)H\t&(ȍCUoHH/y}7CQ?uݏAcyM0!G+Wx ߆=E@G>@O=?Q#jqfHqop>@ƇjkyMc!B2XlM|eknƚP0h9po z|u4G-Ruٖ `Zmϓvj;~02;.f@.znIN`1+*ԓDy1| nQ,6/כ\0s=wXކ(bxq %Ӹ)'@eC[|BvIQV{Xb5 ėsqqtc4wťt¸61:3 `^1o RpbF!S@7u68Ĵ'!6kZ.w2[mpnqyCaO_5 6 *@^!$ z- 8RՖ{Z\@fZd6qFU4@7TUolz 3(' *~8zdBPZokr78'5BZz!99 ~|V[lے=&" W7什vSzxǟގpŪJ~Rz2tƂi^G ӬFw,riRW`BRcχ%N~>bzsJ,K]9u$:i9Y;1,`<s`\E,y^"߬ݳ$V7('t1c|,fZH{Ce;`؃(*l'Nȩy.(M_s.rynCC8)' /+n70ׂ4Kh5Ŭc_CCJ\6zhrex'7kM2<&`U5-ɿo=:dz5sˡ_3;=upy2D̺ZšFJKf+wِ^;+}Ǖq % hy vnibk+$Ώʅm l ?J>&@pTgoykZ< I,hxq *^$,=/^JggX(^h͛6iEYl=bm㉿B>GE?ɩ4uԘCTA.%<ʦF7EXƯ.[ Vcx +X+UH;Qܪ:Qʃar-ХkvM#jWdm6vB֋4V}>^Jӆ]4WJb{-n`Aj .)&5 L MNxN Dه'޹/̠[oxm_y=|AW|}k2;Kح-6%|wM.+b JAtc_9a}ݷ N?ַdw:}Rpahq9_ۯ{x7ہ#zG1l L^ۧy%.Wq9:O]fXKxto #~P@x tSc\dZ~ўvM$F߻h7oEI?H!m8@G_ǡJ9l+8piQ&;RkZmqM lG|xy1;Y}0:uNU rgqAӘUD'he4l[cd=;+mmJjgt*P<>Pc<5S3D3_\/[ŚM!*VKV0+UDʱ>B>|1sFX!)7ũ\ꝁE:/)5l1<D)/< '6EyX,o-v:T@jHڍf5'h G[VccQje69'#tFsy| 4W聬ZGL<'im\[8^ `zӄn6kJٚs}&>QP!S GU85n_롞[~ޟVw;??y|VU63[ڛs|^j^- ڙb3եbfӏc' "Cl0;e8Kk[gBkh AyƂ.)-eFG^XX:V\!ڞU9t/x$63;#1 ntu =^ιt_uSΫ٢YHu,9fI6KyڳrRZbT\r\Vqr$.Ϡꀨzԥ Ł}Q"ߌ. TA9$NQqKȝRgzƈz1FY\@9W:J.; Gpb@w+Uh#{牣voΎ lrkb(ع)Ir4;o}1{h '8dEVAQصh]@ unQt5:{W >woP}Q&;$ys X*d~^߇XDWWERX{V?/۠UԘc7Hux:rrt XrJ$:4']}D{Wkb炘Bp:8kH5xxtO6ޚme.M&aLoF[bM=u5/Hȸ:=CW?9rJT-( ֌ =b"W4+`+\jl66Ԁ}Ph׾)%zqm~jA-w6rgy1~"ܜ?~ʇ݇`eKjL PXLEvD=dhb_ X'Һv)x;yyP{]nB; %s7m޶?ظ6ʑ@]=74-7xnKv6kw㽍֠(qM@K1&ʺܛ@ş iO<YTUczh0:}8vt20lqO%`a@^z#'GPA!]\}=ml(-v9Ǧt@*u !S]cGkPI s=ۘh 5U,rLH}m݋MItv+Jx[9oMc>{AeW+#%#t[ր՛횂FalzgZ|]WuuIKە>rq4nS_'ΰTiYQb}qy̠e< G{GfRblkgcg/@ąTc[OP Ȼ>2Grlm̌'wu>Y~P|"Х UGF]Nrc*.^{\ls)GTYl|)( }y: ?߃bznj뫰.=̻o)x-\RHD;_hxWΉ S2̹EKDvu=[]8_z/]{O ~ vvԟv3+/x[hT6cua?_aиhRL[=$V4Z&e="rJrɮ!U%-AZ)ց.=U/t0*gl+L:~+$.K}; ,V(Uu@r8/9;b}:`'-w)&󝏛-<cj'J"~!mxovXho Λǫ`ˈJ~}<٦[K bHپ(ĝFצ^> Y+8t7v;2Q`]r4X#-i,ϹIJ"}1z2YIC͎g;(4wȘBu6Y6~tp4"@0-$_&lA!NTҳxAmqI3So~3^q> 2&$~M~L,MȳIJC*y^I?v4=/]cQ|1W/9) \́}:=y&`bPJ>_8InhĠ$Zgm7FgRL..IJ|ItgKWoy~Cי3=c4֠R Uuvu5榊ͷT|'~ay\SR9xmM1"8k(ɳ8QWY0J]@FzsޡM7[hd#@쥲)p)uO=]IKy7I$}9٘d$uyDz r=_ kxPg<^B>YtÀL76pk"l, b_hvsbNC p &&Gv\[8P> qo ܮg&BEcF=H=v$(θ.o[~'NW3w_:xH[S?%_Gd(ϟ&KHktr\nU*#^  xYl-NUkݝjhN՞kY TVYB>F6ރS 92}\Xb B~Rka.[P4gEIGBgw#cmO2Bޜr<KRzIYJM 3VZxye\w /G(؇tKX~,CjƓvќf9`wM<, ^񇧮CXKN^=\S[Į.ōs +$o0._^W#Z[8Pmx>}*LׅtT~;^[`2h-^uRkwUcm~j_zn 8iYLUwOKYKk T4dt% Ҋ+d!ML½}w@%:ڒ:.\ku!Jv\8’ݐ2y~l30:vܥHVZ:e֓vB½KAT_u 1:v/ė^axs_a"X }Ot {z{M1a tQӥ_v}L3+&n[aw2akؓI$-/YTua+yV1\?=xURS;#Ǔi|3͠Wp1Li8?z~Op^K}6JJߋ}O>M,R΁K9ͳvVLɯԺ؞.͏Wǟ>}x}Uc{.9blR{MD%a.R7`\7q1;Qߨ#N;zSBE犺*v1k[5uUwXlXh(v`Yo~?X5+lljhۺX?Ι{>O-ia)@|</[aZ՞w7+o_!؟(\S?CήIöW6`ӶWjscT B,*ݢ8tw<*u$"WnU!} EzbjU 3D<)O-1=^WR_ĤȰе_BWmsD>g5횙x}@8,_|M҄G؛I)T(%iui${NqeF;\} ޼޼fxN7gM{ӞU;N|JF,68J[h]T\#]J*ZH2Ngiƥ!j9VAHӥN+X>BXJ tDBKHsMibқ=O c9u uxev[= tg }A ?}Ny&I 1b_t3{sMr ҽI v}3^\EOe܇jt7Ӕl6`l @dd&+:4WFHh.jj-Ҝ*xu;Nr9%f\^,x C umj)g8#A|49g ]\.b|rzmf _Du\$FYEAX[ Y=!\)$MCLe5}d / oCy6PVx$[7bK/U؊Ⱥ腖V(s Y2jKa9T{  !%om[`;{W ޱCoM ;kHJPJ3^ O(\|Ù:#_|}T/UnFDcMxNixb9.Xܻ-ϷVFjQy2?`1إG0eXRO)t^%g[ Z9/4Vq`oB I|ѦBMlcš2Y6R)7dlD-zB&y ͌}X;8 )8Pֆ*[do Dvu1kCuQ,}2Mv[^W_V#RLo6@- LN4M9i5(5#)(7;.0)[z0 QA#ԴPgFwGc\;z[œ|zFJv[__?n쿎_lqZtڄ6h(H v1fnִDuP` =_3;,=^翼n;0W$ n\Do{\t[_v$yay>ȼ 3P q]18fM]zooY=2ÌuJf@K]Gz`b;o%q^XN+꺢LŖZL1bhrЇ{og@b?_זGpUP9V1obkvg1Mu%j{y%զ}Pf&_œ*؝a`szH"ŭ@2=1Yb$O9}6vj6wvH{.X5jz95)[YUgk?JnD'5mAUțc0h1&z{w]Z>$=?Q!`O h^?޴?72ϭQ1G,|F eUzQz#}[ݥVPZّ:yʈ}+pļS qqlX7J|Sg4Ϙ#XtL@0cG]H6V<-lM۟7pu9̑k4o)~32%`vzgms1\|Jc5{{yWF!VHd Jܕbҗ]&Bf큵P`X~5[S?DNʪg m[y}*6+rfw}$\V:ΝH. alK?~/MZΚSN^S ͂$㠉{U,B.;c-/]2٫[>Z} /}mQHRKkP&m^"P y\h ~{ƃ2w8U7aqyk5Gk06` txiM<0R{/_ `КYYࢴy,6t83)yP|dj?epٻ~8 5dфUU\|Aљ`퀌q+P6ӻ?GL=>`{VO܇j{ok]쑆RK T*C/ ə%olKXRáyǮ Lϣ4Y`)R?7{{FYKr sbI61N$XܗC=G 1i?igo2%r -}Лnd؏&;E1QKoxH|!I?ㇿ4T"~A^>LGr0{([S ㅼJVmɱ6%Sil*-licL˱F|cyI8ML@֯unp#|_cߋWP^!imϵIS7Sx {ÒYekw_뻴-=)WgVCJ :)xÀ05gIS)֛z~^} I}Qɽ{U`REP=)6#6z*?rR XA Cb0xwA(ْr<Vꩯ ⍉ [M J)zޭ"}+-\zsMذ#7?ިN A!Cb{Q8D\f ?W<9ɜ뀳Wǐ)oT->6n7Xc7 GɁ|%ϵ)F7{"ODC cl'[6u5Pvws]cWѺlnM c\%-05pkK:lŬph,Ѥ#kUT!l^@O 0*+W A]WWq/p?r(0{s`L5JS/եh85B^W9^'TߐNS7״>X"z߼V۸"]O{ހo^ou'`-5 }9鍊 3Y^Ax/4ot}C+=;x+Xg`5&h ˦а^TbS0UL^ LGTT.Y @S֎?犻68PĭYk;v6-vr(c ؋C 緾~?_O=ӏ^gqoo=tDoȝdoW:9l*( R·`ޤ:V%1`!9gqd8q}m(Y_FWGiUk&=eyKjZ?Rfe4;TW x!k(Uf;~OQڐXQn.>x h{rX7@:Av4;+A0AW9ݯ{j^Xk_&M `%'.iPthg56HWA/Y}OG=o&N-wދ${NK H@+os.$$>^ơEݎD7tgƀ&##|Ca.rH.V>aRp}pSJjdq@gU_U@wwVm|\gTT4>)nyMΖU;zSX/MMkrrQ`ww[rzڤf(/x/Ww3u(Fx=0_O1Aܳl\&$Y[.(ʒ1 w'U<'(PQ e+WTNDdbjWp b(kQ tc\HJ"*VxƱ?7)(W;5u1%ض PSf'-˜_”؎ֺà~uܣjǮ?=yIOk]Ƨ'п=N{yo1)t +0r#܊@uZ=@8yE]cs\xL?w?/:hu蔫kJ^|c/~xKxrz_E%}$@]鶇:Hw׵roF1%B|~%Oa1j4p)o֛J1X+֭FMh( Q;u>df9=&qJd Ezݻ *S[)wHS g%tgr[^; T`MHƋwxt| }Lz 4W(6y&Y޾l~︮S_._'g7|}Bd+QLp 2v_+} Vb:M5u Aեj t+DyΏ7*w҅د2P;?Mytƃb=F<[nx0KcSΘQ/ؿeht6N!~cR]R'+zUve ̿كfsE#M0)R-;vW ykNZ/E,{'O7hg] wݝ^Ҷ$;5>lQ L40&ϗJn7 UYzuOd (=QZ{10|oE@Ou>XsZ "o10KsiUYe/\eQ t,4ŚV >* 7ɟ7%B: qq%hH_@r]TU=uu{ǔ ԥH݆bհc9g,1Cڝ°:yY[hTymbIq rvPPRnWp>{zyax0S_3Ö}>m%|n+&mܯs <[v2vs- D띦wq|uHkT8\L.MdrhkO-BPAijLnr`⋔.V,8[Fꐔ[ـaVX]gW.+3/*VǏkJ  6)+G%ޱwU*C]:M X759yk`vdyd5){h#,$;N{nxc{ :[Vk$י"xOBy^i`mr 2K~ 7..9[o8 St?,q.} c X.-~4H-ZLpFU1ar<&W쫡ɇ.uV_ . `P6^j! n_|51Ό8EQo_?/M4-S,Dڞ.nҝm2f%ȍ"PWfQ0%6 kU6"r#ӚC> d҆lL$%0t];s3$:'4]}v љl?4{2Pk-π{c^e}^""l&6r:(1Dc['*R2W"8pcM&qܰhb;ZKF0{^|ǟƻnۿ(Mu:a:r1[ vJj/пCϞ_.zݟ+̿1}G-JpJL1.#@*_ xt]u75cws t+:ʛ.}rV[4kYm/˶.,[{=f˿ й٥77x K{VAv8xi2U #&z8(/Ř/+ik^,ZIZS!mDd9 wbF\%5ԛ3f ԌF.KM\do'6oꆡ8!Q,nRE@[;Mi'-7s`3fYIQI@q" zd ff7%mFiP(Ѵv(A{ hX-,ZaOy1zQH)XmKZj7y*sS Zaj\Iuv+Y] FY'oʯdc+r OLjh1jɚ&PJ.0{&Ouf׸^{Dwo^o^o7`g2:(wK'k.OיNl\l+e{ғu\/4˚SSx2 879vg|3!'Ղ, 4u ^Z\z8{wP&&ܑgQVý }{WZ{C wz9Z\?0>|swYORЄGutq"< N+,?yf=Yz̢a}RAiX0#y;)!@mklQE~I GwV@E(KPZeݐ8Ř ejt}V d,C 杺}2<K/)6+> 9o$RcTC}}x cH碍k!nk:a5bk F  *OSžf`QC~t- w5Be4簩Ģ"ͣ6zY; +%`8 5Iq/|~ϱn>CE,5ܟ)!Yٕn[[R*pm׀L:d[~獘fl^a@JY: 1xn9%(n'Lܫ֑ ^RΕf'afcV-~9E4&B\ÂRH7q(Po#8~K{C z{#C"e#>y W)Xk_` jE5@P ѦZv㳄֑VN,*DTS٥6מz{Ԑ\BAL :)/q3?F;flHbmE6i?>o_s8\^-z֫?R-tt|f>, =J@~p෣~_=_?w|Q] "V<8 %?{/ʼDq9Not^cN<(Wދ>J6-qAG3=ȃeXzC2=Q$\S3+Ev\AsJ?Gx dR+-;va1l:[f` 7+'/%q#uAܢ dJV>jsC]^^Ɓ%pȥ&ծ>w̐zGɠ_JR1ۿ2b%/Ao,KocIleO`a3W\=DDJ |ft:K79{-s%ҷu!EU|b95Rw# HɠN&1;r$.|SAE[&!UV,UE>'z/MvW's&>w3gR!smL5 @&<7L~ TsEKR(sB<#Upf _'-S̺v3Ozb$$#$a6Lj!DRK˗_ C|tp.\"5~p6q)3=5@c!jvk{xx,XmN,ٚI߰6Ghw$Gnźn^~n6NC鐎=r}O]Zn.Ԉ,QJEYPD{]*<긻^eA+ۓ~Ams5{ `ɲf,{ޞ=])~Wy7q`{_ 3a9ݖ}y'm<,m6'dON__%6wݹ='w^9:Пni_ zf=*5hndrZ*恍mCR8mlņbf 5jh[mde[p~@ VdfgR[#G`,NŪ#8px5C¨H6֬Ҁo##ri@D ,3*-/n4v RM, |3V-i^L6Tk3 J 38'N-*3cVԛED_Y~TC(Ku~O\:g\PbDMP!zLp[w{*a>GL5@[:12!N.i*JaoF}󏜼}'}HrEIy.ݛ'' O!;;2aQ42^~dF2;Ym+xē?'oJ~އ#oobHO_ Qzikrݿs|+׭6WRZn]ĉݟb[3R,Yk1\o>r c(9cO_.DAĮн)=B(M,o}Ok|E/'AfN R_kl,z74h]t1RB1{ol=8s;6tք4r f{< !|0/wj|zHؚ9IU4jE=G8G&W-ߡv}Y1VW:9strOeD΅i7  3HDG _[&Th9]ݑ-㚳qs?LtwP ̗"j|kF%[άkAvaPL+tq t0-uG7F h6Ttk l@qll X0^6Q(Zhg;x>r}D~>ؒ_O{[FD1FbHZjЈmhꤷXEz/OV& kPo2ű?QEBҧC0Xr;޲uNxm-Vg-WD}ZUlz=,Yo Z&@zѬIkW+ /6Hٓo}e33`\ /w)^րʃ_]Qx+X$\J– fT^e\igSvSj;]Z'V+xj1/'%Zop,\=ZM\}++@mb9l]΂{}A->֮[ ߸x-<<q}Z? Q>gtz-Trpa,,ؿ-nTWTaF8Pk2b|tr^,놊ɻ&R5M9HJlxS6 KGBfL4kSUKr2U0 f =p4wf-*҈w!f"9. c n.Y}#15[]blnaf{jrјdμBǷ!nd@;W wKw堂v4B3IźqfG ?|16ǐH4Wwlt4vP PYI) k.@T͋_jN sL*ݳV Fݪ %nJK %Q؅e#Y5r,\e D,/\;4xP@-Uf])RsO/p). yyfn1mYw#:ě̵WB4Grq/TF ᳱnTYv|CMaYsW(fR-.Znt/t}ǩ` bT1~ WU9y!õm]d վ9v/sƽ*=)<Ԡ!>% [*ci@gB8S; H(qq_|i+}#~'dÇi]"S$VjnhMP `JRͳVxZM:9(hؠ]UjpQFTt8(xwuF$E)+R2œo .^*P$ vAԮ@٬47;-ܖxLd֩r'[4K_[;$Ww*ŷ X8'Pdkg7cH zT$Hyn;P.^Z_W͸1_ z13{) ~( {=o|B.N3/A/D'UN^_UT`a, n7o.'#*e Y^]U yU^[T-`j>&Ʉ dk #rm6LY()FL,mmJY*@UUIj1 rYrs"(|S)ӡEEAl~gZ$-]ͭ$׶(A 2t"_ӹ,]ɇmL:~S5ks' /#djS:ΦLZG*qrWqRQZGWՆe'"IDR"r=%PsP[$8 EOQ79&] |JFȼ lZ}OHX+*x25U+\m؜t]x2t)J+z]eR+jȴU62U`L)0өYU7|)gr4\1  d6 2Rd:}jF)S|j}.aGZǛ,[ #! % .tL*vpݲְ`S@&z ~xx?x7G&;\Gft?vT[(<ېnO9Zڮ3/C+hfy~]VBfD͖Nrv ʼ<`:v[@KL=Bt5Omu1/ucӝ]EU5C,`kTl q`202oG<`A>.)ؓnEd99 [Tz0םLkJW_[ܮnQ:!yYlF֒o"+jRص4W:{Lc*r_ ֺ%#%R2!sZɚ~N3 tF@G횰}Əo(??aKЇb6zڨ. LR&:e~;߅\_͋_vW l!sABE\QBv(W~oUǛޕQd< nk2j-&W\M#x쥫k` 40>E(ogAy+1z`/"tlT|qVC eFED-ㅹtf1%GE{ ;D(BI|[UlKW4I%4RTk՞KO;~ HNak~0,> -ʽ˫^ݩc[~ G|6׺ 4 ۼ.B_g]jޣ4 S:Iz1隀E6gy}H)7B&cJιSRP1~8X@XbGZk@vQǐG>K;ROwmnK O1~z$ieZd %֟'_W?O6E9\|֗r?uؖ_-8vw[+uQCiP~[SsƁ~6ռl EwX-Պ)F\H^lGU`(Zrtq0+t?)9nܖ6pl̘b,Prp9vJTt 1mvzmkǵ&PG, }LOkF&ђ_܃EDb.Mi|2؈1:|ǐ$}֝AnMU)-Z4 9N-N9<icx'%lN/6EAL`3Ė瞆2ɜܤȵz(JB dwJF l8Uyeyk1!Y[';l=e;U+_K}& ъPkآ jK\$ XG:20{QZ]sB4 Tδ/|Moq`xKg,O=Wc}}[Ape=_"Q7]imEUr нx^ rZ$ !:Z,z$jc]P1Wаm J[Ȇ뀲z6Ѫ nnGlDjcnSqaaXW~ z]Mɾw<Ťb9/9z6ZozD?zmϋQly.AqำQp^jYo}Fmv-JK{=Gz5^ȷjHղaJt[r}2,-tBB&Bܟi@Nue1NGuNY ;BVq'p$ x{NnbJSÚM!hC|SWjwKէl$tNɃ1^R/mϴa fN@*,1agkаެL.\#@VXe%H?keR`@н]\3:aV9d rg)قKb#JRA qhlW^'u[^cVV'}=QRmȢdx£kg5o}| t8':M52ytH5ayK[Nz{k,9EĀшÅ_wa=G ĕd `9^"'v}+V%g=HX iq=d.dSRWBHmlL A[]qHǡ{)y8ސ>uIz _t=8Q'V#eY( (\zHZܞI﯈Z. h%9l7\!/>=cۇDf{BN9tp-I'rSwOBvO\= 'WO@;ڈON'?t◺Ӧ(̺eZghC4󾸪 wP͎m_j%#ZV*/C>~K@oB7*%FJTHI:y%jXZۓ3HL*+i g,l9ogFFl1Ra2+)%maH}sNm~Oo@~`HnddMMZ쥺,r}^h⯾픀QlMhV`k6.z .+C|HQK{6"UAywz4蔋ؾLTFS03_vK` ;!WW<=מU..E3n1qQzf.F BJU2WWUk'?Dr;$*! (hPa-ǫ;U4\@RAiO.#sb)Vܫ?]_kT9zt3r-~b3txji)hu Kyu*g q%ϣ'ˣxtoX|N}}kAoH2ڬ)2cmߖ*CSQh҇Վ`-a 6  d6HdyG[*eKR 1fB^Q8 ;l^z2I0we ] 7chRw][2;c;K %'Myl9x8FC' ۭ;Xo1@]lMFZf9Tq!`jGv$qKy-*SI6:Ac s;%c؜~(VXȬɚA픆z JZ^$7VId1;IڙԵ䑗_M o9GLS%Bsd iנ7 I :`Ρ AjggDR)w[kYDڙ7$!4|5rМ'vk]Q糭=X2?M7C7kG ^K? g#yxn*h),o@QdʣCF?)A\)Zck4ش5Sf%KϺϫ׃?泐b-"s\K\ϻn *diPtNjHen `6rAܕp}@vSK#:Z hT4v礽= HFi ΜDŽZ.<*>FLkhsF WȤ v60|ʠgŸ6)a H9!X!@"zG(P ɜzݦ})̠Ab&F@+$`(q;Qt1 ,'=ε:9QU20VIs#(U@fV{9 +ibTPw@[Ŭ@7obqP@si my&[:bnj¤k6 6e<.EE:'l\k3==*w?XćK#$$*[)8udyVZcNtoN@y z!}cx<\{!0]37 K׀7g7!rm/Zp_p4oPa$nOXAy=fE w0S f IM Ƌ ۛt_3R1ٸjlp\<A/)!\ѷE#|"ޘgǥ*{ucn&v5@ss9WG85p0Rh O&>zĺjS#=z{ JGFק)AĚ_/RZ#ZlĒ;bdTEf6hoMd'-43BhakJ>B%a,囀@R;؟XRAhq%G{} y Ìl/FR5x*sT#}1ҳ>7}+pO\V`HPe zyvݿqok᚝fY43-G^X%*?P {SVk Ⱦh^  wkKZD$VY@YHU532F+L nZխV(&d6o Y6dH0rM h $M2Eq/aGRNf!42|\l<[DT(j. '_&9){aטhkr!Vp~ҲfY]d@4:8L&gq+iIƃ)Ip w2~!7Y&,$q =t{ }S^Svk<<0S.O:Cȯ1^|y[BKڿ_snTH&O 3ChƬӽo xST 4c4|Ud CL: jc[U Q3 * bоB6(h$$ k0tt~d o< |o5ݰIBWL#> kvI P'zu0Q-d=hԅE}Ks&dh'6X]PCR]JW;2kf^- s5P ưmuIFFP^@]@քPZЈ/v[^9W=QqTHZ4AhJkؐ薲$["-\|\ˡIE__}q$f%tjU+:k%yƭ6ޒ4MIŎ)i"O]2&PSuzngVL⇈ ;bM ]eSrښ%Bi p\@"S$"BRw X.6o"LZtP Lv+x+hG#`ZY7YRǂÀTqHȡdy3icPIwD Y߯21=?SRa䇟 L:o\{p g#U%Hd<Ղg!o~ˌzn ԷyO ~0*rx\Iv]<"o}wP"G~[{]wFX!mȩm{^lو5F,"qVc7@E2i`)J=9Q-kt[/^\魧ߎ%/Boa P=> |̏3x͟A@!S1~9#}/.{>C0GVY{;\d6e.ņ̅pށr2mPHA+,텪dͰƭ#\zLn楂{]މN] LzRpZ gbX߲9}-f ]SN{ Jܔ ~/oQ0jh’u4Zt[@F"W~1pܗaz+Q\Gy #ڿ_|9D `D%5ߙaߓBEjZ}t\w*U[K'C- pGԲ|4.=cw?gez%;Ⱦjm1>|g`MLOfsIԒs)뜏#h,:#Z+)$uE5Yl+vR׌eµ|] ,EGd._v {q&4-\9o(=kn^AsMlw'efPzkth~j:@M-rY( %WBn`5;jcT~ j]|zHeȊnZ LLKeċpF'Haz[5HTfOPV}PU>6oYvf jZzT#Q)WM2ιbW|VKI&t HS sj:MN(K$`gf7Ka|%>v [M,RsluI֫uOn?PI(͚LVР"^ {)zr 6:0"Ȇ{mn6y @kS}|_FO<]-lA[EQ9l-:5j]iH}'!̱ -@9:b [۟ ҧ~~iU r6¬ݷnۍ2O\0ʦ| !@:$:WVIII5lQ'=+QPzf \65$*rOW5(. ݬOƶ(wm}kE2 dw{y`_2O(3m=>s+묅\^BUn4j h6X܋b|S[倥S]#N'R+@ۄ})Лz? L,٘f*ɿI]SҚ*[MA}VZ~W8ӪޣPaݾ9vm\E+zA?ʷ77/ 9"[ȆNMޅexz1YuR\UPS-v+@A{LSOe. ,g0G.FPc& @A-~`+Ya6a AP"rL 2Ism,eZk2_A2u"֗-FJ2k"Vk4~L5K=.ZU!^OzC=u^4ieO{wjcFmڱdٞQ] n&?1Ͼ癞5}Ⱦ}'ghq51fuzv`4llq\Gd,B6DEVt,XZrBN 2ec"m 錀NWCW "ӯHG$t29;asfjEyLe&(msg3p߱>+vwi/X1v='V qUpopb"{b/o#M92,܌Y x&1Î %%5`q}2 vʼlƎ%y.[πs/B׀Fy$A7Dw]|QHZƚ. q,2ʣKnER:M8\Q O"2m4jsm dڰK"_I`f ٿulICM٨Ӈ6+87RThy5(o&xA # gU\\ȴ[_*A2(X}[e;*kmjJKl0Ln@lސjej#0)l}P=;A(ՔTDFl|F(>?գ/g&߀^=jk^ljyRPgʴF=>PEIuGzx_Ydb.zJ:WٛXiGɟf=\_qJt߃[Ip[CwV9Кূsmc`js-k^dq<5yz<6Z7?btorR+6ʪܭE OBI">l*S=Z!O (5EteBM.zN*U= W@ʨWUm]&+9CLэynj9`i( !UnS5RNAfs@C)TIIzg6 nTsFIZ&6B /;Y\ sوKԛӽ8#ophX"C3I%SqI8F먠 yhb Z+{^/[dY;PI﹫RS#0XDy;{Y` Ԣ"Wbl'2(ɭ iz;A=ۚX&\z65qu 2[u*IJ\Bx"q7 F@/U͵*JMwbV3EK$#JL:ɑ#@oZ>釋;%{@<@G4LNx&?t>Gd]IM+ _꼰'{OWZB%%u7u1ia'$}V/77dBȳtU7!re&AxBl`ˣ\[5лfHsœ@H9\8U^lmg4G]?Q1jbL8(v: .~6`}<(=ssZ}sK&o:~ Kfc׬=ߞ'w|BI^ v9J! Vc AWrO-FPY%@iJ 3eSEE}4&u46&~Uqgb.׉dPzgIo7@7Q"!DPx1fpCvgQg7cBA%f 3h36f0M4n4. eEAL06;{X۶<s>n;ڱ-8mҲ@9(đ (@AB(H JA "$"mG88݉6n>k1QUcԜks}} gKW^k֎f1ppDb"$"?&:!+`1c, Vk{aJ౎))^ P^`]`8DƝ, f ?" xJt[GMAboitHr1uDc%y![~4gJs9BIXY(U0#/{07g8Jh{OWUy2 cX3Z^ ZA#h]P5-ޚ|§M"6jVL/vխȃͳăoiK`aʯlrΙ'¥]y#gulUrIIGTwB=G-4]!g 8Pʰs1߼>coOw'+g\Tb5w`Nicbo:"Y'ZB\ 0͠bD6ڨ3š{oǾg/7M̓M9>x? tobM~* Lݻ]WիOlJ=[";xGespeõ5AXƇ'W{uTo]xAT#s$ )t] w!-\lfS\y.RZξnaۚqpFufMy5(n1\̆Fg۵P.0y"q;RY"w VոWa2 ;Qpfwa4ER:;=!(ݎ Ãp5 3l^k| 5v/®NY(ϦrV*P._2|yL |>WV.b'7b\]#XG>_7'9Hmݽ'22ޝ䓗DHW}BO1MkuxAk \}~uJķݚo-mⳆxϖڭ%zp9ƌok~yb@3֬Ժ5S\Ws{q1DzZ쵰8a WUfGZݤk1;$~~MP&M5ozy~قvx_֘9gA&'c PpY,. 9p^SF\DlɎ3@fmևWPƴPNW 9rM NzwE *j5_3[k"1 s&]ऌi7+ƔR&'bD"d|n%] v.b}W/l95ͣb#r>+gJ;c^7>FTsa삙,ą`*Nȹ:&7C7l}FM{)n uI R0kEHm?)u&ԣ#ID['[`SE?ifL^1(J+A}og-Z/G>6VekE[Q--X̶Ek3H hfm,Q1Eq[* fz[bI$[ uIjuI&rjQ#yOMOqDM&2z2 pIKXKЀvkȾ :YORr<~=O4.% 4od! A;Q4ȈΟvv)]Ov};)urľ !۔K_)Ϩͷ@Y Bn P߅x>;/ǀRg C]l:Ls:%KXApnhE0i4 =(ʦ~U~.fQ]@8h !͉pt3$uDb6AFy 2|9~\0'%x.P&fڣί;/.g}|<>B|uw) ǚAP+"c Hnܰl:]:͊$۾E% p1# kt"8f eU#_X+ A!f-.9MN`'En#ߩ )hLGI/%e%a#pxP: hKX@FJ~dBmk"nlPiBXg(M_ 6f ;#jK[{YhTy\|WA9_?:¼+C`ï}N8bβO R/p-Xb >*a~1)No`[>\}=5ճmPy{q.TGڐy Z>G~p{T,!G:6@4HDRh| t|/|+7Q& tRzDņq md@+YK\+L] IAq'!S[vSޘ8AͿUy`_,~/گ_I9g-dzOa|U~{umoHX)Epxr&ʩN fe{my$Vxl^̹z98ň .w~ s_8^?ovojl%mn)tH-W]x}~pǚe7` ޣ{!W)gʅ^~1?cп_/'Aӵe'x>_*܋H?4c{{8&Kf.9 ۳eO}"բKhu'Y=.ֈ=hXMf?@9@PTUbtY)HЭ̻>dH oTu:@V-.fD8srgMlnW$lܚ7ThGĒ:U=ʖb+kz%taTAuw^A(T8yyϛ\:D X2t W*MH{?;<3NuWwHn/,[EF}RWgt0}vDAl\?;p65@ң} ]8 uw l( {|]OOJdǖ%|'ҷU%{՝lCHwFף3E7㏜iN en>UH$0pGǞ!@z%v4s-"=0lh/ZByaLH?1[_iإ~=ܠvF}hװԗf?I_Bg~xkKs铸|m5&!4C%+[wRRwTz[x;@+ߏ!_|}GTxZc>(Ј Šaѽ}7 yl(ٮ)P&;8 e2@X: G|X`_"9 gYzgYӸca YWsk t8suRTOz@ץ5ai<);.ޅy!ozbXkgs&;O78PrwFmݢxyM؏oe*anP%v'MJyMΉϏsK w6*&|Gqa{8@_uϏ+9[_7FACY"x(ُ{/ˠ]ӹͳYlEDdzOa#NV(>'gQ2Dj6V .hTAh;%oY."VOlH~xwy4ǺQMISH_Ј@Z`xH1Zj>.n kPRfMutΠwܴ5dcgQԏ\h7߹Dջۉ;@j޽F DR3Txӯo$É Wξ_aڷ7B~ =񯐬]^tO$5O#FWK5l\Hc0{`ag'96%IZ*2^E`1?k LklY޺Z T|5 _]G?Mű_Iߍ^lΘc&Ԓ<9^.i.,o04'<8Q5W}:v<=^Ap=`+=86"u+2%A|m5CPªuF6'#{\"Ţ.廷.TDk{v ΆS<j)÷Chr~xeԘYw?fI-"{K q㦞C<.YQM`M+*Ε_}r~2n+΂/vZ55FfCP6 ڜ=-&k-d :)l7vu(m2A꙾\*2R lMJНڃ;+;bd%)3Kf| XF`vբ8ܦIx>_;_#언CүUPB ЌEk6n"vϙ.}6F9C"1Fmɣ0ͳ~mGϢ_|(8|;0>{&+?3䖝Ixʂ" 6,RdK߀Ë˗>_ϣh_\{~7~Wf^FX0Jڟ uK>4f'%*KLĖ#Z"b3Oo6+?C^_<>8A\A<Ld #TQn~=xybu>1>_-_w~T<7*gCRj~=h @ Qjj2sRSqR)EyG{G gQ:_]ߺzq$u\1@όosN9|e$->rcFO /1QfM (MnbZ_jf {~~eGyj'iR8~M_ uuUлXZyo =Ip^\ç6;[шK}yo To:Dd ;wt (2Ĭ"^22^8=,J[dp.F2sR8-fajsYzzki+ XG^09k\eQoqCJje*^5$fh^KD`xIbcm @GqہFn͍m8bĐ&Eih=<",q'0sRGI2" !ZvC3BRӆֳ9<]V^L˓[Yriwu?3qH싚Pf(h1}=Լ-7_3OHp"TR{h4uAm3D4-(W3dB9L2\u7(k7M@;A>9*d]ZUR~b%1Ev!j< +f@nRNoK"S7 3L¶bOJm]UwReo2y|oSkKP˘uk3PjrAĊcbړ[12mudg}706~=Zg,Aeeyv˿^~a=l_1?+lo9>\?Byӻ\쳿!$"BeM:#x(WQXJICohkrxJәp[s6wq+댝 ͮ2Y Я%79 +BG+̘o@|7+L{^$X'q!f1#o5kAsm˭L{Uu ks:3Њc|c`w[ѫ=^"zpqts[LGד ί m,2o{7-̀=̽;6 UiwgֵbUNgK惖 PuL[\c|أ6["C)`So~ߔ *' C՞EXOl<@2-gx],ݾΕ%,ik1)S ,?ZDSW@9G#qk}NtfL5jjl*]>r=]`4!NTGE*,ÝUG}밸 2USBےl~촺%-[Rپmy&=. V7}Jcp =A7z@.[[tW"1q)\avߖx hMss1 V9 _&S @UW`6DpZ`K+?>n_C7O Vs/~/w-YlT7/תnm0ǀ/`z:vQ{C]5}hk_n|lT!y[B~,=W1?"/avyaI$GM*చfCf DWߨ33; iQ+X~/@[ȫlw ! 'M0_=r gf'9ڂFffw;>d& vbr.I@HӪC6h,>Ny3T*%}XݬoyX.'(x "UڣWp_B{ W~rzh_ C߀;@|ׇ1MG_w(}_VAz\R6j +|sh-rzmG/K1G1}_=q_+ TW־c]Ͳ\b[! y9[r̞-d}m4NiaS:voW#;n86{Qy62+(glmKH^㠁b2cU([jZd{thXp/o~Cg44iڧY2 }.m2k~njJϋW硿_;x0Г4=KE'Z_Y}D=ND%Zbh>0rX<#xUGe䑭mZ54:iSŀeD4)5ьzuԅ?'f?w}QcFJc٭t74(l1+rgo1ozYt8LE=jXtr=&X9bh6>f5Y5vx/:,MD-cp5}p\%4E "T+ $[^Q f3/-H gU2^5ŕUArLikd55W-@(,\]k@7o?.6܇vI ӯ땧_7C_ p.'^tFSN>A,OzrQ`d{u`5L?7=|gu`\A (.1AbRކr h4(ʘ8\.`cNSj)R%/chƒܘpr [`ycuQtdԝre[lʕ0-.bz`?E!*,;s֦(QﯝlKAMƣ7u+`W:f=~1wm>Dd[_ڜl{zEf99@F^(Z5kĔFvrs#dUJݡP(뵏 C唆~$Tt%@ \" < G?>7u`NhHiaKwDAO0S[pR]j1I lAuI kn &ĉՁrr4B+cz hTi]Ѿ+ _|gí"bRCgYmjÖeˢzI\+ҮԖ-uVAoTZ3„9bخ"`u`>D6(J훓M]\7xGLҮRhY#֎p8{`Br~sZ}dP@}U+ w>Gs㄂CЀ n-.h=y8X\]?ڰEy2WÛy{\}LP.qCP3Ekò<ݝAv`#$u tF_bR2i?hdl$s[Au _e~Ꝇٖgv@ՁibM1G&(|DS'^<+L`N*T,umeHe hF35})^3윘Nԙd#"%:4p>1va 01)ךj^;%6Lswc$M|ѝg4@?M;fIfk#t@ >8׏RFm'ЭaQ3WuyyHFqţsvws^p)X/vp$=y|.C^:h8} avw͈l{ y۽Z"uQ_еk+͝/5xN)[T͒l_b_QQmɵJ;\J@Vt:KwɽWB&33g IƃLxrp|O 7K~=f"XRMXxgS:`ǫfAoM=w}wސ!H (lmYt"?rz#6)y_cQPQH6*B,?33qT.CMzc7 EC > eD)B95]8:!tҟìpݽklZ"RWye`ڼm!_aX}qvb|5f]|/->{Rqs@E^R}mʢ}xNNZ\ii2aX 0=c&* )i=( a:1PNjn̽aؾٹ􆁸&nL˂(8tE0sE [nw>y+@矓3:8O:@UMvU5;ՁQYmH1TK\x?a-ιBop^.֨ލqIE\냀 qcIz]lHKN^@ ĥIM\NwF;I!! T_qddY#t >o!"|1kkvnÆxtp9;YQkRdRD=FM]yrZyEiF-tUT{Nf[8[L#zFx VW:h%44pm6h[}pZߛ *LϿۈ3K!+%f۝"3%t4bhJn O'wr^݋&>?5w ִ6ɰofET$C[0]YIGd? 6g|I$`1W /Se{؇»9"N9O܉g-3l/2⊐n;^PnkE4"8h;tB8ܘ"m5$Q(nǦ3UЇ}tBo9T{H_fA k{WP3ҝZJH}jEʥW^%nKlJb`5_G.{K #5m<]%O ⴢbi'^D LWv ]U^r\rnU׾9crcmrT?'kH<8N2rC}JuF. 'v,l۝xDI}]JmPQСzg6{^汮:ᠿFJ耸E,_fF6;!rsSJh:MVZ7O{Y<?{5|a;uU @>it7:\U6z̮}ݮt,`?8-d"+`O5Q@UG ?L5p[G(MS"b'kaJV#0].ÕomCIn'#Hfs0x%9mH7`b(Mh4c4 U *IAdͅgrǼAևɎրZs=&s*σ[?lR*U)!Vkx7G&})kXْmnSk$uH0ѷj uk'dzݢz[. |5ž<u :҃:_\\vuYlnT'D=%,{?f{\旡,nʲGv|4x(P>{w([Z8rdz%}Wy% bNNs-"M̵;k6;`!~Xm2;OӴn%->xR;$ޫ8gYPFCݛ3m|6Fu'خ:DzU}|F :)񇙦I!ÃUBsKځGUo۫G"7YiW5X<q "uUiy}UC#jKUz83YӃдt°?|Ñ/Sl$=PIjAIfq;e $nW>(Ax‰v|w9dz((۱Jr4,Zb^inwvPK"5B[cݠ \4q?y{.żR޽vŀ0b:Ia=m}8 uqxZ==̚Z@h޳z`$bJs-{֩AA ,cjM-H;IlV4Сu7 )g*n'b⒞GRPӾ3",A(_C{bzc`PHF)YzRYSv ι1ƚB}l s~n[q>=qmUC$r]dzߕ}x T T~L`e8y p4Ѩfz 3a*VI?Oxo$t/9Ͻqsee{Hb,]qK 5uAA|0GA񺅯YZ}|MH=vquuK9 =mքI%y\ӹ_þO-ҁxXEJ)lf ؉pD6#SnPl&dQT hTy2;#lǚL(qR.aQA<@v@k%Jd30iXv涺@-ɋ^V7 =g⪬V=8F0auA!:=l79j '㤵P;%({Du\LHvhզiSa)hbjl<͵n!MbQnh?GH9a;rͳRr,Uz?H I˘:ة @Zh85e?kRᢠӯKdo[ikNDo.j*78~j;60ԾXbcEF@=٠pg[8QRNEC ܍̘6mժ0L*=PJ"YIf V@KNml֭AFiL jtZt1[Em3y [Ҡ/"qM9;@3݊;oQ `NۧÈB s."].#KӼW@, lR\ؽƦpQ('a9u+֡C.evdKS|o),g ]h<\|߭"Ǔ\<; $;cX̺epU6?-24ghR)@b?(O`֎&\,y[P(J}K'[JƤZh51%RR7YtAyԤ%O\t0ʗN\}@PhB ~a6:=Ȳi |1@q{dzUg*['Vh;Gp&D.ˆʡ8QV#NvmjZ{{-gtqi^.i *n?wud1eGTY<$\CkHl_Msϧ:Yٜs1Vf"2yPyW5mwgc3RnUu Q6vPm;y8zFQ:p}ƅ+# LBg`/rR cI^pewm *RLߟ}j83tlu)I:JPzz&9|B ,XC3ոJ,phFn8tGD`QkNc2 &; ]4+YԝnHkCdĠWw3=j|pmڇ)ӱ'Aڳs( 8U{TW7TvS]*?#Q h.6 r f'E:[E,Fxԑ)3Nf"%( _U%ya[TK*w' Qecfn%c*4# & j55FT%Ƶ`{.(Bv_-pS԰z1 upP۫f +n>HEw>%*ՔADdy.p_b$9kFw݁mCCbx^=FִA(U*U-' I6{Q@DY圣h6M EiKo9c/֒.QexF Q'}62踷n{PiY`Tn3޹ $9lAgRn>&^`W%dwHՋ4CZ_UК$M87c̅YV99HJCU@y&j^a+nXW#,`:cp p @sުak|uD {)(v|m_ne;ͧ@TcH 6WoCit*|Bk .h\PlpBRF7N@d-4[+gw_?Gdo_ӖUaVܿ?zԓſe.1!% uW{+PhbR_{(+gr ՛7-BEbTl{7;x 9{jé6 K&S;K"zG!4iY l7P>Ϭ /3Qrx8bZ@@fvo{kC.Fn*:Hjf  b΂Gкȋ'm4[sgL\lL9޸͇J'2ںb.kY:`UIN3Z2j[W؜NXb-SmR;)Z jWoA6֍qa7Y:> ( T VnlxB<\ъvTm{lX,*IdkTQƁJVD@U FcÑЉ2gYsy5\Ҡ-pQ܎YlܯR}'9S|#fl8551rwm+=3л}ne=kZ|"ӯ3{ccrZruA g-}Fwǻyцx|<ՄxsfC(f6V<1R7>Mt~|Yst//=dܰ{{q4ذkG~ !)| B1[Y۩4SuA@ M>q~b%73x4~gSjY ˨-L<@+#u6Wq0-rqށW׮ P_\v.u~ug:~N8ӱ0f11exuqf[֌^kyx8PB@0Qa FܦQCN (R&Ű.=F?[:mkd"7R}j>I !=9ɁN9[UKj@ݺZWw.ePB1ad8Bq9Xg n@T 8i[A-ǚK xvL1[c#K%k>;tuPiؖѐ-c!:c7K}!ͦ[ C$[BFFt˻L\~yܴ`':) :9KuAΟ bc]4k+ϵmlXדI!L(LqWMݗէg}渮15vw۾6 [W~&>W 2_6P~@G CrPHk`.ef* p nQݒEXM`8a T6e!NL@$&>u-gjlm#O=j7S q8Ɏ? @'݃fv2HI`dM﹤aHf B7өoA$׭iba@gb^P{dqC:!)E)0f)]u;Wg1ȗ弄[!w7D'Ţ}$9y qU?'!'xB?G-sUg6Ξs!B7JinsCSd"g]Ev2f{\=%I&S{c-~O;RkV+s]d`]6-+w"%K=yY}w+]d7VR;~1/ u2=Juʛ3}vn챍-|ہq7ހl;ytMpT H/ɬG]Ny ^'jC󨐢A4_ 3Mi5@hS 8ɁyU3g`vk۾:CCZ~xS=nv \QePZ$:Ȣ#PbX<聙uwnR4ݢ6GQNHU7ZN¢S7dޒ) s5)]ׂMF.Z@Ux$w--paȩs]*H5rJ`ß'qلwBP\=bv*}j@AAU]>I]-:mPg\\{s /hQ!""hAA@RD#X)1"XךLX i=g5GYh_޻~Ϙ}Z[JY[}kEMZ*_-xx- ܥ"6 ̱q|2OTnױ`OyG | xu(L'Y+s>Z5{\xt^*7@ cm1'[ 9 oe5vrCSeW~V?FJ %ϟs/'eqZGTh%טs2Dz*xRj?e䒪l69•ETr9z`;\F4Q$@2l)b UԎ'~V.Teia9Yj`у8ιwZ!n_%jM.SK^+qژʁNK`cy/Zjdl |ƭ(1ͨdwMQ؆O[.vğ;mE0lZpN:ۢvi5,%25NIV[ zJܜ2u<ရUmklB+eUcێ`YLr69T+piXWښ \r- Zm,#d{˿[vW(ٍnۦ{ iϩN & /8 LÂuLgT&I`k?B 2W:TRRJ>gj fo9WtWJ>oGU5?_!~Wlhd=$RgXl^;R^,a'pE]Q"Y 6ִIVFr:/6jm1h{i $gd0Nk(茨F/Q>ٛ_Xs[rf쪮/jRcb̰yR,sYht=rX9Mr !/AYɳ΋&h`7$N"0\ 0_gԸy~Bl*~8mpxmơx!xw~`H[ry]\z} os`Sl~:1gpڏֿW7q< B wK7QKt=[/%}1h"ldvvVlE%m{騠`M'2L$L?ʐ`x+@wgcҕex6]@FI1jͬх qYa\| ;c7θ)\ 0xx8V4%AؗϝּWZ#?7!%рُyDoTg@Ȱ9+ij5֬I:4G2!B"AZl<7]TI3GgԐ * S$a2pQJRHD]xuK_fv0e}$NmOaO3)/9$krXH+F]Έ$jtH#> Ц%N ?@ ]Cnmcne5IPv:tT-\mVpK2h. A{8o^ Nc-݃!~<׸e y)P]%f ݔUw4=<:cnb_CeDYg"$ŏAґPC$Ta|~, e@+vl9(cg5SPV-;la 12CYM|Z}풍gIvZ"%#Jo"{n7df4_ x__Py 3&_TCӋJ]< jS_ܜ SQ*ęs:ϪW/9_HY(eH7BQh9lHbzŦPaheG>g xD}t7 -w}EzORϥ+cA>[(=V{l2oșNPxZSoﳼǹV [Ιe'm|/._caS^jRxB(Mkz`)ʟ;GkGج+3:; o{3,-Cn j/dՅ s&޴*I%m! D[^[⑳42Nl$ "cK,2gJV, X0|^/"] L ~fBC spQHI?':-]9OT/KkI4h Ysks׵hdpv̗[f٭O\#_-;AXg"HUa{ |.ܲ+_zYS> `l6En88R zum%uM6UV=JcNƸ[w$[IJ~ѱO`F6IW F#B(9skkotQq2첞l'L@ JV87.Ԧ=tf1A[/6柩3*?6p1am9C0ZPw+JjEI*翾7] Z$h.9(öǕĺ&ms\ǧ>x `[d+QD!_?2$uMsϔ966*1u.b&-gNWReZ.@$ 3Ȗi`ta=qH ˒`SFELD6~DK=壬Kӽ9<-+$inTF9g\QѶ\D r/$8%TYkIB 6 E}svs3uIs%HRV g|Vѻx8åA%+as̘LMPz8bg9(D7/߅rہ0ܕp e8矼D>UoP? zPwp@`(v׊}-]gBDbdFaÂS;yS Lbhz"Čt^u _Q$pPє|JTJyl.ЫP0#{( ()$$KjH͔ѴƖ8:&g5T4Z0+N2;i&xյB\(}BfOHpt&i͞4`eEs "HVJ/d?ǀ 1 m a;PiৠNZu/A<3.V7p!n>c'. dnq<$(;ih_dk$ 1cߋ]+/Kz )\c:-S!^Qw RmTy+nRW~0j$-"_)_+mudOl~_O?wp[dN~8RlYvf($s t &ҡL5{YofYKe1jF'#e#x%]+.P D@qQ< kѤNH EҘ&tVBEI >kual` `a}ݎNp[ŬArq_5JeǬM(ӨZU%n9'A XhePx$\qjo\dV' aMwE@}\4 qH`g)m6\F&#74/oȅ!vDֶ1hQ/D= x۬ĻK~K!$6\'yviFrU/ KJ)V5gGE)9tVR_VfmL͈$/gI jj\I$,-cIza$ .5̻䯴W)u%8yYo"i*it~T\{@Y Zߕ*y4%YdFh6'Gچ>9p'K1g  _ MqSբp;:5yWVBAf3}@,9Ƣ=yhYg"Zcÿ{fa9Μ&C@T* fp4 vWq7<" 4xm9+%{Cq]$*Q{؊[( 8>9Ql{s,w8nM>X( oXgOfMsf`Uߘ]?hO%G_}@0h]]y\\ (P+RqŶVߟ=5Gdm*C˲w4,rf,wg3'&*csR@AO-|^c#H"+nފ]t Rʈs[V~(;!ny!Q}C&}U#RMl1^lf×!`z"1tMBJXJ1; @`XSʛMGa'vrb J\:L2x]|+e0a*2Ηju==ZOQ=3i;"7ʣ\j$Ae6]1J N?JuNʦ]^U6hI;a5٨/nUJNMO`0?WUCmEBZLյadr;3{+1QpwesLɑ*'.p)BP u,2^}Z cלҨI"|s [r +G qiܰ to3>Y.Y>H2֑8N~Z1h]x^l=3x1_+}7].np $*;17ڙSmwj A|܊hIZMro(t̉c*}Op1f:Igxt^b3ZQi|%1ND$ {9s^/,cJN" lliCOwLqAF(ƚNV7o8o)?>m-"ZlBߋ7>/o׿K5o',o8liK|Ĵ)lWiXM^oYǞ=c4:H#\Bxacwu bԹ=l,:K5DpPpr-7HYkQJ E[!ޭR,=wϕQHesWHz:tᱨAR',mXkXbYe$ gq.5Kƚ6,RrhӁH<5oe}LwHEly{fVrwq䘓't,[Ir!wu4Z8|N{Tٝ*gՔ~ذ;:cw֡ y4m[ mH3.gTx?* OW4F`[GG18 :XηpgjtB#pL⏡G/k[40^?H$&oH8{|CNNdt;R-ҹb?g {BhQ]wŴ,RoI2>7-?~K|~OPU+w"7Ǚpʾ~n~q*iIKs`Hs߽@vNXijS im>^ aYaUVUl[[5T}2˞XD3w3D'3uK e@٣Q h8fj(NO 80?8zDq* tcЗ"6{b`T%e|";.{QX.`ZrAȩLm,ԥL{XK0[4@v6ʙ|)=l|;A7GsH-R#5zJՆ X6"JchmF`iڮk]eJe.̴fNil)E7+iW˱THͬBBKcmRw8edzڊfC0`[W1m!m EmlQؔGPۥt,&XE5r2{"yaXDqJAϷt܈0{1iR`$>8`geLò5`JXmG~UmXj]ZlM4_E|?k@ʾ(Ka{ >L%'Q5Zcb{(cw{:#x0ۉI.+"-IpRhyleW*'UF#r)fP]NڞRK*"JS xGi$Kq,#5˂!7A}!G~+3Yιj WF8ZW:7~Wk?S4l_@ވ0MW/p%>W ӱiIIKVl̏ޗx+IإljOX7n0 Bg?KFXmY7f* .N l傒Tik&# kIQg)Xqcfo3+e9 &o9%n7EdMB# @ }8L}z݋iIS,\Dh&6v*Fq 3>humMB/B>F| F8*j`FRl ,E,Wҁ$o\Fݦ녰~p<@ȳ4!밒=q45"u<Iy? C}BYu /j3AIJ}V9xS2{Rl-7iC=sS4_XRL"k_|VBptq1R'\&; nQ7x"8yh!pFTrx_M h)FsВ?ЎcSCY"gvx]sc@?O,;X@S^-ygJ i'zVFWښ1`̠y_1&K\s_+ʪJz]"[gT !?MƻüӶ*PWb 1v@hpne|$ح?VDܰX{LuW!3֗n9{(;\Ƿ;НV-[36VvQg_߀|qR'o_z.ot+o~p/0GhS a}յ۾O#maQ.ߔyc??kxiD}\B|zN௅Jk1Bӯ D1ߙ-*Ul_mGXvYSBBTYg`j=r!~bQjPBno pX͙rmBPe=Ʈ֯`mHwFrD&!l+ۋ 2Էc*WvUw}.a%+^.5,!I>T=KkڤUmY.VfzƲlbʽ;ܬ8 hɁk z ebW8C%c|Dؙ"Dža.[qĆmaSTaX=qGLgbQ*NCͱrQXK7#p[?y 8u/DkKSBY1#3EaӞV.HZҵFT'`[f SOIw c\ƞ7ya՜Ct23EOeZ*Oj!oLQ޸im3Ցd5' N^A,6퀯Xj2z-f'܃Hb,bN`'rZc^ϊ+}=`-U3 rJ={En̥?8 g\?y]@lOS 2A:8K D\;w<+wKrj,/?V}_K"-7KE(s'mXd^(IauU"|˪ԗ;Jғ@!kca,Fn;olJ ̖uveW%n%-BdP{#?+l]yڲAORx8`c:'E=v# ѧ8w _M}.l3-~RO#Bԅ)@!\,6(U&Wf]ܠ=旙\b>yy;Oy^6JFfYdƽXM%nyZY;z>L%1.rtjkyc A3Vb>Qg1`~Sӥ|v_[߃AjA 7x d q?;8 PS:0,݀.ylQ܎'gZl@Gؖg2A|Ejx^S@ $90>6Oܒ9nghI?o\c$I(GcH+ob@-mdl#~G;?cx_d/;F9q7Γȕ.uP\3bNp8Hv>ގ(}*uBa/;l wt(?ri] ϕP'uUf49/ck39"C;[Z⃖ޗߋ;՗r,tcPri5@4@W/iu,5..92iTX0Pf.{<8BLOx1d]`$U )>@!l!JX[e@r3u8uUK}qЁ÷e.ƽan<nck̑<% *fe8 eUA*S oĐ3 J$T6Ĵ<ƌRCN')}-EhSnq|t=\1le-/pǒTH?+IaT>ikP{ұ[.WtEfexp/\#am~~T.tpV^\="6 ,+wsgCF}B\nHmײ6Žh%g@u,CuaYV%:4?j#l_ ݣza=}DW߃ܾSeA -$:r>58Xׄd~"lެwzgF c|DS3B&轜lhnYz@!0c9G=k8 އNE0sҳ9An/kݧ{8z6J]F2@nK?+6X9$Δ#Uc y<AcDr[^O4Z5 h\j z `|v;]]TqVd0Ӏ=?7;?ش r**G$U`=3]u9&Xj8 &kBMbLI“O7^S: o##P~yO1Dq.1'e#?a MRaN%Z 6rˌI RׯD6"TVwcqg 8+yv tr82fD@kP| pDvi7)b2y:}␣ǺcdP!ځ7RDIaI F ||zC;ߢW([|1^0zF ;:ao=F:h s<]I `4c-2z [CdܱݡH٫(OXFlhTRBBcZ/h!Q% gtȝs}oݴRry7="&L;>#_/?~AD2ÿ~}fjkn_u|\9=M>Od[m')3 ,Wk~3(EDl ^ e68(٫P-NE-# %9B'kXo$~0%ϞH<.n35AqQ4 m?&@wy](np:^q@ZD1Mj["Fj4: ol˱o5a- H^;.zm˟k?w9"ݾx#8] /e6^Bӊ=zZ>%XxR/FZAŴ"z3Zҏ%C{S[=ع c)~ՋBTow { iIeuEu:+& Xk_S Vve 7Ǵ5qms9XT >:=m5m,A"+!G6 ޵8( Y|zg%Q$-δe%.k P\*4[lKHKdY63~.d2/k5B͖dn]pg= Ü̙!%phwb`5}הޱFS˒ ,0œխUM7߶j0 Ywd;m GW1J, *?"󜤊sO؋i Ϝ/zTG}II"p m}Ij4_d MA^bO9xT*جdIf/ULPg!zG4 )j/Tiy/|ܖc',eP$@+gmq@A 0`z]v'J]gȍx_0#t3Eٜd`&jvxPY[lV!@Q 溶Xv\$H8ZX YAf3InQMrt@kqG P$#XVk'p]gX58p0pcn$kc)ymtK3cWy#< Q%. Di{>t7+@ ج=n8)D"VZIna[I_'O1=Rk1:`/jw6/aޣv=z ?6\[뿫I] I{=~[5^Hڏm~>Ә[6ړx[0ф׽Etཹȫ 蟋yJ 3O/z2&y,n,? 5@0e,.ϱ dڳW7_k7:&q! dvtU\Ѐ̱L>`)j1}FB5|N]uA~G91V;矓d18kjf|2Gܑ !|U5' PqQJ :3aց K5Bi[&q_lkr]@p((hH.ZI6+T@W[:3Z#yiJx=W:IL Xy)tAG,򮻐HCBڶ{͖q`P!HKPYQjց=)tFZ `oxi5 xaY)ẋm=::- Ўv*F7+9qvoM8yc 87tHP;(j41\/6U$Jr"6;v2*mBx/Y2a8̨bQ{LEYYa'q]vY'fE%?c$ۓqux|y~} xOP_/Lu_|_\- CC>͟g.KwSVJApM ޖWS9jVjL.*Ce{ Aָi1c3 -dƬPD-،COܦ3΢aHރ(k: 4U[鸄Q\%gvݜjFEcqp{=ȭdDVcWWp %o׌޿k_O[XT~g0-ױu`R- j2SnN'dk:3Y&2.v}B;N0ʯ6ed~o 9W:rH&)Aq~Lɭ[@}ީۣquf]Lg3_褢 3PӢi+%̦RݔpUhӪ=mG+JC3yZ81X)b+1CS^'Gy/5;[TTY'#m/gꠋג vX5nR."@ﱃX!OHIlպ/86VIڥJc0Pe *a:Irq$|eg,SD`X㎥r50FcZ.sh}66Z{VuNJ:eMHk{]AɲT:bs "0an"P !X*1JRԮTЉNJ&3ie:3 |BCkCx$U XE}M'ȘKP$Rl@ĭhv_Cw:!}>%VLFcܛ$o[nKxo?ժU* '}*,?>>-Y?\z &-Q,[ d/XA8_YTiIyq>[C/elDcxea%=|n#;# cT0*^slY(P 4vDҪ@Ւ]* 0Ȩ+@b1;PX6 |0)!+@~t~`s?[(>~qq3xc-f>u" .3HvN 69x};yn CM:{>-ϓuf5^FP:?/ȕ;mV<͜<7"MP c'BW-2}Ѳ/jRum:Q׌h;);I{I6QjЈK8mD[W˃at'<Fo1z`F^GO^7쵪hHf3@x_1:37*?fabA+)D#ˌȰIF]$7]\ާsNZkjl_r']I[Zk:<'"2a^7g㰜}y3#pS+ kC)c_k4ObS.Ti(,dw|^Gne8oKf"G㛠<ݓaI˖2ֱ xuX +rh]è_پM`h.p9v'ٕ1hah| P(R3'i kߊ}&27ތ~蚅\s>}O[+ٯCrmm.߻?߾|:(zYxyzL\5^=Sj9(f9_cYgƭ%X9(hC?OwcE:v U's.u7m /8ilSm*ZVTK* P1֞\VB b$ v̞ 4#~!7_h}#*`!N]ՖR.WY$A {.ՉJ*  n@|%I7R L%kƈ{DEyqӞ9E *Acc4Ǵ} .”ٹCKpNȬV߾N&T@Y )E҄=zg\gr((ɂl,,aC]IZ:Ăw,5m(v@jmI{徆(0F(xYS4)ՖAx+W\R Ph!AaVQ`ITBTJʀ ܿjX>lG{Eq fN˜;6Ⱦuًy:ҢT`T Tm{4+wsH\Nh: "O8V[N`+/47ba^ Ǟ]+=iK%N;ρ,;{BK#gnʹI{ _,5[زi;d.)F4`E=hmut :H.'H,CB>ʵle0e?lG*Xcf.EѰ,'тʵvaQ\ڝ9֓#oZ4*GQ'5!~l,=cLo$bK[u AXX}%Z̠- ;g,p\^\bdhͷ॓-7ٲhX9=vR}ѹzLIGU"x+rР)S̠Y:hno y:$lXyV猎g(Qd]GJG!* ^SӪ^#GD,BNV"= >K_ǩ Lղ~&5zDeTu"$Xn_ ueU-_55BcԖ|'/>`Q#Dz>ޞ^lqQM-^lɋbհGiwɿ"CX$ˑN:4ZӁ &hkNsR[>qX@S{?Ķx}}E qѵ^X8/5G*IèAq+Bj`8r Vڼb.3\L%fpQ6N -aJ`:JbrX48^]radf("HrT^vؠ)ToB 0<~X|΃͍dYWo.esH2_ϫ*:afݰwˎa[æ'znH-3ɺZTpa 2JâFyGN+K(O]kfu;Jf>o5@~ZAQ-2b@1-rX8m@r8̓~g~ P(@ɬ҈j >-Dž ?cVkXbN VH0G> ;Ff<(p cӲC  >llpr;v;tы?뮪`eꌝv煵 (Yc-+[ TknmFG]s_B'[>l*p33 !.bjْDoFoIv'`#>q ah,k@$╌9E͇zdSU ŝ=6ZєOZh+S6׮] +/ZbGtce.172~{|Mv:q],鋭pAY\NeGDm suטxLlAxENt+vQh=_]@Oj%!JK)Fr%@10gvyܒv/iext")!Z++)SFE0]y<8$nue-|E ŻO Qvd춭/'䗬MuIb=0ờ<{\-"5$)5l\E&A I2 (IT#-IEpN1݃#nlV*x?e}5cCڠ孥z- ৥x w-غ@[hED*D񺌶"K/c+lyur\B5yia$dd&4Γv˵s:r]I, 41I|:bC|`+G9KSh IRt,uwOS@(y,=e;lrog!CtVh@?2 :V$a a;YX!FܣR"@2ǻR`kBnQكD$LOOhC>26k#>Ƭ?r[c+!rA[(3x!n 9ff#fR iW6J4??OWL򮰞!;8Nf"=rN\`}w#r5pRو=vĢ\qTvU=l뾪u3ywu.W"mKF;JB0CS>_YE=Yc:sn2 vZ~x7ȡTRa+94 h$ g7zu!˕}-*.LrE@]Br^0m+ ?s^9%'CdǮnIo#xZRIG-Wg&@xbəs %9 Lpe86ߩ>ZG>` "w'$N%rWkppO;Fo+0'e3Y zn/ 3[:L|͙b2p9@!EFՙ6BI#kݗ#V6KIF>[p&?V`Ry*}p0"䠯ڄ5**!{nYdLDgs9#-]H\PTbfVfХ}>zxҰ\@z~WVvDX}ap[ɓT#Hv0wSs𬮁rr@2!"恝 L+bw3$zb[*1C.208c[' 8lu߭ (FZ2v¥ԘX+RTKtEW=*dxIА` OQ^5?9P.qrd˦|I, :+ ""4Pr9-楟"tݏحL%`A@z .)ye%Xъ=r%Uy%涴%y{hԦ~ncc>Hs*\\VbnzRV>Gᙅek&xQkMk\~PYqS 6]gB+igꓸ S1Ԓ'WHM! ALm(~ݖ7?{kX9yF) BRAd.st"CgON F⃕J#\'ư=~L(n unfk#:_ˬo" 5MVny6eifRToB0y7]^|wȥmV4/"9R"qcu. btv %wD##4x(EtzK7Y+{ i`9`Q8V`9i]ͦVp:Z#B}tXܹkۙfFF>ȸ#gv%ɕ,eFYug$zУ @07AS;I3=2Uut o~F[7y\oK]c1UdƏZm{/YuZ%zcsm0Ql5/z-_rӅKPp^KSخ$e!OR^5w ,2 g'@Z7)R3Y&`U wp"iiݣ\ld~u3@`Ϩk k_x<{GoT"  rHK'=<a'ȃPtjxFH}a9W{b]n6psNK X7Fgec ƎRmct"Elm: Ntg')8ŔV~Ը} ii. fZ' J%!x%῱2K-g{<} ދ?~O||m^(cXv~_wDzկ;?~ǚ^F%}mȰme߭B_rG*0MEP -Qlf)es) _WU:Uz3lS YK%ZJưɫ"t7+3 1WTܷBY/,ld (–}Ј;{KV)e#f !}/up44k%;|R Q _3*p~܀o{o;HGnt+@l eQY&rlE5r].^ Mp]7*jKi=̉ߕh[Klܯ!0,[K✌n >>Т^as>e(X4L^$'Ͼ,i7}6x~b养rj+WJR%TT `dbq[m6: jg/b3;YekG6P6lbOGukE=nS֬vXL&JeS* n~ΖV.#%&Ii15i;:T3[cf.N {c{=qe㰥i&OKcx9 e#ɱ,iËM;G(ij_[͐tY'`.]qE$IkNyB-B0Wwv/u6pmk>gغKh&ETp`w!RMj! yi" 0`2]IiG|m(M|D~Xngo FX%~^f^4!I:FʹX-BHfj4S9?D<|SI%㣀oY⧒u7ݢt{Мkӕ`dnq;FEMesS|&uo h.ٸ#M:2h1f#I(>]$66s gq5avE,cҚ&~h@[6G)Ih֊$!VDo/n\ ޤO1Ƕؓ9i հGCP./oj֭c?/ZHY>9k̓i8|@bhwׯ/ {k0?*w6AW`<ܢ 6ʜ 0d]}.,z?d.4m#Gqz~?3 |bY[F)^X֧a-{ 8iZlVt[-U)M0wU⤬^@ٹhݫϲѣ+i%3Cր!Pz>1Bbh HH x0 q.eUs}{[s 2*KvT;]z&a1kÁ~P ȳe2ɯTA\^Lc1* ]{e]RmXГ8$_}5.ȫ;pNb~aɦ DL-0t~/ ]Py2trG7v( ;m9mT182fyxC _ c'V͉n=ۣ`SۭPKrQu?5gJW|J_Em߀ ׂ.w /NO0vмܣ_ X$ G |7cᆕHλݢd_#?z\ NeBP;ee˞Z `oS#efrIu( O] w2{kx {)͊p*d#<"\ǕX@k6 6]4]P i8>s>x2T&pŬ]m|<)jOa@f[5I1NZOY弿cݕ5ԧE\qsJ'Q}FN\!$?? C9u:%ĩlJQyKU6F6e* o hKXΩiu_'K'*0ڱ7/aRHi6~D֪ʵJ'qup 鎪ap<1y t88_ZfrK&l] ȀBPϹd5) G!䚲lm*{8m^ɼeT꒹/O/Y|{%V yu8y\c^>C #sЁ_ ǁ4lUG3#K [rJht-Gsu$\q2I?Jn $a1Hʾ&l'3H5@Dؓ95q\t؈2AZhhqiITomƒ ȝհ cjj={+}G&<{zr"ϻaS5YΩY7oݾ]rBt*Nűp^-{g) o-/͜Š2rZgnG?l)tU\@3Z" Y}^?~埯߹V ,ov}62/SO7칔=*9? mPHUJQ瑣R@)TbܦUvk˦h#D%;jG8xnq ܇6 [a=fhF'D3fQ&𾧋pǛ^yEtyu/[e9~ck_(oGӍ% '~{ "~<ƒVV^bo}WSě~]\@:-N;1,lJs:!dN߹]I(->B&(^Y5AM%Fv[op  #ˊ~#S= T$pcQ_;̌ܧMtP%'L7Sڻ<QE<}թjdz!-J7TԥԦK++3@Нو+٠c(ͿJ,`{fI Ԗן!\Ep05/.boPK#j|oXˆPX a}!ݴmYjjޖ&A5U91Geo9YEI* m"GE 1MkӋve.W0%~ B@eM8e#l=#Yi(?5~7sts.i٪"(sGW^B?VTA}C)yY¢y`S5SxQ>M _YL ru:e-#UT^ OK qܙr*5)stUCu7I3$۳C-Ʀrl `B`)c,(*"fȇUv9.{TN|p/b:%t(K潏94ݖhl(QJX(f7+ֻm=niOGd^@em=^?;FF-/bigGŜhdO~ƧD-9 ld'L;~[فP ?`,$[փJ/ X 5×=3()J o?ySqiRfMk?ǭ>tO&@8bI"60Mv{W>kMKxgq8E'qrsF / ˕A- kmb|8ǁn#{ΨK=-k[iۖg͜v&!k %%nUFQ b[_b@4q*-2iF Tft]Zcw3wvԑ"{chʾSFiP[Tw>hO2MAHKNxAhS1} i) k:waA`EkG֨搹GMfen'v4H; fg1X} +44?=Z|"FM   z fXϻS|N{D3\r=u;šSfӳ?Ќdo&p[(m;#8!XĄ)0z>K,oE5>VMނ_FCZIY~Pa]cnki!`Ω[' m*s/v$p|#ߤx'nk/\/ Z6'a'~B[. 0"[s'G6mgrb`iw.KveoTʋ `-B- MfQA)9 Hߌ7Sy{D&)V7zҒy-ɁM9^{_y,^Dv n4c9yU&SIE LGao74hw؛K/޲L vF:Jk]W\cel eп{KG9$6h_kT\?.! /v~RA~=ʰGYY4mE|8Ekn~')<'`3'}MIsc ڗ˭.z6~assDZl@T,MA -UmKeBLйqU*Г\~葵Чל,(wy稭hc4 x JƝݵcΎ9S20s"8:Gr.3[#n]崒i7yO%A\I^y^Jq!] AGi+[Dy4 Qcnе )gk&*1 ^f3Ǵttt2f%ZV^2ZV{i9.s\W3^#E\IU qf5f0Kfrmsc ੄^@Lz[`$l[ELiS* iyx;E"^UAȰ1U|%WRRx\[XڀGdL>>Kƶh9MBgMYz&"%oBEUrJuObppJDc^Ao{Ǖ$=~-C6t-]r *͟'~H|-D_ψ:>`cG=ml"N3bex?A9]V3冟uޣ|~v凒ۃSB&s36 t.('Gԉc|YY bPp7x03LTyRMȺޟpdkzVce{knP4>X5::ͺ9- 3WzU\{M[#S$6 }ixB_ϱ ⰻ(sc\XJ0@w(uT D?Ʉh߀a~.P^IHU'khnÝXmJjsb=2 p4 J$c%>vA{9ƈg|8>w'.utrZ}eBg8KO9?ūKE{u'M |fV+Եkm, %Gk[d`H4x$AC\w@na@ijkq*E)P1[r"/YY -7H?b|f OFޝ`o,!4 rހ_qS=H7G;o9$W_T`ok*aC'']k9+?UseE<6[F_#8yu?cYۿ i][TϞt8w">v {D8hk--"\|6¯14 T|!vC^k[H\[nGD^V߽T?xϟn?_??Y0Ҳ qwd֙z|=b\D?:.Y6wnT3~!&V:TL[nҡ.y\$ (׋},wMH.v{enO><*`OX;s#,&TBD K;~&t9K'ƺiH:ɪ{dۺŹV≓|vW>_HM"s&taLa6Z;+ F./Qӟ<fRx> P8CB/ߟV"OQ6J_ 'Xԍ7)o PwmVzR>Vd?U9xz1˱GoaE|J5vfj$4 w4̎%=26.6l- ~6.aGsP!^e\ x+E L-acXPR,jzڟ-NiuA=\:!H͸t"khle^S [ főK__Ҝ"+ӳ, |#6QRI_Ɩ te0"-3؊"ILŭIfč%F$/UP_[d9i)/Ib QgRv%2>Adl.ߞdvz±5mrH1bue+sּ:—}*&1(lzNCx'aCTO:F9=`%.Yk,c6 еmuR2.}ΰq*0㎷iZ m}p\ġk}OohI:$YiV57~ E^h w\'uGA8:c5fUzq@͔ I&@"sr x-;Z kFW'#?_g:?gnDp{n~RG{%o{~(<:stL{qTL 2q؍wIƹ8x8mWq RNQRru$Tua^%Hy:9靖>XeJ0/JbEkVI%LP-c0x:lsN9YS =;@>>D}-p68dUFkWCs g&MN0g$CaE7GPU2 Dm9iqOTDz;wXe#a,4T=ODto¢@^#vB!ã-y9?VaH)Êʚ#g{ҷ+_ߛöRuڀ?a#knZc$bLnNJ="K ׭bŸc{NekNRq[˰|(U7 7G}߅XOHy] r#g53x?aAS FU(za;-p׫/,L/K-f8;) ? Bad˹lz7y,Z{p[$ 5zUsey USi@:&<6v$WU^ٱ3XDUrq+aÏZs7p_J店( 7y2]5?* rZc~[/>cd4$Ryi+s|v΂g5LhQ@!3ƛlt܌^Mєhp 6:xp+(3wY g#z,d;Tbt1*ojb-@Ly,UU qEy":XګBS`A4 ۼs\c3&HN/VШgF涮Mk>9whҩ(y-['b#T'Gf)MB%I,HTG^jƽ-Y6*{l*֥:G8t`.SBbq?E Ru7'ܟkK}DFKmE*>1wxJT;-{>CeU*qcS<=Pr:7-m'Tq2w1'ޗZ@u-ɜEq=ԃ_HTmG27<5mnlRqv8LP#XMQz@AN4 slT6 =(P9(0 @ⱖ[|d>$-PCL@;U,#EPU<et\k̘X!rb5xlF!嶮uj$N,Qur.پʗ%7a毬26>{jŖk rնAIm~iC%ns2ik g=*eKm9 ZxjKU> ){m u h6;u]=DVLKrJlc"%BzR4]QOC|Bn[z"w⺌mCrx`D!bISLi%(}O?ioO"@DPuc '#Hh?/$s pT@sz'еF]|O/aA b@ vr.JrJG)[<_{Lsx3M `676ض$-z.0nE- o7 F1ؤ?_?_?}wv\TuG ˆr5;Uf}Kе.T%`/2\W%my^9\쩰njƙkc~Υ19QxjlXK@uhB]I^F{XadzP&dLi~񃵿A@fi5nH N(Z{t$ :IUy}$損F!`Y+gqο+]#=开ȵJĩN:0o>{HyO^a5>W$eG]:{%f{bhk7b#hs j\ 83l05Gv0;32 I5NSnzK ?\F|3TJE}qD*1wɬen^]#!ZAb<r 0MYl,wZwg+399g $Xɏ+ [)6qZJL囯98;gK/z6vXC+=;mtOyNP&2ts*[*P`%ZxN+ زmսb% {+PQݙG /k[M8Tl1簠ZFO u 7 5N{6}u@768)f/u%BEmO 82\ -DiHE2s }{^U[l<$Ӏ(9^*.GAMe&<;F̺XäB8 [k9u+ fpf=pVd'f3u_zhvUUw(y.D2Qf{=T,@10mEQD˒ kR`dϦv2`<:X\_WX]U>_֟'j\J:ϟ6DlV߳UU.JX6q( E$b*І&7%InKDW2Al7K4'x:KYN5JNa#`g3ʦ@-1];!Lc#ҷ ԵrUFv/ z穱M&@`"h= 50ZCX׆}ϝz|Dj|cn <686ZGGW"I1GY0$Z!-6$=33"c:(x:1׺lC{,hG!&VdfsZ56'r8*Jw*; u'AoT}k 9:j\QέQ4U;5RPĖƈؘa[ Z; h6<,8+yawXј.`!+[LnofyH+2J$0GA@iMs&@_oZHSξ-󹮸D(']1Gy^eF\8,_tK%Mcߜ_(5YvG!EϹyW{rf79I̋%@-SJZONԭ^ IdB`YuD|KViup]$EN*LuDg(>ǜy9?1QJ8%>"^ f'#A '{c >[ؾ&'1g5H{!pA[՚1ٳuƀs+ߑ9GslYMsWgmYdR3sΘ`6anb4Α Y_~b~;?AϨڙ|ONHN_(?mva_lQWv[ оpO+LoN+*lk#=M,|\8fK'scXTH6u{d̴Iڦb%px*<5>xI$MQa:P39B-fmV.ʀ7$x=Q8Ƙ.?#kK[#It{2/8dsQN[t7h X_rVwF^RzZ`Uˏ+}܀ 蜠U"Mؘ?='VUׯrqm]~`3+w rm, =3Ū&?wZʧ޶xH{9\DMރ'e563y(41D.Ә5z,l W0Z,3Ӝڵ3W8U(N0Rv[MWKLRVo|7|p:NL+][*5Ϧ0YRf_m搫(DCh(%%?Xʴ.0.s)Zh4ӒQ^svD(,P5TB_^Zt:ȹH+E%RY;\j;HAfl9j[I9TI[ec3Xh$"G?d}FOl2YG$ˍT'%:4$I˝I'-ft5yZm6 b:הE\ZUMLkh@)xBƂ6<݌* w>>#sOyc8ј9؉;`3ƭqc-٬M[( ~vZG/ډ޿O`czP-Tԧc 7KRw<)̨geEƅy?w}bQ2cdT3;5={wF֤ͭMY<nS<K6B :-]5p\Z.& e?rޒ(PsXl%IQ%t>~݅͢m\ X/ +Foa<$uS 7Pookd$o dž6L1: .].Dcjq:4IYɺJ'֬hHDHubo;ՖvKÆkϕx(o .؍v="lF9XJ_n?WZg_^Hh6$ <;AT(Uv̵}%r;`Grݠ[zVPi i=g&X3Ï 88n?>2 @cƀ5F$`r!dsUC2[kMw Zoih_Ģ3YVVyVM':sLMsBs(,ߏNa/^rA?kO.w_~-͓po~t7?_?_?? J(_⏩_wޥئ㗆FQGɞw,S/癌7\\B-3/i^r!(G wZ cirje)k` ]}PWա5RM '߿&nnw bsMWov2s_qSGwMuX{TYXu [󹿗_dXK_;qI/=] \S@ܹ ?iS>ͨ;<-|*w FzGF|kq[_OÐy\%0ۅIU6)~7L\`lu\"my"(_Po.&O,7vVYK0PcnP*P)2?ڨ8i^2~sK$@w%- d;h0ο3;}MiǙ$h2!r4 ӵGJKufJ*↥-kT.~۾v&":soFaqE JvމѢf{YXe>oen/j̳KPx}~** ,tI~\LZ)Wֳ li58{J:g1*X^t6BHQBNI6hj>6.? Y3@ ۲NiFٯyCe)'N+`p>$d]|JZ=s9gα^G^CYj;kra9,ID+. QӒ5[2/d`O5 xޭDiKigfm4Kn^:SJrHqQ %, V׬Iu6MCџYH+*P|P+]r/v}miϞ3}Z/$8i2B\m9|F~Z}f>UmKbxusfʯ&Slfo> $.tfu3FEȼ`%CsO&  -9vA> I _S݉8g,5`jN |;s1>QXc5U3({; k¦]q=o$.c^}jfpM$4*5= W όh|fOKk1s>>EV2&-ښÿ ߾pf3X;\r̍'n'Vo4xs#{٘f>3_2+s5Dq괸ꜳ9Ӯ{#P8=xz_.fsc:-+-oxoEβ깦ѨWfgwsγLj[)J]bK]79|SaGG{;-r1NegV}i[=cbe>ۙI~r\gJAY P"T&Wv} gA"piiaXqs0zL܂¹AЖ с_Pz +Y>YrNx+mOFiH\ÙydATK * hE*\:S1]zm1.B[gǓlYyJu I qF@|0RϔpŹW{jK>g!Px~y|&^~nN&וּ$=}/펟ퟯ׿[Ϡ=y4La2O"fUf5pYҔ%;:WtImo#5ز@%d6ֵZqCeZ~cz=Õ )L,Dhe>WcEشzvzԘ;{.D~q v`%f0ԫ#_D[v1I&ߵ= {{'n X5s7#R}كYsQ>ƻΰ|=ϯ˾Nb"==+K?zP}SjwO9=Y{orNJZ V2\c<$TӤZ x.?"&ۘxqp0{1q|'X{c#!K}ޑ6#bRoK''#91A՟\'Y1{V.r2ܨg˔9xEؓ4{R: p{}piY6qZyb'-7bg y/e, {emݣyJCc<"X|~:r:AE$U޾N_cFxE0 !;%-I jk%r'F@s rA!#mIG=k!Un6,+p~Bnd^.j򾢞|w`-5ws ,C/c-޷3ARr\*DRtjMXܗVB$+q.1eN{LV2z^rhͳ&3A"W0ʅdr1}#3 }m%c~ybszrk5CY+dS.(}j4\vB~v#oqgjxqrE%BEuՌ{HlbJ'm16iB2y{uMǴ[Mb-Xk|ƔD.[ dV-s9H'2o8ޠpWxOvǏ>MMN}'t[a7TM}yJ;e㍵y)2cOVͭ0vX`+[6W{^M+d(ru+x`iLHQ^ː-]@󚧗?6[N^X9ܩJ cϺG<]; 6[^*A }9dv6 Mҷ8" 8 v2Y8uT .FqLzl֪~҂K޹d`aDrFi|;2 B˿gcpZ,TWLZ7>sZAIWPYQ3 AM$-m#09h7U qqL8(n96d^m ;(HL$Okg9m S S'=⹎m{Ypr^c4B 7bFŶ. ,ڡxk,ȵ|Xs .Yg5O^9HfbVTNSԐϐuv%;ir !С h`&םx ,K#k"Ѹqmm`!Ⳏjx,'0s +΢ڽO{|Oƍsm DobH؀LFm\d 8յkD͹:אT m ^(ٜ|S-sٕ.%SsmZJ:&=m-P -ML4[`lEܶr1"EK%ׂS+Q%nẹ^lz$Iņ2Jp6Iݶ"\:iw3M!]} $Ul$!pz E2$p>ZIr(hZH%>8G?F㏬wyq!g<'>>'p2\=(8?>J?I6$1Zmr#f[Q쌯1G=rp G6myǕ6W%3jTvsy>CekT̯-Iufr!om~; u|wpfw_~8n+ x|+o~g@R,yކWks߿y D׌,hYP\/\66>'k;Cq?ʯT)*˒uk"74zOXjVsV*EOtT1Zzȥ{h%KVF#ݠx&w8:&Qϰ!Zھ#ڍ}k4&=W#LdЃuaZ5#mY"ie./=hvWzo#z\(3~e(Oy-~;pb}{Ό܋e|J,Rfi|['Kde8Sa.U $R`%d9ι.ek[teV&z8seIn (J[(NѐYCǔ* v̬gàU*ޮ$w-7=޳q7V}?-Mn;].,1.c5]Kjݩkp0{ɲǗlp,U%N6iG,rj,+KSXufຑu]+Qc>\%s:(l13rZHq^ D |nSd^m(wӚ#'m]aX8 ۘmBbΤ&QZtJ[&1 9+,;fB62PѮv'ƞOK^LzvuҴJ967msھ/SAn>uVl[WlIpACB' @e M@JmTny7dFp¹_gl6I7_Y.PD̬p3ɝ 1[G+vPƼ"Iq}Y셌 JR>|6EH xoAR+d mOцr_+ڻ>E̸ya6QUc^X+ܩ4:^{"Yh ?V,3wI9[X^Mk6ehcӹƊ0ڬIkNcٰ̨t!YAU 6hmi}kbnD wIbLnC$sYORLb=Is@Bo7LCtFpc/e>{Kmޞqq:֖Ͷr;V?k7 s454;ONOPg2d ;m'#dxVfns/JΙgּyOp6 pR{-IKj$ky>xt3LEy*,vU''."f Y8܂!EO`iUkˉ\}mgLr1Aǧmꮰ܉)gq5X뫌W.et5wIHT޿]g|b ۆy]QUϓ%zgb%Ќe٭3D-El %:i1?sYvȞ= X…Ȁ|W(DNHԐF\Ʉx8L rrub^r:&[g1FfaT.^P𰨓gJ[`%qR&yEa1Z+$oS{s\8@KʶLU-ľlcu/̝hJy5y-&f?ID& X2x5RLs<lڴqsLg#cHS o:!*x^^S{sx/jk.G3XfH5GͷWA‚3 +Jm|o;(?;><-[O2`z o,+&/9* gٻ-2َC)jpfkdxXމAyI 75BYx1Pه5U2QN2fA{ V>iP9PWDw'p)[6OxiMQbyzwXJ=rP:9ރSz|\v*@%'o>Kn5Tk/doK_a{,oI^nl՘#42,˙\BcgPz0>0u騁Oהm [I*(ܞp1dJhKjjjf .[ b6@ey+i@KfMԲa![j…6L `Fb&&Yctbah߫*_ΘXu@+;[nϽ 730\H|ݘhCGzhF"uhs!@ :; B#Zř΍$INTֽB?ͥ 'mj0[ %Vuw uljMÁ wJ̿^>ئcE9Pl0/Q1k bE{.:Ѫa^fQlTC5oQ@1ev\JrUgIkP'uqzBbŹn齸^#}R0UCeE{ՄnM j?heVdv^`cCZ1]Tռ؇: "\c|v W-87>]{agRgQ|yw\7I(Ţ67տs 9G {tipF:826אfѢmYq.듣O_#mc%'I4{y3Y{QEeN2@8-}85. 1}l ;op=Ybp~,f x}}sl]xyC՞kM4ڝ]@Z&b ech;5~4p9 ~ V]r4Pq$c}dDity=N"an\/Y[V~/E{롪, 7Ԉ^QD7#{FAFNMbX@<ͽ$wf&Hd92ҽ:. BdMNANdТ-\q E2%p×(]7h|u]yd-b7_!0 ϹÈ.5K]u e#1YU~_o"Zm9Y>o3J^& &”F֖?Q#638iM ϽFNѶ~#Z5ݯoN^;Gɻۏa|"dׯ_/O}7'SpgyxYߕy畈+A^QA1,CAӑ>'Ήx&d+Hė2LZw$..Tʣ+$p]GVRN7ly2h*VW'B0Ӱ0ϚY~:$CDaT+H Hw0}hr/g9^5AԪ>kUE) ]vNW7tUwn~EsY4^YITmlRi9s]#żys9fR1̆OXlظ@6 :wy W ˸P&5DDؿf]NrD {t[%oJwʶ&RWl2?)oq[sDύۦe QvC~B @E-FBaJf]Ict><ƀB\̛JS oXvJ6IΛP g1P=-peֱU@husW#=j4r,ASWk y,7ROd>1p#Q+mZ}Z*Ml!;slV"q#)7r"-]fET. v'2l/+:6E eBEzzI| Ru78xi@wcEss8nIN&˪jms!w#4 BHc%8//`#=t ` wwyZya q*vuNDgG%>]NS~' _QtQj K0h\}W<='F~~CU$p831ۘ_ Bxi$|]qJu!q XVzn0"K2mWtGUu{|zV㠫pr"HF!">k5:ȧqǷj<^/NSQs7BU-;E,L.FI}agS? {X8'=/Zz(KE8zIS"5kP/52(MmI9߫{ǯˢqBp/'e s ``ѳH <0Ěxc{b_"8u5 h&V<_Fya.>e3,TfVL*В$G},29\mnh5ߊ5n9Hnajk5g"Hr_c8#i=T#UX#j A) 6 AH\ /QR߶Dv-cYҲl$b6}(гʇ&pi]DjJjBFp y:M:RӻYgrYX3mqwX.,j 71'x2pMTy߮O'OF{=/m V30o'剹0ۓ-Z? I*:J1ݒ&)i=${x="]_eHlhDLȜjZr: At"AE[[> ئH0N00G<);Wd ׯ_6@OYA?C:k&:}GCFYC ~9wGH?o=n]M6[fS5d″#f Ft8l* a<4>fPH9]^P; K;[\s5?qR?>Qs'2Yh %G/( `2Ûʛ|mc޾myhQ5`<}\ )2{xlqhf)u&6VYu*{fZvFCln D+Y+R2',ޘ,+v-,/j_$[%54m4Py2yd*Z%K{G^ᖬjxި G-̲v5L5|Gm"n%amu RY.q}j:k'QLSug]nտWLq1ba>5/uju<Pw ˔f-N>,<=F,P}rP7-] qf5܃H=גS,PXlwI #[f.Cfe38nUks9vHY Id/gTMm|?W:$Du']KP AcKpP9u,;Ukr#U \%2cPclڢ&|U6HȽ=ڣ֙&kbHZnAT5HJm'dΥYn#-u $TLa,F*8R !Y)i? >r}EԂ[n0vW&뵔-(UhiP d y$2L9l9ej٢r>mnZMz,["ߗ-`ңRذ2fӚ`:vSmVr;VA tzvYVX{6yK,҆ZrYywq@*cePlTmˈWt ws MmԩKH3^u=aʼEX2\R/ԝch9p^Ոͽ>pas^@i0U=^/#g*'N̼PF>z~xа.iW^_}}[/N+p~llUZ T XM˚<ߥ׬XYbՎڬ c0=|/[cyi 7&H=RߢrI|3XapfTR23,WvN!$2wxF;}/ByX}Re/)7"е)yplwe1v<Kl.`˸Lp_uEȦ\\֓u@V_{PI$2u'-}(m@8nUp}@hZ n.Tmx~< (wK܇,Ȳg'm95A{ nUjTFpP:JCJ98Bw7 m٩1(Ff7bL N^,Zr~Of=RF uB瘧ܺsܠ1 ^|F!77TTԶ=wPD}ˮlLm/jd*AIfڠI۲g~4A>w-jהDDY7u~e ֱv'%J\4n4r7 E`n;R@;Lԭ7th }=q$YeZK ܆˔ AȕcCcHEpv^|P\VMT fYς*bj`w 5XvX;^IKҲmS"+O> Z=CDՈ1u@e W?'C\FLb'ގ1T*7#I)b^sI)GVF^;=273;QrC ?%3h9`@@?:ְ>y7}Gvjgu@eJ3GrLɛ5sEnʴ⸺ 2iEL)L1 Ҵq ]SvCͩQ׈9n:y!^٨_YyA-쿚eWMA,p=o'0>E߉6c>OK̽-Ntf@#rcQ {oE_G> mnW] $?v7}6JRG^4f90@&01y91X 殅'~Hez, ]a\F#3rFV!N7r\㏁o>_t}nXD1\Wχ_މF//Яaul7~yZП3R6zz[ DGon݊>}CݝC]*D1IXMoۙeF٤ f8M=骛b `fyXC=+Д)rFɘ`YP" P8<:/l EՇ'H\mKV&b԰={kE6K'Z·Ȧ?tL#ڝ":z ^nhu5挣~AcHjEv; Er]>˸σrO|ͲJ_ksh3;TFڜ~|6WAm'/ElnC%n |hg'tVGƉ5t0$ ^ ME8C-b`m_+&!>+oG#PX74=ɌUY|?FNR^Ӈl}on-_@Zެ$UDMmuC9 :<86l$ٔײ_MI_e|i7VWg `˿[q)IAy{S*Jj6࢛FLJS0vo16kMRR؎oLb~k^~krD}ZD܄yᾨM^ʭ悳a_ڌu *`i9r2%UYۃXÔ=3ڳ69 LS$$^cyIC #z*|I҈k&I}[[P ]2AQ)l<`؞R6=3;[fITSl.lu[#"2DMA+r_ŝGr^!CO5 V`TUvĞxDf_6DW-jdpTTnRgN6BN:Zݡ "(TE[nf9]gƇ5* 775jDAAEue%W Yߢ`cmf#R1y?4f.nϮBUEkZoY}z$k.lϓ=7 ,t^ZJzU \Y Gpu>̷VeR:뽱^BD6QQSaZh\M}[fuljDu=7kQvvslMf K?:Q  f ŭ:s\z<au[k]jyi=M݉i/WJҰ쎺hT˹:7r5>NsyuHHJ:ɮ> xcL#=Lpʁk鹶N\uv;^PRPQT̙ LH)tY{"5*D()*rgj6c兌1өVgƿk_WgM=M b^D6k(}ͤ$:d"Y>$I{o6k.}Ky-XЗb~Mzuq0^X- ,E4$y_,d޻{|W~Ĺ3I'B:ȁ ^m0k ϑ~1.eID &'@9z8H@c=.,`axC svgbϚوn _ɷF ؔ\Lc1(0qAòt (r #3ɀj-9S,Ñ SbljD- i$Mc^m̍מSOľz-B X>Տ*26Bc}鵕 ^u0\W?Jf8Px'x9xM9Gm9':! /Wв%Ȉ~4B >ō>7/FP^ZwOt2r5W??nw>;Ԧ;E/@{j@o^;&{8j:ueߠDDy5RyOsv:xۮH(S$g-1b2H^Om&&_H_(^no@u y%~D .^o80vWTfF,wo?lAֳ<zֺI#:@:V|ރ^9 Vw{nm3"2E}9A*_j,QIo'n@|"ybO[j7hv"czsl ̂VFm X5+ x'y gB{TUR{g3i:3J]<џwLģԀakj{@2˔482p/ >}A_N}qzTɆBynpxJpw@ xNfJx] \^*8 zbΧ-*cA9ȹ_B*wx$v^^+v*Ld-vםsCG$S=S29rN2}]dNT<``Eh̑LkDﳬ">J{~Я@ |</6u#׏T7д1L8V+ӄ4>KfV\Z^n@w\wEڀX7Ւ[z7;Xw%obUg\i9z喑Je//KݙĨہy&yxgB}zp'i)/uH( G_lDS mhl!eg2v=znfWDB l';/;h/M EA%a>eĸ-JZ*p+XҮ zs-Ng[$2ya*>Uc*a6yk] =%*"Ԭc`R,7æ?y8r4ȕN[{Όhm!b m>P 6[*83%ʣ60Bs@XYrGp3gh4B5_[4@OP۷p_>~lPŐ;o{L ýIuN֎Fp~l\PxƧdS[.hQﭐ"IKj?Ws*܂"iuZSh'R߫[q3Þc3P0t0S L4Pv4Vnh>X1龰h׷^BԄY c&ri)Ҿjfޗ5|^vd' kH(LPSS9KVW#> txМ4P%+laH`fd-ĐcTx2$(𚵖Q(Ѭ KʺNrEWSr^Ȟ̨*L'A,̦U9E ߙԢ^讴^D'2CU=H゚=l6bV35:tzJ M'_9Ƙn˨i8+amHޏzԉڟ#Dy8Ffg&=A=>͈_a@'sY__,Y\j&.,c_*8Y<f8YN>UP2w$=n~\s8e4ғcz4Ŭ2j9֖'Ӭ9P~l]۷gįj5AsZᬊ<[28d~\6bpGQSw" XXKw$.^C45~hw"_ҒhZ{m6J6H4Icw q8*q]~Y;up9psܲt~_lϚf4l P,Sux7ؒNkOЃA|w758/88~|BAk!m7]T/2hkabp i$>Z^2j'$u" ]5fcH䑛}=hV ox v9e;md~DAʵ䀶u߳AoT#ʽlh /z<z~Os_3[wi?XAoyk?߳:|#9;وmp`Vɣ;lV/OϦy`HdW=BKϼXр"x !^n̆%@'yǧ") Nc8 gL;"_0}7oF~|^!]$&jJߏ .Io$ ݪ}NGWG>x{υRɻt@츈s)X&p7ވU$ I3|dq(#R>•Jퟛ1̡iSjݵǎ77+h{d:_wG Ydޟ)wE#[ye ''5]YOTRfi?>. ?.[u{>"~3@F>exMJSrNb8`VN讃8Fs)"USJ8EpՕAI$?ĿuzDx^ω ; !fT Z^ӏ^0hmN} pNby1TDh^Lr~E->_UmF~}DbE3 6b^4h\yPFzMKK`~3կk!mY8YɅzU*ñ3.iOO`|ק'׎EcwZ~Gej?֧.@dBD *@[N+ȅf'Uzyde؂.W6t_fأ٩(,q!9 C jQC T6" C p+;҆5Lo301"<5ͦ½XPLxqU+uƟ D(DB&@F.ɲK%Uף랕}^5X+ʸݔkcм[s\[UxcxW^SM;o|_DBm.,!T:a~P"=S״V[5Y&UP6'Zة6GkXu) ݯ6;gҞnn4֯l';q$9TyDi6 > p2IZQ 2O2v9οFֶ*60m;Q5U̿ #"skLM($7%׎I#FNВE^F usuc5bftɩ?4pKm&7Vb~rW)(LjO֊k5R%A45eL֖ ?kıx?iS'eՉqz5{1>=CY1QTG5N=CTf 7n Y*H6Tcصz$tB=VH^jveS}c?J6:=Ѫun6vר}a:ppWO1-ĴDӆ$ɧh:~ax/ɳ܂Pρ$1D j@ݫ~/t-vx!)uCyPG(lWcB 6$MIZhy;Ykn5hzlځ4QlXr;ny(DO2u*4Hu߰g!qNf. $nj1ej>r['4֢gD wQ>q؁aJpi# PC7RNx*.r`#z^vwyDV;Hd$OR M9%떟$nwr"ޗmMvRއ?_}{х׺%Kcqv!Ejl<6@q_#)2lmإ5'Ŕ<%Me]]6 ct 10 ~ J't(  %,".6CN ^J8va}%,#ilj5:hT$dy'&*#M@љ+d| hY}:]k4GJET10 x&&4>!jŚ߀\q??u{V+KJb(9pzy~vwWз)?/K? v_,\o }+5m_E=e^;[17ƔZ"eN<}|.+8d' )lWQeؒ/wW%(p;nfEHn\gjj 1nH $>l=܁^`=, CW ֧ϕ~ɇ?*<_fVBp?[{?獋׾=첦C 4Uňk߽UA&cÏφ8 `w$c,m5Qy|4X)| eu 9k(E, V؎& V|"J_.t~mr0<̅kƹFa'Bvzw`COs,X\1sHe%bKꖉ3#3YmeKYr+r5?ezT]3N!sw[[? *FdttS^&xCӜ.[ #fVZ#4lVD?N^X6rя)@y}jo #LgD\iN7+H.G#B-ZFS1x71W,S=UֱM%Cyi<ٍj@#x.K{fSUpि6q E䀈TFlȹNb0wO2>T6a,DzcDsYӺC $Ĕ;  4%WU#QkB=yA2 m'I1,8[z670݆fr@o$Hrb^n8WȆZnXjqOc9ܝI؈cuJ=9=7;t][\džTeQoп7~AB:׵M]ԒmJK*ԍ Ŧ5|.unyS5/Ϸ{zppoq}Y^U|GGhhd(t}"$1mk:WB A'gda}6,)rba?xaazWpډ#Z8܉nq [0m9#4-> Oswębq&HtG#lBٛ{uH(3M"ЈL("ggs܎ӟIos oPVt=mUPHWn nߒs"$~nFTl7++ͼ4PZG͍&AeM-FnzD:!|Zl6sh: .Wր>O1xGya=+N778C x}sЗ[.ETG'>kݖ@ LIU.w۽^rILr_@|72Y M@xxQ0=eաv."$x 2^7j?*g|Uolnʌe|_TjԥJ1Ӟ!±Nܿת]3 gfǮJtkcNHBujZPOO-vzϸU:`kxe. ᦮ӵtz Z S}uhAeRڝ}.N^Sx Ai*@nQM0G{A6 q+Tf:dW7>fH/>'~܋& u15GmhKuG 6P\9|KKXs׌u#ɱ)N`rR|w{?rdE"62I?lW^Y<ڠ8n8훫~ڸ^sL]@i*9AqpmH`4_'C +܉T2x}8r?8o.] }:p$h(TڕyX`C4E }Ǒ< .sxӯf*1r+t^c=YUB|4wkL5j-,=9Zyn<Ŀ%-d;)~ { ʇT7`~| ݻzm;{4|\7MրbbRnfG?f}֟eNj*e9^]O{1An Ͳv$N`ȔI;ֳ1 Nq>/5xFIdx&L%2"_OC}v_8Zo ??~)P/lk= 0kS)}n]'?;qm'G#b(-!5#鷺;Mj6{]XMmբ) g֠r&nδKuy; {\n+hoV965o4/] cIlwRM-%;[XT=?z¨'\_B3InTxn1Yzq=w-c,;gر6AP%x=Y0Dg,XyG#%.XfWV/nm`͗F詽yiuֈ B36r28&wةRa&E/еn&SU@7FrOuL2X׃ # aC_cJ^T6>Te /+X><ҙMܴh:dGekS4V.M5Tn-~|WS皻oQcrj e'ڔzUe-tҨωp/`w=Xt}y{tyV(=l7LkDfL,7FmLU.Y# %sqRij ܘַy77 `^̅4(rؕHNE_ՃDweN5$.e\c@Il5%:6NۚTw*YڐE XYٌއƝ5>\ 8jZ:@(,\Y 5~>J`' ׉7 <}7X`]|\3,=`j)sމ<^kA5_XPt"Y'3䵰 {ꭱr|?'Ox h9ec3g^sRidR-85:pwFOBUű"h)M@vUV,-p,^N eẂF֫LTn@ˢy+J:OuuO6qHX{ϯ+̙twvRϵͱ\R`T] ЯY`b#zS9;AIz^VlZ/Z'I!$F}imm@ԋ5oƱ7WCs/rϙd:R ;\W 稣:+2*֋<v i{^ιߣMb-rdD-apkM8uQWGO@tpoW"~}?[Ǎp }G!{ʘqD9Jˀ0`|o /=41`_Ɩq>M~LrIl02K:'ހxIc[."Icc=١Cţ@,t)IrszQΧ ԉ)iĠu~=A;4';xNscƉ 6.+a1C]=F$Asa'τ: )_/>>5 :&#NPvkv___]U]~ [g~?=ϏПxz^_.y$lGgʶn1OS|:k ݷ=ȡV+ h>;QK 4_#1?ZBJZdE T0uwsUVŁgms1ss4R Βw@M'oe484бMV?Es NkHoY[}̚H1,R[.}E6Wx^Dssks ( \}0~ݛԦ spctNޫ@z#L5 i$ 4F62Ϛ.E~mU开w.<DU+ʦ*r^ͻ٧y3PƏ7 ]MwijMĴu_=?Rcvܭ$>P~j.۪sŻfW{l<Xfc@fW+\u jFvͮߠRRĈ`^oFU)Q?Keݡ#A5 B`{gVcDAjIB $"z{kņbi>/nq [>bQ"V8MoxFcc,Ywuyٍ4R[{CstUw3Oẉaw0H5HHf+1!ʗ͞2 im5`4vQlQFY""[U6##6WP}!f1Ї֯|! X`;EU=y8[0k ̏e]]]u{r8=t%ټw} hfO+q;XǕlYIHFܟ\)s_/Np71[sE,ɖCΏ :o Tpb\5:l~is a}sF`.'>f0EqEṖfoɱ@ATy 'Ē +(v)zD'aehI|PHh xjX廵 -EKwkEF `@ꜰ)18a2bA*esJ[JNoՇCؐKUGJKys?dp.޸N W Rz$)oZ/5hoM3gGZ6uc}[,:\וیo=զƁ!c4k!a }i0i؜Ku{̀_n-Ҁv[Hy26j:3%䪸-"TKٵR6sXMj͟[ʏ5 xT :,v̗LYAԗ-t>}ZTu̟68̟:wLI orrxp;>;>ә6{}Wm"Cq {5KF! v{ez@1fCM|;8uF'|(9HF3{_vq_Z=ЉѮNl."r М=5:HY5h"W]MVێlG,Ļ"Lˁ;J4Ƿl$jjd?JGss.^y)KQrH}/m\WqkЏ8mJo6vUqU2qyN0i%Ys@>TR,g-ѠQu#HV65[K]"WnRB=T[DOai&b=gqh1[]arkןE7Zak|$@֚ϴ׵]7! *ÝXNC@X>GDًKm&"iL(yksy/YN V˫ž5P3˾~%cDv2ǚ* 3N{;կ+kBijiF5gt)إN|Ux.2x+DYAe!~nE2y9jxw'9l̃1QǔRSC59>ٟQP]iFz6#.; y.b԰ldjbuU%aLꌸ&Ӓ+YKB/jb<MAE@ONTͩk$Lu \buruܧQ*9ϩxk>:2/R\F%B,md7n]bm1yZ W\MWaws bTd[פf* V{[SZbql7'@C;ƌSW8SiM<cdy2{8:xyӝA='wC9DE VD mY۷l->%5@H>$/4,s}?ñdNP2H:^`}4S3-RsI>粑HN@NK]/X..Dd+o9{Bx+'-LScDݿ~ӀkkOiYBL} @{=}zWu7G/%%jّyKਖ਼[Lo[^m1Ay/V Es@Wb2F s$YUFeTiDܬ>^80LZ:$U qpG׳rđ[Mp0f .j3pQ<]wK[Jh)eCz5M#,Bt=ԗ~]j`wҧ~7Lw*hcon L] ȇC!;8c~UZݽY{**oՑbNLY/Ag‡;6 ̦6.ZYTF3'5E@a$e^/avOt}A(q* %Scgʶ $u>MJs >\a<{<#g<Ҕ rNYiwR5la9EY45È>Rժ}{5]S4417tfN5j)V`48x1I#&U62WYMEcs]l¹fjĂs*YkM-:]Y22:º!P1F2º]i#\ `ydܘCN n05._vNn4JW5Ǎ_!% '0C 87@M('0":<=|+af;}`\u|cYk9@)uJ|Ar[{; $1Vv:}y?2]uYP>xzsz,`dt^ \n1vok`/&}9UóqmW}n/p*hF{DjޗqK@PCO7>#p3guҹiR7=3 =#]dhG*b"t)|o.1۲@PZݮ;3'*]Q>0҂f^?_ F;W\}=jOr#>'9/p* \^PPL#]è\@lؽnRŵ[.mNHUݎ>c 9.㵗@{ւ1N%W(@׵ ɺ9*kyi_|k=VꍥHڑQsO۲j5[=F} LJ6%1b;ܧ c{4^O׆.Kty!}8ó-}̍ga@/i}<(|΀^|o(%@MfoRe1!N0VHWw>KĦx쮠D߭ lC;0}aT' v!z_7Pyϭ Rm[ɨkkD4}*ZӞ\~9՟Rkd.uEZ@DfENAx 92kJnY5U$d+KtZ HHP|4sRlW9Jw!̱.DXC;OLXF^`rVh8P'̙Co--fT\ 0dW9@{ls%yj5A0ͼIRC'^hqMe^sldT7dfLPiVE_>5JU)I e6bC.Sg1k!7U5 m#vvU/nRWV|+ठ0ӳteNb }K4q\8c^ľ͎~^&Sb@Ƭ 97.*BP "1+(^NҐJS6} ynRyUNʊ*eٞm"Rdfp3KטS'P,(I62\1[kZ+ko(kwvu|:5Yח tu|{?ZZayNE\syq=iD^3`QdRJټF=9xLZA$R\ó9,ueWq[Vĸ_uMq{Y6EAt! I _~t$oFn{uWB0^VEck"=c˄>bt==3\.y#r}j|N_}ہov) *m`_yJP.ĘAFOw=/2W!SM}ˑGޭG\ձٹ ߴ%溨6e5J#6GPy.,w){b_< Ê/zjި޷<8$vN=Gt>a^ct'AuqXE,Ӝz@ @w=*qpV'|)cL6>ۇER>iU|3:.Id!<.-]]{K5ncN`z3{|N`ǩ#c: 4sj=m8$?Fy??[8*}/ z?Sx~ǥ6Gas(C-[c|{) x{?- /p?RxaEnBڇ(+?N~URgڧ2Lkޛٛk x{@*l>Ӣܻ[n'WWb1ysdܼ;׆ 8;? i;ؕ6PUge+gCՖ0xG#xK}ʕ=')ZSSW`.@7Kֻ )]U&s(wěus\MDISXw:}Ҽ^=.~:*1jn`_ܼtlmr^w~56K?( Q|xNxUc3rsIGO*UG5~ٙ04tYCԬ-n|p6HOR(Z{ӹnE.5t5eY7as)l&c2&'mQԎedKqeS@-4(T#5ok#dls4 &fsiu1[/LkDJ퓺CKws-2Rrtp"Q+R !pČES]sZmD<2~5n VŒ7` 6L9 2Iq1802;xGuHͪHIw^v@J[*Z:@l&v Df3>.ny>ȑus*FOቆN?h͞  f$0'~,Z2az:o B%RgB^+`j 4Rn;ף-v 42Vyvf RNq",P [8D>Kk'J֕ewHZK8ۚk\ ETOR,9eJR Γ@AM*|1&Q`.>5F+dU{4؞0wkb8&RN ufCN5}Ğo3q|7u x&ЧQ` i`1,DN'4S3'(lDb0Q:7]p'#>ļ;VHTz 3':hy>ȒT|-9&uF#sb%{Üi{uwx7eD͗#G!|n`gg .mo? S~9L{}/jGD~]+(M7Ǭ?9=]`?dFM7 < |z zsb9F-)կ8UI[6DfgaQd]WkzEHހY-bgD6\ʹӢ^N,I.uN_CWp4Sz|&{jrޓ4B*8\ ZMj0ZQ.' CLF=͘!yhXc5$YaǧyP ߠ:? Oa+t~D:ϴ%v~>̇7o3bE,=/,ۂr M3*w*Z59<~n]jH.y|w&lX? <DŽ,N-di8&$d2\i1Ʌ$jyV66,$(hf& oP&_Qtf` j2Z'Y{4=}m:Y67=|g=7X?FH KSBvoWVSuBDW3(v3<\Y [j4*٨ndJe{+.[ʫ#,NK@='(=LiY+ӪFkoYe-V)A(jo^Ec8d{S|'ZMlW'"{C Zєљ$|T-Y+b]&b 'V~9>RN',sB(x)=jx5_6$d^J>ga}DlO EzI0 qg <:eD )f5Fڎ-i1ɑsjVr%u:1>2`PE)imBrɟB-(!HZ`ES*U2y,- IPVCUsdQ;q 8Gw-sɔWx Mp^lؔXo14_/.z E 6fcD!USf\ ܒJ}ޗD |5JMuB8 5QbN*m#+<&X&$bn!n9|b k_mdVzgTK%FEKv|.BگQƏ,2۳yfQW\81XwdNaxB{IK ɮ|$Y[sbpo[s1yi/,WϴaO`PKa.n|,tvnVeEo@tw@tԠ^G JDޝ+!˼2l6ɺHZa5uc.5&kFG>>g]?gRp|$PsJ-֚ګY |keZ?dHu> r:QJ$kַwBb>ƒ;6c}DrS63Drzbtk(:oFhI7i0vhAyZ,,$EJ*Hf?ai=QP7v- sN6~rN~S1 B~ h3ʙ~t#?rȂ#ۺxM{:NOhO Utk8Y!~!z4UsLZst#zs;{qz]~9Pzߗ7CVvQQzo}fm'^cS/?6Qlk3QVأ9ԽX)6Rߛ+ d9')nb?[%WO-A4n PrwTY㇎vvB7t-=f^vâ[NSyn]YY b]iAEa{V'y0"9 _-X$GHo*:V(?Q:oZ =ƵE3{<oJڈQ]i~|m(hYkRb琥7x BfZݫOcgCU7KlDos/) do5K=e~SyĮ T`w 'r>Lt9)_}BKv^bWOd#byL+~hWjX&0k˨}z!V)<0kќ3t´֤0˳2F\*M4r3kH(KE4b촚, 9+Z!9ļJ7N{c x|yQ=9jdR>U9Y\p$ɛqzդ|ZQ∏9XL{ƶ{Jq.rܴl#\uk^ymh5n:+ VǮ4&0g_=\Xj#[Rm\iY|}m}aλ:~lNG+NGRObz3&vXZ7_=PS^kMa/JdcY32Xֹsgx=G>'ߨQŎǔl[ zi^߈覶4}OQkOcWsG(խE u,yc@qwE`_sh%8~L}ļm(j`y >G!D'ꦘ]x >nD&pxi`Y/G#ZLϣO>74@>޸A|P}g˕ֺnl6fJpe]5e/J\]<¤>@fꌦӧi<.UR[rg|r/ nL` ?IXBڪ/>7N9DtK]]QW ٤r˚B7;}̇7BJaztA)Pq"#$S!?N+2l.IFܜvٸ `~\*jjLhskBD6LI VUA\p=a׍Z? zKYq}93&l'i0Pu1t4+tacV!6| 8Lt5q6q4Р+=~OGX~w4~[sgAϧ)@nw>}&fN ghuw'ћR8/Rx{Ǿ^]̏y߼,e]>0}gw?/wpX嗝_5z+|?㜶ww xi7w:o\A$wc lw\+)_l4ӳ4EFScMBcR?sL ‹WK-ޣL*BfdJ+Jط4>3%n giE'IM-|I|׌8Tv4P+ylzBtXA FY:xm abe6(mʣXK<J\c5Ѱ,wq7Q7pِy ~b %~LT=+:pF~֗<'ѿf^6`q1y?5 f~Z.0+(3xH@sPVgHW5UJ?,ғ[Q ȇZ#oDkKh+6Hod 8b!`.kC"gi2j[&g`-T<`7t|i5 e7s>Vp`~,9.О6Vƭ LIjҷo,dd^^Mpo,"B%M >60F Se3_. 9( 넕˙,j**[sΗԅimWQx. 7Ct z Ct*Vlu% LV>xm:s-[x/bDK' bƺFްe. m Gq&=pa-vSŧ_s(yP43T|J[bB^gF̱8MKZNYiC\ V@6 >? >oEƳ(5k6d焄r1%A vSi"{}~Γ+=3zEj;rGa^Gj=JLSy,5vYϱ79|Fwһxcwݣ0Bʢ\qgSx1EDeϥ Wb kToBjvBr=66.I3* +ݣ`l̖B=$0u07ޡ7 )@G(!ien89Ӻxc1繓ה9QqX$IEn/`b#1HBg 8UxNqϝ2k$\ 57ey/?s3W_庯|5%F\-dNO;{OUWWWoqo;&<茻0`tnc,8Os]ku[ހQGMĉ3+ 2xm2HkB-K=fbd 47[Z!ۢ; ~>,ٷ 4 iզA8 H%[ rWX>9ѧn=u&)3\4S}!KE@J|Y'vp!\cL(SW4EGo2mρRshv+;V|ÉN7AC%g]sdCxzؔvǗ}3Yi 2˼ܰ$hPэ}㦢^r>x|;,[' AO_7춌oP1Ds$ۋ{;ԗW杀Q;L$D4 9{6~ј9shX41iļ[:׀c߈x8-q]2}66axƸ(̷w_J߅%?@kW/ _WKIZDogf?􎂽4d~\}@5+ -gQrcgz]aNz%`ޮ>74_W98"ڲxvq+N!Z0G>9CҔA]djEY1?V ېgߪvV#*) b'Ű bjyV7ėYp@2b':A|DF wL:@qy.>w5-ۊV6XT+m gQKLnf}}>nE`X}ǰT0VkN_|5wrt˔}ES-2a񜖼wfdͲ6n`B\v& E撹յis\vq"yBP/~ :0M)N7wިڀjsL27?}5 Х73*ƅV-S uוּuN 45\lQk@A׊ev^{6_uC{IJV |.ye0i]z<7CLWcʥS*[y_E7QlJiSEZi1Dɀ1e[s|(uV=-f& {vw[)".`)Q cVTk'˭w+l}Pr?x5`ͭ|JUXo+9xUYw40aNOSv.F ȯֆ-nd40JERJdKO'k*m72(b,1߱NJCBݟ=+%I+Rex#=Ͳޤ:Kŭ0c`BsΝ& ,c׳l Z"6:F0CT03ڎXyÄ~8 o%}_V7.q$ub3YgU3h\sV/ [3g8`cT,?Ca=}x%okg^D/H|diUJus&\#mA$զOpl)dBւ:jGx8ąF`p:8ٱgV.A.J G 5l}I /C!q`7[k[!q뛎[KEs=΋}͛G橢e[sCLiվ", )Y.N\caMFz?ٽf|A}5 zr;ZN?#|ms&ÿĽ?mazYںoB8Sbq8Jotλ={] :4ωk"3/00A zꠗ3¿^vP(YH&Ufl hoԚc'2> 19&iM9$ZXv凯Ün-r$j\>;X&̜ f%4b+ Q\kNxRg`FNAu_޹6XҌ(nxM%4}FݮÁĝ^lQ=L$ l5g#&BPLv(ctðj먍a'NYl *K]g!{vnora5n}X|鄐>˹-,w[C v$v]dc8gPdVǀ-ڼpz*7H6E;M$?xXz<>ν#טÞ8nw1M(`w6L > ߀_R''~,`K}|~}oeiw=mc??-DxO9Kiyc~Qos;jm#Ɨ彉r0V&)X`zPMHi&_Fs^^M9;B^='٘  \ֹ.= Z^Esvt׸KN nMǰ+>)|V⛩[4>]ss7P>232o.ա>@7pK9nY6 d(((T> Ah ۛ7@ idj7ίPyBr5?6M(݀ad5qfF/mF&~XٟuGח+)&:0"4ם^L>w5}Z9y:iE\tWcG'_,T>ԯiآFICQ)T>ܖ+I_] Hse@7w>ҰK:>-9#%/BLHe}܃,ׅZ{˵:^t/>zks5(F[%͛w޼@qqF̕Wƕk/UQqm 3o8~W b6[CWi3 |pQSJЧ[V5(mQP+1""S>Q!\:PGl[3hƥ+.a/t Qr-clus}RSDCNVէ5fmEˍWJX 0 x9 طk({aܶ+\g1d˦1mHYN Dd.0snJ.{c!?vL@9w1>8!TMm4kf5حe\Wwci5nAsɦ2qv]V:\9-GYKA5~=NE):C -Ҝ^-&J.k67w"Ҧڎvc̪,L.d ]4lUk5L-s<N3w i 5?ckvKs@\aA GQAV]$Vb R5nMb+YDEm+.h89{|jr:2|^uG֚7c(/@X6ǝ; Ω+Ѳ= X:ou[kx?J[GHeb?87EG%Zs [S݅]a 0E $7iQI3!]+E@Gc 2ZOzV\2¾\'5#A ZOFTh|5EI ~<|VMցx fW{|Ü࣐'ta`·`NBn[8w807Q"b ='< qRmY~}Ӛ{D2c aaEs'俾~}~4c_\?їR_A{m`ۯ?vSAX5[IS"KR"5 M2<'k0WhD91t@`ܩP|b587oFլ˛6c";0h3URD@7]6i5Wtܜl}.E-MO75 @fVA YKd*9hniP| 2]nqȶrGDսϜ䱽Kd>~T}1#J"qA_7lS,?}zI6dzsB7]A{=ϗoah6w5/'rYBt1+frS5k0YK4w8~NF6hkB/conm5U\bc lguNK|m*Pf˰S¡~OB6p$>An4 5}*݂%幼(kɼ"tiFl*jszXVmZsV b4ڴOӘv"%+u5QT4ק@L\u/RKYo߫{vn5ߧ.1weeek? S7QIKM"Ff % (K MGQl[KdEkٰ-J8M +;;(|7 "jX!8;|k;*7 K3sr1fVX٫PF%ܯ+h\h~'x8&r@.c7r-ϙx[兣(u]SsgY8f~Q6m? VZeBVߤs\neu`xscW=泟uJ̩9ֱ%РIJSڭ|JpkXk?0cE0񠩊OLīQ} 5#6;(Ro D/ &sa]-i%rR6^Ou@ޘ}tGxNn89~T|ڱ\ T008nZs>>| ؞=tZAq!xc fԐɋ6ϵw#ps^ȌI6buꕎ I1渖ޛ\,'k>Ke__HjMɑvOɦkH,'S{`O.F,.)ۍF:ݖE&id*')Zkb9ȿ$Z<1 ߪ}`UEH[ՌD^|=xZ[su kYFK$ dlR=I lx2MA{\y*k,.$lIfa ;Pdܦ;H2qVїg*rAHb;ڂI;+KIxR*qmkl!"̲>s $TOLڦuSSxF9Ψ^ h:%<١1A^, >?V+Ui%d*De(ɴt6Av8acֳ@")"JnXim8/"ћvIa `Eynͅޖn+0g}ݍD 9"ej#bO9lb{ؿ/@|:瀿nkstى8\'Ц."QWJ>:P8ʛO;w|s>g ?*h$J:q=`hn{1c>߀7Sh|>l^n>({,v>8[_bv 4~y45@R)a5 ޸zt-Ҙ{0 10лLptK {Fл?]NX078MVנWA9 }+I*{ρ?/fRw}4;}O[P/5)wWQfbxr_hmq{9*JbnA&lU~095Qs~2N8 a*@g ' kh8,/:-ιl еFe{f\S«p6- mh#VֵVa{MhB[B9@o\ϟ 0mďl|L0Nnl]C1h.G?MADZ'U&;W7c7y߭PVKKql`Y[Ž [^ot؏f 't|K[s/Kn=uM4YXؘثòes>OQJx5S6ΨXݨEMҟPqysHz8Z7EN1PG[a뱫@ukAH }sr1]XoS 46-UQ bFKԢyLĴoP'k7oM!VXS:@Ӆ!;5G}ࡔ6nDE5%Ce1ML+,:<ޑ燢>#ڐ8f+6"뵦/ #U6y9T% HqÞ#Qsau=;i`#Vx^TK0ƚM/*K8gSYkjO 9VM3)Uޯk$(E60qS}?ʳ4'93yBe6!#u kX^kyvm=o^opT0m( E?^|Ϋj3s91pe&zV5#0E} 5}yǭL7sivUsB7Fןwu(@I$'$rͺ|G7 "YsgYܨFTmyYέeVp |kG,,^{8 `3ex[w!VʅD& LD.lE5,OIfwDGku=ߢ kaZ^ @"'-Ϥ`s)>0밃캐FJuTcN01¢&I䖰N$@ʺYq8싨YIZ" c١DMi8lmiD㋥6 F<3q؈ ֭ŹDKE>WapW!vgB8󨖵px5wлL<|*s'G71'[uXk^p7ߝXh <ݙd"|&Hc>1wU$+cO8XOnl6,pRilڛE1̩iqFAin˿w1QutLx6;LoǶD7cG ] vF{7{$e}N+_?#".mO~N_[ycˮO|h߼}JAr 3(Z5J.{|i /w7uLA3pl>V3@I!~D"4So 広&T+xҼa<Ui+ HXV%K6 ˜M`dž>ml/0uJ_~TdQYI۟E}"˧&qծ}KX-qidw^CJWڍpE*5h,Zs-8I/>qIKf8@ 51?dZW;C%#0@r|HJD../D(!S|8 2e#;N(IXŧ3<<[3"PvmXйek@P4g\Wkr-.YytRX#CP2Q c#)m>ذs,mYb [ D-K$F,&34B#se#8`=ImBTJD.sJEWhe4rƲvQH<\Wr[|a54*n$ٲmlV}칮(s]q?aCs{N,sRb߫O%;:鋒{ؚ@?'mz= XLŠN2|m5.mRI]A9=>C U~< }/)e ォ˙$QeN(j gYK&J(%Q vF7$l+f\WC&m>ز={EŰljut|@peN+˴Wu"x:84AaHTbξ<;q:=9@e91IPXV˚'#睆a䢉m- Ng\Qe(_ֶ1˲pf\5D.P9AFM{|qN!D(KOǒ EӤTSʄ<6"DcjW}~A53 Ko82$_ڳ8?%E<SJGqvgl}.j tF=}OF fx s.$PEIx:ϬIfOkVqD4_ :.^qρGpEdnB4p s:j8|_G3REc:|R;9Z ˹Td)Mf9W ҊpUߧY6Rw]/ן? W9?ڜ3)޾o'8˛'|im9ό럹ZݳxɰҖKmO\՘Jb۶e#.\FKPrnSuUlҢ}&i,n ]FlI>$ո*q1AJڊZ(Z6/&JCTAr|/Ϋۣ$6 xchSJJV+sA6kgfGx˻dHIL>|05Qݘzne7I JC4{BIJi Tf&ՕoΠH6jcZwX)VEmOR*PE@_ +yw%SRI|T(I}k3XC0}_H?D1ʳI4bQKl ngsU^=,.5SبD8+Y&ؾpvJyBg5+)b+Z]2=Zg4`DrH4A J٭Q8^x>D ?˺( *7NZtdcCzҗJ[~tT&e cqѻ_s4?%`Y> cz\5zFͨl6ukut[S5HiQ[dk9]FZCAZEԜ4ЋA0LxC :Y$38'Qmx#z&ľx6 3.(32${d 3N*4iN< B1lػwt^GF mx!\/ט~x޵}r,XW.u__¯_X;E߻ }?zg͏MJMբpV}ߎy|3*>1JF$@eә B33f:J{Ntofy HubZh:Tv_U%7Zįe;U_2jЮ<Q:]*izm$ 0tNQ2<~Jg`:ǃӾ|dm?䘇rZi)5;΃ ny;\N=ryA9-SAy[t3A9cҌ)<$eO.g6ryӁGQƛeKȇ?OtLPx,֮E4 -rKaWy-5\ @U]7Fõ&G{4Qztd>;Kz~A*P@1B^Uǯ'H( C+W]U8A%ri(jӧXBMH"˽B Y.|oDoM9N%aAh\m1fk2ݛDlH8]M J&"->5Tz@ (Wb>f?kl. 8-Y{餡]Jn9 40)  }g[\OuΗ^] 93^os/caƴ*)P GI^\@/j[m}ZDlM} rP%i Fn[߬Ѡj`FTQ*H2}*>'"=kU(PU յ-ܚJlP܌e$J]mɬ;ƈK}, L5d6TP.o< ֲivHN\ԭCMt߀):f(uk,՜<|Cn!82+}ᙹ2Z2vF͑- $n&f1Ƽ *kSI7kCjϲ29 uȦF l̓)E(/$AkATKRϖҀ77y'?1YDY}KR,vչsQcvt:αObTf.;lA]0דµ{w,Nmd'́hƵe ~-sZq O`Gi گ~5Л;4sCs%^CBs®Í!@{akw[ -{< D|bH8Jfc.7f1h}Dvw.VZnɣt 07oD&/汆b@C |`t8I x }9Oނ< VL?Vz?v OTȴEiduxd%W) VyNx̽%xӾ4׻['}{)\6{f{ 9hή`+vkhM3mTQCf#ѭfmj̎ohVѯ[3+`]ǐϊM+*lMgnVQ xSG{6SpWe =N~mo7o'z<[T> ljON!hr'O1iy'kƹ?ږm̄lrV O{}=|]7-͐pLͰkveyϙ#`Dz 1e&pU L'j)Gɵ^ ՛)?kU ԛvV_汜h_mW N+ԝNX'' A6fFQyP-wo@r{̟ݭ+P$u61]Uۖ^G!&Q5W|䆩qfs4n2Yͨ"۳;xTO{G0&mK¡Yc!X/˯ek\ `!Y2qJ|b'ȅLQ1ܣRGa&_u?+g%P?\,e8Q =Qܡ CMIMNⲦM,&&a ldM{HIeQl|F1TYꙧ(muW3=7Uq-cMc% #b|~(+(V63֦<LSP[lFy.޿Tܽ(cnJTY~-65nYL:[f3^s Q»I⯦e?̬ۆ&Z%8<I0{&3V^J&x^Jpzku) s,lapF(@,Ŝ\2 saK=djm_rxSfpWٓ_G{!z^Mz}]0pPޟv ;@qJL\ne6uߪJdrwyaascۏ]= KsQ vfŮD _=2o72ΰht4;.@O ⎧w@^J?ticjvwT 6~BqGۼށ˲[;|v745 p G h)׬È H=[p}[I0d`79wu ݨUSse3[3ݐbrf*-Z gVF" mM 50038%Lph>Þ\/hz25M(VC)2 g60W8-F/$df|`*6NyH$#?VMyf M.jh7fX7r_S%Va6seZz=:Ig>) AGs j1=Uc9 R7XmG姫ѝ{Wڡo>߼7M7 \y,hzArp2y (]6;:QJWDP@{jz|ɸk?vbͭVmsĨME>VF ?dӁyH6oZZcy~"|˵4M݀o"TqyهiƋȏ'`TD0'Qm9RkCŢ:K'j%s]$^O۵uEUrcQ %pE <̉Zc&*D)' L v(dnDnv_g]J*dR2 yxsTI+[ƹVOkLA< GwrQ }񬶅0•&&UZ%D>Ag׆Vtʹr E˽Ry*> POH[QbБ[Df]FMjjJtE}N+_ [ 丧F|oH<Թ*T֓3Z4A@|Eܥ"嚔a`%`q U9> FtMrs^|h`*=F ^kұw5Be>6u^SZf]>C]>Eis`dbw>b||?`SIFpv:_ݺxGh { 8m E8UL :}fHՄJMVcu++P5bT|,.}IV=fIuujHF@1yܛi+-kԄG{|DmikXAAIqzKxr" TtMb:Ue$ݬ#`nVEz7?P죀1a o t1@Gg}|"iJ'U[ocF(F~,Ο$g&41.KR Pd 6-ei !Wj*N!nҴǀQ#Kޫ{\`ª3U6E. LF $Wu< aڲd{8 6d(\jAcSlrnWN+V(֪bKjĕ ._Hn+-Cɮވob'h=Eyl@Gw7PJ%Iڽ Ĩd6t\K.6MbԔ6SmuM/ |gڰxSM"Q˘n-{ * nuÜV~YW5ƶtH8T5aCpa۹)i-ZCRBE6 b-/kqU/BBT Bѹ+ީ5|ztsXzim 'k|UX*gTfEeC]Qݪ;" , ZQDK1;vTTYi幑+U{ It}!'ܓ$7k/㜅Is|v p=)ƣ} 46 ?OlJfBduFϸpʑCU?5 b`w^nCn`awc3pd(p Qa_-CZ/K ߋj-u!Uh 1]K ޚUe+~TR~Vސ|AZLe^f淖}Vl&B* (VP|t7%tGI_&ԈrU{x΋۹+3 ۾8ϑfjdBd=Es;3֞=LOQʟԁ}iZ7V1.@<6 tk@pu5.o ('0Uqh;` <Fpi Rz46AbD Fi;6,v܄ݔp;HFd$N]U2¯ag|^6.*r#n?v }|O=7xl?qS~s{vY+q!{y=4X7cp)- o3fLZNKl<[׆ 4 ̪(WS!vn7xR4HfZ*EdkJ[e\GT0 7Ldjnbښh7PgF6jb7Pxi0IiMq6d(}'olj@Dbeo}.+X?sּozӪK~{sYi'ik1s%̥.oF<󢧪;ϡ{^+Cu]_(io73L>@ ܍/ jofya Kt,v3U)Y}*t%v,2#_״Oro*U=4ն>gTE6CyyΎ|ķ 6Oֲ//DS 7 lP[bwqX n,B۫Bs*κ}iPcm7qa)cJuˌ^jP5,\ ,PR[ͫj87Ѿ& 8cF` kx3ؽ񎕌6ZPsDh*QD ([Mߧ]\`OkŲ[}mQYh.GW@*D DfJ@Ux|AȡJ $7VfD7kxRBb+S{(qH-{ / VյL#MqK[R^#<^-,v38r2~XEe^,sQg'4Ub<^]oM=]R2716Q~d;onQi*Jʑ=nMQB NM׫)c"W92Mi>wtrwYnq+"O F;MspD|"$Dv|[k ĩôpdJ]+^*~kȥ֗RpEBun*XC7D #v%[.$'B\9YJQwl5a826|ܬ@wCyuW_h|b=[c {t׆g'qO1J[IPUFD4:fD3dՍ+xD^}b+ eN2A ʲѳ֣U)[xƴdqC_S :SKwﲖ \zQL%N?To\ )w%_+Skyx!'Hm^T'Q_la<0mltCl): E4r_zI(vȁ%ٞ|MiE@㖑JyQї 2DI y#[u> YfBѤe?/滪F *㦢P lxUZV;K\NM.DTNJ/Hᩲ\.Yfֈ $YcT 6cxvN`a6;>Da-ɜWN@ZX)7. ŨyR;ΉaHP!- LXJcaSz@uΝ@s|U_{|mX} wA0Lm5)rZac(IF1`.'U:ٚ4>ܚQ֥n8<9ލX=hx>oOSv+#k{c NJCmYTW.*gAKU@znj3N_W YOpaq@{m\֦j9a]} [)@]si3Ek}m6VHp-` 5 M0iJGf3OtjXnT4~J}w\dJ~ofn+Y0+fG& koDF\76O'T+X^]AMMzo_|~cvpLQ^K[V=BK}O`cɡ5EMӞJ+m9YV1ځJwp(,JZVŪ&@Z.~T/h̆`|ECrkm]Rڶff}&W©N|>A>uU=`$8X,nfr27ˀ{( vRfu1ͳ"!\{'kHms :Q'{|I6N5Tu,Z ['~ʺ +-%Tњ\B]Vxf:Vj98a6K--s)M˒eL*Z&XI0gs <܎*<*s כnQ ˚,#,-$w)ֽ)Ԝ/Ne.h_Z^& rm.I-)<}ZH ww 1Gy4JU+_YsJ^ƥy u$b8bq.Z2Ӄw2*޺\F" 4t30.oۛ99`1qb秩RlE<]pAJW6ʲoS{!(֍)Q/mJ፼K2hۮM Fז6>fR4;3qݟN.icJ.B qXGh6w,>KEO8G/{U~X{z sW}}(h6#|xe-c)逎v+k/iynf-ށ:y*}|{Q6{6v_%<ڂA||1grEx!7op[fۻsZeoZG>=-e֙8_9*{է}<:,M5~c.2!NW/䞗N& JLV_,?ZjQګ쥡x/s3npͪFnWZsYsQ/ӫ-kEj}-z/VJpO|]n%}_eeT~8UKkôOcuyj>,avCZrW1V] *l3X557*J4W \W k2kM JQ$lC#.F+|lT *fMfTz:z\PDدoUskTLisjM/Uq_D}B8Ĝ'vk@[ױ/3ZvVԿs߇4?a~Gԁ76]:kcW?c2RTTץI5JbA%-ME^)^ƥ]#Bj_ŸLs.6[":E̫XӴh)h;%篕U5&]k"EthfF\@ 8)Z]=MpY66bA!(L?Og~гMj/}cy꫊c$X70Iߙo_yc^rI2uO@pLi{D2z{}>gv_sz}z3 nM2-fgp@#d Pd? <:0\ZORC/4}Sy?:2Z{`Wkp;s<81k?,N <>>k$N'=:BiuZ5p")tcZ<_KPw7MmNwBK(1mĶ gZd tw[8ێe%tVFWJ-%KlD8Ԝc8h L|oМL:` #e ~EQdrq9>.g46=lX-C$t>>}j~;-eTH#bvhrDJ}{8- 8ԇ+8r]ޞ[鯾 P߷=d ;:̉,VIO x|:  +h8O}ts>__ _g@G{W?ǧXz G3jU}uJ7X)#\ M Ŧm<#AoφB>s3I( >Ld=nW"_fɔJ^w-w&}  _z-(3ʡz`Kv*6Pn,E^m'sqڗE|Z&6%X<0m2s`O8<7 ԖU@߶jA#%G|ͯp{+ Чl์\58 Ur]} xU~,gf6j{|87P2X`Bpbl%\D쯪dyI@}mB?ߵ}@Z\߹v ҅uyhU6UެUۜgb}ɪKlleWUߒLKB xN, K q'J}kWN7C[Cu5W*o߿RB|j@f.w}}&Ujj۲§ce?nYR E?f?s[G9~ZxbFm]y [fWQ",,*kfmԊCzl6.h-9a>v7XՈۚz2; 1!SôMeBtbWqAvOACK=rdXyLdy]SCHV{K0_w-1/ ^}u0YAXK=qI-.׵|3p /~-r3V->f(R<=+HҼGVQ|\wf^Օk|X$>R̋%@bwj$#}ckv)Ǣ^p27щ\6*Z:5禉R}\QZvVav7㉤HB[j ̀arN#w{/4i-ut},u>y'N`ugrD$u @|G^<3h/(x Vzb/ӽoqӭX%% m xPQi7? syZu@Cb&KŽQG1kP`gn7j3].2w_K11lr}\se~a^ǽk?yq{`=䃀wWuG')ϩ~ ?_ S'~OjT'{ʚ=+rD,,̩;-sQ5όu^wԌ EgFx(RJ%U;eZu`jlnا9u4j44也+}^qr=A wS+y*w&S?YUq,2߫҆ [XvM77 9ڟWIm4lOs\n',ݽ2X(ip37$`sqo4ުf`:e*(ސ;5$`gߍ1Jmלs[Mz5}+mu^|#;\-=禜Y:5 IVbB֣&T˱0 Kv`w{Cg0ubu)τP[d_zW`♯[2<8K;fIL~gI:bRq_6-4_OfO+k;eI|Q5'΍q:%_ִ5P&_ao9 #sצ cnqi`9ewz 8 5+HQDcge!F E^OPG &Xd͙Ȉ1&1"f`Y? 1YY%ƥ.,C k(3IT<xK@M):{:󫊫'_[U8]:^WyjzP%h!]%0ݟ<$9r4/Vr;X?ÃY;vJZK !OF'ԼW_8|;'ek֡ryNuw.gu v*GwŤ^O@N@p_fp oI;X/bަjcvXXi&vf[4rGX"{~Bi|tyN)gAaGk$&:rl-H2.+́d{͕2TOrCNWm^ʌ#<[{HMj#םcdiԐm`V熮h /Ov,6cM^>ݲ* 8/IA0v(kOld!c|E,/mq>@=K zq> 3_&xtQ>&*6b&|*NmliHzb  ?fk8Y֊tj`}_h.C@{θ; Tj'<loz5d X˯hvlޤfmnimKCP< 8D `gI'{ KkȄ2MMAmY>Ǡ5"1 (F#>sGrTXwϩBF0߯LO㪩yFє,qR?p[}掦5G + :,#_}>mt"(lBzgpfM96@[齢*-lr/%x,0u>czG ꝁ U`# l@тRbCVe4PZ)iTלn*+6%7llJ,*`nG '~%>w }XnKӇ9ng0͍%ss}]pXxG? 0? |'`D1:Y~Nl5Jz'hx ' Z tJpn1-zl"P2K!C\^^RY(Utx8_̌uH=U.znx҄2㿙kppfoy$` {OrݥsΠ>MN@uٹ!<ӚKݖ y"U :`_@D%'k'1^G$yN[q_>ƿI$clpwJOu[/}od^'ɒ9Ľ-LW|V^SEeudhz)d= _+E5|| Wإjv]S*l0\ |f_I%u MOWmtYo ɖ 7%[*w:7㞤9M`Fc'<%3c";nVn5RK %!Qv_֙<݂jdY. oJGIX[H.eZߚ<,8ʌFEKdg!/AuUӞL븪hoxx]NyHvh}UV3Oj7mYg&bYxUX;ـNj"m0o𮚱 Tg$N2UAs^(i{[( 1BIe%Ī}%u% L~oxHae4e:3jbcܸ0n \ DjVcR\Y+U?ϖ\%`eF 0h߿DL1M31=cq2 ^Mh9-4Ng@$37NU e=`5h~U' ~Ξ E]GZ[Ӛp[熬B]ŸsXP&&=X;:cmi9lnQ)F9rA`B}TZD,Mp{X#=?.g"2j-Vs7[c` N Mu #1pA|e=z6ܔw )}F0QkTy*Vka{ۏ 9g-q4{r.Vv\/7:m?Ƹ7m`QxpN:3_ϖ7gp7֛MIBՒ`TezZ=WTM¼$](@=Tв<[aQ(={8i=h!f{Lk|՟5OE sh7]z ;BK,Kλ.N &gi~O%{GM<`s[1%:d%1b2ה0Q .%~W2qN 8Y~RW/B0z'n2m:"Vv Id;3/=1Ɉ ; 4:.)de4tx4y^g2LݣY'M^2^<ԲLeL8Pg/@ků(cMr .,S歠YCx~Y },eg\I uCY] TiCKk}HT5 Vei*H,ԏhd kGU29|jjh {dAdKc6yTS(KrȥsLQr#s3V,f= cr(NXƻ:\cEΎi6]G*4* 䋺l0ٴd"U9Y{ڿS&HMDiWrk6\ Τq_}wgJ_w9/xMט&C6>bJ([TrO[MoE%0 !7FmG$Pʫ 6w5:_ rlm3c!-%k`WS?&E| (.eW֠r ҆*F =U|oe}yˢp`%Ewl0gsS8ח=@ci X;;0L3kXH`@&KG "#:Z& UF}l=5c:b07XK͌%ģYGk7,WXTS31onl*KPT}YFBZYvo'ޟZgcy_LCDaZtӯX=5sBbE倏'?%nx>YwIeh#N{gM@ T% 勲 hջ-z^dFJDoxy0LL/G% {3Ig>d8uOe(r6]?vKr Ol]*'Gا?P,8oa6<)7t:+Ɋyw&._@ TBesF561(t6[zGbd oW"MN2OK}`0IB'Ӂ%> )NL6OzY`XfVa+ob2CzdsK AM. V/!hjC.BSBĦVu. ՟^$"ҹw.G,a5R {_4N_ I9Ai͍m`uNМJR ppչq&&T2/]o.4vf {5oJ4>l ljc;gK`^89>_EΟ$7YPh # Mn'X}QGo@00t(t6;:]1vffù.Θ:73E8Yy.""]-kWX ķ%ݫЙM /2!Sه i`6vLsZrJd6h5f~I1 j:]w[8v3HV] 049-˩SBk]%*oQӈQ ]5!fCZYf%m \ap -Q=ÖzZ ڴ&`C5}}'¾U'j&5Lcqcq/sYkD>Tb?tZ/u^Kjja?`r/"z–4l`{nŁ}aB'Ƨng9 XkE5HāRMM vs#G%s^顆z&%c|6ͩ{J(-ݳ߇}!{n'1ɁբrsH)-VF,wlZ@b/C9 㦸qIB%D|h͞S,hŧD>Xjh޶9xb1y^{B?@_}]V@i~]tۍ~ <MŚM[#؎zGVI"@F* Yy ms I!"ƐҰ}ZӍ&\"d6Ҡ7ǰ2KxC1y>9k)Yy`nRMĝM7Ci[rZsscYIGW)4 ),1Ge4UHGr^F8x|'6 &c~k_gA `4v8\A~Z!˚[ *cnkv¶&mQ`kd`3L \;Cٖ{)uj/fdbp//tY"V e u@:rq"kͽw$RG~OD+]us3h]4X۴''̞ 8O|2c3Upb  7k1 7;TdAܻO&}tv{$4j oեb91[gL:%JfE;hJa(m5KUwl;K$<\=Q8I.EMkD¯ز5yѶ#6'uŬ+bPcPoEK@hXeOrt'VվGwO7Z tcT\Jי2 N{gK_:hYO邹01S${۞Zb95?7mhxSx_1/WVy^[tQrL̕׼uPk(UF_q'c|LNPtRTG(d^ '=Mlϐ9uis9SzO*yl1 b,#8Nm۝Sg9%f;`ui oFf$'IwKG_n.Xazk@ZK^{=;2KFSg9+ FEW,&,w#17D60kxrZRڲ(-K:uc45zI{-=s3uJ*C⼫E^Vv"l5s: 7w2֔"#oMk7$y"\WyXp/Kch6Fz>Qn ' TK+XԎ!{LI6p*^qu͕d٦.6xŀOnG^MP@BfÂ-b}-)l蘚R@EÁw.A%NF{ՍtB-ݰAj5\A  U6'ӒW՘ݘ~I.Jτ&Ϯv]Osvx~;o(Gu~ݟ'upz5fz?]~bhI(Eׅ흊0f׉~fuKAIFV&qP&&x'.F0Ct{GD A­.m^~#r'ы3~_"+tQ m籥C{} +<_3`*c3P^uCpM.Z)Ϯ/M[ϪSzMaI$W󠚼AP3X<.jpPzËh4|=aw7'?p}-]QɋS:P?j2%m.7_$k/P!Q( &=E3H$w˘ݯtI>MzR]"V?eYsû)ۂ=3㯚ĶiI⼾FNL#&{@ݽool{ZE)QCdE2b_s}+aY.[ːA4$FyNѹ)IU#O@4ې%9bdN`D_po^)G͟McAQ\JU]c/E~ ~osC WY:Of\n Lץy ݩ++`V/Nj50z!紊kc%tɬ8?')րl(t$$wjPgWbĈmQTc87 {z`;/B @諌nhJvŀ5v4UxyUW6mCgП/^s߿3]o^m+yҬw ؍>k#ϻ32G@ zKbE r;3s%7yuEZ=UF.{.gT(ɛ{H%"{B*PQ]m Ft:ecu|g/:=*U`t@-l!y=sܺt0ؔ4(Ϧ:ZsA(VhUR~AOƯK논^hW`6\wQ RvNT\ O7_m6e t#g'jY.3@yﭔ=,؇m;c(a*ޝsX|g^GSϴx0/̽<g jmkX$>(= i7@:|C@U=9*eh9^6^U"_┆EMUo@ C:؇S\#+*e=Iȷ뽀 w:$<]X4ѧ}ZIU/l `D2ۚ y'~ba՞%F4j*<7z=txrtpz^:"ofdİ]-=7+w5vVXcsDQ\9~G Y c>=)KqdlUGs@xvg3lPR׉͂(Rp2N\ep d_*\<3O),ʔ627k'< 5E P: -%:LsuPAg,Tg9Jh= dJ4$ E W8N'l@zm5/-70 J8{gςp41=ٛRɹK,1|. )M``4Ɠ|'{fR3Ƶt?O+ @OfĪu^II|OR?6W,~$c; \.y{ϵ6nj$=#Oy dIҗ~5ACŤ7c(}==œD4sc2}`yZep0jثyˍu_ @L\})s`RYݭw!)AT+YbSU/yB{5q41Տ&jenv=Yq/8DG>e`41{O iu%)qKv+E3Ow+_ռ43 /h"b'x"{P&VhaW czp0O{~fuM/\z,pNS|s05/ذɟ~C<ܺd#  VmJ^ 2Mr`6hʣ@AM74yyO&9oYc:T^8 V%f^.Of r4,Ar6zl6DyV`"ඏ1ۥ A_;?}7_{ƿ_x9$?t?_Gi|}i_N|ݿU;s]|~'/ \EE<'R':kМ9 lķ',MF*<S;, 䜽? f4V :` y4XFBY h,`t&~1m=Ns$=){Ɩٺ $ևluIw'rp_u 8/H .Dk*y@|rij'y;kĘ7Hkb󺤹a`~ $Ec%:-Խ5Ki$e3,qF{^lchi|},м6%lN);_R%!NX'NTP}*x󱥼1<3/DJ F'N(lderyEUsz$y4L[Qq2ƪ͚\9O4XLkcF4+\.-Ѵ0 ejҘu%AyS'ջx,b$18r\41+%1i&B=n~ R0J nvJXt }O]n~r;D^-/:9LF2z"ʩs>ysޞs;{|88I=o4r O5)L^(ވ\Xb̻d`.ϟW}Pca-&q1yRP8KsגwԜL^PK}]ƕIAkkX %~Iƛ]IsD~ EC0-]L-d #LqE{ѕ 8YihKfcm caqM$%[ސUµ $+ؓ!:Ǟ]1#T+tX4P*Dlޑi_h d ثz^|6o T &V p]X]S}$ %E͡Vvv4W̷/׊ms0-A,.북Ja EE12;⛫,H:l!/԰mK;uX-YDg#>o%ݠG.) 0y}/I@Z$[)ek-C)Yyf˥1J9א;h9fKnyT_W eOxX9S6l"y'.IDiZl$]:*[:W%Tg;tUTN̑ eCO%.QBa0C=77G@[ΆO@\ف,^)h-M.x-i 3_v9<-Ք\z^j1f!{Uz8el(tG{!TWH|]09lZkZJ )tj2/p?F#Ú~'>坓W<~']{5ʇw`,hƧώo)\}"8ΐwEgLL=>&tX=3#=a-R%0UjfM <勱L嚴YOrV0yAE,Q\Wu;0,GOTyvmxNmS#X̯ /̯LiQj79>ztH|}]M[IR[Wn[ 68/WLhJnUZHs5h}_W@h>\`ʬs\z~_3D^֯sh= ލ,GH6ETm}h\n&.>U䝸Oπ4vi~nòo1ِ|1E2͊1nPݮ˘7VLȸ~].I j0걪Si\{X8a<瞊qz^2޺`W[mqȻ,+NO@X'9u"K?' /P=S1{RKpM=sa&S@:2zx'b,iFQH() )cc!NLaIm;?܉A\`HL^mߓysmwcxˑ # kח9"ihHtCG:~Ru.l:'krK  om:QJ4 åa w$\*شx]eF3S}x2ee|.ڇռY7wM Hg9gJƮ{Ɨ zviU|w<"rhF\]*g=g9z+46/k.uLItrz}_kRi뽫H3,'uB1i]A( R>I$)´֟/MtѹH6y s_7ާ}sZ u]}= }\U3HL|7:gK>l j,Zc+==Ѷ ƚ\ b3sk (Ŵ@hz I,4]km?ZFRt;@QQPS{ϧ5hkW[$W[pQE^ʢ5 7;^,-MTx:Sh~tv}׭q)+ɂ(.h|P;%2,eMle;MiYʨ jAgNy1-@ :#'8[ٗyg\ X%|kZL{ֵ97Z^6Le?jZ|.{<}Ğ0Jftx/LT^L- 8MD 4fˌgaZ4yxwe/JǢDk Uŋ T/mĽJ4+soK.1Dv\U,I}3vkĈb ¨z +ވ% ()Fq)hC+AvisbGʗEHwxm`l^r!gSr[s4h6f=JR9XjhL0 As8Y AZ^8d,gJ;MtiY֐nE1 ̩E_['&3Ml`8C$g<!^[OrAK񺇾IBci= ]/_nOq\$wn8箆 M;\lI?uym o$Iɉ"3ѹp3חϣ-J^'%gRb%Rc7 A7ikHRQfsG:UΠ `E7/"V+PjQ+Ll`ٍ=Aq 苯e|8+J-I|"7,1ܞj!9.Uo96Ѕ09Э~X="uf`.8I"osfyݡś%(fXdVau,^Yكf~~y6 W`Ҽz,|̏u%>2#Sg`.9-_w{ uL"~IR>Fs7z5/ty0-FYyJc.dMym.Ja֐.;8+\e&DgշGnuu6V %ozq_4ukD'ֻMAQ+_R)H#}ӕA_<6:Й\le.9oc=B|։.EZ6R}XC] R?`e7cu-Ԫo碛B{ZAlUCABë;T%_kω_|nԉ㱳.t0gyx^#x'ޟޟ+WHoa-Rc-e\j: Rc2IGvūwhG]jL^^Q0`RP*8.8M.^_ba&0@R81"fC^PWW뷮`HE)=Yr{el)< x>g:POHYn% u C'O>*OfxϥK{#.jc$)]6ł]&oDHnR$Y7_9C:3A9γ=@^Ttv;H@BP1NCzb9$S<6 Q4&~Mg s_}UɁx*5<1fnwB ,E^ߟȭO+ԴFo:_O Da6r\.M2'"-Z\{z]4#"#&ii-@0=g(?uOsΙz? BT.$s5ysKJS$`2b?:-'اKOd=|{bk!{ϫ]t`\XDҥ;j03ǥkE'w\LHBXTcq"[~n|6.5).0P>ݣ2kt2HLՄxrvpQDC%n [bߪ[ndܸ_A7cVEFD'є3LFVsUA(b{; P?c-ixlf}xmeA0Lva:Hnj>%EjQ8h z\[NyVbqL%.VldM*r [DJ'rb{S%\DzmX4\l5'*kӟ$ r/S sN{(HӞx̏;)',%jI[gUR'둶Eʓ6w,*㙄4ˌWm(BUW`~ՙ\ 7L1v`CE{IZv,l6AȚ @\^YLrQI ۖd?qnxGڞL7GeDg;1Ws4RFSeZ{NФrق`Ģ\q;X_~X.UT$pIRyR ]flߦ&BHe#TS 5o_{ @ܛ{6ΝlЛq|uw e +i~DN=Kl.;2Mn BdW\*9)$YɟmԸ×^)g$8# Xz_yEq+qbg7/WHGeԽT L,~%!2}nLmc9._}siG> a2懁*"I<%3]f80T6AZۙ TSy'B^]dK'ArhG@lk/*$,23=5ő̐Ves^g2MxW6|bWEv]…ƒGysGtt Yu.Es1=NELE]JfZV?EBl3P1ċjsA!Lɚc0$/WjXW~gmHҚUs,Y{.0gB+V%uK/#<~OJSa2F\Y`4aSqtv"EI UC !Y740q `:c<_U<6 @W:֖';0_`I1PqLMV,te.I!2g.<>^IR{h=>y&Fs$(sx+ Н$$YrKSD*-5 mq^ d)t$%E ΟwA3T/XV{Xӯz'vK<>qkE8$b^i>0Һ&N4J`{<6%jٽZ^L M6r6I#1eSY.ZǯimWH.eNS+rFJFNSx4˽9,CSh{MsMҖ|$kN̠cq?TƚNY/Q 0 F8]LDCoNV(^B^-f%3F`m~Zg=q_]*c^_obLhsR4U~+}]k901UG ;ƳFhXO]$Gq@ui||ZT?TlF<ۺNu*GzL=:ђzMiCBpyt}/<;| |jPW̹b4SV۶}G56W0|"0DV{Iqo\qPn@Ѱ K#xĵi&2E-$B@7ʔM,B>mZ¯[qP 'j oNy]ہGRĐ<@!fPq澳Cu{v3Pw?/ߍ-z-/x<GݮU^^<.Jso]}^lTj?S\;wI;G?~p?I:$]N_O9h.ڕNTۢиq*2o$I;XK=?7@%w[I~q. ^?{zgszwS)t/ #Wbi{tI"h$/6u=== . r{B>O$R[d8ؼ*&s9o=N`Fgiљih`ǥYpyEi+ۖz`VJ2aϩ& TzfHun[丱ȬjI~G\2 $#[G=Y=Ua07^,06}n`vw.ʦaIb<e0n;Y6Ï(S8'LRHҲ1SkrŹw E~uA 2{w1+F󜿸px8YS0xEMQ$Hc%HAlqÒjJmbd٥Yș-(C~R 6֊.puL9xpiVA}r= V#""Nu<$N-O,%FA$5VE]pw첍l^N? ʴY7?/dO9KȥTʖ{]s>jtpH*ƶ8dcQ >Ԅ}C\[6u4$pȍ> 9#"L Uvn&&2qsGCuJǴ&%5yC_ݾFSqv[TOӾwo hPk ʤ%sBUyUh֥pXn`_7R6{Rr*-=՚n_Zp/[/_qY-Wnb<Α{<%wY) jb.+!E%*6(sŘ mWY{8q0S^yo6mD/GBIy`q]OanqJbi)V= z0OnK[&L%ρ?(Y2.;8uOr(ՋojL)C؂3SD>t /G]ݻqdA#Kb x<(.5ΗlJݯ\ (;sUYݙ|i.Pyd^%WsSWHEh~J R64$%z&m{lT@2jGpy~)3FYX$  0 pj'84ݩ.Q \_vyy溜xphQWl(=Ǿ#(*O`A]hchqك 2ZBc&^Ĺx+diPAdwTOvџ93Լig*Dy3s0r~Ɏ;CUlH^Jp kIsWͩg;:y$& g[(8.u%5onhK. ^g1H1" >_A',ïw{BLs?Ad!%3M%ԩ^ht*>xtn ^Z1̢)ʶ3fB]f`IA09A(;u( }WBb>'&@ (FZihZߠ )@vŽuLứ %%TR^ҫ6ɽJ'l%2rE6/dۿӎ|]g=MVQG:S] %Jȑ4d~="T/Զs AA l'#=4jU|GW4rC.xg\쿓'Lp`LJW8ϚjM扲{>697 )^N|.̷%8z"5G!̜|[-.{V=dSW/ʬpa%<0-cqR bN+8Wu|'pBkEy4IT&B 2#kGd5$9?T\)__QP7fT{g+[䣂 cK'ok(k͊zĞ:h)68c/řyC!_pŔa ]=G~k\|2O)|*(4JEꬨ#1(¼4p+-20Pi%V֪HR/kq|{Ltz硾d6[]0y1dk9 @tbKav[ۦaZe^TVe{CpW sXnO9bN!ȁ U?Qo1* 3HO [ 5Pcbɍ<3y. `o {Ů8sCuLYLj4`~x @5}nCqJE9 /@}kAIKWkܲ}f:w}uxBX!F9PZf7[5E0:AJTy7zžc s0^K ƠNkm$@ 49S\d+o<`Ku9KV);is-_IPw\K K:zP)scV~uQ9ƚXk<,\n4`$ID5zVr{T?,nv8yg; @-*a_#TG;XL|ϺZ=* [⬆7ިytOyKYP{XP 5O ipϓJ.=0l}os]sYLc>vT|{ї/_wϸ̝HL >2`]L{U.~#u((Xԛ sBv7d2j3T~{+V\8aӾYչ\p"w.ȅ?icU<6> K;ޛǽMm#+.oZ5F }u$`@ H|9%99mDI<溤yxm쀵꽱k _JG8O#Z[mF˜(/8f^ "kQZdWok'bÀE4WټapVc,5Ig`l9\z,HyIyj2h) pV 6&9HeWG @3YO~1DWci(7A=Z8L.hz9Pﱘ& :Om+ec[3+͍#l,B$b}=___A >gV $l]!u cyWsei^ěZ3m"\Wq*4A4QBuWA%]ƲpDŝ317Ah–̥Νq 4)rJoRkn={[Œ)H)#=́jK7Ri5J(~ O)}Xʜ‚aJh`Hm2WTsu720ڰۿє/j{5 V"cg2p&Lv5QɁ77@ќ Ho@=ozV$8 >O/x  =YeGZS?g Gf4IڡX7^1mҦ7TXQYWj mݟ ،uqM (V&LLei *CGu)9o}% v yCOY8״ߍa ݀;o&{ k2+ෳjF}tjgZ 7&5Y˻YGۙJ 1Q0oWܣ0 E]gxhA4*,4 an)z=?:vM1dA=t&oog$ -&we1?9K@>z-Q}g-JMf*c Wt[[dXN:DA4a|:Β9 &w/di*4x㹥yg|KVyY&|-uʡK /u>V]Kf 'V EȜ~laWߓ*+ D1osrڸtbu}Z4Sdx2+Si >O|&4мv=]j bxA'?JyppYҊ` )L0MU[00+C؂w6 hGFCΖX `owMf oQ @ok_kT|S adB[_SG}RIu\4iUPcz~Bk%&7,{^ΡC"JR?5P%VN{u9ia;# [c>c51{*<)O} fƾc ϧ4;6 -_mgR›סּ"[Mi j 8q\ߺo9 YQ`R' } >h^VFF뵭CE_Pa~ Iby5o(P\϶>0,A[AN^(%c)&/bSN\m+21>f[BNqkwZPQwk#OR%|g M̃MAnb6rb]qPÜCA8a!\ u%9^ch aVDP?&,o $~Xj^1 ~zxweS <]z?ێtϧAǼi 9)HYMf0_x-Y֡ >@Trö~}zSF];@6걈@Oxf I]St\ћ7u%"J \i:NP;]נ/:Tk`˦7FT3Gni@MLg)q{"eRoi`jT]0xlV8㳤V=zټoVQ\?{[;;l߂P &(|$Lt H6ǧ{ӦZM|}%2T/T}Ǟ-mG;;SM0$+a8XH8=[I| J"s н[(1&yF&rYsx]ſ#A#2d\~g#cn.Y BNcF%EI=yWݡ@'||y 6ߧ92V E9/V2 Cs0ScZQn7?=0н:˼Mٸ6yZt^;n}gdCXꞣve |3y1ț6d|c;& %2R1.*enu^$b_<V6{]{rufh?c5]r_7ub<)hI`@}Kք ]fwlLQjȠ$tU)%:ً4 !ʁmN!RZި"38<6^1,]^VJ8h y흽xi[GP yP2BP$^mjQs`c!ǰf.* k7QgYK^/[xC₆&9ǵ{loppFj,1*hϳ^S(ˮ"<%zs .rs>;I:0QROއYUv޾{qTF7fdO_{[gdG[b71DaN`Z@{}{3 LNWۥz7*tyzBn_y8+[efxZͿFSf2?*|,cM}Lj#Td5аy挍>%r0X,qfyME1X F6F=[X̢:42 u ڟ7sYY2C☠ԷdVjܤܦF}2> ,Q𐨉o.h>=P&( Y&zH=mP@H1<7Vy@2xɏ_@?܏ED-3n:F_kc8$`70,o4lGZ~?_O zwezӓQ;޿'?1&̓ׯug;{0A R.`r5 h*x-N7ң+ί~Y_0W7m~uqkpJ6&Eua-@x{L֑= CҼ{`Y`:/ siն;{S tH≢L{,K9eRӹߛ'(MiMԹK>] nR=oEQ6~붹}F5lkokpJs{{xr{fڄLX,:v+5eT'ոuc_o!l e\É]2ze9N@l5),ωz^Bk`NwwƉ I$0h/ɛFꐈ2_KWpcw_oqfbs=V,iB~[4k!O8&Á&<4GS`^#3< NoKhY MDS/lV$*НG@+pJ/ <^O5"^ 1)-(j,l8Љ+\dl5*'c\0RUq ,oV+K;NgqOJ UYZ@Z(+ ditbǑJͯGqv5r 쀛ҕfVj()]Ѻ5)|^(gωt31KuިDO} f I#Z|#=xǯjQJ.Snj9_)oP/9dB9^R8#:|oTqDXIU t})˖rK`QsuZ G8^^]sXGyהbI.RњNgȖ1GcX24| ujCqE?b_mZ 6)Oy Yw"0nXZ[=\u.72'4ƨϞ [=FS0uW-$kLӔ5wQΝC.4ZpRZ#*}[ZlO荗lEDЩ; og8uTXC[sm,if4> e}4ku1'ȏԤv? ӱIC)gA+7 }W+!yP!C SsQV~SBp!-a-(AJUl -nA>RgtIutc66ÅrV>O_ĹoƖ a?~7Dl6`://#f쾪Пxv'|'GJkUs}RF<4~јOEX3=/v%T;yfP)^\*I51ǟ1\\CXEE|0oy'' Iu1³,\ʷ8DÃUR`yO/ 4)H, rt;-Q+0auf7j8RxhIV -cSOK{m=}mL>w5FǨ̟ ^|ɠcslR͇O-Vtxv1d2kU"f5fVi`@|G q cx.XBs2Ȝt(Z{5JB# yB7kzߓW 4MfY~61)#s0$(z ,y.l؞Y32{.J6o.{ʩ!vGK+L<70ZChn x 8]Ә}xXK/Rd޷q?Hd1 hM`*^^l}|{Cnz]i9a}q]?cL׍ #>`ҬW;2&͛vKqLylؔ#a \6bJw4*FyXױV"]}p M[XmjǺI1tJmgG\o"9iɒu")&l%U3u&*yǏY|sWlog^Od>{P!;bSh+KRFҦy ƒ vR֐sb=TiVT\컗^ Wuυ)hX1XHfu4c^4Ix F\5EdR&])2V(.>+csI|#IRgX94iPUkUp1Pjl?rҚ~z KxXCK:3|uN: )\ lqɈ{9Кt)Dx i2s(4ߊd@:p?٦(HSk59a|Л- kLR9(6 =Q+Pn0T#6/uK /Ve!<7{ xXRj3uo@W1^~ Lau&(46F?({3,Gbqne6O!;7zagg]o(WaJ]I7%lKJRdՈw$lr]_7 )H Z lP;oK)10 P.۴ˍ j&u9xl05)l<EŽ|f[uOu.Rxn`q]6f&F i}iVlI!/U͋ s`rx7]Ze<)sFnK4]m>ڭ |<- * 'DSP)F<87 jc<;^ y(ӚIJEްݦ׮nuSٵl!{gF Jk؋9"gnv52BʅțڜQ>k-T2| LzI7Ͳ"`#^sRc vM3)eکq7^5yox6 \ h8:-J>FgGmVPi0l|/\d{ZSTbQ<Ʒ7DQ|/st%j ;g8a͙v>Pr@}Ɛ.ZC$R~G???oc/2T}>b|e@?{۩5@n7'|}Ey'[_('={F}oD?3߈ ~2jfh-i#w2=Nw}?vWmႅ2m{;j.`?9Kg_0pv׺݃itM:f {o \!FI*]|4$'eCs['0{O V3Wy2C؞X~t1XgѕXwuþeՙޱX咕DI3[LV=dgU:1i(] ; u":?{NϷ7 >_gfˆe.<,3vfa'la<Xew>K3 ˖1Ds ]f9sxof "]8@!Av 4v6yxǹ2[L*$Yyd)">8/kGe嵱}XXgiO:({x-Uo:o僴2szlL縝*,VQk5IK9:yJR (F.Oo^3P0Y*u,m~dAaN01RF2z aM۴~P-J'xˡĆ jlb= &m-ܒrlϥ&m 0m !WNsQ=TqM4<Z'k`ks8fL9Ο3΃|-=릞_IG$@|y M<9d}bU߀}|ݟϗ xa^vЛ~`Es){IG,) `wu˗_o6&_p)fy.)Orm{f%59 xgll\`7x,3K*9sF1y.a^=CGn/NL($q1 (9: R H,';wb&½k:Iw411:al#yjsOzpM<=U>V3,γ{Hwo ]&5|ڙ?{ :9˜=qIij:F'٦v븞eM[72IϚ d1E63^3T ?%?0} ^)K5pӔ!e^;M.H2Y IIynTb48H|bK3h93]/N``V]cX(DIe VKZw8FsDE`p) J.P u} &{ gvu:SIT:~8-[?ƯD?9=$eK£YX!o>>ih'11] 7Yy<9@B_oN )y?`ͅ`VpIr|Sk`Hr(E5IyNWSjtMD VwwJ*5 BM%ssC>RK9ofxs栠ޫ"<˂9Adk3::gQs9bgЭZ^^:ݤտa}iߛMmߥ;!\0\}Vw Ի(?PUQ^_`},y}69j^_'kmAْ8Pcr TZ%MqQ G,ӌQ w2hJ/^TYM'eơ Cs0qa~ةm {k +Lv$FGgԌ}8T̥b|}~'y=+ޭzGIl//GF2Xz|UomTչʥ9xfJ2};:H|ɴ^"Cx=rߺ1o7=M\ܖywqtk5`DEOi,~ݥ߂k|%tIa_~Za ouDL5Jk} l2c"=2Lj#1ag@.{筵^GL/\r7p;;P | P,1λgƮ0O֡#"6]ĸnhٰk<7oNa5Y|MA1Bްy?j =wHmMso>sc=]2 GW7Q$)8򅘛Y,adub}eL`ZRGϗ}ǯspٻ\3n6E`xRP\*SVE' ̰x6\GH$4i{FiЈvkK*&> >nI½Y5l-Ef':QX`Lo~@A45\GU|%ufx1w&4JD1o\b:r rH.Б NQsu\YCPjX)wn\eթY/6!GL~]i=AFdyGp6L?]|HPnݳɺ&*!A*+bD%Md~{*xKj &޷^@0 YO1OK7!nT @M G+7{bVż-7T6 kU@ *@hV D]JQi@hyT /@,hzi** MM[zz* nLrwGD<y1 7pͬ 0R;߆47ǹbbyzk.FoYj}[8עďz(*Aŀ4f)Tac#0/U6.Dj +|Mnȏi> '?!쬄]sbl&jSz=ոeZX*P^"&zU1468F:TG7\-GT?ΏA%jn4/l";G@Ov1!xv+4ͿopvaLO  v>_cAo -ZӬٹ]ea GoN;|Ƶ)frRpqdlzAPHT81?޲ݟvώUjғ&Z mDOtc+TWJ#o2㗀{Rqwl"R(,\Zhݧm*F\24c % |haS35(vQbf$/Ȋ$kuxڬqP>HRfL0v,D + ]dZFu^ol+Dy?Sa˾{@n6n%v!U^)tM17R7XC23k5cuWpG|22Rkuv^87ڼfy]/Vx!<1ʬ(@@JUdԾY}m=Sh*.t{ ̽2Ô W66_wk ]Ayjs4Vih kXftvס)%n}Wc ŢeX\4ǹɀeG\d3QGc|fՙs97:t)&jU6;; ^% ͜{wnfۗsg$-{=|1&>³6@ w[a>.Q:<Ȅ{4l9B'on,͝{]~9U=t`dPPršk A`À>Ie>_1'缗Zi}%[Lguw3˓fe ^i "DNJS- s͍bh^̍zʵ]]uIgo~H:bq+ApFwx8-9et.e-vP2CƂ2h豱,)IN >ɱB<'\16^O580o2uڮ`mT/zQ Wi YG \򙯠'@#o3g-l?9sm`bcI'?v|}~'{?_zVٹV#ؘ8[ksfIPbρ!dDZg00pi-M3LY$%e"vg'`MO1~ x?7|&pt'Y.6`ҎюT|Vەڞ06/y(uց.=7}cfl,'p5(nQBzՁʐLa !oPڈh`vo)98vc17L@ >:=i#>^j>8KIWvT;M,!LbΟį"̏Txk5mTSQ4if4yn!ܜOpd&˜Juj\)S/q*Jwd.xS_m{W6㩉%ɢ|`9P*GEh$8~ !Z˱]I kPgyy /Qܮ€ eYhaPU $"7 xsR*qֱO]gX%uQwm5 f^ey#DyNչ`|UeM=-9}֤sTދ6^\ K3L\r "סІa@!MVuwy`^;&~ DIca 䢴wV2~ 0NTwdnBlm<ԙβai{X(hOWDpǫxjg.:EZ_p4v}#1_:|벱n< vh(E@5cӣj4;_o6{}0yyyAuqz;Cǣ]Q`e1{dUB+_KkIXC"1qX-wcfs{Ù+)AK}sş c=B>jR=c,#V;FhZ9N!1S( }wԯǺ(9Cc4J$ ey #1mOv6CZΙҩ&EM =lޞB<Z4'{~%z^#ˀA۸Wry}b>xYnv6W08YuW[[ϟ`x'~㔏@o>G@_x#.{mOO8f1#̊{v%"eqVV!׹Hׁ ϛ>v)=p5M_Qus.m M8B\GdP tb'N<ze7-<vv[QX+u9,Y68u"lބK:T_wcxjCY?HƜm'A ^:sk2Ek;]Z?)>?C(EScжCA<E]3p8;M ۢczg,NPK`{kl\pP|X(Gxn$ x5Ky/\E%C(]6s{rKHSxSBV2YC-2ظgiOc"gq.2uz_yO^GŤTR[qEw 9A^fZ2Iskּ`1.!=^Vpcؠ+%(xo{"lB%oQPLOHUV=/8I{w+ڽTӄk Yv{g|qcwGt}> \k\}Kw[)[6dH5{IX!~U3ד-l0ufE].H֛lWTK8qX%AG]cbɎBlQ{ul] ' {y^&!H8<K2;g^ s53O;/H`N{I.o\ǹ ԏ%"M gUg{ c}xj U#͡X/ *'\m|f6N8]S |ӽnS'2VYsi?*m?2˴xh*L,1^#k|Bڽon cOۛB[o0qDJk+V eqڻ5,N7{KgoD0!sk e>i/˸װM=f//-P9ؽ{ƿg-}'|}9>%;ϺD듊sp[(Yk+ǂ_817&\HELA.̋/N$Tgw/ۨC@6KWe `">l:b+;.yDid.3O7P\5[hAι${=$_B[tŷ;>N>&qչp3o|m+fMaSgNZV}ئuqxbx/̶j]յM ~߹jN-mc]ALD#AGʨ/` *&t1 OI(Z`q5u-"LdTȧT|Vyќ bf:IgI=XFoBr.6s(P;T[=W䤀-*ڟFncٙ@zC*n&.jJX<.qJl(U%Z]rBc .y.&> >^="@t bH &?fjVwjT_ G,r p0i!4KYkF(&V5oVeh96P,֛y56p HUJF7ȸY}~}Md5sylaYuȚ9kM@R;iFMU)^5_̃alx2_WF #Xacyq-)XE`YVx$&NT!L`{cp0^ 9ƙB+fskRmO 4S(kv[Xi=tn (Hiv=OSM{ԫ^1u2>#Ƅ]^Bc_^ƔxOwbJ:DzzsH ݂ve`#veqf0Py.Ǵ +5Лdz$w\t{) 1o-Ix,|GkNrCQiCgLĦ֞rP;bkX-ٰX43w0ssXA$qw릍]FgTQJaA 3'iABy1Ʀs%Eځ*컩BW#!anϙZ ~ey̱9 ^ UX - aURO_ɱ0|zdjS)SyppFSGOҏJU3uqY-AЩQiiGun=dEzA\=Anϩ7ZvkbM1~ s[`}C~n%p{` hM0eoi4Wt 7ެjƸ;`b,ݟoG.?w6ӹ"=Ho Os;ìnhw#$RAGiS u'6c2Sb4ͽ|:K[XIf ; {OsAu50ḏ CD (H.;N cLp⵬kwc.DVrc$8XnDiDWc{|q%{{߯sڴS.?ݘ8gozq#=wphݡEvwcc{sgyH{g|$kœ;3 U{]}%<] "ܻ&x){P(+΁R#YIoZv=?mdMn>w?X*bgOIp&8)uR&AyP3ZT:"^/ 㘕7 $]a @UB_6lK\ ¦BX >߳NSZ7,1ݙŁ2Beߡz&~)cmuQý&bEXg[dbBfAyf^ SMuaU?]O:; Z4:lw,cnRUk4{&k3).J`Xe_Y^+Dh%Tq|ofTʹ3ȓga=b>h_ğ펕ONߺ^/ǧO_r܃49[ԇϻ|{gӮ~XI9nmF>g9-9z n%}S]YO$xH-0gI6_Zj6onjǢ_K oo}r\w.8y۳3 vs(c{Թ.nWqz6} \.?b p7ȵfku A׹~ES'X|CG3΁ b4"Lcf [X8hx {Ujs`[QeyoY+GڥakF1Kav65F "AL[pyD$ey.dovv.egbȢS$ʖO6u))aϽ)KMޛcL7IFa]! ΤoQkT_}A~Ŀܚ]6nbٛά}w1F_ v>_O_9cE}AŮZt.Bl`ftb1}'i*2w x'JMeSMBÏԄxP CsI 2J.Gmb?:!_C3}|rU8FW6g\[>dSņd3int=fh^Mlp$P3z>.FΝ ךM^hZm\µyCFم6VT23p݌d~ Uv|KWM7tSع: J=$HVj-Ĝ͘5tɕd3rW Ķ^[úȓbϲ5"[ā(. v6GK4N`ռ'%éڽ*@eY|؍*d$8lK2{/!n'2ֲ29ӆ_"0o>xǁ{{2Vz=j&Qjk® , jcO .*QJ[|j:sf^YG6M١Z걯դh#&9a䵤ɦw1AHs GW6Zʓ<Tu(}H̗l@lij^'+8U *gвDξ>jW!$W=Uk]VƄ+v1R?7R)HϘv9Xf3PCA{<؈Ua{ @+D3<&{\J7{(~1'R1{üAl=d;!7OG8:1hm_d=ueaf^ָ@VemgWnJv]x+.l}٘kx07}ڽ=7~nz"u_R:8.-:%I=۾(BP* xA{nLduZ2ž t&cK8s{t[_Muv@Q5vZ !jS ZXv=REZ\W2D=fv8(@̹9jg&vI$AAJew2%mUE[Br ^͏ YmZ`ҖjLlyܫCV YBBL:-xr81{ 8nHl ER%1ӧ<4:!"\0$Pǩ]̊0/ v*~ߋ""[?Gb`Nan1۵g v:."f/yK;9ώ*#]IVx~^XkT9/< 1H2A* ͩ3e(`X2j1&sһz>ƨѼZ ,S᳑b}r 'xad0l6M 0 A νC[6 Slg 7J9qr/0h+X pȤcO @MvUJ+2JT>'Ϫj/wsAhtW ꔲ ^EԖ*epnP[$`艟 Q@=& \jd1R#\1=b20:2FIRE  'Udl}A?V/lżȑd}42MВRGDbΎs^A$hd+DC#!V՗8? ps %Ej50 T4T ӃdU]^+uIS˾AfOA%7n/! gvUqѲB' (Lrz9!ЗJNڠW]0faYzc2 !d]=1r p#aQwUG'a/31Z?4n׹P@H<5Ɯ8@=iRY~U<%qMb[9I[SJ+n4{(H?L $4\4梤snkpGsGU~~-]D+pf&W<@\7~cFZT˓=R;;6ğ|bj;4sNl3`|?#,<ݽ`DJF9$o2d x͟sU(^?Euѓxki؅?5kR=kQCЊҷ#@6V !x'Ʒ7Ǚ龏KvۏbOBL^J-I"wۍkIq1!Hekv1")m)mD;z)vDWSC,:Yʐ9zhQ=*&/e)x+:@?鎼dqw,vHłm*D}أ^[XGMd3C쮲)diߨLZGF<)3ށ@QT+wTdIo J}ʀUteEgl ǭKh>@g:1TCOzW56uo"f+"(2/.ͪ>w?U~X[7ܻnzA9!(G'_ \}b7 cvopU:^ǥǏK/I'XpXUޑ4o#ZV4jsMvRYu3YTC󈋥2'a&Y.zA @)}`peN]+Z m/FR=\l\л l_F93ҩM:NCӃ2W իn-8 ,9oƕD0IB$l#nvܣHVlqh(Zڏ8 isY?7Qy44Mg(Ji!)g{~.qExj͝oSgLEH7z6ʛDII\ePΣq`, iFA_GM&ɽ8`'al/D"I8%{0cAM!du@OcqwXC ơ'Ԕ 9mB=# V3wlF9= ^IHD%f'5|$$Δ^uŞxqP댖%~}rN3 ?K[.n$=IPð.hfKؚ6O51*(W*g:jqt@6&J 9@cs‰>~=ֵK3V*5mBϓbY85zs+/j2Wv{خӻN֒Gu'I;@D1Ryo"-0@ \GNczc]$v(v"|6vb}\tҶ8ɹ$}̕Ӊm3JuckUUl){+65A|N9b:tꌰ\/Mk*mK5;rOfJfRi!{}|ȉ#D ZFjkH ?;NpT]R]lrSD* dEn cdg&#D0&s _+|a1W 0"]:Q)h=O_'_x9~}X鍧O9z/ƱٟMj ڞ`sOhEKPq>= m2!0:x:}x Κr.8ٙj*uQ%zyg48,%}Sw&UD}s 6}!@^ڻ8 h[!Tol2Eu ]V^d 2xwik =` (C(Upه컳~nZ&iĥ$g۹%Eu}Qdp`Nq&ǬlOZm!3zYY[4qR{c8{{ up 6N4\=r>:4i{րwVjU2sV? .JA :8Yb'Du&"QMثjYoq-ʋLb[6Tq-iLguAt[`Hێb{y&>JuX) =#Z`=PM"ਠRGD\ 8FD4,TKDje[ݤdH%UK=۾6Sq\̝k狛z0ϕPٗ f}c`;Ja {HE>?AsRjHRHDJ݁TbZ0 I9N`3fB6Sw`s)'ў|eoF}*|3fəJ1\e!fdbwrWcrG:Pg+v%gf`. T9SQ$d%H}c5m}pĒ(ge;=4c 똘tw v#}~_4+ 𶗊n"QU}=@ӘWQVkh1~QwWjUu|by: J/} @Ѧ ޞ=b%Lٓ cYv#Cf/5s`˛A+45S{X(q(hoF 1ঀߔ8>88dV{n@X>؎N Iɤ嚐e4\aJGȳ0DTz~[3pL*;:07 +U_,D-9f\4ӟ/AnԂJ899R+Z`%O%*&׻xpK̓J0@Uj`نa*|FAI m3$:\d7hPtqj!'ӐyB+bτ|gVO̍]Cr?9PE@>T=ܲR$Txc1mA{ g0FTE/NT QaF jשM萃 FU m-PO^^'Q `HH|@tMN?oMPT"F#A*\y$'@6}kN\ g1OAH{CXQr]e}!<6;Hp Z;ji]Ӌ>1YAd`\0S i$ԇKƉشoZʿr0\ 60];mez?&av3|g~g[&G2( X!}k/k6a.:>ijq8՛H@{oۿ9abf7T{nχUcpH~HJ5^ KKyL)вB>z1rɝ*zik8BGsaQD$Xc״ yTZ̾Țu_p LYU !/DŽLcc8Vcm_3ÊE$4$'>e ƨ!fMa8u5=3QuN?{;~]|7=A)!K~2&o, _`xu'fG%Ыp1 2}>u0{- /lM֊ ߢ;oBʹ(k2䴚VC$Sli_ޟ/&-3W|@T@C@X垬k[{| KōaPKL辻Ľ$v8 ᬢ뙿FUtݒopJ{dr_JJˑ+ U ԒvMOctv4wիiR?b(׳;cnDW,ow~O^"եf<퇎\?@')(ͽ~!%j{kϦt&$'8d6+ul?A2=BAVaBńȞ̾wm *KH(:F$ A GгgoAYƘdn^9, >uNnľ*,:>GkBϬAG~آfmn#}2pVX;?QL-ȅA$\J Cwz$ !`"Au>cNT>33I(ՋdžjE\J_-JlpkIA&3Ѿd,ql ]@=nذW|aF\faxmM2>u}KfӻҲri . SGμF2COSNG҈4Q8ᎺSOyA]ny#TDe:mM%X0U_dҵcb0a& Yro9tޙ_yaK޴-Y0JVqf^`3'9}吻]a%@"3[́;ы@߀Hrf5'8v1u}uz5e>nh>Wo~?SKjۊ;?INcHkjN:U|Τrnݔ?1\JB#FP; ` %Ɔe# f݀/!\;(?bÒ3%KFZ əApJ&Ym)[B>18PƾDo*EViD:'6oȟ5fJ⽦cdR{y{.)^o [k+fB*[S_T-{&k`Izx 0[c =Xcg&؆a8} ̖MUS4l9OmNX8@m|N }5#ץ?'/{Z+׏"ýۯѦLMe4wϡsStKlGXaLȧ+ٳtMO=epnenz^׉9ž=f^8 zKҌ L7R'['Ȕfh54ҨJ6Vxa7#Wg [@Rym2j۷0R MdzQ7;aM'88 ӃGwRY\C@l`Bx1M.NLy,B\-ɣ딜ARsC *+6l@b+:D)hx *ēT5\j )F"so NbɰTmܮV h1L$3쐢0;[nΡ*h s/ 9HF&vt0&RxH%(Av3@dF[ GS5ܯ 3V)qF}hg{Ed\8y\;JK}|YieАNmHeOI v^7]uo N&ƹ_x,6!lDu@Q:U >x [a_vbjX)kGW Fn@?yHTTEB15Ta B->q[H Ҟ!`kfɥ\9ML=$ 4JҰca!NQ@8hSСKV*Al}D;ϽIWCLVwFfY6.%ZYQ>۞AEk i8!ޅ=!s` XMr[@ 5ߋخ=.?0~RM?Fk-QHBeo4޿q_/u 1pbQΪMlHk<qd9g']0Vԉ(ZF1% 5`.֬q֦u2id@AW?dFv@-كV7=pr6*>@ VM&Rρ^p3˕<> `23A% J`fp 4$^?mLfBa&@GOIs =$Ffx9h`]ytj ;G* Zȇtk9&"m;$B DPEtfI.\,~#s^HMSMž8N6APժV⽿VAڌJNQdz'!@N$m$(M$wB怣񨂴RTL}#TPcQKL4E[ג2iTbr㊡\+p 3qũHB12P{e!BE+ *"nV?|HZX b&JQh+3z8wd\GD zɰT^Y ;E?Į>R T*, iE @".BLCcRyֿr3.Bm2݇T˭}Pkv1F>y&" ;,bh a!Q2N2m< {*SJh  ݏ7nƢ jFP r _/p?a:ir ϭ)v;41Zм0 ށSmh qĬ/*K09ug9-O<=Y«C3#PVs#s|no-_ψ)͚`OwSĮD'Qo\wMr}o p#6ώ7c8}뺢0 j(ToiM1]! `C m&G 'nXc\Z`Y .㭶5 eQ},̼ ):@tc?DvI]s+N|QW;Ww^*83"ӮVd.M%6Y+Rr!OAND4&Ph>Qq:fܕb;N~Q<P 0*xW9iыڜD;BC^+a$_z<ʴZ[=_o5CCc>Gg /u/ ay7]g>BgAO)+gDG&TPsu5_Z+mL9f>upN"Vi^/rN$ģE|z =o;AT-lJ2Y/2dG3RS`gRJ]:}7h s+v6)tjUQN1ߏW7PNrw怷lQP+jUylt;η9gӀFAG&AV7 W3ґUU6reQrEiϕ IѰ>ٓs 4/N1xvD8L9N)Va." ZΕ%ww;5{Uwc]c}r'CU#f{ 6c`F,hހVsS-]2Q v@vo_1E-M5Q%kYDDy]ԟ8XxB\*@0_L~o[<ӥV ץ^^n -+jcW >@[l7pdrc)==D8s>;=J[/_̽}Td:u9lj[˹DX> CwK JL0~@tK$Ի:]Y9?w99pA${~ ;CR /I-Z Ee ZvsXRnmYC=A3(ljYYnC`ҐzvdkTƖJBbG'`C8B$dxqi-l^|cA]JU]pH4k apčuNj э)Q˦keI5o1WjlgM:lV`.x|NkT )qǚο.g I =g^KWkHC8@? 0 ZsSLඥv7cWGq  ԺZ{[PLU>OSt ދxѹ2,}FO5S{vǠ 9- OW3\ph%@3 NJ چ Gx|v decdoO%D ŢYQܓ:xky[aViq{+``0{ymXuh+ڱ=1UmMT+(8%YTf[$tKOZ"`Ep; [Idlj$"tA{X_4<- ƒLL%y V.{_D@]9n;Ii,.sJb/0ڃ H'5`O0~ I,#t`}?y>Gy1`WƵ er64čK:D 0¯ECѳvnrg:Ž'!1$ǘZĠg ƙ=tDgܶhٕ s%^axp֒6n/#(VyoG {`^S XcdjsL `y+keApm5 Bέ3|&'{_ ؓw-' v]-^։a")K][\k_\൐%|Q( 5I;K W{%_% QmYD%o]!KдYBğ9IK;3Su~hao)w n_IntXvWvqk_zc *uskqV85"vg/y+/)^HDz*)\nӞe5AL%9rܹzay=p g+{9*]P._z7'P;T'/u-owfA="\9z4U}e(-+sdNM_B@nGs3Y9@ZZmsu7%>@_d 㳑 8p( \|IkL4=zab"8svg1r,'ɪ›.T-tL|>жcRn'o @h>Io VDܣe^6| c Ebv*֘`A!] 먜9vUsUdԅҔ◠ <,Ʈ_Fq% UqΕz1 j[Zy)+S \D[`(?` 3Č@9 o"C@2dSI1k5gr>rhmD(xMkKxHm!Ml<,r΅ʼ]s&F1?\aүc螣CbDָpٕ}%EmFU^.s<g qg^vHo  v.6i(IJ_F3Tby d}߾ l,El3-t?s?$5R}:.xB!f(8)l(@IrCɄb[3us7цPdDAM <_  %~&Lf_8 Gr}fN8GJf g 6$͊,FQ~jgY3_do STHQAi(.{p#'Ki@9{=u{Uw]~Tg-_*87^@[y%H$(&sѭ[;:=y{sQ|m2:$7UɢQ +D5%ľJv xsBƛ 2+J:1J<]G׾`ѥ ۲e .Sg9jddXsqV`9^3Iv>+LqADgZC6=;U );2\ʼY`=V 6WY3+̂N_NIV odȂxO.;*M~V/2*j֕bSU_f΀p3 ,Oݦ {˷ zpI$m'(!m+toZ{7*"P~;+h38{ؓz]ш xgm CӼĕAWR˃Nz2Xی^uGi2&DŽ۴Qw4Ĕ AD9nt.Ku^@T-@&8Y!He. ga9ZȲTUx<\WY=6=ݞQ +Dt> HcNQq91 828ig&}G!8n4K7UͤafIaxKv5eo ޓj4LX,y &GKIo(@N%aO@}+|d-d(>U7=wc!߷xK58@ZK-"SlD nb쩀1<E[.:ۉg(yI)sZs'A~ߒ e|JOvc" >6/%RD 9:FcpX3&dk?!u#DRR#Gx8IJG6ۧw|3 ;OF2dʾ5Vŗ<|_\PӖ'ko 7N>?\ GIiwqnsǏT,C}5`:^_xczqw}J#㉟Oƃui4./'Z!dpr/ k;zis׍Tjs</'彶rL8,8Vy&PTYkAC5/'D[Y") hwAyZ?{]x<YYgkZ gI v?~X/6WWgWV7@[uZKhweu68Դ^}ЖV[tE^&r.Kvr<*]xsls5O޳ 1|Y,˸KKb{a>~^'DL>JTS*8&YkVI4V":ɁB7yn\e7`ymI3Q,Iڋ,3*mGnDJdy`%I2!kM4}lx/D* !)RYb#$VDnk@;2VH @&nwN›UNӸRMI;qr Eg+8U = f _l=IVFHRHzosA1v-Hk1ϪUm xjAhDu|Y&Wo7Ysb#˔'t袒ĉB,->Y͞O6yى4a:Uv`05EuТ$Q0Jy"4s7grL6PpA=^·9񞌏 6{.ׇ;u#N&{_,R @HގX7NQ.D )wmR(k[`r̜z_e\(8(N17 h1U:ri{6^t+&6VKPII+0=gw̳|6|~DQjU%܉թXҐJxj2ۚeЉ|1(n_r_u3rIxjKp7SlN bz3&zc,W qij`5Οy PON8Φ{<+r.i!Օf2cor+#WA[GWLj; u[ \b8[OjV%pI/PBf Dz)pKp uJ9SeSOO\99;TֱI 6yUȔ+>>9 { O jud% MO0.NΧ.ӅWa~JhHi HaKgTt0\4yy90U.L$397f=IkuP:4=!&QR29-bzqA:c PG b[w~9QԭVz}G\"]fcy,*4[ sLFktc$1B:bGVEPE@J kU] &ԽxӤTfev{eWZ&$@P?tpvqYW|8X$p++"oOx`gg;@p'Qlouy 떰to\-0 0 =Љ]GOI4Dus [DuOU)"Va43h.}M,,5Ruv2=0#<6c#B~FD_6J=#)e59 X3s[2M9ma r"gWCTsb +: yݥ< Dq85'˖~=LM%J w?%ߞ^xևVi|@o \GO3}& sZi߫u٪B!5ܗ`ʱw~5LprLVxՕc-1%}u++(zB:^hK/ U}X=BT3(^(nNE &ZXZ NĹ\=Si2ctFdy =sPAEF"=,`h-{*V ܇^Կ&'|0!Z Xp^0!ȗC'{fTͨE.4faטC`aAe쀸IGYwݮQR3dMi^$m%D] UG"5TrPЄ㐨1U|~Ȁ:/2r1-= "L%% ̀(nSAb >8roP VcO>*2Aԫq}! UV-Ft4lB n)"To8C 7G{WPϑ+f;rp=wUOGr>k3`Yrvң2[WPTrf @2vt*@q4i9~2uZLzC]]_ 8aD5|WUH{7@9Tsǎ9]Uo>a$O~'nV*r9.k&=;Zqb͓I8&o vVՃZO<_óHe3W}q=|c|_>?)FFAy8P~}P1#"J{tP6w8*Kܣb_(K qgu0mcU/~E˜;uqjD(K{h7a&!PL-qWC=N,K!30ʒ$$dBT@ot)2:jfכIAd&$ D&c|~1a'¼d׺?=cHA-Z?7m馍 _~w$Ԫ骕7=q~5cO^ lUw+ v\oU=:^Njo@&foI׸2x3Л}֘WZszrVЇK: Ӟ(=骡3|:u:~%Y@ o9@4ARf?76HpDOkZ67t@M2z/jDK;8ιrSk~V؇ًy(>O#jMs`ZsjNUghgP =Q˞T+8G:}^]4!MNmNZgz,~mUf Z m*=] BFrVhIE>fU]՛"z:rbd\6Wu]qj>5!I왨>4K!F; }`{mP.e_i %Q?Li0AYb*YM>.ut<#`܆TƆ%~}iSP֋;jw(VЩV/jԨJ Tݿ^06B1>̀Ԃ晫2آo}b-8d_MpuW=a޻u*ptWEhdrC:;^w^$YՇƯCwwHksbT夜h(>ڃݱ~v!iJn2E٫$6uw_{{ByLRo}U|F'f's`{4^3&?=Y1osUm9X'-9\ܣ?mlFm "؍8wJ5D-b}mWi+ӺsV Zm{﬇K?v.GS+[uVxWۨoTv}s0׶#Yϣ]n⵽,) "@fOHw اj'fw[0gw4UW#s#XmT;92RS2 fBf95!,bDD'+~BqGxc[sO\r[$C87n?8LqTE꘤߃+{oɴY?H'ޡS+px?^=7` /Gu.9kSA8g\:BaE{P5j4-I˫xߦKρz 3;kX_gV0TZF_IR\~v_I]拉]EO]NUM(>NڶO 5g|;cU~XMw.}iJpGaO\!g5Tݘfxm+:}8u߫#%=1 mpF]ݏdf` i bvj\dNJmZװTG=JJo;>ջA$NG۝ib_Cզ42m`i'u\^&'Ȟ/#6Oz{;m;;#}JX $lKcY syjuqdx|"=kw"Mti?ɎV=m'Ɵ ~8I\%_Ydt{+}YUFgMMp8 A<#_NTy ǣ؇0Z\YP+Z"Sq/!Z` 9M@/?}W!NGaajÜXaV@=iQ?v86Rq~\%\ zVfkϳްDZP T+Qnjb ^S0oBRf how"ЌaLy}ExąLAcor,!W{h=C\QT$> eHM?q09Jo0sN̰Js϶xV;rYa}=Ti^/͖) 6 -}q =Z3<5`e^ ^¸{riGF HΉhg<ϖ9( , 4T]gy4x˪o,GwBL%Bʛ߄1o2\Ž,mx<^+s7:zjoy+ʐ8"3r}**=q[YC֙}0Ḱgr[<{˱\m8%[@0ڪ&X̉ן7^3ncO$‚7[$j{𾉪nD'vSqoV.??̼x?^{]>'gp{p< "5tE>ÝZSr@hx2gp@V߻0?p=R{ ߞ`/3~|Nϝ"F莰S.2E<[8i ~_s5 bxmD%z|O?YmfAD8AғL~NYg3^J'ELy:wfLJzӅ6%+޼{VяDtnó/ZC} JdTK]X>~E]ǍNuleuf$v[WmeK_˿oo oB(|CIDQ3𽉹7#[*9 dIgv^߱6ZG 9r()mOQAl(ȯ]h?ZdIGNtz&ARJ[ 6AqLҌ=KUC߀r|>嫎-elI(3;QڪGAIk( :ާ; Gs>{'Ӓ*_E wS.TUW"6e)k'}R5uc&j(]'|o`Ы|Zf{,6?әB{De4a1H+q#Mn?=owL؁Clwa[4% l[O۠m b? ׍lo5ΙKm~Scf: x3҃ \eO&W_}5onJzi} YBˉi%3 v}Fw8Y_{e+ɹ8snlهnp W+WmQAkh܌[/%Ѱx?8atIG)?̻yq*mvpϢ5JoN_KF~uO/=g >6 `Ok3tz:ӳh<]?'1`E V ]zjI z>A8w-8 {bäwmxZdp<;v] u0\e[$ǛxP'FPVm:$D`=/9mBs>eRRؕ۫xotv3+G^Ȇ`zrƒN_'lE MOUT@=*)kf۝X#7Bp}~B?L+0*#Yv/T)' /UyOP tzBq(K$J ܤˆQ҉߃h_!lɣ_nvӘz[]@zjޮR'pAm@n7@Nh@플N:8.tWI&>0"vUĚdl S4Hnf@ݪu*8 l$*W&/W+/+͚/+ DjsDA='VX"*Ҫ jd:LO,Ctn/k Ϛ~ЂP!:fS8~!uO\O_LVxϘCݲۑ8E}_S^O{ΏoZ|3%D~JF zm. R^boj-;m ajQfu!N:] pf}$/t#5WS)tDYWq&P s  {amu-lSAU\HBNvp-;2gŘ+dd@* 6aGmGo|t= R;Y+X;=xڋp܏Gp@~oe.޾CԨh&j~&C2f7E `THZ[' W;PQ5D%ڨLlu# lT(-?ݱDʘ@DqM:໡wݟpL/{@7N贿(X_"qdB'՞c ܯ<~1q"tu圞Y;>!Hes"U -~F:࿮ИM!R$͕6mb{@zuGyuqt@UMzLR  ; "iW[Py9fo4\ȶ5'N\(2cP-yv@}K-6v+Br5SZ(Zk%4Ǟ8t 3a&K$QU .B*bm#sO'!6N8!U>,D$wgxOY&chy7肬s}9yjTBnd2i{f`_ ϕ.ʧ9 R :Wq:^x=*U3Ng⫸x.н!%'+Km%~#4j88^i}3IPgT6ߡU=ΞVwkNGLnA8v5.]??pvW%W咪a@,68dm啐:+k:2|FE35pVes v.k+I7" 'mݙ*j,$wӇTxAnFh1CŶ=EvF#p@}c` |C'ڄCrdym;H'2lv'G﫽 ;<>ߗz߫%ga[XL[gu'%/3;PNmE v> ^,"-llVc[+/~V3ZdcuСo\߲*}Gm]A'9Jq~b ;w HVP?=pF:(?`{{pJmD7fL{ FqFb߇^;=2Dfoj=EQI*fPl:6ϼޫ48MdrBcJ,'%ʈAwqeU:5&B'Jrӷg`QѸ*;j%'fww57:ް2~ߺ ׁ8/u >DL0'ѫצ(̍t~~N>"Jq9>Ms;sL["- /^llgSC|\R]tf89y.91,޶ud}/,C z>$NN_ Dr  eS z0^0ŨD8ӤB.vC)M^AV}r07$̱=1:lt| (ɶ'd۳.o=S]G k}+GoN@[ {'5-˔V8AȻ|:0ѹ/^,]v5RaD4o\'MWgoh*bY"U/,S*od}-)nqoĻ+u~ͣ%{fҀ7P7M[[=;GE )NK+҈q3-dDf&shm4Mq$MF<ʎL$/*+տو,2gNdjaE1gOu1W"1,hώw&oN#i^Dҟw{v Kk]Koy\{ZفƱn#h[0+8SHbEц&[">Mh{:C14>)0%g;+f}]:Zu|BE.db; lwt!f=Mxýߟ\zGtM>%̻K* Jp| S{GA(v#] >_x m@o& yBkr `;+|k|~:zuNj?ƿbnI&Z:|X8?[/x峪nƪ؅d.zJ>ƕM}g|g.N`hg'WëV}YGUUY:IYm^C_j|Ԩh慐lT S]w$\9ϹKJ}/MgVzo^3^ %mKV|r}4zD5?lP1]4q^Y ޙ7 'oeӅgOꭚ8RJJm{>>]רLȩS1'<}aI`!uT 0aۘTplM?בChNuNu Z7Vp`m:([^(מJL4hM Q2ɠؙPb#cŞ|2+zNst㼾RR5s¡6`,{u[ w}?vč[u)CR56V9;3@, wdޭ@:Qfb嫷PՊԄ3HaCT`TU%$n. Tq)X薅5jXcv늜; au`L"G9JwLSa; Ƕ7s<kLjR|$6K/K%6#l!M̤1,Р KK]T=M~[5Fqf|$iME@jG_ٌOA{s^g<\[5wL[Ǧݴ}d> a)yv:Ptlc:QuVq dcمuzin0iur^qm aSPɭ7KĖL}san?&F3#'RϿ't[3\M~FA | W]Nwu:F)O== U:X" bcZ%Vo&VwcE a Fn/vIv/u}%ҕS]A7+c}]>n+= ;e`w{Zd,y@3eUz1ʠ36phpzmmqq -SyQ`VzwChT^fA~WbZaǴ5~wF2'L̟ȥAg pD#ud 0q樦X<^0%!۽TR,1\\^{A4Pw(ن$-sX'G<1~dڡ ؞-ybѡ6+zwnm+˗9{29m;B>-+DAҲ i޺+fSGcW[/2cC늞roڮ7o?Zq-՜.7̤'8h70B\o00(^x{0Ӭn1n7 @:$}a DvD/!fm, TD/s{Z2[ՂH!S(}NJ"\޼c0W Ԑݲ-y*u-,j燼5-N1پD&. ͐ }ܢv& |Ƽe i{ w!aN|wÜ̗Гӛ^ʽZ5甯{'m!s{[6.lh:L':%ca2;~^sX`@'v;zAkx^5oKӆ3>N;qCFm9zS'~m|6l×[qi S-HZW(*+̇˴!¬[sC:@zjФjlz"si:xUp 1`˼+} dM4wWF5^cwirT-.?kf[JL#%.o㲆|*ϩ3zs@>pmHD1t[p+a5Z]dWSc)66\ԜW.JOAeg 95ػ|h-Q'`b}S:8gXT^™w LTo]k^h{# p5Vb-7pfMh.7~/l'vI^>z]#vS=Feu4]oN9o7;tC#޳7. >8h ;9݀xO[;&\ГqEqpzaսͬR\r};@HuY@EaQ|{o<5l \If鷩V+Ϧ 9q6;֊+[@[a=ȱllpJѼG0) rbbKoF% ?sbnŸgk8?+A!Noo+\B|S$Ks[7SM:?>M3!h ٽd>s7BqV'A}a`XO19=U J?}&Rd5 }߶ډoFxe@K]"]6\>C4"}!~i"7 Xu1%uqiȅdާN\0L-z#!"-c`Xّ #W"8sE ;?䳽j7We9rR(,탲c6#D*[D^`zaim1VYF1̍nh? a2270ٺDc*vd=ˎq^F6Q/?k=gR\kSֺ%OHRn_tlMyD,:^9v>mZEfeVҰ\V"Mq6ES*y$Ecr̹,d]r3ś 3 9-| w湇VLkwP-宑t\k"(rURd7G{5k3KLηse;662=cҕyt'š]Z,d]7Mh]n7Mdf+}s/ M{mhzr#z/?{|QMnۭ][7y;ʗލΉ,2Tʎ{Z qʮ "TR"S0rU]-kz);edUX0@- U!{x| G_PQX`Ɵz]=nA,4AA9(g \B;"հދl!075690Q`5r;X~o?]S U7YW!tD5&-G >0\>ͅ9#=OurGOyÁ#tZhv$F\{tI'Zor`OX)Nj&y;,ry181NZR'k]np4,TvZ_Q٬DE{1 yv_kF} ){ݱj~:>Jy~M0y 0czPyn[;Emn@]0|t6|c>Qʳ*q+岛Běrd9ĭڿ?9CoƬ4鲵ױwd)wyoLq2ZWshn ޖ {'ʩ_svs셜{B-Sߧ|p[+<*GODd"m_+ iB43-  wJFG8o=~U2Tne}.OiscC %Ј`ca@70ztɽ o07 W>unFpwAnkֹǴSG\C2p]< zZ qȚ ͺz r;cԳ~+hdőa~kOh5g ܢIDU7?bb> ILŞ加Nj%BF= տ]CX{~awv/¶5/\晍W&)Z4mDӘri lX[OuDmWbK2q&A|]ގrl a'3a#O~cVvs gY)s!]n {pi0x2m;PÚ`jG;++EXᄷ;hCēH{IO~] H`H`>H0"xjY^o~($(Uy}<6ـahY3U^6HAN]LxO:;p^ݰ=MOOZ8nA߉h~菉>CS CXWS2 E}V}d.ozc4A6Qƛ0K-†|vqr3B 3#Oz>97](l63z<Ãj!"TJn ru q^3GT  DŽه;[n-Vxp=wiT#{ WqBp˜u,PbOm~|n y+ːDEk^@V(, %> ` L9txq4eG VOwkC4˔O}[3iO\ot_^Kp粝;Aġ`P(߳Lz=*7xD~ PڙGَt9\sT5 L.XYc9n?oG7ێ[ ⷑ'*@(+Uv'\x. tʫ@Vme*^1DIrޱ*[8/{5kp0hCw靏T);A o઄7VH`.^Aink;DJDd6e_cQ81㜄m;f:|4ru-V?]k.F&<W!Ǫ_?ٽͳzjJaD|bcu4#=>Ƒ, y2VokbƞsT;Ods oAg&(K+hFF2L֯轏aewA< %_dxi-GϒݫL:/d7f\mXLj[ ۅ=fos&8ѵYqd?"2|oܦ:F ` J~[T {I !vPu0MmK]Hx#t>Q_&z XE1=a^uG#؎>;|,:&XY3wnmʍwG7f<Bv  ~+!&&i5n Z\jJVmcϯ&1>R'έaʛJsRIKuJNv.C E (J&*Xl_S샃$68@׌L痈8~o=ߩt ^9LqʘNyvr!IA5>u+ce M{z`,/s޶H8KDBd8Cf*`7K[[ݬcsrK=Z0Q0X#=Nrppd7g>{&?{vx>K*F~\cT"{ W(h#9KF0d- l$sp"A7wdssEYzb1?h)p2׺ 5墎^ADh\ۡa9>.rV UA?x)hbQR(C>of!/W6EB#粅|no◅&l_նT :_`p3Rkuls *`4~emg:\j# F\ǍXFt;lRܘq#@<1ỶTOגNjܝ̾F>gyI @)@.c($ap".,;DtsT%ܾy H3{N0ՠ}dp\n`Px7A4dk|{oCx=nƣWЖ=7mQ-.:D۱`f"1XH8;a$;_g+f]r,KDB{Rl un7A{tP%~[P0k*`Oذ۲ֆ0/=+f!uŘ^Nj8v_Cxy[yV׮džqXJGDd?pMo+LR9:07[dnbðgP7-+;VĮ;DDB{8m̩mn4nب;Y*[׫X񃾞uKztC&&`tf uՑ~ώF&l&8/~F}r9'ٕ@' 2/ܳɱ!_o28ƆVupU)TB3|ֳ4BxD`qb(@Pƚ,&>vgJ=O?l~$9ַ6n 8wYq{żJơG0;(7>{lppyX؅4G 7g/o5yyBvC\^H :7;Gt>y|v؋=e`f@ѢJc<`5X}q=kws3}T8:'%lN==elTH 󁕲4XLl%aN_Zs?DV -$K"-pކv>UUJz ʻhJ KctJpy{{^ޭ_<Ψ߷ S5Wˌݏo maƊL-`N쏧, ) bGh_֩SOj r[3iKIsOXm&!&U&ݖM[^|M:boeFt6.=V0Lg|kϛwx0ͼRZ jqi6Ja,c .vGwWG!xJ>{"Uꦰs\3RUo-)9^ ䷋oExI^VPR iZt7l3z "$CdN!cT.a9HQL0eF9vy ʫS{{rG!{;:g_-:\olp@j[V-Q=]w &0=< 4(@IS0MnAoA,$қ 9 fPVv6(w1<9aaGwa͔ [K]gq:~5ݽ1@W-MkEs9:\]ڔ+Ӗ5UKQ4)+ǶzWTfԖ}޵*{%q& ܜ^\Dq0~ꮽVBk)>Lɗ96x,#Mri\Mg἟gd'x:hRL#oܹJU+@ZG`hVCr˙ kNbbn]'ObRx{|֐^s%Oo_C8vtIF gPE)Τl(6ccG5NѤuT7b{k!7)1 K~]9ݽ ! i.Hi?ڲH|g&L! fL] {]O%3ۑ;ي&oe>LxSkm<)1ob"׷aZ?!f3" 7[󰮔0&B͆dЭEk_6k\rQEi|ů <8ڥw)5rʒVJ畔8R1qAxaq\Oc,+27;8G l.+ 7 s~︥_\W\-^w |&xV2|ԣ7ߕ2C9#5$ ~6-u A߷=wo}ڏP{I(K.Gp|<˃3 m1Gr?CPV[!LD}yZW;j?5CߌjKisss _VTn7@oAQ{0J4ǰ;\ڦT)mlU0W{sw`|8ijˆb:M`twy3PzN?7-Zh(\0?tis6J}%^rD'7޹kii9w98h;o9I]FfTuEwh7yo`9]vD[{kKrgz|jgOm !d}[e@LvGNx8{m?>Uۺq&5=_# yeypD WvsdLN-͍8!NhðD{<VCgCe&Ѳgܟ#ƬO$C|EʡsYtl^'lc-Q}&T %;tʧWZܑؐi&md[V@.7BoA+^d~Q{R w!=X[=-aP 9~.{$nѭejyiב3j[Z& :.-{!*GŜ!+k Ćrd~.||j纲=y :ܧ{tAyՒ2蒾 9ZlPADi9+]l4߸7!XSp=O+ 9{c8ѵ0stwn\B21F3=Y8s}:†pD_0m3e?(ϚyxLvAGt\)B_W/۴6=WTA_z#lt)gѐnK܎_-+_lx [ݴ6һa  *FXKOD)ldո@]#t(Oq+_r!cy"5 []!u; 'uM{w? a[do=|' 3~1^{6of"Zl뾡f&,j8) |!?w?%<%~'gF-驰=0{{4L> k821.9 ZKJф1$QmTqY:tiϡ-NYz[ʖ`TXM\M%O՝R2Ux~d6iږ>ٶ'y᝺v߽9YΉ!&]gØ8Ljsqwxwz+?K6?o>lÖbt{Jj0$#3lOVXj!#Oé#J@n$&#m /(} YeU# P=}5:7^&9ܢgbZ$@!C4NyҜriw# KUOBR`(@z'wϳJ9[fv,{rS~nZ=2; 4 f+y`]oNi_]a7Kv6w߽ ;Hڪ'D9n9d?7>4iD&l1 j97==kfxSW8 \}mwx5 gO$;lW[]}pfށEFe.b(Ɯl2 >2/G42DyR;'?M&mHi?̎}C1saU4/1vƭ'g=XCTWhEP 9Wki=iذs8 e]=Pz^T?^GN)H^.Wo\&֍cF .pYv/66fC\ۺ&Ý+ sO.*r8iM.齁@ m[Ћ-yoxXO)!t޳]j]R_نtB^An{dh(_)\ӻ|ؔ=1_'iq$8ɀвv{I,}6Ov1ڦͷdԘ)w뼞Vo[yDxV.}oo!=<4q {L5dEAc( =|vB:#kc|gm]z"Ҥu^p{uj(G.wvف/3!صlV,x򟞉!;uۢնO~ I`,D2C0gQ~˭c:cߝgRFf[}Fp9yAnkJBHp"pGAFvESV&E;cĕ|öz=0W@~Aَ2$-*BITlado }=zU_LT.u>{iZha^}lݣ>Z) xL 4֬>?vE|1zCaf ܻl>" i+s)矰+1=]I  ZLp1 /|vϵKוձjvoqWܳ_#-z]>Uy)=LQ8ʓ)1BGKIlZ2ytryþ`vF]eqMt {/chDd~{>Ks@ٝci`eK\gd“[NTB=~caT{o@+Lvn;Eޅ-5J,tpo[FCRe' Yxl- ui%u9? ]?AХdr^ժ6@垽3 KKW^*ƫΑ=YᬏKaNCC>tNii۸ /V}%耝ӌPL>S~= 7:L`']Y>g}f/16le^2L"6~8#(x/>q],WvR^G7B@!!GQ qJ7pw{% œdžF`PRO{S/Z̻rviA"_@}cy;.3d9'hݜ>>P&9n @g{yވCjBb!}~{/fJIH6EnWdx՞_4WXZ4!:*ZQ>Htt{aWHt$On[ѭQ! ?Ќk)bySzT^ GX9Jz9Tw6 x~k9J,9DVa?5; oosZ~}p[".z6T%~(v&UkY0(sPڳ+uÝyD|T[Ƚ |R qsÈY6'*dGe.҅eͤr~dkcn%d]+f!H'3YnYlŝC}ˑ=W=/^wm"+,''l<6C\$(jI)_gmߚ9EvW#kke]i2GQRSRs]99ϔv&T<v1i ]8= GXg g VH|<[j+;KRa)}y0{ec-?7XCYKܥe$j&3t~LꊙŧW|c_ sA y*Fp}Kbgm1-vj\p! LB; CO7y/3Uaߐ V^O(JFddOHF=}j -VFvo6(Vs1[*dyVG3-ƽGqdԴxk6p'ƙ 9T缊3W=>+Lz,ƇMϱwoo13G95gpTC|Nv$i==miܖk} ) s%w#ct ]Off lkVomH:WO'W ̱D^x|Sc?rtX,7͛6aΝna|\dU6%n}Ryw{Bcfi>%*7F un9G9ejm|#|&_HÐ~'1e&k7wT2Yx;L42Hw2zab8i`?-D 2)ܛBx_;'-MIl`"; :#*q{+D8&͉dOE[v>k^w-& %CoCf~%K_oMvi.I'z豍as.+1aJcߔw !ωܳ&qxNk9^̸Lf'ZQxu5Փ?y gNO✛28nSt=j8ZWo2տh5^Y'̭_ዿz  yhm5OSǾxPZNY263[=wV-I);caV(3IOD\y\^AL  -^ҡ~o&HDY?N#^:35 6H=k?4YTD3iQZ>9=1#jHq?<*Crx Ĵ*O!Tyf`f 4Խ>oS;hZJډ~P)VEæmgǞqFKw7ts ~<3ue)=tUUЕ쿡r*..Sƿ_٤xM_;aX[׳]I8?KGìbGϜ|ŭ sc357ʤ(%gYAN~ִ=7phm}bvmp2澿+#^hn jpgW(M D-r^riz.U[slYD X^/&r}o#RΈ9,tLOG90;F> H]"Nxq wY|%X# |߮@I<l5"XmgOr28ӑG,kP }:GvT b嵴g)>[ <Bx .vJb93ec$I~4(-yia53 VE +~7ˌT,bG\"nОLKT%')A1;w`1_mCwx✡RcYdy: ȳtzstxI^  l[[["q43aA`TDȦW k kJu>;"[ƥ9R<zݑֆm˩gywT&"ϮzMf(zTJ 8]u5|:vn=Cp+ 0Uxc)їb>f)t'k?w bOGrV#OPipYw(œSuّʮ.xPD4\!![Z*~wF#Ń/jԊ:ޥz/vڼtu=ϙ-i:Ôzfh7b{NR4TpΈ,92-|7ǙDpI]gXNO~m CO\4&b :? =xye?tp{c#mիnokz%8gv,0Ԟ#Xkv7-v)rΩO\1:-+nv Yt>J{ɖz[d{{nvN&6P_f+JzC'mfǽ'nyu%<#g!@ <\ !eov? 'cp@*\j}x2~@tSltɥNj%kv.y{8 fڋyҙݳÿh~e#Gp6C<{˒IAS 360ͻ\2f-g{cm($m8YxWJEOL/,^QOx||l5:A#Z|aG?8zxP;Phmf"iOO$r!!@vA)!"ȕ{ZlN?+ 0asw̿vwb^zp¨'s=s kFw|;e uW/f'f\%4ެ: 1L0?y}{umOmz&? #15_Yyn6'sṰMQsqJK=u}Dn"X'-߳^%Ns;!+xQ7Hfcug?Q7,CB\92Lp[:TZr9kwɍ"70o6K-[)10&r+~Xa{/3Tln_g$zt)%?9zԨC4OP'ȶ9eEY񂂞x狅< ^-6P$M|ZWŞGڶ[wy- zXi-8g/6:ЎMI_g Mr7|xNCXղ>llo^&zȨױBgcU +ʻۏD_DNY+zkx#n{bcW{o*:Bcb>!9C7Z_nvsѵ']uh3c2y/F2Ydn}VW~0T=؄˚do#KsVyecqE}'-BYKi Ϋ9%aME7J\幺=m\[~Oqe2s_?=ܸ!A-Ź=:|Cca p|4-w\7:[Gw 6)_-΄.TY }e6W!Rr6Pw-K6aIBr _|M/j(i3" Sꞇg{sNlH 1iSs3-To]:175 ]Z O+^t@`m']1vq[}|HR-?~q~w45h]lJy=[ 5+#q21gx0[q{OpcΩsfKr&;gtY#ýԴ@D´^g C<q4k)_}q*#W;~S|ۢg\jIBr o!_3wji(ؓ4)թ<ݓj3-mic;h 7Wsyw1tX2(!' m 3'3w]L\F'S'>ڿ|@O9&5 KkpNl+7d"PyE`Oѩ51!"KAr.6zti#bOڡ \P*&νm9G7/\bZ Ӎ ɩN8 ᎮTr k?[Ya:?1 /wTZhZ9crK4ʚ^`*_r@" ֋-@j["0?oSv>X![sQ2w}e$z΂^`NֺhOLd`C; E{]һ;~׎k:X/our*x]rvoGrC Ҥ7)]{q1 siQ r@-EѽOތ>\UpR\6eL3Tt}Ⱦ0!O,gWG63sp_gxfӻD(wՑ~o5fraϧelѡwrBL1Fwi$)wAi.ܔ+^+pkxn #s~~ʔVKRuEu[ P-x12^kJnNoo(#Rs ཀྵ$BA]{,X7R ]N_BD3wβR%<|% /˕*{4yh9.]4&g7Vʣr)/AXxv-a̧QLQtsĄgmw!kM=?kɗBaY~fϸgٮ!ݏEv#EًaE/~/L9d'̩goVt7٧*֮g }9bɄrAקTHxyN)TQs/ccj\Et? b\Uߎ7}´r`9=^`Jw2;/t [.ukOPlX0AA2JJﷷ1DҁwcvR/0zr>og?aj<:ϞØAhݗ-c 8&IwzI0VnhK2ڄb4!Bk$&nQE* a.?w.G=)O\~]đgϋNh[Ne쫽ux6?E/_:3Wxvd:irSL~2er1lCkwxY|m当Jfk.7*OBQoJkF`pxS3P+zi=$&􆎽:'!IZ]w 9,?wo^)},nT:BtNX_Al_ ʒ*-@5 u?x?d\2CAmcKkOZsH5Ykc7P~w{݆~+JOO٧|AhS)fت2Xؚ*;E$|z }hn\scN1Lu$2dbĮ8c۬;Fpô(r* hf!K?3֐ꑜP&@ B矅$Z[f~-ˏ%FRyHRwmSrz|r? g샑2*GuG<}&ouc kYxtfO3L}=THCN9&Bs=%#1D"F_y(#UWߙ/&!@  #դN< 0˹MxTOSfW;֟5 Jv !ܶo =2GWGT乮`{HoJho o㽙M:gv,vL*OVON+(8:o*1M5OCY.)l~TU9??A$:@ t@o@ @ hBD*CRcSW@΅-βn@aqm˷=d}l/VǏَˇLMTQrrDgՙCH{!䖾CǿeVf<SRX}=5@TUC%*C@)IwԦ2㾨dm2)@м !@ W}z%A?Oz^XW8_a8FI\ axCqGgI~ ,.EsnYӓ–UJo!@D-@ xmEϊ~}Ʉi$g.g?oIב}JDh+Oj+!Bo@ @ <պ)7j[@ ? \_.Wg*OgIZ @ @ 8`#L*G --@ @ =G=pK;*hǫЦheVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3EiTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-24T11:05:48+08:00 2014-03-03T14:16:22+08:00 2014-03-03T14:16:22+08:00 image/png xmp.iid:d627912a-4018-cb44-8559-72b675f36d1f xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 created xmp.iid:b9f03e06-8a9e-ed42-b19f-6965f63f7488 2014-02-24T11:05:48+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:9046a85f-7e2f-e544-8a38-689aad1d37e0 2014-02-24T21:32:15+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:7912346c-bcdd-884c-96dc-d4f8ab6e9ecd 2014-03-03T14:16:22+08:00 Adobe Photoshop CC (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:d627912a-4018-cb44-8559-72b675f36d1f 2014-03-03T14:16:22+08:00 Adobe Photoshop CC (Windows) / xmp.iid:7912346c-bcdd-884c-96dc-d4f8ab6e9ecd xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 3 sRGB IEC61966-2.1 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin 拷贝 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 1 720000/10000 720000/10000 2 1 1980 500 Bd cHRMz%u0`:o_FIDATr#H,L ڰ2Bw2oNM)'.륵P~\R^B3&r^Cϗ¾T-}]zнftRJ)ߍR~t_zzPJ)ufiYqHe{a kzyݧJ)RJ)lk4/.HHHIreٷ+KHKeOw\Cp@:/Kӭ5/ihRJ)RF)?^CW"W /|M(I"RkfFiҾ}az5tߧ: ])RJ)uլut߯)4 k !k랫r/!4+Q S)YN k:i!ECPݦo21vfRJ)bJ אp_5$HnH} ;?:: 5uiJ"ez V2oSDTIa. =T3t揆fLLRJ)R~Rbׅ<^ USN 1n- 4ﯹ]8oz!ˈ"TʏARʍ"tH'E:[4tC3t uwplg03aVJ)RJ%6J i1)ּ\yu͢;/^aa^CC" E!L*L2]/,Iahnha^74[ c͘0ۙ0+RJ)pl4̘0)|M:. %;fhE,"pZbvk螧v2&Ӟ8aN C3tu 4Cwnl5t3cbLRJ)R~Rn1y-a- 0y aKX ja itoB:{=WGCIGWna'SywWTJ2GQ04njfYt:VCwRь0C)RJ)(*k3&%C&w])4 CrL}yu'na6<\T"TEHN:VC74CP]44&lRJ)lrX|`¤$kt^Z$ /,sm|4Ь} 5Ei'žLw6Hיm2]%N2#Dv}tPNL - dz/ iVjf^GI/1 |PJ)RJ6J9il,>0yOeM]D8*.ta_}4Cs渮mc-=VD~mj^O8+  !-fÇM3+.2,ӧe%EXtTO9\/\(=]Z4DžfZv2=T¢;Ytu[NGG3t,u[DDl6C)RJ)m2S)6l,>0y?%MͧtkG逰H_ a-]. i_Z׽@ =FLiiH﫹o{_@p\&a'JEV2La'ˊ'LgEpyorYW>EXt_Н iVjrVCw >J)RJ)ol=>ڤ|ݮin ۄ!H!].n5^C6{4jo6"|1>}aظ·rF"2UqQfM#\`B:+'5fN:=TCwnl5t [|`RJ)7QdC*w0M>f  NspPH7 ˄}ii}Z$Z"KtziiH5#]/.׼&̎J"Sv"<i_Y -&irtT##.tT \a'}4CwT:=LCwnW"l}6l>lRJ)6J4ٗʝLmQ\)KWCؗ㺵fظM8ai!.]9/ 69" f3ad%\ ,f"d1"ULWɴed~& U&p0+OGCa&CR 2q]9$uEwT3tu[f{fl5|>RJ)R&"<4ٙ#j讔݄ҝ4uaBzMt@NLs2yz=W*-\/4;Lyd"tR&h E" +HLptDWhv˅a_Zk~2}Iiff{f.mu>O|(RJ)Rl^SؗĄBZiӤ/hֺfh@ZmDMs^wHka! eډ@H$¾ظLZ~2:v2}A3y`c! t@ZE+;V& _~{"O3tG5Cw\74[ݢ{:%?>)?0+RJ)MH% @z]O#Aft7H;4nhfhyaH' CNZEDitDM3ttt]9 §LGeړiOuerYycN 2pLGEi\-g} G|X +a2^JdHH#(Ea#Qiufjnhuk"a`̄Y)RJ)m_j"lŒav; ,:: C.H%m"]&.Zs4 !~2Y);V2\;(\Z+L7k&K'(4Sqi-,u}]9;hr3& f&ìRJ)6/4)d2̘]( iyqЭ5xMaH tZ" pZztaqZCWICZ/ M"D\, itVwvNEXʙn-rp%_C27;liֺ Q i4t -&LRJ)R^Fe&+.,s470s\Zi^TsXC34H _@]Z! 5aݾ@:mc]\C!^_ " Nf2Htl-tv6N˴2YLLl#d+4[Gʧfjnhh͘<Ќ RJ)Rk(dŒaHO%ie: mi- E:.'DН=^GC$D1yt}t\$}4/%7ٚ1Y̘Di)q;v6'NCHfپ.H{ikLCG*DŽk $/ie5_ӬuECwT3tuCnh&0av11J)RJ)/f# 龚L1Ma\?H̘,p;kaזk ѝ]L:},*dz"֙Ӟdmbr_7Yk!_¾0LfHMv#Эt߫~N Cڙ i_G]R q.3&2cbRJ)R^F&)E"MHC[H5ifhM`Bl< 3fRJ)oQ~ɾr"S0clfB  E3! a "\,NL'E8)YdzttDҐ[ ǥ5ǥ㺵@5C3t鮓@"W8Kka.׽@8/KDžDZ =YXxtHdډpW!#7Y#dks N A_D?"tH:!B]Ӭ5t߮;"9ii!, ˄fl1Y C:Y~fjnhhfa-0av 1ٙffRJ)oL'1y ɾtX4Q2FkNǥ"ȴeDiy 4"-ySv2D\ \&rZ3t' $—ZatTX K ͮ.44Y,"̆LGGa'ar_"ȴ2aFC_k.ӽt1M23;`6R ]%DX!.,_;nh"i ̶fFt1&Y)RJ)lhoƤ2ٗMQsXHCX j A>e:(NDb>E͐Kit@^"\$NEC7$4%¾tn 2iaKz_{׶A&ِ.p@:! i¾DAZ +.At[t^@!|پL {fE"| Q.1$>eiM.0ɖw/#¥V8iɧ?fkaH k)>͆ɐ.,Ej.:&g4ۙRJ)Rl0fL3&%^@ڙ0d+} i!,U"DQni1!ҾȴKkD:ui6¾0E/,\&. Dw֜\+ %6Ґf1Y1_҃I5I"d2t_H la'Nv"'W"}l62ӞL+JF]c}M"iL>-Eg EL~fNjnf"0!]c1a%i[3iJ)RJ)OQ~0c1yMie0Lk&O  @8!]!}f=N &" a\'n+4a6̞' fOv2ل"\$¿6[DI2_?L;EU!3]%Zw*1I"k29*AfC&|ӢH_Κh i~f: Yp^`23fK?::ЕRJ)R` 3&זO3Mvtbv?c4!m% yppZ8-@Hg/l%H!}tZ e:i-.,Z"膆nNkha2rD DQ8,&Ma%ҧHEZ C"=aH C"NH_ke-iH$¢9{aH1aFLV?&&kD8*!'DoS&d"|"L'e:+Ӟ.)EE8*”CfC&ivf鶂/2a_Il\/ jfu[f f[3 hv+RJ)Cm&0JGMLNHg}ѐ֚ Z8/}Z:, a1!6[kp0)46f'a=x]o08 ӜW XdB/d99Sgj/VOEnU-nlf9O ⲸmwcFe╸uګUlBN]Quu.U0ǙzG}\]6.~Ѻhgt2:J+qIć$J$qIkX.JzEL+uUMU=q/*qhtUjFMbU?FLޘ0f^ݧn]7x1`">orрf;܄Ëȓ6Uofpnpl58)n8b5Z׍Գz{3`s,ث[Eͮ jSqhf3&ncP؛}̀uuYqj@u%VX*N+9uYjSu&oqSZ׍F/F%ҒJֳ$gNB$ڒIhrZJh-Ū>kjk~Jb5z6a䨎j7b fbSg 6~!jvnh`5;Sf NX_~G OOuj1L>nuSQ(f `ob'{#b~sbS^ճkQ UuTb3Z̳3węfŦW3w qUu q{q.MP;0"^Eq(uTQ-EIŋثwmZ]Oыf3-)8I-qK'E뇶.j}XbѺC[EEZwg/x_VsEbpZ?of l1Qunmce2bˆIgp4`575ڛ0zxq8.nj>! V nlf PH\6 6bhup[զN `S7`4f7.h֙Z$,`٢P\ V8wM}^_k}.6ؔ]PesSSėڋ3SFXt3z_K ~h+EK$J]wIh$V/Z$~WEkp\F9#[V5L #b5ٌVF\ulMf Vhh520`f 0;0{xxxxxxxxxx"?_y&~_6uU]7lj/.sHlF{Aeu]PM0z6d2.}*FGeˆ 7Ei͌imuUmj3ur"j]6_}L\df_%6s⢸"ثU\&VuY/GuR/jx#QJQ:ڔN6Fl\ՙM}"q2WQb1$8I|H$ZhęE:ii}δzntCP3Ғ 0kĹ*6euQL5b2ٌ&:,VA]f^*NFLP 6u^ggu.bo𬪮)E\NvRNx2$<`5;7{6{`5[Źq݀uV9u#W F;,$A89X=P;*HVu4Re(EչR%;0M 궸)nQkg-גi-W%.iֹ ɢu:w@1*mR^gINk'wpnjupҺ(q8i];XMF 6Z}bUjvрٹ]j0{ߌ<<<<<<<<<<<|믿<.F Oj?gtYjQL^wz_mFL}:ub5X&ċX*3z6b1FVM&Źj1b?ժUQW. jCQ=K:)3z%fzbSl/ތnf&7*W~n&J'n*gSGh]NGXN1=٩:i]Vz_u^yquY4"6]Z$K$J\$f8fՖ֧$NZ'ֳNZɪu˄ѹjPtj/N>q%41!q2 J-9^$nj}QM,FVq0jvĹ3bf'od7獮A]4!>oD' 3`MPuF{mjC&ɳѹ" &fsaĈjuS~E]rV"J 6:WLԌ(6jHщ3jglvggՌj3VY|^*Wa GWoE$VuU'oZ^řڤe"V-uTEM]FL6uwߜz6x%~GF%NZJ[ϒH\^9 !H'hB$ĢIu8;7ثj/7[Q!F{eZmFޓe3LFGAcRW}̘&_'VŪ~cf Vj9E\7Xn_dƀbO7n '/:]LV# ljF\BX6VɳmMLjUb1z%==U]:Wz֪Ktjs^T]RٙKճ[.f"^yF;}Xe3>u[_#+bSć nE2PGjGC&87NbXuT.jmXAUŪVzOik::imj/ZnjdpI\W'$n;%F>uSn[*" JbI-:j]8iEkz֖֢u:3^EY[fzeuT;L\/į16>&Im2Y^87E뺉:g 29ݭS_f7.Xe Ѐf3 tyFPQט1&u7z6&ՈbM+'~8bHu.3M= .,2XԋX&V )uCA )" VuVq0`Fݡ> QFP_M)C\V"`5?GQ\qĦER*6q7ImثU3}7 kUo^ܔ%ĢF~m%b}Z; G-EBLhCkQ/BսZ̎LNc 0"vjU%U\*.MhZ$8LE0ae#ɳfr01V" ]5`vn|̌:x VFy6O>ftA jD}7ԯ b1L&j"sE\Wck^VuYQ:UQj@(AbUG^DTZ U0DL~`1`0~`5{3#bvYl~A}2ثswp.>$6I!;qg n *OOVWUL]"M|`qpQUL[$)OIIh$NZ.vHQUQbuQqAjUE Z{င*Z=YEQz%EРufb)bvRe&Vs\4uq"yh1[M6qn{EPLvFkلѳeFGF'h5aBZm&FbZP00X gG/" Vތ3`/2c`=<<<<<<<<<<|B_F>'~:X=yMiDm]-չq.^,h4z6c@Lmun F"6qY<aVa*Մo6O(&jU?ճZjkU'suTԹڔz굺>l6q&^e<;yثcQ7 } n+$&.Meq'M,(-j8SGuu8^ճN-x11E3XIN0YeJ_$C['OVEzQz"6wMbUx_-ꂑi-ZQW&uEк逧XVu:f 'of&?_ qfI,Z&{\EI;lZ'߿M| OAqZIB$X$_u݀Zqu[oɹ WbV8h\F%p;&g:mDflvny`'V0j܌+f_b}3_kF]E'~V^0v:`pզ7e7z6xf$b3!0ٌVW.0b 3U0$U/Z{#9WghmR/7jZզδVuMV{U7.E\'u2lvO(wįq]|N\,NJBEb/b8IlbUݡ8 BPG%qR8WGERڢ&^^sUjQs38:LnEkɹ_Z;b/v&k$NW&G 00;8E"VEdX$%H,p?iuI'3N֢hiQKkճ֋Z}Z;uTګٹ8Q|Tb5WN1a+^Ģurp{ ӓ30y^촵h]6bZ~hfoɀY-ٹ+f_fv0[feE8X=9ثWVA ~m&ѳ-l3ZjpVlth`12EP(L6''ԋFFQ{(Ju.v2XtUsb$*^zVJ(j5OfԳzV`1̳!<&V6QįUUF(⦃ⶎ'Gq'"v*VE: jXv\U\&ZLޘFU0E{")Fx&HFF<9UmEFh1yQF$6*&ZqT:-d"$qໝZZ(uw(uĢZZզ.>Bk/s3̮'qa`=+2>ftA`MVCыZWXզVM\2L0ɋ7do&L Vg(Ŭ oodjp4cK o0`sf =<<<<<<<<<<f=7ɋVq;\]wp F}j/ssqY$-mbo #& 1ܣVf"ONĨXQ"D<A XAQl}b-f 0 .fԳy?>VkqY7>&6I7)v(V!ވʓXM jQPUbp\]6o~E|R"^X%+ KqtdoZ$LљѪ6赪"8xVEΓES8N'<{J'E\Z3`i]60xwq@_f jn*ZވS.GXy}N}"!%sqSg2/& qkMM=yBy bW%NZ{A j/+jF΄ѳ';)V ?gx2`G V-nYXIc`aiӅ8Z((<ֵzRԦ]JZPu\jWuKguV8AQVuV'J~\&az"^MMGuu6NV_K]k"+q!+$ xQ' CAM++^uEiQ֦j?vuRGŴX,ں2L_$..$ڴj֧ZTBBb". 'IV[`b>5,(+.M,v,vE6..յZ!L`b Xl-޳`3  ŵ8 ߬v+(Mĥ"ʲzR|EQ:]]ڴEծ.Qs褎E=z_/(jPdԓՋXl:1vӳx2_WŇxO"+A(6ŋ$bbaĥ$Xg#y ]]imZT[:._zz6uT?u&&cTJBa-;BijYg(., 'YWUԥŮ Z7%6ͺYxzrl q߿օÁĦupIHlZO+Mk:i=ikڴ6Mk`eYXWm/TdNOix_-qج ꨮY]q%dbMEZVGq!D:YYK]Օզ-k&t6.MoMW1010 t2ݝ+{w 爿a;bs{uą8]NZjW'ҺTg{aD0.^,GúbAJb8[`xL"`[b!fYPEĦ`ڴ(jӢ6եŮvVuSkԥԦ^'Ug,MԧWi&&,LYM?ZI\ӵ88g[qGaE8' BJ(B=څQmZZT~+E*6k q8k+Y]Xx֥P8Bm]b%DxWP$6kBd]IlZC VR,,hYՅQH۟6̢NupIHMJ@KI[֦6u:[lFQkRLv+5uT>i sz7,ޱM!ʷŦvAQ]Y'98gq[yt8Mܶ:{vkT'UVGY/4nޚ>0K/046&_b~db`?dNvXxrͣ;8+,}ĦuiRo5[k⬞ L{"-"V,6"2edq:g.X8qUOjSk RPTIh},.zQqVMJ='A.6cAԳ: LԇWp40/t2<+d2. L /TxWKeĵZYkqd78&"vq.AlBx ߉vAovyx]"iHlYĥ:K[2h}6)ڵ.+qҺGAВ)u: jԕEYbӒقG$$6Km* $$$$1(SGAJcW9]oUG߿$NO:iYѲv+Zueut×v5ӵQ]_+XE\X<V1:]j`JY$ jSե_`EեծvKYPiW'UgcnqmM/sXPpӕa7]1010cs231f`;?mKeG[<:/98+q_ EEQ']Y]i G LîMabx-vn.˃K J801V%Dd9 $v$.Փ:x+$Izj:+ҩjWZ}iՋծ.R]zT]:kqgkb7EML$n'+u]Nu)u+,>Yl(,BtQ$QbS`h8)$M" ߝ (6O'ƤUNZ}IBjӺRGm6F6mk&Dguu-vEQ$va]%~Hkwkݶf]k8]&q!"Mbxo!!Dl{vV[Z'jʜ6ߋGZm6jI6-OK+q6e,̕Abg@[Š.Ӯ,nqI\*C݂.bRY=ͰVnuEõkWnztm L L10d_;-sqpQk[RăkuҢ(KumpV7vYixj7kk feqiqJ붅a]Iv+$, ]Ņ.ĵzRZF"RH\Vծ.(J$NZOZ @M:'EUIZW91Q/MkG.^ċ`Y&&QP&cEh ma8Bͅċӳ$. mWbx-ŠCBnJxo&A슐i-tzNiiTEiQY' boY2VmV'17&N"6,ԥ!6 ͺ"BKB+MgEXJRąť&q%9XW$6 $d%a 'ICmQZZe26M" +I#wOڴ,ͺ:imZa3nvݰ GT⯙v&$0,X}(ޱzeYuxWYY]Z'uTWV:[l:vuCpmzktT??vO>730m;񇻿/>gÁGԕnuC\ 'ZV+`AՕ]W LOۦ`< 91$kӅ`a`YuYVGM-,IB%A\+Pv!MզӋŋJt.e8QYZڬX(Ίzԅ֥vQL.LGӋTYD]'"^Lb]&t,nnj]HlZd GAg!vQE.6JbW$bH8;$I< Į$ VUēM'-vN+-]}IBbW:]]Kj30beڴԳ-v17&N". qVc,Q\8u%"vEm^Y\e:QZćZ&Y YmFcH$f?S[IZs26M"NZZmii]himKY'i:iAN&vc0]AYBK_7oxLZ/Ņų"6+Nawq%AYZجV,n[ԻMtn465}`b`_Vlztmxe`is͊W w --}NHhm+Mk7a30'sڴ(I jj3Pg MטfxexN$6 ;`]-,vv Rق-,ųڬaԮʊŇ20].-vKlM'ʴ&lM/tkn.M &20}lNM twwwwwwwwwh.Շf[#.ŏ{EgA][Pdmbxåab".XHvsZ:Y={Y-$A|]M'jW/oE ]P''o6q'EIB(K! ԦZVZ]X˰vu)^XPE<2m: jS l"nv4SmC\ɂn`0M&mM?,Sv%8 gEcAb7v+.=Zp9QH-vq[l` -zT*"OԗvbeLg"7M1mCU+Zĥ](bWbKZ_%7%6#$dM~ K]C s)q$6O%unZZևƴYl8I01 Lt2|,$.6u-.M[<nzB\t8]X.]Rx"NmKmԒB(BRZvE[D$mI/b-z(*"'e "ve,viJhꕄfypҢ&s:+M8x1fNLuRa.b7}(b``ZMꨘa ib8u%/up GE\7 jgAłtaFlA0mqpAKuVYBwLZW:Z&JKkQRoYl]*k7JRgu-} 225]ե`L&pROzdz%^[.^jq$(IbӃ AY}MB-,hmՅg%Vr Axy +#$$6HHd ?ZZӕ&qҒ8im~IKK,de`u4ljӺ4 1)j7eEvqVP%N`8)`]\Iܶ}IBNVG]m: I&K- V,+u6UۆKj70V7 Ԯ6n`z@QOݬ?ttibx610M?ob`o2\<ևv E|݃݃jkbW:]5즷K-Ë^11XťR0lXȜΆ/i Eĥ/8Wj&q)ΊIBIjWHhd'FlFmku-BkE&vu vŴ+AEpæ" ó"v)'QI!kN0R gӳ"^ åa7q6 p6Mf tpRv .xElQM^ 7bzp  v6) $d .EOAA'-e: ,Xb[=YkuިT]f Ԧn+xt6|xVTqVõحX<]x $v%!^Ylⶃ%NZJh}ʊfYlŒMxH|$$6IKk8Omi遖ڴ6 ֻZZeuۊm ʂ֦@2= 6Ѱ :mtկUg,Nf1lg,5ĥuEm'7nZ'k`,]kvYb%'AU;]d}L Izݫc cuguvu]tkM߈"(ִaA}5즺3tkbx710aM WN/ݛ)W֮/;  b`zd8L _-5dyqk8L-6i,C8,:)%{A|:u%q8DHl&歼 @ ԜhXТZ郺Ѣq݊E2Eծ6 ̉zf Y01(bW pX]Ľa`Mo~t`aNt6č1î[q5l0"~^8MOB?Vč,Y|n-β}!C|pb7,."!dڅ  W'7ZdN:餓VPġu8,XvVU">W?2\ 1i3}P72=PĻƜvY;EPY[WQġ>,h"ڬkIprj$fub! 56 cHb* ?6J EE2wZm;MkfкjYPԮf-'嶺Uƴ>bN^\wV΂>MeYjx(q(:,v] v]ܪMV`aYY&0pnM ،L.CWC\LqcO ܰ L L&}_`b`20==========_<# ^CNyڜ{.~*qսڴvu:aAjWwPE#ed)laqRრ~{qXD2P $"6 /ajݤS1ҩD]-hQdPWu6ĮnLM WKꢊڴLQڴ̉E]Ԯӻb]]Oĭ`gŏ98L&G[ߩZ܋`bU~~,>gq/nĻ3]B\El$e\g!ޅ  IȰ$_N|$"6abjP:ҩtIKvtuvu[cAJ+ƨMk3_!uVRԭ71+ӭ\@<W>,."VO[čMB"B K>պڴn,ͺZحvº /!qf Ɛ1lI$!i?Mkki9y-J$񙶴-iiy+VkSJ -ZڵocTWJ.(5ĮՍŮvYlVⰸZW7 Zlm[:9;k]kŮ[mmV>Qսa7&:]P"oMԍYXܛ M ?m/00mN#kyG>/w:]9^|W|jV]]jUW Z:nM ŮX8ղĺ( Ao !!AM"$X:qpzAS$!vY&V2Zҩe-uڕuFlbW:髪be DmfmR_Պ2]m6D{.VӽLP]ub3|>M].FY&E%]gsBE\8 d/M~I0\V2TE@ʋwE[:QW-JKv巉I2uL^ܪYוYFkW->xsFաn7jb1}.+U<n$'-M*IBNguuimuu,v++V,iJH8Efx klBVƐue]D~զ鿟hiIlZ9ՍDIR,iq啖ڵZWPJikӺjtg: ${-;ʈ]] %>Jjw!զvqV,e. V,x(K$vq6o,ve R֦Xꬾծn Y{unL jL߈[ [ӻ;~7>5 Lcc`s< ^xsVĝݛ{A|/qDB8EPĢ.pMxaq6auʂ5g+/6! b(MEN2)ciU* K4ga%kD 'ubbaYeʂ4bXPu1ĂUPQuOY|QU TvJ˴p601Q̉TUC\Lߪ{a[ $nM ?6}"bW w^.Ļ0Klƴ;Y+ÊcwElVB|,6EA2ɉ/uU~oGmx)KhhYPEJJiP"vt0uUgQעeup5^0UAmbW&^w[qw>h}u]"*պ:,Xm֕‚JN$aSXR$Ӊ16lZZZ+--n/z;qzڽP. VVjW:tb0d ΘY~B|>kJXWmm";cqV56 ⰸġ~9"Ay[+6q"zh.u'hP%֍uj31 j70] 91TCjjLnM_ f LAC Ld[ L?0y鿅B oŝ: ؼUWvqnؿ( -,vp(&b:'2lzl v+v,~B/.jMզv"J'bШ"(j[!ʊ.BbodJ'Kh(,: &)EQu_]'wjW؅xq_E] 1!V P9!tY9tF+;AUptGa51*ScjS ?! !vEPzlbŻ:cAšnMl`!EH"~,YXNNBDcmd7tpŦ$n֮u& u_ȤE`U:'bMF*-Y]=مbPWA]/n35ưMV!nn+g[}8[l&'jKlBSl$yy!/KI\+-MWWSimx#qz7Ah)fӺjYšJV$6 Ll2Oeqo CX]ծ(]ig+b[ĦCAX$vt+{{sHT?܂bjn`:LVbڌ6#6AL aԭqk`]m&oCa7nM g?y__m51X爿֋^u/6/qE<\]ݯݤP#ZծY11[u1|5Z]LN/6Mp1mbb7.v+_EN "$Eķ]P1^HXbD D^ AH kltUu6S;vŰ`vUNUn&8.vEE)CQLjWUZLEQpVuQ&R\Q7txlbUY+q5Y}jF}j vOp{!BŝM!Į89;aU:6d!/ d`0|08ML ~ vejR抠̩]y6sEu(J"6 Z:IWE{bN֡vujWd5XŭӭXܫM˴[q'*HHlWIPu֦eYlV,+Z+օ/_Œu $$d%/7_iimz6[7N't$$ͿٽYiii7E[Z֧ZjmZʊR~ MWuO+pLհ 8 :fAP8[H<,HX=g$R`][M}PÂY}F)Ӯ6cí5]Mᬮ&*va50}4CM?0F>?SӽL?6?N ?\l^Ů^<ԭ"{sω{AB&uV֢V?2|fnM`,6E0& ceXP gq%}n->QgPgBUEVŭ2V ddZ:{ILiq/b!6B:ַ:걸,"YM:Ԭ`q(Vu1 LEJYTgn&΂t sR{qo"vEG"j"n}aLQf`bMkP ߈CbW5uUg!ΦMܛo WqB<ġaԍIPz"Aqb."6 2H!P7!KIˉJK"N^1Cu#,ZLiWޜ:M2JkW]ܘX}0a )"tk1ou+n8c[);W[- - -fE,d9aY-MMNխ߂7p"f '"+o0db3ĉe8{w/-Wb!oGŽ֦RAYxڬKi0 RĭvtoYm*IB1jX0m$6'+]\Ļw-'W:ħRⰺк>pOvsb0솋aStvabtL L?!tkb8&M Li'Oí._%6ԍ?ԭ:WW-~;xł:bzdb؝ܛa7"(pr61+X+:XgU bU|.[@(U ߷`a,XC$(ւiAHނڝlZ'_ UZMw B(FB.c!$T,DE]bukH|5nL n t6l2Qa8njWԷaV[BN6 Eßԭ'&(ASqVи]bW?`uB,XH7lgq BB$"Ί$!_E]od:Mun$(BkPWkPZꬨE;mVgE^11]]ͅY ~"' oĭB?V"~lXKBK⣶.ծXZ`!ŭߐش6 sEBBp 7V/o،a5$6-_9+-^bj3OtyMB| MPXluYhiY^Z%n-XyYj3l`b\8+}OnQb7m"ĻUVREPPč]:qimڭ%[O ]Ӯn i3ʹaMp1}C]L 6&ӟ30e<ņ{S? o{{A8WU7Z֏/ڝPYajj`4cu(agibEfHPEčዋa_ōčnjS6M]VUCڝ  "b3ZR ,.N.Vu!E}oX%S".]P|t2J'ڴvAX݊byq.b:V^}PU9(]Ṕ2ine98[muvqݰimQWYNVð]܋j7] ?EPް Sɂ.Ľ]X}q#AXu 8 ^jʗӱȐq"N *t%Ahӡ$Ի!JEI -JBKuUսoԭs2F0^VWíMCjgRgdjIlZZW9!vqjIlN *(Vz؝BZ Ajv'q"AɉS8'goo$@b0MK˿f⭴:+oԖ of%{'y{i͗/v+V~CKUk: eE:ݚL,~ ԏ*[E0)bFq5څxWfqQI(Rčyf99]y[],a50}bح6ava5&û1vfx7Ά&t1eP՜L İn Lscb`cӿpob^Nzd8u?E<UUVw b[}Uap`pi: cuk8L2_XJh+b.[EaW:ϕ"Q ˂a qΊb8E:&%6 K\`؝:9yC2NkQCS꬘ʼnePZgԮ.MA vE\LZաV򂺘jZeRîvv+:Wi]Fln09QNÛE]o[ӭك8KLPg7v3'mݭ+Y*dہs6VͩNNh`5\ǂ xĮNq8x7u&.a |]3,^Ń.,|!d[C'$de&cw̍:8uQHɆ-v,SljCQ8u`:alİb7J sMVQLt8ųXU1fNj8)o,> EBWV*$v//|-k6EYR,Xfذ" *lqUܭ6.6W!au` /v/RMQʜA_ڵU˺YNoJh=W֛aD[7ó)txaq}ӧgk[LabǾ9/~8ũS/zTiŋWu`ԳbA: afpuNͺ joKh""~TUoCÂa 2ÂU`v-$l^-C,V\ eXWWeJh:L MpUL֩ab`] ]x[0$qXT^9El6\]aVmn6QSP ʜb8Ecnz5eN-'-xTuvEjM:LaxϦtNdb )Em]|'ûWxwuw@M Wa x𵈛JP 4[ny YX:,k^6 YuM:Ӯ9I] M B+޴I] avEEpx;enNeqto~a7ن֒ВPxAX jV\ZX²8lA‚U*!AKV킰]V$$uX(ۯ,Z"oOyyjt Z֮E ܵ$Z.Z֮ևZeoԡnL `sWh`:%ӛctëpHߡ7˂۰xz[]W%Z676ţ߫8t φp50kL􆁁0 t#LWcc L"'ӣjb`MO10}ӧO>}ogO2+⏋?W[q{>/E1Ŋ8aE!hFfp(ʺ9 T9ܵ$~0|:)-T,Hds 6N2PšEYbW B !EP_.^ 7D7ڂ%j7NQ7UxєNNaC6M:ģ z4z WdSݴ &.)Uf6F4W`8ԡC(2,b"ZY6p谋WsovO'qz[0 [Ii& WEHwq6eEX]-$lAE22.q(_1|kiI cy&kYҲm -tҲhjRvEZԃn;գ``MjW9 \ϙ!vsz4I<NG!abx_hۅ ţrYX6- lʲ%lB\7ِ_BbJKBo /7MeN2|Ejm]FK--sz׊˅غ2']˶yb$mviIA}htUߙv, ٰ0QUaCUI.[ADXmQB^0yV܂ۦW``:LpNp71o8L 2 Wea\ӿhb&?fz00}ӧO>}o%Kß'~ӭ/\muxz8գxqguSvC/XP7+.jWWuSaQ7m1|oPLj8M0ub''-Y0 $~lA삺o]P x5DU7IB!صXPW!Ad y !AXH$/V_l D 75ZwY:mnv ,K\ mQ"tSEQUBfA;QQC6ԴQWut,ӫҊڍi雩E^91<&s~cz[ms)StGcөt :ϫGuWŃă0'c !NU.ax%!AXCBA %dadXe}Eb2.b7i]'tt \ҍ9uI]!(-jגڵzJ'-jWWZZUE)fiQ.0'cxTzn\P STT:)b7l ssgoA\.q`u5i_ePW:]k- &Yqۂգuc ٸ !/NC"%]BBl]Kku$vɜAKkײm$vVͮuڵԲmZtI8q؜Q=7z[0-^- LWuqxCă a)Y"v/qZUSpT*Tö9nvݶiöH]UL֫՟ԫnz6}> p\Ep;X]IAu:{V\VppCXa8ʹ9 ԡ Wq(t5 1Qh%v E>*@1NӡE<s(VU j!h*:\HV2D|*pZfÆVdC|]ȴkQ Q $v]p P qS,H*Ť`hln )s`s#vӫӫ` L߉JCof8.q4NezTWӮSz.NU|hx6bW4] q((,IˤH:RիH!!e!KH4yӃN:dn:7W%J\PK::&e`+6-۾4ëvuU8š``S},NWE*vNջ8!~i#qU)ZwEʲUVZ)U6aa󦶒݊ƥv/n V7p׺g @h%^ZťusqՒ%.k6OOZmZZ˲xmv ozR1">Rنxpl!N] EVj%Xwۦ~ L$sz441c&oi`& LL W10+O>}ӧOm>I&ŻV{qU W_!NKZϊZ:N+YNšXP2M:l+@C1V"}ߊ ~QF|̈:ţDQmA!!EdIB/V։iI7l(^yEMzQ͆fҢXPiIUЉ%~RP3USPÊWĮ(&&3R(.j8Lw+&fb:ԡ aq("~kq iq7c:O"Nq?O40  L0}`G,LO>}ӧO->p{so:\Nu!!qgu֡TpPMLá(`Nӣa7솁zTģ"q-n"~j7dq$ YЪpq*Pq%.C jҡB."nb"$* t(b8*Q6cQuL1|XM15*XŴۈ`Af4ndb``z50"n:MRQn8 ibjH0Pۦ!>ԟ'vūxV"vlxpU8*vp@0 Zi !+IaصdH⮓NM:l$9PZ$C]R+A"v I&UQrٜT[Y:PZi0wëP&PZRl,NPWG :Pġxcu-ġQP6"E}ӧ7O׋7~x_xxZ:աuZQ" 8pP,n7QCDݰ[ zVaB8)jM갰 7mv3U@Pw%q*LEH˲6W/X01 ŰJ `ŋAK8E:bæ^euCr&yqA+ٴ q(͆)WxEfb#1M{p5jt50%tbe DƬ*#p-t51o [p3Pptճ4<*m(WCPoC\A,.%t B0\m+iG Ke[]]7Iă_0H0 #b׿;9}V֮[vWZeuzuCnnt8euLOSLFWRÃ1}ӧV ã_G?tcC8}q]QAA=uso[E0:Lj:i c0Ho"~2yU8 9:,mU fQ8m[0a[⫸XP0BfIR:ȅ֩X[jV QXU|g-q3}`MMjA͔nohZ!tp5UPU`  f1T^gE00QjiS18 pAozR)P]I ϊyqh: lNh8n7v%炌 9?r8 p ERn#vit6 oB|B!40ڣFc0^43O ajm7 _1hwѠ5U˗/_|/?OPS']q(~ʋ'B)$~W qWx*NC<fsh"ƉiNNMbWG*w-4M*wAbbsڋٰxђ w2S8(KvZ'*$ԈlR2NjGCZd `(SCDڤr! rl$!#jiUvnl{l^ Ztp&! 6iE*.b6r(\CaS9{ɣ]Q吢P>W>P+@S"v]vsEٵ?)M8BbqQvU(ڮ!nPO<ᙿa'Uګd9B2 sW쪼_ݕ*I3Ù7. C&$1{]/f>y"t.B| XnidؼW 0.nF*ϋH(XFTXian!q(6w۲KN(3ʋN3ggɮ Ox L=K쪨"sA$̐p:>0T%$E"k%$$ngTI|j-n/m(CDaTaو?(ڡJ*rW'EQrP 6,*lXtXrSOvE)쪨‰nU5ʮ*'I$nN'YfTQE7UIHHx~v&!!!aHH$!KHܜ$I7]ݩؐ%Ɇ&P7`ʣX&ʃ*a<*)^˃zrʡr(ʣ*jSSvUXn"vqB]P"qs*ă8$nrD6ċ`HrQy/BI-: g,x A#6C;ash4=t{(8CWJ[hV-bM-[n!/C\uU5eiaoऔU'V\ K)lZX(,v&CT2F4N نl`ƪֲ *W]I)y('D!^U܅.8]/U+:Z̶ja!AU*䰉nn10)m!&DH$.a<ta!̠nEP񝲫c'.^5Uy(KsM.F94PCq(?.xT>WvUTvxBkS^T=]٨_Ȑ"%9ZCsֳ][$5dy4 BBp !E!A!Nnv1vn6n j0 'n0^^(FyQšNUv㐖ESr(lE6qCZn&T&(MP3 &n7'<{훧DBW5# wH*N'*?] ]|f-n;U%nƇ q(fPqv\-om aaP.Br*B6!%**򱸈]ڏQ]r1v8孅1Pv1à5]73v㮽ucƮ1hux4h܆˗/_|˗/'_Ơ_/(/(+=!~A9|A< |I$l>TrWrXaڃ!qhE|H{AyIIE*+j㰹(]YvV9͋B\-]!n A+o-Pe[B*VSBqbQOhUgMj2]5'H6N-iNjs7QJdJ,IRiW`T!AE3j6/rQ7 xBlKaP0h:GAɸ+b\!ƫr]; Ј2QUTQkwS~^#ktP~++ <*rh|(t&wŏ5wBP!E()P(E9WUE*EOh,4F y " CCy>&A$IHH8lTƢB\QB<w^9ċrA#\PBP(C'Fj(]*M\l~QlEkd62F-EUS`)5A㿰!.*BqhψC$n SxƢ]BmAa|,v]t9 D(xnzXySSq`1M(ơ]C$媄6zQEFem$vBbaaòKa"_HӡN7(r0C]}C0T%nNgfŸYˡH TSA&X>VEA&NO%nHq:kaib a)J+*`\u ԰nJ%RBڡ(0q(BP!NظK+6r..]ʃvw״_ }F6 qQ(.cטA!nv7出1(E3캨BQ. MP{q7iʋGPa(6ŢZ]P ϤʫӉ*p>zzy-춍WOMxK sy0. UT ܤHߵ m$&qmZnj{BEEPv^qmgz ]B]6Ey4ɫX9,X`wRU$~$&x7w7ٰ"h 8 Æn{r+_#xqƠn\ ^x^8M-lx4h^˗/_|˿/Bk{T|svsƩќN<=ˈqUO%MN˫dC{iUaaBĠ"*]!ċB9R( U>!bqUZ$ B\yծ1"!E]mWA APjlE9ċ n{0]٫⽸PE<w)xmׅwANJrQ\ğ(r7"C5 sPvԓ]PQ{MFXay~f؍7BBCڇLp:+d63 !C.PPţ".NFhL!(xc}cnsSfˡ\”/(/xCPVfqvQa+&namv eP w7 '4 :j۳Ssg0v Ʒ!q0aNdX!*7]C UvU$MCkm$9P=*0=vi,qWr]i]vxVbE[.6f`)ryTnlwU]&EB\Cyj5Ʈf1bܵU;4io4ƣAh?1>a _|˗/_:0hP<:D}eWEQ B8!ˣj9l.`i,as׈ڮco46''w]$Ta9Q{TUjMOv]v(0j[M*CЈR"4즘ZX9N(D2*aPT-ɫ83J-IUʌyPepă*D=aD3QF46H Aa(( 6]*1Jc/†ʡDA*"v֢`3⮙(rQX6n\xUdPqt1O]:J>s*Q;WKή6 ʮ?ֈb7ɣ+?p(^!>h+P(4 *C 'rKmC(BK(8cW!`IͧHxB_ZOTyt.Cɡy C5`X'dHȐ(*R8yo]Cak"XX .(*xhCh[nRFc SScA!A9 wq(ڣEڮpn($T١/Ta*"ot}+3T8B]TPfNh*<'~ kP2դxP&!*f<“8 .N*7+ġ.Xr]B\m#>kVa% t3q( |,>ڋxPr0CQ=nzc95Qfэ]Đ#KO>LhC܄֢.Nr!NPEB!S!38JBīܴø,=,;.FND!Rqnfh71xhh 7Ơ!,_1>hScis;ܠ1|˗/_|U/Vŧ.N/~"6 sU$!$S|!B)W.n #v 8 iVf5 hQ{Tʳ MDqSW,q)?(xXNWIJMٽ ;j)R ʩ6e(iQRKiPK"ƵI6f9 ڡFB]*j+MWEj*RW! -A {x5^Wq*qjw7`G(d!Ʈ|Zy5 jګRJP)*My(Bvw^ SD*E*3*voO!MT)_!ӠFC'F<q &N8\ E%)" FSNƾ{A.ڨEoړWU-suw0f኿zSTQMV~*fSU>B;$~ !nB܄Ba̐0F8;vJW8lwC[S\9l4 R)j~.(wCir7sTNZ(&NW⦰X ŽPnBPC/4UXěr*\\؋ |^l*M7/츠~xyoav:TFBpņ Wo  CCa!SCu0!q vzy>w)v7a9%T9TqSƌ|.&tfnvvSIMSyU˛ݳrՓ*!A7qS$'!nO"~4v iw85NQnB')1jz| ;!8 am fk40h7۠˗/_|͗?_>BP\şV޹B !M|Zvj9ݫF#NS;4VD=ki߯ULboQt)ԲĞ N):lW&Uq ڮ|W6*"*Zȸ\.Eaۨ +qoUԦ Qv8\ Ʃ;vjH!W:ɕ )5A)F W85!1N-=ajBܴZ!h*^4MSZ'Fw88U;ũqJQojwTʧUP>MgWoʓ. ns!Y{>*PaZ >QlnB5դ85Ty/ګdsvlwgԢJU!!SE\|0;ib0Cġ\ xSLv*ڡ]JSNٝqxA3q?f()(faw˩x?&hhr#^bwũc'H(7oN; Aar܄UUx'r+.$$\q)wbGCt3H6l6x8EA<[zȕ'5$iUy$(S(GS q7=>SƓE;NS!TW'UA9Ӓ^APCBl(\)7Ea->H|Y컟&qq TPd&Evϖg Scv~B1t;̕v3Mf<8C0hiSNA\RNgwWlnBwjHv(PNEPF|P paPCtxy*8\,~o AUх7w;$!1 ͆kaofCBWH(ڛ"^BS3ܥwکݛF?מt3vl"(oSyh)rqMP宽i aٱ<[hIofGړ lNl! j'r򂗄*xï0QbFf/tB6!)N B])NZ *]5qBJ֒x3B|0(!hDA;gM`r""ACKH՛W1OgwgʩWgU7gqjAr3r]>Wc'lB9 "ժ7zQMmB ߮ߚ /Hm9_[͎ao2,jqX2doڡa쿪2;3E4"CrP;]$d4K ;j9-7nݴCna r(86w)2lɸYƩ0sx8Q""aP揉A{(ڛ;qwZݞP4UرExp) X䅺rQ^W|+67񪶐H'u% !ճ8lNqPHayHH*$M5\CXk9CxRnr ʡ܄všơA|n )~C!i z YP˩ݵTY؋rHwU>r=d9vE8CT$(Ci)7qӶ98P"*宼Swv=,,])fC/?5Q7E7AffP4MTkƏ$(*)o1>Zcq ڗ/_|˗/6_~0h#\\>?TU~S $Nl 3Kދe9wA{6NM㰂FpxS}.:(.;:(AZDyT9xF3}A͎rڝ|7~|QBfh7e]TƷr W1jQ>*i&vd Y/ěaŠmPFD),U$A Q;5B)zwKU/N!PAP\ hM4hFUg7 C75"(qjݫ(MqjBIũ< ڳ<8)(\iϖJ9T`ig4rJ!Nn)NIMy6 MP妨r*B¾m\wYU]ѨU\h\¯C7zSKaC]YrzafdNU.2j+RdCAB"N)qƛNNax'P A;Ʃ=+M0x(㡨+iB qX0xVS,;` Qyj4v4ƫENE ;6xVrݖń_ڸ/}[Q]ACo0 /Yݳ*OIP$$%$!Cna*d5>N*wI!NˡӴFȠ<|TOv8MtMQ!;A9ě nPE `) S<Bg}wQi'S#( rӤ1C❶iGA9-4 q*_0~8-DPSZ7AZC6I0vH7YFU BP E]hZ U[(þ^tIB/ U Wc:d8vKȘŶsu_.y2ơv8DqAɕHZ۽jMիW2rZru,8iԸ"h%h ń\BP^%AW.ƎjAyUbnqWAP(e\xghCPu3T-O(ˡCh >W޻*lN[C74U6ꂢ*FqZtiPK٥/[SWZ" Mua!ݬt/oR; Ԑ\, YB-\YQ$h#SAaiQ!ap%n}<qAf0^40~$Er.?4nڛl!(74h6o.؉*Z`ÎB$âBa94ƛ"AIjfM5rl⦛v\ƣvSH[ThIqBi xTo3 7S.7oiN;RTE9fPNC UT1m]P{g>T񽩝*עa6\pDa/0N UTH0C"THprA␐pP*,7ÌG qt0  Gi ~$~X~iv]0>G.SySS\=Cݩ"Br؝:n4NqD7A7qqxr ]AP>4nPӌũMvaU3q*wM{3Aܕ5]cکq`=hwA`\Dc̈́PEÌqhn:4=˗/_|˗Z/s ?&(6߷?=}Q]|!NUkZ#;T؝4Ywfk]PX;4UH#.(H(o&-BP4DSw jCš*wɫB9rxZ(jr,j,*E5J7jY_x*BE{ٰK2Pj|ŰQ) }aE悅'raYCF3q*Ű !!0"(!Bod5C*Ea TNq ej9LH)ӈ! B^=3h?8S*6;hyUh(ʩ ESx'xy(TS A;U(īU+T8Lѥ,Uf{6ԢT 'UzZ~ O~RkbWwq;ly9Գ؇q'ه3PF}'A\ % i qU$t!C.( ؕ*HSQˡdik\Ph )l4`PN\SjABCP4)wA; q*TͯIZT9jOśx7r(,)ġ!qbm$.ܵS{.X8u \Wfi1`x4BGfffд4ƴEc|1hU3{41~mjf|˗/_|lw /om>?(|7S␸6Wر<ڝqU#>ؚTϵS((C7fQ!͠( A?i4"V\5kq Uh{c!MGKPV-a-eɊrWBQ,HqWoU?+ͶQUͫo6xqPiwRrjB^|mWb{O. Z&+\Ր F$UR*Ta %aqB1B]{E5vڛ6;ƩtbA F0x5^xơʫꢗS>WNqH7UnGi?)rwʣvUک qxU7B*wM)wA]]a\C-QͲcB*ojk=XxBck7.iid!xB6 ZU3юEv6C N!C8̐!CFJICZ1$U$$(l!8-qt; 4(W ha2 PCc\]PAGE\r*Ӡ!N|HY> žQX>BZt [Wi l;6) ru Ha/PxvȋôΆ+U$CBBU^ !!A8ijSvoj8,;␝8rbIONEw !U*?{RPqbܕB\* *TyqS .4&^UBIsCO=9O)q,n1N&ބx3 P̠]Ynwq* wj7qNAiO80;axšAD!fv/2hi|˗/_|OiTl¥. q*I\< 6o g8ěhƎ85ihWrjūFkA!t`\vUދFig{vA{TJBJyg_Ԣ M=9 7ԓgUL5OE-'}1ömo^%;3ʫ߰o]T^*d!N;]{/  (fCo5bx Z zyU^mhz6Ipq 4NA;pq3JU(QhW(J۫A ʣC98 OB~_BQ(ʩB E\#(*W j\ʡBjELmE*bPxB؞YOzvxvqqj|{v{1EٹxTU2djjߨ/lC5~B%AE B) NtqfS\qN;0C\ũBsqWfB7*Sc*BctB\N;TO+7퐡\CyQ ],\rQM`whx*UE*f)n^ʡXª뉭ذᲑ %-X0a]\UHP,8lqHˆ& 7qăvUTQ0EBn}Mbu{ra_,T90Ma!؛jwEn^[70Aܴv1N}niw;q3N;ʣ8tSˡUy5~{,W]LTyȰ\ESʛ8UNao"JUnj/4v7AvA07BP"inԮ>؝ڡ7f5LыPh35$^E!n-?4BQBjU^ jzgFF=SO$\-ҶM"/7i/\E(We{Bm˫eNz_e4w1 %Ɏ 1FfɋdGEc2dH08-.w!_%N34"WU+vJQDyT~hjrY24~_ƯܴJ)*SQ)wA qVGq(]9Dh7BQECRTQj=M-ՋZ(P(`cm*Mmx Y=0N\`v2\*!˸ߨoDCfyqZO/d].ٙ0#IH$drHNpy!qY؇`'C*dG0;wB;à] aڣov7SaVnU!(T T}W;j4LPTʫrqZfUi*^kâGMSVZOOšʶKWWCBaIHPM-ITWyr.HlkHDe| X-i\ U% R2N5̐0]B/SU$d¾xh UNZ*iRv;;w5$,.U.'U$.!8e0'dvҌKxҍTʻrrjT2Nn9-LQ.k=CB&śgYv vwx(10K98r O%h\q0]l|8K}Qӟyb?h. ka[8]k7c<.5v4)ēR~-h!hƥ1NL!5Ѭ ʩ 7A!.!XEF+ʥٚ)6|S(UA9,,,,RԢ^0沨VB9EzZu;⋻R6y|ŋF-NTJllM^lt9Rdɼb0CvTMj^o%2q Ba$ADb"UL#L<SEbkFwa`DR%(ߴ`([9$.ADKY]r7KF\FkwxhOړr)j\B4 NPĥ< PBR4YJt8SbT)j馚jiS†Bݗ(Zj7Smӿey7_4;ՓyҒ!/|9;W2Nam*-5_7z>a)H;8U4q(* Aii&~APT!岹KA/)ьxVTǻ! GPޥP?PP.E'R]N04 )jeH3.X.kd\ǩ-X 7TM9,yqvNYxuz!_wʛa6K]iFEyBRYB")UHQD2ēnݻĩi-qz4R4Bcithʥ]YMyWC\ iRK!.NqC;S7vÆqw)J(姂۸,(jk\ nw;^8uCΠQqngىg24Cs(NA M}鿢ͧ_(}bk7o<ټ=gCW l!Y0.nN{a $.4B4B5iMkwAwxh4ݛh&BeB iPSUB;M)MJ9BQ/XhJʻzQMRl^^Tqܕn._67,mNVb QNEeWZ66S&J2d,ShJ=,^w4Z4iRI#ԍ0㡜1(z9U4)!(SrXd0.K2ʥ": Ԕ,2.ک⛉7hR⮱\Ƴvxec;PEr,t(RhPFAܥ\є 壸q4vhTS)~QH +{ST/FE߫[F_PZ|x7_+sh__ ;bw!C5xv)o,fBFo(rH[7NBSyh%NC4=`8 1(lN=5fCba*=haPP&h B)E<4ƓAySNAyr*)U 2h.ݤȸSrfС]Tqrj`&e쫜2lMJR.e[7wYU+6&ӄS(taKǓ[+!ؐXS$$־KkSUv䶣IrZˏnv,mo7rhrYc]i\7͎G]QfyS!wv[.&,I; ړr*x,ݤ0eIQC0a hvw=id}HehvƻN2(9纽vw`NqS҅AD}GKD\ʻ.A0EPN5;4ƛƸ4r .Ƹ i'mf<0򧪜)4>}ӧO>O'kkKͻ*~q),;ݯZ#K#..qj߉gmC\J{hA{( qri&U1h472ӞtH*ĥ 2%t#U$fJS^eQT)M}S61XHQ]rSⲑU//NܕfnKɎ]M~k4nNeaS7MrF-/rf6J.*!`G8!d4voZ qWvaiq] ;uvnE7J*ꐛQ5~uRR(%\ݸ[QhavF!.Y0hAk0Kø7qiǔgBP(kgI%N! 8lH3%R(wh*U( (F-OF)E|Qܰ^i/̍sӆ}׿^$dt2dx M`SoNүQv imNB $NT"_ A(oW#(V8q!AS9,q(K#(ҨqiˍABB5M C a)qP,(R8(r(K CSBҞdg\ڡ\6Ô*xJWB!Cn*H6ȫ[┖JM 624\=Cʻ'3N/*XXX aOwC"SnRn3;R1] (BX $~jV{&vPfv<[.YP~.(]9KQBR.ioߔà]QA{R2 (rhioJ4]ibٝ7A[P4B*4vK]$(ĥP唸%(r;q)MvAq)?W.A\J?(Cqw!@cИxěA{8 o  11Ԡtcsnf|ӧO>}_Yyǥ\?fKAR_ov%. !ϵqi`GҢo\<钦AhD9 STi?S޵CQ*&d(F9%RQUF< .+ZC*(UTBz^P.aڰP.rZM5VpToQhndoI:R~jIn.ڨ|9_HaMUmr37f]B#D7P"HS`vL,c BB!( ta][S)ˡ]vFTȔMM!rhss(7qpCܵxʥ|x7NP.I<PJya<"(Tc ^E5VHvU.|BA&_B) n/T7^C{$M\zwJP(,A\^7 ;n v fPNS8)j\EAcx7޴SdžjBQhԐF(S#tF)RhӴWlPx\B֋ _Ixa}?іħK!.忝~R> *mghawY`à1.AѾIQD{DA|gÔx%iH7UTt/3!z{q237ڻZ DWkwt͠JUZ)_T5 岔EmIaf{A*wK+T񲰼~S/+in ٰؼ[ž%; MlxU^ebsjv3{)uJ6wU_Wɿ*$!Bv qʈBы4#CwQhvRT;8ƌZ(fdt;U BP$RJ\ amqךv(!rJCeB NBcR.OgtaR޵Cѥ!sMũ CPA2g]ϕSG97E)E.(Ԣj4ZUP ( ͩ^^؇լVb./|evi-!1/d sY̍"2wU%% A0XȐv|gH𺓿!HA! RhP $(¢PaBcPȆ0(!F0ƛ]a3C!TBFjq(,xSTw(hn4+Oڛ&8%% h?t0E5Jf9PTHYnֆݎ[ت2yeLSXX/}'ASb9ƛem}'[ؽKܭH!!!NB74ME!;vVnS(!Z(v$ى;>K'}ݛfaGJDUA/.iqwxh4v)P.E; qب,,t#5$ة-.C7Cq vgҾ wک\0Et3vPA1~n9'˥SԋC|1h&ԃb|P! iB ifh S4ƛ\ń.1Ԡݠ3t3ӧO>}ӧJ6~P.AvM|T><.$A⣠yf ʯ]+ qF\Ʃà1ޭS!AB(_`}0s aӧO>}knI|U#~VEB/cY꣺qmcxf9_ެi<թNz_*”Uɍ]A,SJS*b,OہAPZ]17nu)2 ^uA|WO7,VY,|El,^d_ȍ7y?t<ܴJSYnrWd|ui7ޝSon9]W J*bߴKWbhzWr Rl|S`Kه[wq˸L"wHr3R2ce,i-plAP=.]Dqd lF0rwq)]]g.)I<%B"A N7A=ˈQAw㴑%K!!`6"+2|]3dIYdn,p㠿l}?_hfuZo [d!ee8b -sw PaEv θAtp'hɰ`.Qۛ]NAKqwijwq. ݰJS="B1hR/7k̔KP20v %8w֝СfokoujBb3/tM)zEariY.E{{zjC"e;͊ZNq,Xf{pI, GETFT7=xϲ08,AiKiHA-eՖq FdSSxNɠ%HPUM]il$S(7Nd6&t`{M 8AF\ueYNۻ`h3Nq>n2 x.S\UvOCSPԥ.qKQ&lAP`(qjژncۿ`ӧO>}ͧ"ߧެg7ayWĥ_xeÏa\i~}&~m]k1_?xz37C]zUa N"bwĩzn*_[XX.qYެEl224o#/_d~h {xwC/Y|o2KYE~Ճ<%<.c'e3eVi .3.ie (v]b.#z4vm((b{ BƫW#ů $aCşեlԻb6q̸)AK0.`xf1{5[b# ww=87O=` [n6rsn;uw2ÍnZtSe`}s^AC^\tam>Xui9/(oWͥ&n(}3 Xic69Ļzus aA؊MB 0Q՛k t!M<KEʄRRR&%޴NjPey(х۩ԖyIְi˴ Cmsh˩Sp8ˮiy(EZl,Eq=BB"-'Umd$$zᔠW!H< %Zll Sof=mqi Z)av_ eoW慎Ppe N{a p0H v|` l!HnPevweuQ8n۫f"ĥ WAe " wl>}ӧO>T??)V]WL]ͻ`ewePlG0Ѳ0\QG/NC\]1FO37{a̰Cj+L qZ4iT 8MP:4EĻx`pCn,,7 "_%_%Kre$dq|~,O ;Hh=E|Wu Ӹ`9 ` wZd\ 6]M77$8Cb\//qzf p_ܻ}w8 ޸y7ߨNC70tcyJ]ˋSKR3tq̍qpܩxezsZ 10h)R` ;(=Ns8Ͱ].`qiadx 2N۫Ab`HIoaexR.Aʠƛ]Fe#CB<7 Bq[ᒘY$$6Oʔfjp0㴷79}Yq|4qQ+4SX. )=Q`9NX88P4NNa8-Af0E͗/rlMYzc3a(~2,z88by:%!7-oV96”Ah鰆 f ql)`(bEJ<↍64Ŕũ ecVo&1ތ!R0Nnl :4ԻYۥLK7Ի8Wヽ1~6ލSxS"NqW`; zUi" WAegAlEooZl6fc a O>}ӧO)|"1ESk"%~VŻ.7O uٶbPˠxl _w1K77g{c8mvAqOہq`x])˰]BZ ZO͈MK""!А1B^$7/ ]䋧|/M{pݫ7, 7_X|qdݴwͻxJn27|iC{hO2(:ViDwh4K[݇66hCM;~?x>Xe en}wvf#YTt;7tӥ}1t2d;M^/ĻFr./@  }a#62tlw ӎwe}nlpw p`cƐǛAQZR$Z"$N Pf#J]1LqeNRRoC")7Xq/"ACkPE!IZv07 {s, Z%̈́YeM”]v1.%o9:%iitۨWb>Xĩ%,ɲ.^\ZNMi#~RÔbC<%]%!.QiKM éaK-yq[:a|4:D =P6aySA1%ÌSiRl SR%NkPz.R'wql62>.0"j&gum/ K? 'S3.1N0C>H!.E\`{M&l=K۟l" r{36ۧO>}ӧO n>BZzW?Y-?(TP E\5EK)ťe;\u=eeM12H)ZuC,A"~T(M1JB=ԛY)ݸeoUHHB$~%ht9%aЭ{DSo79o Fցѣ|Co8G]nN w76ݽ zq>r8 nA^|]2S}к,-6J6|9< ntdhlv_هlӸtHAaǛfov\qZC }44NjPC8ջԛ%NQ<AhȢBаu K`;%fn!b6Z/%s#%HY le[P:%B 8Z:̰B$$N;,! {Fqԩ%u{Y㰾x_ZnI8x:jI,Yf ݥ/8hÎ7PAB2,7SpIMěGS[&Ph)^m=<Ʃ^z`$M\"SB|ayN=haRmcŠ)nq. w aθ{QCPpa= 3vQz6ƫƐ!퍢(ƛ֛uj1>8ƫ$.tmW۫AK\"> ꣉KQ`{1e m\O>}ӧOK|z\s+;~iş,yWzp[i<Owgv2.ۻ&ԫzwE\u"e{Aaw!NawzE2 jPİ7-Yl?(eyӒH!7fHIX4n/JnBFH~W,WO7_<%7rs]O7qMr#w%7vFMzNj 7Fnߵw=db;֊Žю]aK=m[Dۦ53baac1#-3ˠ.e{N l:Qu)nCK< s͌*{.O1mtPZ !U`Sd|l.i\Q ި[M]mce.Z-.ɸmwl +Ev`N,>w`kK˟m {˗/_|_塈[qEKͰ"".˿/pbkC}Jq+ˌ۸aVa,o;%[EYoxӒex8#(6"[vCQjcP RoJjw<-ˈEOKr9oCrH~ddEdonANWӫDɁ'ro?F *ë=/:ESszvxO]tKѪЭ^EQQ'6-nEUhq0WcӱSq%C=ԇƫ^GV!neJpFmU풅MѺ[݂1^Ÿ-]Vī"Ϣ^-Dllu PR_%= e.-CKq 6񰨇 F $>o`j#ԥ[w%%COoFO" POt^e=:/֐'z=./1l,їړn?h]z8Ȑq918}HG:/.tӲOZhy~ߴZ#ťBY'9(zҍ`cP>lARaP&V6Jƻ bVlloRomQu+[!q)6x %7qO{ad|VГboVN%`IO,E $tⳖnXqmۥX8P4.-[ʜ.ۉby5 -U;h+[к$hf0!qY[|XI6n',$n%e K(⡪X.nAC܊0nepzZ{~K0TPrĥ&%N?77'"t 5nEd{([ۮ7%T7EC7Ttq[a<ufؘ wm 3.-mqao?;E|VK%#Evlo"6k.bv0Elo6&(l ?lS_ۛ3nۗ/_|˗/2/Z)Cs?.^-C}{6nm|.3~4> WaFTwCŔ,6%;nE0"^Ml-z= !IUYOwfğ-l S3&3jXXݲ#7rCȓob%y$ۓ'l}p'n<8g!9Ϟz7aۻ0[aCLJƫ8kea`e!Ȱ9]faq".,"n ؿkƻƭp,Zuyyg,m,dӺ. Z:lU[IJZ'wYؒ$s-cY/'kęSJI8OY/>"vТpy>uv"(M9V>7dU.Se>ee`c  v+!'Rīe v9FQw;tNRvmcLPSvW"^mt"Zf\Fz>[73.AKtȰ=l`cAl6%E\2tccCwu[]:.mo{]1eLJ` ʔ!nq+ 6g?`Oپ|˗/_|:/_j?g AJ}.e 6>6~lm3Bԥ0.AQAE1t)0(J=ĞIU0ZVl:-gHC[ n,n,JmIP΍,n'Ev{ x:$gYrl͖DI/O<ty,O*fAP,:o.w:x]Bg㒍AYa{tMJLqgrpn- ]({&9/t\Z e7ePԛq٧wk؃M=mcbt(EH|Ruςlw6mRwIP.&![1E!>a:$ لŸ 'N,lc섖xXXy(ڲK(]Ly763}b 鶐!8K]'.E=lHӏol .9쒸cqea7}$>Yeq9#B8peEЩ BWiTIؾS?(fC>O^TSѲP`Hd}Pۇz(\^KŒPfao}^φ.{&q Q%!7na m{[6ƻ E 63vQCBoƻbw{1zȦu)Oۻn'Y 3wAVV6ZO'KCR-(]ć(Ⳡ>(_g}2dc ˗/_|˿xE`{SZ"V?ԇCqbGۭ>l ;鯌7k|60P0޵n0îCBqTgLQc,lͲ> *kaorJ= YxUr i\(n2%CDȓ°,vˌ$(jī-1^mYn!-nCb&.6]R0!aP fЍI"3 !t܊E - B9%# C¹>tcq,Ly:/B֓lF2~^e^!?sn'Js/n.W&㰙qX~sndp$d ?[ɱx~ %C6 J҃o?'렛z({hpR؛ -|aJA7{Ƞl6`{l ZEPC6`S0wězWuiVDJaVCA$A\2ě޴$,R,i%·!81s9LP}֫faL·V͊K"Eyz"%H|NZmۉ`{(u=A#[eo[ǻy3. ؘ12햱1>OAƸtRfKuwU:$E2Ǹb`{3uپ3ƫbEmMԫqI7. øm"(n?Vg!] {n`m1d6-? bׂV[]&l-`m_gܶ/_|˗/_%_ԇm-iI\Z-Q-߫mvbneɠ>ll)곺gŰ듄".iP,Yn[a2/ jyU k܊xMXxn"80[ۭnCqMKl1nE|% {[ūqaSd;q %۔]gAQďb|'(qis lc ao_|˗/_/P w~PU}(^F1[1vb0>I}6x5`Pƭ>E\(mH1ԛ3SH0Šu[V+b)r t#da11 nÄ,!A ˫X'p2O=1px/3/ O2M~l_/ūa$tēKƻ J-.t7/WݿMW>6d־h_TuDТRn%A ƛ;0FM\m\R(izAjaӸ6.- ]do+Nma=.ƻd**.Ƈ{aͰqInna2z6b;C;2]?YA0àu>:.!$8EHX CK6c!>&t3E.V8~Yr`!Nmy^d Od77Ogu<&침"R8db5/.]zuWW=iitA$./vā.yЯ̲__%ǐeuy]^uɠ.{ diqiC]R67W %oRO!tK ngK ]Pd2& AKY'x. !ROaOc9XOE8!'GZ(^rx*=p:,S2t|8iy wIq+>'prx:]w-NOH89Nĭn!A)Kqz͉p!!KB]N+s NֺWNs[C꒠A9 !ě> ̰Y‰zKA]Ou7Lh\"EO5t1O φ)>u+Ⳡ> %nM݂bm~jaה[|",(ev]Z?wbˆ xQoLn|xԛI\Zz-[OTZߍ՛ S b)u.! .ai\)rrzC< AqHAؐ0!aFdH]r"CKA萡'{0ᕾ,xB^W~{|)=ٿ\dg/.=/+G t 30Ѹ2_\v+J^]_zqpkqध7<8y-ko|YWe():lQ6(]fh<}vye1C_$nKCK$.և4 f0غKŒKR0>,%B}(]u[J†.Mg3 .SZ؄e-ˁ".qI1C3bPo(_ G,]&nE#`gu1O-38|[iM`s}qy݁ʑx n[-$A%Nc\z8W)(=ćKQO7eP]yb}73v 7=O,ʌK܊E IiPus94X2.]3X8f|wZw{"(z!J`mmǛ4Eܖ~PT⛠ԐnŌj®&>K3.4u+m}PO%C׭ςqŭ~0n0d]J a b]Vć(]SP aպ$3X{Yf_~_~_~_?"c֟>zx?֛bmֻu[m,nT(AKu %.mP0JԇFZ!E[%EPJS*bH8EhL"ƭj Ի=8^drDE#^$/C ///b<^^8Ֆ׭ၿ ̿SxѾǫG~*Cxl_ujGoڥA ]mX4t(Z=_]? e<J=+4)5kODUz:IOoOAbNO-,8]6#T2,i])S-M)01--uI|(Hl%fEP?Wo oں$7ۺ[ԛq;e>ؓ?YOC6.H!m| J ǁE%Ar yPߌ8t2,BXA.7.WFƻ΋.p=9 Ύ //Yx:+^q.A-J_Pr$ލ[zw%<;[R=8ou9Ӳu[s<Yvݖ 3+x-.%ta}OCĻ"">ԭtiGQK nzK0͈xwdH|77n vzSw/%aǐץ%YoT}Uo%S0`$4$p"nZZZor$և񡴨ˆOZΓ<|rw2qⴆ<dH[wɺVhHKZr.&s?QofƟ !S}V]}nT4Iq XߵUqL:dnY0f-%1.ͨz"q[͸z3u[X]FP>?Z i>)nuiIZ2t݊,?a׿_}0t]w?ʺL(O6AP?MKm1}v~_~_~N+Ͱ~n0oC}^sGGuox3ެ7bú P x`z2 nC}W!`"0*Fwpf0 1M7>A!#0/#[H#8!>rHHBmdEǼx̋$9L|WC<+^Вxv%_{Wdd躴ʞWmM{:Wݿnj_*=گگU'=W q V2(j}Wʆ" ](NU^iqbiՉEUE}8Qk ֛uiiݖ$ӊn=[) E\Sכg%hѸNxx?jOջqoL\xq9ݲOgK ޽ACn!!nhg  K!UA0I8> 3a$dd޴*_~#_\12/~.Ԯwdq8gA ^.^]zrrt]v=YK⒃K]Ce'qy}u;hٿK=ٓK||'ʺ%u[`[OPA. ֻEԭ6nEI|?.wĻx ?9I!>OegR%!q;8"S1`HYaxw(E8NSOZ=O;ź eB ~в뻺Z=Kz$n2. KMZmw]f\AV~?y " =aIKJqû W7 /x5| ^_88+e%a^k\p.8It:uWl(ZjO4ԞluJӸlhVqfxZfV`PEբ!%cơfeW e-v]1b lP -TT q5i|AIqh]b%aMzژ47n]ԇ LǠ֏`dPӐ`D\r n'q! ]hHdBG BC`hx#AB8(r%_+Y !_ -}%:x /1ߗ'9x6 ,p9.zeˮwB_p9'r2˗kɃ%aRO!u9B| C1(YRZ-tP" v]Z Ez& RRtz*0aK]CJf\]Y7fe'& iL7U%Ɍں$<zYɃ3慳ne}ABB+.[$n'_@QKROqqG[O7t\q[ipԇֻ,KRE'xKY VкeKk-MxSC1(q[ cXO5ջ[?cfz%>i}m Sz+Ⳡ.C?'[PX`Z",OaOZ, ///Z+Ͱ~nCW~P4ƭX<0n6nbbx>&X?ƌxnVTzָSH TZ)6>{ ͐!A11$́h"4D<%̃ 2#yq!9Ȑ/>oHbHxA/ N.s$$k pycْp a;׿yvjOu= 'J.SZBC- dԈ UكĻM0.J1 {u[oqX5$xŁ"j"UP.9Ʉ.TvITěcb75ncV)$!l\]q麴>I0.Ko2A0$LV|(">1p kXr Sp q J.q<\2.-r 3dxa/zxп+]~a7+wOf<N[ߵ' 3,Z,v`p{<+=q򊃞/_I r.=(;t2L0vn㲞e$2آ x:ȁfH0XҺ ]Y\ćԭnT:L?(Bӌ-㲊XO-Rۘ. Gi蘠%Z`pΠfvqxsxStP1lp {u+1X^@‰&ֻe|Zu68ԛ~8h]$^B^)7}qˉ%oړUw<"[uyjŽS|(Ҩ7ތ.-ćc|7s)ƛ=ץeʌAśZ1Bb\a%v(uKe\r Zğ<к,c\Z߭>n ˺,b|3Xm0s`z?,]0֒ 3.[IX-l1> և0X?'BDP0Ce1ؠޤ$~nAQS܂ '6X//_"P>wo7l|6l7YV?&5%˖Ň/4u J7q9J=Jƭ*2ޤ%e1h. }b)E3C"<$_ #$/q/oWM*09ȐW.ƭ$oʾ!vB/K]-'99]]te_iq0//J:KKCdSӊa<ťA J2>4%!&eEɁb%$Ƹ/V:9|Un4RjmAwQOAL')s lҬmq- x 0%CbD v1E1?ʌ? G,Z^v]"Zf(e0ae-%aB%A}0WxC v\ΒqT.Y A! B68-^ 2aqHID`~F8@P4tÐ}wMdF&_R2o;3ozӸ`97|2r~=ul9yW.]ӓ#8z'c-҃KJ,C&,Q O(rr.G0nŁ~X)eO"SKhIptE}C)(TԇyOqi&$ia<`1ƺ;93Tq;|eKKqi՞> ~S!VAFf8BrK;2J--纤:# qplpY! W$Ex/3KߤbItDi]^Ӊ!O<x  *uZ2"Acf"6nqi8b= rᬗ&z)Eʢ>5$X.xYu)0eb0nVL̘-xɮL/3.koƸtQ4CnqiKP-ܠnie?%n-Ӹ-C<<.E)iaA>APUP'-O͸W%-Bb~駟~駟~?Oߵ`)⩈?w>hY/Ok=0nuƟX`Q)n{i`3("J+P/%(T :G- -L*^Y2KҐ-bTHErÈd=dC&_\2CR7Ѓ77q ꖿtɸ쐃˿__O'eʞԭ=JY6n!}}u"Q(6KtItN,ۺe\:E1fCb~uH]V0D%^Axkfdb=֧ POu,Qi(KJ26xwcQ^e b*vק#XO{ŨS&x*AP b]M#K\؄TxA8" N$m0.Ǜ.9H%Cp uij<% zJ7xqy(mh]Nխ$x>hΓ[]6cvESdSH\uf,ez 4Sy$S)vII3rt1> vcPv)mۉ2oړVI$)KƧŸ eV2X;.EOAY돊f!j}?O?O?{[".EziP_Wi}*2AGk#R~~S SPEbdU#U֠>ETP/"^6 CIBu+]͈ JqD.Gذ!"K! _7|K&̿H"W<%0a2̰x8˷oo-s}uWZ Áy!FH(5!yS:S&ֻ2ƭtw!ADS j<\Y.n! މiZ? - †ᰔӸ-Ou †)9 ~'.).g-vzYM(3E_ )㫃i\2iH| zyxZ Y!C⥈`@kc<*2$В $>4Lv`At+ --A=>YvSOТ>$T⇸$n!0n)BQħ<$!Y᫄4R%u,KAԠ>$. - PiEAQAҐ߱ۃu12V㶭mXLJ|ZO4.-㶘q ]ӻ%Dĥ5ZEں3.nP,,3~]5X,m~3~lBx %Hq[q iP"~o1^2~V/nźeƧ(^`}1X`O?O?S+VT/ZK}U7~o[ns`}&^A^7)OZf"*b䈊8KA+cSXO㥊!JIRP5Qe+ħ*t`TvpӑDZG<ȃIɐo䐷od䒇_gxsA~qd\$̃C_;'w g9; }wO?i\S{zPZ(F`~W5Ƨ V;`}))KTe!Dc|Ѻ$u 1. Y0>3K282/e~[f-dp0}ɃG].ׇ[x;8„ .tIyGO7fy/&oxǿqWG'ޝ˹L89`Bq:eǞ.-28y }LIh9Ndhca˖T.7m9O)J0("Ǹli v q) nJ>UQŧm|) TeO /):HQ۠UC]Y/qi9v]awL!r'-`O/ɸxQm%F v}pt Nd9wJw#t\v]6%IbFfHh]Z/I%!𡕞$7s, Z$hrKCJ<ʮL%a"PA%ROKeC}ˌ[OxQŸK< .L ef\֒ Znp.e9ˌ)q[z*Ąm%Oeenmff"^v!bt֠>$ƥZZԧ$>9+Ƨq[]̢"n)Uć7X%lQPWA`1_e16Xn1?l~駟~駟~?OQ]?q?W?~?_[QO -8[ &>%/K}0X? ⥞Z"^JSPUux=RӠnҸEE-"> ƇVg$!"LD[D o8oE$HxH_N޼!Feէ/̐azok8Or= ͥ7_%CrjJ!=%KWsL2EҐ*1b@q2[#^EDuAq0kSj2Ap-iؚ0Z2-"9KE/㇎nq;K=1z"^*xdҸŭ4X*">ĭ2B<ŧ0 㩾2.-Ln 2deO,o" Da!rypyw>} %aphy +yp~|cox0w_t]̺d~..8\St^.ǁ'dxNteޜs8}bAOn[Q"Cy!=rzz#ec[bOZ)u sb1nE|X ("좨?Jnq[꫔`= - 9HL$`]dca3.^j氻( 2îYdA\ d`1ez鉃֭L8}:DBKS[Za0H6. ) ye=]{J 3.(ɱeWbO#%d d ո6F˝O/|{j+kˌ$!7&;p$-8IpsaoAIt:%L5tܝK=$CSzhi.oxo\6A:flz3޴lo v& uj8`xڶSe]nx S6uR Cw{4c{HPRz*UF띠Ao4f#UAzo7Mf1(~*K\7);~V ߧ%7mqÇ>|Ç 7?G﫿^}7u[zڊln?(xoQo]~4~¸oJuqbjn,D1YTu因EA]MV=$Ґxn27i0N62A]&fapa>_$,Oϸˍ$7/n^|"Kƫ >yg /_/wA7Bo4tQpt;p`|Y OO//_KFn/BodV{А]z ƦboEot{B$ccP Bi va" lZf3q8PnFm7qK1.&.c%5إn2 )&".]2.! 6 &ffY!N 0eP^풃A\ {aDU En$B#$2q z`h2e!b86xas_eYbona/7p;W|nd;̋ma{Nq,a tv:pxu|uuc|<=-֒>`>_IH87) AbЍ=afЃ} ­_ZA 2.q-KP$.~P"ƫ"HRb%qZqcP$X>nƦq:f콙EBKgyu0MRlr#A7 {o6n Kn!^W..4APO֐Ji] -&2C6"S ;N L 3.C*OmJ$Cpj-Ziy(Eܩ A(9mDZĚjP!qJG )(zU(nqa|Ὼ ůlo"YU}SOz6再f;1]Q:rorsJ i0NMʬen Q\qx7aBj++37/;Ǎٟw:>fpE/2p3/顽nCn`7;1Kx mŶIH(MC6*Y^uYvC!bTX~E6cH7loul7˛.rwea4]FHph,Q0)qڛ;&~l2)qj,ڷ!A)-mi!~"AJZSqj 3'd1u ppLG'n; CDSR֩%Q]ꛐJ-k2u7ujƈ7q47q xS8e|Çt7?GzUSmO2v"jh{AqNJP?S⡾ Aw[\xJ}S ʮWoA]B5:àN 0I0KN27m,|tdnN>K|˸+ qː۫?'Vg2 8n,7Y}c/W/N- )(-p 6JX?ӻC닖;]_4=7R#ynZZn^aoX0.Y#m wTu =L~Ɛ(Rwvj'eQ:\”DDZӸl.(1e[]JC )qei=) MO;aBW3.e4.&uYxBUbHdebߘjN8 >atu82N /0e$!C廃KfMz$䅄1~n, qvf62Nʌ?mqj㴂%yqa%n,Vf9袛`E%[[,nq:pjݸNQͰKa8lpPe}`Hi0h]`!eū dSdhxԯI]85~U 2AMCxQZ!ŠdN3(ElE$N+;;w NS[Qԩ;-KC&A qrlZ}xcao˫$$$7[Ԗ}Ҳ7 ;]~V[8%N/{I,rY jf#^R2M2,l)6&NNx;ey`qi{1xx5.U(ϊ8i;jc6A Gz(oRPOۛJE=TEKwMP 1PЍR> ?RxnR:~gA`Ȧoao0Ç>|ÇQom7N?֠T?mvK.ƫxG&7놄zAxd5Jif M\ b,DKf!ޖߍ1 2^ Y`ThܼϺ̢b/ /._y b-f1ܘ_w?9N̟_ /(覛nZ~.c1 6k;u{ ,)F}xs)7{ Ec!xq؂*6lc!v-`e# acӐ 6G76S'`#.zO=ݱ, .e]il7 :lw1N7a;a۠ތWio (S2a/풡m1fAPfX в8͐ .e;;΍n,p[Xzqn\%}aaQdaw6j8uiadHP;= C zCqp4lLb}0CK=۰K:MبK< W3$.]zƢe;N]"~x2*!,MH*2ahAf±ˌ3f-{oO3ccW+=.-ͼ!{a6aZf37`^A= $0CBԲ=3N SB\ r#eޙᶼ!E/,ݜZZܱhqmp 7`Jh]SEP)k3ޛ@˔z(% r`P`cpԫqMɸllqfǎ}x)qYNv풍Pw{⡾)R);c<EЭqKF!NO Ս"-0괃v 2zS-qdoɌwꛠ(BM\ꛊ1 agEl)qj٘wlcm>|Ç>mnc )Z֨~[1~_1.uAP`{o㽠ߔĩM딡6Eh{Soi{PJ4ĥHZ&q!픰=,`3U1UCe1_u%K'wt37WܘnbYN scX̺pZ7;>_9|%CnnZ J77(-6z.EW---v˫"`36Şac׸al~M"FaoaW[aΊv-GӈK X.2wĩ~建{xqY0NSC<][!A [,RQ8ڳ1SnNNY*^~HD0̦a)) d2oF}Ԡn!ѽ-oqZ7z0_] _I8;]+:`7Saݘ >t8% ͸YlM {cXC>nbX8h9Ȑm6El:Z;{PT.4qS KH:ʌ,6aioqJVʮSՠ ۫8eGoUSu qIH6K7 VS+wxr$$$- {Ӓ-,vzZEԛ$: - ؛=a1xS֫, 7 4Z^ޔ,M]^%$~Rq9\NM=l)bDw-77TB=m l:Saoꛠ(Sf\7A1i6ZA7K)~S`Ae;.Q$(:ow흠 wۯKl>|Ç>S|?L OimKQ,oAQo"Of-{ASӸxKKкX.U"P2h)bQN)xPd!P,ӄ&Qn2i1e 2%EBܙ?񲿘,zH9o ǟ$FUga1%f//NW{q(w>Ꭿ7lo^ N-=}_toqs"E^\xx{Q2tM>C}xВl6-mck6)˲CSM"X.WS[b ]$r)ԍĥ xՐ827A1Nx:l?~0ZO]=t"ŧRZf()-$޵%T2^ %n^ 36.;n). Ρm])e˄XmhPJRu;hIPOq :)˔) Md -_ Fm<&z)E˯heQ~.'~y.ۗa/9\6֕TvuQ)HG^s.?H&h2npѩ[N$X/C0X-AR $n-[ƧS0-uUZ %^`/xW](Rbe=ul栞ƻ,;H>lhɨzWAŻAk`1?#3n ۄ ߉3>HOANP,EP뻊 7Q. ],Ƨ"V}"TB ewZ?O?O??Oj=şOi}hI~T?o>ԧ ֧EР⏌>$ݠ~T2Cx*MU1>ukSn H܂(J0*,epBCdUz!\]K.\/8|W|o,vo^x7ooW,.|7/_pX¸%$(*N".\v9K]o2Zm hcR/xW]%6b"tݜztaAq!ލ>".;Vfb)CkA/2L"e-EH\^ SiH0"?6^&>Azŏ7gƕ )&~.wr0/Ai60a=z:OĭAQv&)][&x8mrZ2n/$!?Wz7~AA^)nP/2wgT; [A6> v/]"s|A1b,q0"8ѐz:^ 1<8 _|%3oүo6|/ͯNѾQt_hh72X-_w _w0ǟڇ{oEWF.c9U{ fo^*jQz7Qձ]8 e/5AU22om"XIkukec=&(8t7Jk롂( ."#bg],OKʮO CF&n 9 7[D[/A܆.'Si2VĐ ~ n頴2!ǧ`XO!C=]S0np/onAVE&*(g(^B7W!֯/țnt$C+. SA.-u}Ȑo܎CLJ|e~rA_paWΗu]{p˕%_ۥ}o|گ7w!Ckz1qkZ/0+: -4Z\*L%Lۄ=$X7^eP/a=x JTS%XBN/R% d}00xs53z:X&xpV-gu  S<|XdҐ]̸%n3$(0 rNhii4ĭaeƭe Y}oY^nv}cVZZZ|@#0î[==8~p ohI/H ۅosH5{)E׭vƭ]n3neZ֭ Z? puҲe xW]DxŲn !A1e}W +3$nmnzJ|weɸ>L!wox"MPR i1V/AZ)~駟~駟~"RWSG{U>O!YK}*V?ߌS} G2 6+K/AS/? 3(E$(s!Z#A4xx7x!//$MqT[!!l̗{biÆ /+\ۯnW^׋ n _ ˌ][+KKWqR7VU[ZZ-BVվO1ĻO_Ō[z ALz̠Вˇ e!-80"͈&e]-=(.Ӫ؆xZ/uKSܲFsMݶn3ns^偐!xAP" dZ/BBvBƊ1C9x*VS\8n]0 [C`xCoaC[t%Ad vĐCGKR eqp}sZ*8 0Bp`u7/e„ ]RR  M^W2 | A,_zp.Opxxp\ZʉҢxХu;--[OW=a Wpqk7 c nA K^i],-/KH|K-">%XR:K;waz!Ax9_q1!N)1^p^$S.f.Jr$XUf;zwАE+ xxjYx 4('&ռX _<[`0_<z/|]_Oz.BXs£~z:.]vءCWZ4Z .Z:VJ3&1%8|PO%mib0!Ve\w5jUQ#SLi蠒qRmU,]Zh3ExYAI"K=7 0~7Ļ %D2wAMkU`8)F9>\8ƊOmQC%̸"\^e0X,B= a]/C\t ֖-.,3$qёfq+rąaǻ8.\uEԕ tx 3\\_A==t|(Z2<[ʌ|y{Wz(\CoNוqf7z\{0̢CP:xY3Kõ^FzROu`p]]sӺ5^one= JuK7n)>-qKݶ$^G%^x)BKAQħ% MPS̸%$)eBbΒAȡKSHk˖sC+"غ Aa۔->>fHȢ\% 4$䡽7Ihy+3ds.WƢo$\_¯aí#3$x#%uki9772JK OO˖9ޝsPsd;|C%yup.W.4L.׃~C-VOuROCВx SSn ĭaߊOu˸udHPSx T0!!2c1T&n36ԇ0@m85)6, ] Bns2fE/fx zi ZǃsaacI9CÖ^>oZZ`۹J`dH4ȗВa}{#a ; ]TR o9.ͻ/r-=d0@UBT-YN݂†Exmmك_yw'4OVT.Ӆxq%٨RuX/iO=8В캲ܬ&%TvVf MG#"Ovt.B=ć]a=K=CdʵLDh= Zע_ET p8V!Zsz*2^6Lih0aa ^i!]O!0k]4!lOaSKKPEbxYf3և0n*O>A )'x)Ih}˗/_|_Lo$O~[Xlo?/RPbKįCRq|Oqp%E2$ލw)$( in1 ">!( 94^s1 7DZޭ_o s_ .o,n9d6zy9u `1$dx)琡%Cb!ꄖ-zWO)Awm$oo\\͈dz0 ޵1ƧcOh). ܸуz9Y-r}RzxiHJC'7͝xj]7\]yŅoot3^_% wt;߇. \S"zpqt$\ w໧Z^#Mitbs蝢a/A-)z0a%.BPCPO%%Azէ̡? xXCj8-Ҙ ʄkHi!%A1/Ab= -K"C0R2X8&̐! ̲ˌaEe ` Z"41ZOɒwDvrG:xK2Lu7l"ի4 ."hi̅!Hw.CA#A?Ihf,Yhࠌ" EC2 ˻ZO0Q/^ WQw%GdҠK>dP2a e!aSp.nR'e?g2i]OEOTP'4ez* z,ePA˗/_|˗n;*_+~?7^ꥈ?~AP?zc#' ^Kz8HV9^Ư귂zx x*APNbhHO2ApW712K 04=ps0w9t{ w.O7S.noxbrBm؋(ǺGm98=$V -vQi%aBð9$b_kMn^2c`ZP,sE7%ubŻq SܬKf([$f/Kd[A"w2$`}Ap,x01 &EiHwݥ44wpː3$SDiHչ:9ޕS0cűBBùg:Z,]ZAō -]2Nԥ88 $7/vxYan>\읹Åpy88Ow.w~gn2o/獌7|Ñ7{:Ya!^,Z .O^8eO9(zH0x9N/m.;3[p-6|*IzB^sӠxXw/(7l07e=t|hhh# z/')[?tEHx.m$!߽.spp~)3H=η%~'ɒ;nqy7/q[xȝ\ݿ4=ڥ!lI) Ӄ%C"A[BztP{ET= zxXOE<ԇE]+!f< %񫩟wOS W!^ØHdL]$xjE*C7޵ASzlP[ܰ() KCևa ifhz*栞^x Jdi1CABh#B]S!~=/w+219 SxS+YJhWz!~vڛ|gC.Ov+o^;<|>tuҥOݖ]>x_7E., ʽ̍7uG]x!K#+dLWΰrZ͍aXiԝrv\ލ#.~eԈf]^-^(nv/\ ~k $dHQM`M l} BC!iK.~3>Ŕ [h?Az(Q\C… R& ùȡaz!Ei}rw媗LТ>e :$YT)28X]7'] ]e"\]rr1!o0o7prOY;Ƈܾ uc݋nhhzyz Ct=e.zyJzYCV~Y SF2 r%tdV O.i [v=%S0Rԇć hP*%^exYaBP?[/x Nؐ ԇ$8>FcA= Sfh=尋n<ݼ\%EQ6([/hGOA=,a/ 3pw$ODO3\*-3(RJ; wzaVNɝɍ!w^Z/ovջ0Aȝ-JKHpt^)mKB!%EC=H$A,"hdx:aʅB)e` 3x'NsA)!J*E`]{G2В0K1XR-ʌ40XOz/TP?+wXPb|`,"`,X"7O/_|˗/_|'ŧ_+uרq2~VğO^SIU"^|(7%z~k|eƇԈ0Cz3wUiDL<,bPwq$7ɛaSC1R%AA\%USP/atAr?HI ⥥xZ >OCS9z({ - J= JR K2 ab0(N$$Xfq`MGHB۸wM0A Ґp=]fhiYup2袴޵`iHX Z%h]'w̘3"v,S-?e<®˜ziHBDeVO=˔9t+oÌ&2 wI]v٢R.Ki">;]K]('*Z큓RZxz z(%z#/a^Ve럶Kz):t=EB= 㥘JGOE<$L"]J Y,-,z LX%î3/KP2dWaC<5ƻ;WZ/b&lQʁӗ/_|˗/n_;?78x G ?R{q 7”e%>EPc|~#~o*l%!!h?Ɉx CA08U1 cap`=l<,pZqS+p76Zrwuמ.I{9A]:d\.]pt]Zԥ˿!7~ ;]vܽn.7d٥ВPa 7V:uCOe49iI,3Xb6 F&4XߙHk4F])w)sxYN]/2^eў;XT:Z=PQTx&q`Hآ610&4xY/"`O/t+4>ԻƇ732H2d 7$L%Aen*Xhp9.'B`Kq鍜.㡺0~]UmQZ3. d0!]/9_pRt0s rlo˯e\fyw`g?\"Qdn8ͥ'u,a6ޝbÉB^B'Ip`p ZdnXchi38r9q>|a,Ft9a),e8WgQ:.Sr`%A4,K< )Kc%$Š>C(LHHH0CJbSI\` Kd)iR&.CP o, ]ťf\vZkK.OYP SS d7X˗/_|˗/ Wc V*b|KPćAK'CXu$%!E|"eBK4#-!!0A4""/Dr)iIpc!ˍTU xI4ܙ_Í N.I%q%=ٓ./qr|ޖÐN _.tIK\6ɝ9]hDWM.bhki)qi&RjͦXqSK)=ObeW:qsAP %LPZu1X'FU K!+A FHؖ B„y7KU'3XOa.7!.]  0(#q#Gp0.-AaA'-EР4("\RMddrÉޗֻtTwQZ qHnK=p;rC2.]=IO-^*hBuI-*Cϊ`?eAep v#AH,ffyG}s'na=BKK pTA˔slmH;С`%n. 3l -Ī]=rǁ48EiUe`4dW&˯A,tFv9Vi[~C‰.Y˖.YeƻX$A+qSԻvГʼnE{>zJ8K0e%HAx6(!L,[!إN6Ň^RЎ;bX .A 1EOEOO^9﬇Ҡd / ػda"C12ar/-ItͼUKƸ;7+`.`r At27̝sn`\R]Fa[E.~^iU=UO{~^R?-A}H YuG)zW?uI".!?SB !a0$F0.ap&v(q 77no>;phf|#ܼt麴޵wF]|/n|rG7 Nnͥrt9O.;F]dp~w9O=ɒnsjܘiOvQhݸtԺdH0dhS Bx:i H37Tn1Nk84XI%cziĪˤ&"""IF  # YqcF۞8< rd0CP$# Kb߻+b 2bFr`h†\ZX>Aܘ0I)FDCYCQd\R/$.3 q_`n&] "qÍ ]/K=)-rp`ܘ!%tōNpddJ9aprFxcO =79᩻A*ss9؃+;A 2(UVݞ7zwzH;^p9 i/y3w;] ;[f9o;{17]S.oo>t8HS/.+FN`.ܘ"i-8EC`iCR4xY>"K/A} Si_-j4X GEPK<e1A/!"] ek=ԯS"(B $^SĈwq /Snb4ACʄ|#.q ! ss8BC/aH!p<~#n,O-{tpˇ.S=ܸ;S١ev#߱>ui")" Z.BxOS D {}Tƻ\ ;a0p(o˨:EN>\8>py(B/N|X 7( 3 9"͇^E2Ƞ9-$ˌ.72>- 2{ˎzz׮/~V9o ]rb9ؒ07O]緿Ť.p[β}9xW2^U,א%7zg1z(ZfPrBtzh K\^nXZ2tHqE(R"~a*(CI"K)!Rv˄xw3C"a4 &9Le7nmsX [H| L)vGFUZO-SOza%$VOa1/-b^!N&^B„,BCt &lS ]/FdHHAֻX&eFa׽wmQЬw\Jˮ2^J2ćVH].O9pzQ⇢z:xX~bÔkQ~gL0{SP [3(Ի6b/EB®hKjjXcՔz( AxʄLPm[w)Fme"⇐>aS"!SSS!x`)MOEf8cpBײe(q9?pzJ9J=,./(- P7OOwav|8"aҡ7tً.߿sʔ[Y4"Fo4~CIjGwuYm|J`ًo]25 7q XA]=,iKa<[jz8\Yі9Cò֦ލz+ӖЌ >-]R1֧"%RdP>$!B)4^C<m$$֒xFӔ-`Z3 N԰w/x gAiT:tHZ R vpy9K//adh]7rxxxp}]x*^Vߙd;sws|\"A ]]28r.霃ӆO ;a˅! aʄ=򝄃=<вKAqwn;x ])עڛ;.n(!X~R%hKOE|ƯRe 2rΉ7RArE0.U [E= s,SzOUOhɲ6K. t/.xjYKŒEiw/9,wqC-zzYƿ_W!^|rT yDŻƯJ4 C}A OA1E8~89xJOħ`HUƌ7 CʎoM/8oN^.rÍrp) 9;3ܽÝˍA*oqB s =t--sq.ԧF^^1ՎCFYje1'7zEq!˲"$7 n c}޸:K`Zww%8]&E< vu"XX"`$Hˊ⨐zEDp30j:b0SO[Acz'~ST$2X/eh0>MqȐz`96¶pmrHԟA,z׌ei0$$R?8O%! 6akhiK][ZRx)a|h]2; !lX!~(.jKJRdIHؒZZK=*`zvpˊۍOYħŐ!qcboew:w"-|(j^xjUeiGzY\ hL0!ːa//P,Rꇋ EҒPKC<_ĿUjP/*OMP.ލSxW2PbpK<4F9>w5~Aau S8J0G/r ;^io/ffpўS/) p"p n_i}Hzbz(KPS EuX`p BG}:(][qa2wΐ =;&][AQbXiI0ڒEAw10A/로7OeEUE ƻ&C$VM= 0rhpi\ލOE?/r 4 &ħzh*rst$Oz)SJ`q va C]%aKPZfɮI6zֻx1hA9&2cx("Fǧ-0bbzdRh=!JBxi$~Т~0C?e]2î_X Jt~-)$K˗/_|v7_~z'_P_k_1>%"zˠ,E//Ax3V`0f  abaKa%8k%aB8xwzi/zf"Zԇo^ e, 9p{#SK.-nCC ~)]SS` MzSoŅ]-V[`D;w1V9.;Ի45]l!8X.0^xcbh^JQ/sԊ,"]Swb ڒwtndz5~hNH-K?(raK† r#C0 ?:aKyڕIpmtt~6\]?I"v^A۰|goL0ra<52.]O)`sc0R.x9 >]xZnx3ǻCb\uqn,3lԻMzP/Ƈi.)7,Sğ}7"XսH˧vE^E]FtP/zإ>Pdi= OR`C<5X?IP: ꇒ ^B//x*2L$H= R6:A d e9C0!q<\!8G^.ԇVv}H8f8ry/Oe0$$(]_ԻCKCzJ)f=%$Uai=m=%x9Jq]KLHI`[O[MpK/;ekaŒ "Gm)H(.ңe)ܫwL?[z(,zX:%c"CP#EiAC/Oe?a26\>?(/C<%G.Tx")E)P5xJ#b1ńeiL?,'-ʄ^/pՇ`2aKxwCDԻև`}3î? zZ/X/,?g!E2î5b1>?˗/_|˿]GXAYK/eK~ / >K%%U/1fKA1$/A($4ލn1 ͧ1C70ax4(f0orKᨋo$7CQ4V68LًCHI=mp7O{NƇNC]$̍SO n(9x]?+KHhpiCv7%kKz)jAkÐ`H.1HkW:Z/$iZ:Y(ne{$eY$]šQ…OlU/Ax4B}./"4LKC&ƻnS A|pA2HH.`ìuC=8А˻4%7KQAWwbA=]2`14ܘ!7r%0Fp EBo\s0ΐsT̡%w}0B/2Lp']2on~>o 7z'as \~#r#C5x kp0tx)g6wZ!KKѠ4d"^f<]E=%p];X24#ҒP.Kq4вwzzRx(S/v|&d(b$!ajsHFI獖vIspl7!.H^޾I׍N1S [ .!zʛ?և㥥a.0 3K|EEtd٥H"La\#s;L,r^OEJw# R:e ÑS̠O!ApDS?O)AIh xx8^]܌C˛&ѡ#1ÆyCX/7C0vu3M.nGΑW982e{u]B6\w| wes#KOZnKYEzɐ2X?i)fM:!Rntߵ=]d]U!񖃱X%7%ݺ[͌]^b#Hb`)ѭ+xE(FTܤpC]:/tz3lC .xw#>\!Pd/9HƇ!)!G2ɍ.n{T|h {qnw$n4$fJCGP,3awx%#[X7 yj(Ћq!9\x{!7rCt{iiaK*[UzyxJ?jWtiQnwG8^߽3ROwkq<x0 HХw{o_to˒} Ora^X]dII).A7, X .^vqw, -)H1lYAQ Ab^zi=v=Cl/Rb$!$dLQAq‰8#upUBK̐H"%77ռa.Ex)63*zJ!aSYOZ/Kz,"]s#2f<ݗ]/KK07fHl]vi8{a]za=:K ÍRK1e0ȡ%wi$w. El .ӆoVZâ0w/9L}Ӣ+9޵Ezô8>\8~-̌n.pOvKR$ȔT/I솳3> SC=A}J4Ci_-n)zYfD"/[ae1î"^f|ؕC=̰S2̰KCxIPx2aP!e= EPԧx`~fEPc^0e=Ļ``1~0fdhRCxX nzhRO Of1$%Р\㩴ЋzXfXdihPXZNі,Aӵ ~ꎜ! {)=ŅsPǺRNeF_B+=bVr)2iZf.!OOAA^)r%F^a=aM7M?;#2XOR-2tZPCYZeS"u$wUDB-R2tRP? _2X-!A< 1X)Ǘ/_|˗/nۊs/"ƿi/UO-)xi}J]?X$FP?KDw!A0-FK0$$ C#& do$D#yw;*KT_88Z?!EN7]qݘ}Ȑ߸Yfxji=%X{C x:]K2 F19]Q8*zX7OdTIė "!t%viŮ^!oՖ,޽ )KDܷ8tQ,zJhʆq21Z_J-bIj2  `H/ zSKdH8a<S{y:Ah}Z9!8C.Z˹1e$G{!0C1a!aStNB SOݐ0G`\glŌvi YO SrgQt! ,|aCN^pa//O !^2d;)^A-d\G}8];߆ K$C/^4 34\^F/2oboNi]vq蝄zђn< 3]3SKaBt/SJ=꥞߅xxx L!H 3fCB a(zzYOOLh^zO/)zOY:X?_5~~Qe"(p}!#j-fvPOaE=`> Ǹ|7Z.Al0a g`~6Rwî9)IBixj CP_f^b| 2X//_/=FƗ_^ֿU&g+]}*bBnqQ, K BC`x %& ! 2dp001s ?7$snŐ`meKi^ͭ"zjQEvuΡ|8KB]7.a|  )zj.g$d,] )AʮKaS!b[ςx/CH$AMP0!#ꩥE6td8+ͧ=fq4CCR4)4\ؚp3a=tz {a0~xʹ|hbh=yaeCЎ钵Btٰ+dh=r< ʹsoryp3g{õ>e+ÅOsgS޸ p軧+\HM2ڋt ~ÿ0-BC/$Nb~HE7v, Ant)E b)KP`Y!dRw)OҠSB`,en97`|ycB9fnpxp#B /) ;̘{t%a <%^z 2,a)Cvwg$L dh^J=Zm2]ffHH!9.AsȡzY6L1zyZ ]H$Dv}h$!zJPSSKkɑT;>e}zJ%-˵NJYuyJhPƧ^Yˡ<ŧ4%&*axb)KDT a1dGEJC0X_ r0] 7a֟W?+E|UP_o[eKP?O+"wş9_~_~_~oiRlgg_KK1APKCAėex9X/A/0C<?$1/a<9Fùpc=7B΍9Fq0,v%%>rÍB1ȰXgkShIoO֗ B!E{'APb.{^ZB/r|޵w ʌzڻkMz ōTD0/&LJ1*^^Xr8]^V,)1.N}!j*E\r!Vz9ƞ$C%G PD܍jn^V뻥BiP &BfA,%]/Kn!C' 9rȑĊb A=,-b07/ђ?ehˠSC3Z ΰAq2b=ō\l0dHҲd=mCC)"b0E<˺Sk>]6z%3AIqћO]Oo7Qxz'vK%˾{|92HF/z\y7v0|r띌F\^wYzHq8u2X,Νtb!w P/ahًz/%x-5S.E}]/xԠ !">%J)!!*K3n̘/e{1qaۍ zP/}9˻p1#zƮ;9ܰ^2]%2xJj$8uևl8p]/4h+v/S O3~rIIdCYy#in^a0x^tݽp.fx=;S)gt]SO[iNBẳ^rq%GT;n;AEP-NB/2r [K˔pPZHh|)KAY!!ħ搐aB R{^)9~721 o$x{c߹/7n7oou, "3r{c}CGs!^x) OZ"z4 Pv=, UB. Ob%K"KB gXp."`9# JpSSCBÄV&H?Y.g`xz|h);s\rFb%"en!OO xihA~KH%GC^SAE=uaןW~2 +gaFY6^.KQZk zJwE<͠EzY"aEҠ4SKJz?.bgc}J`l05X__~_~_[忾OTKі՗zz*2x)a ~(a<.%wH<5$x/ A|LćRO JLLk6H/ 3 o\wnF|7$1pyZax(o\NvzP%X/ !A0^S.ZNp/ --]NEYtf骵y>Cii*1 !axj_7Iew . Oӵ4o98]롨c CwRQ]WF2wCYZ^$kVI^CzATzJ,~Ȅ _fIq#i1ڒZ ЃSO>w񔛧wZԗE2rtK:^jm7?c=f|h.Sp<dYvF_DVStK73Ѓf*Ki"\Gs872k%n],wFC-e5C+fe1~뻜7[קJn'|yCti7'~}!ߖ8ݧu~8xwk-axݧXLw-Z,/C˻OA=-EQ %Ch T.n?OAK]/q Ra&2$X9Oa#$<ֲ˅^L(g/Z7CWv9CppqkW}azZ\Ӳ$$$Vė$%n ="ņ9[/Z0O .bRfHvd<Nݮ?C֭%񇶴.8espІZ/A=KD[Z>/Z ]Z-~)3-{QOe\.,E A}к%>%C^>K= C1` ۊìe|YOT$l^"CςzOZ)SU$2>5tI{E|-X/El~X#?vpOt///QZbP\Aی/A; "KPR/ňex9⥈A8#ė! ^pCA!XO% owH<CT!o8嘮77pz;*1.9C<ԇw.߽elƕ:P/8na|89$zUE.񡾓o^!ڕ8of t×CwC۠QK#? Vl}XGxL8фiH$GPO!  ¢EսP2t1d0zHBR FLɡ>X2$L2`̺zKKpxx4hi9RZahH^ zܺ>xl;)C]aKޘ7o"Cdhw`Iۮ>ma/P}Yr{]?v0 ps[q9N {8&;.S=Bu  papy3v26߸{Y,uː8k$L},B%J▸uIZ - O%)$nT-vیH ۘ&p {qކxE29(;.ootw󆋫 ]à$n[ribE=z*`}ʰ+> -!VOKK AO!#'r߿>y^n S݊!`|KHhIh9w_K$a▐!3VRD[_Vp98i|8XE"t]^ Ia0r+θ]["^Dӌ[=-"n._ >>K?_&(i"T2dY!?ctV1&0i|݇nuk~(eܲ,OK<ևv2n]/EPKZ2t]3n>LU8X2dς`d1X;~_~_~_h?7Yse2$xԟK}`HPK1A|Ax[K㐠b@Oqː  FT`d~C`p[7wx7\C9H1n[q;n AwSAsKiIEZN^lx7t}辻uɘ-ÇdÊ`Ȉb$CF΃ɐ:g\>,x`Q2^6fה+J!G2^PC,E)QC`hJ.,AcsahR Ƨщidl.zibRk&NJO]m6AdPrEraC L`f0!-ŅO㶇u/M北#[/zU|Ð?̅c i0^ºu!%qKa0ʵ\KE2*)(9Ÿm;{1^ReɡEo˅,Vwf|ȅooyo2Džosˇ7xgs<7w\{E R :̒RO%n;]סEXp]̃|w-24baB~a/ttE2n yJ0!HZK-RNh?IHH3 q[ ΃{`0CBt|;u;.ZWB9E< Yv2me =Wi)g 6tE^J6HHHHغuɒ`"̸\ukL0$"8\x;~x {՗^n $J( ú v}jY/%~VOu+Zbu?YСO4J]UAz/R?0Lkn;e1”X^i(Rl1XbBK6XxY!>ez6SPK/q[ f!А!(!YPs.~Osp_~_~_2]?P?Wz/Hԇ?"*K!g!2q?  A2^BO 1%KHHx99,1$8"n@quxz#v%x/27r07_ƛw% {spP\^⥨[Ѻ(KKȡ28^6̛[<_](t \}2(Zb+]U4ZADpp$վCD2ɸ%^%ÇrP'eʮv,J|S$h1n;c{yQfh5E`0&EZ"b.T.KqkI0n Lӄ C"ttB*y׃0ǧw: rpC[9ȸeCd \˔]f^. y`(bzPf\Ex: 2  XV$XZ3%%eK|!!9oM]Yޗk/2A]Y7RvKTi}6;֗%>mHPvh}2 ;j?!!A݂S%uKȸ )#%AHLKBޘ%NB"r!;oxS$o ]Zq$CNВC%?P1-)%JK ˖^⇐u;HtER2  xZZ .xY2ѭOd`i!!a=6$'rp-^΃.-}xZ?iP n'jy%G9ztn=AH)[J14/[U%Liq۪(R)e1z9lHd/E/"K"EbКGx_i0r10F}XRӄ[|ɸe%~i" [bFf1)WEg'i&l`1 ֗,t_~_~_~_>K?/e/?à~ JU">A(C/`0x9(qH*I2d/1IA!LX˛ C "`5oah7z~\"ĭCK/SrȡJKe:Z֗ \KKt,ߤ,yK5vSozxb0ڕ`am] *.4x`1f~g |XO !}̈E|%F"$6YHԗ|ź)▃)')B)s2xZfqzeu4>$q,֗K]-)9v1'\R< +U¢Ɛ0Xbp1)Ƈbi2wCzZ2t݂.m)]wy%>t/3b[N1XY-JAiCˌՠXaaKCpU6tP9.TĿj}ix)I  gCEh1 -Cקz*gw՟ԟMkY3XƿnCPCPu[WA`UR$XE<(CA3)YC`%`1K/w]~_~_~??`ϭR![P2`( - !C|_Jfd0ns!sO"9x tdq [< ̃yw Ä7Uq 6%o凒a|&s4s8!._J^^m zZơ!, }=e)xGYҢ^ʔzSrib܆z'bKU32?#ddƇZvZdŨǻo wΡ˵lfa`±AZ HkC.w/C<$$$ZeF[8(Eіhս`EO H9AY$,JΨz]> 2$\ԠPR.~qj1<-hd C?xj="oz뇐O{u_'|˗/_|wb/kտs~/8*%~ҨxO]/2a ^bvP x9cH 0A(W]rC;n˗/_|{{OZFcEc^֧Y,~ԟӠiF?L<AS†Wcx7cEHpaCep,EvpCixj׷pcB[Ѯxwr!CA=S)n8dHp/ҋ3EEQdܴwO]vU'7x:eإv\w.g;fnnXfH7,!eWAqzQz7ܰXxj}蠪Z.sK!M]l"ftYUO"bj=dapB-wm%hAbOf$o $f|0C8A"~Ֆ945 S!7zgsi<E vVUy#lBK<\jJ< AH(Z&dSLޘc{g.uQ(멋%CS̠\wr\}3zr|T6/n/aVy ~'8o7ה}ZZ%a;-O`=%sP%8.E3X /s2z 2E H8A`ԧ0AiEH9!X/'4 )gIO3x:w7sy v}8m 9ܑ0CKEa˚shePz ZZŬwU)!aBEh2ۍ`a$֯rwm}pٷC ~`WmiIp<]*S p[ ԇ3\;`â"-QaHx;\Ki1~R儖k?,φ"(S)ZO?T1B0ݶd<TfS7a>կ&e< e<C(z(Z0XS?"^eX/[Ea0VB[nxpJhO\8]׋/_|˗/_]no+O">Xx zʠPLxQg!e/B/DAw1 F<%aˌq0oahIVs]2,K.WCd'%kۿ\O^$%M{zS!ŝ;y:^~g/–`tie!XVz]{T}h1d*ꏍclaxwѵ1߱~1wxښ5XvT$ E]Ûo:6J<^5.#BejoX↢|wˠW!ﲣR/o;*Ye{3&>hZxxQE)BNR J.E7obCOzM]zXM<{tCti {酭nX2^ֻla#!n9,sc0~xw2ܿ{Uycק!n멣FxLAbPOMd9Xl=]L<7.z;f9#Y32μ18߸~ap^_q\ܾ was7987pnsۿ_w3o̝˅e^%!~r+qݙxaːЋshh;EYŅ;9z}gP~)oÅAI/񔡋2! >l)9.4dJ !vCzBx\L7\6\^2G΍C;n>$r.9,av%^Ev{1.b]_)WΠzxJtH)Z%!t” T /]ǐ0š+UOo."܎p`-%KyS0CWZ uPZn75eq Y)i< 3\aC1Aq2(]OgKi/O㡬lQn"4z EXfP-n0(h=Lu#a[OAPCxևςR?;..񰫈?"]Y&a0(md* `3vΠ7`= VCJ7}˗/_|or3oTSOE,~oq >Ż!>exOE"/A2/E8A0 E<,nqpDVs$˼Q%MB248._޿Uq8ͻwMsġC|OZ2(("? x0>x*ZxiiҥA7zgbzY'!!2$7/u2֛c7e^bKAp#oZ/|gǻ8kPr$bAPO{WEULk+ASnXл_[Wg - ÚahFaQ:!a,]v-aCFf,&YE~q;d=FS/Kp,-]be !(.k0 %!$,nJ.9XZ^ѽ$L;CB%.jW|å UO^w=Pw{wuxX߽kF}c-oG&/΅o80۷sĻsqyp&ry/$$rF[\|_/t}v鐐HhE8abzZZ/7rXzjː|A//",cHIzJIp͍ېbh)r%~cps0S.ڕ3%o .9ǻwwph"7*,U멡xA٥V7LhQO3t.^-AQߨzR2HiiAP%C)^x?&⇆an^ƻx!~U7/ӄx9(ycID(ΛwU4KQ\,FC<^!+cnJ0_] aYb^{ {("" 3>]?|`0n|5{QWvpHP~֡^ y $$r[Z쓖^,6VtuKWU J[)> yO1X2`0z>ZS?hVSj,)z`u226xC%ujz9Mb%AJh1ZS&Okc7AP 9E[$C#Y q|bpkmeK/ x Ap0C6_6~ZZZ;wqoF ,q Kzӭ!>|!!퉃⃮[C)A/drp82Ep]ypp.˃kur8W/ZLaPoa -}p,b$a[B- )6-Rn}%Ojz%4Ep 9dI+d|r"2dhip,9Y9C<9<#uD}wx--$>ҥ^.--a}R"tum׺H}6> ) 3\Ej$]9q+D0[[1aCђB %RCK`֭]:gw--T[.r¡SBy.rpr82̡C.9Z=(9ծ5Y*OZ/AQ6^ZfĭuaE%C-A"> ֧"߅xK|Y2"T̬]?~Oclz?2X=?aς%(ۅf}Jh݊['z)m9 mdƧ`d\x[W͸98//r~bO0ר?WmI_R⛠n`1?~Cd[r[r?[zA[#SPo<`<⇥*ydO/mUirfU+9JR/'$28#XaUK>ĥ=rw$rpȸ%dZxn--2K뭴48AQ_0է?<e||8jgW_uub[\#K2V}bUzioAe0Cd !9d)Ox EC*>4a/ ei$j]"!.` 0!!a?Iqk}wOݯd&ޖ]fكx[r|EiIp8_P'pqqr=>}\~x:dr!oe/svɸ%0C+{1ЋZ`8~C-KP YR \tK$ގ"AHHHe?B 9<d8-[/,>_9|ۃrB$,EY/>iii]y|jkdOaW[IrފLx\4$,z|]Bwuۥ5Y۳npŭu+%Kv d.gٲzH96\A`="K>Exomq1>ҧlx W u;%Ze%!>mEO3^nqRoQ1L˲^f[%~SRԧ[a]> Y6[Y S6֥ނĭV EHY/A1tI%JIP- o-fvԟ[ mfX/`&n.n~_~_~ԿYG ꯍ?o fq [0ScD%A`qfA㶾9ebZ[9Z$<G|kbd|aڌp|C0>dp8%rhPp2$lVupWliݺEɐC/)  Fe -m,d>>8s#)6s~}\u4C&\n'丵\)Hpaȩ^#'r r1aÖŢ9(rSb-eCRos .,M#K?[/T[/ȃ0 W9fH-!I<$aeo;\ {1 x9ZЯnŢТ",A4n[KKK ԧ"[KLȐwsx.uj#-9H|%%.ϺZ[Y~D~tn 庸Di E8C6, [zxI|jKv sE2kU?['-Z2uouۄv}k5Vun Y: 6[}9S G7 "n9X2tٸqI1 ;Zm"]8<Z6%Nhrȩz٥j/z 92Xamuk9I6]C x/kso烡YdZKCz S 3!ȡmc|q|D<_ؘ?t˰ǃ\ [B/˸2,Z9)v9g– [Ŗ. s,maqJzS}:(MoOD| ngTh!K  9s1s^fX!!O>'n/.<.0_)ɨ)Ows؋ Z\E["1\ac>Pb[׭%%qkIPK`A9(O{a۵L2o-E\<В ~p\8:K8~Oqz;"Zmi8ޞ8Lxyp9S-O A]-!.qa'K뇺n 3]>nIP/'vz`S{Ͱ A6f|am[P? O AvZ/e,!Ϩb[- S.$~6X)h3_d+`}7eg,˟տM//?/wD[+_SO_%~ħgKo!)!H b:- ħLT1"$fmR 3LPVu$a⁢~7xCҬ[qq-F#.֭^Jx;nEm ! pW/EZZ\?ӑO<(C_k/䡽1Rp¢ [>pRo>\dˎdA7qR׵!yCr[3ӐPY[UAj}1-c ,9CUȔCXGR =3nrHHzbD1e@ܺ[uKPtz%mk ŒO'a>5$t`pO[ǃ< .iiOYœ=_ܮA/ɨ,J*WxpmɃsh].a3`dX ]bE˄\Y++ kqza>kHr[9Ηp\||9o/< S収>/\>qxz9|#z1:'בLJ^_b/o_C|Z݋zqy6di|OWi=JJ,}`1ZZ\dXLXߵeB, 3XƧd0n ]\Hnw9,$S|7!yp-q+v"Lqky29$nr1^KK|ԋeS}W:qZ9n--|8-Fwifh-a׭õK4n--ꖸ*%4) &o jsd?8~uR {1fȸ\^6QS3"!!q{]\n>5%q$uKeH$]TE9.W`) GC/vఫ?w8KR<6ǭdFeZߍaDTuI돂n[KPfbwx)Aan⛸[uc&-̰%CO%n x[[1.]fVmX̌z.41_x)0((ZEd(?2X?eWXxp$%TPzeç 8Y}^ɇFrȑ/_dO- S-[K`)6̸%ʳLq'ҢE]?ONZ2ڧ7zio<(2KO`4~? eiIIO QKyJ䁯ff|J2d!)VE2}ZKFxY!^m=]Oxh&'F|oTK#^6$,ʄz,B-lŐ]DU0vBbh.`Xlݲ\B3n3X 999k2^x6KKފt}6!HF#'a/9>dmERo;"!qo[m!KcXa KCK/DSKHR Jb)vU%܋,ނK]Jxj} [W |> p-I4S 0AA٨zGVPEe7al^z<y81wf\wzq7鍡 3\FftaАsc%;[6hhً.{ыxXCŰzX CBz'#Cb=`}:RaKPC$%02SJp.A !9a#t. \zSڕS)!H<^SߋU%>ߩV4 v=zJxhv}hI|qݙ"%ڕ6-zV̰AiIIErp]|#Dx*< sCE1nKpx 0o1"͹qI޴#rph xxO/CВtq0'-]Zqy(S=Z],]Jn~׮O] c2bK{x9> .; c\ͻލwˮx90XzzV v=,nz $~wn؛kָ%Y)۲K7nc[\Fw;0>%73\Szr'Ŗ=rdwi b[.$danݪ"0ǧɍ 7 a./n[O'*ܼK&ć aBJ\F^&L8!e1En~F.Bsy*2-C˅6:Ap4]d\KhB%!"% 18..nO."ȍ ^+욄 {andpi*9e4d$GZ/KOAcNĿsO2^ ,>A| ]zAfxwxa<C C n pPGr斛Kɛ$=?楗w )z:XC'O4^ .^WAQZN-]t4+-^C߿xڢćla3vׇԻ F-.Q#BQ] zȈ`A)NEp!~ Kù.So5I/!|w.+YO|м;ͺ[CFxM6uh";3V}*x37zqz!V,0-M.Ԡ-CeH|1HojŐ? g o8. Y8e[a/fhoLWO%Sa=ݾj9CƹknZ&k/uύ^XƢҒÔABi}1w%$זRO!a.PFxwSɐ"anNtft9C 70eq{Wbԧe橗7oW=puX2o\yYF0wv̛N;!vlɲ 3NSZBI<北KC $i8CKE 'XO - Ĉm6  fF) Gb8oapƄL|x/iΖ1.\dh=TmzR$4[؋ŒeK„C4EiY$[}Q7&L)SY1ڕsbXzje+ JKW[0%eO iQ+a /v3,n h.[O[!A=D⡴/vD[ZwdPK]2\KP?.z R޴ĿXK!"z a,OOeRS=bp!k$4ޭߕf|h}?(!4>.U&lcSS&lZOֿLP 'EA`Q$W)Cן-!MXg >WrpדВ7////.򟱠%U]?QA(YhqXyod$_a|Ho%$$:K9~8(BpCšwō)zy|aB2(aw2w2]֒  0ӵ r/38e--)>u!)t);7q߻$e-`Y H2 rȡ.o^X/z^o8y#w]no;׻`w]spq-sepz ;owaS0 ǐxYZ ZZ"A. [APC 7⡒2bğg22!m [\o]tQ/\nrn88tKҢC]s2Li}]ރz -KfYO ] )`i Zar]$,RfhCˌ"J083hih8HhjI)Aإ\Քb <%aF[Ei? !l8 %4^O3܎Denwx p{kQefPk&bZ/!ePOaZJz֧]O3"ޥKBk+Ei"~P ;^b]/CևxD~R?f!h/X_EFPKPZ`5a=)!CJ®hWO%֟zJ|/S~X/zE|,`.9˟J|H"wp///w˿տL,^GCвA?E/)"!A]x )]'>U i c] QC,)x1Ìx7y7nμqxx#C$ȡy)-O-PA1./AA=pJ7, -% zJP!o5AnZK͐)BAJ"\S.\!}kq.Y7MR%ow!7vqw=~x%wLCkFk C fib=H.K=5sIx7^V6(3޵007N\ NLc:ħa.3y#ceJ F_Kot9 !]2&넖 n`1(.) )ҒЋk/)EIؒaK=v}HiٲtVr!b|h!!AH1,scwy;ܾɅxo>]87w/{qw_7EJqx7\7Og<ń]r<%$Fb!K]rwХU w, X ˖`<i]O Ai a!!C)C<ćPx8CpXa=s.1'0~22!so[okW_W;newIYiY4̰iz,LR"5>ERSK˄ H|zJH%HՖsإ`ԲҠr;a2$f0ck]$>$^ǻSj3XOg%ZOi]YҰh.xj}XdP/e}/f BP&ɑYb_OBZ^]G@f*Oifw0`sSA6k%ħO>}ӧO>kcAOWQh}(?V"U)??'na %~T'ꛈ!D "iA )&'qAٌC "F}7"Kʐzo$dadkE2nK/ ޼+$.AhPOx*rmStbO,' $~.H14_]\͌dȸtq 2f\.  {azBd82Lcv6~Q[/&8,nƥY8AmӬ7-l[etsri1ЯtiDm7'ӉAe6ƠnZ`̠^y* kch$XX88&ف%A{ӧO>}tOumuՇ ϊ"nŭAˈzOAAGA? m1lO[1ˇВu[l$XLlM%AoKD|qxC$_4K e|jlo^7 B~޵.Z"TFb雰KC0? 3Lg2CtC Y4??-I\e-vΐab=uI؈Вqv!CnF&Łڶ޿xYگRe0x`û>Ql %46N6+m#"dY6}SRQtFb2,2/Yj6Ōˊvy& rtS$C4^ V}9_~c[t bE=̒lݨw)kh]-Э{{7ez[[Ի.)4l$~6-q ]+ݬ!Z`d  9~pE_X}z,W,N }bmrr.2_H8ƯZbs]_]2qI؛,޾ZC,ӥ!(ʼnAY.MPYdzldH\2dXaecpҡb3$ SHK ;0C6GX>-xl. X$_toh4aWJI6wC:nq(6Z/5.˔ !vQ!-)^i92HR}yO5 Aaե#ϊVKg?+V$և ~wԿf(>qI nqAPK`#JՒ}2] I1ndD28$/eFfA0V c,=nf!c=Sχލn,Q1dO.2d؞6-kqq̢mH0}!a3/Da8EƻE Bx1. t_%bp'<\I6Y'h6d4Z<$4AFԻ6{>W?88M}0!Y8ݶ[ȰO2fngT]feco&.td ! a2v12 uYq"$AHɢe{.+$`ed!oL[ OW,Γ-C x7n-NIK.nuҍAQz CBC꒐!a 0CBYFveKҺ$̸⛄dBO)-SVLH Z+%Ȅy hq.Z{3Y 3-u<%^N.I4qi$];tJZ)EK˄=쓔a BKv~Ԛ"hKjťE !D|}z$E=m!qĻic P4xzv=ˌKxLfc\Z/39ٞA1i}ӧO>K"C*OQc?V-XmxiҨϊ&$ ވ[.I- **- وy`zRS8cCD BH5tkt7$$ !AXuKz׺Yq[@H8%b ˊw eofF$Ah]24MO"M6%PKv2>+;BA. Aii݂5.iCsɐ>Kt+z N/ȸ4KzjO2ش>Kq~_\VK)2F| V%?ZflېS[lA<=Yq)6nk覣-e尰fyA._-ttŰ׿aKI}O& LC7,x#'=ZZPdpm`̸wAVZlAKP_ɸ.A90zcXorq|aҵ' 덓Xw/ݞN]o. 9ʼn#n R6,Z2. +MJ.dyxPfN'3<̢8Ozb\fPlOAP<\VCJrn.ABKƥfSZ,K-dHAB[H(ְ|XaAQ0 KA/#>ɮK7wkc$E67+A 0fomiii]&tS&Iƻ$$>xX޵X()E-KJ#dn7{k[fHX͠ETQ1.-ҭ„%a-V[|xZZZ-9اMʉE!$˻5t!3$ufVύR`ֻ%ao0J[kJ夞⩴>z[MO]ĭ. 2> g m[Q&.EƟژPDex u mL~QRu'w )]Rl?`cp"hŇ`0nKQll jog)>}ӧO>}>}WCU/uKC,Kcq"Lw3~2aA6RZ0fcJ0^wa$q[7a-ې/^mc5.y y!YX$K~.Z%! {4LвCfᤃvz*3d\2(]8\K(2CCby.K5n!K.-%A ZZHȸ =]&n-lNemNO%z c$d؛Y _E+ޔƇ6琱m+NZ풊6鉺ۦf8ƶQz.)MUFA&q!GuoBBhN 6JJ;!cpr`7K,O~f1a07fd~~Ţ'+3 Wˡo$Yc%N>dUO KW2Гnv1aAKL9۠(}0f4Y,;Q2A66:Xo_"Y`OR ۜ_9Kq뿱xh#䍷ycٜ _i!a.Ne\⛓q2_Һ$`s tKp")]hn`o@`6;-{!CjHxVH| &.dиd\V%b%pb8:7`B"SVoonO;8ONF_IiWtMB 2pn7ZbC viȸ Ҡv=D{KlqIKӖlx *qۘq.ĴPƥ];Cq1"̈́]%u[\ԭOl ml0D17;`m]a:OZhs;ӧO>}OY\!ԟ"~]x?I 6xi+S۠16 4J+2˥!rD,hI߬!K 9LX9\AOio.  $.)K%uYHXӏފ҃"RZ#.3_Z/ۥ!`o"] {S 2nA?ᩤ%PwA`ǻ%Iݔln Zl޾+{mwh֦8Jn/ۯFMO3SeפA>mdt*V? =ٛ22)7F'&ddPL2to vKFJS&" 9\NO' k릛E8Z.s`ʁ5 햼.Y'8X. c%9Xwq{ L FphBO"'BCܺ`F2vttcQꛐa kfYv 2p.kX7brXX|tdc>'_}xs;]+yD}e elK_Nl)d9!&xPrw #"10FK]kݭ{[ej΃ /|F r8}KB^Hy9psɍ酜 %7:i\fz7XO%aТx*uIɸSC#0(O!x ƥ%3$$l@a&8Ƅ /e /ÉnKÌKr {:IwŲՔzu `b)-hHB&֛zXJb. YR6$]M$qIAASlIDI0t"Rah#]:Ȗ42KkKB2uiIZZmv#ՒxwwZGKp~C](xh:wTԥ).3$~n'&,ƛ~ƛD"' )CN&_:4qiuiOf(j)^"61cg'Cj/% SE%KftWTKePa2l _KJ룠"(bvI 6qi?YIb|7XXBII~ox7I>}ӧO>n7o=ww?W*_όW"v2 ~aƻ*UQ+#(ҥ *AE][Af!axZLq(2/Hn&c8C|ڕ9%H㒸$ qcN-N2.Y΃$(/%AhӐKMP2]|T A$eqiiKOof\bNpz,Z'p|9@Hk3tU+o'zWjio^̠t UR43=NE _U!ERf]YBī,n1~n~n~+v}ӧO>}Oͧ?߇=K]ջSJCh".*>`Aq~2wEQKU&lɍz( )K|7.IZ á"=%/1^|qa3Be^X!/x*9phiddHi nAp#q)3ÏbL\/d|ߖIAJ%&AP&(AR$$$.3Z]%.==$8tɸ$ӋH\oZK^5?q 0q3VU.^rsRڲhwKwSvA[Ďhu ]MMbM%RCQ˖-"Bbup rLPr̺t<Oj ڜVg1a1orÍ9& ѱ;r;yz!/24u9 ] )7ofl`hJJtHӁў= I벥 '=qd\t'9dz2[N C"CN9072̍yxqi\`iOΓyXź|/~'̸MNj7n?BKyw9n a]oL8~IzX 5Ǎ==Npya4(3%CqɢlX!ȿͿo$. A!% P0̐`9kC߸?ۿI\&88N-s.~ݛ.22tOGnWГV;-]sqdeÁ3 Q!xD2(GAb<%E}ӧO8?~]>E~wA*~n!xwA4@jJzԫ8\RZ2,Gܘ F?m "80$q 9azHT`Zoffi%|yaždHpAKYaOZѠ8P$4~]I}x$SBAһ4wvh]`ȺcX 7 GQsp y3LWܤ_=]zqɍ9К7I"nv^ա&wmpwrnޅt'3TU%D$cb84a" ƻx2Kǥ=xX+}r/ q#`\r##) E!ht!9CB7"]Ewsx.']/ߺ ]]p`H97RDdhJ7COӛ$t9Xp.=xYrqx+/_!79np ā`=}BOG9=|·_}88`&̉od79N ]-/?p4}Y?$7ܹ1eJ=ȝsCBxA$!%O ǐqIH\x s;ps% 8}ӧO>cw韈WOm1~zW-fk]}utERWf͒$x(/ś~&$~]|4oZRī1( APGVS}TmŪ&n$bRx(;rܘqIč|^ŐMUɋ_U2dH G萐0˞BB.S2. Û )0S}rce=S<ջ1^5V)]I.=i$P;h1&c.$% v=90dK28<--Nmh͗}X1̸n.q ,sKכc$7z80սdIF /⡫]2w5[Cota8nh.3.!.5,%=ŐPz0eOfpW7ܻt9̸/Gfk{:ù'Ur~9z8)/ܿq?z7Y]9֫fJKn<;=qr0/, 37,CNbb3. !Cfa2"2 1e$Jğo8o"3䋌w7!~~wfآ$arzu@=K2ӥEZ: s`ip.A=Ż"KAb|z[.Gֶ dٰ J=N=O̸aw%բ$.7FDvI-);OIH\rؓ \E]swCOMl _÷C\2ZbpzZį-ZZͰabP4)dQa.A~-uAz(!JA}Кń%~_GaPo_a0XībzOc?o_G)>O>}ӧO|'"t> 5I;uA}*"QQzW1"("dW&́1!AI0ar9G w#Pɏ.0?zpxB]ZO%qi@p"q9^;Fu9Iz(nMz :캌.]pc$.)SHH73î%a<%ᬧz=֛c9Ǜ% !AH6uIȐt9RSwBWޥwӚ֫&RԫZ1.9pRƐBBG^Г 3XOuxˌdi""zԫvQu a9Zrq-Ia@(JL7tًTevL`@BD̰|$ dd0ܜ n;AXNsݚM0[iao (2xZj=6ǫS {[ZA5شqACK=ܘL_Aw-- i#Y$,d sc¡,ݻ`{~ k9k7t?.cC0/.ӟWo2.i$ƔbߙEÁ,l!rM0B"!̐!`-2OIEθb8%NMh̰ZXH7nwcM!oZlZV1GIh[f{8H,b)A\RSCJ=lԻzlHBBKJq0B|5cH؛/v)]B]Kx85옠. t) 픰qUA"쒲Qo-{a{`\AGMcnS|0-S {{fPHh]v)KZ뛶hiIInh&q٬C,WuJh-;ꗊb0!v=iPv`Gm.7 Kh3?b??4~f)PN; Z)ӧO>}? ^nuX6Nk955NxXX8"iyXb9xZOZXrN/;ba O$FҨ!!6A}0>dR.zHxUȐ kȐi!a1a2>$W۰]:#YYopچJK따½fGÔ}bB]f9$샸%Hz.Š wO1N)aof) 9B k86APO lRbLhIh ZӦ]2h=EH=Än AUZ]K)tl$!9 i2(6~fv MTx?v.!Eha(zYiH 6Z]Ki®(T-BKh}0N)6?#Ha4mLe B72.ۯ=]@[MqkӧO>}ӿO'SSD=SD[IKAH S/ԥt"t`/e& eoZ]rH"^<%ú ɋd$C3dK2dH+-%qZhI\ndqf¼n$= /,ac;"uJ\nАPl$tX)xd!N ĩEI[dZТtccp 3z(ZpCn90NA)ͥd7;%dZp;M$Ӵvn)h R wPnKC-[ː*J7FS"_J7nh" qEAPUK7yTt!!77[8/t;xz&ȋːM~./̍n9hoƐ2N#ކnI`jz>AF{G(Z:%,)6>&`nHPlxƛV!uС7Zd ]8<fdX#/ {], / ^p 㫃cf {rpƒ=f3H(Y;eR̈́y)!Cr2 AHHHa FJC 3./!aƛowkdwuqn7oAhYiiq_ Vh v֩ۍ2wN A8 ULBK`c(Zlio lĩ%1N.CM:ŻROMD]vȦ.eꩭ̐ q*o7Sv;(&lLIQm7k}0u"o:P (.uIb岝)0t(w! Jxfd 6M\}af#ϴ_~4K;bL|*%5J|ӧO>}ӧn>'R?^O=⣸Ļ WEQ%Һl%%%S=u L2,17x1F֋EIq {ɋ,$/xX2$${3h&!qڛ6FK^Ifpp֍0C^r?0.aAB벜Z;%z!a]HH%N))!"N)wq\v\neN-B)qZaXt#CZ2N)-7odN hcMfwkn 騱m"[[7)[[a*J$vˠUUO۩[' hWZ =Lenz  J7n Nt$ Fܘ/1]7,Ow2^ b 3qꋧLFi0,spNmOWM0Hvw֨ .#䮞6 XzqImSF{eWSh"3 {żqZ-aץE;eM4C.A|%(oUaש=̰KqPC7a4*E"P ;5(3xj+JKzJUh\!CqZ!c`VwihуMVH;foM!u%. E0aj vPҺu)!{.)>w qj2NE8eC8d߰< FQoz>( CƛR!~m냌ɶn?G/EaP~.!~m2~`#>+EXӧO>}ӧ?Sq%8G|qJ\B+⫢wMEUO4NT01Zh+a|!K oZ^n.*=Ly"&Y"b^$^dI px8%,qʐN{c`YyxMkX%7 Sf_ib{$da{-ҲR%C7o2dH QQZ$S0ԒۛWMMz())!H\M Ei1SKq1wjTlza[=hzj=;]wmp qNq82*8 !$޴.QQzzJ;FJ"D0LV$Eܘ aȸ Ӧ݄rMd3te%Yۍq&N-S=2հ<MԃS.fw$>jPVz(o{o e-*r*6h#XxuOVnn/o8r/.8e{XNkqܽP3`ˍnJqJ;.p7+lYl 3o2 Bq-rJ$,!a,n/ۺ)~ B̸O?ꩯnjݢA { LzJ 7!iv ꡴M=l* 6eCI1pVZt 6;!ތ!AԩO(UD~&$SH" {K:jB+`YEYNSz/JkiEuBn-S_񮾪S0~!]ElKP$uڃRm2.A]⣺l&( Tl{ma3wW".E\JTow~#//( NAqۻ~xMûPĿ!aoZ?>}ӧO>}n7>OS_ߧJ ED%"$KPHzHRel_`=,Df9z8:8^Y/ܖu?®Ӂ;vM&2l_}atѰ7&}Ӑ2w ; 2uJH*SK 3~) 2 _^x}%!d8Ͳֲs͛{˼2x mYaZ޺-C}ӧOww_KGEVGQx&.J}Um%ZN E\A|Eį7d$e;'O$?THV[2&$q8]!Uzn 6,̓Kƫz : , =Cy2%!E֢'MK.- fӥH#C_$m'y:.N,ߝ̐/.0,l>:qn;Mcx9YXĻ/|]7/oB,Y<ᤛB7/df6{\f'r~#e {rx<3h8CM`$&2JKac0h薵0auГ 3d8H0!OX{b}çOCԻ_KU*~~_],Ւ,?Tbc܂dݸ BB APD2da2fI9Hdd$_II]^e/cnn6:^ɐn~aЭt 2-[x5~c{.g ū2FЗbm, nuٛeɛ[HaM`0|2r;uF'fƸ /,7td K6N֓|7%^<: _}z0'ߞ]Ap 3yaseJ78BIqI9,ӻ L覛9pnīdw ayb :acṕ|e-ξ06Klvb؛ofC[!C,}AB*Zf$$vB+ҺFԥu9oΓC6-(ui1vIhFhR[u .qaS$dHPpv+KVoƻmv%[ !)ecdF7{{,2Y2F?f&l۠ez1+_+AԻR4 0dSlueB&ݐzW^fP">nW72ꇄ6Rԯquy[$C1.Aڸq!7FmxKZz!bp77_[ CӧO>} Oi.- ~GEuIQ(A CDHfĐ ""`!d*kIYC 2d:K\DBBB$>ZY,`B0p ݜ/>H8p,^6yd\0.2>jIHHp%%!0b\z qi]Vӻ$>HB!u[nq+KⲆ%6<1anf3Nav`czVm Ġ.a힨1~b ZA0 7,BI\v1$$ތ=eK6tlz20ٔΦK9Fx)&O66٬G6ؖxd4apZFI޶WC2n-۸ABBZ̰{FEdMM{΅gzv =YO̢x>xXtY_pOfqnx(]nny ;rnYxbN)9t6H(ְ۸&n Y~0YM" +dEBa0q[L%piݎ/O.:dyzlI+n=aL ޴ncl 6 Aqۛ%q+n 'wA‰aS4$޴nCʮKB$tA-WnQ!B=`cJ㗊ԛ/nQ[=+ u+YMdaoͰ_8i}>-_Wį-!7-wE[PĿ.*⻺ExU&C„`D" d0d"d*D02OdiA6daqк!&%tS#d,M,fуdq9/.. K,,I.Jӻof؛. :M=i]A3ri%àEP_\zAXO'$A}]ެ!v_Ozm=j !ƄݱmnV}RC"K%aZ%AZ?x A `LQ2_ɐjp,qf'XB7hvKvKx'ɰ=){B=ln2fdt{]22dpg'6`Ti色7)zUX'x3 6s' }2g젛Eh]Rĭލ[MmѸEٛnR5.e BNvȠ.A{"ޔ"4.)Zll6mFl^BJjB"A6'~w!LMA~!Ի"(Nl4(SvFQJݦ>jVˮ[|4([J.P67JƐZEP($a-]JР.cy/3vKKAQlx^6a WM<ěaZPo!vb ^pZӧO>}KO~?(jI[݊h+[-Q ߧTM<$U!qI YF%9K`HDr#YXd%7';*9$_%O?!NKr !yu4tdx+`!*Β5.02<9_X{/rI[tfвOiYrI\2%.9%!%ui&˭.`iQ֛ Yvɸ4C ؘMzWԥۛ pHxcݒI'3pz()ƥ A%ўލUx5NvvW#F( AzպdKCBƥ_I V:=d$,2'sdޒ Y2."s0_!,C7tEvz}ac\M,262C-o.acB6uf!8ZZmi٥' &d-V BY,o }`wO_&'k1.A-7O|;f?HOPE>dO.v8/|pɛ}2i|>9_>)yyv{a.ES8iȢqAN2CN^^(5( f%a28xEⲐ%YZ>:r~ of\'G{cݎ^huI[us҄,Ya.qۛMmZvUmUKRbcQbjJMu j]Px(Ѹ%lԻ x(;nҺd I]\]Ʉ]C!.A\ڈ[PƠwCh^fPޅߔА]m#ml _K<-.SI+ӧO>}w$Z6woq!WҸ+q" AUB WY$:2, Y d!$m!JF$ya/B&AR,!!aƻE`&!qK`%.ېqIrIK=l9pl 2CȐp ;4dct۴(G9qnn1dԫN"Ynړ8f Rzbc ﶇ&ҢW/2bkHRu36$ s8PU"ƶ=t7 l՞v_ C='rqdt`k7d$n.s_dKݲpg|33x&zMqx7nM7-}Fr;ݶ >%0mp,qs1y\f-,֒`0n' ㉗g97N|a e; ʼn>Y[_91B<.ݴ>٥VI㒰0XL`{x{EXa$. +$p%!le0f_0ݾ~q~'y){z՗gw0a)x2Iا~y֫&'3n\d$IҍE<`.4>h}!ƥMF-Te JѢԻ]ޥCE.ĭ%!=]ZZAf# TwXB =) -ʠ޵CxI6=fD]ꖲQ%BJ}J$(ur"!&Vۻ6ƻMPHh}PAP?LRA_^=__DG!2h|PeиÐ ?(~!~Wj_KP>}ӧO>aO~h4_PqwEP`?Ѡ$qIl-x5r`ѐW2BA$q,-[˘/IFТ$! fr&q) Z̰OdE72,`8^/nࠛMZƥn 2uɐA\2.$кt;}`qiɐEAmH]ZWa!M>!2t#"J0v[gRv퍓`}7/̉d"簟8Pw6jmfh\R}HW"u"C!!fƥDg[ĭ.2K"B,[rxHt$CAf'ݧg`MQtkfk=K7nj%Ov=l2㐎/XenŹ7aƲ=t{U )dTh25!n\ɰTf `M! 3ɿj6K,f|#xl N,'֢-l/ /Xyr`4/]iz' l#vmAl$@ @$LĖ3vzyfYkܱ'eSCBJSEnBQZRB.9à!hħd xօ)օE6"qh"ˣd0S[/yxws}7{7',fʄYmy~㰏NKHKB'uM"6QOZ^ZC7ETl`ݤЍxOJ!l6R/4jk=ؾ)ⴷ"' J$ţ& `{qj)ZY8 %uBˌ GZԓB[Y[KB75͠)-ۃzR~LP/UTz"NAWģ nA}elS=Rdl֩o(Œ vMx%B=(?_,wK)AP/A3^l$ `{Păx0ؾiw&W^zիW>ū(O{u?QJYQV7Ex_P&E0"B4(" A0d$%!K,ZSHx0X7NŒ8 - 0CY$Nxi7 w YdH2v _2C7x2pfcݑd` OO2$NS[5IHZYN nZf1hg {{V,Of+eM딐!!aM< 08^!ƣd h\6FBt6mM ۣtI=hY(a!nJ.J Q8(mԣq*&àڒ8%"b嚋̢͸)}0ЍBe.dallvS7=dr9f8Nݚ{{3o75#p;꾒>27w1؇gC}bV 7%Cn= qӒ$arGCalzvpuǺs:< !kwsGc[+3pw"oml,7 Y)C>8XX/W2t2ԃ+,dQlleKBBnY0a s8P A J,f1ús}-$Ä]v6bN'[K;tC8eto> kh3օ%ۻto߲1/Xk{4̒T2# '-/'NE<MALE=4ԃR&$S<( `ӨR7WJzVϢ%J8~#;^?~>F_0? >wj}YTDw0N=$t' iJi)Zv'NmQ7#)Գ)UHh"xAFCKMpJIlKY{Z-iixOE=guۿc $q˿(3l/ "MPl GQP/$^S,7!A7 و%opT46Y}{իW^zիOvN㧨/E<+'g-⥍S/?"Mi4WM7(b7"B b "Y,ɐH`02w3 HF3;3 dHe 0C 3n.MMt`1yC >×ǽ, qݝ>88 vZw̰7j.AIHxq;OM/`$^HM%$hq`&nZ7a=Sn 8unRvS\zu߃,,TcS.2t/w=/`QfΣ:F=ۣdikG Y"&nBz8%NM.^*- fyxE޸;Ͳ,/ahR7z',d`{msxrܛugi<8nr'ḱFa+Fmn٥lOAx0d{v0NA}Cf<, 3.#6 HE00TB Y\=8u7Wdas5iwdy7K.|Ł>f:h86Mn땽q Ǖ]ͻ=044@ S\Ee\q0dld o.\2eBq =Z2̰n7t{\,u8~w_7o/e㯹s]A{GKK&tӒb;e'׿nO3W|M:dSm:ă4M*JK|_گxVH}S|C{;~ v[_2o8GBАM?.}K.= Aif>+)nƃR)xRl7oǸ?Šnn/WT+GMEh=h"(T&JC77'I\/MAnē&\1.{C' `#q*AP_ ~̘8ŏ?RT}gW^zիW^}Wߢ>IWP W|QU,x!(ē $ԃa\2D2$d,1x{G C6éeoZI0N=HhHH0$$ Sn qZ}ē$qQl,Sz_"q2$ 7puӢ(-tY0mf8Yv3dƝwޅ!{;zH* AFTmOQE)ēn#v{Ə!nMג -SK%N GqQ[r!``"#ƓqM7ٺt3f22qp`АSt-γ탺xP㛦hӍC{MKA=u3a N4 EօY"Q2$d\ dq\.X0'-N$Xă;ҥ=8Ń%WZbf샽[{ߥo?g?IH'I4!ZZ7uA<cƐzVĩUJQ'(ǁ"^(ZijjG? 7\__u~\[fpJHeE[6I1ԩ>]}Ci() uzacܴNϦ6⦨ZNEVfZ&O<'I\~)!uS'5z=|y ,It{SgB|7Z?zիW^zū?QXퟌ6ƷNQ ,~\B|% BQ2b!a. ٸ Fb;737NrG `#N3 ȅ,'8e&C$ -XօYtcpqe9t{˺s,|No?wW7fuq>؛20XLPrqJfZ6-}%!˓$N-Y$^hI2t /uVRH'a.$NtӲ馥^mYR7klܔY1dȈ.kIƽMS.EnlOM%Cd$ao\7sd_rWօo&̅.=Y ,{fI}HTA1hPZxV%qJ؛ZYzw$~9%nb)>lo彏$$ŃxKA *qcew%nZυzիW^z%Wԟ=ج!N ;XnS7 cXR?.ԓ)իW^zիeciSu@ϦN߮nY|XWb\) kp\ii\H'2d t́lS='saI{Zć,M!YȐ $dMY8|z6m%tcc܌dS\U =5CzԔQ=j7SaV7!A,nS\Qm).M.B$,rʒ\|mhz8ڒͱA:탄I.]YqJ'ɐMCƓfh+EK, - ra1C 3>ڌ'kJЃ'3N3ŏSW[AHtoKAEP=hSMhݔzPAѶNm i;~~{ֿ. 063l7'YIA=iPJS/թT[*(uS"ZA)RxPxϴ"Pߙ?t$~ba# )8|{'fc Y/>F&$8zիW^zՇ]5~z;-x~"E<`Գ 2n]/m @PG;w;ƣAHH܄)!a0n2dWꦥ)|qd!,h!os3-+wq9=oNǕq8؇̅2hIH2dķڛf!z'{ssv8( $N-'''28IBB'Sl$$^'n\[Hqգvӫ\my#z #lnz,ۣG!:5#A)"H`aaf1K &Gq= f_kWթn -n2W7rdƃao=؊éenS",L؇S7Z xa 2e=W7˳؃Wo4?SU3&1dLIPB7 (/Dq΅YLPLh&鞮:羯ߧN=O'v'vp`J/~}8U1h+ijnf\>1g;r*W᫪J_$^7+ě7o޼y͛7o~wmw]gGPNAH(g> ^/W* qI)7U(oRʳrU( )U >QԅP0N(TыjU862TEvi3f;Rrhڸo3v~A5kc69 ; *) UNM-,|Pĩjz#Zbv**73NU(= UN=nBы^(z9e0CUTAU}] dTyVl`#qѰ6 SBdMgN?|`m<|N38u14S5s!wtSE7Ulj79jzɐqJdT]M5Ԣ5^EƏVt(UTSEnv pa3>)X$R(W, Ni jȐ쒃pȃHe4Fc<)%em$qOUhQڳ8wZjH;HEyTKZ(FPUmNC.h0 UxԮ)ŌlK*T!;)A$qЃaڨZCFe#C5d' `yp&;   шS3N fP sPE53$TM5tMc-YB┑*p Zjmxa|;cScw!}c'ƿOy2,lme)ēqzb~W5ğ?|k_rEUI Rq)(!!242)Ī2ʷ|'jSt2)*Nqg__+r^m+N*NcvGB&lH*Jx)N){ʷSn|ij)U" )j2n) ¸GAQ>( 7o[T/⣴q"IyRwJ}rr U(WEP^Z@sxTTZuY޼BP+ij͛7o޼yGټĠd ʳ< [GC׉gAF ʓ*❠-^PSʩ<*KqJ(P)ծB%FLWIUQBTm*b|UBB *7 49zQM/j2Nj2N&Ƴ^ͫNy{2N3 ;ks!B5W_rSMZqtjv!Ärj7U"TMM2hS!!!d|PSYy͒Q՞dÌ!C <+ēF)cTˏM)@x(**ꢂATvWlA՞ &-i2; vD bTI)E4d c4Fc Ʃ7ɨjdȐj**E7 ASE$NZn0"C )'McQjX8|O3~`ǔkU9GFg8wCw?*_|}qRP&^/H!(*d$qJ\J71R\5(wվ4(qJ|)WWe?g/e57_A5U ecrN#H|֪|MQqUEx4”S_W!Tމ˿/U!NxgОfʓws5/w>#YԁBRԶqxP7o޼y͛7o͛?πB RRģ D'$(_*/ԡ, U(P^*/$\ )j(Td! FjC̃rGFrvJTI0N),>vZYSM/ qՋi}hv?gmNkc-1{唃nօ~ps ̸v8ŔSdx!ZN 5hrޜJH0h98%dgR5dTGC7G|͆]UKF_j1NI F]'HJ[d3M"$i QdRQE-TѬZЄ;_J'UHtHmFũB!$q AȈ0$4d̰ 2dRMS!C7γ!jj5;_av<8UcA4hکSPE3XNN 9%N"0hd\5ɨTƓfFQuqЮp5hW hpS6~>N39j8pr8v恇 s9$A"L jƣ7 EvZQvqjG"SBMZKbG)TQ妊SB UnҬ:ȅjWnNtrv,,wU—2IӶYeA<9\e}7a?q?E*H\hA~w}=Da[I D8H\&G܌HQLl=]?kgvxުq)+r!'"!HDZ5(hT#ʩZPăR}/]ٗWGjS>**)̰m8* ՞GTxʃyLH(qiėœCr ʓh_g_ٟ*]?ScsU#z|YPNM .[9C7_|Mrذ63公՛SbXgש"޼y͛7o޼joFP~ {,zdТRxP$QUP/SE AKF)ɠ>IY*Ħln2W\"I5 A$ʩjw۝,f'㦛j=QMC荵;l/bw;}va^Bfړ;=x~vq&~&C6F-2jrqECj2rʐ"q.h !aAơڡ!CBSH/! ,lP Z[ZDB8xT*qG= UZL< LjR*$EKEOj BmR*U5ժ77$C]ؐFj\ES!YbȐP,ɢ6R5 "(jPJlT"d0,jH{ 2v%ST.tfvBM2d'7RTy!=8̢7* )T9TQ8T0l S=h >ܓ{ٯ+2+#3N f1 "q&d0Ӡv4,GM؆A73TSEua4UT֨n4ƫU]"qrHrH<0vfPMF֮\hT{a߹\6_}cDž.f۔Rl^ck1#,ݶ8lž6j,lOWx$*TfʃI2,$$/P&E(!rB!8Ty> *w^c~/IPe!V'EByPYĩBT9$Na)UEH|Q BʯUNziB|Ҟēr*x )sqHQWr!(*IiH=P')_k~ʣLgByTL$uZHy͛7o޼yS\yJP> ʩ_$(C;HP"q \|Iy)+/,l A" q; [$KFX[{fFB;y!,ўI+7UTQ 3K85ћWηNw:l\{,Y݌'F7 Yۅ FlMY洱aki.T3SSC⦚5UU *FB T!av2$C<B jOBA;1^A{jldJ$Filԕ`P!AQ%Fũʓ&&4U5rB0hUhNEՅT5֛V2>I&vԅjjIdj վ, 1e2N! ArZ,UE5F2dqBSNvPdjjT۰B!PM5ivZqNI{nH8TyjBڙ!,V1k4ʓ,'L֕ 2,Rdf"쬅5NPU BM-P,n7*TQva@VLѨ m"[1* ڸllE5TmlxqN<\f+EmÇ]zqwۅjY\ nbbž˺',Kl*]$$dHq7Yf0dfh?.nz=9m~Զ167<7ܱ_zc]f2d~vZ^Z80WWj;!\B2dH 2;YdXPq E<iF0NqAS4[Q($tUBWQݽPEC )Tc f j)^+޳x.Իw\=X=uj׫\\|OraxدW [3ib++͟ȟݯoPT(T"q AWI␐8$PGe$FtW+n/ă8_-("xj*GUR:&H(orH<}&h k U LBAP7)OBs*Ʃ1q_obR)ϯSx</$NAyv?Wl߼w3h/j|kT7߾x͛7o޼ygqw[|xR I5$+xRhAzA!T;hQ*/'GԐR)jCCX.da4e9dI6Ȑq34UTSЛgfgM줙{9􆦐qn;\1^!0; aM_žz7.fћ,zs0˅q%MPM_J ꋪ鋛 ٯ fTM5U$nz#Eڹ.̎"C Cơ*B83 I !=[r%#e CCv҉͠,ESݣ8md(x40Ĩm$d(qh1ʓ 7UQʣ62T%v4d$+MT򠙡FW$sv dIOJu|P>*4C"(,T_vݡ/RJ;R̢5hT_dvT6NI1Cv\0$B3VӨvȐaddZv= vw^,؜ԸǺYWedݡ1;3$rN'!# f2Cd0( `*ڃaЅM&8THyR *UTQժ ơJ]ka]PEovnSisQ0fCƫͰvY֒o>0Zه}];fd*kg۾e +Cvɥ`n= kOksBB!^'!qHB!GUDa|.7 ))NBD`aB#PhUIJ2T?s|2 UG "JWI<|4(JQ$L9%A<_ AM'`P+ ">מ\!"ߌ~/TSyh|(B|4{_טWϴ'Aů%*~+B⦊jVsx͛7o޼y\YM9+Ox.dNAT~,l>*S0( rSRӔd dԄmHDmIv♅3ɕfSAfaQ z fH\$iڡ0N~Oo鍻o.߲]~ŷwkg3ͻo=]0K[vZW72nB7T{J7d֕SSÆF5_TETQM*jjYTqHx!av2ăIȢʡ AaH qHA{ВFrIƸ dMy0E8C|Oy4jU8ăv$N!DhRHKuluAj64ڡӎv8$,M J{\i,Y$nʃJUczæ(ٕ &QkSr*+%TQ)G0PU4A S1!x&Cb T!! k' 2\j7k7ݱ=~ue{a-va].Foܽg=f]wpaMmTq5ש7j $$$U $ ʩ E'[S|Q]VʡZţڣVU+JF!K\x(,, Y,," iu &ES{&4(!!!q>݃!䞹:S *Ujʓf'aIH0hCPMUn/ECiSժZT<*%E5UTTmT{).FC7dPA v2Ըva]g-v Yd{d+ر4 A%ue̐aRdȐqjYd0d\BȐqEk0h4}Qy2TPqVTwTQE5UTQEW'UTj=SEUTQ̈́¶QwTSM7<T{f1Yf1fQMWaFf33dheDfv\o ńP>iZ &L&P ( IBq A!^- `` A1~kB|DBH␐8*T\)" ~+fĩ<)AOVr*G=$RL92>S~r]ϭM{Pnʩ+ОC9q*S||@yRʃI3|ؽJ\vl~۽y͛7o޼yU.0AY(?vBQ'*A95h+? \Qc|.LR>)ip<ӠQFh QTaP]F,r|4d(:cjF;jYQB vyܬ0C5;6*/lwl4;\xwaWnf8\?8l۷N荾8 ޸~`uuLC~ECuA5;֕fhs\͡72TAvLS!J &^BqBqHd5;\=jNj,*SC<(i2TSCodpA9ţvQj"UM`2Cj#ldQ2dHڜh"BơZutfQ͆C }Au^2$)*2(ʡި < 2HT5}!#aڐwffQw ;iО2 !~`]e} q(d 3t3`E<( $$U(*>40$$)A7UTS噾RLQEovGgI ժj;,jۥaakΓZ_ yT޽g>;qicыUTu6֕3}gQ_׺ }ǻЅa̐a_%a|4PUB|O!( 0"(K!ăxmBBC;$Tyך+4V|RUT8&񣪜?.~ v)&h4aP~E<ʓ=Q#z~73eJ:?_E-uuP`fK+9M z^mړȌ//Iڷu(f'4q/"*F8Zŷ|I`,Ђx2^e<DSY0 3H|e(Of$҇'A{Ғ${2M)w)wh4Y2+\ޛ96`ک,fǬ >a3iЃa&BЈrf0Y#IH2UQTj 1]ŒSmN @؊mg vRT4DžnǃL-/ex(&(y*S~"1Ac* R3XL!CŌ'~2>޽: $hcfՈ0 k< if0Ԯg36NЈ?̄W1a3$aۻGeC/w1^^]Nx6 G,W! q5nAqe 3N v7~ x =?gs!ټ0K{WA\M0*ã~5c4Tq7Ub-$ԗU6f0 +͛7o޼y͛7g)b`/h ^%A|- `܄¸)-6W3^gAY8U b j.%$$N BTE `%L܌ I7 vjUTA3Hy!!Ea۝R?ضͪ*RJUE5yxԆwq7T9Z;ݞm4%\5QT{?Kugg|6)īe0 f0Nj0.ab&_2Aj3F] I|m3/ fʫv_\ũt֬JBK`)`7fWE  گ+ߡOAЮB N=~UF|%7>o_!lQ6>``g4"D/^c{?_WBBfF7o޼y͛7oӲ{/4L㿅B|.q3Ng0>iRi7䁴ڙ&;񤙋'I6x\aKѮ)$SN/Of"P$(Iē%La"#vHmL!4& 妙ASi %g`P4a¶1dC|6s0cfIHI67CB\5R<6HtrׇiRN)ыX%LV̘I903B{ $v4 3NS/7M\izL[i gZœ/js:.NS/BA7NEbif6F;Vc(d#q!Aa CکR[ѮC744ۃT1 1ULP`FP*jFwk`3d/,|)p6īU#q[;?m vWھӍ9m78?p,}PEʓEV?x0ÌDM13+%}m/rJ|IF? x6fHx23 zZ4㪜&lk-4IHQhL&qZ a,Ʒcq5B|3$̐08g Fc\ B S 4Bi<D?Aoo9`.5_N=>ЈS ^I0Mj d5P? ┸ A菇רݳ`lky'͛7o޼yb柾'4?A!klA|i\㥸F kgQD AH3Ͷx)6Ilz6MJhm#ذl7 ti^XFaB)ԃӺqGR̢˩S5 ?jMہӶiW`H/niP宛[9i_줘6z4ټHчRnN ӌ0 3 $ _I^ jTx!)RNaM)͓`1Sic<+'=i#+32hPh7A!Oft3cfRD/n46|RfXN҉oJ4H1m Rx2)ifK1azL8B=>x_ۿ'߭_N„#Aůj'ȴ'X> !MB\^=``y۰y͛7o޼yn͟8'x֞ųA~q3׉oU|i)AHd I^ׅ6  nY! 8$A>;"M2b|6CL1t<<80 .x YŃ"Eʩ4yG7jcmlN ;0;|u8+N']`Ytbiw)YNƒE6*8vrJMЮi~ 7%$t 3N *gx0n F|y ˓R21`&%e')W WUH́`0N3f,ffYnH.7Fj SX$~hiEBˌ 1zB6 I鏲]%$LWVdrZmyQ(4*Rv"M61nB”S6f&(m#%)_ۘq]H|6┒iR>-2)6Qw2l$6<4sqw4N=̘^ iw)D*WC\ (,TqJqr&!!!q=N^HHA0XSBmT\jPdjl~E7&m\.Nq;W;2ޑfC_BFWZN Gbj3z-27̸3^*74ƳA!2τe\ē*L|>WC +*$A*o0C0!7¸ W+?3d<+' U<>A0l\MkdЈO!7=q3?Fjiw[_wq8UT//j)ςI ɶ>s9LJ'I\-?x$R,nx,޼y͛7o޼GRE_ Wq3^_W<_k fPAY)A Kq5LHDOAA<)Apwv_ɠ E\YT>V7쮚hw f L1zjQSR;/??:]<|Σv߰Ⱥ8}};/Xѩ6\4˳~K/r Ei]v*`߉i|`;>`SmlSii7*iޏoJbƳana)A1PŒ_7`HfR0QvGL ƐA{AfYfڤC0i#`|S#f$A3!3X’jОLM0YKNʓ)R F3H9uaGx2J'*妽ˠZdcI5Ѳ=RTfr&ŴS LQ;k)I'ݸZHFb†7Nff4Hx2M7Cj3 ͌S_̴,wGN{3-3QNL5ӤAh/M34ʹf]ErM7N)R$S qJܔbn]3Nr3T(UBd+R|۴fGw-0iL2ÌfS͸&K0 ifސ&#t`0%O*gd]0^)(qq!>30 H jׂU3$^-D8!>MWq7;`0C|Rxq q2ky;z|h7!hM\x Wi?ט_O`ya?]F2gayKe~,OVu[`D02%` "CeYH2~NSuZ"zXy͛7o޼y.W?E([,/J|zQ,E"nJsbaq=\gU#6:OxGX8]FG|/8`[l!H%X`>g  i-~bwNO>pcwN4ǣ^Yqi-w7iXSSݝX<^2f]8B6,9P:;Z,gi~A*J*t?!óZ,юdC,nvmSAER;MvDD;b׆+$$KEftƳXN k%>I.d$!q ; b!qZK;tȒ,Eg'qwYivD壵I\Xf⮣Y;n],zZ fXnZX80±d=x-d̰Z ԡs:u3v¸*c(͓dy,':d,OԡCKw=vZ p0;G+ ۆr`aZ$ԋ^,,2$^i%Vl`-ZkfXT =8̢㔥7:Nkcmleۜ]7=|עZ0X4nP7ez-^|Tw- "^MC4iE3qr3d{/<OoտnG B͸w R]a|4, =iO!>*G|쇯?#7n"^ԛ7o޼y͛7ś7A!E|YPߢ_3XI⵸^ė-,>Wqq7q`Y"qWEԣxJI\PH1(P,6`ܔ٭lf y;&OZ)nbDҡC.#1ON9ty,^9v~y>p<{=?:g+1itlp#pamNWb3^YZdsa-w3Z>vLY,Тthi}&> ߯NW*MBlJqrWuJd]tvMQURZde!q,M%^iIgˢ:$Jwf4q4#=,w Yb6 ZKf ڈvR7K6> ~"Ja 5N=(˩Cj_" 5d0Hms!E(mu꣡3d3 }by)GE,fxx?c߱.tIɳv0{e0;kH:thtAǩY^Yqq3Xw `.!6fw+$$d0 YNoqZ8l䁵X+48b8a V iZfks6V¶aON:~jra~OCq;\\xz"a 1rjuUze:U:ՂĩYqJ dѢNAe|R?LnT$^/oj+p*7iQnPZ*>ӢM}ķ S㴊zHQ ߦ"fAxx|I}gE k|-l?@g!,71¸jq qgK )ПO<<;'y|kXQ87QP(l>7o޼y͛7o~7+'x%E|"NRUHgEM|.ELB 2XqijA妴n5Ex֎H<;zXzG2"O,a#ujkE׆!Ku5>` G0S)sRWn-fܭZ uJXbhIAkLK崐Eݬ,d!$~Տfll k#ahb-fȰO;n,rђyZLVY9pxXȡ~W!3<=2CzL)6́Q^m*A7jH܌SP0z&n2$nx%J7EK\թ4u)!Z)ڸS7+UȰ4^qJaafH|ʶу,A]NqgM+m"Sȶ</ u8>WAԩ㦈"֟טdl8G_#͗l8>a+.q7o޼y͛7o|7$"nǥ7DBk8Mq7e`CgIԳ(IM7A'c,;B1A ]hհ"ZlX$(#wnk#"qxrX~.uןҡ!aIX.9~"X' {攍w<nsyxxqǏn᝻5;s8];YƆ9ژl,Od݆`"iYi-ԃN3e9;k9u]9\谾f-Z9:eуt%Zf4>*wZZ+Y$A.ĩOjQ%Ƴd )'&B7Erq7n:^ x.E*S2$`F $z _EСn8eEB.z,SdDcgۘ,gVJJ)ۅ<юB2t) xGwXfX^̒bs5r.t;; ꮃcwtg⪤`pAɴֆauc„,&Yd'Dfac]:f<φc2h0H!qJȆ"l!!Pd:%zJJNd6)k9uh"AeW6Zwkc8*kcz`-'\.5KxbAC.o::]f؟vH98uV`^:L|8(ZRR) BѡKh݄5oҢGAYN$4ZLq$NbB+ZEZ+-Q}uJSG= &) uSx_e?"UZELQ7A ,8 S %AQ$sqT_BY'CU<f[_ou޿WE"^)R3e5#*6W8S?z@BuM7AWo޼y͛7o|7U?Ea !~EE&*MP$݁KiPw3fyQVP,SV0tφV uZ2L*̡%B\zǁZfXfxӌӱwN7aX/vW:N-Z!MJY,7- BҺkIPAWAn67}ԎOjsje,!n0-],qbHxhqAp C!LGdRċ) DFC:, }dmdC5# m0xkAEF牎fGՎt YY-lnE"lAw.Y48emz<2=6`H7S HH0X4;ӌg$`!KeƋsk"]gZ E)C6+ .7uFq;,6 ǓSkoRdeВ$e-ʌA`Y˱0ÔAfyŽ]{lq8m<2a;3 s:fhu o|ɟRWuAPoq5ZIham*LIZi\7 R7OU7Yf)⦥:%į.Ej$ԳRA n”E!>Znl8bEIhА2(nHGA}ũ?gr}WwSc\-quiw~U's8wwU޼y͛7o޼y7߯^  "^q6XgE|I(\1|"HhRGqUg b%B\ũQij ^ 8 .B%l5:PrʁEnJ]I0X HD':&!A8p!qsAii2Ss=pq7n?6i8Ώx?v=";O?1nύYNwAf贆`ݘEtaX|Z8eq`bʁݱca)v,tPZ/B S&t܌{%rx-HƋ!va:t$٬E 6ɦ9ERU7/B/,q5ԩH63M,uUW%#B`ƩÁmAA,iJ!dmA.X1]S YNBGH0~*a]Ve%6r8ͮȺdqAkp81n.X㔰„ Y3,CjYw uSWع}-`tZd!͐E9-7 YO°ƋJKz`XZ_6(APi<\-ƺEgOsuz<,\)]tqJ} lNO5:t|پm./03ڌ;D¾8b UIiه 3: -||=ERW eUi+|RRdqW?ꪮ4EKBK╔zQ^i4>7n2*ZWA}WiW")n BEFvH .ku3>WqRFE^)+o}W._X|&^q*b'?GZf';><<;3?֛7o޼y͛7o>wO`+?"AlECċ:GqS "nq7(ꪴYX/JDXb[nZ7AD< > nxmQ, BKF-i X)I6^t~i64,2N)>=0O= fwrqp;NY;O8vOp \|69%GϜq<2;8v?xe78Zv61̰?>9pw NZNc<ZXsfJ:NYtGA)HlN3Z7 N-Y!AZ͋,7%F}jȢvIUENX˷I](,:%`a|d(=v%](IC6z(2HI0 pllKt$x1X,Վa]rbtv A] Ƌ]XWCYd 8u!Z>8:E{eqE`m.Wl(Y2]EBKgR,Y׊rx2^ =A, SqhwG+0̐ȺeXY8ZRO:dV ۅ9w`y֒`ZfH ZN37NNB ͓EЃw,rYNVXHi|ЎLY98fy04c~鏼;Ǿ˅_]l|y>cۼ㰪GӄF8dEg?҃ydx֣N"?Co>SSEIQ#GA=AK"$N"X]U݄f-ORjNSx2SRV$>IQMi)Zo5jA֓Z xqHiPƛ?{NACԳZW!ԧ quHhCCWCx6WU"^$nq34>M$!B0A\œo|O2?{&Gٔx/>g_ym9.1~Xq$;կO$$pxݻw޽{/ݯY $*ETzR/byRvZPijb̰&'A}_lׂ"fX'cQO!=w tyRH1XNc|7s ͨ_ ksG dqt.ivpw{$Ӹ,5;wy]Xspit9vp,vw67s0s0WfXN=a-8ky`xG7yѡZUb-ݩi) C\}Ɓ1AZ/E o:b& Tqq3M "_VI^KH|,u5XX>HhNj C.mDHhhGTU7a\ i9D’l:d k9`Jl^Y$XZd7+saCAhGF͋,ےc0C.(-=СCwZ:(-JKwZf!AUFAʊB`̸IGj$1n 3EVéuj}-rjiI|C"kEK`]m:#=Z[/9}=[K[C< qp5sxeZcr_|Łmcdmc׎W͛] pؼvtG967CQV͊o>>A0ÔeJoև/B2I)SSE|eW IH R_KVL$>VeT1۲RuʸS1a2qSM} o ܌_0BF! )BIJB\!h}l|-mW!d|-^q qx/:,.?Gާ"xW8-2Œ_aso~~ N+ok!wͻw޽{ݻw\5O7,dEe+eE[׊)"MD=^ 6/ MA7qH,MO%:|g fpZT|P/8u#EM *BaƋզd69H< ap`Nۅ\gӱ6|gN{s/90;v0s0ǣo5v;8PWWNe9{esJ!uCǛXd9%8;ZN-EBCB7 izqbv6bEiOj<$kcnON24th1 XZH$Xz/n:UV/JfcJk<"MdMrG:d1JvuH|9eŁU,Y;rrYtC0%dsbSdXC ]1 Ä,͈`aȅq`0N!An1]Z0gĩ@* Sg-B,,v\aܤptcsі SSJmN3dhjX㠇!"ŋ8$ ˳, -luq8&ok_gzRdl0CېpCdz,?_{@u8-n66;.\ؾe$5pr`(Sٔ:?co~okGBjHQfh0U{o5?P>(T=IP$NSez "^R$NTE{ٽMM*l⵸_DS7uW/~q*M8|%c܄.N xK<*n#."t!CȆҪqSn*kXX* 3tbcBkaI'HSBՒ˅ tvBtta-fgڼcYͮ:dYkK-vO7 F{4K6df8:d!.:;2n`>C eJ:̮sqj1sЃ,9ij"A R9'bmdd69 RfhéhY -7E8 p!=aƳm"%l$lHw3~/sD1~X͓çgŻw޽{ݻw_FE:RZԓ" D2X K7U͔PXA],,$c1͡9h0`a<fay2ƲDHH0,S Alqle|qwN;.ђEy w$t,1/fwZŅ,fݳ#?sAxXo6ѷ kc0t;]A>W^#l-nZ V.-/,!ͩMB6<6.:lc',t*-A]թZJ Yt7{O:;ks:p3ު#3dxpЖi0EYrÿ?VoJ1eJV[i-fRߩSZ$v!qzJnITYck5SZ܄ fPoRh"nV--:~s/>Gܔ,7m%EP^zm,{Ϝ:kq5^)Rm$3$&A|dT JxR7EP`8-ٝjd !/׆`Dp߱?.? o5[x%l}sJu%E6E}:{ݻw޽{?w_C/3X^ f߭"nc"_'KBf) ;.-Jq7 $&YrA78uw$VD2X)(-YcܹY^;8>c;RnW܆_9w޽{ݻwB.Z,kR>^uԋ"[|lR,QT|Oa[_P+c(BPWu/\HRBP,`F,zxQO\`ńڤ:,$ev6J 1x4>m6lEwH#r-(;FhQ7n.nvuO᫟ϸ_NsYi9X`xiZt8vr:va!myVڜ;4Sqs5>S6u1G[0,,Ec{Eǩ7y]uMN [F(B `7@BDL@ "H#bӎ>UYwz:uo;.{ ujYl Rhb+7{i1|^iiE;7vk!;:"գMQ(k+=ѡcu9n,2N`Z+#'Nfs2n.Ȣt\qZAv7w,O!{{sdx巔6Z9!CJC,Z_(!RWED[lN.,>S"]ZuǶa JB C6Z8uJRZ֓gͣvHc%h΅M," _( Ǖ utdYd# ېCWttv,24'Y㴹Y,,:paP vhM)RcQ{r3`0,#-Wre!СZ2dAd9EP Ea<[YnR$ ;S'<z 4̐))N6b,Y\B7licws8e1eh3/yG~SAw9<9±Ӻq~u7پM\Hգ}mJC}<~dY}CAKaұ`_l;۷>bI~s?G~+hZO!! &,{$ 頞++ba|ZiZA<_Qh(UyuW7zAē彶(A8;?k:'PQx%ėZ `#ВҐL)T-D<V)`bY{ AB┲"!0†W?-8랭W?"kyp>N3$$cbs}__{K9' m>'n7w`kŋ/^xŋ߉ſ:~zxT-/47A`#~ OM|(A8M<2)M|nC!ԇq3XtPATE=T+*ꦮc gluC{PtGiQGpjiՓ9؆s}3o|hw;e9u`a-FЎ+f|`"pyW~W_em>6ڸ6^oxzW;^-b-\qN \;ر3ZNYdZ 'EF^Wd.lw,"),HP k,"MȐb|nIzEdaa$>0.Ē,ɒ,ɒdI.da8%Hꔐ`!dIB"Bn"Ec)ZT[2snt,b&tpMօ\)Z+Y+Ȓu!,CdrOv5d#F.$BàXñs-yKgjw:>r Nw3CKҢtt:(S3)AQZCҢN3ЃSKAq=h}`Ófa:nEHKdP҃AB8r4t uqz~_?2?ũCKJ˾\9ɕyK\w:t0 `߸ٿ|ߗU=bc{}޿E޳\GrmS:98v檃4CKKw\Ńi~//]̠A=Ih,e?s%~7DqZn$"keǂ_,~FݔRh}k;JXk _hVAAf9}뾌uG:a31DJ:x8%ă AX ba8Me#W?Gŗc\,7aA<AP7$! n"f}[ϱ(A|#A|l^fHxŋ/^x+~se, E- $>ô>7A44, GˇFER_cz '3Lգb09P ;aӡTN`P,7-`p`njt`]1--=^2=聡~L2EQZ֐;ݙAiiهٝZfwCz\ }uROVp ҝ1(-q3 Cf9-%N;8hֿ/79-^rӰ =̮'?sO~'WWOOOu7ou\gesz-oް_w^arAwqu?\׾?Nwd0t0(:23rȷ~sZOL9OR!l+Li} !qZe<| )ƃxRL=:%~[R7׾깎K渒 1ƣ0,,,O-ۏ|s{`ĩN I|I1 ģ SJ$N 3LcVăEBcc<)K' 㽅xYBJ0Vo A4N۷YZfVem KH<ټx?ŋ/^xŋ?l.,UP*wKDf wb<ދ X{A^|0&n&Z &IE< 6A-BMwԩյ$M2""$K0am!oej#c =ȶp\%qsЃƆnyҡ޹x2qbm^`v{O6\QHarqHYhY)!l{DDg'JҥܡAQ@x+ JK6թV0~,TJօ\wx,2,dæsչ2;袻dG+GA-3CǩŐHê )Ju']'.f:pb718AZGq*R:4$NēEK iI3YPN,:n#˸Pڍƣdxl:' E %\9"PLY(F ]dy]"]"sB67IB0+yu^ũ0EYds~eC=Xش;btOlK;nY$z ˇagb#a,`EJ.ăMN YZq0XNI5WJ:hBǩd7-)[HR)-ҡA9BA1tB$e9к <(:4$z`cCbT$[lwtX)SO/>gɟcdyrA1؃M~?{W].qh̢X. mhj;vz0e깮lZZZ;3ģ$ش;n?rkX_voQ7V[б}[ׯ[7l?QsJPcEBѼ}ق /)EhwVu:xPZAXH^W=OW1;!gz]ٯ:~xկ܌'&n}E.z=W{ۏ}ݏ|Ӻ $MIb:mqyقA&R4(A!H0"qʠuHQw [EA N ;W·}?? R̈́̓h"ͯw%O^B#l;Pp}QMxŋ/^xP,V3E)E0X 7`P5x4XCPT "M 3l\q^t2TQD;6˃bxpM抍,hI=`;СS&]]pOĝCmV  8-e\Un;&MӸCKEaZܚuDģˌٚY,a4SF!Cr,S-Um̐0p04ii3렇Yu3C7if8M3 !4!ai3QEPZ0- 0ts)zHB<5N4kC7h 3LjfFi:%lLiL30)PB;Em`z8le-' џ⇿^g~o:B kɾ.Fjz3Nj-ɁIݿ]+?F73r3}[o~+?~ƌ'i^cٟsSY׭]nn_{*[rz=Oe06 0Cx4ӋF) Afd'7!axQ}+OjVv //˶^4kާޚoO}_xK^vs?կc7o|S.|zD}DzjZ;swtBʩ`Ʃh3A[L1^+AH#L} f\Ńgt  +WM'l _xX-،n~ &lFؐHbe<(k^7rQıÃE!qOm-jHHHH<{ٳgϞ={3O#b mx\U\Ň5ʨjlćiWnj܋7E6%U0 T#B `<͊ -JwȸUʈ( ,i8ĘUlKlfF zŶ1m[S/6_ؚS 8 v ff)4vru0I1-R\ʣ*RL6G /\- wbnIQ͌l߰`۩>zyTF/uqV> l;zc-㖵ncGTŽ"tTyni4)43$Ԇ0ģFBB/4 ͸7womXʹG)FUy0Ӓ aPe,WCRF 1"ŃEՎWCL2$cfi2N!%SbiFt6Hv3A֐S;vZm"EmhlEbuc8n$c`V; ;R&øb5 UdJ fEh SSЋi43N)47,9(,j43MfHzyL{4C"a8,V0!%Bøj#>Z7B/Yh0fa 6^<[*NR<0M74"aK;,66Yjk_{߯;_`_GaOKy%sGFYKRdme;L3>WW=h?Ϳe cHZȠ[T1ø7N3:Qi?󣎯Omտ>PێqO`/_o,0:ĖЋa<Ld̸7:̈́P>4aTL{MB\ S]͐0F fh$7jy}}Rs, aW b5fHQ_z}?w_xKiv,7ѶbOۣ WٳgϞ={0go|`| OVx*NA GF ` ׂAUmXc a hS<10}@{Јa2,ݭ,3mfYs~ḙ[3ƭ[03skf*,,,WFBӴ7C73Wfan;Ms{pJyԋn[msFUdIQ;f-uK5)jw<^ã_xnޥ6V}{}լf5󒵳v9v-,f1iǎ)H"Eml;)RQBBmHy"A 4P٨Fmvvj#q4դH9ђ݃)$)R2$E")QLPI`HS$!JRb+  43zE/i3ac0f-20 }b=JIv/l;i 6) E^PJ]2E*P.)I9DRHIm$d'aPD`+4AkRRSۅ*ы5Xhz`:HXjeY8mEb fn0C}sutqpG`,z1mzыnjff n\eV2YƸ74C >f9R$h<ѡ6 )^ayc1mwS-ʏ9p 3LstwWܽg>_/0an4iME EZAgYN$AH! 1Yƽ(G-rsc?m}{O!=ć'Lx"54B43NqBTkh SakfhldCqٯʾ4ַc%L$$n Hyb{gԾ!ĽZq y#B cƽ ˳gϞ={ٳg߯ݳ?G c$ULߧhOq5(cA|y[\ I!NS3aB8{؊4SX(fLp qDw+D<ĽÈ0"AcrW4M\esЮ2L#(Wvo+ոf=(px$NA|Hxx[#'ģWA©v;l:v./{ ty>RN AB,rJ1Tjwxņլb˽zaG{KzWCm42RH#zڃ̴v fn[*8z޴ђ  ى{iA3KgȆ%3l>,ifh32c1H!cf$ޘn=)0øwjC-l%n BJjgH]w{;m2픴qC$E q F$E/i8Pƶ1-UfT9!quwlǢ0HHPA5Sd2cYNxbzƣW!43N)44vUE2$FKFHzLP^fi+a0jfai2lEBB; B9MmUWG7,o:^/-~iS A4 `f;Gr~IRx3jL3``$hY ո_v4!0a0ctS:4g13xj =TSr/WAo}ʈA0 ۋ/kJϕo q*CQbV r4|ڃ4LHH(o$N3ՆU>*:)Q/ol?IjǷbCB/&Ľ&`b OXim phmtxƳgϞ={ٳg4Р|*D 'S&kB}xQBŒ *o Sk!=N 4Ql=f<`\:patx001"eDaC\yPxmF9lv qg.%Yfk;s+),QfĽAH`1qСi6H )V 嵃m#;[Rc6}vSG/{eʣօYdܾb+ݩ6.qK/.78mmˣmwvj:RԆnRRT*رiX^xF㪝fФIBBl2L2 %ӔLʽvlQ4&Ďf\MI5$LN S6B5 `FˆE”ӄi3 ʤ1L¸7)#,adgfjDƈx03nHy1Ve^Ɓ S3ܙ>Y$e ۆQB M/,}#;.6`IB"^2mu8ASh4jSbiPڽ5fT35A^3^f&C`0`CԮj0MIUd !MưmRń fBj9uf0̐b4ЍƁaqU4i("Aa BÄiF`-RNn{K$|k?)omn2Ll8q/jlp7,z|/eO$)YCi =N3X$`l_/_a-+3L `8 KA&tS7 ) 3i{yw aE _W7jhoDaJ[LQA*̠)e\i:5o+i 4=!l CBN{Hhn~Gwwo}R[߱}]us!! !SX^S"b{>٥q:;D|`7ՆpyuLϞ={ٳgϞ=xgx ZQ(A((O[ڽj|XăxvE6F6 FFlNF F\5bz4B m(W N ^-D68w\ 3 Ei k/(IyZ0LY)W)aS(fH4kwjPKja5X]h w|oх _iPS/vf8mv {NrEx奷lpvWG)ʇƝGA ]]V Q4bG[0aB64[oya+.)WEJL)ڽک6& rH0F̴'dV)9{f*L113L& 4 jBVhD asJ-`X7lݒV/f-qZ1wASL="ĽT;ŽBqr2h ;8].v#s'^%3MQ1N1LL jƽq5No AŒI˄i]ZыSZm*P;H!C32hW!q505$B Eǐ&4qzu˾ ZL o֯;~Po?Ӭ;^T8*ЮfͰfXn6W}y9.;3́fn&zFy0L3CiA1zăxq)̠ &$ KZ=^:uà^=3t{6WcH;6 L it{4XwB~wYn31XH!.;j c2ccڙUrwٞayL(MG3W+A)U41UyR,zoyfֲyY2|IaۘBZ*ηS}'ݜNE[?%/^xŋ/~#'/+(*Kvʓ\P( W\ġMQ'.(ŸAx0Fi77Ac AEI<(%vA]AE5 B(WMmJUyK*lnE3.x02e:|TSAyn;yX!A;Tggz(b;qzC߹ܜ=zM/o>=Ṵήؿ`ņ=ۉm_p~ƫ^}j{ N~;0ˡ7l Codw&,6dbۙݡˣGUvHTb50$TRTZIGUڡ.E M[5d<>{쪚n ɐfPUj7cKP;ЂBPA>\DY"5 "J9$jcO4Q%dYKmTYl-l'Q\MBFp{df?jԐ'͸ڨƽCmMF4[S'TSSX4I ˣ5Dd`Gf0C5= HQE5I$CI33jA**a©ʡPC0„,&"j©aP8T94&Bb|M1M bP UPa6R$dP) 5&\m㰵glHCjz'g .~_ a$T_aMB0QB0C?w|+? W?cud 3$$n1 )!v:qWJ6?cg%?ӟnG&DįovU ʯiq_[qj|Ma6۫S?s߅?wl"(WfP !ʃv~g[Wӏm~lA0]OBƃvU+f\B!fWrnv3<*ThPPmط˲gΟ~Vf`K6\1?oA![8y) R"oM7ؗoxŋ/^x7v露)OB<)p^P=)_E6W ו+-jCI9LbE!]5BP;NdPnF}By2h4AyB0Ǝ`Эln͸YHS^Gpsq8cvfq“7d8aC77w+N_s?{wO<ُɏx[V3pa{gvvXf;w̢7{ΣYdqvF7d<2dX ٙw=i3 Ugf!!=d"! Y$$ L˃d'˃2e,C Mv`̎! PѦ3j{Vɢ##$$;ɐ%sAQqV&JQMNRBRPVۉިR}V}G5lZ_RZYA,,1՜6Hޒ! ړ(wNv2T<,4NT3hl'UoYd\U>†\e\; *&茬 "º`Q13U kH$C$AvC* 1Aj(q؊jzC0U7Cơ=B"Yb1ÌGvSńWE7*)ẗ́nۉXXtXC'7uböU53#aGP\Q%?3ͯc>\}woTHHbv88 rxTjB;4fh̐0˃F*dH]d_%!o/~yN~'>Csw>\Hc4ka!$ 3Rx-$n&A 75qd\./䋷ʾ;\v=;޼Gwkꕺ;SEPTM)f8  CB*h rFCPh'E*2BQCܴ*RB*UA!X?\._p=r^ߡ(O qYUZB[f|I9The{gޛ7wT)36ۛNg6,a"K*2KB0_5&"qL &,$Aqx0'7CVf.4REUS8kq*Uʡ6,'U0Ta*F{amb-], *w=Cؽ89ղ\a= Վ׭HyMGkk ˯efo1ŋ/^xŋON^hA[(ߙ N!(7ABq5h4[W>xRsI!ʈBy0hW=L7 T7UMS"(MՒRlô1ZW_1S42 X%q% AcrtByPj'-mYhW ;99PEgPŠ*fGp5M r#zssq'fЛ'g l"aGWtx8m'>:kί=O^ zanf=vr_jvzsEoY=b73Qw¡7ɰߓ6zN.ԎPC !4K!"HӘET 3Y&:Q'1j.T` 8TS⦉>씫3F6 jTmlNdT."%&C)fkl+T7)f<*W6WQU EQE:\3qUeQb FC3 vPI+WB\D Ь<CaZ0 E PDYdEb\%2B!E ; U&THlWAQ'(C\MP0CoTS *]>Qf(MaLàB-MTHGPqP(7BM3ü>9"[d؇ ApϾ;A};`o'N~9*j A,$LE,UHy i!aa B␰†0; UԌOЮ 妚 UIHf $إB;  0Z!n2 fbBnfHܔ;|~ģq5TѮrURUٚ!n{aUr"2P妊 B\3UàCoTMy7&ABa噸*U$*L ѯN3S妼 qv3nڃxP%$q A*NglAPE*PMꢚbSD(ԢR$(%hfB ̸I|PErMy02+*̐Pʡq5% $APrX7U7j"MXlUUZц*}T_|AW֠**U'7'n MR j-l^xŋ/^w7&n w,(*ʠ1'A{'\Q!Myo3F& ڃB'0˃R0ۓA)1BH(T!(kN4jB,%TyRKHQkmQB5lvgaWB1 q.TȠ,Co=TPtSxAv馚a;1k;iޘЛ~Oo8ə9pf͡θ`s›;f#ǜxxx5ۅ7=cv=p~is9f0;glx3ޘŻE9dy87NwF=`f;9PEo١7}bw՜0j0; M762-qSQZ!#&ceyPi7M;$ *O26U$XƆ `Q3* Ed2 ])fUPҹ TD!M"2hNU;`ZdЭjssVdXfȢvUUM,US0M{o6ţq5,Л Gh7 ?{Ǜ,|[59Yg6aO; _\޲ckuO`q*lfpwrפ!CfMoT;Fm!pfT A)8ldyTi&C!ɣWu{ 76rɨdz5f&xWFݕ&VtecpPk Ǣ]oڻu^5N n:ÔnRСExRRlHEdaM_" 2w~`t4ڬɁîSgXn.`\Cx8ԥwa%)tӁŠ0|, 掃Y8{Xu*^fڡeJ1SYe6ƻҡ㔅~4]J|WxDVZCECJJ>$,˻,lzX04-`eujHf2N/_ͷ; kԡ*`s|sa6Ӽr{>Nl帻evjQZnUF¾S⣰B%,MQtS)-E{9Ne1e-eURd7VhC\JD=OP CBAP)qJAB.{#YtxVA0NuZuKCB=! ˥GCŔ8%KCSaeE<,z(ZR]R4(Pl+C05ViPOq)I< q-C,O]dMlMhIɢ- ]\j!qx3, -RzX)AԈbnae0Eur;<q*&H$q)r w"Ay7{#ҍ&{{J w3//m ޅ[Z]:%H]ӧO>}U'](!GƟ,e-aq)게,S<į˛r)&NCP+DHY%PnuK+nތeMYƁX+lΊ72%K "^,ͬWr/o1ܾBJ}W7 AB18СWuȢCfXl~/{uZq_Y0N/8_W r+~^rs|e{(}ͻ2ܿOqYw>X ^ 2ȱ_!,XYtܑE`/V:44P4Cĩ~ 7ﺖ ]MF% ,;EΝ8MRoPZ:îK7S[I$Q"#4Cf!d!!c -,,D;b3XX:8n};)^pM_1&[=tya 6a)7X2 -Y`{FeJC;ESKfdk&e)ZZSAQ--ŒwujZo꯴NJ8dq,0`-ofbl%qJQ>b6:bb6YxŁ S7re-R,a63ؤ!auf\fv:s!qꝆf\fowfqPd|tA(&Ep!fozm3pZ~caŔS`J Su Nn(Z+H0e!̔A".&Yt\F5.q ꔠP$:~.ĥN&!u)SHCJҠSO`)A 7R:%.u,8%Nf\B$$RqKepS4z`!(0C0N>Ɵ[h,r!$!˛xx 2.uJ8" {2EzZJP`,4к, H, R`Q<q`{^_IHC$~]-$r -;n~# [w&wݑ^ R-(߁>}ӧO>kMoW wr  A0LX G.~_ϖ/ΘJ#xQ..KX`1aepxjUEQUVxXdy0Uȸ" o&_\icY2i8+ ž;ey:/Nklx/N`ƻ;ż88ݾП??W~~N]^tq:NNji̝{Wlye,uc<|aN;_u^qr/XN )?ũ+/WlnȢuJY6#%E6Jn::d|wӌ72f`萅a|&UɁF&CD,U nb.0HWCUgn^9nRlݯ/2}!z:,fPlO녎>:_rNǫMS`zY,pv9С:-;),ܰhl5wY0 Cѡ5A7ZZl:w`zW?rj.- ҠOStHhYJ|WhQAA1u:-\)Y.n,MRniСqY(+Y;N`n:8蝖}g%B.=iYJAu){0 Z( ˻Њ7%f-ֻ qj}:uӡuEAB]:N9ZeƩ++tzˢHiWƯhT!F8u Z!$ %q BԢ.E\픠qJ=Hi|\C|P.N A\,RO S"jQTqS}ӧO/U:X~Pğ6sAbaj&>,EjyB2 E0Xt"fHP1ja8aa< C%k.%1a f-ⲘVx,WU +ñ0*H08hG:`c}`Wfxn;:d.!!7X> 0. Y&ll?XYt~Yجf6W2W8ufFr pZq㸱o|=ܿqË|~ez:^q}cٯ _`:}v7):EoR,c#by,c\w\Y,ĥXow,h”fȢNcpDXp'dĥcY°)u,olk4c.E0yf-x3r";E^H͛f|`ȲmX?{s8XdӒ8%2gqcN|qj1d]}{e=i-l|ԯ nxOO/?_r{qگ~pp`rد>8iݘ;`6uloyZ_د9XO1⧃nrS}0.E SRBQZ^Ə8ec{ꫮ˩]fncIh\,d];e}ӿ3{?5X-?Pn0~5Xxz5*JVkB"fX 2x  a\VQVX0.fn8z|,o8,w|Aݥ/C^hG+7/^ECeWrc))qa9|a\?:+YA_YW,/,|q}aX'?<}}wZ7On>Xusu8~qc8n7W 9͝/ű\nNp`cia+ŠN+thy-uEzÛ,ĩ"^,2tʋΫ7֋ƖT= )YXN:NS*H- -SSZC1)!Y2.A$ %ffZru`0"?y-_S1غ:u1clrWCe8toTvȰM::;:ڡptSMut-kKl:(Mǩو_%Ah}8MII!Nq:eMO-JブaEIY 4XElA< Sb)q;=Rr$aivi<]Y)sNtc232uJ0 R6nOz RKnO3N3LQݏŒS$}Ac80f a0E< 3N- S2by)a CPD:ZE]VhK\ZZA<!A0HihQ?{pdךu=>^R\>9ԭ0 6^īa-ZqZ* z(R%jLT}ӒxJP㝠. q]okIhI(uq0Yd7SRAZe,f:e"ay;"ěbqJDVP&$N $~;kyWq$^,bƛ`ye\7bqZaoeі"ĥ%x7ۥeMiI$^̯svx?ݛ8%7Oٳ7!A܃r`hl, Ç>|Ç[/ğk\wea\q)Y,?biEx'Iz? )e< XrͨM\С7REҨ7Äԥ.DHPoa-DfŔEg$e1w_X1g|*~f}ɋ}Jn"ԅ tw;ONY,̝;Ǔpl'pZxrn7,;1Ǎ}xg|3O.ϿWl<;_sw;=}fNliݸa'f;~鳟7>O|iX7֝9x/vM6 3pqǝ>EJ” :5lf""N<)%vpk,E+zzb'1~1WOoii ~'<w֋Rrv9<,?aa->|Çn>Q_^_k.)c¸bYXqd.E\82Vԋ.M]0Xba!̰K 8upby EtXRVAH71K{XU0V==}'nOgSIٶ/~;n&ϴ˧E6-i-fa?ӌ>+3k̎q#OOxfqc=_z[_3n__c9.X_7ϸn1|uwcXqjߝgu _Nkgnz:x|ÇO} e[Ƌ,r9l~mP"ԛԏq8 cLazgV0.``s2A !A= Ғ 4aĩB]U,́-Νu3Vܱ[pFl|!)6ݾ+ny]b1}p! ˁM`ܼj AUw O:<xu:<;eq}fn3+_x._x;_/ /Oq9}rɍ?`6 _ZX+֓Ӿ{s537֓Wͫ3WupB7WNn,^a!th)w", Т :.CՋIًޞCqb9ƋT,Mi1K֫bG0BZXZbHQ r!hur{°]*"/Xg:N/2w$.,,w`z7ЈfhQR1{ur!iYECG|3CRAofW-J㷍KxSz( ].A,AaAzz2# ey(4a:0X"ZF vvuσM2;3N}FjY޻?0w22 ZZ:C`JKf{oaPMʌS`,feb::B2(,,t2qbi-rGRfXKi\=<.%'ŌZNSꔸ,z7aqwA?u7-a1!.-!ޫW-((Dԥ[: E&ub!Uǩx"L83!.e)mezqIB}W7Eh+B|SĩaDdĥv)֋zߍqIQ%0 x+o+EAbpAjEl&4W)C߽*˦Nky~~y?i7w'|Çq O+_SN,O,owu8!`a`wkxŋxo!%OjQbxS0eESPCB"~6YKP,Vr`amɍ *wCicԯuCP#EM>~a9 ,o6ޝr|^t(N68;fXrqOܿ3N_" Oupv=|+'_y;wO38n|ξwlgwZǍ䯉|Ç]SPg&?2X. `a 8oX8͝u8A08KM0 %(Z8-8P7)+Rq)6CQzm,Kox8pP,DА`zfzfYOOË(S,GUQlɲ[i>!Y*,X=',Rr8E|b}""ؘaYq:\ u8> +p¾;7f+ n܇W_~xO^=5_' 7z#/Nswz~f8_9nO^=.1 OO^͍YypvfZ,n:^Ը,Z1.E[W_f;eBYK;}-JVMD5wܙFds&( o"*YdCcq CIxpa&q!Ƣhⴆ jwZfhQfKBQ؂vPR:4С Ŕ` UCK78H4 .n ftiLk tP͒f:LQ2ԢNPKQ4$. E]",l!d!k1X,x85Zw,Y̰0Wr08\%aZt3XxoײÄ>&4 ~qzgW3Z}eJ*{ҒҢN ii)A@hQJkZC:aa0_Xh)BBKB !%.ZP:CP/Z$RC7!()Ae#Xu*hHhIf: ,/4"8\J]A ^%x/ZZ)JL:uj]Z.%aySqiExxC]彺S?m\ɐ.+. G t֠('3oNjEP,CFHh}7qY8fÛfp /ċ͌S=D6N3.#AF)k0NT%*ƫMs"Sſᅰ,lī".ݞ<{qÝxSNv9qԟvwe',?Ç>|/?"5X~2x/3X,xo eEp,k-E4(2X^ , PE0=,ؒe:bd/Dq Zf -ɍxXCRv8`ġF5;>eRU'27sg=N\ =4/wؾOs0_X8nxm$xZ͐n;c̵T|㮖xއ!Rp 8%ѡupirONWn]pb.q;Nq8?/ܾiݜ^~yn~g8^;^8^w'-X./NwlA~bN)`~ٴ$tccPԩŸ!>ͻ8Mۻ,iyxoX:EBFdڃii))Uoƛq BJd!XbƩXƯ5x -e9FqcSx`1673~' YtIo-yP fuy0í!a2FJ֩c2~c1fB2>miQT)AEqJZ!>ćx: 2tK0! CZ$(Tć!qK k<,f0>ujVHIHHP ܼ+aBXC֍`C$@UZZwbyZt4<'-J(-ih0X Y̠KZ8MHq`|h)ۻnCUee!-S$ TzfaXaԥF).:ť()Eć㠛.SqY 4K`а„.'sP!)-xKEz ƻK}IG]Z?,e|ςRoS鸴> tTaQ!YQ:%)CH\BY!=8|z<%h0Y>ޤTPxdp AP4X4>8!eƛS C0m?l&q}a^UZr _=t+q_-(>ÿe˗/_|˗/PC +`,,`, `\o i!{` W cp0.k+KUĥdŁr ba(7Q)&Y(Y(jca7c-6їM+Y4^6=F򂭽qo&t{`/~ BqYq#!llqũ^l󝵙l[gV|exo8 Wܾ_ycqpg+oܾxxiݜyn/Nq;g^|rOt{+~a /?Sd8B  !AP&9w{Oߜ6Q"ۻY(Zh_h7-fᛧE1S:Ńv0[g2DST ,! Y-ud2d tO7 A1N. YoƸ&SSJ7ll dӻSn^݁SK_Ƀ::4, ]xME0ڡu2XEPfXSe9IШ7".8޵$tc9]( `j%de9L )EQꇅ (x( 7,v$[{ac-z >Xe-(T`HdF;ջEeaZi0:ӄ5T,1(. (])C⁛Sf,YYQ)АԥLPDxS,2S\ÐP"TEM;4tHf|R$trʐB2d.%QDS=ijDRRCР&AK=SǻzUB|6wuE0POE)ZiJ=C ZěxX8eB\JCP$ Zr`H| vJ()2N-c0ZZ[ˇ06qJbZfч7kaa GXNӔix fӌx|6!0.g;~lS޴ŝ&w7SJCnxջ:|˗/_|͗ge*[,eMw+. ~,ԇ(s05~`FBr-)"SP%FYA,K5˛x@E#+tXS xqt4w,lz]o!w|,|gaB:īZ^|PdMBeaҡ?9eجag+{;:oެi^9֍qxwwO^wۋ_8^~+o?{xoo;w}xq}aa:܇/++; Si)z6=XC7)-ć0(c ld9XtE;fp&ɢ#tyujH)ڃct֥N+ Fr%Y9| vfx׃ǃ,:zOyAY3rcuHnY:#^Iy8u~cyӎSn.cܱVJ Ya9e/o2Kg8|MnZCʼ!lF>Р:MZ,i ]}0CEߙ!e :eH&7BC<)aP EBK= Z(8ձxz:%~(첐]:XKց&9pQ=X(Bnt3X70N3($쐢%XL颛)ujpK'li8-OCj0+ߋB(iВ:Żn,*$N-Taԥ=dZ, Y<%(]ea<".+5,<-iPXA\A\H"02ލˁxqJ),4uK 4Subya|(3~ˢĩe<EkJiZˇx*ZS"X.!"RhI0XɢK6SvBZ-SD`jqI( 㩈Ӎ` `\v\,o=O계#첐04NVC8Ȗ!z?z:ώ9ȦHiせn._o7|˗/_|7uZha`a, ?2XX/.响80oK-oET^aBa┥,oObol"#* ۡ B )L8J hk`y J +FBBks8z+G4KzS(ɋY.?k^?y&[|-w8㟽}sO'̃ ~_Njw0;WB\`ђm)$N^}( B>iE{ܽ%iYwk9]cSO%TKrSյIi1fJBݴN Z",O5ukCQbrtъEa ͍YN}xSw-xZF 9 YޤcoYԩH wlfSBM(v" znNY:q}xq:^wqp{ipW8~~p֍yp}_8^?wxɻwn߸};?qͻ7o|^/p0x_gܹsg?'g+۝Yt#7l7q)cc8~&.&Ytkth7KU\bCн9wZ bֲ A*x Y$>d1)Ʃu8"A0yCiBZ? Xb`r= CIhFԡ~( ˥ IO`b E: hNK=eƔ5Նn퇒:ĻpS} )ZV\ -H?r[zصOni&ę$Q.dqyorkuy3I, `a-;[7Ai֐q*R⒲, q %q k^#!2Zӌ M~1XcAX`05 . AbK)qS!ACP!R)!ī iBIZ/eJg*NSbazY"BE`<,/ J¬бf!Ƌ,".!B\N3Nl nf#~cvbƩH ]fVSE[wrp7F^o&ޫ[KRԛz(w>S|Ç>|q񇦬0~c`?`˛\꽅a/¸%.`y.3n. S2+Z%^DUDTX*r[,LxQ!uBXA]E21VE0.a-Oj1#x 77l|d1w'q'Ϻ Ǎu`{s1ðjp,&' 3O٬ptiUǩC!DS0'. wf/XXXo_񕹳n+ggs:Og/.r_ɫܿOOܿrcW_qcw3sg6sglu0.f?Ep02fP΁2zVx8%n{ǶqN,'2.%KbHYK]Z]ac Y%-zcn&%+S5ȍ1W`p7^D2:Ȣu xӃ,f Z3.};%҃ZܖSFHE;Cyf6`fjlzZ&kM(z7:tT(EҲ7B|Vf0CQuJ>.!qjYXJǩU"R`y5-V=*!0! EKx(SHiP{!`u-NX*vc;dA`H٥nc1wv4Ԣ-0q3˰\I8J]")J7eL<ĩ㲨Ce-{a1.A|Çn^^\voYrYe]o q[:]`?a/ba".iZzh4XA!1X~28ߪ*/ba-XC C 7,l,Zf.ڻ1Geg9'Mg;$֟IO.; ܹ#uprfEYq/xr38ͳ7O0z8ps_{{3wW_OgnOO+O;ݿxuOCoWc㎛_3_?}sg6'/ܿrlMu0.:twLޙ;Q6Ex9ڛkCK^CrEkr*R2~V$ZkyoРޙa4@ ) q ʸtr SKU, E A Nĩ%a%(!lBK Z2EزW ͔Vԫ!8Ii"CPoJ6b-WAoƩbaAQt4qji rOEѸe{n%N(Fn]Z,xH( 4uZ[A|t R0e< Jx50NG20Xap`{oq}7ԱB9W}񫖄޾s/Wl=7TáǖCP~W{dÇ>|ÇnWҔ[lU~^enX. °'xv,c,/ox C%KM=7k-5vp9XHT"AP&f(;6ܱTa& ͋QQQfdAJXY8,wb#?8px#]g8' mNOΟ?y3p y:7ilflZë,fswYsgyc6Y/|9'~O<jsz>;>/}_9 G]'̝;͝Wfs swۿ9u`é{ce,;`5Rg90z|<9Obٞg$쾿éX[BK֢xl)YuZAxqt6YdIt$7n ]:tX1"+aAŋq*[-A!*C:rXsgb< Y3'99HbcMBK[ySdhlA]"ZWbѡCKѡ(ӲMR(唪aRIlfZ?n0LH\aꔢںjWZ/&в 4EC4!%C8 '!q7u)) J -90ϺpAJ u aЃ ^ :NSJfZ^MqԩAIXCx:L)7fq*Sdxԥd-JlīZ). (85$dC ցzg;KBJ*].8jr)-˸uqJHZ)a,f\7R/rjA JK]CiC]Vi٥%CK]ZaDFK51R! ZZ֋n;A\f"-"!C"ƋQZf8w-S,ݰ\  wX^Nk>"ě ۛ$MBKPxgx Ǣ)fa=8|Çſ`^lQ^m9Pe,o8Ɓ2`_Wo˛`)MPbZ7&$LY)+Kԋ r,m5X QKP:XNE EIRV,Ef1brHFZ*X.Wnɑ{:z|b0b!nYHū;\>f{raYtoOupGfs;::\>y5N `6_YuӟOG>co<׿l|+Op_Y7_+`m_MtʢC6>ٛ:~ѡl:t6˦~&=$MSyvoö]~ᴞH:wEb9'azҡźIG7jK#ED֡hP.!1e/lEʪw;2KXC)BJp,iThpPE10nlMB)9n fXܟ9 WY(=hޫZN }e:eԸĥ`HRuWxv,CaE,ĩX.cRKda訟 A"CKBE\BԐ z'AfrEBúio,)wr!%YHZZ,lzgG[ Jfh& eN „z6BSx(2Ʃ*0(0t2-ʾBJtw"!wv겖*!.Ŕ 85S7*9Psj$X.oEZ֫-o֋`̰< C)-0Nк- CH/Z~)S\!̦+E+:E'q R?)4TayXK0x|Ç>|OqῨ1~#Q߫,lóA0'Ew7{MD,/ `5Lrb$ts-E)aF,!L llr#E71徶[nӃ,l `/8 fx FM܍eyqڒyşe3t3Y$ܱP S>sX7k9`-nX kpl|jOAϘt;n5 3>gœ͛/ux? |c6iS6fW{|𿭛d wxg/q[6ƲXj(Ⲽ0Xl,.e̝ufca\Rz/Xa]7?WWaJ9&e)ʡlhAc;n6mgƄ b_4;)l+-X5ʍP5߸aSenfr`#N b6~,*Oxu ݞ2Nf7fi~t{qWfᕼa//s;wۋGo~uw^;iY,7f1YN~f 7|syqi2S  BB¨"ߩVBl(Vܩ8eQw8]g<;]ܱ0UM!U5e[fXK͒YԢG Ơ`cdv Ĉa6؊*.0(# jUT9 volDPjnCiXqX.;C +z\ Zw5C]SU2ehTcsZoN $LBB`4BB%YBv 3`G{ZSj  jdBU!( )-jNULLA# U*0FHCJ+ԋ=֠bSN;6 xfKƠ%/.w!BQ.`e04)!aI1.2.8M;Ծ 14˩C8Ň5[kc X'qUbc!ćMYS,l Q7-!%?g?Qc|˗/_|rBVc  5h6.rZ>[hˠMćO:L.qFHe6hP ń0EABanq"žۦ}WTf 6a6E;l#D*uo"Z+;JBM֮EQ!woF͛7&;Fxw4Rf܆O=7j1),2,s{q㴽)vf6l\ ++7֝oi{6?Yw֝ugyo| 쬝bͥ&. igyv7EvX*Tx`aQZʡPܩ|"FzȢ6+aCjU豶V,B9-BQM6J i0JKEP̐P BM{7` ESJUPAr khl8DP>.Ѝ"!,l ]*E!K٤1nEPC4;w0aa0)!v4ɠ`G|OSA F[.7a!!~%~a+O !4C7B53N B* L#.qJ(.K+]*U$TyJ( h!K1 vwEBdP4GPR_)Q]3q rT,?Z.\o-k|˗/_|OuB+&t1~[cAOP*GKkm 6OkExо[,1 nt`psZŭ<5(L=ƔKcps`"jfhъA6=+شrBbC{rZ㲳 E7ScˆXFƢnJ0~)63ʪK;ljm^-VNTH(T;e<%Nfw9NPҬSo T~w3Cc;^vCSi1ma?5s{ߝe_Xe.faܝzce'Sy774 Av2̎ja AmԴڻMj/񔻇ddUbTZSa)#kMyۍja}QNvh,jM5ĥC&i-N%.ζ zTc*h!5.)w֍ ÄmQEbzcvjSq=d`'U., xa}7e0d` xJ\e<$Z"KU$eU(ĥE q(f $BP> U(dPX!q)\B4(8%4q(\ **#(OkQ RB9U!NPN+Sjơ:K55+!PJƥeREl60B73N ,BƇ!Cx7Ta#;00S=$q)x7XA; A ݄,!  V!qښ` CnjB4(g] fڡnӄ*UV.ŒԆ0qP8LBSt{8I]Hrqʌ8$HK"R&)ƻb~ea[,Zxa-l ũ} )۰q!4.Ow_|˗/_3|?+gBqvKa\mƠ]45lЦivGf(jHZR^<]{ü=Col.44Vr)}JiAPĝ~(F5v45x167BKc%,!o=tlԫ$,4V0N0To2zQՒϮjSW/EfEohO]XL;eH2T3;NlߨfQadcӟnܱa4$l/TXw٘a÷c4{}߰^awNii̎Wvcܿ7oox71;Ou4C0PC7Niv b 7iSwX̛̫d## 94,T$w1vZwa#rɰܗI1uS7m ɛ"u y!?KƇaްH eM 2^l85N)` OƇ`X] krdyi V~2>̰1J [Y,lEy R Fb'ˏX~kelFc/_|˗/_j7_@Pۙ `\AƠ]m^qZn8GƎBSqXF; C(fSP4 =̆A31Lzj ]5wrKk3`Î7j4Zlt(8 j4n R;JrSv*owм}sYET_wBbGpsɯF90!CTC55ri7\ɸܹߜfgNn,4m0d8k=(xi;/>YW.pkm 7nû,f1Y\hw|Q. a#E)fBpcP* )*2ĥC#(}!!0E ]K, q *ՔK)1F*tXd|"MP.!!HȐ8uP$TNafPHQb).UQUL9U EN3lń +$:K BdʥѨ 7}Hc< rg sg-2C8qK&`A9e|6e C72N M5R)UHL C:P"q)rB0* ժ fڡX0P!v2H8U1%(P(+L03T2!ۍj%.0Ԡ8MQ㥱'qCSP$|2>\2K,x*qH!Nr)!aP%$NhfM6ʇ NErhj\4q cfUha%!tMHE3^&0>K`P̆0 \kCLy ơ(!(q/!Ea B!540tKvqtxi ƌK9m )ais*OTK+)~Fe1K6Oq\?/7r|yY@P)aZ덿Pc|˗/_|WAe7Lc1桵1h/erZwߴAAsàePJ]3l1Zk>ڡQ(/8N7EŠR6r(QKo UU Pl޼%J*,Fḛt)c'nԎH*XDit#w*MgyT ;7TEռ"T{x+1w7taݜe\ݩ7oNf~ݹmߝf_y7)~ov?aYoN;1XwSmXxߩoN2)q ,.YTdӸ/CݚZU,2ISZi94=mwYejYK)-X4f0X*50r2jF%NX${0ơXD;L!CEr)FƸS"*vN qEBc!8T|VtHCCrJ*5(d9e2crJCUS04rt3˩0 `RCK!QAHlqg U4HPAPSA|I!2NUS3T$ŌjbKrZö!N咰*ӄFKakVQZT`؇4AA Sņ5xŠǩfwK#.!a ÌSũBa|ʩ7SBUtШ PàeF)T&.UCHH1ikU ʥ4K#8 ) !a>B7 ~r"5B8rjj ]NbB\:(..H1.T`!C$2Cy*$Kà&xHPv(A2IEGFIL2Z)cؚ(.A{KCwB($񣞢B}Hw٘.B+AÒQԅ0.R.eY!)vAc9C2>an0h3,2&tABHQ3tS ۆA5lXw;d-?(!N R%%u-_˗/_|_(򗚡 ڟ(?q3h&(eˆ gˠhcS; ʥ<\]T8ˠeDk&N[*IN!ӄF4T+bB e-TVhAt3;R7wK+˖7TlZ4)FoRʻoڒ-=TBQ=tX(/߼CxWl j֢|coTSmk9)id\~ 6~]FBlݞ֝,avmgof߸YrS\jBDfyT`P&^⻪rJOP4f)OqY. H6 ,)/'U!KPi CʩA{ S%ڇ/U$>0q(P^S%TBQU^qYA\OErjjj +NBˇ85Y2hA`S0Cbft ˏf)PŠӌ6k f٠1!~6h?K!( ӪDv[c^m>[h7]ak|(Uh-$iz6JO(f 7\ڎոntHfym#l>d]fMUDCꍿ1%KͯTɺK]]ћ)* o}6Cэ` ~e m(ƆO=ӻOSoT;eXwjs?E|7lerٰuwn,ޜnߝ;Ͱ~uq3;f/N2d0Sda&F&Y^6,7̝,n:V}6d.w4qPnLa9FYqNUSͥ6UUWldH<$CQӺag&w/Q*(h16'ڨBt TSZ^!!T1"f qxrjtQ" q ֆqYwj' ܜ!dCBB.XhtcH,S$8%oD+PC9%C|R)Ay8% A\CU4ƥ<P.UN!^B P]zPYTSEoTyښ)}aaAAin?x4oh,B 6&JY͆ T*60VK0.4e7ۄvZL 7,lӦJ+yG!B )4k2z#$jU$A% o ]kSo*( ~W»KeC nCN 0M 2$di6nf7f1/n6fofћYN-fQúskO[Ӹ~eۍX)ܘwlN3Ndz1jrl(HЈK-:* k9erI,wUY2.ce TM6]Uq`Pe,dC2Nhu ;6 .mŮn% Ӗ&#BPikˍfvksi24Q!BHHc0^ި6!PCː8 B!C; $N zY YF n{ʰ5S*%,2ȰCikxʐ!! $BS1H0ø4B%R(0A; r) 81N))TbƥYT.OF  A qa 4q}/> +iva`L[-?j1vbŠ>faFNVG[& =v屼 ZzXpD6(a<+/l9^p"֛!]6̉/X: ZKF)QebR)̲. _$BP՞ړWQ_Jm2/+oodp[j=W`ƛf܆[CWocB߽ WgNr ,V2ndUڮ7vqF$tHW[ɉŇKKN5थd]2DAJןŨVD,k]2.`Y5.֢̺=ʉd<- BO, uy fPԭKtiQZꩨ;YTԥHh]Z@x BB;[RӠl\˞X EBBC< В .-2Þ$p$.)N^]%%AKٺ$|-{2NRreP`Stipu] ƻz*JE27KɮM}(*B|]O]ZnIBBR(IؓRD8\=]-%tڥu;~zR2aVQqKQ).-j2-Z3ee}8uoԒ- N%x CCC]$ĨeKpKRІŏE]Ҹt`eTRobSԒ^ SSJEfp~Fⲃ`] Q޴[ݖE]TІ=.JBKRA=)Ңnzwbqeq֛t.2ե]D%K|+n=ֻTwN9&!u[ ӧO>}?ŋOE_`u'Eb[e(l1,ƛ1։mX e1[`Q?zK!ɼZc|(N b q[kpYf\6nÛ8H,~{k8כubl1,k<́n'y!ԛeˌ̪K&t=xʺe gn7qj=d+$_eCB=I Ct1XӺޝK_{Eq>\CW|=.Cq_8Y<+3෿p|qy?x.`NίppW ~__9hOzrғ]A..]rW,C<탞8u_)9h1dN纬MM}%o~>@89]=-$ծ%C2޴rnk Ljb0d9 =)veV2e<Ż)~]ШJШU, *.A2XĺdK\u9՛KWJKOmX[ܖva_9q AeZyAPO'}e.cΆ<ZmYtQӭ.-Se"ću,u)G=?)1,uzx%eq%!C`PĻ}/>׵ Gwĭ>7g]Ga> -[vŸƋ5~f` ]1xp;qm1b1Dzfq >N>\ /8ZoF$1(:)nt{x81qjzؘDír"(-g2q;l^]&/)U2C Y71~_ .кAܺX> {dITυ]Zd8˱_7 Ä  3d8^x {ғ==]/.+}ť'=W3xnߘ_]eץŃI=QpA^$$4_mOgy 9Ct9Inq;_벋JAƥ"(TZUv%A.q[OAq".'JO8ɸ-ki9Ɍ7dz(▘.E%*-!-J<[jrҒ2[IiOr-ÞAOrUŊbiH(.tnuzX E8zw- {AIh KjUć-AI\L>Sږ!zK5E}:%n袞d0CBaݔ,2qi]] z7u٥'u;Ғp.]~0xb gه˖wӉ>ejUZ GP6hO]A\nRtDUi"&!a4LhI8Ou[t0nuw=Oa<-4[DCZvI}qbȘAćERl &.vOYEfXj1@1t?[?[|X߉"޵Ґu.ÛT"q[n[蒰.IQiěݵK4>.~3ز)$6h q]2Xz*ROCOdƻ~0JO),S-"?Y7u)N.ZofƜu7MQ|olAVCe'g8d_N谯.Ez?t߳ޭpÏO~}/>q /i?n1oY7k1b|(N N .3[kN8ܖ=LYO`1<⩴PY,}pA\d=A1.4ƛ&)NX, l,A=6śaq[W v J;/X zy<CW]6w2Ō}KKkb%퉠$,e׻(R]KRL)Si.!㩤r a KqR`)E\:X ]&.-Bw]%RSnNeuw-.u[z*$CxK]8Ļ`7mힾS~ԇbnQOuӆui")Xfh]XuYqR-AѰ)z [KCN )tp,ZfA2XcLzҚa.[O&~Tˌˮ[PJìA9כ(+BfW[n1X.GPϝmFe}ӧO>}O_QOmֿC#n1zs6ތq,6X,/X[fYKP7e} S6(1So&ka쫙_He18ÖoN0IeW)̋tq+=tD݂}NQE{޼":^<u˾ (}p"!+oփ~Ëx͋Xo__m^CCBғfhPK ;B/.KKKK! E-Ң.-aW uz2 />w]ŲRd-"WuJ %_ȐҲ'Βe=K.[$%)3#VeAćd?2ː`e_\%#Mx#^\f.y<fE]oN$/-*]%de_a# -ғYo֢ӸC (-(GmzЇKtqғ.SZCS]ېiiQֺ$(-'[z*qߔEr.GE Zv]"JSin!tKZaR(j.AL|/ nCr>lȐ!z"]XK!aJKB]Kq됐p,vYt]ΓKi,ZzҥoˉeץEmh-AnPj1.ukQk*E-$X !(z2n붞%%,1BBZf,.M{$캤tPx4Իz G]f]2qi]v.3.]v9^lksq)"8x*T7%c}'nW}`,bI4(%nԏJ*G%[PxO%0%aPvD`ˢEP SMIܪ"ENbH.Yzć"(N!nE֥T!T޴r.[u9=XZ.i.7 ꯉ"ćz* 9qYsI}ŧ!nA% _`V6,FŸ n1n1%ď,ƛu7{x/Ÿ ȖɗWv86re_FeC_O_pDbw͆K bQ_q "dċ×9. )N' ~eCN,xQ_pHF|:_ukfۃoy=t~nq ͻFXŇa,'N nAn@„=]2epX,9z%/t?o1/_W˖=qKwŖ)(-E*9_Nor%8J__5uI^|EN. %Y F ~t"Ceȼ:߬Euֻe}]WF[xZT-t]S}(Nۺi%֛$6c3d\Rz>ӃRjCԛGbТKե˖.]X$(u9T%8tQ(WrXWs 5^ݳU&%Y|MSJvi-[QBz*Mե%nHKVEH<>ԭ.-A\7BCB!![:((B B78I\ZZ6.y x]ZX--~޽lY% [Yx,.ROGIu)aJ)aOfwKza` x -ɠXƛs)QZ,Vdez*Ի,3b1LhO4Ӓ1 veA4$AqINi93aw{t|AiVOIrzROKROAR)Z.`P)$fSZOaHLB독bͮaMBBn]}(j6.qkH)ƻnO%إnd=x*iChJPĔ..g]bR,˺lT? SPow.Ÿ-$t"ENo~8Z'Cx:PK<aO8?q+⟴~rKǭ˗/_|˗_k̰>[#b-Cd1n/,YE<ԋb<%Ovy9Xq,XavO_"Swe嗱,-sbX fq9=%'iOщSu FBn0fVyp;OE2KÉ 2.XT,GeיW9^Ho9_`ɩ|&hyCBH--Һ$ 6$dPWtғ.=iQZ=I0-=B!q9 ?|eɞ㕮ty];=] Krк$]}P`o| hO)}$;IU8} ]Ӈ ]i|7.'΄E.1lYO%Ȉxӭ=z˹r.+ֻ1TE0诲:营l',TnK]IiY,^{b4'=i]zzSex7YYu ֢.uߩvI] BQ]$qIVڢ)SO2$Su BҺli]]Ļ"qIkl<ETh(zZ )EHκLPzpz*GY .Tuy],)Y.nu`)'J∉uOYzҒ&F=tه[UˆO $$.w22Xi">[.mNo!ƥ͉qŒdPćSuIHR$$VYX-O5[ePĭAP) {2.A=>m}W`@CҐe=xZKPdhYO벋Sh߈[P> e`%!aQe-nCŮ">73XlIU`=Ţu uJgCY>Lк ԇ!>z[ip뺌r3w}O',3.j>B gA=UwE8sW?Z;zTnA}7Tbq~gl8C݁?o?e}˗/_|/?(s⿴f1~XZk k}6X,e1q`xf1~g1YX vxqevڍXkjs9dr`W_MWűfj{A zr5FTlC2i7,^0D-49dvA9BE{! /W:+=^5$!ErhOoo 3o=u}uiiIH XteOZ%v ;$eP'YŻ 3> +s ޝt9yד$890]Z,-J_ɼСKϿ>|X K K%I=s9.0KХu+v]S1.p;]2zfWf\-eKRO'Kƻ" PĭE9.r(q{ z2/2ؓ[x]bm+zPOAQ SK`W:Z65=ZwakYf|XEβB8y.-ƇV".qzK}-tiEz*}Pջ>~x*R']Po&nu٢tb(Tdw]'3(-BxPO-[R "a겞w-Ÿ.<9_Y'Y ˗/_|_ŗ#>.3m}[?ߪ?v7c0X`YO 3Y ⶬnnv}0//6u+Vp+"nz'xaN=iyr79_~!AQ5 d`y)e!x=`Q<,H^PUby8uPOKKS`PXbzFƔJ^C)78MFd^딳C}H0K !2d\ 1:exU.BW?=p_nqޤkŒ'XÉʼnå $X-qiI\κA%IF[Ib%EE݊Kh]>֥JOO')B0e"[i}vtOHPz*KA])]k m=ŐzğK )@}w"tQzAǢ.[2"nE..ҺR]Ңnaץ2%'[9ևtj ۺQ%C=!K< ))"4( [K}.a]#.G͌Kвn]ɔT.PVAKA!T Yu]Ii.ևEJ$,^<-e)* D4Mmֻ "$*T-E\] $[x db0FuɒROb\Z[,]jP ;u,) mn]>L)R[x%Ҳn gQ7㩧zwk]vNOVYK L,Y7{Ӻ-XYhw'>Y [p?Pi|˗/_|K[_?/[ o՟Y-ƛx3Z6X-Ƈxb1Xa1>,U#̰eaYkoaj4 bNoN5-90'.'iƁEzzf5zw| ~u{xsp`2Hz5 ^14ڑA<=BF7=WP+9^Ѓjd_pT=9~UrÛלx!>I]<(}(oڇzaOrx7/8(p郇2$qa2d8^\v]ɌtuҥeOX.='O2X:. SqݷåFIgM)ࠞ!KśSY.D8}J !A$BА NM/zs8Z_zaH~qIiU\rh_"stb!u }u)O=1$ۺ[eiROn]zs>Zn4ZS>IK=.'݃z$8]6./KK% b>iiQZn2Eq)"[P-B|RAQbpbn!8qE%Ai\r~xuITznA<Żci]Πrֻ[[8r f 횾Zo"ŸŻ7Q-) wA|W-3eJx*E%%%,X;K y̰~6Մ'S|$1me8ץn%UJ4$OB ( a..i\.On&nRq+[v ">TzZA"E=0b`POYRO! Ʈ\ofoZz7KQX[S]&"YeTImYt4vn!bPzW6~mQ]:>[>mp7V뒐u'ab~Z~>O ֗/_|˗/b]PO?'-ƟYX5>c-mn6XvajZ Svy+Xk^!ǯvOSOArX1УrᱼˬDk szE92zixEp -B=KĞ֔Zo%_9F{H^x9KNdՃzAȯd0dq9{ɡE/z~c~8$jjS/'^=ӥ(-ݿjOoӻ^{a7\ΐ$ue1e8e[Aݞt]zҥCb[K>,OZ`MSIY-FkǦjJeXq`QvxoS{$U/$Mrx7!/ޜH:F*pzs&C4a_պ2Nz`֥A9HOVqddF%[+BC4(Ţ('®[Vnu vi-=[(-YR6nq Z]ӰNM\E,[mJ=%]듔uY`"(u B JIиYĥI]%h]Z,[IY:$$iP,]$. u =I0ˢup~A.=ؓK'-tIdf]vitˮu ."bIOlƻ,-Nc)4$*&!fSh%h]wE1Xd1$$8,2Vv]zbӸ-听z3t fhY S6.G\Z2X-KK]? rqˠS0[=HK. b!X*~RmĭՇON$ĺ. BRh iXtE\KB&vwCbXZO`}2%C1nE[S۸C1->!la]n3fiV91?ˌ˖Ÿۺ\۸ù?ҲaO,ow~2A~wmX ˗/_|_ŗ@|( oĻq[O3⳺-^A0Z۸-mb\'&0Xbܖċ,{p$Gc]1ϭD~u R+k=|ke P9A0prb;eɗQj(""GxXaYAv\ _ q,Mie1$d]KB'-_9-S/K1d4՞dmPS6Xmٓ.S åLK<. Y b~eMˈR߬Kl}6X %z ` >Yep"%)zX,JaKx(듭o%qIkKD$u)%Nm=ߜ8d^gA}r^ƿOga`~~~//_og`nK-k5wk}r 3~tt+ㆠ>P/6O+:0^ba/nrO& _05(xnKpsI8=|txȁx|Ai֨`0E$/fT 3d$ 9$"KHn~T)Fa|||*9pHn0;8q#!nO/hOڿhOzrғ>)"|%&' 8nOtҥ˞t}KKץC8n> KҲ/$.oeؓ==%rϺuw|Y%7=.9}VAɍ!*sÍ 8%]ƻK6uuXgoνyJit7w7IOw.IzkٓKdׇEi2b}X.!A\f IK E'J BexARzKKKYꛖYvxo%)Z&RzQA]2JXAd|!KEKzJC 'B|(UQ껩uϪrzIYC묗kK⒐!P.C֥Re}hY%1 gvbn-^aAt]r&.aY߄d +!v}/n`N/w>Y+믜ޝ8zwz?[?X/oڻ`o oooUoEZoa}/O^wzZ^b,b1^.sOw,_[1C.sCee<PܙnqZOi1ޙCs08TEpjvw~2F_Ae=5ɰErqÉ `99H!"]šNXI0(98 ee1%HX_(Mu+F73>K?Xd%_?Y (ˮeNߍv%ޭbĥh}(M z".EАE8K0qɺlEbeK!'Je=ONdQr!epbi.-"$zY,[ BK<{̲qqIQ]ɔKuҸd]`\ &Aڄ"KBkhP⥘Ғ̰>",CO ;50qY-3(3]f][/^p.Sgq"d\䨗CvT!޵.wuiޅKp'z8x)Rlqbբƥ!K5 d%%v}H2e}(>YMu]//CwzO'a=,[ƥoJIiV"~4K'Fowe Ch Z,N$> _g_[Y~~RK/EO_oF߯^Wk0>4Ƈe a1iguƻyc]CKpae|KEr ߍƇ[8+1+H;tPU޵K\rs䫵. 2CJ027A90C2ڕ 'ndJnbO/*ίHrx:2_%7Oݥ?vo~:d|9O!Ur sc JBw]vr;]dHh=7͐û%qi;ǝK{_({'{u޽˸tKjwO!H2q#'9$7do I}/.DâޭgԩK|KKxZ!-x7q$^l EH0 ̐ҲKOZIB"q]NKB–xcQ%-viϲ^b<, qiiKQ,'>Nxl LL&^--rK5~TZ/_J\Z/6h1.-)Nx, "ﲴ  a f8OKOqi}7[r`]2K]xHxDK%7`}~xJB|P^Cy[3R:aNA}3C<%p]xZoviuiC=.e=-R.a|X/b|>-Br',dagϊM z]~!>z񰜾_  a=g}'w2ò~ir"a|X>+eڲ~~~?(:qZ>'ۂZxcx,e;n̰i1ĠzxXk_X:Ԋ!'oä,(eqCٓ9+[Nƞ(2akj)˟AS|!7mq8lb(u2%wx80 %.˝ -v=jęRJFO8'Ԍ|EmW 9{7C.}cPK S{.Cs3':]Ԝfs7KE 2`OFKѥ厜e|(P2|A7w37I= {y']ɩSzzinVʮwAWKW̮ˮKCD5hHmA]vaz2>xOe-0B0OF04~m}XE|Vb (RC2{pdae2ϭYcL_ݳn@J;z*>9TY0W;Tk|Uć]XG\762X֏XNm|C)_~駟~駟~OAE=_$~C?Nb{cb1n`ǛƟoM}bUMvI+jEi7딎Kpb8O=~aE$i2e-a1ƛ:8x G9xs%ǫKOzzY9")#!"nCv nz:>@q:ErC+bS%xs {HNп:"E3u_iWW߱tԭoŸ|a_lOGпq! ez Cw}H^\"Ң(/ɗK]O?HH^|>*~>MW&9d~!_̯tyzV-F`}`QG7a F^%|AMED,NNtٓ.!C$_93eM!=>؇KeprۊC-JB"|9t\u+ۺ ZMULějC'i.㩴LeOK$nfEDI|Ł^$ L|r-.nt%aIiRO >[}q7i S|Һ4eiIh`hHHP!%آnŢ쒓"/4.-JJ=lhQqYt 6SS18iEb.[v,-AqY볺Le}UzZpW()n!().qÁŦ'38B†=uIBJQOŞ̄4I<7)%!aAHIX ɸeL[ ; Z.G0쒡eZ&-4. BJrK][EǥnEYD:˄*)M`%иSuIB`=Eʦ4Sˮ[9כ4X!XObqmk8G]ʮ J]u]<ե>$v1#u2݆ ]iq[]fX,Ƈ-(nPPO'JYߌnb;}U6~xZyO?O?O˗/}}}?+>| ?6Iِi}a=[q5gk Ƈu 4,36` 21ċ w7Ɂ@pq0"p7=T-[ x!_0/C~9{|1Nû"t. &K[݂xmݾ_nMr`H0MrW/2cIH_7Uў.r.A%"f~!9\拙ͻ%/d]tه<&yKK7ч_!3 9I>ڇEśnw=W9Ѿ:qn]CwI}ڇp^e<=!"s|!/dY22d$Zv2$N2_\^rx)JWU؇7dFzzuIO_id9OKEinq+Eiש(񝺅x %>$.-wAK2q٢.-!~P%KY&tcMsxqk!VoZO+ ZZԥS`^ [" B$qi]?H h0nK}uIRSH\b< x ]Xwi\ғp˹ĭ⒰d'vz*-u ]"$, ' $$lrLU]ZiQR_8-xZ]j<%޵nߴeb]ӨE)Zk2s!uY,mA?5f2θ쒸Һ$X%q A$$1GHXOKO DPNquy2ݥuIg_%~ κެ.Z(zw,돍c1X`]CCP_bxRvԮJ|l0uٕВ``YO0aݦ]P]vQf|gןʁuZZaY m1?>emӇÇXǖ]O[ ް맟~駟~駟 ^Pj럳@ .^d1>Z`ŰŸ-CY7n 0lE<-mz b')i)98\vqT`xb0ˎ7u^ADp<}a8oINgӛ]- `;h\£eCKJ׭Xƻ[, (Ru"z%`YDUIOsTE\RROxK+upEP TE1.-)!bP?HPćҸ$$du%AZ%'BA]nKQO!EE92X beu9]񡥞Ce<ςzZaH JBCOA%8p*[']&8];AN`rx`fiQZd[b݆c[l#fvz 5㫺dXAp.uPO2&28,[o`n e BEp[2P1y9|s }%}䐃|evX.INzrg' J9#:#7tf\z[0&ĉےJ%E)7tr۸d#ڲ\Wv[OZ,-Jzn](}[ih}(C.ukq*a|蒰8Kg1캴$ڥA}7b4nPv.T;EUmŸ$Tz!$B q ox O벋ŐҢn[`Pp[&,;n'Y.2([6[Q$> (R(s%n,ĥ.os=-BzP28k]Ԉoƛ%` z$,f7 Y]!bI\Zĺ--OƇ"nE\S1†xZƻ$>+B|LX"n)iT\⒠xӢ! K).A6%A]ӰKQA|Vq@h]zZ".OG멾>z [֏v1.`Y#X0az3Y>Yߌ ֺe}X oƭ?_c/Y?O?O?_F|W?GS??CZ_}n0 3c|f|[xyq[̌2/nY]J|5OE3xî[ 6޼8\^<"a ~}0Y @D8 bD/l%/$t̪jWNS1nA .KEnq96.r$ " y "+J`0$$o=.]djOzj[1B`$#B^$/E"E//2*B^胼H _^$/2/{ߵ_]_%E/$M|wK^6/^{Cp_uqMU7>\zr>jt}E9^ꔞ%XT{ҒJ2/pH_Ɉq:H^qpN_ 7Ae%+NWw.}x>NeO_S.wОtQz:鉲VKIî[QZ)nҺխ.7%.>̰i}Gꖺt)2xw9Ң jO Kz[&RUL$7K[DRfHOq+TgC0HHRKBANt%A zE!AIɁuY2.g鉓exZ,ʖpe-ӸbE K S\).' ͡z:Px[ws=]ΓeƻI2ӥui]ZYmfek}gEДǺ4.]YcH\6ĭEfnSZvhAQ%fZoИA%ԥnxDxXqIPKOvi9ON8%T)붻ެ723eKJQdu)M9Oe[j7WA]f">$2O(uk.-$>Y%̸,Ӻl„κ-nl1βlm> ZOcoƇn}X O?.nGPN`Əֻ]gi%ύ`Y?O?O?_ lֿ ~Ļ֏V,[7q ꏬ5Ƈ1Znb ֛ebvA}xuwE}0/ yaYA݊x8xzLhuJ/Xr~q'N9\.3.S pbq-`Q6zeeGzxs%/oL(j6VXOE'Mqi鳇7!hFě*}>$/nŋ:Q zS7InM$OZ퉓FŭtdPQD5>R>zw>\ΥwL9E)HXN8ʼnnCrOuiJ[otN/Zi5JXu9JKJJKB=ժ(-lJ<Ғ"$.KJGaŌ˞VZ$$X(a]NA 頞ƥBB}%n[CWnKE4n"EP$I<-S\6. JwƇ!BCOZҢn֥uYOu[aҐu]ۉeu@]vQ2lp`hHi]R#W xviYˮ 7c|b dlv"h9Xf(IPSxN<ŭ5S\l -AkVP_eK,x3bɰ-:X-n/hPV,{֥5߷>]׻d;]BPd+`|zg['A}q[۰붘fu}]5XߌKòϭ gޖ#9,1^MRkKU@UYzn[ߨ~`|ofX֧O>}ӧO/(`1϶.(;'֏bb|5bc`e08]e̲i|.Yz2îKfٸ,`]c`NAJ 0bx) ȆYrAIPe=QJr;91AWt)Bc$v".f\XBHVSqC6d(ړ.ozSrxhO=]źxj#j1(N0ap#jOWy o⩽y닇=/2iOu^]ob?"yU' Oۍp7ݓ A}S0č{cғ=z:sr@} BRu W H+)^TA$!; 9$͍}ݛW̒7SJ['NCO&z]( l(UEh=Ԣt+SOH]7-Ez2$eOofu)q`)2.QI<-RO EݍҺ$LQEP?Vw)AQ( ]O3> Rкěqxj2.)OquWOuWOź룸yj%AI0(JbK}tc|(n1$8r`}(M v2.Ҡ_Gq xw$.OGөA)ᬧuIprxjMYO.%p`< )eq7(ǘvSzX2&'v1`=zķZeźz3iC;<2֛u/bKBxu) !])Q_6d|On\iø,9 7iR*7.wqz*֏kn\J\ꣲ)Ze܍b}7/>8K=`şZ8Y Wh0.czX ajveàQHċK0hqZ{3b`j"QqZ.c0ˎ:EpjI3F]l(9:ك ݒ*ƈ[sAQX`uye WɁuWO+i($t24Үbzخ9OoֻqaK va КSec qݖĶxZH8OwԐ`$$_$eObBiK"R.bܭ7A/SKA5ƊK,G_/Ԯ7uԛ"qWOQƥĥ„ aCv}g|T`}4XZ{˸on=u}g,c7e|of`[?ӧO>}ӧ6^|-?. _r$~,b|`Q\[qËKXEa|c1U wA2#vy%K{ 7QŊC1NpYkDe˖0t) ^:qb08qF݉SoړߚCn^_C?QڛEr0/9:^T7\VAMo/7{r7~:o'^q4^7oXZ;}'Q,ֻֆ%KOuC=5> 7r7/dxA%=env鉓dpÍDDߝ8Z݁˫XRݓ-LnUДVTwꋥjXe%u)ʺ+-]SA\vIzW$+fPO`OSEXwEwKݕ !A!%Bx"6(]OA˖Xt+xS0 RZ:$?4E(e$ZԛE^"΢)XR֏M9]& e JӺ, ӥ}CwKKS\zx.zweO BJq7.qWƻp7AqbP_;X,B܅'r. v]qi}Pwh%^ ֛dP,zp[IOM{vA=K#ew9|]0n=LQ )0B%qY!EHAiqi]SB!wK}ӆZO-Y6d] =]gH]dCawQSEMk=XbQ_MFw=&^P% nK|.3>]o]PXoSQ.4>غz*b.ce}]`}z?ZjOZOx.N?0a{3m`ӧO>}鿝M2XMYwq).o1EZW,b\jz( NX5n_[Dw{c^XY:XorrU:[1vbNݑdqx`h*31C9/c7z ;iF-nVazWeÔWw'sCr+ S(M%zs( 9]CKC[eiU=u=Zw] "8[r`%!dʮϲLHLo直8|+Kٛ /^BJOC򋨸ˋC{UWzï!hr2 >zoߘu)?LWWWj5zMSwU]|(NR%ڛ^M8 R AO<$)m_Rw7`OS.O]2KOɪ  I]ti=,VZwzP_A= (]٥(6.AiZꮤ."ԥwE]%Z.!'ޕR>j]B#B,oR%n`I-$$EIeCe٢GueK`ݕ q%Ki!i}%M@0.7Oq ˺[zR]Aw룄 ʺd]Ӊ".qOrp9Jr( :8swϝIi?fZe>}ӧO>}oŧbc2AY _[w:qs$~,b0XXk-`]cO]nb(aOew S]ٕlHPqq Nkᲈҽ9Hqpx9A5(Uuā`0w,'L1&Nw͸;<]u7GT9a]ZU._TNҢƁE]ֻU $_XbБО Pw=S7M|3FK~!CUB{&A=]/Wݿ$[7͛H=aԞXfš9PܜsjO8pzjIiQZp)n쪑 /d9ݭKpxH^\2t}'D2l]C)9zʼm~oˁQ/t=m=՛aC Źli-B]lŶݠBzKKz"EPwz,v bKP.`]B|#>AR]a C=ɸz%.SQ ֥dXWE<ťu),;7A)q+q >h]֛s(ulh]PN!%Cሧ]Kq2[!uwip[!(zڥn= S ]Os֛Gu9]ʺ;8™P-˸ n鉟\J Rø[9PO-&]O2"q$ZOz t I\BJwe[w.xK[_Ӂ.BSűe#5sx:,BBL(hPwkzzEa}l=J]{fX).EK[G񮨏&^}cslx 㲾bkjn\߷XZRG_[c~l ֿe`Y>}ӧO>~>G?"6?h|G0>Zn9\ַRoz0!fa=E\ec⋪e\1b$:|4F2Ȇ.݁C2xሙC$NOx1-„gDDCPcMx BzWO--\;Y-".eS† )b0Hh9_iQXޅ%]<ťNz'c O3Q ]|'8}c}TR qxwrCK'{z:zzba>xeq9KKJBZoZOTM;3TO-3R"$>hH.#%"!Ä`!H$o Y'-uWySKPw=e=ZOuWov=zzXKKwfX_KP]-qY&.qz*Za[ 2.">o-f1xWo\zT&A.e|k}ލveǟ[>Xƻu[?.{ͮoYmi}ӧO>}ӿi1X Ѻo]Eh]Ə?'wb|k1b,ƻz./XӜ,&"aTE<Gj0KjC|qb[kx: eBxwP=WίtIO<8U[%%KCֻQ{aCJ<ūd0!%K IH%%%Tk_'NۉAƥvQ>ܖzUu9]nP(T"7AQ([q".Yc->K}%~.Rߔ֥A\f]Z"̠nŸAěMK<2npG[)%M݊Q H\x?ݮw!`Qn%SfQ0JK< ԛuA⒠ !p;]&n͆nq ˮweV?HQ˺SD0㣺-`֙"n鶨˞_X].SŰGvXfZkv݆x* zZ:8I4S|-/U$jd]Z-)^X oĻ1xP$.)7 r9)rҺ(Nĥ%]z2\aAeem7]0~nYsGAc꟰̰꛺ťuɸb|A=e %~7qY4u;)o-W[v19h'Y%o ӧO>}[/>wy̰~o1 _#wu,,bnX^< mW5EYO+;*?>2dv,"ncv9zb܊pLq./nJ'A8t3ieNwql8,)LYNw{0-]xz2ȡ"[Q,/Lupn1.<ܦqr>wlTuxūZqA~KV`,r0d'FrWU{j^%/H^jn"S=nwy1A|_P<ԃ~ S'-Y7HCB!^(p22_dΌӫ*|u[Qw]h=-)]Qˁx J .=ũL4{Ē2'KVZRoZ.)Ÿ(%[iZcw ) nQ1qEi9%q+eO[PR AZ?XO2nEˬ[JM](,Rw)a"$>(AKKQPֻfJ+xKKB}gv;0x)YI"`$u[ 㶞- (z7na=ĭؓx Np>:] xu&~8O~98q`!rb\`֥ni POK=.Ԟd&bI?/ĮˌwY gIP,]<%{ -vE9vٓ J<-wKpGNӭH2H8p"A}4Sw).غ-wEQ\mTeGq?Wu):X)MP;nqk(,-T?7EPw͸,ReA`Gf> [h>w?ah y_b>}ӧO>}o)_|ׯ_},<0ޭoC܁"՟j}xq[x5~]zt,fV0&5-Fe^n1)ċK ƈI^^:ƻb_8x:J˞=UaK遺wq[u[Q1$vm$q JV2nnAH ^%Aeb8ɋbԫdK}`}0n9Đ`N-$d"yyAɡo"yE"/.]U$/.=wrxӞUAW{U+U'=Z sp/[uzWCC2BFRd/2_92^==Izuu҇WWRʼn'V{҇Iwur~U7ZK@]ZRmQ(nʢROxt?Wi]f\]z\Իb[0!AHIĐ 7EVXq!Mp飠$uВxӲwqK\[PB< BuROA˖Yz* 7ֺD0 %EHIɺ]ZSe$.}Avrԭ.@['"zRd).o[ /ca#nñޜ91 i1XKKBHIءKc-KO3CɌ9x`2tb}kq9exx%-H_q+ûӥ8wnEPO g9O^U}Pߔz*2XKA=sQe1)ޕSX?Q)s.~tٲԟ7--A<-⃈*u}wwwî?^?Z֟ZO76~nϭ,ϭv]G3ndm3X>}ӧO>}ħn1GMmqNm1nV[-b.nAPXe=0ؒ!ɼ.2"cɹzH1zVpqdɲŸ-_(SGY2_PƯWOu+㶞-V-ۚXt{zdv9|b}/@)(S˞zx'=Up%Bܺ^Jq QONj [QT>{iHWW^uO9JM^C/ڿzz+xՋW3گڇU=uzUz诇KOu^q<؇XtzbqJ=QrROEZ$/IjŒGKI]Bf$CrH""_XoֻR7zW.)qRO,!4(ӻn%%Ai]&t) E!и4uk[tIҺ$(Eww-֥aк)%KAHaKC%߄ [vA<b`O!eceC}ӧOz_d1X ̰~ncN Yb܂`bx5֫b 0 ]&-45E< kgz5}e.Fܪ߭`>^[uu顖,6/9-XV0u;V^UPfi5вM7yJ69=2EH %u{,zv1ޭW$.*K&~&[z$n-m$eF$$ñ<2_$]{"*,Gz7O`m7X֧O>}ӧO/]N?tSB-^]nxUg{6c1m0>Z[,3Ӳa2alحˮ[_ºĈ/^8N+VX< Nn'ьEVOc<\Z*E]&Fn^U͆R샗pZZ-~ dWqi, ӫMjrA8Aȋ֫*J׭")N][u+BF< "8݊bXO A%/7r^Nå79zmJ!oW_$_d"*PLɡz2_^7+_%__}+xȌߴUߵRt{iծlӛ~ՖtIOT'_֥C|g$A\J^="!F< 2C'ť/7ݯ~.//<ÛE^]үړKOo* J)gH>*3=]Z%꣺x -t(BE8 ZZ]Ųq`ِeCs]p2aM=K¬KⲘq%H\N.2eץG!O!'sOQNNùcnq9O]98r`QZLY6XS$ˌNGʎz:˄e$z5 zJv]ZU2غ̐r̸$'yzӓŌP֦M9qآpYZ">H $qI\NĭInpzwz:9SaQROޭCC~TSwyӧO>}W_~oӿm`^q1u Gz~fj\fZO9PmP`}dP`P)(z񻸍7x 1z5K/FOҸvp `B.3S.yAӫ&tXOFQB--a-֛"Ed؈!AVm$!A [iݪ]I"nA]*.-꒢28H`zr`DT%CrC  #9 F2ڇWɋEb%o䠧v%UK2"K^$/2K/^WCϿj}S{S{r<JUt]RKt'}ĩ=QSꠋt]!d=x[$k4{  $Y42uܽk]EHoE7oO۟ȐОt]2tin'qғ>+?j.I~Oǃ=I=郉~?7uvQ.0v׻>' >jXbuҢڢpR7P]Ի Ң~aKWA$A. ^'ioBD]ME]Zb_X%A\CYApK=եNeݶ.H`O!uǒ.-Jq!eЃ=IXop'-.s,zlnK%q ϊëzuK-.Ûa%IA'-r.hhKKr̸4Z Zv}2]eֻĥuIlH8=īK'-]ybɺec|:Oz2~r.dӭuYdexK[Nb|V+aZ~.[/?`[MMˮԭ]zZb|4Xƛq`w֛ᯬOmlƯ?nd׻xƿh/_|˗/_;/[?b|9'8qxCb0XX `^3b0Xn(Œx7j7m^r'ZKb8y/ ˎC}8Պ>8s0*Fh zzWi]5tb,XԄHvєFć U"  E"[Pb%úTEnu28"Jo$>TNh&uX}y`JƥKV{Б|jꤧ8҇!y?dӒ(ӥ7o.=~sɐe듬WA=۠8}(r.].G%Y1&[^wd Xo ]tC8qt \<\Γ}`҇~[KYZEN N,ʼnQ>,-MSK%R4Pˮ.SۺŠ4 ZS]nP6Ch9|Po nԻԪz3`") JPOuI!Roui]MP-ҠSi`q9=ՇRO.V`–ԇO!QzrqiI8yz &BK΢w),]?2XOۢ>;7$nA֥hɰH|(ֻs8KЃx3XbAJaEޔ#v8īn C<фkjZ cb[f$ --KҒx$.K].5K%>7!>I.Nar.Me"~pxs8'T*7z]f7AYm|ʸŭ~ ꏭ?Km|Xw[-Ӫ"[ ?ԭ^(2^b1[Omfbco[kևY:l.˗/_|o6gw?Ihs U>,m1~^ Xz5֭X˺ Ur0XOenYc^C7L]e0`0Ÿ$1teq;)r w BF,Ž[PuQPۨZ5a1uAh7m!ƻ*!xOAxPd&,ROuzDXz( s`$u7Uqd0. 9ANևS*BGu`%]7o B9KA+$ ^P_H~OCBk8q샞tu֥Z^ʼnqn,X"$.[椃W$zI dvbUvtyxzСo%8b֫odnˮkҺ-NZXO-Bu.WIU}X[PEk]Ի,!~>%APnQ3~`]n!Eg]]SȁROEPK` x*b[>KВLP`O!q+Tx r.3.)Xeݲ.Edz:Iq;]ևxzƻ,BA"uA$t,Ÿ߷nu,EOqee9`)ͺ--%CJb z뒐eK֎˜eXQ*3.K^͉ղÁ`v9B)Z]VūS\).%W. `QNOv*ypx y.t+ ˁ囿2.ͥe< Rn`WPOa}oqP/[Vߍ7]?OƇz?XOP/,m1_[e=ֻa|w/?0Xvb|˗/_|‹/a1X,NY9q%9bXGq;-ƺ ƫv-ml7boeÔYc|WU1m?[ZNEYxi\mƥ'E%âD1iƭ!UEp-J>TQULu%貞gKCW!^ȢU3)٢(.[QqOu ".]%y(8pSsQF2̟MsS2Y}!]CC)on}o^Y{E{jOߵAAi*y΃. ֻ.]J'}Z'6tn/axt8OzHJdoĥ=ie^n`q{߰V^=}o$hݾQtIhKhEQjO%nq[OaO'-ROn֫z.3lԭ˺(gŠ՛rKE[)- .4vU}WfIh1$n!q;"OL\2ӉeE6ς ԇx ]ć$XuٸXgK!X!`%!A<-a>piH4Xև' C6'K<ޔ"ޔ=}rKCP'A%Ei5 계'EВq[bviy,s[hś]2Epn8ojƫ,;*.xKvRՐ.K<=1IB|H8=qKh\ Kp4dQu؃WE.Ǻqкp V *͐Rzo"u AYņAQ,)3`]4(GwRE2?S\S"kI~iכU<2V"u߭.q[h=ևok`6Eu/_|˗/_[xI˿g1~8p7ԿYe1X-߳m0Z1 AR Y.]N$"nq5m&juGīlE,(Xk֫MWP/ZE6.TX:eK6.F15(sRoAjU.Bz"a* RFCKDzr. ϪZP2(면X"A, $BIEHp-(E|S:Du9BI~S7Ɂ!Iȸ WɐjFr1v?_%*M?=ie]]Fo%]Ж.*ԇŃĩ֥:qj.!KŁn/^UAH|6$(9ȐhWgw݇WI뒥]J WG9NOwKm]ZwXZEQ}ϊn4(ACP>ԭ*2tlgɮ_+Ŭ[1>.BKPb)2~-̪㳸 pI\vHnq+JVCCZK,( ֐!$.OZ,"ě 8$.]֛ ֛Aݖ].KBK"`f1n!AY`I|(G\Zq["(֒s?6">I/p[R K$._;I0^Nv9Zg1n;w,NctQA\Z)qx*&r. 3^ӄH\Ųӟ$ƥKK2%H ӫ3Ň-c8z sKC="}#躍kOwwǰ> v܆Y~i1[J M<I|zߍ[}q[zWn}>eYb|vt[Ƈal?i}/:;˗/_|ܿ/;yq9gn n|1ƇA݆T”#ۼn4F w1[`1-^`mīWUQbDƥԫ9ՠZԇu*qK`%AD!qH $ԉ*oABzSW G`1$n/Q[%A|KUWrAA F#^7?&22o26ȋW{ڇﺿŞFOݿ>^Ր jߴYKBUKC$zA,~ 9gCBOoCwݿ,]Z.NvJSz׺˖JM$ xxa%~6{RA8xM$COŸI,qI܂ӇWˌ(6:w//$$ǃ4-'3Ww%n ]Z.%nGh9$$.q;qĹuiqŻd)MX Γ]ĥu9ǥIO N.M9eں`׿ޔuO4u'-Jl1~1HS]u]#nv~[~ޭg6a|~xƿhޭ/_|˗/_/|w8|8m'%.?8PoY 0~bbm0X b݆]ApzZfXĊWboq+]ƫiqOe*m> X}fl-[2A7uKK"4(RCw]v$AhB<QJŢ8| ě!u[-9n!JAu;*jWdU1SKJЮ<^ ~ ^o99p7z?ܾ]TRC/iW2N)==,Nzb .{ғ.JK鳰uz ǸBS"nJwmdK2㒸$>;[Y5$5^̄yV#$$d\v٥8\v`3$q,v.Q<X !U$l(qzz pe8lQNǜBk$ Μ'YġqRzq**ÄġeCZPtw*u*uagnq&8-aDPWaÒк*NPê ϋWqz`˩X7Ixox 4 X-W Os˧O>}ӧOQ/ׯ>,m>o;?iCKZ?C6Geˋ7rePPw-q0NibC[ |o|o,x/,qCJ7uSUqZrU7Kݵ^$ ^B"n x("d!$"6,,TWBxV` XNIx.A$u$nںIEd ,EI^Z/ME6k]dM/ۋ^x?iw:W::tiCwԈE.Mt+jwAPZ6WߴqCKD,OĩXl]/^d!!MZ"Y:Ύ 9nvН)텹XotfGQ:ӅVݔE)JFiҺKMҋC]թUݵNECO8-|Zu !(Ê8EC8E"`!!AZ ˫B`Z?Af0UIw B!a[̐ $$N!cԩNuZg!6Wհ*3!w Aa$:컇:7,㴜ap?zRīK< qTϾx;q-$MUU7uӅ:,n-V␸a-cyv7:̰\-Z}wX5i\B.qHXIݩu'=񰋐CT JBuj}hm;RJww-Nj18APWθkxWWS3 n@XPiqjībsH}/PˇlV۝fƳxX~l8-Ƈ3,c_`a܍O>}ӧOW~~է mv߉m /i}gyYnQˋ7M,{)n*N`mĩ`m ӸZV{k<͚Uc9%͛ azSEQxԫbq~+Dl!$BSP N!q7e)|'BCoE"q%YNvij&$ _H8l%Y$bY/KaIJ^b'_H^Ȓ`sڝ6_X_dl:_uokwUUW/jCwC␅%Y$tvzAߘW:ntPPwYU,8E`wMYE/".:_uJ,"YڡC/.7[wS 󕎇\󍎽_h`hQzMݔ;8uWUM՛Uk=]TZ!U?5OSrd⏋x]Uw+AB\ġEF8$SPZEǩPxXH/AW ]n=8-bָ0[H68AƫqZN!^fgtwZ,w*~ k!)C8ճqW!ēU͓ؐCU;XUa}!cy-cN밖7c#N !qXi,,i9C*U܅CB0^m$vW!kki\ܵ޴:CLZOZvQ fo7Ɠ1n7:{˩q5nW! 'lXWPvWxX>6Nˏ`Ɠ5~nƓӧO>}zlcΎo ;IBo!ӎ,e ku [SvԫXavPB,lB;of]dbWȎ1/KQ.Z,W0`s*-N<[Nq ʌ.M7T;ARWPB7KB8$4*$eTcq*k NuC\ENz"`+uU7$BD$LHnM¶,&YŮ%yu;ڡ;b;)txX%ٰ/td[:ˎE6^XfNP,ob JFl$-7l\.l B^(y|/Y.USt8`:lb'hJ7c:" A:ũ Jc)P:t1ש w`9qSUP^ HRtH}ӧ8/>}w۱a _}q*v,gr?1X`Z,⪞ i9 CK7(0r :ea"XqM-#ٙ)C0( cx<֛C`$(2%AI7 n*n"$NqXvgN*F,2Nia$n* HiG"dyVԎCtNX6: jws8ât/ k|c] 󍋇tT}$W;CV(B+C7ZuATAb#q8BEEgd]_e9d)SCыds.Rv*tC/ (ž;$+z[ʸ:UPOZ?laJ Cwz xVo*IfX uBC] AyUAzHi{ePWA鸛a”R8 R4Sz/Yx* 4X0CWC] c-2taP`aؙ2~cy(񝡋 u0N rKB*qXơr06tȆ""; -Sh0ر,WٝqHf !d}/Onzkc?aC\, /ˡ7/Y,ӋC]K qZmI0r uP7W +"l9ŋWu^UĦsqh=ԛiN˳:,ěxxASܭEC˩X)7BBDrВxda#qhe d#F^",7H"Yody/dod&yqvp7ݿ|Uœo;hN/dls}e9tܴ2lp*U{ТN!i/tP?E;dI6"EYꅶt0NС\qENw̨:\vNWo̮QViVԡuUAzS)Zw/Ti=N=ԡu*-ꦭI;ﴞ$U}ӧO>}O_/>,?as;6JZ?iwZ~,jR7#`j9]aƳ "67]& {yY*`\73a˨Hd":N -&\EYS7Uza9i8-ĩ,i!NuE'-:ATݕq0a7q ,wCBKۋS^U5{" `Ѣd Egc}YUldvǮl~O,75/(ˠ妗iqYVӊEEx&y!qN;Y:YfБYum\\/C;ta\0thٿ9NwTӝfw3Zw Jvj9M1( 3\\աPVnB=+񝅡^C=I&fHix:NEg3$A]- ^ Z'ݝJ*q5uUwA=0CBCa8ta.XNe: SC9mY)H ;3*ɢ,qXNø*tq5jsXNg㽡H8-}XY8L0vN"/رiPlC5ڒt'.CC7{w,7DfH͖38|nҒ!vZꪬ0;/fgrvġu۶NqXNu6nЋ}\i.y!M;WPW7ZA]1PCf Zqa!A)g,,$WCB9ի!Cuԛ"9񬨇i4īZ>C8XrěN,LJ<Y\ųaPa}ύxgy0s_`<>}ӧO>z_ivxo ۱~ni -{A= 6l܌lEf8-,MSx7Յ*\*k1c,qSn05$*fӐ:P[R"ON\E,ϖSWqwq]"8 rqÌ qUl$N!iG<[P6Ŏad搝}jba Yh:E=^C+Z2m^ Nba`9$ٜv;6|s"SVZ$Akc9fsu q7{-u%]%)[ew" V[.Vjؖ;$N/~NAU8uts=lvɎ/nbiCZlPW r4Nw2`V;CIP7Aŏ7 ?xZ730,M}AQB:ēz6  *y[x6_0ƇO,?mX>}ӧO>o? kc| lvox>i-6,6`9-x,^b9o,P8UYX,`zVhědSW˛0Zn7lU:)W덜 |j/Gm!߳@& Eq{geq qPBx qw.$H)NTSAH NTSiIY"YNA9$l#!{Y?"K,5lÅB.CH6wWCY+W.hmVC!?EU8dE W\ia'`ah18t^ BXYremK]{WkKwak٪ӡUCakuW˘Ԩ{Ư% uSw݋ ( S)V7EYZ?WOSSċCP7Q$H&S! !,+ƫ2в !n7!A8$?jXx5$"!AvZ,͛A77Cˌ^V?X Ebvh= z*u3X AXˡj_!nqZ0N[6/mwڰ:$,y:mNtmMb7!l bM[.M:q*uSZni8lHD<7!^ }YM%NFxPd?a||m<-jK/9-4Ʒo߾}۷o7o}emc8lvmVleӆirZ>qWOrwIW."OXA,8dm]QĩNam)An܌7妨C"`!:$(r,O0C,O˫*]_C)"N" E$8B\!AqhW܍b8-" A$ qDl$N\&AYwɅl.X+r*ť+jK>.9T:$>EⓖV-c<-,"n\ݾtP!K؃e#=!S؇,:d\•mC+;mhwZ?uTm5ֶ;[-ơi1ؽhFU'8Ъ:SXeTԫztu67xoB'xZO'kye!A8- %BBn݋zhYhA qS +$B܄`!nbcZROMx OCÌC㰖`.\a6/mŎY(x1cyib<-qhf8,jEė0Xr36/CIhI/%ؐxڰa'qXuBi!rhx][Fvw!H"Œo┰\.lh:67ewCOlnⰗ"aWu'!n"N.::eG+Mi7u*Rx4 iZ~Rfa-f:WnzPoxh8 k1>(Wx7? Tx8rOE=LOZxZr4N8^-_˫_a|Yoo߾}۷oo-b8lNgA|~m{vl:Y}Toօ`Z%XPo6_S-:m,4VJ)(rH],wfkTnEVPŊx `D wUwOAP:%N)"UPD"DV Y"B,^ ;BX$HD,Dl%AJXSI.!?ÏM$KtbÎmH];t ŕC~xhe"suкۺ*JKUY`aȆH"qY WVm]2׫:t5گW2;ZJk\ntGi1˩USĩ3n8VթqAEMa-4uXnŔ n C|īBa-3$,8ա>(PP)uS`a8q&lnifg'8ebv/)$Pv a-SȆqw`Ǣuک?*CvE0O -A0tb!ˡXNu/-8$C0XIRxxFѢ,l:l,l;֡uXͺnqS!aw..awQv^)NuSwVb߽EzqMJC qIwmcߝSZZWuR>lBGWexZ=6>N Z8)>)n"SNÌS! u/Z.4jbUܕA'Q CTxhdaOE0>lތ8qڝ?7^-6~a<-Ofg˛/m-۷o߾}۷g~0X=öB؜vVmÎ ⇯կmr[wzH,,OP7wY[ iWq]I *l !Ļ傺 tM=iyhm> -!Az58-&EqOqQE<""$IZE JAMBHl. $)>ԩNE= 'q3YoơuիͩA7CxB)iso!;`ѢN;k9MyYˡnvOq3)eiOuZ^M0)-,fxav8a-%] Î EZ6}g !(6vdX-ec?0n/m}mRBbCNjġ"A/Z}I܄ >~ W-fhiiubT Z7㴜A8,4C0qZ>8xؽ*ujfOEZWZ$ZwEʒSj{Wu_ZC _ jf ԋύ寍/kg˛/m7}۷o߾}w+^l9{6ؼ__[POn9šxw1:ԛMի" 'Ku0nbiY˩Һ|Z.NufyU?6X K!QCq q*8ěx .B B KxO,,%hՈ2 d#dCP]I~8dy! q,wګkwТl$bС%.qqWck\6rH<- ЪCw`,ġuHrB6wIY.F%C:WZk\@wqhհ:CQg"PTݕ)ě EQZ:Ԣ Gm}V,Je9U $N7qH) !uÔxբ85$q `"qh=">|`!C.)8N!n¶y#NX,7?P0b-O/2hiqS8 ˻UWݸ7,L`y3^{|m<-mx|m|:,{[/Ʒo߾}۷o3[wOYזW96V:kS<ϖӸp baau WTOqaKUw)Z^,o.,Zwfj[~-.>J.-w˩kqrXN)'E Eī8$"S"n"/ZZP_ YXq,!4Xdy XMl!dkuWƵ;ơ.BЪKWЪkwvuH" qqH<$d9tCjhq%K,"YNldG"YJWٵС*ݩj4Z%EJjSQxUuWAaaJwCBqr**Gjr wUUB7 !A0Y L&^$TROew3( B z 8 q iG|V7aJ!n4Nņz莍 Ba S0ټ]E0WZ݌S,O; xSoJB,KlEx °xxH<$C.ZLhiw6_X k86lFfDhK˶NqhQpRK8$L=$.SkݔRBHpݽkK˵\:zhwCiCTՌ8M,, fD|)xM=C:NT_O'uSOiJK?SkxS|Z"ލk i$>` ע$NېEw!qZ]`8ö!$APv7Sո\+J`htq2vZiuSU&A^aQwA՛֫"͐qXĩN JBUi˩( *e?UPO !+"2a9 &8,o"lC u_J`rS$\ݔUԡN)E1nJ)BE6ⰼ8a&NCE8:$Na,wU)NuXHTYVR,,`$,qsr )uԯi9)uS=šNqq/b#ބ '%H0F-Z/&->Y?c8^F6Żuy؜v_)EN!!"qHد$,ĩ$}w,wmӒ: ;Ӿ_IH:$Z/qS64dcE|8E'C<śP:dF;NxƋ8M!~VOvW񪞊,8-wn-0iaNal<  jsOƗזY-Ʒo߾}۷o?I˿Kb&>ٜvoiT_ş4?.k r*uQWAҺxXoJ.O°|e8mTl8ջ47^SMWOuS)^S? Ew׺8!4^/],$ٸ W7 $NqH)u)Vø Sx*Y ˛" E|6;CqZd m*؝6dc]bncCw ֡uZNb|ayih-ld˳_7Xno߾}۷o#{ /E9LfZ=.o>W굓8\-\U15pQrذ|n-rAP.~QkW5k_z~T'Or-AHZ"ա-aAErny6'Zv˳_1r|۷o߾}?m+҆l~mxTO:fzTk', 8]18 ayvrMMnr7qW?gkٵգpX(qb nZu^J.^[qW vwY AH0MM!C2F8 'otn9 ~_(0ZwEF]ډjtj'].].$"$ȠMvldХv"8ҩ* ]%S6gq]zfht:BkJ]L(.JPmQM?E=* Ļ`(zWW%CvÛ(ޅD.ZI=r"(.6, 僳G!.qD&K6Z7Z6!aNlvĆփ"um9m#KH$tdN7|֮U8Z֓9lhĮk)ULbZVZnbU Ygeϖ.>bo"6tNԮ.JfOԛzW?]Kq|T?^[-wqԃf,jy0' lkO,'k-φ7bo0۷o߾}ۿۿ|is~Mmv ABki66nsp>m$m/BN]ˆIB⦥u3mkZ.Z73&DSZ=96L1Q7a8"ndbs7媊U,xTB|L͓Egsj]9M=WJ=0[65E}Z~b0sH 'u?I'ZtQEӮQNWE-J'RE=XՓ:a UwgA*t%B].. ݚn .% &k!>ED\ؘӣRke[@a:ănM\ !Dsu8L:ijȆm.Yt(uC],R+VToe׺Y~P7A&ģ&p !rX$v$v&Ibmn7fTƆnNll3Fɜl'WIHHܴv VٝϜN馵k]՛D|i׺u3ݵںt(7$La)֟ eL ŗ0' si].zP>h}.j_6r|n`- /,ly4]}n5/Z-r< ,׌f`Y}۷o߾}wobmlӛz2Æ't8yV{- 0|ꌁ0\-B0P`9 ϖZAKpXE.b7Zfbޜ0,k 1-ԣ8ԡC"nxDT]UE">!q"A78ku*8ԮK2 *-!BܴuUH]$ba j%B.P?Jvay8T'&TKa9D dKĆJ6wKKHD*E28[>b9']dsEJk$N ZuPE -M]%qGEkC⃠VxM=Z2hYq(q[!uO7eP2BPu(Y7q( a9$X01ZRɨ(ճB0\L*,w.î7v+̉nU霌2uhE-PKE0aNbybD|6vACZvɜaص$,bw:a2hnN7fmv9tRK$vcIX;8î Vi5oZZ7ݹuQ5qW,`bcaPl(!˃ kE\,Zl?/%h6r%ԛBQ`-?Z~bgkˣnxm4 ,Z  r|۷o߾}o/{ P ɣD@K= φObaz7\U\ su$X%HXa2ZwuQlGfm$A!CuAx ' "E0.AZNE3]Wa& Eu-=Hh"ZwAPEKkص*E]L7bN&97 rm-i7mCs沋X.!gyxOZ_o]l3EYvkx0- wku(gE/X_WP2ܬ&CX%n7 Z"Kim^JhInN-$'ݜ!'Z[BnIk%$A!e nNBTU"qкidn7ڡkF`%E4miLMΎfwnN2M9Qēx#ޚYnUwIJ k,Jڐ:MZOt>0}?}w4<ߋS-6vۜv';' jկ~nax5h=82ox60-hb@,uѸ^xUfxuGã%SHb%xxzVxģ^R8d0`!!  Zjē%~(ą XIA620|aK$ KTӋ%$x4KqušSkw:Qգ!B.bXM" Z&U:=H2l$t!&2pŕćZ][KQZTS7eSǤS[Z֡EUi1QZ(JERo +z2GEOf 2,a7!n8$sZXv96v7 öy8ZwF.!mcZphݵ;7ċ!qh+!!!qh=ؼ*-_j]IJ3,--NTU)Zsgxܰ#N1vvwNM-qJZ;$_S7S;6Uh1-'fR7u71Ӈe`=ãci: ?0-0ox5,b5c` LwӧO>}ӧOM'GO] ~Tom>9X]kbp3:4Nb ^u  bk-E܍>tS:&pSK&guNMfS,$q:RXBYcu1C,ABA"$>ߋxBB%Ë bC61@H}G2J"D20,!qh-upIw5鮝(Qqz \<Ȑ LRw}S] N!CE]]H0,_QJn_QRmQNEQZԡ;ZJ:UNuU/&MOZg8ŋ"P K2%M< ScxMû ij:ԫ"z8nTbN ?RK,E}ӧOM'GO -6c;OԯeshX n\Co /,GnY zǰ nnzK,"^UPb8Nnj!nKY,E"b XBD x8ċ(Nu bMH0Heg+b dۯD,!qh=⪈-I⮓^;(J'`C\e`X.J Kuw&m%|!_2,/i'J':bI'E[NjݡӡRL(SQbzD|S_1M ޵9wb q?1PKx_&a nZ9)AAQwf%^]Y`K,$q*us;@þ`gGk)نWCBk)uSdzOËzVuwԣP U=Pib c`w?ċ:.qmt\% zm$.[+-ʆlI܄K7.^]fs˅E;ׯ%ZZġEвcCic^@;;6)n0{Zī8xPߩSv6}/Zv7A;WUNn4Nwq>0-2uӣMt7o L L׌_30=>}ӧO>}o? W-/wvl 7j';6?-ïRp\N2ؼtNN-Ű1NAtxTe`xUKf6%Az0_6˘ ôaCC: w-NCкn&ewWS,u*Y-anP7!%!HƼ:$KۂrB0116*u9L7[Soz1|oE)bŒ0ijxd fM0`dž"Xv}'[%~($"*tlzW$pau6W\6츰a+_(NM%^mZP얠uJ1ݎ {=hHk,lLŅUoĻTNl޷xW|llͳܔCEPLRo uӃzczPfش fZ L kIoz6uӇo310kӧO>}ӧO?'6fٽ#޵z:}A}lbxT?72/iS|aRxAQ?6k nˆóix8W7XA^թ0S,!nC'gV!n  "^E N(xģXQ/^D@ċݐlCGó+jaBSHWmZ&vb;-Z d "d(JbdXBo`# wIkt^ŤNT[|촨%(JEiQ̝EZԋzO1կZ6:R8xu1|/&7AexϮ(6˴\%ũ$oi-KU= *$N!!/B`GHvmÎOn46KiZT릖ZfsweN1魁 7Y'qIQ7 X.Hm99m*+AAuzr8$$^$` .ZZ/r вvd% !!n"#x:2'-媵N֡Ֆb/&G`88 ds-wW&zs"ģݳͫwxTKP0%N];t:աnwMwLߛ~l8LniM9=7&kӧO>}ӧOiƾ;lͲ{'e7ڝvlz601"~ts%KŎ!bbR4ճtf11RUQă&LZԫ.WEM5|SfP7` z_KTҐ:"U qģxI,A,EPĮ~]EPZUhI,Ea[P,u6˾y!hvjeL!W;M7û S-GEj)45Mφ4_7t>}ӧO>}?O &ebmcic Rq%ԩli:Ջ4S'^D LRφ%#ī8 BxwëwĻԳxWxVưD8$8$%~$%jWԡ%A< xEH D2 KPd I6!2_$A^-N;(갹K,CYZBNKH:7IK1P 2$HByyWD:DQN-A];1-ԡWZKWˤnRm-EQ:QKU/jNA,hzVĩxTNKGjw fHb).h`'qH0|uwCoKuH}ӧO>}o??b`bX&o6v?YvomQũ>cxVĩg:lRtW6l8ؼ~lx4ֻ %&p xV?5KWNA},NF,!A,!/BXC%^TZLԡ%aFmnBXBAACSP\-e&B8_.ANZ:i8Ń .C2"NK$AQK E2ȆM NʼvI'(jEOm-uhQ:-JbZJZ7Ei-\_7PWlzK+(﫛bz0vaxᔸkIZJZSSPw>7$q S$B!Wrfc+S]wݫRiZZCD`NWu^Mx6ԃf=7,`8%ū8|qH0Z]ζyW¶yWx7c8\.jZZ/Һki=H.(;${$ %qhV1Zltghuxsu7^B%a8IJ ӓoGswc?݃-nzPؽ曶z2,u3QoM^M8ũ8) &E:tz2oo7o00=>}ӧO>}o?L [l۰{Ućv_SߙdžebXYPoۯ7a^ؼ-K[&6z60=Zb nv⮈"Y}ӧO.>aF_N'f҉/xT%""}'4,[[^h:q o KiurRWAZ4M*tfUP 910|n\s'[/էWӟn10Sȯ~a71\Q]U⪈Ň5~REܪ7 WuUGE킸/n$Q]b7}Ë]PGtT"bW .n[/1|AܘK\ F"^QHE]G Jڕ&q+v $$v"Bb]HUHAPz+ vEb,v[AdtzQ."j&V ĮMV,SH$ Y/xV/:m\ԮJ'V5tTvڕŊڴ]aWU]i1QR(p5wM vO>Fϋ8[qg8ŭ"]([u_P701}`E1jWӋPVlgq#q8M=:0imzU.Zsfz&Z]Q_2uƭP (bi01l`JGn\ŭx͜6OvEjSb::3=EiWŻWq"XWqUknqG]+'bE7$~BLXQb3jWvef8ӫi suߧ_-<-6$6F"$!quD !aNHmJNޕ$،ᮖu%qڴE7hm U0bq99]BbUĭ`j3BPg'ՍZ7:}7n ,LLAm^Q5PWA?o9ӧ7?5c`YHm;NM WíU>EXܵ-X'O]`vA]]Q F]uPXUĮvE\Ů]QG@Q_Wڴq*dA|%qZħj$0"6J:H(,zQu[4ċxOծ6}ElN&-Jhweuђ[>R ]D A ҉ dAȩ:MtUL/:.:XZPGUqTq[YW&xVlb7E v'ŭխ3дKZo&g ]٠5RUݚ^ bxU}M|tzUWt#H&ͳtl侱:", +~q_YVdu?/v q6"!!!qВ$6$$$$^Fꬥu#!"39$F}!vMP̕eneU"!vuVWqx*v $vqc)RԂ@|$ V"٫Ż꾄`L`?5ӟvhmjS}ëO7}~JR;y01솟>bn)KX}.VWGAW,8]bWJW¨ .ꪈEzQ?n L_7݊*cdc`8z_kՍqU7Mj8+Bؕ8"M]I/h[EPE]6M&AWJg @TJ'j&A].6MڕVծ`+ިuVqЩ "^  y ]TCHg]դotu2]֋&U}WuUzzQYzU b@vY5cEܘ .sAŮnM 2]M`;sb`EP}E]Uh!q#}Yݵxk j7\U}t5a 6pΞy]f` d`2bZ"^edb[}0gX6 VY}at"!YWEK]A"-A⮄.$&!!qiimZ%JK]Qu5ŋ:]Uobuٺ:XVVooX j'9JŪ6uUgAWA}6n`/_I>4710馯Φ/wu1=<<<<<<<<<<#k7&Lkş#SsKPV?,[q^W jWpk8'zWQV0|l`:ZEPԟ#f8H\M*Άֻ%>*8]waxUb "Y]8]]AK"Q\.dE (J몾&nծ]$&qDw=?ҢN<(N"!Ei22$q⻚bxEEQS;QZU]NUZUy5Y](Vꬨզ~Pi7݈*ba9},'W늉"ė / uV?'6g!oAlX}+~E^Afb8j7JgB0Wu_ >4ML&%LgdA%q1zboXH\t&99zzI, [čfYlZZm'V,$$6MBB3Y]kR6-uV+uV:+~N+Vbč&aϮjŮkV5čӉ>{Wj^զF1kí:q0k38*ߪu4}joכf9.};y01bK֕ea,Xڬv&[a71\M KE"^[EUP}&⪮V"~JFv EQ0UMUI*ފ]E|/GE슠6q]˂vEPE:IjWQ)"^U^UURĮ^u/:h9-x,$d"E黶۷10UiQ:U}ƤSEiEUQ.*ZE.Zڴ.j7ԫbW*VW'Wu+vEtG\0B| ^-v[mËAj7}:6QjSgu%~,EUbWLnu`[~VfWG]cu+(WZpW f``HĘLL"1즫E&&ŭ~\ au]N$x&au>'NZNv;3AMgYbSLg' vAV$]qJ^I]Рb3 j7oh$nXYYO,ϬXZWz,"} X#(u+(wuU&RYӧ7?5ϩuQ_`SŮZV[b[}n,Q10ܪVݚ)q6^[~4U|&ĿL⏋]" F؅D$bv]Uw" Q"$AU8yUmQgqUTQZ& GNg?&APZ " HpW!CËծt>cҩjWZNvKQ-ҢVEZhʺvu_Ꮛx_]fz (qga3a7 jz`NW jīuQ17bWŮի՗%ndHw!X}մ-.ڕR+-uYUk7ޘ4Y\i3t6I$l!v͓]bج+"_N$6 ϒ,MB\qM7M_3DPzxxxxxxxxxxNm=XcAYWeaujb׭vQcb8[nذ(煖L&VUb⭉yu]}NJv[E.vuk(x/JDf$("MՋQ|MĦugAWRY\Js8e]vDlidb$E< JKB"6-qRL1Ҫ8x thQtvEmJ Z211jWbՍᨎkqcx#M⬮01bP2: 87[A]M6d,^խ0FӇUz_lx#.FvvAkCu\2v j:1톫Pgӟ*Iܚ3"ua3L$v æ̰8[1X]M e - ²'&qWNa]lw9!im3uZd6-kxz%qђجg=DPg͜vqQE"$$qВвjlA}.6[ju u]7VGlVi\U:g/\:b`g) -#vuU^ot1}sAm믿~dQ_g, YYS'Ncî>W Lm,W?Zh vuuzGz_..[q+E,v]HDb ]킈]%]mZAE],"nqTu֢.ċ*JU6',~PE%j"VVv'op!n$!qТM"ڕNJ'ډI(]iWUQZue6ڕ:]Y}7UuWO/ ⨈A4i70\ĦI\]]ԫiuVL10|ʴ;%21EnŻhe |[mE΂Ԋb2O.͇ZOIlZ`ū8H\$:eجvͺ2Mȯ!Ix~vQt"oxzrȓWO^iiy~Ӊtb]I'զ%][ZZZ7ZZZmmZ֦eEbq~Z36-V3:u sZm_hݨ]XVg+s+ Q7ea8]RL7{L_3DPzxxxxxxxxxx_o֊ſF},YV?-O j8>W4>V? 8 J슠`U_9q~Nl k(ފg]lD.6nQ%vqU(h8 ⪮VH@UBnuVW]Pؕ%8JlZW+ BbSXWoEB3"5 AȐ 6M h':UIK'(jSgEiQꍢ+VhjY]ՍzUWuPGq5 vu7[Eq5Nfx#B|E⢵I\ŭMzUꬾ.nNڌqY{B#vubb"R:WEPG+"D]O%;!,^Mf76$^-6 $6`w,_Ix '|+$6I|מA&i]Nح~⪾䨾nխhbx_݈]_S/jvj`熯8?&.uq_ċgAbB$vqWMQhU,vq!v-jW v!"vuֺ*sQ,Į6-"OA$ B=1H2HDp8D쪝gZ5)tjR?RwKծE[WE]:h՗ V(W? E >4"vc2dV(Q>X]Ů.$F&"~WEwQbbj·nԫzѺ^զ&V,nӻZwj]$vj MLg Bbue]% z~"#-ċgUyӓMK8{zf eEKkgn+@%O:|$Y vOfU^j$-_BʨCuQѢ:JKREyH|lua1< cؙpyfN10ٵ 9`v6vZtxӰ Em3km>n9uwwwwwwwwwwy?_~uڌ_VO0Yw} j3m&{uS0a`:ةw<L7 1 E׊bS?/-,AX8xA-$YEUgA\+E ۊ"VU=)uVԦbĪ6u-nIDx8 A"q!"H,2YEBXբCթu@iQc1s<:xEkUNYՓ6E-Z{u1V'XկA=,aL>.FY\2aX=b i0Mn,"Hij/#_F+#N(jhCzQZvf{v.fEml1#BfVUm״5 }gWjQ uo o^7y6Y 1A+uwwwwwwwwwwyfbӁ}&&>V@bSmͰPgjB ē aɢq[mb3Y {ְMP{Um]-ߣВ4mAE qCm"1^QÊ6Wb'")^J⤨UA塜Zզ.Zh}WE- OjóVW ɳɦb8j:x37Ī6 6^9XuuSM2 Ģu]p8gC0<[kAׯ9?õEBbAn'qq/h$+JZWlbFNEPǵ~4])l0ap0f{S{E_u fbUW'=71`w/`1m؛0|ܰhVlbfXMn<8X L 6kZ^Wd3bU}xp6KE|\|)Ex_Zm-6ԪV"8$U(I}w,~ZՓMimʩ^sՓzRzVꆠ^6q% 7 /\ qClVV0'A}(jyE>.6A9x6c8f0Y|WZ7%~ħ$lI" y|Áa?Vī,ի⋳X}!軠ǣc.֕WhKBOInZbul-!fJ]}Ll!ڙ,2mZZWZ?u& qŪݟ?_~uڌabx߄ ϙVVu[}d30YA|̰/j8&K^*Mo+Ħ>'?[&?.q*g$UO-ĵzr"UjO;$ni륁9n*EAxrd"  $ MQEiQ3ZVEժJPzVG6QSA|^,@=V Ÿ́Q7lbqB3"~^,9&fк8`vhiA/ćL~^b'xX$ѓL -##Eb7-- ţdH'I,|Hhi-Zu ֢uѺ-EkX-ǣV[7$EډbZ Cf"62w dgԵx]m.׵2ixl>.΂5bUWwwq>mӁmjXM>gXMn Ayf6}Ͱ7Y&ax(Xfr-&m[j/6 MS'x-B"V$'YmA]UlbSԓɌMTOxSKՕoJJVqĦk)RĦgA-jՒЁZUiQ{EkUEkUWVu2|NMbSī,6 cx]] ՄڌVALϛg{q[W&*6ڙn0bmUHwħ L>/.ސX<<02#tS,Oy#-_Z$|BkX$v#ib8I$!VG'֢Ӫ$vZ%֛;ZWfςp|b򃃋ٵÁy-jofn94ϫ놽ɳ>&ox b8 ׈U]_ G~S1s&?ͣU՟7 fyJ0aXM&z]]껃ϨMzVP؉7█E^lbB* bO"/ ̈kbSI]6Elsj} Bx_,2Y!kqjW{E@]VE@QZ.ZVꬨUjQgMqp1M>-^ڋ?'.YVůQzx 8ͰmflרE>o)kjQx!6d/q%RxUb'!yH AO=ȗH,ZiwME/}c OJBR[OhCEw"h]IűE뻶vZN``sVW;-Emwf:&y=,6U {j>fxaZNEu ğ3|NĪݯ?Wwn/3,ϙ0ɳ{md?gXŪ\ &11MkS/GEMu[&~&oJ-OYb/b'Obxkj/$VY^ثEkSϩŕ&$6 Z Z֪6ΊҢVuZ+U]kue oznW՟4l L&^\ qgkԢ^AE^ q-կSv;Ͱ?eĪU='/\K|/$ޔI,I,Eb N,|yx$7%]i]$$LE*h]$zD[ZZZm-ZމhӺh-ZOzq`qSI8aF9.f"lvS-j13\Qcʈ+jnbzSbu%5mlvj/>V9qԯRwwwwwwwwwww?75k_j6CՄʰ``r[jao &7V{E0lb/VӊI^WϘV` ^/^igQjD|ثM\$6E4{KlZnx]6ۋX^bUĵ&YgM*jсhjU.ZuՇMV*Xm,VEVO LFzWgEV"(A= kj\רy>VqBPU= M'N&ēx!ĕ""x|$t#-=q y"$ǣ>>Z>d _RZZ֓$.ZZZ7Nnj]$+EB+6m]$8`f8iFbNObg;xaFkMEPjW9AUum \Zj-Z{h oM6â~>/΂ubU"ݝV2a`> Ű<0-~b:MsI]dU2Zg-Xjx[lmd'>Eq]iO(];vZ{A6~Ng:*WĢVSjQ;uV;U]gbXբbq|\Ū6 j/m0Oma8\&3&PϋX/R;mյZ̮Ī^WxV j36ypeir[MóxUMN"Ebp:i-Gu(=<g_o"x]GuJbq6h^2,^"VAbUרM{_+Z͌"^7 "^un gcX /΂~XEf.f먿luaoyjLk3+óɰmEܽeSijxW7*cZ$n)YnJPC+U!AZEagzF-&3->$mB^Ajv6YLkE\0\"nZŧ<+ێVj@.z] bSյ 2ML&1&/ r ;0I\I,J,ZG9RN$<>p:q< ##}U~h1M#ŗ/IHH,Z_ZZ(zHh-Ţ%(jUbHl,jsBBK"hkp1bx2{rx8dEp*3Z̘pbEmɟ7j}N}XmyqԯN8fVzp6Lث70Y {XtX*S8;؛ϋ+ { iIfPEc6KZx[P; ^B⦖ Z^x^,"Ԫ^BCuebUozS 9L6/QNg 7^Yi9Xl'Y$+7ax[ei0bx!gWœp8X$~?H$vN'$# -߾Y7|K]yx ē:Kȗ/n[ʷE+zҺ8YRMZZQM '<``1;;Y=` .fgat:.Pq8L3{Hh>7DjU/ԯNE]qp+V2& ?pU/ 7M6jU3!E9qQbo jŵ=0f&gu ֻŦ6u%(`#X4ĦjoEPgUWNGQZ{U-rmk jUmE\m'r1 u}؄ Z73=2@ݖ\Pz[18,: jgLnuÇf"0{a&Y⻇GćN$<>#Gy|tǣĢu7#RĕNbh)ANk'jBGZ.N~PXVa8IN'N^8\V?qj{c3ۛ:ݕz_?0VySwwwwwwwwwwwk<ؙ^m& j`W^Uğ2!^OWmqm؄AP&^lBoՌ`v%^XJ MEb5Y"Ebg*,q{hQg֪YJEmSO^Q/o=&^7Vq-,. ث کkl1z{YnxWk1ث29q%!x锸wIx|tqXonFuA_5#yDƿӻIY ʬ(?(UEYT\ߡ"1Eb6bGq&q.VqRNY'Mb<ˌ~r+#('6e<*)xX,d"U.JXւQ^h\wV庭ImPeʙ*[U_wݝIÃu/UWvWxxJ}F**-A92ܛT_IHLQ$!!R3y*+U$$M[GQ?:8l;ؖGao*~\ŋs3k6Z$W~x Zk?Ӷn=fqf0ECब1+GieV>O3?(Jq@yTU~-r]P&b?(ēF (' nWNʤeC Y~Pw0\P^/861+ϋY!N.*ˍ qQEwWe0U9 Ths@PN(dPE99WIwwTQÃޢʢMͤ$1.-OJ<  vTLbYZ,A!`lEP('劘r0ŇWM q]<::b%ZkZk?h6["~?)b1lLFv\\1\58_#^XyQ>DI9W^2)˔r]9ZZbRe1xQ9)ReRBa느$"bQ,'ڝY<_#(ܬY+,(?(ʢGP>^P>NP^2܀w7zZbbQHTPnVYwPEb`6O )~P>^IYVBc0`6~/acRNG6gU&UfIa;ښho*Ϫ2C9g=E^@ VZkjZۚ{)'4Lbfd7'*e]e-(Ŭ\9(ī$n*12 Mʣ2Y]f1I,{B!(+ 1;xe->lBxahmv+ʙ򨼯X+Y`td4''畵El#|EUT\yҿܕ~*g X2y0 |J U|nRE_MHQEP2IʤE UQ.K({l*gf$V6u&q2 SV3ZkZ m*{-KGa0=*/2 fl`68Wc, Y fqn8SfA|Ay J׍ A,"M$(k岠;BP=άWUI|B6zRfIheWzAy7(I\v0X 7xU&nt0X ~0h><-\VR{k݃3UTo{w+߾m**2R2 F$HƑr} 1+UNd2CLH;{Ĥʙ6B UCVⲸ]9*e&^|BZkoj7ckm=6~GGadh6xZ* Ne68Wbʹrr$>V<).8YY(IYŹ2۹R 1+ĢO(F+{IYke Nɀ)ˍ\OUy|eaǩ*'{lͪ<[*OHP{Ĥ (&(&Q18*rTf(<*v8YfUV{WmZw:UVљ8)G8)ħ+LZk~c[[kq1d:lB,Fk.~2r)+UcebV&A!.8 Nr$Ti;)kq]! 1+'1+'庸3e~PwaGTPOf3?ie68^dd,`2X+F=ι*UYH2ILL!0PSf Pe}3灄$,!!BTYTsRE2s**ċ[kq%V(^dHJ3U6*6e&^bZkGko[1+'6l(0`pY\W&u1+_(Ε~ByBy\y^Q^Y<-ۘ\+8)OEA9WIY2+'NBN$(hZk}ڻٛm[ ؘ?S0l6?)F'hpRnWܠSLx?<<+(?)O+/ޮĻY9 IPncIZ,m\TeX+KYcV 1<3 U~kU,4F\5:*+N6lU&lͶ(G;I\Pe%E 3߿$$IBb2 IRerNͪ(GXy(bVwTQPxؙTXy898U&$fەB̂2OW A|B,BZk־l-f+(rb8xT;F7Z\Qf!⿧\Q~OArY+Źċ((Ŭ(88)/68)3xBP>hV+}e6>^yʫl6I\1 o2Zvq.NLY$OP&AIPւrRf,(/88x})}[ILbRU_BjUn8%5@Ty貍U.;XVb,̪\s#REKsUO BQI'coLw|1+Q*k!P1+GEqT$fEⷒ8S]3z˔ ,>U]9*+"(DkZkڧc6f6&f*pl8x/7b40/6Z> >TZyXAyxAQĬ2zbRGrsqQ! qZrU.2I^!YIL*Ĥʳ~1m8uU*偻;+H"qUT9)U$2yxYP(GE9*+UYQP"\ U$u8X$>UvEF ݮMыF+(Q!WEPZkfOw+ğ2ˍlu q}IY+I9vXbV'\Lj <#f$feRfY\P':TdF7ͶWKڗx_87l[Iz_UUnREdluQbQ\*B9 UU& IQBHbVEbQe2 .J***q*3+n6z,(Q!Wf1 ,ZkZk~68`bVf1+D{OmY\!W)Yr X xB,('⺠ʣ8)kAY ,(\r.(`6"~PbVfq*\TfU18=-fF>UιĤ"nv>PA{Tdl뺄*Ϫ.v;UU^%qQbXTXI"ʤʤ$PeUn.F/2zI|x9 q&ZkZk~SYPg ^go'e &qY| ʹX+3rQ\s岠e-f̂s(REr2K|)AEU$FoWSDqpQmt268Zʹ.6I*UnR=ٚ;kLTJbQY IbREbPePe(***+U&UTT9#`QeQEEH\UEыn,O"8Zk~ ' ^nhmykv&(/rx8W_|͂*+ke%1:*WU$fgUY0Z۹,9W+U$,jO;vs.ʢEUnVE&~oe"q&n*W%&U&ap"!!!T-OJ4z n4`}_,VZko倍Skxu'=m~MPOΈ8W] ʙĤʻ2ۛ\UH*omFgvd^vm1/PEv&;Gwl]VeQMH"ޢ"$*[**"**L*ę*7ݛ$U$^g"1рl4oW~?ZkZjs0haFkB\4̀ fkv:Ay׉OU6f*UxwU$7`>F_vvAyeT$>^oٺJwUEbREI =ۭEv;LsQIbQe$&UÃ.J,qD{EFcBF>]] bZk~[?f:/6*Fy^Ny?ۨ]mQL;OgіrU7K\ng$]T墇,F/47ZkZkG־e{ίmqk*ZkZkϳZkZ{־;YTyU&VbrÃZkZk9ZkZk7vݹ(omwfγZkZkϳZkZkc3,fU$~*eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3;iTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-28T16:59:54+08:00 2014-03-03T10:54:56+08:00 2014-03-03T10:54:56+08:00 xmp.iid:a1ff595b-cbac-f240-b4ec-2a338914a929 xmp.did:5ca8283b-abec-0d47-98e0-12f252e81b15 xmp.did:5ca8283b-abec-0d47-98e0-12f252e81b15 created xmp.iid:5ca8283b-abec-0d47-98e0-12f252e81b15 2014-02-28T16:59:54+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:d1cc98ab-e01f-9a46-acee-59b8d5d8a766 2014-02-28T16:59:54+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:a1ff595b-cbac-f240-b4ec-2a338914a929 2014-03-03T10:54:56+08:00 Adobe Photoshop CC (Windows) / image/png 3 sRGB IEC61966-2.1 1 720000/10000 720000/10000 2 1 10 10 ;9 cHRMz%u0`:o_FuIDAT; @ayQP,G eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3EiTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-24T11:05:48+08:00 2014-03-03T14:19:08+08:00 2014-03-03T14:19:08+08:00 image/png xmp.iid:fe8b8764-d8e4-de45-9fe7-f223d336583d xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 created xmp.iid:b9f03e06-8a9e-ed42-b19f-6965f63f7488 2014-02-24T11:05:48+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:9046a85f-7e2f-e544-8a38-689aad1d37e0 2014-02-24T21:32:15+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:af1e04f9-eea2-934d-b2a7-023604091196 2014-03-03T14:19:08+08:00 Adobe Photoshop CC (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:fe8b8764-d8e4-de45-9fe7-f223d336583d 2014-03-03T14:19:08+08:00 Adobe Photoshop CC (Windows) / xmp.iid:af1e04f9-eea2-934d-b2a7-023604091196 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 3 sRGB IEC61966-2.1 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin 拷贝 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 1 720000/10000 720000/10000 2 1 1980 500 86Y cHRMz%u0`:o_FIDATB\g.~q' *C߿TՍ6L0L9!f|?QU72+?\< !$0 $^цDaN 1fcofUu5QUH%_'0N jlI" IWRUٰ3L3꥙BT"Z$U>3A`8aV`$; TRQ1!W1y1T/ j"n'NT_ERUb< "`';TռN L5_Bs;SLZs11fI ̽LO|d' Zj`Ø1g:虿μS/2 ~q; m"0" ̘gs! Ȥzel@L9!0\b2_g^鉪a/M &F`.Ibf5y103"x$$j)DlysB`_\T?AT L0HH.mE $2 H!zfL` QE/ְ> 6%cH,!gs%$y8103=1ň*"Y*) "Igk b}3MBLV`VgnLHAry-b9+D0k( A b ss;`}A ,FuD6E.qN@# $b^UP$HHHɼ$$;ATU@?z&H7xgSUUhjvR}`L3̊5 %Kk(̴f?Ď͎1s` f^R"E,+x &&sx,CRD?Ĉ+YHf\Kb60R"sI+9'9+X_2/XCP${IUUK%>lxc6l$ ީ[K=yr̽6,wxg3\y0W03B6W03MŬOL3dLL09f"!-~?96"x24+"qV 3& 0A$VWɴ`eɌQ5|eC؜c#q{1xg;UUU7P۶ꩂ+GH 6%8aـ 3Sf+EPE%f9ED"sIr?) &"Č$O$qs3$df\!8Fc~8#Ks;I, H V$Kj8hx,={ut` sQˈ" ޹Զvzb}` `zf`634g>AE 3,gs󇈞e0wG .Iqy9K%?O$1f c9b$$w9q .1Y$#Ɏe 02+KI N$H+ H44<$utH-_Ih6{TUU-m-Փw+$<|Ll`)Sf30sb1^ \b.1Klf1̘%&@'KĵDadYf<)Da Iٜ#I,asV-WYE$X_٬IY Y$EbIf'XČ'xH@rd^$IAx l$1rl|hLq2y͆@9睪6ڶnTI@<І`8" 1f6gvga` 31鉁`.1UlcfčR^' K4KHzg{$ ebY 3A`'B<`N"qsŜcNN$`M2_d̃%ǒXx!&i$%9'9+8#! Ik8l\K [my l@~dU&{6;`D"CbfOb}LzjfQ۶ႇwLfg1L!NEZBÞ EpghرYʜ0*6W3Ę0 s fL3 )s1c if1SۘB3Xx2qRbY8K#.fb&as9aqE*Dr$KI,|%zq ⠅-SĘ(̎`zfL13ZNZ ㆞):0Ef93cfYfļ.3&0q)LO|%qs qYĈ3^Èx1@ĈaUG s`똯ElK`& Er"19+K{y ,LHY()$7xi cArVǬd^ZHPf Y]H{;6G"XdB0dixwĄl6jvR=D@BKBI\b8 c>3S̴ACR=ޖ^f`2{6W0cf\bf`1] Hpf2Ĕ`L[L  wа8% =s1&Nt2ǎXʬI|'́9e2u:hٌ$`&HvE$n%#z3l.2cĎ4TY&K>VRI qn\b$$daБ ]@T 44H,$q^&]DZ@4L ꘐ G::MCpuOUUeooojvR,(^B(b}g&-[@ L!ZB [@\"6 N̞9ð-Gx f&c6fLL03X`s3ͬ<Q3^2&J,& NdO3=1fVb~-Ak I,e0cbL Q08aj10)30fUr 8e֗9E0Jb z\-`V#vl5וSXbs%WkX_2)W'Ar@@rd/h8$~"og^1 LpAױ'zfL|zcq%;G:y{븟?L!z{{S۶je A/!x LMN'3rD%6|;Ę1`zf|jms(@CYQfsB fl&$ybe: fI\M Ycb1q#X ĘYmN=qD|KXJ '>L3f8%zf-=c,sYW@r"(,+|!$ qQpm,"0ybfas*8|28/WHIlɤHAɵ|8'FAR}hk$~"esN{t Nv a/:?^ @cu4 MCq??vL!zwSԶvZSp"!x,4MK%-l- b҆'v1cS [h^ f`zf)sŒ؜Ag3-",bfksfY*K3$^@Rۉ nā`.GR愘'Z(s@0c⒆i[>,sYQ3K۬O$^"0Q)Ğ%&p2#*^TrB⬆;H"*Wazrf*FIBP$UAO"HBkm9bk9"3$z0 m)Z0D%(f80KfsY"(l B zbYDjb'0q*3/ :@`~ZWfqmZ 1c2QB :#0'Xp>\k4{rx _#+tQąлI{t6R>3U9 A'GW4/54UIܓлjcͧ %DYb14cwֻ9;[jlmq|VͅwݥlqNE۷>?~n} U?06 ltG99(G,J9(%f7$VofbGU,bQjVIĆFl ͤŬ9K<7$"~Y{ 2딣}IP)l*S|^((2+ϕ'ʤ\(PG*?ɻ*Wʤ\(wm{ E +b5x$qҼ9kVI%qV6,VeQ*5rZ'`Wb8 hfҭwEBiJ_V&(bd;Y܊U*_Pe6)H|Ns<$4ʶx$f%rW3KbJKbf͆xU9JugԻE3.U9+yIw<4}Vk* 5mkE34848TU~aj0 Fr0`t6 01?(}_Ǐo,:ߦцjDLvI9(BYBŕyYLv,b$l[1IĕJ41A,%qO9&Ux@9)w(Qw!".ņr/Ķ\V{BņfVf(2k>|rW9+'͖xU2x.^x9k>'ŕ$qIR} ,tR eU5g$C2}EZY9i&_NgƘ /Yy.VHĦ*Mwb`!i>uݿlݥ̺KݢͬRMYUy{i];"nSkʫFS.Rj4Y3+]4Y7kzTM;'TY*T1Z Qapid`h1Xae8*W~ۿڏ?ݷ_,:?B=hK+ʤ+,7LLX"&EO]1khI7 ]' VE܊U\9*YbVŶ3)FʕUnnSUlϋT0R+EJbVV1i.l+Q9(M剸U.M2I裸R(O|T(.YY'Ƕ8m;$H ^9k.hnGAʶV)gJy&Jtu.KJljfYk(g$ I|PUnwCTuNIw6hIU1+ONݍnC-݊GFO4_ep6RktnKIsQgʤ|EЍBw455n՚?I>jf[5B7)4W}JvNSe+\bT v$h5 O߾}Gu?Q=rsPI9(WJwgU&Վ7",fYLXs[1+d 5buWbSfGqbCŤyQH%e;wņLA9QJ|4rbV eʆrT..UThOEy% ^x,xAbCs%+̺ ;R+(D$tʕ8.jͪ9JDsą7莪EK48Us<7'Ql$/Y2%r#1G݆J|h4ό5opc4hMn5YZT)B6Mk.5mj͟w7Zݵs4UY^WʆXNcڞ7{F=Qa0+a#FGmQktWO~ۿˏ?ݷ/jʧ ,F@PnI9(~nfaǛY,V1Ibxd!VV(XGfŭ҉U̚El*ֈ,'!6YLY,J 1+qOYY*"UeCYuT-ITf[L|Bl"f$ U%/h$qVe==QVXtʪ+sqM➎'b[UGU,Fe+7]jQEl*ϔ9e˧tջ?ɮj tgiu ;aOyY,:W17Gj4r?8b/Fݪ!hh<1ZUG?}Ǐo_Cl,F \+Wʤ[?,kHY\Y$1 b`5ڛ f1IbWFW[q5ʅfW qZ98) eGSnņ򪪲\s*'In0 e*ͬ9]DyIysLY)r%(bV(J\*GL RU'"6QSCFhV,Ĭ{9Hb\j^V*"$6IwTs!f%HoN"NJy͕%&UI:}+݆ͬj ]li==fs'Jw9G݆FxyV4_w+9kTW)ϔr{W&;κ{`OM\tW9v_I"f2{Wxݤl+fQV+?~GbĬ[uC3Q&rPFwO߾}WGv~W4NS>ai=7r\)A<K"bWb,f1 JjF`$-b\[q4*VͶZW9J(GqOg)R R$}IfS_`iqΥ-q-G=;*ʤ\*rR6qt̆R+ʤrPΪ$\){GAG?=x,P`[JŖnV,:r۔IQ"]o NGůl+Nw_1s4i*^ʍkeLʍRʵ-F/(AUVa4UyEB*Gʥ?fg+Ӎcψ{I\J] MMn45W:c4+o. ͦ-;`dL_SAYtF~;{QFFF7k&#ݢQl+F[~۷?~n}NPiI9+ʭrVdʭxgg͍"fq%f1I,bl ``dM:U05,As⨛5Z9hnݥfhJ"{Q)ЩDlJY,OrWPVݬU.5褙5/j堌ĭxUl(7v.B/]9)ݬ\ ~َr627ʨ D|tOQnkZUy V1+xIUUA21+R&YRʕ!n${2 (&q)%1ytg-&UiV$N,f]5͢\)g偈GhR9"Z4XXur̺Bj><ՊӺUT]1)t[t͢=F(Pnu: kͥ+B;rxUQFFG+*qq܈ĭF7)vO׻fUNXT9+/)1~Q/hn[*b1 >-fN4_Qw%6!&!Sr8Iĕ($$^[, f*JAkqZtn,&E=2(幘t|MUYq]+MsD(* oΕbY` {Fn"V̒ŀ&d0;U1kt ͤ;(GBl YkTY,ѽ,qǭx]ʆ(w#q|Z+Rz7*XE\W(r_yAH1X۽Y%f{GU^8BY18+1`gQQ .ĕnb'2AąPFh&nb[+=YxE)KUfFyU9*Bl+eUif2f3/HEGL qitW48h6t[ͬ;R7Ӝuu_Q]1B,nҚ"5Pn4FY 5;WEY,Q9iRfXU9sYħFYb\%۹ۙtޥsnFMVyAѪʍYݤ0 bGqލQ7ͬwGFaI\y۷[v~K2k6 hPʶ=;L?ĭ"&Abh@lq4b2'=!VEwFwQN2+q!nYĶIG@[1 e2 r+һǪUnrWL;JyA5rTNѭUr4(2)wkU$IUUjO1Iܨr{~:) &q%&q!E\]kAk͢8 e,ѥ5qP.5RIhD5Ns) BĕH|Mg:1-w9h^R.WtF*4BIMscQZU.tU4z""h>*huS]bWUC7Fq\jn+F/+E|3K|J[Gҝ&JRsY9̚r4Z5gJ7ʕѻgEw(1+wŢ zwVFC7bÞ ;';LYĬxU9rR.T10a1ixwa fUhld4ʀh1 &U_{ֻo߾-j{ߞhՆhۀ2=1l*ΕrkΆ7vGvfU ,]bQ`ҒwZ\ĕJAY9hVt"1,.ĥąxQ/)rl+z&5RBh2)OΠ5t]1:)G fhCŪlEyU)G@hVfYBQ {n'=UL⾽*q1*&q,E\z3iIAŬ,ZuB\fA1RtM4bK,U$ׅ"qT%1T$>JbCjfE:QSB<1:)FitBٹtդ;+4AQ&Fy.f58)}khtR)ޛ Ew5Qh~rRΕc00/*_R6IVeRI1*L0I޼;0xwRF:ͬ+Hh`4?8:,ʭ b6»цw߾}+n=4Rmm-B(7LwE⮝YlY0Fq+f#a`4,` fd8+q[ŭ nA\)q+NRLBl(_YA9(EBBU.$q<ϔQ+e[mB Ty7 nE,U)[K\LJd=2FrRV1+ܵ7+Uag'1nRĦċg?c ~IIĕ>4'͢|ԝĶ.JFs-<kR2)f֭R)2ie[L*IvO*P>*n<,:ͪ,^GR, q⬛5 Ij&eUrtI4te1f#]U>l{⣸fս"NF=VvGZ@ܕӬz5UzךI>ap f0+Eq$T?{D8>@RDVvε¬fYR]>].Y|*>=L,EB2D<\.NlF(CVݰ݌ 3EfbS~߬](N)Ol R "|a/̈́ɹ,nSA[Xyvjv""v͂Ob?g|||<ϗo5:?Tt&Yb6]yQ>$|]wb LXb C04&K&Ch.I4ͪ!MJSt\E|'6UxUxx_ I8(ʓrSoD ]|+**MY|ܕSU[?oW&p'.N'MwJ+We\M)òYW !vYY-V.rP\YU]TY%"ٮ&q*J(,7bIehh,45'M\fvEs&;՝+GPŦܴ*A+=}Uʦww(eo(]9t'jʪċ8wCz4C4O'[Y5z3tw;hޭBI4UsHU**'U^\i/;mf]fW~U e0IyQ~G)/XuOOoM.I7iFs3DyW5}#v]-tknSʓBٔIY!n&iOÄɉubS-(n0,6읙 3q .].5rw6MUygFyVʮ<\53;]0bL&,!&B3$^5W8<,vq!Y0YWY&x7qijgEe<)BlJ` 2\_orCyGW+*SP~;7zyV:?+ qP6妼*<*uA 塔!.,ɩ/L6A%vObWGcx(7\<6qy)ϚtC3t7[U g/ʪP2bUUʪPvAYA)CyU] ·'e1tq3bs[U MP:f(5z)M)ÿ?hϧgMfVUl:r0~4xbG!.㏿G|\qjdXP⡬&*̅ٮ,~03{]<Ůr1"1L<$xh,FNʳZGU욡5-VAMF *6$$D?UVLE\'(et3e(CQ|U堜+Q7 \b(g͓Ns+!div}Н dXw&_U|Ue(wBY-VR(A)U6AD.H'ʋRVE"VAE|wqUs/bf8(7b\5&bDs!]+Cy&NDyRUI%FМJy#ݫhnc]3t4b(bJ*7E6[Xuog妼iP5E ]5]Jy#& ]KSD*5G+tG]yP^4:y's1#bUnU*ϺZ%HlMQ~"NL&[CUEs_U("(WO.ʙ*WUnx1;jUsy(Mw y(M{(Cgae5>ʦ/OOOoMfW]3bafa)BY&H&A!.㏿G|\qjdX`*?( ࿼] W񝚹Ӫt2?ѭj1LnZlWyrYW.qg>!vy\.xCIwn2,~0|ܕ raëxWlw`bX&ixv4ޭ EZxWJ*V**vPv_QRYVUyQVyoŮXJRnGEy+BN |UU9W~OݚGy,vi'+E1ba<+-VQ^L&?[( E]Jlrqr]afr*xؕ!hRU<Ħ/6P4O:MC4CPh|~:i6Ӱ4&Xbad0\̳W-[V??Q<_.4Pmҝ Ln[Ya제+̇W0⍙!V&C=[׿ _,tM X,\f.!&Ub5O"y/?6Mw&7;YN*v]ęY.63Bd2dC %bW kIfhQ<]bh7BW1b'14B WqPbWNxD\9]* \GB)_DS]cU(7[BԽsqbPe y(vՂXnazFsU&\Exш]4$wbWv !bCF&A"n7UyHSeN\gmaqPnʮ*JwʦuC*x6SC)皡 ByWQx5y[u]*'&GR(LByU eU-ʪʪPUم2D<+.₈IUxu09jވnCy5⦹ NC6h5ߊM\Ϛ*z MYܔ4CHٔwO Iܥ{Uީ"/JyXE qU+U)_4bbvUn&]b3M&CTEb.Q<_.6Mw&osYsge( I݅*d!˴XM0I<,v14M, Fir*Ll ")1* H4MܔsQbM)Ms&!DܕU[ܔt=7 eջU+!]yU\e4Mf7+_4DzCb(ʉ8MwS&RUJIM <)/Mme7*PVdXܔ*CYʹ]9*C$vrqx7ID\[b&ċX-_rլNsĦ;WCl_wq*v IcW*⦜J+nW**U"bb*Sn(C,42tE9U8x(wzwךQCuP4wSUI.N$v.q4=BuUÅ.nb] !nHo]tCl _⫾&麡Q4=uV[.fW]"EK(."*6g7rU ʮӽhW!vePDwq0{rφUX5b论]sךɬBz"q|\WFV24uyw\M.v|ڔO7eUv Ӥ \0YŰpLe&A,*v/y/?Msaɷʉً*ʫaMyP&v'o峦ʣ[UV.6nў]lUM{rf<qrhfx2ѱI<o4C'I.6nƇxصM Ex*P!rU>IܕotúZX}Onw͸kOk.x"6*VʋMhxx鶮x*8,-VE{4ե*Ք'w*GaN'B=(7;t:q־S.یN]Sn' f)ӴjUv4IƌwC!venbW''3j5uOW~+))?$vuV:Y}c_;]b?_t:ӋFۍ,VXXY(U];y#lwM,>YlP.m$vbvI,҄"(UGE{x!)C!j]f\Enf&ʫU(PfbӞPC% ܍'IoB<*/EyT6ޔGCRh//f/5a'|(O!vQ9v7Vv(ʯš|f)\I,.]()EYĦ}lE;gN6)f(W8tۭVPliҌMǡ0.[56]4f"؍nCٝɓf\5Քh agCS(Of|7?[~t{\-dqXdeƌM#qM/fz/Ѿ]?_U|>߮?㍶Y|ZܕNܝ&vddqa]qZ,X$v]";[Xp~H,Al;UMēkO!6qA)DZRHU]'UEծWOCĮ<]*w\-eS>C(]J*Pl**ʦڦOP psYbM7!^]ă,ća/&>ὸjEhUm04]tL+&"r5cW,q 8ﵫJtY3^_Xq5tٕGjtPFM3;h lw!1(w]sNTٜ}f0ьk6Iv'"ƦڋxҞa(}ڸA;UQvElU\֪ij7ҞMxRʗ"Xmź:!>vQnahwƓrhAyv3^Ů 1Wvrh_X+_XbXB+wA(PUٵI{4P+ӌe1c$6Uh=qcӭ8TibC\*B904M3kA -h B3M3EߨatihWgz]1B3 'an<fXPlS.ʇr5~rS{U(,JZb0YfiWaJ\&vg[WN$,>kwZܕ8݉ؕCˉGqXl;;ci`qЮrqfӈ]Ej,C{wM.!vq.vm$vqre%6-Fr7vC{2t<)T_/*ĦP~&WnhWEy2`||<+ߛšƦYܕ jXI&qa$6YMG-'Giw+:6͠bh&&6cMhƠ)8dģkƮbWbFew=8TYʮ۫R ewnU.cѾs9yUć{$q38 'ڳvSvx|;ؕ%lfqIbA4bB̠50Ң٫]DiM!6bqF٭/9DC{,ux.qwL;Cʮ)|V^/W hF)/͠"b)rUIyP6U*ʦ \Pʇ3*úR(T$6?CʋM8 "HBćJl Vkܬ8,>+w"^)YĮwĿhf1'6M4Gv16$"&kYb7ijq(nU3nh:6(qьqWeދMt`zlm\` bsrhw8$^$ړsʦ{Uf|qU{%guQވ"CbSWcʇ}(8]6MrQYl)7/⢴7ơ}u|Y1EXmq(WPvN8;.h.Owq1(X|ʺ,~mqn36nf񤩓C9Pv4mgUЌQmf\]͌H،/uqW.>.~i<+W6ih36+zmW m3 9a.$J{cXیllm0vд2.ɘifha:{R6|(lSߥ^CͿnv(wq[ج+B۬.V YZ[.E;?Ï?t:gKg a|gaKNCʮ\8{3Flg'gWb2$bmZ#vqM\ăh^R]C.^EC "h&vQ.b3HD],.B;/UxClF\DI*&6m7vMB)HBœRn2M eP+7?ehʦXCobSrSʫ]yĊR!>|euWeAZJ~ؕ])KR(WUrUe_l~U]99%?C$6Un~eq>D]q$vaVc&R*"CⰖ]OŮzUt0ɦj3$Ʀ:)ktlbcbBw]fn[ ьT4bZոbڸ,P6ݮ Šbzh^'V~c! D{/1Chz*WP6e'eʦ ϟ6&ь'7!UMIŃ mS(W"R]1lPЌBxjY?)/IhƓMkaFM c3qOʮ}g{dqz#.Vf{ZbӥhxM]rSvUvmƦʦ U60MqBq5/$U\c7mF3J9E_iiOn\ԢQ2hW͂qAì6U7cvAvBwc"h3Cqvf͜Zahnl&b7mnf ʦrU>M)/Y;bڬ +MXb.V6 :~՗㏛?~t:jwC?Z{ح'Un[Չ]8ٝ8؝\%vn!v+V7=J;[,ktga&]">EjD u4A\2Ml.q5n$-vM\EٕxR5("D$ e2*>1%o/ġ q!LwJ,qU^Ń ܵP+Ob30ڃrUC(WvErS6A7aa^9e!}VU,+î!(I*RE);UM)*Z*RYu/bW^&#qO| *Ib=(jWq]*XJOAeM~%&HcHBǠd.ۦbŌNMu+Y3(I]3CrmSAh*rUv3L8$nڃH*ZٔOv5妴Cd m7*qfƋS!"^ujƷ.6IhĸA+al0+ēPL\2v퍱+ʓrZxʋ0.auʯm=ɠlګ+qx\MҌ"^-v+G_kG]vq.ٮ(jUU ʦE94ʮtlƋÌMaløWRn3NUE)Rvk5fi7M3 Ki1Je3t .Z8q CUbSI3Faw`tqF]١ +M3cՌkƓfƮmOrQ6l~ߵڬڲح[+͊2Ҭ^؍//?6?~t>/Rիn?irvlU슈* ؝Z=YN'MjEHq]M{'b,AAhĮRb&,DZ-ʇx*.bnܕWA1"c_7%ClBP QcCxjY EP>+O.ʳl_wT*򡼊x<"ڋheae5ŦMPvo'!ʮB]TE QET+)VEI!)L.MCE-IWV'qW[R{xYY2Yʊ&ڇv3RMbݚ6MJC*qvċoChtPrwбk)]fAyT("zlZtf(7\D<ĸxҾҌܵE243~mƋx'qh7U*B<ݸ FwK[1vmq7!%q(+MAhMơlƮ]FpiE(/V4畑\46'mƮ)WƯCCdlf7,^,>G\bVՌnڣwBYT-:b=kIltyx2iصݪ6gq(BWm7C{+(RƮ<ծrU oWuuz[KحvMut_jog~?~Q|>ߨ=I{K[ZVg,v_CXr3'bwr,Y|Xɉ참fYl& \N۵H)DlصnwiwwQm|H0qPĦ2El*( xoM!v8r]U\$BG%Q6rPl&>C*wMū1&6Qڇ)uBS6kI)r(Wr^"'eMhq"v63&A)WUM!V.P*wXǣݙ3ʼnUӿTTRZU.x3?T!c?lb8D5ƮPU.{e[]-wM3v646 F:ƦEElD.A.J\D3_kW*mUf~hr1ۋ*dEwj()JTٜY\qv7,(r:McS١C3(M 1q*ƿ\Q\*I `E7f\i36m7.qE,q/q5Dp8,?{$ɑ$R""~uU/""LF-D)BK!V>.ݍnM;tIgkS]^ivLmkoi -Za3E?^446aIS˦C3d[0 ]xhR"urQS.LTBiKzSK)LI]?TB*CY=kvf6i ᡼E4$R"Y>ʧ0}؅맩)SC$eI_p3|H4C۵*),],i*Mо(SN\4گʡH6)-M]=4^p%]X}WeCA rsz'p5E-IMtrqzo10erS{t(Dj7-I B\)K0d#)T""^z6U2U:)9(JQDX&eׄHRE2}+F]XRPLwY2IKY!BLI)$5Mڔʮ6SLeݴvh}EKRe w%JVej(RZHԮB )CIJN))r@ )40tU۵凱9}jNwIm#%JC)S;ii7W6K?V>>>r\W/T/jò _?k˰?|cbcXi mn6~ Cn16u51hԦF{FkeDNMN!쒶)]E:uک-m$6mi$/CU8v!UiKӾjK;StZu;hoCۅP!ک}v%4E;d)0'wPxp^$e DمSK;vtHnlÓ Kw6FD8DZB S!a@yіWCRHSKk>u.ݴnnSvwiҺmnK{Llkpj,mv᷺C{.<aIY*-m)@Q-MI&ekSmmI(Ch7mʴKHej朗ˡғ"|“t(vɆnJ$@;!UD*nq1a|FX>©-aJCIKڮpV!}#C!?M62emIUF5{n_ E9WTiv-Mݤ]NwI%NUEH. SZ$-͓IEiKx,"<+%qq.rvWw$PNUNވ MIN4A{Tv)ɤt%J#d:T%H°DgIn)!!)] ƶiAZ]PF;T= ObHғw!UU.4MGm2 ]AYa)ۡkwmLF,宑lCQ6Ug:*SYNMԥ6EI *EHBY$B}:D 0ӳiޜ6SkK!MY*S򭴴gq\׫HK{𫁶!xִ r.u{aV]n_?R\hhxU:%hFY:S KHKZ2l%)b4A""‡/zY>O.5,Ѵ.`svH6' hK/[YF{H{6à)ëvWT"m4RJ SIˆvaW/7‹DUT.%)wMhAjC$EUz'IrWHKHS"iwWK[Eka4لKϪ%b$)U"GKU2meSNYiCE!ڮMEЂSUe*2S9UjHrP*"E&)P!,U2[GpʔWS],Pd9TtPd)pN4OD[4~zN?Ϳic$-,iJK٥*i)o%p\*-^\.o$=] _ ͷF{KUWC//zX6_l0 %hpڜe0 Akۡک ͇ڋn)]:m9aKw.Lhv̬j=)2:d(SMhMiFi UvhS;';aIjvVm SE -AR-v]S!jnڡNm)BX*-mjKЄ]xh/B vAV8 Kp0UXaxRw!2 0Z5!u=)+%TEo%%.ⓋҖzuS[!)B$!B!0uT2u[eU5Z-mj7-[3Sc =K7cm}NM ¡F_N%-0%a$ن])-&,m HfK-u;THF[Z#L2Ch.J/)|H&t(kۋUn.RI!C(wװ UtH%i"p>>",?7>T!L?ܔ?Kvh/67mjW|5ʒ! wGd6|EZ2U+K.nڒTE"-UmƠHN-ب5ii&KJR%ҡbM-Av CS$WWE:} E.i]incE1\7Sx(_jFUc8]©2072aCHQ:MJC",M:CXKHK,E )Yi"L\LMU]NۡJTmjT*S^C]k7[a Op W"(KJHJ2uK"II*eUN1,iiJ0UC:Tai3SZZkmZ]W]vIRHMH%i%܄$J!L%2U TJ2]L*a1L# Kم`cb),/?‹'?5g^ESW)CSRe4e2o%PC[6?%<B;o O^ 6fj O7ex؜,4hÔFS:vک- ieʤMe)MX Bj=h_ɪF8)iqlI=\UjGy3#1iw . !%BPVI!. >+nob;h[lT.qwerSRDZ9q)[QqS85Smk[.(5Bk[qb Wb+[ۖ|8l)*ߚUS(wm@4Yov,Byĥp8JEf0SMLC)ʇR kG ?)Kr1$_-qJqjղrӥLvST"E EݕBEi)Ca\0P.CjAR gۛu Z(+Beflch_iwav7 Ͳk7W+Wd0#q|oX.7PDaT[Mih!N͸Q.i**T%Qqr8ulY>$f|2N3[ZM5Aۚ6̸E܌-NωSl".tO)RåUfrj44 i#4Z30f-&4ܴS(9h[\Hh]gCdli*jl8EJӒ:N6CVn]a܌F;uhb Cg+Np*g?ᧇeï7[4B;5غeк͛gm߈4o>,[3ۛ)ߣ,[-_-j`90ᰅe-.x)7BM.bml[7r$ж[NM8ӶPؒ -xWooM+q/d\ʩ4e C"xWOe ].A)[!_ߩr8ʇ)$ĥT.I9⫲lS>t<USJ`ٖS|UNU"^9.+$UxWUU⳪ |#KlzV)(JT|8RETRK^ԉRoeS"#EF3moNA<)޽9-\$eU"Yl*wmE+)kw'AJ]Nqr8i8hN8ň-H7ړ.[j ѭ(_y(Rmr*')8Jh[PoUxV,jʩ(RRMnë5+w9"xrᔸ^.aliJPJUU.S~x.E<$.qj5vw2a8xoK`Cĥ=YYNq "fb8T)[Pē1 4TC{ilʹwKEsh}57Mnؚ)IkwnhxZi}Rn]EQMiDSf/r)wn UUBxPOwg cft"!66ǴO]wBŻ{l{MmViuTc8j͸[t13m9J MfKs-q)"bKwf8ڶ-t"ALD$/jnBZﴛj_㮜*NrS*FDܔ*2bۛNˠ|I)7rrP5~͸/ƻS::>[nt;+֌KM)5Nc{}]QXNlʳSD.N.+ж`˲,ICFb^43NC4>IlQ)>D-wR.nqJQ!l؆>UI.2޽x{AgElc|o[8?X:> *[KSGi`itQ)-,7/['U:lUY*B9*[ͨEqrJt{{8%vI8HӴ 7m$N#elOk[*唨gSQeX.gU([|#ʻ)wUʥw?=)VNUl_,(A .%Hؖ+_NyQ.8PlT#,E{wжr rZTiJKqJT9pH|ʩRERUFzK~!HD7&}u$w"0ĩ]gH"O8qӋC)[ ]@;24p:Eۢx0M4A$.qJKآe+غ *ϪlCvrz|F)[.qĔUBPe0V1fhO 宪pU9gEkTQQR.wc{8b_ؒćFcSrAkRNT岼%8JP.ExxuJ1NUN3؆v"nsԱ-aƥ"/d| TʓۘRt&q7obʥƩi5V6}5>;YBe|u^lckek[dhՊb|2qys͛ûGo~^YNg5chƓq9$lC[q8rYrj2VکƴC۩hBL= x(JSSV"]F\ 9|KSwAb!1ƳZD魉AlC*Ϫ,7RBѶq)*Bry1Ӱ^_8X ,Us4^^z-eRf%.E:A;AAĖxc<{lCغ6N̈zb58;Nm42*ЎaU-ÌZ8ܔO_~ ~x_6n"zyq7oqv7nZmF4F\|5eZ8ж(c,PKoplgP`9-[pؖlmû= ~A]%dj%!)N &M^Y~W^|"{"!)nS$ QflABi+b )AQNQߋA|E(q)L|ϖx(x-P*> D{RN!œ+Ky2N+Kw]qPl宪S͔Z--D_$%iʫL9RlC"nbK_Ԣ(VNUOJR*zQU"WU9%r!+%7Dp"nڷ[;[9- +]Mq04ö$* V)w)wWiCpxhûEwi&ËS 8qT-uV֥\YWcd(_KvSZ#NULk]\J٦x3[A)e|RhRBj YьK,8ïH[2xhIU ehٰʩPC]$D"fkJ|ƛOʟ2wf<_ j]_zpKĩʩE*֥|/ՍGĩ=SQ]NUNU|QʩʳI|8ƌ!'3`hÌS3t;2q*oOʟSنfBOFکi, mRhͲͬ^YQ4m&CS #MKs8U9J^CGdCf9ēvciF C1N խ[l)zʹ$J)q3CrF*VY 4RJ٦,O*8X A_t^^0q74޵ckkyoZqW߬哲l>)y~`wgi-qY.rj^N],wKD;ElMjҶA!Ķh$^XNriґ"! Tc"S -4W<'r*b-]|#BY&b-T4QT7qWne\[A|T-3HP([y(7)Pֲ*rllEOJ riÖ">g/^}աܕZN+i8(wUrAyOST9J:*J/պ)U޼"GFو7MbKyW[VNM{6`T$>kvm*2br:[jq,qn,/qJ\"7qh3uvSrN5ˇU]{7F)x74cZr)B173Qʻ_ʩ|V,TBZi'K6~Owm&,bSR(ó*erIl$qxJM8T(#N/7[x)qn݌_A xCJSi3g($-HWA7fʓb fh^.n|VNؖŁf;TR vؚE|7KQьjߌ5a+wCSKSũl)b\^\RTb/MfTIlZq)U۩ʩ*Ϫ̨rIUm ӌSbGiͼ3%ffxݾJC?+MN)nZz1hUZ݊^c E;͌*Zzree[^w9 ")yqZkՌ49ӠlrnMޜBqʼI`22>ԛ) *̸,5_*K٪|(r\~8X Aį_qZ6 Mfh{7:ÿ"-6,_r:+[|U_E|'7C*dlFlme]KUDHlm(q)[3^qSU|یKʇ*P'U+7塜\JR(kYPć*Wek 8UxE[r7,[< Zm(UT9%"-SV8|8Uy(ժTQ:UUQ:C*D]Fno+DBd9-,'qxH\aIXH|e-']Co"NGlmTe[0mn[z%ij!!q%qZρJwDf4B;2m˸)Zw֌J F{NUf(r7QnJS]90ni1֌B4tP岪 mVGUpTNڥY$`% "nʇ_S[Sj]Rll ʩPKgq ""%.7q ک!NA.1ftCDÐAtK q9咖!%1qJS2r)qWC)qt2NqNrSNM܌Sl]f\!2qOxalcv0&ƘeƇdʋ˴<k)O:&>C~8))aRe;E; ݔfVt=8n4IE=~5??W Av:nF7Qc>[m-U<*[VU>Ǩ)ݴr7fCF}J6b/Sվf<ժwF{e6]E/[- e0X],z)L)]_F|xE=\.DH$HHl4hS3azl]b.:fh mws !Du9**B=(GqUah͐2QFUMr 3fJ-[V\Oo-Ö\t3ݏac~f92 h6ck1~o>o.S'ؖ *e[l8edq-! Kgq,Za71L2ziۢ[a|0iw=ݾM MJ[2~(*IQ7KF?O%~PT2%Zq7vR]8ʱ?T~ ĖrDJ7Ro-f㲕߹hke.v\>R/ 񰼌_o"ղeC-MlU viv}WK_SJ 3tM"Ƨ"Q^9B)TE)?k1*F٦B4aQeX~T<|ST.u9bUZZpyŲ]kYX=?(v7m*e#Rxp9Jq),R\ (oFBR,/)\"xjxbq7YhшOPQѶ!C;xx_D∰$җf9%hV %[ "֨ߍSBSZ=3SEW3nll.TQ>C9.U*ۅe[p⩘r\UJT*J9NPUURrd]^\X>ED53~v].Ca-HV/R i9B3غi0$?O ”aTIl!o<.3҈}S&MWSUVό)Fjzj0I/oJ%\I-r aƍfF[0.H qnZCH3 жQ6 3ֲ UèrqTVيj ›OG.-8p҆жnƯoM\~6zu]+or\r?{Y?.m9 tyjEY˶m#ŵXAh)wO%hGMJ!1H:z-OThK!8cKՊDRG%Eq$R7q4MW1(rߌ-$aq]PCq׶`"*!Ey?)!bܕ/]+JU+STVZuU;5<$,"!#.Ur\\z.G|J'SHhq8 E[bhSYC-Oe[S[>Hl],W]b%!-a)3U705 mFQBU ]l#c+OUf|ӌc([|Ueܕb|ZEUa]VC)KTe+)UK UOAB9%0./Kwqn\lXe|h/e+VB)o"H|B]4*%fA-h%ͤQHlqD ).J-E|*P2,()#]{(wqW2iC3.Co^b.E\>(OSyrqWڇR7/G;nj|*xvڇlʌT[|Z[[mR68 aQq-ݎ!JOiQ M)C8㡻)[JUhVWU*_ A\DbƖh?۠*v ul!$G[8&҄0UU+J+[[yZZ5MeR6ALwYj(gxbTEZڏڵ*ie[ -IS#$B"b#oZ/xoC17F cLk!ee"۸63fXJbQ6,PUr7Y*2c2c{{f?o- ˟w 7oyGm3=Gӌ1~5gCoBQ Lg?c ˶.Uće[lr,Gl r,Z,/mHwl 툟#V<+4Atk-aq)K5]EX^ƌiTCDܵtyj"-(/qGGy)GUT(2^BB!x)OUDQ2G9B<PDycH+OS!Cl)P~ߔ_)R?C(w|SWC1 ƌь47nBKoP?\T囲-.i"?-?0K%⪵Nlɍ,mC:1~0}W[rU>֢O\ąؚY\.OU%qq8hDPryȘ%F3IB Q]CވL*O%^QĔ`< xhwMiCT Jk{ wVL5Ve;"%&$iSbKD_q\D'UK#~qBYeXe7qR[Eu]c{XB73܅1(Bߕ..֛'7wKYmӺ$x Gq_!6G|"(刖r刣PRD% V V~ʭʇq+K**GTQO1:DBq*`mV|X^va|ZlY.])UKGTٱ-ı]\*ՎR(*G)_#RTV.Zj{;g<߅HKb#8~dol"q^%{M90ʥ֬"Sik\"M;4ЍfoiEmӘ G3*/Arino]2SaӴcL4 CtKb|hGe">ߘnqYCǸ._&ކ.o!C{kh3qݦкcKTGiMմ/%(MT\jTQmfU-_ _%.xkP2#qYe."Ÿ0%0ЊU*.Eю~ t0qtCQx<Ƈ*<ca}+\xkPeBUߖaoKEqK$H$HD Eʧt1Ñ̸=]1.3Ch%<02gZQkM5G1fJaqam'U{v鶶*ܞI|'Dy<~,s<q`mx: EUvlX/۷o'+1"Ӗ)(Gx8˯em؎6.hn KX4!~xN#F\02ѴOħ)޺?%.rOŌø[Kdy´[,/E񓢈K⟨VRqNUq+/(G*? Jy)Tq%^QU2R$E(V5.q;U.iS>UycDej>/Ub/퇦ܖhrGT\؛r["anUZ(G\ʑYVl8XDm/RBeG\V(ڭ(GQjSnۭ(jUTEaKSxDwzTE*XS,k˟iqlo(Crl6h㥖c%퇔b{K~)ʧvYfKqF،K[$Y:G\BoZhCSmh (ԚҊ4C S.5hG ]ivB1P>RnX-mД6C8e4M9PPCv)/˭*۪R]^PRE)?U%KSRBʭve*"T")E!*by+zE#^f[r,qk";Tf]^"v8S4MH\*R&.U"ЌvLa#[*E ØV^`K)*G|xIWmF)?[ĥm0K9nC.Enbb)/|j`hE.52.2ڇFKmSQ=P#E|U4)(iV%q*]8ݺeʥX&.S%C\ x) Ҫ(G;*Mm3j. 6͸$=KBQF\By+GS-įƑҥ R1)/ V^j\K2%f[թQ'fj3޾{YA$R~J\)H_/MP0m9<l4a=eF)r EZg ZOk%bKlϊf2S^Mm-S.=>t\"Rc-r)#.Y㲿^xdzӓI<<5iU?,/ZkՎW(Z_-v'!#r,?eb,G9Bc\m-K|*_q7V8M$D&~x;".=v)Gk¨q)_-}#-APJH!"B"n!RŭFܲKdJ[Gj\JB("(ʧ?[BƧRG"Er)WJKJC(_UR~chUrfJrK[QU(JRZKB9" a=\-TeI|r%>-rkxKUI=M-ƥQĭ*G([TQ孊R(ʧPjTvbۨ*Rm[b)">$;ay>qI\4%^Bae_loK/C*OƦe{YWfOqo.q,AZ ˌKKtτVVi&ST{)h9.IkBR^jeB[]zx2C;/e¨f(AU j2APU.5 K˦ʥ,vRE)XBM$Kq}-o;/[Et$.b=[۶U~#z?mcX$ު()!""wqcMfƥ#6쪢KB\"|vl[#.i3)o!KޣiKq+aiKB%nSzjGoqk")mƯ_u3_mbf]OGh_OC 8 "n'._ĥ\ͦhvڥPR4*rYU4.5ުiEK(KeҎr<VCTrR ǂ8[_=}qӨ.OK"qI[ E0.q$.3]/*C{ieTjZya'54]J:i/݆nM5~boC-p)GU.I8 Ev IEGDDbfK"~(/rt{ HaS{4eTOWSfHu+FE%L음 8OOG{vyRq0x0 ͌nE Em۷o+o-oO,CxOX~?,eb,G9,8ea.j|(C'Ňnv T ݭE:F|jhǦvE*eu(_,֎[/"ħ8(GV.CSxK9rQĭ˜v)WVE;S*tʥFV"r JUK(vqiƑrKrQcI.E,R~R.U>UTTjcQ. VE/(66/rY>M,vX(l?[ъf1$n8eCWa**ʱyGѴ*Ge{*!V<%^.+2}7xQ7i"MhZf[e%m?chtRB8 G9FQ,˱Y۔E||֎f.iͤ#^Bt6fUCe1.SL(rI]ҵ0e\MSN T1acqkG\+&b etaK1(EmWKTvvQm?At)NՎRobvQ6qcjBd e#rۖeoUK,;MJP#hވZ.rYnCc-(|ڭFh JS/v[>q (ovit KqĦ)RP>1qi/q(#tug&E{ 5n[Qmʭhe΃i4Lh1f3a1ʹˠ-=B[2$$B*AEmH[2m2XgU{ 23:DvDEiCiS2.5hcSYȶ{X(KX'۱ylXrS\".i q)fhДGOOsy{Ikt\Yf܊hM c)d孪5-^.q4bBD%CK !S\Q./"T -E.W|8PHTD))ь*#qO)>%aYD| q)H0쭈K;!rOC[y)寺]Z*\VU(uTYr%n\E∣^Ye,GYX.;!Rjєrɘe#bX\,GUQ[PAUU+Q?MbA",[]x~w<Ԗ$.HxyJlıObY vqlǒayI~XJ.*H*R2Җc_ħ,/Wq n$DGnY:*c-qi=MMh&.=”Rh?+8Lw *BW RJ)DKuTLZbhVqR^یӔbCb(b\X>wGZJK=PUnQ>eMmE)z/((%l!q*3N\^cOYkg $DcQS"f(ŎnU_UI%D*oUJlNkڭTQ" ,bJeĎndGf9HeѤ4J!đϊmh1'!deF)ʇn mQr4zcC (eho3YJ'ChF9Vfx.xjq1Pĭ^ I;x)o\qVK3%VE՚qc5(]t9c-fP.]ڭЭ(t942JMJU>tGo*4|OKK1aZKH\l{D|(DZH|H43(EChdf~RcQ(U5~L2^T~BL]UF-URX^Oq|+- #q[Lt[)xRC9L2<a4ƴn3QfƿO߾}L+o-ۯVl,߲_,fm,,_eI9?$"M"DB\z!-hbh,Ѵ#.jG0.bUnGaVryx$B$I!BqPR:*~q[(jG|]8(Q([G2%q+G1RG;-į S)%1~(o͠qi&;IPU~Ulr{(/((G)T)|U(rPJ fZ+A׎{u띃ug3&^[uS %i-%[aoUczI؛$-V\ߨ/ KKB!%!u-2! j):CK륥:VQ^oo^Zr6.%.n][byK?W0YD˪walchM)ǥ4Fqcʸe8.c`TjKLTn q(C..[͡ć:D|* u99>,p;!"AY.S!bfp{Z^fKSТUmu⩬iQ北Aӡv_ۢnY]/7vm8˰$nq mװXbs٭j,uZ 1i1e}6oںѺmPa8>ԇrP2_S`Oxa\}|*qa4qRfe9?:?e|h ,[wqVB2qJ\2_1,rr8!.xy1abA$~z$nD%.Bo.iCo]뻔r8>nv{0K8ԭuI)cE:fΡ-%f9̛"23aIOf[H$"%deX-n%,ƥZZV/nxUlASA/#sqF\R-r2.e])l+,6'>Ţe-[YnE֭,!.պr$.-.2#M$Z$D.#G$ĭO-ղSK]vY]:zC?u[n/{xSwjS,kgԇ$кn-l>z7vñ|jM/e:K2U0g-fR<\zw2ѩӚ]▓n,qu;Yna\ӥeCm é3nG%,r̸C9, 4>:!Èmyk!?ض,\bd{BQӻ嗇rۉK~֥]7T.K[#B/6Z^Z#niE9.ox/mYu۝ͪCQ]޻f_nҺeʢrX9np|SĻpp|:qZ.CrpKoø$'Ռۑr02n7O<^_˸a|wݐKIj"p\փCP=.q F|[xp8̑j\C%xI\ui<h}7opCk趷ƥu9rs(R3.h%qIɌqy%q'u)qf ÊgVelj;:TUC=Tvcۇ LJDl%qp8qz gq9Gу"ĸppvά !NVvOl!'n9ˎ#6ae%Zo5vj/.OO~<}9 =n}̸f+ǿ+ooo3pݬe]kO^|,J_Y~m/mp,,bYn>,ERfLt0fƥ4a0s6q =! eUwĭf!4nBCBԗ(#E)O%nC]J)n~3p.o?QO/eJ\#PmՇR4qh}*Kb8_ꥨZ$KƗ%$>ć㟊x%>-B\+. IZn9i,ʸ,ԢnXe={%}eS-ZZ) 2Q7"CV9#!OOOL,e/jJuS?*oZxR{[>[%S2߭ulSpo"aձlҟ.,lPPa|S1n'Q֘3C!dSle:q\/A77?7~̨I0$N&Ƹ硾DG\V9#021RwuY',DV\e҈\B/mQlOOVu=M( g'^IVܖlXn>ou[[I,ðK(+V8spkVeܲu븕 ' %-Q.S%Ine22nu0xB]Z-.u&^aK8uu;0Z96GQr1yp\Ô=q usJxS6mCԇ۸ջ2 YJFVa4bK|(ʒasD//T+9h1Ge8n9ZOqK NrW>-ApXupeC#<&Gd1./ 7Cy ˌʼn}iXXcS-R-w]%YÌV!# Kkp= 9D 2t#=ʸdsv2&hv8gY.wk?cmrl(l_)a[˔cs0&Nq8.qq ӓøcm ǭKb+b{Yl?5od?J|(uZOqYn?7_%nn}XY.-؞,_bm+, ˏXX~խ,,ҢJ-RU*⸍a2.n2n3PC܎]S("T9nn%SVS|$>-/q- qɸ$$H$"!.A$Ļ䍰h{UU(R/3nDB\Vm?ih}KC^p˥5neqYۗzWw ͖ qFB2d$nOVY=m}xj=<\ƃϱZE0&KjmuRN[˭KwN?xI"qYrq ۥub-mlNTPjpt8x9L5DqaFq$GIG.Ƹ$nA.E\KK|sv}*Ɍ*qL,O>S/"qbȓJKbd$D/36ao$AۇnjReYlV]Z'7ų[]fO).m,ʮćo>򡛽Xl6k,]jRǭRpjSp=?zsƭ^/e9o]ݎ .˩wa3xW9ar(rnq+^BPe$l^3;5ؾ;nWZq[]VR9eø-㗵 fc`bAԇ=&.I\AQD%qi}׺ -OF< `yKv<]ЭU}VkhpC]dKO17U"L4wh%#;qbFN!o~Ixz{KHdD"x8²Dzjkj{՛V.U9ZO_ڧwE[RJ5$.EDԲO 󴣥.S9+sL8Lqe9Ñ,뜬)9,Z:'YK%/Fu팞2O?m_ƭ>rQS7YlA}Zi,_۸-Eamkջ~xRҢJ-EP2Ή/1p9ǭn3_ S&A] E[zl"mĭTi%vfḕPֻjԸLRQ-.]Ȩw-['NPJ݆J)8GvSM8n]^ⒺC0?_߫/KA\x?E[d$XHBĻ !.<܂$^zЋ)CջA$".7[YlS{U HC$^ZjjKeoMB|nek,qKFq9of!G|xO՟ZzKJ"?\zzb~o=.ReU6e/R/<ҋAݎK2&T֥xY9,YM]qe1nmiV5Vd)qqi܎N9%CPq9zAŻу1/ neJuqIRY -"zҚCYnA=8B$+~>rI!MInDzm"ً$^k=ziwZLM]#EnV;{sb1㯿m}7^?-KCK,nA]Ӌn˗Mk춌jԹ0hLe9nP==yfݪ.xwp8e8u\%Իøĭ.CPu9Kq8z\q0.(=q<}s_e5e;c|85ŭr껡n?Ѻsvpb,aCe0~i9˘qfq~Z]tp8Ci J2W*W,z{PQ}Z.ӶYlEYl+,Z ZƇ0ԗCƸV=>E*~ p|[EhJ"wԧ'%ݑxq8~]B$NL:S0!~V,J6cǭ(B8q㛚P)nԭD5Roĭ_ .'Vl,a喋[,œ(øեnm|YØ%.w?n~bcQ!sd\/!qVKK]N>hlTFH$֒l~1#=KIL}q~_zD?m˒+$e}ʀ]U/@"DVsh ׵ 6֣=H6AkDOؚ8tekgpQ6kQKJOL^.%-X!XNfEPUk|[zDJ5%5ntwF4]5vX\c<^2&2qR*_Qî,o;{ *~sߍ#RP9q| U-1%Zqf<ưU]q;rKO{ym7zԣEGe0nfOz[j"X;eĭ40ۋuXh\#]qV*u9q|PPpXI֗GK|i)zi<:"5z[4vbX2̉cTVWfgn=^Z:3o^2nN.%3qu s\pKr8usV:r^n 7t2 xK׬e .^^oۧ/rqca)V+2^ncְsxIWC|:\?zx\~w9Gp8LJ0c/h1D[jMekыڢA<[uKOE":U"Ou-G(KI_,e}YQD˪u+֖_Ž[| A}LIBߊ_ q/S[-x'D^^x|zukGofnA.ƧPOA.K[_jO-=6~9u-YH+x\ǟáRQYW͚xPbbipI}/u!E P]E=k 2KSKa5~,vÖEzm.cbK}Xb|(K,K.EOKU/KT&Jes qJYfXa2P ˚pZb-'2+zL !dHkn9D2HƇ$%ZZ?%6IHץ5v]WֺҺ5.Z6%a}ZP6,KPQ3n`u!¤[x-`h:&đoLB"a)ijQ]nVUuHWvRXSZɲMBqy$X|ckWeLcu[D&컬\r3朴:rzvWzNZ.a}jǬ]%8/O/nodXY_ƣSC| x_.Z۷;-/\?O.8Ǘo._Jp888~9ԣ>Pqէe sC25ƖƗQo`#~7Ǡ_ģ5/)_1uTqKP)E%L#Zd/P__*K=G՗a e>E:-45nׄ5ėr a=6îǣd0?Į_ax/+xħ%8NqSW맖6ktH4[\Gxe7n'b8nW"պmp|wylpXcַ?]Kҡ^cpEJt2&Oǚa|%t'Ze*X"nؚipƌ}{]Z1VW1f<˜˘r,3m|An;,/!_"y府7#/}˛aƧ ,۰A[Ƈ8,cP:mcǹ"8ԣ;#TQ!9[d̰6cƮPC"D1eY1SOˋ`. &qK+[K1-%Nqbd8-qK~]Jʵ-NXݢ~I3O_T.S0qܶD+YVKk^zRIƭ=Җd9Z /9ZE vW02fJ=JIv*-cP]FAUZcq-֧v=«e wΞfǘkvø%Jt/c+xqީu1/f6n;۰/^o>.ǭu]Zuu匾75ի.-t]中%ZnK\ n9DEg%>o8P0qZ1ѷznۣFvd;kt ]bm3ɴqZ3Vɬe Bzė1[,S&m"16!+$ﺝG5"o]E}b#!uy\+A /w"y]/ID:^K>[jGܮQ] u.U[/kF%sN[+%nF6.ŰKt{jq5k ſ3ޮ3fzSEیFZ&cXVu ATQa+k/K=֎eFvQ.-)qH]c%Ou4iR2ú͸uԮ0x[}v)ظţ~XQ˧]*FPEAu=FkOY_ƣ:4/CZ92B]]3,1dשE\jVSb0[nD=Ck}z3ćty$7WNuÚ>&Wnrܲ缼:'~όgv]Eűˣ\i+ۧooe|yMX\iYckb}//y߾}9.eOs\~sv^~'~9q?\./rGSv8Q?Un^TčV/5Ck/C0úV$>M0^jK/__^~I_R:Ѳ/![Ckk^n-j.vK֣hf/ 5/*ħPO!qK%N^8\Z?j]$D"!MNJLe^no28?߼w]x󽬖x_nv<˻ZgtrU=T)jU4_QE|<.zpq+C/ κ8\?G*θ.:ԌVkꪫp73̴9fTn53EZR#Sf:Cݚ 5S:C]GćD+H>z NXe"D"$/KelIuţI8]/G[J<)q kZ8l~/5^?\%\GQi/pևЛ\!J/ĺAEZ/z65j;juo|7\zi͋eUѸ U\Tn-խ[kQPT}OCW}[a}ZE xT#(v9cbXƗ \5cז֧, #aY]#+UeW<qևT_ðCXR;u h}YF^a-22cb1QX'~J/812qKKߖ!/"FvfrY&f$֑ߵ5,5n^ٕćOnqպJ-몡VźhR4ۮ[b" KWNܒpnW%*f|8b(gd<*\-/b r9N%8see9n!CJn[Vn֧NKKէm 1,5m}Xfݵ/$⇸V^2"Y$ήƼJ|8W rd%+z89ˇr\n]\}B Y^ZgbeXʬ]֗yyxv{:k|cغM//a߾}{?uo!C X.U)o.\ng|)8\p[˩R9 ˅PB-30U#,abEPB"TD[J$hS1K[ėAzėD)i*KI%֧Įhp#zD(1X]GŎY;OKTzćzD|9l)QF|FFnjCPq[GNeX*OLJu;uj8>%O /OI"~=R]BӧKvظ&rbm݆%SħuRtqq%%2s-H [z^TVZvy|[`!v])5oއRy7Ћ"nqX8ncÑ%tgPƹ8Z03ʩ2uw뱼[F{E[Bfagfw-uۙi}X;LL"HX3CVXRĭ#o^c#'Qfhm|$)mi-D7#Q^笫{.q1>ZD.7qTS-)q-ǧ6H'['n!czT:T.:ɷrIR8q⺄,[\|K4RaiɌKVJD没]-(}x*1W2ǧˣ⧌ħE%8/ݘΪ* 56'طzPTװ,ƗRqU0n%,㖗CGc.%? _ZԌ]%QGR! Q;TP([a۰%#㱆xQv`tEV*X:$r$ 1t$P!e 9]l+1sK"qkI$j'Uԭ4:^e1d2,?-l<.(Er|⸍/]Jn}ʴ=TSNdM3uķ#붗ǸNSW̪ǎ(vS-1z^/;U^aź㶋a٢a[kf i/0/53(n2!3:wv}6{.:rjvu=\W:w˸NqsV3R.k9>eoI,1|,aKa}c~ۧoL5 2u]q[cax_ύsu]_0_/~G.S_s܎/v.ns8>_s}GQe?L)*eN[c&vu]n4ÌAd|Kխe%>7Oĭoiw̸RVlR-m֢fb[Z֣ģD|(Z?2ԗR~()n)#[ƭm1v*$ BfEY.Kݺ~)> QPK*cR[.7LJ4!h}Zˇ"8D_r#DdoGq$c!Fb׉919Wt5蔺]Er<. "=+.\Z.]]]5*RB}:qBH\{8#˺2!nEhݎGK=mWFB$22ˌCF"Z3c?xyS}uZ]SNj7v]Yڎן~SKcJ]1\rWq>]%nYJr'8>/7C[^no^ΘK˵8v\dMMYzK/-j̋]H69{^a VZ>[0D2> kg&5HZO'w6X%C8\#a=z#Il%H\ f}#⶗9"x#/?ֻmA\Ʌl]/>6DM~{ھ:m.T$h{%Z/ ǭr.ĉ mȺe|s%]Gv8CZWvZ_F/Cvfn[GY1U\G<^7RӮ!eC}j(a#̸McwAX>%nP֢[bR&OюGKvX.#~g.vZ32q{Sm7 Os|*C,uKM|Oa-1b4X*>ħ89DWz1R̄r^q{(ΡulM<[yc&][D%ߎ 1ZubSˌIѺofzR ݥ n}3~hO5n嗣^!躝Q"dF5֌[^T:$њ7aB#rv0CNvюK4n۩H*jZDm۵> K=EM붑kljĮ[}lךcxsY?8]¸e$^۞=oX߯e㿖=IDAzq˙s%K.vtf:V\e|h}S\,3c2r6/}R^m/[jⶬǰu;G2a=..g|-`<S9.9&>L~9o9uzc͐\> + g| xėz|C-DbC$~+jrIV^22lc2+W2?˛h?uyգ[ko?m.޺:ޫ7ooZVU2\:|5?] e2Ǘ7w3~J|ɑמ]?9.fsQKUWeX3gz٫fMjN[j%xČيKؙaţvK qOAa%v-6'v=F X?͸]e5n vd+\6$a%7F<.ɕD<֥Wx\K~w"!nGH$>ڣ!.u,"+^yy\C%ocN֧[yvc׻U/U?n[Znr㇓،3+$c_H|:u]᪾uuUiyTxoRՋб\:K5,|exoG}ۖUԭ/%f|J|ZQ!#ojRR]aJZ+3%a)-tnA]{1aYBƗ7rQBS=KOanY~n㗎mXK2$Kԣ tdfؑ15㖸xx }TQa2g\51KXgl%A$n3DbH}i{{-ukZvnˮyyZK%q]Töl-Cu CC}iXJ9O~sJ̘a KUbFw7A|ۧaoxb*GF6dxg0e#MH$}r"zQ+ևur:Vz񝗋h;\]Ìm5R_^Ǯ&noؚ eX.?]7e$]r<ճ_r}WP ?xZkm-OWOP>_Yl:CUanK6n\ zYhOr[b-IhHKHcC/C3FG)oPPtY>ʥb͢hl:-m%A(D BD3ŸLWH%%5K[|Gʭ-|GdDťC MRna\]&.!gk/eOaPd%>*LK3.!~ ri/#%bJy)ߕV(UQ>[U\r+KUiU*RmQ0jaR>%ۢ}WժT(r,GW5[E(a\fHfȘI[lqIh4cpUGFQ5\T[岶K*]n%C ԨrRKURjoK^x|2M⧲P]G)5(߭lV!qKXJaQ˪REU٫VշRE~0Rjr$M$Lzd|RIlĥ6ca$q.);)T4Cܴ i!DŭN$.D3..?n3.U~fTykR.]c2Đ) ]\ %R$KP mocEeۥ&.jcS/Mt+aCo%tRnYlV!CSުL4̸}b-MJpP<\z{ kIUn CQ$RݺTUժtJťJ*UT*m)q[={#CmD3eF풘Uv&Hi"t%c1^FEUJť)^+ZmڥKѪMWnU.Uj]PR%X:U]J5˗Rr(<$آeB:B|7lAK):!7gǖ "ncT1Z'iFl{ JE1~sңn͎Zzb=5mGMzvͪZU&}[PXUc-X\sgιuvY.Mv{<؈}ynƌ0NaOqr9ݚKhf޶ƿǣZ{oZZ?-R.??-GQt1.Ci|jnV,eQnavko롙rKnqٱ%Lktcti%#r]|vk[-(,u)].)uH&$–PD')J\҈ bT%.!EV #qERMZS.$Ad"cTB(e6664qF3>f"n1$[4VrAyID!nC).Amx+BG?nڭʥQJ4UnETQJ(G)K0CrYvnwUhGYl(KUO(*jld̖ѕ/IK7[F9yJ"m!٤vYnn˭ӯt(S֬]UJцX{$>[%O>WGdDZZmK#N%i2TuTG–f1ѭ*(\vt 4:\fe8%|T5UCuݔK 22q1iMM+f.ʭmkSk2ŨZj*j*T=.5Z&nI۔?EK)ݥxs%ڹ5Cjr"^0S8;U(M!enuYR̈-1[SbFhftѱ%dHeNd;O)ŌjI6qIT$l/IwF\ tQ(mZe\U+o]:U+)҇fR*ZeRURn)uPKy>qJGG$#K&["%q9i3ub3ƭ)CWFn&έѥ8GJKuFwRg#YlffJ9 ]9G)ut٘YױsΥʜ먣s֗/lܒhٳPXXh{WZMK3ފE#(q]&^&є02[w!BDGQ[K-B)Q.UTQBQ.2(ʠtY^O TQey9GժT[jrZUvJFKxdی]̖m-l%.UKRToPrV%qQmQQު*}'_Rmj:<>Zz_locaoa%#eMt"SFcc%imKbo˸囟o*Dz~Sj= k->]6_$]"rOe8%c ۬ǃX=cM:&%5R!iBBIZZleR1j(/_%[( UJt ըP e*x4iSET(Ӫإ(3j(UKR5JUڥROG " r*P(oTd[aSZJuU-UEUv9z牬8UjUf'kg%ѓbY⌚!Ig;v䔎 ťRk&.5UV5o**j:[b ѨUUU-))99ڎے7E[#rJY.hRĭB$LT(KPh5qG[/Ps"VlC"cF\ qkr Ǝ[kB-*2%x;9QmviRh?j/O>ƥКreF?Uд`\ʭr)ZVZ\j4Jy)B8Qn8"%*rvnjmhvT ]˥ʥA*GjZ-H mg3?$.{!p:[mH$qlZfoCC?TC(?߄rDL3m4?:(Rq)jiI9Zc*փQe-uUꋢ֭֨PRު\$If$vI8$ͯ Qs"~*K7a[ˎ L 66Cܪ2r[]ƴ]T%TWwOnOmYfǞyvaլ3ܒme-Mь`XOx~h ,!cA{-X/g_Z|i?ThVn˭T:\Je,uLj;%KB2 J"Ѣ%MMH:*o&/$?ʭK) RD|7/T%#[R^J62n)J)lrKd(-CE6: mF ݌cho"nV~1>Z[(>ʁVETREQ6rr+PVbQ>6E˥0[{K[jժEjJ*ZTx-՞%l#NCFRDd)a.q+A`,lKuRRVU]j5"jJՔVJ^/zYQTe/z:2~:k0|SyUqHd$2z{Fb iN'qJasr ]?lm0~L)Ej64E]šjr٧ډK^ny^wgubl l^ivIq[2n;hxvlJѱ{rQf&iKRF h'R-.EP7\|ۥʭK*it6UR`ܪ5hZ*mZ.+.gmQhIl 6cJMT$ֲݎ'FJ(r)KUnU9vKv>Id2K$sv21ȥ$"M¢UR5xEU͓ZvKJWاmYm9ʜv<9Γ0ۥm;:RoCtaQ!;"jI\C1CPU~VnEK2ڥ͌.-6CbFF`Z.6eo5Xl}-(9rz6eA!ˌncܚ1QP-^Noq;.vʯ?AF). .͸U]Rn#(o*P".ze\V{eX-Q Uå6yZGD1ڥGKʜh].UR.U.UuSXq8݂H\f.AdG{tIZ3*8$dH:$]%1*!,F9Gƌ.q[$B",͖rQ.&NuX%q[7:]j*Mn{zV$jѵn>ftSU_mɎH]*Vڭ:yJLչσQ)bF,Sb[%ϑh; ݴ VL-+kE.yj8Q<,$ZjTRrJr{k- cXKbo׋CFL[7;K+\Zl~h=NVK{J?M{#HZu|HXyɲ/?Hrecly\͕9j?W5ۛԸuZ[vm1~W8q>cP.U=]E=jarlr9ZA=F|[gT&f_ Ԅ[6anXS|]¢73CKqVxt<͸r8TvPm-dm:v<Ƨc5~I9fŷS1#aJkgi 2KA1Zk9osrф= e\Ǫ5NϩI$#Y©Ȳ{f$hV^}+q 15썶O[r`~Cqr4ݛ98qHh*#=:1_V)-naFk9qgeMX-1HUkI#^av\i%$>+5އs֩!nɰ'W[ᣧZE8+r0$Oǭq;ǭRsL1!9nhLZH||HHdWZng/Ƕ}d}J\9~x}~>GmYvݩ{>ڳrm/Cqq>g?~-/oV3vM&68_6C/^s-,bE;c{cb8$˧/Pz\nEY^Ycr1n3  ˷Սc΢i3~s-Q!cyX\ď!2؇aYPCUoЪ N9̈h1r(*Z*P=4ԗ gC:V֩Pj=J=_Kn2u;BHɸ1[OzzlJ=:QI(_qP8MVQقnC8IU'?K2a/GGd8XbIHDYSߖ[²b-ė-qX#2rɤ,S;_уP=Z=zl0>mjWze/?0뒗ĵJ$DFn?B"#qkDƗ܎e9r^/r>nszpmџo//>>^g;o=ZGUmG}n˧ѿky8zj}:n{:>~‘exIğ-&%.KY>~,~.jٌqY+j#}tci[9nG5ZSmR4 q^GWRf]vF7TPǣ 4J82n=AI8HxsFENcysi&{!+K"V$97oco*F]lrnjd-ZZDOfdIf\%DJ2dqqsqVۏ9zz.ZS[-Kߚ&,{OcrcIL"lljĒsd/KYklXօ}N!GcO6/=7ƶ^5Ԡ,{cVkVj8fc 3ӛS"mznaC 'TC9nNp0T}+"y=:\mr gG֚q6Km8Z3ۊ[)3Qzn a8zaS? B=a/T-]%naܦc.Xq;~1D"AѸ.cF6 :[ƩA"db:1 ̲HV&g[H֏qK||`f؍ck1{sf$fk||8砝y=rqVrTݲ>ʌ1lʜƧ&0ⶎMiLʸMfIkCǤ1!CC%M"dy-,/cV%~[I=m26M[Dpǩ&Qڻ&v0$=8tzORQn9u gC,G#ᜓd}$#}ǥqަGw&~,kam{mZOs$klAދcwm{U{ټOۗO>ַr.ӻx?A9n'm⏎oPcg?tZk?Y?bז ?eW/jq<Ʒ//p-n ҋeqb10X^a_6b$D%emeL~rqs:=6l?>=:>5ۧ-j{N?pXֹ"HcH)R~:س$P"r<\D24B SYZoAi!GeF5k ײr}^^\~pGm!°Eboeq kQ`1O[u4_a ,kCNj1۷1 /J=o~3ؙeYķET2ZJC|kfJsƔk1m((Ҫ *uHo%G|ZQB[4nR-!V~W%~SEA}:QSoVJ)m+G݆pj|:==nu(GM~s#>i28cPF8GFC/0ӡc+96qCK[C"Oasr8%qǠq>GSsfA7Q݊'u85n[IMrf̸aXq#e$ZA?o3 fd_rZ2C1q!5)\ƙqKܒ.D1#8%!C[ֺuky;`rk}|YZN&)*:GKf5ǗarqSup*MeSadVjƷ " C#;WzIpbmƗXK"DETk,6Geaq5C|kYڴڞr<&=_ ۷뼍|ph9qkͤdֈVh%DiDq·+N$r̕saחI'fֲOϏbFOqr?]:ڱU3ڇ}0غqyms?wf8nğ\98lR6Ooa?:׎_oz.6vK_fyl /c|G.oqh=FmPb2/Sqάs|Yv; bb#Q4JG| /1VxT}[T}J$i{AC2}(!ukGC8NN=9$rdGŷ*+[NYfDkF#[S7#q D/n Iq[8uG1U!6G"rʲdrDuq+[._.>v=2|𒑦uɶk²Rֲ[[."!CEJ0d`ؾe\/s1/eҘ2or\Vj\O~x~^|xF_>w=^?ȇ ɬnokYf-}>ur1G6]R?VZsV=,_9~oK[uh#~3ZXO=Ŧn}W߇x,k kl|>-? -kzֲpF[Brv̼[Z޲m7gKCc(h4nT-4ʼnqKReGE8YVbJ~[ƒVo{]#Ώ,ݯx1Zֲ%{wki.{PQǧֱxǧS,a>59,a/-۷˛1z|#ǩbqfo'c0 QNDƣfc<\ P*a;8!JfyrCoǗ!ԗz5nGcc\یǺ,cj.HRvGmF)[I 5x\yˌMK$׹&Ƹ> c>'QYs]svDõ~HK ^|XUY&pr؃]ILERҾ;@"f]]l FXHQɤX1M<MbI1,Uk`T!ĥqXJi*i].5FmQ8"m#euL䰢OrK,jtϐAerDfNUڄ3q, R!UKB̤N 3;{в8RZEtY7Վ˿oݞxo>CcYTztٱ[bs8Ma-4ٲ3K2Nžiڔ6jmrKbEҾ%IJ\"Y)K_l{1ӥ(lkgebM115{b-Էe38EOqҭB=z{I܆{ LoYqcń0UBɅ"q ijq){AC=MJ/c2X&.5(>'nS6Tɦ;XUn21LMnƌfyItyqHkңSNZÌ咬se*{eu|Y V4T%ѭD%G88X֮Ʈ#m-"Y#Z{<GÜkLZ',Eaa1lFae/i3[̨0m&9g(Xn*lYfbeHHMEGKqɦ[.3zSBT=gvMɢV1u-.2Ta$ފ[$f(6)z1)`۸-jܚSnb1Ko?8b܆F{QE+_ZJH)F9WFmbزs<8ުui9Kʌ5ǘuŊl3)XV$Df1%xH$Ⓒ$LpD~ZmRm3Kf<nj5at5D,MzKivGi5CK,:2LGƖ"G&R,G;RC x,&qCޚÌ;]AJ9mJs;~($n-D%lft4ȸt!e-sKT9?aLLnm4qYLYIDd1,GI[+<ĥsZΧ*3:&G>"᳉3^>V>\Gvd_6ÒSݪچ6,/GU]n{SfjJsrh?/sNNx)mhx+E?qywSwۗ?4ޖ#,lY. {Ű6r۸˗˭bQnWr+6,UQqRʥT+/ A,JiKy|y1qr[^f(K=)(oM45L3(Q2V&3LS1M2ch$._3naafe6~2nq B2.d\fۦtE&4md52tG0!-Cn(-ӻЌuW?.Cc߈03:[%q[$.&IK"$WCD"qY2_B(GI%rjQVKɅC^f$r6{iƴ 8S1ʌ)Ɯk4N?lKf %|^ˌKZG 6{RcY㱝XSN{+煌[HYjcZx岬f-5αlQczS6cFL3S n%cMjd%K\qLd-ĥRJJB [DDEX1QH)ezfYɠ\HZV+E7]'n`/5ݡERD0kՖSI$,3u'p$a!N<\ʥ"I};prŁ9m<[O{>ϕ63{L+,FbṲ̈nݬTKBV=LX^0|& /(OSOGٺ֙L=wK-*R3{c&l3̸LROc2.333S荙a̸ŭUd &qlcpf/14f\ 1Vlƌb(uR41(n2bZ#Sn]542M =.՚a6uq[-n% ^Wc܊*E8r)rK*Zc|rå[E-bɄEBy))5R ŁQݳ\.Y~#.UÞE\fVR$$?$^(im(3.̘2eF1{K$fi3cF6rat+g0^oxKJ#GnqDDl)+2p0GgLRUfl,Ye!nfAUyD$ĥ [䴙sefnS= 'f$4V[Zޚ{f$d$DdFFȌn#4"$s-nI"B"}2'޾}iѲ}>Ko{1eDͶZSaTCjcf4SgKќx5ڳU}*a'Kӭ\*P{MywoWx<?i5,qor[n-nmYڔ[Ű0~(0,_FԤ]-mQK+/ՃqI|iAY/k!VnEܖ[\b[a|)vR!,v1Rbhd0,3 3iKЦR2CMMNT%mvDA%RAbŒ1øM/C\f/!& ø0^Ɨ Bbe0P-QAhFbڴM2F-0% /5L&z\2.)IME 1-3.m F?DBa-x-.F(Ө\=EEI,+:-Ɨb\fI\z|z!$ʎc2UYXQ(OGKy˜fL6%cXn3sӺ=PE$=.Ӕj%K&)"ZK#,?p/?Yjd=|_|Sq|8Eݟ/b}Zr>ЏԟO_/OzVGW)s翸m[ZbÔ:92fSzW]Uc +v,=.Ɨe=n3~ҭI0CIҢR 6K2=b4& ҫX7$YnޢD]S9-UiO ES)"feU(K*ZE5)xv8>=[0󯥆ou=HUl˜{0~Hbť֊{q,{˄Z˟աs9%V,,fejXSHmK"~tj۰5Qb6j-RpK6Zt$.+$ a,g b*-BIl[v7,mFYvr.}mde}ֲw+[m;fOiQufc E'O/)/I[;g))˴h^jSnE4J8H忛*KPϖ3~oO)ϲ|Am嶽6ner+6K\U_<\6@eQ?4 EU/Շ)J×rYXE,[.K9rUL3,b%q+/5]C̸Lq1.241=m1faܢELc03M P/SD0.3nC a|ødDƸ_qq2D21fdƴ 2ڸM)e'nC{ˌi/{{EK%ƴ[t+/eg'ݭ1[\EU :!. UKK,dDGʱ%!-(IvPGV屼tg=,*7pYz8>|<v|8aev~ݿe_]Χ>[}L>]z1mӦ[/p>9=iN5f\ f,fYf\fSƘvq\o$nq[lle-lʞ]]]xXZYʸlMe[V?dJv*u]S\3.Y.Ŧƌ23g1-mƌ!gĴjfJS Řqh6R$n'KJq_$I HnR"Me-f\2$XeB:Ex6#HE*dD7ۥ-hg3MFՌK{[Ė(A⒴HHKITGj$J-HuHq<ؽtp=6m9<+f!Q̥M1#ȥ-Ur)k%ˣNsL 1ލ `1n[Ӿ62i{|jƇ twdFA3;ㇸť-Am|:T)%!wJ7ˢR:!U݉[$*,))(G"PIDJ\R%%#%eik{4/{2mffv9alif*4mCHI4AJ=zfrYG/dt{,ϳWVj9_=p9#x|;8||75?}'/:߼6'MۿÌi3{kL{emf)Rcf\b3L͘e0f΃-0㒬EmKt- [ۛ5B5EmMY콦.XK& Zf0fƘ8bi #sQcbgKۣ͜5SƘD",l1T\G.)-qKlڭؕ%!$nQLS.d4tS2qiz$sכY_*Ӳ|51r0nщۨ0%˭7pIb-I_d͘Yӓï蜵٦6یf\aYfמ֎؇y͜f;c1sƌ>Mώ4cF3zfĈx7Fx7nF*HpfJhnhƤgt5*Դr*[/s\f4ۢv):bdh͸M>OҴ[Ƈ&>̦]f0~gby.??ĭ\2VT[5nGTjlf͸ CTS4U&֊HTIQ(p426E5D k( :1Ū/t ŢwRHTqK$^f s6ne6cIt1rQ53.3ӌ1[1Pce9-㻍;Oߍ`$>RD*bԢݚR(GJE:ʇj"$:d t, rT8˻^jT6S4qM>$BC4[LS1f޺ndpFL=>TMPADbB[ {{>$.9C]H#>D2tm-Y[>ۻe-{;lkۇ-I"/Yo63[)ook-3uۜ{6wF3m^ÃF{K>w/~vp<]N?)\zیP6jS.ۻGϵq?6sw3ύ\ލ¸J C򛸵K}*e 6ոL|q[a|Wݚ(p0vdk&ʥCLI(q+ĭX_r4,`XjOԌj.E Ê2=f&2)St($5=. Gg"12-Yi2~gS1JaԨ0ƌd &2FbFe|ʘdc0M$10Eq \  cP&ӕ2m1PnREhޥ2M|Kf$nn]2 1C&nAx5TƸM!ncħv9F CBI▞HU$GI9J':td#)))2[$SUaÜoVe4rk,TpNiUudfq iMWGڊﺤ20_̙dz:]Nb؛ rSp r[ngHܶ{0d[_PۦxX^vcJb2UZXϵ()5--L'^"e^ Gl2f2h&Cf-c(z܊6-Ÿ?a\f\Rjtd q !hDq3t ǩ*K)3 ʹz8O;r9hk;-5{Q23H*{&KmRT\a\ĴLD#%)dL$d&,+%5#8y:qVgp{9~s*y󚱲-S}Zy7iz emk YsbQ#Nv|yk'75|{}ėvپZ8ۻCHn"8zv%zqC7&Ռ( nY2UVDFa RE;f0]2bNOCESyҪU=nE)zK2ĥ1L1'ERݚ*ڭFťڥ4{hvIƸUӇ]|][ƸhhRƥ.[XK&>TQlDeODEFR4)JPۜ3Zi:}qlejC%F֚nʹJߌ98G-u14'aZ^0meF趷Ĵ=6  FAR3q ڇKʇ%L"D#nC$$&6F9ܖi-cLU5:dLH[˦ǔm-CfU=ح0*=ccckD\f6e̸dzTQikͩC ]:>ϚRmbZI1L=nJͬe;$rDD$v$ؖg'rk65U5.Ŗ'Vٶ蕝g3{bk!O)ӳg[o{&mLH 1#㖙TUM8q+ 4#V}Č*)IiʧP~Lb)QIK$+&Y)0[K7EK:$.3Řӭm[B* qYW9\fKY IV7I;9pTDK8%9ҽJYDчs͓ӹ呪sYeWמW٧gvva-ӳG% O I=$tRZW\>]Rl%2e=gƴޘ:{^nU32*n3[Yj4[ikf: 2lc65l;uOecl̸5E$cRzK"VT$D"7%nͱdvI|:) 1gQJFSJo.M5=tfabrk&ʭ2q0&4NYDoѧ[Ѿ1St۔aN}(ć[\A>\ʧrq(sjs80zKa1&VE,iTVJ*ckgN=Cҵֲ;eiX$Qˌ*PLjK%qIml6m3c|͘1D<[D7m9jmfinbfFMѲhUڻvKx\Ae܊q9R.ʥ[!c-ӧG|2#sdH'UYʊČ^Rf.I~| 3F0CSN$Kg!ȅī-BQfǼf\͚#cƥϙCǼczT8]:g!C1X&xMDc$Tt$&.E:I:x{rDbk}͢_m%qf-5Yvy*Ծ^ۇ`f(63Nmj*ڥ9rum(]S2ONSta܎7M\o4K7gw?W<W忁!f?b-nwb i|*g-zCH岍XL[ ri!L)&'1ʌćK-Eyd23&V CQa|"*Cq5JQ(F&2Bk)5fU1[-ERfLE]P"=b#6f4~deø%RK)1Ɣ &풸4Z!c"%4irB.bl0cHDS="1⻢mZhHA"Ƈ%Fa"Qn2eE-nR%KʊViX E3c:eZ&EmŢ̷TL{/KipYiәʹyeF1-nRl?/.*)T,yE=d"RjvɤZY:|- `mx(U{Ūm%[aƲw ^,ffIbYUsDC0eTLv[ZV%#b"43O1&bxW%|*⒠zEc0f B FeBBdҒHVhD5!\vK~Ӳ6Qn3Vٳ=cbk[!BTfČfϸ4jaeJH6$[/Y۬ZAֲ9$%m/,m&d%#e9*Ӧ)q:m1ۭʜSeLjX[{"ɘJ¶c%j:O*^oC0g1/{iږe Yfme-{pP=j|Zn`! –-˥c cJH,M1h[LLȢeTv֭J1tJ1[ZMEg.5m)4-\ KT4UmMatEjkvR2\LՌKS6.UƧ=jLkʇn06CUQ~.ڭek%bv Fbm*U"bH\8rZ JpkF˄2rmYv$v>tĥhʠUy$)̶q[Asi%#gF+ nY3sE3.!U2eJqLh"Jˠ|rI]C+V4!Kĭ6ˇ\fLpAhrLH Z4U9jG8.Cb1}ʸ SIDJ&C-XY{ƥk9۫'pQ;%BEY&k.TYY*!qFcqQtG<m<.iG8D:#K|\ײkn,{a[ݦfYguk*mlZ״nqRWsE uj4Oa8nOQ[x;*)q~qʟ?OX.3Wڟ ʥܺ]v[>5eIьۃ]hTIR)BuaQ.[8tSU=Ŕң򈔔j6.綷b㴾n۴)3 یiƴ8R.GZ[9,㇬78_F-ud.5֏y?=`9#?g|g"o~mWx7iu~u|q9vϟ:92SsO۴ӌnrznUq9O\ϧ6c&ϙ-2D66Zqˇ3,XZsڛ%nj 嶕[3ʥH$~m-LQ瘞̘iQ#1̅=Yc0=2#7ʇ f\fƔK2H%/V&2FNJ|fH2#7"ѭ2$DJ'*i mm!&Lw[q[nlUD7VIV\ڧۥ,3Q#E"9r{#I8"9`rR:ǃ$#$Pk'H"#ǩrL#SmnL9یIsmZ3gKy[?fFN{Ԙc̘Y5ۘ(ʌ9ͥXmڌ32cm|(3K[kŎ#R51VuNv+j331e`ѭiJSE=j͉tKІ*PjK ڧeѧ[ ub{a2 emLоi62Me:$n8jMp eiuEdbeZUQ2(fѳ:C(}XZ\2-E-ˊiY%"hs`b{9brVs1f(M1ml<]͌{Dh22M;ۊaKQjlۇRvD-)"AR nfs` ƸRn%Q]h+Ԓqy<Ŋ'di}vѭ˥Oc)3.D|X D >$1$.3̘nj>ٳGƌ12435m6ɱQAVD:BBe&*U;*9d?{OlL;KW9.efI$moDJK3cWj_g3^^Ϛ912}B~Qv.۳劣;]Nߝ^ƭB3n45OS^گ+?ݎO/]1l C(((/`}*ʯR~-UvkDQJy)Fƥmoʭ P.I,(y䰗[>X~Qcd)23fXibP,z5 2SMKe C($sa)Lɔ1a 2CTHI\j!A.3$iL=5dm¸%Hv[۸)ȊˤDθ`$K-Ӿ)Ɍ"֌Dv*1Є|JC3# 6O23/CR^/(b%KT~e(t,Z[I}ȸTZ Td݃[vssÞzMO1+88ʸ=m8鲖˱6@6m*2l)* Z)i"QE"PDJzSKVp|qYu:vX/oy_\>._#\2|5,ǘx>Y9%mˢxfO-A$i3m8X>lq\*{{bȶe]ek3Be,JvBem$ ']jlfbMSc1s,[HZaz[b3n0c\R`L&˨ҬUÌ[$P#$eX3)#&~+~ofƶ+ERFFQjf!*1(k,KާOJfO8%`rvH&mdWسG[Z#ɮ$lZѤs eJc0uhLw3f;[V%r☌KrYdRs[?O)_xneڶLV3fl”eڜ[V*gJ)]lTE3>-{Sh2^QöcFFƨ薖SUi"q2 #9)*va|MpJ)2 a ڥtWi(61l]iiK4JJƭ O͌ao%[iJf¸KMaNqES ]0 &fT&*!ѣTh(RTQ.QnuӥJ5fT4UFQg*U%Zt!TQrR.,},srHCqP Oݺ6f{̖z7%mG3Kr.3Db-MInF[E hqM)%vx0iK "M=)l'R(Uƴ"nVzN K:mBX>aZ=¸.Čv42nkT0qHh&nkc|hgd$f~%t2pȬqi+˥ǑTH8,=YQGsPmY[mb-">\[bG-e;vxvi9-Fd^17Dz֚ta.ݦ-ʥiSm\NjfF3iFgC3 a=DŌ`)B[f 2=Cf/C0` C3I&f0_aDܚ`0bT!6>m/mZ4O4q -netx a0AƇ1.M0*BJqI|7㒤kVqPQˠ$RQb1ÒJꐒ"Vr,UVY(G.GX+$\8]7٦}r,rLLQm2kmZ6 K"X˧ZRRԡvXzX[֛M-/:a.:m=-?(;o|q#eb~2ɼn^l~2oj׿__9=Wm.wSޚOsaLӜM0lCl1mf>D$D|em, q[oᲘq3ےn!12fe%˲vfL k9.Sۇ<8"U備b̬2=Gtah UifMfrL3fIь93bƔnߌq0mOq#%D*>uDtS7c&QE "a#LT]$atbZDt薡5eO{Nh Keť)h73v륈tkdHYR*Ԫ#Ur)ڻħTfI¼ˇ[O>{O{OHJ%՞TI[oK$cɥTN-l{YwզgFj13lssZBKE!Mma:^޷#5C{TC(uGu1(ڌQTML 5K-}Ic8ӧ˜1[-}2 RiƠ(c|Rio"~@\P1R,E;J76ԛi4J$JE*3hUKE" PhPKL,mysĢܚ\o!NLq;G2]f4ff1[\Sƥʭ =ۿAKb0ƸEv|J\rA p|Yij:UBJ#B"QY-ŌQ411t)e6MQT(f̸PʥJU0YaNB$1vvqyN=[% ݕK&L:YΐUe*G09*U"LvI\*x,f|He?ǹYίq2e SO3=)˹ϳ|leU\ڳی]Fՠ݌~jۭ}ش^.{\V\Ss}x<98]NRh&nVz4(/o?qyOONX)e6fy*(q[LaP4V*/{o~cJ(=h áhUJ-O)(ɱ<()JrBYKeb%Yo O 1=˜Ҍ3m0^-rkUGkmFa>8FgmPQ1h6KƭiiaƘҴbie`0:beڭ%. cBbn)Lیtmx[3n ceƸfⒸ=).Ÿ?qNƇ-. q! qkŸ9!Z9x+D*YC-y QaԃH|98fzҵ]K%efMvy/o՜LtDo4cbX!]+Cdrr|㇬CSuXoa9J'y|q ?'0 0ռ3f׿'|_W?iٺ)M3.L|7R3$fUfL͌Sio.7m{|t:9.Y NLu:gϸLYںWj'-rfXӴGfL<)UfsJеbLw&1&f3f0h4mZ0qH%a:BQAw=%.UJbFȍdHr%D\fvI (lڴ2Нí]ʥZoR$vgHe6)[+RtRt9jU%8cz#;ӣة$XuTSa9mɚ~aT [˜L)eҎÊ$xd-Oޏn]flyf,gb<93vF3.G署Y=53y..]&.ٔۮNfifmb1RأZ7\d25گ&įh ѧKÇ1-ȸ,_l)nbNs0ma.9h)hljЌ[4FMVEh!^hq)ߕħħE[Tqi-QnhF(T|E+ʥh:*fAYCS&LFf:^Ҭ:XK*!Bֲ2^zH*ʩAیVL̸45o3ǦlMV{z9ca)f2bfX*LގQRI/ǑIR;U*$QO>|fXKA\69K}zyoy$uնߜcfugokrSsmڵi{4[vi/5Oيr>NÜ.RM3n1h!x]?ϧ7XhE۸-KotѾ!!j4E r&2c$nUʥ+=R>,6Sc/B5R(˚ vMҔbKTb2kzDdf:a2&mH]3TAI PkJĥd3m( #EܢP qFfn%f\Kŭ4IUmHyib!3nP#(ħHtoʈjaCZ4nDƸ cZ¸̸ĭF\}$Rn!LFw))DvO ʇr(W V/!DB8bQ~meemi)-}9t:>%},!. ?nl,\SOZʱv)aB[8$ȑJ֑K*}OzX|?B)fjo޽3Og:Meۥ|h,<5Xֶz6$DֶrYƧilbXkӇsrdU,-NXA82S.3۔Sd8RcSnż]u0L4&l=ʥu[LѢ\z| eZ(/3DfLVE13>e!A CF%!)=8,:Y``gxظ2|NDTV/ ch9zIu!ksxĭڌb^G͡Ynv KʄiE%~x['Cq[ni"d_"(#Y&D(:fd!BH2CJv(aBT$dT:!W`ldHVShǣC6嶻gQ>J[<:3RCHII:|܎qFS 5L{D%q$ũ!^%et*Zj+iLI[ZoNte1<~ַ(O~-,;yŏn|#s#9lY=gX,u-.ץbqhҪ8MrhVgMxqqQ|7Bʿbt/w7G{e}]ɔTiʯ_U+Kyʇ,_cyTCb܊*ƇܶwRv(Frk*Q[CJ[nn3+adEIŖav)jicyThM#ˣXP AYfD1ת2Mlz0èFTR̴a&>3A<0fcn cc0fh3Ӑ2OCUE3-)´I4`FF CH35Ì)}elE'{x06fZig$3qRq;YLU2LIs$ZW=̜1)0-4f 3~ħ È$& ՆT0F :x, VrPkhmFEYO 0n3nKdaPgvUIk1s+n]4k%n޲B+uRZkNJҵT%ű#u+b1?fʧ?29ӤeF Qs\3]>ZIz/^e2|7s5Ӯ_ 9rƫ9?\#{3gLKmNo8?*g)J8F)3n35!S3cDшPqL=zQe(h h3ZB1D3\>Czơ1SZn3RČ3CIiQ8?$eTsV0hiZx\xD/u3 o_c(Z~!Ad#kRC2h*咥m.=mGh2>|E +*Mw٫S8UtUmڅd/k65F+ieFDm6ѡ-f8m9w~s21Gɒ㴾d9(Ֆq]Z"`<-#*iو3㵜HlZ7M&FU*Ƈ%"--ǔ9cUIt5h'J&rLV&AB[r"qq{eN =;9=QvZ{,OITT֔ԹXҥ*Ǥ*D}9+[|}ǑjkN^xo5f\u_|/#/ÿSy ?w _(-mλ_^_Rҭ~۷˻McZkIL;mm6Kڣ%n[Xqr[\o6-9Sp<QZYK_:,uZS덳l e9,#SVv,jbgb6>PԘ̌+|J֪tW2J͌U{$1ӆQf*͘:)qK 2_Fܺd0q(DhM**R&Qco%*Sj-Uĭh #ip|)h fdTϨHJʛ[ҝSj=XBs樗GIWgbJjcl{O0u=f޼mxѦ}q5-݆aCEV5F8f̘ǰܮH13Ij}Z3I/fZXWOy U\n) :f{).깎::]˔dLIQ/*RCO1̸!St&( Z.Һ,ʇXebt2[_J7uP6T|,øU=vuITcScBGi-)CicPRSqc1>T&)Qv+SPƗvj_ʭ =D12/ZNJZ2eQnxlfqۑ~Ir+MhTU[ˡmrkjLn6gya1s/fd4P$ħn:&2-cog4-%̑fpx,C-[UhU|Z~u( -)vHJS>MYCmWQT99ˌhꞕ"M]nR5}3bFR.L4\<-1qG(ڇbhmi 4cc:$6gɢVgVGTϩNX2c'jWeoioraǫ|۟~ o绕 eZr[$^߼5a혿8dNtxm&^ Yu׷c.߽Oj-FwBE;UNkXqT;~8T;as! _*AѦ/{[.WԔh46USU֔/b81 6,0(ƭ f 1=[cTRRn>_R[ćh/BL*"eQQ$222j[J-= dIad]1-/H9e-^zI%uBR3mu"k[ܶ\}+&K_ ]Xe䥖,|kR˼QsMg}EK(oo_ԿoŸĿ*1 '$}C|ȏ)XsΌ my[\+jcLn(:iͷ79֚\,wG1gQtp<[[q-g8V+oQ2cŘ8&L)҆0C Y]Ci-5zPtS<G-t!XˇI)RHƌO=nEfIbFh%Ʈ9%POSÙQFRq!)Uպmu݆w*JQ^gfͶL^lDbxץީ3MVmܦ*.yէS*=.:4fk,c%ØQP$aQ[oZI^ޖ^nSza/ m1㺦|SnޜȘ6*5fL [Y1Ǫ>Qerc4cmcc&2 К*3,,g;&4Q(e,,Kǭ0 {Mޕ!n]ҦP2K]n=WWu$l#4w°mNhD%#q3S[u(xf[> ZSxS[ѭ0=ʇħ >U*E(%xv{aFfZ"hRU-D6\g4UUWy\+5S [-9dvTjV${eug2W[^kVmmnoTCV~b>Tt{%u{[p9$y_pz߹r{[|{WZ骲,ujjR*ǣ)C}(Q/eoץ4%Ѵ*ӺmE{4WE4o(nݶKo+C+ʿ|48> F*2cdW91qy,BYyIL˖R[Œe/?eC_/V۷/?O/%o'(/lyoc&?{ w1GOh7̻O?hoϗR^m9mZ/3&cFZ1co▒nMm#qɎBf>HL,rEòjnYYGԚfR:>tBJPn,mls, rFk11g3Eutb(0$\>D I-J$nES10.afVC!IEc-*z$&ftd:aC:42ttLd21HEm|!eŇ85z[sZ{j)$Kά2}fd̘vӽ+ḬøUh4hԌY̐d9tOe(I3iFlxJOq ͌"]3TSθEJuM3âuT͸S1igCq뱆ҥ&0SRg+,n۸$ҦHR4%"tR(3lr{8f{L kqP cjeƥ[G|K2zMS*91vcJ*ʌ=.eaYiJB3.U.=4!ʭ2E ..c%~(I\3UT 't[[5'2ˌrI Mvk8*d(mƥKE[1fnHʐrɨMROЎm: m9f(Renoq*$CvBT*uZ{Q*V,*UyV%,5H>G{\9pT%\_o;<:<8],玙^rǻ9HT=WcvzvYIR}TUkQvprr[)ݪGEt|>/S~h}0>?r)ZS>5í)˯v[rYFT0nOv8t]ʭS>}0.APN*xۊqV,a 0D0C{I!.Sܒ̸$~$V SEB$ ZB"!rdCZm,|I4$D"%bIJJP-zeⴚXrIqqOLm}m>1m"e9J%㋵|yzǥZK|'/갎<~7!̟OϼddE~q[[Orkfa.o/o_wimxt[ܞ{r6cⴷ.Ul2mFbvS$ǛƉU<3n̲y[{r$ۯbqdH¡fd8sN71#j4'G̘si&RLOkne̘TF1fzBh=MB|qItK$4!nDjL[.3hUٛRfS$(Ajef>DJ\ܪ #hHL\fd&1=Y=>`$T"]Y "VHWt:Mf-t:Z+M-$qIYۥpLqsTL1s6e.[1x,kqm-./3^SIGM̰am`j,0{zmzzL휙6mc1,+f43ba{|=w2ަ̞M1PʠgCz\*.M-یĥ[Ƨqi3*F7K9]"ʹݶ[u 覧}Hq6!e)n#;n[ƌMӸ4ibC[Kn=DTPAd"Œx%ʥYjIkEԘvQiJ)U.+5#ӘԊKʌDKR+,Ŋ:V!v<Ԭ53.2!qqihƇ!>3Kf#̘cٚOE.tۜfLq6&C-øuSnQt'1#E[,Y2BnB"2Q>%nUr9-d(j<ۥri* e"7RnuxI4֬M.Qf{٣pI?˅*"Ra$XzSLv9fS>.$cby"ʚs{3Qtk]].=Ƈv9ʭݎrtTvksnB{>KKsT(叵q}Gʴ,om?P^*(b\zyiU.(ĭޢʭ|1(ERң**ƌy0k]bܖU*&|"b*m|JY˧2#۴3eUfXPC*I&D\F`0\f_uϦgFdҦiLIa٣x)K\[!&Sܦl2!c12a܆C)a"KS>Ze,\vYۦaŧr"SFO!>mEHer/]-Z^ְXYR3qq+i$xH"#qfr&>MZrKId))*))u9eja^±։z,k陧yr久]ʔmE:T8r%k:Q!փߚ___ C/~gjf 󗿸=T|9R_Trk:|ycya̘0KI&<^.[CH..ybe_ֲŒNl,oe`KUu<\2j$VIyi*͸,v#j.fiVqfG[.GD0XLoLOoZeaBTt~R.Qsq+:"0ST*12گfztTz3i.2✙ !l?ˌ?th]KJfڇJ0*L3n%REYY}ke4eZݑbTWN#=:cZ5iLl&RSӦJl)m#,p1^i5Β4yJ%͚*ӊaciS3eb̢Ǝ~w[+kf/2r62mϘ&mHXuLw#SZ".)ʥʧ BQ2įFƐêC}R>Zls cai%-nUѣP^ƨdf1){%n9\ҥ[-Mhrp\jTfѴ`(-.=LYSJo)"np`F(ң)LmѣN'YjJTmS=0i[=,JCOR}jcVfCFܚ,i es#,q*~J&=`4c-v.3:ev;ކ,5iGs&%cX%]R*ÐPDujqA$rO!qɰ̨h"pTehI6a㠛BʚJfu5!;G\j(E3hXIȶQM2eVeHJ%Uri>&f{YofR3}z=13=G\fv)SñY8Q5qĔ"2K_DRގjc˒㫪tckYcqT,+߰pA:#P<=e-z.-lk̘w3c^T| 5VE M,CzXv!Em6eBT%cQjPҺd% %e9ޤQAs.Z#JZ9q"%-2XRx QuD5Z]ǥK'|AQo|"n_e0ɭ¢8(_/ sfȻy[G2t/<(U<<*9 <͘dGLX.!a,,crts8}[e-/Y9)KK\ ɱƘ6Xn9sq4|о!G=IŘMUFO hTHYa$>P~1dNuք!brA"5}73 ;Д12. ŸLeNY% ai?LKeaLa0l/X5Egj)2sD3.ӓH*!f3L:{$,Id(od9^qIP[vˊN4{|F7q.3SZpI$rOƴ˷Y]eˌ9 'cOŦX9hE-KC0~.gud8(nuajTFmHhUĥBST2XQ13JBkRV[[eFHi9b2L֚nbbN1D>L)&eNmq&ghHp*RJ&t$HGBK!e%%#nnRJ5ClBQU&gRc, ˥ҥZUR=reaR63qkUn-1ѬPlnvIDD+Y)z11MAX9ی .DC5V)H#hjYIc,!5rԮG\#ɒ7,ps*g[=gsMyY>ejTEçP~(JEh,/G8(h.A9J(EJPKIE[KSo:VXCy,!.kmYeq+0])Ead1XKmMIrkfIXRcS1pKLXe)=ô5FŇ B663h3>rǸ0Lf6mzl1fazm|(Š#K$qi/sa&hƇĭC3.Q1Daƭ)20n'3>[0LhE0D$>-R~(-E,&![CRT r!*Ebc!GY+ԱДKK- \*E,/C*Wz]kɊ\fO4C*YMlsuO3۴M. o^Reovzd>'/d#/ގ<I</|~'>!EqPfhf+j 61f/._/ϿMoO߾YqӴnw6O.)2㶤4{z;{͹Dv͘kl3cZ{c0ÞY9,3^jY^6qzm8vŷ0U={jQ<)E]3yeZjz[ib̘235PmdD3e&1!B|!.%JCnxIKBI靌b0BGL+!GD2ۭLȅӥ&uLkJs0e֬E]ݪ|OU:[\bTIR]S.=qiG%%iA!Y9,59T%*)Hm6>á)ĥ{z63GWeN>LsRrqD"g;ebo3̨ozy 3n՞jS6mƑj\LMޔr20.k1f춟=3MdT4%]⁩=#hf|WLhUBBƭhOqef|8>]H43js+fb\ۄa6E9[[9b{[|bfhOf5պ)}j Uzܶ[mb?ղXeoødܖ޾+/3^R7D1q9ؔ,fRʌ:d(tfX-r]Vd9CrYխk*ԡZU)9:),QǑVrYl<}hKƴa)O.3͘Kݪ=؃e:w"ezwqUy쥈YC7Hv_^æѻ$vyu'u5t69qxI+% -d"b)[1%)e)\*'2C庰os]bƒKf\cƅeXfnz2N$H\aX%GH$K5^®^w֧>nMVDQe3<kG/?!w="d\|9LN_/.o~xyĬ'm}{/Dn6.OOzzoɷ/J嗢EnmӞVޝНq/b=fO?z=nee^ffӓ`?Zc?t]y]g[P.G3(~5^⻵C !0a&$ԯ8~7~CCL B1^<ƃK0#^#x;^!r !ʌOy9NtxLe)`sLۑ8p 1#(%GQ"vJ/8G•\'s9!b# iKFF.9qs29F͐[ &3c*hHd$M$I3DDva&f"0ddD"$1 xJaE/ISMjHLI4BBK"TBdK"+ DJ/ 1 !4D2 1RoAN $9ɋFR1w#DED/L"/SH8+&` Wry|i\'qq{xLrN#_r"JktfRDH̑#HL%=Ls11y%ԖNrC<9^[ɿx{?0w[)=y/,W}sE6|)g8֮yhV^j8cʑ8s9cVəa\f^\yes<| ÐzW9veIrm\厗pq9*GVnfSᐺ.s9 ɕ{x{ΘHq㺸+#7]3kThMէHP%QZHC2tjFK+DH$B?%!ߕzO57FB4Af$fdDBɌm6CcHLDrHDfͱ$95JklL/[;D[`j)]-h<%d$#%Cr$0s%ڎGzґ #usSi'LڝstK5ZQrVwQR]Ҹ?]nSSFE_C)V[knh=kGf:$1BNS5K J$^B$ƌDW,)H$2,Q\P1SK%1w2FB0 [-2^P['2rAm4%f 3ѪFp!o!K"4c31Gƹ8 bB828LR9*8##cQcB8gh8qsb-s}yok,IζWMbcjDO"t3⻠Maۺ뮭ge堭 ۜkLgKN$a;s(H3T0H"B%kIF"CQD)a0e&9%#[GhDb8g甙1QD┺FHH*cb%q'&rBhI-csEϙLLL2If"L<3$'|T)+D"R;D&/DV7'THљ\sIL:9i<19ǃE|q%qNT~ru?<5yF/9ɝyN. _>>[eSLRoQܹoD{':4v͗Ȇ-tzý6c2wm"MfLebD}SaYTjK\c%bd-e["T+),zJ[߄]?QC3 ;7eOƟ߉ZxUd_OEC/^72-²ƅs9{D/ !~"ba9^q.o4WUTMܡކ2㭌[_Ιb|m-^f;J5Uvj-VCENΌn Rmћ~W*-mҪ.ۮ>ukmzijDLV ﺔBXo>Pmʍzx+VtJJX?SDw?Z%!%1&^ ~3cߥ32GB$&!aEd\*c\?Snt9|^uyI͑7{ήϮ=EˮWMH}yOqsc92WzO/Ñ_I~3_|+^򕟽$?! aòr?_WOr_'N.ϻs+^v+/rs O}/GkpP/}jE{쇦n$w6ݻZavLgFvmKݨ2aů"d "~ֿ"s‘Hh"dk M9$֧v0[#Q: 914>ۉŸzonz[o3Z/= GnI"$nԍ=!ii/<2GV.$9t;;^7S/Gsj\V[1ٕ̹L$ns:waD&+229d뾵Fjqhnn4zˊfVza}f"||xhm+UbXHvޚv/ +foK$ e1TP[ˠ/]{k}jDFe֧vZwҚ&Yݮtt̰S=MVeoSۮ3~0Ƨ] Y/یB\ qz(m) e@,i\$^ZXTz s$'OyzY.b1C53m]e3#Of;15㹙H:]jxk-;?ꭱ^^f֧DKk4eoK^SekXRŒ>-FȡGYOOPڋf<װxm< 7. Do5˩IX-uy8hrC"6Om7ZhDY=HH$LrH$ov޻Z,}Kޞo/I2:"!\j󸞓|츚#דYɌٜ|9׳]/O5_OO.O[ս3^./7~h~[};[ǷorIܷ֭/o_<~1]5v?lfg{0zax]xay]?n}[\ߘaYocY?x7Ɵ[}׋_gXfXnn?,ύma߫\mY3l ߭PߍȈv$[/34XeqP71U]3lUXmV{iގwؕDʦ{̉6ÊjB5YvyIC[/I]]քK:I4ҴH{ dרл1VlȨ!)+rh[dx;,0Czj͌A PE}hnxJDE oa|W3>mfdo!~5eI[xkz^H+a$H2i<%#ly?x>ԧ|r^W<=mg:l?~pap&Ƨކ2Ǒ<*|"_U$~z[o)e[_yx_̳lM>/o||cvhK?xx~xj)uMޭķ bs̳78vΜ֧G ap1D>Gzs{9bcⰬSǣY][cF:)$JJTK/>z "Q^&1% G^bDbNvLN뭥>x[3{5֍)2/ u|7pKUIէuߒMoGLQ2"Ri`%4L 3'Mqfzsˢ-m/p>%^rTkI8͉xɅQ6f$2,CeR[] 0cr{rxtu%8^BW˜v.mv0f\Xojzif5ZE$jzIjoe]E>-/[Vpc9ܦ^ฟNo1(MV"4xC"҈L|VJkcf^< K&62d;vJe)WKoiz-MdXMN>&G2qv-3sleo^۰`j|Y<^.x[2, w;weOƟ֟ǯ2~?8x/] 3~0>}V? ⇑1c:&32 q .%i."-8'/s ;8T0r8v1CzT|6edvy'Wqp\ΎdZT5uqg|wvO%w4rj:_]]ÌGqU9Om~]d}DFڱXF˭]:;xy5;%9Hd233|x;r&m3ǜDeeK$#!#ս9DkZ]}yxʸL/ֳeH G. y1'oju}ތpVno8tzKOqHq?RxYN=x>-w촥Eu+ħ޺xYdgxi/siMVp<7猦2bֲRDEB%ZID⥍1JS~ 2"&ėӄ0Β[.5ae6vشd/tn!8mm)Cym׭Ŵ"UYt1;{9񔸷N5VөtݽrIM2V$;z9z{ו Zvg0;nE bKKhC)[bn6&!h۝;4*#U_M7"ḎeebŽ1l-t{{Xo2#JX/9-dL$#;tn?\ˬư\^xk!SWF22N=dH䘓c.:20!&crBx/ "-"7>?[?W|J;9]]/~7ħy|}3j0J1cMwAG7H~̹bɱOǷ;#<\'9r>r"jd]NrK5uKec4zKmtҜftePK!#a3BSoS+~!$R/Y'BbN2ȐH#GDlM)/jVin #K&6ֶۖ[mk*!*]$D$!w31TU?!DIcdl۽gK{J)3^NmQ7WL'VrJĉ}Wi㭬ͤ=Ú:%#!Mʽٺjcm]]˽nVcPlz 7w ~ 'BHĤ!M"(jRU1H !a$aR!b"zc&~JCU6,o9Fmt%:cJV*J%Ez eXV5C`lLDC##%!TjʲjTH!A/t[j !rVJ &NihHed&㇖IatN"C#ġաU3vz [eZ-!:+ۮE5Ҫ;n?5'*~X^**+Jiͮ8uȱ+ADbe*&NL21Ĵ!lE$Abo 3%KNt$^Ljc"ޞDN/%c"O!!$E"14DH$IzQyȃpY"i3s&ad2IN'&f$ C639C|$gc<\'4sESr<3fۤ7/9YLI&͋ij&&>x&svϨJKkf[kh%9ZI-lmfRmn2Uė%VK- Re1/?0JJPOԿx|~~KaύƟ֟Kϖː^:x)V`/.PK.-os㇙f 1F:r8/Crf82-<,#{8Drr!<_d]r|9p{':?b؛ [4/ם:d1Ƿ\|/>=o_\kr.|7_M>&a|/Wʯ'տ?{_gܱO]vg;O/]./~8獧#!;zy>~E>dxr8߰mg[]ɕys^no7n1's\Nu5c[{mdF7r˳%RRL⥭Px0#⇡֗`aj$^ve"/ #ʐdI*sv?Ǭax63 kwYof,)CFvEbDP4/k{xmY< c2&Ŋ%"'>yL2:s=lH60n]/9I4me-#7:qOwK͑vdG22IKXo36V)ϻv\7/-}7+V=ImOlk2v' cu-5cz1!,t>[/VEfF,)ޖeOh bzIާ~RoUۥKdn?fdz'ژ[sSO.}'2kxi+zwe C]^a^f[5]g{ {i\chm1^R%5ccxz.ϝl^Kyak3<3֝:Zw Ò2ɱ\,mHݷĮR/V=~O/Vb"Y;.2Rj.{'ܷmѧVO 77]!Һ5DK$DH| d6^筤vƗHĉKאH{Vb sˌ2^(˹ziq_6~/I$+/f$xI$/wl]-^Gl4\+ŧɔ;'eMby>ȇ39CWz+S5Iד>Ki&3<*M_<3~f=y~O_wmv~~l~m$k7i<=w~vm秙usk~X=,zk<װ,^{zz<})gXV1§֌ގ>C1h}_2c"z>>>Ps?*ڟ+Kw(h_GSV˗G+(v+ c<ʣr+D]WYĭOe7 eSe{#QlvmQn5zSZ*!|)5,(K*6e$+nJXn]V)\WMe=Ɖ[Ʒd)Uƫ˗zem\fJ`0C15:_f2#(Zr+Ez91x4if1=LӦG3Ӿƭ0ʴ[bRft2Ҕ 1413mƣ=2DiTxtxLaڴ[~M4LƴPn3nǭBGR-dUxħE*/z?$h)r%#ۭE*Yc/%!r{Y-J=$Rɲ^vjz-^j%KJm5n}ԲG{s]ۦև˭cwsZRo?(^N-wn˗۶hY7'gy? E_ǿ+1 |;_Ϳ;<޸~9/cg߾˻t{?ϺCin6ץj˴M/\I[[˕m;ת6'uM^s>N]$raf*f_ֶT^[mS%/uL{,1̸Ufm*f0jr1W>FkJ6cnm]3L3Ùn27ftCzd`R~!گf0SnӫP Sb-!hd[T)3$:֒DdF+iZ"?$2sZJCqI*AwF>5#Ls`Q݉n;%SS1ShV[SRKUfREhIE$~Xz3-嶼&Ζ2mJ>ZfigԘqjI*;EYvNXf܊ B;9ͨ`N̴S?Αe3L3,ZGYiafhfP11ʗVf3Eqkf˭Ha}?\\|Er/3{K/akܒ=._X|䒚5}|3q} }LJsjstA8푡5+یߵnAz5xKwfYEˌ32/hu"1#eo"XHFyMeWItf#IV^+%%%TP䛟ެ7{'%eII"XpZħv[RhF1VM9dgi)Z-}|ٌ[c"4`tV$DŽHTIH&01b!Df(!!r+)I![E02cA!ALCY!Ld23ȸ y%>dJ 깭Ld$z#dFdtL%fΈ!2iSk(D*iDŜTdNffj&zf ̤(!)sL3=:%eҤLf̘S=fz*ˊ,i3sC2=R1#e9ĭ"RkBSn[F1d´C1VeQFJ"a3nуJe2%HUT>I$EDbBII 5f$Erb.ŌGd(G#CX4-T#-%CdК2[H$VIQdBKQZTTJJGJ7MYKbWb 6VKJDm"eSh6ԈKUMɘL[ڲUH$VJPC5-Øф3c[EFf&-dT61oBns:~RMM_f||z]Oͫ5WU2DQs1qbΞ0bH$exۮcbk#VY'S[JT:eT IVVO )C!&b/Cbbxv+ZvKhĴD!%-,ڗ01(şwz>>>PQ?W'EP?WnSkʗfV>(4CѾlQQWE)_QnG[EPELRi.EE-B( q*lqk*]>*U"$PI&eO/YpԋXėbdi^Ks,6녤*ebmQ&+{[Og[挺jjU^]n= qK2Mǘ:43ef0343Ӵ̴13CsУC7"LTc;Bc93Ӎnbb NLӾRm1c|iB<.cxGdħ!~X>QF6Kn *Yn3,B"IM(kD(I"[VYVDjɖVVj{}S;N}IN/Ԓma{l벷ˣkx=]q3]7sXY֛7*V;m{\seQQ;o$(??oBwaWa<wM/f>(?>●z_fŹ9\s|3>޽7r]ʞ-ov/Iۅkٻi׹\l5eM_VKcDr˛Yy]ngn2e-36Z:y]Sk4cQ{3^{k3:1=݆aθu!c(zʣ.ffEwJiqJ4=&mF1̸EPRYAU0Q$J[RJm0fT9G햠eeK|i94%񩇲6s$eQꮙL3Gqfʐ'2Rв+ˣz:ۣ5#-K.$%ɮ+)c-_z%M ڒeo]Nʧ26Çs3&f&v'2ݦ9ʼXEwY/?e[E 25gƌ323lƌ1}YcsÇP,Ÿu)32e3 Cy*rktm0ӭC)3n2m% 3aEв11LKf2&[BV}L|i2fGMۊی32*jF13f{ft͸p>dM<ҥE0n-H3BG{lGngF;A4M+*⑸uq땐DP%$frcmq^ݺ^K,%4+D*5=dn{53ޘmSQ~kdN$jrƭʌ[63fU{)IRI֒dywx?zJѡhّEHR~$KM}v|[+WWr|T;^Y˴l*a*R6/|^y%kۗk>.eg{}bιo{y_خKr_z?O̿e~_? SnYksmn|]s\p>t:Scj>4[[Vժtq7oc<ʡmZx4E.?|]R(_o_)Ѿ'\P/K(ڭ|ikJոO]~(ڗ?*A)br+ ѾxDߕ/C)Ey|yQQ (EmXG& /35,[,2sXIܚZ֩e^>mJ*OyުGO}waܶeo۵]rkwY|c-?\P87(|T]Ti%K䰰mb›.i}tگ52R{mVbM5IaR>!&q[eƐ˄m*=#eڐLBʧA3)rD%!2j6!ԊR[ytK<DC[<I8 t)SA̸U4BȴHͨFRiM 9"TYILkk^ 惘AJk _f<^r[ݖFϔ4)9G̘8VUϴO㘹ZRq`,F3j$s`̨n'MDr`a*E<ߧgU&G&ơ,v\EF2*D$+R' >1Q1K_VihQLq|9n,[EiUI)z!E[ī(3=cqZʭڭ#1vKGbm.x}3Vq}il,B۴ _^3{p$[ѿX+th03*SP) 6°/atE)[Ԉ3L\lUV4dtc QK DMzX/6c{مJoΥfh=i32&ߴ.CL66/ftf Ӻ%#6cxq"n+mV((ۭ/"V܂XL43^2j)i%J#1ZS^ gYeS/-!tMiDnUDˌ),K_Bόm#5V$n%T9fɪDD/pܪXUNʴ_T&5 A*T2"튪$UIug-x[.k+vՒզS+YT΃ۛFov?ުѮl޾ci#Zcޗgomtҗ[t{kߩoo{%\Gsb3G_lq=}y[X-K߬ZOWjw.uƥkEQ'u% S>̻|3K)/?Tͼ o 7xs\Ǘo?/4CKgCc(fR^Z|ʟ)_3a^ nLKSʧudH$lq#&Yik Rezj"~3Gr[0sM427n眪$֗qRb(s>jP Sfrƌ鑸11ud##hUemFơEaLГhILԢO30N1Tėdz i0eэ3&" U9Hfm*tM6qQt!76T0ES&j*ݔnEi!6[E2K( ,i`K1AA ƌrKP>͈Y2n/cƭQnEcXaj*M5Cqk #[!2*/ͨ2`ڌd31!cFx1#MS)=46#Q&q+5Ɣta0 #bFe4f݌HSEیO%$&q{aΌ$H*AVI&n"Abf^J랩1]t.*a5> xN(,jCSE4i[KLdT8Z,=y0Li22ikbUz*ʌUcfU+y(խT 7f";I!}{,,o2ܪd:Yc18;#|g5m?v6ۧN&9YwLY.?l.{]FܪGe֥X[j]q'geq]n+r1>s>+OjsNg%Om,>uUWUk/3v(/}hj/YJYl.#My)^]ϣA\ESQZS^KRؾMr;`Q^ʧ7f5ҔRv[FjFQ!4mX]nD,hyx Qی66T-/Jd#JJI[-ef֥ddYdOnYV#2.doL[%%7/<,}&53ϩcĔi2=,EBhE̡g ƨvan͌=ƧiL3f8mfZ$Ac&6!zD3n6L+ڸԘѭ0˗v2ės9a ˗ô_ƴ2#H"E12^Tx O Q TbX*~XYŒ"Xhd%JCQI܊RP!oTjKV[KS7ک/O\nkK_3G..S~bkK9˅RR[mmmukҗC_Գjsy"(?ϲ=S(BaK 0Kf ao1\(VOiۜw};{/xF>3Jkrmq]ckb>x9Yxi,޻W_T\l.޶s2햒RJJJeZ'geX~+.%&~H):bY1%WaⶊdD%Cʊn•Y4qK(5n^bdtݥ̸ę8gjbx)3\^M:ʊC1Bǧr+Y5n]]fq$Òؒ-!-(Um%$H-i[^f3ߜ-6Lamm5ng\K /ʢ<ܖ5&3>51fdr>3ԸZ2Q[MZW{iFڌ[nZ&n%ene3V&1[$RɣVb!c}]myi=f439(/J1:Oվ afHuV=:=0]O⩊02:>jÌ^-:8^.ŲQKm3*Rz^^-R^mb?3f|:C+TuKFmJ_ji"TurKSj ݔE-UVZB1öVUɪ5f*mFV̸UѲ(s2jͨ魜q}PkF֬1cZLG✙ЄD$1$ѭH$fJaRsȊ.stPh*BnmF5zgdLT%5I05ägtfhUi4"#q[[΄Ѥ&񫉍ܚ(m.%ǖ%#șB▩!DƔ[-YeZ*GPZ43i2==r{l+d%e%Y%+k^u$Z6|{;5=q{<'uJƕUG~yjr{f..\ߥ7GUY;k?_9t~U˧he|u}7Ͽ}u^λl:R_3m˻.ʜ8ϴScé:1rue.j vv}i\"~ xYRntj/^'ݯjj/Cko0D(/ 0~gSKƌYFQK1P^rhf1Q>Uh*dtmRFR3XřO=Dd,YIši*kRIan+#R/㤖J6*Tx {k%F*CDi*f+Tx9&c&RXq8cPZB!B356amF̤IẗӅBܺF 13e*C/cEFi)eVra$[h&n"^7Q̸ee-aeX$UTx/Q~[!nKof(g$Xeq/[!ORYRBtIYʣvzFQ'Oeܖvjda;c+\y,Vojvl\[y[&\m_cB.፹ ռf+^KSB+c/7WJs6x{xpP;(3+||h/onmX=^a꩏z&km{9ok_M{Dz^fʧemW+/).݊}9KimXaZxT9 ,fӉH9XV2YANY"̒&&-EV( '3?hMb!,$Dȭ&~UQ^fRQh?h186dE!ee)_&cуr;S㇔HK'^^VD=iɩT242ӬI::2L3W&f$LNU310cL2nitp#q ҴBk1q0S#6%3ABU#a= *geH{^.UOHBG0~1s[/׸="fԐjJ(ڗ mXcm5P,D!n<o-h֕h KqNO JȪZҗŔi V,MLД0HI*81$nQ(Y6J%,/˗1#tjd|0f6햘)U!˗KB9K7Qq단r jGV,-<˵)t%*0Cm"cFf4^2GB)_m3sgE˼֭[̜q0i`onz2DŽq;#E%1Ѭ)F) uҭDDP>2Q )M$&BHZQdzJraembsyv՜KҭrJZ-gXK *i(񲶹h$Z[zh+Y%EhZԥ,JTLYV*od7ϣǢ7'S!jʹZ#̛5ӺRz˪33[(v...s9\9=v<ez..3{>>Z{7ew䧮moL<8cyMA"HWb}G>K\jju3\v"~ol\~Ͱ|\qkKыUDܚMSMy)گ(ݯx<ϧ"oO^Pn!hMҔTؾM(e,MUTQ3^l>U.5ZMS,Zmv+nmNQ) 5i23:ڗq "c/Q̸jy Q喊x)r$n !>( ^n 6!VLB$DcY&a()ZնRQ[JVRjeJy|S;?չl/}M_*R[ھm/}Rї[mRۭes<ܮ4}RGSgyII~f?P",¢|i/^oaaݼ{y7bτ<眿:xw]_#W}ニM=R㡏cumλi>.Xxygx9R~UyCxe3}\kƹikfGhg>-#3'=Nz>i$!5!2fd)~ds|ꉌ3KH#FH"-!&rՕ9Qت)˭*t$ёhDu(3+y.234BM$\336nr4 e O >7&ʗf1VLڸdfRPBdJb+ٶԣSD+)mL=mQ13Zksk,ס)KL)nk-aR͌GM3j*̇gLK2J"Cϸ%^Jq3>24v;-ű9xYU=[E>:9zJJ V2#IzNKeQ̨EY4f9OeFOqEqr޽T rCȦ'5Ɯim9<ͨmb$>]j34vCv[nMM[})i/c00 CΘvfTaCV\Jm¸7{p,YWџX+tQ4 T+B;@3Lc3xk"ی[2e=沷J*L>㹱Ve=*UX9K[m3u^=3Țy1i=fL1a6~jlbhHfT֭Jboi[O323ʑL7EOt-jHD&-ًV3cgv$3mƌn,IҔ.]JZ+5SYD1xT*3nMj*ܖ*nxT 孻լ2#IE7G[妒Z*FE*Pzt-s9MqzގT+iJ%keg=|sj?_^2,JL}I8SyNNlX*.y嶞?v]~gӟ>SO+Y?vfיku.OA7߯i/]zq;f.gҦ_WO_NϏjә1y^4fNՏWЮ܊WR* _f^.qRC{+ĭ_k//(@x<Tb_hgCy7˗~3ی1/m+u◢46ğDf VmQbP0gv.!xo3MR1՚XYR/E²ʭ"Zy,孒CRIyd-A!yƭf$5EWƼdh$OEJ4WYhR*j9{0$f#z2<㭉$C縂ċiԘZSW_ezұKAH RI=&qM9F:SV*+ +Y!#*ͤ[ğ[o0 q3SK !7/**n3K/Ő*)0x˸ 1#id_VT:QKS6m0VT_eDoJJ"XROK,)\ˬR{c+n}%ۦAؾonmi5o×-oVXn ގ_a{ťl6GDyaߔߔf1/6Ow^0My7>_n͹\x1u|,~e=SVRc?\*nW,~]XfZ=S1Q=T[no嶽]hEvesyK8~Y/'C^F+E'/e!{m 㯴cW(_/cAQiFa1xPSOrk**=VLS6ư#1 iozHKX$RHG+)Gbz(KZVRc[0ކMS/x_o!~o/h=<y)#x=;mjsߧZZ]^rx~`}mc>].LmEXӗ}mce!r{tVv[T O^O>TE59ǣU uM"5=癖譏`Z1hQUQDtZ3cb oL){mD⧒B2nP"+JfƈTN ,1z-mEGDwİʔ9ṉd53G!FO*")U\f-AϑaJEr޻Twv+-rQe3L)f83d3Ҙ:#jL HfF,CHĒ[=pjSj8Цj+پ4L֚ȢJfj "Lݵ:˭L_%cƌjPRCdIPPݎZǧӌŌ[hj%-8nj!<63TͤJ҉I mo.UTSے%y&qKTn$R#ZKM̴3Jum&2Qs3g=gve<[*Y*槍S=~eT*3͙|:Gz,cݟ߭3˙6yc/.̳wyu|nJZzb_.}||2󕏧?2^yYXYe-3'ulII-FTe8W֙C8]\۾qa=;S-%]6)ʰV6y|C/Uy8AgUuz-˚cGFɲwTQfD9<k)2V崊hkjbaܦ'Q6TdP3F![ #Ӕ)}2DE-DP ,ӭfDZČ7M1fv+o(Tay[r%[ԊSTܺԥpZ)ȸMOR)9&2dm 3z͔Pmvbz%FU[ZRˊs*6[6 ;zh:#)VSR3R[wUCǙ]jRY̤tLIbgUItrкJu9-#5ei=0aTѴ0qseGiX<5jD-eFVMUyk{dI$~j6-%q5n03Q6z02jn=洔a-5."<ƌuQ1%-1e^n_C.k1K3%Zcgy46c>CE-bm`K4kܮk̘zI)vaf*UBmɕ?-Ì*]M{ڧQc&#[s(nMofpp43fpbaB_n3Bŭx=Vd.}Y14a 3L)!5bcɒq1FfjoVDyFT2G_KBժ'vnUQm=̨YI4k83 ˭/oϪVT(RJeiGrVQ?rM]F:3JV6qTIRQKZj%b6ׅUa,o3f#2YUw>V>xr=kgoˣ5mˣ߻ʭkTg&GYss͏O;6-?`0YQ|eo5]4{s?q޽ks]/v]n|8o/5fsZ9ʪ:\W'Z}:h[r/˃H0/Yn{ih/hEmHs-?h#7x]n5C74teE2c"v!b qf[ӪoE5eQ͖y 5Z^˘%C4ag-ԵRNT븕z߼BoJj:Ίcꪕ%.'k?L+f9:+[-?IE-h, 3- "8(isPUh<$q!J$JLb$cblN\3ÊGL$QI3=3!#əXLOd2SsM̴HmFS] 1_Ff [q6#3tB9~*Hd1D1$DM1C V(oqT$IDhc2$m JZ,I B$VkVHg(_hj+j%KmƗd*LeFrzeYK# r.x\Ox[l,or{lbM{P|< o0_ o<|<|˭&eqpnm{P[5_>mx|ǥ.͟~Χ>Ǿ|^u]>-n>s9Rr[l_JιLe-3mf5/N,sbz~cudm}00GY$,5$*-4Uanf$ŜfӪ*e[ؒ21kJ$Fؚ"~iZČ?KeVJ13SjeFBDZ.lia[`)攌IgG= [Q[QOoOfdTqn3:sLaCEb֑NEKF[Pәz1Z5 ;uIܾ}_uyi<ڱVԘ1i SƭJHY\uUօeu id.e¢m͌U&fƗJ.UȃXLjɖdQ, _<֑BURЬ걨H$ES\?}q#lgԖ1cmbt˨VLT[=iesPZjP-^Qnͥb=§*p-+zPiy}QN2>"1zRVKr]^N9.jl5ש序^׍.En0*66J\Iwh79]Ѽm_+|G޷vֵk߾[V/+8oo{wVw?;k㻕c]יs*% Zs>\i1#R^Gc!C/MSMy)_jʿdC3W~W?)Kyi2fOR>ƟH%V 2fdLӣPV(?,Ԥ6%SiYd*51G6X%+y[-ՄyId/yp,YqYBJ8Xx[9,-͜ѺY|bX+O#1Uˊ8 KdEIUM2#LĬJ##PUPUx]N̼Uj;$=C2G̬AwFţZ^%D{)%$Mfb(x)u3%4ŴG+_S0W HHLbH$EaL&9zamP谬[Ii⥖:r,)"c-3ig+U,3q?铜VjOu5}vΦ94Ŧ|,Y^)_#mx7~w˗767'-_$^x/޸|q\Sߝ~[y٦x|U{~bxuqmYl}~ͽq--oM:> ~*slHԛsL]7m,3pXYkp.L1YKŌ}yZ&5cUffLҲDhPeU#=ix4I(bń*DI37y+ݲȮ&m+uIE;-Ka|6Ƨb&Ȳh/CH$Ct,QWz⑴He_+5f2G=[q 0h5JB\#CKL1αj^2G1X܆l+4k݊,UnZ-S26f6l$jD$Bb1Cy$2cƌiu( 11C#Ui)˔jأۦDH{w9?Hd\Ǿ2=N*8i K2qJxL$gMUȒh;cF̌Dz3 3Ì!j3cǧ( ːCd43#H"S茕LYP$TȘ*GX,*]H$~WT'Z(Z6|$k I֤T9#ʘʎD#$MtY%S*2Vw![ckxYEXVm*;A*RJŧJGqJR}'Y]G=앪LrEU,~u8Sr;*kUG|r]UY6{eΛgQ7emשּׂg?lY_7/N{tOqm{ӛqnk}t{7v1*r0YmǬ8l}>BdYs;9TM*ݾD5Y^ʗ奋_.>/T_VD_?Wь]ZSYSYߌ//1,xGy8zpc/*axT)a$KfF0^d CH)_VkxL,e!3YͲ)Zd%?ʖK-B,/o~tYY8Z~⼯2Es̚Z3\Z}aY NL{QJͤPMŌBDVdI4-^R}֬q 3ԘkLb#L3Iؕ5JcTQQՌ1+K| Ԑ}cTcuW0ctIkUz(!^̬1-3) DB|xxx Z# [Q%!LMQm!k2e-$DLKފ$lٱdIɒɺ(cz ۧ=>REZ*uq9LXlVfS,_rdE\^򈗽9n_rL{)Men"owYB%d߅;o曏8ޯ9_nn6oouO޶k9N-|lv9WH<7[jalm?-֢f$bK4Q܄7ms{lL̘,8ZZ36/ +k}62kܷ7o۹虉Z&e| #QUQKe j""eP>T( Do6!5 S#G H(B͘M"U&5VrR0"3S&.539~(Txi}Mqd C2oIC#)_IxLJHlчE6M3ۡ85ݲ=f*7/I["cOWEFz(hL:2]V+B/jcW鉔GSTd$ ދqֽR4*2GcBd)/}LKƣ()Ą(?VS3>%T+$[zRNLIѣnZ5N{49s*6J1U+cJ.59j$\=l0)JH$Һ.nswurdӊlkҷ~rZ&'DGBXIU3S1cU0&F,ͰD}P b U^"qa2BZD.uIӔV*͌%6ciDZ-HSG-xMU03>#CccbR jɤh32&9#8LzL)ĐTUbbX݌ڪ5efn*2(Ӆ<%LcEB{E)ʌGF11VQ*Jg̿yUw}'IGm_~x#^ŷ[3h9^Ʉ^>YGԥG ѪuU},Z`)tNy}r K}Rw_+RԔA_5#1%?R0ħ})/?1jy)Q^U_?)˧*NiA)Vxa#Q)HD aiģ1^K/bZ-'>U̡Ȥ) !#fy\+ɛ%-[v\T#We_,,X,/%^?BXNβmo2f}l~Vc'D镔8)\4955.M͜)*s&D v̊(#~H ݣ13wOMm88NVLf L12TQNfz*kk(gyN; gaGH{4Mŗ12Pd 崙a1$efG ӭa]|_c?Y}#P"TT(,3$J#XQToj|Y>UyHYDb(H1L#цxT[mf%%Ҵ`cƣ"!"&2UunGJUS~h]cfTIL1cft()&&ifġ"呩`fb2Dd-t,YG{[Mk0wۋk9x$S[i cRL1iU52dMbUM5Ipdʌièh2:Zmj"6c#"4YE-!ģ=Jf*ݒX+3飩;ǗV[3nʣhjIݸ=*x(2GmڙZQ9TuьĔi6۸z3c;70?nGM٥* l1`h3j#~Ch3f\㌌ [R;{L F\X VZ\WEϑm-UʱRstMeVPenf͘a&LE!$>GQK1j4IM"*gI'}蛲K][T*G}ijkd1c&KXjёdCVBUf%,W6U*/0jYR(,{+/3+Vej|)dR%Q;U~QQ9k*5Q*ծ:mQ:۾޳6uUYL߲UY˚nފv_-|f^.WE֛)}i}}KN\zG͢ޭ}Lރ wm7ۺۻӊsREs[۷}߽K[?fq[s}rur_s{w}c=zeYvߧ=뺾[rsk)junU9(U.ׇEW4ˊ/o?W/㟕/Eh//Ma|)^zPƌQ %^f<|1#ɤK8ES PhJ#S2'T1#ŌΉD"bM.[ۥ~͗KM ,,v kԸo3ǜMڗ J)GL䞹qMO)M*Yd<:M䇙1Rhty!c%YGţU3ete>[c|Sgģ.EOm0ޗuy||ܵ}v6C|_ln?|^o>LH!U>w6*fM|8u25doNJa,<2e6=f, eOYO]9LD0Xd$z%2q&|4x3>=H;P%ͨ$u-m9Fg4INgI*3(,7_ڨ|f\>y6*$/j;fPM82LgjϜѣG1Ue`LOReh=Q%Uj3z ka 3&j8O 3*گf35C&GbD6Lh7l}=z3CӲ̴.݉C>eF-U&-XRٲVԶKڧxc C1^1#K#~Gƌ͇njuPLFSb P,3rT[Z2>DBT'AU;1K= c|"h*Qڣ111egFa˜afH&WνUs%m쮼8ȞrVZlh" ӆ m} Va]2z2eVJm̚L+&NܲdQTIhʣ=Z*HiJZ-۸m1(Z~*,sjffL ƔY3TGZB!3bfμORNT4Y>QE'ܮU!L2CVԊ˪T$~JӦ(bO&т|8RVd/^gy3LWj/6eYY_۷}թ\rʻ[f9Ȫq;nU˯N\~ֲ0orXm6kCw=o a5T/VL|k=Go̸}kq뭏u۲X\x"o|QՇ S֥*-ݶj&UN~(Z.oǧ|ŇW_((_jʟ]_͌[!)?=,V>-6EyP(mţU3R~bFa(a̚Č*)czJabTyT&mPg",;T )!dL"lvH^RR䕷+jexXG25xdPZ2n'B"#jPiUZԤoL=aO㇌r#[nnSB!*7eQcB H%~L(,+ħ%E-o2۴4i3;YcyLfN2kp,b"xcƶECo~Z_ygt1΋qto7{2>*n_ړe>=MYRRnk_s]A:}媏i>ˢm&sLqT1TUWE*ͭaTQZ}q^ދ7_\Xfm_ws4UćJʿ|9ny8s}>_x{7woӥ_{_u~]گr.¬]|w\ۯ~Z9uzxչ2y;ۺez-V-Һ mG{/>zj#VGr;->I}?1gqK SSj;MkQ,,Ƨ0i4OӌG1nQSɐa1Q0Q>.ʜQŒ[eB1=aQnUɒ+ܖA*o_daqXr;n{q6,pn7&2/ir+iSm-3꼔dCb̈́$=3hZNmʧ<ʧF42g2,یb *ʣUֳW_nRY32=NLWהTƸ&f>*>ؗkڬj8G~M1a^Myiy\pFћq[}i}t[V-I/&j(.Ӻ6dMnS3q[Ť5ue.49b cU8eFIm"m"1Ud0$#R)*R 1QUǰ^鉫)rͩ,ManSXef cI"hШ!LѣP廉x.UcZfa2̘x&Le8JCaƨ6fFVILĭ%i)IN2eR3$Smx05p /Yn+͘X3Kbf01C%U*{TP~(]efTJuպ|j[+5>F2K9!j{3[X/=f<Q%Hl$Qety.tQDEVwh|Cҧ Rfe*݊.5n&2*YfJX*җ)ډ1/ĭ##֛Uu¢y5,k-;?L\/Xl\_Yf!e3>E,"q[a[QeˊȘX$:޷[WhZE菵)l5f쭯B CO̸.$Ψxb,De&d^$L̘S0cb3cYf 3&&B1 #A[H-taFb"#2+H*UTQM&Ìb"Xa2j[n呫O==mj׌nk樑SXKR=:?D3VdʒX]T(*IvQR q>*I|xTۣ&G0$`]T^+Zofqs׿vjxcaq}_']+p>/3o/v\_J~zJz?˺q//WjNiy7~/_W}k]x_k[/o6ͥJ7R)Ͱo>Hd-vA\1QPmqIy$;rҽhz[8MSLJ8Nv%~ _)PS~WԔ?+?laa5OF~_+6<3O=ti<1T5P>[hj:wEC]<ƴ*GŸbBLM&a+JPUKO[Qכ)ֱ嶭˹qej-~:D֌ʛ92&moTC9"tUq~iEf& ٣0wQ}j|6Lb>\*( a[$3UtLf4Q辆B"QP(i-bdb F#eЌS´#cjT)qM(Ƨ0cy =,+q#1M&k܆.QOw%CeL3!""WFbL)sMB{ܒʪZACaF,ft34*G1cP8g֊?k1T6[bEc&$!tJLQ%]˲x.&iʎp$#5 {·~90v a̘cF\&3XS-cBK<51IרvkttRtĎT3v7њbe4*Mw|5 ޫIevE>:/>WڪaбJKīuѭZAy4Myh,Ƨ/;['Ewl/3DG (!_|ƣ4nEc֐&PckHl¨hUUm2aTycPʭbħx,]U1fKLxlJbQxYQK}j kYox[9nsY;6Y=qD-e,sQ~:XcQ(,)i./c9X5s46ң{-&E%EI!J C۴5+5qIbQ"m-(YnAlg:=Ufi-of驪TU<>H#f"FB I~(?$P[M1c9C-F+V)3mCØQ"ħ˜&<;nAXYj31nYDG6M2=ʭJmJaX/^ 񇉼GQ ahxG{ φWQܲץ>\~Qɹ\׼g}q]ˇb|rKzmOm9Wmj,lqMQ/! gRs[KǖlYKuǰjh:zS8k2q,/}کJ2u"}p6Db&)%3ZS;!D"3L0Jc0H|M5Vk0cay4*4n֢&ө0k" Lh$!2]KU<&dQCL#(V-eCc-]UG0GȚiyL)!mFjZ-?D *5jI2](a1=33AJpXδGLbzyk1c(\dIt22G2bb(Rޖ2m(lC"Bі[֘1a1TV] ݭ2L\*·D[ 4KŧBJŊ]&Vtx3YFe,%_M-ݩ׫X#0$mɞ1)%U3ͪ覚b/u\RE֒5Cb9V_h;rxh2$K7s-᰼H]f$Y8֛*X1;13Vmmy̘1 1C1/.%CtQ|ƎC(umr[^A-s>%V%LUd&2*Z2nj[ʭ*3v 8ۣ$&4G1ʴn3͘de̸hAlb-EJGQaYMO=-㐱qE+ֶ+' "Ef?$)>8n+RvNLm-e21)U[8"֨UiPvH-XjR>6Vm{*;Gky j o)i{̒~3uXZC*&Ϥ&ʪrʇrҵ}Tʇxy{dxu&gks8fecu}y?k~_ud\^76W~r]˅}p[N_,:/sQďy{y}.jΤWن6?\{qr0x8Y5?zeiXI7K%=ۯS9r2\yI8XK/t[dU:hOm/As(zY-^RZݓ A3nS39D +cr\#e2n_:¨"2vk )]J>Z C1 R22f95iC|* e1,C$aT$T(Un EM,RJDm,/f{YۄOy$*_*"URǖe~U%Kܲ\K7f-|hHr|Y,/)xY8r6M{d7?> M1pEe_2~;nslڟMcj'E[{׹mxZ˷:y|^t1Uzj# Kܦ՞TL̸RaeFvTS3}ѫi+ffXd 2fʖb6x[Fܒr =ϱv2S[ S[_=K0ZHDي̌!~W~Wjkh[Ơ0QI{ie.tIRU=&2I;cYO?dhhT%Y\na&Cr+$KI&%OP5)$%#k,am"TqFLdf0&f0[ K/g,/zr PnRѪ[FaLg)*33kP>MԒ-26GvKS嶶ۄHܪ&,4K[J9l9fzRs:Eƌ*aѲ3')rrKX' =T,Ke6nqKQ[#K.UvIȱC]SJ3lG{ۮXtJ6lM%m2uͰhZʌFt%ė.}y)Ury-KMLֲVc*gkNtSe&LwedO?)igeb%ێaʰ߸̘ECRttt$ff03nsՌkǗHkv$ft ##MfILЪh)"#veS1;e"YVKZ"mF0>2cͥS&&333)/s&A2v$f%K-U %KCQ.;H,}vPd/ *5ĭʭ{hj$¢(6ֲ*Uyag*kR5ỴUu kyYzͱ}K?{{u\smÜo߾6g==:>:ϓe~zk޳jӿꇩVS\ޛ3]XN~͓~oG}*U㩗[VzuruQ̛zd?\ʷx\UۏUTSVtXuaY^ʧCėSϚq|)/nk9|ɃRӊ}i?ӟmIv+R^[/e  e,PK)C1Q⥤eS ZUSb-J"uo]3MY<1?x+Z,męRc6n28b`-0`8=xY1NC砱RVn)0KLM\^hjKPZuK2V;ͤky$5jPCT{zm*SFG#⥙(E+"5e(˔i!niQK֣f9nRn ` R(zI!f| %f$*ĭ">t B&E5V$ Q(ܪ|j/+>QE(_.ۢe*(SYxm꛳t 3eMwnunǶXeګų GZ6ǧh\21Z6er:GU&8JhYLbHM0L'PP"~WqKLb$;3D#߉[ŠL:ٻOM_v:YtIC$SQ}2yQEќF0pΩfK1.O+bҭJ٭'US+utf&Ӧf04jLe=UnMt.%3QR^=㴬,K#LI_H&$ cQnd̬YUX3mNGn3n'f ZVLa*>jVcFSnE#bEQ)A61Eƴ$ݛRncRCDq{jVB*R4BMSO|R!^.gKԕ)SJO4%TQcQeq[QNDMՔj8T,\lMPvq,캮&t*6QqDF?=RrCcr>ʇJ=$2On~pǑHq&n3lFeZ9fH$ffx!BrXoa*, 6ی3h(^+13fh<ێ3ByR.FHBPΰT3yc6-ezf H)KfV;C3+PRcH03B3ʘx0&8CSrLnnhe(䱒N$/O-QnjʄkUE0ÏK=4IʭwV$+EY*VqrL̬]$QRA2Lx`ȭlEJEiP^eiS+fD%nF*SYod7ꕬ:-X&v7dVs\^~:nwk9pm:c۳ͬw9q^y̏굊5m-=3(Uj\wx{ey#NVuz/ׯ?ަ}og:5o`ͺI23n|'K*~>j2bk-^iO_KДO{P4M5Ol/Sʇ4})wi;E6Oxxiȸ܂/c 5&ʌ26)l R^Y)FŠh aI6f-big52%eeax)KJn%S*` 0Pf[K"de&neR~/奊q Rq+E"^Cb(B^bE-ĭ"T%Mm/ջ]Rc-$Kʔ,[֛ZZBQ>hJr{xY ar,_.,%,l-^n-̛OM0^!^|i+2^7/) .O6%kۛxxdyy.ėb_Ttř./Xq]>d۴)jp)L/z5&6̩aq'u Q,$&zLzEJm|XC4!mDa&ɴA?jfpT_TjQ6^n336f!B̠[-Un] cNiLt6fgfbdDD1!C!9k143LE2UqtelO|hĴ+nEԘM1cQ Sf܆IQL$*Ewr+HK6RRMQ2f4KUwg1:FTx["Q43z.[b8JP)H4iKIU$!_T='P>D1cr#K}Fm.ݴ)[F=ZDH$)34H3nL)MoU:CrvڌlkYLKiÌct1ql!mF9^%!Z&L6%tDXuXF[9Rӆ9n1CE˸ƌ//e(2M ð*1a63xaMsII ! #C3[10^g&#[U1èR( %&J 1u-ef܆Tz^mz!m!Pc]5m[ĬԖHP%+#>*H|c;SqIKCY"I5jܮnʇ t(*%akeJUޘGVeCWκܾ;˶ecbkvk|"kΏ\9S{0ߏ۪nns[\)M/q1]vwamolzt*uoMT[mu\+iw.0IO1LfshBf9EAyG#,h6#g^SgwO/h(ڗ/ Q%Mw32ѰekCE *CxIR/3C|I͢0A"Rnf0!D!X}>ˢZE9SS|] 5*QDiJBa*IQFV8R Rˣr#]ڲQoKGY涖*-Y]V^R%e=]?=MȒws8,/Oxw\Kygfy?|_B{x&^ah.?|j[cpdo_]^{mSW[D= D_5}~}M溦fo6}Xj{.ky[O`{seqwc2,}Whk!L/uettReq6mVLULBigʭQPiITYc0}( Ei/"`"9S!EdfB'CL%t"AtddRӔۮ>ϙ0)f>t EQ96#nYIJji54\ RfTK-SQ̘֣ %fQILMJMt%e:y뒰̙%I5 cŧf"pV=dW1#M)GܦSB3i)vDm=kyj i;fMtSԢJh0zm+/}Ɛ1=m ,BZQ%>?Ty9˜jTFmN10.iiuzRkQ[UiFVr&JS6?0PGk$V8Vmn)iYDiVu|Z^^DJ6XG;tV338 %cFd|8jUv+COk23z{TVv.o9"v$Ψ0TE>)1iTc*=VY -ˌȮ[Y$f*Kf ٺ}JV4=elj"0(JBUnfT 1Ur(bJJF?uTT'*sLT$jȸ-${'ˇţfgco}=*g̪Vߊ*4ʊdRc*Vט($ovj%K7ӭdMʎħZtjP!-f2MF^k/Ur|TYoV2[&ky_{-ebk_|ߕ7̓шvcs]׺0}eq~x{}kN&9p~xl}]o?]?ۏR.y"i}[m~؃eɒLEf!(?:շ1 rE$-۫/>r=^RN*Un߾}?ۮc:߭1jls,fXY&ZlOg>x,z)ey,Y#xW+z=3J,ⰈOETSҔ:I?5(˗OC(0+ۘOMyң[]~La!2o!,31i9R ChJ K5OAHDŬ cʹZr$δcy;xeȲB? a/9n fH挦 tfo:SUzMN<*]:^/UR0-~XIt3~(q V;-ݚ&\3h13G88lT^f8^/B(f[-fT16/Jy"zyzyHڭ)_f84Ǭ~o5,ILzAi)?6m 凡EPTS56j,x[WRW[)Remj;KYI٥VK,{%ˣe=I)SS[4Kbxby;ǃ凇Oom.\.o16~Ok7ưi>y6/>i5)/7OC0>y!\|\ƥ~\r}w:q1ms\<۞Z Ƿsa9H٭_z"cp3K=/L^iE鬥vtcn]8SRI[\#K܊)4rVV3I)30X,oESJfƗք!"è%FʹZIUDT*;3 LMu-2֔)ZAЦԡDPʴ)rJ!ъa ˌԨrc*z%eUR0D-61ɤf19zXnUe.TRs<斳A7ci]Ӕ)8g)yvFU*&FJa"%Eѭj[3]Ѭe*TOTwRPub2JEJČ*ʴ%#ܺ$jL[ט8P].oݺ&5CKԡ(ݪ8<\#Z2=SO\ч}Tޫ.mbJmFbJF<)azZ^ĭqx+~ebi1c§g)lyr]jOsQScFݚr,vF+k<ڔ(oTeū=6[8,:F:S,=uƚY\#a%q."H*uQKӓU MЌ6F1&,9n!e%%PXdLf$*I%)Z8LLtO%aԥV+bԒKF3V$ns8h)FLL|)$k*e-5gX[F+Ǣ4IVLVJUOWԩUV:eoU=L8Ue9Uk٦U*T]vr̙+**gr։6֬Uo%G~{3y<a`G*boP'by۬q]},gs\~̕>k\Gc?W_u-~+<>mlss=ruMRҿ\9C{sep˵~s}w[ҕT'=n2:rPV>בȢ8Sth9, w^/O>ik㴿sX~xr{hG㿨%-WG?#kCcxk"~ -Tax oUAx+OƘ!a2-$5#`&*H$PURH("[yT%!DXoqK( ʐay$RI%[jJ󙬤V*nbR1*2&fdI:Ȓ%%C%Ә2;˘,6cf|YQĭtik2k*L2Y[e=SY*kDH-[-)YQ"*ʮzTvjHiII%3c6Ub3Ȥ );*Jm0BHB"զTQ̤F*CR,T ))) 5&▨0$R-eH$n)ɚ*n0"QemYD"[Ȓ%#d([ER$Dx"T޲x;{T*jS+ 6D]ojYԇ,0D[[l|cmK/?\xk6x!|r!̇{\O/s]:קMϨegXOQ[)Yzn͘bԙ1#Qˮ˘> EQV0~Ҕ,it0FM8WU:EF%g<%SyHwMǙiӆL5.=SRzLjDIVcmCFHTAVJjuD$㖪6F-J*UYR)U$!3̪ KgqUR5I&=UFUj%{?!dLHʹAS!cf!IfLȚԘ Tat*ė bQ--t,CKa)S=̞.Mjt虩%L!3 #9"JLDŽ&R)ԦܒX",ԊL1!HJLV2ZF$$S#QnLOAa"eJ%S Y$naڄ52L&=`̴lV1m"2&n3.jzRZtБDЭJ/Ŝ2AJ)i%#*0KQŨK,ob$OYjKSRYl)T$BPVɲg4!6Q*,| 5aomUVmeMңLE[*ӓ1nYUmoQMHdIk)ֶ"?Td')hE7嶷#k+nmpLg%30`S FU ZQhI%r Lf̸%L[+A.J4Vam-)ZbHJ$k$-C$22٣$nT {DR*j["TVR%gXLVJJ-zVu1HSj$U%3RNjMI$&*SlĢ2*+($HC^Z{zL=cՖUT<'.bGEb(;!o1Z(tQnE]:=gW嶵קzՙ)Q窽6t,5szyu>S52quVco^LViXK_f̸]EOyu+ ;s8[.]1θu#[͜Glnc] vr9fdtg 25sd(f1Cń_mhRa(b̨C+hCې!i`լM2? dcmoX c 6ƭ⭼[RކbA,oJ̶vÒRdTVAͬg,hZ>hѴiE'eET};ΞuOiqdbvW/㶈5^65^<۸u(ʜv;/M/U!S~oQ3/Jj-oEk\zT6]~N_59Z<R+Y/oQqaƜFVSV 'W[3mK|!tKaΊ 5^ K-!0#/QAbsj=~Yf¸%J²hEhH:CVH0RlZ֒%KZMleD䣤TUQ'6%eԲ+iKQŒXROY.ʄlo؞[ƅC~z/1aOy-YӖcۣ~3۷ |f;z^gr^Z{ pc2>nl sp;.?,sZ<9nkXmX#ù,MQ!Z]Q]SOK9]73jKybJMZ :mٕݔn8f|)-"e1iFA iq[4^Z沖.=[-"K-eJ:teY-AQӢWܢ'QVFUr C$S&tKKoe/)%=j1R![L{ZhLUm*4FP%!L2kO&HG2Tw1hVJcIGGQ%g'3=m^g?̸qCZ QeE/NgL5U2lG!*ƶtV]FGw˩rBuI%2D0^˭Z#R嗡*VOk|NSfÔzuLЊzVCWSvɇz9ˊ/dE-32cħz{֭X۫(bcm3,ӔMJbb/]6ī-Ze/n)|HґӷbùTqKQ̸%|H \jc<p^jY۔*ܮf{>LS'QPLuV%0eE~ԌPă3n貎[b嗔iq=qAѾʴ**nըH\~h{鞚tXdf:Y9"YjI2q;HRdP -ZɈ[LNqK(l3[yՓOͪKtT[RQjGdjGiYD&UO^Km-CŨ* 9RVݺ=nV%TTIY۳Q}簲Y+ױ e_pVms6?fv\^Oַ3k_-}|__>9n?βiWkMnG՟J>'y<ɷ=}q|.lvC ǵos_Mocy=2k=j.2=ګE:['jdzXW;e_,_Ǘ/O8X[*凗/^F?lFEkK)63x`Ke0(_`1]o͌f8Ŋˎʗ`x0C2 "DB/c:'Qm4f$ 1ӆHXނJҌ5FR&JSRBu"+`,)mJoqOsd1,,xx<) %l>y)O!><̟ٲhrGj,o.62L|ap]gWZ:q%L祶XYLs=y:\{M圙VM|9R[Y>MbڌX(f2iVbdi*&bETζXn! [FʴČk8ڦ'* 94:0nC~FFrŔ*=nZeɘLu*fpYRJ~(3bU1(?̈qQfIԕ*[K֥أj>FVFMN[;+yLAJ1<ثfJqէM"r//##g˿՗Qsdcvz~*oZœb/ogp\ \ֶ1qq؈cy;ƅ3uXor_8==n5Qs|Ꚍl=ssu{p$YrѿȬ`z钻u2B{ B%L,L_:[lׇN[7߯Io}߶nPol߾{~}rl1R/6T9xnSޞocUa-Iܢ>Q4M9^rw<g.\b?WEҔ0hM i/e|0~cܪ4x4*Gw܆x9,/J K̠a-1P[KH"v2n33h2eŌl˜Efz"!kU\'2XlkH {K1凕n%LX_RS7!4-%~C+1<<\G뙏VΰL1LTR(1$u^fuwT a\x52銗}y$U4tPdTՒIR!=-"!x[ʹ91f.<ʧ!~}*DŘlV%C(+dj$%K*Yʪ!%*# /ZY֛%E))/.o.dXmxesjń6a3~Ӿ7KxolۅӏrU=|oKGG_Ű M{cڡnӦ9~zԍ53ZG/U!HTSeάf[ծKƜQƔZ5*4+fbh/IP"Y衉WK53Bh)eJk195Iy)9&e 1Lyn32-IBܪg%G21GRj2Ʃ*KӕgRHLR)ħ3- Qaz2nPy jcI%2(0Rd!U(Lďe6:Κ$DOIMZ&B15ʭkXfF)RSJJ]3.3͌EDEBd$33 CjPefڴ]bI]McZBQܦgY)ڭ((UθPn/$OFL[O% kVjM%rLq4k-KZIKڣ<-EqlaEKMt QX^\w"1cm"S-JRkI#e-˅Oٔ]֛Dʧ.Kd3XeERnLM]oGm/_euR58(-njeˌaDbhi]֒ѥ›D(V̘UMFH6C1h0f̘1c6a ƊAAM$UIFYng-b45]Eb"mKLud&73/mƗmZI4n!fDU֜Q^ I$^V N2Ī,%QeLMd֊ߤժX$Z*)Iy/==nR^>UEDO3C\ǭ*ʯNBֶĢbs=x._X<囗w.3!{s6zp_k/'lt֒>'qzt*C8o)Z kztGq} \ [Uo4|t겷2g|zKͤ8`Ke%n9%i^Ioac$~`qXVj>31KIz"bE{HꙢ[b"-q+f2gL3ь/aQ!^ZB&KbY>U!c/)K%UYI$[vRVT٥ʟ,㤩卓ZXQK E88|yoƗėw^ey$X%$YkR~f1cLe2̡X93hdJڭJq6Gy,_2XK*3]B$8KT5*L&mEF#UItSnWUM/3BytR~Umc4b%P ݫLAbtPUٙQEv֥FuMJ<(奻v5ܪðڌTx͢J3Mr]>7Fi}i]mԪbKVT{yX#sTXfa+Wb)bI(aDJ [XTdK"eM%eTV8-iˡJ(&kf1.bDyXs2Y|fX+zQ$>-%f>L=ݦ2sTQ(pL[$Bʭ %geFf KYqݦ}Z cO 6c!0DFb1BE F"1#UIDFL)M"HDAb0DC̘|J(_fxHT$jzȬ g93K嶲][U*Qǣ1꦳#1EoK7*S#;ys=$mДUR~㖰TbŊb8Vbyپlfۗkd| 6} "=,=n^|[ֲOIޏ\?n/:9.b}v:o<;c9tgN|v_~~߮綟W׺}=7|ս]O~ߝ}j9OZo2)p*(Xܘeqhi6KQPE;^^DA|I|4㴷Os5ϊ_?ψהcCf?6j 2^R/q?R^,UiRt͌iKmk|j/D-""GBa2L-=Z.H5ͲzRx CÌ&)0n+j RƯ/$D2ħ!'i/qKfO%Cjq96tХ;z2*/-QX96*1(==tK*ܦ1pIX^*ӻjf0^PrJcV$^ˆ1fe.zfksĎcFLVSG-L%)/"RSR3%uLta-w%K|ʦ,X^śbd/>bB(K4P^.\^Żel_ƃl盗7^|77< φ0Ŀ]'[A(9rm^;gt}{pSN>W;2]\glyzTQC6Og:&nˤ7'og9%>)[KTSq|Y/òJf93G.} US3n=]ӣM݄)fn=hLlz c2m3&*V奩/S5SJqjf)lbƌXI"2BBq̩NeLfeIUU3a&j>-JQjLKyit,jB9TcM9T(&J YSqk=Ԋvz&d"cV(xV&D1fD+4"MeEY2DZ2д.L.Rb]ZQ&IT(sXT*6[s"($^j:+3eB]/V4{+ZZwFUe(%BSPa/S橋Jb/m_qyݭFv.)6xX2*#嶖*gT9GDn6ǭ8ێ,+tƠnQ%K9БȰ$Y!ad6[r=Jr[yRoժ$ȲYtx9 Gm%iJKl⥤,j;NRz#%n{UɲWU+fq'FB].UNf(cFbB ̘a0'UFJ̌F31!۠#C Mi{ C֒#cEbb5**d2TYeL͔RƭHU)Q;+H2WTYe17"m|JZNeǗ ҤXIUtgI1n֣X-;U~j/EQXAegZ|o`Y\lb\#%C凸ϗ kƱg:.ΚĻo>\{Y'k;k/8*bFoDz,O+2מYcqt혲֐}79o3O{}~w|}iWl3|Xzw]jkfT=N>V0>=8n)$ʒE"(ڗ}zGbw-˿TShm2cW/ŸOS (_Ư/ -FLT12c̘+ SS)RRUSVJB)e J(kR[Uز$dcmdRa͒MѦWֲ%KdX,9nY&o,!_]y岽\6p{Xl˖olپlF->ſk̓'~/o_;K6O2_-l_.X^?s̉5m/} hxOv8GEy4a;:'Vne²9&/qx]|ۼa,V6a1ZqܪǴ0i=UyuTH Dcj݊FA) -34zPҊkYf\C)$OQE#^r#*2&nAtETӌ1U9%a(FܶRS+Cuf"tgڭ#1,-,9Uѥq$IP鮪,!EBU mRe69-.U }KaRDH3^ʐpYn=~HIƌbNzۺ2ZDD,3V5S5nMed[2ezh&$n=2Tt*zzvtxfTڤJ7UfR3ϒ2KV[_jHdzs]iZRX$n,:ĭ/6 m,qѥDWWU7o]ؕ⨭[Lr"u6Q7lNfZf8z}IwKͭ/)ʭ^X[. Ozdۊ!lr1sKE-=^fYXB7_>,-eP <&r޿'Mq㥬ˎ?xe/ia${ŘcfҔ)YE/zIzl5&DP)"aQ-1UR֒#!K"JQ2 yH-.\,c%$p,k%K(y-([Ű|Nl^ld%Vs8v;A8XnoX,y%S".yw_-w"ew<)O70w_^Ü/f6/''ŃEeN1s:=>{9{L'Ǟ׶pSy?jf2B.2ۇզ}YּkAaYnO\RRKRǜO*.s3ÌTtPQc̨TBdTKJU*&2&cB((R3T0 _j2HBdd1;.dib%1\=CIL6#嶳DŽndNΠH+*\BVVwWbJZmKь))VŘQÌ۔*G%(mt+#H%≯0b\&fFM)Z m:g2F;U[]S.6MQ(U/u9xqȠZLS2VXabBRLIdI =ImEÔd!DFwkQ.0ssRL/Vl3.{̨aR(Guiե:T͔ӥ=fHQU%ȿ9i-))I-arxkD ^f۰ʱ츬2XeƓnGizUsFB0py,3TirmeɱTMo,*hC a!]q0fT!˴bV1nGXlq[.(g.JnUȊPHID$Rc2$G\Utij0Vqؑ*#Y$̨[OY.yªrTs,xEBaZΌ!onKŭ(b%χ##χU~%oXTd"q98-81Ζ7ӎmb{ˁo%.;OlӃb}i_8!`K1~ʭ ajLƥGPƗ0nMa|JKa\J|*.COՔ3W5qr[oQYDBŴO1IsԌ0.&XhJMڤ#AĐætPˌ8e-7f$V.7EcINv[ cqˌZRī%D5a8c̷9Sѣ>4e)ݍ)-iHLke=ԧYMYE3QٝHta)E*J*J{Pmj5)bJ#IRɒpMi#Mdb̸$!փ.3ed1zJ|YQ% e8IVIYYɡXRS IBJ ^̞d#Kx,?Dr+8(`hK|z}gͦM1\]4-8&ļhB!n[O#Œÿ*͜I4RcDRjQb[zZKFh>GؕeOI(3f8v0cL{ٕ۔Zz[CZ-¡ZUSEc4EW*md+'hqiRUzutfX5L~HEUiUʇݦ5Ca\V+h,VzXpBg=TϪճ9d[Ca:vh0Kֲu!Bztry4],3V(9ǛTX.͛#TxPOsCa-":8JNNa#yK]bǡe(3yÜ}ʌKI(ULLDMZbʔGeE%qה1Uf=3.k3UKŊS { b0>2۴˔KS##qYUvw3*fbf**=$LGȖȌKǢʇ3VD(HZr&+)'PaJt볪ԳfԚ%n<;pk)aȐ8M$+YJJEH%mag3&d(˧Z[%-%R!۰$j%#CXrP,G% K;YfeU2Zf%2r+ʗ'ˁ)ᐘwemla?h_,ʃ].a[|qݼx4/ES!no|'Ɨqw H&n'sNrN}*CKcxsK]-n=~6-mJz1ԛmڰ)Ӧ2ʱN.k|n$2m>gڴn{όaS3;jڢ}:h}H$ć BJo0t՚Ռ%TV4H&qaF[V.3Y򡜭(]2΄eZ ŸߚqI=.UƗvi]j2nMf..35]"C1AlK03ELt'9K0dib*R-×MiYBKBLK5L\etf(fF0>Ħ0ˌLlL M"cvɲZNlYnkU.(UT[=H:9zՙctB_ZeFVMشtUE92UW\!ũKk O}&Y4rB!:%蒑:zo ,H\R(T)CYf^UeN)yMpU1/n>Xg8x{g|;f?<_5sʔVKd=:gttIZG-N6S2Vl_G^֬Yګۗ*MixnUć ɻ_Yn{Sq/j)DA[q[aʰ˸mbƧ\B*ʭPeLb| Ef/CeFUjQB9b,a(KBYU ,ʭxX 3|e|J\j̘b̘G3b҈)6c-%$D",k 3}" XؔI6hJ'+4q[nD1s* 2%Y&2C/zhOڱfڭib%QIjj-MRDV%%咎{95kfSmd̦dLFڧaA3&|B%mI%Բ,)yRb-UAQ.DzzSXV֒,,iZpLI\fr50ۭ6r&R&dm,[Srp&7.%n!nono+&n^~Oaa|/2OSӗmyb8sf;7=m٬cpr/..{[+,'mګMOAYwBVlyXU=,r馧\fڒ)a² 6ZΗj'ӣz2M,gXzStH*1c!c-jK!i(Ԥ2dMSRT6a:%$c 1>ejFzqYn9LR LRvVg,Z#zƭ)eZKJ.IUs MɡN1S݌ٔ*k(lU(tMY 'j"QԸD:M|HƦ4*&3IUKH*Jnr+cbfkmƥO:Y3#%qROuT=*=QtH)Q$.ð:TRB*ÇZV!/Pd4:Yn%-m-*J-.yj52CɡQtYϩ1cKM4ieG9QB-ʊKyzĥRޔrmwtYe)]=}kS$=[Kb)&_zl*롖"Zf{.[/E-(a,S )Z.mr{<Ro~zNg?ޯѬ8mg8G=Ϸwy8̣k^gϷtOj+ROMLˢ[eNn/exmָ[|m|ʓ yv;y{!1w6ONߜZ˹g˗CG}[;ˇӻ]zOeoL;DEș*+Sf[K*lM[rnKm]OּN.Sn'Ӧ݊FdfTIc-=3ҝY!fP %f)3Ig◚ ˤ)K c)Ze3f(6> 1c%\m\/ ]Ԋ2㶢1D6.U-6E8ILM%T4mLq+R1cŰ t.fwcMaRi))+i{Kn %$:nQf$Mbi Q-uO2m;d\f62na>(D`m\*$~<&42bX-ʔNUg2ɔGe42nև©jT4%%CrNuČ"˴bM.B4&ʟɫ)Dr+֪%TtK8TVYHLON)IaZ5Ԕ,ZȢH1zvNZj)22T2Jڗߙu3l)G9NM6ᲖFo1' qQ[CSHBÁ1Ra 'wq+U14T( UfRnED6nMQ(UZ%XTR<|*+eS~0IܞnLsq2#˭]qaQVl[,?)݌ZvK g+. g"e<{fDMĭjdlWLrH8lvK $a-8ܶݲ|b[_3ƃvDIC%{;c3je|hEF.&˴h)ճ"QwC%%EQ.TLZ<e jDZ'Eq҆4eZ~'S &\,lbB̦98ilaNaVl|-?Y|%n)>oӋۋoӯxz˧aea?x{NÓ?NY[S_Ytg([=RK-qyN7kuL7ިȔq鱩rEŷK/IVRZE}~όSWO3L%dT5NT2< Ÿv AWS!*.˰LB SKYfP3e̘a%qFcLSCbFHqڇTTLGdfReK&LR2>2B,U4((ڥ_{ۊnC|̸ :D0F*C&ÌrtSKLB 5KŐ)ƭ$<DȪ6M5IS3ƈ )il62eFi˱t*)b(֡{%"xXm|TAE!!fT9.IQZQ eԴGQv+[;ܺTc1Q/)D֬KZm}S4Sa G-RIR[ZmFJNls< id)1E˄" |QC("?HY6Zη}XKKo'mRߚj5Vɲ,::.C,LpJn+7YYLOХ-zVeUfzG*>X39E˃9cYָ 6NeQ2#-jbƌ[όl+S%0B!G z&PQe-ô_f1cbfi:&2MMT!!q9RR;-P=zfz8*]4KfRVG~zx(l mZ<{t+e]ʭ**4&T-=3qxUV~?3;^lքjK8G˦~SU4-[%b6_տ_!~k̸?;0~+ qq"P Sa%3qâFʌO]u;$6J`cHԢ˯ 3I|(,4$%f2h`3nVnr984mޜ)^&[HƼ܊t98}(ڧ!BJ|}_0!aN˼!?=x'/͋o^ϧUlj]LL*wZ3۴*Jwg-d2q1]5vU5ի:*LqO"Q6ݢ>KRtܪbQKIR$ΨLtWM[Ef.eFU.4Uq+mV%Ly0{6MijѪl*f뭗ٺe0,!1q+ْriYer)ƴU2"vrPh$CB$UHt(͐rLO6PnZʴzHX.H3#ŞJ&zB* QKbM5a +TarYI-fN.!1q[okeDW߾Y9%O0~~WG*`]ҞQ|겷vt/.~lMa/)efbIrCrCw=CYaoUҝ9xv鶾&m%uZ.G Gi2.uydz*jP*}9Kʌi3ZqaFwe6Cҭ.fLa1G03= ٌ 6hZqi*"CTb>R2g*eƘ9IbLdC)1RUIe&= 5.VcL5RchEֳ\Z-ڴ\&[YLbQŌq3i(ڥ{ZlCVTGުRf<*rY<*dUyƢ6emmp|#>|;tbcsێlY^~X^xƲ}Vz=mwl;CQtq#˻#comap[ٝYSxϬG=59}zmmZK׶sD۶͛r[ Xl/֓/iŶ#0~hEԔ6_?K?Jڧ,WO2ԨhV[1oTa)ʧ CuepRE-HUf&dmI($˪mLJ|x&mY!MC0~e,W"O).-1a`mJ|7f|7r;[=\B_[/מ4o!ۜ< aś=O~o7w~p{ )o兗{~Ǐl6vr/:aJ{m*VۜsI\*9ߺUoX,kͦ]RZӔ-0SeR9"眭O͌a\Ue۱uvi62?7>Ο?):Ykp誢-)DM1cR+3$Ĥ)u&D,-.32.abF"\t ,5Aa(QKKQ wUfU2,JEChQ"鬚mRKKKb6;r̜pIW{P>,FCVm"e!Yz\*3ńIYD1$q0UXq+*Ut6m-3agۭe.OCmKicjL2DoEmy59gdQiP=#,U4Vk$3rK9awilVtj1UtUiR]L1i3̸X-Z&f8}Wt;F0z]y>OU:Ӝtբa*'QU [5zƗgM,Gme<j}|ȖR˔⇇3RafwooK%+1r9jcCm/Sަi,Zr;G&ܶn(,K=cf:\5d7rVRY3Ҋjmzf̸Qu eɢeE'/g6K-]ӃhS(_W??2 KY5埫q`?¸d|6~}7~"~aJ̸1fd\'ypB"S˥v SHQIQ%RSSE#Z*bĭ<|XKSRojt\3K3R*.㖸P.+f$f8L6i}H-n'ۧŰal3VAII2%59u31Ӕ*N'CIhrF3̡*))srXfZD߼YM0q6ԞȸtI\ 2v0"uHQnRh̨%K%RVV&;SRfSd_e!2v%mU*2&ΓDVUM4a=&2feƇDf 3B3cƯeh"i6hSa.9P8ضT mc%쑞C3H[c%Dfn}fLxjI\=B[mQ3{13zV־vt~{=Tj:{[riW\Wr8b,z{;woo٭ =bUN,9+UY)LOQlQnS#g&Ge-m!N ../k c.!~a_?mA-osZs,bscmj=ϧu<VOy}[{\fqQzzolo~~qŵr>=coLu!g'Uj\ߞ;;Ym=vwfo6Ӧ0M)l"--;-jۧkCu}:ݿ]![ڿ/6_[abK1*B"k~Y^J&ePD":txDtPJćizrg eQBhRި֪#(N)Ni&۬01%eF0c06~HeL a!n/"R^Ɛx?4mK D"݌[Cl/bfɶǧ(918ہf+;(h㇢ؔH-8Hʊjfrp[XKJʇr!rypqt<}HzRIMb)3یCL7IV>/:(,)bگ%+9%n)A)lmPQnC*3m4GϜRn%x9pfIfi.)daI*mg$u"AWimh ӗ:ݦ(x)U=Uhsynk/W*20,h6Ka&EqΪٔr8N VɘxzZehnMᔱ57˟,rnE"l =,U^݊q98Ӈis2ד7 K?=۔of%+챨m6Tr$zͬ^kRL;NRk5Oj:֘s%[=m"D`Ɛ=3Ƈx=F!T0eIeHXz3r,Mm[)=V̸.]*EEDj$T)G!rd/+R493G{5}9bRURom.S*mR q[ {\~nGf\˭qzq*dl/ۧ|Ȫg~:*:be=7.Xp⍸cؾ,o^Çckl/a #|{_c߯?Ƕ$nxϮ궗/zD?[V|;^h{JAoyάy߫fygL??ui1\r{GyV\j#r+c˟yn.>eٱf-.f[[Fn/K[w:{Zm)Vwt{ ! mF7j]~KK!Ƈ% a ;n3/!OaHRH_UF"#%T:4NBѩ|*R^Z*(fnjӘbb!nOC6KƔlC [J3ߙ-a|X%寚d_6/m_C˜0:s,sz3W).MQn^V[$AɰFr\_PR1RnAERn6kfG|XSRۇ$0>$%#TR++^16OVrN vۋ2;cfT2cq}HITIR)i!{.*±VHS+ŲHܺd+}G/l処xpJpp/ca!MӴx ݐb(/yaX$%P/%~c?2~#JM}():9&I)Tu8EYoCDUu]EhUZLdL]tX*I(q5ٻ%֑zUÿe~bqțEt;G=4 wOM).xEuE*ǛLa-/۹{̱MMoU=y]֡Zw3s:r*=3z9\ue"c5N:f+Vy0FBCOUǭK}hf2- f̋]1>O5[3 +F 2M *iC*nURҳGT2$FO鉞P~1IE"Jg8U6,]lk1C*Ri,L&2Qg۬<*DA]U eQ'[:,\ZT-kTsTt*rm_LN\y$UX,, |Ym|i0./`/+k\6`1qw{We[¶k[u7^v[q}Dt({uh87~8c{d?&?itzs?OO?Rx|^88>YΟ,6k.Ut̹_^ŞVmJ7P>J_.JeEZ{9b{ k,6~(5(ڿhyTbo!xknL00ƗƯtx)kCD|R߈ ^H۔[{!^BnU("3|)_2mZ~4J^{)1X2)xXR3lR 2&~-1~o/K/cFwf݌[ƌ?IgvU7ɰe&!(_-ᥩݧT¢TSMI%̓f:) +9`kݪ 5ʗɘfV K.-(dI([0c|H#:*IZOS[*Sfdr ͢eK(yPrJQ~8hڧAiibڮMr˗dF(_Ÿe8? "!~g7~7rSe.9<}nsOSKx4Yf&t_2{&k3ĭL&B|̴iƇx!1A!RfT`jhYq+K+ZLOL0fTk&3lU,a3ėafFHf&eEHfdZ{T$"EӜ Jʊ)$3*)A%ez2CӭJڮ-UTʇKL6׵*b,dJ-A4; mwϸMG׌4E0(}I.jVO/3*Dp*P]IU49jy;Pѧ(k 5n z_?.>|lJt9R4OVvR{|25*$q ZӣZ޿YKEʢHڔ*奖ی$K%>M݊LC1Qw31/M|)3CKe4iMb"H,ݪMFEF4Mb{mv*RL$[̖/36qd&fe4=RcԴ Q#~(15V˓0~V[-S,DѪleEZUn{gqNPʢlTaۇw+beUe$9Y>%80qocrOXƪ55v{<7۶jq]7Vz\[Rza5n>;Lwj<2&[B-e/16%Ø1e CӌPn3_Ư Rf/Sc-L*NkM5WeBs3:zOce\I\,NTl$n)$daFʧTaIQ(Xn))MIN9bIEӰH͌LTMr0,[_bi5;DUY+䨓֚45CH:n]f1TbzfVU_g=fSejyiLf.AS 0>Ș# ).|m|Xn!S>ZfH:j6#˭sftO JRV0d*,GL;[cm-RxO.œ&FEVe0LuTh̘ٻfwf&ҙUCodq+fcFbBd(Bd iJS5$(1#n3-DЪL̘]2fM /ø0fT2}M6qe#GKtJR嶦ӵVhIf84Ԫ%26Mmíc5jJiݨȠT]Ф%vj=4ivfٗ*%!c,syF geJ:š.~R?كcW}t?>s " P ARK;AGR BR9|]k={&1!`ڔuy*Jl/7~;e/ƾR#Y˴=~Fb.wXx1upGտ7o{#5SKcRn-Բ]NwGwu7}ӛkd)JUxAsp/q kf问y1[ZUJ^1.Y48[3豇2q2,3!kf\z\0LLm"C,DDDȢMraFDmPb/CZ*U3g'eJBZ"!)"1nRvHt̸U2jUeܨU%53#sUj$z܏fs3&(u$a{r~bvNxe-{ђ{[J:Y0m)]eYjngt9qIlki_ϸa,i'V4M5凊p?x!~d<ŧi_+_ .3#U'YYES*5")ԡ)u Ŵq̔Eƥ3%i* )jf|k3+aAd ibyZ"2c-3Č p7)10C YH_-JB|/"q)"=f3SPja<-q2ma4XĪo-$-38<5%dVj_6͍Ͳݚڋ=ޥeIq-nRYMaw".yP>+as0j>7Bhiytp[N_~BOx#aOC|5 CnSyzpN8=nn<#odmٯC6;rzYZxlCuj^*Ը,kII-4qIYlce²MK{&f(}b&*ݞOfLVMX~)U%hVET4aNf Ц(ZEB4RcFe#]-a,5>e#Q3SlDHB]r& V$pv!#)|T뙡\VK!>$Gq:fQe60얙NFfVƈ*f` SS!BdMyF,"]P&ͰU2cH3.(OI3>hô 3kBRˠZu m%QK-9#FJ.Gaja?`Z.qi&cbZ-]vrVҨmxj= Jʽ!7ZKHy0'кLY>]Þ>JI=JyĊ13bf.rcKU*zv?ǃ:{Mwr9>*+~FʹZ7ky|f9K_~?7v͇(osܬ徜Xz;<=l^֛*|S?X,b* ly#2irFf1c-p XfSt˒ӴfTI!eF4a]=~m0X0-#ed%,nj!ӂa >ATa̅MD5(&cα $#:SYnVV5tu.CnY*ӳWUKWw$[e*k67 *OfYMUCTVor+dK-nK-^֊xhVKie°zp7+8r 8Oxe\qz:qbtlpzZl/:֚ۼm ۹=wDzXMFj Y2~RbQf\vKL$ZOeFΐ03ݘ3DxZH|fNiؾTf0K5=%1HГ fr<5y1NB7]RY(3Uc<ʑ% J[,reO/KzrKڧ#)&1FRkD2=%f:.RƸLGUTrH%*SbcvRyĻRIr\Һʔ.GQTCqղ$SIKO'w?g{2[<ͦ4iWSYfWC9Bj< 3~Sn ~ɝ7n>frCC<^͇ͧ>cqt+|-/Rm9Lsn9\i|MYvY&æ۴iSrSvY~hfLK6ۇvل陱JKz ,R~^i}hI|UaB~BLe2f Fg%DwKx*I͖2MŠd<%S1>L13zqISIŒNS͚rc\Jy7COU E$.C]ڧTQ%7hJ"r9xH-=bb,U53wuȑ)"r ( jd: S-C{OCUxK`<4 c vd2d ̨9LLDHV"SJd-s(NfP3{Ц2a)VviEgTrXITЭʎ2z帹tL{r-KluvJwMܤWU4iuRЪ/ZEƖv2qS!g7ߪ?Uxz5|v__|t1j/Zu pŋɞz#6lވOT]6)>qxF6e,GԢM5N$\i]nes%>-TuW 11Lcd/ڌb1cfxOaF#͢.`a3QޅִOa"rRɌպ&#Cf'B+ZćV*%Q%f"0f2D:}>̘q$ѦǭTbطen(rgq?PclT<ڭʪh]EŇ*b={{ҭʥ\ZY↱i5<-4,8ލcaYe;cq9nq.7{0696=w ,^<ެclUY|zvwN Ǻo[OUXekc,LZ9g*=߾x*8{.^^gfueexy9_?YK⭑rģxmm{bd1vtk%XNCe"aYoO(گx_-C[?s}ďw2ixT. <5oOaQxPMBwLOv3B9Tpdy7-͒*+jOʧt4ֲZmݍRCx iX3)㸹4#O&.wOx2%M e/3߰՘6AI\fڊ 2cU\„fZbHq7Uo]R*.'n֩6Tr3)^Rˡl˧œM{ڞk ţk륊M-ihOEK{=bmzMO˧ig CʴmMsiip?mN4iiCpRf<ćr|/?ʧ4 Oi0wOw_=0ޝn[n#i< s89=;v۫ZfvR80+*? ~?}?m׭X֞M0Uua<-Ӧov/ҿ_T{fLfufDkGdF²c(n3.NVӻٝn7UY>*L;Y,2ߴ6xha?c1).Cƻ4s*~TS"T~PEўv9\1EɖRTe+Sć"\jM<ድnjtv n 橧be6kW7OO!7?r3n~yB04x ;^= ߟF9qxYNDZyX™JK ʴeo}4ҋyXˢ[YwsFBy31lesP.e-)CfڻcK%ɬeƔ0mI҆Cs,T#Œa(ڌ$+1m1d:UzZ Pt U&V1$-&cRDE')!nU%Td"YuiM1f qfL:J+ԘNV3da1L 3Ky$<~ۯ9_/Ց")!KKJB3HK,!*n4-a(0(ce1\UrH[iU*ˋظy=]2BURڇ4e.))*U/ӿwyQcz޶A1ՏMثÌ*OR孭*۱ZL.=rJeoJsSeov3UW[gܿ5myp[Kuv_.u}_ըۋ7TVqq5j %?r,,öX=7²7w1co^.3֒b:hֶZsLsF&FoH+&e6}R M aHi1PA]0Db:2-f"]=* %==4)xjF3LdL]bHMvR2IVIM%UTHDo)]̤;YL"XhbBQ5S3ˊ[,zj,G{X.&b-l岎.ݲjvgUR5l&r鶸%beӶ-˺{Ql,M^Y؎caوi׎s9v?tdٯ,k{9l/N~{ q9(V?um]ӏ꽭]qp獃L:s˚r7q̣KeչZ/gV[/&.{'9&YxPcŌӖxZ7o;,+hn<4ˢ-N;u~O)?hj wT?i|Ք߭}1?6.Sx*O1!K⧕db՘0ceu|K ?[98B ,qĈ$NHH , ȸBd|3gW}Yz==#dyweQʥcPc(e2͢&iZ<3!C,d=vX.cXc3BDbJjl?gYvQW]V `kŸRl_d4[c.Yl05myL:.M͜>VíIm%3H,Pĸe=.6ig(;o[-+ǣI&2ެ;̞頶降NZx7mڛg4%6Khbacmֹ Y:S.sn|r,#))l!򡒥V˴yHQn+v<ev;|%2a3lNn}شxaMܚi;rpph| 6> !į5~YƜ<(^pm>G+ϓeg>9TDߔ*G9{JamzW2C 31ZΨ6nj41mYr1cbvk4}*3[meR[{%EDČeP.%,)+RRƛû jt$̸=Z7ǥޔXKfZ\I-"vѩ&,-a6rYMcPz6mq)&DL+*5cV3ҕL%cwɸDT ?nw/WhwE$Ҵ.QD]qk**e'Eu4ce,iz&!jɘCT\1eƌ!R%6xbPRTutdp{eQ%Ümp:Y+H5\Z+)*TxpdP_;~w{W9um-Y)ge[xYwZ.0_ֳ}f/(8TQrj:,S6ۜVviJLfZ;gR݆.e1q "C1fH͊!lia-Ǧ2U"hC"qqne2!#M YtNZ VL$*7;1hqi*e1efۓSf}FǓˌ:R岼ɑ*It+Ԭǡbu]DQۭ|/<-MG]V'űpst[No9 dlㅕuⓟXsN˲Fl}`[[?ߘZjs:u~?ٯ{J/O4c?Y/O뼖Lb=w}&Qy陖aɔScO{DⒸ̸0DSX_ɘ&jYe RQT3M!Y Im;Ib*:{DH̬mk͚%iS3VL+YQ.Yn;Y3۴Kf^TeZf:S2\ug[Ov+4Eؘ16/6}}K?x'g0naWnNoi֡_Kbn^zöynk3vT:xM?ش6&. MvmZqm*s53lU5씟UE'Vb'Ld̒mw`d))]LťƐX>t,f+U%RMOʛ"̸۲bڥh_IP.U4J Ue6f cfzKd 3fe03d$xBc?|CLiL)Eˊ0ĥaL*M1&&S =CbԦ)a|61332DJrH6JdFt2#mbה4q+?V`,e1~Y$H* ATVt*.Uߝs?/ҿn>MT4elq[!̘BSMJ":Uq )OLhXbU˃ Y.<|:=;<9c̲_9+'ǪZ9 Ų}8ܦ ٣uЛŶhgNrӻMzyiUʊٯϕO˫^=WWLN f^'nϿ??i_aKۖH1%^ڥ۱ݽzI$.AD+nU.Dƌ-mb$j4 qIܖ2,3tQ{^e1(.JTt\Jԑ,!weg-Vs&Fjz$d!qf!̋˦J٦2=SX+^~Mz3JʻwC<#VeJlˢٯ.MIYeڻUwm-wde,MnZ^9xr,N4a>+gC/eyS%C)%>nq0 B0?o yq;N'c'E}كgUO!زu˫oerlzDwU+&ܖ~6Sozl 2mfBJmUUa|Q.>̨2eLmHQ)*ՓEhJوEtL.f CTt! z*oʛҩP2[ .pPʡnMySʦڐns0LMm&LόJPBKB1fo`Lee P.Aٌz `ƥA$TqIJdM6CC͚feY;)ZZi %1QzL٧VU"/'LzOivzO/ƛ'k])?K4ա[K嶕[U7jf~gafLd3PQJzmMEY,,Nlr<6[-G=bZY>9>+,Ǔ:qy:l~pcIoky"r떥鴖.}dcl%r<sf>)S.5J8يF1eTSq.*njAUƴEmr2.3nrvɈQAwV2tS2&L2F̅D$bQcQ5.\RS*U)NZUg[3(#ۮ]GnTv]̤Y3s,af^]=jr<9{BVj5y4ON1{|jկg>KCuLZ^+a}쓭"O'' Br^ee晎 Wf,$~b3F/ʟS'T ĥ)mB*1_ C1C0m._fRm*q+)Lӓ2MN6kKX 35S#(2mBf)=y5% k ͸$,FͰCq+_rI -aQf\3,BD݌Ļ-rAڌ{jY Øe&Ļ,K+(fr{P2\2RqYn:SH\f\R. OMYz 9HhG9'٬xBf=әV~,vyldKwy  K5nwGqlkJYV.yl!+AIQ^rDm6m3!4C5풇iڇӇ'_ V>Kq~D.OlBa 6aEC.;^ y[ O[6{~ǫQKhދ}z[p(ʜm$ָl^1r۟Xd]LXM=3}l53 l~VlU3523u;1LRStKHIdF$Cҧ,%U53217EǛ̐)˛J{ qIoQzT(B'IMJ{2*3.=.ʇ=l3dQޅQM(%U=7U M"[-uaFEQOUČa6GLe7aoYnP2&.)tf勇!ҪDezEWR%cZ%; iʹ0QA|[2KiEo*f* fw2~wr\A,)USR7UI-3uM=ѿ#kt򴤴UFX}cHReZb6S61k){h3faMVAC܊ ?R41#KQĻRl4ٕ3BdbV%ёf*BP2eEBLvd$.UKIݕef,&d0[KyWU8T\2kT<UzeƹzլeF corHV#vH<bfK\vXl3>Kxz//O>A@S~F4Ք+M_9ɟ܊-xqĻy-] Mu1L\Ƈ!dFZ!3-!mJc3 -af2Ē2UD#n*Ն&̶˛Xb/e"!(&](?u qIV˴Eh 4M]b$,C⋢)2v`dÐ2cu$͸l^T{rII),XR!!. Gt%!e\]\%!n161&+gS~dyXyڻ_g%I%Xl=VeS<밻0͸eZU\v[╝|ȳ/6OCiۇl3 6٦Jf(lEl,JbÇWcq-m?c|x{m|1n6ʫ<ćyĐ'^yW핓l4εl.z~qn-lie5Rvf+kym2ͶvMY6nӦʷgmùȘݴ1&1U&)vb&TRS[F` )z[Ie\YfWQ3Af2}R!F.+ wv Y.UeY l3jz&[FO i5f0Cj1CMMDUcB*2_nUIYR2Xf2J5峢-,bhRC-:jaLSl5~,c4FȘVnUfƛ-EjR2{yLOdI&5]Y}*~0ڌoK(41U1a]Ƈ*Ŗd^___wLKhR.ՙj3uqtӪhfZ-MXR(T[6sãdOK-E-ֲ7o~[9Onϯ˿ڎRF1,uC1 VCu űt9rYVe->ʔJKEJ,ʌ42#MYqv+sjFDH;ǭ[c]]uM̺Ƙw@hȜҖ0Ld %g Q!8  RwUs}oQ5j׮7n^uq8-$mH4LSWB2Tga(-hP֎ i jp,OHHRZ mOJ4sɮӜRDʸ]fSᘵ<ӱ%TLʮD "32>m沎pj#f/sN'מּˌ2~kL^_byZ-k M<>}6oζ٬pyX񩶧o.F=l?ŗ⫧Xl\>}i|H?j?t,vaYnm}Xl{ML2{y}e9vRGZgY۲f;7WM2p;5'+¡kvXpNJr.\n!ldZbei-~Ŷ5~VW?rꏔljZR4~exj:BОB=U۸_O5n#(NGZddWp$o:X];l?I S|W-q Ee?[떋C0.,%2&>F?xzuH$RTS-6BA|h[.}h:nC0H9d V.G$/'; qbmӒ[KUj{j%n !>$踭%TC:+z$YnK&ao_Ȓ1fd#da[^|fyiS?TOJzdrnOŮOaX~eʻJ=O]=PWwTw^o?̫ka{zxxOKEmlvx]% !w=%#㶷yi[?6N+ck񗜌֩&+)%Ȥ uE6T9a$ČChu J&zrQd8qXU]a 1bXCױ"16YƒVzZCv$ҊL먰ڞP2xJ4n3xHŐF5uȭe TO{0[W3IS.c._ %n!JO4wՌ[piUA [mU6xs[ѣe9R( G8Z 4b71=8/OXG84ړ胥f<rI,Wes]{^e֯a/͊uYzao/r\@ CÃprߓ3zq-d?xe]eX\.!jxyeo{YYbqx0MsX~xuǻG#ɋa/f\I!YaZԅլ佬͚9оYɋ,,,v(a"u$G##Ӱ|CM< ӻߍax ^|7(<=x}oS}*!TWJ}WO};V}zx_ŧO|Wo eY_O ]\kq=P{%=2{Xn"cd|C&ү,?vqppfr̸ZA6=5<J1q[ȒF.N$)4R$zCE !INYʌĮÊq688,mDs&`p6520֋MOKefգMgilr-r)>4[8A%q\Iĭ$6z(o"+Cgm8f<nČs(9'n= eM9PC%:4!q<5/Qa]&2]HfUΘ1ngSr=8A5949~q//?59xg c#'}S;^۾fHRg3\ze-5gCҳͲ~z͌?".Eyf?$v6gyZziCa_fgV}q+/_W0/ciq=wC1M3zx:r+Wҭ#T8ǜҩ[PZiqHPZ!&nSD+Ѻ%n3n-W)*ab-1"n9HRoz*Qdi33fhԴ9K IpkƸǭ=Fs:4T0bJOrY+3I&n@OeX(ۺndm-3f|X~mY7ۏsm^=z;zC`Ŋ{Z>l\xxb?xxpwcszZb8M^~+3y񅯻zշzw_.»uzKzoog8N̘(9~O mZZlOZ68nx0W]է/O%e7:20GI*S5D|8~)>$E=j'9Y/sd9Qb[51,Om'^82nkxI,?gR(u+Y:jrS-!hY\zLDcM+/D-)n[h'j=S\!ROuVA:SoA22Y,X1KËRG"PT_ g u;<]JR%ma[yi9[Y8˧%/[^,CP/k6ۑ۸eYLоb!a#~adF[q_8>|"J=m-%>x S ;WJ=w>^xO/~#ԧ.~GxOZ4Kپ|޾Z+znć͡%K=&BVDf8NfZ$+Oƒ#p$ j%zj T&6>$4)ljjOtWbtpdfrc;kO]F0=[予?6-&$Ls0y8X~_//9-.:F.5ak+\4ΛFH$ 8%y녤Kz7gzճט]֫YVz%_ eWO^ֿg{k 2|5u#y_U`eqtS?xel_|u?zߙUx}zm<:q8 G.hnxaF}w;j(6eFCሧ-GYIo!YTSb)Z{h%Q -1uh5fL[NDŽtP=pK[IbIDz$nSOmbK8*i/یư6Fp&8ztn383s0F|8ZGۓB,|:z؃2ra$s: NFf IJ wlNmO}ܖ .V6f{}uyUFD?!EX_ybW]POZ5鰨bS(nYӍoOdVt 1,%:fv6 #Z6uq)ߍ8z)>7q rݾyr}7"COTFB Ⱥݲvv̋!m. ~4~e ƭqau= ix4adXn=Xqa8}tCӣZ4g]ovδlXs=K?ɿÇa} QzLXn=θ gO]I杋q¸,Xˬ,YZ(/2ŃG-w35_z/e]w_ʥ6{{zo[ _ycy]No9m֐fYn!lSD}Ńwe)ڑh1vpO]ՇIJC+hR6"z4**cƧRUqRR'hSk(BmӴzaMivwZWLN#+74v0j2Kq[nmӣq9yTNJtͣb8[ω2؜PzN^Ś8Xqۺmfmvx=eKNVܶn>=c㸽ay}MhXlf{{:=ۇr3nM{ŏߦ᝱dmh'e9cNz4WNzMk?VUhdWk{ tBL?$T sNRL*͑LeM&&b%AWKѨsj5DXQ.f̘dbff3NzL2,)I*IN8D>Dg:$.Ij)ISceQ eJGewrBRNbU[ɌA$2EF$޲ԸmLRQ-XɜX̡XD{31K6)ݾ+?ҩ7[?oʌzJVn˘r"K"һ3=62.a&+&Z)8ϖ]2tN*y/9(C 'i,'de,bX,K t{;?\}WYޖn֬-̛K?u-]+2rO)Uz4̘Z'>}JԸrیKǓʌK&1(/2ӄˌK"Vʌ K%L,1Z/̄ӌLBLMaZ;*&&:dj˥DFR|*nKTHhe9,fch6:AvbST'Ta:YуVmEY6}gO>٧ݖ.((6kb޳a}. cma0g/7ׯ>_9{nkY:짍goGk^Z8l]Oteꈽ}%^A"%m)An[99O_HY,ڭq0kQz(Ey)Pms4n<7kCߍ/6OnOsr9Nsrp;ݞMd̴t& afQtmŸŘiU(%fR1)11ϫD$&֊H*Z6R[*]F($4L1= caJMR%I:$U%D*%cfv'رK ,2;mezNKcARL.?3fJ7k?jtvΖ\RR>Tg֞1KTXKfTR̤ إjEVezZ܊P r;84b,͸?7tAqaOoٞp%.k绵X_eiiݦu˲Z[qvBuf?)0͘fhDo&KQŸKGbF[$,v)/ƥqqC 5&h'bF1FF=)ab1.M[inҭAnkeE"af\:V ff֤|mgnQ.SbIWFQ.*kZmħ]V5=ݖ2:سX}>~,{QlfXXnk٧/cf-ۥlZfUwm7OGOUP˼#UKRc.IئeKO{Z4O%]v8Jnk4cƧn[&"Xcfh[}جme.'xs31^ffS?Ii k$>o!a-U~R廸2 %^k!蔟i}(3Ҧm茑'2-fڊi-{r+?ˌOe!%)O%D"pI\Rn%ˌ)%eFlħ!X.H,DnK-.).S>efŎ12mZ-A,0 ytڥgIVVDB$DB;.)YJ"HI|ʒ2c1M+.,i)>)iS^Pf\cFXvm\R}Ye,"e^^xY,yXnq{B˲}X&>-l/hjʭҴ[p+mѴm(廃bln'et·oo/aq͓'#ON/}.q_x'oWnb8ev9ߥ4=ӌQSjUlm))i4-f\YlLFi3nQe532fwu;]Rڪ=Oʥ|[eI̎S)<$`fL- Y]c$fhħgTXL<8:̔d&QԤ'VIV\KI9!U%3O?3c:SL31Cʜf :jbva%ø FBdw$%!RHK c(F\jdn5iɸLόQQC a-"TVҥH*ȸd(JqI11eM-Lda Z eQ5ZOj9T1Tkf˴[\&3HFJo{oWyɜ?C]HF6MTKw}14_\ڎeJH݆r<*Qj9ycQn'\rxAp,XrNٜnaoi|Qґr4Z%=3[?ӥ%8eH\å>Q3mKV&Tgd*4;f0Čq+Q+3ȸŭYF$EScDe4q Calj\f|DIa(FqId MƄ2%3&d$*#e]tk.RDE.sFih& ˜-6ߤgFl,vR,vɪin/鞧m6oqKeYmsvgQ뱖ڛ5;w)V,NzX=vqرiYn;zۻۢ#x1]f?cYس;k7ux[SbVj1?MiǞw>+.sv,RH5uTazxUW9:5mqetڞoNGLe*{:|_m}9Թv[lmʹ2Ówj޼{ߍ_?7^+fG?1&nq/Wz&2&aDB|3ːfܪyTFťԔ1,3$;љXEI4b,?sUf|JŌ%r$.)KjSf|HĄ]!!R.RK aZӚmW/f$D0+4ald4T! DB'n}ʃ]K̸q;3>`˴ۢhKᔰ,"1V۳8ħi/!,qK{B/b~$[4CL +2Z|7e,VnH' 8]Xrr[fd|3'K-yx7χ~4_8a0~a7MxiNs=y'''[;yjpx[zn6{}<--[eؖ9Bmv 0+kFqlBtϸ\fd\fl P|*?W:"8=f(-ZĴLÜ͌"\fJT1ce`F$Btr`KRUH̨=^* 6TTG=gNb%FmfB8jHfR.) I [aK"IY2be BjVMQ4m\UiLƇ2->EqL%HRI)Ig$n3 1Kb娙fFVŜ.n9C|q;'ܞnk?S'~!{-qnz;zz҇lf%t[K7=g%OGfƭNIO s&D-*Ab2?ۊi#wK%.Eb%e%CdjKMK\22ĭdSR$5jȌM=H%"[bU.GiVT eFףJ5efqBGç:g(ƧE,Eg(M-{ޘ*=ݳۇy9O<_ui$.>,}:'pX|tyg.1.˼Zvo޶Yovbmn{c1<?n|M貗:͘2cV:JFEfPg1}-bוּ\fn܂嶼,hm-3.3R~)?WO/ifNjK$ 2!>ħn%ğ?2m(B[\#!O9DĊdƧȈKQ 1[ )*L|-FR≯{$D".i6PDR.Kʴ41#LSn-咑1OZ 2훔D"H$L_It[MF13HLX #l#tPDBH\в$e8]&<9͓7srreIꭷ>N!c;Ʋ~jVRPcT {CvV5fWc)e-E ?HeES> |qklj\7 m-y<*EZi3JfsÎHI$$2")13%2:3!/2Qn JDr񩘡|JrL6ʚizڜcb6CL7c6e6E!RTt}Dy+ӖdEbfBSa(_*ڇnp0(ŒDaLO&e0EӬ0DM-jz"qI2CJ(/3 )tj]Z2P{&GBbo%/r|:S32yں݊"벤[ZKwrIɨd&i{2],sCDL~Pf|nb-9?pݞ<9/8,pNoɏLw|Xeoӛ0>eaoOXUn=OyjUM4`{fe0.afq_,b~G{fۚXl66vy;׻ݳ6}teS'+ۤfl?mLFˌ1t;bپ{_R1ZN_ޫf,_vnf\Zb/UfTԡkKn3lB|Zl>xnUf]602ˌYkh_'P.~&SƯ%!7-[)-%0o*n\H|JYM4 SB*!*(x ;yp3Ar+?Y>O'Ũ咸EB\)[d[C-U$neƌK%R.)3%(fДR]#!DJJJ8˭)ߔyC_g= 9^kL o["" uG1MB@eL);nwF;R D!PjRP[hZ}]w=Yef"9R^y4eZʴSnw؇UJɔi. KiF]JBLx.ܼhƎd6)fKGEXҴӔvP,)\hvkNa2^Zrpr<^,Y^[N gC1WxeŇƧyϹ{ᵋ/]`57 372mrlw-ob]z˄}$[O6W.-+kTbcH/Mtn(UN{LLh/U>YRU1#c&$GMw&ddLOrn/.EŔ/wGIf!DVMpgZ1$f:Y)S4ndE{Ӛ& *%=ra.+RDHfPMi5]):djtD8άēЭ.`Of6fFΈDF-1Jn !Y$P5]Pe'KT%t0j'fh!dfKuT%cxm1ZzDL5 73=TE$.e&6UԊ%^Z)fT;`d,ٓ0 bY>Ryl/5YS"!ϖM,ij1#MqbhY^IQܜvr%N4EoT%K-+3$R4CC"42-86$r 5$D-ӊ3'3 c70)DJ HIIIo:7An(iOSҔiwti)rW ħsc;^pydyrx!v}"e"閽eY쥊ҏq=GGi&H.]nKbHK9Mܵ/ATS*3t'ԘE%i'OoO/o_ow>%N)9VlϲMK2S=0N,OI)23h$ݤhCw1H2!ϺI$$UR)&)+mQ 1=?׿/7?3?gǫ}_>M__~79,!=ҝAdY&҉a1AL;o1]i80I3StbO&*R$YJuK$YfFF1m q:)ȦFnsT%-b5S2̺Hl6fL;宾=sxǠl&h5,P3-[ԶcSijL;gJl6%C`:85ibS8Jxx;ȶeA| gݸq\88<{G..\p.\s=;ݸp38\|Zjxտ.oſ|};)yˢHyq~zܕS1'ft+Kefe]Ep5fdl񤜒8̐x'rk{6!-^SH Mw픘q 414I#Md왚Nf(Tݞr*OrWspq8"3{25JyivW^kJVRUʪT9`qZ^ɪ[*SݬQudi鞺eՠ:k[ef0vXCxr ^!w/ݲo6leaigw̾zMvZ^vZk,}D,a<>RI žMinŶT9-Svnxwb@eڔbYnjZ1Ű|6 3xq|Ah_}e4YSl"I0]|X6qhwqS|P<Y˳rtܕ' 4k1=wdG1f[iEXє'<떒W_b:%);Q2:Fǩb"NI?{|7bTZISSSңwy?şx'~??_y]}7W*aьSweF3 DGe39w3O/qU/-mƌƒctҥ+j#wNs~ݯL6E"48qZԴI&) R3;d3T]65%=~g}Rq(anQ{_Ur*VnCSf3 ei em~|g6,oS!os;rGowq7pBxSjO—o~/,_Xo|ǯgޞ՚QV48TBѾkt!T4S7D|IYg30|(ˇwS>JA8h]|vWLg6JLG&C4TRRL .lLh)B|!g HXN)pHw啔I(ZʌbI$)Di)#%ꐨCSKvW)orJ;28HbČSB"!N bH!"qJ$DQ$,),O2tᱝR2oqч$n㣵iOqJ(8M AI(gE9MjYg,"M,,J>6ijJ`ISBQ,d1EaksYSiY>$EIIy2ۓMe-޷mO.I|\ݸ7w70W!︻qw7nlnN7l61ۓ>a{\Y>`rW])=3K^~i 30cƧO*34#FN]oWjԏ~ÿ;>mN"IŔ*5fTFԈ')V&DbXKDn1)IexS8Q)&Yx>ſ_j/~g{'~z-Of$f$qW43R jWkO*~g05c|65YJE*UjTj0O7S4El3.= 61Mfuج5jf6͍FyR|{{˧7~g> R>2AQT~ѷDo V9ES#;sh3YL+Ŕ~||oPK-%CQ,')wN9ݸ6T/z)^ W}O?=Oj~oo}nOtfôSh3۾̌ii1c`8͘qJ3#^K a"2 R$q,qmS'C8g#!cb2OƳ!21**)0cFfQG47j$۩̞$U#d|PinQ*Ag׫'U^*ըRdR˓'}chA<,ʳŦ[A74*UN==v<ُN1gwՃ,+)#,6B>f,gYz'*Sl⃖}E(lTioؘtG8 Uͅ6[ZW´S7~[\=3,'96NŔ$=rINr$yh%YlOvSlk﫥7,$N3kϊ}Ek| *b/CѾB)c5c+!CaS>I{it cI3!V$*)J^w0ccØY[5=VfӔx֬EdN3,cS4D"$rH$N)o񦔌ٞ$.NS"%>]TIΌF٢)ʢCYjR*]RRlFMIy%Ymʴ4M\ܕS[^-D£'ٔٲvݐ8;<W.\{n8ksE܍nUy Z] ꥛WfKse7Zum-ԛUi3OT z#˓ZZt(R]Lvabv63}ff1Szv7c~'Ow~o}ZN)p cKIFXeSDBYNq*{KZV0cf0h_t Kk+ٯgz2C(lf$ 'E|IFcUe2UzܥSIdR eifzeb{ief"Z2A{i cq1m[҆TRN)g_?||c_nPKH)p9*)ͷ.WSRL;ʴ)\MK(:lwFk9(<[,ᔷ\9 nnܸ}׷|)nݵH;ʓi344=ٌf٭3Dw))nciFx2fƌR#x)^JdIS>h5kQp Ɨ)φxߘxR !hq7e$4FMJ|@y_[]9M%MyVNUM{eEaetwQ N33f'3ijHR{wa^)%%%H$"%H$R)ORnd;^.qÓٲikgٰ> qp[4M91㮜R k2͢$N,rrJlKr4YE<[4-n,f(˓!8=W+anWOF 8N9\E.]φru./8<;6a;M۩4Mlf;ō*jR˾qÖY^ZD_u;Mtiƴinکw%{ƧS6cbƌuO_?̷Ӵ$2'_. {ƇiF1!50P+$(K@:M:3z H# :I O$+(C2'QTL4qtf^|Z׺u_{8=>ܯSg*-1%MY1 "؃ EhU")_k="4HhtH% YKyTNA|T CFD͌*3IL"-EC1)_jb8Dc<1L,GZ1IfԤccZ;ƗrS?|/]۩NSVVJ;kV EFL_~/Q@ߨ]a]vCh*kV_>j}?…pGXYn8|,. 搋/5~725ʳbͽRmo sLT{Vkc32cFE̊qv /ⵡUEbɴ8 tH܌HHjfnk!&4:L0&"c"4l 3&[L Yٺ%S&xMbf%bJ(=WQ =V/VRRQ.TQtclϖ*J.fv{UNu=unʣݞt;Uݕ5T9rS,ko*nnee=nfw%գY>@6؟q?=v{8-t7L73Kz{zzz,Tlݫ_GNuK&^rus's:d9e$WّH)U#:vtqsUɦfhŘ5N,&C;.~\}Co{o_M;6n6O! qSnk"a<MyYSue4ƳmbbF<*jM,6X'ΣH'HIyA`=KKОдSJʳ$%%RK\=IXnʋ3N3N37 bKDBC'$R7$'NӦMӾeGڠfHy"RJMlQ8ўv<>(dv=+.l)(vE,0eHiOMy<+϶!XNl7ib͝\nNsd\= Wrpj'Yf9U77n.rqg!ćg0ny>ssfӴlLohd%Zԝ}sOޞ6=6sXmvOŒsn_ m )fJSo_o%iƌ0UUEP>TRu[ qiCj¢݌\!f|s}/_ybbfHS0)"+*7n{7Øa$njLQD)̌ifLajĴ'BN`Fi`(d*4eZ#?M_&=ShM+︦ȨRk^}Z??IhBn<.'ݪ,R_|}տ>ǷF%1٧n>us9)q3r;~_]ɸ#v3C4={z{z{NGjܴaaćTB0ND 1Y܌'=^)iŐG1QCAESqj)rӆ!nbj葨LFQ iäfjfHjE8n0d-՞9SfDϘkrvT2TI!RT)֭UUx;!YQP5i3rZKViS?H0rǸ^!n\8q`lW'!,eXAXerh6R;2{z3=emIWt&,cY\Ǔp%٘1uіy(q;Q+3*3v6I)W^rm-1ӦlqLڔg|˷|3o)o*R=> n{%Bw Iy-!QD%AV^Fw00Lӛmz\gM^+.RQdAbz"H*)oK|PJJ"%,QJDdڴKIC-!%N)/RR^L1mF M{[=)qR))&YHps%卫K:NC.8MfLA9xqfh3f)ORD#:W.\p4Wr!IXSS>>Sȧ\|u!m\o?G̘6QN3=4mFnv3N3f{zt6u3>x#oT%RR !'!H$71$!TM"K"%"Q&(ɌgqUVUxK 1 bGȖ$bMgƌtMψL2f63fBdC(7+NQwIeURq*k<*rTH꠼'wb9Eݺu{lymݺunݺuOnNʚʥXgd<\u랇zk?ݳ{==.JXbyǁXWbrwqWΪ+UVUٙ;JUʧKj]jbMFYlڢE먚zkDtlp)`Z'̸O.RK%DJ]iJe'N Ļf)j2ָكW|u[s3 _MjM/> !E A71xG!E$ZR7vȸ)fbh*)*y%, 'eFhO"!r)'О$BʋiƋ mLx)%%m3NU}j{̘62:^$Db$ƣd#KJHD"D"A+ʥH|i۴̘mڌ/m ڮSN EIJ┢L;Y;䡝L{f-)ORq񾦜۳\h( ŸT.q3b9eڋiJIh7ˋil\,v6c>Ì\͕\fɸ9\}0W;.\M܄07M.??_QP17%ID+'q3hC"7 7*۳r3jLN9U2hLAϤ[iz/i̕mL{{AƳy0) -%Z2vm)~ɯ1:P۩pq0MYJbF.B/)UWڌcay}pqx6uϔ[~&3fƶ쫽Mz3c-%:&2^4a{ 1fN"qH8%]4%c&&fLHy%J#")nuČ)33,Jrr)J0DƪYZITj-G~'Jk=IyVjzBJL_Så{>s>s>vs!pȒ%K,Ϯޖ .\M܄BB!n0gó ʳ{4,ϊvXX,Z\.D]\V]^O^r!fItl7K]kkv\۴MyH%dP~?{ѿd74픒"RKLTJ"HB$A2NDbWSVZy2mFZ~i2bJEċ7NQEQ|TGʳ*a]Tj\ԑ!K\|\G I$DGf3r*7c\[13"1~wu|T]liݴbVWJVYwwb_?TZn>("%eu8JqgZ8wQl7WǔO= !OFNݮJgVU3ft673ݴӄqJKD"q BAQ{#'!Q刄H$DzBGI !^+EI)ʌ7Ƙ3ǐ&QRYUYL鑑L%&N͞İ{&DeX'ŅEF*keTR]eJǘUV(UHURJUV9uJ*l(UYUnTy4:yn2ݔGJU.kY+UyuZnݺ{vcG#VXūbŊe;ޖ}cUdtOG+M%+rWI,陹[n3z\ri]zf2{_쇩qf{C"IKH\^[Nf!F17xmƗ-tFw5=C/S>.a JK7qFB< q3Ƴ<*7TxQجx fؔg3MܔPJrx4IiFʌqDB$DE$ 7 %DJM{2-Wʩ۔)HHyR%IxOJ{6t^f,6lD" aM$*9ٲH$N ۳N]q: )amNܔJ('))Ja,u86kM8'ӌgv3REV,6MyG)[BIxx!(0 vXnvnwsfٞLh hyGyߦ,rus6p"8-rpa|S.N,nB!xx6 x<`\+\,لvsRcrpŶ<*{[_*,O>V3ۓ\TYKnƳ˦}qxQI8ՒbL%t; 4)/>_O__w7y9J"$ !>&(oIʋ."1dČijfԞtئ}z|/e~\lӦߟ|5?CwCf4TN&bG}?I$DŴxbXs#3cM|I-EʓJeMQ8̘0(q2͸ÌanJmMOf|\ѥK?;ԗEUڇ)A݌*zX鬋4~Ϳvo~Oo~: ZM UjcNOϾF^l\`-W_)>&o_s'T9`u_3|>}g~_kZ{c2ަѭ̸cFQGiLb7qX2h)4ޓėI23 aL E0S&xWђ #1(Ɛ!RIʳa$WU+1c0f0=4z`ēMg7f$q)U؇j{4UMy),8h=3NiSӢ=vJ9r҂od{v%%%;OR)\MKquܔiY\L,Jʳ%eӞ]p\(7)hf ;JESn4;kӴn/-vbQrxvl{f,Ofx=9d)M!fok\9|'kv8fZwwZۖug=8uO:~kSṔ,(6( Gc'&&&FLHd`hD0MA uj?﻾on֮F r |bg65`s6 z#8AIN&L62VAsV h&QiC*$"62o}_M>4쌠0|׭???k~?QIdnL:P͕抒p"%66Ȓ0(АdC8,;61 !MSs姿_~_)zGxtIML75= F  zd0/W} &F 1(0~?W|5Ϡ!p  >I n]؅[VX!<¿yRfIb fa V\Y #fCԄBA\^2avdœ&W<Z/E=JA7tI7t@Cs-+XͦeF,K.'MfU $e IlG -$L AYoOF!'^0@&l09#%yz4';? O/i0 ĵ87$b'f#N@(HH }Z‰If#!#qI !^LE"ABx%!#PH`$$$l\H# f#sMDp!b.4i0.RPld$d<($\t&l62lz冸`J$l$$$$$PĤ B0L DB 1X!DIcI5i62iqxP %6 ki62id+& 0+;6u! 6Js8 hv9k(62xXȜe2ivœdN"`h`dnLhhnL6qP؄+ nɮPAyVd5 (0`#vLvpCHކ>&+r6aqNa29@_rS ɡx\;'UTI$92Lɑ09)>6$# ䷾ͯ7>%`6;#5̊,?tO~_G;?˾F5Y22 īI…6&IXMH`^C!l@-0M&" R.>ߞGxG~ףA`gH"<)$6ځ٘L "a4MI6 $$6p- aNz04]&a$]tBBx mU̧y/(I;>+OP p?̦dZ:̙̙ii#ql+ e$YP<.+MOLB:ֵ293  SIZ 7BB4 z?}?SO|/qqb0l5XȚaccsxa˾GO{bl4w(`6?x573ܦ `~Ή4IIKKafql#i馛^Q-_տG~tHnQHHM@`t&aN!\3פi4]BBB MDĦL $BL$dm'D{d5 BF% WBB$t ihQCBBB7 (ta%J(l `4C Sx%+ [el6f,nN79t3%nf3Ml6U̙nfs\ -CelTVkE̙0„fa]a0 DⅬ9ٔ) +9v׬kfg]Z}7`d .`mb7Y#45$yuSiZlId4RtH:ifH؅M' Dldl$$6@s`d$,,lddd,)$@g % 6Ҽ6A qaҐ,, F+b:]&1#JϠ (IUM!!0k6nl,,,P YFFF9;ccckm^evme2;3nfs[ʲR93SQq0accccE*Snfv0a kXK Q@ !晹0B9yAeN3kYg֕n k֕$dIlXXX';nKJ.3’yy46% F;6Ggt!nbJxd@(nT ,l@Dx.I?;p#мDM@x '22hC@`"!0h6&$@ kNvN\H IsâJdB$LHH $$HHHHH\`E ll0&SԠ]TظZZ80 *lll`dlnKMB .$22622.ddd\ d#!!q  P$M4i\9Ib ^aQA n+$0,V /PBƊ hAFDFūD H`@-"& OHHIH '*IH@ jh8N4'j 4J.d\2 ]o+G]ȿ  SUGSB(@ '.]6|< tB*66..a'#sets?G'LJ5i0'4tI]H ($D vN7ļ AH-!!@HXH$$$$@!@JIfP1HeƅFʼn؅t(pq$}LOtHZ(R$!!blhXز t5M7[)͵2e 9f6/VYe 3tg]ee6ȦL9sy1cf3[Tb@e-C2 -CˢeQP*x(va+b3a.DAqJU6LNpC+d–̕b' K,Y>P2HA](JFYfQ22)nګ6۫Mn%%%9"ʋEB1,Ϛ4ffl=f{'4nq3tJ6!lnd9q'z˖+6R˻u8bB=)_wt\[oMU֏]MFRRRDJ"E$fP+V-M%,-%I%5* 妤R+RK-To7]oI8z$=LϴhO2 fƌ35M1Wsn:3fMOW2U@42*JųoEoz6nx^Ȝh_)w{f8(͌zݏW3) %ȍ,K)S>U0zzt0T0fD"̌)D&~'^UR#;b]M۩IY.Rbj9WEQ՛J-)SMSJ*]֑uXrnxߙ ︰X,S Ƴj+WloyffH7{fLe#R!otzߺgڌ{cz]nv-(3bfFSMHьg J0#$'3)t!!H$DD┸ !J"H+%CuHɒJ,U^dɒJu8ź899.G<,˅ [J-%nƇJEQTRuXuC-)D"MRK-YR)%r64mڋfmMWli"q< Yh))"%EKRRh]\(w)Y#<%ˋ&>^Riڋ(r,4>4mڴlliY,!(7m4.Ey %fi6ۼ7ll6#۳f>}`q8B 0q3g\<6lsgHyW=Do}z;mP+:ԨebNu{7r7.%%K|AKjuԒJUsȒȍ%,}#KNIIdgw/zӯ/KԑZ%%(+RBʋhw3f̘i_6Jw{1cnPd'fh=z8US]~cf̦u3c|A{1c6=3fګiFœI4ͶMfL)7BDbi̘mڌ.ڳ2q4M3ij*D$o˯xI:#려hrʔYʺqqYNE|1oRKJ,YRuQKa떒տ_nJ.\d^Ƴlȏf_|n۴i׫inxSΌnLcƌ3fi0:3{Oo{9e[#4nDEوxe-TH$$$H$*!B$D┒H|jI%DBϊEOۺ݄ʳsPH 4!kJ(ʓn3=~ƇYHHHH()J =}DBψDP"RvYuX#GTRJJJZRjZ\RN-Yb]TDDJ-)ODZjID"RuHúC-uCJJJJ-)BTCA- %GM;M6cƌyѴӌgr!D"Y%Ku!Ke,\w\rypyCr,YN.N]" HQ.EIIyViӦyyfsefGh6S]JJEQRR i^(WYl6M{ffff>re6l7CK.&M܄?#\rjlg؅魯 #:(Z^,=m6˩VRINUybJ"%*$N2G38JJJmUN3,)$Sr'%Zj2藼_ R2HZII%G)oJ*)TDB͌6c8͘$%EDBH/*lƳB)f̘*nF|;~7]5 REonӦ}<ݴ.ʩJ2P5ӌZLg:rJ"О Ӧ`fL/"qW$]S$t)IߘS>N)lJIJ*U.YKu(YrPr_8?_uɻ\QjɒJJJR+_#,BW!^5rf2[z;]JQ|/y7<={޳Q{7̘0ѻezÌ1)eHLk7iي]"!&r"!S"Qe-aIRIE<) )qJ$HqH%!')qSDXq77L͌63ft1N3mn{91cFҾJ*;T$JE%UZRI*R^nߒ*OJUiU|#|l[^m=>*ʞTiZ{v;m6ZU.GLlcwFVegۓ7X1!VqE(B!&Vfg/nﭥ=ii=*UNTaM{WKƌ3vbƌu\kzfČ3ݰj vV,o񪽡(+?{~w?;4~=+ڗ,hho !nʫfqMB!s":!CSR┘H$*M4aӦ0*w3fDE$T%+VRٴ降J mo}dƴ3fLmZ٦Uɲ)))U>RʫE-RgvWK-U>͡)%kHILӴgEI$RZRRjR:dJP:ԡZj+$))\}(%.e,Y^L{1m6mޛqH$(\$RR;NC]YdɒR)om+W,Y"w"r)d(iڴiӦ{=kڧytӦnڴyOG\il6l6͢)YgEyhӞEY,1,7ۋf_ٞm޼7ټ=͏fYn6{!rB܄0q3nq32?k53Yb-u[_xGQ~ۋfEuQK\UJ]M6E*o]"[7MۜuhJUVסVj=ț~TH밎CRjI$J-%Qg%ML2)JU8dQrQ(li64cFo=z&&'m}i!唘LO7sbUƌMJ"ffH30f=+S|J,*E9/n3f|*D"jHY7nE?gunv:8R*u1eʺ8.bg(8ܔ?MXuu*URMRjoCbXε[oN^TJ"e//g&_k׫fd̵eezfә1-qWɜ%Ir͘+[ƌfȘ3n{(+$*Z"S"QJBTırS"$D"$Wq0 C%|c Co0! mŒsjSeiFYcnunqg_uPbu(H-)Q*ORY*UTHJrTCݺgُۓT@ YURu8-,59*SJ'3ǫʱTh=cڋB{2=f|cfcF3zm\g3cfz17g<陞fƸY>čoDl͢|iƫ g|A.sw/iOc|?q?3MB q׾Nŷ)%nB INaT0M!q𑐓Wi],ՙv+BK!chM U2 1eϊnJ7KEBEd%Gd3JܭMO$D՘M⑋HIєPvEnJG'HԒQLʋZj)aIyǕinSEµRNlh^$iGb)"rJ,}ȡY,J;}uc7suGwYN\9dpyÖ2]@78ru3US>lӴMRML{6yrP4\A ͢4mdQnna1K_޳fflGmY>up.ijqƧф\vf{.<)W)%N)s<-ڏ뺝jGM7]*)iڴ]Hk7 S_U!Dy=Hh]*RBVdsMۓR"+$$KMINfJܔ\M;͸/JedI( 틪q\zER14̬M?Ux63 3N3ޔ9I%gM1NU$N݌9ѾlČD1rJRN9S쥚b6M3Ϙ0 =3"RT$n*b"Co⏫xdi$,pijMJ7ۋ5oٿ_\rYخ]NrN%. 6(>#~z#_sfl;u{jŌnк7ݻw3f\3ͤ)3f$cfR["%Q4:cnV,3BVi6 d{fi2.~]S>Uh?so:ojӸiq3~⻔'qSn.LēB$՞$aո"1qNb"43NDShʩB 14mP>+DJE(wDdH7H/faq0Y)`֭J*wlSnnU}]GR˳wn^r;]HRcMQmϻ:hC"%RKMƫ)ZRN))iGypJK9MճY)ڔ4t'C)J.w֡,uC}h'mOϲJ5#<\\n5&}l1,)O/,E޺MNҦJo*Qmzfd08%YMIITq1V ǿz}37IjyV2t)3lJrRrZTH(9Nڴ͸152fa2_)tT7an631F"JEgq1x˘hbZ0-Mɩ%7F;1j*ɨ8%NmEq\h]EUn|I~_ϯ[ؿ<6ˋJuV.srHYlfHQniwy_ş?sZV#)F-5i߭P,W_S+W۩umڇ#մ1fw͘qSޮ3U0&mJR-X CqȌ܄{A>`XIhBQ RgJ$%E#"!D%%!'#|!*Sd%+TRʳiӣgfSk.۸5mƴnRRS-Uj峦u뭷=J*UduXDJ-HIIqpHII(D-R%KZPK-)J=WQA$jYjuCjIRRRR^7nܸqͼiRRN)dɒE,YR%KDJJCB'Kz%dɒ%K,Y|4.ˋ2|(KKʳEyihyiēin懦M6My2M74m̍v7CY2,y(X.EW<g4 6'6MiӼ1?i݆l|j7gx6>27n|,,ŢZW9sƳ!hʏ >ٔ!ދ9*io!ӔTSމSq*Y3`)"Q29h9K BqHERFgz458%b0ċx1D8┒Hq#<^r<{ǩG[*iwMnӦnӦ])q)ڔ%CaČD:Riwu6r7[ݴӴ[1m)wBL;(/R,))9 %囲|bŴ=mSٲr2X,ˍ{p)6,8k+1k<>ҭ7KnfV1G6EDvIRVI8n%Ve&L$V!{e$BUԃRZrHJ9%2cif{k&۠wpiw E"%N]3N3`-1ib0L'v9ÿWI83[SIYiS"l%Y13m ٍ޾Ro^.ri)eRfh5&2#(3唘8Eh%YEo_}ߵ7Gr*+P2-lJʇRݽ[?5쿑 ŔӮd[/߮?Z?–#OƳ;.76dZo6{{nz&7Z%*Qab[I7IV9=<jIIЭʳ0cU2ZE0.ffio3!aC&z*D[2&2^q̸!^c"f&xgKLĩes`Ny"AKkVykf24t*w=KyJ*#n*(픪^Va)Tݳi4jGU֤bUxXr.XHUYe*k-~35[Zdy|ȪŊX屬*{{tø|".!.Ybͦooެ';jRGNlېRAT7r<=0*.ǭ<43g5nq-C3<=vѺ';6cѭ4Z 3 Ì،6*ݣ\ϪۏKk7@ a])ƏIՔgM1w)i+D -[ 8G މ `!ДДB5r!3tT,P\F. c%$dXrg:ZʳM- 33C4# OLӍ)ϪZl82e;M{ѭJٲLv<{z/p7R˩t)Nٶg8MK&fL;XHI9L61e]J-):RN)3RN)wӴvps1mڇR.4-gSKQN))) n,&˳86m{f.8l'Rii5c{#ir.efVKnr7d9 6v)) K|l5岝ئ}\ް=(Y,wsyq¸q{+<ɘ\r9زXN3fSK ˣyœ/ȡ¡.Ty=ۚãS7V#:|YRL#v7m7Rlwb)wYF*lSSmwBy0cYTM2{M)/rgJCjR2ta3n3c̘mƌ1f 3NcC1z2dgUfGHlY f\f_ԛq[3&Y T(f=:)wIƸ_c9%.r*ӝ3MMۣJ+V[D" ŌN.#DS6)Sf%rؾhvg>op?+_7Iyk$ b͈`jљDAB|$3.$N1q˘03Yq1aLgH"q113Q*FQbS]NReS.)UNNV Mjjvԣݪ`Ux*UN<.{[eݖg[+ZQNkaci<>b.fj=C<>ʫhe8wR/xu{FiaUVZ5tOSVjҴwF;B3N32q 3q;7J^回<4M[.sCfMY4'ÇS-m]-MYLy6!44q)RRjIIrJ9 Ӧ.%%%%%C)ݦRhwgefZHQp%%%ݼfqP,27ftpf{vx6lN)yC)Cv7͘=k6hϚ6Ò><& c)2i-x-œLyoI2h˧]b1>k6!.7>ƳmyލY8xr'ij4)4VOXI5?Nq*o5YP>'YS.q9A֥\n CMPdaQY(AN3)oCt]¦fAV -Q(rJb"I)*)2IgfoElY3w1$.q0لrvޛv[*)扇%v9xʩi*YK=5߳~Ƌ:ǣKӔ﷾)RNڳiKSRjCSJʍrӴ):p YRʹSJ\f.MrH\JJ]=Hq8drJf;eJOv7)2l]ѴO̸Yf4͸<)i/MSN.Y4vXRoX.M{Rlla{/^6M|bgKlwӴK lfCi]Hxpepng(âYa,6gۇ]u,vn)NYr2t3۴aHy'UN)_Pfhl.qZ_Tg͢'p2em*ZO,mI\wHRt2cl3bxaWh^o 6#Lf1کiB|1h*Q^1`̌,-15vIRVjѴ)ϲ232Gzvӓ7]1.3e3(Lfߘid4=f[OmƔ3snsf0f|d}Ԍ?mucƯqI8gFGbO%Yw^y[iψgqKwBcw0,K!6G*FS9ŋrʊ,YIX$YR%1I>RI9M۷Y̎db ӌ0.gC|ӌ%wӲ8=Q8!Ab")*)$QI$0E6 RenZ-ED,M[(d&tQOpqy^38t^.#C-&Dr)0Ka˸opU[KROI Bf%[`\Z,nPBbSvK;57Ple|\aq8[- ܽI0کZJ|\M2PDڦ[ZT٘P640VT<#!$>cnvke($B >*Iʈ7LDB$LDPRNW1LZVJHFf*rJj#5VF1#U=҉S4UUZ0e]BQ Ey.Rԉ(nČ^j"Ln.[JE򢼈ڦU0*eJղT*EUZT(M[HIf[lJbHH%1*L9#ʥ!I8 5;RZIإPjNEB\Q TdÌD⭸TI( ubTeFT唸i(T)oAT)/B)$Z\*DbJMRc4P$=Uݾ 7n]]uWVLftfxm`Fwe=Vf͋;mҕ6j5|F\Svqڞ멽o[Ne5WZ;֪W]z}^^t{>kд7_up8 gGިYXXaj9^aigެ[;3ݝg2đq$H2=9RE;sS*&HRAg=uJLj" "S먛BBS"-.FQ!+?K7?"F">%o3(_*ߠShoS)rlE)EahR(S47[J{nU 5(4=i)ERERRXUjUթR׍L SR9XFT"*ٖRR^jժTV~b4zFe{~yym=tfm\>C߬63jɶ3NEj3U{OzT[9JԓLSSƋ1͡nuZ/ixQTdR#4,zrVZ-jTK-Ԓ]Y6,PPxmBċwrxqF CEe- gYn/g^j䦎иyZN32N322fomjTlմVҊՕխJm>ji=n9}D]uYؔOJUul3^;Lo S!$D$(Iδ:E*j|NCI)qI$PĩC;LH(r q*&67L*N)FB&QRƥ$z&$)26;h)!B9SE\%҆jy(*)Ͱ2nݦi7;zƿ7?psgO(CF;4[b#jhQ?rOQbǟ/=l&K1g|'~?[-ƍ_PN)y3#eS. ̘1>L̘C"]ʗþD"TƌjJ;܄c ݂V6JRY.2eHqʨ*R⍵$^*U^rJ\6몼CxS[ה*(KCr!BD.8%Ci5cb"Uuȍj3.m.պK5㍠[=չ7Zƚ4kuu{#ð7ʗ^uӶ\6_x#[iZ aUW&EYvE9<88㋨~Ye#8b;m긽J~aޭtsyil>-+j8/mtfo#g[uN$qzZw9}[EcHұݞvs76cRAwfLU&&f2cr!BؚFkƇ")$NFbjUįP/"AV"ٔ C..riE1,K@ҥ7;塦,ʥ( KQ" aI<$.[*FCyQV(N QCSZ,eqS[խܜJhUQ錷2C-Z8pc(.TJjժtiFپw'8vѭmo]~:L╵+̲YKCS2U{OS-jlC-}mC-,.3vܬRzRK/%'jfdjrVoVۋUS-R˩"CS-ldKd{+cmVyxc;e22lqx0rȖF2.!*l*ﴷ5 nf9UI\NsHӾ"v:\]pgføl;fݩ^< ".uKKpw'?w/wn^ơpWebéZycmdS-7ҷT/jz`UWb2fdS)"cWTVQ퓊^dLur))NkTj5{beX.vU+U{ƳOR$Lfb(LWMot*9LH$!*j%U)DBETCy+.⍝UDjwayHjK&!^4wTMyHEUifV"[SB!DnU3hJjZxcTdtkNCS>./ȨU~ͯ=oO >g)C-Ħ\bӊOQȿ=*O~o}r[ō7n~Ey]6PmJ$RHRRaJͤHT$)=%Z,Mh_5mvm4ZndV{#݆^V;-\کV#{hf;d=YJWeZme񪬲Jjۢ(BьP;eUvYڋΞngSke)nӰ|2Ub؃̰kECcTʇ6)AygwU 3SD"TuHHd̘1cFF"$fGl͸EҞC?+W"XE|T|]ڇE1>nX>%oU.tKiNCa4͗њEVaф퍈-BЍ۰ۓFUo=YV]ZU-{yZ*7T*bhaYs>S͔')eUI4fo.RʋM$UlJ*ժtVZ/릶{ݷ9jy9f\ZfvZ˩F\^Ca/a،4Cd\JYN)[ ZYުal<$.CqkZ5ŝE1ĩb elkF62BflaN\B\vYNrpCn.O.wP*މKprܹ$Kԍ_>P.qy3M3ڬ3ro_>*m{6[&7SƇvbn}jV’6%=T^kJj'fOQ=]4O[ӞXAyfH&G2rDJ>:I9)!m״OSGrPSȩNI%PHt=u)XJ*Rک"; U5HtfT$||TMLU٭˩$>a*,DQ7)U*U&m*GwԲcP3MmӍjӌ5zg߱c?a M4f^zN-~?ozhn?_vSxpYX\nNuK%>g^-bRu_8M)f98H> #cfo tن.)K,uQa9Ut3vPfE&l]2jSZ A)M!2DėJ!"/U)IULR>By_JPʩ*+jEH$HQnKQeuUyH$N]TZ{2 }ݾ#5S=9eSuqtuɩYiN#&.zD{fvZmZI~F%ĒYuX B=]޶mrkO.]^qUX6+(ixu.9n1y~3l},DWkmm<<{~7|z̤8s~>j8=K&,~Xl7*4wAm"mI09c1S#j3\$DN.PėRu[į /PY3 וO Myo׾U Reڷʌ.òNJʴfb5UUeUZ-u+nRKRU=4#0UOtirJ!T9 ˥#R)U* f"UVJnUYlnZz.s v].edXNhl;ۋbhj\F-.,ksC\~DE7o7'qSwnz2z9m|knNq~b)TSNɩJ-%֥ڔ.]KS?UmUUL+iROOhoI{~z|οoq Ϝir,/YlBW?[|Oe+9?g}ǟ),y<;Amj.ܻ Sfd29Șwƌyvܭ1c'DQQ刊=i|m|_vIЈ1A Qf`F 4 D8 8Q"A(=$`Fcyg׽s]Uk~I9bGS)QK5AttKhvBԨR"rW|*=%QP ftKTw,qW.P20tUMTtVQ U۳B)TJEHT$MzP.ѦR*S5zu]]եڳAd{aBi&z٭=GF;m5mZm5jub{'v rXkkyxZ.dO];k7W!=Z]Ȟʥ][PR^cyM{/F!oٱ9vSW*O;{[<׶[ֳftNfTOqnI63*Fb*sfmCj7❽c]ʋD"ɤ3q[&՜)0Vي- ;cCďKU |R^B^Dv7EQ>2P45S41!1*4㡍Q]UItSR LѥUӥQRuqT5b:մwUmUYEuwUڋJ{UP,MjwݪU[upi;9/\|'7nn7{9ycK/|}>>K/qU˺8^;^[b]nEZպZWqu\K/몗NeeK$-㽌ykgٲl߬}cTVK-jjQjZjvms's37x1 #_MFFFNFN-79e3D"[nrʍ-<7;)$ledl OȖ-[N0Vnr) ۧa9e0>aaM60lwմ6OlNlyIʖ|)'7!7n !ķ*\pC׼.5kBbd}P6gm>+?Dr]R6{֭WUCjպuxUoT*ժ<.cgjժrQ-6ժۋYuU7|S`o-LrWH|z'$-$ly xg$[f]2F⃦i Yc]$xDܹdI&3{H6$bbI$[B1L2ٓLff2;dKTR^)/Y^eSL;/~m/ʷ)Qxo'fFDxo㽮qԔPgE<{^~^pK/r\Wպvvyʺe]uu\W ןv҇>FzXm||i4lZjժU5'Zꪮ F^굾PK-7j|"[6#ۋad< QƼSNƋa"#lM6-Ö8-[N06[Fpɍ-[lNnrR4aoD"prrcFfdF7le0 x1) AQ= {NNbd=r%'79͏ !ċ:8887 .>vd|exdmNsb_s>,e-Gю6ZuUK:uZnݞ-mTڴIU/T^eURnaΔ*UUwbn6**,Xo_Y;a{n/q>9;v1fqn>Ny3I$-H|ݴNDfl&l=%Y"D"H|VDB$C2;疑L2"HHdcf޳cJ_Krd){(67%INwB*)MyRUJWu]VjUv$ҕM6͡JZah ՖJLRZnw/~~_K;/h,6VKQXU]{q*_t״Zjow^8<&>!~Nli;8o&vreaKdd$C2fDFJlUddzͩا*U=x/sTDDEʐq71UI&NB*Jo022I0$B.ݺuR*U)tRR(tRER JUURB**32BJ#ċa H$&{"cL&222222[Ns2g3ޛdxoOf읙V^d?OeUjuE.EKKK.}f9ֺoVV,ֲӞZ^r9\/r8}1ŕ+E4×AQNĎ;*ۧyΧJʪq]ǺJrӜ3ñO۱XvtU`.Ff[Uqw*7M|BHn;;$SDIf"qƌ32&9DK˖-&C^zCz9z饗:.ou.qu\WyIO8^9^9^9^{T֭ii2歼-[lf-[FDF]j5TRYjϪ5uҥZj>>RDz}^FFFFNv-ø#ol"[rʖ/&&H!-sܲasȖMd˖-[NȓlMl8CqxdanDȰ=Vڋ 0&_2 0 )'xbxX4T!NNnC~E~EnM(zpqW:x888<Íg99}p6{ˍ5fmNo|OO@fgN]ۺvDuZ]jwpjU/%u?^SƳ:uv706eZzFbVj76)s6?&sU{T;YO=O:騽)9e2$ ܝ3{;y0ɌlMiʎ{$!BwC"D$#!32${l29IvGFFJJ'JH|-M#''[/մ7yR0ds쪱 #175B3dSN3fi)T*>Rի.UJ0rS7?{_ſioX^,Z=\{sy[8-wwE-`X>/&V]EX,We|ƌƌKd fKL<s|ގLFmG"n윕slb"O<R6{&v=w;6TjcܜVxol&$;ɍQQ{Ď!̘"uV*/J*U񐪮*U(U]U*JIܹPcMTE< )Qn)f2c';L2$s弙33ȌdOdO12OFdSؾRkelRVYu.4VNZmzs9ЋReljګ…(-A,rz'W~_yrzeZj+6O68vlma-z.;wv2t$v!'s;ۓ$D9팙یRdO&>31#-LLAرHx=!7ZQ~~C~ש_B ʋP>U įо Y݄0jXA1jyXOBhfhzAGS aQUwU.mFrWzQt!tZEݰF*ta~k]4[UvWJ24aU]v2rS[]ה*GQK*JgU ˋÊWVKV.^25vqw7ó^zZrׇgk:ܭ>:ܭóaN^f'w}5_bU~ұbiyc,w{{ٌiϺ rDmd|jJoS/UŸ[}h=,㽌D0>Qc]F'BqFȰeHBf[K-M*(lw3H6VTSx2ˋqDM( oxmm^ah/a<4x1S-uf(Y+ef2>ֿLS4fCJB̎Qe|t=muY갉۶do]+Espe{,y4l!qfW Zjܭҥ«ڵ:hʋqҾf*8P[Y6eQ+jry3/sǪW;ƙ*ENwCsRΛ%4ܪ,qפL6$Hd DbH(tȴ>YL !x'mECY.]^{~W8^ң7py>҇^zD9iNsڧ}37V[eQߦZjTVZj::Wo58}e|!M^as)[llٲe[9e߲oٷsi|)7%o22y2{[-_finytwlBBdKI0mbFpcSN9dlmk[cYˋa|j8a9唑'yQ222&jXjyVˋ''77nܸqc񩢨O䇜rrrIlOom}̙ٞ6?Sӿglsi']-a]jݺu{تuWuQ]GU]G??|bT飪UT+aQZ:V*>U֡Zjif9=)uΛ=BvIre->ge1 Kb$=LHrf&SHȝ!R< M75<4Ew0 YEJZjEbojwUf .q/?pxˋR}_xXayr?}s/'wB!9}a{+w9͘a.csL$wrWTEbfR(w}=MSCH)GQEkf)7(rW^j}>+Xrw[ZUضTٓ۰z̰X.ۋ>JWuޚmH\ZEfْ">$.AHdd$O1D܅BZӄEw?E CQGP>]fyO]|rhah43)ay1ЖPnX55qi/Mw'U.NRYGw5KVr9Z\:(Q=ݫZ76]7ii,kx`CꡬBҥZ^nqqITѾF?Ȳu㣧'}8>q~Yl_uzqrj=fx+U,ZK-RZ*jC-:s|^]n9iZƳ(xgo%RȖ&9B qۖoT-Yyr[ud,C,rkڳZųD nKCX"/]<;}EܕwF[Z^܈:ݼxj2V.GI9z%],U3ݓ?s>軿/ƴUra׬h?=}d2nLN6(L&Sヲ٥P$!5Fl1a]q SDDEJ3"ч1q j Ul:i/b"Kd̐?~ٟSR۸Ra=T%sGD-QݺXNw5Fjo4LUܵˠUTԸ;p 5lSYBg;|g?WGN>OܽyTR%ܰGʯݯ_;?78];~o{ɟt8O9NNN>owrpQ>b78'#Ȱ&(wrWiDF"H|XӴ*ָL\JLuPidjn2ƌ*G"cF-dX$R4q)ȸkLjť%aTq).mƥJ*ĥJѥ|Ed"фĥZFg=.Y\"PJ.FX팸[eV,j(KJʫzh'7]s9hN9Px{eO.Z89NasV=}mZ3N={ebՕUwOF&Nolq'-YdG?H͸DND)K"f3R\LPqHT|]EP~o6㛕o6s0~(#_S GTU{ K|, "eXl<+/BalPm5q6-6M+]2r]VW[,T;˥5Rc^GYbʋj? vA yMWzVZRCgRmS8N*ϪTѯ4UQ=(]^.^l_i l.e )Nf=R|>]ָ;5m-e=}9Ӝ8K5ӓ]pa[DF%Y|iQ!##[FFFƥ[FjVY-PKz-US"d6&[Fj ó234#C"3&;KEIFFqztXبj3d&Ֆw˸ .^,Ƴ4OwC˃Z坛P#qa\;ubXN^~ZӪTԃnUjԨRK/K֭JjG{XK*U'/3no3jyZ^-ze8Lf6ܸۜ//ѣGZ_OtY><~SWyW?g?g?<|"xXo=x҇>knAFƜ4967sȘ/)cN)ii[ժmϪUaoe˖mNlٲeOf{VK-5޳%)## 71e".[vt͜{ƌL3{:{5uu;͙937s37̖-###Zg"[FFFna8y-Oe˖0 7n i8o'aƋ1eKw0d|0^4훝}<>E+<\n7n%Rr8]n=[ee-oTv>9O>7mou[]A-jjZ~tm=~jUVY]Zz5]|҇>ZjǣTWZWUkW*ܾ?탎?qպ-wO~lIoJV"Ha0zmroM%%.GMz|d(ajY*jjq}|wn=UVYeRY((6MhMQEX4M;>i-G9KwxU gkٟg[gV;[va93qQrRR.Fuȶj6nި*uXT\WDׄgiw%nr$+!$"!i⇄vwzqEyϪsr#)aE|E?ܵоIwx14RQ(CSо&JJ3qSL3_qF"li6Mjqx1MFf\j0Uzڥ(UEYzj6Ye:̶HM)L⍩z`Ԫڪ**ь:mwQ*ժTQ.Ŵg*UURA6eݾq77?2eAR3.vZ֡kx~4O >=[>8=[ݞ'WOOn.־{x&_xl2ĥʜ2:e|ZVWU{hj99)jT1n r6loe{j]Q^aNypuKNhlƳ3lFBn:MƖ̸t9֘^fR^tti-^,{ˣw鮖on#OԲm67jل9]2,.aXlݦ،o5<饗^E̓kwYbV8N (]y_7us9ݝZ 孶rVm}vDʳ~y_rY.I)/U?/#/-;0 l15; –aD#IZ%#)M|XeTUL TI*ĥ*$]3] C"te"T_]cʥNQ2I "%K?rͱ(UI:\M̐I9Hy1>l=2VVvRmʥW)oTRUV0fN)GQȨ6=kY蝩9MX6nl|+o?>GOI.&^lˉ^˶jm8ߙߞ[>ğD-Z,'^ć S>䁸;}浻Gx牓GwOk'q|H5C3=);OOfo㐑H̶ćM쭘(&.)!!TZL/X.{"(.6rzNcTDIRQ$vT5M*nhf$H$jRޚPIxHGQUTrR.]2RemRzh/*DU˘jUJyRYƬU=QM\ZfP.e޴nJHinGޣUanꢺzF3Oƶcsۨk=؏ZǮóMYUY[e8,o'{gǶw Ef]n_eMlmxwiߔrd>w{Ti*GUnۍncJl3HɎf0f"L\vd EEZoæAHDThnlwƳ-}srY(>E|L?VfC{O3e(wYS3}xk2= ŰB;q][ lwmJWUZ,jBӫj,l1D5fSJ卪bW^.c']TYvQnJj*U,2..UުVɍ9uvl]iφףۥzX֧ПX۬óo<~wã>{t>'>\փ}5snx/VK[PQkBdӞUrj\zPmSZQ-osd%[P˥KKFaܝg52FƳK6!qɐV97_JuTjzTZ]7ev.{6[Ҹtyrw3z޳a%6-IwR(/6]zydof{6[/d>wY^jQsԃgܕ+wyPn ''-Um/K2fG`԰-M’AK||P}nioUmnT␱XRK[dVTxO/*3\isӯdhM;~?_e$D*lJ G4D.HG*B hBD2UTL\F/o{k_r7"Tu)\eM"/E*y/|_Ư_TՔ;$ j0kj49(&VFrW̓nTS>;3VH׹u.M3?y-?g6OբfԒ'Zk~̷-pwۜ^|?9']wۋk>bưkOۜ>*!ܜeƌe4% %#ȝDjS1qGҘ13βeN]9mj%)"" %qWDP5C3B"[]Œ*q CBfR\*fL9"eQU]˳ByRYTQ.qWT]«HQU=Ð&I\bjFK%ѝZK3èNMuk1_ijne=emwub,oUvY񪬲'X^!^v1*w?{y>gәN{q Z(MI*5"F.1IԠ!4H%`&JQiiP(^ϙZ}朽gZEyҖ. IM"&<[z/{[uĚYSM#ܞv>;ˏ;s㏻Wr%,4i3͘&M9ĨaڴVlrs'HI%RXbޔfaB,SSӦL9!\L7eڔ`'-#=ʔ'EfL"ӌ1gX.oMit1:lZnڄHt(b$WtH+DMCF\gXLq-rrr$u(5^,ʽaJ^QllSM\Hl| r˜!<T05A 6avExr؇kks~E׷ӥ!*Oo"7?o%-.gU-\dC?߽H^!W ^IAӮW]B-Ҧm[4PL4ͪ}b};ԫ"=_OyFMLL͞6Zbo)_yW[ۿ;ww_bZzøhDtbSmǐ;a"fM0 b4f\ !DLWbפha"1D*+S3E!&N␚ Dt2I”-)Pm-)qZ}l:ӉfXK|ǿ}'<?z}[^Vb9Ģ5%ʃo5voa~~v'a<&6ɯU[L3vBGH"gM6#N$HXLOT]Y9$S4)ڝxbfb;R'Ej1Wƒ(onQ]!6-DҔlf8q7ל8S)O΍SX,rb}uaܫ^ϻYXx+񗮾3ȓC"4Ί&˹֟'>jH9ц+t/Y KzIT:,[}W#ݧ쿙G}bbNӢ }%,}zOoG>C_.:GzV8t8fF Up"bh/3øh3l=CLciMIy!ZC=33Cy{C{GCLF4dĈh&<_Cv'i%!##hƘ尥&03f1=mr8-Ye-I3u6Xihq+z|W+}*'n Xlvb7;*|λ׿~ܣb/Sx+~oXbg(h/3I7bnotE{szWҥDŽ.]Laیn3Vi/4.19,f+oŖ&UrB/3b!1!HcP&LL]+͘03f1tG0# qpoRz܉!Br^Cl15#\Lz,&\XƒbÈ !"b"aZƆt/BqQCerDʰN"dDݝ0Ah3itd6[&2eJwn\Tq,Qc-SUyMXaC GG\lř3mpvvA$ARho N bn˲FʸM7\Q;RlxM9Zj4񍈽:)1,s5nt]Ed~+"&,^jU]Yv1g{1mƌ0nwOcF{V#&,F״Dқ =W>zz` 5&\$CxtgОG7qhcA0hNFNi4#0 !Ț3qEjŕgN̕C$Em)>6!!rSĖd!t/B%b9NZ.I)u:%c !!]\ĕ \ "^LvS,}Z.K.gnODR.NwkS*I呋=c6uN+nدx#'ڃnuq#c֛MnɥwOdt;^i12%BôH"D "E:D%!3;Iq}k4gHNٔx MvoʴIEyf̙4M$0f\,vw>0bwXf8cڴHѦtRlzsgÝX.Z {}ےXS4grN"錬WiRW”C;̙%ҙt KC/gEy"JbAjnO?7Lc>>C/_eFզDb"rmWSXC}?-~ ^yz<|s~C3}yi̘RE4ZzЫ-~;wE_yۏho&?>/2{dGjҲwwbs czfhF#MτƝ0fZ%f<0"!丈}էx9#sw?Տ?wG_"3cI6NJdLC#0fz2k'#Bg2!kt{6Qg/d֌/Y?<}s~oc(vvqͰeGqÍ%X+ׯug~%0.6v.bgϗ}w>[%_Wxߗ}i^scEQvIuetYp.{y.nLK)]{u1cƔfL|CRLa߭C:;]Xzz*aʌU0="}zvk2FtK2#3MtM"BDAjFj3AppoO#aFftJ "1! dB2btcRW&#3LhĬ+սDNA^NfBsy33+2E1/m5)1MHm!݈)$;mq@7,łtT;(ZZ,&k}__~^fyLf5v>T'ev7{+U4*vMYK)g+mUKRnٺ쭊R.zU^E̩P2*AdT34Ia Cð M|P)10w=I޲Vl:Q(JժZҙXU{Qnmt;vwv?삛ƫٺ9}by-ą'Wo|g.o;Õ:86[-xuyZQCK$2qWjsZ-wˋZn"ۋlsE]5#MѲU.#[Ƌ #'æ|I"[ ⣌if{-le-cƋ*2rʙl9USU4cCQECj_iB-sw)[N/BvیԲDKȸZZΛzLkFBn6^,ceolE4O>Wۉjy8=l_p|c8>q)wgNپ<4"]pۦ2=ܯ͟װ0?[Cq3bsclVcIȘ.@~W/T}7:S[/Ӛs{ؾW~|3ge|_1gU-)m=5h]1H/*&$+U$CKR2T)w_|}#zm?J pſofܟ?uUUKTIT.AH֪RUR-FJjwIe]T걉ؒIRlsKwn'yo{?궩DhUQ2QPE^խkXJt)^Tjaqxч$UU+$nUWu[ʤ.%:vCHV]1fX]/r(εk'xcტ)CQa(;|Y>^\ioNq\V]O|zݧՖZ%3"}fO-^dGuL14Cu-.vSuu2e<쵖a( ጖rkwB|ln9=ċm ZkF3^ t ">5~C[?3ѴϔoĔP~-(l|*GB|AQϔ(T)L)!(w>bB$?,N fuiE9*Dcmmjl, E*jYfvתVSuW=U_V* P[KejUϜNwժȘO3>ȳyq^Weq:nܸfޛ_;yx~ww}v^=_{GqGo'g=\륗^j#URVʫCZEƋ*8Zj/ɖ-[FiNsy632MUFNxaddddƕadd 0Yr-ێlB$dejdd\598OtIrw+ܘ(####7LnryMn䖹9onͳ~X/|l|o_u?}ͿjUZOjy=,U.{wo~RK롾Wcf骋/Y+ΔŢ~O~O_"#;9d˶Sws2 )B$ LUU*y_%bdBLg¬|o Μrɴ7E!0ajTբTTDm:*UTKzݺT2lwYfjT8G7כ|._:\''Ϝl_xF:<,[_t;}rby89:9)p߯Q5+l6C1F8wwfvuss;7>e%Jt^qSRRZqs$T6MUVhnjZ*I'm20L|0aFF&ҔO]98cNsr]FTl3:!3mmTf+EWYn񢖺KUTTӹSu.!BJ,WJ֕*/RB|&GuJWiLn33/1h_UR.]oQft]jb]U9j`X<eYv}MyqCQM,ESMSE4MєWM~hX,UouXW^=ˌ*V\Ym?eMI攤JM9GѺtqnKu;Ԩxq[;e-b37sQG 0^j|д`|4c<$B5n|AQo`|sgSW*BJՌ,sQfZ[-UJE*zRZ]V[.2,9de3[{hl>n^ݾ[wɋ㍻zki6ohO>xキΫfԕGE.rUqPm3"Q¨jUjvWWN7Glfn4[F"tZ"[Z02GMȒ%!lx،Wl9o&9&sGF&swĜrfȶ2S쑭:MRmOMѕz;J;l/jrl37wO/2ɖq=\ƌ;F12^qWC;Q7GgԪzaܮƧHvnWM-a6'⽻[.:y!7uy塼*<WnD!<N_-Nw)aO{{;w[?ۿ빯*sܕa2WNʯ_MseJoY7]f̬O~7]Ŀ~"1,jT%r%r7*HT$A$R)_%PZGa_k|~oIuiڱ7ͤ #eSebjQ:갧RQ.TEUj'kTPX=䴺W|09GK650IK;.u|?#O;^-!*uNuJ888<,?yAZ,wNCթwl"fxϖ5f;o7O\u3f;O9͘ aȖH$2652=T )zf}SHCsvznS:=[2 9b-˜- Fj myh3MQHM1II.Q&0)vkZTLʔQJjI2U)IWeE*RwMTj]|`TrJn3ETo$T!3ʢ˾&uЩ>BҮ[]fY(Au\i,aozm<fQ4ESЌfUxUďPh7>">UH}(JL jܭr7UQ T1ԃ)uljQK.jTE=։UK5]隮Z}MϬҎUW*ժUFE/tejU:UK6.YY7qq1#Zj^̘glͳ2fا}1Kz7nܸ}>}̳.o]qyg]:ߺOźXje]uoTVmj#%.}^j/Nje˖mnfNsyq}g'0e˖+'##ۜq3r-xe)>w[->'ﲟkki]ߞ[edddGLaL555Fmy5l/fZ= [6f 7顤8py/ߗcr .e;ߛ1ysWok3?A);ٓL2jnI&vD"Ƹ<.]UIE)_*ʋ!D2%'|N oe?_9?MwtYe:E?'9b-z:dYuxzdK/}K4%F5X1N%N)ukjڋs̸MfM?{o'CQQE ިC,[o]oMް8P:ԡupzux(''K-jwDKw].]wtVʫq2%5zhdWnݨծ\OYnbҺ\jĜRRQwGQuT!URՓZUOQ"ٷ0}x!he0Uw'ګkO|#B?]|#U(_Ъ?ڰ<24gah?"Q NsCH MP'W𰨚ay5,*ŢTSZemZvw}t4e ]cj{,ֶY݌*fձjQPEQzQnS>iwU^Tp4a;c:.[x\[/1sd̸x1ȶZK/wwzW}G.o]޺UƹeX2ېx.a! -#fxQ]V;Xf+XCZS&7'#۴zmj\ Ҫa-VCQ>3ZJ\XRKN6'Ez/p7nrw<3NlWb=7<{yFD:g//l'=cq~bضww1?qi,ֹnX' y[km>w~墶<.Oj[ v7Z,wU_/\t(2,䬴j}_g$W!fSK|]!*ebZJ˷?+O|OsOP 1MhU* jCn] U;$+;56DoE%FA2v[1cNW7CjʦWP Zw?xOJ?cw~_C89x˩NNǡ??Λw%v89[N䙓R_O۾ڕW)޹f}mh͘q漹}_#pc$-Q#_#*mڊDDLdudd1tb.vDXbTTZ#ӴθۣJ*$Qr]!tE- .]*!QDF3Ty1*E{8.IՓjYD0Q*DJ*UTGb|"iU^S$$^LU0]JҙRԤ5Ba%n+]R]ft#)jCuW46WԵVZ6,VY塬ګ<,P~9Xګ+Mao}ЫnфҦi>X/ݥBԭZ>CСv*EXK&cl9=\66;L?}Q(~7F)3"7j/Uj|6=u4Un]ke.}r$ҋ֭}*dI FZSۡ#z5ɖp[1)SݡC+2)JNa#j]+jy4fEd!Bw["BV4ɠ( TEDКnz84tw*RvZvXz -A8h ST.uv6KUt1"L݁KRu!6Xi4é:Wd-J0:U*!ͩ6`F,Vc5M;wMGK_JQ4N؜ ;i[{~\o5;nkaVir=k,[Xi[ںf2${վRV\{Z2תΧ7}REVt֭i:Tpꖬj9rH(LС=WN݂\)PE].jwN_D!%&h!hjjNA~([t/GEz#:4ᐡ:S DE&Iƒ"lNP-3r(+ ) #cNi9dGE#Db1:vb1rPT=FASF"PE, "E%J 6"zFtڜZLąM`ӥ61en].]Nno9C9Kn5tC- k6k\<]8=3'w5u/WnjW1&QhT)Jl]NeC!R v]^t]-]D:-sx0ڃHJCSM6[/K/K7M]K5Ԟս禦k7]]SB=n6![+<T]]7鰥]rtu,ݺ%=Z%J\< ]rIMuIttT)"5Ң2W#D2rzYtm Mas$H/G `2ĝ^NE8+B vjG}L{0ܜ0HV:x!u[ TaU-qG}뺊+?}<3Wb+_ݿJ;D\Y,PiGU5iTο~j?kOЏ~˫qTJ"]"ҖC2hVm_/=_?'/|sO>~kD%ECtZ M{ۃVMk_GjM8Sx2ɇ?k~/;Ogo[Q̨*׏~?s|/wggxw}v*d@$A q*"(6KЙ-ɋCBw!|]1R9RPU݊,$M RٳRvexTOGoڟc9mSygŃ|'<7e/o&qqag^zr KXywy`g:t`e_>X vNOz Cn50$uE{С4z:ۃ\ЭєM5m$M%h"EtRnn^SLjInNQ hRzuEPCHΦU'/Dh{8De!"װĐ23bu ݴCNݫ#K"<n"!$uu7BGGH$i"dU9)ɔ#6:TylݖmL1rPXXF:FuHXi1s6F0^H(ʣA;S `{:SS{N].l֬'fg\/&c"ރV.9{9),Yi\R)2z:\- Zݝݲ{nACnZwkN))p*"TtP*K BRR2U I:UI*4oМKnM`14RRoz?_z"i/D>Hx!CNKo(nN UBːHDQePM7I TʍM! "t(!ƈXf h\ѳc6]Z !)ÈtV1Xޒ".zD1F,""J &WϦա7lehh]Nx P7ܬ*ХJM]tbyI'Dy~Z9PK-r%5t{.0WW~ů|껙dsȤ=XN<m!gW%k8u.c,kw}G{O~gn?3Kc ~W׾9^b8%#Un Vz9m(N2{V'>_Ǿwm?}O]>'SjsFMqy*nt'QT9Dd5+iUC&Ao)EUtqy;_gͿۇG>O>i&(J:H\?u[__߅~ȧ.G>}cӭ[m1 iCa" 2QrjQE*>tk)BtΌW^W3#p!icͅ=5 -?ml$C )Hk:Mb 0~;`罏v Nx4=lL64-&7Ų߽߽~O՟!)ٙؗX7U9-ۺu9tRv7Er_ͺB-KEkzNJ/z ,ZTСҭM7p?sn݂F{zgshۆSaljEvm!CdZK5[wX"t6a-)t!£hV;T`n!BGSm:FBfZhҩYKfwh+J(#Ch Ua c)B8uM^HUt VWVHtfEwvnբu;GUtS"ZS[u :j2j5XEӆXT2C+sIrqXk9,1ĸk3Cc ˩ R:S$" э;QlMN76d͍Sl6.k.k.ٽʞpmu/vRמePx"&aXJ }wZ/ֽD#n7aVZnlMX+r@.]&YAQ$JzKҩJ 7i#=Xޭ|7Ko_J.>H^J1"[J&TNIpJ:=hi=Jb"eCӐM %.)dJNɰmd$!# RFNW qa2{sq(pWbpQqp`K<Ѣa( O5ȫr%F]ĕ "p"E )E0D!H^0ZFӡ[Cn/FH"&SHlO5Tˡ"君L"eʍ"vvÃZ9mۧ;^kzjyK{yP 3 e-]Xk. ]=?׷oWhPO~D~ߞ*^wl[>sȧE2j^Sc qSȑ)2"҅.d0糮k֫ko~y߼} 3u&?ß s|˫׺^ s)E):z D"ڡ.UTZMRtwMJWKV )Z.)hK-!"pHCy\o_BDWX_$p%h[ZG+o.ϕ&"ĈC˺[_ۗZݞLJ?)\{rǫ~T"hID薩Cҩ26c0""u"F04ͩqd1,"Y./~57X=e9̓ZryPK[u5~7aM9eLuK*]ze^hغYծ Ѻi5u.݊[Cպ\hU&Z8S%HjQ*;t{nIrC-R2BS"4TňwhCS &vi BA+UDZ1BB0BDa1DȐ):2ExVfEw=iURMk$&=-SȔA7mi)B*NJSy!3022! ӈ!X)#pF^/2)2YF2(EmcȻ\b1bd1F0b\ë.= $HAw+7`8%E{F:Sp(E9 rjQv&3}|޸Y}{V_9}VW7~vo[[iXnX v1]"]fX75Ϟjnk~߫Q]e-W͹w[m-]Y,Ų+UVhj̦*2V͚dULjR5eZjeIQf:QJBfN"0eQSiQ(E=;n}S" 7z05 @E£t IҴwR(#pj h/t'P$U"[0( p 236J&F(FEA1p]HQIad%}AW0rD3X!cpX)FbJ.Azt;7*t9li6.,KJ^*˚]u֥")TD]L7^PK-ZjA-^{ƽ[y0ٞw{3{޺\͛='٨iތ")/(]֛"E:L&z9tv5ԭN=uziPtQ)nHR..Ni=ҋtSi^ݫkW{UO,̥˃Ye.9uJݵԭH%[nYN)B,F!ˡ'Ey0s3"Et$)RC-Y^vX ]Aҥ-{ I,]#iJd9twT֥ͨtt{FnL)(A)Vb#X4@rj EH+b4Y^Z,n ~..kn]vvSi6Qã5+$s5Q־Dx0orited`}tO|wT9_6ך_˧յ7]DmUZTu/ZzxPwkY3Xp{CȻ}&9t)]j^<td[EPPr+oiZ7ҥ=8J-]׃|=;V-#C Alv''B< "! r`/"6 hW>w7ZUkdLue[s͸%2JIf?_$#M%R%v+#%v4]1ߍnlt-R"bF"ҙ!"C{)3*SRITQK ]ޏPUEMTn]U!ZVeTKIJ=>OO/ifcfևcU[V܊=zL{Hh٪rUj(3tuY**[ưC":u)y3n3d*i1\jDi{dԡ.Ugtjuhч[WVm>?xji/Eruŏ]=O<:~kVw_^>spqy '99w˱Bٮ[/ixȶS}}ّQٲ}|\VOIHfn=[ن"-L {%*vqMwsXͰ\Xr AQ[=UR2*R Qe* QX- 㖸e6U^v[ ]1EywiUEΌJI*vtTiD"iE"=E__ʼnb$TIHy)U|je&"YKaƌof|Xn=bE*mVl$ձǦf{%eTB!3+b_\Wmf=(/P+ڇaPӯ>0T^8>?._3W9k֚kZ9vݭ.?)I̹eIUYfc-'U)SuU1nt;|p˜GieGD"SĻY^"CRqv+dD3U3)542si_ /3ֿ})7C 9oCh/EnXKiW]*V> i^&}TҘTELuibvB{ ՌrPrP>T:D?hlnUե8ĪcԪZUEQJY'lԡ/U뒱PV]jÇ]N9iG3Hd$U`^2M}d7jTV[l^^?.qOt}q;x|v}vۏޝ}t=m<40w}yyzl! 3B CCFڭZnFF5']F%#K%}xHø][9M⺶%&.יsIb2$)5.%qfUnE*nHL]n\UV*U2 H{iFGIqPcMMr 9\hrbn&l/uMF&-lVmU{٬kd-)kjMmެ/֌a jurv5j]э2ԕərs]&d$22nUD4ۯ]nG(%U 蒸UDV 2Aj4J"2U^CT)&B|U.U54R+nIJ!TPn)m4CTJyiTe*5յ A+̴T[7RV*ٌw V6JJayiK+m[[2GB]Տ=OlVՔ&*jڟK&)2nIfT,v9Z>qXGizUMhjPon8mI׏مCnץg_^lac-P۹]*Oo>mqMi_v|\q]8T6;%jԘxW]N$&Ba) n(DHB5FQcbPUjH &! QK1BQ"~֌[*?l*U1&4PnUTBi[B EdTPX1KQ޵n[P$UP$7]5nVFĭʭ*UCҥ|n݌w3Շ]պ[6Ex&e۩]UVk-lww 9q[KP>bho8""BC}W^f(/0_)FKløumvk#ڸ]ð7tڇC1嫚z$ftknJ{q[[ʌ99Yb K ֖e͵mvxUWTqR巪UrUrKux<ǖQw[oU9(o)֟eT-O!H$MS]|z.ch>f^N鶶of?_|Oop=֛~z//=~p{ﺞ/03ܚը+C{ß/[ZFl/*zed96xHl2Ek( ![fr%ædE.F&]'?۴[b0* )*U#g ꪚZb2fd2xVݓ$=2U[ҙ62nnrNmZ2nt"v1lny8R$bhsY4o^]Ee{)'>IS?(-:98xe;8la꺞\Z6p+{]f-#eٶn*m67!׹8⠖[OޝM[[ m6Sld{7Գ.,l WrVvn pۄ0WIjlx[ɘ-GW,F5K=uWkdBR5X$\Ԙ/IDv)&xvRnȭ'*QWynT|7nK$FPMBQLjiBaL6&DS?H UWU%6ݺQ[2(M73QT*)V ]|U)[ZB[R*Ubl$tmfUJ*UTUTTWáZyIbFk0^ʶ+)GnRVR>Y Qexiv6cZ!HR3W;3W[VjoK,` _X|rpqQnAqz)ʯ3~í~p"Q^./͖͓)]xòm{ɵ6xm>rd˾\͖ql3mvRfyȘ6cFw3*UHfbdeK|/x mBtEj$,0Xnbi3zQ-İZyEkZݶ])Qć!#td!^VDUy)G[.- 3Ik3DFKӣ-M F2QczEm LA#/CE&]t,f[uTR+ҫ(*3^7/R%u3T[7LufͲM;3nMntJՑ; k[>͎mŮXZe˳Ukq}*G9Qw!>}Esɇ9K3^گ4_|dy)G\'ع/<)XtG+O{uŶ*FeTU4V%JYk)#-89S9<))\zmpf梇0]kۭt\Ϛ1w]|spqVbƿPK2QĿP*ih_Ug >vڇƨE*RCS^^ʟh5Ì^^}7Q݅^VX2MXl60nO;58,T=vGv[b?գUϙ1?hvsiH5貙S4j}ỵ;N1fr3sȖxWfXnT RnCG6ZBJ|W$m #I$*J!"H*E0nUMEuPFP喱 WTE2UfTiBYo*wCC܂2)/f3ܺt(ƭc(J(Ƞ\K.ĹO> 喭"<ަ,TVTdUV[Ș(/)m"d햑thLyIuHi6{,+Qq:jeH\7ef.H&*nVk|n%xnDbVj*nE%QU*֭ʎJФDezh!1mkVuV/CǦF2M2螘LPQVL-)Th 'Ԓ*E5J*/\]Rn#ч[j-jJr[BRlc.[ڟ~0UOnޤu:lU\xju+{ܖ߸K KSЌr+ʇI奈[Б"fMMy7toj" i"ncwVćxYlq)#^=zm9S9l:Ro,kS{z[mVEV]<í:TRd#ߪ.E5cMXtqFƴ,ypDƻ])3Iˡډal}Z2n3fgZϟ_b?]O?ڧ}yze6/wyʭbd8ܪƜn5)Kø0Ul̢%jJRey"##-ϲe biOj˸$[FF$[F c%\3ݪ0hfp%[*%a`bJBd$zMRԈSAfʅKllSMK%U.▔٨>u[mmue/^n.-sw\\r9ʅa99z6OxKj[< ʵ';2#urel-H\a ]2f ̨_ǺY~PǜV,# 1QH$ t U%LnсkSU1Ƙ)0RGcDH-l)r .t:5v5EV62+ȸ%f|Ji۔Pqm*l-R5I]b[ѭU#Q(UnCgJ+ErGSdն9W.Ȥ|Wl*62*)1KTjwE܆#D=T)ĭH|iUNT *mWuISE[*l>;{[qPUGuWMVWWusZwVXjݞZVG#._2,д/Ţ=f0//c|pqqy\+ՑT_Wcgl,G]=rtܺ^GfY2DcjEX\뚹Z 3#}׾ R*5e1mM54 q^D{ R,Oom"[!??o G[?Q~4~TA<1EhwCо[BU"(ٌվ dTk~PmV4e|ciEEX 5,L-ʧ{AemCn/ƞP)*5n^~XիM-;5@1ԛZjV6lzӣwUR!!qRE˨8\,\$[sd$~X/[*٪ 5/<^c|vv[=c^zm.}Xo~b>]o;c營]>ӷߚӭ9}xeNa 3~vqGl[>d G"HԈG–e[FO*ڧliHN+sS.Jb])afE\ܪVEa1z*n>emj!%TEҬ-)[.UDmv=eV*fj3fdi>er[mb58^>GU8|iEr%o|r;y<lN;ö\ߙm.aUU9֚]ħm/evgֶnj[ގVmsPO=6mo{IU2N楗X2ei^~ejn n)WUu_R2\{[kٴm,WU{UeRo-c۽r- }ݙ%嶶(#ns.Uli$GsIJoe<ƌ^lWRji#>uR-<5ZP(HIQٴ_lHb(*IӣJKdH▛xDQu&% Q(Ռ(B襊bUR2]N"UH )CѾ쨙T*QURڮ*7U.)GIITKYoU%[RYwc䬮UҶֵDW*zP+>^ܖ+v*;6Ͷu8EQ9Nxk^o/1x ͇S\,/8-_s.rl巌{W^ގ~Kͤ?۹׾Uvej^rVZֺRzׇr=Q:PvžPTv9iXmjר(6qAV5Ќ,SU?U.Po ߋ*Bcq+ohC.f{B%iByf(248(BiL3eLMEl timNp-EY8ے]/U7޻x+q.eޥ,5eU}:~TV[VQJ_rPjUu pևI8|7j-#T3[ǻlXn9)iftwklt[Xfh6Q\kdN.$JMm*9r(q [Hb:5)Nk2>eh[JfӣGnȌJʎVd*{ax$3uOru&&Hvk&hH %]Iؒ#R*qq ( Sڧ6fU}7tW(LK"n:\tVЌ*FU$TUA2B")4E(ᶷaƔULb1LS+TrE=j:j- !nc]/SCtk2m~CC\1Zm32zaf԰o*fjY]Jl![vr *&\u:GKZ~~(_#\W/i/Yp)]'oߺ%߲N6ۼ5̶ۛ/2>dNcvr^0sȘ}:q~eƎ$:B>ܪT14Tɦ=ҮȘ!2Idd ƌ*ʧD5;"J$CQ]Gʵ5|ڑI"[9**Dʭhl"*f"QD’U1=ϲ23ZJG"TM2e-W,P(BbLZOFRLM }UʧB"uU=ʔZEyGݤ2L6UV\J[R,> 5(S)V[j2GS{)ս^[[tJkbZñYsX>X^j7.x|ch?xEh6K,cq2sŋjp͸q-G)m9ymq"T.+#۬9s}-ŵ9ۜ߄z7:Z홉UDչ{JϹ߲]io9 2uHEf>Fq ی<6af/B5ø`h_GKA(?ß;ʏ?*_B}iCjS, QnC7شO\CPė"~1JX-ch3m*]CcRzxS(ƴfmZŒZlg[*ec,۫:Y`Q]ên0U<ҭf;ů݊jUu͛f04#[Qo[NK’P*ڎQ~VEY,-1Reśi?kbƧwڗW{{[/}m]Ї:7z>e7h_~6۾mZz|e,GU\e,#nش*l"Co?៸7ͧ77N.K.ŋ჋-]/oVԸự1[eq1M]o6=^7}m_fȘWfvBmNS2lZ[Ze/,D$ %-dDJOD["tRf*tUgKq=sIdL ̰ٓRn(׶ʣL3)by$>͎.-n[- B6%=,BO*;1tVGGUmƮ~U9nlmuuUutSBRiT˵َ.)mɾܮW%fu']۬KbQ~E;X,hEhN /IX>hoEQ>]/Nޜ(÷6>uוqu¯:ʵ& ),vMզR)WjK^/m/2;"6ǦӧdFye|lb|430uah3c4c9 ahƗˏ.29)"ڟُ1*߷"mTO*G3"G1G3~1fiayħ~pgER)R RvkF3M066-QͰоOdt3C1,v]<.e]4E4,ڌP6^X*JcZjPRe1ЇzWIŗC]jڭxRltZ8Ɋ[*>d$>U3/-G\~Osy/e.sև|e׶ /_2rY[VS^-ODNFDBdǩJ^>UلH߷e}2xe˖I/&K."a$r&W1$D*{ԥb(n Cn\{vf 5UnQ-cɈ*J"hFܪmlAu31t%T3攝CQe9݂ΨjB>-f|q+CFxg˸C3Yw<Ǣd|/͖ۗŋ-sms}d^nXf#Xm8Nڲ͖5+k/™6t̘閜C5q۸<2fZM_ֻZ˵ve{)̸NmaVond#CdRZ)G^km{H^~Zk}^Gzgq̇D{dldZRl閽(URn5,&oLU4x,$\RQ2T*RL$BtUTTa6k FD&Hj"IWB$nD eESwd IU*BSR˔x M V&V$)t)_liz(DU.]hZ줫U͠JE&Qʭ¤n?[e,TpZcj[a ۗtR0U)_eѾ O6Cx/alGy)_Nq8׻KbÜ~ԍZqk.ݺUUWpmT{Qn)k6Vr)sGTUDJAivmqRahEƭKǴz\^0NUP>?ʯ6i2~U"~["_ߍ*T?*b7bS̸u_(᥈Q-)*f1t1.*lɃx99h21ެ.la~04s;u0UK|WO?˾]nslݞ/ކ02~TSƧjU~.qkDFF02!n/!_BQDni/deJ{0\"y$D\Hd'{˨Q$KFbR%J%T]F-lFN6SӺlڧq$!Sg$Ev(/}JڭDGhzjIK*9)At饖6}m<})|S,/-/O._as۱lN i^n:\~nw7e.qԲk/k?8"c~9*l&&m>rt.G-U콯ziN{{^5n [yrJ2Q3{QzVmӪ:f0ғ=^mCmcۣfϹ3 ff.l{1>J'cs<$UiLddo٤Eڭ"TcFƭ&!U4"Cqć꒚ZCء C1.$]K+3CBal/ĭDyIK KoM&JŒ %cUD-]nCUBB2vTRڧa4FU%1̌R]eJ|RE"VRX4ɐh=bTTWReJ"vɨWUlYK#N5*$QrKJNMV9J.{Xjea{ޞC-kjץt"//??G_~Ϳ/8 pN|yfl.4 999T=fq׸U[|"c.5yz.rƭ!a޲uQl )gcHis "$lm-"^E3H$ʇQ*5:ST3&USF%>!VUݙ+nnU KJʦ1Q^\0PU]e*jGBB[qK͎[U? [/G3a.QKb&-.UPEQdFGTb0E">͸u>d$խʭhPtTy G0cMUSӫwRUQ˵zn-!bm]Z>EUiOoXe{Y,:xgW'ێR썵]rB~_߶<ưifS {9y o'Wy='vzNj>}]Ԯ?lv]W*6qxݶq{n6ֽ}w\q=iƌ<\n9}j6mFq.:1^ƭ͌ۘ> Cی_fKR~auğ䀘U_3PG[~i C{i(0v[~|i/b(/EfQ*1fFE1E3Yxbvfi)cpԔ>i1},k}hl)6QlnSZjfoQoUQP(˭設RFm斧zsE8dܮVeӗ}HIdrr!#pR%Dç*¸ox)#2~1RSj_z8URZe.?i~4۾2G}enϧ(p)?3^/O.nH$d&m>ZRe]\^uHd2>N[mFf793r&k$e.]evR[H=:^F#1Q!ftSfT혡VZ` #ۖ uc{iV>LCx a٣J"HTU%fVL>R/q+T8K%W53rlU ڗ[V zy/6;;߹ b1w8l/}Oپl [2Ǿ/T(IP#j6P]L虝[&I+UmĭڧBUe겈HTD]r%PƇ ͤE^梄`jѻRW,ítd*+!ؔ[ZhEE\U&n]Lq5qHVs/KM4v]?wۿ_\&?)󽗃{yx9|98xg;5RM{Ql6A5f\ΑG5nszi\c-eGM1[uʨ8y #lksJvx -CboD\&nPV喸0[b5mGQE45zXU#]]HL 2JD/l"ݭKTI&J'[ŐJ!nqDVFU EE1$ʚL]FTDʣmt*ZFDܦ(hͨRQK!m.Uv 2U<$z*ECUFfPCYch҅(PiZat35۞2*Elfg/$ ..~8O/?:Ov,s\1q] OWۦ&]eo_=^˼\>=Ӈv[IHv{KLi B[E٬Y-6őEeh.m1C''|xdUiVȲkU͔:ަVo=zE*JQ.2zpV-/upz>]vV͛l\-QO)T-[ӧ*z)q[OvQ1zP%QlqRJ6[ZNtzz xٗu/smlrC/fa\^6OժJZ._2n5DF"BZ"$)F[^CvjU _Ni>SƗy-cN}y;..Yni˭Nl6W2|\k˭ٗ^>-zz}^js-z_uuaST˩rjlפԹ[e4vQQ˭6cqm^V0ܺU˸2T2rX>,_bZmdB;yR]66˶˭Y\lkms0˲G:aPlG2dKک( CNʔ2uėDV%22!UPM{ii]^B$If1iӌ"S/)HTBUeKJR6tDt2n)/mD&!UHPi%-~T$Q{HtZ4QQ EHR"TR\IWܲ:RE:1۔*ґUNUDzsȱ6Ъ{qUQ]E*iFR^ZNMiTKä)v:]<'A>~rƖ(?y? gíN<8ޭ"><]llƏ2OSa)d8]e:]e_!)1.Mܒ!Dl3Va6gj6>[syic-/3mUZPExe̱\.-d"dXc[[jʧV 5nm(f >P^BQtKR閠ŨvۛPR^.rۣ U9c(=t]PcAQ⥊2^)UVJJP-J*Jj2ڧ$դ\V%1I+LUWJ"BM`KfhTSY9Pe+{jbj5er[V&{\U/Xė벚rc4Excw 'fh6./=ӧﷃx+?l//=jkewr9zY]GW]+D7ZzNe몑,m=ekN"gf [[lB1˸5fڌF M0M3~7Uڟ#K"jERU^BGKЌ?&fh/Pl{Y~bҌkWSCKQK5CfX E3434ft#n!BFh-[]Mk5,6xdxY\<܆\UKEw*H[e^YnqTUmG}*ʔco͛jeTIX~InkdrK?9 K*/!peʅ)Q~j2n[-qHdܪUjjxԇ^pw0Y>el}mYnNlsw#PO%eddM202-{a%{[(oV,OKe9}\=sɎKƵcd4s1f !mcǗ6b|J[/-> a-:nU%ܚ=4[G%%1[m)^\V%eVU%1fj򐑡?ɑPm=ҝ^j{[oZzU-~ZwK;幽-B~m ^-`Ѳ9kau=6d9}%l\f.}QՋ8mЫ~5{;ė=jlkmʶmJeo˕ӾV%sXj6td˭dtd7ZK[lX*>:檬5bys/dvv[[;}^ k̚zb˘jD&5L bIrmbKNGm6Ib&hI*?DD!d0Ef&t/S)/NʭH[[#ʇ."Ȕ.I$ʭm*RDjbtB܂*J 2O3izIkh Fnی 3[H{!jj8 Z1QSX4 e{P^f!/,CmtzjʨuQ^f-bE5\qY5I0^ZDaӭkW~HSu~xJ&gz^)oZBd{)ÿ?? N_./Ãp;/^N.'a3lz|Nӌl3]rZ-c=;-9x^.Hr/3fOevE"a˦ݲeqKkI#d6ƇpQ!&KlZnn¥OVJGb9!ӽΎ$%[衷[&^jBd+^*[^Kx s9TUU[D*3Nu%(% C{hDU,Q.EBeR"TIdtEܪ͗(I{usk۬ZjdSU: ve:mlW(V(ฺeުe5eeړ}Okjk۾صuY0:(yzl r×}9?Q^~rm{}mu0CQstHTT!kQnq eʭ0C(ƫ} /6M3NkyXh٦hSbJiem Io=Rlu:X꠪ʗ/?M?TnUTTTxťJʇ͸EF Kmh5n[jj__Xe>6?4_{mN?v/.}ԇ~K9%>UpȖ2EJF%jHI]er+͔Oe#f\zƜ]fdE:5)}tJ*>JUYl'ݒYfe94Q7_8XnL|vRӼ.mi!Xe^69m_fou}ikgDyyZOޖjB9TS{c{_-ۙ:ONGeT5r:B%f/ CZT탴.Օ>V:ߎ`[l{JɦddrefMn[3>l}Լ]*qk(tE?mZnL2=FURKMUrtK"(aʌ0hR۬LP3;٪ZjSnKɸK1ŭ%F7r)DRJվ V])55ER[-m*[h:QEKY23UTavTIRRVDU4 PFJ &:Њf*f"սEd(]RR(S.FEEw͞[mOu8R٢29[.0GTIUuIW5KCjwS]G#VS]a`Ϳ 'pܾ NN6l/֪yKoԛm6bw)qsڛwS)3>-<8R$2K/-Q1$)Qe,"t[6%dK U(^B¦+[/ !> V%KܺTfҌtɩ"tX*[:%Q"gXHe)0tTe*nAFU E%ʟU:e])]JR q Ֆ9wݦLT{TS]nĥZiZN{[ʧܺ$2T )"Rz4MQ4NX.u0}.!]1X_tc?vеY'kjmRK;{Zso{|zN=2yz~r9Ǘ/[VY((GC9^7(ߝx"8rrT9gɹT?ԗel/V-(݉Uw[xԦkgad:V^ٳ|RY|z-aShl;mmŢ|j9E)ϕ_)rG_ӌ1Qn!}S> M3>?7,ncJfߔQwWʯUIrq ]55cWf[ZK?ˎ % ifzZ(ZbX~n,NڧŔeLrԡGS_|O?UM*J]Ԩ*R[rۥ&K𦚃qɘQ/^vrR$n__H$oʧDQRRĥʧ[.CKFFZpH|Jd]8T-M3j-Te8>\m<^/ۥ^.]]zxs%cĜfHxw٥TT*SF"dKS"[F"[FFS$%#ۻzܶK^.d\vǖq]r&KvlN2""L+bLNvRT6E1oNCB$*ATtĥDa4Č*2HLMv٥lO2X˭U٥:kW6%lݪs>qyl{VTr9j?c>2[^K6ø5nI[87ۇe͙f- ZGmEovzqmGdylmjXYkk!8=߭do9iOTDK''̓ν~b핡g/٪ʒs4Kz8eL ,ٯX]]1K1Grٞo%5l/]wxP8dYiuRz8OS*{RcȘa2-ɖP,ٺJ"3IW(2BBQّ4].!RQ)5 2F܈D&0$FH13*DP"P">UD*Q%RCqɔFʇn>fQC-Q5gԡr&2VqTQn2]T9ŇRUR)+>qZEUQI=ĭCƎ]'=RLEogf8.3ɱq=2=^+"ZLTIɖH1dKu욐tΗU(*D"ةla-q+6fQM'MbE-2.EK]e(Tyb<)d\1Ce|R.EBTuRR[/{*XMRKa7&Mc^/UISEV]b^JJݥ}'?gTU[[]8k~<'{2coazn뫌Kbszx?.gUYV9Zrpr:~a'~üĥnImέ Ÿr5Tn3UqS3qi3us:[̠W?w /_"~[P~G=C*,67{BfpRqrK3QӰ0CУfۭU .[^վ24"n%{W/TjUrTctQuT:꧟ߦTVJQjEK_{P/ᛇ^q/ eƼ(9\H*RBeS.a^2I97mf3Dm0nM)FoZF\d܂MP[|CiQeFcĥe8*t΢U.U:2&&KF&ݪP%T?i-nۭ!RHDRnR ='e0V)R2RR(2j\֒ 3(Eʪ*FDhK]nR咨r*B$HÇtII)4e:Z-7TUKb Unq/Z._#[(biZ_Xٜqru(04aߴv{9yP-<ʃ^$v^ȹs9姟8vd߮gVf;W2zUpJrx?Y&O]ν{|ږ84%Rew$Ɵ S\4W&2Z{O(6n62áhƭf|Wv[~m-^/l/(14?Ph5iƿ܆*ߜ<6wCŦ,6`Mo)RLR>13Mw͌i^3M E;`椧-lA2Tiq[&ɃeVƹ|Q'G.OLF` IE#&KOu0P)eJqk"Ƨq+ MҾY>(IuʖOeFo^>]c>9Ts>L?[/9p.SiËYvo5뽿~Y_luvn<3U<-Kjmkf}.e{frMr)UTLIF,)ZNP[M[fYn猌s2s3e9,a22.^ԮxNٔs1mvHk+ӋV. 0.2ֈ[3HR.D۶He1eJk .AT"fˤbRD˔-J Iqk%2~%{|W|.CHU"ʊiƧ*TUtZ|"eU=ćPI"zQ*{dGٺ%PDQn&⒙*Yb]&nФ*)v&Ub٤~tLI4aLexPˌKЪjհb**1Eԫmlzi6bm%[:_?7ÿ/AKZ^rᛗNWesm6͸m6atn'~9'ym˸ yɩIKZew{=b&iFb¨"CGaiJJ3UnۇmB4tMoS1B׫%3ITQDJE"nI:U6ZD'6]BeDv!RiHeF Ei=Vk#DZW&I)2͉Z9JFV3bb*KE+EQQB6cTWøE-LaT5&..UDj)x5ԪGC:X;93YTa)ryw.ZٓmSlR[\un>i:Wv M34EÛ[n0nw㗓sy$^R.G׿qtrn'r86<_1{ܙŻSUXI?]=Ide٭%c]eK- Cی[q.ƶfnj/^_["4<+ weXm-{g^|զk:K1ӣՏmՔVQz^#]9^KRo.29:daɒ.CARJYƧժTq&.Ujs~Hd2>%"R)))ժU4.C^>vw\E3櫌KF^..k&1ڙ),ˏ`!!F >`!̳W;"ZgJRF5Ʋ^deZ[rqf.SދbsD _"Nb}ͻ1l/NN[JF$4jf|ؽL2##uɖ1 HtV(aFM!LڄReOMOM"n0nE=B3*S1/J2cPnD|舐h&>efr{QU\U;nEVENpqí4qZ/l[-M/|w./ڇrOVsws6G/kwz[r>\\2۔f^yɚ{뗡:o>ݦ՛zay?uh?Tb*lUm;92{TRRS&vۭ6a"Z~ym}ٕb/cۭlk9ߧ,wkT3,s|zaݬ=$eș̚Ч,d<6+{j*9R:EdzlM1ReRQ-q3+R2Q#:*=[EBh3) PJm1DP2Qq$G51 USˣJIlы#AqKN_ BLTSCHVd ˧*εKɮ*ILmo%e|ģ-<&sF1'=2>$#$-#;sywamgdH$0DGfT%Ȩs(?TdqylJ1`#T4a--zG\vxGz(+ջ*҇_K- }C0{ .rO?]nGp?Wf7m׻#~o6[[\f7ۧndPV2۷ٶm\[E]j[ޔbrN5cF5z:1ghG/lfģ6!Kѥ-\vX/kgvZuؾm-{]u\dFJY5[-Yl0կM1ZfLJ>UIva'ݑi-%!thXI0UΌDIiL.tU#EJ2Ȩ>5A5$Dw'uRӧKN_V\ο_pQl6cdr2\y7eaۛ-0nԕ3Ziȥ9Ux"6mFFe&&(Dǧe+Rb)?NV˧/}(PnE K$.?̶Db.*L"GD̨.;LR$S)][uVTQ(Q֤܊cj2-R[%>͠k)0`J\\%(2;*R~#PaP-FDPUUnUե(*>URU-ʧ0 %)SGJSd~gXUͪ^f>QխYbQnwmؾ[w֪կZf,o[Shb<=˸ʋ?G\q"r^^O)׿.j_upq]_{ulZ{&ls}) Wr3g$֤'yg1~حa喖1!ni6Gl ).C"4'-W+ńiRҊ}jcFpW+ mhz?G?;MWĿ򈿟.W 2[U~khkb,6Kj"+V(?!1Q4C=& L힞bӴǸʁl݌Z Uea<ؽq[=zUQj&V*N,Qiz{yUʫ\[zjU=?TtqۛAZ[Toj3&ffE|?TPE)Qx9i /1K$~'Q0)U>D=j՚lC4[.Z^~-#KF_5-Œ6mʐ)sQͰ&D"f 5[dd?yLdJ]22>WR\F&pI$ {2c˧Kƌ\DehTQ\zT>$JƦ1j(UU61QqKPC[H"&raɖ-[/Ch!RnIJYj{~U-TS#LjRCT؛l?mv-~߮c6{]n 68HO'ڋm{,Qۢ}ZvKPu8Qtt(3UytQImJ2+'LL}.K~ TfoB%5VWإ$ r9HI1jcj[ ˘9:;AWBlIdLhxɥ-Q\ĔfQH"L%ńxcJE!D.3nU(_T%$ʌf,3nCi2RA R~*ʄ#M\!.M*ۭȰ"UGͨ꙱'>$qkǸU*;U4r%Lr[]Lh֛gLU7jMM1^5TjEa(lI!P&lPWoo|YLN*jw?}TKry\%/Kmٮ-%4ٲlZ9ӌk~:KJ.eȥ}z]uJl(ǘGN{̥l;6[XŸ5_ʎ\ 1ŨbQ~V>%CT7**؈[JnLF*%UFUhmv%mT(3rJ쪢L ʭ0,GƧkyTM(&](g,lccgUuڬeh[ Ue5C%S-Y15t[glԮ-=Z/g'Ŧ6kH®Cߥ.D[TEa'R]rg"QEBS%iMb\CF7)P}Q$D* MP:nL$Eĭ)FI|Ann3$>)B+JhfKR,.BKcU(f$nqΙŮVz::[w]ݵwuWu>mzWjk-ݥkcjd?~шR^Zc?q𢾻5NXԔ_|!N^>ğˋɋӇ+iu{}&w[vzquu}WfuW{2IO$WK,soW\6e"["qH$ćشێ]閡˜#+uICtۦ=ko4oiƇ˯\N7_pS3]וC(f'^,f|YlCb^XV^UI<ƭNI43чݷ M.bLi].sXA!5N^lRo5RZ/Ldټ?X&UCuu`'ovj]TlryQeo\E{d܎'?nǸUo\KwFZ{XESyxHS#!p]ԋqV1ð2>UxTr#Eч[FO-K˘9}x)a*i6E~}faehZ%n]$3sJ}2;d3jFժjKMkޑRj 5#f&&.f(0jh!{P=fKԖv^n=jVeSEk[/_/qnacK,1zDB7gMvI>2nrf2{Є6Xl./ۻ5a-y7_bW_svar~cr*Nf)tXf_C>X9>V~zyu.ssʄWɰ#܎xpٽ>vKJ9}䬅1QoǗ3ӵ*XOjNUmNQU1GfL)SU25$K/g$ O{tKJ 5j|9tѥʴ C*an3Q%^VR,o~R5{&ޮّ^5]ʩ,]vt?w9nYOUsXxz?\lV,O{;v'v?|3zjZۻ]<~>ǏcO#C~q]g%֓UȨG伋O3IIwD[{HIQEQ94!-lU2n (REEPPuU~L/U'F[ G"a["%ԘʚQeQiK-eM/l})}r&ȼ3^.bsQXu 8cq820eƠS·kSku95cvr8b^Gu,΃9,vEsN-̪^*9ˡj_őDmky9NS]8^}W挥*(r|;,,2X'ݧx)ի$UЉ向ѕ*N2LNU^"Venvqu%)ETJRTAR c2 JE QA$i(-A|IO%K"n㥼  RNy VCUvk3U"([JU*JJ*/Q$U)}KI)R0RayijjFƗ.%R9$^ZaiƷ*ڌU봊[-U^"QI¸cbUIWqۤ4!1.>ZWgWq{k8Ƿr+PRNV!%4sT5֥l/%GyO+VMS.݊!S҄}xiX S*F*ʈ%SRX^&%UTCGQFY-GH !%BESVJOUTUC[Mjݥub:*JJURqU\W%vh]zեq鮷Gv;OjV[XåjˡKq[^Ko]o_\˯ۥ+Un]<ˣ<>Ŏo?zNٓ;suRG:+ٮgvvcm<'a3瘸dze~nv]K&Yl!OtnrxRIs:N$Mħ!%$9;g] %3m3ҍgL:5oK3^ٸwxiV;fhό_MQ&_ [Sa"4Ƿmq|+[PqY~z<||R_fս T.;ehm.Z]utɪeԴuޔOEk՛ԵjV٬:h'S$nEFmSdP\n[ Vۖa[.Ӿt͸ed2~׿V5|)KBs20%GZ> cӱKyp}8~s_f9LreL0]y0^-9:SȡUn%L܆jd3Ѣ0%HbddKD-HR*)Hܒ">Uqbq˸%r#Cǧ0o]-cby訦hJUR,5RhZ␣Z5~1/(9uxsqe9 .s|q[/rL?DH3r懳TO/)3sk?-No0e|NY:,õ(9/zdb9GGת>1̑:sƷsNܪ$%U)WN_n=յ8Za1qD95˩ԕguUI3iIc[ؕxYhHT+TFeLV+ Ir$]%ѥUOi*9 U**3^z#J-)eo"5I+S*S*ITܪJT%)K$RIKj[-S3^ք*ߊTT6VoBKTR*x)[QU3f4V 7fqb(ƭ]ETQ*jt͈[|㖑T./Ůfx5W:Y*N$ƊDeblTڌUfK_qTccEuylm]m ZouTtLw_fc̑dZ"cڷд}5NDmg2^z mJ8-qKgtK~*PغdKanR^rM06a KTSLJ12nI,/q˸Ufd8&taXc M'ub )v*Dfܚ`)/g|JU%xȸet%]ӾOQʷ\U+N )݌>EX(3BCRTTUD[4.*%RTYTY/eUOrR\U2,/W2EpFՌ.Z-t틣eywĮu%Ց~+Y:ZóRl>mw*Wy.;vrX<0 c_{#|yݲ?W.~%5Uw>ʯbӼoLrNx/ϥ9']n'-yd1+9Ӝa1&ZsE:3^fjmF(A3ѕf۾%ʿag.<|{rW*֌n5 +?:,?;βR^,K1Zr(}Eͤ۷a1J˜ cڧV#nnji1TJfXm.Ek15k-RLՃzSjaW=؞T28l.ۗ\*_V_œ7VG]>Xh&p"#dH1ΑHsI*ahOLĐNL5:3^Vhcf24`PfTSn?O/.zE/h_?UC[ :~P/g|;j2j"P&noЪt ]ffL~Y0em[m:D01f,,WA9|[klu]FfHq۱rcŨ0PQGuv+Uqu|:z89a9/˧sӛޜ#.Rv=8\J'12Q\fħ]=fKrxs]8eB5cN=d0}K}yLWKaF";ݙ#%w6{m 2eZb^JJэhvj铎&JIY/nmYbˣ_j%"(xx[r{z|~wǶ^isK~<6!vUd ;ёzM%[zՈ-RQkQvbFZu!r+p%4["KGЍ#lzRQQl?X*&?j!XUܺGSEmG̽Gu^u(ܷ/{(/wyݹ}q\|f>Srs_>]#noW>~ͿY>{O:mnʫIv$'A#v<Ơ1BJ"hFFxU֬/閸GVۉ4,Yi]]i]Ffn[np xC^}?hOu,E?Y~U~Z?+_ҬbtX VJP["(B-XUEB۝vZ厫X#a4ӣN{ gє*>1C;/~!K:ɿHas_W}xtiThEfYZ',Q]qj -(oDVpR#E$KHh_"DBbWuY)Z"KV֎j__^JEAjTL7[-eƮ32^ H<|IXy/GB&U&JV^=ɰfo[dJXK&h ; Q;v=Bl R=n0nJG"Q x+)Zrm;!v&,|I"v-Z²#Ȳf#j*BDQeV(hUҔiC$Žȵ=g;*=jjպima&rQm\=;|c}9~v{ǎ=1afnj]҇aBp;_7hkǗ>yU.q%/qsWǽ|WߌŒ͎*q#|,s|Grţ=CmTym8: qVDVcsv<6 ^~UsKt-0\v%QbUNtrwҺ*zbպW IJJtH($B0CU$Qɲ.B"DBXB(V< !E)-"~/T)oYULEDd:V"Q$!(.M͉-JW'қxTQVeiopo5K[Mash^*ujTч!ӣJ*h].)3czk|qSG=8j7 ..nB/5n7UEy{12 q0,ߘi~gFYsx9c_)ͮOM=%2ȧ*=&î%ص!u.;;*[ K5(mu<SSj&!BQ%&#tRXv{;VS&RhBlGn]Rv=յR#%NhBb=vJb&TEt=.%,nDHf4q[*v)EOZzkö.Y]R^Z>vUDU*Y?DUUu)RRbk+v4է~ˮ^jV]N$2^1J$ ]UԨ;zK.RnH?\dOc^F9J|0NQ(>K| er߹u\ܯ:ur{uꚺN]W}^/?=Q/yu].>[>/~ŋq{*#gv:Wߟ%ϧcη=6u~uRC͸x kGŗZw~5eWƬTn+ k04ncݻ3˶jY쭻vYi&OnEmYOK4fp_[ K /Ua1ǡ3x; pۘs? c9rPB!vPEP*Ayۨ(ˡٮ]lUx+ըfK׬^}*?$[Ň+*Usksab*ƗjUҤmƟUt$D>OUEʟ%.Yo#**nGy!%dAQGF?tYҤZo*YDܲo+H|VTK#/Us!8$WڵD !ps (wd^L;5YYHKIFz$6 H$+Uyk[֗ݵ GǶGFGUV5uTfƱuUx 7ohFE]݇73_ÆLed=NjuWliUhpm(Uft K찔"-oEDė*"(PXoҝG"Q(lJEJ)W( JOYUM3J]-ފt)EC5Qk+D(tUQ۪G47HLy4:=BE)ojT[TŪ־T"P]N~ZUY]SoZrirT.GR|fŽ7Ӯ6?̧ W18= 7sCeu{/pq퇡bX.^vGaW5!]/۬dJ(!P8!9lK*[vqIrdXȚ%*[[ n[M( 2HL<_*xb㎷HXI+턢-VQ~hǟ)SB5iQQTlltTV5Zz HѭX6TMJ>E{ltum9-M{;jFZ(D)(E7T*JnnUJTDCRSU*JSWU(]\Nu-Wi}UGurqxݬTlj_#޶ᛟnNv>~(v#딟r2߽eNo} sUko\]^qׇrNj/owUnȲk֩[ukO}#^뇴u5]\Gv:S|QSzoַd,*Wqk;i&}{o4ņX:-ki&*W6U뿮)M/`[k?7wmf[ٖﰴ*>(`88f-(YrT~(?60ѵr)64[kK=zipXcK ATQVE*LŋN~joCKuitQ&/vSC֔Ǵ`wtQH_!~*W< Z}P[dMT"Z"H#q':O?NG] NoiJJWQ>Ԫ)<;?%rZCj*}Q֣no)-++!D_PxIDzdba22c/&;u^UoYNn&V/eG[LԽ)ii!cΰTV:(eZp)rJQͨVŨ6E[󹖊۬O?t{v}pxkN$Qe'OגH2ĶA1#lRX>hG׭Y {{gŪR,6ǮbWyRۮǎ*o-/K7Y[] ?"(?Ip(?0.r10f3g/uo%(]avuss';WGۺe[TrǎK3u>if8>\eRg[[P͇/|qOb7ڔ槬/6%G/.+BH<*/ė]oVwJQmՇ*ozM$j]x$DKڣ>~c$dPux(T=(J$jU[*oHTf}eY[MV"MId%k"~xI&=7vdGM^rL;^#MFnlr˰4Y?bGYUZ唷⦰6VB֚;*o+)"ⱣHVzx+~(K]cZvTyT(o;HTHXvd[v+TIZWf)c+],Z"&:\%94Kjdhq.Qn [U-+UJSQ>{V=t~5/6dJ\d-nueO|8|<cٳ3#Ǥ u|>w1IFp1f=Fؘix)ٖ\ZfNj7KnE#jŒH.P^*ŷuӿ vu[ﰴ?eQ(a8^c8K+? fwOO& 'MVKCv Mltul4.ވ*([3o]GTy0kޏrYP]˸qr>+O # U·/4k[/G=MWYQ;gJ|R?纅Ce}VHH\ʪ7}vu|+%Ofql}&OՕ^?/Y*h*n3nfd%\ ueUGڶ>S/>n<0ӎ]ۛ>/Kvd=mWVی[jZM16uSɺuQ̧[p?Q|z x0C2Q! |:ǎl9'אFn3(Զ1Qy9~:ƌOv~lu3Tf>Tp̠BF: Qnsҭ"5ɑX"\]ى۴[aMt+ʭ"eS+\&l!smU Q%!-*֨%ւ]/A'd !-RJRQ^K|kuH"f}RKUUUerHa%nn#Qdܺ%^V$Z:#^jguqQ$^_KqG}LDz)֭rrncì*-o E=~Dǃ'ѽ x9h-On՞RժkUb&xz3OQގaTަ2]ǯ<¨w/xy/ۃ˟Z/|P^.~a>C]z\\n;aqկzlux~1c+Υm*k$u>~Afiz?G빬[CWr*Őˇkǡ<9v}cFw=y|df>zypeq]ͬ|5{+s$n)y&Ѯ0b/¶|s:y>]`mΆdޟjmWRE,Ş] ”˟.-QovYg߱o4O(k/*(?9C3C|o/EPyy;R^p|r/e& m &4VZY_VEyiNé*:R8Qὔ[&LŖz>!lm6>xĮݞ^'o^<#־.ڕH< OYu=</UTrxp$DrEǕIgK8-%*mN.Ͼx;E5JU|+bUmݗ-~zHTKڑe}II-ɸ$S&cK0kӫXYYY̥WV+Q^)XVrIve͎U~ZuhUߖTIB$f[k!f*f*uf X*j6붾KbI4jm"#ODV%֡`qH\3^ص^v1uMuȥq|;\vR]pѱZ/s9^mlrɪv;XzhDU8na&7m۷e4VDBn_6~|Ƹ=|0WC>?4v%U9:lf_=8o+O?rpM~˓pM~|f5ɴRcc_OVvY޲qec/|9oL6n><>]Jb&vJ7sEh2fuQ5-q3mCdsYU.rmVVkH)/)Cr,Nۡ[F`G<"vu[Z=KwXK1* g ˃aic8(߆CxQA ڭ)PP&أwB[N=孪waQU8K:OWsU518 MwfܦZǑd*SrngS§Onj?d%nD3-!N99V-VP/oUE̍uԚ+n0|,s&uUn303stZkkm\uv6?~ӑ5^ޓO:3V9o;*{*\43O?My<%!nвei†c.ݾTqBG1qҬo sTks /hDeۮQdV2tݱAoMKoDY-yd)S 6:*J"1hĭp2^%KfmGl-F]B[Z)UN%-^N!XbʮĭJrZRr*VԨV%#%JŮ[W>]t<;yqϵ?$f?Uۘ'ݏSm/)jR>?xk/oҊ|/DȪvyO˅ґk %~EV=Uq[ReU{#kFB$nqzH2EݲHu YqjQS=uH+4+#qVTQD|ҾT%^._%n HƷa܆ LL&YLVFMF6s\z],Q##3/%/-"+-/JyҊ-G ngnˮ*Iei K) I*mv˪Kė,YŎD-%ze)֗ mueiuRU6RjU[F5m&tۣ#uhj3fTR]WTbdݲ\Y/s!Qظur<\A-=+tK1~LmV=Ǭ|N #Y?%eLTUJU17ocHy`臜䩏1K+*dmYΞȻm5 Q{Ι\PmehiLۙ6ǻMVvjf}dgZ[MH0hZU*uT xqR*!mAIdӕZ?{plW]1Wy!O;D|.FPC8Huy|7 ';G=fA?uz%|f2=g,_vJI33%bYbmkK־̕2!_r}e{+7/\7qQo.J]7I'oގ_UamnYdٗnj5sGbFjE^2G+Ģˣu]}a9()˟5r 3="tX܌#T3R=TQOUa*cPn eUkDZj,ɨu<:&V5*tijݥxS0dZRA{y8qάZf9ZzVjII$Etk 0u-Ċģ3ekGhdE4ZC`oJ%k'hJk. yȒ;{;W~[l+ais Mz&_GثghZdۇn{;/7:nn."hn9^3Wգ8_O]N?>z糯<n{1ULgL/=~,͹{zV殬-!|9Ulm⾽F]Z%j-eƪGbxYLrdY1cj1VkrOc,( %-Zϖc[ߕ? da]7T?dXsHo ߳9~)޶}?qr?l??[eQS+XFԢR֒AMre1!lWRJ^;fcڝ/b|>]qZ}egJ跏4~w򨎖Oh/^~PVUH\8. ߨT~işW;Gǟ0~jY#{KBKlN)g?Gz%~~%b<%\Zp{[Z=oh=zڣ>5W{KڗFoTG=և=z:clj4$ڛz$`u{ǘѱA%lBe$~YfX:aT㱈VrabF,nZ3Zꇆeѡ::R-PxZ(KBz8,oA$6g3tV%1cM8[+c-پ\Q,bn/Ro69޶ߝΧGjmג%mgݵǤy6:fAo=Ϋ[_~hؔs5ޒ3zs9G~kNe:Yu:NY;9vRYz\s{- G:־;TmcZ$6-3/{ﳹ۶a>?m9VY{3g`+fߘcŽ>+8Ȱm?,,걻[1R-V38~9%ZZjϱ 㱢zkD$-xz aiEG1"-UVVF.Ű~D|=?䮿\zorW׫[ϼr:oy^}}G.7,oqpљX53:{^ky6/Y\fuZ}׽:9S$狾uMh;Vu1tɘ5њ PYsX2nsG.93xh?rP32a7J㰽m?㰱<Oð!D1i椋o ְ-|+x-f!b"5g콛,&qx쓲6mcFWxO>d}NE+:sNo_s-$ɇNjnW:\dy=fti[Zzx(!MhКCphp]uңfL;L϶=F,ŨG}G+;oWWуN.܄("xdo:~PŗNӟ=:?FqFcuioFhkVi{Gtid;3YE,;W6Xecu`<6 [aPUzw%іx"C)Kc0VP?CwbZVozCj/o1 cX1ZPoHͲj[QKǪuuo,+~tȝٲ|\.i=::~ :f\njo~_o[k/cqͧ,Yb:\{Ovٜs\1s}<2G_ۚ/xsvVRY>NgG]5V)WulΥfwMhI͘ѲdI856w>d2_oW׋ͥcᰏ/ۣw;dAt9ޖb:՜t"%ÌB]Cqk2uz.f$gmZsj֭bH{2t,sz$R-E?81JVKNxUM4Ԅ#R*~x,DuIVKJg.?UnoOT4!%iSָ7BNi5ΨD&gU1FmQ*fmdIA08EYm]mq ^1bho&m.j3k]Gs^yy6ֺ^bcۺ4a-Y2L2q/?,o/|a_ٌћK_BdRnmQJͭ7ou|so~Imm>ːZj24V-?\J%YcÒJhx42"ҵ$6I֒7c$hlֲe-][k[֡A}ħ#W}+k9+,gV/no_⟸7;;-w:_mq{_<߶gY23!"K"q0u5ҥM %cb}Yagݵ^=WGIkJeeޟjZb2fy b-c;}=Y.7Z}t( S"Xzi;Z1wgwC'+V2BIxˊXJ5R&DRԩG}PkԣJ[A+?42Xz[b!(Hz!⭈.޲$ۣQrd֮haI$=dR3~ ]#!a1E1{b{d{o#oY4~YM ?-[##[cx۩GðloƭwmujlxqYs3Lzeլėص/Vzu_.~=w7ۇ㑑͇*K1~.sY>ގǒw۫~osxVpR !eXcIf̘u7xO]f̘aeR6[=NYB:(}\ފ*j1z{ i⭔D 8֘YU uTcV ay;껎0âuFjyz[cöX/<,{HC7ǹe"ñzl83g,vl8d}9'f4홹e-G ^5ƚQC[ZUj+5[2:GQ OJoK3f>BR*K/@ɒ,G|'MtU捣̪IF ZQ֪ SBʧZ[P)D`j[D-ۨ(f"Pn{*⑭Pڗiu{t&n=YQQ6#-e.Ɣ%rjKՈ[EJFPV1 n[-)-(܊PU$Ҫ4UR5).n嶺tK؎ݪ*(Uh}Tq,eU륫ޮCjjdɡ}S"]]jjueVZp;U~V߿Euo/Ŷ/Ws8ܪ'3*7Bfۚ+X(ry-sUDq{.lzz;~:k>kb/ǵgZɞ[Em:m0*{6P#>[*1*9]~ՈZ(ڭRU:QD-ժTyZUVeYպMv,KSڭ޻ڭj{-QHRzoTߖjcFƯOZdd|+*d D*Zj5X8Zw*,eY}]fTVokWnrաZuK7vRn9e$S۾܎޶/G{,WJCF"d$ݑdSRVL"*tW#D$V#QjTrKUjU*]7$ҳ"-(𩗪xnf{/Gc`cb)hǣ%Υ^t,ʊ,Z5Wy,ݎE-mfaZTǷ:^/V7>|[~{/jjq8!Z~7h0?f1lsyke{{ff6*.eۻݼRfu|Oכ\[4&ˌ(^D"[!Rc.J-m)EE<eE[%':5U-qK\G KofXTWj2\*BJ-.A[/RU#jBQ:5SO#ZjbLU+1~ՋRVUvX%%T! .ԬZSR4ZD[w2CEڣK_C^jTZʌ?t֥Jګc8]ZVG-VUUU-UuTJe#-VK62'٬ /.˒-rKԖq$'TD&9XHHɕ3ٲ%r2I6x"%nS**ʭ㖶+Ye[f6mN(1SQ7Q-%S`d"T:БMU}xex\!6B; 3;~mW R~5ӌ,JL4fEHQMBvJq\u1n;d$jKn)f*QQe;5}Z#eTK[X^l2l%a힥UI_ֶWFf^fsreqf}X;'m]m-޷AǨvևD:~3,4-㱎Q,tr2n%,fUyq46m̨br[)L:}VGUo.f"KqUI:1$nS,B̶G>CIDcI`Z!ţڧPjJUK<"C$*4 %T%Q>$#:6j&%nCErBft**ox*Ub>Ǿ673ov̦݇rr8)je}akw*uٗ0؛b͸\[-.[Vevbf !R1TrmFH$*NYEJ_%QW3j{eRٓ/G_v014?iw֮Wf߸Lt5w]ϫ_EשXU;;&ae-2YSKf&3]\1TĴlEZ2viB"l9>%&$iP#m^3g.UiL]mULS4ʇOQb墉waG_(ӧ#WOviy,6KO1~QЪYb–aYfy,6Emf,_lʇ<6OWfYcKJ}+EȸWS (;VRiZ/ecc,;VpeQKnoWYZ0(ou}y}9RGqh upq$*w"!%qFvz$D\N-UZ;uEw}؇R%r%[.d/=yϼ'l])=FEd#ll ˎ]i>]v޷e!vrZRj9VݲPkeޓ3/]!j!vV9e|-\2H02B3qI_Svr%[I63>!G(BSLAJT*nRҌP3eflJ#2\%QV -#!0X[F ,D%nE"SVG si^2nKSOS\nUd1FVMzYԩZjMTf6*U*R?UI[SuKUa( [*FOUx,,?mًr˥Z*Vʟ~{U{ZIJkelVKvjm,+cö}RՕce}w{>2SǦjՖ/^lw3=KNkU-؝KV-XkUQ˴O}Yn=32r[KNjDcVJؕPfܚcTu1fdp[FDDjAMXR>(RۜzT%"VEQ ʇI(^Uǭa]nM|JB*-Rb|)xTTSj6R#BvnbPnUJnm-HGƌOӴڥM%CSbP]Gi˗~Q^H1>u)~aݡ NZlj_ƣkZoR\kwJjw;ou]K?|/^~r%%8=.\\nӷ0[8\TsiqޜfoX2NuIiĎ}ȖSFƭʎ71;0jq "q*"v1:Uem.3jqQco_"L? C%vfXQ>2ZUTML:"n0E i]lZrCvdt܊]4c[<fLv֎UŌ[lj[J ]$5;*!#Qʢ"jJД)]\VTUJJEQvTi($n j1Dmf&tU5rJUZRưkMcIɥ۔nzt 5X/vM[N1NݺըnU}2Wz~]^t%{j-A:pɞlŕn=.{|Y]n{Si\TSl ٓRce01ǚU/eoWʾ~,rdS3r{LJ$)Ɍ$ooQ)F+$;vl>DFƦ; ##(]m13)=*gф)&a2FvTydƗEʗO0t16si{,)( bk6cym6˟6o<6KP[-i3n3Xj+r˙wFcfizaTvUH}`ZlTIZdgU[8PYl"S-G+Hy^Sfe;U˧lYjUV!W\+mWɛλ=Q$K61H%#JRʑBjv_2>Rp6*Mۺl22~mZy옶5HdlJ6Z/}i\Q]镓^Km7Bi\{Un26zwk:^[H }}U jU^nV26KeWC¸%ֱ_f|rmEʶlˣܪPTz)Y1ze-rl-qɺRd:Pt|*jTQ5;*DwPf4G)R&76n"*lUfխTD*򘊺"*qKu("U bTQʭ0U*)JMPn$$DOU*nCTQ75V6姉fbƭRd(OdˇJfRUnCy*JUeY%PLYmlGrHS}198@weƷPdk5^ #1dڭF=fGZ̸d'n)i9KMmLr늨sTSZZTg`K-V//V/~'(/9n7ߚ7Znx9el_0X.\vk/0֗ޚ\.l?\_>(u/oJ"QEf ) #M1eJEJpz8!Vð$nUQb{)9VI1JĭKK>^Vygh" Zn,D|*[Xj%*UiEcP []UnEHRqHT[&2VJŌjպ*RFHgJ]^"ХۭJK)E8TrG U%h*]ޥ]KQn)QZj2ײյ^nݕ?8eG>Nu[t\nͱڗՕü?eo}q~{\6~/<]^6>P c&gܺfrHc3g19V\iwo{S+s$ڷˎx2^.Dor1 w<_6__7ڷ;K|{,qXorۊ7˛ۉ+xi,b*Jg-׬ZT_U?oUV.-Ul:~JD򛟮-;9ɖ$'9~Yʛj?eSK-T]U+HvrPId~<㖑:2IIFv J][x骥jWie[K|Tj(Kuգjrj够Iwϝluԣ2nժQSdd?)O-V2ɑa#'98n ![Ҫ)Uڧ%HDFɍxlPURhut_"GpID292ILtKBUBCe(`q;JK% Eܪ} eq BI*JTQ^vfTQMԢTSUTK/zjUVZ/Un6QJ{ʵTa*KZjᖑQQ姫uWfyJd$2{ _9NE/fp"3G/㜳=kQWd㜏eQ]5Zu92X˷}Z%4')jĜ)I-!!t:#-7MB|T=՝rkIq4-!&%֒)e"!$dD"xn_ E)2/[ WURPtL0Zx))(HujB+җA6,ǧVR =3^jh4 %ZRfRJWUR]UԌ^*[Tu(eTVĉN:OYv-**!qxqXMmjv[-j<:upfǛVHz/\oKe]u.r2 uY4U"qeU!~JU~gUʧa6nAerZ*8dX2:bQ3qR19K/*jb|kPe-Q*T֪պ5)WU[/_*4iWIZ".ݺҥK&QV.3VREZVTR-Ѥ U[DcUU:խ*KW]KnTno򔖶T7v/UVmav]]yo׮o7۷'>qs? {>If̘3.Tnn֞Upxyd3&gO-OV*euv>dT9s=rSze[3O;RN$n3ħ1L/)Heښze>U1$ƠltfrT!C3vrөv;n/OÌ[n3noO_^o2lcǏZ˷?MC7OLlsXeaYay)eqk9, R>aYЇ^PKr|:jy$èD۔[g/˷ۖpa"Č/}FKSd[!K2ёDP2T{iRE02UxEl_4Hy`HI_TBԔx -atFFV%RfKyx(F| ڧHTK)9-TdVVQQz=iKSp]4%-b.UR[K./hCTQ^P^:jLTTiݪh~rx9:s_Μr[R'jroTW朧'gi-zj񴟲Uk:ǣ8yF=ZY֣t$yǣ1C/O5 ]39c[VT*TduU]RmXT/kZكaתNp^V/is8+;ɤl$r&-]dhD&} ˆmREȴPSDPg%q 誉HHu*"TSq+ڷX|IahfBy㥼^EI)/KJ2VD)URaP>xn(h%G`X&jCŭBTNYEt]*tu%SڔU-Hr Umq,r8꘎L au6h3nPۗK'f>HTd ffYjαk{7zYuWsۺ<|gۺY_ǯwK/_^]7eb"p8a>41j8yvZxyn2A$AIs昲*{(EE-q%:Ayavqb#-o~ꖸU)c|:n %C{J3dr(E">uI%ʌ1Jd̳[r;MY8B ME( &n-rQH)֪ĭ"zMJ\q4C)DzДFRTQUU^JNU[CժPZU單jJJ<})UmjoeKSi8[?|(U,ޞ^þ2y VWV-?j[m-kjYllgXOץ*5fضV1c{/R{s=6r)'H$;3>Cn=Rf[Wf: ARW0!j$1*iBڗ`0N2>e%Qehxv%?y?hw/+khƿKN,ۡ尼,oaOwCڷay):jespƢ9t<} RP/J;\OYU?l±鰎:G%n+^"e?CVvkVd迲.?6Uu˅˕lv=١VO/Ȏ#'d9a>/QKy[-9OOIN!Ƿsyc%G&IAii#0lKFLq;F樦QnJ.9,tQOgrdg=21l-| [jHL<"[Vn1^5L2DF&F [nDJy 喨CƗ2qDҎ %KB{aeTB{)%G&Ӹ Eɑ1ߕMb!/3"^oo?9^KTCO6)5K-1JԥQ09ZUrTbT"jtQ:UKw_TiS*ڷ8K^{Q햱_ucq>Xfdyk>9^2/Qoĉj9mpig:YlU9Hת^Um-ݖC5mjF^V5S3\x{ivᒏswKrV9VŮ|Lu̸c~)騴lN95|m-q-p;s&5+W3éuU۔xx(k$N؇CIrS* 4)c2BXm)uTELea4QcP)l"j _xQ0Tokm b-IgUM K(/DdMrj9zZ# 4b9S)+RR3nnJ9KՒUJ(ė]ftrP`T*TCQ%X?PYn٩/דvZng˦ /A%3,3~}$6aWJuiےw.>?g܆z`N>F[]nH8 z~|~0$#8Vc6⹓x0W۱4E8B"$1u3ՙ3C)UL/5L5it -վOf|:l/[_mBT^w6P+sX7 M_:,/s,/O,?eeyYs匵|q8ˡY:4vc|:,uzdz=|T3bJy9\?VSge3V;5\qq%o.דZٳi>ZgXX)yޮݞy,NyGxr[>]mr,6p|;I>3 ]+VUjU܎%@VÑpX>IàHLɉ8LN2Q!9ObSUvYKNڟZ(˗Ld';ٲeb$^t/ F2#c9$Ɵ$F 9D1%f(3$v)KyՄxVo!8i8UN-9GLʭJ>AKHKU8&BO1&Kf8^BȘBKķQKbRTTI2Q^[EQ%%^TQ˭'ېʭ8^zrV1qܪt[idC#tTeZŗ %fK3k%,9b3*DQ%:9::,kpX`uWXR'uZD%c.h_Kgƌ_.يK3[On.鬳_Rղ3Y|jFq]۴rjiq;tU1=VǣTdHMkMUY\֜3Iz"GIb'ȩ]ķ%ɸi9n-=גSF#Bm|6QJ&uI(Tɍ%$ܪBħ*!nCPnU91fɴeƷb.HYz:R%UVA2U$)H$:cP#b KXVz(]^VrKTt쪜sRU O3g[LL,oY9quI)e4(iݪUu={q0cm.y\RVy뇗C۴Fr;x\̕0lM_>~of??)_}t{Ooev1G//ͦ(g$,ҽ-wf|W`{fKJ3;Itqfc~c>F ?->^fX&2fNزËߝrD^:0Xo3&n;D{Th#.|shlr$stiƷx4#j|+BP%5$ґCQNqd%G9 ItRTdF*NE&ڧ*phv"[i&:%9Uk"eZ2 -C2TkVw԰&Yn.0T9}eQ!(*rʧm]ݺtKJbںTj/);ʼnZ)Ku*2GI7K*rtےŇ۔om5RcW~o{3Um:Eڟ]ר_a)^/G|I,.?Ϲ0ߧ9~ݱ$XL*>|KשRr5ΕI6!y%eq8DTq{{*ŒgőmAG{ǘqCT(Qڑ3ȘV-xK|*Oߎ/f=ЌhI[yL-(`qqsN)a?sXqX8,qv[k;G9ǘeqXnheOo<)JqNUyP?:Z`ܖbsycשYZzq-0+sH|0j'VWojɉ=I|:?~p<<>Xt[]UVrlȑ`TũoVdIZHNr0n6|)TN&nI&dˉ![ⱓRΉT{*ߺҴ>)T r)-$[FvrDd| L;LC-ɑ!n %Ct| 'D6*tTjƷ0TI|ğUQTcUj5 VEnElD6fdQ*ʣ*nB6(.&D|iT3҄”}*h_*ħ)&:VPTEUՆ*ʢK‘bTGU(Q%J5۷"}I$BPAJٌ[G/x$aj.5%KF"%[F9|)[cP0_4UZ]*5"/)ǩ#-/k veCE/n3Uvxcw2m ǭAIF=JqUOTu$RZG_R)s$oKVejJ]CE˨RO]fjTnSi5z)#Uefr$F_ׄuK$Q&(Ìv 5C$TˌR[-RJ<tyģʧ.CWC㖔(QĭSҾ%ʧ FS]!*PRfx?1*n ѭCƷCM|Rl)D:5em- sԥH*_Vqa!֞WZ2]es(˫}N.ʌ_5O-KS`uIe2U{xy}Z˷Q,#orsϝ_7W>~g;ol6?}/M3˟1"EE5cCMɖmJXCTоTU9cԘ&QCyB*:)hv;,kP̨[E EQ)|jCBzha͸e%th%YC[vhθMT R)TU(b(BBQ,͔p.]JfrkզJҔOɠZNRqvunUK9/յtbX>8^ڗu7XۧzkSk멾U}[jهZlM]c[moו~y&g~?9'_Zeg..U>eVћw>r~g1fk٘&f2>j^>yY#&s˱,IӲ%j3fV_ݦ\E$?ώ^>.r4Ř2G8 c/!پSAJnFylu]f3Lwմ F--'c"o6bm64?Ҍ@(ƣGڟ?_l_#k`qG| ʿ+Xr|Yc-Cy,ʷEybǢ7ߪR9zGe5 7 GQKuYEXMuoX?<~08Ku~Юeq]212nܪ_QoF]WSoUZURC-\lvr5 eqK%'W2r|U[YjUWo'Kr;,&/ddWe'lHN1$Ij=ʣRUڭCW-u| ]մҪUWlav,K#Y*ė҈0n b)$"C$䤔% nHBHt*z4C(uk(UD<"G$/UlTQm(VZRT(UHH22"#'B$r$l KbydIs0$' D"qKoq [k*KҌ[AQ"RTTQZjUTTh]*TTy[B$nݪUOJjU[/UnTRK_|vycqKIdYecƼHd$*T5T9ZbYŇCZN/V漜c4JwiN5?-ՕuU_uNzgünQ9,3-Y9H'#mɬ ˧r^UrV$kM۸ fk<[_V l5CBr!"̈nSX%M[EI覤wz[k͵T7^ZzUˏ뭗Zտ!s{9jgVr~w\[_ gl_zˏ˺X.~gmOsqciNˌ92f䘗=M498/{qs^9Bˌ)[Z= rhMFZjPr"-qHʧTEu(rK܂P*D| "E%XT2-֒|J M5CS%tWt{OE+vvPiM*ZUEZ*Ũ*j]RM E֬RUtK)Vn1J{J.UmCURuYVU/Vx{kZ>xugNmqY몷ޮZ{ncc\j5;?Vi?f~qR'?/d/giz5/30c}؎3>YiqU6]8,s켢cf}șJby%ImqH̤DWUőȈm"Hv18Bq:N/%[ʌ3DN)"G{t=զR`hV%֋2K/Z/HdX2ʙ'9f䘣OJZ38"׸3: Q}: C:59r/}x?˲_\ۛpkθyxvn=4&/.ұfc_'ۉ:*J3ʙ]x:ܺQ6GGVV.Ӗ몍=nWɱJUudmKCefR%Un)Ԙ3)c(F3CӉTRx4Jvi5F7-F3SUG"t1FuT*Pd/>ReF8*B%8,hdJGdO5f<1&j%h2-QGƷ*MV9κ9KWSrYupm~onNjz.gZerxm/f;61wc~:/Kk1cWG"/*渥CRt똗 -[ℨQ-&qCsph)yYoqkŘ&KJE!Ʒ&A|XEVqKGf~b&dqxk6=Y㜳ޗїi]5v^Mxmq 2I0!IkgJH$ oo*CGbrcƧT.gC٪ !1d3DbWafL"4bFD2ك.51͌ќ693)aƣE|:r܎%COyEG)/?pa?)Nwa7uXˣ9pX9l,XcnA<αCa/ E%ahġ){y WUEylU?_?{ajSS.:N>^d#{1 qVZl^N0Kvr不E6j˒ Cƭ$]>I,<N֑Z8nqa=qˉ1#G^r$!%C1nxLTa(]Ք[:U%Uh&U]U y9Hx>TH<v$'[Rǭ:8#g$rCT_ Rm-!E$2DCkCuT0QTe6 y߼-ϗ[FN^U=l9f+tPqڭT準ժrۼ7n92fVRWR5Kqͨlmjcӵ_vJ*5*Zj2T=ڭƨrATHc2]8QԠSmCtZMIBDŽT m$Bb/U۰L̨xBH9>qo6O)ڭZPIH812H)SaΨ=[(V%5td)2AUVU)i ^Ѭ"nob|1NKhU* mƊ%'>ߎ6!Eۋ*SzKδFZofS·cퟡ~,WQe^6׶_?qa[pcN\L|uv\v,r[=6ǡ2Ƿz8lkd8%O8[^s8q~81$B#Qem|:z( eVٔnڗByDBfkce|Hs̛LV8%2.gt" ժT;Z]z=,;h]ڧX>]ʼR.UWi*wlݩ-[閨Ist$Lgٝ݉L)]AĐRL۸5!H&6҄.ZF _"eU[BTiT:II[ՄRnBՌ6n5¸M1"BYQDhU)zLUA|(_˦PBUI.F[ETt̸ԍj=2UF*VM)UTJR2۰yH̨H\Veo/mNst㒸e=I^ֿPۋYe9Oy˜ZR'_zwӇ)S3чuç9]neN{mݼۿiJƌ2##ͼwa=4۹74ۄ9el'NZt,rSTT)S ahq C$¹$DAd;!_(܊PVl?lZbZ[eP岓B)UqkUnI]jm)Pm5cܪ)Zb-*ի[E*\G-VRJчVSQUХJJZ*M #qBUI G>T ]QQWKwzB9NzDt;{|[f8ۇ˞WLy9)cMl2~X2Gv鱗33v,r-fH$9cq#ت|J;OgNfU99m$ˉh#mfL)sfN61ldZ` S>Lq.`v~~vec\G hܶal?_4,cY/,_⏖-_lr[llaٛev,mݦr,^.M={w۔ݖ`Kz,eVé1j8\8N֫YǃqKYaoVmR'*۩G]r[l=Qv$Ui呴K5OsA.Zz{,d%ꪓ}ʰY,6O&K&ƧL2ej˖]vdO edLazږ2]l\2AUDMg&*k[.kYcz/D }tӇw{8dI:.{;N;S&uIM`P˸Un$Td(ʥ%C\vULz]J !.KZE.#J]nLP5&n2C0!غh}Ph&OaXP&j[֨t0B!.3Q K4ȘwݪСe1Ð5\UDMwk젪nuX6tuM*JJi-$*Fɒbla!4[IKI*)e"D#ݪ Vc/v.\K*`Sͧ5ΩTq>ۡO'9|)[{=̪|;NY>T|sOaty+N;}eseyje8ǔ3<ČgGNv̤iTU]PfԲ9}ٜH2ox,?{޵f5K1@q,VbT>US߾y5Q*Gptہ7^aͮ^688]ꨈYvLE!O%%cO)ؙqɡ'ƭUAΤU|ʰ]övT.y*\jLOۇUXV™r٩dLLj FRY!~hE\&RTTlauAܶ[0ζ"$d'[dL|I%! "UrI[|JH24hFuV#)H\(KĮ\ۄR5I-R.TJMB6Ռl%nT*SEܢH1m:r*m|_P[J1) !.{Z4ZPdRØRʭ|2h*ɩJJO;D|I2sRT(*Ÿd}J\s<'UJ̩QmFl;Rb¶OD25-OS.=u8-qUP˘T=Vks5Vմ*gj,::pˉWq*/O9ed:fy(iʎiWrc;gW{]~zybSwՙiD&QaOYXXN*f&ct,"(CSNINn腖K!4T2郒]܆r˔2nRC(J(IE*ef\&OP>BTXBU%"[W|EQ:~R>U|HI21Ҙ]#%hմf*ћPSUU{ݨSQ]#T [+ݨ[38zU*똱EVnP&6d#q.9Y$H=%%&FSK-ʗ:g'PTvd-R8NI-穙9wfm:)vԷ9||ra-}Psĩst<898DO=19&"czS&ӌH'C鲣Tlӥ/-[[\dҭ|_22cJNJ`dSrKDqk6%(ߍ42q)zT˘Z|(lU.*_ {puLBZؔMV%aL镤qVHTNfc)=.*3ku܆&[ZwdtkVh6^UTSUP.UB2˗Vh*ruC*eQu򨚖T"ѥ{'G^΍>^K3?U|Ƿ1^K{~_ǟTǪcϹcǠVk}Qt5r>}>F:&YrOά=\ѹD&~Zis^.rĥN!Il9'#3vK%qۛŖJ[31;mGvH4[Dq*dni9ݢ(3M|E\TEz8.YqQӚңꃱŦ)2]&v. ۭ\V-Vm϶?eXYb埶/ ?e?,ʗ˗.abˇPʧ^,+%$v[(FQbbVUҪp9;wKZ&9$n$vi5եUKתC3ɮZHU/E C2>Tuؾ,͸dTILrʸdbdұ]bdH.}$$$>U$ q+ZuiUn2O+Urkj2$2eO-n+r[dKH|T(mnMFǭTQKŭPվX]ZG2 ǥġ*T:(J **elTK:-ώ/fnD6 qI4N)_Fƥ'DB$V$n0&~7ڥr/PSd2[`TȌVXBUD. WU&(˥V)UTHTQ$%IUVKڥJuP5Un˧DF%fO%L'3 VK&jSu0*Mۨe-UtZպvzz8*2g=f̓P8quT$#ۧZ'LnNt2zOƊӶKeFƧ͸ReЫuT2L:.yR9JȸTH\2:8ϭJN;9y%#-k2TD/NAZ'-MtJbSf41}FħD*"qЕ->1P>O=*bZn!n6*ʭ*"y-?%RS1jQ6R^$.hUm>jJ+jVR(3\J-ǢLT8UkWM*c.ug؉]Jnc'K.'͖%LĎ Jj^tTjv+]_cE~XZ^rۣ&zZ%Nَ#rn/|^nb-}z<>,Y.x?9]/.S.7|g~1㷿JSbZbfۧl;9d-c6[Ns0.S)ij1҇˼;G F6q>sPf\)Z>ǥ1%E #!`fLFu3{ ݘ)/C9^6A7v+a\  7Si-,_m?}׿7 ? S*K'bS,vY>mevYXkܖbR>YXmѽvíz=ƭVԪPVMUYM塎.ǗsdVHl֗(I[[W-$j!ygU-KfY,&F2Nr4mov2rNN Fɹe3$2&DREKE*1+mJi KB-N⧸EBL# !w$I۸Z姸EBJ./].U+˄r ۧ*奊a&VifBPUIg%(?eۓ\**!/zC$.84F1C:"!DMeHT.QDTBQ.GP %q a\ʭhJ)DU.SJ*ՆjU].UnRJVJ*/\*sR.uS*UҭV%%CHdKHd$2s'Rć'>Z܆`QǬijBjojTzsUW/z7ջydFF6\]|7[S$2._2%[KQUH(l,~H\2|v.*镑xYdd$fg{zg2}:G T[G'r 5RB[w63ڥƇnʭ4PbM$>H d*.ĭ\Q%ci6[rVj1BWfڧ&n͸̨Vn3 \tUД["Ը rIHUuRSRqYR]UUQ|UgJ2~Jf=kuΩ"r;:tU0I8JNZ6M{qYIFGmVUJ-Z*VU=Kw/j^K/Q_QǛuyYmy.|nSlR)[/oQe}s6K/٧˜ɻlο9HwqjiaeۜOy8݌m "[<60vlZ\jSj0ZC⌅P.Y.Zl[?!ɢ_Ň!B\*,E0ʧ n%4r2!.eI1BUiChnM-q݄R]^JHҥnZU4h ;rERQGwG'TRI0JQ.UZ-sձL/ZZwJ*.G׮,koꠎ/c*uV[wǣBJZ|ׯm?ǿ/_- M(]l?(RĿTNŶVeolb۬Zi|7 %H6m˭Wv)YzcmͲ,]oKRGiմ˞'ǚ2T:NKqqؕR.{GݖS"䤓Iad'v*{cXvY,jỪB.TŪjr advI;ED%Y*bDP;r"q"4SR%)2.2vg"U.vb#:nqIE|W*bH"'mOq5BI x)q+EDR)q+UXU.SX˭dόKwC[0j\\/Ca|q!ڇ2HP.A(/[BLdLUP*Î%4V.= E!SRTTX2|jETPܖC-qPDfBTTYD"ÖH8'TfyDN]m"JvitV3Vwkq^VYݖtKq9j5Χ9p4%mQKN?!65v9:e* $*o K-f%}T2>-.jo U.6&g2k0Y5R-1,deƥ&VFJ\xIRݫ{2R(B[I'-TRR%":"ʧ ڧ`BJI/) U.a&mhKG n.Uj26Chb1LEETӔѸŧJ+JKBOu+MVŪ`=|Ȥe$##$.;)T).moKbe˃'RM[Q0)'6-#YK*U.1Z[՜DyfwM{}ao~c9<(؛pf2v:eN}Oޜ.(mǰG,yH71Llf˻lR,f0,SQi-˥ \hP^ j2n݄MGv~!ĥC*nqlRHKB&Dʧ*CEQ?t좫vA1:RqCLR%hQIjHtSF:n]ۜPJcݔA%Q]Vt U^nU[er[ UCC iFőrHROpIl{Cfb2OVy:޺[[VʪXrz|/vYNΧ=qV{rpߑ񒚜[#~OfLg3d3-o~s&N桞g<la$L\22%;6SU.Eۥcd"$v;he$F6jRd]2q0b]#ݦf0LK9FPM`\fyYnFsDE%Ol__3#OeS`_O˟hۯʧnY>-VOCX0>fY~*u`!q۲Y͒,^tnǪwM:|:귣VyRoۃ8˘߬<߭YViUGzʙ j'>, UM-ƭ]ZjKipɘXڇ|Wմzj U!v22..RdSdN$nĻKWedĖ!25}QO[1n!F&212. !^?MTyIxIyڥ TSnS^J!e>lREJEba\lqIF4.CwLd 5^^a\RŦMTyIƸT DA n"!*&ȸt)ZD5֪(U.G %1(/*RRSeVЪ(*ʧ( XLTPE*JU.iHԶ7["ѹ[22fJ[Un=Jť*SJ*}US=rx,mӔ^8xy~!%H}fxVq{]jrˣY2k*պ]}"O_}:d|ӜɖHԎجUq[XkI$"<=VDMѱc\FF=%CrJRAR&tXXUO=%nS$U.C%qɌOE\$nC$^E%~UDP2dEˌC)񫈐vk/3D3-uIP݄4[f|B]F4arkl/EuUSCXmf\WQU1*VպYV1n貓 qYmR]zL̖(qK]Mɦ}r*i2ZOsVQ]M=c:ҥZ:J/89zu>z׏<7.m=t;z*I-/=͙ɷl;q8|w1yܾLtz3gv"$\UD"<z>+یKn_GKeol[ Z{[˧hfa?ƶ=֨3'o.3{+5[Q>O[͇ΡRy:|=s団_,R.Ǹ6˗e- C0r&GZεƇd1I(T ]՜`UfWjz8[a[R͓F}Wɸ5~zGTS~-2#2MK\[B2" >D ƭJi\Ī:ĥ%Bt%]qe[P$qOSl⇎ħU;)DjriS?F{I\[U|HC3.Urj| RbO7z(-DdOCQ#*[Q\B !**BܢHjʧetjRqP29.S[qITdT(beFG4#lQ(xvyREQlY=*ćx6[" [{lKG'㧑RUE)lJ#Vw5fstjvZ_:Ub4;پ-aGj3a9St0UDZ.P*i)j2nE|Le2mLIgBRCZRUiDu=6)I7*JQkeFm!RZED*!T숗"HYqi&fF34욚[ˌ* "(CDK\P~n$v[ܚHħ)8[ʸu٣%QŘ퇠$ְ̩ڥ[ncdz4պ:>aK~c\"'݂TؔD&#M 湵mqi}薌ͲB8SHֳsv>WhlX~-lq<\ɡ_]NO]lvM?jao.vqί.{{)8r$c niFƌƲv!=#'R%Md|jEmĭm*^TʭQ*u ?5^|OP>SFTKMQEIѭS$.H[M^1"]2jQI*{ܪ**ES˸v902CW*ˌ}KժaM*nC# ULU)0TR)9*L[cmkKKJwU+mM:vlXZ-_kwqo-G/s;_XooCn5˱9ŗ| QnΓz.\/`qlYqsXY62a\BEdbpV`U{vYX~j[.I|v{b3 %K^22lʥSOFF6#[WSCc"Ęf\!dSD'"ft$+}od2Ku2=/2,jmzO?Z`YRZzI#^KZ/R/QP/a`m*!^Ҝlr: x%ZPj^Rˇz[)QTS hT-/+,%n 1fQK|"BÊJ%Ī۱5nKCQƧ0^Ӧ^Ș%~JZB݆zRˇ,)+ngaȒRE5`,e!qE%",:høFKc-tXOǬ,45+ot]x\elj#<b/._Zc|s8^sy[//y=.p5cP-3Z/]C-|RKB#< %3t(VjzP/xIQ*%cmWn(#?MP-dFZ0BŇV8J"Ju,(FXjRxH$$bɘX:I jUb*հ$ŒÊEd%.Ko,-SWHDF4Zt%g[Ēe:m򜬧oo|_"}z|_ͷdo'b/^E+خ/le?c;>\_}xF%n\C׃T?_k>[[Sⰼ_j[ST3r%ߨmʹL5Z-|YH83Z-.^ZzV;<\emKBPpTֈLh,j-kgTU+f1S/.e0θ*SE/2bŭ?wO'klstlޛo:1 xٌ/?duvqtޚqa45z|j$uR?zX%Q>A eZ-RZrKIVjjSe1COx %^OJ[SS/APb$˗PbRPj%^z9^RƪNOSjE/hR!EL%Z) xYԧV/ey[WYKBeSRF"1#,KR x Pt'R/C̒q0:R[Jѵ(:Y:tXX/ GJb"a̦㬄,O2{cNϯ8yC3߄)he8n%Vi9,`XRgԢsӬHh )T㴩D6+j: KGΑX`jMXt8&;qJI[D-˭լv:%$$ֱq5ahq1;YޞޖwYiOOڝC9ۛgKmn42=J\f=NSGyiu>:=yCߖ[W/xa,ꪹ:ԏu5ѺԪV3p[s˗jshjݞO،CSVolYy"+OYOYSGǧOYmba}hm]L{Rizi{0mx I`&!ԗ.GiP/sPա:UJ՟l?1[a/^n+-!2>L%ėzԮ'"!^eS’%$Ra"q; R-բ[q+atmOb-ZVeŌq+TSK}Y^ *m KK|cU,BT[!²$nԎb- ΃p)˧˶jU3C՚R㶴ZM$r.B܂Hly$ø,kI#lGdY%۪,'a?2t\ގ͡yX×y$nY>dI-\O5n{=|Ȓ:Ã5ev5UaUWuڋZzъcL;,ui]Ze--uebXSֲO!euژ[k8u[RLKV"3mjyi%htԪPsAgg|?ŢxYf|/Y&ªommd^bh5Z`gmTkFDX>ƕ7A~7O[HzJuQC,K%\=SKQ'^bFB,ͬd/mm&NeZdHcmCǛpoyoZrKDdm\sppm%oH<|nmk_L1h~xy׳׻}w=Ǽy:] yh=&HnFh522Z`("!^../RL%2ԩ1JZŌhjO0,_֧b-U)5*BVJf-VQBd%I,mUbi7x&1p{!XyTR/ێ[bǶvJV,޶Fb$>J!YD4)$mںxx{xUo;6;kY#3q{pr=u;oo_[=z߿>O=W'Gc߯woNxo[m>>Og~q{N3Zg:sZAБ6Goxw|)kiuy$H훌s,i;3n:%^ưV{=ſs6O_GǟlO?Ro_=|ߩ?Q?m7r'eOms6m67ė/ް},eoǒl$ydNom~وdxujT{fîqg<<$W12`v,-S9n{E,Ivmd'axYﲒ,N:>Įwҫi_]:]O=mP_SjVutiCBo&_E(KKA;ՙj9:5ZJ˲xOS6+ K$n_KE/?Y K$^Oue$2Z/^FKucV;nTQ_xzO3^RmjQV-:TQE^BkIğ,b-/`܂T-f,[6âS²IJm-E eILEć$^eQCPt.KKgZukݦkq.0kmL L/5G"$ ò,ْ=΃zd-ZYJН|ȸo:[s9fl]|:?B-d,iGǾ&u$nZ]k|q9l,͏cZkZa닗Z1C;m#4hzY)cZPr[eYlm-RC*K5YujYTQ+d7P,RESRV:T VZ[}HϠ>D7:ėn֢MBE5;D+!iPƔz-K;:-+k<՗A,AlUNZeKK"aa=(r+I"$dZ=bL7پ";v|$>dZ%KVZ}3<&j޶/p=m=a[C2:nƌ9s\Os 9Oe5V;Vk.úhMNqk$1C2T/E}9¼Yt\,]\E+bPw[6ESqknyTQifbzY!,TQ%u D|!ڬ$*U-ZvkK"RŽV"+!~U[z J^eGb%bVmvD"ѣG"Y,{E$f {[+{;G${{K-,t[˧<~xɼ~#|Cο^_xmxx7޿¿9iNgqs3=<;.֘v1=I?̘vƤׯ՚4*j;rʐGs,6S[[/iX]:Oi-/=NuZTR*q(": +.3`z e1n5Y˚SbܦF8^V:㶖O3nq;~wI|)1^u[.e'r|OO߿_assWR9pŃ+?u*a9za;l/kq^>vAacs9g-/g{;n,k/ַ݇a6~]~ŠF>d99gGPޜ9qm[ӭU}R!==CJէqj-8fЮ$^)+Ok Y>vV,Rx9OSC^qPQ uPe!O-I/uH|KWCKv(ZVujԇ֧ėe2>q[>,_;4"QbKC Ϫ>D_ƧH0BԧݩmBl_E4:̴'f(5*!>-^JG 1,tC/e._B[BZad?7Ge|Y5DC-,xOU Z/2K"KPV|j}6[h;mXambqu,k6Ò1aO-؉d9cHaf=!u8kOVǵ<2$bGގlqV7Ie=,[As%-t=em\Wǯز68njv㢷Emq[o猵2ngXVDD+Z LeJV`1c-z3n+&1a^n]˧LEd|*òВ IwMMVtlb$;@ TS3o9Bgͥ_le2TL4 V;QLT8'>/\dji^]B(" F$6ni>K7Y6QNM%z&q[mZ-LTk85~UZ cX=ngm]-,}K.3S^%>D˞bsۛ>zH)^Zz_ޔ}G!#S+s}\.Ͽ;[yPB}ڇ*q`~<]=λ8nbc{GY;%n[Y]ƌrDt wg.TQ{[yaJKd(%~U5Tħ2,1!'+eκ]aLm *r*%T-G/,"~'^B욑hElev2aQ2Nl=.KFI3ZGB?%a9N9cr+&p}u9LRYg}3L\\ӣMBw y<#oo|>oylO'o_ݞc\kU4_lzVӮ֮Oϧ[22Vqk~d5u*,No>Gm82FY/uC[,uS_F%5>خ䐔NWvX/5E]i.\lLuPa)!Uq.8-KzY_&fRs e}.\~8\]V{ nOW˿va\_]奊uI//u.8n׉u7/$׃}j?ԗx6 M.z qKz)ǭe(^8Rz[}(i!KM-*Gןn[)ee1A˄5^0.#^&~!1W!n%1~aAb%DFB #!>]V/OnmOTP]FK{YJƬ2^V.reĮlB9n}\Y/HŞ͕$üڧoy#Y%1qvܞO=tyxǧ9?6hϧ'];۷u{O~=6^&n_\.6~ZZ39uXVkFW-2lB&v wJ[m<~J.!fYкO]q6,ք%v&[\ ]{|j}RUJYm_vD^B|ZT6=aƬ/O,_wnAH(m^Е^%K|nSEջCԧRJ[xYKUNR/ո֗4Uԗ:^%ħ[,ԇa}/Ij+ ipQEK/aK|Jjm%BvUo:NOyaKzf`ĺ-SH$D2lB®<\VoUuu|fthّep7}vݺS/m'}r$۰ C-DGyu۫Z]N{I}O^q*s$6;XCT#~6ч]2.%5&e<s6H86/Y^I=xaeԋ˓neݺ7{dYYTqku($-%TqVkHKx~i!#qbzzIUƭ+h\uIːqkdIj\o!6MuG;ys]xXM&$<-?̻ۻ>X>gOƷon;O?]=gͮsmw[=86jVO3ZZ,)9F[KBrQ_B)m*)h=Օh$-p}1nYV)x%^S^:mk-.EAMԔlP؍,.Ś˧ n]ː{EѰ'l_X_.:/Ia|9Mgt]~+!6_ 9rU_,2 lPFFj,2 C.Vc|XoI'̉!A<i\A-WcrԪKK}ʨ39/&ϣյ:5au4YIjzi5iM/FT+e$uzr9n+~/\ȎN !DbD[V+e!(T[!>ŇP,IoKen 1L$BV*{mm՟áDY!LD"BBtJ["uT[Hԯ"D([}[5WMĤ">%B} R*P2bRIz(\2fdLFRx)~zRz[lDfS9ݧ>u=ߝڧ㹞묔RrR֌YHD2K &&T/V/HVHg^֗RԭPUZRJ֭%JWKRJ)B|hu⥨!m Hu5D/+>/I4-ImKfFmnH-_%h%nSdeYvA5Bi11I&BRDQeu5ِ+&qG"x31|͎IvS;Ko#\yo'|o-_e[f2ӿͷGfr]iᲿ_z][x位]Գ~sX߷)5-5GK}>%ԶJ IDS)úUmw0=!㶫K^"K(uk4,)ze}'۬E`.MڭS[ y&tg M6V*MqJjh˺m쩗rQDPB֟mWv]ĭLA⇬^.\0_=o?;˿Q)ɣ]}'Z-| Y/W獧g]`./q841y)jMWҞJvvi-yk2DHH[nD$>C_Eo>%^",S<VX/sMK [EbHlM0[뤗D.9I%s<&H̅dM8߿K$o2dWf\}m7oujl+Z2a ǧ,* ccHtebh̪DƮ$SEB J+uWf7ץv]Za$i\mb%nW.)\oɮoof$i$"qKDzOIM<.3hy|G؃KL~"C(಻+o7믧IDIXc֎iRUjd,mOtOR^_>,^|8V͗:?]/G_^_Rg߼ι9sۛͿ'eg#.5HyWI$sJ3 %Nv"H F*?ʶxx7*;6.$-[,6C36<# Lkm9 S8i1ڌR)w1H=32q.OmBTI|?Zv.kqپq'J0GZ۾~>}To濝C'˱o~V9 ]IGOab,V؋jXn*r$nm,Zvp8>ZaWyUQEu堪9i$nHHN‹*^JN6-2nMd˭TTa$Xii U*vk YA)zqHAsQC2n;&I$mdK"1a'!ĥ'~IL $S־7I[$IBr⛮R(EJQn; %nK5'E4UwA)Dd\Tyneh*-[EU( !no=nIb %(r C̸B|!%!HƇ%nՔ*UnІB(R.lO[Rwj^fSiʭwq+J*O˻REJ>KKR)Mď:nc]xj$fԪ R(R]4Yp[س6eUZT2UR]~UT;ݦ8uxPUyJ\2rvɨ-IRҫP[uիKnOivf+93NJg,I-$qkmYHY$mErEAtvMF"EB$t$DJmJKTYӸ"niHRa %%t2 1E"R*L(2~[\J?[y*\&b<ŭ q)x7GtW*UJꦊRJ Z oT D)R)A6Klሧ*J.Cb""ߵû0!(Zwq*JU{7TdZeRҪkGU^TK%drޛ*UeyYO_˫O~VMK2>V9eSƉӧ.'3.3[qf\2&T`9Omsq/)!bbOڴǛ 2.. q,=6FKqn]Wbh8r 11qK3 ⻈KVBʏbh߅eղ\ʭ"*ܚA Clĥܦ, ]+Rqo=*V<$nM*jT1ЭʥtTeiF"ZU9j}TURBRKKw$桊貎]kԩժZJMhkZV뮣'ݺ^|R=]]]/G|굪>kZS/XǪOuL_G;oȹk-o2oϷ|/}toj,?|snG*?SʇPnf1,ol▭6v[.¶v[ c/}8|<"v^RVZ6΃퓓EmO9=8Ky' %a^}ǫ"p*ΥXhE7hնUR*l񔣪.Ҏ.MUIVkkUU3.{KFb'{Źk;rrDVKQ)N$.JUijS9K=UK˖C/k9|xtb7n'iyۇX^Je Reo{{mH"KdQ[˞&9Eh6bTMuPU)E2ngJtGqVw[/P]IwĎJ&:xJZ)4"D5w㒨ƦʏEbh:("x*F5C܊UWSn!]M Jv+5ƌ[)fQ*,f.[1B'B,ʰqkq5Cty#.+,]|uRRޕUIMJRehj''YjӺtREcQ_i-k3ο:˔.uL̘9n}UyxT=]22f7)rʖqn3r edg2yh2ČKK5#@&.{첚wqhOg(3*[hl=j$Čn KQ!?*D ¢ݪ<]E(vk-K1Mĭ<.6T! m 3S*5zeUe ʰ"Sf&rjI2qtL]$VIFNQ;4uر*kW,Ge*ʎZ/R*b ČK*vc٧]yYաUKxYr 'GS9W}tuUյ-~1VÌ~y_>ƫ7*ǛWooNk=2_<~yޜns'1S4[/$3f1숈"}xya%Iܶf%'1nqkA%NKfEZ"aå8+} {Qz1=Nf\:vtR!HixWU.֣GDZEd #.ŸHBƭ-.)"~i-h,j_~~a(VpU[_|K|mJ|_-]|Wϖb4i-ÇXu(,ilT>^ϥqrx!>MKlٴ-,IID챖j,LHmUUӪXՋLW ֨*K5J{UEuUZZƥZސn;$'l&i6I*fyĸdb ۻ'߅$Cș%-:>"AimD?ں1ޥ驸$>#U\2?Uw&^2 aT{r+ʥJ4Ke&qKaP]>45}jʭJRM 0|Xj()}P[*UC!]\]fJ ZF^*A5[8,5a2Y͸ lkZzMq0dU^3c者e!vv?Z&UVrחO-aLfd̖|:ƊtɊ q^H"^X>,$~ozro֒IZΝ)RD٢;IiČnRGU:3ƘMM8S6z]&*n3"ٽ"%Bu-"2> >C"qT(QT%T-JS`Ox"*A*>HPRCIR2Ҥ1Bí)\$l [(&KKjRV&!A-qk򈧄pl2-U/V(ZŋUTmb*ժK-TRкըv9j&uW륏^>/#gLqm|qۗw3iEyfI\dd\.Q[.s̘q72fdǒ-C#!= ۭ˥Mo"nsuu ŘьێۨPfeF1E$DK"HK0MwQn)FKERVBut{q2 EBKʥ^lTԒQ*݆VƄce6UUIt-Iגk*kK8T RZX9..tjԨ[kEE*}Tm!;A3tU*/];CwuTZGU]/Me=}>jªC͋׮rQ/Gۗz>Z꯯˪L?V8?_yy%y~?No7y[Tg~}s9xD]byZ+Ŷ*+θT$D&.C%l)tRb:f*D-nf\}sJ.!HBhtK)!;{DD7t-59D%rKb$a("P(WISwA[TnQt U]jK JRuL5GCcN6Kf\mb [cw?vN9qkfԸL;ݍ f0HP::gNbPM5e{GUdrK6PCŌ fC7Mw!nelOƇF'˟ԧOm忪9/Tğ(l6"fDzղY6Mzm]ZXl6ŶYŶ}ziao˻eeŇ/mI>UK)f:c}P|N=8hM/Z-W[M֪eix.4]^x,eN֢lyeҠ.ˇփvQF"k6kKYa^:nx`y,]c0wSbĸ-VYrĻXNi5FWatâ˥ǥ,&.6n%mA,xWWu o]_5xPۭmYԥ>,.ma6֛lol/1>lζ9ۃK'%&q[#~1>lP=ԭ0:Keu[ˇ0V_R*VzqY(7B, 񳶆R%a.[*a,IJ܂ćeX$Az7?۰/$bryOui}tܪnuI}Si\CV(uPj܊ )r+a|[âKBI]ZP%qIA?!]$DRfea˘X$DB\[ջ4nu?XH\RBJ.. Y ޭ7N9v(*ŌbhsxW">{ť%.YFwA- ]T8leEY!ڬn*A%pI2r[۠Hd3R⒕lDz#KVkZIB$r62${K=2XVΊox>~ɷo|7]}?V_}>;2vF2yj]fzYV=.9f:5M^ZxKkꇶN]Rb,ލb"q,:>-`63T0ۊW_޽ƚ00q TfYC)aL-եu\:n%P:ԇt2uOYnGbcokX|iėOw?ۧKx/x[O|q[ٸ-&l?aml9aqیFy:Ƿmv{qÃhW#%z>y;hzدA,O/V[T}95N)׷J4%Α-<˱l9.on%6,,;Nюt+Ű8.pPDZJujwUttUD O aTROE}xW*'%>.*P_R%me/A\V܂6>mv+qi;hS궨[[܆PQ}͊3>U+u2l=KKkUұ[X.EdUܖˌOe|XۭPJƇSh u9-cHb!KҸ$JaQ$S"˩`<&TQC+!NQZ.rPK+SY$ V;bƊnvE_dsxr~8{8=vby!+Y6^*'h]ϒTI7޾wZr{٫ϣK)exSHKX4Rt{sCպdorޒ["&Gza)Lvz"sf-,r2.%%2lfPteD%VEFYidb.g%( >%-u)*a%,ZK݂MedU)C,jd5#Ho2.l -3c,PJxdK9lq&>8 .cƊe1-0eƃl Y$ A R!S^;6=oޞZ*ow,oo<\=(wW;. Ǘ=.]4Gk^RsX/K0> /iS?<,6OʛֺM~!%.Ce8aLOʰc1Q&.K/qU ˭.SD[OY>F6ˊ0T%uiTbDq0KB]NV;zKbQtո$B{.ԗx0/Z˰TӵXKe-qI<(!C78&ɛp晉zX2d۷<^6y{ƌ-;.]:=qɊwz5ө j^̳YNZhc^α괯ju.e-kvI]Z^Ȳbbt1TFNjxWêOۭXa^/۸&yz,S2kDKj ``2t]b Yĭ5cRQVeRT/!>M,2^_|ώYj/Owե~x uaP19.aX>ş؎nۇ;6r^lrƉqPuޢݫs /SRo>)}8^DdUCVq*oZJ\KKѼ$~8m̶xNz|.bɒS9*LJm'neܶ>-ڪև%EK)Eh(%,ZNV}hiR>En?ć)踔Zq[>ŗV}IxO[z7ԟԧ.J( KGu$˭S-nTa.]ԧR?u[OÊևć[}k|Z>-f|OuYq۲K6>LRV55dȢ%ԇY*.A.:ԧas$VR%~(%zD}jbZR[n KXn$˞]8ZYXVGkXOk-=X&K8=ftb%k5,ŭIcPRD.[|j΢Ry[mxyjZ.4!=3a &bթE&!+aкZ%-ڸ KbƥԧA1Lk*%ލFw!ԭ,^.qk]J2c-֥neD[°KqT2.\rFRay )Q&ԧXbnոTLC)ee9n #Ⲗ,+&2dM¶D"96:7"ўzXo]!FN,󻳼^ceV}˟KKƷj>Ux>ݢ k_fZf\fanȢ.ia#q?O.ħ0pXvaQJI(˪܎?yYf1CH\JItnZ9"Vi%;ħEڸd]Jbn.!HX.ĥcabEk[ȎZw˷q{߳_~In=NnOnw߽w{Nwg_b:{֪iVϘں(]Jc~eF۩kim^rR}вj;.=(<Իx1>,]Zb2V]krfmeѥj*uI\vLK,e-k\,8F3RI-Qԇ0ljn+~V9CS-fl겷O믿oW}#I|/.Cݶ!u{e_e 4lXv?lv v+lN]6_v-I~xJ"W dhPmEѪMFmSriC[Lb$6؛$\b$!k_Ia贯Eujx0nm_:5z$mƥhT˴LJǭUDiKKwU,ZZ`ƻPqkTOu[|OA)qI]JZCHK/Z+qi%n)-nCCJd-q_K9ӸLN1-%2>ե2 RպUP?k!q/u`>ŗha"qKeQұ"u%%qI|Z?t\2neE?-ZSF">$l!%n{wćK&q kS8α9co-֌"X'%Ț,3I-SYH][ˉ~pNlYYY o P_|󡻿-2qvxaoէmwWc^:^^Zֱ%qe[ggBtFԥZ֗%a_hYZjQY>Q?<-,EqVV##YݪEb0fDE]2C]Z꒘ aŧzа\"XkRlŐmIeE"nk#K+NPA1w+պd[~CQT[Rq)faB]V!:nqI-ثZIL$vdHK,XˉODDzuYdڲ-#d񋵬Xy20{c˼te:|?KeiuXǫf֗j:Ttʘui9 0.ے0nm8.]6eևPOuPk8,-ÒfxEkkQOuP 7RK} kq ?)Ȣ>YDCKw!V4tIMԻX$Z%.+$dd q kG<\zXve%; ڒ<$! IЖaXYKRސZVl+INum/v{g o/䗭,]-o2+[}O7=y_&y='/}>3=xz~89]tt9^mFE,ҢZқUq_"R^Һ.=OAj1.Ǘv[dGF[H%]{̨})̊9ƨOe,3A=Y 8tV=0%hzXTmSezY eX渜.nY euYqxYX^wO/_~Q⿦n7/~;9eXfs\gv؎bpr6R/s\VaZۧjYO<*ё/OD#mfˡ,?Rt_EI#$[GsH,")KB!AKܺPG&.q7]n6L=YIP Ȥ'eh;L,? EćR,P/UKNR*Jԥ^ƧRTOJQBKԇ*? -nƧ%[{nc",HF\Suj]_Ռ˸~0&.U 2iwUA]ZDħ-+4~U4˸ty%Ԩխe\fb%[8qY"na8[3.M.]HYCqF2=& uL>na8XVkˊd`Y3mT1lk ]FíGq*uiF&I;fGڊ-7qId-uo]-enu`4e|RVvԥC&ZtPO#ˊQu)uRST$.OV!Z RVL',VX)'0CE#Ǹ4{vњqPθ']yw)ǧVjj6j"/2TʻK0/61i 6`(eEb%tSBCrX< q+du*~ְ|')>Tb3^ڌp=q ¸t4%c0f~U[]:ŢMM["%h .k\Yk&KE[ Y&dJie4.; !a,rY>$/,:OY.mYˎ򰃞7޽;՛9.g1?72Ƕjhu\N͘:g̈ Ϛ^TRբ>Kg-OmRkiXJ(7k=Luv| r,I] ec/4ffu,9R4kYefY8at`2na>M"4Zﶰ8WnPkX>Yg/?/xxs _CP7C]WunRu{.?ovǧ}z[>ll_8~nۭ^~s{,_,.Iۧ܂ro.Ybe ]T9Zq+(J(EJݶbgDd"ܖ%!$Y,Y.Y%^$NYd%K5jtڧ:5zjTuvH{t0U[^ʴZǭUKFKiէ֭nҺ պD2ժtԭP!Y-^C^V!#D%nu|/uKV~!SvX~OE/rK]uieITT}fB\62!C":jeXA"7%Xu[V\-_T}KӪc%!;1ԧdm3KzRe2a-m9+a.dIN"9Y-[%ĉ㇧[.m}Hm[\dtlm,noњx5zSy]nKҲеxӎ.-s4豷K\VfTkv4O}ISGKu/KĎcm|D}Z:&=xZ UUKKUjiXƇKkKH*j]F;:nuP%[,ҺdGQIRCaXXo]d%qKa읙v%EQ 9ry >X4[ -K}|Xԇ%>c1$Z$% 9ŒmmD:!,k{Ȳv2o>25..HF A,unՊۧ,qkĢYi+>$B\b/ĥZFҲ$K"qɃPX+rYD"z SIv%*QFXX+{[*Z2yrw<߿XaMfx^wd/3߭ݥ[Ugeq9tƟ7uϧۻ矝qNߟmM{{=e]9=9iTM;(> UE[Z*4z!uIò0T)3)ڙ/aEt|:.kV/0,.+Ѱ|s| O/eay?/?%gߨ-ƒx+wuP~QYu{m7ex[>ld{㨗llcafec;lİqY.-sIy]VDե{,[NUKۡC6P66޼ɊVĥl"+/$ɖK"Y.{ѩϡU==:5KV]Z[ujO-e FKюneԪRz˸ŭOkꛈ[U}xI|KbE]SAb q[/e|je%"(ˌ[g-uYW3^|qi}R?IRRw3~%UDj[eOZRu\X2xƒW݊`?ag)K$v!2qډKB|J$ZePG]a{Y杍5cl"DdUӸ-:ᬽV%,oxʼnOO, q{x]i>=hud<~n[$>Z>kJU5J2K%nh5ִTGW;VK˲ysٔ!P³k/Vs]aQEn)zRh{hJinehðSQjZ3E}jݪ~R%UK\D˜",+ڌ͘c/b\raE$ pXnZ.ui]?Ҕ`m"L\.>ےӇcdE>,HBlaG"4D"e$D귇y,YYf[KX[.˧G,VAG=Kǜ^=Cw?lnY'ˌx>ԥuiݪjm5CZ5aO-#q/UԧPxP>T'UT˜ӸMͱhTU]ZnEqo%'n[J*Kh]¸|O].uoEYnKH5FH m’ "H,],lJ\$%$D$!6ٲ%ŎtH$BB\oq٬eZKF9n/;{{%#k<3x$o}rwq9/=kzƌ1f2Ok?T/vuzDoZEFUőUU֥uib"咺nn ,U2jju5,Aj)n1H栴VK\5UDgGw9nuXa(q[L]VOxYg?u˿grn?)n%^xysu[C.w__zy]eK>Z.6.q)KZKֲĎ. !lyd?,7 9<}Evqٱ*aQg aɊ%!ndHx#.>u\7do+$ٲ?7izVuh{(բjiU˴P->u܎_UJ/n͸ԥu~9]sP?k.W T|W!0l!_wk\꛺,%!֭~K+&AHKJˌDV/ uYnE廡j7UD\KSeHU][]vUV˭HY^|Ő,,a)b!n6]T#8z %aAA,/پqEĭ,x<\&Ewam>=OEX[Y caO73g8FID 3[dcY򈄰y& E$.pI[-|JͥӯcWj]8˧-~w{cF[Ƥs q cmbZK\F6GoȚdZDxwQY<,Y&2<$|yY3yexxm?#i2KrtrYqzZ-ui9ZӖj.NK2e¸.܆Zy7^k̨[(<:S֥u SZ=֪rkFkTQK?,/eyb|JEJ|Ȧ^EHnR]2.%nk4qi\bUFc/"A[#Һe-u[K5 vyH5AbbⱨFryD"%I㲖E"qI\VⲓY44kYHۊcX#s/)Vޒ#坷f-Oo+oo+gw{OAϘNg̟]A}.xv2|cjڎ.VO穕tJ{}hKXSGucF\bqv9uY,tfҸ1%ć1.3eP*ʢ]Y[ɜ2.!>jtu% (C-KMP/^:?:~vUX! uI<Se/Iÿ/S/%?| _SO+ۿ'8n;q;ŊQ| m֧vR9=v9C+><{Sp9uO?<=d3IJr/K}W%nR^pEܶ%a9m|jғ[ʪIner0 phݚ JiڪPߵ>DPu[ouz):DK)ur[n֧Ţ3^J,4r`(RLnq;Ct|h껄f\Re'T#~V-7BEn1X25ubYJ|*JYԇqk%n =KB}'u۸,DI|[?)e.qidS#L^S+1n%J&[5v<=E,,Ӽ6.1GmX F\N7Dds4Ɏۣ>mr9u{"$۳ݞ%˳Zǥ~(VK~L.yROkq\qr9[c.e,2~!PRPZ^?%%.Q/*q^UOQ?d2ԭ"ՅZ.j%%i--u Rb5^9"(a!ԐgkYF{#IeȚQI{䞑^.A0f]*^Z86dΑH!H$.O4G9d#t|?< ޽yuw~77_})xgm޽%zyZ7+U({:FO%JqЖjVբld9 Oj.KSv|] v)2>=ӹ̃ӭ†XҚ.Ֆ$^uK;Iw JW"nb4Uٺ^Vo9:в4_>ߍw/O?A;B|˗|[g]Կc7?k}:\CV!o.onO(q7`X#'_^0n_\8μ1dg*'9]mX-m2եCKAla3aX? ?aB}Suۮ[݆qE) !)..~[KVr-%!#q[]l6KG/\Nl]ؓd8b'Yl"a$H$?9A tqI~/.Q:呶䋮քO]臨~zi=nkF&gYVE].eԇڧC u;(ںխu ]VE%.!}ǰ>%K ߅+?p[:g]ƭEa qаu.Čˌ3+qВ\\NC⒘4DH D"qI,M"DHӌLθ×IN#|SY3ILqDH%o2"8wސ+_s]vYnW?eN\.?qTś~-nvY9L~vȸttS8Vx3n g|9q9#9Cxၼ=zrU{]2]&RR-۸!Ca䈑pD/uyuI8a$LDFꛈꢪuR-VKuNX]J-eMB,ZJnj)ugj[񻪿U!NgC]˄0.nMXzOASJևˢ~n[u[1E˸uY?k}SuꥨOqqԧĭz)o> 6KE-.K]%7#YCP">ħuKd&/`\?%R%n%nK-X%@\%.v^~88]jqȺs$tryȸ$'G=w%Dr$x֮y$Dr!oߋ-q+U=ZFV/M\T p[7K2ʸuJ̣NI [45fp`fDƄFG8ƙKH\D$$V#qęCJ41c& #ou#Y/9j#8$9{fƗ/x-o3s8˿w׃cavgtWrrkֶ{:vU<َVk}*=ipХ8Ofw_ )[Jv;&Kc4>z[vm[.JI[kƖ R%E,֌n]Te2](Nߝ^N?AYB\ʺ [,'N3~X?[?/N/%ǣ]?_+__꫿?R?lteZ߬4q֭nab vTjKƇFuĭK]R nJ8(q ё).qi:,u CVaݲr a<8CN991Ĺ>`]rzqyJ[I\вٸdcYCƓ-giw6egeƇ51a,KVjcَ9 Xvz`ԶډTk=eŒp8|Mʉ39g$ѥF+ a\NvnpT+T0kGNӗ7]g-ӇQߵ.-uyVBԥ9y{2B#ԧ>n˸$Z]jjC\ due-uYR-HU&&KʸE7a|/]g˔c#T&.]!R2lX/ӥ%u) 8]IJ|*e+$ԮƄ< 9q;6F8e*.![j2!9O#ı f%1#þ)gvxxLL6Ӈw_5u믧rГ7}hN'=xzKԶi绖R>GҳSYsH-0Z3OHԡdZnOv[ Jua k-뒺LZ8qt!֧e\:Nz92$~SS݂Vq./6l]&~w~:˿xߝW_z7S˓'W,N:p;𓓓7?;݆a %urvz9qp,D]$<.%qJ3Aycĥ7n%~3>iqF(u.53~VغA*ˈ,bk?ewX,ú Ejٵ޸Ōzu2T}X/-+>IMe?k%^U4>KYⲧ=]ElX 7 6nK}s1cק05. KbC[NF 9nIc饧pj8 aq dPirorqt<&Y/Omt;NI7֧z3nqw?\q9ypx{lyTRg39:x:z:-:zl*u['#YQ?DKfeL :֧ܪ֌Ka-Z-5e\V*n/RTuz٤ĥEWB}BP>TJnCOeeVƭCĭq]a$X~6̨no*{qf5%OS4k0D|v)q;pJNq9$4Ӌ[xXJ0OR}Jn_p{e+Crjֲ>M5 dmcӓ=խ 6>߬[^m+cVg]jVB"n7ߨOrn+%KB+4EWH5.qkmNCIːv]+J+84BkQQZ'!=<ڱk+ a%Dؕt}E8xH̘JݎvorQ ]8ƞlׇ8XLČ9kO|(=QjW1.}t0";.Ǘ/ [\/. :֭:ʺl0:ԇ1a]ån[$ dJ\2y[pz{g<T"efLKGMZ%Ksgʡe/-5Yu;1c]f٧KVshLeLRҺRUԇU.E2Tܺ e/A :.CCC!nu$-HO3n1>2A0}]hei,2-nxg/Amd|72L$N/Y$6q[Dq8"#!v8d,phhӧ#q9I|uHgO/֥u>=urzZVkg=ۡjb9رndؓu}1ONpw<ƆbRԮV/V*_?VC게[}Pߵ&VH4J\6([Ob=}L\Z2ǸZIZ"*! o8pDfd[Cሳ.[H$uK9md$.3-SY.an0EȺ3C]@f/֟xÊz[}zӕrJfqǎd/Ǒ|˗1uԛ;xݿL[_}fs9n_pTS3T[V]D+^ޫ*mJ8YebXsOŸmCeaA)Zk-/3::X֨Sx,sxbaRtʰzJdXPWa|sQOu:ζ2,Oe\S??9|w0. x9o G>I_|zP/[}W?=7OO"^6vamlk,Ӯr9\lو7!N HqYSPGѩ:ضbh],ksPU8edq#IXߵAI".S$ĥ.TCѡhjt('JV]|(uj)A)ujiue\ZRaOR/Z^Pex0~:bmsq[.ǡj]>iлZ:TkwEz*z˩u%/oVRPź9ʘÁz85Vt0N:KePOPe..8eyJBꥤ.Xqj%V-S\Ota9eJ%E\Jw(mtS+i)n۩RoH$YDBHDd{jHxc! 7OOYDwSU*C,TF͝ՖRF1UPmԥTKiуRJU*UKx('A*,)0No?X_$D#ˇb.K\'!^HQuK=Yb"*.̌hPRb0/˟$S U0Z˥Npa|sx ¢qI^<ϖ͌8{q ¸Ԍ<%Ʃdi|UXNAF⻩ .ˏRXX"~pB=T )q9S4&2Drp3,V2:8&]+o7ɧSirR#nAw܉,IrIx}w5G:T/xT'OniGYNT[^i{ĩuZCrfuSUN1i\mjRhJKG=Tk ur)RE5Bǩu*h0,Nu*A|KEVS$!S)tCRm껵r 2 ~Dze>Cd≮,1c,$d3.d{x1%w?H0k͌e[މKvj %, _pJ,n7Ku9ی,8-nˌVwlpNk]js.E+_uGe-' r*r2c;eCz0Z*: 㥂0NKPO:rqiNuI/!S\BK:eZ!d;%Z͢NkqIXNuIeh}(Kq;Sb-¢VQ knTA,IEd9XndʍDpS9%\Xnn1f$Z,mɎnf-{7k_]ȧ[}7_V}wz|y_޿k֌w7O4wTXcg̻wv_~z[z^GU{Z=C=TNUSbek=Se}x7 å,kY!5ԇzqiQD`P:u]jZI=DbQlPSbol{:Ɗey:\Sߍ'eayZ{|˗/7gY>ORzo%.e{oˁ%^7I\;6Gl͖#Dvro[n7DgZ}0TqX Ruj)V-OVM$C~s !ɒxĒ=!"8țSWV)wZ2*eSC)թ긔|KT֩zjiJZzjUF2,:a/B5xX? OCDDO; koiZ޺u)pf5ZVSvi;E;|5>ljyQꒄ2N-RCUjT[Kf20hQ-u*U jJԩRQ:_8R]SB)`k㻅xYxXk/uYK0^/ba.+YN-K1%K<,Ke1^&1;&,"7پ;%D ]vn=u9v]):ԩe.wwj-ojʲZ?j=QE}׃ce8Z 5s R֝Z񓪇aAeʸ?[^yg<,NE%hӊҽvBNJb/%ۥB|QR8b*d)kY!ZŊSA8%NY"$D$J%IVdYV֒X731"+`d;U-{I&ov|oxcOx =Ɨ/~8,nNYǘջgLOZw_h]wSV/*z:NS!>Dl f]\a)aΌ S7f\6K}Ⱦ1q`l!{orKh]>".qYUv*}U=uK]$lD\--Y%/n7]/-zW=Dd88%NKPmRm պRZRJO>ԇj)ZRmե.R\gC<_V/_/X]K}K-!HwںO2>7KfH)^ߌqߵ[~NJ|_ ˌ`h>!崜N-::i2zO+xO(񴖗㲼Sz_i⩨P0K(4u 'iyX, OSb%NP/㔰MB k9CMd\b7YIىin4K#Dwn7O#dYER-=y)!ps̒q#;e1&Ij]rߝnQĥnz޴fؔͩijulr?Skv,JE߭MTCP:Tc9UZ5=TZƥ\Z*PS[*0e<.-C%$NE\"rJ'q%]:e;k-a԰<%2İ4qo&F0,qJ:6~m1e"X)#~6v,&07"qDdz8O"q9LJ<%]Z^YfIz8}{9Rӽ6e'zS]~Ph;Gf;ޝVVSpjaX8DPToNԃ4rqJ,a1URފTM= zE:K"Z;hD+X i-߄%B겜ROS]{9ѵ!Z{4"A,A0YR+A,+8i Z.Y1KDK$ˊ$X[;N+ZHC4n dM޲F+x3v?ܚ8ok;|1юiY[߫yo{mp ]Z֩-wJTjZOеݟ-22'xY2uZ1Z{Sʬejԩ.c˸KIkHeF YJV4UŸKˠ^_9p:|lk(< uYLV<pYX>_-io+㏛f>P;6`{_Bc% a ñQ eG6C\K]R`+{ۃ-#io`}8V>Ce{KhU 7}؎Rx)q$bI\B\n.v;K"U$%?TOSB\Aze/I|RO)%.M\D2.qӰOJTAě`A).k,?JU+Dkj a.NK6Y.-8mq8mO-U%&q␸mW렵VKVas/Uo°|:PO=9qUnXR}V}Zr֌ZS0xS3ee\KQo҈𗖧oB=L,~PYM=U".F^BJ.qYvS߉0EwLZ˸WZ+.H #S"(KS))uKֲ,-^&e'B"{q-˷e[흵^ֲ5kxqo3z]nwwǴͤ޿}[jzC{gyTkƩuKũ:dtRjj8e_XX.8 jŌZPrbf,Y˽h:]Lj_zSf0q:B)e*TOP)qj^9{8:qYOqix?v8b0~4>[?_oW 7!J_o u>RCPOvd,>{q.M=m$b>7bGs}p˪Ԫcۡu͛K**o",Y,ypH"bMF!7)aq!"tT=j}hSôR2(eZ:ѺOZ*RJZ杖j1'ԥP8zSe߭1/ԩ.AO""2C0P}Vq)wջ).]\꒕h uC-b,嗶 CYԇ!KONPSwm!"@"EÖԌbhRxeUޖ +4؈I0G$MB$1;qJH"-!.CB$wZM__IB!N )qp9ܝ:EG-ujn[/s8N[⶝6A|TуVK=u*iuN.{uRԪj_hںTBe^UեM\`1ZNSߵN:&YZ˸4Rj(]Kq(Rki$NNS,X~e%Xa\))˸DSXLqI͢%w$>!MC=YfoA /;ď^+{%iBĻ8H#l)qڬ-q9.:$.a&!N}¡::>ԩ GToZMd*e8CՃ1.UT1,rĥC\%.5~0$aoOTM=D,)PRVk).H\BVH.6hYR:%vdNĥk9FFqZK Iұ2u[Cě$RobEb%]%jɺY!V~ݜ$cG_K5ʚW^^ȑmŗu˿_\^_j}o+7_޷o5jOU{m΍voo]zwNw_NT,Zo.VU.-2NG]Fk͌~4Q,a1b\]kY4H:āNNJ>wNƛad1Ի2K<8<~-eXĥC8 ˟:b0>-h~Mx*U.uwgooYlOr])N/k~7 |-l{l7[8}7:l9Veb{7۩]u)YHD:bI8%ĥN-uzCBD:>II(p;7b||e\S]xOTO㡨m?(ĩԛzhd9m'DS q7ˏ)xSOuK˛l\u*~I7m=-,>R]<$2rJx]㔸{PFnaeȰdgq⴬ qI&8A$)7"7$ȒrˁCrKNSHD^|J8%.SKU\j96-=(_tľ;uܷEޝSS]rj],kě.z~ UfںT1 ݸ4fhѺC:FQSiZqT\:~qZqJ,+YðpG]2cTWxSEcUӽ>CuxW<,Te|xhY;Ჹ Yԥ2.Pqmx*???/C껃`kVt=ŏv.S0,E8X.e.a{`9me]u4ݱRvsvK<:$SSS!7!=qI!Ÿ,Ox_?j(CŌ7xKږ_S]ӊ]E f Nq7u 2ޔ;Tea`1R!!w%.%T %BB]M[e%>Dwĥ8͝0ƛMk-87֬+i-=laF$X NE;)7Zknx qw$nwMRn/yD[Z[[]a{:vuCMU՛PCSK)bzSQ?kk-G)w8\.k2Nq7ъ7ԛČԐ ۛPC]곺Diebd;zSIBI%[IK"{7!.w!BTC,Z:!Sn ZڨPd%%8-rba-SA$"Db-m¸EWnZKȲ$e[+7$n7kYɖ/r;7οz/;^g:||6[ׯ[nC+q]ݻ{^]o(]mz:ζ,mtTiV#֏껵0~aa,0bXƟhiZ: BՔR?imJPRoK9[hťayKKGS]?uOc0>-h~- *Lyqzw?UXNZCo>I,OyYC=ft9\n| /lā-87KKbpsY.uK !XBXnn%.uj]Z$8%4j0ԩS(RJ-uS]ԥ>ԥNm:.n ?V]"NYqKGE]!K>Zui#İ-jĥNZtQs4ˌ:zbԩ]b)5ԩӌS=wě.B%,!.9eݒD2ڸe%Ța)wA0.6ˈw .N1b3?͊ 7aB6"HiHl=E7߽)1!88q!qJj]'_\6T$N.AuN] ujgk:l]UrUUUVQQڵzm1nyrvO,îKW[,7]dYb N6Įf9 66qu+uC]: `m||4|iwo 6.C)qSӓg7֕KìCIuZ]t=``sac:M…0Nl!.dllLbw:mیBX.s61o1(ɡn]ݵai)E[JJGOZtҢkiQԡqhծFvBB7D*⮨&S?PxoP_*PBJυ"ԫA`y>X{eASEWe](a1|XjUX PEu%"Mi e8!>U'%'.hR CON+beb{z^aaDJS$86%+W̋W6]/vqr8]])!$WxV Z׫N-.hkw,ݹb2=\h0Pv\M:~l wfiƬ݈hP(ꍊCְj vJbAkveRk++T<,REE(+!M#,X]q(˩ !pb@;f]#]n1FEreEv+1n`1ˆp,7"na0X5!a$Dxg*Y,˔:.dQ0mU7Hw!nӰZT7IZƠ6جͮ 5Eu88lvBBuSƶ-r7'PWZbz5,&L.ĠBJ*Nu3PkR [ !JB)i X1hFJ,qC!;chdDXj=vIf0balluO:Wb͕#]xZ?.vuL<:=PNٴl6h~&uNmCCUQEծ^ġVm1L0X^a`XNe7: pU5^2'˩4i `9i!yhöFi1YuvqX8tV! a`h7O>z'uS=\&K5C}~[/G;4Li2}{´1jݘcvLlU>1ߦCd76a: 7 ֆ 5k2tjV…]K"1E "D؞'CGT[KKSȌ8wCEJiUEBݵUP-ujUT3ZZuCSԮzQu;?_+]B}!rX>Oԋ-WZ>8]Q0|7TUax)~Va8 DCjjBxQ wS<,)b7 k9nnn`[3vg]i`$vH)l.![l2JOW.^$!2]˳+'D{q$RեV١v~n׺ںڵ@[?Xڢu1:nL(q]5\uTvf1Zpʰ[ˡUM:ծuZvcP:ZnEP jJMՋ-a1C&8Ё`8 q ^r>aXkPw7Zv*q3PwE Wԩ`!qAQ.ÈL!`ElM. S-u$,i}B|vJ\KKњuu uSFuBYZzѢvC jt٭ZNkɠv ˲[˨jtj)i /sa^TmR} >S!*nb%5l?Vriۏg\撌'k2?l5rM s^W={fՏŕK[XYZd|CUG]lSڵZբkm*-Z0uZNck-ZAX o-2irX uSYb8ԡ u_e6$^lv%a+#i9 wSdC<'ۼX>X>~e~eAP%:\8իtؼW6?P_XG?>&qo7?:mNGdc:mL.n]NK]k9myw&a]b%b-[魄"ťR-RJE]Q7x8X!殴nU:TKgFu7PP,O.G-SXˋ5b7dĩS"rZ>_Y]Z^(Pu FZ?C)×BS;i9 u j: C!Jjvuj7b-a/UQVP+%F얛[d6rⰦ2Ms%6ȚeC2ū9m]LxqqbWk=ojRmg' Is\힞.]jP-mSC=,]ݼl^lH5PvZ_ aYn`9,-CuN0jWԮ]`,ZPw KcWvuX(ENEað 2Zb1B`ԩgkMSk- LS|n9[K J5LE"᝵!j9LLS] jMnvah"%7´aa*fCuXRK]QBkW*P"q&02Y=WŢ +>XXFuXvnĪ.jW7VaƠV%iPwhnzJi9 ֊.qCc` " ZV1i$V8D"T)cPw1vDk1beJfyI%b mu\]5$4JhduH$RcXPd%V0LK.4nme{oݮvyJfW˖qA{eu9\.HYmMmӋ]NۦevV1%Ĕsj*][e\ݤ*n1k0&uCֲK](j8 ŰYn+uSw鮊.bCma Ii %iu]?a:m/6:MsmN/i.PNw6aa+ߓ߿\<\8'sq?sZn:mnSӗO>.qnNL&2S&];%•.k]NnRncNLBKBlbze~Ҫ.Rs%~U[eRsh)9ԡԩVNCs"kXޫz qSxމ" V>,b" ]i9:[jxڅzgusU?uW%zQá,xoLjF oīx#>EjݕxH wZ+#3M eX!'X+x5SXNZ] a%02"̙dfSMusmNo$O"Bd$krBoyz.]1z֥..TRsC֡v.n6Q6zdshk7TԦ֮j]Űell"aSVGbHz]NKu]QZ,FԩtQUENCi`]zM>a-wM"XWEj7X~!cxrXvW~a")v݊AXnb7bӈXx ?$C̸ZsxxwY.OħZY6{5Pfmv*qDLz֩N-s66cPa1bs-7K-Tqkjaī OhNoBB #v&] %1Z7c E.eD+ uW4n 1%q氼Cf%^ $!1)KN2"0cΜkTb #cb6k8\E.\e].15Ȓd 5?ÿ=%\$Og+Eyr왶k=oCuzogIJw\l"+]WI\v ۦUV zQ]}y6->h Õҁյ,:wFZn:{eTjN0YvmjsLc9`1uCb xXf+oeO'PJt^M~m'ic:މSy11'603 a .l .wf]Q8nRvą`$n&B$aJu2>Ѫ.R8C)q_k*vEԮn*U:mST*uS}AO'ԗex'0²E}nlv@})]e<eN?^{˲ˠB)CBx+FO[^~a7|wA|.DtQC{5īdY,8m pX 5]bL&2"`&mD.dzEgl tJl"b $.!I$vWÓCՏ߷i]{ikifU-E"LS.\Mi-Ru30uSSp֡*sصjKu]B03^5NU]7X(`1<ԫڭ.E=NCI-,0ܕM uWuAFS!ڍVV br0X]u[SrX&hëb]W#E%8-)4wO,C|oDB{ߝ6WwfRCKl|F5PwSlZwM\En:bvŕڵ֐榭:rwϨ7;sZKIJ<keP-]` wK8A T8.1Z1clL qc. ʔ%^%,2Db 4ĈDFF!HFg.VQcv^f&xlk3yr~yJ%^.\mW 1󳫇>>׬sNW[raslZVڭVVQoMYncy5|bDb׺ᮨ,kaPVQw{3w?6݌mjQ7EpS,_r W~w]\ޫPE=ԩRRE)TTz'>WU 2vUn1C},$k"0 mqX`Q?QC5ϖ7zX]ĩ,t,]P,CAw\D+RqE.8Dq n b-ac1!Ͳ+!vAdfm"a-\DB.HZwvusq*qK).쐫=xrX3E[mrz%HJwA 5I$yFK:|nkgk^raJ4LMi4g9boB(ZԫSIFmCkѲ [8i;l Uu:j tU]Q6|:k-olqZ:5XnSMlк)UR"ZqJ-`-7q%-j`dY&a[;8EPؖ]6bFÈi-.8-V&NS--^$]G-LqhiZ˫zQG 71m-ik9lU]S<ԩG](Ճ*EdQiթ˨8N7˫U<[>7uWC}RB7+ZEJ=T܄(@F5ƈ08nPbKlai%NS.qJX2ī &^%n:")^JC"1TD0C"Rc%C3tY00%G.Dr}$?5'DFX #q_[!]UBtle TDZ,zX+J=Jgb1ZE={cU_eSĶV_+^SA 7%wp!,fmiA 7q%2 .Lx.^J[.\"!7\5 rgܴONw.h{SWgW:+\ԫmzU^q97A}v؆SXe wE wMʒWerxs10 6-.~mym;||a_?㯿gYw?PRws:0twM|67v0-xn2\7Ìz5l qɼLW7ꮶ9݅#m[1.t6I[[+JzgzwcxhV[mP[ZUC=V&^UUPZ?Xޫ *^UDbJEėZRA}2XXz:>(fSKU(qx'Ĉ)l:T75|^b_ oUbWA=LsbSPb %rrʲŊWkq "`"w"rqqʕ`8%rryrpJ.D$rܮju-=h.mU[^p=rq D3o2:Ls؎NOV53թPa -: kyQ5VIuRh/Mj1<,$b, RRZ8RgPTªī8-wM|d[ dk-(nlby'P486/b&AŌ<6D. dx\Ear)qjmZZË6UK`ԩh?3}ʳӘMUu Z u`"z^-U[_;|VNQ˯akԥ%*jK4Na$$J[k 2'/UB(pTⴖBIE0Xp)qJ$I$ s&5:23 !%̧J[Tuj#><{sZb[CrZ9x(0W ï,?_[ʓS [4gm?ljyL_La2]8iNSJ3¬-ZĤ\<\n":i&h s`&8%N-a;hKݥbnxu(ZNsxz(ZOMCzPԛP[KZaن)n7/L KWW]Yeߨm[mxo ,թZ񃫻\~0 7OO᦭_)azZa8ͰÛ*ԶNS|TBkk$EXwCirwJmq7ï.,9χm9Ӝ p7Ӝ)Nq .*ڿz\8Fxr8===9=Y{iR]h{&W11e֜kA;MdjÑ8l֫D֛z;szQsj%ZB͡iaQb k9]XUtuW?Zi`1XU²XGuSؖWPX[]KY2C2bkhFe^ Wð-`z,[IpʐAhiË8DxF'ӛzb9m: IBq[8Mu ^ŷ@9:mqj+߼S!~f9X fQ&eSQFânBYN\fV-Khb[7Z?">-[XJhĩU[HEM2]j$Bx/:a|j-] PR<%n2Q˖)qJ$H"`\2S#v&\!)ɓp%a^H\\5-Ktp8\,vpv ZN\zqMYGՕy)ȡ*UiPl#ZC:-,?Uwkyp*)q7lW;1j|-UFW`pJ|4,vꗦfym[CMY^W7R㏿˿s\< ;OtN77SC`,ߘxdz8lvLdz8rm:ujě ImA]l9\lq`5TYkK7rSꨢ(iT[MsN[Z[R gR[TjWYQj-{E}PQ[<'KlMz o2lI|%].z7uSv%jw>VwE=]QYc,Q}087Qb["NQWZ.ϫڅ-E|38\S~L"p8̉jM-=SY7hguڪq֛Z [Y 7 `ˢNᦖE-3"A%!ij^K|R]ě GqZk,_-nb&fu`-,Urbx[פh7/i!E`19" n2āgۓS ݊bŴLq"ëJ_i uL:NGMZo>YqJ^%NM98NE&eak9ujFm˩fU,j.RzQ[ `PCo9SlHxX"f T[Ĩ"BN7QB"1TDHzo40+[K2)6H0\9MH˲u$qzzZV+^,]ZMNp3m9~cN5XZA-e !>(0p0:- _|•'3OG3+9ީWv+&~-`!>M`ڎo1B\PWY npAZwt8AU7T9SꦘӬ+ayS[EiVJm^*bFZgö7[~m/!>S->+꡶ںIb[7'q MzXu:-Oju~#>Jܔ+e?U?*ośgw7qۘ qh=n-$t"!B+'o8KKw%C.Nūqx7Ox]K5GZZ_k?LuZoppR7siji>9lӋNc8UQZMzϪnZn e1E5>: S{E oB=rWQWG aW]tXk9Xn/,ۺUh Ema NQ&N .n49"n"Ӓ9=[qӛoL݌i zu0u88Ɛ8MOQU<;ԩm8[YrX:P9xpsWf[Z[|)Kb Dj1贜ƐxaD*Q%īPR# D4$Jf7IMdH$N$c$LY50jd&9XzSIǑ#.qx<9"U"oNWp߫Nߞzf}ՕVVҫ^ëx\JNUG[բN=s=WF-j:u{EmiBW-`:_J|pp7m9>9-sZeQīEmu9e*~ey7ޟo߾}ݿw=Bw?P_ޛ7 駦->p7WIR\bʒI8om09|"qqSuEmR[x֩^MT-֫]K=VPpzjSQV7UjzQV[*jWC=ޫ)VV[@[mnkÏ8%~*򪨇z:%Z;I|l񰼸WC}VT]⿣U-tJ]"zOipZ 7VM]l`ð)&! &Nm:eܔxp,$ a[?"!Krvuj%N o.O 'x.ɐx Og%x'ۥեVt4%8SLsq|j}Puw0Mě*4leje10^ɨPhxmufWTrSuWB,M 7Cwk9նJt,o`5p*7!dx8mB}2rnZw"k?X7q*nDXnnl+e{9m/78^tjE.[8ʬK氵1S{*U+qZ3s^~N:j᮵թnuw*,ԩWR/j'[iĪ^oLqxhMVa-%ԩ0֫Ķdhī^k !%S]Ae!JR9Ȉ:cDqa]b YIq\w0]ɒkyC"G,zS[}lUUjRz~fj_~V[bk-6όKZ/)^Emԩ7U/a)L⿢jĶP?Ķ< ذTEo.7V %% "Yq7> J]MÜI\90D\e bvlz7'C%5lXe1,]&ssqxƛ2,qH,qK\a͎XjŇ umlZ;*ꓝēXj;<8q3^Q1\jwP0Ϧaԡ.f*jTC-nRj3_he!6A2Ȧ6SaͰ$C VB$n&UʐhJ,PPpa2E\D,I" 8$$1N<'d Xvr2*ɘ93C^ܜ=EbdYx)y,/;Tyܴ6֙][-CޕͲh}8 ԡj lzP}7ӓ١.Q'?owhRmf2%>ʹ ˤgpQw?#߾}̋W-'oYv6Eqݲ,l>acM6l^qQeײY6pb'"N%l}7%N8YvD89y8Rj\J-qSE'lCkG͓UC:B-uijv8dE5*"^cٻ*j;dx7}oKŲSWcPWuQuS9N}n⳪2)D|)_՗°L]ջd׆/M|n "n2:ME 7D2F6U" !yomlj Kɋ3b!"7W:VT*CooۉN糭6UgԹlnJ^n!6eS6[Mꢖ}t0Ơ-CwFGՓK2U1ġ.jζ&ûP7EJ $((.5}PK\L_f]"dXQ1]Lu1ލi$Óʰy&jC&9,q &>Ļz-'IJ{yxz1!qhvGX6Nl.Pa'RƶyRd{uveQ{zR;Lbw'wu:E-gui=݃$ TKo;U9XJPe[Jeb8!qhmPKQ#ć1 bT6F7uwC\! eHCI$l$$)Ƌ 7g: /-d8srV'$8hբPKg-hQ쌢uQ]QCМ5\~OݻOLvgX ˤUuqU_fi3ӿo߾?7^-x?{oxf Ӳlkq.6&A8в[bsٓ8 '‰]-ܜ6nM٨*jP)Uk)uh'I{UK@-u[ji=k}%xU}%/ ILLeaz2}a nfScZIo)ꮮZt5VgUWU[\$n&n-`:ԟPmAZ7$ ae &(p7sbE!8d !ˋlيtgD8Eų8["1NNN=8pV\uQz۰7rL۰n6g]msl^iؼkmGn0f)fQm)EZ2a}R2b0ɠu34L4.J-Z:Ek CA\ 0|ć2鮖b:tNjߒ8ln]%q5I07*XvēM|x!!j=ڿɴDW;&>l}u@Z-,ImLƮګuhyԇzW>e]E]ɤz4.o>0_ a & Fh$#""q$mZW#¤Ft#.F\EU*qH$A0 " DF"wC1F#"qDv-'=;8IvH}s8nb)gg:t+5۷pfӪ嬪nǎZεqp:E[w_dwQ>E=zsvK(v?7]1KćgCӣ pQ7ad3ӿo߾?慸ƫ_s/mnv0iՓŲ[6O6K,Pfc uWqZ696-;f,D6!;2,qYvjIU?q-ݝ6֪/Uk)uh%ZꪵRQ7~[ˬ:~jP-3/,9}[b)X.jLW {7<(Cq+ӡ.j2PԇCx2ăazWV0%.ӳE|m8IL6?SC=(cu7>E+2q3 K]MlI sn&]zq>E%twQ/ `x4]L˰ nO"XJ'0GA76bLg8E<`z}[67ݾ;$u ۫GG.m8lԣ vˮu({"P 37WEݕzc:[t(Ӳd'sw?Z0,a O$W{%HB*"q6˜B3j0JB6W06%g5B,a 3ZEF2+.G! DbNC$Us`4'6f2l/I!N$ueeN/'yqsvu~ӳVLNgg17yZ-:3J;NNML٪uƮdݿqOg~.6zZnɶyONRB&>ʹ ˤ˶I-u7\t=>~a׿'?7ǼƫUEE ?YvebcgqyKҶټͲacCh]tXlW"#!,nd9j%zRщ͓:UKTQJZO7%n{uZUj.{_w%>oBH|!~f]wm;ԃ1]ćx78/Eա.al3QK-oj%sZC< 7qJLZ'YģxROx2e9EEX! fE U6"!ibpv,ANyqqKs$-NICɔX]mݲc;ZW U%:UPK% ZĆoeCk2컻:E}pSLWɈZvZ7gA,RF?a0pOQ&uH,U ảPFJPTlC"y bKe҈ "$U" 6,!!Izr12jHd=3Cs]m)俻$$K8Cl3%yyq8™jKUQni(.kg vZ9~޵.Y-qS_gcݻ OtaM\MneKpQwadl_?oVKul6+%> +I| /l^]ćx9$'K뢥lݒK(NrY,uT+qhRwY\Tݡ.F=zVݕ:R~jpӺEEE]աnI@}!ԓ8ăo?Ӈ1X0_~Cܘz7w$3E=C]_6-N}2,Ӄ0|M|mnZC ēB}.q1C\M]A-u5]E67aC٦CCbODqUN/$ ćŋEjٴUNuuDjkϥ,;uQjvWôxA7ۆͶwK>.j:컛:uu:}u(jNaX5Dj;u3% C'F[tѤ*.2\bi"$ݴ C\ՌC\L'!aۈ!*[Y6و &nv5x8;)vvjRl~jPZ75\T]U3=fNΨ'UgZOwMݲk%W$qh-͒"4#Eu5aK$MQxxu C"qHIAD&H$Hb#3ch8jƾHNv}.gȮN^$}Uo7uעVwsöw9.Pw_*ZpsgIm}}keR_d!jw7}a_?o>;aCeN-hx&Yb٨%n ëwqlrrqh-uI'ya'ZK-qSٴj)[ZCQK=)g6:RKZjZn⮾RÃ(C)a0!*!~˜>ď9}P숋:K+]kuQOPMOdL'ӻaNObMp{/z?Twuf}ē!.dd0!X+I 26s'8Y"aH'"E86Kȋ3\%wRmRԭu8٩8̉s[j.jI7W/>tճN}6E]n1ÜԡpBCQuU+I]/N.6K]5$7<@}VPa0\aȜ5Ɉ%Ļq3]L_:s˜ai}R7W2̚`LU]Զ:컛{;a>ԓ0hw>lR{F]%>$@$T(chaeN(2 %qH0ö:$ȶi 9dL#u3f08D!8$HH,C*SȌs%md!p:99: ,gH?om͢-ILjƶYv!E}gKE8١g76پ;MRzvWwq5M7YFN_ &u3]n/ 0_y}}^x]-߷ m kW66K%6?sr3,Y}ol8f9Mk)qH"DNLDP",-qSenJ|-RԡZK}YJ-PKCk)7uUzK}P_PGWԡxRK\ććPOoLs/ Wt7']|x2,>i颖xM/PR%0i] fe,_GgM}0H% nt3x2Xv[$n6E"! B.YKIN^[B,r:TKUREQuSiw=WQj?D7jPaپ{y.aư n0}6qS7O00w-> к)2,PwYT}Gn ~&20$C|21]wӻ+ÓH&iNwMˈa sn*.d8U.6f2,S2l>!.&K;jnv6CF ջ:(6T1ؕݡCn+8axPg7>E=j=J]h>,e%CQXaD(!1@D56a s*j\%nj`(82xnJ]$q! C"C"S3tI#Üfg9YC']dƙ;{yY^^\gv!gSjoỉ֡oPj-֣*ZWoo~Ei-١߷O0\L˰L&>naau3]k/L@G^__}_WgRmаLeB|%KFg;'kͲ| CQM*C ɉOjR_''vfҢ֡ZnZ߫ 3uWVOE}:Ojx4njGPu8⳺eޝ}~d0q?TuûZ⦾_{QOqeF|elB<]\ _ ´!. & >$nn&.beZ0㰹,NBK8˙{ "KZ=9TOozriU.jY9;ElUl|n^^PWpⅷ7_EEi K1\ROPƠcu5CQc>:/ՇNg]E]M8 ďLL;AB{2bY4f8Lq3.pq1ģE._վWALjGN-eU7:K}N(qS7&n;ӝMꢖPE=C=80kc۶lQ>ٱMItgTvuQZoaz5) TO~fx *ci70:.Ik3 11\a#W9%^ 2G#qxx/qUb$$JdR,L 3IƐ2bwΜϖźpr&+_8Db|M3'β|CΫCj9so.A<MN[6?~~GSrb0R#9ٝmpz"MpU%~t30vuV?ӟ?ߠ-gx&DX8,XAMM+D1C<$BUbYYPXYz& 'JlZ9@pusV9{v~vEmjWV-+jS5\g;(TL;qQM5j0OszjL;gB)qU7N~W]oLuYJ\.~S|`uWcM1<wAeE,/´YWMb qb9 VJPݫ:6{ԃoԲPm`j(!R1\v1,6Uj 9᪵FlUQWË q'Ab$&MXey9IF$rq8fYlVd9D0+g‚rv>KH|ㄓUVW-gΊڵv_u^rUZo(Zo?\^ '!vu8OZMtrs6I &zc2=k]-q59ڵ6i7X>7oC|񡺉/ڌfp~E|\xk&8ʲxn$Spi9P&`NjS:ԃzuUjڕ6U.vڅ%'Q].AQ~UM\ţx`}Ԝ;njx԰ޚӡމ`OUn7VtNܩ{%nCMb* ]z0<8)L 7A ,\9,v"MEJ"{AUjsrhRWEYl*NGU*jYlՂZWbYaԃZg/^i鋹Zà6[SsfM1]9WՋ]+ꪥjsvMP?5`No4CJ"*uzcWNW;!6NݬbxkvU=1Lfz8D jĽELt2 Ӌ Q;qăx/񠊺8ԋzj szzPU/jSԮ3Fٴ %o`bWc~j\x,ZZ1/U"a %b704F\i WWxJlD,u0eJlŌ$S"dqu>ZWIJڬrbgNVD8ī|FQWUUZ}֝{kVꍺ8qzUOޚ~n&d 79@mjP#0^=HLto>7ϓ'Nv\mbzn 3+'Pov'VV:- uWWggPREQ7JXTQz>TZz.6EsumuC=QQ\[q D'Q<ŮvdzꭸLggpouTI  B>QυbWJԋRPE q]WMlx"ċOL;\<>4=1)C [VwՋ,6dbs: NlbOx.Rq'ԮgUݜ*p.brvgWZ+[ w ]M/4Ltoa3ɰ e40&X] ԦR utTIEq5uZLFl2,L9C] ]tUOM7ÃӇB7 w`*>S A]5bex8%6 xcjحeY$njߩC\_[<՝^Mʂڬ͗/UqrSWUuX]69Y쯛~łůk] 04-HZ0Mb3Wsv˲$ZJ6ī1NOLbWw`;SӮvՌիڌi7cxk%.LuWRƫaDC]MwR؝Mlbwvo@E~`u6'x뇋ŃxnQڥZ(u:,+wj3Zԫ9 &;MgX=S禛a:  jh"պXeqCkN+qīVQ@M㭪&*-b5A"qXV0YIY8^,6+buZ.g8-NgZC$͒6U3]}j&qڭ.}B݄ fa]1`MX}"5b3ꝩv$6ï jzoezb5o_~?sN9DL-fՋ3q*uu7B,v.nv'^}x".ND슢+"١T*q֦ԫ֮ڴnJ<Feu^PxwOćCG_QOL/UU\MCUMoLU bfd*° H- n*j-j=URFk8ԽZl6EkSaEYjSW9&ŏvbզîvӫY՝xv8 ӫzĪC Pt֦">3[wi7\r4~U1{ {x.6:}$^v*_[=x7jSQ\vqsUudEm;uUo/gGZXu/1_5\ K /.$6cXW1I\M^Q6s$a*q&qXdt3Mf,2#aIlV*'պVW]XX]ԦE⪕wI;Y7v_MlAݩok=kZ[LsdxQMwLOM]dKԟ_~?N9P|~W,f5~NWW%ԋ:.Xݙ!vqaƂbfY$Z]O,6uڵ6U/ŃծTQmujjӺAUm=JmHQ[$qg)$VL0uvSuQoUuo}]_R:Lu3u;Mh=XUW NpXxӝb*dGlZ?8D"H"?SJ[jڝSKN⹪ªK]teZYj.v5UQs֣ؕ;EaW7fNV{AbW>{ nuޚ3jm^M7G5ՃW~C6⽺_1]qů$v2ŏ:6?zk K-vED\[zحuQ⇫3EU}>zk2m]O>1\ J4{{cTCWcSbH^MLP! 7FLHAMb$g 6A.6"dӲ&&'ͲX߿s;YVkmgNI[Y]-|k%^%6{7WN=PZgj=kZg)q1=MOL7M:PEPbWo4^E$Lw f??<gN+ׅ[2[sklo+M< '&'VNv_ݙ:lVrbu]j8ԋ:,nZԽڭ,v[j%LOsF;=&N[U _*u3nCq7ٽ[$~"qպ i7}._0_R/ ^ݩWc0HX5=tRN ͬLFM7;ĝ5Xk^ӃQn/7_S^tgؕ`RMgV70]]XY]ԃzޘvC='tSZmLfRzk7Üư6e؍SgFuCuh%pjWbHU+(nڔĜFʬ&T”8ԫtib,LXXX+͂?X-F.vEϖEWD[$|"6_+~sJ\Ħu8P_obWwBfI?m#`? %mw"~AwH-b͚U5&efQf-z9wu8I=fCfˏ?LyIG dtcqi |(C*b5HFvVl(;b2 VHJ92+|*gQnT LʕNrVQ%N\+XtUl(g.$.3qegDⷨboUQ^QYLJ9(hQM\('ͬ\x[Jxlp\~QuY,6IĪ;IE fA ʍ*1V.! 1mJʬ&*WJٰ+BLWJ9(R(aP{ &5iE Vd]ּ,vh:YʽVʅrLP.Wuh\)'Y9r%MubVfʤlؕ IEW&1i]4QyǨULI,zw/x(Mݵ2iBUAŬ20zOmL7:xsV.5(GeU&=*эܫr(V=ʆVK͢xi6$%nP `$2 eXZ3{ ]bX$zi-UfI@Cg@B]L8<90G7/_^$1UnO$U]UnTyGך :ݬ=+WzfYwh!&Mq%&q":{7lм ߾}˗/_~3U1 & Ľ;_)Z1ۙ=;ŽrVVeUV*g;ge FA,fʪLʅrR(U{R5Fg2)jWN\(W⯈I;++q/t,~E9{q-Mq\xGYYT.wu! R/+@}PwRfA{$A3 qG1Ng1 b"aG$& 1+e/sX$D\>IAUUJJ)[b(-UV֠PfPVP.Tk&#ʪiֻmp\*XbrRʭ2)c\*3ݢ5Ktg-fE\5ޝKE;]RĢOEݤhhʢILI:;8gJHw,ѭ8YYĪ700zi]jjĢѦPr%YQ(EnViY]+\&1)U5GefA"~MwҚB+ywWbgubUt['#xYFʥh`dLre]+ĈѶ54XF*gʽrPm<2 4)FAJQbY|BEySeVʦ^) UՎYU&EI9(7 eReVVt1fV;hʦ]jz̪N57ʤ b oɤR('Uv{Rv;ڳcG'CE)PfRΆVAS(IuhД+P9(2)meU;IwPĪ$tZQrRqҬK]</{t-YTL:Uq!6į1+N-n]ĦnFOQc4O*fQeT`6ZtTVTػl5ʽBq.>v+;WJYŬŬ쭊epTJ`V~]T\)rTu2knKY|Xy#6Ŭ|Ll+MŶ~2)z|DyWYYMoѻ_T^/Y9+1iF܉{A \izw%bc1FHIbSĪTYeY|,"1('=ʢ1+Wʎra~o00P&2+\i&R)FY+gM;Š;\w"fX5Bym(Es5U*GU*-N::Et(wbKU!1̺*]7IŽ/xU B100Eb5ݪteQ { 7ʢSnY;k]IGU+Eʽ*'1RMYx(TgAktO5-eHR5*G;IE#VqAĵY`if 1@7hUi7Yd`W|ϟ|$5 h/G'=K堜`52T{֛ Un ʬw&feϔwĤ,&ݝW4G!.unCL2)GwK:ͯ*OY*Y-zʫ64GB\ NHsY*geRo(vloŕlV)>-PnE9؛ػ5g08P eV2fQ͝RNG^ͬ(ݬiݭ 9iByHuP&!q)'n֚ ͢J*7x`VIYŪ,NtAŶ(n8Hs1zѪk L%nV&8g,QYv&V&e)⨜ EZ4I/->\ 7$&UN2P!2b0kM^2R5VĭrT>LA=SoP>U>Nݯ(F+(6Q<;iN*$DBL$ĬTޤP&U%fĥ8[P&>r\*vxsReaw Q (Pf5ke҆Ѣ,JIYF[MC7Y[fSNĪwfњqX{Ťlk&ݬ5ZAQםt[o6x2)YĭxE|Xs̺[xEt+>PI@l+dm+2+ʥxIw:"ͽ)OT-E.QU\JR\LZxdap/qR$1iM"*F* \kRčĢ' ߛ Mz7fU&qSgۛIRIbb-K,|q8ZI9-(` ٨PFʫFgUUfݭ2i YYu[i{ŅX ͝nՕXui>W}_~F;Qcd`t-},v.ĬbWʆw(vQVY*N!Ayܨ,+4' ^㑠ŭX$B$f!fDĬ1+eRFB1+bUf1y3 bUʅrVnʭ2`o޵r2ra*ݪѕEkc7i٨[w<;qc@3)'Z)t]([ޖQ݆AY9)MFgJ/VEuA-.YY!HĽ\+uwd0=PٹN\(N܈k:Kͭ4ս2P$BlKSeһ{!fmjV\j%\kNz7H#&nΐAh{CI{F5:M%j4d'޼7ޜ% IbmdoR. NXdtƲ1͝2v#miʍ2kM^׭UP^rt',to߾ׯ߿ǿTWvF/ٙŶ/VʭXYm;rVf;&Un U9+4UʭPVQ^RxG'h4KA<0e`bSfQ])' JS&WtfCPIVΞFȞ?۷oSyqV&%;=⡯\[J<4R&U6fV+uerT3e[U~EyG<W,|@sbGq+&q6 qk\ mHuI-z9*[ť,V1Ibbq-(GeC*娜$^YeR(,feQ(v*jldpTVW5LzhM sDsT&l4ʅu FeĤʬ*"(Ewʍ!f#{Yw.x(&YN)ۢ^ռ<5Y|L)mN"F}\jJ,VzYĆ`0X ap#JRRhfrX$.%F$oUY$69ydhbte޶,1ۻW 6Pn2)ЭgʅH'qѭUެ{G1۷|ڹgoT`U;doˎM;Ć2+̊rY9kW-Vyl+WbC"~P<ƀFK*ͪP&ݖ汲(GQ YUqV[bSl ,Va$XE*(qg,$f^[eQd( atj0ʤsYݬfһEkf]jtf"z7+*ʅxLVk&UNv;T4Ur+6 ,YQi'z7♘KR⬹RFIGќ Eq%VRsTĶFw2S%IRNQ4Du'E(XIOTyQbQ"bĕY3栉Y&LL8I^b8һFbIK$fMњIw7g$FEG>ۛś|lѻ+hjo@qRyf 2vC3#UyOwtgKʵr;KޭULqMo߾ׯ߿ǿΕ=;vf;WbsPJ*rP^RU) ʬ[VH9((ϔ VyUP*WQVݭx&N!. Ī b/)JYŅRZ$4Ryfp;+*! |L9)rTn +'EU& eQ!B }Jep &q-fq/D^bSbxdͽ}n\J~2Z `agV{vV%EM=eR6tg͇kۖHLκt4'߾}{vQĿQY+#eؙΕ"V;bY(r8+bVDJ*U(jW>*"ʯUE4"% JʦDͪ{Et ©0a/4naPe&[mI2 IΫ7=Agu@\P&AtnRޕs\:h圲,Lʂ4JZ [AiZo~3=eұep%sX5lldkarVepNx2 @)o"(A+x5i:'ʉt| LeA7 fAxީH7)U. A]ҹ"ÅIIPn4 z]gl+G0UaޅeY9(¨5̼PՉPeg+QO/MsF42%44{F)I9A|HRN^J^PeP%iF]#I7xu4e( z::zQs,ӉW@PV~r̅T &esPDiYi5;].I9V;DmI5zyakTQ eP[[$,zy7M^{`Kg[Q!(Is$(¨\m4Q9fz%CLOOcKG  4ᙂ2N;Rs&֨sVנ‹#aTA QHfһ9(‚W[I}Eu (wKA\yYO*"|p4JZE8:‚"̕QXTx5* eۢ3a֨x1ټ8(bk12r7Ji,Is4J4d 祽AL%AW 'ҠyrYv  X{D2tҚrFs‚:aT(0m W"l'0J{M3 ^Q{ $O43¨, Al]3hFAyvzץKG$$V_?X~:z:=W 7i:A뚃0 ›pNOrNaRueҗΤܬ:6b7ifH{KҨ5V=믿Ogәl<_O (6w.tlL$ы7a̕BQFeR eR&eY9VnPnR(gK ϑ/\M8+,+NyWI8(t۩;"|^s",0aA M8Qvh[Ne ̽2*ʠ`kNcUU$%MӜ 2S(O42fRiiA4DI(r*g.ܪ, nn ץ ҩQs3m\FiR&ᬆLU44HQ]I]zϓ(ǚ[5,{- J0S (iDŽQ|aΊ0hn"itFv^]Nα.I;IMәiH]sVs]t(&eP4oL٫EA5 `&iZ}]F=Qǖp"Lʱ֠mnlaRE8^M^\IYV2WVnR(Kʃ*iʲYO;&nuFE(¤Tʉr2 WmQ:IyxWAm-\ѼIfgjdJLe̥& fTDt( aY,]ќz3[gmt"\UtvF:_/ʢ=OYH'²rEz (oJa.J±O{ىN "h+­RIzu2:*EOG/CO H]sY&ƉynAs.DPt4;Nۥ4wKY6VΨckk_,(3(l:u2b`maA8A9QB加&h%U.r*kʉ"\TF9p.K9u֋QCC#=A3 F#Mr,(#(OSF|JSNQnvf)"¢hv\*iW|TYEJ[bVL$荚Ao7際a#, !J9?2҂A6ҭGj\^o#زV+ GޱݶlxqWobR(3H9Q^yrEY}ʲrIxD9p"( ²rIyΟ&7pN*U"՛l>(A+Fe2ml|PXyLJ#^ek!BhNe]3UrUA$˗+w(p"\Sͅt]A#}JfeCU&=G#) ʏFe/zϔ43eT4p ̥IA֌ROCU"TO;Z"(pQEToF3ۭ&Sk2 5>F]IH((Wl^AY4W4]ҭGjE6VΤذei¨L&Fۭ͊08¨{l ʤ,(ep0_3)si}7)$U~}" \l6᠜U  ʭʉ0)s=NoY;(e'DSNQA&9(*\K"F%-d)"**"T+%LAʧIx2 J"\|ѓtuŋQC#ݮJi'ikI9z"l}4I3 E4}4hF4 42 Un:t­0Fa[[ldjͱ"PL'% kL0*7_ʓQϫD,KwIwhVWsttz6CY֩ LYaT&eR&eTFeCeTA9QP+ו#na' '­\+ʂr ܧ\R+?As_$EXa&^cAoQx&l^9 Uة1)RޕEDI5;U%L^k^9QQi'-)0)D8QP8' UI# 3͑2zOބ57y ‚f}ieeI O(sEAfY 7;FMD֜DDꛖ:I3‘^1h[ZsE}}ץtu!!70:hrP.Kz #%.VjOӛ(%D]Onl6%x .*3[KJ]U*)YEg ʉMP/ܭHU~F_"70_o²2 ;M8mز *yeNm 3ز>i+[U9VL{-2'2aT&eFA~e.*²"U |PF=Kwkʋ^ӗFm SAҌtFeT~Ie.ܠ4JJtHiT|TFUQިtA]z2 l 5HtN S'fQtMOEx;/gݿ.3Fez:ނΩN.jf_?V\IPFaT ̅IKʨʤʨʨAi)R.)*$ s[P&IgY rVҌ(ݤyZ~՟wIwq?2zxA2*7JGʠyT96p"jL#TdFUf"JA<h%ˠA  zhnшN:WʲyhZ$ 4L{Y. w(nutN&+(*UX *NAHSʑ0hdi{Y:UjҠ,;2n,+6LYh󒔤S(m&SkYU"4 mgѿ&aRFEb&*g&e5OVyPp#DauqV9/D5r|LҲ¤|",AIo&o&()]ьҤmDxDxPgω7*&aܠ‰r N&(+‰(墤Q.ttUzDsQ#ӥ3i"  ̕r]fr,nR}h\JL ^WQca.I hifʩ4H'NC 69s^,mjKzg=yZ~ިs(¤Lo*¤^m^l˭ʨ7):'ʢtI3JG$5OgDłYi~< 70r*M:w(q4eAܡg*?O)UY{57h$+5*}pI8(ϑ4˶CPNPSDC>j͂TnaJz JMAnB4K:K > Fi4L;f5 }`l\5#zw댊yZ~G_?Vm(g OS(m~|~cFӜW\J43.inU_&TubַJp$5GUf,ךAAs">%+\Nl A3hdkͽ»(,yu%+6lqe: gj7V՟`kZ>Uz-%W(%0*ץcYݤz_Ղ [Z鬠ʑޕM4"(eYk2di A&D _" ʉ4L^Zлbc[w e{DpPnVccZVV_wzIKea-d꒠|WjKw(r*tPD$LkRAk"TIִf/Sc ³%iwNs"7v^©l}#:FeIiZ6VjZVA+Dz:ߡ"˱pN eaՃ}eAXP*?KXV6uAR47HE "TgЕBڋ52e:VD#k.JJ(MSFAXkAzjsF'u[ϲ= MIZVjZV՟w!74_VV,(0)ߪyLM¨<, WUQmF˴S% 7%̕AxSJ"Btv2($Xzһ4WFezM4GҨɴ5jxJuu{uDouFAjXVjZGNt(Sk~,!(+oRY \8F7K9e.\*ϑ5%rjXrD9Q:L8/siК\xz+n[>kq's&]gj߶ZVjZztT&M$v-eI" $ܡU2 'FA¨W+s&aY[&Ms"L:Ѽ uXtDث^YDޥcQfQEA R4ٚc^EnYgO-{jncZVj7׹-QkWD ͕Q~"aR~p"*%}2RU(^8Q#e&PSeQAAXބEΠ^"/_ZVwTjZVnSd5=Q!T:g/V&Ύ,%eO~2FM+R*¨g( қpܫJHbkDx"z/[VmVjZV;[ʦ)٩~eV0U9 )V> MxHUث&eQxPl ^{g*zj,jZV՗Kg5g5ՓQK4;&Q Ҳ*;nT+/PNGm =zϴUʉjZ}jZVWJe ZsV"e#'(Ze.eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3EiTXtXML:com.adobe.xmp Adobe Photoshop CC (Windows) 2014-02-24T11:05:48+08:00 2014-03-03T14:19:24+08:00 2014-03-03T14:19:24+08:00 image/png xmp.iid:9b77b191-6883-b34a-800e-b034ad617035 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 created xmp.iid:b9f03e06-8a9e-ed42-b19f-6965f63f7488 2014-02-24T11:05:48+08:00 Adobe Photoshop CC (Windows) saved xmp.iid:9046a85f-7e2f-e544-8a38-689aad1d37e0 2014-02-24T21:32:15+08:00 Adobe Photoshop CC (Windows) / saved xmp.iid:d12f1ada-cf8c-634b-8a43-118182aeff03 2014-03-03T14:19:24+08:00 Adobe Photoshop CC (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:9b77b191-6883-b34a-800e-b034ad617035 2014-03-03T14:19:24+08:00 Adobe Photoshop CC (Windows) / xmp.iid:d12f1ada-cf8c-634b-8a43-118182aeff03 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 3 sRGB IEC61966-2.1 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin 拷贝 Ubuntu Kylin Ubuntu Kylin Ubuntu Kylin xmp.did:b9f03e06-8a9e-ed42-b19f-6965f63f7488 1 720000/10000 720000/10000 2 1 1980 500 {1 cHRMz%u0`:o_FIDAT bjْ Hs]U nY?4 WZ+U6]!@Nh&m>p}sm6gn"aV$eXm"vp;iR0 0 IKp; ږ&I~6|=f>}[m 7&mW#^ 2tApaL''2 0 0|KpY0iM0ip&X6Umm#f}G [ pZn*0 0 Ys-yނ&a0ф*h Ix! %$j/lhpPi0 0 %&K&LpAޤMڽ4giÕ~sIH~v]=VmwQ0 0 𾖆,K6 In 8M#o(|pP6§&mGe8K@+l6ڛY]I*0 0 {YcvXya&.5ipmQ@vB%li#l5m]I$ 0 0 4 -myd–0i_[~]/ v/]5\m o>F~Ѯ6$+hJ#};kk]aG-齔LJaagiXȒY~0y+^dp]&  )u]eNh{Y-l7)L{(Raaam%KaWOfmxp34avn iopGدDKrsAv6\&RvvPC;!նvoaUd;*(eaaaxȒ} Y°G,l+I& A|r K(kppL8W+=FhGI^$ERQI&$)Iaanei&6Y#ab'n›]mvw&aW#>P|BM0IrtLWv&}pLF{ڮ6ڳ&m0kYYFLLaa햆ˤM~OѾ  kpZ/^$IfmpQC;&D,R|"} ݮmO;S8@= mK{iF.fbU2M]L&eaa7Ax0 iAY3ke8KxV+ ~&\Є"0i{)$V>tW'c9MY hOe#m'Ҭ\ʓL]LkU2 0 0\giAAL6_}Zk+g/e:ʷ~& Mm#\!KJ9pji8۷h{+5ړDR6FIr*EY˴e 0 0 Z~M_2|L{$UIn _[ ?JRCÕS '7SIaKFeWҴ])hmi®pL҄I2=++6AEuV+G,Ҫ̂6 aD6Y4 6+k2l4acmx݆[F9$Y,[Ir2IVIaa, li׶m/ &m-ʬ7JEDo 6kpGaW4頕KЄbe0smn#mF9>eHr2Iwaa[ڤm4aha"L{I-A4 +)haK땗'քb uAZ"| iVIrZ}4)7&\eHJRaa~ '&mh_^i''+K}3¤ 4 [X@L8(hiaxDvWV"|:i6 e^)4)7&\E2IY0 0 Ï/[ڬ>vtC݄= {=ҽI;K:| "|n/Ep[݆٥Y9$1eYRn"MY$A 0 0LKWڤi{Yf#4\ ڝ˄$@گ+h/¬U:WX"n{u0 #B{0 GD۷6^iV)J$&ҤL_rER֒2 0 , _?ږfmU>RvO"}zA;WYeV w(Ytmu[p\0|VOY"EvD*^iV*LҤ]I[*k 0 0(6|%4i?mF#h_L&mc$ER&L1aK>L=՚pJ6$Zٵr ך-L~In+0L^Lֺ=Y+͊Q&i[Iy4)g)DRnHZRaa~+I&mֶ-mi$hhkH[$}YA/$BY8$li KVn&}r&rc 0|9~~EXv_$Me^(4)o&,H )ZRajgYaꖆ/&6ڬMA,A;W>;KQgaLʓ+h>ڶVn|"\ + ' 0-]]f帥G0 nitm?J2ȅ'JK[$prpZxhda2lI7Pj"<붣GvP;WEEX6 DžcpJҤW(/EHrBH[)K$eOY[Ev+M8mɣa~? ſmK4MYY.hǴhrI@,LڶIc deIigjjA"n7ԆϠۓZ:Wy-h'C)cI&VYIy4)ERaYv[0 {W?4| ڤivP.ki\ )YҶ+-fڹA)³pT8᷍&.~p[RmN'݆7IV;hDRIrt#IyRaxn7<:ǣa{Y˖6kvvvvCVΕIK#Ni*Q6d靄I{tr̊pP"V 'LVo.׆IεGR-XpPcex^۰%lKGwK$~4+I٣Pe&ҤV$&ERҤ pG{كsDXv%NZh"bie6ivB ڮv+rZyv/iWْ&i&Jǔcʖ^X8v-LVި] [ږp&M-ӄ]K-+{un+BkݾpsrJڵZ -I–$iR^KG$$MI9PқIyanL\!B۳Zh 0ii7 H VΒIŽ4 {¬@(i6 vPFx^AI&+,LtLn |60K5aKca2]#IH{KuE8n)m)?@ҤQ&2K%"Yf%)0ՃSJn76= [~a$liM,XVNKr v4+$M$MF0i,a&|$ VʮpYb"lb.2|+ޢ=W>nwvZ/++MkiR(riRN(6e$%)0\)~^{0ma4 łvG0iX(H vJNKH%MҮ& mKڕ /E-¬)oG\}Jmֆ;*÷AKo.D,mGo'MkiR(tKiRN(қIRҤ p<&v 01afaִ-A.h i ڂ(J'4aҤl–pL*lc5aR,lYOvtS6Ѿv+K@" _QYhJ/u{ֶAmKӶ륍Iy-)ƒrB)$eRLړGt{)~xpwK`6~aۖ0kzAI@4ᴥYg V\ ЄKiW&z]KpB8haWeɣ~ihǔY/)N{6 [FRrn+mi#j7^ :l)km_P6ʮt4+EiR(-)WKrBnHI=x`KE<8෵߾gx>}z0٣a- v]&hi,m ڮ-Xr&m$iN·pc,̖L V6¤]Hgnf㥃Ae$EY;Wn+ЄYkmd:&FжmWЎY:ӂ+ʠ] H, "ҧ4av{頲%Ԅw&+$Ie%G9&Sn&|^Mx2m&et_aҮmi"l+ZϺ툰_x6ʬL)Dih¤<+KwgI{eK@(_VҤQ&oER&2IoV,e % 'tnڃm=sypW[TREoς6Y<a8iix?4A4ant+VIoaK4Ḷ+i$Mڮ>@R/lҬmY4a4 'Y6Yfa#h- ւ^Q6F:KY c4+jMYAJIx)\&l vH8 DxaGnk2K[ڬjpLˤ]eG,P^* h)]\An/͊4)iV4)I٣L_$)WK Ez"eY+=xP/ow<(³NTUy-S;zKKG0 ,  AL.ӂk V+& HG-e#m&h{5aQ],(W ڮ4 0i0[9K9W^ٕv-a,|:M8 4 7faK˄=O"E_Z#6 ENj{i -k4a#\&I^ k:Ζdi;_BKn &hp=¬MGk啦Ke[H7fmQf,iV4)IU&/e=&BI$em,m-Aȃn5vғV"WeI'=Ya0k0iOҮrVNJg"6 l+'oe.feΒfΖv=p4){I("M {L$V1EIR gXztnA?PIKeYxEi)t_y!Jg2=[up\pX-*+GI.Pk[[ުUHKʕV \/)OKKMExOV+{-Xgbيl /Io&mRڬ1iGFy`,!0m???/?Ö+̂Ѷ afavK#ڮdIrX{ivH;,͊ki2IWjo6mY:(L]M5®0+Z8 [A++&+%+Ǵ-mk#i\+F8=iږ_x+jbᥰO_9.Ў %eKKz("L֎J-t]崰 "H)Җ2I0i].nUHI/+$r<+_,}>JFXER&ݞ,XжZriLz|ri{U m4a[^$ka/];"IL:)I:JʇfUL7lyj˻?~ooo~wm5 aVB), U[;I[5Ծb0ڊIVMiNڇ4)Jn  $ZMMQօk(‡dp,Fb|w&|E0휴 JkmE(JsIw6MhG[+^?hg;ptۙQҵt3"\kҊvfYE <+ڳAE[\8ӾU+$QEY F{vϮlR{(Wʊ!)G{҇kҬ+66,ҬܒfrIXmܐ& m3H")8"Ӣ(Ңs;Ң앣LU2hEޭzǏ3ۯ_[wfp-,µhW>wڢ]iFb u[ѾMzA; Қ4 FJzJ)\| N$,ҢMp҄ B8. d7g`t\hv2Ϻ]hڅXsڵY: ڊp_ReEXl^MW YG9a][Nd>Ig}t[ZII"̚$u=EvҮ+i'|iU{ʺ4zW*gl,ۊp tn[Q&iE,ڤӬhtG.a.kiVr!=Pv)ۅ>$펲W+'>r> ~_<+Z5\9٘HlnPRV!,v")66k4+ʙ$hIK)=<2"08Hj*'=PSsU8Hlp$h68G_kmEО|]YY$%I:W$EYELaM8(O{wv~?-~oZ" .;ڵh]l֬}ZI42K/ A:p2О՞UIj¬k"I8,Z8gF1L6Nvhֵ3ݍr]h|QgtDt{^ .IXu᷄ևpN^ўMUV3MW f(<' V v.δ,{ʅڤ-"Kڕ^V:MZΥ mEQ aRm][kt ^"|Y#Znʇrq$}I;*t)\)6^\nߣ\)+W{^X@R*2)2 ^8 iM: tC8 _.t)'C9(iV(M*YHdG$I08G/+ڵv w Ӭ(ҢL^:*$dHpKg;?~ooo~붞օ)ZmxG[6mnk f{I۵vŠEC:7kM[2p=>lm a6k"Afkc= fH[tkB{lW^n "“ gIxE3!\ 0k^hj¬Mڙ G0 {au;pG3nJWoH4 'mEf6iHҹth+J ߦh.•.rd: ֵE^A;eEDPJkʇrWQ%])!L6mў(•nߣ|VV2Z{2<.)_o?H*W2U QxYCɎms8Zr%Si F"8u_oҤi\zgkQ;I4+gH `HrmΪ?~oy{{_~E[/Šv}_mkvOkvCi`4<0.U. mNW\IEH* L$+sGiδvWgZ;p-LʤFI&9ÅpV4hMZS"B!Y- "ԄB^{ROᤵgšt%L^ GPI]jk=ߐkBVNҬ\AE+ڇ"=ҺhRdkڅYE{,k 2] (("b. fi>$U(Oi Y"LºX}YYH-\HJ+*2)mQbtOhR> ݮTC6J$CX&ao F&xۿk#vֵ[kK}gR;J,ҕdd0$讝v~mǟ"<}-Ż6E#'EX tR,ҢT.@$<\wd0i+,}v&,JgFfeotCr`1l鶗εgAR{Cڇfi!|&< Ymf0=#hHgoKs—ExFgDv&hJWҗº҅p6 _t$CIItZN 'aQI8)HpS:(HMiVH&e2KҬMiVIʕ\+ME"e)/qeR\:S*Υ? +ʟҙȈv%ɤܑҤ\K҇ra0i‡&] OzoB/zkU;j;vVAqH+lI9IrRN4A4XlعaǏ+ׯ_~|읭kZ5a֪L[} v]h7DZ2K7Y4 BYZ5 fmj>!ua&0 fmfMi,#hڅѢtV3=֔unG sEaimE \ =Te&$Ӆ" m@8Ga/셣pxt]"]I/T)aQfZZI:JvC: 6 ښvfMI[d'EOv4aфY[fi^V4)"I$ʵJ\"ݱ('娛I)gʺ e] .Y6KD۹L )r-}] YRʿƕBI*QLȴY&2=Y`R-@;)?*I:S"-dp0 }i Ѡf`ڹv4vʤ]ڰseg]fʬ(ҬIQYe rh0krg;?~7{{{_~E8ip-i+څغaޮ+I;jkgm]k¬]鶢uL"QMmV礽ta$ឲR.$,"HI4ڢBX fC=E8:ծ5nڊ)N!j$rGDp!W"|͈6iK-]u@P&;G! !.^>ig-g$YusHa :ErPAgU2:(-Ҭ&3:HXKm$*i/ɶ,ҤSεKM{ʙ")Jmڳ2K$ҕv\j)ҕr-)/)F{aj`T;5%TQZ$-H$gUʺ)Ӫ*ۭq\zn0k"}$Q%F L;{;+ҹv.¤7*}:ؚD8v[ݤMv(6fgFҢ(Ҥ(42ezT|Ǐ_&|&hך`B;v-hO328Iڢ}EJIjŠ,IpCeT,l4 -e/I8 $Hh$ZmδH+¹C -hԄ OںlAAu+]kO|Htu6 ,7Y5mE{ºvf]fIОmE$UI \+* ;{eE&1 Y [l)kFG&2^^VZ9H4KkҤ=#\ ….jaya>k-+ҙr!YI8WIUCZ:IB eiRi.uafeHҬ|:Ҥ=ФkEyBRt-)!h)E.7jd?acUT98)IYXgE0L**G$ I&EmP%ʓڅh7ᓴHHp+tmUٻ,uTεvԞ&ݑ1 7LvdfƢS;L*{6{/۴ݓ ;?~_~񂭓=anj=9iG[w7m]OlpI{RkMZnHiLҬ] t(gQXK[B H'6&)A'fV!Q!…]'hƝldtk6хh'Lڅ.<+ JFhs/ Šp>I k$=t70{NJMI0:JOH'A\)RZ tnhJHtдOvOkߢuAw4+.'MXʚHS΅rCXA9IDaƅ>ɀWc;(iQiMHF_3E;H ctgiEI&ZRҤKmRʵQr!}r-| ZR&qW%,2u;H/ەoI…<ڥH+A$* F+ʪGɀpm$¹nlKy7ijܙ(6&ӬUY({%"`^V w?~x{{_~;Nwv֪ŻdKkI[3֍ .$E{^kiѮDZ,)4 v&s2T:4+Gua]:h'hfa*Z[F[II. Q8 GIXk !\MFF{=MMuYZ׵/«{X *mU]5kmeY }V ihmFt!iܔ^uI:JIܳVkvS[4}Qt]kiVtyMMZ E#|k¹&M,,0I"۪|hYR;)n$K6ʇLR&Uu;pS1)Ң|h$׵WYR>4EJ{Ar-I:yZR&'lAiV%ӤA$DKYaQWE)2-ڤI}HTs%\ MXlĎٻ3[[E8ڶ=ۙn+{!M" m7Z&Q,d$Ue+[ˏgm-7 {Vm=ҶfmڙI{,ګ-ҵvҢRRIa\H$i6r)V $Ҥ"L5i6|p{!!i&iݞhpaa1I8{afaѤ[ Fk4ihE}e'D/H7[ҳI82KI{me¬Q2S"pA4m,"VҢ]r[KIEZSE;h2)hӎڹH](nDK20*4A5iE["*> Q ] > LxU9HHgF{Erڪt@]IJU$ieEE\Y6iEr!셃tm I)/*_GYQ!U) U$8Y8HB8aJ֞"ܲIݎ Im͒E-2Iҹngiv&;4K{mbrf#SHHYQiV ӹEe6 xٻ?~ۯ_x_YXNڳ&|]mZ{l^{lt#k_fUfiE4ҬifaQER) CL6 @La,] 0 6IfM;@&mN"& ",Q^32Ai%hZkgZ[FSʢԾYnrLcp> Jv)$r!(εYX ™H.!DM -ti/3Q9&L9W>E:nkGaM᠜CrfEkmRIRVu톦L=n {v"$셃rюink"O¢-¬}RJidYS&m]HrR$BrE8TIYkR;('(ʅvh !k;OHJ=BR>aѮu9 R BRmta GIE8duh+n6-mN^;(_ֺw>R8[7ka.vh4a֎ƴ+sf.)4+'eѬ,,2K {0R>{Ǐx{{偰=%I֮l7>Z{`6igc+.Hv$µ4iڵv!J;iҥ*MTE+,p.¥d0 `6F!fa/I8+5mfۢh4G"a$,AEIMbp_G02#Ek6iYVn!2ڵpS™!YRg$ͪҾM3mDp&As"BA}6/\h+¢-ZڤѤ*׎2+lBP$BR$\:IkڤE'[¬Y*MHgʇ6i']]LkW"=I-,'mRmք MxEMa/NAXE"aE߬Y:Sf2BYkg$‡iK)PeRnJ7L;hMF!dzIY(=&)ERO6ΔҬK.G(0)X5Mcp֤hWwAUfr!^vEImph¢i4.]9*kvk`wirnHHHhVARf*G)CweŻ?~ׯ_~m~K; v]n Wآ-NڊEQYm][$ҬM%m.5fiUJhp.HJJA h¬ !&10-hv[zە@Paa^H"D5a2RV.. nṙ1^}H vfrTڳyE;2YEc(ٽ6mhk'"|/h/W?>^ _ɝQGiEXT9rU߬} Q;eDERU{>G*E mhF[6lFDY9$}CXtvi6i(*оeiWM[=h®fZ{Ԟ]@UUHaQ]vE½r[ҷ2$N6t;{ݤ{AJw U\TI -ڃ"hI5(J]2$O_rFRs'\Ee]VEUVIBdq>U&()4*$N'O;ۛv`ӆ86' t`2͆)C)CS6ERe镤Hp$ޕg?~?~Ki®ɻGafxvi¦mf&nHv094RUCᢵ³j(|-=HC.“p'|G9"ҳ(/-"l0Cs۔W:tY4dHUYU9RHʳV6Aۅ/M; |T.MeD ܤ;KInL^"-II_Lp3y0M?n¦l"OG;~Ooӆi=y;yw$޽ov4لIME۴'",:k)ˡ AH YUI@:eW. "\$0M۵E#D DVݤ6ІvMM³p'MAXTfC؅Юff-&af~owgfMh7NڦÃp!hW 7NK/¢lҝ-EDX$ۓn7"=he%$%O;^Xt}Qv'7 Y6UO]UTx(ғAXeR(hM越pmʪ* {/Ty%Ӧl&72Dx%G>!hCشv')ٱvmۄENNEr;8yᔔpnBo>|nړHkHJR^{!h<[GgNSٽcVNYZ(ʢ4#rǏ?_mg=k/w 3ЎN6g&nmiҢiGRtl&I*-vi&3ː"Q! AJ"l"B ڢLAXD!vavڦuڮ-ii}-\ !< @Xam13۴ IB[eehW{^iVش/M6EGw!,r,i"6mh/aUdXUM9%*> -,ڑ;U2 !E7R",Bvӄ]avmhHf.*]I{lJvi2T(iExR$v(Z u4"m&i A[D3Mh/Ma6%S 7NXgI٥/DxRv±ax a1'Eah^QHCٴE҆@P6IzVvUfɦV"=IEz<ҮڃrH僲HWaQEڔHp'dRu{дMR:I WMV&r`r3L!$Bah텳pjLj rrdV'WɁpv"H)|496h H&=jmHʳ2}<[Wgi͔Mj")&(2}iAx%͞?~;~OڃR;~ɻc'wᕷhGڱgah76цiM}LgE'a*[AؤeR"ܙ aA0DXEϚ76@BB$dhnCк4t}VEmUH±0̄@am5f湕Cm1131EUQ6iۿ>>h+ K#HT#= C{>h7ahE7X@لil&5ڳj@nei!E s6aV!\v`ҮڪۦlmlU(˃ WUtwMIO,]HW Oh6MiC4QvQ"YЮv,tAؕWW*.aӮ"ʪPdVrd]0"61=IrQ鵲IäІ,E"IڢHڱ ծgfC8VUX$Az A*J" 7{ݾ u\UІ"-&}&S}d1Q4= ?^*D2e:"֞Ԯ&fΞ9+os2af" E;N* )!,&`F[eړ*VmS.Z%eHCQv(-'kgW+o0P 'ʪlETeQdNx%n1{?ϟ?v kگz;ywd8{-Dx־dhC۴]GIIC{P=JHRN]ؤ8UPNn2i D",*fڢфpE$Bڢۦ]UR&fMk4Mkt[/]ڱE4a7A۵Ffl.Ԕ")P-]gmWn_ GIp$\u ڱ5a2d(,*G!]a.ڳv <+T PVӄa_"Ei7m򠵋64v3vmцl")WU.ݤD^Iڪ]E.VAA4ҡDxVѹ, eFڮ mfBL]Xjeh .<ʘ* !ڣr'l&TYp/0̞F a6=CveQhE{֞E 2ٴ]p'E;~&]]:V&\+HQ]Yx%)W 72MUBxBMhnC[4ڪېhm̳MiUmW$iיHKoiFʶt[eڢ .B êHY[Mj*lM)ςnNkC4ZdʢjWEy w*p'{AU2ݤ]eeȰHPPY)Cz&nɶj eQ^QD.)C\f3Zv= ڽvE1&VmHRJEYuIY* 7vʪ*\iц H*|jb6ns[o,&fɳtG!\ 'kvQj6'; i*l>ƒɢ a3L0yD܄gyRvI *ՔrdȖVh AkC"K,f<8iS{M6cElqf8{7goowL4IRI'",Kw?~ ƒkЎ{;yw gWN^hl±nІiڝvUz0Ү%NeD&BIҐX؄U!B2لkB6a,"" AvI\EhFӴvѴOE{MBXLQ\" a7veLю.z'(EEELhڃ6U߬[L6AJZgVveZHna(Jў[Tp'|%"lD MxaB NvmnZhF[u.۪<۴E3{i anMPmimiS$MRS" A8Vmp۽s4ڪ]4mWGI ¦,2*l:|"PiOʝE$ʴk.QRK'PIؤg3Ҧ]4UVE aS(CR,2-Tv]>hγ lv]ڪ]pܔmto*P% J{۽npVVaHCځ./MM&,&t$pƒ@xh앲ϝτ ڧN &|)iE$-"m"܄;EK4;%31[%=U%E$ER")ʼnResgU8NgbrQV(E$JL7nҳpb{cwϟׄM;vj-Nڱg&C8^鶙l6M۵UIYg3mH7ihTNzPiU؜,Ig&,&BJ!lm "_mhnڢ4ݍi9%6ahd&є",£0Exa3kwڢ]ͳ*ҽ)C[RGY۴Uߩ}Wg&ڃ𬐾)BhCMI_~Ah.|WW%Sip'|%"B,! !khN[LtݴEM[55ڪQHmd."i_Jj04 )0v3D2g!|'۳hYk76MkU( ڱ2$*jv0yˢ. PHڪ= ivmh_CC'w*®ªj2ehiS2" IIyLvehG7!ۢ=ExUtR QR EؔY{%eϔ_ҭ۽C*H$=h._j&l$Yx>Bx@ ڮ vgcngmΆjCSLva>:'y Ng0H/% Uޞ(_im8,7M-T^ +/ɳ6ٳ<4eJ.CZbFYramIڅޭf?_Ǐ?~_оݱ9 ɑ0c'ΜhKnL][4E҃ɦ]E6JU궊<ҩn"mI;^J0U&aELU"," "0Lm&M-ZiMڮ F[5ah6$ڽCDRE؅E $ "rd @ C[z^±vVMiC]+UiCZߩ}K _k)(? a6^- E KU 04axwT;6BxJy!"B l MʼnQ;mHCk4n-Z鬢ehdO'm^HaSehCjEtVUX%M@CM8n25MMkvjۦi v' -\4 i62MGMPLf ½ڃtMi1"|)±P$UViS.B86nfnUrH]vEJҮ&I; 3.ڿ88N̄$e0{.Hʢw&2I:6]G?7MfC0p'|.\ ¡—=6qhhh :s:q&)n A C*ni)ʢVEeXs(IʐٚrQ$eѭPeHC#uY=h,UvaHY;[‰wCx7M)J&-˃R|& _ # ?~Aص!lڃi_k7Cם|=v/6Lmט 3E36EzHm,2 imhN UH&>hKI"-*!l± @"," "4LNam5g۬5MҺִUi04ڢ ahvՊ\EmaEHC9"*m1{( m>hj6i\HVv媽iSI$}&BRUy)6&2i<6a*/]ٕ!·]ڄ{0iE"J*QJD؅E aa"LE"\Dx6Fͤ4ЍI{$AZohO&kt$.tQM@ۥ;-nC61{ԴUЮf*]v6&fWm^v!}$MPm,IdWMKg2MMy7AIyT"]NҢ7/DTjIKiSZ:V@s&5ʃol:4I*UI_+vUś$) wg+Նi&RmSe֒F)XYK@U4IZ zD-~St @*a*ʓeQM * -)˟i攆JUҡܤn6EE-I!HAImS!}goŒnJx)C& W@HTvi O*ҽO EgWiauhw )S"`)l u")C^ .D!ӳR݄!Iʳp,ntim*S(S4ə*)TFC25Y o)9զIB.Mú I9bWZ|v_[|Bi/鋳t?t/=dzf=h,ծMnB{&ڦNhU7mPlCJ 7NiN L& !HV:!D)H!!ՙ%ݴaE{)Z7MӃYhSЦv5ڽ 4"Ta \ 墵;eo4ϟ^jCݬvihWN{/ړ+E.My+w,~C WN)J'NAx+ܩ*/MxІvnʐZ^pv0 W!rp{]MҴi6mmXWVRкL IڦҟkOM*IPDڃaZ\)vahSڤBKLIMEV6CLj/"*lrEiw¡xaE{~OUMۄ{&|T^V['I" E"{k +R*auvTUF;M]I9in®iW$g OvhSLJSQnrHRdR$e("S%ӽnݮAڳ[gajš ^ C]n"aBiMu5ҡ=:WrC=SDYEM8TeJah)I@HΤCv/Ne$];=6$MV$]"mBh4NgCa]R|qA{?Wt6_VXW].*KVo-'}_~jW/>h'gNЉ3'>vX6WO+.RMWhU]ؤMLUҐi]iwth{m a!n”>Xn!eausd:mjC[ɤԺMm6ۡ=kohJPe6aZ"&,ar/BZRi´R]TmMuyЮk&v¡|ԦvHLCQg4U!L-HJy!³R^ }Az-n]Yڮ+!˽&sN~W۳Ԧŧս6]Cۤ]ڡJ˔2CCIBHo]8$t~K ¯ 2L)E!DXӲXMMeҭi݋Nj4݆64M6A ^CPB2TI!lBRzXݴVUMkvUehmW!. mM{')Ir'L-;&dxP+mZ:Ϝ[N~K۳Aª6t;tڥ MehA? v/]t3)!),M !R"H/E:iS/nmj՚6tSmhC667tA*"# aWJ* SQi7m׊+6I.ڝKwڽ&U8eHD]RD ڳ0p^P$Gi͙Qy]MlrV\Ty.M(!v@8"L!n.Z/@knZ7MԺܴ{iӮԒ&)i"M-O&۽WVvaBRҝpUe.”N{I9t۴]iWmMRdMٕH+P")CipѦpT-ܤ' CHT.Nֳ{{N#\%I^^y*!UHIؔN%Yڔrl* IHeXW7'WeJg mB{ɡL"=X y5iU36C ^صʽthM3'_گ{C ^M8d҄CE؅LDv/nUJnSeꖦihmZ-~%´Te(QJ!$;ҽIN.$nDsݔ,v6 "HʝphtHM:T sx'_a{?݄Gaibe1f!ER(S,iŧ~ZM?_O}_~qi =iNpujϜ՞t{/S;,m ,nVSڮ;v(605.:CM!ZȤ"ݞC{i _ NXL)nS Hkt ¡,'f+rӋ$4nMM6WZkvvk)!\U[lP!CTOC(7Ϭnڽ>vӮڝv(Oʃۚ0{Mhn?.ZBDEJ!]pl6vJiSZ mӞTx6gR A-(0DXmB؄!pBC).V.fMktwݴnC7Ik4v vh)4ٺI(2IC'Q]BʃLSWm< @xSQvzm]]6ISD m6AkR F ֦b*aqH7A v" kz)Sz[4rUeC7)\'E *;I, WeWV(EMS4OiebȶI AʓrH/TۅΦ'kEz!mΆsyҴD{ V+V70?lMnʽL,v`auH" m WM{AnVMiHptP$E7%4TٜLC*enGݔ)Q.ChoR>Ex$%u!]IaS<;٬dI2ߑn)E*WhI+eJI:M*] .!LAQٓp'L'~\b矮~ÉDX]%BZXՒ]ykW꯿_ׂvNgNB7A;jמ-GiH724)%m*ٲTIJߕ0t pHSMH@[Ãڄ bZ֠ bX\-vmmjUE&BCZ{.ZpSFenERU6U2 #C%ab]e)trSnҡڽv)(hC9CRLwE6'BxHʔhү4 >CHndWY؅M3m AҦLSZ]%Ez")iY("Zn%V60"6EМh6!Z{{KBt~)]ړLPɓT2!Z[.SҦ QBk]"(ZS7.u;s]K!)C'enP !(r> ]T72JS! )oGmj[TE҆nO La>ϴM;$6*ۡ4R OhG"dzmXtҡ M*-ZHdn%ܤa%HS)K*L]$"B"=K"RR"E;,'~x"Q$jBԬ5AIERB”$e)}|"=X,աݴMRִ)PkimPLBҴA2!""m *ClgDVMmj"iSLXI4 eqHSٔ!\d'!ajJM('EnB m2,eR$l$׺DeH*E 6%R9$)S:DI"d讨04aHSNL%qCa4}1r6iJ,*)VbZaJa]Ŵza5-^ðWףoiڃ?tɿeq~K{_tfmj+iݬ4e7™݄.YA>E"ZLWҮM_ {a 7aVn."Z.Bq6ʐ^YnҮvQVLU~_ZW!)mVASMd)$)퐒D0eSHIKCRG+ՔLUZ"v3IR&E)SR6aA:+“ZDM.;2j,E,BYVV+bהo0e_ ߾}_~Rx~K{О g'gN̉0;L^U{6]zաM)SmJSSpjH,vBڅ{>$r'd;]4MP%A ʡMj"E7WՅMRd2*C# aaL]dBItҴxM  |i^4iS!Uٝ"%2܄;p>JA{poqhC93ʔpS!w~h;»vUÌCћ>;.ўd/Ur*7D; ڥ,Ef+McݕeF_4vת 9OġdqHYvK9qjRjTȸk˄&r(TWcY\U-ƾ;Tyؚ۰Yvm]o2~hӫ_^' u.pwls%_!Ͳ;)lN%C3w!-m< zÛTB⦽*UA|!Һ}NUƻ*fPƩ(C_UP[۶^-B|m646 8$Ф]K,q;JA=$ fh3 ^f(dt!h2 Bi-q-Ghr,کq5gEC&~SwJ; PM9L X-P~ьWE) ciơ߈) R CSB*ePʩfw*7US)…B]JʋR\rHiD$!!\Y qC{cX.e(i1qh8x(*cP%Kt[ک*1SZK+q3NbfTՠ.LeZ)n(w;UMyWt˖Btwʻf,;nYܴ"ޕCyQ^+)KVn6 .M|A9 UqB]R3bf .|͸eX.Pn|vfٸ`|qR8xڋX.SXvZFj.]C ZM3~fݲ^Y(>C|P_UnO6nvl[zI9*b,Eq6݄UC3ڻr(J9\.PaJÌm7n쌽f<C143KF$qWgXv.mF!nʡU*XZ3e)]]`iЌKiU^5mYvj2ъ j3ơf0Tڡ2QiÌ.xf3Ao׫OۛrQW?i|3hƌS[la!lMڌmP׿~Do|??,]/\B|a6.lhc*xڰ9v&qEͫ*Snʫ**n miw]6lmàܵq64޶)](7۶9m.Nq$.!$b )>(K, C,q̌P]e&#,eFLeva1(Xbv_JY|0NKCό/HĩB|)N/tB9u+MP4cirSv2CqUnޜJ?T7Cc3efyS(ƠR e)ӲYv e󮔥.*ru(P\,Pol$BqHMx'E,Ж0q׌D],c&f02t<2[Xuc(w"">I|WQ.ZFܴĻ]c)T ;6rMOwv(xI|gwS#]y 'C7av4ʹgRFNoxs7\aơ}T xvXQ6"q00w\ƻWI\,zu !Wىžӌ_5XͫC9drO퇪|ᄚͫmsf c|VtBV0UCnvݔes(7HWWQJhA9 Q熊}wM_˘K!i8Tah3Bơת}i+ڡh.rhe.&uQj4\-c"(Cb,Iu;̐$f趴SLˡF1nMf,iavw;\] 7˛7)v)|[ciJO7ۦ,~dџ;Wv?^SP|_]BP%)mӕˆ]h7S XZbٽ讞$U>+]\(kA|lA)4RNԖrvE)l\TYUK6mIxH,!%IJMD7%XPJY PM;Li71bXb! ~ոhMĩ_WfJYb)kT0(ʡn aC_ũU9BYJyWM;ތʩ]=%9O,èͮ(BwU9rSŽW;$U^Յrr8$lM$Cb S$qWAB9šیLyh]ټv7qwnڈwݥht/ČST hqq7{͎,׸_3NU**M{Pա[ lSR|!.E|TkxU׆Qe)q*t) 0BYP4+0ajshflawm>Sy_~?77P|?E.6?S~U.lP78mЖ`;mDZ)w:}g4i+],TׂR4ciak,S(ОЅ򮔥f)T9 MVPS"'.`e*rW(KP(Uʯ0*S fі5^r*lWRnþ{(7㩔 *.*| 8$I,q7I|m٣}'cGhKiٌ榌/tOMCCa^N(^%fO0>kMf|'n*|sn_7>ڲh3gqwQe}m6?m~fs(7](U]HP07E;Er(Td*Ty}!}P(یMˮ aN0 mb܄4Qh2fBYT~!niCnb,&խ)C]Mij(6m3ZS841DFF5# Җ! ni8쭔w4Ʃnj5J|suʻ7o;rZc7n;Wc_({o7_(Okq߻X^%.~Y,?S?E+\,qf v%l!ޚqHA[riCԴS9T愈C܍vjE9LvWڡPSєXM)V$J,宄4iS$nvXZ0NqK! ii&CS%^C0FJ0zTQ4f%]vw`uSb)!n)~MAT^ 0 %Ӗr^ݕ)SyUUBQgr](S)ˎY7ﵥP^U9ՁݔCw*얋(.BYJ\ M q%K&%nxX/c!X4ݱ{cIh; f<5Ph*S,Wrj.tMIr?#CT)݋8PNk3Q`3w.VR~]SJQPS)E5#(c)UUC m)*m]ܵCXJ'UTcFƒ-#qםBHXxAA)ڋxjA{jqh&.]Zmٔn50xהNE9SRn0APb 3LӘ82ty C˘ݥK=UK9d 3"2NmZ Qx*mR>ٱ)zmv?y*՟~?7,xs*Ox߻X>*K.~MM*ۅX6.D 8en NH[|v?ԴS9S)/t4c b)ʋirb)7,eysWEYݦfmRl(K'^CD,2x q"AH;!ձ8+RaLJ8C}ٙXvX8S,x fwe3ġ|/bi/_rOіw.>(RlAьQb,KLyr,UNe͡P\(;X⃶S93e[XxW*U 0PNa+K݄RnJɅ PR~(7tA$MX"BMCbCӛ.c F{4Ÿ:BF6Oq)bg^Cb,RN8$wEw2E /!16[KU"ݫQ;R~XimƋxޕXK(K[ʋ835EӾV.(vw MetxrWt;ؽxƻ%v ff(+8 ջ0l>kW76%mfv^*ġ+Wl%>h)7j,)TT%*ʡI(RfhK)BrU^O =R¨ͫTI0!cIhD.|o܄//4eb,]yKNuofF[i7]Lu[.7Uc<4E)x&Mr!bft"1i0egCDS.f*4C3cD G͛nN+o cwvm;}w6ڜO?ǹ,xP,~Ib)wC9$w\,Ex#d`sy-q᭝vO!,TNt+Fݔ%ڲCyiTQ]Ly*)UBM)vD$4aTR/UI)2v7E|/ƩQbMPnBQ$ E1jR&hqja&M[e)Kݦ;%>CܔC|eDU||T~ڡ/=R>xqS*XʩchK9mK%n}PД,r(/BY]܌rSJ3v%qZ{7667aa UC)E)TY{q*78S%E[BFQ*B!޵%eb"nBiwUbM9e]RBqqF%)Kw3ġB3^k.:(rb(23}VNrq"ƠCdơ<ŋr׌(Il(RNK{*K 㮢J)i E(rqƛPqr. U6X8Ur7Ҍ7qfQahtqe)n04مXa,E,eahlXb)Kh'U)>KkKH|,7,cvjK9W$MFQmTrvی{I3ﵯ4vxM=ҡŲ[*P~I=ŒORCxEE3MfĈ%u{ḧbƫ43]婈6"GEfLCOFwDLҪ"+vPq7a0qi.OB7ە M9f76aK;l*6nmvˆP],Wo8xA 7S9\~!ؼYFYbXB&.>-nXvw0X6.vH<ũ-pA9SzSn!bxW5}0])T){h]e)lˆSY)Ļ"nJEJEh7vK%UB]HD10BvHPcTY*(jCif,͘0!TN8쌧`MKB|%ϴ|R>ZbĻ0b.wLJkˌH!eVΜ4%t*PX.ffuS=6 ]3ʻ]]^+~X.l׫el?8|rPD;9x88OqXyZN낲իy?/oxWb]A*OO/Ė\;!tb ޚS8,oCgGVܥhKI]UYU%q7ekZ ݶnMJCeR<,Gb+[ȈwUs8lC ' !UB0 S1DEFPV/ci۴mlaK1L|2,w؆g-"x(߈նrW[[yrOR(|QwT/mѡhwrW哲TJ)C+i~TۊVeY{WZ]BYUC)BJ]rS.U.,WOU+W. *[)y )H[ĻN bI, "ұq[ Sk݌I1nb D|ċ&Zk7[4+URնDl$]V Clflx*bW&m([U[s&겥ܜ]38Eܵml{mPElrx[yW alSQtB,Ôrq7jŁr7>غfi_)KUywxp^Fд3%%Ml,'W[ ]W7_Ň88ju<%ўrz#q&qw0nR(v⫉Jhl&GW)mmk.C 5lA<Uu-U3בҤ,$^# ]M)L2j,a(efJζ .DэRjRcӨm#ލA)bX(>e釫4x(}Ncܴ܍8WU9(7_Vk/+.W>)ߋ'C]r..?Iy(_-A]?I8lpzjPxsqU)T+KXbrq.(SNqRqYUyw8Φ,'o1NK |/TE8CIYlܔ.Ky7b[Y eӫ?PaqUoRC)P Equ^R,UqU*WKM*g)αŻJ4$nƩ[!Ζ"0؊I<W7k\5]܌-w 9 >)K#P]%?sxus,%(-E{C{ e+CwGTtPnJ*[ӨB)*K"՘13%>damJE]-'Ň*W4]y*BndGt4U3t$3V 7]t)uwTQrSA-\K\lWޔE I^D.D"!4tmiMp0C 'e9Z1-9u{HBܵҌ<uQM򳄱Kift[f5㮺oel m-\m-c;0P[E0 c)7M1W]6yd,g܍w N/9=ԩm&Ci$U3sZ7h%meXf|nZۆZNq7q7nx12~Ve{a8* l,О=C4:Rj]2ƔiZae}7aqW7勫ÛN_7a;82h=8:}Ro哫̯Zo?Q>)߈?põpxUe+߻Ӆ-!WE܄\lֶNbkOX}oڋCs US,h](OPeVAle*[)Pʻv́PNK)v8pwE8:r.Fœ[NPT9tϸ+[)K-xEx%)90RZV1ma%4px˘x%OH|gCH?x*_T EFߊ/ wWTrx8mNUx(6mIilPO)8UQr]ickJqrSUPf|Rt:Y ᢪPeʛ-Dr\WC.Ēe"Ē+A >8E 4ci-I{[z,g<4%m&/BgPʇF[E( ])x7q%nUB7)rS)?  塔MwCC+]Dˈ|6"e9ʸ;j|hC3!U(m|Үckw]\%KE)wŌ,3 CSn3Ui7Xr]3*.Ԕm* e9ʫcm{U8ʌ*oMrSٖ$ Df9hDgW\ ]jV\ eI 2C xwZp9ei$I3B/j%<-؎ݜ<59}%EY*4ENC3tYriXRўmP>SDRqXU]b3wcIhK`02bC8Ϫ$u)wCSPTA,)uSն$t *3qwm)b)URefUxU0[q&27s6BfF9RJ8=QmBaMlCzjM,3Kcx7 c<]_j凫?~NO哷7wKlwqrqЇ<}(TR]k/~\lW.QW]8=e+߸x(O\\K;tb ' AwMć-b>4S e+!V()TTRoU)e:tʥPM̙ 3b Ė)P[([yjREb [$$ éhDDLlQ!sbcBQ J)72ޝn]l#q743ڻMc"W$nWUM%E|/wUXfP orርB% OeRޕSlliK_BFyH]ć*m,u8}U([U 'S)BrKyVlea^UQ .DluPk.HpM<īA"\Ikm[7%v"۸"ƻwݺe(7[&<U%*X"ŇV>(峘RFP*[ܜ(aJkRU(_5U34D0Cu_5ckckCWCDq+/.~RʒP0ݖfh04c)[cMwݴ*7CU8̘xsw2凭mUr)0rEp$9' Сex F1]=<ŋȅx4wa|8]qIܴķBq ~2:-櫡/eS8P؊P5qXh[RՔj[(&&)Pj/-㮼+f{ M6RM?4#9 bksl խ01Ѥ 2њ6n(O2 b CS QjſT30/S9wg[NP7oxOk/~IFsrb ɛWݯ"*BSYpNbkboH[և5mh$)m2ʇ)[ӔF)'ǁRTlEQ(V(Eu8<ԖPG,)H-m![{W$pxjKE$S[M"N"!$H$b%!KxP\B Ƈ3ĒN˸w-^Y0j< qMUܔūIׅbkPRE<ßUy貔Ж PJFbI)R3->?P|QnƉ*Ub,UrSTJ_)U*[)[T(!7"B$HrT;lA|.%l g%gI.iIspc4-Cy%tv6E.nFnDRnSl5Œ/M,PCHw)Vx(K#^^-4Dy*F5cSew e'M5bk!PHyUeZ1HiOcW7ʋD,vqix8Cn>J/'5rWWg;[Y[;t)j)YsɉED8$0hD$vu7E܌oL5b^mWwq3p7>iNi+SU^%2i_C ISvbhCB3X 1M9)(є- Jmei[oLT qRʇ2JNc)2nRp%Hh全${&pXMXJUWf(KYҝ5U3n-`lt_ALC?X,A"$s1Ҋfh̜6jKb)՜&sZ*AMNmLZF*[ BՅ͘S0RBKe}W.ÿhC9[T9Oܔ\~o>? /o]r]]+C⋋Z⋋o\l7ooU"B],$m!ֶ-"qh⩙vfOQ T[6tp(wSE:9(GPAQԉ*ʻCsHۮN7TFHֶA79ÖAlMQ=E{H<6DA!b;-V-7,;}VVKw`0i{[SfN)".ňk]YquZo2Kؚeh.[o_%C3U|g%{2~#>`.85>ED[}vJ[]!NzS$ԩ.1]+ !NA!!'"⁈.R.:ݹUQіjK-N7Oq~U/ܝڃGKE9ՇK}K=<-u*Ǹ,2~Qު3nTU&^v"]LfgOcx24NǐN[oT:E^JK(Q/_>S⇰B. i+Vi2[2NA|x4.2&zuߗ*x֌x k]vef$~cXe%fsÊ Np ᛧapGd۷owhRU3pjRiP!qYuv&ܼ-swe-/2'eo?"._$^ZoEX˰YGr:uS ӄ(-aK\ ĩ$ХÎ %"1 5Ca +b|[/!#B%x .%8=fٌ.NqOkWvשh}uY/~cEeX/.)2Ɓ ^].2dn1ٰc,]4k_iZC)waeYuڴ.>NxjPo}8%Kae4uڱqeV2qk8-2ݸ)>|w 7{a|sy,e˃pzt0Sc N tqnexzÐ*T/3~1`*IQUԩFUDJĩu&Z-%P_Oђ;,JƸ쪧euXB V`XO4e|NZ?V= ˺c~e8xU+φ*~1%z [%~UC#ԧP˰.2^/CV|1#fŧ4.qooy^x[oOY>!7onoFT?Zzԇ%K?Rg%a] kˬz[ЕeWI-XO2eP2[*jz:lR&.UqZ, aXj+*q"dZ`OjTZTG{srXlgJ([oKZtMROR]:v &w* Q> 5Nta׬z[0~(.P:Xxq?.ܾQeY;J˯nۿ?o\^Tr=ʭN)$n_7qOA߽TRJ]t~wв|Vƥ:eCَӄv0D!DBHħpHS?h$^Z貺FK8 JH\-eߋ$N SzԧjNRE.TE|Ȧ E\B%`Xw@].wueç: pT/TSSt=/Z_qp?> ~/^QĿ&)K[O%қ[\%-'!>կv}H\WN[E$w G, #qJ/&"OS"Ku΍{OTK~pSyi]OuGN^ڢ5:qzi܆~Ne:+Kue%x̰2NCNqO4.)޺E^]4q*CןK}J|4V9 -EXiR_-!FCioC]i/S/ˌiJ/J~gaq K,Sqe0v"NCp3ĺ!)#f%S$lƒ%Cn{x:PENԩLh}cVN[}(ZT}ڨK_-eFކDCK}1> cC%¤[Ś3*6aSffc i8%>Cg E=֎z}eSQUL]j\>X/mcf⋜-DMGc%HBJukNq8sGku}ɥJ4p2>%KOUdP5ǃzj)փjK.uKb$dUUuY? ֲNmbe]⩆0l {:S)ES ⇇Ig[R'0+.E`qYWJ|$8%.e]%%OU_Z8%.99]"Jl$d8dx$vx%/ hZ.'-zx⭊P?<8:FUuK=P:+1jU榵bO]ouSvإ 8 u Ʃ.XƸ4E]*,ކuߑ؇"DD.x<d\oƇ!,4C\R?~RNx N#^JeY.r kTC !NA8qA!<QEZTuԣZ>m2TOÎ`;%N]z%TdYٮ˸<&Nx@[x8~]-ħ0:dZ֩#uK|:ĥHDr]18e]&>eFpOz}!|we|!2.Ggqyͧ՝?n.wnR_U⫃{_ܾ;UQ qw:yCA)(u`|POq9|qx_F˰e1Nm]fL):So券Ԯˍ[%D8f4f*Zb\BKu)a|qM#4S4izKw]堵2N[S~/޶[e#i~e\V5be=C= [#F銷V]vuY.Bz WxAe|Q7B_ĥ4,~oXP۸SI_xH%.S>%.H;㲞%%77[qIxDȐ<1%./w|#%rxkq{;QQPSCZdz)(AťBXB%tЖY/Ã2ؕid}avfC7<Pu TJa]8Kq)%.u Ű->L4N8SiˁӨSO?ci_Q/iYt Wq:K} C8-<\KWPӰE]ePZx/[.5~֡.2:XaNX Z}HP #N!HqqZnp`TxD>-å8]cJe.q ˰ebP?0-tp9\Jpip^u %0OP}0xKd8=d} 8 㲌Zt2[O%]S;cL0ֺL %a7S6NuYoXwo'e\n޻}˝xrq߉eCxN䈛`$"Mޒ8%ȝtS-w 7-jRծQ]sz;$.H|u*ENuK:\Z-ZjYRqz8Ul4>=4:8MZOq)FWũ~q*Ze%֌֥v)%t*~X6ԩzu9.RƇ%.˺u 5j)ߨS~HX⩞/1^6>fxP?./QPÖeX3^dZfv~RōE/~XWaJ.zˁK0SArx$9bQ9!NAl\`<:j}^ۣv[[veô*j"NOuZf/Bd BGf&B$K# yC|HsXF;Joۖe۲ZnUN RD8%ĥNs#u 7O CKKBujP-UЭx՝xKZ8mG;jV.PƯB_面^×m9Z<@vR",ld>tҬZTnaWC]?3[տ"^_TO->[o%!nc%.[m[(^"2$>-.ͺ:9CvدⲑD)7 H|G!! <#|AChtTj})!GᛪRE]:.*In5f|Uu0֭,-fZʠ.m(.3.[%m-1.{PV3Dt.Elocl-q+RukCz[}U-N"!%lRߍZ"KDe%> BwMݲn˸!EoXx(J|SKq!>Fcde]mƮz0.-sYnq9zYú2[$8\"q8Çt9Oui]Zڢ>޾NZ-uv[Sf]T=]:,>%>x<<~f?t1ԭNm_ӟ7P!JGv-,a&vq[2Nn2B]/!$!]3aW.^C}q{I|H\K`nC2v~|aXú%m>ҲVmj?X?[]01>dev[ G2nef3NJ1'n C~PxFjKOE]ʌ'ndX[d-hQB$.ncnu[?(AԱpz&^s]œi]2_|W8?[n<]O"~tyo{~oo?&W^/=>O_wT[<=)'Aݾj=CVz)2nUߌ_/nK͸Cq[qI-C[Ėn6"a6ÜFǁV-=Lul]B]R-o?aƌ]Fx;(]tRJviZenOmnOKD$,%D˺6ꟈ2>2>Pn,?Z%6q (֧x;"[(n%^B}(JzRevrxe$D"#!"wN[!ES×x.֭Z/juѯrTj]Znu;%. y=<9|88NZgnԩ*J]ZaNoSLgv[uqIX`mS[b5X[%33](2Kt*FOAݢxۺz[(u uKBFe1"IY%^ oXߌ_e F\0֥q)Vǟ[^fF}ˮ[Mۮxm s]Ưv}%u6LxIˌ]İK\ƏvQ"K<rH&2rć3'[ZgnաZ֧JV˹EiujؕXs$!K/OƌrڇJaܞ.;>-emJn%˸QOJ(CƏzxc|X6Vh%uC(+(1#n0%%Va(p ?Y4J!0II\F.G2>>쓱øևԺuKS/- *.2w-uކu[T2غpzKn1c"jt汬JxdNu9xU%V/TUi>[/abkׇsxYuY'fenduvEn7X[bX/cQˬ[b]=2cz{z2/᫧}t;oaq .'rzOr=l.ĒZqەqi|KPr%h%ŧe9h]većŰ>DD)[ېQ?R/15"v e R$.czM5Ss0S+Nlaׇg⻸_(A5PȤrƒbq,C.GʊN:֧JհȰʺM]jљ6fVƺͺmP6%kB\^j~-1~ŗ._}𕃓?qprrprxHx=7ty=ۿA~op{OWR?;\H*~/ã.w/OOr0<8PoU/ uk]ʸ~r8Ƈn~j7U}b9`$N2$[$%×*Ѳ#ЪnzR[TP-R#Gn0fT&![.K)ҪUM]N .uI\DZ 1C.22<]xf_ztijcWS]@'<ҡ>U_ZuEQuktF j T[7̘%e۰v`iilVĹ2"[ߔߵ~R(S-%n޺h]⥾+/EV"WAiNo1Kzi\BuIsXeoAՄa1nNxvai][Q-^C\ 6nKC^n n qKaW!'!K0)HIDpu]ĭ졥.-(ʠvRRCV>d֞(RKuKVWiק=݆O2:e\uR/YGeK}I}SE0.[&Roq%Qo!~#a%.-V㖑C2n<}:$%>-qK"qI\pJ]z{zb .f|Z)ĺh.Kևm_qY7%^qFTr(=I L-3Jb2V2n]N&`YN_}u;|_|v_“xxxx>ygOwӿf_xqx Oÿ]G$~şC}_Ƀ'oO}0<]C=snuOKhI꒸>aQ˸`}C⻉qX$eK87㥞1] p<(Zro*zvu MpPC0Ax+Sq[N;x j)2&x s=Hu*V"~RJƌYˮTH\ʒU%-Z)Rq[hx[$ZCP\/?sPz߳o%n%۰nC-&62n!aPʡnR"%n1>񫈷Ƨq[t9e\/%l$ZJ\<$.'A/_p8ܞq.#8uYmXNqmFAĖfˎKV$=-e9\<8n_p[=Yvuex2?ۺEqХ>O*n2nVª[B2㖱N !eP$0ĥtu26V%m8WƇncRL%[IT0Pjw{>>Y31 XϕQ2-ڪ2eǬۮka}h.#het J"u[fYa>۳&&^ZY?[Vovtnu+m.$ZD>eif|*ƥ^ڱ:;Xv*L`u6#KM]<\Óu:֥d Z;Kݦ,uua23ukpnuiYT*Ci7֏Z߬K]v#>4C-~V[{['C%FFf/nI9WfmۺdnӢ؊ XO;3vC}``lX2,3nEɺ%ے1C"fކC2.Qf\6eԧ,a-KCB<cHI89ĉm{I:oNz&.SFjݖSة?nա8Yƥq[ƇY[ԯeX՞,[|*P#vXJm]JXoK~K|[q u-u[CFI\RPsVJqoqKFbuBBo%S+!!!%?@Wdx$K/}X~6fJѐY$.K%Zwħe-;fO]r.uiYPqkԯB[RKcb" Gq9*2b|31Iۄqy` @ۣeV!qiy6nUTi-֏ӏړ:nR5X;v]f>Q| mgFR eRcXfZf$nɬODkq[]ed˰ne]<%^Wv߽=.ޞ~O~uL<DW?W/!qiO-^K}<ܞ^Ee\D\/mngUKYm]N'gUQJS|ӥvCh2%%qXOv}zi1JIzu.ҮK_OO !@ KoHVT}:-~q9xk [|Rl%nq B DAqK|:d%֟%K ا[q$!ׇDLf7߉KBdx~?_\sHKnZ]87j8.ypEou2.ӓ+z.pS]֥12nmKVleZ`.c©E ̶3QTm.ˎe0.q˺aO.%ntKY&և DqI8 aOqY7Ƨ!.]\FgK2Qo;^-nm7'qe(utE<-q=2.C4kQZ®1&O/IkܖƏƇe06Γ1#ap]`تnPZukP\eƒ/Z,62yt*eeKfx,K%VIsK҃->O'2PBxI%d ⛚pC]JJ4%n!>9B&D1^Md .q "DⒸETҺ..-벬[2Z*r֮uo0ciHFK[J/aerh\KLfLXfxr zL0/U n=(~KJ[#Rrf\~f]ZInuꮷ'2>0,5.3ۥv",.aڱamu [źrq|*nIq퉧_yw'Oo?ۓԟ_O⻇H=|g-.!xz)?xʃx{}VEnU7ե_8>m֧錃Ӈ[.3%ފa|w0xpxp%>TΓHApH#$ȗSu8|*ju5u=lSӞ>1̺U7:j C}zP$!nqˠGB.ҖZڭTSKۥ,e<ծOqi CZ];Jݪ[ݞ~[ѧo꭬K?WS Oğ?o%]S[Q?D} Һ u?qKF|CSKSK|+!n#a%_$n-~!|t[/NbWӐ&##_Cjo2;sR~^۪5+#n[Ck#n!e͸^%.Yĥ 2.\xHӇeXoӶŸmD.a\"nE ʨuKo5Veɢԇ>CV8|a|]bh]l txyK2ƌELXˆoZX8Vߐ D"HyH,$G;sT<,C=}Z/gݪ5['ˌˮ.Ӯ3.;N۲ѧbyzO2ޖ$fVץ,KP>S('sӥ~RoC oE7K\J,~4$e0[eL, s).P9 1Ri%YC㒰.K$^KⒸ$.KG˓|e\ZwYOo˸-Wvƺ4vKO]RVJR[S֭~KP?[6!H\I!$ÓG|C]Ѣ-ފOMեNo%uӥC-jeXa%n-]$vK\Ƭn陭;ĭd-.鄌mJ,2˙emc}z2.}:I Ӱuۧo%W'G5~CÇ/yr򔇗'O/py}w''%UJx8'xy_[|xx[<|z=W<T뭤.Hĭ-ꥨ3_bbԧHO]'۸꛸$.V'1,`\!P)o!ğ+Q2J(M)HH| _?q:㒸-q;m]"nA% _<#O-ݗxb/<_[j/WӣZcmu۲:YJ]8{6S-KG\T[8S/}4T頱nGO45!vxewH)4"(Q*. 1~>OƯĺT]4!ٳA|BQB]F q[\2`V|.-#~qi|ƇfX?ȰˆHLn]2~n!Cb|bOmC7K ~T ]3(be\-DʚњXZ#%n ,(A`d=3zjv۰.q["ʠʰaui.nAnJlu v]2KYo˸ˬn3v0n.-Lu)u%e}[C@hL-RKoӢbR%2Rr(uIP%e%TmboS|7I꒸$.?J\ĥу>YmXqi]f[7Ӻ ah-Toj}(a9Jj\V;Sp'ø%kbͰ>۸eWQ!q a0:)><:m2DLM\[ )SPC'0^2Yce{aò[lI)&ָU2ˮe;%N 5˰3nem|X]".2,3.uY2.K7߼r=_<+?By_wrx;9$]'nߵħ%Ou>ç<\nWn%<ݾpQR_8ouPeVsغM2.qG֎1|q9ׇm$W"nÇ7KyHmU'Tl{֩˃z|8(u"U A[[! u+o)ުKkVQ[ZJeVTݞ։ Jm-$.vPN_J\uKbt[j9)!ԉPӭ>[m}[_~".H[ [\Կ&n%~T[}Ƈ$L7K[7I| [\XbB"Tb*ۺE|[|sKBs%^NVo% -և +!#rfW[g$2o2C~eյۮVhZ=m}H-"8$!>mԥXE"'qTqPq ƥetmO_tj]Z-e\fl-c\2ȸTFUkaX2&fՌĞQJպ4(T}KQl >lM\ZJF%.'m-ĥ NƭehEd+ѸE\F\+u4nC}&>we-2V\&Kư.uYa.x^BmfVPdܢ+qxí.A]n ۚ!ⶈO-eXv "vDxKZCKb#!¹ym]ijˁ:ZTԺZburİ;'J,j|XbZA\eONoRqrPĥ$A$.A\ĸ.Ee7s/9֥>ZIkh,i}X>O~V%"A0q6˄28gLf8Mʄ!AxH\2GbƮ(q9?U.Om]Z2ORmXK=q[ e|hkVʺv;ødRf\15.dw26KF״Ϭl?y zeXY{aɺϬOȉ?woq;_ܞn/|x>=.?xt)vWNoMO1x8}S/wPoqIS]WV<[y= =JbݺO3#؝ v ffO3na\lkR Vߌ%>teHTP“0"Y ceQe3e<۞$.%b8$[D6əCKzٓNN/:Sz]<(>[jܖY㶬˄eWuiXo8!>8nKDƭa2ĸ02u;$.-^K%+AK"Dbƥ`kVZKbץ[ծOc;g].{JgpIPdUbT[ȶ0b&Et3ieMr|8W"L #F#4p9D˃^&Z\q̨tm[P-Vu);qٺV\b6鮢n?/Dx'/OnOO}Qukpi8SG]m adHPպt]CzrXp:qt;Au98iVl[uY6 q[1vd ptRY3cf B\C(V"n'Yo.-6;\R$$K2n6O㲵$^ԭDkL\qK$wD\߭ĬEޢŌvȎے~2e'!.'CLe]N&V}xl̬1mQ݆eSe%0tFjg3ź٥r( H"qqUf8Ξaupb26ZNU&Ye ưv.AKX!&.9KO6n%O1#,a oXցӰ!^zTʩqq? ~4?Ws8nu UZFBP)q !ĥ+1l!qD׭6.=}KG6D%#Q _.tyƇŮm.IM4 xhCL age꫸D}S%u IDj]n1J0v$TPPSJM5e%5q٧[c]0[ma}X%ZQCID R:$u[u[%Z2,c%d}qۃ'緇ۓɓǃÇO=8}sW/|v;9SOſ5g܃ziW$nqK>yӥz:ޞnTK}wP,å6T*gѳ^1e#s i.V}X|p$>|W Or0rp+KTٖ:Y=ǎ\ ZgMJ16m!$(u8 >D⭨tJ/.eYR'nu+&x6Djcڱӭ-Jǟ[ǰXzKKu?EOԸwq븕KKV/E|3Zކ %K\FRDeqˌ n#qKJ\B!C\ⒸE܊)ҺGdl%ζTOFOeKXƑI$Tf0cG>f󫌩OyCFO~y}/_|?rtu}V?{~iOV_X֭-o!##H8.-U[tK9q'o'`LGMT-Q'mhEzqp)E;"ܺmC/:e29͚h[H|֥ST]֥w>1n{Lj]fڸĸ4JHx Cn񒚸4i$C v55V2>}֥1Ē`%5(ocϡ.g30r< #8uy:9 N rpե.[v 2եtSAGI,긍35 e]f̰D>Y!8-u+qImbK֥V]ӏ[1J"c>s0B82qq9xW峷o?*\_sNv>?z/J> R_=<܊퓷-.R|롥K nUE9(.-q֡u.o<캅ÇSǬWǁCH %/2$"#IO8p;ܪKBvVj n[uk5԰J--Ka&Hn'".Eեh(]VZi9;[q;$Eun]ttd'ӇbII(ƥk}Wԇm݆A([ %Qj|U/]zkKRPߔ9UnKոwęzɸexH۸E-.[d$ā$Ⓒ.[s$K%Hd$ _>N-d}ȃDbFFfciy.3|rH.9s=?==5P_{X-gu .!C"#q9OrVKT./lUҚђr1C'#Vcd̸F30ֺ4!)ե{֭9Hluiݪݺ$ԇ%VQ U-)][KD^K]3lĭ&vKH2-ꖐ`".i|r BӟZ.S%3!$2I\Nvᬉ۹dƠUV2'u)Һ*n!,cIn]]n5n(kxٸ̊ƌb䠆3<+apIL4.[Ipİ8$D*Ժԣ:z98뛡u^ZNuid9mvˈte\uedt'6fT?.ҡI]~R{QK}R]ڰߕP2no9ޖ8F q %TB-C(Fq 5𒸭刮˺M ֒xDݎPJ0 &qIC&K_5O;.CJeWk<ne<,˴ zieE RKXCROq[%DKn[v؈KA\1 0qqIH&a[\d2n-'#\qjZ/[oq 6˚[.Of}eSIYյ9K2Vl[&=2$ďK]`]v;fXݲ[Aq v]MB 9!G|MpOBwӇp{rO?R K뿭?/^껇n݃noO~si(-.UNrvPc8)G32-6O_0DrNWɃ !9xd8#6=TOݞ9/Υ:,UݚuRhN>0cfb[8HʄxiQȰnݵnZRzU.O*t)]]t)ϊnVbKٝ] KuKmi=W鶔'ui\R u+ZVR-n/%E|3 L$_IB|KI[\[ܖq۰u.-uYIE"q!qIH$v%e}7 QO]⑈K2ZT#m(@dH$2v|z]kfC1%#q.ԗo2rW9y:g>/GWDuyeO/u o9 u{QEr8h-8~ T9U1ѧjQ:qcw21̱[`1,u"&ӵ [[I5 u Ֆ[uV\JĭujUu~ԺѺ% Râ&Pey a\U恈!.= Hbe.sM]R6hź21$. IsfX">e*jj}XÎNd1-2TcԎKlF|[V/K*r"0Jh˜e̘e"'#+ za9pXϸ%pT/'㐇!Aqӳzˉӥyz9P^Z:}XIt1Ok62TǬ4 n7mXKiuI\6鶬[t-n2_YS/U]Kh->%".Cj۸U#xCv a)V2c fa-'1<5l#tKGZ%dyh]ڧ^Z5c\ӭc|jXjkFغӊևjiI-C}{e˘f+&0f(Hmrs0fb`H0D2n3KWHG/HxdGP ?ț{4h1h3_ ò.ORiĭnZ/㶆LZPƮq:BM\eejK=Kn2K֥V=7u2#j[q K32nbzq9uu6XOt;Xdkq|Į!]\8~-o ƭɓO<ܞO/O=xЧ~S:ۿ?Mn'p,.[;|hg%>H|틪z+᫧'oO[x<~Q=GK]Zoq;xnuϴp֔ReqN'堜:!$m$>>$ VݵnZZ,%myNVnzC{z.$za9E<ebwov}Wjfm.K[/Vzuq@߈*9ߍxxz1q+qBq!.oI܆q2C]ZF2qI!"H .ğ%ChYNe9J캝0.'"dXYϦv$rJsa3:C~1×/.>-crťqا=vO/=T/:r[" +Ĺ/U UNًCqd8NÌ-ZЕ:[UjQgfN'cUdqzi1%3UTt-tנjUkfփRTRaW|b}R ek+p2"zJ ^LqYa)u9a֥^#`q2pڢbq:ˁuixY_ Mwf|WbKfSNUuKa n9}H3uuiK)B0))QonӇҊeĮNo}.f2n+.Htqێa!&=Ό쌥26$vgˮ'3[V$˹vKXqx~l/{$.'U=ϟ?vrO?+V;? C+n_}KK=x<<|p O/nB]Z?@K??íRQᬃ:8Ə>1fpt::F%Y{zq I[$a| KUOD\CB#g󧆣IuZ /U}\IKkFeغJY12ՙh-A m\#Ѻ[[vׇrji[N˶[1n[N-ZCDⲧ qyN\v}wRU[[]-QlOV:?߭[B\xwCpx?[U,n@X߅[q%q]?'$a$D㒸EB!G\rPoZl[$vY/qZ.mYxSOHi/2p|}9y}qX{ڟ}ڧ=.v=zS/OuS-TzPz΢N6fxӨገpxq8]N:fdVYgug*ΐ/LOImfJ"8`^6$ZEg&ZtDE(vkߤlJuuiKRuhqI}jD\ƮVoK"HºEbRe2ZE$4A\mð갤]]L|e1TQǺe f/nCeQZø%#nUۮcm}HA4[YbP9$&OcNCB cId[∓8|rzo=^Rq:u.ӺU2.-SqŹn.XLK u[9ɮAĮ.9v}r0(u%.E)z [}mե/z uo6z[FU]6.1P7.ۺBøfe㡧2<ΤOED"qx#i$.K2ۓqK$>q̮KOv]ӌîf%ntm-%Ku;5+Gӭ^]_ՇC$pH$D% c6ofQČ˰O!c[27*n\]úM5PZoúʸڥ>tѹs18EQ]uF+qn +u(cfv-cIf]ֺzYk7Y;$^r,r>=9d8VO"r"§_[ï~s/˯ԟ~ۃvԥ?;Sb?~oF;?8NQvz+''+_==z{<Vӥ^z.u9?YRZcE:L/í C2-On?HBD|UEJRI113Dù4ÓpYI+2.J$LZ)43ҲY;~42D q4vԥUKui]2J.SKK-խ +9+q麅.єXWc֢.î e)GS4C|Wwp%x?LWUć2%ne|/ƭ߈[Jo&>.Cf$ u)ю[dܪA\f.q[|7?`5RⒸ-۞ n8~rxYK¸$2|qTbG1g4EHM%Ѻ̡uie6 F"QD 6ee}*2bfv.9eHJʰ'h8 df%o27q?K5U_^Bq 㥔$. eLxzYu56㶆]oSu9xc9 +!WJo_(_y|yzO<O_ԃ'?黓;No;88;᫸V?OoH/>ԥ^PޞOPNʃr<{>J|h]O]G2-]Ea]~N}n?8+?ϟp;9pOďnq[uVޞOAݞp{/KˮO_tO߷_֎M>upWeFtZˌK!KB.8 BqJv\jI8=XíZv\Y:3cz̞58ne>L\=OylXs"s8\RZ;AUչxeRU7к.%xYU\be%nl|SJhwr(qY_UQF[\R°!HpDֆ!_@ɒd}s l?U$X7zFǞld1sapw[ۉ!H%~w|tLKUKju]T1ԭղ&k*ݧ%a[IJ̲#X{R_Ʈ^v )~3\ԧh} ]JK֟-uƇ!>DQa)#qK,z$B(#1葛1+g#AG֭ 14ך`59svFֿ &R-ħħHYZѮ]dzke߾ ˲n&ve=B">>ԭ~jnXԇPC,c"J*C"̱Cqˋ5>DB1nj ^kyyE Zխ\>햓/KpXX%xv|b^%^ua-K%.;~_/y{v]޿^nzTP/Y|)[jiu)K׭W.ۖ/_.]c=cG->,Ѯ.D Ѻ ZƵAUcYzLRtPv/Fmu]>Ol-*kG/q ,ӡn!G|YH}4#~S-S32& ԒxģCJf"TB#qK|YG !oy9 q媬w[xd+q9nSBn97y%ew?se.7_}Ư8ooStVV]oEf|Jȃ%ħ Npr./-oWҙq1CZ+/6[Bi۵ӭjR.+{]S 3>-cƚKq;g1vf<ʺWkԭ\^p)*>Tj(񨉭]ZV ԭ~W?Zo[aZ2m2 lJJK G˰֟ !>(!-I_3>%wx\msCQabhUƘK<֌ %HD:3+ebV"a-3v]uv}5cuiٕZJݖV0a 5+c/ x =m_,Nw]#:խnU\öKH݂xkbbkka֗u+ve?\%nYLVdZ;v{]!1nY׎֌ص3eEP$o^676r\q.߼!C?~Կxx{_nۯޗo?}]7_^ot|?/Jģ:ώ`5DFK^'"FFބqu\8%o1qEȑطIn]e9߼/o˧7?_Qϧ\9_~WMT=`rG#]Pʑ-6GutgYj26(XV_P_FYǵfHl$n1c!Hecio'>5ncb6K/yYTv2 -UѮL:}{Ay /-o-Ƭ)gvf,-XʎGflM8ǵHԇQߍRg|jukm9C)kģ֗_B/ 54^oCT*!θm5DP'c/bb]^> ך%6&Tk uZ031mHr${-:׼Ƨ8?O0/v^v}e ;Gʡ\hͱ͸he3?[Q+2Ҳ{*""ԧ nIb1*LV1\+#rܲFxx}(a͐)CR4o&r\0\Q"q1 %0EM ﵌Kd)12۰Dҋㅸ0Tz$&vd䊶Xe5ݵ1 Xˮg^.HZq]{zA\oqo@W_/}yÛ7}y_^py\7/'q?rۿo_~㿉3.p˧֗/ԗ˧ėx[ѷv;/G9}9\8ͣZ[97ZZAQ͗.re)u|۷!ǣ!8q8vZrp\/9Ƈ mߵ1~S]J<ƭ[pO&7aQB򥌖 mǵ}ӪT.].(7O]Q-[H|Z4FnYk_֧چjR#%Z,OJw#a?ģ>08"&q&Ɖ56n3KS/_/o|i[ݪ?g73,S<뱵ubc-C}؆KՇ(S<ꑸ]EXLhyw_3Jfb|8 l9cR;O\I.r]p%.~uK|Ozq:w/?}ۿ_~/nθ˭T=w^CxyQF._nM=ot?_n|ˇg(ڥ >[Bx%_!#p|c/'r]&n zH#\8N|h/m,\vxzOǧ3mƇBn2*l[UR^zѪ^yOEUScU[}*T⑱rѾ/KMRZknS]xV%Uv2vգ$R2\R7I|?>ԧˇa| wԗ_"O[b}X e$q BebM[K$"iH?A "]"n ȃ~m#!\V3k#xv8t15226#?e2>]o]^]m/ޖjޥ:\Vu;,">ɋ!䜟.oFӡ7v"uI\qFz_339VwS[OYA$bau9\SŵkN9Z^(Unu+aGhѐUUh4ݨ[a*dB[b#WەCUeH9DpqaeRm1o"$q;?vYzjf.kPEPh)ԇY#Ma>eb^UT}[i=BƄQH-Qxnst #^Vr#q#Kl|o/o~8'w\ۮlc-t\5[fmwM)\kbXmDVzmNRov]wY'^]Zmgwr]1cm+Q].s2\LcHWFbsږ} x֧5Q6geqDDV"qN$/^y/^/܂U⇋_ůyՅNjy˗S^_˿{~/o_8\JO/-ģxyQބš9߼8Quk9pjQA0D8U^nWCѰ /9zQCG=G4[^-!$xPx-/xLO+t6'9Ѹn'գĿQOSU"Pm|5㶌ox#!,x4x?Qo2BC՗t֗xLx%"1#aMd6ַB$"DKjbD&YF"#X"qKd$}K\?/S">lduI#7{Ň9?|y_WˏM^/^쥫?:jU-Gzץ26;$n %ǹ|juZ9uu:unaX~_9ӳᘹ^Id#ګ=9'n qp6k~ُI`3^׼:uyhVޫZԭT[|%f%nkLI58k4 q;r<*' Zjnؕд%!g֬QZ˰:sHČDѕM|i;A [Et2iԷo`[C&vEc׌-;U_vCuP KǑĻ4D!5x9fTV}{ĉc}o$A[#!!r_]t/E:]*GK)k?!o]kൿp{R^7%nd(c-}y oPjqCmMJRmLA\KjGP*J| O3v}55![Xjc "(z&2"K{JFð&ɰ 19ݕ|Dӭ 2n&"Čq&DHl$"^q-^m6JF.eV;?}^^lZKw%&Pۮ֭>,z2q F%DCόi211.HK.9n+kƟflT[Wve%S;9ni^.*bzqE}.|Zc}Zqx,&vc؊zlͮqCݮ-*&Į'U#WY3qZ{%^/z浻rvvfvnYYÞ9I~ru pKptNyvv^h˿:S_o~?lnθ?u^|;W%oۛp</Է-ǧ_R=Ozo><"xx-qqv:q;p2z]bjFkI^cxRC#ˇr|;7*h=2L|:9I\u^yi2.^UG#U9\ ѵm*">jeuk\njmiu=$uMsY֧zTԣ#u^HGT˲&nu2MKJB)բJ1/ԿvUPO[ !UB][nˌSƟ_ŧPqk%U<j[|JGM4%"&n Zߒ#&G0d^oW["!2R -^Hr^f⶗9Y322؋+up$23a^>Gٗ=0˧7/?\o?t_{uz6kZ{L>:~u;H_[8?-鸵9,㶱:0sqr9vTjGeE&s^$qj[W1a69ZҺ.IE/⪮[KRl~u=Zn]VVI?\4nA]1HhLM :m]o&pԖa >]Ե 덄ؕ#hz_?؉ǠL!:xz\\nzkgOŰ22nۑGcM=#n5*KBtB3Aw%u`K& u^qɄÛ1nVё:c%myVq"&/ k՚uU{ZbֲƼa]^^{m 6R]֌}3?uKDzuˉm=ry0Dvz%PF׭%ԗaQ[MSڲ9R[3&n3D?͋Z!uvƗ֌Ơָd$1:Cq2 /A I$nǺ~kgƧqu3n3~\N߮kDb][Z*ѵ.%RUDWRL(2AQ–rbҊO1Dֺ9C+4>FD6ðn8#9^$Ƿ9fܮs Iq-mQvi{BZ >">U^ԧZ09/Kgۣۛeۥխղl^j٢RjzTu[O#_\]U(KJkj{QoK%eYJ*#X]OEGJUU(*GKMOS+  oBH<x$~&!nS|"c׷"! !%%$#GB$Kv1G)Hd%#[ˋ5^Ð~x}Fwᇮw{]׻{ڥ~j|PZ{x$xEE|IO-G3(x?9#~qqp|s u?ȴs=L%]۵ngl28gF6qkz13.gTݮeKjvW[VKuiKOQ[Zezt2cwJ -[$d*!N[( G."$uOK_\L]c^J,ar%ǚԧJOCDž5dt.ֵ*L㽬a=FD< oWaa^diرng]װ0Hj,}[]wHd{$z. .q?xO~?O7o^\M};8\\tW_~o?ֿw|%Ƿ-ۛx(˷^nu=S9? #_n 84rz|ߎáӥx÷$/qdlrʼ>!~?Ň_n߯] Gr]xvX9ȇOyukO]W 9\x_,8X ׮6WZ}kq]?ӌ[ҸMƊe#s88ZI:ќ*$;Kn[lZ޴nŸ-Sm1ZoU"պw[4" qK4L$LX] RF2*!A|z Sa Ar(m2Gat:\{YfzŶ.Ck=mΫ!¢-cXZԭe5q[Sk|eA 1FL2mS&z9fd?X>Qqx\1r#nY^ƾJ֡d׭+mQkig X(k#177և}n=˚q[cGÛK߬XAX֖v]KoAV-ֺ%ģԣnx\n_e:JlYˌmƟV3vM%nex$z([-%c| 152Ǯ;GAm^/H=F%&H$Č}3nVHRfK._ڙգz-׾IյQK<޾ۋWo?=˷^>//~ O/os'nuէ\)aqǥ^4-(/vzj 3.fNQFJ ̇cEj$%- ۉ4&YN+ijEqX$YaVi-. 5BZVIޭPdiDHIJ\5G% ۙdb1ImH m<6b1{$f\o+5L|8f$qz/{q<3UK=vgf^.[z)עd}_θuf!eJAQtl۔r/֌P3&ZqKb nnm"S2ccFk ?.۵n3x*/})}3|kǫ꺵fZyy3]&2kkǬ/:dYvms3k _U*%g )a @Zcxdڎ`d"e,Vk(uz0Jv}6He}jBėnM֢8$Đc׌ېȸmee2J8\F"+qs\!1EOb$gamj9R"텸%du/w9n~yi_y%xj(q]-s&w͘U^j㌭p} akr5:5UJ,SeXAY%*3n23U^q25x-&qGD̚WjI|jБH\[zLwI֣x[ښe /ⱥ*Ccv;&44}y具uyp,”d}5#923n%q:*3MRaj̮0f1Yczębsۼ{"o˷Wq[u}?~z'_O~/o?O//nO/v^py\^~w/.o^vqo__P_;PG_#[=^NjO^\ /EB}/w._C|:ߩv]PO/gSq0ġe]"[?%eğDS帵p|zԗx/'8Nq./J=p:R-=y丵߆a2!u+"Ë$/ҾǶ㪩?KiG不rㄕFle9|X^fԥ0yjrrtǟx%nmZO-m/Ju۫޺UVu)mUbWMQYRZZ둪cG(noOWYTYaQѽE}Ϧ˭Ҫ'5g?-'M8"ƣ!j|Z#!M}ƟՇ2&[ >M3mחA$H-q p1b$"Fw"D░ȸeHDmj-H$[o]9O$++##?\#e-5kdo?gsn{r_]vKWhz?xE~E.ĭO_Z*TKˡn2>uqobrfmϧmǚHkKZjGuzN\18|'O9|s8Ѻ]m8:vX)RA5]rZMZmK+kVBT%nG]_FXDuXԧnWgڲu 6"u]7m}Y%[Ev4P2n)-:CC0rLy\-M̑pZiLeX%C9yᛃ%2n=ZCZ^%q-zE=6D"-q˅VZ[ﶫԟ]?nUf2ʑ>;ZCV^++cWeLVܦM*+D" ' 1#]V}};u]^7[2kH\u[O1nְV~SE|ZY6lG qK([H\v:KCJ1vF=2+ &)H Z4"x/ja.A۬e=2\wi׬ûm}*vYm.cP[RmW\hⱗ%K/_Ky{_g/[긥%.q|v]wBAb+HF48>xD'7$p8ަq5c}81,!9\F7N#\!,1:/4ԭx$*cƗaZJ8vҪƣ7]t׭# C cXU݆XkͰQ\a۬G&a e-_8!nY_DQG|)Xx#Z SJdT1,j&O]g|VdB|!C5K`Xa}!rQ6֧zˈq+Ƨ!1ĭѕC; ߔh #D"euq[x+|u~t'V}kK~q{-?ɋ7r˺}=<rX~g޵PHz\?Pb!sFvB'/[a$MԋJגjŇFM$ZwaL4M̈́*bQmko-ɫw$Q9!'vwLV5i[ca0Fͱ"^+SnW*c/5c0Ŭ_vgz RuS&>]RS$GcՖ9cwCX3ÊdI1UI#ԧxmǭ$lH5A/h=*JǮġ%c*/?.S~RͷJIE6{6}7'#[+fӭf#z٭]3z9ngV|k.66Gjfd88n]8n2._BX0֧9ͰCLX˺u6B=F/ˮҔ(2P__.(:C.COHdtPjf$Z^Ȏy·utm_s15]cGxŇïC_ /or:n8\ ǿvۿw?ݜqaRħGLD"Ñ&D1Cd!###DF"#ؕȺyE*92}wYGx9d|Am֬eG/~t߮wm/_lU_mZ.:W$sYN[Zպuz\:͸,NZN:51Y3mu]ӹR#1lonpDǣNvOƜeXaM5mh/WRFVukԧm/DfQ͗mZ5"j躵n!4u4R"H2bdSҲČd˰GD6>OQ~8x-~3\,úm}0kOHM[؍cm=ğm}5f|XQO۷0n6CPqnjW)1qmNbnH<"A7qƒhݺa=j^DKn3 MTq]OӷuEڮwYWn֧.o_Be,zuk~]\2kum/.7tǺ}PuLͰ 붗DCپ=F&}p2nB=ʌ/%1P6&TPa^'UNθ|)/q C01CM8T:k9 unj`$&NƈAX cD>zغE6/?*owݪ]]2ժǮ]/UnCտG&:;pa=ƌ2jJwǡ 3'A=1#cbmdX"> Y].$7?9VL5B=.NVrdߥk|<k}]zqCQ˾[.Kޣ+ՠn3vi~jD|H4RAr[{ٵn懜{-vٓosd]{qٸH^W_q.9\\\t..7#xs) 9˗+W\wǿvo??H^jw׆_p)/߼o?xyyQ^7/J^>խx~wzr߽~"Ԍ/}U^Rݮ^R,VM)+l VR%QK4֧֭iԧK=G׮GaӲvOBQOB_խ~D<֧G݊D.FT!ne B!!xԧR)1럍G?#"Q8#!9"* %+22rd$3$%"20GbW%yّq=!axpeK?^w~ꞮTk/m߹|:cL]6k}yA]˸qrplqbuz^3ZGE*5#p6 690̱:uUErk]κ-u]m-5zTQA|)K _1ܺ&2,aiGb H)P IF[Z .Ό?Ir,JE?KŬ/vXXF/sm~ӎO1 =jo12l]_-c˸Os1-HE#R.DHh$rC?X)_>d~HK]R`\uK2r<H֗m#qU֮?Zj2]`vsIx{[w3u{Zŧ܆evYeCVu+r(K=xԭla[izLe eYO_$_ģN2J9vid]s(/1Ò%2ZKƗMp?93m=N&Dq512[A -D"K V+SeFuCVuEQYbס~S ]{Q֪O/GEB(%n3BI2DVė*S2#h%FNR96 {ܢfl-L-ue.J+KI${Ka֧{kLnXqUョQEPtkWg,5c׬];&~{1ZZifF$#ی7 H+mc$n9Όe7׵'"^pq~|%.~x{+uz|WowOvqy\9|}gvk_?G?(?KħO﷿x{rO /)iLUh Q9m)!~7'Rl\P$wÅWW) /uT92%ڦ.·8nWx1I|rd2fÌKV/޼ p?6Ƿ_qC:Ӽū~e%\}]~xՖǡԭp7Dzաʥgz\:{a=ּsˉsMr\sv:l^1yͺ^b5ZF"{L1HtNiȸ߼\5KM\RWu)!Q"BKoB7E܂܈1kc<9Ĭmcx\u+JDN֚ץHK6Gn5"uK%v1,c8uۗy%q<>0cFVQFMf[;Rcw.5vZ?*9ėdfk10t Src]2ZԣiF$zI-A+/d5{6ou %qPȶیk fHݢNL%Vϋ\qa`af^}5c1ی0c*\fe.PT]e#pL3GR^f6Cj|)u1#"!pjL\\͘^źn3ZeWpV6=˲p֗J(uk̘V(V2VPE"~J#e%C2qJ%&SR[sضFeNWOf-%3&nљ.a:sueV7 C[GQz͉cwNlLfu&6|.ۊkuk.R!cR&ve52̇a/aʘF/jVI&^5{fyyd79o{r0vw^!eXkʜkuřǯ\9?.o~9q//o|9__\7O<.pqq..qq \~׿tSxggxo^o~r%o‹/zԗ_^8R-88~+NPvq|^r~9rKyǸ}SaUQ[˘/8xǡmnhK]2QMOqմurƣ|C"IN8ns[2 $o1vӽd#c^K{5GešHXƸޤ]Vjku]n֫5n}ڥn"Vg5W[e>uU)J%Վm(VNݮz ]jKYJ(XĭSM֗hW[0,SzdBQbꟄM7S?cw'1>ŭ%n3#>խe|Y2xDֺX%#*"(V֌"n&7?]D%D>$2Ns"JƭCFBėde{1dF_dee2nYN2\Ev#G&0:^/ױc~I~_W׮k]{.]?~t.VݪVDQT/\Ǹ]Vs0Zl2됞|;u;)c].m?|EhԫCόfîFbs>mfڣ5n${h} qk͸]?hst5jWQ%iVv]ck֧]jlݺ֭eE$aQְk&D4?!dܲc]kk" s/ԥ{{fjf2֮/3ivx.M] ժPT[åk}Z1U2[:ve^~u+2u k %\,3f\5{[)oƭXSt-jqEeKd"]VcK}ٺƭD??e|aZ ں%2cJ9Bh|9t Z BeLfL214Z|||#k?XEVHdLҘ:ǒi웩jZ3o]ĖeX.m-XzԌ5E22zc]?խ~?D=®O BtPbXZ 81J21Dʉב$fL[8DLωħ]9ery[$\5atcY^42q7eȵh-In=buU5֣\o,][[WyA-n~3FexMKu\ۤ12W ecmg]G]{ ^J=7ÞǺ;_r]˛_+~zxOoT}w|s}?vqrqߺg8įs/x%P[[ȋ-B3~q^2wH%K/rcģ6tK+VJ"cztxKKk:!9)ʸ HO2/aLgЎñq$Ç3nٗڮhsv>6kbKÎukGTE6h*Lr[mT_ZG8UCQ)N[{Y; Te.3L=2 *!0(g܆Fm">ŗcSu/"d"+##qK|IÌDBŗ9bCfŜI7/ۓ%uI>~;B^6n?9nK>7)oY/ޮ2kZ_sZ?63n_/n]SWX/~r]vPWw彺2^ .UuƗ8*ru ep e5C+J|u^=1ì 'D >;s51G]W/#5t4ZW=VPFHM[Ú*c#M-;3~:o:2I(i[ifl oA)ը [ƸMird%NĜquZdZFBF4|Z|3K|ɸ3S ̠f]e]嘎 |uR`=fh6>%nq?a&n6SƬێӋcXq+ƭ6I /gl|RC|X;e2þ7Ccꋸ8%g TZKܺn(WЃH)GV־yMRlgÎk11^:«ZXkhq-oИH-CPx3Rs 5K:nCúVB+c|T?UK)Bq՗)!nǗt(5|G]>5l #2#1#682t6N5e/Ԕk n;9њUQGHtbZJ-oK"/ri hS ۄ5nv UDjXPE܂*[S kfS2%DxD5wWBicb r$&Y'ҙI(Zaգ#qG4ҫ9K^/SXQJ$p^G/y᣺\8/B<>a8՝jZSmi8Nx+Bd̸I|c<^ɸ">|>N8vv]o mס5akͱ4l[_#RjuٖҚVukz˻ײnm-ZUZ?7SluQO%,Re]].jWծ/Kz#t)ZV_S?G.%n_h=ƭ+ ˌ[=z$nH5x#jroqKǗ.H=F.1K%TBhhRyHg8NIė,GB%9HMFb]999ȘcOoGF6S[3o7oGƬی9nq^w;w[Kj]o{Z?@ɒ+D8ʬ*4p%LftWURE/\9ǭn{뭳h3ӷkf##k"9r9LJ˭ZіOcĈXּ仳-qc03vu^mU[N<Ƨ֭\hخ6_]Aukm:UԣMA2-"/uδH4hD‘IkFkuٷ̉Iu Q[\.1hݫj־=Rj E3ĚY1kO,chTEV2B2nGm|YƬ"[RAԇzQ2f4fH^Zrek0,mLJee8 ˫n-U˥.DdQu-veޖ>|xGؚOMXO57v^U3,+q]R.۲xb.GbY[._E}b=a=5'm!3Z֧S3~U2D)VmBj2>%nD|Ihe$"&Uv!q+3l2D61-a"u`yŲ D"pbiYxxZvo3&%n[.N[pyTQc݊>do"QN/҉5>9cd5Q8IJT=rև%K'L|)*"mXB$kc| O?I P9nSb0RR-e|*oF &XQ˰Db uSO-#>D *iC&5ĭ񇸵>5a츍O3q!u ی]`HՇ Ŀ!np(!cEd$G-$6:2yiu%\"z\sNMɚofd|oۛSYJoXO32/_:P?^߼.o7~ڟe?~ZO&Ev<.Ro\mvyr)Lec/0>gWcΞc#D|It?s98r!xm0'c ֭j&D^ۄ]˼v̶^:Z%J6 "[: P.P56Ɋ2%غMeH!zyDAG="Դ!zMBLcXa='J(:ݷG8VÎZ߸X$ێ5y.& Kv̌ c`ZR&a%: -s<5nǰƸxҕ /vy+F9nY"nt՚[Y;vX:v1=5v9׺GczKuK5W[o3#\#T,Km׺fKʔx3e%z .N\vJy ׼ۼ\%##"ʚP~rpuDW֭2z?/.Q/H" 5TeXSFWi$R-cƭ n④ 1iƢ3GəqoVFfm##Cd۰q ƱS2=[^'Bjڦlz1oY[KCMxZ]]]noǸPg uC)f {dՠno_JCKa&.B(!4n{8UHnR֭6cmiȹfN^\ xģ2P·c/XBģDoúU4RXeoTݮq8u32z9$|7V˴^[q85-lu ՎpNDGtkƇC=[#rr^yp%%na!(J)-3b"fv xԧ!jHUB-F&3B"DB$$#Df3e&sd1Gc dídȺ;֭?wvSo>w]?O]]W7\6nzKOR-v/ӹzo3ԧˇ^xb=Uf/Yt\K<˧ڰcWv1"1HfkRjr]]F-ǵr,.-5cc^u&ZeƭGvF_JEWOt[ZR{][$%nbHҘR8I>5좗XXJļP"c&Ątr0`e8Ra5^\}%xԣ-l|["$nK&ZwD[->}nuprk9rim}UZxԇ0_D 1Ԇqh2SbMdI^2nDCHl$&5ٓmXFJۺ%9r[FJn⽃C㶶]`=^veS-׵5Xu+Y'-F}IXIA\W!#WBl6r$畟۳8\rKI̸^+su.u.v~nˏ݊뇋por\>\_~troǿFW"/#7)xR_ˇ|7޼Ǜz|x/o"ԭ~S~DP8~9U%Wz慷yy.A#~7ym/RNϘ=zwqr颃uiK}o"!9cr}-֕or<}}%[6ds}wuW[.[Y,*z?jK[Vuݺ7bR]-iգn/K߄V)KKYW%ne˚TXfD׌z$ΰ %nIP!ǰ%bOgGC l/d ,cXF T/q DW)ˑ5HǮYrŰV.e$eY3vۮhb0geu+(Zo^o\[}Rvhv͸*.+" ۄh8+x'!=DgϺr \};;$crr-˕r+?\E=m o_^uDžZn~ݹrr;7(~|?]~_?~FTo<*Y͠^ug117oOG6Nؒ3~ɷ+Nշ oz09>D5v!%nC)ұHUYzj"b$2F9$n%>%e,CƮFK%%CҢ͌`Yxy+KtYm]zwTVZʶj)[RRmL.nr)Ֆu+Z*ZYRJ)5vw|*6ԺjⒺPn(SR?c(>/:>*U&ej0-*~35nC=2D|*CտwǮ?wgN׏o.~?o~|nחVWߺ:Zg}o1>=ne]K$;\U-/mFCY5t]#(ȷkȋ=י3|Y}qWv]W0˘㶈!!ou]&Z9?vP]gdvu2r]қFۮS-uk(Ӹ۪"SۚESnգG#dXyXhbz$3GY[cm})WJ0 Ys>z],$,&gыr2~ԧm{u&mj֌k30eX>ʸ.j޴-eK^,G맊cxqGjًB ckB3丝xL≯56^u1LMqK<֮Ĭhu"D#DzoÉ% 9#n%kqkMƆ.%5^~ڮ˭u,Gu5H$cvvm-/qU]?qe}ouV9u֗slݺ2Oa /aա!TdVdu˙KI86rԗ3ne"p{gkhƬLz]9N9f2 #1sٗ?9Ce#L<6Hf4BiYiXڷ[ыۮaZ[ˮvaߖH,*os|.U/[V4wњa5N2 ^q&C#28丵4yIhp1RY#8/[x# "I(1!AWĺs銩kʨOkY^^V^\,+/mzu;k2G}{6m+qG2ZeXµCZIHwI|;UN$Hr\׷?;\^/89vqۭZJ\r|w8\qvS^bR%~K#eو GTuAVr$T/YicLo8&^Ëvu;5fDxki}3x̡zl66 ukv[چaIYOe(ewu&mҡ]ht[Fq*!CŸe-YöcplMMnQp1ħq˥n]aEG"G}O j4ZnGc/g9nE(!bOS"KKz$Ke=:Z$ ~S-4xO3VBb[x K+N"WL}!Ōsfv8>~z o^f7?V2Ï#gyI;2/Won9>y^?Y2un7oj})S(}z G/6}J8qQ?b9vb.2ngW3n{'q\i\?''ľ8 / c6#cyQAs$pF̥ðJ4~q+S㶗֟ItKf]>%ѕi׊pK^tIU=vIB}I="X1ģ$m/LU9)vZט]dZn6GNMm踵C^kFdrkپݲxY-ėa=R?E*2, UV[VrGqi1P2v[5%D*-KL4,1c]3z2vc㧖e.F حҕ؋K_[؋qu⑕bcEי\qPs{.!#*5uhrY!a?嶜nY2f1Q?!CV=C^nQѸew/~x^y[=yQ~q/,/?xǭx՛yoyEQ鿣K_~a^´Ëxuv=~Tj]L(F/Åo~:Gۺ]V}Fm1Ga=^8y0Q>P5 J^$/91||vߵ|q.n};۾ױհカKߙnnu,Q]:;i֋Һt?\JYݖRʶX?գI.-+ѢaWܶո.-ա~Z x,-g]JħDT?OOu+)b*~H=~D}/SėM ̑cXBXeBRP⟉GPq_%2nh= D#22!]d^^GHd$D"+20GFd2qt]o^?cGN^Z_x]í]ogOkWWחۮ^;[N#orӹ.ʒxI.&Kѷ[;;r+Y||yrI8r|pqwN3M}Վ9Pus/3{x}\a/t KKj}jKoZ`6-kfI-ev [2fT㱳ٮLӑx[⑛DzL{iZl"agew9au{zLո4z]5]3ێLħvR_^dߴ^ZVhz S**_’2nz#[/Gu˭1LN4nS$ȉ "J*MXDkeHmk2ЋJ2J*ѰT<"+,ƣ$h/zD5GpdmGj^ jOmkJ}#R+X/Clݲ7Rk\oBZՋUֵ$uc$nn~6Xm=OGa O&SaEMь2Qeap[0ya'#uN]tư2 y$ gW+nی n[*q[NE b=F/;~\\S=.WܦK1ޫѲeFxG߬eW"qkfZOg>խ'nxČYI:t fXL6x\9CTBLdBdL#5HM^%5ZőA1"?$!q|GmML%~TvƖ\-]V"QV6ԲnF~bH첌zdw:\%ZkFb׭6 [4\I>9{]:p\Źﮗ\^{ry-r\Wuw׸(ߪ\û~w%ᄏ}ݾ\\^v|wq?\~wG./5˿0'/8#۟Ox_ʛOU>_ċoԧ/!JxwB}9o q卷ftW‹M%4^%)㖩uDNȇOG8Ӳι8~!MzB02&##SZҕr|cst8f,|9NKԊBI26 %HCL!C"cEueN^sD*GF;^IΌ{~~l3,We$Ǭ|m~K_>ؗwQ]]ǣv?VkjuZGu܎nϻ?ʆ1˨i6^̢oz:.oc6#i̚s#B}:W=֣Zۉh$j-up$"昃at[Aj[o֥Nj9z.s#nS*T$n(Q2R"(KyX-JV%ihĮ// #b%;GNƧqNOcZLmY:su]'e62\^+2{UCOk|z㧰H6nflc1a=qOe<5CeTjhԟygՉ֗,˅Ch) %n!n*;j:RѲTmڹJt1c/^D eƬۖDJ$ԗW=JY%%r5u<ޘeCNO;]Ű2ꇝCZ_²z8qĖ%[(V+Rj͘Pc}ĖhY~WJw1Ԯߌ[BBJLlS6+ eah͘meFkB C${,h]FGhģ!ȚX2f61|Z^SWM"oźm/TKLܺ1qRJ8n]R=WD+/4?JkƗaN.,d kB` I%Y$>}vg0a1U"#kDFVNzUD6x %9ʤm^:amli z0kۘ;FESi`^ёe5IT*!diܴ>]ƌApǽ3^1m[vĉNR#} oqqkmDϷs7n-v_9/y}:wn|{}܇7~on?I|߾~v?pnSۿ8e __8O_O/?|yq!(%!.:ģ/ _:Uq?]~Eoުr^\|C\˧˯t5Hu\3^N;?ܫ2Nver<mo´mN՛(۩XJ$đ9\RǒztH$ůɸ.s|j~ˮo۾t+Ji_ު[ɭͶ޵z[E՗PVl_j)7&7S_krRTQ-e} -jSRJ eI?ş֗Rz/[xOY?[՗EGK}Zw_ԟ&jƧė"[է`9*dGM| ?VêG5/h&!xl#xLveȘH##H%T"$2:\9_c.뛹R㧮Gyv_2q]so}?\~rxeG>^ӬVWGxlzsZk]-kƽ3ucn匛,SbzHd<Dښuv䜶mw9G|wʙmLݻ;ڻż>Lh՚ћzt{(QjoRȴLХ7)lIV}XdG֧8m ģJ- DAuzbPL+]f<۴nE=2~Z )1/#HmERFS۩ xvz;+g,aULlfZ6zȺ}&\GB1r\QQq3uG6Vm4cX8=:ZXzrԢBbIzK4[}Y]ھVS}i׋N9v.ܻ^Dž蝹Ǯ~7c-,Cm}J=^ԣ~Wn%>%R9o"޺İO%ӢElj?e9Rmu.,Ax sHB`rxI&v%5ᖐOuqeDZ![!1!N=^,SZwu!][e=^RK[7k .]ģv=v}J Vo) Q/1![э_&Z$SBL] C5ON=zVzd F!l=FWjH" =rz$Ú"Vb"5x݆xI"oj_UKƬ]ݶJz7iaeDVNlRLfx\9H?9~w5DZ7u΋7~vݷ˷7[tv{~>n?ts'=nrp7ǿvoS_8O(PSo^/~x+/o˧(%hQ~x||ȇ(Bps~\Ŷ뿒o~ - k^U#9~9]4Lqz;_Nr%9[7iSSXM8K\u=79ŷvr&]}rV*Nr.b[x LzT[2JQJQZrUŧ(wJXO%6zbզ©oe( ģGףN{,:VBt!Qx wx}Z_%ėa#h}/M B=Pbק`$ħ0o[|R#~:bz_ԣxLjl}!vЙT[k(:e"Uo!$f4qDFFx(R!I9\2ga{##\ns1u.yH2d>.9Ko,:f~|w.3~,y[W7:m?ʭݎ5at6*[17/6\TgVFnBb|!{fHH=f<>he&HdҕxDuK5nZ&O{sFE8w暪jZOm4GS,qz|H|ubfF5]n%hwh,iVN,)Ț3c{+F!Ԗe060=.?ua$ fNt qx KmmUS .GjES5Ɣ\ZģkFb\ ]D+QT3QsujQo6 !H^"+1#Mfċj}װ sw55Ghؽ=-Ra7}їo﷗8s\\y~s99sܷ?ݾ}v{ov97۟nptWA){Kš^\OvV.^E=Sp Un?爷{|t]x|q!5Z2Zr[u(ª/ Qopdv=ƟIbT+K[=wxRG2xۙSC=-cc,ǗvQ$eto4%RoAoH>Q %*"+0-$SǴbؕxėH|/a_O/M/&Po%PB&b')>]TBfƧ)])d|jx !UJY 1##3d>8uG>v >pq||_rGH<7vѻÏ.v]x?ik*:^?VW.]eKv`,czTަ zdAg(/a^=yNץ/wo!H\^/nb䎖u'1H/;fsқ9~`S#Jh-i?orȰ2$czoo%I$ $Ce$FFoIH0E%>njdžz$Z2K1V(.-O6F9 Qv%dƨpe;mEY2Yl[|R%_+"Poͤb%TDpڕы7LMS6c0(h5ZuԪToRZ3&=F:^C7iQo߉j*ʵv()ډYٌvv0=RZVx;Ѫ/;ԖPo'wx!D*m6֣z KbD#r{k*9JGP_"zKLGn%64~V$A$gƮAİ%İǗ(Exְ(rkaGjJ#d<ZocoSue%2Z16-U֣w+htȘ%b$3 wIf7*9! ǟc.6Nd k-qG"U-SJ-bʰ-5~WJ(C2T^eOZ^Gm5̎~T)Zx[Ƭ{C#vlⱤRN=D=ۍ1 a5\n(G.Ys|n}pn˽>[Mn7}{u.nnq]ro}(o|7v?wrsn??߫׌2m.I?ŗ#~?]..xԗ_vE$~w>_O=U_{\Uu/ǯܗ_zyj8qku]{r_^\8Wn։nZNa44Tw b)[#. s$1?O768|ɯ20w\3xkdhW_ڲ3/ݵeui{띖۾z+ջ[*ղ-Q*k[koUѲkf)PVz)*e=ۈGkDd E۰Qb K$KKbQTJ.*#VZƗAF%xD|ɠ~*#a=2~h._MXB|xI&GݗƌeBX_b b9[ I'TBd$Ș!2'#)71#98>q}+;[1#9?"/+d_͕r>3 o^=r^ruq]o~p{׏Z-/munqhM⧝x[Ȏ]ު1C.g69c:kc8Iq59w\o#W-Kck^}05kŴ aqxhLh`]]-J%x)-RUzt_{s+*햨uOْݗ khvK,-+r4.ܗǬGºH<ڥZ]3vHǾ1=`lz2=/Zh(ưBf|J|ڕ#gk40fj_jq5ģ26;Xf߭e+ 6&ģJݰ!Fqeėx[OauSB_Q w6ډ$D$sǖvd82!:~̙$vejf2Z`Dw$f<4)8b1&_$өzEcƬc(fF6Kٰ{+š{q?b&j׋Rek,/?EXol=ΨX&~7`{r>.վuquwo}onO7#w᯾9ގ9ps{ܾo\OrUա=%Oˋz9}ԿPUo8\&w^TqD:D_XEhQ>(Ke49.mFrޝX#rjݫꌈ-m)%p = )*dV5Y1!q-BT.~ $xJ-a/ %T#!4#_%/CK4&*aOH [oz`2 mRV" Bd-Y3FSF2nRJGkw'ɘc##cc 1apË9w7|Ǻ|mW.yyqꇮVG_6l /ﮣ_G8t-Dq7UJgX;J9Bb>X>.ugì^ոtSx+&[C̈́zR*V.9zܴħ]LHzd#*%ޢ?,㟴oV+xk,S[i;Z*BPPUD3S! -D%H3]=H[:ėac0/Ɨ6ab2c؈Oc"CxL>-lFqB2!n LB%HdVqbjgo15]ve~qy7s˹r>L:5}z1Kۉ{̺ګO]m]k+:Ou|CoV;]r}Y.NPYj[HXtZ}3'C.q:lɍ|8G|VW\u4ߎ֧nY{YTZzDחnIf0.oYPj&&%a{2$SxTE86fcG.*% K00Vm_+[DvNݮG 91a9ZWńqtSkFFx p.Pe}:榲ĎR3ės9Ux{4rh Q,':ː j1sV]d`TDt&;1#&k^:+ӓ EcBK+1DYK1Lֺxx]j2,ȸ.Y[}98K9+íS /͎m!+a}G.[X4̸W(A7n" guo'uExoePFh!G",ҽ:U񻎔H0F*6M|9gq'=RGIX/-1ѡBuP/:Rg-qgaeX2v֗ `l=3+2v=u}xvqK<^)#o3޷SÍE_^htv_?~8yzMuyuݹ>s|?~mXs^/_77ߏpt}ㇿ:nnx wUoۧp_rۿ]Mo17ſv|K^^^\~yKCyy;ǿVEz9jJp\~r])\}!927DžrƋ$ue5pzo{8=>hkRQo 6Gz 2 ˽lar.É9xtk.bnⰬgݭh8vFҮ_fe,a%$I".Auӑi{uGRSPn"3Ph)_Z K[KR&T0b_Baz!c;_[!%j}mςK+B(( iC_ Kx+jrD;ԟe<2ƧȬ?E=$Az+V*J Z96:ct2~7^K?dᲷ~ˌku1z6v{j}6^MtqԌ֤u.YtO_Jqk[֟A+Z]PJ|z ;bJFV##ehU9ݍMT N'az%&> 7ϺF*z{$a/H5$Z]f<c̔ðWBKpa#%٩E%z3RH^ٝ[zULӰ~iJxZ/]*%fǩU&6 ;wvը"]T%ޖJ6L+Sc߅`rS]GT2RzZcưjqO0l.EidP_z9tE(- 2o&fL!wCYCֽz<RF"5&ʌ[84zkxd8ꑘX*ћ!5O֗Č.PCk2z 2jfuP2BRJH}j1&S͠8 XĈPQG*eʑ_[ Q̨JxČ]14J1 U 1J)bMu A[n4)Jdt#]Q5ǖ('m%+,vff9ÚUj1%v zJY=Z*vO,6҈6q|[;#s앋t5:9?ܜ:ܷMF|J8v?~x|vZ?rsn8ps ۿ_o8ϫ}/?m|I W?W.?+~)[?or.‘KW AK>ri\u uR8xX~Oyt9.͹]Mo./||sǶ?;՟vm_}y/qҾxvj{.}ջV`̞r}8rq #.||l:voi׬sxtx袳kÌ2TVn-7e}kY[v.KڪŽ]Z]{'a˖+nUjziX[V2noaYԮ_&TQkdUoU2lDkPJ(]SԖ*H|['=j2zli[jztP_$h~i7.=qy\.vou՗p9d}Xs_'rj$rq|ڜ {0OG)?&v%ǴBw+2L i; eQ]G[K2/m=ѱ%kYj3{r/穪% X#bvSv(la-2G* ۣ+%ֱL-yȶCBMY76RJ(>E흥T&J}PE#ԆSo- xa26)VoeEeڢ&FƟm/!6oH}a eԧͰh2D#!&[!B"#/cG԰k.νu3]n^v9%&c>j.ycb2u/uo?=~[_~ջKxݦajOnt5O8K}cH0:dގm͎rPHSdqb9>#c#7srC%qB\D6=q&0Y[\6k㇏Í ~xtgYtԣD2Z]GZGN]3a2Zoޢ&te9T9Ll:I^"ABU!8ef&cʰإx[2%VQoqck+_fOF$A [[=Rz2XT}Z;ǧ3 epdtM=r[G5es02SEWF$Np¥عs2u,LU<< #b K81weƗA"kkjc*H;^X˷]Gz̚heX[.-Sb+UHd=ZJJT[8v6n oK"s5(TƣP+Ü6)!x5YF뵮zk=~j" "h}kBB}jK[}|}>g&:BY)xLl˖hs݆F1#eadEq"Q3f$Frh93ktn_.o!mdB\>Xg9:-qM.7KюWuqkv8qxs7\q^[888?7qvk7nߊptsg_/?gx?Gz [pӫ/?շKnߪ%ǣ~W v8BQ^-oѕEmtA//I׸.o$#jrrOVq/x=Nt;O]VmX~bfr҆[$MeW'jކ[ovo.hVp;;Y1ڪ"U6Hx[ Dۗ8Lmits /B]ێpS|+VoB  қ d6Y걱C=vQ$߶k%Asx-T!BQcxo%JR"HBXF-!]Ʒ>J!B6t6m%ԟ-Ro32Էzl C"!RBD<&b"C]oc.3c.soq.?68̋15#\v1?8fn.z\\vsYY;]{ۮ]i.jmW> /:C~ؗ\K 5/Qю1vD%CcCDin#S))79k8G9xqBnφg8!Cqݘi\ۗ$gz4W WZUxdPHRoNfTħɤ6 r%&mI$cbc[G qV$c ۙZ֗ѻj9㱋j] xl՘I863-١=B}8lqf*h([IZFWuNU[ۋ#.Y7^:ԡVJ*aBYG 0x -%z VڪE[XoeP[-B}ymѓ}a+l"lJV-f}*H,VǰR> zŌhY3^5۱a=E|Z?ğQƖeXķzBo*DjnƷ0a*3! j%,*v]Z/KH%!$>͉O)H)K}YVڥ·J8uR]o1n&&IJ 6[eQ֣[}ڬGؚ3(aXO6T| FL/%groLE-\.WH~M\"~\.mqh\\~u=W2^\ov]}Kūu]llnuۃW_&پkwj_ZZVk2.|x_}z9򑌷IvkEk6xeuv/kһ8燜599.fWףwVuGV˶C[euim=UV_eXd/?YMvG_o7E݊UoQo!Rojmb"H{GR[K2JLQ5z -1-Ve}ꭺKKXjշJ5eEK"C&B-B+Pocz? ʈOČ&"#!c| nb"!JTFG"zc|8p.#s燼d.2s_/c?n֋YpsxG9ߐso7/nSk_geWKݷvt՘r6b;hk_ķ!ld[J#!%c"'322d$ep$ނ|]x9/8cvqϻsku> 'qģgWuZ۾vuYswWnwV]ݪ(Z_o%B(R-O/z9fU&dzK:cHmGY;\2^v}ZTؓicNj1ǽܡ=oqWJcr#W]eѵ3cҔa%&bi}9!{##!tnjЌljgl;*ӾlJ j84ǮaEPۥ2qwp;zkVba}يOc0!cn&Z Ii3he}T0hYqMj}Z՚T]Gzϛf/Y֌W %f7m2ezײӋaXxdX._fE}9!5h=NڲǗqF1H[*Č.kx)Xfls8}kLd|hMz+_WaBC_GBs*!o،O~:l-aH" .W2r2C~M|rKé$+ WĹ[r1G%#(.SspcIFk:qEiӛ2Ŷh5nJuZyGHviڥzoGaFo!THH$2* !U[&Th6j%D"I?#3R-aZBJ=HbM&[iE"#qB"Cb)rFo=mSq][Ag_Bl^7w%ľ?/{[z"g{˘,3ַR痶n])96Qw2z%a#:ގu>$1##H2D#"%gd\s̏ڜyɹ4c|['|ǏC>rzw%t!Pj2tTBe$RAէ!TY1!'&2$gJK$g&!A9$hRIF6=g !J5hkLL!SQbBKaRۚHKfk+9Kx.=AI=F:ǹ]JaLL2!Α8\; ::\DbFIk[mFoeb,GƮo7+H$L2GHGht3TZ3Gpbe2Gb+Qt2gfP 3ZjHd"o9#\GkJ)H$B<ڸ}kf"FtItMf16DI-Mc!"㮷::3CLFz4NdL*Kgi3^uND dzJdXkLΕs+ʔ$͹9׺J\IGH1_e|v53K;[tfv dÍH<]Fk MpQOAR0㰾շ)T?1Կv]WۿWƧHs)~w!8~w{q|9n~8Ƿvpo8#>_%Kp]_ī\.~+CL1WˋoW\V~..~qUWr\6z~\vܚge[qg<嵵mM]^}&niz Gc1θq1qƍ0ޒK?68siд/U>ݥaGT{3ΉdƧ|e+]ݺ=Z[k$Z]Vm[r{UOa.[GkJZZV֣Bn[%VwKeo@Dz#ms="KbF $YT@4IN-*yo.ŊI!ZbJ<Q[֧!TKԗhj} j#tȡG} B P? IFFz/x+ꭌGRA9DB &"IĖJǒx "#Yc." "#P ohdF\d.Ì9;c.'2ɘѹgѵ?FwZI7W ǧ̏}ylc[޲ھn]Rm#j>^ԧҥz#c$Zm2LƗd2HǶԢfik;aէx5M?0vmkۺ/;b"')Ԯ/6ު;4=Z`3~!bD}jDCAVe}O^m4Z*U\kxKۗs|?8ۿ?.Lw$_z+v{;I\|_n\>*A0׷ʷd|aQ/#|\d^|G|uqq7uj犭nRg/O9Kac^Mq='ˬ8NKS~L^i.h#woj`뾚"jhED2RKto/noSjƮ.U&i "$6ΐ:˜z[ŰɈdR҄HDBcF-(r9226&:?9ɽa=7y.ػ{swfeoӹ/51]w]}ٗ]{VKTףhVj厹24rOKg9]f1DszkV-cw[*lTؕCl%HI)3ģ jQ$%eY%ܤsۗTQZTiM2}()GO1 %Zz-3Z+I7Zm֎Dː뇉oC{3ܖÎ0co9!/OKGbox_ĉeFW"ћØbk丫c&VH<~"? sٍ6]zK=zTI>:?}8%ğB(h<zQBooQ[8!B|:GCM2܌Ąhk2rp܄$6fdħ X2ט1\r>s̑lg}#17d>Ƨ:6G8/}?cnqr]~qo8tRm\Uwqb~kky%A׾:G\+XL"9fbZ|TqѺk"+8c9#;k8·b]'um?wz8,=ׅҘˌ|w3]#?'-봛澚5~ַ~^e[kwtqZz[9BqI̸ҙˣ+N[ɕ35][$,#ĉWuh̰RğNf'3$DQ%Hn8hmy'ˣqqXkY=ZwmlӏvcOO']sy$ǕvK°fGiΘdSzF]ab"aftkDb !\ԧef8ܫMSFT e[>Z^NMv;s']I{`ͼNlu31*p> uoмge?1k=Zz2qu'CF\vMckov8%W}]WTvO||W|7]8|KC}^^؟vs\?^uo˟#wͷ~PoǏۧ?gY^wwss8n/no0'B\~=//8%}<>՗x:z%A^"r||!2\ r2/#+Oxe>\oÇo| W>GnvB!Wz=8/uUTukq:#:u;ڵC| 6\9Lr G V_ÚUܽoLs&+㾛i=F;]s8aXZoef4nz[/|JףvZUn:7]/KJ"uP--YvM[(/Ce  !$bZJ(:ҳ&$PoVP2bD0~_xRR[AUbDJ}h[!$B+Qe,xK ޢ!"2!R-"toY3㑑89K]oĮ3:5ǖq9e\߽-z7ns#ׇ^]?\~q!(ӎu9cRSH92rzt-nG+F&UM:g K_ƗH&g8ZOʼn;Nqs8 oΑia8׹(7>Ʈ9η/9ę|ngkqFy9s|w53؟?|Ď>FX9ڕqG_m+ډMڢ5HڡfXFh?Tz\% xqqؕPG_WCoE_2T/i#Dqb J<f:Ix0v%2ZWkqb}u| OcWpxH2=I JHh*ĝӬ>%c]J[GqPfþ96͝dגyyјmJ$0sەI&klO9>ƾ&G4^;άkV6rG>M_`.jsr}oߏuQ-Oo?W>o}\ˏ]^q_y+?9}{\W{r<")$_7~Ppsa]ǿpo___;%n_8Y)_Jhih%#$[To\ɑv8d[ԤSSG=}\˟p5~BIԥ?]cqXqctNN[VCGAiV$E$!2l~iW_mPN{p'X䄚XMXo㗱tk0Zoea En[%v zK0524NQrOf%TIQRH|ɡh:"֤+_B/㭄Ƅ22ZoE2?T_MA I"푡[ƧzzTBbȲ+1>[ĻUj)Lt?$Yƣ1Uv[-lJ4B)S? %!Dx$D#!#5P24pQ:V-q 2Ry̖sd>̇|KrG.Cxe~xl|O|pHxzyXnkZ66JyhٖiR2zotNJmMC_P,hiSBC,^'],w氷۽\[[~\/ܮ| \9|X9%[f_&KV:ȑͤ&[7'ҩۣD[i$f$$3K H?MLaG⇦6xAдKuL?a<+aԣ16`kzhx=V׌_1JǍLGnpo]Ռ#š?:c%rS8~_noxnxOm(p#w\se>>$|0/qom'Vwqɕ˕#W|-|~oGzqZT?z~>·yn%'>.aEc2,ns\|pMD\|g>XioFoj{E7]?ʕƴirTx+Ftjģڊㇺ2(6+ppȤ[9:dɖJ#`,։=&[N*?D#C%r6&ԒL1~Jt9/aLSTG9͚ϑW|W?_kOoCKkrj3u(`IbpΊޓXo(v+v cV0q/u]{v=8-obXyˣKatp(֜R_12m̘[ |eK]j>_N?|~A^ی} :*c׷1З1s%k}~zoW/oz~ͷ߽>)}q㖋Kn?}QN= =]p{[9B,/K_Y%Rġ!ԿԣA$I<.WD$:q_xHgepoq[L#>37.9:uq /~O.ѫyy=_NcVOG9?euC>= [{'ǎ#1gE 8~8ƣ+? 4mG_ڴiz^ZBӻ2ҪƟS- m=H*ު7Vv<ڴYSBSfӫ5}Hl 65t+F%2[behOeJpJ_%l/񘐬$[/o6&jG+[CSRRMG[p;e*/\t]lwtoq.htuYܷ~qܵT5]!ޮm^lI1 12nD"HȑjG7p;dе~&ȎN/\1Y\t'=fҭ&lou֖[+{VKI$BZ.6Im"1yxdd8ƩG:!C]Fl2c[kd?=jr>Lxiooʹ$ݗ>oo.Ipɷߒ=zW{;v?=.\漺}uo?ͅqٱa~qt08t۾ k.>p4\rx|:ͫһ3YTޫz&sI$qȰnj5Quk]7"\޶nGZ^]mRzѮ֝ivC^n6ܳckPzzP[zv22(%B5˰v/SHhDV-֟V&TC[B=Zr?[`K=J+`x"3~?&Z]GRoocHW3-189DbR"1ck##!H""iH_ƐRH=L29N\9_\_GH]>d|M83߽W^s^eo~qwr^^޿O7}iYWҗtkooGagK1"cv5c91)s[,3G-rGK.oe\D>N0\9%snArWy|:s<+||vM|G%W=z-sz5k\\1ժ/w}x}tq3즺P"F#NNW͋L>r|<Ɖ%9ñG^ ڛꭥ+f9n9-ƣv[ZxYoCm>֕H_5siuReC֨ZqPGj F2.Zoj0q*~e-ڈ̜FjRسcrc?Y.Vfu ۻT^/hJ#m=fpg5u /oGaQԮ"f**cFCc&g浾$:L3mƝx|sg췞~w}]7v/7J{p͍exntǿpoo߾]߮o"p_9ROmkSO_>JtBǗWn>_-GNh&~Яz\l5&W72||k_/z$_?..Zr+p.]]pv%ۮ Z88qM0m6b5W2|Օq؛+_/Ke:9mުa ƌG;B5z=ZVjY-.A*[E/aLN=z$Qv'jRİ[Fnkvvn(]29k Te<'6jUm(h=zÎ+1PI [RZB2ؐh0B0&ŌUo!6RQEGJዲ$ٕ%F/*d^hZ1CP#GzaYG<&) -rLHs ?ssw/7/G^9s83\{nx^v2~9$W-}wkiSVK9{SIH9f2$]}nFiLJnģzwJv)v!c,ӽ?ŌĖeЄq6ծpft%ؙc")ًe9SbO3Hf|wkhItvTV21 ]ձepn++ o-1k\e6!S߸}⣸5d~{4+!&J*X>m5 pKr.[2sְS2훣-f쭑%Rn [ua\V2sX\RB&QɎrN92^18q]:GcGVH,h.VO옗ԣT"D)G$ae(KsksEܵkƌ].Cu؛E:=ξ$NkDCS?D}7!~!C}$5!>xi4v]GƖC#҈hic:͑D>rP x]ܛ4$Bn#>BTZM=JJ'v)PNNzǣC\&K^~z'/ >^//G~i%#%_qk|\qyzJot5 ~C]ݿq\ouZNʾğ~K8tЬ׉`>F^12rc./G̜sFv-j*,c!ޖ3CQGV>VV)Z-(x{istfBlUB|صMfν,s.hhWLK2~"F|¡U#a`#J >ZꑦcJ]MZ=~QqhG3]#–DGK9R?C(#>D1Q2/#!ud$fbFFBGB%&#anWkioScά53f߬v<I ucĴ5#$eo-3W$wNtc_ۼ<=C2,֣aƽz_VWi$>Biԡ>j_26\t?0>*qŌddmSbFc.!8B"1>6Kؙ;ƕ1YKcI9%Z˼{z~H*"c/ ZJRGXBG⧃I KXIIcBLSžwdL掎%fkLfulrn=rݹo/2zxݯ^Vs抻Ҙ3uFV_:=k~○̏+Xv6qq}v~\\ou.y^7Qph9P?}~zponss|n?B?S܌SMǎ_J|:q+9a޾0#-ȏqWmorוeryoо΅w_E/n~_}\Nu9ӯs_Y7si|=%rZgivKzߜlKf0OZSVe|A*Gݛ71Z([h)%DmvWf=n.Ud 0OcԎV>P9ʼnv%hYA?efX! B_XSAHK[RY ZC)>&G!;22?}SH;!%h=Cu_ģ5`pb7qXԔ㑉H[?G<g&[Xz1q~H$s%qn92:91?}[}y}{7k֬n.۲fM̸SNUJɦ2Vv9`e]ɰx\Ƒsl$C+DG䵹y9C'~onj hAr^3ʑ!{"Hs.}5_Kk}3s}y4H ۣ5AmbWDW~Id]ij}dZjW#Xh; bd8NMcmԟz4]axDĖXVcErڻiRElgΞڲ[3׌vjB՟BGQՖZ-C GU`tiQ#CbϠATܶZ2b-9 KRsfƎ5횗MzMHr?_|K޷Uz~3u{ؕ1;׾g^={|J{$msnrjj:?\}GJ_q~z{\}]w^/sw~%q}]~;G. *?opݷחea^gg7r7埄?GGC}t|~_#h=߉G!QSmVDDAZfGi}x̎1hߌHE2~:Gr*SjM4~ "!BF҄lhF.Ccc( !~J"19ǜ;~9V8!W^ziKS縎ǡ&u]o\~~p{myos|.߹ ѯ5{y2*ֶ 5?>6B#c޺BoL|\&4fc9 A$f9RyļZ3>Z96ݼn:˾ιn+6{^f|eu͙e^u[wgovt, MoKpWP-8׊41! 99$Y﷟rL+umnjc6f=6^GCBHHǰG:ĶcaCou2E~Y.ED;.S1N{$A=ښkjsqCec2]9㐑#m!RcrRQtT:i"1Dcjⱒ]R*BEKdwMa1CWKIzh5#qck:6d&};J#ZK̤"'DRz1ɜC c9ү̕eo1f,s'z]uys9GnWvQ^bxpι6Yywqxo!/~;/\]<$zqjޱ\VjG1ʋo7?p9793i}Crr;C}?G}G x Mş"%~_-Nj+ /yRzox\-/Υoۛ'ݻM>y;S;A20Nt}l!,9cgKw:hcGobqE 7s?_&chDTC,Zql(oO;CY3Zj&sjHF;*QTV{,I] r1S9Duۋ`áET(Gs.JH+!G+H(3T[AʰdzA<"Y%xwHL<2>1x4)(#h= %Q%Ո?'C[e"DB%&.sUSB$9ənc5"!2G\#9fleff(\jZ"ɉtz1ڝvA)ŌJְ2-h=Mч`<&1>>r؞u뱌b|*,DHD.j>ԣh8WR$ʥ17u1ҷPzu:2QDj;a9G;R9mPͱ5_rIz>xt"#Q&hJ>Zyin[*Cܾ*v]3BޖVB>kC}N&cX]F|%&46CzT.EwQv형h,SB_n7us>nl'%>J|RwI<MJwoo7qȑ#rx|2M6_/\|呗W$>swN7qX7Բz.9n8۹8~㻜9틓q t9NR25t~ǚc}WlUbIam? MQCw}H{RȡLn8ISۉv Re0&{p瞉%#PiʰGѭzǡ_P)_btK0 cH]>VVۢجhFd!K#1Lf|zaP~R!t<2cMKDsh"cB9Rd1s?%2TƌmN$dh"G"ct3eǔ\^f6I9T1!Ӿc< Gb|6M0ĹmhLHHl$ܓטHN~ax eufκcv՛#:9G6Kr6+f2Reb㇄HZ&J{FF&3Sr)e|1aX3fX:'ڽ N4i4iVc.̅DӜ&1c9f$D ;L? 3G3ZH$Z]sxH%JI[8Ґ۞leWzs mG]ѩ=(SiD+ښ*Z2B~0H<8$ieF,a*!A2`&fcCqxl6 h$1CF㰻L2>M)" zlf{Ư8o}v^~VTbrꗗ^k.'ҽgg7:~vv& Mo__֎o5Cו,ǼUn{oLzK߾/~_/o.77:W% u~kݫ~˷Xǰ7/o;_.3wR)܄Q"D#*ɥ+|9rg%H.[MM[{=ŋW_^~H^o.۷{ڻ{{k7ij5u+׶L\cq y6p|3#Gƣ{^Zۯ~hatihd}cXF颹Z.-moOJ|L) .SF|tW=6TVꣶGYMnGb|H5EbDoVJ5"PRLl(Vc&KM0D<rHIxQD}6xLU I=e0O7)QOcLE%YnB!#+&4?EL9{+>G121%DB"$;⻫s)Hrr^f1s9oGs۷9cO9S\w&~eݮ~hwzVQj 3bI=Zx kю6Gșv%Wz$Q]Jh$dL=Zlv#p\q'4uq.cH _7k./u7ݷ֗y{u\{=޷޾λYگw]Id6v h[Sf0u<*3 dzXscpIFҖ<$9VO-eGEDv-E11뾕RY]ttQnkQ?~x 8R1Ph4E>x7&3*iG`΍wIKUGcʺDO|WmEr!r:~( QAڥZǤGqdgȶ~X3G+qhQIJTFM'n6/I:98z{ƙX_[r?d=fpx{4r_KnH$x#9' n?-q߮xo{n=Zp_v[7.wr%~ߑW^_\n4B㺼Sw]OǗn /<8ܜpnpB%/Qor>QA/$!\\T4&v#xy~[NQ_1G"{ߒoxtWU_-^|.w{wSt9~ 9,qs2#/9{ˤ_ֆ=>MW‘x=3qUo{Zh{eR]fu? %aIڊl &V}SGBle|Pq/֣*c_lvKMvA{`we|ZPJj+!z 4(vE">3fJa]'~ #0B"68ZJT&idTw-8JJtK|#aL4TH=wC4QJ?dٕF_P"2^n`@̃Lf{GV֗0+/Os4&:`KGqDF;3o'!q*eޢ'DNRBLddd$vX$R[/'2R/]gs12.rׇsܗoWq/n|pQ.2S?ѽL<z՜YRe?d4Zo8Oa9]K52&ЕVHcKFoHV"Hh+y0M%Y#ܽse\W9fTR94s9Mpr8v\]/v9typ88.Z٬Ɲf{:v&FH-D;C%!r&j2s2/!Y0bnPӲGI6zAa=Rjk0nɱ+qHzvȩeNufv8Đ֒ӡ̸U7Id r*66"eVkJ|r~RTx9G u^Cmd4f =]/3d=$2ZST'5ݝZSjd뜹o#g8Ks;Cuh(H5V/s^zh2\no!2Ll%z)]'mB #+Y"J2rؙ-Sx îoDŽZe:3e zJe3"TOXF*$[ƎYs};ޖ+>/͸47s\ϥN!);gOΙ|}9rHry>ЧG=?uqOgnoǧR=u]x&/_]:~ܞϧoŹ/->i}y<|~[s7z9ܾ]/79O_.8S7wކpOPS$oWԤ+GĿ]q{_></~"߼k"K˃yOO/wg7G O^o<9x9~vrc}9p=v3kjxa=n=^Ni7ar!^eDK>2 M jh/M_VIޥxjOjKe=~J[uANuY϶1&d *m/jtu# ecB|9:I125[4P/D%V&˺!Zַz[B17 .Ʋf_ߎUF*hbEŷVB}I1!"!&1!f$1!v$Iw]"ȘH4ގa /!C82'&M$^N-#C8DC4_fdK?%5o]'s{Ǘ[y5{ ^Yw4g}gU[nV`.bc(%܆,ԗ_eHL49v-Q ^]-dg2Μpxs1q.L\|8?N۷{ホ:rA=y:mb';.wU䞺#tru~IL6T"%Mx[L0o뮙ٕpbs&ٜY.YUozIe|cf\T:^i1aY;Ƞ1r.B9' wH<0ún/=qOG^̶O.B[I$^.xiYzk\xN$y.8$-j}ILw.&ޞugGu>=rOO~~x)rirOu]~xi|4mxw8 Ovp/%wnx[[^qvs$|.Hr3Ko9/3O<@~^?3ݟ>o%yx{t<:yzhqw^e?QA_nn9N1'nQ+'7r'۽8c1I{{CԳmmaXm/ڪE3m\^;^s](I]T2mz"Voz#%V$ATcbo[%RJ0ɶ^°jlZ"EBx x4f4Iŗ [!TnmX^T՗eCSKx+;ԟC-VtъR/s/VB11˒xIM2Ě1zIa jțo'^m2ԉ P0|񤷽=һ{[rv7ko/K5ֵ2i:\-m̪_Jka/1c;^J$DIXAd=D*Gx;3Sj5Sbuyx9[ɘiW}1d<|\>]\0O>lOvV{knw)i|e9v* OI$%ZH9Hkvx21gt٘ZF+/9JaNi&ݘ ޔJ8e׌]oDÌkgַ2t;w%tVj&l[9$ Y%kXox[JTbƮg WiFeǑ[!qJ M\;k ҝ5MƟzx$%Ւ%5ёj\DB-!z]/%"TWzI?/[!c[K)V®WVqFWMvs %2xNsLgv`c^io6OY(jt\~Y"!zCIxj}[/3 %jVoƸL8<.s)dm.gĮezLDrٜmf<.]/3&A%0^zZj12$^Z_o}2f6^'Kr,Sof5wк ^no1^&*E%ķTi%K8Z3h3eeی{Th((m3#qtmptVe6V$%_U "خzkjk&2K0,QaW˄dW4{fLLҤ; K'8\sKk$ 6\3&+~>-IșNS[O/9:lsgΩ5H?Dq\97͑mcZa>ebzfT''PnL^&NQS^*ķtDm_9J4iˡ/{M8v[0Jx)1nR/n[kh-DCI!feB&bFf2 -~IBZmPPb[24ED[|9xi^P"m)ᢂauXmKIi2!m^D#iĘh8TTcGF'sfeEe0Am_d:2ķqGȌs9Cîmqr8od}.}ryO?o?SRJt%i.]},euui>#ATf3LFee&ih}iXm- Po#ɒ]i'K{ n.3Q߮ш<3t]\N& ?d~s39gs/>αCiX)Oڌd^zkѵj}_% Y욉_oKg[%9cIrwZg5Ք%Ѳ瘄Y+~ַbRoHtnG>e%)hWlMf`1աV3^Fh_&1 e{F9i(Ӯ1p0pp3&12ikDkbӞ4u|KMmTPTЍ_:&7;IH BwU1%[PT)K:eU2*H-ۗ$.WF0B1T[áDb3e&6,Ps̓>9DXrxe\'B"+?-\5ӹi/q'7z;6N$e =z/VcjMpP:^&e\z )ck.6sz["c2c>xKk)gZ/f&6&^̎`m] Kk%#Q/^˘e5qcX>\6R/˵~*D/tYr-][0:RThTPD*[CaM1MjPY"zsX/)u''$%P&zPrnN"E۴[zIK$3ԪfK/)߈XK"TI[̹Mډ6\F3%+^fnljLxTdf6g<{豳-'yz;AyjHw=?=>g*L;vI}<ݕ8'#B~g6>?}LZ3+2~.Ɏ_ KpOk}9?7?]tO߸@%q$ķ&˓%#G{7x0^·7/xTL|$x9YV$iި3slɃNԧJzJԭK2.m1 K/so#%~z [Ibʓb"PHYVSMz oKd!mtTz;!T%xI%Rp1m%P9`(m bhԷCzK$T+/oCۘ0^2-֜rkZ /CoF| FdHd?dו%ֵ}E?XdeQYjMw[0 O1al.ymߍD"vt9 5e8fR!jϒnf3cc\= ߟwvs/͎g옇<]ۭ[WWRndJfu{+VMČ/S:xZh&ČFjU/s&K" 1#qWuqi1դryjr̵w*{ZLVq>-ѳO6mVͮ3m mtDGpL/ˌzJxoI[~Dk+]Ped{`lJa~N:i񲗮9Fk21ǒhy.6,ma{f#t,S0z D~z "JgX"#cq0x5qz4p0NH$0[{f5Ned5^x6֮#$KO/嬍H$>~Kb'#hYOy ]}ex޶!1pssdDj)FӺBdd(HћQdz%[!r ىFvE:a^"TmVnU;evڲėz xsRDPvo 1g˩sy1WP֜QZc/Iz9&X=s+4g^gq}}P|'Lkfb87|~<3^$#%\lWx;S>>mX8ܭas̓6cnta8<9B1vml}ZeKtX[0ȉhk ՕSJaximvoQREjv#eUZ9Qoqj+l}ɩZ5FI$Pe(jC-ԟDp H1s)wn N2 ! 2+UxjkF+"5Gg2(_6^OEԗDpM5SR[/a"1#0 HD2X"%BMdX30#Y"x[Y9tYwHCQ6c8ߨ?ݓ|y/SsO󋩗w}ǧ2M|^ոWW?JSGuo[=:5v=}S3L5ieɣ031*x-e-"^:"Z%2'mrL9܈qoqt|#/:9۷gcon>98v[M>3\|f[{svuq nB}o>2ކu9ރO_n`XnR/M/??3'0p?oa~N_pS)C?T\m1Oouқxi|GHGƿVX\_nJ{M}ϭn_5xz;ݧq]oiər?L<8~7sz|7eXDmWp{9wÈBaz3*m~7UezI 6^t OJF(S/aM0'flR[P+?z? 1zHo"^e$^(e!,񒰔xYom KP/Ck޶JxXOah[5B+PFCe6BE5&1l^[,rS$ aC1aE+VUR[b2Re3kFJg)u2^f8ğ-aO剋=O7no4eo{>S}ڸ>ӹKWҮ2zZ{2TkR)Ϊ\j|i52T+ccKt*[K\ٸg٬P2țs89o/C'{8NdЉrV8)*%F+Lp3OkJ}UKMm[_?e5noB0RHء^2 TrShVˉznf2c&Ӟgsd{y.!%1˃z<וT%GoeGPZ ÃO? {h?cgoߞ߯d&7?p ϧ+O:-ᑈOZOz|[s^rƟeX3/{?_)T?!p*^P8[Gml[5R~q=}au5γx]tHh٧Z/juZo]^ɯͷvl/yX./<#fp[/]vx;rd;v '[Z/9J>ۈc GwmKAS71tnB5H~0PJ 9n3&abHJ$JW!^J%!T+&REt B/6B[L4İZH"&Z1~W-R[G+AI"aH0D#x+UTҹRB';%tČr5oCí!B2͊ \昸?ȘI[rP̱S4L{Or&>)zf<{?$ft=mo4M 7-C17?,$s]c&` cխl.dhT/Im<;HJĜ3,GO}dUsSʼnaHvˮ&.oX4d3mu޴2qN[itۭT7 &1J0ƮtLpdYgr\=vhV:wI;5b">R44m"l3wDĤ q}amNtXtmTsw۩u۩\vLW9Vv8⭍"8G/]x[zhKe0fݎj9ʭgT59-1(j",:as+㘧+WzK699Rr9adlK\ǖaSBslYK)9~rP7.xMed|ILT(3]9fx Cqe.]xIU\L7'cd/c\f'fN}Ked2qJsi̸?b͘oF?RjL=/acFoѧFo[nf"i=?-b",zjHė[%h%^/-kINlHt&)mjL ncQN9hLH^V2LI%? %1TlKTToLƗ;?\6ͲVzK6W5FZVQnS32XC.sI\ŎL8GDr%9g}'>a|{=sُ!w%ϛ|?]ڛ=d.-:ǽ{=j*G[f=om¯.o~~? y6|7>_~?/xn?=y^ry.oׅ[VYT'n?E-ps;6,7s3 ]zpg[>^x[/C"u>։9ڢ[[dۇ^>x6o/]/_O?%7g}K~8܏GK5Gk>p74o`|N5ɴWí^/snqØ? fFs+[n=d']KT%T6%ٱU2v VmVN%:chֿ3nʠ!CACK PZr3MVHe 2 !㭾NJzYzj~:^zS!d: E%46x8wˢf0*2ftİ^/:vdYmS+_~ #--H)m'D#1IF*㑕cH˾PݞA-Fv=ֹ=Εq|fΙ^7^8^=bNlrۻ};2];jT/sXoĉGcǮ3FN2,V'鹿n$ё}z|1k?_9}u$a5~ϠzܒVǬx8q޵;v3~7IHUn#sػv 3WZ"!Z$UfH<$=_fMh1.gݔȄ_|$g zۤ:w;rqj1wvm%Z);wj YUBޞ:R weh.!ؚ02 #/ZzBAMpnX?5,cKE*њa951O{Vd̜VckDv2F_a5wFDFzd̡8zp^RWǥGj#/x\Xs,2e-50kXFGc\,T# [b9k(01QFnRZF 3ZFFbxΥˮ1ukKLL\4\qQ23W[P_r\1v03nxk 5 jRG^Cb#ˌPv-3֌_gH}6GǾ;=쮬V^F\vj#tmKMT&%RG1ZFq*ي3I8V3iCkFGvfģdÚHAbOI[;cM"B*Jx9ٻ1Αj9I-So9GtPT)'s9n:asx%w::cGnp%>N}\.>&[//.˟L.ןKڽ^%\zkKy}[ >__>>;kq{<739C7Y=S7B9/Ŀ#Bxv]~>G޺ޮCoz˟YӇ~~wpI>V?\=qc:76ק׋űqW?tV]}xz9WwL{PK5f&5#Į\&ΘhGnoi[;Eh% u#L9bb>>p;p1>>:/Gw^9c?7srp.;{~G|޵[.έGa !ۘL5M-̰N<Jձ,ubl$\qFlzV/7} 0>۝ݏ՚̇VsNWe9xdk}y!9&Y˰rQMhexVW&Dm<"LtNcŅ[tНzvnE;H bkjm;;3$5ݜ8IoڮN"f{aڛjJڲٴ4ힺ1YpktҖɌF1Jf"$MU=#QV ]xLHm$GGhXjB9f$D.p.jKoプ"[#!-4R6Ve x͌ %:N]F#1ˇVu$|zk4$ZGȕYxݮzqQJa%Rm{}013zk/&\b0vYo aٗzkVChu(5kŭ3){=ZZ?*kv㧑:C-!Bajz[A&I%%DlN ɴBE)1tLa 8추D9Ql\4~sbGzLJ/1=g5]կͬ=vz}nkxў/?\| վpkU^:/{_.^n7E=}u3p|x2;e?]?񿊛-[_7§k">ӗÇ>[׼gR_?}9v2,DFȥ/_zn/p9|^rI_a81=nUW:q{taܷG_-ý8ɸiOޮ/m5 v . 0}yqhb&aނ*-%Sw?TTKRUZE/[1ݍG5lj%H'{kqxtJ$~-2R%ꌄ/o3X*ztDad$ʘEB%CdPB3ݪYC;+DcazK<QoGCcΤ޺0h ʩ֖8HSeD֮GC$&Hߺ 9j%f(%v=x2!vKi1Ď[ 1###6G#x$Ƅk>t8caG/6ַc_8M3NmKf~s3w?|۷Oswo7__~_>>X9|_$w:q51]fӯ?E./jf~o_߮ˋ~ylW 9}!/^\˷o\߮|y\/P1/|>On_;?|/a2?Wq/9_vqrs߈߈G"C\g|xt-9V2~^_|v?S 1 h}P^\KϹw\/]gu(z`vx;SWy9i}p{|| uSݡKjZ:x5AmgŰkG5[?MG~zԣzZ%"Tnӱݭ1kȺ܄RSxY$ު%ITDq<IB !G MVXdF1NDB4.[KDJ]jN*PQ[[юaD4JܴAAueL<&&GCR3Dx$ FV I2~I";.quzj<ڙ0C0y˺WO_t\ sYsӍrom+]^/~YJLlU8Jf̰:GE8Xn?19ljfo3挹W;Mבs\roGFyսmo{ULu7M~tt:djUs#a=v%ކx['mtMn)_9fo3;:coedtpq_YsgqzvW=9go~ I7iq+~nD, n_qߒ[mwJm2֎1 /fL+cŜ]F0fuL[dXXoKfaJ<}mbwz{=j{"֣nJvɎR-Z$Yܕe4Yz F0~%RU"/m%Ckfٖ^[Po'ZMfѕduT/n]bNT1~w)C K8:% 5DBXwZ?Ce_#!jOGJ4Bi<.{z˱MMtqFwLn&cQBC].px2um8mH}ݻUCqkf,ڗva' ֣f=:~j-skڕ1+Ua9JԱ/no 3ZSv kK Fj[(CH<B(AxGJڒir[xlR]9NH)"qRf_\dKms`q7ITZ?z[ [?۶Ѻ "zK2&;[c5ӣfl%XF9κ"Iqf2r6vz"uj;,y~6Z+B;^/:\^׹Î~}K{WG׎,ڗfl?=մMӜ||j}|^__߾?ιz^6us']?o}x~ r+[sqp;lX/x\?q9K2~!]J CB<>>L2 կM>}!.oK_/cΧxʘOa}c$ZQj_Ϋw_Pg{ח']N}gOos|^~Y8a~7[zZz]nK"q"u֭Zrth͠嬻9>]bxJx P$CuE+K$ZIqt\::GGc#kb?+/.u^o{[gճzw_սu2:vܟ)]$1mwEbL5~cd{ {dSE8:t8Lh'c,}59 W__9fڞm'.ݙ901dѻse7Vt]Zƣ|TuH:#=tv[IF[/cG509ƢJaet%r-[Wk_suқC헏aꊛHps4GoOٳ~:0u[{o5ao56ģ eƺ1mGןfm$ZOI?]-ZJm/ox[`9<ʄ%#+-m9s钗8mn8:8ŸV*Kv:r{24U:WJ)?Ebkq!YԄ1sVËq{rQ9ƟcXӉPH\iN<[&]4ޯu~x>ǹ8uq]gm/k^_\Uz?ާ)NsFGnSk_'g:eՖaĖ.3ƣGX欦FCX)##?q\ݯ8;qcc$sIw-o/"ÚsגJ8#Gp69hm{}=*YUWWt#91Nc\-#a;}IvwUc)fb$C2]{ONIOm/-;feў.wVWWؕVr#۝2ʽZǎ1lJ lnϙ{WzTS+޺~Z%$Tb~9nR'Dz~b13)SGn$49jp\Th8;/}id*bqUW}1ך^FW/^I|kk9mN=pƽ_q;__xco{eW6Ǿ"w=~]_'z_._\_q8/җ;ʩpO:ֽ>>O|{jhX+;v_ux+BHHqaW]+2I-_}y.jk~OOk,G}/>}+~5?_:G/|aֿ/yۛOs'%lpvn㗓]_Fq |Ҍ~iֽ-Tn C1[80&GcCꗮP"4Uoe ZeKQxTw GD嶺DP R$AWCnRժGI;Y!$mG'=}Do+CLa&[TR["DAe(IhS)C`8_J5CѪz_֣#(UM[B0f rS1p6(%C )(HtĉF"61j,v$3G*hDfҝ8cW<ߌC\B\vB-m}8+q^иEnoxȇ]cnƫqfSgRZ]6j'Rvb2ru9o8c,%ưfՉEv%̌G-##~iՙ\o^^qd-s1n/Y<Εs]89I?=u$Vb{%s:в2L+Z&oa#'d$2}%3Ε}Yn}> h{r͵W9I}0NR pW6.rrȜZ _q%WKڮܻ6FjL',54TK[+ab3 I0B$ZG.ie>qazGk{WƷ|9욋\׷~*_OW_.o-h_}/ܜ8vs8ܡpd(|-QaeOs:B=?[? $!~rx].WU]NէU<:ml&_U^|R|o>X~izi׷zZUo3O'qKΗ~=soٙV˜5XUO5fXL;V(,1;37kL[:<ڑP]:~~hz 1me :mee]JۉHZ%cjMhO cVX a 4iWx$! T=Xz-DQoC,ixkF2vh3EÍsqywяq5W{&w:wxD]:XĽM~-c8ZۘڜP`ɑ#A0O r󙙜 v|&#㱮=w_/Mg>Wk#_nرeZ3dF/3[G4zG߮^a_~y\b?G/xG8s{z%\+nZGH/>O~ [63gXְphov{?-N<-IB߻Qhjz(/d|G^[a?ݿphoP&Eovo9x$[Og0G9OְhE<ΚEkx[ !xdbkN[5ercd`3k[=BoiooCd{1!s)EI *BZfM&fE ڥp[ceIZl̳]%.mH 䔪Dh :B&G8>aIZnj_,q8mek!D%:;)Roh|UЇlL5tҐPhV/C$of xkM,8##XeB  -!oT$+F EL!x og\0=qao%qDsyt7'c<:n昿p^o]ro?ߏmadקM23%>Vѯҥp]?ݏjVrmMDW0k3" O9ZQ7Pom9f=>!X08r|,g ][ʽ^WI[Vg=|\}z?lllO܍s?ϼEZ[# Q9ێJ8j%HY+S=$ogNrLr1%[W:O?ںhc|bz҄xKVUf{;j&LY;~qjuc؇1RT4k>=`QZÝN5Êtj er-6Jd9vDg9Z?%["T},aP"~9X;ꗈ`-i1mLX|G0/gO!; }2T˚[9G9#!|55øFA%{{KY[!#]#N8uhxB }]he=[F8qeKr$޶B9aˑV.Čی'^/'Z\&-튏5>B ˌbD`&;tZ?\>"QD֮33~Jzzj>R]6>N7>>.*z; ~,ӪGo'jY:ZVO[KBu/Q3v1BFZ4s2x|\Sh9ZiWO&Hd1p"$>jGHɌzloxKZ?%Z'o&&2Iamoi[K8ѵc2cKd8ɜK" v7Jr3YO{v|'3g]3=7dG4W^=;zjy*õkKFr.uxw.Orߖor9Ouݷny9:7KҪWQ?'^|6_φ/JQ/񟈏q|OO"d>Щו$WBe-]Otu֩><?'}ևN?=E/=g~8,zkyɣa;wv90fi2jz #v}V7%tPBXjB6jC|Y>Zc,j >)ccVjÌoM "Roӌj!0 I M)X:>B C 66!1?u;z%U ֘C "TG1F!H%Cvą0z ak| !cGFԌx(x? >2[F&u2ϖաn8x;_cánsNf.{#\1nw~9JjcWH'w[>dĬ̌>z[&R7Vsy֕&޾G*QNXS?5iPNx6WnKc.ؚ:t.zz=u.7Wtby|={w繷ɤv]]h.'O=5cY>~J Gg"H.] ->'v^253k׳32ߜ'rΡe}^fO|Z\/ sK0ooC)K} e>f46}e;g C=G*%ech}TI;Mcr~S!X6Q ffsl}[Nm|5d{˰顆Y[o6ڧԳfL=5b.zq'B FLe0fc+QZۡg:m]oVD;J|G&JUfDJ]JZ{'tbdsmd+>^}J1h%Dc!CeT+єOTC 6ix rٻ[fb{ ˒+S Ԟ|3DkW֕\glrpk<_3Kwיޏkx{;iXuyk'7o}ss=GST}$ZQ8G=_ZŗIò2_.?g_/˟)YF{eroN25x^|䒗7J2>O]>ޮy~8.éIo?Gsr}<}]y!c\zvu0]m42 ALjc4>HNi{&&aRA[c(?$"ZUWڮ.V#hJVUT(Q~*F!jFF9FR~H4"-#d:R[*Y>BM HڇSq!h 9~9H}:QI(-pF&zLuUjDda 3gSo!0ӌ*)R9 3f G%DFW֬]".Oyֵ^%ߘu(a>qoz1qxSl}y|щ޺ZYaOo-kS[+JmXOAJ846ZѺ6$3UI,!D#'{Mݯ<2~={</D-s&[m6;0_miٿ4Ѱ<Ikziz#Rbs4ST%YSґiƚ,2ѷ=-V+O| ٻd=ZhMEe+*$V#k7V[l>UdkhQ>qJX!lSP◕XRa=C޴\>>zL-YY.F[^R*jQZa-+b]{ ~ 6esi=^ޞ>"1ΥG㧍YDxf ;[|R)BramsŒa e|,ҕxkءR^NJaeHqٯɜQ-.:ћKxkzz[rS1#{2#r\y1~^z9DVчV}z-Q%r!Lض#z;JKb&I!f4⭤M%)*S%SVDccTHmugNsj;Ҋ_iP2~HGl)KL%~Jҥe5B+Sa3Mr;#ihik42Lf_#[yns֥Zg<2~i׎gUbxVv\/~qx<^5~6q ogyLyiԿޮ_N]l 7<<>uq?OY$:s!?8_ˆZƿ/x8z;~_wB|?_#~o^[?$C[ovi/,O-q1Zp6I~CmDN2W^>^x&2QןEWiGN9us|~q|NɷV`sWCt^|)N p|vӫnnTmFR16,.q4Y-Ro͙6׌i֟˰(iXVRiEELRIFÑFOLTDNIRR}X"cd0̲)~ e>F"A1iP%[*>ROSVC2_VN6*djo㗔pR"ek2NK4Uz1#5QI}DC\ٓ6[0&8ޒ4fK*H1sIFΎa9hNs9Wddt$njt32Kuxwsrof~0 ~|w=nx┺KZrOV+i4:th=ےzxXf&ݙ#aCH[H4S'Z[8dX c? Rwhh4Yb͗^p-{46r͑svc[5[~ܽ>L<'ۮ>.!5}GrH`ǘ}elR|0(ucI9 Wr$e$s<3yWrvɰlϫnӡM2$0\bsk$ L{kt-/Cݿ"{zȋNg(V;* ȽYɠ* bieG3H9%8O]\ȱ$Z*mosjWw[ɜleGpb ϤfԬvZ[P eP'/ؐf`CfD<ފv>#’vh']#r.lMv#崏1<6VmS}挧=9Zoa0EX]4Nd}L>RsyK:2Bֽo=Zv v ܴʉ2ߤ'ޮ՚ohFK4Ԉ!88˘c*.z5&䩷[ >j6GM969R$>iyUo!Drj'Z$81Wm&d&}y}q,&xPcx3e%{^3է3f1+Ns=z=sas}_5WM9W5|{e=ȘG^\/noyqo3rݜgz[G=/Ӓcd૎T4vSar|e0BiF!~(ZfA׉ D$ZСwӥa,(k~7ofV:lC2Uǔ"C~HE=´7֣mztReoPpU4h$$BLTK#~HU5;Ӗb%G!V#aP*Q?zYo0ȭ06n!H[:hDIrՔ092R*PoCFj ha nl 3fddxG18]DrLܸTFѵ͕}b븮V.]_<]s/K~[]4qX;v1G,) CCꭖcP]qed|?$ZpZoHd%kdܔTǫfMWsάۍ}^svw;mov~˶7[{{ݛމA&d-%0c'CtM[##aݦ eLc>s0_ò 7'3ngn{B$hk=2IcBifFjx[R9~4;=[#zB&2v1껗Z#,/oKkz:V HbJ Z1$&[VVhSB]5XG\lL+Hƒjm%BHu[]]"uhQ-&[PBZތG+ފJ%6k %ښ!RwK[Ts#hX2#aMaGκ)>周Dk1k͌1$W$zgJv$RV"N<cK?9Vbo՘xwKeY 4~DY2z[& ow {wt3e58l$I`Zj-/*Hrr{=fIvZ7mV[-kBx TTjVk43] 2GiD+8ܨƕ $Z %9JҚKZ1aj^c/%xsikwW_oe}u/hQQq]8Uzq:~xKo./p-4*7K:dyò2ކrwVm[T?şoWǯ,~-h~jJdڛT q|wydUO?>_ţCWXŰ}9/]>Ʒ:ܷߍ譧sݻ[nNs>άzS?0oG#.o]o' Ws2f̺k^ǎ%䖗P:qW?VJ5ު-qS껴eXz$]T<Kn#QIBf,CBv"F(&f$T+!h'YR[rb)J$b<Xa5Z?PZ\RCWBdt{ofq혯Fz|e/_= p7s/o[uz-%tWn9=.f>og4-vIwasih#˭5+l" tm368qF8t&-[Y81#%f|q7kog;{muom'*Ŵ%UZjik,ݘ;5$cF.y W{{R谖2qs&f~21a _ƽ>o~HNf3-e>Ԝr^#IO/OaoD=k=nw&v&{ףw%f05%\]VXfuPoCFKn{Og1g$~X+ ]9jX!Fw3Z-*Rs9mS;?-j9]ҔI螰*zt9Z(S%.c[Jm͑ISfB7{Ј2}"%fܵkb.cz"hk7#&FVjˑe5af./$sN#q>m9+pLr;$riBWVMaFmF6㑑x[\sk]g:8vX3M.}.54.!.75紕Esy{1q+Ri;{qRz[v&ѱ~bx-3ֹs,7?yqzVkW.KB;DJzPzLkf+۫~)G-ĿXH?#_.RGP/]_UhRײW/qJF'|xzd<>޾]֣C_W=N7C͗D}W}n_:[qof>XO*O>ɸ(ntda\L\o2 7eXƈC X+흄IwraYMEp?Umwk)j([!-*HZ?R{~$! ]cd?5!%2 6S5")f 4KdEb1vhhf)Ux$ZbjCchء*[eNs[Rz 32 zLH*RԎG^~HkY #n2ɌD0P6###J<"ģGkcX"0? aX[++)㇌12k|[K3{;pi.ם/붗=9j4wsJjDoe?ʡuͺX6N՚a͙)0)j5=Z5'GM8#mExRDk:{]9ӤG>إ>.+zg>ݽ|e?hto7z݄ܶE(=3fwu7rƖ9ɑ8ciSometo#DǡWr䚹EʌCeFݎ{9{osk]W-]3cgF.'_۽X%"̰=Q[㻓LVm:jMtͺLFoDϤX+2i}2ފjcbh]'P6\Z3j;fY /z2*IUjG"mt;ԣ~o2VgX5v+I$w XI[QoTB-jZ C5WTg{OFSlt&Ƕ;2F#ĮˎVbBv]b_fdf̥qOs(1ȘY_O q]a?%Hf}\f=Zqn=J* xڙ5Xq"Ìǎnj߻v "c*]IS?[|hחkr$5:2C5CfuJK=Mf.0oFj+Lr9~hMv[[39>oS^]KhW[64Dhz,!#[MS5z T"њoN5Ad(=FњhHŌȐ#$*arDwoUMHv%99zD)gvs15$H]1VaW}&eO q$˞]su8>u]cn{I3[\Ut>O՜Vǖ:Rt{?2|q]۝L__}>?\;N#|LW~|:_˫?\u|xy2q|zܥv> ea˿J~ԿA[P8۟*~~A D=㬉;^V*N~$%㧻|]J.%@ huMu]u}+ѼT{X&/G*UjO}ӍzߜsS}.#;LgѮpcFqX nzH/mfX4ƣ5Úa,&xL5C RJmUJ,SiUK.*QM2z{߄+ZgfwkbDeim#KJhbF+?ud-vl:S]ȆA`$ޢm6s fWU-+ 7Xc:S4tBEVxHcNT(6⑬`#MSLwİ[BٙȵӆR˜zd(#јoFeVQqB$Hxl0۴A #ҌhYa4b82[amX 7c8:܌ì8~r|.nOW/_/>_/7/s՜FoYS/am^ӕx.XRop6ʼ\fm 2IwaQ$ފnjbǚZ%cWDL1u|I6 Kj6WYsdV?MջIkW|vno_٪۽7zvWbkʈ J]'mo;9[8%|aͽ '- +rIse:gqJSw8{LᾹ]_e]ڮJ?g=Lhh% g1z;V:=`%>uҒՑp3E1؈`a%Yro4XdHG_ʨؕerX9 k]#^k/ H9K_P|!%nN8;܄dlKL8B4mқP B[Ut,b%BV;Rq˰^j0D/"q;!K q uym 'DxLwrIRWeLtdR۬ħ]ep9縎9ˏͣs`~wͮ?>=%trN0XCz];ʬTr%XVQˉ%|떸[i#e  r}.Wĭfqծ]̠A/CuK}Z9Am*ʵZHuDwi65I4!D[zVch2g&Zh-JdLڐ ^>[i}hӐ50&Gn$ܰ&jekmqaƵo|[ocsԱ?|wnyl\<+9s쵙ke~~K>gs&nKcc<𼴍d*Oo]vd*䚸]θ֖ښ}s7[ޤ=OawߞԣOvqpȺpӇ^W|KOrܮKny?Ͱ>Oqn]JPl/O;~U/-ZFsN Z}p֭$@m m6w3x,`%wTWxDû:juq[/nj9,O4$u%Rm,v3Vfˉo<谻zAOcdu˘ʺ52\^:,!n5qJ.i)RCb hMP )q %-* atħxmkd$dCEABE"FJkT-AMK$ć!KC 4T&x/C/qOO!qK-]Pa˭AJb(^*KL}DF lHZrh5N|q0d3n^[922N̘1e7]2^ּqp18|2^ևñ\K:v<(OF\]õQ#k eRbv蒙njɱe̸n[Z[Ca2{U5dVI$eG"6IW#O09߾w曽P-m bfV{cKۈ0up;u$dĒ92sưx<Ƽ0Hj!NO&[?oq;u\_qd>gX}n<&ϫS|8r)auzj4Čj5cдI^I/ignE?yV4dnG/[DK[DnCT\mZ^ԎhV1\%aU;5hXd|j5VψP!f/m*IEWƬ,CLکI>4*4Tښ$J0BhmLt]D{w|!&+ztٙ#(U6ZSЋV8h3˗j#j-KٕcW/YpPE/DkqK5*qhpm^"D.=& LYBl%~] -Dɵ<$.o\HZ6Jvm5˅Rn%qFRePD17R6sRE':[[HJħ%9UFE\1##$4aWFeQCOz,L0aA5^j0$l}]MN 'k[=9%|K2XfQ/Lbvey<3Wzl QoGuqpo^}CxzIg=m\9mkƷo˧7{uVOOg2ckߝ~:<=eo޽gMlOwx^^nǧu\U/Wۋ'*φo~[roԧanXZÿ|~pRʃo ǿE_)KVQiIJy\װz1Y_T rqx_ĭM{Z_sPExHg^=[OWv9%KKtL!L''H$fd5%#q;8JTh+eyu%o9yLeMMxی]ߎ+igɮs\X43H.ƬIfk2 ]ҎiIJ8RmxiS/u =̰~Qj6\CkA K2Hv05*hA$BkujHrm(23mEW.;H8tXG+ۡK3HFF}XFIܺUR[Ԗ%:GaIlљ[XhZz >-'mrẜ#JAY;q.gRּIks-)ɴJEu5<͛:l#^eenGca0C=,3NՇ`͑4c2:GB {9ZJX9t#^RcDl䘸*^ZVUD,s46q]zꖋqjl]@~фw^DW)p٤Ԧ][+qk:ѡ4mVHLV$X mLթAc0)q%ȸm{ )=&j>P̌d0Hah]q|]ʐ6L.S:"#2Mӧ!>mKHvHEI ^f̡nc[}$qʈks6m pLˮ353+t8}eV8M0ۙW=awKFH|{|p|7Ycc9za9u퍧O0Y?_x>oϧ"y<\?p;#^)Kqr ?Mp7V˰߷1eX/7?.J⯵uR/WJ[7ڪrE{ Gy{<_ Wpp.Bĭ3vcXv2 ló}e_U/V1䴤-iԭ֧R]R#VE[hR"l)C e|Y_BKnm}*EݒvbB)HY E[˨&QD+~:^0,:$$m CJdf/q/L+Q !D2.Z_"V#̰ZՄNLuЕR2,x9Tn,K8nxi}7%aqK/#)#Z];%#Ӯ Ox&caY_l01LhݖR]{ٵ -mEj;n1fwg$,YdUxJ[bh=-2:J3nI#qJLkqx>2v[̥GWΜzeM%}^vD/tbX<|-]W6`\n p<2GV+x0>1Gb)s#':nFN"}371Ƿe:Hwue/.'95Im2zw2u=--gq2Ȝv" Ű^6eX/$m^:d0XPDåժ/e 2^VXbx^e_&5áZeqY$M5u[eBbji]xL]VhJÅeMlA[Fں5ڦ²>m[ݒPri[n)!ZVħژLҴU4-[q ririJK56] qFo^uT6յO3~:c<ߴR8$z9qK$/!SOzI6)>Ks$ 1 q O u[+~1VJ%8RUN246m$S[q2oR';%n'63UKԗ7Y*tUi>%n ~UIh%D+#ҥiK| !Ǭ&^VbR[+q;RJȸomiI'/֟KK| %D[-J|m%-UA.&miU'N=y^Θp$^F׵[FH=n3\.OHY/ú,q+enn-^沇˟dNž̛KYC$y{1m:߿{AMv66kU=/_Ǻw(^.?.<\^z(~psr)9.?ߨ_-ÃGi %Uo9+~B/^TTW./vYJ\ :Cz;,͙ {fnfub;$9fܜV==%C)K6Л0PTff=b-8CqWpSzJJG+HO8z{]'j(ƎY]wkzavg&Zai2$v ժfK"+Y[SF")%$lD4J&7;݄TW()QK0;1,ZI\}#eN{ȣ/{պG2ԋ0KD.ON${+9{;$:aE^RK$DuᎡe>[6ΘuvΚ%Hv僕^nSD0}ySo%Gv[3je8X-cW5L8ڜosl=&ǽ#S׎-''M>Yg4vm+ڗF]av+F-I'}x|zTuYwSET8lݷNRZ F}}]7fN! ӻf1~櫝57ewُ>9_~y1>\ԉϺ.uWÇ{}\snq峝͎mt뺲7+^rs/}Ѿy8-uuݩ9noH< _}m~_aYfkX\?e[$C˅[|w=o껢mts7uatl0R/jgkWÇ_+㑟||J撹h;|ę%tsǭގCo|&tn>d[9/#͗x~ʜqbem#RU6n\]H6 mH0Zm?jiZ7]LWU⑒F/"x+qK"&FTubzߖwY6Eţ$$m;dD]x$8iL"abH=ZYߴRlJB#b5wz$ #!wc.)xd jtMjA(Cz,˜!DFIƄ[##cDa, aՕq!2ƌ92ܬ\f&0]!'9}sQ}eo{ ?lr˭k|eG>|I~uO޶Znj֮{%V17ղ:RD&Lka<^1G++9ZJ4&Bl.Ȏ45(+ѱ+-q|Dە}|4|mzG.?nvWklU\q3mGXŲ0KJ&BzRƖeh]cW8f>I2gݷL}#O|+{5{.gW3|ODoc6]}h#wljyvnc{nmL{~:;(5/WFİ .T1P[m!GQ!w$cDcꑑxLht;fdA$"N/oC(յUMf4D.Į3sw%,G~1,#ee)cIYD+zģF(z]M LMtebWWFKڤ2[A<ɬ_g kb$}%Jqyݦzim9}-&\֜%cgیnBhpë^+1{K=feڿ_]?w_ 3ix,cKkVjIV"H8w>댔5o\[ 7Gq8d8|bx bz5 ˰F:9Z15٥&h̸"աnoa%5G+cuH :4X9Z}j%vuVĽR35ǰa&$BQģm:mÄh[F⮜,FrK}7IkF'i3a76QlBIcBf|N{|9=ggkq>_ku3s/s|Mܯ\9:7ñ$|:/_Csr&Mdu+$^||dׇn=ݯK=q|{_"n/čOëM_{X?a?4϶&~c~~({H1Jθx驷 C%~і&7ˣ7Swj>K_\_%ɧw/Ja> r7/8ތ$a8H͕ד+Q6]zo]=mşgt:\DJXÜI؈$:HFf;G Ǹo!22dΟ{[/k^;Y.g?zv3pe2#gڗhuuO]Yj3O8Lhws _M8WJomhjvY*F0RVKDwʜfMU? aG(-HujRթ].7o.\JVzʰ -2~+"GJԣ8NԮ,A%oְ˘ǒhzGؚ8m#V2R[d5+RP֌Lh뱵/qMk2{ckrY$ԣ/TE1w%{]uƾ$ E3a]_楱Q&zzOq d\~XỼdP%Hd\w/ p+MY uz9jl%Dћ0D35 ˠ0tǎF+둘GZcXzԚjozZ}5VPoױq->qn뻽w:]V7G"o9^>>}'^>._#S$1c+m>_#%ӗUq]{~xݹە漼I89W/n}Qo-mosG#~+[JwKVovPSz,֣aԢRn+v۫~pXDJwe2~a}>%sl%[#fAr8i;9_9q8IfnBi>tt6".Vn̴{|+Nƌ~x2"4ёMiFGmAFOm7ފ*#B{Sx[[(3%X⭄$2zq(NTrI#]- bZZ/j|Sox$`txo%ИZuXJ?ې%"!pSGhʕa֡rkdm ծLRBݮGn6U Gb"D"#![TF:,fa21#g, +5ޮ/Jcȸo1\9=O.s|e}s{;^kZo Gsė۪j5w3n CCɤa< J1>W/6_שxB&HmhzGJL*}W/ӿ_vD?7ۗz򗸨jzhFx$\ZT3]y00ƚHt<9IRgt\ieh2O^/?|WpeNs;qí]NwG̢3=a眹;[LϺrpHT-7ׇVo3\vݙMmkI,C5p{ LWft2W Jw!aUK<ꛡ]9h_DCmu%UyVF]TǍ3uq!T#SwT:nZd㛮fR(j=TF/#o{>vbEohe{{$&m uỒ=%JR\Fךh5J1]B=%>iM*{#?657^ft!#ucXf<W5-+w%;Rm3P2K2x%/q5;3N8,H^)T?&FCHW"ѵqbdN{eOVZ ˌ 7Æa"Qn/Z?c#US-6!nCDah-3qdZ LDF*!!X1DdDIR.PDd[C`RLNUK\Q 72 k[K,ČK6|֤ux̙-0ܟ?g2~~n%cg?گ{k޽gg.l9g7|1/qrxa|M%}d+qߟvَ*./v_fmmїC^w}n勯_=Zooԟa}_3+~ [goKC?G?Tߵj%۲%w${y<|Ÿ\ǗWs\5BÑ{.\.y-^~MRʜG.äyhX*aҎYJ6ǙCvdhp̎9٧fi&T!\'/?߾/w󤤒ySc$n'>MHSjz6I|j"lԮV4$.yz%K|:M3O{1RhsLns|[bhDGŧT%H|2JڬiĭX?Տ7.BK݂V' U>$R\2tde2x.sig qfLXFzhMUK :K+Uab*õtZV"cd]C#!ė-11;Uemjc.O/-[U+[ 퉘*8uJR _Z%-TV+ͤ2M׌,mCDSF^F7$GO2%1VH(/IX 7$ǑA)dĭKIV&RIfФd%-/̘U6> Ƙ&a2˴M:C3!1Xoq<)Izui|JGf2̥c9z{JDxC^Ox8>̛}qޯoo؏RKص^L]ͩ0Ǯλoy.SW]]E5͗˧Yeò2~mX︇K%~Qşxq^_[j/C}7~ֺZeIlmPW2:ulz0líJ7K}S4y_Zz+2R!ѧzl.y7/OLxLpu鶇e㖓e.G 8^OO14-ȺeԯTHϑ^251ZPJZ/LU%BThu+e]xٺ%ZMIe(V!*aІuO/sR2I&^*DU%"FƭHD$y&Ő rƭ2nb-aǘ1d%c i}JOB^BL$rNڪp֭H KiLC}[H)3D*!nC*/Zb&N䘑q2fȑy0n a`9~kƼ8~c3fp8>UIz<']ڬKWV/e!,rF[>*gy%ѡd3ngckyÄu]nq|3fm\"_ՏߟJv-S˭"cb#tnN|Wn 3\KEsL,cFnSl9̶Y+e5nYBe-BR =&$V=3 WTZho7ߑ:i/D*k'%c"L(SKZubA\Ysta"u-# u}xjyO'ncS$沜hXV/6##qч:Rms69}ۛDƌǸ.C5ThħzUJYF8tZ4_]=՝ֲ$sXAV^Rc\gݮj.OI ̑ں.aݮY)%į%Tn$nU-&&ϚjI{hħ| ˒I#Ҹ%fn$nHĐ%ԙT$$xT-4&6ۋLRy\]fiOĄ،[n^ɣə&1\nnJGt8~\ׄ䝍M>|x0l%?xq./g}Ǥǚu>i=m>63:=7=_8ixҧ:׵ړηg[zT/1q.9\T7>772~߰bn?~_ԟ^w[_9-JUUWMѮR˶$YJ+[%xi?J%|x]ٿ4FFo{HObwK1tz9\^?9|I]8^WfP9\>ţˈ[Djc%cm0nW^ԧZ^>Eu"ԭ"fS_I ˠ>Ej5n)uKt"֗P/R?e| ECjz[Q)%e}Z/"n_/6++T*^Z`eM "'D3~R*u+WmLO*MD}mK▎b[ߍ#eXmpBGY"ݙaV֒ͤˌ].nj +Zf*ɸAq1,s|.{͑w<^Buk} \\nq-bu%Zm&}T+qk֧3Q9=[jѵe#̸2V+V(jM2x2[kSrqnL#K4ѫxǓ˜mkvfX kh\n e(+개cbh{=\yc{]Fȸd)k6+wЎ%e^E|I2xRV&#\.Jh}JGt\1N'v)ø W-m*bM9´V/uR⻺R"SdRAi"et~Gc/%Z/eUehY+q,E(UZ C"%jo+/Uyp/X^[[:=ٿ~ĿJ_%[B nJFf(RWMVR])˶r*˅xٖ^u?N/NWxow9^#9?-zq|7LTOu>+ Cbe,w5dj]~_F.e}h9iا_t%SOɰ2ҘZ/n{6 KX1֧U/a1^RZ rn░02TA[q[ƧaI%œa(%4Z_K2!Ovdx۔zCu+b0^"!L0n9n\b\1UhxY˘9TKCe$S2q;c9e1Iė2^%]v/aUkJ2nn8oK96ۻ\syO=9׏n{GKWsq855;˖R3z 5I9Ap]eq[rh$R O”0K^l&#յ/9v/]zjYZ]a^b>'͜ ֋tɑ[gRad 옑G22ɬe\2Ju]6.3嶮;{uxnu%34S'f޼v}úe֎OǤ:CWk/1-qu9IMH,$}-7Oa0U&TxKvE6 2zMUnj} -+a 2CZ-+)02KQʡDIA-Y]mFt?b܆",#[ iZGVQb~Gc+.3vm&6TR-x2UJ{iK*UEt eSZcq ^7NuqKH3П?͎Ge0nۉ[AƗPI^fabqەѧ]X3n[o:Zf2-+,-ŸMSwדPie*A43uk$j$ZJ[/5<HxTcꥆ^i"jbq Vx[H<|i4m6&,UiP"FE=h #~-Q%IO&n 5:46]ˡ^_ZF~Oׂj*HRv#&,ӌqr%ڜ*Rrqۮ9.5i9̣ŕ2vzə&1YyTGIv:{v9z׵O sadfyv"1og?~|Jidm.65s:t͸>"{~xG||Ws|y{]Ẏ'yEr/og<(J#?.~_J|iau+].J %"zumbE!CƃEG{U["Q?zj\u{y g1{{=sTK1=|:\W{ dtw%n9z9ZKdQ왹eŘ2-GzX&^n3T[KS]R/ȉVT9Iں%xY/e^J%^$]_2]Ixu+L/lUD(R2¬nˡ4n\ J4OJ#^Bdd| NΤ+U"(3lJl[FbB9֭ddXVN2TWrKxVS:T%n[!nFC<[H|[9vH$zQ?k*ILml nq+Ys,f)kudL}2/v1i/]z^v]O]F^TuqUbui9oWYe8PZLar12ZL$ĵml% ^*8vMyZXUk3ioj7ӮVJKgl_1m}ZmͤŘÈpry$^2`3. 3>^'G醜u$s.^ګ`9 a!qN>vbe꺯{A~sDM1hOecL(1ZPJg>cgzHuMme y cp;N dc!9ؑ(9åPEPY+Ѻ}~:.0_^c-5,VGe/aW"GITBmO0lj۰ a}a$~4/ e#h5Nf[Vj~'??k_%>9Oo*/Dhm#^ve Z&Tj$5 3Vy^23J~It͌q[b^p__/'Ryڧ pL)aU^4HۄF ˸QKm ҕ0iAq]mTiEPxۈJTDgKu%>A#f1%v=Եv̎3O$$eo[,R6R{̈$5ا&ѝKG]yd޻$}:1ۜ\}&7x^939W{fy>ilgv o|6ֹˤɬv6CSŜnr] rpzoO's]$pۗ7_?+=ee԰~??9.?%~I?QREKoEZYBђ۳j\%.^Qj]WzNx[ZVQ5JGe\\Q^'G0sK.?s?P'j?wƏ> {d%R[V[KjKVu}DBܒ=f5n2TU4%T() FAІ^d(A*nâ%1PB(I0RB1Kb>%ħ*)1~bˎH429ԨSR5-HMxPu8\q;CX/åGVSe(-,*+Y1uxYmBO-9aDB:~k mke -xْ1t̺"Ƈ7o]./9Y۱^paOqϜe/{zp\v~OדY+K܆OqXC<$Wl/j[x *TSa]ekJKuK/jg\kZF~5ښh%4^5G7D/FuGx̸0Ɏ6[orWNÅ5]hߞz2Zngfv%9R9tfɳ첺Աג!y`OrYiz<$#1+co\1YZ9ӎ},Ma8KPĆRM[ 8U/-ևU[J-|SEe]MKjO/uj)V˥#[uU Aw3t?)UTغ%$RBX>߿<vm[ƏŰZj݂%r1##mQM&mUnW֖!\ Dݮh'af#'L.ò./%Nn3aq y b]2K[G7$MU[b$"=1l)Y `J[9Rըo*C&Br2%UÉDb|Kwhس,Z/ a[X2nsf"qT9n˔ć-aҹq˥pQt:\v?g~⟡gF|HħJ7~VUmC#˶u꩛L=OIMExW+T>֭q{~hd8pȗĭurQ㻌?uqjNz7]q=d`m|a|*#~aδ^.K˴a}hL8y-e$M3Z5%ꥄp ҰB2RHcx[.[qKGEeC^K$H&c%帥-R%B0 a$^b|HJ,zQ"u!R/rFíu!^DW-ć%N4nuKeZ5Rh&q[FJ%[#Mbnl֏*Zpm2΢aeue*Nƌ3m9s,r]~M-^9\z6zSW8㊡6!:\aHHl2Cp]ðJK-Su+e.R/Czć]je4ј_QԵa02z1'WWNLu/C/ҸaQam&a|W]mG. kHd s./p. {se 쒵뛫ס׺BgeOuk:u[wvpqc#O[h 220ol 3ִ.s&Oۺu8Iгy$g/MzKkTHƢJPgZ&TɸVqV*)#iK[QmhY]%tKc7&]( m/t1Pzo*&nG}^לw֮h%P.3"T+KzQv!svVk-G>[Y%2>ͱeDI8%9c\o?/?w~;IrbNDq]K:Nی[gĵ>/\ɗyR#x[;V2c%^z=irjV#ʌxTc %uKL|H$DUkexzIҞܒTf䪖j GVK/+%H39>ST"1DQJfrS3ZH6ՠj5c/QRqqKR3hM#MԭU%DL$ Ѻ%n1>DZ6AMn[Z111~KLU/0lUL{ծ-^T6Pn-8E^(I &׊Ddf%(;4!n53S%f0ԇOM&O2R8DJ=RO1#˰ ᖲ9nvt$>\y^V6d> VO/5+D09N]qK#km0]A>U'E>=2R+yfe8ddf3㶎BX\n]2Ǫ+^xxeױOcw{:Lyxuu;ozjʆ^]-ѺeVK+qe-m$rXfɬ~U[ecm-զJu C6#^vsjUzKV#ވ]s(HF=B:i3l\x{Ş}Pߵ6a]nbڽ}jg{aFW+muY>cfV#=V.gletDfi;CmIƟBV ma݆nևIuƌDqЋ õm5P]B݆Y]~+Jat-b]z5-e-"زӮH^xK^ZE}HN,K5[[^W/oWKtC%ThQqۦD#RlF/[Sqfҭ9z٧e"&uFkWu]1xKynWMMK׿{!NǛg}7`h]6vGv.g%<_jØPsf]Nh{&qv5bsjw嚷76/>x1էz M}>{K2tC?_zHF.]ԭTs\f\tx}_M6?Ӫ_/)~&~TBPBDRꏫoVԧz)ԧRVTٜtćdzy<ҡJP뛑uRҒj,) M7!!ULiKc1F:c+`|(xĭTK\$nin[HB$L2uOKFQ/!&Tk!^x4'?NY˧imF#%[bP4^RcRC|jd(R X&mur2F9NCDnJ 0 6%2^VGv7ʃveKz|͟ӧ/^.ei/ûm_˓YlKh5D-qC2DivΰSSWM°˒߬OHj5EOd%ncW]Ef.#{rEk|hgHcU6p3\lmtĸMíqL$se3ʠ1cv8ʞg<է}m6wy[ns]Lv۝[$_۫yDcpYA&2^&aE-s&CH'iݒ&~Qi2TՋbشvj^Cv][sȸVr6dЮ GvZ4sKfC%j)$5nӮ(eD˘l&,J4B:F^לwmbK(kNt.GJ:Uh"^V"$^k=ojС\v\WOl "22N3}Hj.2W}~_"af5m\^샧[ćZKtq%cURRcR}:Ѹ=^%Hx#5DtjJ$αs&e"Ѻ8Z/%q h81$vխuC kǙvW6v5bX a7!jJVjmcAyںe$Mw>Pu\BHh4 \.XlX|VDΟ7{9cl10nz J9^rt՗ %t-VBxBHZ%~u fXVۚ˴m+Y82&'ql7TvkJ˔m\ =A\F87S͕=zN3p٫+I,79u˜Ի<_fu]=sY/o#'߿`ul=ghxM56{ŵ.hk/ni/r<.$p]>fDY~T}ЄLڪ%^J%>u/R!T㥑V)۰Zr۔j(mBKD4KPĸuMNI.$/ᰨ/!B$֗ ] rk/9~8a˰~vY FFB܆jRݚ펠CDBnN[jXFȑ8!PĎTVBfX/q+s|֧F? Ÿv$n}222On}w;옵s޿_^s m\9n/{i|յO]ht6\$2t9Z{qD\[iˌƵú%쒺 eŃ]hO-e/0edēY3:sU^Zek|ImQeH|Pĭ>Ifn&gx?kz= r.\KzL߿cZ˕ݫ{G(^جrKi^e]׳ t/mWw.Yħ>6og%֧ :Ӓf޲De(hgd$Ē'G;l*Q/HY26M)VT|j,g-␶D֚ vr)MT\OaQJ"hbh%goWBn J ehm)CIezĭUC[HtE6h^ 624^^f˧]~Kee$^n˼7Vk+v5s5+'1p F+KhL5qj"x EƌtfD4&0LܺJBDbGn$ehԧVh%1+#:)5긬UJ+lPC [_B %6n2;eRjRKH̤֭5֧K)YdħPH )Nâ&U,ė%m%0~f,^Zl&/KlCY[rҮJCx%R,S;I:oILpn}bs}6geǧe#z-83]*!1ziMME{VGx\RF7<|_rIeYd\5l|s_x||W텋Gܾ>OZww2F?_B%_oR_˛ZAYB-:ߺ}#}oez%_Hܪu{bƮ޴JJ5zr|:sT{qhOFg^ś/I0Ez|Th;/U]KJ|hJxJ%%nk^CN]JúbF}XAu/ajJhY$4ke Kb܂#5h R/a|!/xxҺ%>̬lTRQRkSM 4ryK$H2R6Y -/ڦH# FW۩O9"ae|Ɋ/6qː֯t6Z+n[;'0q;o+\ˮK.<>{9#M/!.&>%;C"VCؓGw3d˙u9.؝nq[k=Ĭt,c/2^,;˗kK}D?F˰D6,Fdw[D uǛT3!nc?4!iW]!NrIG]mc+%䡥>VDk"ՠb$+UMC˸Uz۸5PTn.0qkF.2^({J8T#i|H4ؘ?3A %HrUFWK6ѥ2BQ_*՘[K<6\Wg%oՕhh:!C-u"X]p3R)#ۃ^rcal4n<L,2e7"=اpL[2Zz]%859LO=ȃH<2јH D"CraZ_"ض>h]aDZzi8>GE2i?I2n4xIeXN^:K8F:Me -2BXCG})2O]**1$ak-DIк%mBR,%‰AT0k%#l}rJI$eNv&[b2L3=$27raypy丽3\<ݞ<\r|p 7./-u.V=uK}ho$)Hg/%ZJ^B}/p*~%VZ^L݈ԻLA뽽2 o,=|zS/!VK} -cN.qNOEp|h/ҋѺ~`#iVg k1/hcd}Hy$VKk*V&iEj$*RZ֗?~2[mJ4T#:%Quk0Ckݒ2 eBJ &-`KI0COA|jK(aJ.RU͍eNDB$ uƩàn[([KݖINҢ"q [2^5a_R+lIX/"G"q6IRZ]d$ ۝_z%9n\om˧]p8\ƅjדìE)˸-a>:Z 1nn \ꇜB#l% L1R0HC aI(u^QVW2*Vz?zB+TJ$fK~!ie["h&2IFƇv5IaNrw֤>Qdu8V2Lflmb|e>t[/}]$TGVݴm qo-}e%kƙi.99v}NSlZ,=梭2Գkwl6uvr9I$n-u( ˇC/unWzy7/ ?yėzg'B^RE?^KЊ_(qkeT]{YUvI\<^h_exhkK[IKx -oCIauF"=8Q_HR2dd6f!<FuKZ-Å*!> Zj +R~rH˰^K%:˗A^FK|JSmZ"H%Jհe܂DLbt-X/q+*Q%FBdYnq\"$Y@U9[VmKL"xp F-!HLTWԌk%RXʬMJKFTN(?EF_z NA<$0!nq;q+M# Ʈ0^*˗aW֞$qpE.ך.a7̡n(ݧs{z7on zӾv'^\8D1ku1pYF{y֝JK[%ϋi)S^BjGVn 27Lea/FN1c]VCsy)MҖC֧m2tՇjKV/-Djm|iC:nj(uHZBmT30nx m K%V[JR&\_3/# "dfKB eQ[q+ Y4zI֧kR{1 ё3TjD"e4BGC5ajHҺͰRGG<0p(=JJ[hM|:a|-g[FHJ즑U2->L KJ-%5F" Sa>^Z~iZ"۰eL6"z}jh坳R/IIcuQefhĖP TH$j0idƭ͎t'ڤ͉UmrdPa)5/ CPKD'iIBu&BJ*QV&4!ADE=S*/e&'Z2mqUS1TOSn>Mmeΰ:䱾,4fHGPr./soJSs8\aԗCP/CB!9u#)"]F]mק;8#YP?YZ+(uѥ\託TCDftD>.qKY./Pr_+ q+qEx- [㖑pxI>h0ć^"CaIF!_//1TW%Pʰn%q [Pph$R/SB֗Pb2~)k0~X-=ƭ-unDaCꇄ0Cƭ4 DKO}{wL#TH)ViȉqP:tPTH*4bIc='iu?u^k^'tb0~püɺ-oHrupW\\>Pz>=.<-%Kq\i\nc_˰ƭd^d;BǭH0nj֏ٌ0rr1uk,/.m׏]'t%K#~/1'_ xDj*ws-NE* %Z($ں%V#G/!#\:T(a"#+ cu)92eޜ.sW.C޼0KncVJe36nJ'q{~-/[ui52j9e(EKՄ̸JMDƉqkݜHH%dCk+ju/[06<*M{RW]Lfݴn9[ƭ]Fp(C "["]fn->$(ѕXmXǻJu;>LI-DCa44>vtefDćD)ևDV8QPvmXmj2b9[ `£l[NQ֣>T]o6>WT8͜k?&^YWeXswç$gn̛>3"YMç#t=u]N}6\leYثLsVc~v>+w5TjpPonXxo5__U?&~ŷGK_}%UukV}6~;kzN=I2Bl<8˻rxd[+RǭRPzHy4S/ydFj;~NHKIL+ۤLukP1ݘf$rmWVw qKK|GD*^[IAhÒ[և"CZ%>ˈNևR#ea&SƭCdm|1RQR/2 \daLRSC2n)KlnوY#+Y͉.l.MJՊ˴n-a$iDFzd0"zPb.e},&x ٰ3c"u9iķF#-m|+0dj-#[x9n?i뷝7{ͱ7_Cȱدu]J^ֻ尾HȸVfjG6I]ލ8ove^XKs(K5WY#~D#eڪ UTi%Dp(~+:btCN[5krLD%9z%o^nN4$ ##X&>; tֻ}듷.{˧5zoMeVG2nݕun^W;^C&]̜Jiv0Jzh]le8M2, ]/T$5UlGJ UTnPT}hxo %j-auj6!QlJ]I+곦ґU/heuZVv&V(7V[uˈ/%%iQ֯?//%5љu+K#i/.0*q+Yx)exlz[#.{\:է[cHԓː7Cc/sص̘:ǭk<|(zoOVV/]jkƳr$F9J%cH#|%'I[+kbG$JMX!z/3nu3ZL$4->IV5dhn!#֥!ұ5$a֌.Ht+Z_dd#ؖD*AC!-nrde/R̤*%4U&f!$EhVQeEUⶥ>/%q:C^*F%iEW%I"GJbt+Zl,C%o2&ѯVCX?oS^r?Y[i<6#6y"ɸ"ףW35Z}o~nŦluk䴍ù|})D\nח92\n9uL.o|jun2~-G,WcW~oK_~?8~PջeC ^"!^V#^^m%xl%yEzmu~U/jփOu|#nv8!qSR#'=uPZķuƇDa9x؇eX/a)V*2RST$j^I۝8Yb*KJe:KxYi$e T+ل V5u2%%]A=2Ƀr$^ꥌ9ɑ&3u'n!A:#Fq6ZhYVD®H!& CƊɚQ&JQrub-H8úܮŻ*"F2HrBg3k|W"ލ #/!ad$nau()at}ؕ~\A)˛#ƃ+{n/Os) k"y2z*㥑z xh>9_.+q9subF RWDyHsˮ9nD~ !4c.9N|Hð+ɉTHFoOJusnΌ>1SItkkS"RؙyO]ZeH&!Hd:QZo$+nJ%+B"&VHz cVKܦZ[^Jլ3Z%`gej(Ļi+v'C׌PQیDІ$֌I#3BOZU!/2VHxcx/;vxxyq6;l-n y$^ֶ;#3t6&la;ig#̡3\:>1G$Smde/0Dꪷ9atG;=y˧h8s}͵f$t ѭr+'O胧ຼ:G5nU]Oߡ^Ō]U?nʯ=XU([oKKpKB|E%l+DpXxp.اzWߊĭM#>7H2 Z,k}hk1cuO 0^V[^ǭ%M,RM4/]jX !Qg#[FKEd%Pro&*KBQ4e$HMeөz[[p122 Ԉw!lk-!]91nz"Ix[Crmk+a\Ӗr_$n!njs\/PV3l7^"qk!H >gv;>kY]9Z2n]Ocz=sc`;/1=[%k9~k׵:/yuvm'oUym/ԳFwШ[5n;D%rj' Y]ԭ^.D뗫;0.;FCďh+պoO}{O?g~'˰nYPZ]`K"9_tu9[d|׳]u>Xٶ^}v-ҦIlv*j?iLMQ_o{oȧ׮GsoɟWO$22>x;E3b n[JMԻ޴n-1^n,ګmH4[=,oJ\\Zn}R[ݪzQE܆ʒL5Humև"1!ThHoڿz[?|_oPA}1BEwZm)C]ډem#hVu RYj%Ԯo^bFPDhXzj%2NeصaeF/g|-[mͺ=B)#'7п?,??''?1Ꟙl`yKs^f4N D뻆$s<R/cx+3ΘA(i#jΘ5dZZaqsͰ ۧꢻT}qv H."u;4 o-Xq+:a Z0em&V+KB[E:JUۮևI[E|(D B0D ح$J3:ćzI3/-ֳf ᪠.Va 13v5ԒYڲ0v0Cnbذv[G۽IB82\ ZؕD|a˰v>;vg hOϵk.^RCuY-q\H/@CP xYF[]\  EgCַ[Y}tۇ<^VP%oE+rx^"KddnA"R"Re B/;3[.B!D/ cb[."0H 1!ґxd[V İ5X6,%>b$"qk9\A[]P Ro.T C$R::lm܎rd$8pVխmE0T׃,#C9=ы\3aLw9qK7/{㶗9^=ɮ%+,{<\t:y>nsYMk<ۢ{;GsIis^Vw__Ϳ_?w_~/6?g%^.F^F%qn9\}vԿW{%_'/ m(V b2ƿa?s?Qj%Kn㥫THuT*ԻebGEF1n~_{~_OφĭXR]_7=O - n%*q+IZ-%nM8P%Jјx5O9D"_g]\v$>㳋ЧۿwUJ_%ԟ?gMDzma5&mԭJKj%D0mMDH$ֻdj [˘`N'oG]e>CQĒE׺ xɋ!Ի- ZY>o Igcjb&vI:"wU c+UuϮˇ0Qq+f{Z/{낦[H0N0$Hb`899uSo___|OOU_K%qU7D{-> zqK\ahD.3:>SR-kFOFT)H-uzPV 7yQ|k#%z"}?kUJJVHK=77}gJa7GX[D\3vD_2aX^:nֹ؟_~g?rS~[kVexl6Vn.K$*AB!ygxlA{5x_a=gmu_VROVX/Yӄur2EˢaD4VdH8XK!]%poyf<.q8Orrx8}Z֌zcX{WF|G>$ީNprRP_C!C=ZRE9OZԷN/Jڊ/Ѳ"^ۑ nI&H'r?8Kwn{͝UT^ogDp%P2xg !xc\rzbv<"+$F=zcw_TiTCY/YNI*Օ*⡞VS(ppĥxFxj:˖b6IgU*FᡂHEBI&*!$RK '*Eґx(qC}Qnyl0uiJÐ1g0h2K:.Kk0DP9DFFFbbƥ'Y'KWҘ`%FO7!$.ZKhB .΄ut.9n$*雇a%8O]=0vSnu٧^ک-]˼&Nc-1{UqRV㻑JòD=Y-ŽZ!֥>lhl;Vs3}//~?ÿw/yOƷuԥ]\]a-K]m=j}Pw=sJm }H}'?{~?OeiwdkT.$律dZXIԸ$*z2M\ڪDX]Q]-**U҄FKRe]Z &T+#>bƳ%'}'w JRMBM[V؝_C+ޏZ&JY+E7G~UrכaE]:J+UF&}XrӲ,̰.??_?W~<_+#i9tKz6cKB$Ì猇$HFuvzC=+Ѻ$: ,qROҘ躴.dXd/NΘxJGG{ŝwtx^PwJިKJKK=ėK[wB9\ڦiF98w۽~эzO.!XWQcdXNרK"tsH57"ѺbukZ]/֗juYo%zk7jղ4-eݪz/ %EPEw%D EՔ`#X%VШXA\0I&z2Y+0  !;2.=]2lE$KecՓVH Ag !D.V&*ڱ5 >gVH$r!G:^h]2.ʡ$RxˌŌݒKH,C: ru1qK׳]qx.z?=Y`կkCz+}iv^n72LD5k4-TuiPa՚Nߕz[RE]Z%VK/xnĨjjeaƬD?3_=,ĥVK/ZsU,]轭<9vخnϻĎNmYnsٿҏ'8b &θ$:yfZړdftk!]#R"a g+**VeoTFғpQ-jؕPYK# 760f//lqÞ^M\N#ʑ.z8H$!#;1C$.K4A#.mL{D(=͡$.5u'a8Y%4ԳF+ 'z(ēKɥ-GlKPKh]tQ&6ċZjt**z(Pw>$>$B.ML2q|ÓYޞٞwj$vR]պ$.yv3###qI$fH$f$^DDFC$ijVQ_۾nOϺߺ]˺d\ޘzʲމI F$q*"ƋڪKZ-,E\YB"VK= B1TCD!lu\ϖP pfL3%/hZE\&d"ijVKZxg][/'f̘1Hddd&49!PVT<RC^%nzMFܸ#!|b>1dn-922&9$9Cy%C\Jճ=եZ=VWO{Ӟ=uL2tu]&r$#úd|^veek=ug=LO{uӞ ,ّ!u98H5.ԩRϋ/w)qھ.jա6۬vZ]vum}XVWikO=~[?i[m'kO-m׳l^,VWGuuϽٞzvs_Sݶ~oo{virlYodfBK$Z]W2h5:ē˶3[{jTTZ Җڲe=kq!B$2r|'|L>|_A..CҦtW 4#}aiVX]]k*juJ%?|gмҵK]ZՇZ%uVkSG;;O2~O]:&^3H%&DjbƌKƌD"aYm=֋aVպ${F:O-jXFK]ZJzh˲lR A*TW\0K]LD&2ULC$GZJSrqH҈.e}zQ"zH=$I)V!H\3D"1c&3ɫvvI#G̘1c"8d30.I80M"q [vt?{nߝga]v-mV{Z2iհBV0\]Z zR面N֓P/BX¸/XDIdt#V#C3T;IeK$&&$b4E=gB%X#Z xҺKh+IG. ""&V\ VPx1I<;q3>.uf 1He̡Lmuh8)uiYҕQvb\!DajDxqIdX9<;w2J%^c9'=;̰Ĝ.y% SFcX]!dd'bz{3,9]f%[TC=;ZoԄ:1m*"YKet=kU- hZ]UZ{so01!Io}OGj5]7JjZup?w?_t=.zObe57w_k:RE H}@Ih)e$Th h֌sh?`Oǯ׼Gp%:fVBY"#!&f4I[V|a=[n Z%No K]ҋK5"ZT\^UCU[RT1GtZ=ʮ+u‰U/0cC=pZHsHeDO=\6f,9_֋JƓf(˒*]EXE9t=C]Iԑf0MSeȿo}XFYWfm7>P6ʺ.m˸dMH=3?Ww cY/*a%Gi/Rö ڭ.qiC+xXz>`Z֥q %-Z36R2mv1hC+B-A}@<$DcO|+w_nKC5l]ZV_ٟ1 Jd=DJ*CW)3?]c$M=\ZαBǩko.]&!VW}ڦ8^s?ǯ~3ad5Ն$4f2.2T9aץӪzY ui=kPVGzjt^(jN=T*E.%ŤdA"02.a֒xvLRxX86f4ˎ%ͭ= &ZHdz$%TDH\JČ0xH\$f2*>N[9ʘXĄh5GՊ#6ƖtfZgu~$8ػ'+Y۲R%&gngoDZmƉ53p۾VG91ɬ~ g&h|ƮWNngk=$N춵법ui!UuN\^ ٳvjZ-U.pp& V;c=٪Oye_{a:wbcX-ooQ?ROC)PsI 'ުK-'R\DBDD. axw?nOo&7D"pxphAV"—gD"&6fFFFKB}ӻeeu۳=۳Vz׻uuvqbD"-h' VAt(FY|)mW[/9>r9^en[fnrK^I$r$BVxH[g-=YKnrX2H\22&aϺ>~ppz'K{vO20#8F׬a׮]Y]&We,HdL\ƋqA\H$!%jVU:fۓFhZ QZZkWzFճ]]suI뼷v=ݳ{̘K?/FӬu.E1Zj)BW[Jq)*2!UjuժҋR"*e!U]-=DZ[FQߌC??|H>?p꩙D"1I-+,UJ)=fn{ܿ_MFauj Z!Jtݯʯn%R⃖CZʬgTa~=ܴSW/h9nql1p93f̘1#I"˘xj49S.g^]V/L2$c"H$%&2ZыV.eKRj{*xkWCZa&3 Ƌ1#1a8.gmun%ik@>:$5111'fHͳF"JdF-ó.Ck9<[)'rκtު+ZCkVO{vڳUZ:j)=LkD}JW*)os-`_RtrxGprfgUzJgS)0>aϺBN9[qkO=9ݣ'̫=܎ܼF=i7J$>WN<ԋTFj=KֻZct.0VJQtix0,V)%TV$m]gէ&!Ruԥ>+XO*ZD9bP[C'՘L"i2"!O0U2,DBC!Hb٩OHBuYPDbIċDIy$f2jlA"a\"XDD$.m#5^$M<yNw]+[]zX2刎˫Yr1+)'s b? r[$mns Z6SdzvWƮdvWmV]k4Vnzwc.;)DՓ.x3.YJ4/e-߻[COB>1z89<UEZƳz(9>q$eX֮KʰuC+>+Uڎ;bjYotRRrV% u)P/Eȅ 9jRhzzW"! Y0'!$eƹE\HmՓx2>v(ϊYT:⡬2%rH7Ɠo,!C2.vTtO]jmV*Z uI46Aܴ%Tt!YCJ<+2պt7!J.R_ԇKo]¹DFWa))ڑltZ%JJ,eyvff275~w^Kb$odn~O?_ï~&[CnqƳdФ2f$2I\ss&Dhz8X֓d|V+Akb=IZm6uzYzEH>і !%L4Њ`ċzhg\ɸqlV.q`9Fmqԝ!L[OTeڄOxҺ$oŋI\D$f%0RpxIDd&Gf-Bp+b6Z3!'hBet7zod꛱k.+#YWe\cOuY\{W]z2Z9n벺n=2d8]TpR3λC42RS][ZR]֖'u*.]Zպ'ꃺPI2*CW/$>ѝ޾=?~_~ۼD&/n躤]I/{ڳ=.=Jưޯgϳpw锆VV1d'C޾O~']eM[]ݶȨmK;,zԉ^<%զ^PKZJJ(Z/RU^'!^jT4K*N[ߔ?}H_~%%HCU+hC"(eާ?|y(ԥjZE23?mr2&Rele {u~]Ҙx>,OoȈ~W~ǿ~?dVDqj5D"񬕸,Hd\Z`5SJ=dPkֳd$.-ӳV덌K׻!e=$V: dXn=dTz- BuDPħ$ij !$VQY"OR/^z1UhCD""q ȃ/Һ$'x6cЭc2h(H\&MY۹MBb$1euha{Qx8]F6&6j9 ᰧzD<G~mFTUAlO;NU]Z/Rs_ߌoEQw$>>[OOçz8UJ)V|H$x!x+DDF$⳶?ճ}ݞ8%'!7ۻgjݓD"_⍄0[$ #^H!!D⃒ϒa#j{견Xߨ0.[]JJ)PJ=K|Jx%#CHgD"raēE2I1!>1⡔RFByV-z2nrE$dH$R'o,esر 1!rd4FFFFMnQ|dnr!D.##̫0DbsWWW09anf927In9>Q9anrȑesH!##ad ƧD"."^.]22^.^/g]]9=iO{u_]]]]]~6uevm.]]x6!lTzjA$rzSWWWkWR{pӳ8]kotЍMĠ"EGƘHGNKΝFM & / ٻuzzHr~~/+^~}V?K2'99ɜIƋgtv=tjZ{u/Vi|^W/X-I&}ϛ^hw^m[wݫ]?%OmC^Xme} zR*Zb=-d!z^!D)ċzض[}}QUH+RRZ.G%_xHJ=zLOUO H$9)W>TZTW>[sEj/X[Jo}^iZԬ.juX9&7C+hrݿ7K?'= 71Č91cƌҢI;223KG$ea03;I=$ČhLEjZS3Z}\՚*tawZoXOvf-'.OwV꩔R_o 1z/‰s23nW,m)8'H$ M3RJ%##㌉,ˎD"‘#o&7g #x5ɍH$22a[r2'sysM9昛ۘ#'%&GNrddd8s1s3s#'sscLr̘D" Db9{Վ2>g}Cʑ1=tu]e/]f]o]o]onȾu_սtKuq].C]hzwa0?8f6zzꮮVKDS)mjZtZ/֋VKhI>g~?skk׮]v5֫D#! ys9dy_vnݻv^[}4_ݮkfY5]~,T|AFnݯWKZ~Ko ǽ_ث{u^)}jmSMKȲlRIiV[RVTzhSvJ=Ů[[ZeMTKZVWK~+GK?D< VKT$2Os~Yl]RjD3lҟ~z'\("+%áRAt]ju4`Ʈ\Ww{oSS94 u{'K>kW>lF"q"q8oh}1kWis42x37/ d$^$/DV"GDHIZD"AE"xH$f2ȓKe]/f23/I#qNf$>2g110HHq&&gLLr&gL|j]vWkCL$&f$>ۭ3d$39'8'gs2cA6yboG뾺\ܹsn׮]UhWjtjtuuex5r42ÐROヌViz!TZKWjUjKR/ڪ֮v􁦫OZuuURU/vDgWʯoyud$9e]]]~_;ݫ]j^^ZKMnwhҫ{o-^>+KHKŲ?Ϟt5mW%/t]Nċ,m.h< a8VX/RZj,xhZRZR-RVjVmg}I~?GໍNZC<īz/>Ox'-j=$D,UMm~xH=E)梁:R%4u)^ZJt&"pK$'>eCpP"11uG1c%ÈWRk2DD"@HxWg$B!x'ZVZ/nIDNLN4;I$qNfHd&13fI92220@OZ׺V냉<ɓ[j=$s7ysr9qNf2 31111"#O?Qխ۷^ɋ7SՇ=lZOc[RZwPַՙ`O?noU(}]޻qʘ#̛̛̛̛-sK&s37s1s1GFF'Ldn9_|Un?tMfnW##H$9#H$%Djsad<]>c,֮^^d|OozzK֮]KnߵZUwʚuhD*O9^̘a!z1C)%\Z֗mcj}J%(/Xj{Um u饗^\˖zXIayc92v,ojjjZ]-a畮^zo]ma^W{IYT>V;g__轭AZi>c;m&ZRaH|^^xJGVh}VDhJ *mWֶvۮVVm)WoX~?/AiVKPH'EW볮/x RJڠV_+>+wJHCKV|VZ׺*K֡յw[׵wzٵovu͘9>xzG3?{gMXsČ$g$"s"x81[If] FzZĉD"HđȑJYiY?Q"qŋȓ]몖W0#0njg&gr1ZvRJDĴE3x6MjTİw"7gxW3A<BaHīD;$ȓzVۭ֮Uo֋ID#mqsHH|Ĝ3CSmjZOnwK/[$1>lu_õ&vNn'csr&OəCFcI&$񰴪-nXaCiZՖ*TCՇy83ۖ)TQ6~f]O}/ez]~B|S|Y}Y}x|oj0zBB!Bb!aUzq{y|p>H|֝gdd$Č"HHx8!Kxu!-LewmH;u^\z!ZJR!FF&I!"B))aH$ɘ! Cjֵ֩Zյ\VTEKk}$gqyj|o_֒{<ϩv^mku}bDu5^T*;viC3h}bhDzꋪ롞VIīVKVKR>V1/;gS| evOf$iYY[RJ !ZO_˾[~"zhVQFYZ) 畽\o{w];kk^rUkY7hg<? i's̑0˒h$F##u"GČ0,s$zXӮīv*]O$jhï)73$I<<UV1ᢶZmcNȍC ;q"RrXD"Ox""l"jDpEzH|Cvc3r$f|CFIdIZkf{]v I$&W\YZ&&N:vI&xsLϘCa"1H]S$"HīNZ^Z@>h.OZnmZmMkRߡ~oSw?5 -w 1z*9wO-P?A)k!ZBo Aa& .ۧtyuH{W{ojB{׫]하9rRJZwId$^$DBHd$"#1xD!SE3,m]CWK׮^Fx궫oCpGWջF j=nIwF"aZHjz'_bWWwQJZd3֖z(VP-åEU+5%<Ƭ0w7_WTr$h^j5^O,닺͵{i=սf7{>Fõ[֫9m!~gU}dz蝵{HH_VxTz9TKH$kUO[_QkPO*JwjKZEVګ-~cxh= Ow*T~sS=J}bYKw=ꩈ"mYOJjZTWtkY^ve/{Y=maӂ|x! BA-{,ӘQlHEvs5\k=.(w]>huڵjuZzg?C3f̯L2&GFFH$ccR=9v֌#K;V2$˲f׸39n7D"Ѹr$H$DE"!zH8%gsa7 e99VKu.!0&JpM"sR! B!.ALxDB|ME$b#G VVܶkOZm|e.}Y"/e׋ֶ[j]R]ˮ]Vk+k?vɉ'd2O31IendrٌLnf"qH\Z)̘H\d=jR۪Ta7C]jQh UJ*';/N_kWWG_gPWP_Rxq.&+oW"C" ɑ8N]g,ۮ79#qy}֞ӋI\ZVwoMU$?CF"H$nHD"!"##Hd<Wg ònխzqx.ґ1Ɍ$Gr#ea]Ji겔@KH$B$C&H$H f< R AD"a(u)dun՘aL Ə4340fd̘1,0!*D9HHFI&QL2^EB4uiuhj=xg/_QCgi$zzZE"$=tI$.V)H˿gKP_VVQqi5TI>jT+jkמZVˮݞg:©kڵ Hdd\r31cSMH<#5ŒNi0fF+њ5,!e]˝HOJH$gI$xg2x͘Y4˜q96FQD"H|qx/1)/rxH<z!j%DʃDr!Hӛ\##11?LfX&&If$.}rďAXvXJK]Z՚j/ZUz*U~T|m[kO[_&~B)~'X*0Nޔ*r~Nxշ<przDB!2˹,N$vq8Z=}vtozwzw=}͛H$n޴Z$-"1###cFƌDmlddd$ $fzSUW0./& 02r! #9C$N_{mjYNO+"zR&dH"#Cx.u{?w{&ecq#‡>ߗٌLrdnh׋X.9d2#cdHdD"fHkKzj=e=JwVJPZƫjTWOUo֒u3Bl%Z]j=T<?x'^7RJ0H]R-UZk0.]]מ#eO]V/=iO{ںtZm~''o&;S&L+3!Ox:̸g=$CWwx6qY/֮qČa 0RF"tFȃD+aJe;3(;k)\I]KIp4+ӷR]i:]"HGD"H"!"!DHI=l Vv{խ==Vk1ZV2Y^0g_y5fV۳hk#Ҟugz2qis\vW[A2Lā.z11c&i2.b" %.rH"B|E"m]ZK6jJE:iZӥS޸yCs7~?RH)O_$~U)Y].#맄WꡎR%tz!,!īHZL2NG&9E{g{D"NVVQjZRTj]kZ*P%$.W˲R*Hji{v泥\ֹvU❶Zm?Zm^,<338v[zlm{m]&&Κ61 #L|xsn$ 287oE:w:ӉKLK*g=~P?#~b_ͯ:9z89(E'TɡJ=ԥ>꽸Ox17%q DU$C\2>Kz689g1pz=?q֞;o+K)ExV6zV"FE\R,K"LrV TQ/_zltb(I0IE&ݙ즌W#U?-4e#ě HJ]rx+mNBa`$fjCgqeE&y]ƏMڹ&jiw22pH]2^$20.gb׋lee{]o\/V%'edɬLqIiYR=.=,˞!&Qx5+*DqzH.InP/Ò rP_ O^DST殥S[аE]UԳj}d|/ݰ~_+oEK=*E}V:}$,^Y'!N0!"DId NL̑'N_F:qrD$_DH\CdId}$DFFFFƌsHddȘCFF"KB$óun&W뒑^{-.H$4 50qi)J~B!LLLL032D"!"!2022BFH  aB ]R0 !rHUuui-NMh21~?ڲZENJddXj)'e!29tr ٮ˞Ș2+K+O$#17v0 ==IȘrq̓07sqIMƒCƒ 31zWzuY>iettE{o==Z=MMe<$DU.!Cxh$TE.b]R?(.EgUEmujK,ebB<.E%MN3>{-9d&@.s̑L22cPúehZS;]]c/ȃ\jڻ=s|,aYKF&Hnݒ-s$>H^tU-6U|lHNWZ/,.7jYuq,ĥui#6b_up eL4 uiD=+PVhCQώ? WGy)JC}ޛxSC4~V<ܽ/ꝰ"!g<0IxYgg{r?=-aӂ|׺[ !FMLuDƩ#;ґ_Љ00a !!H ZTNz[U%8mϾ?}sH|uI䝌ZVD"H$22bƌDB!ȸ$^0^ĬY##e׋jUS+OAeYUONR3/ DҴ٦m0ėBV"htFFFFF\22s4`Dz$>huqH$Ą7ZxѤ!~drL2d- J|bmdULFF"FVVO]}:W VGޙwoE2BHGFFFDx2r;90axgbsC"Httd`ƌ/us/zU.{ӾէnSWWW׫|zrK>ͮKF"dݺ:Om]KOQM/D"qCm?SޔHԭW?j]E J*+*L|hb#IC$>bxڟ2 +*yrpt1Dn*'#z~$9Zk}vjYqƫcc:Y}g_g ecdj}b rc$>DBW-9Z !>3"[ IUQӂ(EVԭnRV Șc?oǿw_odxD"q;eP]>aRB7w= JKěq޼[\*W]-&TWtƮ>=׮vJ=Z{S=ڵz1qiZ-Ӿ]'i1T;=1ɻCc<"ü3II1S80Hv}4̘1cG"G$Zeݞ洧s͘qލwFǙ1#D"H" dr<$cƌħ0>2"H""["&^!lASCQ"u҉D"cCĭQѸ$"I$OZYa4߭~wO^سgO9LӹxrJ]ѳV۴kמitn]siڴޟy:OvWeV=]G]1ZnjOn=Q"&N-Bu;9H}/FF&*CH/SxT9\'< xAEH>8պƫ%1nCGWⒸ4Z{ HGHFG2z'KzE{:HnvttkC%jIxZ$^%$bB>E(K ")!To "[ &!Ad(Y+7/q#!3a֭>ZQD"H\s&cIJƥ82nXdyU'B{n]yfC7u*JČ9#cs2L2cƗNse۹J24d8ԭ+t]gN.MddtJzȃ7 3Z XF*Ee$%qawrhR-V0-UT]oE2ޔZ_Qƥ-'#4Z_Q.M*C$[FIX}?ޭnz~_^d$qi4'xrTtV"]1c7Z/Sf\z5rHYJОqٞS̑0g2{ykx>C{q2^䑾1.Hf=#NJ9bVNz&> czǓێ>=ݪ.uWSJLϝN?I/TR_nV[:Kz!~YӗB8}Cz:>=]rHwGGrz8#C$n8ONNKj)*qDFH$o"H< !D"!.a8<!cY2g J}ZIEk):B/zSO BE!D3cb&3&ngD(4/ޖR֛j ? t\"C\T'r;Ѹ$2ɑL2D"##C&a#9/ƧBbc####uY[Vٞ^-d2/2{{KF}U'ddd2yH#.&.sȘ09C%y$Q22[ϧs}jIr`iOZ=mgvm׫Z]ތKV:꩕jYi=TWWK}Uj4>P&DaH|E)Z-UZ?G`HVdǑǑT$`dd4hU{jM?!d7#2rgZvlr$CB$ċDe)HB[KAAQE)u9è7AK/Ku=~7~Oڿw_9h sP *hRe=oI!!hԭRT*2>hY_"njTӮ]ZZ?=]vjZVtmF\3u;qȑTYwr QĈGHMҴT"3{Fc݆#=3f0MQbƌD"L1ccVN/$9Čx'1DBdH$IħDU"H$KUQLf$^1.K ċ-*nd&3$3L2DB2$H"1MDjgYO֥t=էմ>skON{:?W\['9km]M2tߵg=w眭\[WsDzwEJz1N5mﷻmץk׺{&^sּ"32&d)0c88ǘ!K~{߫[֥JOZ+y??_s%4.M]e|rL|7!nkqø_DEw |:Үɴ냓l#޹.5$xд<[/#Ë QTH\Z--T#n[o"Uu nM%WB7PMH-n$q K\ZTWSKS AH*QG7n% &jǁT5*G4cÄL ˓%#'ӌƫ'v2>Sʺt2jdxH#2:1.3XL2뒑Nvt[tѕaׁq(ҵzJz i|"*^%c0ex3nuI"R"RLzZjukJ(dx [}LxP_oJ$SDrJDEMi֥m\/vHSmyx3FZe݆T)E֥:.y5$19MpvKk1.a&JY)q;3K}:N;{L#yNg m&=$t&;zRFD$furū*UUqVCdyaêVNl-~_nTAN?lXƛ%7̠ZRoҊQ }SNg7%yr3S>xv. 'CSj]v]Z%xSb9ʰތ^e]] Pp,c/n[Suu7D]H{m}Hb$ĭ$qK/˸^2E' b$>X29VF⒃UaGvS3dMTW2R*a!1f*)۳UdĭU%t}jEnkmE&.`3.]&pS=L0.]2245muu [^n&T?%.؃V]=??ttb^ @/'S?A~%#Gt.IDIC>U?gUk]j_uCutT99VhX;4.42dܒGϫ:%$F|NQs-qI.mK"RGj,c%M/X.n4g>lLWI(2lj]H;2&iiAB)U"hmZ*vIz$A-%B(ƫějEJ0֗e+OW%a8m%S#u PK+#%^O?~~ro)VOK$'@ZHJCOJ+azF j%=K>rSn_M1gq9x5ĽD<99Ϫc[θsԥ'rXXM۹M&3HVjՌY bgvI댲UxJӖh,%~ ^%2hDՌICKE]7QԫDI%Һ5xE\JNAJ$!%?7;cAV+H$im˰M+j &ċӴ2nU/yZbu9MV]ݕT])㲛a*ˬ3%K]G8#ϙ2ƽύ1.791ݚ9Z)Ng|eOg%κ{5>=+m#~q#-ϒZ)uYO_t̓>l'V?ư~Y}PI7F=A=wNN?})YƏY$>!ޜzrI/iRAkp%=Sgk^+&n<Oܩ;7"qIXqb$.=tz=e\2޵^%.P[lXԫ z7LT%&НLMlMl3W:{S4IUUUe) h٤8Q㗄xSeN2^'A<ԛzU/%m1$.Ф\ƥm'ωK.Cxulěx&qIN6*+údM]ְisl;Orf92#c=pq<:}dW],'N"#7$sƍ ՌKǻ9c\3RKj9~o~o_/۟-{IZbF*1պC]rGw9?#R[w/ڟȯZoA)*~VaX;PTt:kC\kGV]KJ$~ٮеe`m}A2FMn{xU'ųrd8Ht4u}8Ɣ;s.Y;fZo1q9nzXNvnv;fOC^%.e)CuiD]A%.%%!2>7uIjOUAzxīa; b"*E!UzvH41Dkb#t)%qK& N9Nbl}gv{u᠆bJ9\zɒ4֙LdDZ6<|EvCN.6C2fdRzJ Ne|2>?lx uI"z46 ̓etYySQ_@MHnF[$ĥOλ-w7pxzKPWcw>H묌SWR/"8rnMM%.ӈaj5%RzDWwmIŏNHC). eBzNxHzZGK!ªī(OD|OoNE\M.hjYC<$# !~L׻wī7*vrP? 2.21:FچKV$uja=de ##cI32r)dë3.Drԋ>v3L&s"xȸXqH]8\dtvsM*cFƻ9:k1.=e$SWUWcǜ5\$UE>j~YVMꡕKkG֥Zm5?FR5!ZB=J\ZP(yz(AWG]F/cZxm4q3%d w_9Mv۠]!útL3i]V]$mzeX˰>/鮄Ӳ ZoJ|^.E{FpIw*v닎Nv:tHUF׻<4iRuiBի P%=]O2P oZ,"dkVK< +QB|Iu:H_W?| RFW"V+U6.%R%&?Ooe?ni?gb+qw7OQ0d6q "%e*%%CղjZ>UDjF0IFU^ay2C=gR1,e#e~W=~n~eNC=+seize88K}rx!q9Jq)pb$kN5'#SbZKҙd\c9|Ab=Hg$> n.za=I: =]o$uɭjt$u=ċmaiOD{vɸ+UUe]3Qfvҭz5C'K}Q=2c]lqɦ[aIŋP%6V ZW]t%0?/ bC. ĥT.JiG_KBiI]ZBwdXBTuTMdk)E%ճEjDjWgvYǡwgy8b7Y$wPR[9a#=O.`{{8#kNwRw8iMhtόOmLLhT"0ڪ=/Bg>HH3CC-ĥPᒈK".K c!h%>jˉѻiZU+AuI|"Q!a1޵J$t'ZZduRVv%v%qw2)۴u:bJzs}ϳ.ιİ69DjW} Ljs8rКNgҔ{Ӟ5U}ͷFT8m&5o7O_'G9sճ4ߖ8┧;ƩMI9Q/YUuI~W~Jr+Av2> ߽xX/B&^Tix.߮9x&m9'O^uq~&9ۍxܤ͓K7+wn$Mqi]n7Ījwu]rXKUqm^$!>QaK$]ě Z7!uWBRR >DK$KdxK+N6ƥ-P]LEGxDI|dkH¸$2juIzd6j\rP]U]=&cnmC9Y׮]"3ꡇ{c"###nɰK!e<ë:5ceהa'7ooKL=ź ߺ$ 'a+x8BTjex3>ֳ"3w]WݻK/MK$uIT[zaK! K5VJl5.$ euIQx72^հJL5^V"L0ѸċRK37D+4vedg7K_7?'XmMD %Z$T8so?h#LNcn?k]T+&ī甪7%^KkF}P_еޔUk{92욺1$l=/uO6fpl8~NfdÚ0n'Cc-Gpñ]G]ZL&2&2.֐Ye޲]AEC f\ZNV2$e<*Ww Hj]HhZ]TKMhM}d$hJ DB\Z MS=+!޵5 Dj4M+4YIwr 5u %ckؕeYu֩LKt]p&K##fǑC~6yBcPtk8vtZuIt3OZ3HnA&M<9oez̓S,yvdN$$mm=DzRu'vkwպ<4]J6~H!a$Fh$ #H$&9#9CLK*!#qFHR=x9|';Ntǜ<ɓ<-82Oq*ݞܾv{r{r|ZFnfnɌ2׎y<9n2_;nWf8*n/tӋVxXswVuF&λnO{ߵZ]VGںh}ϲ,˚VO UZ-꺔_#>g01 )u)&XM5ZZZKAk#iX/깬7 g'ӱ{6n##R?p#>z>}Y;1M!9OӞj^AWg{UחU>6_muRVk(b9YT5yKY5V=K2ɘك^.羟1f ,j 聠g $$HXJV""h V>ѦFCNϘԙLgcھo{LjdUuZZ&V磕ZNU[Ma2#=F2Vw7INȲwR `8LfHXOY͊dq:V˓]ĥ+{yZ-^S؉y"I\-c<,éWVRs\֧'-?Dv ~gϗaV%8l48l?p|M}(J</"5lCrfxqC\zg1;永q,˛Óm{8N+W7?I˓yH8ܨxHݷ[|xsZ-%˥#KǫG=?kF0[FV=y.=%%jVzkfV){z, azC¸iM=T#dIPM7e<h"F!1>*!k#+C73B$jbR<, e,F5ySڑx$\V<$.Y^udø0Kz3ė-c|Ew?B!3.0˷Ad]달$Ea>[aRՌz\fp7YY֓ˌ>3,ˋR8Sj#،aհJkK>hu\h|x,k2Z^˰h/uNRJ0,_jVG?;0?/ԋ.WCUQPFh|0C<ԥ2>+St)1cϪqޔ9Ieb%)e{ðuɒd-v\tQh=bFnj1Xײ֚I|Em(JT5MdDfӮFvZ.֎Ê)K=^ +dc{32,obE=\*xѸ$i"AUkqK{ W%.P"Rx5,%D$!BMe$H.AOSRUYt-FFLKXfY$vhs&e Y],ctzF+W)3KuLCa{K{kewOs:Zs*ٛ{}ގgEV',{W{rn3ޯ8͊{¾M K8FK}JۋRayX,,˰R%>5܄H}Z~.~Zwmw oD"obAO55u)aLM;Ö&O</~|ZoH$F"H$H|*G"uwUqxHdD"1Hěx>Jo^ܒ[;,df%&"aQCi 0 2KWguLf2#w[:YǪZox3 !"blXֲD"K,bEȅ PjB"*o"KDMM/$ ċqa%EbX,5,_HbJv^ w=Ý;w&D|H$Db8z8;;8ެqsl&e\Nqj:Zy{P" yXNZV]׍ːѨZ߭ܒ%K.+Y$tں$<8VbYaڪ{[P-Kvpt$$DbZE"hT0 juVZTJ͘^Lԥe8 Ռ9Z9f0jt~̻?_Y*bE"ꘑ+g[قQ7wȏiHxQxKGGnjߣZS3n13ZsmU阻q3>%K0<wjFd Y3ggf8<֙ܭjEDW͖Hcǎv$KWY+hi40ZVA"D"Hj}M+R_H$&Xx ˥T[-Ki.JD}"DrD !e%+ !z^h}XZ֒H) /iZsh]ZzPکg:sq>d3Sδ9|} }5'|3sD"ea/ƌ,Ӟs=;5kN{aNU{$sޜc㝇s|xlyhNVīݽl[d-T+n9fgQGr=LZ^,K]ũS˛j]V}P&M*g~3n~bT&!ays^%GPۅaî7ǾyfqތlîzsQPʼn,nK~,t8m"?[fs|?ͥzF!yv*a%a1R%vƓ_qnQr$zu^Zx,zHdy K6NYIVKSi]Fb1.2%Mij}z(ZD/B)ayXD$%XmD7!ɽEL!!P1|* F<ķ+Z EKZ0 ID[/xE$ypO%HˋKA), Kxӡ%jmYFbm]Jja\::>X\B=%ۥǫ-l=Hv{\:K%KkY˺ 7ٛm6>]qY%v1GGOf972~2ʰ5Xf?L\vtb5dawe|0ƛR$iCPjϦE]2$T+㣶B &ԫjkQNěԽxh %F5J<ċN-__>{ſ"HT,+Z0:#!y/[kpxݞN$w[lKDr7x8JuZ>V:ԥhdL Z_.YZF2&X"yS:r9fcݜ^=?qeFZgs\ج1rgcɳSCXVM܏°ڵW;#KY^$>9Iʰk1ÒJ$ZpEԛ/jX>j]zlaxXfSDkZ5,j]Z}0cJ8cG⣪$MK҄zQjzm5$^ՋQZS^UQۻ{ ȓm5-IycF7qٵ-V" 5.ٌF⃞fk'fXdnnYògVMkEh)u7ɒ$>֥SÑ}UO{iONW]N$D"VD$wr$Zj}]ZoA$D"N[-jZ,IKYa|$,Ҭ2:=RJQZJ7TUKjB>H$ CECf[,YdK,,Y B|(B$ !PЋ7xH7e.0B\O2 0Z0f<,V%%7ɍeժU+V%7wTDU+DD$r[nmۑEo:Ul%ےmv-iD0fqɲnZMnٷ'ɾe=YO~mmmg}~d?O'~,k['O?cOO~#~ /ܾ'yr[֒'k踜S3:.]:.]:n9{~ĉhu,oӆ:njWH}H&j2t uKWZ-En?Ya\ZRW֌WKZEK LIe)J<($s\)Ÿ&7}ӟs?;sާq~|:xu8zigs:GeA{dHS!}nZZhaYZ4"KVd7ƫ/~OtxhMǠ ijәUjuPB?᳞ A2.Ya"b!BH!&ˋ ^+蘡R*Zb1I;3_S_oW,Iv%$,HbgS)f~n%qI$J\,/U~!TiHuZ3>T53ft܏s̳QmuV/Lf̘195tt\k[[{ԄYZܬJr9'nY;9:^ю=hkXTCuaL#Kvm%;[]tiqXؑ_Qfh]+V$^ЎRki̘1Tt|C25cSJ>PfLz !> %H$V$.eŊ<4i2 ʴ>.jZ!H*6,^uLݧst3&>g={8shj4mJ9ynVj5N VZ.[lĎ>kYZ-b[jE}4by__g~nI7C ˋߥ)՛nRik6ya{8>cQQ\1qb1coea|t"m{8ě{&p#QS7KOY{=nqq"͛ᦣun^yXKz{zrZ%37ě;7_tl_ľyUPˌLL5rqbḛb$kitKEFG'*AJUKJUJD<ěo"5x" !TBIb&Zv/"B)ӌVED<7IċƋ4.Fi`X+I-α<$ޔUY쌇J;zra/Yh0fp4KaId HdsoHlk$5*KY^,vf2+{'.Y^uX[ƶqryo %'ڶ9>zEg\'Yγ`.3ѡlG1XSgF[7n]HwWgt2(1qI$J`XѪ::mu9Zt?=n+KU%.YzuRo~>k/ HT"~V$c>knLF;w;/?XGod\n|̿L:r9iJ14=i8>a1v|42>;\7,E$e'aiTTEg`=mW9`Ƌ|?5$MY:#lE[J%ބh\zhFU"( ]UeTM\:N+ii}=|=_¼~㝵XM4؁`cP يR>@U$KH 9Af׊Ɔf5{1Y5jUZ +!bI6ryG/~}+sbIl]{CFV0_p~W?'=4}[]? ?CO[O EeJKBZ-ZJM}^j)C%sZ=5,iO7DBXD"G ^8Zu{3{꺍׳sjzux%ؕW!u}[וuv˸mu挩::u3&.s\n3& KF1zjtZgK= BβÎֈzVpJLӉ>(1T<.4;$ZZ֖$A+MzD$-HvjUSPo%e}PEۭ =f=iS̸&){Cf{xsuzhˢY PV8>C늶O.l\ɵk *bszmݖɭ69\]/ng_^s:]5n/lmUs]}ܫO/n}h%$zX2ZOuVޣRO,+DP K~w {p C(={qS2.e|˰XyaeIGE%Įһ|pXEoS1;;\ɭC47{^'S"M=zwE]7qJ8«V΍Jt뻪u֔8! $,.C'yq:ڡ]\c=+XC7CK1TP%X&mQo! w%"Ѣ|e|4R,c=,a0 Mӕ񰘌yѥ>YO܂ޛ0,!!xȓD[Ih0rջt\/q#"x\C7V&v02fxI%;1Kd(<二h/s|'srWw]]]>9)aJ=0Mj{Si6aۥյUHe6watuju?~#tPZXo8~kTIӒTWP#N##ai,3*TIi[-ɯxXѮ.v1~o__ms׻jZޛTZUTG$Ӯj}5Rtj\# z$:}%7?<]=N=RmۆRO uXe˚b)!%J}P!xʒS<m6>h#Zwjal%bo^?y~?G_pj{]QpB?fG^~*~[Ca7[iqGQYA86>tS) sɽmfFMěՏW'й/nju.zV5~mƵzכjw36m_'glgZ6ZCBZ4K)u6 uY̭&\!ݞKW=RVB$TazhW;Zh$9kC|]*۪R?zIjHV6RF-IToim^x9g8q.ps<7/O+ SWV)zSfLJ|POG~k/A*-~_%O}凬OV[OG;;"( 1!xӻrIl%G$CY#Ü27oI&J.ww=u/q|H$=Zn;922Dj)j׽Zܴv{kj|-nHxHdHn}ܚfѭ1d|PF aD)!B!$R-}` ƌez*4eaHVR-z?O"#<."$G/OUbf/)!!ROei4DbDMjkkkWju=~DjezZKi9v5UVnkVuj#7ᰆxyDFƞ$fLM6#10]Oziײ>ԛe.sWvvdȘq|56^.E&%c3uΝ W䒑H$6~ְYrPk׮>hC}VkVR!2LV7BM?8iOr8lm%jzJ%Fit9=v&Z==ZE<޴Zhlv2]DIbjB<쫧sZoX_SOI=]镉r<<˹ߪ/۴=zw=}z9nCFC;IZ]꫎VK}8! T"$_+zZc]RwO˲0111!>ѻQJ)KiOxH$i40 Fɕ\2:lն*⣰>Bsjm}G"!e8u瞮=v뾶ͮ]:wYu?=ew($0%vmmtYbnId尬]=+s5 SGnr+M,r8rx+yWjؓ9QJ3qz.^\W..gO.n yr;..##ƍw︸撋+2#4α묮֛ek ӰzxasX}{w}:wNmjuڵ++38AmڵZʲ2W|Vkhv꡾śy3}"o.G~KUxkw;e=4?mXaﺺMzw/>W7;{//w=ǩ]^묞:Z V_=uaY>QSKkڭT?fshw=ʲ紽/=w$u׻>9Η^jz8z*]C}2/qۿ7ѣժCwJٽS'y]ʲ=T[VYghY=۳{g{z챇vt)mO޽ޝv=~v;ѕBF}J%jS-n?o??;~@~OO70**i5~z()Z=ֲw={wڵz|FKbZ]W^_{{Z]kײqsLuuzU*5u/Y=W{?c_/a}yh2&h䶧if0^܏u_Nr2kp5ص:,̞3{rߜͽ9}sNg{׽nl7ޜu:3صٻrYO+ر{^uu*u~8zޟg\Yo? ~/eyo!8[5>Xo?`}BXS#77}ruv}pr<ݹ<]===ܹڻh}w!)~&H<$zzs+7nZ}Zߔ(\DFFFF*eȕ]f3e f9 CRIX9͑5GTRJ)ꃶ'!555$FI\q%Wrpɍ0% a 2F=T}SJ&Kȵ.1cČOdZ-za,zHdd&f.. 'K%^r%2\2T$1c껫_̾ W\븎븸W֐K3ż%3/ /.zq%\f;y'&C Í;y' n"|!7q/ 7N块ߗ'n?k]H<-=Ft=Nuuwt{-h-kSÌxXNmVfC}/~zhaQ]_k7xj%]}C $Zxh<(բӪV;Xob~W/>+?Oo궯?g|?z{[n]G$ެF)<hZD!Tr׳-9AI&y,ν_yiIe=0&! Jz gW_?!HD"HdaJY+q\\:1 Tz*Tj묮bEaDZν= j?~?}d&2?7~?$0D"$$JiZ_k4ZRZյuJuf#ѮpXJY:t=4v960صi=׼L&s̰a>oZ.Wa%գUZW-nr8.=vvA{pVtH$G"Mˍ/%nܸI$xZoZjݏC9z׻֛DV"#1c. Hd$"kb%Iuu?]GwMI32& xhU$[BPղԤ a$Hddd$\\ 㣐 T:H$2HOB$J b022*CH!QVK}W},GO{jYo͚ݱfmoF5maWTGGP[`iZTkƜFZb-nM^ ycd_R76nju.L|/|ʛ;s\ KpdO'[OưwU֫z,/,_K?&_>y>soS?_V0 [7Mx)AZHxRZin0:3z!ZˌVVʒ%XcXm鞷£1ju3ZL"KV^0!,o'/>3ˎ"qD$ZIW),WB*R7BjPu!H4,]ܕR:T)FM_1R-Ց1|{I?&B"HdIHiV=W͏HVB"%KFFbŊH^YH/S7CGFViumأ5cbah4c3f3fۧz9ZȴZf:ԓu\\E7{L va2уe2GX"K"GYֲKrȒ%{%БKJ֒[nruX,'P7Db-Y岬Xke:ZsThZ^hj{U[7թMٌwD"x0 K-aXB0H$"Y%KBJ4c-VH,IJ訪=1ө3ՌN;6HNKn.+uDĊD"Xnru1 {Ԟ6JZ6N%nV^Zre=8ma=6n4P.G#azۊGÊZ2{FqD$#ㅹW& fJ[:Ş3je<լX!,OƯY_OkZVz{R_OJ)®7Yn6_i,\!gUwĸKxI):Զmv3Zg' <~}Mp&Gnr&Grqz3DuVue/{K'-tszetwp֌qY]޵9"#Y ,,"Ȓ9te8d-Vd cƔac36a؜l:ۓͬHX^ZuX%aBbQ>d%+nR4^HRHLKnV,YLX"!B ƪ%9#9tk&3c$H$Dq7ޯԈVrfƌԈb`)KeB$+Yb"0f91c`!+/1cYRJ!YɒcY+k1aumk{Y8Xzփxp<8c8r-GJkM[[ .,R\", bB!D"!TzZYAH-n<Y֡11cNX,53Ijw:k,T.nfڛꞙ7,w],RV7=?EJ JMR*1,/1_ǿC§pwQwen4&7#VzxaܤtZͶk̬9}Ogl-[>OsN>~οv5{51F餓zv^unw&H% 0RںWCMez=3ѳ]{Z+ 7gg6ZdI"Ҥar79.A?-cfN& >3ftB$wWղͰ2nJ)Uw76cNjkަ SSo࿑7?ה)H%%#XXZD8_9_䭏P’eUԊ+E0I< ?RֻF]^+ۜf+36ی=Zјpq7֫9GkGs}4s7[GNy|󹌛~t^ulNiK$rq,7َѺ13,]Xke,;YVrAt%K.ifK.փ\\\. 縎s7e,9dɲd%+ji:Z7Djkt:!zԪ#/4iH$"Ԋ,Ñ:8⦴nJnNwf2ӎ%$2RH:]5dU$* U=svLמLsNu2hmtf쎛eZFդSݺ=۴i1X>gγuwo58,밖+u]Gkfo{IXsq\\!kضnyv3M+V=/ncee=aIv"Ɋ+{nLuIDfX^3N,Lj5Z݊efwp,q7c=N_Q:_5\ưLUmB덖5a^Xl;p pJif{ansZ8ʢ=>4>K[|4 d[a8 p zusy]l=ܴnn2.6p%Z/m6V㌃\jT˖ȡTFrӑ bte\aֶ=Nv SƴjiRCI]cx h&TX&n$*h]*H%uWw#!nJvY^jU°|292¸یjO5a+ieHD0`:LFNs5t%%~ðAܴ ay2~%Mk,eUk%K a{fI<`4OI<:܄SXbX,0޵dQwey),Œ;ŕbaui Y.ֱ]7uxҭ9:cyRwҳnzGe!2^(Vnj+u3Ǿsw?Mٟ;7gQTDfL?ԏ`.븴Z/$ˢޠ[ݬQ38Ndq9|[텫nf:fWG~^ {';뭏HMkPXҩzj4+" PzR;ɊLsTH2K2ɒY`8-rB%7{ߧN70gYeZպIHvr?ꇿ{Of$i0T};ꇽO'?CbTReӊx! 7 q/*fI;ѪZQwRRښhJ v,"^ry?I{я_>]pidDE[2npwgį YBƓhD[-M%Q<~oG>j*ޣ2n7 ^JFVkUeX^!#cCkL1s\\q}zkrS'Y󜵮ktܬbhcc-(Ťk.!Xd-uvkoiv{wt^u}?W߲7|uPq}g3`>7|ǿ˓+ NJwzG?:Of mӚ5by}Oa?7~7Yr%vcg?-mǼ'o}wsunrݫ:kc%zZ̠ jВEV;9 Ih ekAF܌԰g m/;?~/K_f f ?w~'xocc +uu}Z3??_|?sh&&i#,w9K^E-:Du Aݤnꮬ&]7jUD*nZRa- bG_oGهT7S-BwK͊gį×o!l,a7 e(,o&g;`{װz5œTҚ@*q\H%bYQ5,t,ǡ5ӓg=xe*X==t:keou؏ճgfaaXr&R..!uq$źL#k{; KktlY{1nf s3nKI$hjVaYshTf= a3ڎMi#h/J;OZ.dy%R)]CXrK]TCb*2F7GPHRI#UZ uӲ1ҪN!+ ۈeD]Dbp0)GieٌCc1{Vb%+ka ia]r4gBֲdVV fC\{Kf,wǹ7/r\yGgv 2G9ruvIfY[`lg=VZ72]wWfʊ^\|ͯŰ#3,ea1n -7x+L,3,_Ae8JW.gl7c"bs7,ޞy+$%+r8qcCE[쳟 :~"qF$n2$]ɗG.o}Ç~:>/vOÿWc¿LF8$p8Nv{VG7MG~/~;#z/Zs?_Io473gY̾j|0#K7nHnt|uGEzcѱtl/|{/}z>/3ϾO>g_㗮/|{\o?D4QLz~/>?'؟\|0ϾsytS>_tQ"z2eTDoQwqWŒꦨzv2:,Rѱ#|7o^wJݴJz՚jE]7~<;3?Wc LdPM ٲt[_!k|oǾ}Sln&U,U7CuF.S 'ST.DHL,fyzuYf-Cݜcb{ҮѬ7jΆ:=\}2YCsqd۲r\ҩ5GLH&VubJ+qzi֚15cϜ PrҴnrY8YzNC=ItiW^ӌv]P7"e$'HjWS3[vv:"nZ&^)!Bd$ΡĊθbܔ xeѺ[RdaXheRI6FV7R]uY$du5]n("E8Nij9ǺXc3!hs\z&;$4+3donXxؗ1ryfM&3Ga̱w > zߌ mCb}ےO!#eQ MFȘ7&FG^kgܗ|ix |qyZ/ab^f8rSMC#c9esqzX{ K8t5;=D'j@2.tX/L.=˒̘|#e⎕ݶ[2~ `W!%1tuG7ƷoM^s))Qz<շ2!/6B2ZhTj=eT4Rez 1Q߲ģWf5"5ٕ4ɬ=y8Gs1'H}x؄趵LbfzÞG IE{ϸdjy';ogt.}86>~-s!yq͛94{M;y#w<.YOB\;݉ocV/ְagKcXҲ~>|f$Z?sȌWJ3p5^RB|B|ķ/)g"!>Aq [K%HS"!^"dFFƏDRQJeQekvn?~m]EMjZ G"!"aJ&dH":=מFeno,qk׮])G+GDk׮jGK9T3j9g$CV}RQڷ??&?W/%XOĠ#/گͣ\+]Infa_e_#//#[v4l4Y+_K~RGjz/TKLhղzjچg=ha+jOKwyPZS!2㿕_~j?30!M$ J$2zEY)d7YPZ-)գ2vYB8>KYcps/}91c&3f HsroYu#G-qihc7qe=-CV*huQZ/9{T[G=jvt*UJQKi~hj*+M4ah:~BJ 00xst4pqqFe}2 !^VWWzx0H朞L2>ǣ!GO||8Hv-o9O/~]/t8>9VGG+e"K<%t+XVrhJ bY6Z,zb+㎉a,D$DBb$LT)Ye٤J#iMڵDtM)5F&;1Ʉ0pqqIh^r89ÞT,KWac?n6mݳv=֮]cv;y;eYR*,)ɲ*s%iKn4MiDi[F6'NIGG69r\qŵu\9Wλ~<}p<o u+Eee[nJ)㋇TKFM7"#o #7 a8>N>Dܗv_FwYzλ~t؇îTaݾ{y:¬e=%W|kqX˩3YZeZ^J]O)4/ݿ{c=馥tZ]{l[go~~߼үg9}CeqY{˿?wcPON,c{vyZmYSJ)K{j]HbYmZ?v=g?N}yC?̓W?l_$W]5cbBUV73g 11&Ip8؇,>w`YO[[,lVi=U,=uzxISGײnZZAHD"1Ԯ?-륫]*eYYaWe?A_buwkvmX]rOG{?>Nq%29OR}1S=I >+{ߛ0+{Zy$+eiG-w&t;&S]r]MNҴ6z.+IkvۮemvAYӮmuGWvlwn4T9v;ݩ)JC<-[[g=c=zp8GGk=vJiJkkQYGWi8։53Y]֩=gڵkVivcZOq{x8};LJ֣=(_?GkcgtǾo=G׮>z=;˾}={}&~;>>kv̘j1vGM&9>vv>.'[}Ϯ_;gwi#e7瑙I>xcyٵCu<=|XZYbDwJ!OiW!cj#6k,B"!^?H$iC a"azR_$2ara|#bJ&3~HFSkVWWWՏ^n]HHxH8Z}xxJ.]]-CCBX"qTQj ZuOc}#nO񒉑X+I.!OTjZ/4'h4J|H<%$ y"ďF$F)0&bd$DFF.ו21C${EBy)kHb,ROI$t[HHK.a,{biSW]]]]_aF4i\rܗ;q]{dv22L\13_%##y˼e2ơ\m.oF.0B77r&#ø~뮻\\r ..]r{<|\\\2|x7J?d.sYg;_;^k%W~k~*T:jjZw(D"x aeӕ#»6$Ipy$4_\G2Ur%pRO=탯G/-jZ}wכO޵ܞ3f$_<<%/Z}j'O>ƌSY⳩֣N%D"k?j>5sM\>HTe+&O$$L$LBBRFCD"$Wr%0p'BN2$+"rx&,#WL2LRB466%deRFN]gs]1!$Wr%W2X]~eK)}p֑#JBdd&dJ9Ӌ+듌 ѱ>XV...\[C#M&lR=cOzZ*u57oZscȃw.JK.yHr3 _;C)׽oﹿr?|_~I'ߓ0 7#2%s\YC52q\\ۮaX}YK5R,`YjhXP{Vjߵ=c===jZ[Sx*?ws=ͯ%닌L[D^A?+ʿ=9pˮ]awГ2HO??_fP*G9UZeu{==sv{vIjp{9}_e_jn*B&HLOuDx*I9ٴf|Q[V˱,'.EOEZ!IJ'T/!J ۟rrF$ZEO޿)o̭KlQmY%4Z/euO /I:kR{|ZzYiףzZn?zpZ )Ų>jd[יּ%zkÝI>\H619U_MqΑ#C2!d:zo\x\cOם}oW_'s·!ݝfi{ee9c.+KJʓv斸.%q֮Ʈe/Ӝ3=ӣPFiNխp.:uvlhI=vڵkkWjѵC}1>+EtVՒoTkƎl9Sd?nqM"6ַ-SQʩSֲzԲV*}vCڵ({Xݭ}\+v$u{dG&ѳӝv]tm_3\㬵ƛ㜹uyj~?>c*{3{F9f;|nI+Gg"K}k={o;)jJ@' *Hy/)B *DUS9mTJӦqY}?g}c$mZu]F2ֳ}:y챪,*3a\rٵ=v]Zwg>'2߬RJ)ߦoe%~[ C ˋ.kY>Ub wAKgyt7q9bsН>cۍ'޸r#~fy'yqsY</3GzLnrKh#}O[޸T|i]cHhIlE+Ë,nY2}p zbU,b\f;KsDͱ2"q:X*A,BălC' `sXrp[aɦnr؛ōn+9YDUtYONѷrwriT#͑6{f̞u 13ԱKG"w{62:&l2,NPesClkՑm>e|LluTn1Cп_wAt?t|'u*qWd  ðJU{ć>>t4S;첎ոt̳F23{/~g7O=<ݰFKMZ{3؋)q6̐K42(cb]s֋EhuDo;_{WwMTQf$0<|ßc/^(,Ct(K;bjRx']qW [K,ՅPP:. !U]J?|?5C]+l,D%}~\}V4.XҪ*4/?S_>,C2B|A(Ez0T yRܬF2uYhH\|ݝ=,͸ p(<|4}zxp,N9a/Z.r;tYe!nnZ6GeusYKO;.}-錵g2mc VmwZˌeF;2vS3:Ը6v,֊GjTv i]"j]/ZwuIC)cƌ@".$#!)jSqr7iASu4xg˸VfSu0.*qi;dx.3f5RbN.H2VgINܲLfŒִJtJZbB%9cy~v;r3㸭LGcUɱ~5x-/fsYҕVyǑv<}>̑<r.=Lo'̃rIn6WOx:DZpZ_/.ssRN]r׺;Ѳ$<3k{ T6)IVБ^dbZ*Xw. !$!:b1Y,’.T'Vի$MT2$mY養b7wJ|e:j1>U(xUb !Y!a%u|"aQ6Oj:B9x^%llf3u#Țb\`U6KnDfe=Y,r.7\ k9G#ǣbqr\%K>y8OY>q{ë\|HXN8O9xvɗqTKz:Y=ltvd\J'kualaŦu^Ԍ֞iJ\%TGPJ׮p=Zf4J]:ԫQ%"dn'}Ɵv× ,w^*BdˢIWqWR/|8_v|_YmO e$u{6e-f#?'?++?g|.g)RRH}vwJ,q7dZ4Y˶̊:!Kˋ%Z=_7[Οy?}&mU)Jڢ9>7~?+_ĥTUzwk*B$m]WgMXS+ͤ^X!JJ|pg#{w>(4 WK]x?GO鶖ұQTKe]^lOK?ȏ/~UY.,¸$ZFri%jY9:5aՋe- !ԋo eEKusYK8Ʊ\v\n.c"ۃÃ>YZr7%c-zVLXpˌŶ8gsu-Yc'T^HX.-͊eiבNa\FE(2 Yu;{[Zk%wuI,t;qi%~jĒ"qW *V.-$^EVtĤ)Uba1vήVWU]Mi' qb*9KGZqZN]#Z2,k9O/cQ&;aawM5Iy[aVVM"Y1lxdCӇȓUid='MYp2ӵH#O{u!}òS>%4UpħO<.^-7q8;imر%SOaAGyt<>#axݐLr;9SVnzoҷOogr;uKxa>ȒlMN/Z}rzktS֧NH'7Ouhju>IKZ-Q>emdNMV2풍tZX6Ih]% BK. $KBEѕdcwm6R2 MBCZ:ŚYrDw"]h%Nr/Ϛ8 )e( 3eI- 3SKE0XOY=*|jdi:,%Jv7.!a^tQrbM҇%+`w\❽,7%b6ydyuxuo[-ɮ'f2.2,fdlF5c* K:ZċeWGK ĥui݅fa^ӬΜ[鈻R:~X nJ=_/ߞs~T[1K,)i+5d_}달?~~Wwu]yg{?{w]18*=s;971b(kiFΟ?'?3xxO=~} "BŮV˴Sc)ჟ}UBJh )j]VYV"rH̖%O]EH7~3^ɲL[` &^ۛ?/j~ϾPVJ3<|?5|ݾ_'n1u).j7nZԥSJ(]_>3Y6vEb*e-e1ީFFo|kߒ(!\ZEߛ}Zk-)kqWk=.kig??:8jR()z5.3[w^?C ^䛿[/Bm ېh,Ԋ#Z׾FP$._KrYcE&+,kɒH\D HhCNyZ탛Kɥ7oͼuKSGldr=AUO^:1!gs'ìu<ceQ9}r:٫[-=e:7G[ȡS{X2.5iȘj:FL aKP Ң%YSSIեTVh4e- WeŒD"Qu!ێҚv*ҋw;]EhHUeD㲴d?WZNwGZѡm"97UX7}$Da&&|l+s<7zYdz#+s={O:{۹r;=qz:yv t|޺8v~rDF,hq.w;\Z?>jԏ|~,/?`1>X~sU,,jX^=8|lbV|@q, ݡы؇q.pћcmݪ=:£CM79M?.?x|w<|iG]b!hM(VcIv_=_GO?UwWRw"^d)J(Jj.S J*TSuԥ$,H\ֲExgV4ԋ%!9ID"8$FH]&:R!]cZ*q)?w=3ǭ.mVىjzqݕmuNz^~ϯ}Go?XvI>1ձ,mi8e-*u H+ֲ-ˊDY֒$Ĭe-XC8Y:ț7\a-/ry8=n-}v9b˛=f.9\$ۣrvvZyxaM吵q=luxm9=O}61{ӓ.3Znshk.v{y"{[e=Ngh,,*tՈ$.֊b,]Vux'xhn, E" "zH:uIcXHJ[ΚJW&:LZ{\&ZtmFT2*Kk-fĊZh\"kI$q9ɊF$$MedaXMVEHNVnmrͲVn !;ƶlpSmfۧ}rO޾ee{{r3Oz>c>y#:tm|doy==δu>iTZ;9s9kK2:۱5s1c#u./sO0^ݜќYnnɰ q93%ceSⷠOԧ⇫{.*bX~#]ϰ|gX~>.#D\6q!RkL?N8>Х}-qwL h%+frYfI> /|hArHd$%eY47{bk u]Y((8p" Q; ~ѩ8Vw_>;"YI mZ]Xb/Ny2|yBûV/5yL$p>ӿ\uZvu_5z.:85"]fiMLuuR#e|ڕe܂bZ]Bt]!ڒ&R*CxӮۮ[nDڲZnؕxR^j.-!jS+vv^fhKG=3Bݢ$[˸M1GkKZTkK-Kחxԧ} Р*nl3Pv u*aA%B+8KIC%Um[81!q;2n+4Jwz\ſ'YX[h걤T%[ڒ^zOlHm.I[Y8]/5#551u+AbNeKG!Z2RhZsGdOǼ,I1+u1Ӹȸu}JX7@<.y]q~Stx;5X6ezer9Uyx>95Xn=^ەfFҵbCX۶XRg| U[ѥ e5P/kbCXV-Kj})k]EuHҸ 6uKn%:vV6嬢R[>}jJzOa5M㊤m|itj}h抮5yD^ %4mVѺ%h{.;C~L2יԏ1ЧLDL8w}hλ['o8ݾ?yty?f>.jڼtw9'NڕhG;]1øs ̮>>%˰,Oz٧?~gT^IZW/WYƯ%Tua2f-2D[b#_gCB\n=OKCKWq1%,uFx^پdxߨfV/NjϾCz'=me9BZ*k&>ov ė%^$ħYfIj>,#eibmﭗu[-# #dt ay\onqb|Z?t'#%2R/e)|c|򔋑zqd\r񐧗'˓Wo\\ y1te ۣn;ٷe2]v^Zjև?nEv>1+UZĭFT{a}*b}V鮩b#[FݿSAZBnP/˔)^BJrTܒMD"ci Q&%qKLO˸Mx%.61t6tt'\5[itYrqzI -J$U&&[CMܪL ԧ4gԌ(qut$e'u닗5ndXE$⥫5-6E"T[ %IE5͌j,v#1MV˜RꥄD$*aKiW|Lĭ[+Z*#PbDix Z*V0ʠ23KcI?G$RuhU>u82jJ(2nI(jbIKJOTX 5dde"tp")qKe)J$&s\r]Ri:j<7,0?q&^.]]3gFǮ<|̷>׮Of75~fFLfe0muپ0޾72Ff;9m\ꇌaim(7h ޭChK|S qqV|Y+#lE[:HmKԧ/6PjTULhDєE[S\>%UZJJBj EvۢtXR4[ ӹҴ΃PSz\ͬoq8 3˼qd޺>{D:lD,z9nÑYFxae eTgWZ=J5qeNsĿ2԰\֗aeFԯ\~+ͯ\ui]x^Oou(/?y ï"a/os}:=9O7%r| <u<9<8$nxD"et=yGO,oZ~C)qKíZSvֳњP.W;)DzAiWk':Mub)iI-4|h*'-nŢ [Ƈ "[UH/OxR!-6u[ez\>Ch1r6հATe}Y륌_'^nsaLr蕽2ۮaT}'&KƯWYa_[]8q88d̘J1#L:":~\[$ ad΃z sX֗'C7.'s/o(M=~?~TkQCWy IO3JQ.^TKڲZ^-֖1vͧsnO{tNc)Hb ^֧*gT0nyh2~6ĭ-^ۖ%eO=T2ٕk#5E[`e&q]n[mewi'X%oQ5C/;Ԓأ aZYKBRJK+ˆ걗:*QN ]D+yNVYe8$uj\s.3f\9&׷g3=~߾9<}v}p<]ozoui}:|o~zmM gk\9ǧs?9?c޲ۍ?rO]W}wed+DGkkzejl/縕S/+KݺVŌ x -Uj~P)1#$b[԰:Ri-1JfܺTtuȚ[4jDHl܆Flc6TTΩ#XX>3$l̶&41Szc 6f. 캶I2o9~<\mme8L|31o<z{]͔A1b19GmΩK<~(g|zY:5]W=^~dJVvL&v-Kj׮nO<7gC;%?Yƿjcیeo>,˘,2q[ƗćvPmQW4{yɷt=|z{\$L|K.xKH~z֞jyG~;p">~T'.F%_V˃:^._\nO'_9.cwUV겭^riRgv[2"{KTnz6Ivڳ9X(hݢKY/#YbdxEle)-FlBY _ TrV S(RJL%/emM RKoRh%%UeEh2]+*Y;fcKK7! kxC۠Xx [ˆ"UU+d%/kVpJXBXT;&6i# daCG.earٝ5j Nrw}󸒊S"GiZϺZ[3>:Z-ժ}市mǰn]v7Be<%Z2>*ۢaܶF/Ui\nQۭU&i' pɶ)Y I봍-ۉ˗]ݧИhu[$̕xSLT:fOqʸq֦u !^eu\z8w!qKt[0VtTB#?OFu(mS&آ J4%ȒJjL2R[JDqKQBCoK^L5"1ZS^H4?)K9撴6!M ":n{֖2Z=D)KF(J\/uKX !Z{\C8*(㬩e%&=cua.BJ&2ԐȘѣ9-WLupm\0|r?x>ͷ|_շouE0޿[e|\kʘG͆+gZ3oGS?r]1΍gXӌ+2Gsvm%{eVJbtk5T("ղD6,-F)ժx)uh&+C$B*0*!m2쳹lZh\m3A.$VZ?kKj/[HKh&)e}p8:ikc%\qc24vm|bƙٓs]x6+8N\|}͹ۣy2߻O\k?8gp<~9WG/o_H#mp&eݞk59mx\7]궣 ú-,aݪ~cYsϫ?-?hXdXe/2^.3Y.^\~_Z ӷRɛR+>."񳪳+pm rx2r%<D+y#o'O/<-aX/""h/ZxъI:~6(ZU*m)K/CӬ[S%T9 Dğ:Lf}HKݘd]Sח~;䊔w˸e~}"k22P!oWfwȈ̬!\`e/^ybD;0 SuaݮrQFO\ry|~"/Ó|7?9̅5_e2n[Oyv]eZX/EK|hYK˺zVWWWحlDIm%BhR˰KxiPnA|Q/KPHnD1%14d}Y/12rI^иő.Z{C?q$dv믊VT3fQ[UV_ŭFRi$,%UƧ֒uP?t]BbeTh_Pp܂h 6Q?buY2ԭ֭5՘JNVEKh&R-6nzkaST2nW5Dh0nn{ -$SǸe.2TGcg8cj\n3n>ƓW<2ӷ5>=..yc:CI&^M.8vu9zgİW, VԎx[ k׎m}ϫ[mF_K7mZ[,;2V/W%?rxs\sjΕp]Hb n0჋|$u{y}pxW{/㑇.9u<.p{oD"Hw^/aM m|jQw:YkS7}jeYu˸u}vܖe,f&>dڦm6IEMJip[Fdb$DR*aj|eB$~U?[$>n?~ʓGGqks[ܖ *ފZ)y+[j-n !~hLdmeRaX*+ JkS-&$ߍ_lg\rK#Wf')+X^W<.=n!2\ a\>;)aYEqxomm_]o߸rqpS/(]oG>duKKrرNj]-Dj#il#nntUpܺN%-$بR Hd]]Ya u+kv׭JFv BS2DނjթZ$QѕD#iL+͙eƧ$ꕐxP(g'ɔ>T֎Wyp95c[WvD/.cTUEJiFb3ZZ*vD$ުhEw% e8~ےRu7o! fLƾ|#"ab`-hCX0!64TJ%Cв L5UHSS]CZPm}:dj OxkYJu nиnTB!LT(*4mMB-4uKP%T'aU*dBn:Ǻ0ԧ6VF%lJ}jcjDֺBM-]siݚVL2TBB-~aے!C˘x+q*8BT8Hoi/:FZ/>&ׇcf.3j53Һh]7oC<<=t} 4vx\>xԗ5/.\.\W}Оsy\q=?|ُa^ڞbN[ƖvraW+4+jۮ?[5`-u[P5K8֭JWlWzXo!r%HB(mK55Rl(W]-mzS[kuM[mJuKLZ1d+tke8jٳa Nfw=2iYWuu4,iGH3hbڗ#׉|㋎g%y%<|cxpewMphN)e)5A&K|?og^ItG;9.K_}csVsWD: Lg%v KXa1>їC%_|>L?(A-_D :ԟQ "[XPEB0QB?kfF&Bo!\.5NsS[Hs5^&5}>cIoyRZgM^v[_Nͫyk^k*TgGf_gӑh$[ԧ=C|Z-zmb)%JQT^Mş_([oT_e_uMðar[F[WpU:9B:q{\/.z8\O.^\ڗy6_X'qGW#[Iጇ?~ȓ}O.'>_Ɠe|"۳ZGxKǾ!$<6ukҡ-U-2ޞO}z:gzyVI2n鶇p6;/%aZoF7ʕ6VZJN$[f-L ! ]Ju8L-ޒ$dmJYXo?z`|rXJz/jVөVw[#[[JK1,/ou˺"$0~ge GWΓ )GDy$b2WX]\nOom] #+0^q0Tze ry{%O9Zoo'Oa9Vifrcx=u}cq(ϖ!c˲>Z-UeJVu%4t7{l)t5fCZA[nV)qKURR.P]P7ƤBP2d1"eЄu]{]fܶ.t$deWO^t^W揌L[<ͼNst6HQJLVhZMۄe6F{hf(ǧ ךo{=Vji}JR3R*mt$\#ǭY5"mw]֌ebuke{0ˬsQ[Sێo,3Z 'hjvjFR;ĭVZAxnUa&o-][h.-4u+~J4&TJW7V떸5ne[x+n[֙lua'ǿ*6U$m%ZyjVn]]DPS*m6S2ѰH?V:v%nmzLd8+#H&8cȚnKEBeF:p qaƫtdtf\|q=pӗO]=>fg͵Jftrs\d>/ǯ||^W&/^~rx}uuW9&^8C-m.c^ueX?[iJzaXg[/ɰz2oauao1g,_|񋺵E(%>r6zCW|WVyGojs/_>r=VI./A~x&y^[-Ϙ-IvM)Gh7nSeǭ#)Rm'b޺V%z8GƤ]GHuHLl:Q.TSIJoŶkq!4nWѨu[Rv$zKv5`2 h#M5-Db#%JQoFmZ"Ѧ? uKmRI+nu+D#V T(AUğ RYa]H%_W ʿF }=/?6_P*ick~]]H[ԭ()؃{-MkɬBl@haߑ-AC<';֎̼y;KSҺխ[_b6%`inYRC#~C"&rEP4Kfd\r1 6ay|ˌ=Yf<~xxMcuxз\\|zr۟ro\rN0u+sy?\Ȟ8.[QsB\˻vE33tvj-r2SnIgVK4$T6[VYX&n ҆P/cKDPQ"~/l▤MKԌV\^bP%R-ej[/ڕT(aYRBTf4m2-Z$`dSI.i5RѭTpYyy:q˺u(e֎eD`ٵROƧGW_o,˰2 Kįau.*~.%|wDyR.p]p՗n-uzz.I~g_~`q~ro/Ǔ7yƣ~~[CɛwzyjnO.ߟ\[7u xy' )vyoͳծ,㚘cq܆^^jڧt+ƨ,G6rnEFZQ$-eI B"ĄF6 M°I}Y$%eKBrE/1Բn*~W-mo./%ėaH2zԗG2ӈ?h}J^vun<%2:R]CU(,Gmf HK&!5qY"sǼp,ru˸uݲ^^S,..._B+ed%r=/r'?=,˪XS2̨/S]wcԚJeyKڕۮ}fݪH/Nv[]V)qk 5[6IHRVlRzI5[Z a}%BŴ!>l.1mW֑YҘ=&keZ bm͕n=O3&^[0Ӝ4I"oG=]hmNn-iL6=HINu[Z*mUV5nimn/Exe(2nr$7ް*㥳q]eDp(NuHVkKJ2ZuaXJj$$׈54Rmn214v[]֭Ym]V% jKJVEB6EV-Vn+N:>u+֑p$vdlLmS%^J#!Ġ)F>P/iO%7?O<.wN?O5?/ݿai UR(b[VRRոFKJ|)G˸rElDIlHRxI1DHT׎Eez(A%RNpHMq\+D"G*Mke}7YoIkt4ys]lzM\q%G{k\ι:zoΞ38.qh]rUGz.yv]A\%#9v޹fss<:Σu4w5oΟh.$Ԙni{+X;C8nGJ}ަ,V/q*K|Rm m}zIKh2֖Jr13-uS/gJt/"ZBԇjRHZJ)Kv{/|uۄ" K~HݶQ$˱az%=+&ɺ!bJ"GƉ,%A]>Lk=y'':rv{9z{L%HUϵZ_uK" *xI"h 1DVpP JO/ݥXv O%m7[j1oڞ1x`ױ.'q;dzf158R1%OB “ć>O3^K9I$s܂P//˓eX`ys0\2xyzOp8y ^=iw=p85k/ޑ qte}ڵpZpܖR2>R):m-QTVWߵ>b=^B4^C޶=ak([D1a/%-RAԶuKÌ[C^j)d/aen{[.mf(Dm$nmLy^E9[16J%2JGtv*zGU[=:i6OmӮJZ)բ]e]Sl;n1mKZZ\vqjui^CF!h6 ʍ4Dp)D./k9na.-X gXQ/]-vkFCܺnM۩CM VS\RB[IJXVY$`IuvhڕjjH\"C}D[^vweh>&-VԧT[)cW?G5N9M%UKk*ZZ-ZCe//.!^6e>İ Vx麅+jdmćbkhe]{$RDFKȥQR-xY/ Og=~ǎǃ㍠i;qtߞot=փ籱9.{\雳yz\ˆs]Kˌ.Z.~8^vzOu]M<>԰a&ky-3TG141u'^iDV>l`xRqVlWt*IJӊ튲%M$vB"\ZUV7ekryZեVk7P/qZm55n3vJ٢֤ac"[:3YbZO јc,nMgh:1.#cb w}]KBd'r3"mλF?׃_<ѳ|<]nt{>mg|Nɐ8컭scFb1+rԤ9^sK0O0g2úͰaǿ@5W_[ ^Kz3eVƗabX\/.p.JPr|i%^:vQ.xqZh/q޹׏oߌ?oڍ7?=\͕=pprr1>x<ͺu޾jO{,eW^=+KDO %JΨݣUˮq˺uVFj#5JeZ"^z Jx)u֧2."@\P0mBwO|n[)YևeF"LҨd5;oZ9\EW#d+W.Ԯ%8=v쮝Qd.Qԯ" nR][U/er+e8v$~U^֭Krqb(CM=r˭^w].YAԪ󜉖$ve"n\=r1Rgc$6]nVA7ZE C}$f#UzKr gJ|:656iԪ[%mZ aіPAj&!)^DՇ BCYx ];n e}ė8p]+)ښu.+KUJEj)h|ʺ"Z%QE KFJBR-^ƃ>ʸM$S2lGFb"%-9rOŘLͻ|ɏrU3ӌ\o<"o?g?Gqa~o?Of1bvκdx[˓9erN]m{+y6qdm1k9+Lw݌:^sNUi˖8u 5KIq+B|^jiuӪ/UzPv %nDFCn%TvuK1z {lwi%[UoaZn6h %,#Rr>"*QvQv^"bԎm\lf1M#Kj+tsq\.{̃axq;[K5c"oo $Wjգ>{|jfd0ݒdLGa.!n[-q[s.RyH9 ?u-mz*} OS.:=xzFȓon!x7F0OKnӭ.]Sߟ?o8?ǗijΞ.GY]>Yհ!eYjFZDPK^j+=Lt촙i8^"Jni'Q^"[TO$CD[KBJlMz[Q̱5lٌȓ+8$Fs皘r[#M7vZdvJDEUCl'-vv5RClun(AT7n5]bUR U+ISTjOY/aaW"2.%RQԉPuZJS2tοɷR-u+MWVZZ]7EaqT%ĭh컌DuՇ:\B*#՚GϚw[N>CK>?Js#k?]yuoɿqSjyQ/odWTpsw]$*Wo!T9rS{=pZBv̧rLJmRsI<.U7JI^4h."\ʬ?6cd\Lrt<$jS$FH 7Cwejxl?Yʲzz,-M -˲UVQ4VJ<2c :m*bS'V*u~\DTQ&Zx\CpqXzy%#a$|q}v]W?}#%y /.o\őh.>O񇎷߸}r8z<٫sYwF 밷ɲr z8z,W^rJuY?73lCuU]jw]1Gui(Xá]Z5V[6 -I6zKtU5-J~~oKa55I-ԔhilO˨nX3ˋ2[])~ i]LHs4Cݱ .YU_js8lzKTújѠmÑM۰뻶KB Pz44޶zT+D A)$sY?raz4m[TM+a%Kڳr|#BNO=x[ 4鈱 !E]vLU"VexX*]V:Th[1(Kr XkGˆ_i%WUT" 6o?-vH(ݮ=l[VijTFn(TR %+޺B+!VPxKoF+\ޖ1,ru/v]Gk.=jf$\ K]!xa:cW#5qyXonfϗ+s{{>e.f_͇_?W=W/op[՗rN_Ջrŷ#qȑ+E6su6WW4Md}ͦRĥװx*ҸJ92]S#Mvrsf(;8Ö+cű5Z [ouZsTH!11A G+?d]s6jkغ.blcqSpVR%z(qcA#?iQn J=6MiB9=kd,i#l]urqI#cbr7stuȫ\WqݧOo~̺o׹uv{׶n>r:zqW['6DVBf}ԧ{gNbƮ];fjT+k?N/7,?d*K0.o2ކvq.+?U-?^_z7 媮GRo^~}@ݥ׷K"n^ɯrvng+Nyn5zsljUKYʋjus˞gнGw[ò,77#>!J$2qMJ/AbX6%~XmAǥG%#WrCt0\޺16\G4h!?80̮VB=rXRV[YZwi}wR]R?TBK/$:r܈wK%& huO>+W9rE(WMziDlNȋ&kp<8m>ǝ9ʘ a09[8sxK.˟+a7oˇ 7e)x{#O/*#ǭ_9n ?+W0}Xzc'])o^]]d8~Z:=յKR-QJ뱧eףUDIT-G8QMіnbZv%[!VaY"ȶ"Gm59!R⇬!tϊk.H־bD^I^z$w=&R{̉ˎk]9iHz֌ݣyQnuV2 i.H|8DhWgF+Zjk.#rM2z 5GJ,}#x,miV& Rog#siVA2xEO%4fN6* KQLϧjw1ѣ:2ZKKUj:A=Z:muuuYhS]J-3zұJ*},V~cZ%%jGH)RuJ5M٥a+FN8m⻩JƣY!h bG[F([#_wch=PJ)=ZEzhʪTB8\xf#՛p~A :v%.E.!/[fl$t'sW6bFB㊭CK޿a_&&|;~ex ׹#/Է\>⳼}%6/ܟɗaz>6{|~:SWnfz.ɹk+z>rȠݻ\WIO{vfn2HF[[.Jz?ģ+l>Vj(YS"b'Sڮ4$fV̽$aNVtO=VUm5D8r|G]ÒD%ivZyT㒳Ҥ 1$k*1dHg#ݴ^+9$&67#W1׌sȽ\I[\e4͹k|/ܮn΍ׯ_q\om-_o[n~h_^[c_~d'3b~Lz;1z]Ű~XC'o(/Fv?e47\.?-O_9\JwO\pq\Ρ+upGWƟ&z\ /ʗ]W{'^/o/ۋίy%/KoG/U)[Y zģkjuKs ץqֽut}\'+e/Z˾{ʍxt9o'_.?{no7{za\߈aOY$(=PH^fz+֩zKdL.=x[՝-}x_Qv-[iĚ]~zRV6(c-cj]և]+[K,i&AXUj %1&=&\R yJX֒C5VrS2c=jX[*ZۦQVFG<԰.G+QmYYExtz F֟ wa5%$AUMa% >6psxk[P(FCQDO߼{"jG;]9iCxTX0RJ-e [ mG['JwC)F*F-BJL$BV^Œp#H3 K V?d$2|빂õ9;>~2^#׽d.8kr\|ͷo̹\~v˗/nu*u}z^N#q].ΑX"O>Z:\2kkrٻW6+NzLknWI~E+%TFWMt<a-[RģZDM""mW<"h,)#,2Dh,]jiLˣhR].gRGJVcIߍzL%hmTӹ*QRjH c#Jp$L9x'DC:p|y]|ʿDYk:}z~|~rw׷vr:u:K^e][.YZ? =]o3[.㭾[zvX՟\u|wIƟK_ ^KU_)C BJBm֣\2~P]#1iE˟\G]/Et g;3\խuƫ*;^]t͋膎dd5hkh<>nc7^$\D°m2~ cD"a%+⇥,CDNS:wU=ʮVe9oSITLmTNVB&B=҆ aRi,+i (˲,˲Rd&CRzI6޻i]D$CPoխRMJQS[[եUV׮֮YV[zM:ABV6)˲Ti]T* )C+GS7Gv*#x+ S)+eli^qM~q]f}m?Lu}8ח˚=]+͜e\ F5WΙc۴˞6Vo(iTWi>2+Õ](յI4KM;Uj"2m:CPQT*jZ֣E둔R"$&]+D4 Z)X՝"h!iRPvVk?e͵OdHt,^W? `s3~y)1kK{۳4gR:icC"$tm_ Vi)Z[h:a4o"Z+MMJv&A2!Ic+t㕼^J;v%M$zɧ4kx%WH'&ޛKvMZ~ٽou3ַUS6߸?~U߭h䛛ү߆shcÆOwX>nWf{hfdV)%K?EQ?ui}WDYCU!#?]H1Z3vvθ|? ?,.~%~8\Xss5iPs.+Vr8w ێ79yr-/ۏ/k󕏛r^~E‡~ܿ)~uy.oĉS9 >(Уv=F-'$=m=z:J$#e"Aa6s9L-4"ёM=$#ǒ?-V][leh6Q)R[oإT[zX{hTvf"]]V뻪oA ! I.h*FVBXbCD>n qJ9-e"uIv]̇z,\|2^u>\g.ozpq vs9 [yyx\#|zu|C(q3^\T.?)Grɲ7'ò=i>8vtUx:T+%DCljGKe -Gmn[)kF:N]Ql7UbW"Y{%LՋ2Αh<VՈ'8i2ljĪ[ 5Q T+8 HdQb HâI&{̘peH !v0A{knmj5yWx %t8flZ۴JTj{&MR)c#ĜlIzGj#zjݬjjԶIXz4%rN\22=3tTGUV:\7'^s~2;~/+uk|oח\2)n\8)_|}*|K?sum{GB<7or;wۏ\ٯ22'w/9+2:FkzmCH{etʶ{d<&i+EfGWJi=R!SnbSTڽ- exv-[Юz[o뻱+ꇥKm[WK-V?ljİ[*zd®Kiu]J$YX[b;w2J3_U'Qabu87i|:v1/]=%2%O%C2^C2|c֟eOSoAP^i[o?[,o?oxxX^eP?ETo%iUHBd|)CV̜v㱗j>vY-#~Ymdu액J[2vl&o+6Ge)KSv} W֒U=zY`|WVU]mQեR]mSJ㻶Jz,V) `GV+AIXm.?9m+Zt{G!!,VV>u2/mZseC<>/x\8zs˫syb$_/?VrIwðOj=\\\zIfkhuuĊo+MTmMWh$Z?ܥJƖjETKTPm5%`DGlI h㭬?%FJ4V+lItѫ% Gid0]Y[ݮD.[?tLivj4ݘ+Ʉh,crv QbFSUQZxLXwڞDfzJ9TnR]JnBCZ2Jw-n&Rb T 1)bB%E+縮OzH#2R'jf#Zd RB"xj ]mMJ[ZMÔcx+aHUWm<[JB?ՆS%HtB [OoUĬjR!꧳ÒB/{>6Wf*yo4?l=R=wְHut=Zo:XUo-ZB5v=B C5pG9C+Z[aj|^ů|^xqono΋Ӑ|qkUz vof'vpr}x+FvCb*u/ƹ}6nJƗS'S7?\\We+'c5s9~q/Cp.W-9ΥƶZoۮ%NÆ5i<z[TS?韶JcC %cJ??RBߕ[2BVS+vr&+6m2ٰGXg\X.]rEL\bJzKs2$Sr'mRdW:斗adWweo+Z9\H\RbwUcmz8z~YMegOԮܔmݜ{oLrU55mR[]=ABWVף6"޷]Vo!#%-xwAysƦnZR$,&fw9vulxOoJ)mjJrYVJe%$J4)xT28ԣGW>֮ғ.ժZ-RRJD&դQztŐx$Q*2i^kdLHlIp9su'3:=3s!ss۞쒘\#RA|Xz6KB#/H)x+OӮs?Ͳq&:޻ӾRliϧ=Ϲ}ϹJ7[[nm]mvVvZ]c}מ8,{g~ii{[ZM4vui6QD&iVF"!\"4ی$Eꇚwb뭺FG"~4ޖJYFi;[RIx\a:+auc[Z =HK=]Yi=}hݙ vxtk9=uX*v[%hmEPDNShhI%R J)MKR[]]YL2+UTzTbY:'(5MiZ-VjK[eWWmhZ>jhTckkWUMGw[YY"Dm5ZV֖MuhRRA zGK%Je$!DRi1#!VRCKUB\v)(B[ZT"#UilL!3/r}v(wQA=TWյtuZZV+RZ=]av J[JHEK*(ViS$CM%:&R&2nTQZ?DdXYČ3IM)[mRD*ǩ=uǕ/yo+׿Jk}o뙜y}K|/˗#d>;/ˎzuǷo~~cs߾>fjlu+[\؊⭓^z$ ԌfkXI+wv㕪#c[*(말])HlZ]J]PʡR%UJQ]ݦT\#$7kWY=t5M5եeVVkKZE՟zd JcVUZMҤMN$)c/mV#D*+FV*4ij+z1vƮI6;ʵdݯIӣL~MEǷ}u;}zqK_4Y*8+{deU§sMoǹ9ʷUl^=9ۢgnvXۺCUߍ[GQ]3V?!A??y??-o-CƵ~piiXuqW#%tB*>g)r`p8EY>i]+[Vbc_yvr{̼z׹~xqH ^E.Oo=S72qLX氩mk:~{o;\z:吋ˣ·nSKx!#|rqB0.o\W.Ov{os˲8syy,USƌ=2NWeuqrԮ]jWb)Kw+[:8ZJ"~ &\Dh6B+CFʢ*ajD"UĬ.]x[,#DI2TS3)~?$cW.֎ =dCݼh┘觭W֯1/%/^/_+^z˝__^ܯW~w_~{ܾ.n7n/o8o?\%,߾ҽ}c NK+~ΧLnc.w[3֩Ht:}ܫq]vY$2^uFVVIPv=ZXhzTciZKV +KhiZ:}]lZ+,c# e(]]QEt7V)IDn}p%gxlR+UzNq"̜sیY^`_bX`Xrw/oIte_aYoZ~۰~ű}b-vh pu|㋿(]p]0O>g{:qqs߾|rκ|?}CdsƗ^{~/~:Aҫ^y>.ֺ87^|ɸq{j^W3|cqƺpNz}v>TMe]#m#9;)_1\DlsS gY孬Gkz[b4Ú\k]oˣK}7ꧻ-KiO[VszӮJYJYTP!QoE9T$V#V/DC:CKt-E:$]xK#Vbm^q,s䪹\r1q><Id$f>d& &5|q#~s;b.?_:dgcWW>\\DK+w>Wvw:]WZ{w:m\rsv0fڳFk%ճΤLS18U*)ﲭhުUODHKmf$Zw<θgU8ںIY?][[V][=ݣRJO% i<:ӳ㇊ 1+q+~hL$d>W͌jXn|&ed$]O~妟uO^53~ye7^oms~]\ϯ_fFSޣuq}9aw=f\{sMf1ӳY3vtbt?zLtĿRDo{2askvmXoepT#.%A?\u_;gq/xq.v|܎|\y ܼlMv{/5/7w|Dĝrrss+n܄0[ZG$W{\(YKB9G'^CI_8m^A$vhpH6d#<ǒFdt]1_K<:,R^z]wOhUUF(KۥުU?n&!D UdFo'U-KZoѣSeA AֹawGd&AurɑoJK׼^:Ҥ9^2[8rqa.9 sw  r(><~=z{O.>rx1|p88w Wi.C^]GU22b)O D.]2[Nw=J%ԣh,.em MvuDHۆz 0Zj"C֟ 1mI GFL|!CFK=*b:Bq!uMHM4P0Z%tuofrUTMZZ%; *]?+e+] [mKzڔ(xO뻬*zD4%o[k#]x)i*&-eE622Nt4x1bTXMm -5QRSTxLuģK1e"F Ȩ]֣~j%hjk֣L<zJck-Kx\Eqoˠ}\#H~v;3n§yxyz+fo۾vmmqXN[Vsdgu9V:zh=]q]ݱd^iK޵cc8/o!~ԟ;x]/.a=z2RL!P!"A &zQB%2x6r\Htxrz3X.Ah$kfĐQ䓙W.EI^Rģ٨j1H&d/}ˋO3:Bd}aD-[H$~X:5G='3[uVe m?9e*%rXo%T$Ȍh"`YeYoH&BAJqQeAX!FY4֣GWG׮slmmڵkk9Rd6hz,D"Xm4BH&FD&IT$2%Y%5w%AL5[#eJ)W5͌zHty Bk4ZK1[sөP=F_k.|8kJu8f09%G`2$I$/n>p~o 'O4_t1vs]3lR0ڤӪ'QVWPRJ"Td&TT%գKu "[ie4$B#I$HxGD"jVM[v#M|׬miZ;N,ʲc.+]mVJT+(MKZRlRz;,nqoOVWo=zòS.+Z}4dHdfo!-.r6&)'̇\2'9n*H=z'*VJ:M{1񇌌uq7;^dT~!%ad.E]:R*E6Č,V.6w-Ʃ\%k.!I_˧|}z|ol+mܟ3{|^Y>negk˗^orrbo:w=͞ӳmG[val%fܫ>1u] ۘL&8k?E=^WrEZKԣMH$PW$&UB=RDRRZhrDGF%DQ&]]%嬭֮r{ZDYrʮ=xQ+cjUw9z )J!w-+sekUz–RJH&hU)vZo:+TT93=UXmp%se.Jw欜fgr5'g>ΉrV>I%S6$7׏~ܧ>~$sKo=gvgWe|>p|~i}L$,ve5>V~:1=Mړsc??Ħ{JLN-2ZHx+P[#ſނG7z]_|o_m{O[JPOD W~T+aruKLwG0x0и85k6Ƌnc9әxEb̥s^F׼8Y2#04+er%/ɕK2 k>yYcXo}fd+zZm=Ҹ7&˲4Co5^WɡG2Y2#̱f]7מ=OG|useY-ǮtZGW׮ert9TjZ6ݴtS#!6hHC5&emd$$TH}W oJ1Ѫ?D%Ί(i FzK"vWdF-#!\C#c2I&4t&2Ih#H{$THmH)\m5Y9Mi)mwe]g)K[=&CYք8>Inlr>G"W\J"5댸ҙf2#cPYJֵ:ԣ: []Qa#!D&bBKw};=ǧ-z7[ғrӛ{UK|e.)zV0Q>n]sLK[lFBfh[K-)QwxhFģ2%-Ao|?_}GOOx+Bu%-B%B5wV?HҚwPw)Ku ՙ0ƣk.2^c4N\1\H",` flM(# _"I&yq{/e<`%&x 0r˲O8u810K+$֒jۏjٵVO{mtj6) ʒd?m")͑fj6iҤ\"0iB*MTJe&Q eT*(맮ZVKV۴RYN:Ӟ˶RMƟLD,(j)+mECYinw{tۭeYeu{dYJ)VJ#$AΉ(ƼDB4I1qk2\$fWU)DŽC6XFBjWt9zˑMVju$/_]#B%|g}[?$ͯ|Pbe?ܷC|=cohMvco:zs챷fPY)g'=z*-kWW+ղ(Qo,RGoHMRk,4IQ4+THdt%XDQ]VAZ6SjIRFw!!%mB$Gȣ٦e%4R!"ؘcOv)Z=4]{'dmrBx,Ch+]*Snwj[W1IJ$ *XS[-Pn)Z]]a!~(*H""!TS.MP*҄L':I=9v*ճ*Ԕ2Ji7=8ktV]Z&=T*eE"AٍZ[GKYBV*H$BVJ"BjRVJеV\hFHģ=ZxhikkmDRIUf-1"VfVvmz =URZeD*,e-%G|J *4j -RZ!E ZmprR])kYWL51(Svj:U;Nl풔FN8ù[p9N\/#>}nt?u˵Ǖ\g{ůyÌϗ6o}?G~ŗ//8G>w??M+_%9vu庲W$3W^MOĚx,>y{NNlrabĸɚ]izi=> i%=v&ڵkVW "hm)0DmW#]o!RMCdtmz[hD'=vv֞.[Kh %Zi<6J)RJ);G*lR!HU;궬^Z6Az2d"\uJ59M:Oƹry>;f1gd3;2I?ߤ&_?/$ۧ#'k?Zs~]wǧo|~ϻqsiܝqs;u뮩Ͻ;Wݜ3al(Q֣ފwU=Ze貌DCwo?eOT_Կ~o[01Z! ۰e]okgg8 vx՜\.o-2׹KbEEqs\_uዟֵΗ_%0}q{7g_yy%z߾x޾M3|V'%Y#W뇴&ғi۲n.]i./x̞;Fw AFR˲0ɠ]c*p-oK b1O6KڥV|V~] j9ZGeG'[VV7*jӖ)Qe*U6ކDX[w7RGB=ڪjՆzoI5 2#!:fSm‰+,qF !/z\GPCpG*ܾ\ɘC855y0W\ʋb.Xo>O"_pst _ٌnyU]/ot9z|;z|~|y\tmq[ڣUJ-Et<.iTmluRK#Z?tYJ)$MjxVⱥDm)I(^iXl &Q)xV(etl͡ UJBF%~h(e"112b+ɌGfX[bd]ng.֟%vC(]k<ʩbd2ZQ G&c7޺~7Xm5D+G[$B ;~Վ%~*%[o#FL뻍G}&)%Z.A"6w#TlY\HS<~SyգOsө]֞r85mLlz=caZ./q\y\A1HMiM6L#%]EzX!LBeHP/ZUZK ~jC&-RS"I #biSkۮ]oKmٶJKhZkkҪO르Zm4ҦRiӦғF+ԶުUjzKSZ%bm3xti>Js#iѣ{q7MlIN$TLrO'w~sQoϞ|:[7s{=Nyy:iuKj|-Otk&06'W"gږ]eKzY]ZJDb;~ }wx AVZfOڄ3Ntt4=Udej՗mOm:fmS{n{jۭ̦LJڭLg)2^h”ҪôӦ&z鉭Ht4\ئ4Ng*0L"e9,',ٞ:gòTRT*B!R6R)~qA)ե,KjZVR]Jvn4DV$6m$V "$3_[ȵs2㾵Ͳގ\&13uұ<"pM^r5G#m2_"H6,_|#7yx+Gvor.Wx_vo꘧MZ}y'r5و#G/_2t38koqzٸZ}]t=Lj/vݷ$SFlo%tu*]!R( FP/А6-Մ-1VV[n[RJکtlmuuuuJL*6mZmNcsKM֞T*B*6M6iNNҤMʞmIPk%^ZR/^ZF*k%T%ڄ6 i$'{=kmLQ*$r .iq|;[wMo԰t?=tujl24{JǮӦZCFbGC;9rʑ)KզʢQNժj9ٕ]綛]vEKu覛VU$*eVkoݳ掍M;1N6N *˲GWWJbwnuڭ걫kk׮VkVY*(MkkkQJdi*j֮VV_$⭕RJ)mGRj^ZZ.+ˮe)A"RY6=TKWLK4D+Ҍ\IcӓD"[TGWo6ĹEǥϓmr8&e׮#|]`7"#!0~uo"_E>Sn~?2楇C8&$K4Pt*=Z{8=}~}lgw|[WCe=U]]]{nzjezXCRzkH$AC$jzHԒICEI.He["%TSoV-#.tt%ZiҌD2i4jiRmi-RZBjVd҃:5v!LlRVImWuDKM"[h#hNdn7L2DhwzjZK_HԴU⧆DR/mB}Ji4IRemd(]:4=RJkۭMFVI)zۣuZjP:K4T]VJ+M#$ܬUJR`5iZեR6^Jc} ڲvMTKR[ JRemDQ*ŽƲO)]6JBP)+mZR/aQ!$R-oKJCH/%tK^!0R/"ꭈxVUZ؊?TV%+R]Cڕ(V(YVPDvV#rXvHLtJY/u_'tQGoq^v}ަ4)+|(3#WBCO#ZO-JMm;("HDkZʌS3#!i5#d=3 A0.I* Hy`d17Mk>^"îٶBSgOy>ܓ{V(cQصkWk:]}6vmTnUKbEPVV%d!ĤҐ!HFӹ~_vm]]2kw9nR&L$a`>}9+3=jjEhO/]>v&}V<ݷm//ƹgﱫud/rvs1ٳ$]dfzΞݲmrQS wmkXQ_B{[x\??RIW[TBCAx BP/aTFpy) BE)ed .I&ーlRf߄2RF뺎>\2G4Cvs%C~2VV<8}ozXǔ'Ԯ4/ưzʵ:^m8CSe>6SWe}͋òR>ӗLiLvu3lYv7gܤɕ<%IaPJa̕ÐA$$1 B4 #!/ ջ]Q/(y+Vʲ{Ymovz)ARoimRFѥ*jYV_VkZVoRʮ]oQJ"&*I9I%44."$s2v*DE(:~M.˲ =M5redIFȓ0z)]Ã5}/eYNmmݷO=in{(q߇ڭjŶǬ=أk{usq=zj5vZ`$JC)D(TF"cJ5m*%٣MQn52J׌JziKiRZViZJ%$dj<4QQ"dZ]Wvc )J$ݳYlKR5F%zLt{2,!2Fv7AƊMҚމDlfGbVuՕZ6ZZ$[R1S!D*eK^*FTPKREeeHv[ڦQzH2C Y!DT6iZ}iRԣڪ*֖RtUtnU-x*hTjңkUUzX] *R-4EB4I'MVI҄lv) !%_Zs^rjM$2:~"R/itmtnAфHT$ ? /ªzP۔sm7tu5tqVe%RVe"4Ŗ%/JoEV/+αejb6TCTeo q]3^vM][T.UZ=:~J$jCΥ##Ohd<6cO~7ϳ}?9gs֜Nr> s=_;Snuyf\rYosY+ZnjήL]w8uHdtsfWVh2temɮ-զz KMknv~h)b"M!Ht5K:$wV+TD*4ZX]NRj95ǶvuZ=7֒j]XJR/%lVK)jD*CUEӺ*#RZD4ȩ#4=vMHe%nHN=c̜9vv=u)qʳyƹm|>>:~ίryN}+jWB܇u>?dzsfΕӬvKVRRe8^F]2Rx%|>%ߪ)F){%O_)CoA)'5dP/ %<.h\㎫9uPy(C2yH*II#׷\4 ɥfQy$!rUL2I$:InJ8<^ףnNG^Z8og2d*2qe._v{aRz K UA" 12xklD4v49q!Ltyt( i$3 DldI&_$8T0ɔ12R!h#kipVjZ]]eRBR/ڶ*UoShzi\vZ?Rjkזj !شTTJ)^*^Rؼ4Ǫ"Ԗ4ȌD^f&w&2x+էJ)<5L&epy\yr=r=̘G>*!O/|#|o2%~/r7E.ğ&K7eZz;,v]9q=}|rvt+EP/hsUT*mT4ꭲBkےz?yAj&$A%-"֕ Rf6d$.V"Jj,aAAVRRjJ%K5L3\IY*Kd2I$ӜrN,^Iz)֔ccfb{*å+EA|IJT+Ce7)H\(DhfbD*\!"^%!DӚDC&DbV/[o3bodBDTD-ޢt#fJFGiK%:Zg+T+QlղZ)nQ*iv5J5^C"6#QoxKP/KHxIHTo#B%"D^!/d14ѼIJx"41ID"ұ!&/A"ԗPLD~je PRM.os1☜RF}I#&&&.&L$DBOA5R/%, "ZH(dB"(bJYPj.) !Z K[#YFKFFH]bHe2W2J)D^JKGd&2as}oz>esOuh9rqEMs}>X+1%is1ywqcoS/d\ls]Btb #Ð(D%Dxi4&QKD"H$Iy"~HL$!$3B!"E"AÄH5J92E[jXKKQZִJ? bhT*e/)#1qQZCKi2 exh(ʡe3&%!ەd3ڬot?vғsdv9NDy̑88Vqh5irbns,uWCsgczg&#'FM֌KkeTx USԚVozĿ^JNjo)2Ȱ1c2~ws\.LrW\-Z! MK#:S6Rr˅ p.{{>1-ih<ק}<r'yp>=o~zi?ō+p:{)KyrʡGpP"M#J^꥚jfs<h!MF]]+i $V:?]viC[KzĠ~ VݶjRޒaQ[z;^ZoaMa4^GU]Y5UR RBCeX]ʘGfчdG2JYxV$##sf֤2O9+宏id.וdx2iqnXq_on\r?Ot>=z;qos<}\^Ϝ뺯x8 ]y.=q}r>m\̘~dڬu٫鱙팩Ȟ66{zE"I3\sJ̕+[*lLzhLZ82^-AD՚FRoS^26®.Z?dM{jtWʈK}Y$/JmX?OE %~R/ADG5^2ǒ+^ȘR;qljj$Et.ZO\T7|ə>ƹsuVr-#s]uîuOdlOq.ӗKKI7zsq5Zקgw8iwDȜѣr2 egoPaǿ\B727?RZK!w_)RZ-[-1Sr< wKLĉawCCFyq19<&G&iH.AT 0L#U/וN&cC9K[N{(ɔt+QB6cJ&grM{L,HLfdzv{aRZjuud2n!QQlժA݃n7ժKIf63dҌf:L5&d&DG4iN6H3" -ri:ʡMYnvuu궇eYJR,emERJhҌDަ/xD,.+JE ҤRH VZ-Moc4hbH:64Fd.HH9zkm׮KK7HF.NFNkV˦ /co$Wfp%߸xȟed|H? >dmYo+x2OBPz"쭟5w=۹<5jul-9{ӞIY/9Kѵ=r~ ER*޺T+K%eV%""V*akSf6ڕ "մ~hk[M$a& d4DFJY[/36JDl V}6IhIɄ&InMwWW֞i#{RlZ۽hИmNI74aE7QTHEF22 DjԨ!f&? "Ҵ24eH4?F$2IExR*a"(rDG$Lh2Ѩ=ɲ$vN[{J/*v꥔5%RKKUmQn)?TKJJUHj՗PA$%DPT*RT뭄/M*xx =J+QDeK4_QJj4F!ґIJF]6Y]/Bj)RK9Z9VRKFKt&C"CK%+!2Z!RZ%dLIJUKc8REcWYR/˄p$~rV+C\Ɍ*K&>1N>׉__tҲϳ>OIcyWߟ>mng>sssow}K:uM1qCqE"YΧK+<]8G;=ϕ\i.mnBkf4/%"ʼnx a*F&&&Rao%Tu3 A4RFr]Vlz)ֲk[VuՑe^:Kj)Uo a}~ J&hRӬPjm =IGiwU`.mеNJPDr%W\wyvud7g+ss\*lp8y^Zcך}.ښzj=on9uzn MU+>7KO㗱9GnϿ'׺N~v\}z!y}Υ9q_x]Kz)Ǖ==t-2ﲳغ#A^UDTԗd$Y7zVV"m4Vt}YǗVh"^Z.MZ EgYۮ9lMMu)mR][JiˠCZ/KT}D[ */^?Iv[2AUwK.1ѕHXlOdP2DKe+R=®S s4:ɇvufUdx1;χ\÷\0ǃ⯗\\\(|d[+}ໄO7/Jeu}Y*b2/`P"i2n;{}u~u>Fre=nS<|jݺn)/=1q*t}JY]ejORCUg2dEkk°T+~ZJb evi%"4VO%!jmmbYaz-^Z-aO+61Q4[,vrfM0ڌs2R/eJTȋiCnn{ >Sחvj܂Z4>-$RsyY"ԭ]-e[%HVH(ϳm1,OHRQ4 ՕVqԆV1~R)2~x%-<7>Mi-ukCUsT_Ju-H^%ՆKU\~j%nu륦2¸Ne$JA[Eܮe=Kk*hŗj"~JҍV˺TٚaR{OF6xDZY*9VK,ؚ(!%NRI./%S=Yp(F25Oq.ox,qqy_|?<λa^Nx>õΞ]Ǖ8ng\-6~<}1ݵ?.]y9ycFj<4lglzͯmֳ5],aMV4K*SVܪ^R/YE(Q|Ye-*u+5ueIhm$D9V֢VSj R~:eSK5^JqkYJaIݶ^ʸ5SqKX\͌FIJαy&HxH<9agg6n>ϸe#Ɍ3ϼh8n쓃~t.%>>tqz(1=y?P=Μc19*:3{cFç'S8~wnt2-?KgLJlBJkoXx)W%%o/*3jLx&rEٚi'cXyD F2mry}31!d"Iv+3:5]Zyk$ߧ\)1^%_ݺ?%q\s#0NMFl4[/ȣ&K'jjX*^4eF"\\3:W\2fx N6++zǠƑ:LcH\d.y$c1y J.e챿x ՏtӝյuYWer:vVvR)/ۮRA\2N;褓i5Ml5)5m7 AzefKSn [nm|T"m$C(~jʮDBc$Ԇ%ZZė(+Ʉ4YJ&h^n\i3I]BBڐJ%nUVEI$R{5溺eu jd K)Y32DS>%2"H&2AjcR҆FkKK*(C(ߍ qa!K/%M*[ⶑ!rhĎ&-"]/S!BZdL$RhD0X6Nݶ+K !yH:fb"ȤH[C[U_B"PJDH ["Bnj,)JݶR-rH$nb 5[p DХ>!6d2k-֭ "\FK`cB+HRaTSXRDH%!qKK.H2-%f$S0,pJu.2R=^bHX\nnY(kie$za q Z[bڇ H!\IWimq<0Hz~IG/9ɩ΃]q<ϳIt~|̏g{=>?c:?>O&sv>x25dt<\qg=ԼW+O.s(|zVj.HDkr=ryNFJShܖ22! кUK"H+"CDL2 1Jc[hė CR/fzZZSneKP/aKƆJT!&\R]1ERF"ҡ["[4Y`%qKTS&JHPeK{zz2.^sFNgLtEN.9UsX\穴N=Y8Osُ9<w|:էGsx5ۏp|Εqvel/r #/SqoFԧnĿ)ԧC%w^TFKRX?$K|)2`߬e bݮK|.˼]"\pv9^ x#߽7}^rgYK׹]QZzn.O] v!0212/>uY_F&FƟO}Kmek]V}u˰~׭۳=l?ii9Kc겻_GS\˪e!nAo*R0Tz-n1"R*j "%TFF&̕<\ooo;eB2\ÄݭC}Zq2>6^F+߾Gaޤɛocr鷼]o^"|zӛoo|7nY{z|'Oy2zx;z,я7>>yvݞW0Wyzl[]V<]-DkWzGk>> =jLn-)ħ6xRSfݪXUZY=Tvn;l]ƭDkQ$a/%VƌMm5t/ٸMFꖌ G-2tfVI|JU/]%cwf6V;ec֧j1YQnX;.ڧ/q+Ҭijm2R}nE}I2_ 1e>O-/%K 2nVczYm-$Vk6 Ҟ6{\]B"UOA(K}SC}ڈb[R%vTQmUR$*^kEM-Hu[^fԪ1l[S[0]V+Z[?j/,].0A$^V#1ڭ%KXl ZSKR[X[]rDB}TZZ-T22uK>?addaUTGHDBFW.C>]zȸj"ConeWd$pyG~eFzzx[6x{]uicwig{3>[GGxJ^ٵAiۭm+ZA4ԭSԗ-;!au4QA[1Zvx9-LHZ/u8Sj-)TT/֩?Dݠ>K&pLvKRTGI8nUR0cV#Ud.8yw뛏>y>|꠭n{ac3p|5cW:7Iɘnq{ҵwTOi)ی%uK;>_JcėC_/\oooS)%RU_OĿB !^ZK0KܦT\ge"TF)O3N\#|#>:xD.Dƛy!e<.WFMb)ו^zk./s\\9EL I&L&2:vƷL2H5>><9lH'LȭR=wf#}rبl-s%<&5IFFGOdlqu) MJR[ ,>劑aHryIT$R[F(M(BYe4[%x)e9,퓶n_? *!RV*SC[ukR/? Jݪ)R!BHnAODvr0nHE2F^"lS˕dlFȐ=LJ)Y[vhjRzYIL!EէJى79̻^oy\/H9|\ KX.|\3xӾ>g{Ni?͖v=vʚjn֭ !heVK RVK!HD&&klħEJu$*MJ믶4Fج(qB$/%^bWVI GHt"f RUv)Ն ш$)(UI iEV;$IRDi42HBS!qѨ42^Vd,2h H*M$[K/!^jWCBQnWnQT+&MKH3S\2Om[Ii맥jZJB"([WB%K٨,+BHF%~jRRRA[PDQiHb#%JQuڥOqJ+J dFId!!>Md$FBHRqڑ 1u0H|J7Rb$20ĐJ`KHO-J4%T[U/DG"dh[-^BK 5TcG"!2^BF#* z=%!6.$JKhLqedF==>ꖲyf~<}NeW}{>mNƮV•iO4G.{:ne1?xpYY%^v\sN:Ws=bdrM&+ 빹]1h&uصK [Q!rK$"T"c%D1RK!EJKdm)%>5ɴ5^mSéZZ %nzIMR'#&HH-HR:itZJ&#BHDʩJA$9I3NOSu3e둖tغF~2vK('SCK-#O/g/qx߅JG?^⯖aX^?YŲ\>p.֟,_8<|8!NΕKy;#_tX/+yX|g=<<=/?yvݝ֎ҦIji̪WUKM6/9e-a=۰L^vkzY3cV`2> ָp ]!h-W5Deb.KѪfE\J+mqjA9#SGQ툰JPMzև/]FT8xznZfz2)/uKݶZz?HR]KV#$RpeHYصn;R2qP3z|ںwF9i6SFVBwő85=DF#Œƭ(a9mVD^12^WO^-ytF&sy}}'۟,ݏ}^?ykzqnS y3>81#_W-ԟxYw)jiVҧbzç//>+tŧV3}^ᘍ5ۓ:e8۩$fv~iy&d=SCy>Ϧ?-ESqQ?}g>y.+aZ>c8< `Q%rwTkCDvq%\ooo)%WRg_CRV %*RPP"e|rd\( QFT.eyTFuX-۔uSC.h\x򘣗1aj.Mf:o\YR>t\ Tio6H^6ys1<[0GbݞnSVq]cҔ>Wy i&il^$I&L$cI:,eYJ$4*nHhR*&&>,eHũZ{jTO{vգǞʡ<})TK)VjT;m(MRDѤ޴YmR-5jR)^J !Mh4rص&E4nZԇL59̘j(eB1a]c<\rYqir.$<ɱ{\Yxc #o<'^Kr F_)rz)y̏>sfߧi2pz|קtvYVyw}ڵGJxاV=JtTTdZRe4A!.d Tt}*RՄ&]^NhU_V^mZ(qPB4^J%DI 6X/ѺVIiHI4>,+I"-MD4b4 .4\f&Ҡ$&R/H<dLnqLJ5í qKXO H&HB(D R!4L6D"\0ۄbABjvV+*(J !JuewbE) VUmJH| |ɗ&ݘH$D3Di"H$ D$$MD}B$EClxi$RMIA$\ e|D K&B$&dI03y!"I+D"[!I+ !B"#HUJ"K`[3Z LUTJ_% 2Q-LLdTFHR`&RHBJ4kc.՚(qKhkeԐjZ\*D2ғ֮Vk-xdq&odE"^0^514VK"ɺ.iJpiY4YU[$B7nujdr#]?b.lz]8kkW{f?Ym/sjt(٦v8;WO!vFB#1nv})>ԭ>r _*W Ŀ%?xow1G/Q__?27k| r./-Oܖ!._.F<#Vgr F˸0\.oys{ry&oc<\'<<<^G'\TTti/"m^.3}m'.{.?nlKYK0&^2+^v#!mau}zvi^ZGb2,'ѥaۣ6=mqPCK-êP7m}KP/II/Ksu[N2ȸ5KKp1oMu/G/y>}>&iO7w=vߟW{媵뢫G]h#nϚjuuuchuZ[]R%%n[B$hkRsҵė 0_z{vRaVTܺ=1v֮=[p 瘱u%áK%n O[Ad(njhveT+>M2Eobe./2 32`Ƈ44g)Qԧ1>L_.)$6cQ J:] 4vYVi3)nbc,ꥌiDC|٪ "QI|Ŋ`nz.a2nKP~7>2ZzFIezj,e0"^鮗 rxKܺOC K՛D$n--nzT՛Q"+ca]qú5Ľ[5=H VI)O"1C> ix j>9[mkoZzTVR]Jm,=BJ[ҕ7{X_+uۚZ;R/q8`0vt0#a$r$Kb,+WH\DuzH%Xێyuhݴpg]`d1vfyinK<Y\\Vݎ/pq܎m񩔮[FX} XƗ%wQ)-BƟĭ*eX./#UZ-b/+2>Ljdץcpk*iRlr=\,ښjL18Gi&&zbo3k5ncuGW@eYs쮮V/SRF6aD⥉a{VK>%(x)/AIo+-TcnM![RD1%Z֭Uf 㖸mAF6~2DI"鍮RZ-LMUr8&ZmumD5Ylsʜ4՗!!ԉ ^4zK:C2H%&I\ӈdb&%nQau[ԗd/RJ#JR ["KY Iݚ5- H҈Odb5ZѸRu DiP/F'N$gEDP3ZFihK/ISR/ A /)!HHRVȸDb"xx)b|" HM&ME+[4H%*["a6mKQˡ>VJ} !ETJ01"&TK"!n&22R/,񻮍!MlRKde% P:f,iF*tc- fHdc͕|wp]GkXO]=հ3;sh=.]G5:3}9#qyS}eM8xD63Ч>uz]oߜc0t\P}{&SOǗOǭԧC,Q/o @pj-Å]fU/./C[߫ rCGT,mEKmR_AonR][ׇ...VOeESXSP/ŗEmOPzF|/5u%^u[Qz9 V#EY/+V.Y+բMU'y>/=c\ȸe] 4O3s|Ș2\gbȓ=xQ,ˮk 3qҍ$Ҍ4/UowXyy:O}\oW~/v^WoڣO=:pƗOՕVPqVWK]e|ԗa%m8pZCDDIV?ԗefb붴X;iTZ^n=c$>Qq V֮F[P 1ek"ո1c-U2R? %qDbg …PZWz۲%G2!őKi3 r¸ČZ;F*o\ S^.cYe~O<e>:/+o6OLqr8?_ ;>^{\<7{̋~4OߖW:5o6w]^/S\y|H f5ЎPzS9Cz[[m!~$M׶uquYch9 juԮ/AܺʵnTкe/ JPYJEQUZS"HRDv-l㖐PuLKjKafGT#n3%q"m~x>tp\וڗ\z/rY߿3ގVecm˪^[aΩaft{9Jm03ݲd|֧bXv\)_??/>>>ϧBWߑJ; JS65#%d%ĄۤҨ6e.=f:q%9n],q1*%JucW5h\uL6Sc5l9W!nF|x3#gd|_;;,;7#뱯vowv~vY3Ry\CSTh'A覣k7m*eWk,pX=llmeڱMKmӦMJi{ԦPiTjlRSSvգޖl-ŋSˋ(G_,eRJ, iZViO D"H!x 5DjQJYƗ~XTZ[9[9TW=vl®Vnۨ5 !$ViK"'pfI&H Bˤ8BHt"G֓'O^ټ^^'siSv||J!/2|o.w9W9oѺukT]Iզf8&x ֭jnG:q+}FF4$!L>-AuJ)MJ ߔ۩SmF-rDBVh4UJBFj,eMZ,˺Eu)ǭ%jW+ԲrD(P"u6HZJuYZe,a+!?9z,Mkm: l[kјF-EH"ZePAZ 4cƧRŒnmȭ(A$RAd!QBj#XRujZVJ,nTJ)RvS![TiD"mrXVzu][CX?jdG+a2nJqK CqkMiHFhQRs9k63>Iׯ/y,U}]]]e|N:IW2c+E\\Gy\fu6,xgV~ߏl_ϳԔz<.]S-pS{\i;:jk-[uMnolm[YH 51vښjRԭkkk)AZU!u*]RjUvNݺRSвVzkT;Chd*mvuu9]Zj+^B5CצK%&ysvG9*[bDIxy6/jt٤2vXtNSKqӮs<c_Zx^a^וӵ=mOUg_{&tqkek4u+VU(ŮOuYaۋ2To%z +/z<a}$O/!FJo"Umedi]0"N]&WGx[1"`R-I40 $5ScZJ䚩|$I1#].J= In"Ak:̯r0C9!2\fȕ\ V쪴ZMZevZNZ][[nJe)J-&(˲զRV߰RRݴtJcVٗTGiT[[]]jeVVB[oK,[mZmdUoRH3DDSuOCTED}nJ!ө03I(&Dt6[T8tm;~mZW #\ e}JSdtVv#~\.r *#OoK|Z^<8_ԧ]]/^}~ק0LY}EKeuYRRD=ZVQSu+z[H|J$uKt4AR?d4.gukiC![jjmZ٣ՕRP-6ԭLEXZ6JET*&%n#C$BHBܶM)o-UIi,Fĭ+RmL%"[*KJZ-ҚoURvMfTS̵MMb#bQYT4RtҦrC~&z %M"nIEI"7y/1H&IҬ4LFV iSQ a4_bCM M.U[F-kViu%4zsMK[i$&$*aF x+-xKBT 9զfKiifD27YR*C+cƌ[K$DDRȘ%n H\јKBP2D"--s%Ie$o#mQVJ SvwX(Do/BB %Č֌VFFڈOu!U(BEKJ&:T [0BH$DfmmRjȘ$f2c5qMF+ޒr:\/:l?>>mz:tjhH$},1yw<ԗKl^Gl$]zqE֌$I}6aYJz6[Kz4VDD$Hd1LlV"[9GKnnS֖ [B ![ㇺ-B]ԭ"nukY%TJ4V C$3R(ò&oQhD$,EhQDMĐM+!LDH5)m3kxH!ejH=nGKj}?Jc2m֗}z<8k7 jm2e^6WǞ]; mQN;e~~W%~Woی-GvH|_˗_?eƿ$> `X_4nZq s%pErI>I>\[u{|p/8܊A[v1'QՇ-q>d-H.?S?;GJ/tH~J~=jOtt\H=n=nɟ>W.juYݪn]N{ut\pM$6nb\$[n䒇IaeuetvK[ua>UyiF[[[[GW_U=l[ʶK,^~R]Zݖz-URﭷqT#iH-*To񻠔*J~SP3oC.rLD.qk"#\:2a$D&"c%_2Hvd$~K#\NeNnYH!|]&tŷ_ʯ__<{ŗ'/__=KzkW*:z ,&q-%׸~רUrT[Vme2hՙ0ʰl_iꇘ 1"~36b7vPZCl|: [en[PhmՒuk)iQi֗ÆJ$Dt(Vק*>[bQnj-mN0ħuJT>%)qԭcFX2v2񶌆ĭ1nE}ZR63aK$u&6u+q U՟-zZĭEZ6[z+V[܊m<إn{-R2-lhorRFHD.V.D" 3!q]KL撘1˿DV~6pɇg]\4q\):krqq˓K\ZKGxO-ظ])fc/44)yz}^eDյmV=uZ?D%z[_mvmn-ڣV}ZUtZ$mD-N%,OGG$ZPraZoK"LBUWsDa-%AU▃2q2*I:>EAN伆%7d"K69nVúìx6bu[/8|gzGְ=v1cvl_XYrVŲ^6+7/;Zoe܎O+9o%z C_?_f[b7B?)%NVJ Px 0z$!-nQq rQO3LS;Q^Lc4#c}'-TA繾=\6z2/zI׎DZ|^^v9Űl!Yه];9,Ǻ.U(/˶AO_ucY+F&D''Y&rLM S԰z+եڠ5{G7tUJCCT.[6r4JYRei8oխrK)ˮ66-K,R?TBVJoRZ2eR)>EV[Rd._R*4_vzKZUKoR%HxfUTk=Z}KQ=z2'Pꖲ*A4QK\Yv}hQMQ*ȪjtBc[*MHM5F&^\zeV.lPq%/+oor~埝oxmk:_.]?\tuIkw6+9e:Gk%JkkJ)elV+(%TRR%S!~hjJK#KGF#RG$*HdۦTiMZCYZѵhfԨMR3MhR!#%Gi=R"(ɐ?jV0J]Y{$l!md["L%}P⻢zDS1⻴IvѨXMTH%(2CP Ֆ h"XiI#H"$"7]{lPmV)JMhBtڥZ#$m&8Gfm)]]U9DHR!,#2b%4CU]=ڥh~mG: (4DFGKW)"ѤDzMfM3&D6m|\LwJmhHveHDBID"qMQ$!AmfSeȇp"a2m%C-c=kw9^:gi/cס۩s:蜭X=3k;+Fr.uB=JF+>[8>bĿ~J{O??^~_Y N]YOP_(C=Ɵw%J|$T C(e|D+ttRHP 0D5_IoK(bPm!HTjMIZ.t*mcH[J GF d>ę|FW)VHmmJ)>T#L4*>h)TI(A3ĮG#Q6N}$c#jƄTbM&i*!~H6҉V"=udmZ[ՕխcJC#ݶ(e)+#(MƟեT)+!QURzhҬQꣲDQJJ)KPӴTESݥZJ{1lGG}, S֣P#!Zb9Mğ.꣫(X*^|7A GI5A*cI": =VxGf#!f(]-MF%TM7IwWtSY-CBxB$Ȫh!i6GbH(J#i.JTPJe<A%Y%jD12D#A딪6Pe7ae$vۉǮ:ߜK*~gW9ň͞4L{z:Wrˡv~;uqFFNm&5۬32f21,HkmkX$jkSmZ#IE>mTt׈ ТI'6mzlZcWOj}T}zlZ*QZgmGWl]S[?GYPD(MiiWtӆjlWE|+#X,]M֐ T !F/ir΍ҕD/6Q$s:j[=6zqq,UE5z\ʹv͋ 5JCkib5v}c]e1ݵ5$Z[7 K}#Oz]___c@JoEY _Szğw%J|Lch 3]3!A(i2BG룦k 󚯕zXg^>NL\.n6s5/6p8r\jzuzEu'eIҤ_] ]=69o[WMe_ym&JE+\'Nr}'{BN#>]&nK12ĖpId2Z?bnuGWޥTe*ڕZeiVe,BU֖jQ,xG uʌ=T~hF>*>R?XLZV1PJYƮV*֮TKuV,[Wjv1Ԯ$][[fQqsn_]o}i]_8o'LφqΫӝoNMcf3lnnrW[.חͷ:n]֕k6yA_^S]{2.ҵGLP,(G/Uj:d%R}llwUVKVkJm=JTj-VkWVPjV)Rh7BG-KڶHyHVRT*͖jy4JRF#S!$ܫ{kmnBK=Ru.Sj۽g-c}vq]7=wߵ=֌:=wϑXkuekء-6eb誏Rz{Z73>2zd{?,񯫏.W % %A.o[_Pgc7,cʌ]p^8Cx)^q4_ܸ~}bXٻ‘k<2;rdy!g]˥y n_n[s/N/+>=//UM_w/uÅdG5tqYO~呼|ܧ^N47w{7jR=<*)[ve~*C 62hcH%>pW|tjUGtEhK1)=j-KYiYXSqS-KE*[?lT!?[,ʨ#M5dtw%~) 'KmRU%xt%ZVeFCɌ"#Jfs; ąd}k<2JcoK^:½-=~ ~׹3|y;rsǗ"?7_~{/+nnn[ޖsۻ+m.mW֣ZCc[TUJ}tPS??]ښ(m'4m9 )cbPZv{e0=+ah$ִt"݈]YF1>#>*Lf3cְX2 xPe<c"S22뱶+1Ǽ|sȸK Gb\̱Y˕HccEehRRTc|nhj3&iKu6bB"ߕn:7Kz)4(72v1lЭaG|"ζoʈ!ZZGYht$լFR"-'1#Jh-E}w:FGvK|,%f/n#G%CB:x̥jiwsH#,Ae C)%bb}Djk~/x%<~̱/xx\w~=s:&̛K uE޲z_&חs嗛˾no5oS~qw73|Lϱ81_=f+ιwz|mϵD}lmmK5Qi':>*M-"zo[Ʋf(me5c%%ZQhRVG:E|jG2$Gǹ6X^݈ZZx.ix4vǬַv֐zfZݷQveDb]unbǽf}C֎BGXJpS[?zO?$~OW%GW%⧄zJbb(WQcAG^$R#E xz;쌏N&y%'q v}]㑑H|G|K CkRr9GvN_syq^.?.n^ܾ~\[Wgk3 S\u^qw^ڟ_š[.|\?^^qS'nompx9B|JFry7ISm魇jUNo;mӮPo]#k;q"/DMira}jWwS:u{`Y_#I[*7[/ѥ֣_Riꭾ?9;7#޲&!z[㑤Sw]K*,m])aedFe}_J naT,m6 -~9C<2o˵2&lgk+SWu3W^GWe= o>}W//V/?Ov>ؿtϷnn|Rv,{,eYuzܷjުѮzju%Ց**˖x+h[Ro-&2&UDi#Fz,8\Sm2v7cflwsf {i6ԣMKK5AM}Y{fKע#Yqp}r>~ݗŹ<ݝ> ]n;Pokz%wG_{%OGY?kJY0˰k֎eF2aY0:[_rV}:򻻮j㼼zn/ou</8#}{%ѣd݌ߝcr_&q>.7;\qy]n;^^i۟Wovs8wzd+\IQCr蟹9H%o뱇eGZo5b(~ /!,C| HbKISѓn=iJQղzKZVJ朗GVXDz&Hէ]՗4XS[:~m}YE ĿԒ٥ֶҹv4O !;FVƣl͸5劜HᒚSIS"q Fb8G)[B/KMeɘvp7߾q/$џ?/?崧߾O~R^ seԻo9?zn_Z]u䖵(eeE"#2ԭuV)joh~߫OhYoVĶXJ-ejDlE!Z{xĖd 5,ө]XJ_m5JoG!T5]ILKէJ(!+-2cMUl[X i$DN,]Mx/h.2ٲZR_KYT-cj֣=Ĥh њUJh/I2mhգ(wOQ#>/ǧ8[%gK~wLpVǣge_JTKep{,W( lL12eKbxcBvkBM[JW=rYBg)nۊx"޲oՕUVQZǗZD$s$kJ'B$0q.rXxHbu/O\D/{ޖa$,!jdAxKYwn㗤Ï\,3m=v8pz-[TZRmv1l.1K Xd:+SkźQ/񯜖/V[oY%wzނOJ(@V5JPedg_ft-ry:\2>z+^j=joEz͹}/^ؗse_/ILu-/oHx>+L 7-^˧\=ܾ}?W-|o&h^|\CRheE KkG#/a.TEVcVӮTh.Zx$Zh5$Tz-7w%*a oz4#KQd~ T`BAB&f4-]TCN39%ĩ5Z!8ǧ xErel!ޖ5kw|r>>[~9yqp1o=S?`f9.޽b~릷skڥ^յauz{`ZFW\Ъ? jxO%~ CH}*DJMۈ\2"\d3vN7מed`EW]$!ƣ T=K=SmY-~R1JaAifh:E",-pz Ꜫ#ejd9ZRExDDٚiw-JoOӺ-FH6)UofztI=FzcQi[)XcCRAB⟔R$ _fQZ5YQH< k!6rEc5\"YX3ˌ\1lOaOGbװ]aB<ŢBe- ["^V-ޖa"ތ.ԭ2bud5/=< ry}Qo Do^vŗDe#XB*#+rvxu'ʢ$]GE.0Ƿofm:?\\~0:l%/nu.61.\縮븏D}?/Kb"̷<}Se7jori#e>lM0dR G5ud8Y'+ԣQ,%VDivz pU} "(Kr<BGvMx$fK}*14RR2DJ-˲\AV.mdJ/u?/j=FHVx$C6PID!֧$#! \"r5l$5WFyI|sWe^7׷\o9/?[^w/w7^~pWOן{>zwo{ۻ:ӟq~mcWG֗DGKYSFPVWW=ZojnzC=h2z+G]tI{GlQvRefKJg_aNj=֧ R=8\f@ҫNǙ Qk~k"[I4>n#D+I]-.ź `d8XԖC˺e6&%U fH]D($-cL2q6JnS 5OY.hUiY.ĭn-!lL[&]$~’!ĭxZLJh-}Y]V]uO[Ӗ]ĮFKL$u>fX 愈Ka!#>`V=]vMtnNB}jWJVG(Q,)&UUf\aBaXeOB;3fyuY [ Cv6f6FNnץÆzns<-:X?Z] !>eT'!!R2Z2,U]TZ]Ayi"jKȨwee݆ui]i*ĉx>M=yH%R"d$DH!I+HWLDև|5,LNNχO.ʩ5=j=H'9>oiq8/8%{-=˻vp:AYԻ1:m$Zs?|>_VJ|-X爿WPV%P0m3ˌ[nAuQQs84y=Q"#YS!,HX3dӇILHy ϘMV2,+ϐ0uYv`liB/&2G)&8&{&c6dY77yRIШ4]^HRJ[݆fL I򌃃P M& Q&4.J֔eJh!B$F4iJ>DDBZU,%$,%nqsm-J}*RTiZJC.Ļ(kCZg)KS[Arl J3,Ke{r*Jؤ2zxՎ]n3][9rJ y&c'0ԧć6OuBHEB|jIki:\$Z26E4 ZZJ I}DC(iDriTZC6%DRB5J52fR"BH!R!F\*$-Dj傪6UHP*qJ+պ4J6ӆCWꅸԧ4mLjArB\Px ZMťt7ڪv{KQu un+ƭ[Q!.)eb5)$يwqIYJ}(  iS-BdY2->,%1$N*&cOa"dL nICCddC(dB4LC%X0 AƮR]=ZtLdH8KC\VcK1t%2B=ed)u;e\9$DvhR%BVFHRuKJ('qK2NRJK]\>4pJDT+n#*KqK.P%:JcQ[SSGC"kFO3.훾j%:Mr<躤3}זz [I;UUvZmJmҦ4mj(Z֥Qllt}(RDkRR-uRa"`[IURJ=V=6eOɑɓSW/^o+߾/oo^~m{vxW}y_knC"R31kWlFӾVVi94& a4JJhR JԭQjJJwH[z׊Kjue݊J28h6~X"qkں%BV VqiTJDT$0lQ6[R(nQ߅Bj"H$B0P5[ KKr,PT"EV#tnH[ a+5KJ(D"a*"KDBOD"ٳIJ*G4F#>Ck]Z匭ekcT-mVVu+$EJ'Fi(%Ի P-!?ԉP:J %D0:..%-񻉒b#!DB]]MD"12<.!aY!f>tD`a׻.,%g!R"0111 q0ԭqB4ĥѸ̘ qDƌKH$C"JE%bQ!V\+qJC&6RO#qbyHYH\ȸ-uBRJTjlrDb1+5xS:qհ6RJu;=z&c"קGک9:L}>8<b6^=q1ɚ:diL<#?x ϧS֎yrzdL8TZш)$Cl]Zĭ4BR-DK\ u[uk(3i\Je %NZ3AuwRa҈[҈wu [p.)1#[) AK jHcʲ4P".R%Zć:i%MTh+ HQ ^ 1N xĜXv 1IkW7Qe4kägy̦BG6h]U.?;t9]CR?K[VĥU_ SQI?{g~嗿o[J 5ލv]ǺA8$/·/C%B<~&yÁ:xr;z$OB=]c`yt=g_`#r F$|}x$.r$O5 m\~syx|~C3_ogr`o=n޵vZ]Z^ٞ.mO.!ɠS2wI uH˃$6$yGw>tۗ.e۳}WKjҳ/[Ku}:UVK)uӭ]}?vh[}0O%n[ZԧTJջRmZ(P Kr&HB(T .[)K>s(ZFע>ŠeK0.ad]$Z]jݪun4#Z^CCWb1m5-uI}8-lC1qi ]j24.w a142nq+T-m|w?H[F"aXt2FL.U !ebFjV%j0..) պa%n3޵n(F9֧IFH]*-ݭK[1k]?8v* ePB5.]˞ncܖA%n)1!2qI]ne\Z%. CDOuKƭ]]v!권Kb&])էħ%]$ [-c"4ĺK֟ .0B TҰrh ĭ.=~TGFB$Tغ4R[neX2XԾ "Ҵ.3 \u Ų>)NKr3 qI|HL\G$D 1#!S|a8<np!a%?eH8}<''_\ZNS<Oze!L;=q;8$ En9K(]<[/_/.d<~<<399H?ͯ1jOwr$S_m39 ߺߎoxxמ[}/ڮ۶g{[{rjk!ɠc|XFBȑq%l'C\TEKSQu[ R !V 1G!#"ANև,D!#cHr<]#>$z>!ËrGg?y)L~5_?3_ܾ%_9?[|e_Ӿ_Eڷߺ[}i-'gfZ5=jWk/SK{Һե5Ѻ]KuZUYjUk'Z?`Ëa2]"1&Y!Y߭t)l4]lev\w º[nA#.C0>'..{qK˸eF0XwC(rĢnQ2OqKfLZ! 20c%S53&*Sڳ rƌaQac%TZƮw.emKD֧f]ژvu *SDoەڕcܨ"/uK,`PRԱ$Љgg:fwBKK} )%b%nmՇ[ܒIZb2.aFur>z[[]-BzӖӭéq iIuDmΎ<2l[$$.Du'An<}ת2n)yVpJ|j.rx:ć%H\2RzZ,a >UQ%ز[\rH8 Ne/Ϊ?9-3fIP HD"uIb("a刌D8b㒛o9x8Oqxg<::Zu_0sqf9Vp9#yr8fz۞,m=5ևVM穥NMou M$o.Kj,Ut҆nسZj$FmK2ݕP1,q[K"fX[Gs)̑$Z)Ì$KbFua\Kݎkh=q[&ʮAY?ZA\8}9d#q[v}6.S(.3>ewfS.^ldY1tOʚݥZm[׮a䠧ϧwӟՄncwJ8~U.8q %fX?-?m g'wúcXeNqz<ݾP<|:y.q89xN"O4no?$2Gq{˷oׇx09;"yrû=puٞ=\z:dCH5ɶKتڪ AҞo% K.R&9hRa8Vq9|J6MTJm%VHťRJe2)ԭnBVT7ڢ&>0Ż uiSɢUC뒸VJ|?)뤕h}[ߩwq9O!nK|(qi$>PB!FBYXSJ2"Rjj"rƧH8H:8kO,8/}x vy{}v\fae7o䙎<U#e3].ZO[ v%+!J‹n$sڝq9p˳G.cZ+3üxS:O0<9o7/8DGuSyx7/߾i=Z3oAv;cOv9X'9-F⌷ӲIjJ/gK;6q9p5t\Χn%4PT#'UtmB]qjCb5ewqs+ոեޭݡT9I!u "a]Z*R¸,A|XRT*è[Wݒ5SN2ni 3l"晸60>3n2Q2r3gv箌<ڧꮑRtRcFXVm\;K.mVmdX<zUOc}.ȩ.V?ۛAB[!⿪Lԟ^gğJTRKD1 u+9rP]~ 񡏌&#q"o2cHzxԮszԎ:K6#L2y88:;LT$''A2Ҽ}7?=Sȋf uYбkָ,+cuS,Ru:)u铓u HRJYJiRZhHFF$N:GL$R\D"Ism$&VFӪ*H$RE$H6QJx7&uѴ&M%`RTJuZCUZDNh qwQJn!UMdDĮܮn[[).*9Wq*Ya"RabQFD0Grx3Ñc>3Ho\ۛp ;7?oo͞6v7iO\3v T 2ÌDFh.RKS)%.V!!B|["BJ$BG!B!IqVJ;T%n!ݤ$HjZ0.tW#>dmI]®HKX*CJK )q !#BP(OͥbJ\Z!".V~Qq 56AL\Z%! "1CH\RQԄ2TbinisYZ$DGc\K[$!&.7BJM&9jՄh4i0δ*~Jb*A]zL u q!~ R~J)[)uQ*sY"wRƥ,ծ*!H 6H-~HK5DǸQD"R&Ps13 ">Z .!ĔU.7!qDG<ADH1F0n!DPD qHX9\HTb(J5.a"j]1d!zCKc ih6әHF"SE2q +ť[K"!J$."D#U֞EK4)#*>MZrAG]8nf^%ikx>8\󪏜hl=C"782kF" v/Ebc#q:+s}{jИHH󩴄$nKѴӳ6-+RZ]&eitt*KզHK+aOVu Qݸl gq۹B?$eDF#!\DF$..BJRкmJ\RaIPe?)=M-:b$ ~Z][JLr<{sۭʜ=l*%tOYDF\ZHdFu;hjTYBhq.ǡuc(e]6.2&?V_է n??WO%Fg?y$nǸ~M8S!8|KĻ38/y +=R]z#/.__$nʡE۸=xD$2<<]Nle;R?U[.ݪK[uj[').C|Wߩ*)~5=]ZJXEҺ.'!UF|xwĻ?$)!T< TJBXʩuId%SIXb1s9^c57sj/恜/Kի?9x}}}g>u?zٳoniη)?z;uuj]ڪ]]]]{jK˩Uj]Z(W.-UFqj]w5~qPc=%,XC5և]mFkO:][{8W%ԧUuf\$~5~ָ$HJ,C0EKeH\z%㠔=̃i$uh}P6V֥ÌĭT1;u;'հ~Z h]U$1 ueBj[L[REEѺ%qKCSխߕ~Þi"uiwӺEB q0)˪[P u[j|""LJ]>h\Z*͌%q!~2J|PUf^\9-s!q.u.SJvMt9\ZM\2naiԭ>$>n0[6ѺnRaqɺdt}x&ƹ.â&ee8y mΥYuvI\H\%$%D{xxI\@qx$bG#Nrj}<_gļJlG<9N//^^K|_q|ov͗ݞyr|vO;yToNal/ۛKWdn-fO֤COԪOg]2>KFlK+4Se]Z3Z{ħYJևaɸLF\]BY"n3.\$[DHK,SI2m`EVbŻ]Vw7d-3nú,}s8C!]9<<O]/<׌'=}H]Χ׭I]|)Vk#n܎lwxeu>dA\J;upNN e]v\2v)'JPGJW uu96ZOnw89|]>URNxw"SNqxY|㑼Oі}Ӈ}=SO G|8P|+:8/s.L!VGrY/=vӓgٞ֩.AH-TԻuwVOdX2D>P[GT/6RNNNC\mJUijhh#MTCUݢO`}WR.[,>4>'u[BVUFJJRM#xWD+ho=Ih)Zև%a[HdOKBѕiWF!EbGaƬ]~rԑz=ó0<_t/~8{ݓۛ=>uiyjc5J#~H쬍K8[\B6ZChvHջú~UߍjLnӲ>5Cd phK"jt[]6teu܊9ڑ͎2v%R%Ӹ)-%>j)aDCPe8?lQw%ò%aXӭaؒT¹fX.mNU.ŴXĻPBv";E .'S+nVԯ)1¦atI%S[Rቸn~XJa%nqkFV)6-&u-Rz]G$S ְn)>ոTVĢ.K*!Th0\jC DZ4->U߅GuKmm\`KF%l #+'q/R9=bz~=kqzz|uѧ333m,֗Lo} lc}8XJ;+l0%6eYޭ, OsMLuxse><0ncw_\K-o[5RveQ[ef0`c3*dEMmC0.]KP~6Ou9|:`XC=)wO/=/J$]eXe ZƧa_-ðeލYד!9N ûG-y摧䁓xZOFp>~%K j篾z(#OϢov>}}zxw}$-I~u(Vi] %nAwlʸtF|8Y[;JbR)&uF#2DcQ<TrpiO99\D7~-<ܞ>]~x˫g7sӞ_ߝo.n|zwkmCה2TgIVl2V+UTݲJ궎TR+n%-z!Zq9BYƇqK+ne乌KB1lsL謝1IKZ?ZfMĶn+ĭnC}SɈ.7vIlaPⶈPʨt;>-,TQ J\,a}*C].ò>41nC3j]|JCĭƈ06J$>hR%7E4nXd*֚qYcBƭ+q)']EjCB'Ub>D(&Z[>է).3q[VQ?Y?梾*&A-uʹDR% 6q9O b8}裞<,jN3]Zdi"v[bFcCk]SJbç!ĥ5>52NԸ7 KFrR[}w{*Cbǰ8\ZVƥR+n9-tQNn oX3.bP=$D)*qIK(A7yL,"T޼&]}hM}'ޜ/r^#d\I/?eۋ=ط.vt<^mdw[^8Nsd$'mh4Z*AQRuɰOuӌ[K*a+VEĥEPTFEm⒦uYN >֔Oъ*g6h:.Ӻ YJz]-Z]Cׇe$㟋Xk?o:_wKh|Z6njO)݊ n'^$^ [A|xS<~Gq!yy0۷ԥԭn~B[|ʅI"a$Gğldl֞l[VK˞R-i7uAC]R]ߵ.ui wqxW?"m\ӺջM)֥~T_O46Px7DAde S$q+Z9d<wJNDLd$n22px5y/_/˯ߑ<<mnP֭>OV0ލ'MPc+Ln(ӌӮTˬ%N)m3=9뜭̖XRC[ߌ63SVu !۸Ÿ̸ElS|ae2h0ø.qk2$̸3}J1Iq[&RkyKeV݂C53hy2Ukl֟%R$>[ 㒐 P=u`VRu.a%!ԧ]֎ۺa2zW&nu˄KݧrBl%)+h⛌,c׮KɸUCW]RO%2ºY[D2d!l'VBD0u1q)JӥdLL,n3n0y4.C1~U&.'CdXby][jhYߤƄHbq+5lwuqy2鲜O*zwZ sA]# g.Q1>u}Dw뒸-%(#$DHʰP˹ O"ϸXk3x;vTƥ{aQd}hkC0mk%[v=ÃUuf;}h}:'N8髺f)6b]2Ӈէćտo_'+]Կ+;&_ֿk1GnXw2.S@8yppWGÑx<~!p<#GBO+ǣ`nOo2~^q鲼JbL>}^}z_~u9ߺO=9:mͮ.E[9vTkVmWZÞZ,UԥPʠ}QGS%k8e[uimZL'i;}s9uٮKMu ~ȸ5.`h]!~Vq֏3,RqKRrD\zj}%?Z3C*[\f C2.!fԧp2DqE3.Au1n-hlmHDuݶZwuEӭRtƥjJJBD|2).U#Km׏ZmYFu].UnatBxMG|mQ=Lm.q1Zĥ0~+A 1OQ&VA[MJ݆uٰC]\]Oqɺ[$˰5UAGO,[],|U[<JXE} Oe(ubR[jK(*qx xƧⒸE[2!nx 8F"!H`ë˰<^mH;BuHx2Y'H qie'zVۗy̯xLLf'3y<,OO=9O=xlYwiƮiJӶZ]e%QM*-XdkWEO[n۰:rrPz:CwA}RPaQLt(""B kԻqRK+"a]R%lXj]!▓L$ˮfKQ˹nu O۰cS2Ɩv0s[UfY,Zs}XvM]Zߜ>.r>L(6z.DqS_[/o=/UB %[?eXeeXvrԕnCgM99r:ۃu><87.tH\OO䁇O=ڧ_lOO!=~u5n㏞1Ǘ_lJ#n7xexۑ&<ܲ<ַٞ/}/>dڰǓR[O !p~鳺-8ug[J\wm]&$H\NI71ndۡR}>sTEVI*ZTXuK>WU?+a'aдER֧T>E|W'Z?m]WUofB)$VP]&uIŭnQc׆e캴.g#Y( qTΈ eI8=߼TMy5Ogo9 |9|th}"7/=.oϾb8zťV"qv2c|zCéX.u;;bR6lâ.3,k&vĭά e8*fvbiL2QU3 :\*UHmYFMin !%,ՒY߅JNZAnq6TJ1%t-%i|5KI)ҸMI֌SK=߄>ջ9| ͆*N!Q23M\KD21ˁֻӻB<+cꄺl-L%25֭iF8tVu۸ ã.ĭՎPֻDRⒸt]Z-.[FK\ߜ8u겧>̡T92.\gC]κ upD%ލ]:8O]&>UrD[B=I\u˺%[\BP3.ۊyG$ʗz6i`Xys=>ONj_<~1#E#j}_~8Y'x=='OO~ۗ86/YzcJ>P1MoJUZN.0qYq+K%eݪqDòno.]ꛒɬ2RÆպtm(eeժw%T\2QTK؊[+ 'A-x%9 Jw[DQq;Yg]T..qs=c#X*Q@1]Ov#3Ocgu>xw33'3hlI2ThO불7g@}8=Yˌ oRħ/#`?3+'ոI?a\@Np)<\'.O/<˯nm!I{<ݓӻ/j:w_hǁ#yyx<<}"W-摿e^ߒS^zgE.i~㫊nVC}2޵˺O-۞uKBzWe;(1.YF\p$a$q|}m!YmO=ۓmnԭR[MiUKuk]Z>U*uKQѳX[Ak2!n]6`}hP޵5q)Nծ3.{0C*~n"%96HPv+qO A2b$q qL22#.&KV^%r0Ia/E5ǫ92_3on_:>>X_N0O_ڧ=u;uT#,Ƭz'GH-Pa 6uq֞xû}Rm)upqA-lZ#/!A[Mʙui܎2r t RfvՇzaێʊ hIgm-C=Hֻlqݰ>$%akexO[rUtxӻe2㒵lĔu9mr>)q[ZuM]FO`mwbrbbLt-KBI$n%6.à9,!#G!Ɍ]qJbONsOO"_WU"8x|o^~svy>.SӁPjԳNOmQUmm.YBH2G ЈK‘Lp"1wۖղ.oeۓmO֞lVCݪrV}ԛRSC}rzW-eY.RT-nIVoN?Ļ0(Z_fCIbQ KEmeJ$$8nAeM B|a6rȑJIJ=u|ڧɡ:T{vI5.˳KW+q驥.-eԛjzSVC?VfӠ>,ٸLK:wY9BaEOh]׊vrlaAuwYK#Z[Hu}&.KPƻ _[̈́1m]fލ7)>,1È[ƥaPĮ!]Cdlیw[9x.{:۩u;֭.mm0R qII$*˶K։nUoC f֭"GէOzSf2REof*̺4~RpuB( waAdrUwI\B7"nǐI=)ƻK2˸좂K])˸N,>]%-֛C|ni[%}J[OZVK}RdX*t97[mOaOPKkKuYvNCbƮ%ƥ%}A8VKBYV2>H 嘇\\]OºGd,&_\^Wl𺾆/.>LnK΃קY yǗ9ه/yr~9$ϯM&x+z>gӮpKxju{<,k_x֥OvSΚjj+]mSFVe>ZzRRgٶV[SCnjֻ"Ps)nUJ V"[+>! u M2.&T+1,A1&qpҺ&I{Ru2ֻKdz<\IQH\KK k*y>q`כէeͤu]1JfZtϓ4L<躝hOn,a٪:KwK?t]Vyq,)q۸mK\f*m9P݌,ۺ$^#(%$׿-> ~D{t|myԵO竮zv(_֞ٵṬʬ [#.-j%TTmeFPp-.OqOk--`eX̺t:2q[F^OQd{LOJ%]S,堄3%.[u9j ]-1n]%uI/muoƧPԻiv e˸j\lXD)a2.cbJ%,.qDih1.IicSLHzf-ZƻҲIPzSoֻȲ-%>O>T6.OH4A˹q JŲh.KYԦ.npXBi"-q[[wHwa%>( In&ʚP'vIpD܆yɸ2^R9]0nZ<[]m}H,ÄuʺO2$.]ƺq{ե.E>fⶆCb*Ĕjg#."Dذ.H\[3.[DK]R9~][CĻe}X/Cu2vq3ѣ̓gV2ዃg]73.%p8N)u=i> `Hyȃaʡq9O=};~Wo syf#Nvڴu<!pDWey6qQMNMuI em2ԥt}ZRQfz7B("Mu56T8K}. m-VI{.j"RFRT|()q+gebg|HK:>GuuF]T8|(F#$R>1.KĄܘ'IG֣gwڲquY҉]Ϛظ 2tYCݖ))],'`ǥۺr~6(6z.?R_A___?W"~'O'[-~v-yqmq&ӛrz|pz<_=) O<x|!/ox<[յksTR?TjR,d* n}2% MkOEG]ty>ɺTtit|*"%u IJmq7ah0ߕ!Zq V.<[}2C1Bƻy.nA|(q)C|aoF|-m~HmUV2UCՇĊ غ$v}ŭ(uݢZhiuVP2nWqImIƻFԥ5.)K]Mir.nn(?Wu9娎_̺b,H*eoUƯrP?˖o"[R73I]Vh]Ƨaj K[\ԇu[C c׺f`t(KkOᒧu9~1VE֎%a.ta]ZLZfa [u[})CDCXh|bQV*n!D".yx%qI$Çm%-x|5/Njٯuew :C]%u,u[ƥnwRV~6q;FYеuR N?;}/_[/t%>'W-ðCg O?89,ہCN{Cvr=8=yxs</O}_WZ2.mOO<8}xzm#+?kuOև?\ju9dP6.]U]ϲTɹ2-iz$ūTV"V]8J.XHW)2>7եKu>,RTdۥT K*T_DM6hq ]C[KYizZ*+>TׇX&ԧ'EŇu Շ4ںm(LFK$JJL ~7.ބS#nuEItFp2i&s $c%pznѳߟ_˞ўDW7]''z}ڧ=tLԻDpNg[kJW<ZiQRbĞӣZg}Z~e [eMF|`ViQ+̩)EL-lCXɰn;2Hteܖ0nZe+P ˸,V+cC[FJu+q e Xƥ>_YfƮ2n% e[ UoBΐq)k[[udcY3֛B6tAܪZeD!Sj<3j֐q)Z6t$ޅŰJh]BP]]j֥C?6Z/.;l`]Ke)1Ʈ㠦6,CiA+[wIěj&H"(fV֠.%.K\vDֈD,Hq9`]J kc2[\2Pfm J|Z7Γ0wqYrûVK\B= P]!quk.kznneJ(fYa}ZߍԬ 'U9]2.:4MAӮaOvX}:x&_q&^Kx`<=G<]q|=Yq#ovw>=M,S<]tRc&kǤc,Av]nd [[.%LnsQհnu)A..8}*aY.>llKߊ?;}]ŧ//?MOu?[a,i'˰-SNApS8!Nʓ'yr8Qޔz>|yg[|c'AK2u)S6zre'AxKjMGMå/ql)z>h]Nmm\ƭnKvO!rYAtJՇ$"Aꖸn$GɉC7{p,Gbe1ϭ 5_D=z.W037?/>ePGuQ7A)M1*U4JPՏZDh.[iBTD%QESOM]'֧VW`KT"!-V6 K>T[!MR(G!##fs Vgy؇t8gwWiWW}j#{rK.)%Ch5:rDS]"h]%]gaO%Dam܊l;fe.ˌݱkP-('Ymtغbf]jPçu+z)-^![Kɚ-n!nnBšq)۪o2ebeǠ?:.!UXFYj|*륥~$&TWP,#DRJ(qZfK̸2u[/u)3Z/C UV[݊te(KLܖgƏmPwJKDj2 .9픤C-qv(E 5!U/o%>#zY]Ҏ2Xɺ 1Ei->Ō[}uka#LZƭG<a#q+ax2^d욧[}WTx+5+i}o˸խD}[. Oq;'ðx){zoe(q[zYo2s}X+a,'5!Kғ%--m\ևz?uKu*յ$K"_"Χ4G5{>M_yD"Gvy~{>=~__/eqNo332ڿ]?,O9uoO|a#t>uyXJXkURR:ZV2nŪn%5tZJB|DJ؞thXCm^R:)T"luT%%$AE9q GY(V(eHOEe ,+2n!fԺk0nO 56]tD֬A ˓ui)nº-qյnߕMe{ChYrEOĿbo_׿ߍu)>կ5iόۊ.ppH܂C8AUT$^Z&qYoAO0ꭾ1cJ&#no1">ef|7K/R4f[]6./1.qr-,ebjokƞ.!2cuYu5\j=hzRg [8wKK}^Z3n%nkmq+LJn%u匟%q-T8}EԳ,1cՇ$J"Kꥄ]oH} fQR cuKb7"qI̸eMnA-quIb3!TlEddu1>BQo.ᭆue$W'պU$e'Kmm,VnMt[]ET%.E\/ƟDKe%!K8b# rp8D⒑p8|`בaȚ/2/qy{<.kf좞zͮ/uMs\VvO՛VO=5jUhumv'aX JV\J-*Kl\Roa%۪%ĸM'q "KXDLldć 2>jCˌ9Qq vOú<]vPvg*u˸eꊎs1xr˖m ;hNB,j,ҵ -,eӟ8ևt9ʺ˺J|8}wz *>jۿ㏇?[KsXe-XÏ$z>%<J<O#~ɣʉx|>|y=Zʃ}m$yz=Ç[c,OSu{j9\2VG'p=56ۓtۓAw]uPե^>Q;EI]o夬RS[<񣌷R⻮ M0>=ܖե'G]ʓ:[hbZ$4}6UԭSC*T)ZujY >TKP?_-VVndqQ[>$^j|MB\B|*=I[k-z;⥚pYT*H*Iۨ`ͱq:GOt'OS쮮Szyuya2R)iweijZ2.mYnu7U[uJ܆2.q kC)٬5e֮]c"`͸<u 24kfK5KeJD*.-2qYJ~PKF}]?]qzu?ژ)֥q2jnqSc5K#nu9kLKYs꒸E-wAďz.Ēxn2vq]u[3H}ԧŸu UPq AZ[U֬[\U5DD|2Vz+OuMm/ZRb\2quK582SCI}Q&-$>-u[!0>e}Poպ-O_oƥNo3Pz a1Ĭ (YKCIzɨehKIq2>m2[Sl)D+1DjkQCepk?bٵQKl<ݎRo!+t;N_̘97q_oq}tv3gz2C}7nKKhJe5 M]v%PYŬåOK[/S2Q-,[K+ui%вZ[RVc&^Tqm(qoNo]|Z<]/ CEyԥ]qYːgZeciJGOY.O31qY#z0i0YveCVnԵ z;jxIa'ϭX?U_U?Zo׿տ_O?yO0... '[|#p7N"p{oDN݃cx8t;Hx<\HDp<%0Oo/[[Zo%Jd8|ײnyġ߉+_l%qi%.-EեKi>$.AUdiuKm2[$$!8NSI4n۞zlnC2.m.$mڶ렾{Fm]RnղZIUGu).KP['OU} VCY/prq -. "Dք/H\ ؑG ddr1HF<2d䋄2r>#d2L/r˞zv~zXmWמӥeyht>Z/eO_O>:jV^Zr*Ju]Z$n6.znUSE\5~pHEYK2czғݞhOR#v1.(qu7QâaV..A'[˸%K\[*n!.iBA~QuiG166>mx9[<elL\u[oî%,#_euuij|SJҺ$KQ]mZ.a-z>K|<$nq[4nӮeSO%K\/OC\?IX02#IŒqk%Y3cF#._3Gy~_:2/x<|{rۮi|륧Fv.T7Vkmz>ћ֮%uV[REuNJխunNmhlYE]-RCV+QoRR/ uI A$^2n7)ch\ aK/O?Xu%v>ƥ;/Rs{nC2|&.351®-]5T]ZJhV^Z/nhH[ qIv^|3"!D$DB|L22$cH<$Ε!CF9d1_V&r쮞.izЮm]z.oSמԥZ]]E~t<]VVK]ZRE$ʞo6nq 6 k^Fejt,jYڦ.mVC}̮)v2.b㻶.aXD/ia|7n[|7(-ʸ2n֥fإb+R5.'UPR Yߥ:>ŸeXM)q)B$=˰m]V\u%>ԭ.u-u +a0$oKCKDįBEA[I">I NA,֥c-.z[z #C\,'QK4*8\u.[;Z XRUa}/~a⛺[O .iK?JX3. elŗ/rG4Gl\qV"n.Km2Kw3x1|8x\ZVjJvWu6mSڬj&ӥu)-UW:9j)\YEN[kIkT+Qje\Ui}oz)KADtK%KRY3;G%'u[eu[OzIXfYߴn;Xj&x See*YƸ)eecƲԇbf>lm%e7)nڪ[F׏ևKrzqnu1(˸,u ]VoOO?/mgƿ&!~?˱%%ronD-n6Op'x|q q;xx×$ HOyzyATۃOmv 9KEO%UD$ZT]hxxkkOZJ%qi]TխZU-뭄dĸ$ħM'C$1>&۞lgOJ/,objkuOnEե f޲8,1> KYju'~op$Y-飵hTjKUQhkY-oRKTP-/h*q!nɸ$"RR x"A$ޖHH2"#<29&D$!y%G~;̗̠z{گ.Yٮ=uյ.<3Qկ<<ۮ$sHSqSSW[('?tZ6דjmMK2\'U?X,Kº 1$li%^9fTQҰ RraO.Pb躍!>^ʔxC-mćx(">d|C`\6[*n3^Z4ftJqI2qYЬKG[cFm.hҥ [تo캴Tnե.۩ުJ[FP1Ӹ6.K-,5cP* K\⛥[khPR]n[b!m +bdimLCX&)g.x{3KYn(]edk<$2q 'uaqy.%2%uE$.xXb]eq^fĞⶌCe">z i^̨on|o .e %quI8_d ‘d<2!vfFyJ2&XG$]'}:H<>sz99y|ur8\0u8lukک~Įa+]VhwZg۵ej:vWڧF:k8kץ5uigV*m,.q[m8KNPh eX)ɄxIqQeƏNT$a5uh"FmP껖yZqYewGVW%Zmu}X2Ra,1Uu9cֹ)XPب+VaB]J]G/NbVmn_8}wz[Smj7xo,ð2'JV0n_QNгwn'O<Χ˳<V ɣdT%% JK)qiƭ'%)AoU*jH}ϧ-~a ?&ڌ.]]|eK„vӇs˰?)r`9SzjzꚥkVI)KWOS;,KYFn.㛸,E}SjKf刷nrqK:tc&gQZ-ate.6 ˺eR2>KwE-j:MRJVonU %BY5/JmjÚXاˌ.˸f]:c(YEl\ 2eҡC$ՑXˬV6T(rPO--a[jnuڕHu0zJ*[܂z M$ʖBoN +ePJ<ݎC"/ԭ[:*IR!R[+n6aBbB|Z-na>I˜u1kƖZnÿ\a5êpڰú$Jz[u) uYYoD-%]ߕxh%0禮.[ieC]nK(e7P,q+ŏz %%,#L$^v$.gtkeN95y0}LCOs.q֗WHt{>}"qrt,Cte,Kܒe Înk.3.5X!]ҕ1uR!6x ƭ2Ll]J C7N8t)˸[eO[^~5r?6O1ĸ4'''=?qկv`X$~_$>X߽=ܞ~z!g'r:IMB"/_~sS:=6U/nuKV ph]P%E.]T}QTCUOJnu4/K%!^ΕS}VYT}Wu[(%TR/J9zkUUD|rPղZZ5~/S]-UTiduK|>KKhwuUM\NI $A-=}qIB$H%K\2$ .;i#8Rߔ(q[և SS֥UK}Rԧq FWܚmºlmcºV#1QK}S®ˢf\2HSlZ?he0񫕡[wUU E (P%ԇqFf|[߬lƏƒi[]/]qCPemX"=]պj|A<׭.KQSa$.sUԺԭ~K]u{2'OO=OM]I2^&ZVejVe%pȗ Jq0Cĭ*%~$>Dm=|%$eH4F*fvwP+V`XKXZd5dm3~֮Qlf,Öz[eZeRvxK-O24^e\vuijoNz8'Vf)m,u ]_黓ĭ^mdo4O1~5_su m'ሗ%7TA/gϺ<<2!A"@Og{>RaAUK'FRZJ9B$ ZZvPUD$nqꛈ[K[Kԭn!.ĹDC$[[uۧnR]Z?z+%nz+M[S]TQEQuZԥ[ե]k%l*m-mQ A]J%K]J-nxI$M$H\b"qA"VB$"1edrILr#0Gr72<(.Xg֏^Z]%CKյj۩kEti֥*`RKd/E$,q omƇ.6Kn=Yg(ʺR{FOq)eًoKbm ]?!ꭌ%.IƏmkOCnu3n'k53^&[]ևu9%!n/Ȱ.E%fRԇzO#u0ť~ C]2[ԥnK.5ԭRZAQ[i/(/K|-˸2cb ?(ej)j K\Z?;U~ReP/PrQ/Eĥoz˄qK}act!C*>Da U06v&f i\u(ղn/㛈\V S?J|u[zJ\Zz~nK}W,u[Ym|qٵnbا_x?\`ˁ4r8THr^!8dxpKwqzI\f~S<'}8O3^O]>X_:I~=6mk׌?Z].nj^gyjJ`zSYvd]Z.ӮK벥ZDUZz g+n[B]v0l[U"4'A|o[+e\DQMcc )IZf߄ubF%>l:ne==}X2l12eXkR2^֭kQE+eƇ.֥X˒񶖮KbaOV?zr:AYqY.(w').~2GoښX?YmXn_[_ZƟX۴Ce9prh%v=8t;8xߪ#_u<<ߝ<|-__S.<}Iqԣe\o?*tiY*=*H bu'ˠꥥTKPMDS\BjJBKTQM^!. q9OT?:9RK&uKzR]K$>ĭᛈ[}onR]K\RK3ԥnP~-4QUPB(m'_KVJ./q eݢIUxYui$U#bY%2lMmĭD%C\J\ZREeu^xI}y՗yt틷׮_Ra.2<='ᔸn$ t)ex| AtYaL[VNBKɰK#Jqa`K-c֩u9YtP;T2 a}XevXfgXFmJPˢ.95.x"^2Xq,23^fo֭^2.uݰv]fZ[99\2.^/l]&V#26nXk2.QTZjj٪[}WK\R [D%~Ru˸-f\ʹDJSTP0qN/.Ea}S2.Px[ˆ˪)`KK(eQEen1>ԇhՇqx[!>reۺ'cߕK [??-nxI2RŲB?qIm",.aY&.0nq[bĭȊ[B?QΚxYoajRD2nrQm[`Ddn}88$q9+';XkȺD|VPFui̦ov֧*8Ƙ-nAvm*39T͌[ć%Fiiݞ66ÈAjmćz֥ck,8PEI(]q[;n\0qY۬Evpӟ8Fu/u ]_s').~SlM,6?bXƧϖqV''I888}:yng:OMn-gy>xx{<|Я͗?xC<> = P귶ӭnuzR#=M0nҧ[tŧF>[KBSUT#KOHէ*RIIKˢJn񩾛$ĥu%q6zq9-'SESJ.q-%2.%UPP?. ui--u :")Q;Uĭe$R'%(DɉJ0C$BJgicۉ/ԭ5r22<]m틮˒on_8"Sjyx;p|J\7{p%a 0VoUj1?Y+R]j,uYZbui]1R~ԥ%R-ubƮO%ld=5Ne)q[RE9vzdGʰ.N<%Zƥe|e܆uj4.z*hp%K-q`O%u[Y1ʰv]f\JXT[cŎxJ9]z0.o˺iպ8*pPiIC+q ]!.uJ-u FPZaYTħme "Ց*f|>dKewe-16~QjJ\R",ejW!BCƭ*q&֟H%.ɰʮa\Zzj\FeOYƻ]SB|v)Mݲ]Ѣ[/K[6-]=$mؓ4n*- u2E⥑R%>->OCCݢuY?XeC\&H> q=}"nnX&bP z^ĭe˺ ;cJ!NQtDSk9Os8Np6_x8wM~o/߾vǷt|~w7oڞ~s֌/uoR[9ote|35VunUmZoV%5.}i'#KWcVJE]¬VR֔P'Y[pDUNuJG|8.FP%#nT{.Q.RjV0> q;Knnjol%tiwe1[]'N\ӟxm<[dLl}( Shja˿o?eόpr~6l%-_@7?ypTS#GGrUQEDB[ԥ!!ĭ^.pD\O-z:Og$D&U]Z]VKNP-J⥔zr^J/.RO=;(աTKTեRvJu[?m<Ֆ2I[ ]d&dq 5nqqi$~0%,q /1#ݸDB\C!y$-^]b.3fJqD2mJ(J".3.)ԭi(5[w˺NTʞ.Ee]x*Z.JTX?Y˰ԸU"K(V֌O+{̸wѵ)%iJɱ=bm;.e[ x2z&ِU|HX¸$.2s5.ޭt)xnvq i`(XexZ/e݆-XZm >Ek<)qi]4~![Y6-쩥]B.o^rerQcmS5XY-E=2~RԏƧ)[ⒸS"5c b-a qH"oq3yxy1# o/9~˩}ǿ/[|r>c׻:7ao7a0=7)Upo.-.i.g]ZoooEzjFr݆-Qvu=bƥLz bOOq2N/-JzPOm8ۙ]/C-uMĭAR"K<[܊vXo]uˌ}k:eFzx]֤KYO9z y7nK+e,qnq[fZ~U߽So>Ng)2KƏJI݂x__o?of/0K 8׺ 'rP=Np;8EG$<"/><uP]۞Dۛ:TeXG}C7[d"jYm ۸ŭnI$>UC,[/V/V%[ԥD|H"gURӧ^(u[O'KrԩJVeR-.UKкTQ-VuOUam=Oƻi+uKćz)q.#nJhi-l\-ĻE/qmY"C$ $_d!#_q￳zGH<]{zz<<}s9]~QA2^ZSa=ZZ}ZK|hj9YCtŭ^:T-'>xjrwq,evTZz1eO3feTbܪX/qŭ^\/u˸xV21㻙qeޭeFmۮ4'G3ve)>%ZưJk`(!q -$nCۺ_ewRLUmw7Cee"]B2z qN҄bkN/!CdmzexWO<4.O^v F1v"H3q[Dw#.g]هﲊظ2A\vMb,J\fltL4Z& 1#,nxn%>~K5~4 Y,PְkCOaW֭.[jjkVKYaˎ[]®`q ]rZ3 eui_}sim&[z]-j֭8Q#U]Z՛yR[U]KiWE֮в2n]RY%Þh=ѺU"%ԻvuLi"9\=M-,OiqqI$.A\2.Iwwas}Zf2U2qY۳,+lO/;&qzxYlss<\N?Xݸw}[2nam8ӏNO'2nKR-t]2~TN޼ĻS_wo?aWL?1n?^(!22 !)Ƨ-ǑFP_9^Oy88\rAH!!S8nUOV{CxqrxI_(aӗ. CA["FR*vp ʸխZOKKKۡxr-ԭI=.D|HF6U-խu>^ӻ՘:Oj}ASK=M9QղoV)TBQu)Fu'uiKQڪOE,][w*Ij̸u[K[L A\qɺû$%qHȅHd$v2|Mx_$#kK@6.O](oåj.]"_<[QKvOT.7-vRjNEse[u⤊>O' Cwq88}h βԥKj)qn%qsPVaj]F-Ͱnk.2^!dF$RmlQTzZS]A|WK"í%껸E_H]UoߕevSFĻJBV/P[ʰT+1~x?S%Zq%.#*~35xí'1U6fXOazE]&eءna]SXeaWDX?ɛˌD0%ޅvdOղZ&-ea.q鲞O>LU.KN[q[-(bː"̰ ǗCjA2J<6qe.%f2#q|qQoo_ۛLoo.N3}~;y{}k<nז*n=c]>|;]ZhmڲĞvstKR{:UtTWrr[VjQ&NKʹĮzSZߕx HѳL(ۦwI\wRֻvկv%@BB..[=.륃a]>TںUu]˺[k۹V׎eHe׌K[2w]eXo]cׇz 5lԇwӟx9tv]2>-nA$nW/ÿ2gr)!8K|uZ~zpnH8p-'/!_|uiJ{|V_.IP'+0-Or-1SۥDb][ިS%QWv)ui]B|!ԲRҋ[}?RUZZRV{[wTٞn.-u+UUT.~1nuYtԟLĻAKKK_E|x. >%[$q8BEBdd!G02Iħq{^\Z]-u{:>t=e/zۛQ]]]ƮV:O֧R˞4.z)[S6>7FxJ|Z Kkfy"RR/ۚ6.tѲ>,껩ƻE+K%nՖ .⟈S%n4.ib㏆K$.2b<aQ0.3j˲rRďf}i$A$/zj]vRDק2nQJ׭TG-U,3uiĻqiGTd+TƇlL[̌DRmⲨDŏx/Kb`m$dԯ:[&2 C=,/Kqĸ02.AduYխObY0ce}oY".A|ZUk6n+4qٺeY?z#5u_e)O[궬?J=[FR? bb˸q9uf$!×/$]Cb8^Nrx%_kƥuۺzqz߾p%W?9_rrh"<"_x#q+)%Х:EKT]_%߽u<[GU%9gdq+P.-zJxxYO?Txj(v)u)EF$KunzjJ酺ֺ֧.-*zOzזեu+R/TVR!eF|[$nqćKqK/a]6[$&$"#C12[2$vvA%!.Y]7SK/Z}ZEv!q{7/jYS1Zhꛢn.3.KÞzK2C=uħu Bzp4nusPe2㲞(V,VR/ˈ+˺w[#S+~DU#K5nPøx "h`4GK7 .-3֖KjI$nÌ A<%DXO^Z==,ZRî[_zYv)ET/w^VBw~OTu[.3CY-PV,LZZ]xnumkQ#u C2 ӻ_ òrxJ KK- 0,?RĻt번˸uYA쪟4na"> q9ظ7TVl$[̰Y{z2>=xv#;Ds%6u?iY*7O.BYcT.ݥ-Q˲ ޅT71dQ_%.erH,e<嘷FnvqKMrrynNn񶬷ZV8Z5.oZ-պM=gZ=OoKkbәj-)UTnޭҮl]Z֌VQxhjʹjZթ0c cJt̰=1PxzW[cTEkX AK<-Ζrx9GOSO 2d%T[,KT]flm,uZ!AaZFƇa*c[ 5cYBa Q_[=-*, K=eb[3V]Zʩ jh/bP-[djUT#^FH\!fկ sh멶P.wҙXB jů%:%ZׂQVl&~:>آ^ZP[ջE)ut(q q Ka1KOSŇ',RxjDS *Q4T[5rZR;qĊ%>p|ڢ.MFFzH QJeiPe1.,OkeƲyXa\PqYuYS%>[ey- "L 2ˇzY.Ÿ,/ˌ5,˜.xjl6,SuL0.>SBӰiO!eŌu2.11,C0mbߒ7癉.#o8mK!qNrܜ՚.?7[ގ:,:O{%d֖ihV齪.!,.NTZ TTK<9XDKKԥiQ%Qrt!0u -a9PUb+ixZ>S0>JݼL,x.Ōe:~f{(r2CmTƶNzYX>Ə_\,?l,bOKÍwŶ$b oC<O /t8=,y=nr{sMq0Z[{iRUԥ=ƹzZdy8%"qi=T9;-x)Ixc%ibO0^J^C=uxK[Tmﵨb8VzKR[-⥨wUTk+Smz.-hmuYUKG1~^zГS\B$R-^C<ħ$)^"!.! !bFCuKy[,o?=zzYycIdyhĥ7[.UpiV% zТ-wFZj9]Z[]Zb+PتZ^/%.OD!.CuKcPay4aZޥ>UQ1jˊBB]&Y.-f!X:,).~!P[OB-.D[l/+KK]ć5.z]r2OeEaPZk1mPK}Q/Xq~>!,x:CqX0 o$2#9cnv؎ےnp%99O5.-jpTo]{v8Okq8mgZ7ӡj5K=vˏnu< BPƶ\rX7[lb8x7a$̸.3.C!ӰcRSwNnV3C.d}Xn[1^Z̲V֢H}%#2$KxKnoK-8d88)_q[̛]pw~SF<ߴ]K_wu׿E岖V{.z[]fyw,'s-k)=ۘZVr+]1CZ̙h HMPwHvJeJщy6=ER餭$uT0ȱh60:r9K%x9}'Ų\..a0ĥ8\JUݕewKb4.Щ!iUjŢ~|Qe2xQlֲKK<-eeXi˧Ɵ?=a'~e1◖G89lAlqNo.8=%Z 7/7)t8L,r/mj=ڻ.],ZuTKKJuXwUz-N@Q".dĒ/uT2VJKb+^B%BlR{jZOVCiB=TR-K.-UkV/KKm{_;UP,)> ؊ObqYލ-.b &-"!HBdJB3r9g,YDvxʍX7Y[TǥuiĥݴnղtZ[]ZM"%ݻAեu9%.t4:޵Ej]Z/-Pԧez,+>jԥb Q"VK,(Uj<^۲qmy(Q/OR>,O[$B-/++YZ.%]ָde 1,Y(j[޵rYxHz:;YB}g-[rv>xY>W6B 7OuKږ0~0lC²eԌOZWOc!^b֧aq j-j(j1,,1epp)ZKx_%el!n1X.Cbx{sˁC8 7E&1q2ۛs/qÝ[WN7_߸޵eF{XK=ggi_Zu.ߎzr&=67qEVጣNhfC2tjNSh´$u.6ize+KM+.rVkYM[Vbp&V-"ҋK=,OO+bD|ZilE]btq baĶbmDĻR鬡.#Gldt)sb,".X.ò%tut{ xDlKl LmC}'Yswo>~"6Rƶt-4^KO͟-L_Y__+s_;Yo6>yt)NeN]m7vΛKB<'o"m7vnwNG<KV-h,YsfQNE<JKdBl[ħj [m!^w"x[~T[J%~dzOJ| (꥾S?1>gĪA%~FSCD %~&-"ADBv#[X̺GBClSv˛RoX]|hĝץtttXͥ-ۍjeQz:#'Chk(C8Y-U;N}(ӢP/cb,/cn)UOJl \2ԇ9G(kiOv),b|Q[\C%X]=T۸$zD<ĔeB\pP/Tbcx%V[kWA>VN$E|dyYZeWkl.+[K,/XK}'^JOvB|S%LS0K*CC)%kIU.^2PKJ<).c[VKxX-qO3[,_mY̲ek/%ZKk1c0, 92Re{K;K-jXVkVmR.fRS*b%1,e;,ra("yT֍-;~;~oi~si\Zݎ.]fU:^*NyrrzYkzWζSN[öJQ5hǥ.]Q1:Ԓ.SPJ e5b밂DKbեuI|CB(Zʝj-wbKK)rP/^V)V)պ,V*"bZN^Zx*S%ԧN}ږz?TKOqIlqI۰cbK ! "Gr,"D"G"VSKY[<%~[\zhĥZv|V.K9NjBT}JZջK*N8}gSQzuN9$flelUUg]ёzYf<%VSxKC}ю-T/ŇqIrh=S))%CN eYK-V?|X!~~g,?{$ueRױHT+n{];ό]Q,f%.B$D3eŸ4꡵7- .%9{9IWE멞T[TaU]W1h)2UuW[mP'U}#⣪K]z7j+g%$?Y-"- [$ !9r"KBB^"v /?,Y"^l7ZmKKm,K/CuTQpw?U]n7獪VkXũ^q)*]lC=E3T(lrKxSa겔B[RO񍸫a!C% !-qEm۲{q9-'.Beuۊږ eMezS*.q +,]̸gAQuYZci1یhQoZ]IP-aŸ.FxXL=r,!1EYZ۲Ex%֋s8;Y\bWOu=]'/TmAlwqY/&%j+a̘xXKFǶqYL=.k[< b 55J1xX܆f|uzXIlޭdYe$ƖȰ49q8H~G8p8G[H?B尪akZ:uiq]~}vZuyVfܭ:i]ڢպк.B[榴nZ-U۠bΑSVi[!3E.+3g ں YF(4, ZXak. BYE0Xk.),2,3>JDY0qY0f<^w"3. F*!.Ɩn,C]꣺H|t7on%NO0m٦.+ƶ9=,b|?oaS+7-P◆Jo>˿88<åXp^8mɿYx KQ//$7BӋK%ZyӊT=ysҺk:\J%[w'aQ7ᡶJB $H","!K蒪$m[|)Hb xh%Rꩶr!"BPBQ>_"*C|PkA)C(!B*-Lrȉ !w5/$.m?\ڼh[".)َܸRK.Vj)RuWg*uƲVr֛,Ou)%>XTOe] SƶP9l宔5.Y.Vԫ$C E=ťAQ"հ,S|Feob qxX4YAa.#CUExR&֢IX(Z[RVgJ2E[el5ԛ{eIiX C=-R[.[aayob<ū؆$PUڪ Y,+9Y7ѰB]BèX.S[Md)n \ Kl$,OčeKYR.e-R,U]]ěcKfPjmix*6"X.6Cz֥.Z˔[=`2wV?b1t-*j3.e,wf$>ly7~V,o2.^\X)jJKBīexZK^bK O5).A\fPj=շ:oe܍e۲ 0.QPԻOԪJ۲ q7ꓮߪF3wP*K<qWj`ܕx7бal.~-."^$~VOq[]\vmb/9=^e1,.6^qWFDb8aPkyOk\mXvRcpx-W]UX^ŷxxsZncr6Nr$G ۏ%bˋ7K$^^<zsqjӏZi-k9Opq??piq,r8kԫ8-ԥjJOᨡVӹtnCtr,$ FPUўK89kUEWYVj)3bkJ%Q!b+iX:jKV<6xZ>aX rm[YZfcMǠEJlIԫV[lS}ֺ;2.YzϬx-nmjؖ0N j|1Z7/o[SٰXK հVAw_6>T#NO7oƋ$n/ Vn㲼02qWU5(ZmA=xZ:,FPg\w%~Vb܍K+,NŰbi<-!ݸ,WVj^M#ɔB!%jyS.xXa0ΪO)fYT2,bxSe1ʪÛB}rA oiX>ieyN۪YfV]Ķ۸,-)%ck7C0j[5Yz&G*-Zx0.]% brY`rrҴB2fh~w퇲MiRTus+˭Qqq y/ܛS6CGb鶜qyz8KJrA,᳃bkQD$ HܩX SH"蔌#a)FJNOXZID3 ҶJD{؎ڻ*.K"!UKHyꖡ,塄EyS勔wut^%KOM1'cbUě$>M|//tr{w"PalmXBі믿֯oZ߫FXk>'*|UÁBR,KqBQw98@_N[B%Ñ3D$Ɓ$%}2 lnt)U()GU# !x([lД*KP$JB#śJRe+(UT)"cKIU)U^r"b B$"R"KDl.ş%!KbR'UCYb+bKϔK٪C1^ʟ)My)0Q*REURŭFBٲK8*jQEJT1f~CB$%^b KB$.qRA|X[Ќof\Z7\%>le)Ty*ҡ}T]ZbAV^ %F<ĒbhFI|L|mC`.ڌO ).x qi/n%> 29Jy겔$m֌nbh[,Qwalޔ-|ѶR UCKleR c+ˏVr$x)'%[/0I$.L64p64oI x\FJ$s6積N~x$KL6N&bK$RDS<$ta04vI9j-)b|.bQeL)ob Eh]![3bPʻЖ4塔ʻ(_Mږx)CC1[Gv? x <7嫻?˜'Cc< ҶPpZm9=ڟSk믿mhth(K䇿P>RU_plupTq'eJܸS(.F8$ӖAж!ND-C{ho UERl7Juiʖq^"]MU-TS2a+BK"(e+UK($F%QҔ*ʛHbd"yw O"`*I "xJl )%ĥڻ$E-rЌK<KYV*?TUMle*,RuQT3lʒwYAlrJPBV(UD"H.F%ĒKAlew" vn[,]Z|2XlMD<&F12/eV -cSE$(Tc-bISXx)/A[zK)25~ C, 7c,)2hm/S\ĥmؚ O־:lUFy*ۻa\ m+[([)Cن气(X˜8[lXD{S Eeb+ONFPO#hOXh-.Xne|RVA<ո-.e+[#Զ*Uy[[Pqx88 GUrC9_8 /OwX-.5S7$%5gjۙ4uX,ĒֲӖxJLpL%F)ӻ%تiXH(X"nO* b<wge)gBϴm!'5Ed A0/P>(qܽ/>+"zml؆vPƛS=_o?3~כ׵K3E&5 ;?3K((&/~vv*ōˍ!w-ܸsRvڎұڻPvRUtRTY K8[DT$9︹E x(R(ʥBيI=q)CJQR,P#8-$^ 'C}o0߈-3m 4C ؊Ia|Q("(/CC{)o0V*[Qqi[ќE(FlA{,U܈"QT,)""BlXK;nĒ"b%J!!ޝx:IN/x.]*T8M41-T(K,g;N[2(Oe^STDRB[ C[ ,50AŖtі : CmAB5"d겕 M\7$j,pwicZg!>%$#mExoeĥmI!E,%[ۦJ⫱,,hKlH#'%|TR 3壶4! !RJ|%(o.l ?\N/l.h_4r#(4Z7'i8+ǡYGJ(ե(T)Ք-/ TSUM?lE,IHI!TيKQ*2.A2 Rj[STK!r&C%D<%.ş%!D,;[<%{E,-.Y-ϔKƷ*OKyjE(|UKlʥTREQ JRe+U eK_qORe+U*J*R!dوK,X]Ò%"> tЈ'IěR.gbkUĔe+gnIMP%ql-=tJ^Cbxw3.%2r)bf 6)B"B2:b [(& roi\R2xʥ EyW($ ʥ,jͨX_m'],IC%elEVrz(R^lm)[S.lR EahU.Mig???[ֶ2t_m}2.ДQ_tpvp(͝r8)n> ܹyR%~wqpDBvҶ2CQ(5U(|PN[V7EQTQ[*b9nJU%VR哪jQ%xSUIUr)ꬲV$J ^ EReI(r6 ".e,_|P PC\KP))߈?SۨX/V.e+K{P>+(e+U]~GR7NKȩ_"%[Slt"eK2.le C cnRT)v*JyI|CWD۪\nn2fhкU18h3%89܏SpHt~w?~ی*ݶI~ܜMp~oK hZrRܽ43]Uq[T6[!9h%ҹG1,S1$GJmٜޔn[<%xI*T\N\I|/oV^R>[y2 ,UXCReTQ*[*-MKAgєoDFnH|wrFq ߗb;M KN,i"bMֈ"B$(KSZRT1l| c>)=4Jeh1]S<U3ތVD#fPRU>-UYjrz*EG.C{6nc<-&Ԗx4iMƴШK$"勸d(_)BElb+C)O4'!4BB3R,㫲C3xSD"-1˭,CfhOJwiZ,E;0QwP^Re9r7-ě04m%v9|#ޔri[0 ǝf,)x(N=f\L4C<Cqzj%ZƻE)2Kvr1Ӗrcr8MY_j4apNݺ%f<$tۚ4IGےXf4gTY6),! Lb$ml$CڜFʩ#%Ř,2(s24]ۉxWTP P[3֞nޔrR,S*b|~Gb+GK,=f|+]l7'[7n7۸87neh 8JSe qޝgg??w믿4CۆQ񽶍оSv|U.C[\ʥlvPFq UPe+~o[b 7۝Ò!"!~hCXGO([B)Z,JUUYne+H|QEVMSJ{H\8b Bb+݊T|R,-$F)B{y !bK,$hĥB"hr"˸-^"4o e7wU(--/c+_7U2,'re)?)K7UR(J eTQBYP K%.;BRʭ,#O-%M0F\ >|/xJlIw]BjlʇOaa>͔C{WM<$Uf ʟPNAM4=xՌC9 1^!Q qW bũ-r(CLPS)t7S+4zb(oJM)CPNx ƒpAЌPKy*3CSʩiTÌ2C)ex7ŸneiK|@3)͠O{1wqq/?vus?MWU޴/ͫ666rv65v3_66*vtvf$Ķ.C⡛ %#.P2exU rIY4cL$2FsU(K(X e5N0nP UD":fPNcH[f|ghB+C)Q+Z=ʋO]~a͸pqzU|rruOrƛ0RC.3~T!^Y~o_2Nڻi)oFmN,7/rqTYv˯A,E,W 7oWwqlkBBD[6[4{%~,EREQ\(RPEla<TVEyvw%8(*4UeCDSr PEr!FDd!],FB%R"C$3xnoʡ;$ Y)(7eʡPWE*7JC(UBBU;$PU^%ܔRE)jMƅ,2!qSx!q:agsӔ"n8E8ć^ތ*Omxӌ M;h](݌/ mKPr(Bܔ%^2ʇahK9Ch_ ۇ`s씻`s㦔PE k7UC+a,5C7cݕWm/8.8ƈz<ć! >CwƩ_J+7&XϢ($.A;RTQn*cirWv)7婽o"g=hK^8ćrv7ЖnCREіR2e36ߌS]Ovq*Ƌ[b)˕fЖ*CxӌDiK)']&ʟSěI]vЖ*w[l6m)ӌ_7F|<%flöUbw6$q0M3K;v8趡R˫r ->$i%UaHM␊17amFz&C(EB8!ʫ*i/8šP@bi2(kSR3~.f,dž#qe%W\pẍ́8!NjBxg'_~oߣ-C߭|-'ڻyS>l/\|lr*.\/ms؋k}!q[6/..WwniK aj XFܴA9*K(*(D<\JQjjSM9śD$ ! !XҪ,UVMQX"CDS,rBdHD "vw &D.OC9SBhni9I|w vr3M+7宊bPUf,P(J*Jj/rH"WU(&;T9CY ⰵ\-S$^W+qHDe}-MbCB[ƩEJ|VUY[$^MHY2}E܄vkX*E8TrWJ95b)2qjwU(QdJyh2a4-nfv4 CЍ,E*jhKiBySMx3CƩ*aGơ=qK,ciwq&^_ C(w&b8q"KyUMtʡʛ Ja0mBK Nx*Tev(SҥZ.ՖrS씻*?n]ah{)KwCewK3E)ޕn'}6Xڲm^%͕v6s5waxBI"Ì!_(ĻX)S,C9 vrWUrNe)CQ,P¸٪. *o.RUX8$'U%8=)ww{A/Sl>C9$1TƋ!C1~oa~gw,H3!Ж)^5MYܵ7C7XqS WwA|7A<]C|h\Oø W7|gb||^=\,UW9}VEkllm;X6r ڶIr˰nӲ{nwPM{HUyHdg$^%xI4Rތa!8L0(w44By2 XBYM+7U0cIjb/~WZEN])n0eg3Mn3>x*747 폌ݯz/'ci2P%cf-RNE|?₲R\Օ_9je\Bl!;r"ԘʹwwUN۸|s(Ky*7MRPJCyU*EP%[%rJB9r)e(7UEDUIHUB,qxшOOTQ"?Vnr|!EAy1E9l>UnrhQ(X]S*KQʇ Q(JY)Ky;]eR(ZRIŇHOo!;fs!v C;<K?w;?Bо0eJ(*->waiٽiX'(C q7iM{1F|hJ1Ӷi&T aġMҌŒaƌKt3w.2},NiߋE[JrKEXxPv7)ԖVD"дt9vWQ݌RNUEa cQ]_ZPT(ӃrB;w,/\j,r1,0>P> 7K?4iƇhb)8!n,UnA\JywU$N6wfw NS}v\7ũ]h_6wm=}e 7w ~|}}ťlfw(vqNiC{t;06q*{hXx3d$w}Q$ TIhMUwM FEI2hB˸..)"Li`*Qt;ġF1j(|VNPCS׮xڋ`<\6rدx)b40޴eіŏe<4Wog'_?Do/6(?Җ'k6oҪ)O;6?T>6S9TY &.l>,W.$ !N&],<5acbʩ,U6KYVjUTe)U^%REQ6Z5C)D !20DB\CUQ*wCR(T$DHBH|REy!2 !orAD$!N<ÌO_r/dxQ^JqW=CPޔ*K1Un]T e)妼)WYTX6(K(KlO{,vo A!q(%;qw͠.l>6vwSwYˌ8ga8gA) DkS[CE!>k]Pm ec7ċ*⩤ڇR8bo˔"rSRXT3-q_CC"~hf|qSB+(oB;l iڋqSEDf|'^iKyո ʡxU4zM+awh*8ŋӪ*固ʷ|Rfgf-cMt~߶i1eccg$7|.1ġ#!}֞ZުоԾ7!qKU *218K}ѤK2M%"&Tn]2NM9B7P{UzU]y >!ޔ-]X+WW6vEǫ0թb:L[qj Ԗhn?5x7/_~??ߩ]eLio]mޔφ͛6P(KnK.6.x UBhlo)ޔJ)7e)RURMbW>ߜB$hK*j"nʆBBHDb .IKQNq*RU*R"҄Hd,%)2IB$AX!n8] ،n3V(oq7)wU>I|SYT^T9 S^S9r3C)JDPʫīC./C0C[Fi43qSی%Sӎq.eوr1VFJx5a|ʇB+|P]9r K)wWSpu8 c^}iD-Bƛ:M?c<cwWO '_?ǯz ]׆(?hhPݲͲQgq*K,_R)Q吸e-%npuHl4$NOݲ ]9"/CRx*KwS4WKW1^%RqYpC)O]v*wq1RJyqJ񡈸Ib/'JPN4h)0;Ejj̸%>q(T67e)5lr(7E9TMZU(b)(7 W$uf6H"XGkڽ_'gT"v'/awb8QjfW~];,vX,6=I4M\>ͻzb. ͌i[/fqqr/B_fh1ךM} mW6NxVnV-eVygݛXX\$v!.Ҭⰸq/QؕBʮ(ʦE.E)Bx(Uel(rI7Hؕ]슢bWU+ mb$l]!BPIDEb!A(,bAܔM9J39+gw.6bPKl e3PvfAٕM9+eS>_W(R(P6E&qz^%N,#Ypn!,.bV.v{ʊM趋]\Y\ć]rKA$ba܉rF6ОŇx/F|(Pn%veگ莱KĮC v>ăYBLtSexiV>TWmShA8'">ŌgqQA+Gqq eU*%P]Y;B)qUY)jCYB#}vxʡmʦ4͔vn|Ѯ&. xi|h5ah_Mśm3܉/vflcWjv]Sn]WCXWTylNnި*7nnP*qXFbkXXYX߿cYba]-eV6wMB5mȊeYR;D{صgbF0cSbb3,(qiM0X*vCfvq )]ZR"e|C ꪜ C) 墔'N'%7%~tJ-f :T.ʣƦniOaniqø8ٍO?? ?Ħx6vCӌ2vwPvVVh-ڭd]\$7+ܬET7%oYH(BQNiBE99MrHDbW~|(*.]4AD|Rz&vE9.6T.^C m2~M╱D9ge+N(b'P. ewiJ9+RvkYP ZYAP(ސDU(8bs*o(I'.vGEt&^gE&i&>fqx%܋C&C|]&7>7صv72J&F),Ⓣ bW(-6cle342q1t bn UQzK)b(صMI\ Ĉ] eM|vN3C~MX!^ diwYY]M3~q(a|6vlhbW.Kc7nƣvSĦPfu(φf^)bS^+B(WՄ2!.nʮ])8,^C) ox{[ڮeMHdauPTQv S*ʮ(ؕRgPR>D"cx!MQ6UE+UTi!] .Pn"CHl"!."bⳄIl"8<(8`ka(Z!x ePR;8Ll'ͨ&6+eSByvr; 7b8;;Uy6PBn^6߿6߾ٽ[[H[X˽wC%EOfbw">KRUISI 2/)+T(?S ;n1؄jQ3vI36NY3T5Ml&Ϊ|(OxBʣ&.f 6E!HTeI܄.8ZƇAX];墤lܬ.rrU4F)** 66A"nn,]TPvEW]͘24CB3؍q?׈qYT)Jy 'WÛk곓'?P巽)l߽ݡk\Uⅶm)jY\HX,_6jEnѴf]uٺ4E7WqZʯK\UڦE4n&k597cm3vv4e (zLlƃ&eSf;MCۜN.PUY9#ߝ}wioڮ<]<'?4C|8vF I2i\ėMf8yrb~n_^3tٌ/|~x+CyP-^ C슕š<(%,kb8WU.Uno, UeWBM vj*rQ"a!&!vqT$U@5UZjIDV&O2$n"!vH!..bWvqD&kM+OP.ʃxa! +QƇr1CٔPZr(*/77ʿj&v+WbgF|{'[Ml`۬>$" ]lN\ć^Oݩr3^(AvePĦ<+Oʽv(%6Yܴ;gmf8ՔCi7baxhϖDơk&(Q9͌*kifYuH<øH.jT$ӈ']\ugrʓBqur5(Nlw=7Eb3vq0vovSR5݌JxƸ3vmӡhK[Z\"YtP~s2vЌGX*^Uvov;*?n%,u[,|f]]nXj]]td4AImZ%f,Ty)Yn3v+cAҌMb7r1Cq M3 Au\Į~$eRQS:U9+_XXV荓_~߸nxRvC''_ft6cSă mwb;ٍύ??' M5m7dh? Pv[Y܄fuX!6+,AC.&qU_J(E]rVʮTQTUە]TPYTEʝ"ʝRv!^(EMDFH* UCX{x; k+/ f|8nć)Ee(WeW>Cea* ;8{)B'/7⬬auUzaf,D8[ēqbW6AʃI|R>$ڃ.^VfBIIyX(,BPY\Ʈ vU,F}t3b[J7M FϺ C\tl]Uq(_qh|(!C|.ƦƳؕ8M+ !x(jM^e\ij7<(g&i7Qlq5e"44eWІi[cמGo6m74MBWOē;oM{{wVWAi݃7黫"~ɽ~qvzj+t:='%ol껿Ȼ_vTJlźa,fYlպ~G.m]m:U7m.\uJl JrY0굊j"MgES[gt$6ZYO U^)䇪l%jص }wsݴYIcpqSăv qhޚeƃF3v_2^h?7[?׿ڃ?vNJZ5<(-M9o^ZV7g/,vʡ Un*w*JuxUU)Ք*K$!D& qRQ^VU.L q(7IE!HIb"gA%nA߫h/C3LkCZQn8QeJ.^k+7l' qoaaJʦ))'B9ēP~*B)g;,VWY]Y(/Eܔœuxwb>)0 vʯK|-͸S4v/8.(TxlhC{m3c7o4&QEqZ}6 8kvLE; f0ơv]TIH;[iw؍]H[]Dh7UUY|2bvbӤݔДji_Ao>qU;7+JG{|T o{cnq5e?rkd F3voϭ^j,f\Ty]ٽOTZWqTŌKHkqM<gE*|\)Pĭ7*AiNO5C;RfuhƝ.EyV3HUa{c5A9 xU9 ε8 q.RVq-jH9Yb\;Ԉvʪ۵r(rҋ)'hlhIŻxO(W8iԌ{{I5#V}*AynwY<'{bU7{׵*_qV7=?뫇g{bXUbmFbխeFUb5mƪ0AӲ@3f|5iv\KX%Vhb41 ƪ[JXUP>Ք8]|K9+*U(w8w㣡m2hB6M\Ľv2Zq8Xl,6{wi3~$~_ ?ĪxllƦ_vŰe_'fah'\BOH\' ,U\bq2"$U$RlXIw&Nb8)'Elʪ((q4bVSYyWrV]TLk^s$8)g)GbO;]3~޵.GM F(g`gSN⤴b q->عS*׆݋ߥ])a}jY*Gy*^J|ի'nĻexYu;iY[heUD6&2VEXu(* ƌ&NbŦ͸߹gYeG|iF?CU?at{lش2>ƍrR[NnC3E;hQ͞~0h2~?[o_;qR^]Vr۴=rcBў%T9KUyd \+VUuRUJ5ZuDD#/DĦrRVUE8R(PTDBdbrMH" NOVqč+靖cqS)clrVޕ; Jy}q+6esY.Z*x">Żx ŕR ψ?+gqQ.#V'QT{XE9ksRޕCkqQʍ`UY[q1N*H9Q|u;+WʝtY wnj$V 1>#M5XS㢜{'Uw3.J4͠hʭE8)7 1NqPVU.EiOM\QY;3偸7ZvʍA;xWd gF{7ƪlƪEiNՠڦ}Š|&VqʍD\`|lڎ'Uڧmq-B3I{W>1'e׺gxrQ l\_5bWŝ*gkUYެgWgkČѲu3/ӲiMM;jՌM_hb4iX cUP4ClG .;?c;?xʪ>rcϸ{&>8;a3͸2شؔؔό]3?)=;o/_$6$q2'i{NBy,NFs?I\{bؤG*X(7BIʵDXl" N^l"(r/%QTA|eUI܋ _|"nŦl3JĞB9?#Zq\jxR<ZB9k}eccڭ۵hG=Ej+S-N[nAbl|hb5cUQOMwrRؔE3+qd$j|bPC\>[EZkm^܈r1n+43?/.%6qьOf,NBڻ,*vgĦ|)"TلPU !x,PU'MJF8BQ*REIE](?lr̔US|KYB9*bx(b,mڝğsEU*_rI;H(ElbSVbqq#2N3Q'ؔ8(16]V3(mbS*nu8 XվE$Vؔ)WEڝ]04c'E8bM16Z$0q])MlG5MQn  `gkEc㤽{ڦ4޽6j5όoi?)5cSV'f^x♱)b≸G(-rRFI<U|)zn*񮴌]Qu{LTʪ]iL(r[)iʭQnGQyVAv2͌kngahcGA(BQf\8vP>7)G .6O)AY>7ݫx 5#N$^lG>x5ĪP2>ی*g3f,x5Y<0Ū͛7$Gbim8J%[Dn^08n)Ħ\+O C v2]4ٍfb]V;$;)~;^nIX0>*W'GE(,ת{=WNƦ=_{J3?<44x}oooo~7{/5xw'{bOŸהU,6{;UNBQhU(JE)MDBHxq&PNbSN"; EĦ  *!b^{'q Q CMſZ9*cq<3N\*OrPNJR+VA?]x Vڻ&U|C|x 8h'^9i8B35CS]UTf2)J3nT9HqQ(@`쉣w16]bՎ*w *q qgr\IT;*g7Uy*&6$%6qSJj<3>UVXM9coXʵĽьUlO9;//V34 VckqkvTLtQ~ŝV3mfghTYVrPNXټQN^8J6*u;hڻݎgU3n!w~lOP,8])'{x`Fg"Nx}όS/x{{~˿_ʍWg\]eUĦ,X;iY/ ^M; J9)gKYZ(JVEYUQBQVl"!"!nD|ʝr EIYUY%N܈ *c*{F .bT(6C۔MӕU97Sq-o(QeV9*WI9*|SⱸZ\)U9Xŭx +@F J|;A3yu[G?~֔bq8ﭪ-?pVeqꍷW!,gGˋĝ*UVČUUh3^^%3xiQflEY5cjfb,X*w7~w3dlQa<.ƪSʗ{[ {{7&6EXZ/D<6㙱)O@ٔ+d<4|/U?˿_f"no+ڻR夜UWcⱽoʟW."V<G\<wsq-?a|\+Ox"F%WYyQI*GU*"V,bhEѹ6j?{>!DcRUݎQ$I/LZlI3% f3bBI"a&T͚*dδN$` "@`dfA d2uN=1HLW2`BJ>[ !43':bMO MG -qE@33!fČ: SCNW !(2aJ3J3@\#" 9*0/cɄ 1(̌ 6X#Ffh%GU 43Ǐ(̎`l1JHz I<"Ȥ4T*i5@@E+!>Uj5 NulZ3t̕is:ѲH, e38q\|JY0h@ne Q jC$$GIt :fSBpe2%'0u5${D?rr||| "H z;1#Z/I,b搠'zf$ĕ(HD!(´ 0=S%1+ȌH 530)Ma S،̺s")ɗ{̂)RÊ:Q4T@EKBlQ+ʀiUaf}g dFe1k&1C5b ֈqmBJI6L:tu(HH{"L2HF$.B2KD'W⮠V0JI bƌDa^t 0K̒hKhb̈䨊'"ST0h<Ŵm ALjOĨa2:AChIT$M c3g ̕iͭ*%ѱْI;I! XJ$lz ClfZy@+%3#0f]2K`VNL^Bpe6%)1);;Lrr$A$GdM @L%3<)X!:DODOB'ĕ虎3#3cfD1#FbFLa Y2)Lal00=2` sA`z d!yDG +t̓*ĂĨ f&0Wf`s4cH>3Ș+, .sg^AL N<'aH^@:AKM&V&$)$'@̈u]R  جHM"@,9/)"S|樄ē$:L%D [LI N& hh5 ͉T'f/0 03JgL9'Ml$p͠16(jA/!"$"H!d2WQ T*@0 ^#I/IV5=!bmAヷ@gEILT1b] S4 z#ђ(ΌČLa Q)3bA3gLal0SdfR/8q%ZЈ̦a% 13g) \ǘ$#Ln(LQQ2K ̳s1RK:b$ 1p2O n$A!ĄDXgtlQ0pX xM^0w$SIuɴ̎ *>)K@[ؕHB[!5w"Ul# =JLWJ3,D|2Sizf`J|$_!$iT Wb0uC00`Ng cb$\N,Pqɔ͂ĺ5*#\qj:uCaM2ALfL/$ZRVd ľx9$)l:k$7jK:װ  F ooo..o`&!<&(F̂9"ՅB'B$zbI*V0=A1BĽ` C0c~Wb hk@̘"ZX#11+L.cFJ|D!6 6 6S f/017"l6W f!d~A 6Iܲif@ 1JL0!f l&::&ّ` HwIK7B, : TaB $[Ob]Z zIؗI(Z H+lz fgs:Q,+BNb։$O5C"dHzA*!hL""q%xY0R5 HVFDrr|||7 f:c+X#3sXWWQ QԌČdcӑX!6Xg 3cZ6`zd?BsL2#6Ï{RAģlVܲI L|y[6{w1 Ӳe~ /AGdA@@bAHt2 ħ`IJzɌUflg@ԉdOP)#$$F5VZ aZ!q E0Ia3'1JkT,T,e28Q4гiZ6afLӉV]3e&Lx03 bTSN5OiSpad*A&|6'̙y^ +uɞ)A&ooog].2LB։<, sbJ<Ƭ1G)1'F'z'3L!6bӲ` CCϴ̕A z q*b$Fb$:beu'Ee`f͎0-yf!WS6{ė 3%zFϼ M&dAA,7DO  A/qrl3-6̜#}Ɋ#^P$$XHv $Zt$n٬@付 *0S3&1afj6u #PbPU>>NPjWW-iN'N'uM0KA 13 3U@pyHUQ4tWs\ub(*hOI+("|$v'5f`$K`Eҩ/<#!Lގ9Ϻ\.}QB։|M@qX%fH' 1%n #qMA虖鉞)ĜO,[6fdZ,B3"[M<sĂCK\(>XGbAf6[l $!:6{ģ 6[Y `F I`  I3`\%X!r]G;%L+K'H bAS=bP͂3VB@221槙}fFjV0q5wf"yBE DDUQ1gLπiZ +ltSלN2`{'V!lɤgz"A2D :IhU15NP,B $Id'%m*V*"L!#UH,%IĒ 0陎Ma3Eb{=1d 1$vgۅ>U6[6w٬a6?fJi6uQ"3%n'sA`` iDG $=)Q,%WQ͎dF#dGdH+$$B$6S*VBP$#wmw2_"Vռa dQ:}'@45D)NT0MQT !,(L!$+s+#8& Nc"X`: ɕ@I_<@| ufiUR0HZ5$H޾|>r||| -DIO12̓*IČM(1%0+D[/Ɋ`"%%K^|>r||| ۭ:Ll0ĕ1#0/#fLOB̌1`zgzeO0)ĺd8Ne#1"%1#$rfA`zb<'-A6lv<%1{$1DO,DGI.IT`<@>sD&W5K%fIO(A8Q$ V Ѫ+lzVBP$+LOa֘$^#)Q%gnE 1! AM!iN؜j*NQ1e `&t:ѪkD&fbeމSsÌs:ɦ'^PiBAGX~qD.9.9*xFBYヷ`&!xAS.%b#1#0gf'F'ZQ\陞i+o`FbEBlX̄C,+1#zb$ZJa ;L!VQÓ]?9>#$Y',Es L! yH*A!0E0LDܑf)UbC;L!ܕ1S(L.1c ZbN3-sezgzȅ2)1%9NL 1#Fb$:J Kc< )%32w}6O6IjXcvO䛘W "xL$f@-1,$C̜y A'^,%3#fLO]  Kĭd$9Ć|#Jz5$$33#AskNuCTT V@/N'"H")N3W 5D+jZ bK;NNAd&ĒWJ&j:ɔX'ŞD'yHrTo6Rv\&G$Ep+ 3ؒfU 83#3=qy)'sL%VCă]5 1#VIu\>>>x~TNqA/yUqdf ^ۈIlJ'5wa la1QBl2=k ) I'`~+3(('3;7ܕ<#|a[ 6--6Sf^ɬk#$]T<'\p*V&LTaiEE!EI`V5WsKW--<fDs*P5 Tqb ( YKX)2Y ւ#Xr\ $"3rf^roa~bA4[QFrjI&qFalI2pfjf4Ӛ];`+&#_XE"tFj>ts\".43FNh6o TOt6kT0KR\ s=\ibFAr(^^^ސ- F3/^pZs桚.8gP;jI%iH$$Jj( ZUPͮ VwKY[)1*6 I?I$dV$ɷѼkk ٓ|덜e`2r%|oWY02 `%x4F֊IBA@&2ɤbR@q$d1IH֒? `_RH&|`VpSK֖l$G$*n'3 I@!I_'x4OyWV|@-b2Ƚ́w#P adWf,HveUP(6?ŮP2`%LjvepZ^6mKNh.VL2YBүX, I$vˠ]l%`R@\/H,#ͼdW73 *$+*> H$GU1+D ڒwR\/|9d Ib7$I*8!Hh$j6dV@,H`= \#XrW^ l5|h$ƑL>ԒyI&kŞdW2HvUł]_-9_%{I0i*$"^^^ސ$I.\&8Sh6L<@ҕFi Ku3BrDH8)yWSEp%@ $ I:b%"$I. >`^+Dr ب4`cٌ؂=Ȟ7&/pnVFdR@@sHUx#nFgʒ*n#`*$j $Ih & YNI0i.Z5H?A= h&F^W#[Ōb+9*+lh>de-7QQHҭ,$Ih%n" &$lLGi3.mzC N hf {cdBg"LŤL`VpL%+KN+H*n)yBd$IH'+Rͷ= 1 && logo.scale_factor_y >= 1){ logo.scale_factor = 1; } else{ if(logo.scale_factor_x > logo.scale_factor_y){ logo.scale_factor = logo.scale_factor_y; } else{ logo.scale_factor = logo.scale_factor_x; } } logo.scaled_image = logo.image.Scale(logo.image.GetWidth() * logo.scale_factor, logo.image.GetHeight() * logo.scale_factor); logo.sprite = Sprite(logo.scaled_image); logo.sprite.SetX(Window.GetWidth() / 2 - logo.scaled_image.GetWidth () / 2); logo.sprite.SetY(Window.GetHeight() / 2 - logo.scaled_image.GetHeight() / 2); logo.sprite.SetZ(-10000); youker-assistant/backends/kylin-assistant-daemon/data/beautify/plymouth/defaults/default.plymouth0000664000175000017500000000020513260315532032632 0ustar fengfeng[Plymouth Theme] Name=ubuntukylin Logo Description=A theme that features a blank background with a logo. ModuleName=script [script] youker-assistant/backends/kylin-assistant-daemon/data/beautify/sound-theme/0000775000175000017500000000000013260315533026147 5ustar fengfengyouker-assistant/backends/kylin-assistant-daemon/data/beautify/sound-theme/README0000664000175000017500000000007113260315532027024 0ustar fengfengThis directory is used to back up the system sound theme youker-assistant/backends/kylin-assistant-daemon/data/beautify/autostart/0000775000175000017500000000000013264073032025744 5ustar fengfeng././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootyouker-assistant/backends/kylin-assistant-daemon/data/beautify/autostart/libcanberra-login-sound.desktopyouker-assistant/backends/kylin-assistant-daemon/data/beautify/autostart/libcanberra-login-sound.des0000664000175000017500000000057713264073032033152 0ustar fengfeng[Desktop Entry] Type=Application Name=GNOME Login Sound Comment=Plays a sound whenever you log in Exec=/usr/bin/canberra-gtk-play --id="desktop-login" --description="GNOME Login" OnlyShowIn=GNOME;Unity;UKUI; AutostartCondition=GSettings org.gnome.desktop.sound event-sounds X-UKUI-Autostart-Phase=Application X-UKUI-Provides=login-sound X-UKUI-Autostart-enabled=true NoDisplay=false youker-assistant/backends/backends.pro0000664000175000017500000000130013260315532017065 0ustar fengfengTEMPLATE = aux inst1.files += ../backends/kylin-assistant-daemon/src/ inst1.path = /usr/lib/python3/dist-packages/kylin-assistant-daemon/ inst2.files += ../backends/kylin-assistant-daemon/data/beautify/autostart/ inst2.path = /var/lib/kylin-assistant-daemon/ inst3.files += ../backends/kylin-assistant-daemon/data/beautify/plymouth/ inst3.path = /var/lib/kylin-assistant-daemon/ inst4.files += ../backends/kylin-assistant-daemon/data/beautify/sound-theme/ inst4.path = /var/lib/kylin-assistant-daemon/ inst5.files += ../backends/kylin-assistant-daemon/data/ubuntukylin-default-settings.ini inst5.path = /var/lib/kylin-assistant-daemon/ INSTALLS += inst1 \ inst2 \ inst3 \ inst4 \ inst5 youker-assistant/dbusproxy/0000775000175000017500000000000013260315533015065 5ustar fengfengyouker-assistant/dbusproxy/youkersessiondbus.h0000664000175000017500000003327513260315532021047 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SESSIONDISPATCHER_H #define SESSIONDISPATCHER_H #include #include #include #include //#include "kthread.h" class SessionDispatcher : public QObject { Q_OBJECT public: explicit SessionDispatcher(QObject *parent = 0); ~SessionDispatcher(); void getAutoStartAppStatus(); bool getSingleAutoStartStatus(QString abs_path); void changeAutoStartAppStatus(QString appName); QStringList checkNewVersion(); void runApp(QString pkgname); void scanSystemCleanerItems(QMap data); void check_user_qt(); //打开文件夹 void open_folder_qt(QString path); // bool judge_camera_qt(); // void call_camera_qt(); QMap batteryInfo; bool judge_power_is_exists_qt(); QMap read_battery_info_qt(); QString get_os_release_qt(); bool submit_uk_pingback(); //弹出登录框 void popup_login_dialog(); void popup_register_dialog(); //退出登录 void logout_ubuntukylin_account(); //得到SessionDbus的验证值,可以通过其判断该服务是否正在运行 // QString get_session_daemon_qt(); //退出sessiondubs服务 void exit_qt(); //得到安装操作系统的语言版本 // QString get_locale_version(); // //得到当前登录用户的主目录 QString getHomePath(); //----get system message //存放当前系统和桌面信息 QMap systemInfo; //得到当前系统和桌面信息 QMap get_system_message_qt(); // void set_default_launcher_have_showdesktopicon_qt(); // /*-------------------desktop of beauty-------------------*/ bool set_show_desktop_icons_qt(bool flag); bool get_show_desktop_icons_qt(); bool set_show_computer_qt(bool flag); bool get_show_computer_qt(); bool set_show_homefolder_qt(bool flag); bool get_show_homefolder_qt(); bool set_show_network_qt(bool flag); bool get_show_network_qt(); bool set_show_trash_qt(bool flag); bool get_show_trash_qt(); bool set_show_devices_qt(bool flag); bool get_show_devices_qt(); void start_check_source_useable_qt(); // Q_INVOKABLE bool get_show_cinnamon_desktop_icons_qt(); // Q_INVOKABLE bool set_show_cinnamon_desktop_icons_qt(bool flag); // Q_INVOKABLE bool get_show_cinnamon_computer_qt(); // Q_INVOKABLE bool set_show_cinnamon_computer_qt(bool flag); // Q_INVOKABLE bool get_show_cinnamon_homefolder_qt(); // Q_INVOKABLE bool set_show_cinnamon_homefolder_qt(bool flag); // Q_INVOKABLE bool get_show_cinnamon_network_qt(); // Q_INVOKABLE bool set_show_cinnamon_network_qt(bool flag); // Q_INVOKABLE bool get_show_cinnamon_trash_qt(); // Q_INVOKABLE bool set_show_cinnamon_trash_qt(bool flag); // Q_INVOKABLE bool get_show_cinnamon_devices_qt(); // Q_INVOKABLE bool set_show_cinnamon_devices_qt(bool flag); /*-------------------unity of beauty-------------------*/ bool set_launcher_autohide_qt(bool flag); bool get_launcher_autohide_qt(); bool set_launcher_icon_size_qt(int num); int get_launcher_icon_size_qt(); bool set_launcher_have_showdesktopicon_qt(bool flag); bool get_launcher_have_showdesktopicon_qt(); //-----------------mate of beauty--------------------*/ bool set_mate_panel_autohide_qt(QString positon, bool flag); bool get_mate_panel_autohide_qt(QString positon); bool set_mate_panel_icon_size_qt(QString positon, int num); int get_mate_panel_icon_size_qt(QString positon); //透明度 double get_launcher_transparency_qt(); bool set_launcher_transparency_qt(double opacity); //图标背景 QStringList get_all_launcher_icon_colourings_qt(); int get_launcher_icon_colouring_qt(); bool set_launcher_icon_colouring_qt(int colouring); //Launcher position QString get_current_launcher_position_qt(); QStringList get_all_launcher_position_qt(); bool set_launcher_position_qt(QString position); //Dash背景模糊类型 int get_dash_blur_experimental_qt(); bool set_dash_blur_experimental_qt(int blur); //面板菜单透明度 double get_panel_transparency_qt(); bool set_panel_transparency_qt(double opacity); //日期时间格式 QStringList get_all_time_format_qt(); QString get_time_format_qt(); bool set_time_format_qt(QString format); bool get_show_seconds_qt(); bool set_show_seconds_qt(bool flag); bool get_show_week_qt(); bool set_show_week_qt(bool flag); bool get_show_date_qt(); bool set_show_date_qt(bool flag); //电源 QStringList get_all_power_icon_policy_qt(); QString get_power_icon_policy_qt(); bool set_power_icon_policy_qt(QString flag); bool get_show_power_time_qt(); bool set_show_power_time_qt(bool flag); bool get_show_power_percentage_qt(); bool set_show_power_percentage_qt(bool flag); bool get_show_apps_qt(); bool set_show_apps_qt(bool flag); bool get_show_desktop_qt(); bool set_show_desktop_qt(bool flag); bool get_show_icon_qt(); bool set_show_icon_qt(bool flag); bool get_show_places_qt(); bool set_show_places_qt(bool flag); /*-------------------theme of beauty-------------------*/ QStringList get_themes_qt(); QString get_theme_qt(); void set_theme_qt(QString theme); QStringList get_icon_themes_qt(); QString get_icon_theme_qt(); void set_icon_theme_qt(QString theme); QStringList get_cursor_themes_qt(); QString get_cursor_theme_qt(); void set_cursor_theme_qt(QString theme); int get_cursor_size_qt(); void set_cursor_size_qt(int size); //window theme // QStringList get_window_themes_qt(); // QString get_current_window_theme_qt(); // void set_window_theme_qt(QString theme); // /*-------------------fonts of beauty-------------------*/ QString get_default_font_string_qt(QString schema, QString key); bool set_default_font_string_qt(QString schema, QString key, QString type); QString get_font_qt(); // Q_INVOKABLE bool set_font_qt_default(QString font); bool set_font_qt(QString font); QString get_desktop_font_qt(); bool set_desktop_font_qt_default();//when is null ,we set a default value bool set_desktop_font_qt(QString font); QString get_document_font_qt(); // Q_INVOKABLE bool set_document_font_qt_default(QString font); bool set_document_font_qt(QString font); QString get_monospace_font_qt(); // Q_INVOKABLE bool set_monospace_font_qt_default(QString font); bool set_monospace_font_qt(QString font); QString get_window_title_font_qt(); // Q_INVOKABLE bool set_window_title_font_qt_default(QString font); bool set_window_title_font_qt(QString font); double get_font_zoom_qt(); bool set_font_zoom_qt(double zoom); QStringList get_smooth_style_list_qt(); QString get_smooth_style_qt(); bool set_smooth_style_qt(QString style); QStringList get_antialiasing_style_list_qt(); QString get_antialiasing_style_qt(); bool set_antialiasing_style_qt(QString style); /*-------------------scrollbars of beauty-------------------*/ bool set_scrollbars_mode_overlay_qt(); bool set_scrollbars_mode_legacy_qt(); QString get_scrollbars_mode_qt(); /*-------------------touchpad of beauty-------------------*/ bool set_touchpad_enable_qt(bool flag); bool get_touchpad_enable_qt(); bool set_touchscrolling_mode_disabled_qt(); bool set_touchscrolling_mode_edge_qt(); bool set_touchscrolling_mode_twofinger_qt(); QString get_touchscrolling_mode_qt(); bool set_touchscrolling_use_horizontal_qt(bool flag); bool get_touchscrolling_use_horizontal_qt(); int get_mate_touchscrolling_mode_qt(); bool set_mate_touchscrolling_mode_qt(int value); /*-------------------window of beauty-------------------*/ void set_window_button_align_left_qt(); void set_window_button_align_right_qt(); QString get_window_button_align_qt(); bool set_menus_have_icons_qt(bool flag); bool get_menus_have_icons_qt(); QStringList get_titlebar_wheel_qt(); QString get_current_titlebar_wheel_qt(); void set_titlebar_wheel_qt(QString value); QStringList get_titlebar_options_qt(); QString get_current_titlebar_double_qt(); void set_titlebar_double_qt(QString value); // QStringList get_titlebar_middle_qt(); QString get_current_titlebar_middle_qt(); void set_titlebar_middle_qt(QString value); // QStringList get_titlebar_right_qt(); QString get_current_titlebar_right_qt(); void set_titlebar_right_qt(QString value); /*-------------------sound of beauty-------------------*/ void set_sound_event_enable_qt(bool flag); bool get_sound_event_enable_qt(); void set_input_feedback_sounds_enable_qt(bool flag); bool get_input_feedback_sounds_enable_qt(); void set_login_music_enable_qt(bool flag); bool get_login_music_enable_qt(); QString get_sound_theme_qt(); void set_sound_theme_qt(QString theme); /*-------------------filemanager of beauty-------------------*/ void set_location_replace_pathbar_qt(bool flag); bool get_location_replace_pathbar_qt(); void set_auto_mount_media_qt(bool flag); bool get_auto_mount_media_qt(); void set_auto_open_folder_qt(bool flag); bool get_auto_open_folder_qt(); void set_prompt_autorun_programs_qt(bool flag); bool get_prompt_autorun_programs_qt(); void set_thumbnail_icon_size_qt(int size); int get_thumbnail_icon_size_qt(); void set_thumbnail_cache_time_qt(int value); int get_thumbnail_cache_time_qt(); void set_thumbnail_cache_size_qt(int size); int get_thumbnail_cache_size_qt(); QString access_current_desktop_qt(); QString access_current_machine_qt(); // Q_INVOKABLE QString judge_desktop_is_unity_qt(); // Q_INVOKABLE QString judge_desktop_is_cinnamon_qt(); //一键清理扫描 void onekey_scan_function_qt(QStringList selectedList); //-------------------conserve energe---------------- void adjust_screen_gamma_qt(double gamma); double get_screen_gamma_qt(); QStringList get_idle_delay_list_qt(); QString get_current_idle_delay_qt(); void set_current_idle_delay_qt(int value); bool get_lock_enabled_qt(); void set_lock_enabled_qt(bool value); QStringList get_lock_delay_list_qt(); QString get_current_lock_delay_qt(); void set_current_lock_delay_qt(int value); QStringList get_sleep_timeout_list_qt(); QString get_current_critical_low_qt(); void set_current_critical_low_qt(QString value); QString get_current_lid_battery_qt(); void set_current_lid_battery_qt(QString value); QString get_current_lid_ac_qt(); void set_current_lid_ac_qt(QString value); QString get_current_sleep_timeout_display_battery_qt(); void set_current_sleep_timeout_display_battery_qt(int value); QString get_current_sleep_timeout_display_ac_qt(); void set_current_sleep_timeout_display_ac_qt(int value); QString get_current_sleep_timeout_battery_qt(); void set_current_sleep_timeout_battery_qt(int value); QString get_current_sleep_timeout_ac_qt(); void set_current_sleep_timeout_ac_qt(int value); signals: void tellAutoModel(const QStringList &data); void showAutoModel(); void finishScanWork(QString msg); void isScanning(QString msg); void tellCleanerDetailData(const QStringList &data); void tellCleanerDetailStatus(const QString &status); void tellCleanerDetailError(const QString &status); void tellScanResult(QString flag, QString msg); void ssoSuccessSignal(QString displayName, QString emailAddress); void ssoLoginLogoutSignal(bool loginFlag); void bool_value_notify(QString key, bool value); void int_value_notify(QString key, int value); void double_value_notify(QString key, double value); void string_value_notify(QString key, QString value); void receive_source_list_signal(bool result); public slots: void handlerAutoManageData(QStringList data); // void handlerAutoManageData(const QVariantMap &data); void handlerAutoManageStatus(QString status); void handlerAutoManageError(QString status); void handlerScanCleanerData(QStringList data); void handlerScanCleanerStatus(QString status); void handlerScanCleanerError(QString status); //扫描完成槽函数 void handler_scan_complete(QString msg); //扫描过程的函数 void handler_scan_process(QString msg); //扫描的总数 void handler_total_data_transmit(QString flag, QString msg); void handlerYoukerID(QString displayName, QString emailAddress); void handlerLogoutSuccess(); void handlerLoginFail(); // notify changes void handler_notify_boolean(QString key, bool value); void handler_notify_int(QString key, int value); void handler_notify_double(QString key, double value); void handler_notify_string(QString key, QString value); private: QDBusInterface *sessioniface; /*KThread *check_thread; KThread *scan_thread; KThread *onekey_scan_thread;*/ }; #endif // SESSIONDISPATCHER_H youker-assistant/dbusproxy/youkersystemdbus.cpp0000664000175000017500000003742513260315532021244 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "youkersystemdbus.h" #include #include #include #include SystemDispatcher::SystemDispatcher(QObject *parent) : QObject(parent) { systemiface = new QDBusInterface("com.kylin.assistant.systemdaemon", "/com/kylin/assistant/systemdaemon", "com.kylin.assistant.systemdaemon", QDBusConnection::systemBus()); qDebug() << "Starting SystemDispatcher"; QObject::connect(systemiface,SIGNAL(quit_clean(bool)),this,SLOT(handler_interrupt_clean(bool))/*, Qt::QueuedConnection*/); QObject::connect(systemiface,SIGNAL(clean_complete_onekey(QString)),this,SLOT(handler_clear_rubbish_main_onekey(QString))/*, Qt::QueuedConnection*/); QObject::connect(systemiface,SIGNAL(clean_error_onekey(QString)),this,SLOT(handler_clear_rubbish_main_error(QString))/*, Qt::QueuedConnection*/); QObject::connect(systemiface,SIGNAL(status_for_quick_clean(QString,QString)),this,SLOT(handler_status_for_quick_clean(QString,QString))/*, Qt::QueuedConnection*/); QObject::connect(systemiface,SIGNAL(subpage_data_signal(QStringList)),this,SLOT(handlerCleanerSubPageDataSignal(QStringList))); QObject::connect(systemiface,SIGNAL(subpage_status_signal(QString, QString)),this,SLOT(handlerCleanerSubPageStatusSignal(QString, QString))); QObject::connect(systemiface,SIGNAL(subpage_error_signal(QString)),this,SLOT(handlerCleanerSubPageErrorSignal(QString))); QObject::connect(systemiface,SIGNAL(youker_fetch_signal(QString, QStringList)),this,SIGNAL(get_fetch_signal(QString, QStringList))); QObject::connect(systemiface,SIGNAL(youker_apt_signal(QString, QStringList)),this,SIGNAL(get_apt_signal(QString, QStringList))); // QObject::connect(systemiface,SIGNAL(youker_fetch_signal(QString, QStringList)),this,SLOT(handlerFetchSignal(QString, QStringList))); // QObject::connect(systemiface,SIGNAL(youker_apt_signal(QString, QStringList)),this,SLOT(handlerAptSignal(QString, QStringList))); // emit this->dbusInitFinished(); /*thread = new KThread(this); clean_thread = new KThread(this);*/ } SystemDispatcher::~SystemDispatcher() { /*thread->terminate(); thread->wait(); if(thread != NULL) { delete thread; thread = NULL; } clean_thread->terminate(); clean_thread->wait(); if(clean_thread != NULL) { delete clean_thread; clean_thread = NULL; }*/ this->exit_qt(); if (systemiface != NULL) { delete systemiface; systemiface = NULL; } } //void SystemDispatcher::handlerFetchSignal(QString msg_type, QStringList msg) //{ // qDebug() << "fecth----->" << msg_type; // qDebug() << msg; //} //void SystemDispatcher::handlerAptSignal(QString msg_type, QStringList msg) //{ // qDebug() << "apt----->" << msg_type; // qDebug() << msg; //} void SystemDispatcher::adjust_cpufreq_scaling_governer_qt(QString value) { systemiface->call("adjust_cpufreq_scaling_governer", value); } QStringList SystemDispatcher::get_cpufreq_scaling_governer_list_qt() { QDBusReply reply = systemiface->call("get_cpufreq_scaling_governer_list"); return reply.value(); } QString SystemDispatcher::get_current_cpufreq_scaling_governer_qt() { QDBusReply reply = systemiface->call("get_current_cpufreq_scaling_governer"); return reply.value(); } //void SystemDispatcher::handlerCleanerSubPageDataSignal(QStringList data) //{ // emit this->tellCleanerMainData(data); //} bool SystemDispatcher::update_myself() { /*QStringList tmp; QMap data; QEventLoop q; KThread *apt_thread = new KThread(this); // connect(apt_thread, SIGNAL(finished()), apt_thread, SLOT(deleteLater())); apt_thread->initValues(data, tmp, systemiface, "install"); apt_thread->start(); q.exec(); if(apt_thread->isFinished()){ q.quit(); }*/ return true; // QDBusReply reply = systemiface->call("install", "kylin-assistant"); // return reply.value(); } bool SystemDispatcher::update_source() { /*QStringList tmp; QMap data; QEventLoop q; KThread *source_thread = new KThread(this); // connect(source_thread, SIGNAL(finished()), source_thread, SLOT(deleteLater())); source_thread->initValues(data, tmp, systemiface, "update"); source_thread->start(); q.exec(); if(source_thread->isFinished()){ q.quit(); }*/ return true; } bool SystemDispatcher::copy_file_qt(QString filename) { QDBusReply reply = systemiface->call("copy_file", filename); return reply.value(); } bool SystemDispatcher::delete_file_qt(QString filename) { QDBusReply reply = systemiface->call("delete_file", filename); return reply.value(); } //系统清理 void SystemDispatcher::cleanAllSelectItems(QMap selectMap) { systemiface->call("remove_select_items", selectMap); /*if (clean_thread->isRunning()) { qDebug() << "clean_thread is running......"; } else { // if(clean_thread == NULL) { // qDebug() << "clean_thread is null, ready to run......"; // } // else // qDebug() << "clean_thread is not null, ready to run......"; QStringList tmp; QEventLoop q; clean_thread->initValues(selectMap, tmp, systemiface, "remove_select_items"); clean_thread->start(); q.exec(); if(clean_thread->isFinished()){ q.quit(); } } // QElapsedTimer et; // et.start(); // while(et.elapsed()<300) // QCoreApplication::processEvents();*/ } //void SystemDispatcher::kill_root_process_qt(QString pid) { // systemiface->call("kill_root_process", pid); //} bool SystemDispatcher::kill_uk_process_qt() { QDBusReply reply = systemiface->call("kill_uk_process"); return reply.value(); } bool SystemDispatcher::set_cursor_theme_with_root_qt(QString theme) { QDBusReply reply = systemiface->call("set_cursor_theme_with_root", theme); return reply.value(); } QString SystemDispatcher::get_os_name_qt() { QDBusReply reply = systemiface->call("get_os_name"); return reply.value(); } QMap SystemDispatcher::get_computer_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_computer_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get computer info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } bool SystemDispatcher::judge_sensors_exists_qt() { QDBusReply reply = systemiface->call("judge_sensors_exists_hb"); return reply.value(); } QMap SystemDispatcher::get_sensor_info_qt() { /*QMap value; value.insert("IN0", "0.75V"); value.insert("IN2", "1.0V"); value.insert("IN3", "1.5V"); value.insert("IN5", "1.8V"); value.insert("IN6", "2.5V/2"); value.insert("TR1", "3.3V/2"); value.insert("TR2", "5V/3"); value.insert("TR3", "12V/12"); value.insert("TR4", "1.0V"); value.insert("TR5", "45℃"); value.insert("TR6", "50℃"); value.insert("FANIN1", "1800"); return value;*/ QMap value; QDBusReply > reply = systemiface->call("get_sensor_info"); if (reply.isValid()) { value = reply.value(); return value; } else { // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_cpu_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_cpu_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get cpu info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_memory_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_memory_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get memory info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_board_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_board_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get board info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_harddisk_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_harddisk_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get harddisk info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_networkcard_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_networkcard_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get networkcard info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_monitor_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_monitor_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get monitor info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_cdrom_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_cdrom_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get cdrom info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QMap SystemDispatcher::get_audiocard_info_qt() { QMap value; QDBusReply > reply = systemiface->call("get_audiocard_info"); if (reply.isValid()) { value = reply.value(); return value; } else { qDebug() << "get audiocard info failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } QString SystemDispatcher::get_time_value_qt() { QDBusReply reply = systemiface->call("get_time_value"); return reply.value(); } void SystemDispatcher::exit_qt() { systemiface->call("exit"); } QString SystemDispatcher::get_system_daemon_qt() { QDBusReply reply = systemiface->call("get_system_daemon"); return reply.value(); } //void SystemDispatcher::set_homedir_qt() { // QString homedir = QDir::homePath(); // systemiface->call("set_homedir", homedir); //} void SystemDispatcher::set_user_homedir_qt() { QString homedir = QDir::homePath(); systemiface->call("set_user_homedir", homedir); } void SystemDispatcher::handler_interrupt_clean(bool status) { emit policykitCleanSignal(status); } void SystemDispatcher::handler_clear_rubbish_main_onekey(QString msg) { emit finishCleanWorkMain(msg); } void SystemDispatcher::handler_clear_rubbish_main_error(QString msg) { emit finishCleanWorkMainError(msg); } void SystemDispatcher::handler_status_for_quick_clean(QString type, QString status) { emit quickCleanProcess(type, status); } //-----------------------sound------------------------ QStringList SystemDispatcher::get_sound_themes_qt() { QDBusReply reply = systemiface->call("get_sound_themes"); return reply.value(); } void SystemDispatcher::handlerCleanerSubPageDataSignal(QStringList data) { emit this->tellCleanerMainData(data); } void SystemDispatcher::handlerCleanerSubPageStatusSignal(QString status, QString domain) { if(status == "Complete:All" && domain == "finish") { emit sendCleanOverSignal(); } else { emit this->tellCleanerMainStatus(status, domain); } } void SystemDispatcher::handlerCleanerSubPageErrorSignal(QString status) { emit sendCleanErrorSignal(status); } //QStringList SystemDispatcher::get_sounds_qt() { // QDBusReply reply = systemiface->call("get_sounds"); // return reply.value(); //} //void SystemDispatcher::replace_sound_file_qt(QString origfile, QString targetfile) { // systemiface->call("replace_sound_file", origfile, targetfile); //} //void SystemDispatcher::restore_sound_file_qt(QString targetfile) { // systemiface->call("restore_sound_file", targetfile); //} //void SystemDispatcher::restore_all_sound_file_qt(QString soundtheme) { // systemiface->call("restore_all_sound_file", soundtheme); //} //-----------------------others------------------------ void SystemDispatcher::custom_plymouth_bg_qt(QString plymouthName) { systemiface->call("custom_plymouth_bg", plymouthName); } void SystemDispatcher::add_new_plymouth_qt(QString customBG, QString plymouthName) { systemiface->call("add_new_plymouth", customBG, plymouthName); } QStringList SystemDispatcher::get_existing_plymouth_list_qt() { QDBusReply reply = systemiface->call("get_existing_plymouth_list"); return reply.value(); } void SystemDispatcher::plymouth_init_check_qt() { systemiface->call("plymouth_init_check"); } QString SystemDispatcher::get_image_path_qt(QString name) { QDBusReply reply = systemiface->call("get_image_path", name); return reply.value(); } QString SystemDispatcher::delete_plymouth_qt(QString plymouthName) { QDBusReply reply = systemiface->call("delete_plymouth", plymouthName); return reply.value(); } //一键清理 void SystemDispatcher::clean_by_main_one_key_qt() { QStringList argList; argList << "1" << "1" << "1"; systemiface->call("onekey_clean_crufts_function", argList); /*if (thread->isRunning()) { qDebug() << "onekey_clean_thread is running......"; } else { // qDebug() << "onekey_clean_thread is ready to run......"; QStringList argList; argList << "1" << "1" << "1"; QMap data; thread->initValues(data, argList, systemiface, "onekey_clean_crufts_function"); thread->start(); }*/ } youker-assistant/dbusproxy/youkersessiondbus.cpp0000664000175000017500000012765013260315532021403 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "youkersessiondbus.h" #include SessionDispatcher::SessionDispatcher(QObject *parent) : QObject(parent) { sessioniface = new QDBusInterface("com.kylin.assistant.sessiondaemon", "/com/kylin/assistant/sessiondaemon", "com.kylin.assistant.sessiondaemon", QDBusConnection::sessionBus()); qDebug() << "Starting SessionDispatcher"; // QObject::connect(sessioniface, SIGNAL(autostartmanage_data_signal(QVariantMap)), this, SLOT(handlerAutoManageData(QVariantMap))); QObject::connect(sessioniface, SIGNAL(autostartmanage_data_signal(QStringList)), this, SLOT(handlerAutoManageData(QStringList))); QObject::connect(sessioniface, SIGNAL(autostartmanage_status_signal(QString)), this, SLOT(handlerAutoManageStatus(QString))); QObject::connect(sessioniface, SIGNAL(autostartmanage_error_signal(QString)), this, SLOT(handlerAutoManageError(QString))); QObject::connect(sessioniface, SIGNAL(subpage_data_signal(QStringList)), this, SLOT(handlerScanCleanerData(QStringList))); QObject::connect(sessioniface, SIGNAL(subpage_status_signal(QString)), this, SLOT(handlerScanCleanerStatus(QString))); QObject::connect(sessioniface, SIGNAL(subpage_error_signal(QString)), this, SLOT(handlerScanCleanerError(QString))); // thread = new KThread(this); /* //kobe check_thread = new KThread(this); scan_thread = new KThread(this); onekey_scan_thread = new KThread(this); */ QObject::connect(sessioniface, SIGNAL(display_scan_process(QString)), this, SLOT(handler_scan_process(QString))); QObject::connect(sessioniface, SIGNAL(scan_complete(QString)), this, SLOT(handler_scan_complete(QString))); QObject::connect(sessioniface, SIGNAL(total_data_transmit(QString, QString)), this, SLOT(handler_total_data_transmit(QString,QString))); QObject::connect(sessioniface, SIGNAL(youkerid_whoami_signal(QString, QString)), this, SLOT(handlerYoukerID(QString, QString))); QObject::connect(sessioniface, SIGNAL(youkerid_logout_signal()), this, SLOT(handlerLogoutSuccess())); QObject::connect(sessioniface, SIGNAL(youkerid_login_fail_signal()), this, SLOT(handlerLoginFail())); QObject::connect(sessioniface, SIGNAL(notify_boolean(QString, bool)), this, SLOT(handler_notify_boolean(QString, bool))); QObject::connect(sessioniface, SIGNAL(notify_int(QString, int)), this, SLOT(handler_notify_int(QString, int))); QObject::connect(sessioniface, SIGNAL(notify_double(QString, double)), this, SLOT(handler_notify_double(QString, double))); QObject::connect(sessioniface, SIGNAL(notify_string(QString, QString)), this, SLOT(handler_notify_string(QString, QString))); QObject::connect(sessioniface, SIGNAL(check_source_list_signal(bool)), this, SIGNAL(receive_source_list_signal(bool))); //pingback this->submit_uk_pingback(); } SessionDispatcher::~SessionDispatcher() { /*check_thread->terminate(); check_thread->wait(); if(check_thread != NULL) { delete check_thread; check_thread = NULL; } scan_thread->terminate(); scan_thread->wait(); if(scan_thread != NULL) { delete scan_thread; scan_thread = NULL; } onekey_scan_thread->terminate(); onekey_scan_thread->wait(); if(onekey_scan_thread != NULL) { delete onekey_scan_thread; onekey_scan_thread = NULL; }*/ // thread->terminate(); // thread->wait(); // if(thread != NULL) { // delete thread; // thread = NULL; // } this->exit_qt(); if (sessioniface != NULL) { delete sessioniface; sessioniface = NULL; } } //dbus服务退出 void SessionDispatcher::exit_qt() { sessioniface->call("exit"); } QString SessionDispatcher::get_os_release_qt() { QDBusReply reply = sessioniface->call("get_os_release"); return reply.value(); } bool SessionDispatcher::submit_uk_pingback() { QDBusReply reply = sessioniface->call("submit_uk_pingback", qApp->applicationVersion()); return reply.value(); } QStringList SessionDispatcher::checkNewVersion() { QDBusReply reply = sessioniface->call("currently_installed_version"); return reply.value(); } void SessionDispatcher::start_check_source_useable_qt() { sessioniface->call("start_check_source_useable"); /*if (check_thread->isRunning()) { qDebug() << "check_thread is running......"; } else { QMap data; QStringList tmplist; check_thread->initValues(data, tmplist, sessioniface, "start_check_source_useable"); check_thread->start(); // qDebug() << "check_thread is ready to run......"; } return true;*/ } void SessionDispatcher::runApp(QString pkgname) { sessioniface->call("run_selected_app", pkgname); } void SessionDispatcher::handlerAutoManageData(QStringList data) //void SessionDispatcher::handlerAutoManageData(const QVariantMap &data) { emit this->tellAutoModel(data); } void SessionDispatcher::handlerAutoManageStatus(QString status) { emit this->showAutoModel(); } void SessionDispatcher::handlerAutoManageError(QString status) { } void SessionDispatcher::getAutoStartAppStatus() { sessioniface->call("get_current_autostart_status"); } bool SessionDispatcher::getSingleAutoStartStatus(QString abs_path) { QDBusReply reply = sessioniface->call("get_current_single_autostart_status", abs_path); return reply.value(); } void SessionDispatcher::changeAutoStartAppStatus(QString appName) { sessioniface->call("change_autostart_status", appName); } void SessionDispatcher::handlerScanCleanerData(QStringList data) { emit this->tellCleanerDetailData(data); } void SessionDispatcher::handlerScanCleanerStatus(QString status) { emit this->tellCleanerDetailStatus(status); } void SessionDispatcher::handlerScanCleanerError(QString status) { emit this->tellCleanerDetailError(status); } //bool SessionDispatcher::judge_camera_qt() { // QDBusReply reply = sessioniface->call("judge_camera"); // return reply.value(); //} //void SessionDispatcher::call_camera_qt() { // sessioniface->call("call_camera"); //// if (thread->isRunning()) { //// qDebug() << "camera_thread is running......"; //// } //// else { //// qDebug() << "camera_thread is ready to run......"; //// QStringList tmp; //// QMap data; //// thread->initValues(data, tmp, sessioniface, "call_camera"); //// thread->start(); //// } //} bool SessionDispatcher::judge_power_is_exists_qt() { QDBusReply reply = sessioniface->call("judge_power_is_exists"); return reply.value(); } QMap SessionDispatcher::read_battery_info_qt() { QMap value; QDBusReply > reply = sessioniface->call("read_battery_info"); if (reply.isValid()) { value = reply.value(); if (value.contains("POWER_SUPPLY_VOLTAGE_NOW")) { value["POWER_SUPPLY_VOLTAGE_NOW"] = QString::number(value["POWER_SUPPLY_VOLTAGE_NOW"].toDouble()/1000000, 'f', 1) + "V"; } if (value.contains("POWER_SUPPLY_ENERGY_FULL_DESIGN")) { value["POWER_SUPPLY_ENERGY_FULL_DESIGN"] = QString::number(value["POWER_SUPPLY_ENERGY_FULL_DESIGN"].toDouble()/1000000, 'f', 1) + "Wh"; } if (value.contains("POWER_SUPPLY_ENERGY_FULL")) { value["POWER_SUPPLY_ENERGY_FULL"] = QString::number(value["POWER_SUPPLY_ENERGY_FULL"].toDouble()/1000000, 'f', 1) + "Wh"; } if (value.contains("POWER_SUPPLY_ENERGY_NOW")) { value["POWER_SUPPLY_ENERGY_NOW"] = QString::number(value["POWER_SUPPLY_ENERGY_NOW"].toDouble()/1000000, 'f', 1) + "Wh"; } return value; } else { qDebug() << "get battery_message failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } void SessionDispatcher::open_folder_qt(QString path) { sessioniface->call("open_folder", path); } void SessionDispatcher::check_user_qt() { // sessioniface->call("check_user"); } //弹出登录框 void SessionDispatcher::popup_login_dialog() { //add ubuntukylin sso // sessioniface->call("slot_do_login_account"); } void SessionDispatcher::popup_register_dialog() { //add ubuntukylin sso // sessioniface->call("slot_do_register"); } //退出登录 void SessionDispatcher::logout_ubuntukylin_account() { //add ubuntukylin sso // sessioniface->call("slot_do_logout"); } void SessionDispatcher::handlerYoukerID(QString displayName, QString emailAddress) { emit this->ssoSuccessSignal(displayName, emailAddress); } void SessionDispatcher::handlerLogoutSuccess() { emit this->ssoLoginLogoutSignal(true); } void SessionDispatcher::handlerLoginFail() { emit this->ssoLoginLogoutSignal(false); } void SessionDispatcher::handler_scan_complete(QString msg) { emit finishScanWork(msg); } void SessionDispatcher::handler_scan_process(QString msg) { emit isScanning(msg); } void SessionDispatcher::handler_total_data_transmit(QString flag, QString msg) { emit tellScanResult(flag, msg); } //QString SessionDispatcher::get_locale_version() { // QString locale = QLocale::system().name(); // return locale; //} //一键扫描 void SessionDispatcher::onekey_scan_function_qt(QStringList selectedList) { // QMap data; // thread->initValues(data, selectedList, sessioniface, "onekey_scan_function"); // thread->start(); sessioniface->call("onekey_scan_function", selectedList); /*if (scan_thread->isRunning()) { qDebug() << "onekey_scan_thread is running......"; } else { // qDebug() << "onekey_scan_thread is ready to run......"; QMap data; onekey_scan_thread->initValues(data, selectedList, sessioniface, "onekey_scan_function"); onekey_scan_thread->start(); }*/ } //系统扫描 void SessionDispatcher::scanSystemCleanerItems(QMap data) { sessioniface->call("get_scan_result", data); /*if (scan_thread->isRunning()) { qDebug() << "scan_thread is running......"; } else { // if (scan_thread == NULL) // qDebug() << "scan_thread is null, ready to run......"; // else // qDebug() << "scan_thread is not null, ready to run......"; QStringList tmp; scan_thread->initValues(data, tmp, sessioniface, "get_scan_result"); scan_thread->start(); // QElapsedTimer et; // et.start(); // while(et.elapsed()<300) // QCoreApplication::processEvents(); }*/ } QString SessionDispatcher::getHomePath() { QString homepath = QDir::homePath(); return homepath; } //QString SessionDispatcher::get_session_daemon_qt() { // QDBusReply reply = sessioniface->call("get_session_daemon"); // return reply.value(); //} QMap SessionDispatcher::get_system_message_qt() { QMap value; QDBusReply > reply = sessioniface->call("get_system_message"); if (reply.isValid()) { value = reply.value(); return value; // systemInfo.clear(); // systemInfo = value; //把当前登录的用户名存放到QSetting配置文件中,方便任务管理器使用 // mSettings->beginGroup("user"); // mSettings->setValue("currentName", systemInfo["currrent_user"].toString()); // mSettings->endGroup(); // mSettings->sync(); } else { qDebug() << "get pc_message failed!"; // QMap value; // value.insert("kylinkobe", "kylinkobe"); return value; } } /*-----------------------------desktop of beauty-----------------------------*/ bool SessionDispatcher::set_show_desktop_icons_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_desktop_icons", flag); return reply.value(); } bool SessionDispatcher::get_show_desktop_icons_qt() { QDBusReply reply = sessioniface->call("get_show_desktop_icons"); return reply.value(); } bool SessionDispatcher::set_show_computer_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_computer", flag); return reply.value(); } bool SessionDispatcher::get_show_computer_qt() { QDBusReply reply = sessioniface->call("get_show_computer"); return reply.value(); } bool SessionDispatcher::set_show_homefolder_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_homefolder", flag); return reply.value(); } bool SessionDispatcher::get_show_homefolder_qt() { QDBusReply reply = sessioniface->call("get_show_homefolder"); return reply.value(); } bool SessionDispatcher::set_show_network_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_network", flag); return reply.value(); } bool SessionDispatcher::get_show_network_qt() { QDBusReply reply = sessioniface->call("get_show_network"); return reply.value(); } bool SessionDispatcher::set_show_trash_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_trash", flag); return reply.value(); } bool SessionDispatcher::get_show_trash_qt() { QDBusReply reply = sessioniface->call("get_show_trash"); return reply.value(); } bool SessionDispatcher::set_show_devices_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_devices", flag); return reply.value(); } bool SessionDispatcher::get_show_devices_qt() { QDBusReply reply = sessioniface->call("get_show_devices"); return reply.value(); } //bool SessionDispatcher::get_show_cinnamon_desktop_icons_qt() { // QDBusReply reply = sessioniface->call("get_show_cinnamon_desktop_icons"); // return reply.value(); //} //bool SessionDispatcher::set_show_cinnamon_desktop_icons_qt(bool flag) { // QDBusReply reply = sessioniface->call("set_show_cinnamon_desktop_icons", flag); // return reply.value(); //} //bool SessionDispatcher::get_show_cinnamon_computer_qt() { // QDBusReply reply = sessioniface->call("get_show_cinnamon_computer"); // return reply.value(); //} //bool SessionDispatcher::set_show_cinnamon_computer_qt(bool flag) { // QDBusReply reply = sessioniface->call("set_show_cinnamon_computer", flag); // return reply.value(); //} //bool SessionDispatcher::get_show_cinnamon_homefolder_qt() { // QDBusReply reply = sessioniface->call("get_show_cinnamon_homefolder"); // return reply.value(); //} //bool SessionDispatcher::set_show_cinnamon_homefolder_qt(bool flag) { // QDBusReply reply = sessioniface->call("set_show_cinnamon_homefolder", flag); // return reply.value(); //} //bool SessionDispatcher::get_show_cinnamon_network_qt() { // QDBusReply reply = sessioniface->call("get_show_cinnamon_network"); // return reply.value(); //} //bool SessionDispatcher::set_show_cinnamon_network_qt(bool flag) { // QDBusReply reply = sessioniface->call("set_show_cinnamon_network", flag); // return reply.value(); //} //bool SessionDispatcher::get_show_cinnamon_trash_qt() { // QDBusReply reply = sessioniface->call("get_show_cinnamon_trash"); // return reply.value(); //} //bool SessionDispatcher::set_show_cinnamon_trash_qt(bool flag) { // QDBusReply reply = sessioniface->call("set_show_cinnamon_trash", flag); // return reply.value(); //} //bool SessionDispatcher::get_show_cinnamon_devices_qt() { // QDBusReply reply = sessioniface->call("get_show_cinnamon_devices"); // return reply.value(); //} //bool SessionDispatcher::set_show_cinnamon_devices_qt(bool flag) { // QDBusReply reply = sessioniface->call("set_show_cinnamon_devices", flag); // return reply.value(); //} /*-----------------------------unity of beauty-----------------------------*/ //void SessionDispatcher::set_default_launcher_have_showdesktopicon_qt() { // sessioniface->call("set_default_launcher_have_showdesktopicon"); //} bool SessionDispatcher::set_launcher_autohide_qt(bool flag) { QDBusReply reply = sessioniface->call("set_launcher_autohide", flag); return reply.value(); // return true; } bool SessionDispatcher::get_launcher_autohide_qt() { QDBusReply reply = sessioniface->call("get_launcher_autohide"); return reply.value(); // return true; } bool SessionDispatcher::set_launcher_icon_size_qt(int num) { QDBusReply reply = sessioniface->call("set_launcher_icon_size", num); return reply.value(); } int SessionDispatcher::get_launcher_icon_size_qt() { QDBusReply reply = sessioniface->call("get_launcher_icon_size"); return reply.value(); // return 32; } bool SessionDispatcher::set_launcher_have_showdesktopicon_qt(bool flag) { QDBusReply reply = sessioniface->call("set_launcher_have_showdesktopicon", flag); return reply.value(); // return true; } bool SessionDispatcher::get_launcher_have_showdesktopicon_qt() { QDBusReply reply = sessioniface->call("get_launcher_have_showdesktopicon"); return reply.value(); // return true; } //-----------------------------------------------mate---------------------------------------------- bool SessionDispatcher::set_mate_panel_autohide_qt(QString positon, bool flag) { QDBusReply reply = sessioniface->call("set_mate_panel_autohide", positon, flag); return reply.value(); } bool SessionDispatcher::get_mate_panel_autohide_qt(QString positon) { QDBusReply reply = sessioniface->call("get_mate_panel_autohide", positon); return reply.value(); } bool SessionDispatcher::set_mate_panel_icon_size_qt(QString positon, int num) { QDBusReply reply = sessioniface->call("set_mate_panel_icon_size", positon, num); return reply.value(); } int SessionDispatcher::get_mate_panel_icon_size_qt(QString positon) { QDBusReply reply = sessioniface->call("get_mate_panel_icon_size", positon); return reply.value(); } //透明度 double SessionDispatcher::get_launcher_transparency_qt() { QDBusReply reply = sessioniface->call("get_launcher_transparency"); return reply.value(); // return 0.0; } bool SessionDispatcher::set_launcher_transparency_qt(double opacity) { QDBusReply reply = sessioniface->call("set_launcher_transparency", opacity); return reply.value(); } //图标背景 QStringList SessionDispatcher::get_all_launcher_icon_colourings_qt() { QDBusReply reply = sessioniface->call("get_all_launcher_icon_colourings"); return reply.value(); // return QStringList(); } int SessionDispatcher::get_launcher_icon_colouring_qt() { QDBusReply reply = sessioniface->call("get_launcher_icon_colouring"); return reply.value(); // return 0; } bool SessionDispatcher::set_launcher_icon_colouring_qt(int colouring) { QDBusReply reply = sessioniface->call("set_launcher_icon_colouring", colouring); return reply.value(); } //Dash背景模糊类型 int SessionDispatcher::get_dash_blur_experimental_qt() { QDBusReply reply = sessioniface->call("get_dash_blur_experimental"); return reply.value(); } bool SessionDispatcher::set_dash_blur_experimental_qt(int blur) { QDBusReply reply = sessioniface->call("set_dash_blur_experimental", blur); return reply.value(); } //面板菜单透明度 double SessionDispatcher::get_panel_transparency_qt() { QDBusReply reply = sessioniface->call("get_panel_transparency"); return reply.value(); } bool SessionDispatcher::set_panel_transparency_qt(double opacity) { QDBusReply reply = sessioniface->call("set_panel_transparency", opacity); return reply.value(); } //日期时间格式 QStringList SessionDispatcher::get_all_time_format_qt() { QDBusReply reply = sessioniface->call("get_all_time_format"); return reply.value(); } QString SessionDispatcher::get_time_format_qt() { QDBusReply reply = sessioniface->call("get_time_format"); return reply.value(); } bool SessionDispatcher::set_time_format_qt(QString format) { QDBusReply reply = sessioniface->call("set_time_format", format); return reply.value(); } bool SessionDispatcher::get_show_seconds_qt() { QDBusReply reply = sessioniface->call("get_show_seconds"); return reply.value(); } bool SessionDispatcher::set_show_seconds_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_seconds", flag); return reply.value(); } bool SessionDispatcher::get_show_week_qt() { QDBusReply reply = sessioniface->call("get_show_week"); return reply.value(); } bool SessionDispatcher::set_show_week_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_week", flag); return reply.value(); } bool SessionDispatcher::get_show_date_qt() { QDBusReply reply = sessioniface->call("get_show_date"); return reply.value(); } bool SessionDispatcher::set_show_date_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_date", flag); return reply.value(); } //电源 QStringList SessionDispatcher::get_all_power_icon_policy_qt() { QDBusReply reply = sessioniface->call("get_all_power_icon_policy"); return reply.value(); } QString SessionDispatcher::get_power_icon_policy_qt() { QDBusReply reply = sessioniface->call("get_power_icon_policy"); return reply.value(); } bool SessionDispatcher::set_power_icon_policy_qt(QString format) { QDBusReply reply = sessioniface->call("set_power_icon_policy", format); return reply.value(); } bool SessionDispatcher::get_show_power_time_qt() { QDBusReply reply = sessioniface->call("get_show_power_time"); return reply.value(); } bool SessionDispatcher::set_show_power_time_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_power_time", flag); return reply.value(); } bool SessionDispatcher::get_show_power_percentage_qt() { QDBusReply reply = sessioniface->call("get_show_power_percentage"); return reply.value(); } bool SessionDispatcher::set_show_power_percentage_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_power_percentage", flag); return reply.value(); } //--------------------------mate-------------------- bool SessionDispatcher::get_show_apps_qt() { QDBusReply reply = sessioniface->call("get_show_apps"); return reply.value(); } bool SessionDispatcher::set_show_apps_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_apps", flag); return reply.value(); } bool SessionDispatcher::get_show_desktop_qt() { QDBusReply reply = sessioniface->call("get_show_desktop"); return reply.value(); } bool SessionDispatcher::set_show_desktop_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_desktop", flag); return reply.value(); } bool SessionDispatcher::get_show_icon_qt() { QDBusReply reply = sessioniface->call("get_show_icon"); return reply.value(); } bool SessionDispatcher::set_show_icon_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_icon", flag); return reply.value(); } bool SessionDispatcher::get_show_places_qt() { QDBusReply reply = sessioniface->call("get_show_places"); return reply.value(); } bool SessionDispatcher::set_show_places_qt(bool flag) { QDBusReply reply = sessioniface->call("set_show_places", flag); return reply.value(); } /*-----------------------------theme of beauty-----------------------------*/ QStringList SessionDispatcher::get_themes_qt() { QDBusReply reply = sessioniface->call("get_themes"); return reply.value(); } QString SessionDispatcher::get_theme_qt() { QDBusReply reply = sessioniface->call("get_theme"); return reply.value(); } void SessionDispatcher::set_theme_qt(QString theme) { sessioniface->call("set_theme", theme); } QStringList SessionDispatcher::get_icon_themes_qt() { QDBusReply reply = sessioniface->call("get_icon_themes"); return reply.value(); } QString SessionDispatcher::get_icon_theme_qt() { QDBusReply reply = sessioniface->call("get_icon_theme"); return reply.value(); } void SessionDispatcher::set_icon_theme_qt(QString theme) { sessioniface->call("set_icon_theme", theme); } QStringList SessionDispatcher::get_cursor_themes_qt() { QDBusReply reply = sessioniface->call("get_cursor_themes"); return reply.value(); } QString SessionDispatcher::get_cursor_theme_qt() { QDBusReply reply = sessioniface->call("get_cursor_theme"); return reply.value(); } void SessionDispatcher::set_cursor_theme_qt(QString theme) { sessioniface->call("set_cursor_theme", theme); } int SessionDispatcher::get_cursor_size_qt() { QDBusReply reply = sessioniface->call("get_cursor_size"); return reply.value(); } void SessionDispatcher::set_cursor_size_qt(int size) { sessioniface->call("set_cursor_size", size); } //window theme //QStringList SessionDispatcher::get_window_themes_qt() { // QDBusReply reply = sessioniface->call("get_window_themes"); // return reply.value(); //} //QString SessionDispatcher::get_current_window_theme_qt() { // QDBusReply reply = sessioniface->call("get_current_window_theme"); // return reply.value(); //} //void SessionDispatcher::set_window_theme_qt(QString theme) { // sessioniface->call("set_window_theme", theme); //} QString SessionDispatcher::get_default_font_string_qt(QString schema, QString key) { QDBusReply reply = sessioniface->call("get_default_font_string", schema, key); return reply.value(); } bool SessionDispatcher::set_default_font_string_qt(QString schema, QString key, QString type) { QDBusReply reply = sessioniface->call("set_default_font", schema, key, type); return reply.value(); } QString SessionDispatcher::get_font_qt() { QDBusReply reply = sessioniface->call("get_font"); return reply.value(); } //bool SessionDispatcher::set_font_qt_default(QString font) { // QDBusReply reply = sessioniface->call("set_font", font); // return reply.value(); //} bool SessionDispatcher::set_font_qt(QString font) { QDBusReply reply = sessioniface->call("set_font", font); return reply.value(); } QString SessionDispatcher::get_desktop_font_qt() { QDBusReply reply = sessioniface->call("get_desktop_font"); return reply.value(); } bool SessionDispatcher::set_desktop_font_qt(QString font) { QDBusReply reply = sessioniface->call("set_desktop_font", font); return reply.value(); } bool SessionDispatcher::set_desktop_font_qt_default() { QDBusReply reply = sessioniface->call("set_desktop_font", "Ubuntu 11"); return reply.value(); } QString SessionDispatcher::get_document_font_qt() { QDBusReply reply = sessioniface->call("get_document_font"); return reply.value(); } //bool SessionDispatcher::set_document_font_qt_default(QString font) { // QDBusReply reply = sessioniface->call("set_document_font", font); // return reply.value(); //} bool SessionDispatcher::set_document_font_qt(QString font) { QDBusReply reply = sessioniface->call("set_document_font", font); return reply.value(); } QString SessionDispatcher::get_monospace_font_qt() { QDBusReply reply = sessioniface->call("get_monospace_font"); return reply.value(); } //bool SessionDispatcher::set_monospace_font_qt_default(QString font) { // QDBusReply reply = sessioniface->call("set_monospace_font", font); // return reply.value(); //} bool SessionDispatcher::set_monospace_font_qt(QString font) { QDBusReply reply = sessioniface->call("set_monospace_font", font); return reply.value(); } QString SessionDispatcher::get_window_title_font_qt() { QDBusReply reply = sessioniface->call("get_window_title_font"); return reply.value(); } //bool SessionDispatcher::set_window_title_font_qt_default(QString font) { // QDBusReply reply = sessioniface->call("set_window_title_font", font); // return reply.value(); //} bool SessionDispatcher::set_window_title_font_qt(QString font) { QDBusReply reply = sessioniface->call("set_window_title_font", font); return reply.value(); } double SessionDispatcher::get_font_zoom_qt() { QDBusReply reply = sessioniface->call("get_font_zoom"); return reply.value(); } bool SessionDispatcher::set_font_zoom_qt(double zoom) { QDBusReply reply = sessioniface->call("set_font_zoom", zoom); return reply.value(); } QStringList SessionDispatcher::get_smooth_style_list_qt() { QDBusReply reply = sessioniface->call("get_smooth_style_list"); return reply.value(); } QString SessionDispatcher::get_smooth_style_qt() { QDBusReply reply = sessioniface->call("get_smooth_style"); return reply.value(); } bool SessionDispatcher::set_smooth_style_qt(QString style) { QDBusReply reply = sessioniface->call("set_smooth_style", style); return reply.value(); } QStringList SessionDispatcher::get_antialiasing_style_list_qt() { QDBusReply reply = sessioniface->call("get_antialiasing_style_list"); return reply.value(); } QString SessionDispatcher::get_antialiasing_style_qt() { QDBusReply reply = sessioniface->call("get_antialiasing_style"); return reply.value(); } bool SessionDispatcher::set_antialiasing_style_qt(QString style) { QDBusReply reply = sessioniface->call("set_antialiasing_style", style); return reply.value(); } /*-----------------------------scrollbars of beauty-----------------------------*/ bool SessionDispatcher::set_scrollbars_mode_overlay_qt() { QDBusReply reply = sessioniface->call("set_scrollbars_mode_overlay"); return reply.value(); } bool SessionDispatcher::set_scrollbars_mode_legacy_qt() { QDBusReply reply = sessioniface->call("set_scrollbars_mode_legacy"); return reply.value(); } QString SessionDispatcher::get_scrollbars_mode_qt() { QDBusReply reply = sessioniface->call("get_scrollbars_mode"); return reply.value(); } /*-----------------------------touchpad of beauty-----------------------------*/ bool SessionDispatcher::set_touchpad_enable_qt(bool flag) { QDBusReply reply = sessioniface->call("set_touchpad_enable", flag); return reply.value(); } bool SessionDispatcher::get_touchpad_enable_qt() { QDBusReply reply = sessioniface->call("get_touchpad_enable"); return reply.value(); } bool SessionDispatcher::set_touchscrolling_mode_disabled_qt() { QDBusReply reply = sessioniface->call("set_touchscrolling_mode_disabled"); return reply.value(); } bool SessionDispatcher::set_touchscrolling_mode_edge_qt() { QDBusReply reply = sessioniface->call("set_touchscrolling_mode_edge"); return reply.value(); } bool SessionDispatcher::set_touchscrolling_mode_twofinger_qt() { QDBusReply reply = sessioniface->call("set_touchscrolling_mode_twofinger"); return reply.value(); } QString SessionDispatcher::get_touchscrolling_mode_qt() { QDBusReply reply = sessioniface->call("get_touchscrolling_mode"); return reply.value(); } bool SessionDispatcher::set_touchscrolling_use_horizontal_qt(bool flag) { QDBusReply reply = sessioniface->call("set_touchscrolling_use_horizontal", flag); return reply.value(); } bool SessionDispatcher::get_touchscrolling_use_horizontal_qt() { QDBusReply reply = sessioniface->call("get_touchscrolling_use_horizontal"); return reply.value(); } int SessionDispatcher::get_mate_touchscrolling_mode_qt() { QDBusReply reply = sessioniface->call("get_mate_touchscrolling_mode"); return reply.value(); } bool SessionDispatcher::set_mate_touchscrolling_mode_qt(int value) { QDBusReply reply = sessioniface->call("set_mate_touchscrolling_mode", value); return reply.value(); } /*-----------------------------window of beauty-----------------------------*/ void SessionDispatcher::set_window_button_align_left_qt() { sessioniface->call("set_window_button_align_left"); } void SessionDispatcher::set_window_button_align_right_qt() { sessioniface->call("set_window_button_align_right"); } QString SessionDispatcher::get_window_button_align_qt() { QDBusReply reply = sessioniface->call("get_window_button_align"); return reply.value(); } bool SessionDispatcher::set_menus_have_icons_qt(bool flag) { QDBusReply reply = sessioniface->call("set_menus_have_icons", flag); return reply.value(); } bool SessionDispatcher::get_menus_have_icons_qt() { QDBusReply reply = sessioniface->call("get_menus_have_icons"); return reply.value(); } QStringList SessionDispatcher::get_titlebar_wheel_qt() { QDBusReply reply = sessioniface->call("get_titlebar_wheel"); return reply.value(); } QString SessionDispatcher::get_current_titlebar_wheel_qt() { QDBusReply reply = sessioniface->call("get_current_titlebar_wheel"); return reply.value(); } void SessionDispatcher::set_titlebar_wheel_qt(QString value) { sessioniface->call("set_titlebar_wheel", value); } QStringList SessionDispatcher::get_titlebar_options_qt() { QDBusReply reply = sessioniface->call("get_titlebar_options"); return reply.value(); } QString SessionDispatcher::get_current_titlebar_double_qt() { QDBusReply reply = sessioniface->call("get_current_titlebar_double"); return reply.value(); } void SessionDispatcher::set_titlebar_double_qt(QString value) { sessioniface->call("set_titlebar_double", value); } //QStringList SessionDispatcher::get_titlebar_middle_qt() { // QDBusReply reply = sessioniface->call("get_titlebar_middle"); // return reply.value(); //} QString SessionDispatcher::get_current_titlebar_middle_qt() { QDBusReply reply = sessioniface->call("get_current_titlebar_middle"); return reply.value(); } void SessionDispatcher::set_titlebar_middle_qt(QString value) { sessioniface->call("set_titlebar_middle", value); } //QStringList SessionDispatcher::get_titlebar_right_qt() { // QDBusReply reply = sessioniface->call("get_titlebar_right"); // return reply.value(); //} QString SessionDispatcher::get_current_titlebar_right_qt() { QDBusReply reply = sessioniface->call("get_current_titlebar_right"); return reply.value(); } void SessionDispatcher::set_titlebar_right_qt(QString value) { sessioniface->call("set_titlebar_right", value); } /*-----------------------------sound of beauty-----------------------------*/ bool SessionDispatcher::get_sound_event_enable_qt() { QDBusReply reply = sessioniface->call("get_sound_event_enable"); return reply.value(); } void SessionDispatcher::set_sound_event_enable_qt(bool flag) { sessioniface->call("set_sound_event_enable", flag); } bool SessionDispatcher::get_input_feedback_sounds_enable_qt() { QDBusReply reply = sessioniface->call("get_input_feedback_sounds_enable"); return reply.value(); } void SessionDispatcher::set_input_feedback_sounds_enable_qt(bool flag) { sessioniface->call("set_input_feedback_sounds_enable", flag); } void SessionDispatcher::set_login_music_enable_qt(bool flag) { sessioniface->call("set_login_music_enable", flag); } bool SessionDispatcher::get_login_music_enable_qt() { QDBusReply reply = sessioniface->call("get_login_music_enable"); return reply.value(); } QString SessionDispatcher::get_sound_theme_qt() { QDBusReply reply = sessioniface->call("get_sound_theme"); return reply.value(); } void SessionDispatcher::set_sound_theme_qt(QString theme) { sessioniface->call("set_sound_theme", theme); } void SessionDispatcher::set_location_replace_pathbar_qt(bool flag) { sessioniface->call("set_location_replace_pathbar", flag); } bool SessionDispatcher::get_location_replace_pathbar_qt() { QDBusReply reply = sessioniface->call("get_location_replace_pathbar"); return reply.value(); } void SessionDispatcher::set_auto_mount_media_qt(bool flag) { sessioniface->call("set_auto_mount_media", flag); } bool SessionDispatcher::get_auto_mount_media_qt() { QDBusReply reply = sessioniface->call("get_auto_mount_media"); return reply.value(); } void SessionDispatcher::set_auto_open_folder_qt(bool flag) { sessioniface->call("set_auto_open_folder", flag); } bool SessionDispatcher::get_auto_open_folder_qt() { QDBusReply reply = sessioniface->call("get_auto_open_folder"); return reply.value(); } void SessionDispatcher::set_prompt_autorun_programs_qt(bool flag) { sessioniface->call("set_prompt_autorun_programs", flag); } bool SessionDispatcher::get_prompt_autorun_programs_qt() { QDBusReply reply = sessioniface->call("get_prompt_autorun_programs"); return reply.value(); } void SessionDispatcher::set_thumbnail_icon_size_qt(int size) { sessioniface->call("set_thumbnail_icon_size", size); } int SessionDispatcher::get_thumbnail_icon_size_qt() { QDBusReply reply = sessioniface->call("get_thumbnail_icon_size"); return reply.value(); } void SessionDispatcher::set_thumbnail_cache_time_qt(int value) { sessioniface->call("set_thumbnail_cache_time", value); } int SessionDispatcher::get_thumbnail_cache_time_qt() { QDBusReply reply = sessioniface->call("get_thumbnail_cache_time"); return reply.value(); } void SessionDispatcher::set_thumbnail_cache_size_qt(int size) { sessioniface->call("set_thumbnail_cache_size", size); } int SessionDispatcher::get_thumbnail_cache_size_qt() { QDBusReply reply = sessioniface->call("get_thumbnail_cache_size"); return reply.value(); } QString SessionDispatcher::access_current_desktop_qt() { QDBusReply reply = sessioniface->call("access_current_desktop"); return reply.value(); } QString SessionDispatcher::access_current_machine_qt() { QDBusReply reply = sessioniface->call("access_current_machine"); return reply.value(); } //QString SessionDispatcher::judge_desktop_is_unity_qt() { // QDBusReply reply = sessioniface->call("judge_desktop_is_unity"); // return reply.value(); //} //QString SessionDispatcher::judge_desktop_is_cinnamon_qt() { // QDBusReply reply = sessioniface->call("judge_desktop_is_cinnamon"); // return reply.value(); //} void SessionDispatcher::adjust_screen_gamma_qt(double gamma) { sessioniface->call("adjust_screen_gamma", gamma); } double SessionDispatcher::get_screen_gamma_qt() { QDBusReply reply = sessioniface->call("get_screen_gamma"); return reply.value(); } QStringList SessionDispatcher::get_idle_delay_list_qt() { QDBusReply reply = sessioniface->call("get_idle_delay_list"); return reply.value(); } QString SessionDispatcher::get_current_idle_delay_qt() { QDBusReply reply = sessioniface->call("get_current_idle_delay"); return QString::number(reply.value()); } void SessionDispatcher::set_current_idle_delay_qt(int value) { sessioniface->call("set_current_idle_delay", value); } bool SessionDispatcher::get_lock_enabled_qt() { QDBusReply reply = sessioniface->call("get_lock_enabled"); return reply.value(); } void SessionDispatcher::set_lock_enabled_qt(bool value) { sessioniface->call("set_lock_enabled", value); } QStringList SessionDispatcher::get_lock_delay_list_qt() { QDBusReply reply = sessioniface->call("get_lock_delay_list"); return reply.value(); } QString SessionDispatcher::get_current_lock_delay_qt() { QDBusReply reply = sessioniface->call("get_current_lock_delay"); return QString::number(reply.value()); } void SessionDispatcher::set_current_lock_delay_qt(int value) { sessioniface->call("set_current_lock_delay", value); } QStringList SessionDispatcher::get_sleep_timeout_list_qt() { QDBusReply reply = sessioniface->call("get_sleep_timeout_list"); return reply.value(); } QString SessionDispatcher::get_current_critical_low_qt() { QDBusReply reply = sessioniface->call("get_current_critical_low"); return reply.value(); } void SessionDispatcher::set_current_critical_low_qt(QString value) { sessioniface->call("set_current_critical_low", value); } QString SessionDispatcher::get_current_lid_battery_qt() { QDBusReply reply = sessioniface->call("get_current_lid_battery"); return reply.value(); } void SessionDispatcher::set_current_lid_battery_qt(QString value) { sessioniface->call("set_current_lid_battery", value); } QString SessionDispatcher::get_current_lid_ac_qt() { QDBusReply reply = sessioniface->call("get_current_lid_ac"); return reply.value(); } void SessionDispatcher::set_current_lid_ac_qt(QString value) { sessioniface->call("set_current_lid_ac", value); } QString SessionDispatcher::get_current_sleep_timeout_display_battery_qt() { QDBusReply reply = sessioniface->call("get_current_sleep_timeout_display_battery"); return QString::number(reply.value()); } void SessionDispatcher::set_current_sleep_timeout_display_battery_qt(int value) { sessioniface->call("set_current_sleep_timeout_display_battery", value); } QString SessionDispatcher::get_current_sleep_timeout_display_ac_qt() { QDBusReply reply = sessioniface->call("get_current_sleep_timeout_display_ac"); return QString::number(reply.value()); } void SessionDispatcher::set_current_sleep_timeout_display_ac_qt(int value) { sessioniface->call("set_current_sleep_timeout_display_ac", value); } QString SessionDispatcher::get_current_sleep_timeout_battery_qt() { QDBusReply reply = sessioniface->call("get_current_sleep_timeout_battery"); return QString::number(reply.value()); } void SessionDispatcher::set_current_sleep_timeout_battery_qt(int value) { sessioniface->call("set_current_sleep_timeout_battery", value); } QString SessionDispatcher::get_current_sleep_timeout_ac_qt() { QDBusReply reply = sessioniface->call("get_current_sleep_timeout_ac"); return QString::number(reply.value()); } void SessionDispatcher::set_current_sleep_timeout_ac_qt(int value) { sessioniface->call("set_current_sleep_timeout_ac", value); } QString SessionDispatcher::get_current_launcher_position_qt() { QDBusReply reply = sessioniface->call("get_current_launcher_position"); return reply.value(); // return QString(); } QStringList SessionDispatcher::get_all_launcher_position_qt() { QDBusReply reply = sessioniface->call("get_all_launcher_position"); return reply.value(); // return QStringList(); } bool SessionDispatcher::set_launcher_position_qt(QString position) { QDBusReply reply = sessioniface->call("set_launcher_position", position); return reply.value(); } // notify changes void SessionDispatcher::handler_notify_boolean(QString key, bool value) { // if (key == "home-icon-visible") // { // qDebug() << "home-icon-visible->" << value; // } // qDebug() << key; // qDebug() << value; emit bool_value_notify(key, value); } void SessionDispatcher::handler_notify_int(QString key, int value) { emit int_value_notify(key, value); } void SessionDispatcher::handler_notify_double(QString key, double value) { emit double_value_notify(key, value); } void SessionDispatcher::handler_notify_string(QString key, QString value) { // if (key == "gtk-theme") // { // } emit string_value_notify(key, value); } youker-assistant/dbusproxy/youkersystemdbus.h0000664000175000017500000001115613260315532020702 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 YOUKERSYSTEMDBUS_H #define YOUKERSYSTEMDBUS_H #include #include #include //#include "kthread.h" class SystemDispatcher : public QObject { Q_OBJECT public: explicit SystemDispatcher(QObject *parent = 0); ~SystemDispatcher(); //退出systemdbus服务 void exit_qt(); void adjust_cpufreq_scaling_governer_qt(QString value); QStringList get_cpufreq_scaling_governer_list_qt(); QString get_current_cpufreq_scaling_governer_qt(); void cleanAllSelectItems(QMap selectMap); bool kill_uk_process_qt(); //杀掉root用户的进程 // void kill_root_process_qt(QString pid); //得到SystemDbus的验证值,可以通过其判断该服务是否正在运行 QString get_system_daemon_qt(); //为系统设置来设置登录系统的普通用户的用户目录 // void set_homedir_qt(); //为系统清理来设置登录系统的普通用户的用户目录 void set_user_homedir_qt(); //首页一键清理 void clean_by_main_one_key_qt(); bool copy_file_qt(QString filename); bool delete_file_qt(QString filename); bool update_myself(); bool update_source(); //-----------------------sound------------------------ QStringList get_sound_themes_qt(); // Q_INVOKABLE QStringList get_sounds_qt(); // Q_INVOKABLE void replace_sound_file_qt(QString origfile, QString targetfile); // Q_INVOKABLE void restore_sound_file_qt(QString targetfile); // Q_INVOKABLE void restore_all_sound_file_qt(QString soundtheme); bool set_cursor_theme_with_root_qt(QString theme); //-----------------------others------------------------ void custom_plymouth_bg_qt(QString plymouthName); void add_new_plymouth_qt(QString customBG, QString plymouthName); QStringList get_existing_plymouth_list_qt(); void plymouth_init_check_qt(); QString get_image_path_qt(QString name); QString delete_plymouth_qt(QString plymouthName); //得到当前系统和桌面的详细信息 QString get_os_name_qt(); bool judge_sensors_exists_qt(); QMap get_computer_info_qt(); QMap get_sensor_info_qt(); QMap get_cpu_info_qt(); QMap get_memory_info_qt(); QMap get_board_info_qt(); QMap get_harddisk_info_qt(); QMap get_networkcard_info_qt(); QMap get_monitor_info_qt(); QMap get_cdrom_info_qt(); QMap get_audiocard_info_qt(); QString get_time_value_qt(); signals: void tellCleanerMainData(const QStringList &data); void tellCleanerMainStatus(const QString &status, const QString &domain); void sendCleanOverSignal(); void sendCleanErrorSignal(const QString &status); void policykitCleanSignal(bool status); void finishCleanWorkMain(QString msg); void finishCleanWorkMainError(QString msg); void quickCleanProcess(QString type, QString status); //apt void get_fetch_signal(QString msg_type, QStringList msg); void get_apt_signal(QString msg_type, QStringList msg); // void dbusInitFinished(); public slots: void handler_interrupt_clean(bool status); void handler_clear_rubbish_main_onekey(QString msg); void handler_clear_rubbish_main_error(QString msg); void handler_status_for_quick_clean(QString type, QString status); void handlerCleanerSubPageDataSignal(QStringList data); void handlerCleanerSubPageStatusSignal(QString status, QString domain); void handlerCleanerSubPageErrorSignal(QString status); //apt // void handlerFetchSignal(QString msg_type, QStringList msg); // void handlerAptSignal(QString msg_type, QStringList msg); private: QDBusInterface *systemiface; // KThread *thread; // KThread *clean_thread; }; #endif // YOUKERSYSTEMDBUS_H youker-assistant/setting/0000775000175000017500000000000013260317316014504 5ustar fengfengyouker-assistant/setting/settingmodel.cpp0000664000175000017500000000376513260315532017717 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "settingmodel.h" #include #include SettingModel::SettingModel(QObject *parent) : QAbstractListModel(parent) { } void SettingModel::addItem(const QString &moduleName) { if (!m_moduleList.contains(moduleName)) m_moduleList.append(moduleName); } void SettingModel::setCurrentItem(const QModelIndex &index) { const QModelIndex origIndex = m_currentIndex; m_currentIndex = index; emit dataChanged(origIndex, origIndex); emit dataChanged(m_currentIndex, m_currentIndex); } int SettingModel::rowCount(const QModelIndex &index) const { Q_UNUSED(index); const int itemCount = m_moduleList.size(); const int rowCount = itemCount % 6;//按每行6个来计算 return itemCount + (rowCount ? 6 - rowCount : rowCount); } QVariant SettingModel::data(const QModelIndex &index, int role) const { switch (role) { case Qt::DisplayRole: { const int order = index.row(); if (m_moduleList.size() > order) return m_moduleList[order]; else return QVariant(); } case Qt::SizeHintRole: return QSize(120, 78); case HoverRole: return index == m_currentIndex; default: break; } return QVariant(); } youker-assistant/setting/menuwidget.cpp0000664000175000017500000004354313260315532017367 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "menuwidget.h" #include #include #include #include #include #include #include MenuWidget::MenuWidget(QWidget *parent, QString cur_desktop) : SettingModulePage(parent),desktop(cur_desktop) { size_label = new QLabel(); size_value_label = new QLabel(); hide_label = new QLabel(); icon_label = new QLabel(); transparency_label = new QLabel(); background_label = new QLabel(); size_top_label = new QLabel(); hide_top_label = new QLabel(); size_top_value_label = new QLabel(); size_bottom_label = new QLabel(); hide_bottom_label = new QLabel(); size_bottom_value_label = new QLabel(); position_label = new QLabel(); size_slider = new QSlider(Qt::Horizontal); size_slider->setFocusPolicy(Qt::NoFocus); size_slider->setRange(32, 64); size_slider->setSingleStep(1); hide_switcher = new KylinSwitcher(); icon_switcher = new KylinSwitcher(); transparency_slider = new QDoubleSpinBox(); transparency_slider->setButtonSymbols(QAbstractSpinBox::PlusMinus); transparency_slider->setSingleStep(0.1); transparency_slider->setMinimum(0.0); transparency_slider->setMaximum(1.0); backgound_combo = new QComboBox(); size_top_slider = new QSlider(Qt::Horizontal); size_top_slider->setFocusPolicy(Qt::NoFocus); size_top_slider->setRange(24, 180); size_top_slider->setSingleStep(1); size_bottom_slider = new QSlider(Qt::Horizontal); size_bottom_slider->setFocusPolicy(Qt::NoFocus); size_bottom_slider->setRange(24, 180); size_bottom_slider->setSingleStep(1); hide_top_switcher = new KylinSwitcher(); hide_bottom_switcher = new KylinSwitcher(); position_combo = new QComboBox(); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { size_label->hide(); size_value_label->hide(); hide_label->hide(); icon_label->hide(); transparency_label->hide(); background_label->hide(); position_label->hide(); size_slider->hide(); hide_switcher->hide(); icon_switcher->hide(); transparency_slider->hide(); backgound_combo->hide(); position_combo->hide(); } else { size_top_label->hide(); hide_top_label->hide(); size_top_value_label->hide(); size_bottom_label->hide(); hide_bottom_label->hide(); size_bottom_value_label->hide(); size_top_slider->hide(); size_bottom_slider->hide(); hide_top_switcher->hide(); hide_bottom_switcher->hide(); } size_label->setFixedWidth(180); hide_label->setFixedWidth(180); icon_label->setFixedWidth(180); transparency_label->setFixedWidth(180); background_label->setFixedWidth(180); size_top_label->setFixedWidth(180); hide_top_label->setFixedWidth(180); size_bottom_label->setFixedWidth(180); hide_bottom_label->setFixedWidth(180); position_label->setFixedWidth(180); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(size_label); layout1->addWidget(size_slider); layout1->addWidget(size_value_label); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(hide_label); layout2->addWidget(hide_switcher); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(icon_label); layout3->addWidget(icon_switcher); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(transparency_label); layout4->addWidget(transparency_slider); layout4->addStretch(); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(background_label); layout5->addWidget(backgound_combo); layout5->addStretch(); QHBoxLayout *layout6 = new QHBoxLayout(); layout6->setSpacing(10); layout6->addWidget(size_top_label); layout6->addWidget(size_top_slider); layout6->addWidget(size_top_value_label); layout6->addStretch(); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->setSpacing(10); layout7->addWidget(hide_top_label); layout7->addWidget(hide_top_switcher); layout7->addStretch(); QHBoxLayout *layout8 = new QHBoxLayout(); layout8->setSpacing(10); layout8->addWidget(size_bottom_label); layout8->addWidget(size_bottom_slider); layout8->addWidget(size_bottom_value_label); layout8->addStretch(); QHBoxLayout *layout9 = new QHBoxLayout(); layout9->setSpacing(10); layout9->addWidget(hide_bottom_label); layout9->addWidget(hide_bottom_switcher); layout9->addStretch(); QHBoxLayout *layout10 = new QHBoxLayout(); layout10->setSpacing(10); layout10->addWidget(position_label); layout10->addWidget(position_combo); layout10->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout10); layout->addLayout(layout3); layout->addLayout(layout4); layout->addLayout(layout5); layout->addLayout(layout6); layout->addLayout(layout7); layout->addLayout(layout8); layout->addLayout(layout9); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); this->setLanguage(); } MenuWidget::~MenuWidget() { if (size_label != NULL) { delete size_label; size_label = NULL; } if (size_value_label != NULL) { delete size_value_label; size_value_label = NULL; } if (hide_label != NULL) { delete hide_label; hide_label = NULL; } if (icon_label != NULL) { delete icon_label; icon_label = NULL; } if (transparency_label != NULL) { delete transparency_label; transparency_label = NULL; } if (background_label != NULL) { delete background_label; background_label = NULL; } if (size_top_label != NULL) { delete size_top_label; size_top_label = NULL; } if (hide_top_label != NULL) { delete hide_top_label; hide_top_label = NULL; } if (position_label != NULL) { delete position_label; position_label = NULL; } if (size_top_value_label != NULL) { delete size_top_value_label; size_top_value_label = NULL; } if (size_bottom_label != NULL) { delete size_bottom_label; size_bottom_label = NULL; } if (hide_bottom_label != NULL) { delete hide_bottom_label; hide_bottom_label = NULL; } if (size_bottom_value_label != NULL) { delete size_bottom_value_label; size_bottom_value_label = NULL; } if (size_slider != NULL) { delete size_slider; size_slider = NULL; } if (hide_switcher != NULL) { delete hide_switcher; hide_switcher = NULL; } if (icon_switcher != NULL) { delete icon_switcher; icon_switcher = NULL; } if (transparency_slider != NULL) { delete transparency_slider; transparency_slider = NULL; } if (backgound_combo != NULL) { delete backgound_combo; backgound_combo = NULL; } if (size_top_slider != NULL) { delete size_top_slider; size_top_slider = NULL; } if (size_bottom_slider != NULL) { delete size_bottom_slider; size_bottom_slider = NULL; } if (hide_top_switcher != NULL) { delete hide_top_switcher; hide_top_switcher = NULL; } if (hide_bottom_switcher != NULL) { delete hide_bottom_switcher; hide_bottom_switcher = NULL; } if (position_combo != NULL) { delete position_combo; position_combo = NULL; } } QString MenuWidget::settingModuleName() { return "MenuPage"; } void MenuWidget::setLanguage() { size_label->setText(tr("Launcher icon size") + ":"); hide_label->setText(tr("Launcher hide mode") + ":"); icon_label->setText(tr("Display desktop icon") + ":"); transparency_label->setText(tr("Launcher Transparency") + ":"); background_label->setText(tr("Icon Background") + ":"); size_top_label->setText(tr("Top panel icon size") + ":"); hide_top_label->setText(tr("Top panel auto hide") + ":"); size_bottom_label->setText(tr("Bottom panel icon size") + ":"); hide_bottom_label->setText(tr("Bottom panel auto hide") + ":"); position_label->setText(tr("Launcher position") + ":"); } void MenuWidget::initSettingData() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit this->requestMateOrUnityMenuData(true); } else { emit this->requestMateOrUnityMenuData(false); } this->initConnect(); } void MenuWidget::onSendMatePanelIconValue(int topIconSize, int bottomIconSize, bool topIconHide, bool bottomIconHide) { size_top_slider->setValue(topIconSize); size_top_value_label->setText(QString::number(topIconSize)); size_bottom_slider->setValue(bottomIconSize); size_bottom_value_label->setText(QString::number(bottomIconSize)); hide_top_switcher->switchedOn = topIconHide; hide_bottom_switcher->switchedOn = bottomIconHide; } void MenuWidget::onSendUnityIconValue(int iconSize, bool iconHide, bool desktopIconShowed, double launcherTransparency, int iconColourIndex, const QStringList &colourlist) { size_slider->setValue(iconSize); size_value_label->setText(QString::number(iconSize)); hide_switcher->switchedOn = iconHide; icon_switcher->switchedOn = desktopIconShowed; transparency_slider->setValue(launcherTransparency); QString current_icon_colouring = ""; if (iconColourIndex == 0) { current_icon_colouring = "all programs"; } else if (iconColourIndex == 1) { current_icon_colouring = "only run app"; } else if (iconColourIndex == 2) { current_icon_colouring = "no coloring"; } else if (iconColourIndex == 3) { current_icon_colouring = "edge coloring"; } else if (iconColourIndex == 4) { current_icon_colouring = "each workspace alternating coloring"; } m_colourlist.clear(); m_colourlist = colourlist; backgound_combo->clearEditText(); backgound_combo->addItems(m_colourlist); QList::Iterator it = m_colourlist.begin(), itend = m_colourlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == current_icon_colouring) break; } backgound_combo->setCurrentIndex(initIndex); } void MenuWidget::onSendUnityLauncherPosition(const QString ¤t_position, const QStringList &positionlist) { m_positionlist.clear(); m_positionlist = positionlist; position_combo->clear(); position_combo->clearEditText(); position_combo->addItems(m_positionlist); QList::Iterator it2 = m_positionlist.begin(), itend2 = m_positionlist.end(); int initIndex = 0; for(;it2 != itend2; it2++,initIndex++) { if(*it2 == current_position) break; } position_combo->setCurrentIndex(initIndex); } void MenuWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(size_slider, SIGNAL(valueChanged(int)), this, SLOT(setIconSizeValue(int))); connect(hide_switcher, SIGNAL(clicked()), this, SLOT(setAutoHide())); connect(icon_switcher, SIGNAL(clicked()), this, SLOT(setDisplayDesktopIcon())); connect(transparency_slider, SIGNAL(valueChanged(double)), this, SLOT(setTransparencyValue(double))); connect(backgound_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setIconColouring(QString))); connect(position_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setLauncherPosition(QString))); connect(size_top_slider, SIGNAL(valueChanged(int)), this, SLOT(setTopIconSizeValue(int))); connect(size_bottom_slider, SIGNAL(valueChanged(int)), this, SLOT(setBottomIconSizeValue(int))); connect(hide_top_switcher, SIGNAL(clicked()), this, SLOT(setTopAutoHide())); connect(hide_bottom_switcher, SIGNAL(clicked()), this, SLOT(setBottomAutoHide())); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(launcherwidget_notify_bool(QString, bool))); // connect(sessionproxy, SIGNAL(double_value_notify(QString, double)), this, SLOT(launcherwidget_notify_double(QString, double))); // connect(sessionproxy, SIGNAL(int_value_notify(QString, int)), this, SLOT(launcherwidget_notify_int(QString, int))); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(launcherwidget_notify_string(QString, QString))); } void MenuWidget::launcherwidget_notify_double(QString key, double value) { if (key == "launcher-opacity") { transparency_slider->setValue(value); } } void MenuWidget::launcherwidget_notify_bool(QString key, bool value) { if (key == "auto-hide-top") { hide_top_switcher->switchedOn = value; } else if (key == "auto-hide-bottom") { hide_bottom_switcher->switchedOn = value; } } void MenuWidget::launcherwidget_notify_int(QString key, int value) { if (key == "icon-size") { size_slider->setValue(value); size_value_label->setText(QString::number(value)); } if (key == "launcher-hide-mode") { if (value == 0) hide_switcher->switchedOn = false; else if (value == 1) hide_switcher->switchedOn = true; } if (key == "backlight-mode") { QString current_icon_colouring = ""; if (value == 0) { current_icon_colouring = "all programs"; } else if (value == 1) { current_icon_colouring = "only run app"; } else if (value == 2) { current_icon_colouring = "no coloring"; } else if (value == 3) { current_icon_colouring = "edge coloring"; } else if (value == 4) { current_icon_colouring = "each workspace alternating coloring"; } QList::Iterator it = m_colourlist.begin(), itend = m_colourlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == current_icon_colouring) { exist = true; break; } } if (exist) { exist = false; backgound_combo->setCurrentIndex(index); } else backgound_combo->setCurrentIndex(-1); } if (key == "size-top") { size_top_slider->setValue(value); size_top_value_label->setText(QString::number(value)); } else if (key == "size-bottom") { size_bottom_slider->setValue(value); size_bottom_value_label->setText(QString::number(value)); } } void MenuWidget::launcherwidget_notify_string(QString key, QString value) { if (key == "launcher-position") { QList::Iterator it = m_positionlist.begin(), itend = m_positionlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; position_combo->setCurrentIndex(index); } else position_combo->setCurrentIndex(-1); } } void MenuWidget::setIconSizeValue(int value) { size_value_label->setText(QString::number(value)); emit resetIconSizeValue(value); } void MenuWidget::setTransparencyValue(double value) { emit resetTransparencyValue(value); } void MenuWidget::setIconColouring(QString selectColour) { if (selectColour == "all programs") { emit this->resetIconColouring(0); } else if (selectColour == "only run app") { emit this->resetIconColouring(1); } else if (selectColour == "no coloring") { emit this->resetIconColouring(2); } else if (selectColour == "edge coloring") { emit this->resetIconColouring(3); } else if (selectColour == "each workspace alternating coloring") { emit this->resetIconColouring(4); } } void MenuWidget::setAutoHide() { emit this->resetAutoHide(hide_switcher->switchedOn); } void MenuWidget::setDisplayDesktopIcon() { emit this->resetDisplayDesktopIcon(icon_switcher->switchedOn); } void MenuWidget::setTopIconSizeValue(int value){ size_top_value_label->setText(QString::number(value)); emit this->resetTopIconSizeValue(value); } void MenuWidget::setBottomIconSizeValue(int value){ size_bottom_value_label->setText(QString::number(value)); emit this->resetBottomIconSizeValue(value); } void MenuWidget::setTopAutoHide() { emit this->resetTopAutoHide(hide_top_switcher->switchedOn); } void MenuWidget::setBottomAutoHide() { emit this->resetBottomAutoHide(hide_bottom_switcher->switchedOn); } void MenuWidget::setLauncherPosition(QString position) { emit this->resetLauncherPosition(position); } youker-assistant/setting/fontwidget.h0000664000175000017500000001060013260315532017022 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 FONTWIDGET_H #define FONTWIDGET_H #include #include #include class MainWindow; class QLabel; class QPushButton; class QComboBox; class QDoubleSpinBox; #include "settingmodulelpage.h" class FontWidget : public SettingModulePage { Q_OBJECT public: explicit FontWidget(QWidget *parent = 0, MainWindow *window = 0, QString cur_desktop = "", QString skin = ":/background/res/skin/1.png"); ~FontWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; void resetCurrentSkin(QString skin); public slots: void setDefaultFont(); void setDesktopFont(); void setMonospaceFont(); void setDocumentFont(); void setTitlebarFont(); void setScalingValue(double value); void setFontHinting(QString selected); void setFontAntialiasing(QString selected); void resetDefaultFont(QString cur_font); void resetDesktopFont(QString cur_font); void resetMonospaceFont(QString cur_font); void resetDocumentFont(QString cur_font); void resetTitlebarFont(QString cur_font); void restore_default_font(); void restore_desktop_font(); void restore_monospace_font(); void restore_document_font(); void restore_titlebar_font(); void fontwidget_notify_string(QString key, QString value); void fontwidget_notify_double(QString key, double value); void onSendFontValue(const QString &curFont); void onSendDesktopFontValue(const QString &curFont); void onSendMonospaceFontValue(const QString &curFont); void onSendDocumentFontValue(const QString &curFont); void onSendTitlebarFontValue(const QString &curFont); void onSendFontSmoothAndAntialiasingValue(double fontZoom, const QString ¤t_smooth, const QStringList &smoothlist, const QString ¤t_antialiasing, const QStringList &antialiasinglist); signals: void requestFontData(); void setDefaultFontByName(const QString &cur_font); void setDesktopFontByName(const QString &cur_font); void setMonospaceFontByName(const QString &cur_font); void setDocumentFontByName(const QString &cur_font); void setTitlebarFontByName(const QString &cur_font); void resetFontZoomScalingValue(double value); void resetFontHinting(const QString &selected); void resetFontAntialiasing(const QString &selected); void restoreDefaultFont(bool isMate); void restoreDesktopDefaultFont(bool isMate); void restoreMonospaceDefaultFont(bool isMate); void restoreDocumentDefaultFont(bool isMate); void restoreTitlebarDefaultFont(bool isMate); private: QStringList m_smoothlist; QStringList m_antialiasinglist; MainWindow *parentWindow; QLabel *default_font_label; QLabel *desktop_font_label; QLabel *monospace_font_label; QLabel *document_font_label; QLabel *titlebar_font_label; QLabel *scaling_label; QLabel *hinting_label; QLabel *antialiasing_label; QPushButton *default_font_btn; QPushButton *desktop_font_btn; QPushButton *monospace_font_btn; QPushButton *document_font_btn; QPushButton *titlebar_font_btn; QDoubleSpinBox *scaling_slider; QComboBox *hinting_combo; QComboBox *antialiasing_combo; QPushButton *restore_default_font_btn; QPushButton *restore_desktop_font_btn; QPushButton *restore_monospace_font_btn; QPushButton *restore_document_font_btn; QPushButton *restore_titlebar_font_btn; QString current_font; QString desktop_font; QString monospace_font; QString document_font; QString titlebar_font; QString desktop; QString cur_skin; }; #endif // FONTWIDGET_H youker-assistant/setting/themewidget.cpp0000664000175000017500000000660113260315532017517 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "themewidget.h" #include "theme/themeview.h" #include #include #include #include #include #include ThemeWidget::ThemeWidget(QWidget *parent) : SettingModulePage(parent) { this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // this->resize(parent->size()); // this->setFixedSize(900, 403); label = new QLabel(this); label->setObjectName("tipLabel"); label->setFixedHeight(30); // label->setGeometry(QRect(30, 15, 860, 50)); label->setText(tr("Please choose theme which you need")); m_themeView = new ThemeView(this); connect(m_themeView, SIGNAL(sendSelectThemeName(QString)), this, SLOT(changeTheme(QString))); QVBoxLayout *layout = new QVBoxLayout(this); layout->setSpacing(5); layout->setMargin(0); layout->setContentsMargins(10, 5, 10, 0); layout->addWidget(label); layout->addWidget(m_themeView); this->setLayout(layout); } QString ThemeWidget::settingModuleName() { return "ThemePage"; } void ThemeWidget::onReceiveThemeList(const QString ¤tTheme, const QStringList &themeList) { // qDebug() << "currentTheme="<::Iterator it = syslist.begin(), itend = syslist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if(exist) { exist = false; this->switchUsingLogo(QString::number(index, 10)); } } } youker-assistant/setting/panelwidget.h0000664000175000017500000000761013260315532017162 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 PANELWIDGET_H #define PANELWIDGET_H #include #include "../component/kylinswitcher.h" class QLabel; class QPushButton; class QComboBox; class QSlider; class QDoubleSpinBox; class QRadioButton; #include "settingmodulelpage.h" class PanelWidget : public SettingModulePage { Q_OBJECT public: explicit PanelWidget(QWidget *parent = 0, QString cur_desktop = "", bool has_battery = false); ~PanelWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; signals: void requestMateOrUnityPanelData(bool isMate); void resetPanelTransparencyValue(double value); void resetDateFormat(const QString &selected); void resetShowBatteryIcon(const QString &selected); void resetDashBlurExperimental(int value); void resetDisplaySeconds(bool b); void resetDisplayWeek(bool b); void resetDisplayDate(bool b); void resetDisplayBatteryPercentage(bool b); void resetDisplayBatteryTime(bool b); void resetShowApplications(bool b); void resetShowDesktop(bool b); void resetShowIcon(bool b); void resetShowPlaces(bool b); // void showSettingMainWidget(); public slots: void setDateFormat(QString selected); void setShowBatteryIcon(QString selected); void setTransparencyValue(double value); void setRadioButtonRowStatus(/*bool status*/); void setDisplaySeconds(); void setDisplayWeek(); void setDisplayDate(); void setDisplayBatteryPercentage(); void setDisplayBatteryTime(); void showApplications(); void showDesktop(); void showIcon(); void showPlaces(); void panelwidget_notify_string(QString key, QString value); void panelwidget_notify_bool(QString key, bool value); void onSendMatePanelValue(bool app, bool desktop, bool icon, bool places); void onSendUnityBlurAndTransparencyValue(int blur, double transparent); void onSendUnityTimeValue(const QString &time_format, const QStringList &timelist, bool showSecond, bool showWeek, bool showDate); void onSendUnityPanelPowerValue(const QString &cur_power, const QStringList &powerlist, bool showPower, bool showBatteryTime); private: QString desktop; QStringList m_powerlist; QLabel *blur_label; QLabel *transparency_label; QLabel *date_format_label; QLabel *second_label; QLabel *week_label; QLabel *date_label; QLabel *battery_icon_label; QLabel *battery_percentage_label; QLabel *battery_time_label; QLabel *show_app_label; QLabel *show_desktop_label; QLabel *show_icon_label; QLabel *show_places_label; QRadioButton *smart_radio; QRadioButton *static_radio; QRadioButton *clear_radio; QDoubleSpinBox *transparency_slider; QComboBox *date_combo; KylinSwitcher *second_switcher; KylinSwitcher *week_switcher; KylinSwitcher *date_switcher; QComboBox *battery_combo; KylinSwitcher *battery_percentage_switcher; KylinSwitcher *battery_time_switcher; KylinSwitcher *app_switcher; KylinSwitcher *desktop_switcher; KylinSwitcher *icon_switcher; KylinSwitcher *places_switcher; }; #endif // PANELWIDGET_H youker-assistant/setting/animationwidget.h0000664000175000017500000000337213260315532020043 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 ANIMATIONWIDGET_H #define ANIMATIONWIDGET_H #include #include class SystemDispatcher; class MainWindow; class QLabel; class QPushButton; class AnimationWidget : public QWidget { Q_OBJECT public: explicit AnimationWidget(QWidget *parent = 0, SystemDispatcher *proxy = 0, MainWindow *window = 0); ~AnimationWidget(); void setLanguage(); void initConnect(); void initData(); bool getStatus(); public slots: void selectCustomAnimation(); void setCustomAnimation(); void deleteSelectedAnimation(QString name); void displayCurrentItemInfo(QString info); private: SystemDispatcher *systemproxy; bool dataOK; MainWindow *parentWindow; QWidget * left_widget; QWidget * right_widget; QLabel *title_label; QPushButton *custom_btn; QPushButton *ok_btn; QWidget *view_widget; QWidget *show_widget; QLabel *tip_label; QListWidget *list_widget; QString selected_animation; }; #endif // ANIMATIONWIDGET_H youker-assistant/setting/mousewidget.h0000664000175000017500000000373213260315532017214 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MOUSEWIDGET_H #define MOUSEWIDGET_H #include #include class QLabel; class QPushButton; class QComboBox; class QRadioButton; #include "settingmodulelpage.h" class MouseWidget : public SettingModulePage { Q_OBJECT public: explicit MouseWidget(QWidget *parent = 0, QString cur_desktop = ""); ~MouseWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; signals: // void showSettingMainWidget(); void requestMouseData(); void resetMouseCursorTheme(const QString &theme); void resetMouseCursorSize(int cursorSize); public slots: void setMouseCursorTheme(QString selectTheme); void setRadioButtonRowStatus(/*bool status*/); void mousewidget_notify_string(QString key, QString value); void mousewidget_notify_int(QString key, int value); void onReceiveMouseThemeAndCusorSize(const QString ¤tTheme, const QStringList &themeList, int cursorSize); private: QStringList cursorlist; QLabel *theme_label; QLabel *size_label; QComboBox *theme_combo; QRadioButton *small_size; QRadioButton *big_size; QString desktop; }; #endif // MOUSEWIDGET_H youker-assistant/setting/themewidget.h0000664000175000017500000000330613260315532017163 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 THEMEWIDGET_H #define THEMEWIDGET_H #include class QLabel; class QPushButton; class QListWidget; class QListWidgetItem; class ThemeView; #include "settingmodulelpage.h" //class ThemeWidget : public QWidget class ThemeWidget : public SettingModulePage { Q_OBJECT public: explicit ThemeWidget(QWidget *parent = 0); ~ThemeWidget(); void initConnect(); void resetUI(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void themewidget_notify_string(QString key, QString value); void switchUsingLogo(QString index); void changeTheme(QString name); void onReceiveThemeList(const QString ¤tTheme, const QStringList &themeList); signals: void requestThemeData(); void changeSystemTheme(const QString &name); private: ThemeView *m_themeView = nullptr; QStringList syslist; QLabel *label = nullptr; }; #endif // THEMEWIDGET_H youker-assistant/setting/panelwidget.cpp0000664000175000017500000005516313260315532017523 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "panelwidget.h" #include #include #include #include #include PanelWidget::PanelWidget(QWidget *parent, QString cur_desktop, bool has_battery) : SettingModulePage(parent),desktop(cur_desktop) { blur_label = new QLabel(); transparency_label = new QLabel(); date_format_label = new QLabel(); second_label = new QLabel(); week_label = new QLabel(); date_label = new QLabel(); battery_icon_label = new QLabel(); battery_percentage_label = new QLabel(); battery_time_label = new QLabel(); show_app_label = new QLabel(); show_desktop_label = new QLabel(); show_icon_label = new QLabel(); show_places_label = new QLabel(); smart_radio = new QRadioButton(); smart_radio->setFocusPolicy(Qt::NoFocus); smart_radio->setChecked(true); smart_radio->setObjectName("smart_radio"); static_radio = new QRadioButton(); static_radio->setFocusPolicy(Qt::NoFocus); static_radio->setChecked(false); static_radio->setObjectName("static_radio"); clear_radio = new QRadioButton(); clear_radio->setFocusPolicy(Qt::NoFocus); clear_radio->setChecked(false); clear_radio->setObjectName("clear_radio"); QHBoxLayout *radio_layout = new QHBoxLayout(); radio_layout->setSpacing(10); radio_layout->addWidget(smart_radio); radio_layout->addWidget(static_radio); radio_layout->addWidget(clear_radio); radio_layout->addStretch(); transparency_slider = new QDoubleSpinBox(); transparency_slider->setButtonSymbols(QAbstractSpinBox::PlusMinus); transparency_slider->setSingleStep(0.1); transparency_slider->setMinimum(0.2); transparency_slider->setMaximum(8.0); date_combo = new QComboBox(); second_switcher = new KylinSwitcher(); week_switcher = new KylinSwitcher(); date_switcher = new KylinSwitcher(); battery_combo = new QComboBox(); battery_percentage_switcher = new KylinSwitcher(); battery_time_switcher = new KylinSwitcher(); app_switcher = new KylinSwitcher(); desktop_switcher = new KylinSwitcher(); icon_switcher = new KylinSwitcher(); places_switcher = new KylinSwitcher(); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { blur_label->hide(); transparency_label->hide(); date_format_label->hide(); second_label->hide(); week_label->hide(); date_label->hide(); battery_icon_label->hide(); battery_percentage_label->hide(); battery_time_label->hide(); smart_radio->hide(); static_radio->hide(); clear_radio->hide(); transparency_slider->hide(); date_combo->hide(); second_switcher->hide(); week_switcher->hide(); date_switcher->hide(); battery_combo->hide(); battery_percentage_switcher->hide(); battery_time_switcher->hide(); } else { show_app_label->hide(); show_desktop_label->hide(); show_icon_label->hide(); show_places_label->hide(); app_switcher->hide(); desktop_switcher->hide(); icon_switcher->hide(); places_switcher->hide(); } blur_label->setFixedWidth(220); transparency_label->setFixedWidth(220); date_format_label->setFixedWidth(220); second_label->setFixedWidth(220); week_label->setFixedWidth(220); date_label->setFixedWidth(220); battery_icon_label->setFixedWidth(220); battery_percentage_label->setFixedWidth(220); battery_time_label->setFixedWidth(220); show_app_label->setFixedWidth(220); show_desktop_label->setFixedWidth(220); show_icon_label->setFixedWidth(220); show_places_label->setFixedWidth(220); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(blur_label); layout1->addLayout(radio_layout); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(transparency_label); layout2->addWidget(transparency_slider); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(date_format_label); layout3->addWidget(date_combo); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(second_label); layout4->addWidget(second_switcher); layout4->addStretch(); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(week_label); layout5->addWidget(week_switcher); layout5->addStretch(); QHBoxLayout *layout6 = new QHBoxLayout(); layout6->setSpacing(10); layout6->addWidget(date_label); layout6->addWidget(date_switcher); layout6->addStretch(); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->setSpacing(10); layout7->addWidget(battery_icon_label); layout7->addWidget(battery_combo); layout7->addStretch(); QHBoxLayout *layout8 = new QHBoxLayout(); layout8->setSpacing(10); layout8->addWidget(battery_percentage_label); layout8->addWidget(battery_percentage_switcher); layout8->addStretch(); QHBoxLayout *layout9 = new QHBoxLayout(); layout9->setSpacing(10); layout9->addWidget(battery_time_label); layout9->addWidget(battery_time_switcher); layout9->addStretch(); QHBoxLayout *layout10 = new QHBoxLayout(); layout10->setSpacing(10); layout10->addWidget(show_app_label); layout10->addWidget(app_switcher); layout10->addStretch(); QHBoxLayout *layout11 = new QHBoxLayout(); layout11->setSpacing(10); layout11->addWidget(show_desktop_label); layout11->addWidget(desktop_switcher); layout11->addStretch(); QHBoxLayout *layout12 = new QHBoxLayout(); layout12->setSpacing(10); layout12->addWidget(show_icon_label); layout12->addWidget(icon_switcher); layout12->addStretch(); QHBoxLayout *layout13 = new QHBoxLayout(); layout13->setSpacing(10); layout13->addWidget(show_places_label); layout13->addWidget(places_switcher); layout13->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addLayout(layout5); layout->addLayout(layout6); // if(sessionproxy->judge_power_is_exists_qt()) if(has_battery) { layout->addLayout(layout7); layout->addLayout(layout8); layout->addLayout(layout9); } layout->addLayout(layout10); layout->addLayout(layout11); layout->addLayout(layout12); layout->addLayout(layout13); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } PanelWidget::~PanelWidget() { if (blur_label != NULL) { delete blur_label; blur_label = NULL; } if (transparency_label != NULL) { delete transparency_label; transparency_label = NULL; } if (date_format_label != NULL) { delete date_format_label; date_format_label = NULL; } if (second_label != NULL) { delete second_label; second_label = NULL; } if (week_label != NULL) { delete week_label; week_label = NULL; } if (date_label != NULL) { delete date_label; date_label = NULL; } if (battery_icon_label != NULL) { delete battery_icon_label; battery_icon_label = NULL; } if (battery_percentage_label != NULL) { delete battery_percentage_label; battery_percentage_label = NULL; } if (battery_time_label != NULL) { delete battery_time_label; battery_time_label = NULL; } if (show_app_label != NULL) { delete show_app_label; show_app_label = NULL; } if (show_desktop_label != NULL) { delete show_desktop_label; show_desktop_label = NULL; } if (show_icon_label != NULL) { delete show_icon_label; show_icon_label = NULL; } if (show_places_label != NULL) { delete show_places_label; show_places_label = NULL; } if (smart_radio != NULL) { delete smart_radio; smart_radio = NULL; } if (static_radio != NULL) { delete static_radio; static_radio = NULL; } if (clear_radio != NULL) { delete clear_radio; clear_radio = NULL; } if (transparency_slider != NULL) { delete transparency_slider; transparency_slider = NULL; } if (date_combo != NULL) { delete date_combo; date_combo = NULL; } if (second_switcher != NULL) { delete second_switcher; second_switcher = NULL; } if (week_switcher != NULL) { delete week_switcher; week_switcher = NULL; } if (date_switcher != NULL) { delete date_switcher; date_switcher = NULL; } if (battery_combo != NULL) { delete battery_combo; battery_combo = NULL; } if (battery_percentage_switcher != NULL) { delete battery_percentage_switcher; battery_percentage_switcher = NULL; } if (battery_time_switcher != NULL) { delete battery_time_switcher; battery_time_switcher = NULL; } if (app_switcher != NULL) { delete app_switcher; app_switcher = NULL; } if (desktop_switcher != NULL) { delete desktop_switcher; desktop_switcher = NULL; } if (icon_switcher != NULL) { delete icon_switcher; icon_switcher = NULL; } if (places_switcher != NULL) { delete places_switcher; places_switcher = NULL; } } QString PanelWidget::settingModuleName() { return "PanelPage"; } void PanelWidget::setLanguage() { // title_label->setText(tr("Dash & Panel")); // description_label->setText(tr("Manage Dash and Panel menu settings.")); // back_btn->setText(tr("Back")); blur_label->setText(tr("Dash background blur type") + ":"); transparency_label->setText(tr("Panel Transparency") + ":"); date_format_label->setText(tr("Date & time format") + ":"); second_label->setText(tr("Display seconds") + ":"); week_label->setText(tr("Display week") + ":"); date_label->setText(tr("Display the date") + ":"); battery_icon_label->setText(tr("Display battery icon") + ":"); battery_percentage_label->setText(tr("Display battery percentage") + ":"); battery_time_label->setText(tr("Display battery remaining time") + ":"); smart_radio->setText(tr("Smart blur")); static_radio->setText(tr("Static blur")); clear_radio->setText(tr("Clear")); show_app_label->setText(tr("Show applications") + ":"); show_desktop_label->setText(tr("Show system") + ":");//Show desktop show_icon_label->setText(tr("Show icon") + ":"); show_places_label->setText(tr("Show places") + ":"); } void PanelWidget::initSettingData() { if(this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit this->requestMateOrUnityPanelData(true); // app_switcher->switchedOn = sessionproxy->get_show_apps_qt(); // desktop_switcher->switchedOn = sessionproxy->get_show_desktop_qt(); // icon_switcher->switchedOn = sessionproxy->get_show_icon_qt(); // places_switcher->switchedOn = sessionproxy->get_show_places_qt(); } else {//unity emit this->requestMateOrUnityPanelData(false); /*int default_value = sessionproxy->get_dash_blur_experimental_qt(); if(default_value == 2) { smart_radio->setChecked(true); static_radio->setChecked(false); clear_radio->setChecked(false); } else if(default_value == 1) { static_radio->setChecked(true); smart_radio->setChecked(false); clear_radio->setChecked(false); } else if(default_value == 0) { clear_radio->setChecked(true); static_radio->setChecked(false); smart_radio->setChecked(false); } transparency_slider->setValue(sessionproxy->get_panel_transparency_qt()); QString cur_format = sessionproxy->get_time_format_qt(); QStringList timelist = sessionproxy->get_all_time_format_qt(); date_combo->clear(); date_combo->clearEditText(); date_combo->addItems(timelist); QList::Iterator it = timelist.begin(), itend = timelist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == cur_format) break; } date_combo->setCurrentIndex(initIndex); second_switcher->switchedOn = sessionproxy->get_show_seconds_qt(); week_switcher->switchedOn = sessionproxy->get_show_week_qt(); date_switcher->switchedOn = sessionproxy->get_show_date_qt(); QString cur_power = sessionproxy->get_power_icon_policy_qt(); m_powerlist = sessionproxy->get_all_power_icon_policy_qt(); battery_combo->clear(); battery_combo->clearEditText(); battery_combo->addItems(m_powerlist); QList::Iterator ite = m_powerlist.begin(), iteend = m_powerlist.end(); int index = 0; for(;ite != iteend; ite++,index++) { if(*ite == cur_power) break; } battery_combo->setCurrentIndex(index); battery_percentage_switcher->switchedOn = sessionproxy->get_show_power_percentage_qt(); battery_time_switcher->switchedOn = sessionproxy->get_show_power_time_qt();*/ } this->initConnect(); } void PanelWidget::onSendMatePanelValue(bool app, bool desktop, bool icon, bool places) { app_switcher->switchedOn = app; desktop_switcher->switchedOn = desktop; icon_switcher->switchedOn = icon; places_switcher->switchedOn = places; } void PanelWidget::onSendUnityBlurAndTransparencyValue(int blur, double transparent) { if(blur == 2) { smart_radio->setChecked(true); static_radio->setChecked(false); clear_radio->setChecked(false); } else if(blur == 1) { static_radio->setChecked(true); smart_radio->setChecked(false); clear_radio->setChecked(false); } else if(blur == 0) { clear_radio->setChecked(true); static_radio->setChecked(false); smart_radio->setChecked(false); } transparency_slider->setValue(transparent); } void PanelWidget::onSendUnityTimeValue(const QString &time_format, const QStringList &timelist, bool showSecond, bool showWeek, bool showDate) { QStringList m_timelist = timelist; date_combo->clear(); date_combo->clearEditText(); date_combo->addItems(m_timelist); QList::Iterator it = m_timelist.begin(), itend = m_timelist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == time_format) break; } date_combo->setCurrentIndex(initIndex); second_switcher->switchedOn = showSecond; week_switcher->switchedOn = showWeek; date_switcher->switchedOn = showDate; } void PanelWidget::onSendUnityPanelPowerValue(const QString &cur_power, const QStringList &powerlist, bool showPower, bool showBatteryTime) { m_powerlist.clear(); m_powerlist = powerlist; battery_combo->clear(); battery_combo->clearEditText(); battery_combo->addItems(m_powerlist); QList::Iterator ite = m_powerlist.begin(), iteend = m_powerlist.end(); int index = 0; for(;ite != iteend; ite++,index++) { if(*ite == cur_power) break; } battery_combo->setCurrentIndex(index); battery_percentage_switcher->switchedOn = showPower; battery_time_switcher->switchedOn = showBatteryTime; } void PanelWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(smart_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(static_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(clear_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(transparency_slider, SIGNAL(valueChanged(double)), this, SLOT(setTransparencyValue(double))); connect(date_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setDateFormat(QString))); connect(second_switcher, SIGNAL(clicked()), this, SLOT(setDisplaySeconds())); connect(week_switcher, SIGNAL(clicked()), this, SLOT(setDisplayWeek())); connect(date_switcher, SIGNAL(clicked()), this, SLOT(setDisplayDate())); connect(battery_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setShowBatteryIcon(QString))); connect(battery_percentage_switcher, SIGNAL(clicked()), this, SLOT(setDisplayBatteryPercentage())); connect(battery_time_switcher, SIGNAL(clicked()), this, SLOT(setDisplayBatteryTime())); connect(app_switcher, SIGNAL(clicked()), this, SLOT(showApplications())); connect(desktop_switcher, SIGNAL(clicked()), this, SLOT(showDesktop())); connect(icon_switcher, SIGNAL(clicked()), this, SLOT(showIcon())); connect(places_switcher, SIGNAL(clicked()), this, SLOT(showPlaces())); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(panelwidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(panelwidget_notify_bool(QString, bool))); } void PanelWidget::panelwidget_notify_string(QString key, QString value) { if (key == "icon-policy") { QList::Iterator it = m_powerlist.begin(), itend = m_powerlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; battery_combo->setCurrentIndex(index); } else battery_combo->setCurrentIndex(-1); } } void PanelWidget::panelwidget_notify_bool(QString key, bool value) { if (key == "show-seconds") { second_switcher->switchedOn = value; } else if (key == "show-day") { week_switcher->switchedOn = value; } else if (key == "show-date") { date_switcher->switchedOn = value; } else if (key == "show-time") { battery_time_switcher->switchedOn = value; } else if (key == "show-percentage") { battery_percentage_switcher->switchedOn = value; } else if (key == "show-applications") { app_switcher->switchedOn = value; } else if (key == "show-desktop") { desktop_switcher->switchedOn = value; } else if (key == "show-icon") { icon_switcher->switchedOn = value; } else if (key == "show-places") { places_switcher->switchedOn = value; } } void PanelWidget::setTransparencyValue(double value) { emit resetPanelTransparencyValue(value); // sessionproxy->set_panel_transparency_qt(value); } void PanelWidget::setDateFormat(QString selected) { emit resetDateFormat(selected); // sessionproxy->set_time_format_qt(selected); } void PanelWidget::setShowBatteryIcon(QString selected) { emit resetShowBatteryIcon(selected); // sessionproxy->set_power_icon_policy_qt(selected); } //TODO: 设计一个枚举变量作为标记,用一个函数去调用dbus设置各个值 void PanelWidget::setRadioButtonRowStatus(/*bool status*/) { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 QRadioButton* pbtn = qobject_cast(obj); QString obj_name = pbtn->objectName(); if(obj_name == "smart_radio") { emit resetDashBlurExperimental(2); // sessionproxy->set_dash_blur_experimental_qt(2); } else if(obj_name == "static_radio") { emit resetDashBlurExperimental(1); // sessionproxy->set_dash_blur_experimental_qt(1); } else if(obj_name == "clear_radio") { emit resetDashBlurExperimental(0); // sessionproxy->set_dash_blur_experimental_qt(0); } } void PanelWidget::setDisplaySeconds() { emit resetDisplaySeconds(second_switcher->switchedOn); // sessionproxy->set_show_seconds_qt(second_switcher->switchedOn); } void PanelWidget::setDisplayWeek() { emit resetDisplayWeek(week_switcher->switchedOn); // sessionproxy->set_show_week_qt(week_switcher->switchedOn); } void PanelWidget::setDisplayDate() { emit resetDisplayDate(date_switcher->switchedOn); // sessionproxy->set_show_date_qt(date_switcher->switchedOn); } void PanelWidget::setDisplayBatteryPercentage() { emit resetDisplayBatteryPercentage(battery_percentage_switcher->switchedOn); // sessionproxy->set_show_power_percentage_qt(battery_percentage_switcher->switchedOn); } void PanelWidget::setDisplayBatteryTime() { emit resetDisplayBatteryTime(battery_time_switcher->switchedOn); // sessionproxy->set_show_power_time_qt(battery_time_switcher->switchedOn); } void PanelWidget::showApplications() { emit resetShowApplications(app_switcher->switchedOn); // sessionproxy->set_show_apps_qt(app_switcher->switchedOn); } void PanelWidget::showDesktop() { emit resetShowDesktop(desktop_switcher->switchedOn); // sessionproxy->set_show_desktop_qt(desktop_switcher->switchedOn); } void PanelWidget::showIcon() { emit resetShowIcon(icon_switcher->switchedOn); // sessionproxy->set_show_icon_qt(icon_switcher->switchedOn); } void PanelWidget::showPlaces() { emit resetShowPlaces(places_switcher->switchedOn); // sessionproxy->set_show_places_qt(places_switcher->switchedOn); } youker-assistant/setting/animationwidget.cpp0000664000175000017500000003233013260315532020372 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "animationwidget.h" #include #include "../component/agentlistitem.h" #include "../dbusproxy/youkersystemdbus.h" #include "../mainui/mainwindow.h" #include #include #include "../component/tipdialog.h" AnimationWidget::AnimationWidget(QWidget *parent, SystemDispatcher *proxy, MainWindow *window) : QWidget(parent), systemproxy(proxy), parentWindow(window) { dataOK = false; title_label = new QLabel(); left_widget = new QWidget(); left_widget->setFixedWidth(240); right_widget = new QWidget(); right_widget->setFixedWidth(500); // title_label = new QLabel(); // title_label->setFixedHeight(20); // description_label = new QLabel(); // description_label->setFixedHeight(20); // back_btn = new QPushButton(); // QVBoxLayout *v_layout = new QVBoxLayout(); // v_layout->addWidget(title_label); // v_layout->addWidget(description_label); // v_layout->setMargin(0); // v_layout->setSpacing(1); // QHBoxLayout *h_layout = new QHBoxLayout(); // h_layout->addWidget(back_btn); // h_layout->addLayout(v_layout); // h_layout->addStretch(); // top_widget->setLayout(h_layout); // top_widget->setFixedSize(900,60); // h_layout->setSpacing(20); // h_layout->setContentsMargins(20, 0, 0, 0); custom_btn = new QPushButton(); custom_btn->setFixedSize(120, 32); custom_btn->setObjectName("blackButton"); custom_btn->setFocusPolicy(Qt::NoFocus); ok_btn = new QPushButton(); ok_btn->setFixedSize(91, 25); ok_btn->setObjectName("blackButton"); ok_btn->setFocusPolicy(Qt::NoFocus); view_widget = new QWidget(); view_widget->setFixedSize(205, 190); view_widget->setWindowFlags(Qt::FramelessWindowHint); view_widget->setAutoFillBackground(true); QPalette palette; // palette.setColor(QPalette::Background, QColor(192,253,123)); palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/previewzone.png"))); view_widget->setPalette(palette); show_widget = new QWidget(); show_widget->setFixedSize(172, 115); // show_widget->setWindowFlags(Qt::FramelessWindowHint); // show_widget->setAutoFillBackground(true); // show_widget->setObjectName("transparentWidget"); QVBoxLayout *layout0 = new QVBoxLayout(); layout0->addWidget(show_widget); layout0->addStretch(); layout0->setMargin(0); layout0->setSpacing(0); view_widget->setLayout(layout0); view_widget->setContentsMargins(16, 16, 16, 0); tip_label = new QLabel(); list_widget = new QListWidget(); list_widget->setObjectName("animationListWidget"); // QStringList names; // for (int i = 1; i <= 30; ++i) // names.append(tr("app %1").arg(i)); // list_widget->insertItems(0, names); list_widget->setIconSize(QSize(16, 16)); list_widget->setResizeMode(QListView::Adjust); // list_widget->setViewMode(QListView::IconMode); list_widget->setMovement(QListView::Static); list_widget->setSpacing(5); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget(title_label); layout->addStretch(); layout->setMargin(0); layout->setContentsMargins(20, 20, 0, 0); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->addStretch(); layout1->addWidget(view_widget, Qt::AlignHCenter); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->addStretch(); layout2->addWidget(custom_btn, Qt::AlignHCenter); layout2->addStretch(); QVBoxLayout *layout3 = new QVBoxLayout(); layout3->addLayout(layout1); layout3->addLayout(layout2); layout3->addStretch(); layout3->setAlignment(Qt::AlignHCenter); layout3->setSpacing(20); left_widget->setLayout(layout3); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->addStretch(); layout4->addWidget(ok_btn); QVBoxLayout *layout5 = new QVBoxLayout(); layout5->addWidget(tip_label); layout5->addWidget(list_widget); layout5->addLayout(layout4); right_widget->setLayout(layout5); // QHBoxLayout *layout6 = new QHBoxLayout(); // layout6->addWidget(left_widget); // layout6->addWidget(right_widget); // bottom_widget->setLayout(layout6); // bottom_widget->setFixedWidth(850); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); QHBoxLayout *widget_layout = new QHBoxLayout(); // main_layout->addWidget(splitter); widget_layout->addWidget(left_widget); widget_layout->addWidget(right_widget); widget_layout->setSpacing(60); widget_layout->setMargin(0); widget_layout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *main_layout = new QVBoxLayout(); main_layout->addLayout(layout); main_layout->addLayout(widget_layout); main_layout->setSpacing(30); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); // this->initData(); this->setLanguage(); } AnimationWidget::~AnimationWidget() { // if(title_label != NULL) // { // delete title_label; // title_label = NULL; // } // if(back_btn != NULL) // { // delete back_btn; // back_btn = NULL; // } } void AnimationWidget::setLanguage() { // title_label->setText(tr("Boot animation settings")); // description_label->setText(tr("Click the \"Custom Picture\" button to select the picture you want to add, click the picture you want to set and push the \"OK\" button to complete.")); // back_btn->setText(tr("Back")); title_label->setText(tr("Please select a picture as boot animation")); custom_btn->setText(tr("Custom Picture")); tip_label->setText(tr("Optional BootAnimation")); ok_btn->setText(tr("OK")); } void AnimationWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(custom_btn, SIGNAL(clicked()), this, SLOT(selectCustomAnimation())); connect(ok_btn, SIGNAL(clicked()), this, SLOT(setCustomAnimation())); } bool AnimationWidget::getStatus() { return this->dataOK; } void AnimationWidget::initData() { // bootimagepage.selectedimage = plymouth_list[0]; systemproxy->plymouth_init_check_qt(); QStringList valid_list; QStringList plymouth_list = systemproxy->get_existing_plymouth_list_qt(); for(int i=0; i < plymouth_list.length(); i++) { if(systemproxy->get_image_path_qt(plymouth_list[i]) != "False"){ // mainModel.append({"itemTitle": plymouth_list[i]}); valid_list.append(plymouth_list[i]); } } for(int nIndex = 0;nIndex < valid_list.length();++nIndex) { QString strPath=QString("://res/picture.png"); QPixmap objPixmap(strPath); // //生成QListWidgetItem对象(注意:其Icon图像进行了伸缩[16*16])---scaled函数 // QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(16,16))), tr("animal picture %1").arg(nIndex)); // //设置单元项的宽度和高度 // pItem->setSizeHint(QSize(130,20)); // pItem->setBackgroundColor(QColor(0, 0, 255, 127)); // pItem->setTextColor(QColor(0, 0, 255, 127)); // list_widget->insertItem(nIndex, pItem); AgentListItem *account_item = new AgentListItem(); account_item->setCurrentItemName(QString(valid_list[nIndex])); connect(account_item, SIGNAL(showItemName(QString)), this, SLOT(displayCurrentItemInfo(QString))); connect(account_item, SIGNAL(removeItem(QString)), this, SLOT(deleteSelectedAnimation(QString))); QListWidgetItem *item = new QListWidgetItem(list_widget); // item->setSizeHint(QSize(130,20)); // item->setBackgroundColor(QColor(0, 0, 255, 127)); item->setIcon(QIcon(objPixmap.scaled(QSize(16,16)))); list_widget->setItemWidget(item, account_item); } // connect(list_widget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(onItemClicked(QListWidgetItem*))); dataOK = true; this->initConnect(); } void AnimationWidget::selectCustomAnimation() { show_widget->setWindowFlags(Qt::FramelessWindowHint); show_widget->setAutoFillBackground(true); // show_widget->setObjectName("transparentWidget"); QStringList fileNameList; QString abs_path; QFileDialog* fd = new QFileDialog(this); fd->resize(500, 471); fd->setFilter(tr("Image Files (*.png *.jpg *.gif)")); fd->setViewMode(QFileDialog::List);//设置浏览模式,有 列表(list) 模式和 详细信息(detail)两种方式 if (fd->exec() == QDialog::Accepted) { fileNameList = fd->selectedFiles(); abs_path = fileNameList[0]; int start_pos = abs_path.lastIndexOf("/") + 1; int end_pos = abs_path.length(); QString pic_name = abs_path.mid(start_pos, end_pos-start_pos); this->selected_animation = pic_name; QPalette palette; // palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/ubuntukylin.png").scaled(180, 170, Qt::KeepAspectRatio))); palette.setBrush(QPalette::Background, QBrush(QPixmap(abs_path).scaled(172, 115, Qt::KeepAspectRatio))); show_widget->setPalette(palette); systemproxy->add_new_plymouth_qt(abs_path, pic_name); //update date list_widget->clear(); this->initData(); } else fd->close(); } void AnimationWidget::setCustomAnimation() { // QList::const_iterator i=list_widget.begin(); // qDebug() << (*i)->text(); systemproxy->custom_plymouth_bg_qt(this->selected_animation); } void AnimationWidget::deleteSelectedAnimation(QString name) { QString result = systemproxy->delete_plymouth_qt(name); if (result == "ok") { // toolkits.alertMSG(qsTr("Deleted successfully!"));//删除成功! // qDebug() << "Deleted successfully!"; int list_count = list_widget->count(); for(int i=0; i < list_count; i++) { QListWidgetItem *item = list_widget->item(i); AgentListItem *account_item = (AgentListItem *)(list_widget->itemWidget(item)); QString cur_name = account_item->getCurrentItemName(); if(name == cur_name) { list_widget->takeItem(i); delete item; break; } } TipDialog *dialog = new TipDialog(0, tr("Deleted successfully!")); int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2); dialog->move(w_x, w_y); dialog->show(); dialog->raise(); } else if (result == "use") { // qDebug() << "This is the using animation!"; TipDialog *dialog = new TipDialog(0, tr("This is the using animation!")); int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2); dialog->move(w_x, w_y); dialog->show(); dialog->raise(); // toolkits.alertMSG(qsTr("This is the using animation!"));//该动画为当前使用动画! } else if (result == "sys") { qDebug() << "This is the default animation!"; TipDialog *dialog = new TipDialog(0, tr("This is the default animation!")); int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2); dialog->move(w_x, w_y); dialog->show(); dialog->raise(); // toolkits.alertMSG(qsTr("This is the default animation!"));//该动画为系统默认动画! } else { // qDebug() << "An unknown error occurred!"; TipDialog *dialog = new TipDialog(0, tr("An unknown error occurred!")); int w_x = parentWindow->frameGeometry().topLeft().x() + (900 / 2) - (410 / 2); int w_y = parentWindow->frameGeometry().topLeft().y() + (600 /2) - (180 / 2); dialog->move(w_x, w_y); dialog->show(); dialog->raise(); // toolkits.alertMSG(qsTr("An unknown error occurred!"));//发生未知错误! } } void AnimationWidget::displayCurrentItemInfo(QString info) { this->selected_animation = info; int list_count = list_widget->count(); for(int i=0; i < list_count; i++) { QListWidgetItem *item = list_widget->item(i); AgentListItem *account_item = (AgentListItem *)(list_widget->itemWidget(item)); QString cur_name = account_item->getCurrentItemName(); if(info == cur_name) { list_widget->setCurrentItem(item); break; } } } youker-assistant/setting/switchmenu.cpp0000664000175000017500000000353013260315532017375 0ustar fengfeng#include "switchmenu.h" #include #include #include SwitchMenu::SwitchMenu(QWidget *parent) : QWidget(parent) { // setWindowFlags(Qt::FramelessWindowHint); m_bOn = false; m_bLBtnDown = false; m_pixmapBk.load(":/background/res/on.png"); m_pixmapFore.load(":/background/res/off.png"); setGeometry(0, 0, m_pixmapBk.width(), m_pixmapBk.height()); } void SwitchMenu::paintEvent(QPaintEvent *) { qDebug() << "1111111111"; QPainter painter(this); painter.drawPixmap(QPoint(0,0), m_pixmapBk); QPoint ptFore; if (m_bOn) { ptFore = rect().topLeft(); } else { ptFore = QPoint(this->width() - m_pixmapFore.width(), this->rect().top()); } painter.drawPixmap(ptFore, m_pixmapFore); QRect rcOn; rcOn.setTopLeft(rect().topLeft()); rcOn.setBottomRight(QPoint(m_pixmapFore.width(), m_pixmapFore.height())); painter.drawText(rcOn, Qt::AlignCenter, "ON"); QRect rcOff; rcOff.setTopLeft(QPoint(rect().width() - m_pixmapFore.width(), rect().top())); rcOff.setBottomRight(rect().bottomRight()); painter.drawText(rcOff, Qt::AlignCenter, "Off"); } void SwitchMenu::mousePressEvent(QMouseEvent *) { qDebug() << "333333333"; m_bLBtnDown = true; } void SwitchMenu::mouseReleaseEvent(QMouseEvent *e) { qDebug() << "222222222"; if (m_bLBtnDown) { m_bOn = !m_bOn; m_bLBtnDown = false; } update(); } void SwitchMenu::leaveEvent(QEvent *) { // status = NORMAL; update(); } void SwitchMenu::enterEvent(QEvent *) { // status = ENTER; update(); } //void SystemButton::paintEvent(QPaintEvent *) //{ // QPainter painter; // painter.begin(this); // painter.drawPixmap(this->rect(), pixmap.copy(btn_width * status, 0, btn_width, btn_height)); // painter.end(); //} youker-assistant/setting/settingdelegate.h0000664000175000017500000000231113260315532020020 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGDELEGATE_H #define SETTINGDELEGATE_H #include #include class SettingDelegate : public QItemDelegate { Q_OBJECT public: explicit SettingDelegate(QObject *parent = 0); private: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; }; #endif // SETTINGDELEGATE_H youker-assistant/setting/deadpixelwidget.cpp0000664000175000017500000000525513260315532020360 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "deadpixelwidget.h" #include #include #include DeadpixelWidget::DeadpixelWidget(QWidget *parent) : QWidget(parent) { this->qtui = NULL; tip_label = new QLabel(); tip_label->setWordWrap(true);//QLabel自动换行 tip_label->setFixedWidth(500); ok_btn = new QPushButton(); ok_btn->setFixedSize(91, 25); ok_btn->setObjectName("blackButton"); ok_btn->setFocusPolicy(Qt::NoFocus); // QVBoxLayout *layout = new QVBoxLayout(); // layout->addStretch(); // layout->addWidget(tip_label); // layout->addWidget(ok_btn); // layout->addStretch(); // bottom_widget->setLayout(layout); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); QHBoxLayout *main_layout = new QHBoxLayout(this); // main_layout->addWidget(splitter); main_layout->addStretch(); main_layout->addWidget(tip_label); main_layout->addWidget(ok_btn); main_layout->addStretch(); main_layout->setSpacing(0); main_layout->setMargin(0); main_layout->setContentsMargins(0, 0, 0, 0); setLayout(main_layout); this->setLanguage(); this->initConnect(); } DeadpixelWidget::~DeadpixelWidget() { if(qtui != NULL) { delete qtui; qtui = NULL; } } void DeadpixelWidget::setLanguage() { // title_label->setText(tr("Monitor Check")); // description_label->setText(tr("Monitor Check.")); // back_btn->setText(tr("Back")); tip_label->setText(tr("Left-click to change the color, right-click to exit from this detection.")); ok_btn->setText(tr("OK")); } void DeadpixelWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(ok_btn, SIGNAL(clicked()), this, SLOT(startMonitorCheck())); } void DeadpixelWidget::startMonitorCheck() { if (this->qtui) { delete this->qtui; this->qtui = NULL; } this->qtui = new QUIBO(); } youker-assistant/setting/switchmenu.h0000664000175000017500000000130313260315532017036 0ustar fengfeng#ifndef SWITCHMENU_H #define SWITCHMENU_H #include class SwitchMenu : public QWidget { Q_OBJECT public: explicit SwitchMenu(QWidget *parent = 0); protected: // /*virtual */void paintEvent(QPaintEvent *); // virtual void mousePressEvent(QMouseEvent *); // virtual void mouseReleaseEvent(QMouseEvent *); protected: void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *); signals: public slots: private: QPixmap m_pixmapBk; QPixmap m_pixmapFore; bool m_bOn; bool m_bLBtnDown; }; #endif // SWITCHMENU_H youker-assistant/setting/settingmodel.h0000664000175000017500000000256213260315532017356 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGMODEL_H #define SETTINGMODEL_H #include class SettingModel : public QAbstractListModel { Q_OBJECT public: explicit SettingModel(QObject *parent = 0); enum ItemRole { HoverRole = Qt::UserRole + 1,//101 }; public slots: void addItem(const QString &moduleName); void setCurrentItem(const QModelIndex &index); int rowCount(const QModelIndex &index) const; QVariant data(const QModelIndex &index, int role) const; private: QStringList m_moduleList; // QStringList m_nameList; QModelIndex m_currentIndex; }; #endif // SETTINGMODEL_H youker-assistant/setting/settinglistview.h0000664000175000017500000000202313260315532020114 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGLISTVIEW_H #define SETTINGLISTVIEW_H #include class SettingListView : public QListView { Q_OBJECT public: explicit SettingListView(QWidget *parent = nullptr); protected: void leaveEvent(QEvent *e); }; #endif // SETTINGLISTVIEW_H youker-assistant/setting/deadpixelwidget.h0000664000175000017500000000232513260315532020020 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 DEADPIXELWIDGET_H #define DEADPIXELWIDGET_H #include #include "../component/quibo.h" class QLabel; class QPushButton; class DeadpixelWidget : public QWidget { Q_OBJECT public: explicit DeadpixelWidget(QWidget *parent = 0); ~DeadpixelWidget(); void setLanguage(); void initConnect(); public slots: void startMonitorCheck(); private: QUIBO *qtui; QLabel *tip_label; QPushButton *ok_btn; }; #endif // DEADPIXELWIDGET_H youker-assistant/setting/menuwidget.h0000664000175000017500000000706113260315532017027 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 MENUWIDGET_H #define MENUWIDGET_H #include #include "../component/kylinswitcher.h" #include "settingmodulelpage.h" class QLabel; class QPushButton; class QComboBox; class QSlider; class QDoubleSpinBox; class MenuWidget : public SettingModulePage { Q_OBJECT public: explicit MenuWidget(QWidget *parent = 0, QString cur_desktop = ""); ~MenuWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void setIconColouring(QString selectColour); void setAutoHide(); void setDisplayDesktopIcon(); void setIconSizeValue(int value); void setTransparencyValue(double value); void setTopIconSizeValue(int value); void setBottomIconSizeValue(int value); void setTopAutoHide(); void setBottomAutoHide(); void setLauncherPosition(QString position); void launcherwidget_notify_double(QString key, double value); void launcherwidget_notify_bool(QString key, bool value); void launcherwidget_notify_int(QString key, int value); void launcherwidget_notify_string(QString key, QString value); void onSendMatePanelIconValue(int topIconSize, int bottomIconSize, bool topIconHide, bool bottomIconHide); void onSendUnityIconValue(int iconSize, bool iconHide, bool desktopIconShowed, double launcherTransparency, int iconColourIndex, const QStringList &colourlist); void onSendUnityLauncherPosition(const QString ¤t_position, const QStringList &positionlist); signals: void requestMateOrUnityMenuData(bool isMate); void resetIconSizeValue(int value); void resetTransparencyValue(int value); void resetIconColouring(int value); void resetAutoHide(bool b); void resetDisplayDesktopIcon(bool b); void resetTopIconSizeValue(int value); void resetBottomIconSizeValue(int value); void resetTopAutoHide(bool b); void resetBottomAutoHide(bool b); void resetLauncherPosition(const QString &position); private: QString desktop; QStringList m_colourlist; QStringList m_positionlist; QLabel *size_label; QLabel *size_value_label; QLabel *hide_label; QLabel *icon_label; QLabel *transparency_label; QLabel *background_label; QLabel *size_top_label; QLabel *hide_top_label; QLabel *size_top_value_label; QLabel *size_bottom_label; QLabel *hide_bottom_label; QLabel *size_bottom_value_label; QLabel *position_label; QSlider *size_slider; KylinSwitcher *hide_switcher; KylinSwitcher *icon_switcher; QDoubleSpinBox *transparency_slider; QComboBox *backgound_combo; QSlider *size_top_slider; QSlider *size_bottom_slider; KylinSwitcher *hide_top_switcher; KylinSwitcher *hide_bottom_switcher; QComboBox *position_combo; }; #endif // MENUWIDGET_H youker-assistant/setting/theme/0000775000175000017500000000000013260315533015605 5ustar fengfengyouker-assistant/setting/theme/themedelegate.cpp0000664000175000017500000001561013260315532021110 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "themedelegate.h" #include #include #include #include namespace { const int THEME_IMAGE_MARGIN = 10; } ThemeDelegate::ThemeDelegate(QObject *parent) : QStyledItemDelegate(parent) , m_textColor(QColor("rgba(0,153,68,0.3)")) { } QWidget *ThemeDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(index) Q_UNUSED(option) return QStyledItemDelegate::createEditor(parent, option, index); } void ThemeDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { if (!index.isValid()) { return; } QStyledItemDelegate::setEditorData(editor, index); } void ThemeDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } void ThemeDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QList datas = index.model()->data(index, Qt::DisplayRole).toList(); if (!datas.isEmpty()) { // Draw background drawBackground(option, painter);//or draw shadow effect: "://res/theme-cover.png" // Draw theme image drawImage(option, index, painter); // Draw title text drawTitle(option, index, painter); } } /*bool ThemeDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { Q_UNUSED(index) Q_UNUSED(option) QMouseEvent *pEvent = static_cast (event); qDebug() << pEvent->globalPos(); //QPoint m_mousePoint = pEvent->pos(); switch (event->type()) { case QEvent::MouseMove://鼠标滑过 break; case QEvent::MouseButtonPress://鼠标按下 break; case QEvent::MouseButtonRelease://鼠标释放 break; default: break; } return QStyledItemDelegate::editorEvent(event, model, option, index); }*/ QSize ThemeDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option) return index.model()->data(index, Qt::SizeHintRole).toSize(); } void ThemeDelegate::drawBackground(const QStyleOptionViewItem &option, QPainter *painter) const { painter->setRenderHint(QPainter::Antialiasing, true); QRect rect = option.rect; rect.setSize(QSize(rect.width() - 1, rect.height() - 1)); QColor bgColor; QColor borderColor; if ((option.state & QStyle::State_MouseOver) && (option.state & QStyle::State_Selected) == 0) { bgColor = QColor(224,244,249,127);//QColor("#e0f4f9") borderColor = QColor("#999999"); } else if (option.state & QStyle::State_Selected) { bgColor = QColor(43,182,234,127);//QColor("#2bb6ea") borderColor = QColor("#e0f4f9"); } else { bgColor = QColor("#ffffff"); borderColor = QColor("#ffffff"); } QPainterPath path; path.addRoundedRect(rect.x(), rect.y(), rect.width(), rect.height(), 5, 5); painter->fillPath(path, QBrush(bgColor)); QPen borderPen(QBrush(borderColor), 1); painter->setPen(borderPen); painter->drawPath(path); } void ThemeDelegate::drawImage(const QStyleOptionViewItem &option, const QModelIndex& index, QPainter *painter) const { painter->setRenderHint(QPainter::Antialiasing, true); QRect rect = option.rect; const int pixmapSize = rect.width() - THEME_IMAGE_MARGIN * 2; QList datas = index.model()->data(index, Qt::DisplayRole).toList(); //QString data = index.data().toString(); const QString name = datas[0].toString(); const QString picture = datas[1].toString(); const QString defaultPic = datas[2].toString(); bool isCurrent = datas[3].toBool(); // Theme image QSize imageSize; imageSize.setWidth(option.rect.width() - THEME_IMAGE_MARGIN * 2); imageSize.setHeight(imageSize.width()); /*if ((option.state & QStyle::State_MouseOver) && (option.state & QStyle::State_Selected) == 0) { } else if (option.state & QStyle::State_Selected) { }*/ QPixmap pixmap = QPixmap(picture); if (!pixmap.isNull()) pixmap = pixmap.scaled(imageSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); else pixmap = QPixmap(defaultPic).scaled(imageSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPixmap scalePixmap = pixmap.scaled(pixmapSize, pixmapSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); painter->drawPixmap(rect.x() + THEME_IMAGE_MARGIN, rect.y() + THEME_IMAGE_MARGIN, pixmapSize, pixmapSize, scalePixmap); if (isCurrent) { painter->drawPixmap(rect.x() + 2*THEME_IMAGE_MARGIN, rect.y() + 2*THEME_IMAGE_MARGIN, 20, 20, QPixmap("://res/choose.png")); } } void ThemeDelegate::drawTitle(const QStyleOptionViewItem &option, const QModelIndex &index, QPainter *painter) const { painter->setRenderHint(QPainter::Antialiasing, false); QRect rect = option.rect; QFont font; font.setPixelSize(12); QPen pen(m_textColor); QList datas = index.model()->data(index, Qt::DisplayRole).toList(); // QString data = index.data().toString(); QString name = datas[0].toString(); painter->setPen(pen); QFont textFont(painter->font()); textFont.setPixelSize(12); textFont.setWeight(24); const QFontMetrics fm(textFont); const int textHeight = rect.height() * 0.78; const QRectF textRect = QRect(rect.x(), rect.y() + textHeight + 5, rect.width(), rect.height() - textHeight); // Draw theme name text background /*QSize textSize(qMin(fm.width(name) + 18, rect.width()), fm.height() + 2); QRect bgRect(rect.x() + (rect.width() - textSize.width()) / 2, textRect.y()+ (textRect.height() - textSize.height()) / 2, textSize.width(), textSize.height()); if (option.state & QStyle::State_Selected) { QPainterPath textPainterPath; textPainterPath.addRoundedRect(bgRect, 2, 2); painter->fillPath(textPainterPath, QBrush(QColor("#2ca7f8"))); }*/ painter->setFont(textFont); painter->drawText(textRect, fm.elidedText(name, Qt::ElideMiddle, rect.width()), QTextOption(Qt::AlignCenter)); } youker-assistant/setting/theme/themeview.cpp0000664000175000017500000001313113260315532020304 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "themeview.h" #include "themedelegate.h" #include #include #include namespace { const QSize THEME_ITEM_DEFAULT_SIZE = QSize(139, 160); } ThemeView::ThemeView(QWidget *parent) : QListView(parent) , m_itemSize(THEME_ITEM_DEFAULT_SIZE) , m_prevModelIndex(QModelIndex()) { setMouseTracking(true); m_delegate = new ThemeDelegate(this); setItemDelegate(m_delegate); m_model = new QStandardItemModel(this); setModel(m_model); setEditTriggers(QAbstractItemView::NoEditTriggers); setResizeMode(QListView::Adjust); setViewMode(QListView::IconMode); setSelectionMode(QAbstractItemView::SingleSelection); setUniformItemSizes(true); setSpacing(60); setDragEnabled(false); // connect(this, SIGNAL(ri)) connect(this, &ThemeView::doubleClicked, this, &ThemeView::onItemClicked); connect(this, &ThemeView::clicked, this, &ThemeView::onItemClicked); connect(selectionModel(), &QItemSelectionModel::currentChanged, this, [=] (const QModelIndex ¤t) { if (!current.isValid()) return; if (m_prevModelIndex.isValid()) {//update the previous model index's data QList datas = m_prevModelIndex.model()->data(m_prevModelIndex, Qt::DisplayRole).toList(); if (!datas.isEmpty()) { datas.replace(3, QVariant(false)); m_model->setData(m_prevModelIndex, QVariant(datas), Qt::DisplayRole); m_model->setData(m_prevModelIndex, QVariant(m_itemSize), Qt::SizeHintRole); } } m_prevModelIndex = current; }); } ThemeView::~ThemeView() { this->clearData(); } void ThemeView::clearData() { setAutoScroll(false); for (int i = 0; i < this->m_model->rowCount(); ++i) { this->m_model->removeRow(i); } setAutoScroll(true); m_prevModelIndex = QModelIndex(); } QModelIndex ThemeView::loadThemeData(const QString &name, bool isCurrrent) { QVariantList datas; datas.append(QVariant(name));//theme name datas.append(QVariant(QString(":/gtk/res/theme/%1.png").arg(name)));//theme picture datas.append(QVariant(":/gtk/res/theme/disappear.png"));//default picture datas.append(QVariant(isCurrrent)); QModelIndex index; const int existIndex = isExist(name); if (existIndex != -1) {//it exist, then update data index = m_model->index(existIndex, 0); } else {//it not exist, then new item QStandardItem *item = new QStandardItem(); QList items; items.append(item); m_model->appendRow(items); index = m_model->index(m_model->rowCount() - 1, 0); } m_model->setData(index, QVariant(datas), Qt::DisplayRole); m_model->setData(index, QVariant(m_itemSize), Qt::SizeHintRole); return index; } QSize ThemeView::itemSize() const { return m_itemSize; } int ThemeView::isExist(const QString &name) const { for (int i = 0; i < m_model->rowCount(); i++) { const QVariantList datas = m_model->data(m_model->index(i, 0), Qt::DisplayRole).toList(); if (!datas.isEmpty() && datas[0].toString() == name) { return i; } } return -1; } void ThemeView::onItemClicked(const QModelIndex &index) { if (!index.isValid()) return; QList datas = index.model()->data(index, Qt::DisplayRole).toList(); if (!datas.isEmpty()) { const QString name = datas[0].toString(); const int ti = isExist(name); if (ti != -1) {//it must be exist, then update the current model index's data datas.replace(3, QVariant(true)); m_model->setData(index, QVariant(datas), Qt::DisplayRole); m_model->setData(index, QVariant(m_itemSize), Qt::SizeHintRole); setCurrentIndex(index); emit this->sendSelectThemeName(name); } } } void ThemeView::loadOneTheme(const QString &name, bool isCurrrent) { QModelIndex index = loadThemeData(name, isCurrrent); if (isCurrrent) setCurrentIndex(index); scrollTo(m_model->index(index.row() + 1, 0, index.parent())); } void ThemeView::mousePressEvent(QMouseEvent *e) { if (!indexAt(e->pos()).isValid()) { this->selectionModel()->clearSelection(); } QListView::mousePressEvent(e); } /*bool ThemeView::eventFilter(QObject *obj, QEvent *event) { if(event->type() == QEvent::MouseButtonPress) { QMouseEvent *me = (QMouseEvent *)event; } if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); qDebug("Key press %d", keyEvent->key()); if (keyEvent->key() == Qt::Key_Tab) { } else if (keyEvent->key() == Qt::Key_Escape) { } return true; } else { // standard event processing return QObject::eventFilter(obj, event); } }*/ youker-assistant/setting/theme/themeview.h0000664000175000017500000000322613260315532017755 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 THEMEVIEW_H #define THEMEVIEW_H #include #include class ThemeDelegate; class ThemeView : public QListView { Q_OBJECT public: explicit ThemeView(QWidget *parent = 0); ~ThemeView(); void loadOneTheme(const QString &name, bool isCurrrent = false); QModelIndex loadThemeData(const QString &name, bool isCurrrent = false); void clearData(); int isExist(const QString &name) const; QSize itemSize() const; public slots: void onItemClicked(const QModelIndex &index); signals: void sendSelectThemeName(QString themeName); protected: void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; // bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE; private: ThemeDelegate *m_delegate = nullptr; QStandardItemModel *m_model = nullptr; QSize m_itemSize; QModelIndex m_prevModelIndex; }; #endif // THEMEVIEW_H youker-assistant/setting/theme/themedelegate.h0000664000175000017500000000400113260315532020545 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 THEMEDELEGATE_H #define THEMEDELEGATE_H #include class ThemeDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit ThemeDelegate(QObject *parent = nullptr); QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE; void setEditorData(QWidget* editor, const QModelIndex &index) const Q_DECL_OVERRIDE; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE; void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex &index) const Q_DECL_OVERRIDE; // bool editorEvent(QEvent* event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE; void drawBackground(const QStyleOptionViewItem &option, QPainter *painter) const; void drawImage(const QStyleOptionViewItem &option, const QModelIndex &index, QPainter *painter) const; void drawTitle(const QStyleOptionViewItem &option, const QModelIndex &index, QPainter *painter) const; private: QColor m_textColor; }; #endif // THEMEDELEGATE_H youker-assistant/setting/iconwidget.cpp0000664000175000017500000003133213260315532017344 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "iconwidget.h" #include #include #include #include IconWidget::IconWidget(QWidget *parent, QString cur_desktop) : SettingModulePage(parent),desktop(cur_desktop) { theme_label = new QLabel(); // show_label = new QLabel(); computer_label = new QLabel(); folder_label = new QLabel(); network_label = new QLabel(); recycle_label = new QLabel(); disk_label = new QLabel(); theme_combo = new QComboBox(); // show_switcher = new KylinSwitcher(); computer_switcher = new KylinSwitcher(); folder_switcher = new KylinSwitcher(); network_switcher = new KylinSwitcher(); recycle_switcher = new KylinSwitcher(); disk_switcher = new KylinSwitcher(); if (this->desktop != "mate" && this->desktop != "MATE") { computer_label->hide(); computer_switcher->hide(); } theme_label->setFixedWidth(150); // show_label->setFixedWidth(150); computer_label->setFixedWidth(150); folder_label->setFixedWidth(150); network_label->setFixedWidth(150); recycle_label->setFixedWidth(150); disk_label->setFixedWidth(150); // switcher = new KylinSwitcher(); // connect(switcher, SIGNAL(clicked()), this, SLOT(changeSwitcherStatus())); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(theme_label); layout1->addWidget(theme_combo); layout1->addStretch(); // QHBoxLayout *layout2 = new QHBoxLayout(); // layout2->setSpacing(10); // layout2->addWidget(show_label); // layout2->addWidget(show_switcher); // layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(computer_label); layout3->addWidget(computer_switcher); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(folder_label); layout4->addWidget(folder_switcher); layout4->addStretch(); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(network_label); layout5->addWidget(network_switcher); layout5->addStretch(); QHBoxLayout *layout6 = new QHBoxLayout(); layout6->setSpacing(10); layout6->addWidget(recycle_label); layout6->addWidget(recycle_switcher); layout6->addStretch(); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->setSpacing(10); layout7->addWidget(disk_label); layout7->addWidget(disk_switcher); layout7->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); // layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addLayout(layout5); layout->addLayout(layout6); layout->addLayout(layout7); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // QGridLayout *grid_layout = new QGridLayout; // grid_layout->addWidget(theme_label, 0, 0/* ,1, 1*/); // grid_layout->addWidget(theme_combo, 0, 1/* ,1, 1*/); // grid_layout->addWidget(folder_label, 1, 0/* ,1, 1*/); // grid_layout->addWidget(show_switcher, 1, 1/* ,1, 1*/); // grid_layout->addWidget(show_label, 2, 0 /*,1, 1*/); // grid_layout->addWidget(folder_switcher, 2, 1/* ,1, 1*/); // grid_layout->addWidget(network_label, 3, 0 /*,1, 1*/); // grid_layout->addWidget(network_switcher, 3, 1 /*,1, 1*/); // grid_layout->addWidget(recycle_label, 4, 0 /*,1, 1*/); // grid_layout->addWidget(recycle_switcher, 4, 1/* ,1, 1*/); // grid_layout->addWidget(disk_label, 5, 0/* ,1, 1*/); // grid_layout->addWidget(disk_switcher, 5, 1/* ,1, 1*/); // grid_layout->setColumnStretch(0,1); // grid_layout->setColumnStretch(1,3); // bottom_widget->setLayout(grid_layout); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // for(int i = 0; icount();i++) // { // QSplitterHandle *handle = splitter->handle(i); // handle->setEnabled(false); // } // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } IconWidget::~IconWidget() { if (theme_label != NULL) { delete theme_label; theme_label = NULL; } if (computer_label != NULL) { delete computer_label; computer_label = NULL; } if (folder_label != NULL) { delete folder_label; folder_label = NULL; } if (network_label != NULL) { delete network_label; network_label = NULL; } if (recycle_label != NULL) { delete recycle_label; recycle_label = NULL; } if (disk_label != NULL) { delete disk_label; disk_label = NULL; } if (theme_combo != NULL) { delete theme_combo; theme_combo = NULL; } if (computer_switcher != NULL) { delete computer_switcher; computer_switcher = NULL; } if (folder_switcher != NULL) { delete folder_switcher; folder_switcher = NULL; } if (network_switcher != NULL) { delete network_switcher; network_switcher = NULL; } if (recycle_switcher != NULL) { delete recycle_switcher; recycle_switcher = NULL; } if (disk_switcher != NULL) { delete disk_switcher; disk_switcher = NULL; } } QString IconWidget::settingModuleName() { return "IconPage"; } void IconWidget::changeSwitcherStatus() { } void IconWidget::setLanguage() { // title_label->setText(tr("Desktop Icons")); // description_label->setText(tr("Set the desktop icon theme and the visibility of desktop icons.")); // back_btn->setText(tr("Back")); theme_label->setText(tr("Icon theme") + ":"); // show_label->setText(tr("Show Desktop Icons") + ":"); computer_label->setText(tr("Computer") + ":"); folder_label->setText(tr("Home Folder") + ":"); network_label->setText(tr("Network") + ":"); recycle_label->setText(tr("Trash") + ":"); disk_label->setText(tr("Mounted Volumes") + ":"); } void IconWidget::onReceiveIconThemeList(const QString ¤tTheme, const QStringList &themeList) { iconlist.clear(); iconlist = themeList; theme_combo->clear(); theme_combo->clearEditText(); theme_combo->addItems(iconlist); QList::Iterator it = iconlist.begin(), itend = iconlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == currentTheme) break; } theme_combo->setCurrentIndex(initIndex); } void IconWidget::onReceiveDisplayIconValue(bool computer, bool folder, bool network, bool recycle, bool disk) { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { computer_switcher->switchedOn = computer; } folder_switcher->switchedOn = folder; network_switcher->switchedOn = network; recycle_switcher->switchedOn = recycle; disk_switcher->switchedOn = disk; } void IconWidget::initSettingData() { emit this->requestIconData(); this->initConnect(); /*QString current_icon_theme = sessionproxy->get_icon_theme_qt(); iconlist = sessionproxy->get_icon_themes_qt(); theme_combo->clear(); theme_combo->clearEditText(); theme_combo->addItems(iconlist); QList::Iterator it = iconlist.begin(), itend = iconlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == current_icon_theme) break; } theme_combo->setCurrentIndex(initIndex); // show_switcher->setSwitchStatus(sessionproxy->get_show_desktop_icons_qt()); // folder_switcher->setSwitchStatus(sessionproxy->get_show_homefolder_qt()); // network_switcher->setSwitchStatus(sessionproxy->get_show_network_qt()); // recycle_switcher->setSwitchStatus(sessionproxy->get_show_trash_qt()); // disk_switcher->setSwitchStatus(sessionproxy->get_show_devices_qt()); // show_switcher->switchedOn = sessionproxy->get_show_desktop_icons_qt(); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { computer_switcher->switchedOn = sessionproxy->get_show_computer_qt(); } folder_switcher->switchedOn = sessionproxy->get_show_homefolder_qt(); network_switcher->switchedOn = sessionproxy->get_show_network_qt(); recycle_switcher->switchedOn = sessionproxy->get_show_trash_qt(); disk_switcher->switchedOn = sessionproxy->get_show_devices_qt(); */ } void IconWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); // connect(theme_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setIconTheme())); connect(theme_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setIconTheme(QString))); // connect(show_switcher, SIGNAL(clicked()), this, SLOT(setShowDesktopIcons())); connect(computer_switcher, SIGNAL(clicked()), this, SLOT(setComputerIcon())); connect(folder_switcher, SIGNAL(clicked()), this, SLOT(setFolderIcon())); connect(network_switcher, SIGNAL(clicked()), this, SLOT(setNetworkIcon())); connect(recycle_switcher, SIGNAL(clicked()), this, SLOT(setRecycleBinIcon())); connect(disk_switcher, SIGNAL(clicked()), this, SLOT(setDiskIcon())); //20180101 // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(iconwidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(iconwidget_notify_bool(QString, bool))); } void IconWidget::iconwidget_notify_string(QString key, QString value) { if (key == "icon-theme") { QList::Iterator it = iconlist.begin(), itend = iconlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; theme_combo->setCurrentIndex(index); } else theme_combo->setCurrentIndex(-1); } } void IconWidget::iconwidget_notify_bool(QString key, bool value) { // if (key == "show-desktop-icons") { // show_switcher->switchedOn = value; // } if (key == "computer-icon-visible") { computer_switcher->switchedOn = value; } else if (key == "home-icon-visible") { folder_switcher->switchedOn = value; } else if (key == "network-icon-visible") { network_switcher->switchedOn = value; } else if (key == "trash-icon-visible") { recycle_switcher->switchedOn = value; } else if (key == "volumes-visible") { disk_switcher->switchedOn = value; } } void IconWidget::setIconTheme(QString selectTheme) { // sessionproxy->set_icon_theme_qt(selectTheme); emit resetIconTheme(selectTheme); } //void IconWidget::setShowDesktopIcons() { // sessionproxy->set_show_desktop_icons_qt(show_switcher->switchedOn); //} void IconWidget::setComputerIcon() { // emit changeSystemTheme(name); emit displayComputerIcon(computer_switcher->switchedOn); // sessionproxy->set_show_computer_qt(computer_switcher->switchedOn); } void IconWidget::setFolderIcon() { emit displayFolderIcon(folder_switcher->switchedOn); // sessionproxy->set_show_homefolder_qt(folder_switcher->switchedOn); } void IconWidget::setNetworkIcon() { emit displayNetworkIcon(network_switcher->switchedOn); // sessionproxy->set_show_network_qt(network_switcher->switchedOn); } void IconWidget::setRecycleBinIcon() { emit displayRecycleBinIcon(recycle_switcher->switchedOn); // sessionproxy->set_show_trash_qt(recycle_switcher->switchedOn); } void IconWidget::setDiskIcon() { emit displayDiskIcon(disk_switcher->switchedOn); // sessionproxy->set_show_devices_qt(disk_switcher->switchedOn); } youker-assistant/setting/mousewidget.cpp0000664000175000017500000002027113260315532017544 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "mousewidget.h" #include #include #include #include MouseWidget::MouseWidget(QWidget *parent, QString cur_desktop) : SettingModulePage(parent), desktop(cur_desktop) { theme_label = new QLabel(); size_label = new QLabel(); theme_combo = new QComboBox(); small_size = new QRadioButton(); small_size->setFocusPolicy(Qt::NoFocus); // small_size->setChecked(true); small_size->setObjectName("smallradio"); big_size = new QRadioButton(); big_size->setFocusPolicy(Qt::NoFocus); // big_size->setChecked(false); big_size->setObjectName("bigradio"); theme_label->setFixedWidth(150); size_label->setFixedWidth(150); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(theme_label); layout1->addWidget(theme_combo); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(size_label); layout2->addWidget(small_size); layout2->addWidget(big_size); layout2->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } MouseWidget::~MouseWidget() { if (theme_label != NULL) { delete theme_label; theme_label = NULL; } if (size_label != NULL) { delete size_label; size_label = NULL; } if (theme_combo != NULL) { delete theme_combo; theme_combo = NULL; } if (small_size != NULL) { delete small_size; small_size = NULL; } if (big_size != NULL) { delete big_size; big_size = NULL; } } void MouseWidget::setLanguage() { // title_label->setText(tr("Mouse Settings")); // description_label->setText(tr("Replace the theme and size of the mouse pointer, then click the 'OK' button to confirm. Also, theme change need to restart system.")); // back_btn->setText(tr("Back")); theme_label->setText(tr("Mouse Pointer Theme") + ":"); size_label->setText(tr("Cursor Pointer Size") + ":"); small_size->setText(tr("Small Size")); big_size->setText(tr("Big Size")); } QString MouseWidget::settingModuleName() { return "MousePage"; } void MouseWidget::initSettingData() { emit this->requestMouseData(); /* //在mate下,默认值为空 QString current_cursor_theme = sessionproxy->get_cursor_theme_qt(); cursorlist = sessionproxy->get_cursor_themes_qt(); theme_combo->clear(); theme_combo->clearEditText(); theme_combo->addItems(cursorlist); QList::Iterator it = cursorlist.begin(), itend = cursorlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == current_cursor_theme) break; } theme_combo->setCurrentIndex(initIndex); int default_value = sessionproxy->get_cursor_size_qt(); if(default_value < 48) { small_size->setChecked(true); big_size->setChecked(false); } else { big_size->setChecked(true); small_size->setChecked(false); } // if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") // { // if(default_value == 18 || default_value == 24) { // small_size->setChecked(true); // big_size->setChecked(false); // } // else if(default_value == 48) { // big_size->setChecked(true); // small_size->setChecked(false); // } // } // else // { // if(default_value == 24) { // small_size->setChecked(true); // big_size->setChecked(false); // } // else if(default_value == 48) { // big_size->setChecked(true); // small_size->setChecked(false); // } // } */ this->initConnect(); } void MouseWidget::onReceiveMouseThemeAndCusorSize(const QString ¤tTheme, const QStringList &themeList, int cursorSize) { cursorlist.clear(); cursorlist = themeList; theme_combo->clear(); theme_combo->clearEditText(); theme_combo->addItems(cursorlist); QList::Iterator it = cursorlist.begin(), itend = cursorlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == currentTheme) break; } theme_combo->setCurrentIndex(initIndex); if(cursorSize < 48) { small_size->setChecked(true); big_size->setChecked(false); } else { big_size->setChecked(true); small_size->setChecked(false); } } void MouseWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(theme_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setMouseCursorTheme(QString))); connect(small_size, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); connect(big_size, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(mousewidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(int_value_notify(QString, int)), this, SLOT(mousewidget_notify_int(QString, int))); } void MouseWidget::mousewidget_notify_string(QString key, QString value) { if (key == "cursor-theme") { QList::Iterator it = cursorlist.begin(), itend = cursorlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; theme_combo->setCurrentIndex(index); } else theme_combo->setCurrentIndex(-1); } } void MouseWidget::mousewidget_notify_int(QString key, int value) { if (key == "cursor-size") { if(value < 48) { small_size->setChecked(true); big_size->setChecked(false); } else { big_size->setChecked(true); small_size->setChecked(false); } } } void MouseWidget::setMouseCursorTheme(QString selectTheme) { emit resetMouseCursorTheme(selectTheme); } void MouseWidget::setRadioButtonRowStatus(/*bool status*/) { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 QRadioButton* pbtn = qobject_cast(obj); QString obj_name = pbtn->objectName(); if(obj_name == "smallradio") { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") emit this->resetMouseCursorSize(18); // sessionproxy->set_cursor_size_qt(18); else emit this->resetMouseCursorSize(24); // sessionproxy->set_cursor_size_qt(24); } else if(obj_name == "bigradio") { emit this->resetMouseCursorSize(48); // sessionproxy->set_cursor_size_qt(48); } } youker-assistant/setting/windowwidget.h0000664000175000017500000000565113260315532017375 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 WINDOWWIDGET_H #define WINDOWWIDGET_H #include #include "../component/kylinswitcher.h" #include "settingmodulelpage.h" class QLabel; class QPushButton; class QComboBox; class QRadioButton; class WindowWidget : public SettingModulePage { Q_OBJECT public: explicit WindowWidget(QWidget *parent = 0, QString cur_desktop = ""); ~WindowWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void setMenuIcon(); void setMouseWheel(QString selected); void setMouseDoubleClick(QString selected); void setMouseMiddleClick(QString selected); void setMouseRightClick(QString selected); void setRadioButtonRowStatus(); void windowwidget_notify_string(QString key, QString value); void windowwidget_notify_bool(QString key, bool value); void onSendWindowButtonAlign(const QString ¤t_value); void onSendMenusHaveIcons(bool menuHaveIcons); void onSendWindowTitileTags(const QString ¤t_wheel_type, const QStringList &wheellist, const QStringList &titlebarOptions, const QString ¤t_double_type, const QString ¤t_middle_type, const QString ¤t_right_type); signals: void requesetWindowButtonAlign(); void requesetMenusHaveIcons(); void requesetWindowTitileTags(); void resetMenusHaveIcon(bool b); void resetTitlebarWheel(const QString &selected); void resetTitlebarDoubleClick(const QString &selected); void resetMouseMiddleClick(const QString &selected); void resetMouseRightClick(const QString &selected); void resetWindowButtonLeftOrRightAlign(bool isLeft); private: QString desktop; QStringList m_wheellist; QStringList m_titlebarOptions; QLabel *icon_label; QLabel *wheel_label; QLabel *double_click_label; QLabel *middle_click_label; QLabel *right_click_label; KylinSwitcher *icon_switcher; QComboBox *wheel_combo; QComboBox *double_click_combo; QComboBox *middle_click_combo; QComboBox *right_click_combo; QLabel *position_label; QRadioButton *left_radio; QRadioButton *right_radio; }; #endif // WINDOWWIDGET_H youker-assistant/setting/iconwidget.h0000664000175000017500000000510213260315532017005 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 ICONWIDGET_H #define ICONWIDGET_H #include #include "../component/kylinswitcher.h" class QLabel; class QPushButton; class QHBoxLayout; class QComboBox; #include "settingmodulelpage.h" class IconWidget : public SettingModulePage { Q_OBJECT public: explicit IconWidget(QWidget *parent = 0, QString cur_desktop = ""); ~IconWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void changeSwitcherStatus(); void setIconTheme(QString selectTheme); // void setShowDesktopIcons(); void setComputerIcon(); void setFolderIcon(); void setNetworkIcon(); void setRecycleBinIcon(); void setDiskIcon(); void iconwidget_notify_string(QString key, QString value); void iconwidget_notify_bool(QString key, bool value); void onReceiveIconThemeList(const QString ¤tTheme, const QStringList &themeList); void onReceiveDisplayIconValue(bool computer, bool folder, bool network, bool recycle, bool disk); signals: void requestIconData(); void resetIconTheme(const QString &theme); void displayComputerIcon(bool b); void displayFolderIcon(bool b); void displayNetworkIcon(bool b); void displayRecycleBinIcon(bool b); void displayDiskIcon(bool b); private: QString desktop; QStringList iconlist; QLabel *theme_label; // QLabel *show_label; QLabel *computer_label; QLabel *folder_label; QLabel *network_label; QLabel *recycle_label; QLabel *disk_label; QComboBox *theme_combo; // KylinSwitcher *show_switcher; KylinSwitcher *computer_switcher; KylinSwitcher *folder_switcher; KylinSwitcher *network_switcher; KylinSwitcher *recycle_switcher; KylinSwitcher *disk_switcher; }; #endif // ICONWIDGET_H youker-assistant/setting/soundwidget.cpp0000664000175000017500000001655313260315532017554 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "soundwidget.h" #include #include #include SoundWidget::SoundWidget(QWidget *parent, QString cur_desktop) : SettingModulePage(parent),desktop(cur_desktop) { theme_label = new QLabel(); tip_label = new QLabel(); event_label = new QLabel(); feedback_label = new QLabel(); theme_combo = new QComboBox(); tip_switcher = new KylinSwitcher(); event_switcher = new KylinSwitcher(); feedback_switcher = new KylinSwitcher(); theme_label->setFixedWidth(180); tip_label->setFixedWidth(180); event_label->setFixedWidth(180); feedback_label->setFixedWidth(180); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { tip_label->hide(); tip_switcher->hide(); } QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(theme_label); layout1->addWidget(theme_combo); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(tip_label); layout2->addWidget(tip_switcher); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(event_label); layout3->addWidget(event_switcher); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(feedback_label); layout4->addWidget(feedback_switcher); layout4->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } SoundWidget::~SoundWidget() { if (theme_label != NULL) { delete theme_label; theme_label = NULL; } if (tip_label != NULL) { delete tip_label; tip_label = NULL; } if (event_label != NULL) { delete event_label; event_label = NULL; } if (feedback_label != NULL) { delete feedback_label; feedback_label = NULL; } if (theme_combo != NULL) { delete theme_combo; theme_combo = NULL; } if (tip_switcher != NULL) { delete tip_switcher; tip_switcher = NULL; } if (event_switcher != NULL) { delete event_switcher; event_switcher = NULL; } if (feedback_switcher != NULL) { delete feedback_switcher; feedback_switcher = NULL; } } QString SoundWidget::settingModuleName() { return "SoundPage"; } void SoundWidget::setLanguage() { // title_label->setText(tr("Sound effect")); // description_label->setText(tr("Set the sound theme you want.")); // back_btn->setText(tr("Back")); theme_label->setText(tr("Sound theme") + ":"); tip_label->setText(tr("Login tone") + ":"); event_label->setText(tr("Event sounds") + ":"); feedback_label->setText(tr("Input feedback sounds") + ":"); } void SoundWidget::initSettingData() { emit this->requestSoundData(); this->initConnect(); } void SoundWidget::onSendSoundList(const QString ¤tSound, const QStringList &soundList) { if (!soundList.isEmpty()) { m_soundlist.clear(); m_soundlist = soundList; theme_combo->clear(); theme_combo->clearEditText(); theme_combo->addItems(m_soundlist); QList::Iterator it = m_soundlist.begin(), itend = m_soundlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == currentSound) break; } theme_combo->setCurrentIndex(initIndex); } } void SoundWidget::onSendEnableSoundValue(bool login_music, bool sound_event, bool input_sound) { if (desktop != "mate" && desktop != "MATE") { tip_switcher->switchedOn = login_music; } event_switcher->switchedOn = sound_event; feedback_switcher->switchedOn = input_sound; } void SoundWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(theme_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setVoiceTheme(QString))); connect(tip_switcher, SIGNAL(clicked()), this, SLOT(setLoginTipVoice())); connect(event_switcher, SIGNAL(clicked()), this, SLOT(setEventVoice())); connect(feedback_switcher, SIGNAL(clicked()), this, SLOT(setInputFeedbackVoice())); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(voicewidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(voicewidget_notify_bool(QString, bool))); } void SoundWidget::voicewidget_notify_string(QString key, QString value) { if (key == "theme-name") { QList::Iterator it = m_soundlist.begin(), itend = m_soundlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; theme_combo->setCurrentIndex(index); } else theme_combo->setCurrentIndex(-1); } } void SoundWidget::voicewidget_notify_bool(QString key, bool value) { if (key == "event-sounds") { event_switcher->switchedOn = value; } else if (key == "input-feedback-sounds") { feedback_switcher->switchedOn = value; } } void SoundWidget::setVoiceTheme(QString selectTheme) { emit resetVoiceTheme(selectTheme); // sessionproxy->set_sound_theme_qt(selectTheme); } void SoundWidget::setLoginTipVoice() { emit resetLoginTipVoice(tip_switcher->switchedOn); // sessionproxy->set_login_music_enable_qt(tip_switcher->switchedOn); } void SoundWidget::setEventVoice() { emit resetEventVoice(event_switcher->switchedOn); // sessionproxy->set_sound_event_enable_qt(event_switcher->switchedOn); } void SoundWidget::setInputFeedbackVoice() { emit resetInputFeedbackVoice(feedback_switcher->switchedOn); // sessionproxy->set_input_feedback_sounds_enable_qt(feedback_switcher->switchedOn); } youker-assistant/setting/filemanagerwidget.cpp0000664000175000017500000003317613260315532020676 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "filemanagerwidget.h" #include #include #include #include FileManagerWidget::FileManagerWidget(QWidget *parent) : SettingModulePage(parent) { location_label = new QLabel(); mount_media_label = new QLabel(); open_folder_label = new QLabel(); autorun_program_label = new QLabel(); icon_size_label = new QLabel(); cache_time_label = new QLabel(); cache_size_label = new QLabel(); size_value_label = new QLabel(); time_value_label = new QLabel(); cache_value_label = new QLabel(); location_switcher = new KylinSwitcher(); mount_media_switcher = new KylinSwitcher(); open_folder_switcher = new KylinSwitcher(); autorun_program_switcher = new KylinSwitcher(); icon_size_slider = new QSlider(Qt::Horizontal); icon_size_slider->setRange(16, 512); icon_size_slider->setSingleStep(1); // icon_size_slider->setTickPosition(QSlider::TicksRight); icon_size_slider->setFocusPolicy(Qt::NoFocus); // icon_size_slider->setMinimum(1); // icon_size_slider->setMaximum(10); // icon_size_slider->setValue(2); cache_time_slider = new QSlider(Qt::Horizontal); cache_time_slider->setRange(-1, 180); cache_time_slider->setSingleStep(1); // cache_time_slider->setTickPosition(QSlider::TicksRight); cache_time_slider->setFocusPolicy(Qt::NoFocus); // cache_time_slider->setValue(2); cache_size_slider = new QSlider(Qt::Horizontal); cache_size_slider->setRange(-1, 512); cache_size_slider->setSingleStep(1); // cache_size_slider->setTickPosition(QSlider::TicksRight); cache_size_slider->setFocusPolicy(Qt::NoFocus); // cache_size_slider->setValue(2); location_label->setFixedWidth(245); mount_media_label->setFixedWidth(245); open_folder_label->setFixedWidth(245); autorun_program_label->setFixedWidth(245); icon_size_label->setFixedWidth(245); cache_time_label->setFixedWidth(245); cache_size_label->setFixedWidth(245); // QFormLayout *form_layout = new QFormLayout(); // form_layout->setSpacing(10); // form_layout->setHorizontalSpacing(5); // form_layout->setRowWrapPolicy(QFormLayout::DontWrapRows); // form_layout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint); // form_layout->addRow(QString(tr("Display entry location") + ":"), location_switcher); // form_layout->addRow(QString(tr("Automatically mount media") + ":"), mount_media_switcher); // form_layout->addRow(QString(tr("Automatically open a folder") + ":"), open_folder_switcher); // form_layout->addRow(QString(tr("Prompt autorun programs") + ":"), autorun_program_switcher); // form_layout->addRow(QString(tr("Thumbnail icon size (pixels)") + ":"), icon_size_slider); // form_layout->addRow(QString(tr("Thumbnail cache time (days)") + ":"), cache_time_slider); // form_layout->addRow(QString(tr("Maximum thumbnail cache size (MB)") + ":"), cache_size_slider); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(location_label); layout1->addWidget(location_switcher); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(mount_media_label); layout2->addWidget(mount_media_switcher); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(open_folder_label); layout3->addWidget(open_folder_switcher); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(autorun_program_label); layout4->addWidget(autorun_program_switcher); layout4->addStretch(); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(icon_size_label); layout5->addWidget(icon_size_slider); layout5->addWidget(size_value_label); layout5->addStretch(); QHBoxLayout *layout6 = new QHBoxLayout(); layout6->setSpacing(10); layout6->addWidget(cache_time_label); layout6->addWidget(cache_time_slider); layout6->addWidget(time_value_label); layout6->addStretch(); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->setSpacing(10); layout7->addWidget(cache_size_label); layout7->addWidget(cache_size_slider); layout7->addWidget(cache_value_label); layout7->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addLayout(layout5); layout->addLayout(layout6); layout->addLayout(layout7); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // setLayout(form_layout); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } FileManagerWidget::~FileManagerWidget() { if (location_label != NULL) { delete location_label; location_label = NULL; } if (mount_media_label != NULL) { delete mount_media_label; mount_media_label = NULL; } if (open_folder_label != NULL) { delete open_folder_label; open_folder_label = NULL; } if (autorun_program_label != NULL) { delete autorun_program_label; autorun_program_label = NULL; } if (icon_size_label != NULL) { delete icon_size_label; icon_size_label = NULL; } if (size_value_label != NULL) { delete size_value_label; size_value_label = NULL; } if (cache_time_label != NULL) { delete cache_time_label; cache_time_label = NULL; } if (time_value_label != NULL) { delete time_value_label; time_value_label = NULL; } if (cache_size_label != NULL) { delete cache_size_label; cache_size_label = NULL; } if (cache_value_label != NULL) { delete cache_value_label; cache_value_label = NULL; } if (location_switcher != NULL) { delete location_switcher; location_switcher = NULL; } if (mount_media_switcher != NULL) { delete mount_media_switcher; mount_media_switcher = NULL; } if (open_folder_switcher != NULL) { delete open_folder_switcher; open_folder_switcher = NULL; } if (autorun_program_switcher != NULL) { delete autorun_program_switcher; autorun_program_switcher = NULL; } if (icon_size_slider != NULL) { delete icon_size_slider; icon_size_slider = NULL; } if (cache_time_slider != NULL) { delete cache_time_slider; cache_time_slider = NULL; } if (cache_size_slider != NULL) { delete cache_size_slider; cache_size_slider = NULL; } } QString FileManagerWidget::settingModuleName() { return "FMPage"; } void FileManagerWidget::setLanguage() { // title_label->setText(tr("File Manager")); // description_label->setText(tr("Manage the Nautilus file manager. Tips: if the thumbnail's cache time or size is set to -1, it will not be checked.")); // back_btn->setText(tr("Back")); location_label->setText(tr("Display entry location") + ":"); mount_media_label->setText(tr("Automatically mount media") + ":"); open_folder_label->setText(tr("Automatically open a folder") + ":"); autorun_program_label->setText(tr("Prompt autorun programs") + ":"); icon_size_label->setText(tr("Thumbnail icon size (pixels)") + ":"); cache_time_label->setText(tr("Thumbnail cache time (days)") + ":"); cache_size_label->setText(tr("Maximum thumbnail cache size (MB)") + ":"); } void FileManagerWidget::initSettingData() { emit requestFileManagerData(); // location_switcher->switchedOn = sessionproxy->get_location_replace_pathbar_qt(); // mount_media_switcher->switchedOn = sessionproxy->get_auto_mount_media_qt(); // open_folder_switcher->switchedOn = sessionproxy->get_auto_open_folder_qt(); // autorun_program_switcher->switchedOn = sessionproxy->get_prompt_autorun_programs_qt(); // icon_size_slider->setValue(sessionproxy->get_thumbnail_icon_size_qt()); // cache_time_slider->setValue(sessionproxy->get_thumbnail_cache_time_qt()); // cache_size_slider->setValue(sessionproxy->get_thumbnail_cache_size_qt()); // size_value_label->setText(QString::number(icon_size_slider->value())); // time_value_label->setText(QString::number(cache_time_slider->value())); // cache_value_label->setText(QString::number(cache_size_slider->value())); this->initConnect(); } void FileManagerWidget::onSendFileManagerData(bool locationReplacePathbar, bool autoMountMedia, bool autoOpenFolder, bool promptAutorunPrograms, int thumbnailIconSize, int thumbnailCacheTime, int thumbnailCacheSize) { location_switcher->switchedOn = locationReplacePathbar; mount_media_switcher->switchedOn = autoMountMedia; open_folder_switcher->switchedOn = autoOpenFolder; autorun_program_switcher->switchedOn = promptAutorunPrograms; icon_size_slider->setValue(thumbnailIconSize); cache_time_slider->setValue(thumbnailCacheTime); cache_size_slider->setValue(thumbnailCacheSize); size_value_label->setText(QString::number(icon_size_slider->value())); time_value_label->setText(QString::number(cache_time_slider->value())); cache_value_label->setText(QString::number(cache_size_slider->value())); } void FileManagerWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(location_switcher, SIGNAL(clicked()), this, SLOT(setLocation())); connect(mount_media_switcher, SIGNAL(clicked()), this, SLOT(setMountMedia())); connect(open_folder_switcher, SIGNAL(clicked()), this, SLOT(setOpenFolder())); connect(autorun_program_switcher, SIGNAL(clicked()), this, SLOT(setAutorunProgram())); connect(icon_size_slider, SIGNAL(valueChanged(int)), this, SLOT(setIconSizeValue(int))); connect(cache_time_slider, SIGNAL(valueChanged(int)), this, SLOT(setCacheTimeValue(int))); connect(cache_size_slider, SIGNAL(valueChanged(int)), this, SLOT(setCacheSizeValue(int))); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(nautiluswidget_notify_bool(QString, bool))); // connect(sessionproxy, SIGNAL(int_value_notify(QString, int)), this, SLOT(nautiluswidget_notify_int(QString, int))); } void FileManagerWidget::nautiluswidget_notify_bool(QString key, bool value) { if (key == "always-use-location-entry") { location_switcher->switchedOn = value; } else if (key == "automount") { mount_media_switcher->switchedOn = value; } else if (key == "automount-open") { open_folder_switcher->switchedOn = value; } else if (key == "autorun-never") { autorun_program_switcher->switchedOn = value; } } void FileManagerWidget::nautiluswidget_notify_int(QString key, int value) { if (key == "thumbnail-size") { icon_size_slider->setValue(value); size_value_label->setText(QString::number(value)); } else if (key == "maximum-age") { cache_time_slider->setValue(value); time_value_label->setText(QString::number(value)); } else if (key == "maximum-size") { cache_size_slider->setValue(value); cache_value_label->setText(QString::number(value)); } } void FileManagerWidget::setLocation() { emit resetLocationReplacePathbar(location_switcher->switchedOn); // sessionproxy->set_location_replace_pathbar_qt(location_switcher->switchedOn); } void FileManagerWidget::setMountMedia() { emit resetAutoMountMedia(mount_media_switcher->switchedOn); // sessionproxy->set_auto_mount_media_qt(mount_media_switcher->switchedOn); } void FileManagerWidget::setOpenFolder() { emit resetAutoOpenFolder(open_folder_switcher->switchedOn); // sessionproxy->set_auto_open_folder_qt(open_folder_switcher->switchedOn); } void FileManagerWidget::setAutorunProgram() { emit resetPromptAutorunPrograms(autorun_program_switcher->switchedOn); // sessionproxy->set_prompt_autorun_programs_qt(autorun_program_switcher->switchedOn); } void FileManagerWidget::setIconSizeValue(int value) { size_value_label->setText(QString::number(value)); emit resetThumbnailIconSize(value); // sessionproxy->set_thumbnail_icon_size_qt(value); } void FileManagerWidget::setCacheTimeValue(int value) { time_value_label->setText(QString::number(value)); emit resetThumbnailCacheTime(value); // sessionproxy->set_thumbnail_cache_time_qt(value); } void FileManagerWidget::setCacheSizeValue(int value) { cache_value_label->setText(QString::number(value)); emit resetThumbnailCacheSize(value); // sessionproxy->set_thumbnail_cache_size_qt(value); } youker-assistant/setting/settinglistview.cpp0000664000175000017500000000255113260315532020455 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "settinglistview.h" #include #include #include SettingListView::SettingListView(QWidget *parent) : QListView(parent) { //this->setStyleSheet("QListView{border:none;background-color: rgba(84, 255, 159, 127);}"); setViewMode(QListView::IconMode); setFrameStyle(QFrame::NoFrame); setSpacing(20); setMouseTracking(true); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } void SettingListView::leaveEvent(QEvent *e) { QListView::leaveEvent(e); emit entered(QModelIndex()); } youker-assistant/setting/energywidget.cpp0000664000175000017500000012515113260315532017710 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "energywidget.h" #include #include #include #include #include #include #include EnergyWidget::EnergyWidget(QStringList cpulist, QString cpu, QString cur_desktop, bool has_battery, QWidget *parent) : SettingModulePage(parent),desktop(cur_desktop) { gamma_label = new QLabel(); gamma_slider = new QDoubleSpinBox(); gamma_slider->setButtonSymbols(QAbstractSpinBox::PlusMinus); gamma_slider->setSingleStep(0.1); gamma_slider->setMinimum(0.1); gamma_slider->setMaximum(1.0); brightness_label = new QLabel(); brightness_value_label = new QLabel(); brightness_slider = new QSlider(Qt::Horizontal); brightness_slider->setFocusPolicy(Qt::NoFocus); brightness_slider->setRange(1, 100); brightness_slider->setSingleStep(1); idle_delay_label = new QLabel(); idle_delay_combo = new QComboBox(); lock_enabled_label = new QLabel(); lock_enabled_switch = new KylinSwitcher(); lock_delay_label = new QLabel(); lock_delay_combo = new QComboBox(); critical_low_label = new QLabel(); suspend_low_radio = new QRadioButton(); shutdown_radio = new QRadioButton(); QButtonGroup *btnGroup1 = new QButtonGroup(); btnGroup1->addButton(suspend_low_radio); btnGroup1->addButton(shutdown_radio); suspend_low_radio->setFocusPolicy(Qt::NoFocus); suspend_low_radio->setObjectName("suspend_low_radio"); shutdown_radio->setFocusPolicy(Qt::NoFocus); shutdown_radio->setObjectName("shutdown_radio"); laptop_lid_battery_label = new QLabel(); suspend_lid_battery_radio = new QRadioButton(); nothing_battery_radio = new QRadioButton(); QButtonGroup *btnGroup2 = new QButtonGroup(); btnGroup2->addButton(suspend_lid_battery_radio); btnGroup2->addButton(nothing_battery_radio); suspend_lid_battery_radio->setFocusPolicy(Qt::NoFocus); suspend_lid_battery_radio->setObjectName("suspend_lid_battery_radio"); nothing_battery_radio->setFocusPolicy(Qt::NoFocus); nothing_battery_radio->setObjectName("nothing_battery_radio"); laptop_lid_ac_label = new QLabel(); suspend_lid_ac_radio = new QRadioButton(); nothing_ac_radio = new QRadioButton(); QButtonGroup *btnGroup3 = new QButtonGroup(); btnGroup3->addButton(suspend_lid_ac_radio); btnGroup3->addButton(nothing_ac_radio); suspend_lid_ac_radio->setFocusPolicy(Qt::NoFocus); suspend_lid_ac_radio->setObjectName("suspend_lid_ac_radio"); nothing_ac_radio->setFocusPolicy(Qt::NoFocus); nothing_ac_radio->setObjectName("nothing_ac_radio"); sleep_battery_label = new QLabel(); sleep_battery_combo = new QComboBox(); sleep_ac_label = new QLabel(); sleep_ac_combo = new QComboBox(); sleep_battery_display_label = new QLabel(); sleep_battery_display_combo = new QComboBox(); sleep_ac_display_label = new QLabel(); sleep_ac_display_combo = new QComboBox(); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { brightness_label->hide(); brightness_value_label->hide(); brightness_slider->hide(); } else { sleep_battery_display_label->hide(); sleep_battery_display_combo->hide(); sleep_ac_display_label->hide(); sleep_ac_display_combo->hide(); } // if(!sessionproxy->judge_power_is_exists_qt()) if(has_battery == false) { critical_low_label->hide(); suspend_low_radio->hide(); shutdown_radio->hide(); laptop_lid_battery_label->hide(); suspend_lid_battery_radio->hide(); nothing_battery_radio->hide(); sleep_battery_label->hide(); sleep_battery_combo->hide(); laptop_lid_ac_label->hide(); suspend_lid_ac_radio->hide(); nothing_ac_radio->hide(); sleep_battery_display_label->hide(); sleep_battery_display_combo->hide(); } gamma_label->setFixedWidth(260); brightness_label->setFixedWidth(260); idle_delay_label->setFixedWidth(260); lock_enabled_label->setFixedWidth(260); lock_delay_label->setFixedWidth(260); critical_low_label->setFixedWidth(260); laptop_lid_battery_label->setFixedWidth(260); laptop_lid_ac_label->setFixedWidth(260); sleep_battery_label->setFixedWidth(260); sleep_ac_label->setFixedWidth(260); sleep_battery_display_label->setFixedWidth(260); sleep_ac_display_label->setFixedWidth(260); QHBoxLayout *layout0 = new QHBoxLayout(); layout0->setSpacing(10); layout0->addWidget(gamma_label); layout0->addWidget(gamma_slider); layout0->addStretch(); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(brightness_label); layout1->addWidget(brightness_slider); layout1->addWidget(brightness_value_label); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(idle_delay_label); layout2->addWidget(idle_delay_combo); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(lock_enabled_label); layout3->addWidget(lock_enabled_switch); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(lock_delay_label); layout4->addWidget(lock_delay_combo); layout4->addStretch(); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(critical_low_label); layout5->addWidget(suspend_low_radio); layout5->addWidget(shutdown_radio); // layout5->addWidget(btnGroup); layout5->addStretch(); QHBoxLayout *layout6 = new QHBoxLayout(); layout6->setSpacing(10); layout6->addWidget(laptop_lid_battery_label); layout6->addWidget(suspend_lid_battery_radio); layout6->addWidget(nothing_battery_radio); layout6->addStretch(); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->setSpacing(10); layout7->addWidget(laptop_lid_ac_label); layout7->addWidget(suspend_lid_ac_radio); layout7->addWidget(nothing_ac_radio); layout7->addStretch(); QHBoxLayout *layout8 = new QHBoxLayout(); layout8->setSpacing(10); layout8->addWidget(sleep_battery_label); layout8->addWidget(sleep_battery_combo); layout8->addStretch(); QHBoxLayout *layout9 = new QHBoxLayout(); layout9->setSpacing(10); layout9->addWidget(sleep_ac_label); layout9->addWidget(sleep_ac_combo); layout9->addStretch(); QHBoxLayout *layout10 = new QHBoxLayout(); layout10->setSpacing(10); layout10->addWidget(sleep_battery_display_label); layout10->addWidget(sleep_battery_display_combo); layout10->addStretch(); QHBoxLayout *layout11 = new QHBoxLayout(); layout11->setSpacing(10); layout11->addWidget(sleep_ac_display_label); layout11->addWidget(sleep_ac_display_combo); layout11->addStretch(); m_layout = new QVBoxLayout(this); m_layout->setSpacing(10); m_layout->setContentsMargins(20, 20, 0, 0); m_layout->addLayout(layout0); m_layout->addLayout(layout1); m_layout->addLayout(layout2); m_layout->addLayout(layout3); m_layout->addLayout(layout4); m_layout->addLayout(layout5); m_layout->addLayout(layout6); m_layout->addLayout(layout7); m_layout->addLayout(layout8); m_layout->addLayout(layout9); m_layout->addLayout(layout10); m_layout->addLayout(layout11); //kobe reset cpu mode if (!cpulist.isEmpty()) { // qDebug() << cpulist; // qDebug() << cpu; QLabel *cpu_label = new QLabel(); cpu_label->setText(tr("CPU FM mode:")); QHBoxLayout *cpu_layout = new QHBoxLayout(); cpu_layout->setSpacing(10); cpu_layout->addWidget(cpu_label); QButtonGroup *cpuGroup = new QButtonGroup(); QList::Iterator it = cpulist.begin(), itend = cpulist.end(); for(;it != itend; it++) { if(*it == "ondemand") { QRadioButton *ondemand_radio = new QRadioButton(); ondemand_radio->setFocusPolicy(Qt::NoFocus); ondemand_radio->setText(tr("Ondemand")); ondemand_radio->setObjectName("ondemandradio"); ondemand_radio->setChecked(false); cpuGroup->addButton(ondemand_radio); cpu_layout->addWidget(ondemand_radio); connect(ondemand_radio, SIGNAL(clicked()), this, SLOT(onCpuRadioButtonClicked())); } else if(*it == "powersave") { QRadioButton *powersave_radio = new QRadioButton(); powersave_radio->setFocusPolicy(Qt::NoFocus); powersave_radio->setText(tr("Powersave")); powersave_radio->setObjectName("powersaveradio"); powersave_radio->setChecked(false); cpuGroup->addButton(powersave_radio); cpu_layout->addWidget(powersave_radio); connect(powersave_radio, SIGNAL(clicked()), this, SLOT(onCpuRadioButtonClicked())); } else if(*it == "performance") { QRadioButton *performance_radio = new QRadioButton(); performance_radio->setFocusPolicy(Qt::NoFocus); performance_radio->setText(tr("Performance")); performance_radio->setObjectName("performanceradio"); performance_radio->setChecked(false); cpuGroup->addButton(performance_radio); cpu_layout->addWidget(performance_radio); connect(performance_radio, SIGNAL(clicked()), this, SLOT(onCpuRadioButtonClicked())); } } cpu_layout->addStretch(); m_layout->addLayout(cpu_layout); // for (auto cpuMode : cpulist) foreach (QAbstractButton *absbutton, cpuGroup->buttons()) { QRadioButton *radio = qobject_cast(absbutton); if (radio) { QString obj_name = radio->objectName(); if(obj_name == "ondemandradio") { if(cpu == "ondemand") { radio->setChecked(true); } else { radio->setChecked(false); } } else if(obj_name == "powersaveradio") { if(cpu == "powersave") { radio->setChecked(true); } else { radio->setChecked(false); } } else if(obj_name == "performanceradio") { if(cpu == "performance") { radio->setChecked(true); } else { radio->setChecked(false); } } } } } m_layout->addStretch(); // this->initSettingData(); this->setLanguage(); // iface = new QDBusInterface("org.gnome.SettingsDaemon", // "/org/gnome/SettingsDaemon/Power", // "org.gnome.SettingsDaemon.Power.Screen", // QDBusConnection::sessionBus()); } EnergyWidget::~EnergyWidget() { // if (iface != NULL) { // delete iface; // iface = NULL; // } if (gamma_label != NULL) { delete gamma_label; gamma_label = NULL; } if (gamma_slider != NULL) { delete gamma_slider; gamma_slider = NULL; } if (brightness_label != NULL) { delete brightness_label; brightness_label = NULL; } if (brightness_value_label != NULL) { delete brightness_value_label; brightness_value_label = NULL; } if (brightness_slider != NULL) { delete brightness_slider; brightness_slider = NULL; } if (idle_delay_label != NULL) { delete idle_delay_label; idle_delay_label = NULL; } if (idle_delay_combo != NULL) { delete idle_delay_combo; idle_delay_combo = NULL; } if (lock_enabled_label != NULL) { delete lock_enabled_label; lock_enabled_label = NULL; } if (lock_enabled_switch != NULL) { delete lock_enabled_switch; lock_enabled_switch = NULL; } if (lock_delay_label != NULL) { delete lock_delay_label; lock_delay_label = NULL; } if (lock_delay_combo != NULL) { delete lock_delay_combo; lock_delay_combo = NULL; } if (critical_low_label != NULL) { delete critical_low_label; critical_low_label = NULL; } if (suspend_low_radio != NULL) { delete suspend_low_radio; suspend_low_radio = NULL; } if (shutdown_radio != NULL) { delete shutdown_radio; shutdown_radio = NULL; } if (laptop_lid_battery_label != NULL) { delete laptop_lid_battery_label; laptop_lid_battery_label = NULL; } if (suspend_lid_battery_radio != NULL) { delete suspend_lid_battery_radio; suspend_lid_battery_radio = NULL; } if (nothing_battery_radio != NULL) { delete nothing_battery_radio; nothing_battery_radio = NULL; } if (laptop_lid_ac_label != NULL) { delete laptop_lid_ac_label; laptop_lid_ac_label = NULL; } if (suspend_lid_ac_radio != NULL) { delete suspend_lid_ac_radio; suspend_lid_ac_radio = NULL; } if (nothing_ac_radio != NULL) { delete nothing_ac_radio; nothing_ac_radio = NULL; } if (sleep_battery_label != NULL) { delete sleep_battery_label; sleep_battery_label = NULL; } if (sleep_battery_combo != NULL) { delete sleep_battery_combo; sleep_battery_combo = NULL; } if (sleep_ac_label != NULL) { delete sleep_ac_label; sleep_ac_label = NULL; } if (sleep_ac_combo != NULL) { delete sleep_ac_combo; sleep_ac_combo = NULL; } if (sleep_battery_display_label != NULL) { delete sleep_battery_display_label; sleep_battery_display_label = NULL; } if (sleep_battery_display_combo != NULL) { delete sleep_battery_display_combo; sleep_battery_display_combo = NULL; } if (sleep_ac_display_label != NULL) { delete sleep_ac_display_label; sleep_ac_display_label = NULL; } if (sleep_ac_display_combo != NULL) { delete sleep_ac_display_combo; sleep_ac_display_combo = NULL; } QLayoutItem *child; while ((child = m_layout->takeAt(0)) != 0) { if (child->widget()) child->widget()->deleteLater(); delete child; } } QString EnergyWidget::settingModuleName() { return "EnergyPage"; } void EnergyWidget::setLanguage() { gamma_label->setText(tr("Adjust gamma") + ":"); brightness_label->setText(tr("Adjust brightness") + ":"); idle_delay_label->setText(tr("Time before session is considered idle") + ":");//在一定时间范围内无操作则关闭屏幕 lock_enabled_label->setText(tr("Lock screen") + ":");//锁定屏幕 lock_delay_label->setText(tr("Lock delay") + ":");//锁屏延时 critical_low_label->setText(tr("Battery critical low action") + ":");//电池严重不足时 laptop_lid_battery_label->setText(tr("Laptop lid close action on battery") + ":");//合上盖子时 laptop_lid_ac_label->setText(tr("Laptop lid close action on AC") + ":");//合上盖子时 sleep_battery_label->setText(tr("Sleep timeout PC when on battery") + ":");//使用电池,空闲此时间后电脑转入睡眠 sleep_ac_label->setText(tr("Sleep timeout PC when on AC") + ":");//使用电源,空闲此时间后电脑转入睡眠 sleep_battery_display_label->setText(tr("Sleep timeout display when on battery") + ":");//使用电池,空闲此时间后屏幕转入睡眠 sleep_ac_display_label->setText(tr("Sleep timeout display when on AC") + ":");//使用电源,空闲此时间后屏幕转入睡眠 suspend_low_radio->setText(tr("suspend"));//休眠 shutdown_radio->setText(tr("shutdown"));//电源关闭 suspend_lid_battery_radio->setText(tr("suspend"));//挂起 nothing_battery_radio->setText(tr("nothing"));//不处理 suspend_lid_ac_radio->setText(tr("suspend"));//挂起 nothing_ac_radio->setText(tr("nothing"));//不处理 } void EnergyWidget::initSettingData() { emit requestPowerAndBatteryData(); /*iface = new QDBusInterface("org.gnome.SettingsDaemon", "/org/gnome/SettingsDaemon/Power", "org.gnome.SettingsDaemon.Power.Screen", QDBusConnection::sessionBus()); gamma_slider->setValue(sessionproxy->get_screen_gamma_qt()); QStringList aclist = sessionproxy->get_sleep_timeout_list_qt(); bool inHere = false; if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { sleep_timeout_display_battery = sessionproxy->get_current_sleep_timeout_display_battery_qt(); QStringList huname_display_battery_list; huname_display_battery_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it5 = aclist.begin(), itend5 = aclist.end(); int initIndex5 = 0; inHere = false; for(;it5 != itend5; it5++,initIndex5++) { if(*it5 == sleep_timeout_display_battery) { inHere = true; break; } } if (inHere == false) { huname_display_battery_list << sleep_timeout_display_battery; initIndex5 = huname_display_battery_list.length() - 1; } sleep_battery_display_combo->clear(); sleep_battery_display_combo->clearEditText(); sleep_battery_display_combo->addItems(huname_display_battery_list); sleep_battery_display_combo->setCurrentIndex(initIndex5); sleep_timeout_display_ac = sessionproxy->get_current_sleep_timeout_display_ac_qt(); QStringList huname_display_ac_list; huname_display_ac_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it6 = aclist.begin(), itend6 = aclist.end(); int initIndex6 = 0; inHere = false; for(;it6 != itend6; it6++,initIndex6++) { if(*it6 == sleep_timeout_display_ac) { inHere = true; break; } } if (inHere == false) { huname_display_ac_list << sleep_timeout_display_ac; initIndex6 = huname_display_ac_list.length() - 1; } sleep_ac_display_combo->clear(); sleep_ac_display_combo->clearEditText(); sleep_ac_display_combo->addItems(huname_display_ac_list); sleep_ac_display_combo->setCurrentIndex(initIndex6); } else { QDBusReply reply = iface->call("GetPercentage"); if (reply.isValid()) { brightness_slider->setValue(reply.value()); brightness_value_label->setText(QString::number(brightness_slider->value())); } else { brightness_label->hide(); brightness_value_label->hide(); brightness_slider->hide(); } } current_idle_delay = sessionproxy->get_current_idle_delay_qt(); QStringList idledelaylist = sessionproxy->get_idle_delay_list_qt(); QStringList huname_idle_list; huname_idle_list << tr("1 minute") << tr("2 minutes") << tr("3 minutes") << tr("5 minutes") << tr("10 minutes") << tr("Half an hour") << tr("1 hour") << tr("never"); QList::Iterator it1 = idledelaylist.begin(), itend1 = idledelaylist.end(); int initIndex1 = 0; for(;it1 != itend1; it1++,initIndex1++) { if(*it1 == current_idle_delay) { inHere = true; break; } } if (inHere == false) { huname_idle_list << current_idle_delay; initIndex1 = huname_idle_list.length() - 1; } idle_delay_combo->clear(); idle_delay_combo->clearEditText(); idle_delay_combo->addItems(huname_idle_list); idle_delay_combo->setCurrentIndex(initIndex1); lock_enabled_switch->switchedOn = sessionproxy->get_lock_enabled_qt(); if(lock_enabled_switch->switchedOn) { lock_delay_combo->setDisabled(false); } else { lock_delay_combo->setDisabled(true); } current_lock_delay = sessionproxy->get_current_lock_delay_qt(); QStringList lockdelaylist = sessionproxy->get_lock_delay_list_qt(); QStringList huname_lock_list; huname_lock_list << tr("30 seconds") << tr("1 minute") << tr("2 minutes") << tr("3 minutes") << tr("5 minutes") << tr("10 minutes") << tr("Half an hour") << tr("1 hour") << tr("Turn off the screen"); QList::Iterator it2 = lockdelaylist.begin(), itend2 = lockdelaylist.end(); int initIndex2 = 0; inHere = false; for(;it2 != itend2; it2++,initIndex2++) { if(*it2 == current_lock_delay) { inHere = true; break; } } if (inHere == false) { huname_lock_list << current_lock_delay; initIndex2 = huname_lock_list.length() - 1; } lock_delay_combo->clear(); lock_delay_combo->clearEditText(); lock_delay_combo->addItems(huname_lock_list); lock_delay_combo->setCurrentIndex(initIndex2); QString critical_low = sessionproxy->get_current_critical_low_qt(); if(critical_low == "suspend" ) { suspend_low_radio->setChecked(true); shutdown_radio->setChecked(false); } else if(critical_low == "shutdown") { shutdown_radio->setChecked(true); suspend_low_radio->setChecked(false); } QString laptop_battery = sessionproxy->get_current_lid_battery_qt(); if(laptop_battery == "suspend") { suspend_lid_battery_radio->setChecked(true); nothing_battery_radio->setChecked(false); } else if(laptop_battery == "nothing") { nothing_battery_radio->setChecked(true); suspend_lid_battery_radio->setChecked(false); } QString laptop_ac = sessionproxy->get_current_lid_ac_qt(); if(laptop_ac == "suspend") { suspend_lid_ac_radio->setChecked(true); nothing_ac_radio->setChecked(false); } else if(laptop_ac == "nothing") { nothing_ac_radio->setChecked(true); suspend_lid_ac_radio->setChecked(false); } sleep_timeout_battery = sessionproxy->get_current_sleep_timeout_battery_qt(); QStringList batterylist = sessionproxy->get_sleep_timeout_list_qt(); QStringList huname_battery_list; huname_battery_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it3 = batterylist.begin(), itend3 = batterylist.end(); int initIndex3 = 0; inHere = false; for(;it3 != itend3; it3++,initIndex3++) { if(*it3 == sleep_timeout_battery) { inHere = true; break; } } if (inHere == false) { huname_battery_list << sleep_timeout_battery; initIndex3 = huname_battery_list.length() - 1; } sleep_battery_combo->clear(); sleep_battery_combo->clearEditText(); sleep_battery_combo->addItems(huname_battery_list); sleep_battery_combo->setCurrentIndex(initIndex3); sleep_timeout_ac = sessionproxy->get_current_sleep_timeout_ac_qt(); QStringList huname_ac_list; huname_ac_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it4 = aclist.begin(), itend4 = aclist.end(); int initIndex4 = 0; inHere = false; for(;it4 != itend4; it4++,initIndex4++) { if(*it4 == sleep_timeout_ac) { inHere = true; break; } } if (inHere == false) { huname_ac_list << sleep_timeout_ac; initIndex4 = huname_ac_list.length() - 1; } sleep_ac_combo->clear(); sleep_ac_combo->clearEditText(); sleep_ac_combo->addItems(huname_ac_list); sleep_ac_combo->setCurrentIndex(initIndex4);*/ this->initConnect(); } void EnergyWidget::onSendIdleAndGammaData(double gamma, const QStringList &aclist, int brightnessValue, const QString &sleepTimeoutDisplayBattery, const QString &sleepTimeoutFisplayAC, const QString &idle_delay, const QStringList &idledelaylist) { gamma_slider->setValue(gamma); m_aclist.clear(); m_aclist = aclist; bool inHere = false; if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { sleep_timeout_display_battery = sleepTimeoutDisplayBattery; QStringList huname_display_battery_list; huname_display_battery_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it5 = m_aclist.begin(), itend5 = m_aclist.end(); int initIndex5 = 0; inHere = false; for(;it5 != itend5; it5++,initIndex5++) { if(*it5 == sleep_timeout_display_battery) { inHere = true; break; } } if (inHere == false) { huname_display_battery_list << sleep_timeout_display_battery; initIndex5 = huname_display_battery_list.length() - 1; } sleep_battery_display_combo->clear(); sleep_battery_display_combo->clearEditText(); sleep_battery_display_combo->addItems(huname_display_battery_list); sleep_battery_display_combo->setCurrentIndex(initIndex5); sleep_timeout_display_ac = sleepTimeoutFisplayAC; QStringList huname_display_ac_list; huname_display_ac_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it6 = m_aclist.begin(), itend6 = m_aclist.end(); int initIndex6 = 0; inHere = false; for(;it6 != itend6; it6++,initIndex6++) { if(*it6 == sleep_timeout_display_ac) { inHere = true; break; } } if (inHere == false) { huname_display_ac_list << sleep_timeout_display_ac; initIndex6 = huname_display_ac_list.length() - 1; } sleep_ac_display_combo->clear(); sleep_ac_display_combo->clearEditText(); sleep_ac_display_combo->addItems(huname_display_ac_list); sleep_ac_display_combo->setCurrentIndex(initIndex6); } else { if (brightnessValue < 0) { brightness_label->hide(); brightness_value_label->hide(); brightness_slider->hide(); } else { brightness_label->show(); brightness_value_label->show(); brightness_slider->show(); brightness_slider->setValue(brightnessValue); brightness_value_label->setText(QString::number(brightnessValue)); } } current_idle_delay = idle_delay; QStringList m_idledelaylist = idledelaylist; QStringList huname_idle_list; huname_idle_list << tr("1 minute") << tr("2 minutes") << tr("3 minutes") << tr("5 minutes") << tr("10 minutes") << tr("Half an hour") << tr("1 hour") << tr("never"); QList::Iterator it1 = m_idledelaylist.begin(), itend1 = m_idledelaylist.end(); int initIndex1 = 0; for(;it1 != itend1; it1++,initIndex1++) { if(*it1 == current_idle_delay) { inHere = true; break; } } if (inHere == false) { huname_idle_list << current_idle_delay; initIndex1 = huname_idle_list.length() - 1; } idle_delay_combo->clear(); idle_delay_combo->clearEditText(); idle_delay_combo->addItems(huname_idle_list); idle_delay_combo->setCurrentIndex(initIndex1); } void EnergyWidget::onSendLockAndSleepData(bool lockEnabled, const QString &lock_delay, const QStringList &lockdelaylist, const QString &critical_low, const QString &laptop_battery, const QString &laptop_ac, const QString &sleepTimeoutBattery, const QStringList &batterylist, const QString &sleepTimeoutAc) { lock_enabled_switch->switchedOn = lockEnabled; if(lock_enabled_switch->switchedOn) { lock_delay_combo->setDisabled(false); } else { lock_delay_combo->setDisabled(true); } current_lock_delay = lock_delay; QStringList m_lockdelaylist = lockdelaylist; QStringList huname_lock_list; huname_lock_list << tr("30 seconds") << tr("1 minute") << tr("2 minutes") << tr("3 minutes") << tr("5 minutes") << tr("10 minutes") << tr("Half an hour") << tr("1 hour") << tr("Turn off the screen"); QList::Iterator it2 = m_lockdelaylist.begin(), itend2 = m_lockdelaylist.end(); int initIndex2 = 0; bool inHere = false; for(;it2 != itend2; it2++,initIndex2++) { if(*it2 == current_lock_delay) { inHere = true; break; } } if (inHere == false) { huname_lock_list << current_lock_delay; initIndex2 = huname_lock_list.length() - 1; } lock_delay_combo->clear(); lock_delay_combo->clearEditText(); lock_delay_combo->addItems(huname_lock_list); lock_delay_combo->setCurrentIndex(initIndex2); if(critical_low == "suspend" ) { suspend_low_radio->setChecked(true); shutdown_radio->setChecked(false); } else if(critical_low == "shutdown") { shutdown_radio->setChecked(true); suspend_low_radio->setChecked(false); } if(laptop_battery == "suspend") { suspend_lid_battery_radio->setChecked(true); nothing_battery_radio->setChecked(false); } else if(laptop_battery == "nothing") { nothing_battery_radio->setChecked(true); suspend_lid_battery_radio->setChecked(false); } if(laptop_ac == "suspend") { suspend_lid_ac_radio->setChecked(true); nothing_ac_radio->setChecked(false); } else if(laptop_ac == "nothing") { nothing_ac_radio->setChecked(true); suspend_lid_ac_radio->setChecked(false); } sleep_timeout_battery = sleepTimeoutBattery; QStringList m_batterylist = batterylist; QStringList huname_battery_list; huname_battery_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it3 = m_batterylist.begin(), itend3 = m_batterylist.end(); int initIndex3 = 0; inHere = false; for(;it3 != itend3; it3++,initIndex3++) { if(*it3 == sleep_timeout_battery) { inHere = true; break; } } if (inHere == false) { huname_battery_list << sleep_timeout_battery; initIndex3 = huname_battery_list.length() - 1; } sleep_battery_combo->clear(); sleep_battery_combo->clearEditText(); sleep_battery_combo->addItems(huname_battery_list); sleep_battery_combo->setCurrentIndex(initIndex3); sleep_timeout_ac = sleepTimeoutAc; QStringList huname_ac_list; huname_ac_list << tr("5 minutes") << tr("10 minutes") << tr("20 minutes") << tr("Half an hour") << tr("1 hour") << tr("2 hours") << tr("never"); QList::Iterator it4 = m_aclist.begin(), itend4 = m_aclist.end(); int initIndex4 = 0; inHere = false; for(;it4 != itend4; it4++,initIndex4++) { if(*it4 == sleep_timeout_ac) { inHere = true; break; } } if (inHere == false) { huname_ac_list << sleep_timeout_ac; initIndex4 = huname_ac_list.length() - 1; } sleep_ac_combo->clear(); sleep_ac_combo->clearEditText(); sleep_ac_combo->addItems(huname_ac_list); sleep_ac_combo->setCurrentIndex(initIndex4); } void EnergyWidget::initConnect() { connect(gamma_slider, SIGNAL(valueChanged(double)), this, SLOT(setScreenGammaValue(double))); connect(brightness_slider, SIGNAL(valueChanged(int)), this, SLOT(setBrightnessValue(int))); // connect(idle_delay_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setIdleDelay(QString))); connect(idle_delay_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setIdleDelay(int))); connect(lock_enabled_switch, SIGNAL(clicked()), this, SLOT(setLockEnabled())); // connect(lock_delay_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setLockDelay(QString))); connect(lock_delay_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setLockDelay(int))); connect(suspend_low_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(shutdown_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(suspend_lid_battery_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(nothing_battery_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(suspend_lid_ac_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(nothing_ac_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(sleep_battery_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setSleepTimeoutBattery(int))); connect(sleep_ac_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setSleepTimeoutAC(int))); connect(sleep_battery_display_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setSleepTimeoutDisplayBattery(int))); connect(sleep_ac_display_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setSleepTimeoutDisplayAC(int))); } void EnergyWidget::setScreenGammaValue(double value) { emit resetScreenGammaValue(value); // sessionproxy->adjust_screen_gamma_qt(value); } void EnergyWidget::setBrightnessValue(int value) { brightness_value_label->setText(QString::number(value)); emit resetBrightnessValue(value); // iface->call("setPercentage", value); } //void EnergyWidget::setIdleDelay(QString value) void EnergyWidget::setIdleDelay(int index) { emit resetIdleDelay(index, current_idle_delay.toInt()); // if (index == 0) // { // sessionproxy->set_current_idle_delay_qt(60); // } // else if (index == 1) // { // sessionproxy->set_current_idle_delay_qt(120); // } // else if (index == 2) // { // sessionproxy->set_current_idle_delay_qt(180); // } // else if (index == 3) // { // sessionproxy->set_current_idle_delay_qt(300); // } // else if (index == 4) // { // sessionproxy->set_current_idle_delay_qt(600); // } // else if (index == 5) // { // sessionproxy->set_current_idle_delay_qt(1800); // } // else if (index == 6) // { // sessionproxy->set_current_idle_delay_qt(3600); // } // else if (index == 7) // { // sessionproxy->set_current_idle_delay_qt(0); // } // else if (index == 8) // { // sessionproxy->set_current_idle_delay_qt(current_idle_delay.toInt()); // } //// sessionproxy->set_current_idle_delay_qt(value.toInt()); } void EnergyWidget::setLockEnabled() { emit resetLockEnabled(lock_enabled_switch->switchedOn); // sessionproxy->set_lock_enabled_qt(lock_enabled_switch->switchedOn); if (lock_enabled_switch->switchedOn) { lock_delay_combo->setDisabled(false); } else { lock_delay_combo->setDisabled(true); } } //void EnergyWidget::setLockDelay(QString value) void EnergyWidget::setLockDelay(int index) { emit resetLockDelay(index, current_lock_delay.toInt()); // if (index == 0) // { // sessionproxy->set_current_lock_delay_qt(30); // } // else if (index == 1) // { // sessionproxy->set_current_lock_delay_qt(60); // } // else if (index == 2) // { // sessionproxy->set_current_lock_delay_qt(120); // } // else if (index == 3) // { // sessionproxy->set_current_lock_delay_qt(180); // } // else if (index == 4) // { // sessionproxy->set_current_lock_delay_qt(300); // } // else if (index == 5) // { // sessionproxy->set_current_lock_delay_qt(600); // } // else if (index == 6) // { // sessionproxy->set_current_lock_delay_qt(1800); // } // else if (index == 7) // { // sessionproxy->set_current_lock_delay_qt(3600); // } // else if (index == 8) // { // sessionproxy->set_current_lock_delay_qt(0); // } // else if (index == 9) // { // sessionproxy->set_current_lock_delay_qt(current_lock_delay.toInt()); // } //// sessionproxy->set_current_lock_delay_qt(value.toInt()); } void EnergyWidget::onCpuRadioButtonClicked() { QRadioButton *button = qobject_cast(this->sender()); if (button) { QString obj_name = button->objectName(); emit setCurrentCpuMode(obj_name); } } void EnergyWidget::setRadioButtonRowStatus() { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 QRadioButton* pbtn = qobject_cast(obj); QString obj_name = pbtn->objectName(); if(obj_name == "suspend_low_radio") { emit setCurrentCriticalLow("suspend"); // sessionproxy->set_current_critical_low_qt("suspend"); } else if(obj_name == "shutdown_radio") { emit setCurrentCriticalLow("shutdown"); // sessionproxy->set_current_critical_low_qt("shutdown"); } else if(obj_name == "suspend_lid_battery_radio") { emit setCurrentLidBattery("suspend"); // sessionproxy->set_current_lid_battery_qt("suspend"); } else if(obj_name == "nothing_battery_radio") { emit setCurrentLidBattery("nothing"); // sessionproxy->set_current_lid_battery_qt("nothing"); } else if(obj_name == "suspend_lid_ac_radio") { emit setCurrentLidAC("suspend"); // sessionproxy->set_current_lid_ac_qt("suspend"); } else if(obj_name == "nothing_ac_radio") { emit setCurrentLidAC("nothing"); // sessionproxy->set_current_lid_ac_qt("nothing"); } } void EnergyWidget::setSleepTimeoutBattery(int index) { emit resetSleepTimeoutBattery(index, sleep_timeout_battery.toInt()); // if (index == 0) // { // sessionproxy->set_current_sleep_timeout_battery_qt(300); // } // else if (index == 1) // { // sessionproxy->set_current_sleep_timeout_battery_qt(600); // } // else if (index == 2) // { // sessionproxy->set_current_sleep_timeout_battery_qt(1200); // } // else if (index == 3) // { // sessionproxy->set_current_sleep_timeout_battery_qt(1800); // } // else if (index == 4) // { // sessionproxy->set_current_sleep_timeout_battery_qt(3600); // } // else if (index == 5) // { // sessionproxy->set_current_sleep_timeout_battery_qt(7200); // } // else if (index == 6) // { // sessionproxy->set_current_sleep_timeout_battery_qt(0); // } // else if (index == 7) // { // sessionproxy->set_current_sleep_timeout_battery_qt(sleep_timeout_battery.toInt()); // } } void EnergyWidget::setSleepTimeoutAC(int index) { emit resetSleepTimeoutAC(index, sleep_timeout_ac.toInt()); // if (index == 0) // { // sessionproxy->set_current_sleep_timeout_ac_qt(300); // } // else if (index == 1) // { // sessionproxy->set_current_sleep_timeout_ac_qt(600); // } // else if (index == 2) // { // sessionproxy->set_current_sleep_timeout_ac_qt(1200); // } // else if (index == 3) // { // sessionproxy->set_current_sleep_timeout_ac_qt(1800); // } // else if (index == 4) // { // sessionproxy->set_current_sleep_timeout_ac_qt(3600); // } // else if (index == 5) // { // sessionproxy->set_current_sleep_timeout_ac_qt(7200); // } // else if (index == 6) // { // sessionproxy->set_current_sleep_timeout_ac_qt(0); // } // else if (index == 7) // { // sessionproxy->set_current_sleep_timeout_ac_qt(sleep_timeout_ac.toInt()); // } } void EnergyWidget::setSleepTimeoutDisplayBattery(int index) { emit resetSleepTimeoutDisplayBattery(index, sleep_timeout_battery.toInt()); // if (index == 0) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(300); // } // else if (index == 1) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(600); // } // else if (index == 2) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(1200); // } // else if (index == 3) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(1800); // } // else if (index == 4) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(3600); // } // else if (index == 5) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(7200); // } // else if (index == 6) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(0); // } // else if (index == 7) // { // sessionproxy->set_current_sleep_timeout_display_battery_qt(sleep_timeout_battery.toInt()); // } } void EnergyWidget::setSleepTimeoutDisplayAC(int index) { emit resetSleepTimeoutDisplayAC(index, sleep_timeout_battery.toInt()); // if (index == 0) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(300); // } // else if (index == 1) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(600); // } // else if (index == 2) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(1200); // } // else if (index == 3) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(1800); // } // else if (index == 4) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(3600); // } // else if (index == 5) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(7200); // } // else if (index == 6) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(0); // } // else if (index == 7) // { // sessionproxy->set_current_sleep_timeout_display_ac_qt(sleep_timeout_battery.toInt()); // } } youker-assistant/setting/settingdelegate.cpp0000664000175000017500000000742313260315532020364 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "settingdelegate.h" #include "settingmodel.h" #include #include #include inline const QString covertModuleName(const QString &module) { if (module == "ThemePage") { return QString(QObject::tr("ThemeSetting")); } else if (module == "IconPage") { return QString(QObject::tr("IconSetting")); } else if (module == "MousePage") { return QString(QObject::tr("MousePointer")); } else if (module == "SoundPage") { return QString(QObject::tr("SoundEffect")); } else if (module == "PanelPage") { return QString(QObject::tr("Panel")); } else if (module == "MenuPage") { return QString(QObject::tr("StartMenu")); } else if (module == "WindowPage") { return QString(QObject::tr("Window")); } else if (module == "FontPage") { return QString(QObject::tr("FontSetting")); } else if (module == "TouchPadPage") { return QString(QObject::tr("Touchpad")); } else if (module == "EnergyPage") { return QString(QObject::tr("Energy saving")); } else if (module == "FMPage") { return QString(QObject::tr("File manager")); } else { return module; } } SettingDelegate::SettingDelegate(QObject *parent) : QItemDelegate(parent) { } void SettingDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { const QString module = index.data().toString(); if (module.isEmpty()) return; QPainterPath path;//QPainterPath path(option.rect.topLeft()); painter->setRenderHint(QPainter::Antialiasing, true); path.addRect(QRectF(option.rect)); // QRectF r(0 / 2.0, 0 / 2.0, option.rect.width() - 0, option.rect.height() - 0);//左边 上边 右边 下边 // path.addRoundedRect(r, 4, 4);painter.drawRoundedRect(r, 4, 4); QPen pen; pen.setColor(QColor("#0B95D7")); pen.setWidth(0.8); painter->setPen(pen);//painter->setPen(Qt::NoPen); if (index.data(SettingModel::HoverRole).toBool()) { painter->setOpacity(1); painter->drawPixmap(QPoint(option.rect.x() + 5, option.rect.y() + 5), QPixmap("://res/clothes.png")); painter->fillPath(path, QColor(135, 206, 250, 127));//QColor::fromRgbF(1, 1, 1, 0.4) } else { painter->setOpacity(0.5); painter->fillPath(path, QColor(255, 250, 250, 127)); } painter->drawPath(path); auto font = option.font; if (index.data(SettingModel::HoverRole).toBool()) { font.setPixelSize(15); painter->setFont(font); painter->setPen(Qt::white); } else { font.setPixelSize(12); painter->setFont(font); painter->setPen(QPen(QColor("#363636"), 1)); } const QString name = covertModuleName(module); painter->drawText(option.rect, Qt::AlignCenter, name); } QSize SettingDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option); return index.data(Qt::SizeHintRole).toSize(); } youker-assistant/setting/settingmodulelpage.h0000664000175000017500000000217013260315532020547 0ustar fengfeng/* * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SETTINGMODULEPAGE_H #define SETTINGMODULEPAGE_H #include #include #include class SettingModulePage : public QFrame { Q_OBJECT public: SettingModulePage(QWidget *parent = 0) :QFrame(parent) { } virtual QString settingModuleName() = 0; virtual void initSettingData() = 0; }; #endif // SETTINGMODULEPAGE_H youker-assistant/setting/touchpadwidget.cpp0000664000175000017500000004052413260315532020226 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "touchpadwidget.h" #include #include #include #include #include #include #include TouchpadWidget::TouchpadWidget(QWidget *parent, QString cur_desktop) : SettingModulePage(parent), desktop(cur_desktop) { touchpad_label = new QLabel(); horizontal_scrolling_label = new QLabel(); scrollbar_type_label = new QLabel(); scrolling_mode_label = new QLabel(); touchpad_switcher = new KylinSwitcher(); horizontal_scrolling_switcher = new KylinSwitcher(); features_radio = new QRadioButton(); features_radio->setFocusPolicy(Qt::NoFocus); // features_radio->setChecked(true); features_radio->setObjectName("features_radio"); standard_radio = new QRadioButton(); standard_radio->setFocusPolicy(Qt::NoFocus); // standard_radio->setChecked(false); standard_radio->setObjectName("standard_radio"); QButtonGroup *btnGroup1 = new QButtonGroup(); btnGroup1->addButton(features_radio); btnGroup1->addButton(standard_radio); disable_radio = new QRadioButton(); disable_radio->setFocusPolicy(Qt::NoFocus); disable_radio->setObjectName("disable_radio"); edge_radio = new QRadioButton(); edge_radio->setFocusPolicy(Qt::NoFocus); // edge_radio->setChecked(true); edge_radio->setObjectName("edge_radio"); two_finger_radio = new QRadioButton(); two_finger_radio->setFocusPolicy(Qt::NoFocus); // two_finger_radio->setChecked(false); two_finger_radio->setObjectName("two_finger_radio"); QButtonGroup *btnGroup2 = new QButtonGroup(); btnGroup2->addButton(disable_radio); btnGroup2->addButton(edge_radio); btnGroup2->addButton(two_finger_radio); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { scrollbar_type_label->hide(); features_radio->hide(); standard_radio->hide(); } touchpad_label->setFixedWidth(180); horizontal_scrolling_label->setFixedWidth(180); scrollbar_type_label->setFixedWidth(180); scrolling_mode_label->setFixedWidth(180); //20180101 //kobe1510 /*this->release = sessionproxy->get_os_release_qt(); if(this->release.endsWith("15.10-wily")) { touchpad_label->hide(); touchpad_switcher->hide(); horizontal_scrolling_label->hide(); horizontal_scrolling_switcher->hide(); scrollbar_type_label->hide(); features_radio->hide(); standard_radio->hide(); }*/ QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(touchpad_label); layout1->addWidget(touchpad_switcher); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(horizontal_scrolling_label); layout2->addWidget(horizontal_scrolling_switcher); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(scrollbar_type_label); layout3->addWidget(features_radio); layout3->addWidget(standard_radio); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(scrolling_mode_label); layout4->addWidget(disable_radio); layout4->addWidget(edge_radio); layout4->addWidget(two_finger_radio); layout4->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } TouchpadWidget::~TouchpadWidget() { if (touchpad_label != NULL) { delete touchpad_label; touchpad_label = NULL; } if (horizontal_scrolling_label != NULL) { delete horizontal_scrolling_label; horizontal_scrolling_label = NULL; } if (scrollbar_type_label != NULL) { delete scrollbar_type_label; scrollbar_type_label = NULL; } if (scrolling_mode_label != NULL) { delete scrolling_mode_label; scrolling_mode_label = NULL; } if (touchpad_switcher != NULL) { delete touchpad_switcher; touchpad_switcher = NULL; } if (horizontal_scrolling_switcher != NULL) { delete horizontal_scrolling_switcher; horizontal_scrolling_switcher = NULL; } if (features_radio != NULL) { delete features_radio; features_radio = NULL; } if (standard_radio != NULL) { delete standard_radio; standard_radio = NULL; } if (disable_radio != NULL) { delete disable_radio; disable_radio = NULL; } if (edge_radio != NULL) { delete edge_radio; edge_radio = NULL; } if (two_finger_radio != NULL) { delete two_finger_radio; two_finger_radio = NULL; } } QString TouchpadWidget::settingModuleName() { return "TouchPadPage"; } void TouchpadWidget::setLanguage() { // title_label->setText(tr("Touchpad settings")); // description_label->setText(tr("Setting the relevant properties of your touchpad,make the operation more convenient.")); // back_btn->setText(tr("Back")); touchpad_label->setText(tr("Enable touchpad") + ":"); horizontal_scrolling_label->setText(tr("Enable horizontal scrolling") + ":"); scrollbar_type_label->setText(tr("Scrollbar type") + ":"); scrolling_mode_label->setText(tr("Touchpad scrolling mode") + ":");//触摸板滚动模式 features_radio->setText(tr("Features Type")); standard_radio->setText(tr("Standard Type")); disable_radio->setText(tr("Disabled"));//禁用 edge_radio->setText(tr("Edge Scrolling"));//边界滚动 two_finger_radio->setText(tr("Two-finger Scrolling"));//双指滚动 } void TouchpadWidget::initSettingData() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit requestMateOrUnityTouchpadData(true); } else { emit requestMateOrUnityTouchpadData(false); } //kobe1510 /*if(!this->release.endsWith("15.10-wily")) { touchpad_switcher->switchedOn = sessionproxy->get_touchpad_enable_qt(); horizontal_scrolling_switcher->switchedOn = sessionproxy->get_touchscrolling_use_horizontal_qt(); QString mode_value = sessionproxy->get_scrollbars_mode_qt(); if(mode_value == "overlay-auto") { features_radio->setChecked(true); standard_radio->setChecked(false); } else if(mode_value == "normal") { standard_radio->setChecked(true); features_radio->setChecked(false); } } if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { int scroll_value = sessionproxy->get_mate_touchscrolling_mode_qt(); if(scroll_value == 0) { disable_radio->setChecked(true); edge_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_value == 1) { edge_radio->setChecked(true); disable_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_value == 2) { two_finger_radio->setChecked(true); disable_radio->setChecked(false); edge_radio->setChecked(false); } } else { QString scroll_value = sessionproxy->get_touchscrolling_mode_qt(); if(scroll_value == "disabled") { disable_radio->setChecked(true); edge_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_value == "edge-scrolling") { edge_radio->setChecked(true); disable_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_value == "two-finger-scrolling") { two_finger_radio->setChecked(true); disable_radio->setChecked(false); edge_radio->setChecked(false); } }*/ this->initConnect(); } void TouchpadWidget::onSendTouchPadValue(bool touchpadEnable, bool touchscrollingHorizontal, const QString &mode_value, int scroll_int_value, const QString &scroll_string_value) { touchpad_switcher->switchedOn = touchpadEnable; horizontal_scrolling_switcher->switchedOn = touchscrollingHorizontal; if(mode_value == "overlay-auto") { features_radio->setChecked(true); standard_radio->setChecked(false); } else if(mode_value == "normal") { standard_radio->setChecked(true); features_radio->setChecked(false); } if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { if(scroll_int_value == 0) { disable_radio->setChecked(true); edge_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_int_value == 1) { edge_radio->setChecked(true); disable_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_int_value == 2) { two_finger_radio->setChecked(true); disable_radio->setChecked(false); edge_radio->setChecked(false); } } else { if(scroll_string_value == "disabled") { disable_radio->setChecked(true); edge_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_string_value == "edge-scrolling") { edge_radio->setChecked(true); disable_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(scroll_string_value == "two-finger-scrolling") { two_finger_radio->setChecked(true); disable_radio->setChecked(false); edge_radio->setChecked(false); } } } void TouchpadWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(touchpad_switcher, SIGNAL(clicked()), this, SLOT(setTouchpad())); connect(horizontal_scrolling_switcher, SIGNAL(clicked()), this, SLOT(setHorizontalScrolling())); connect(features_radio, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); connect(standard_radio, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); connect(disable_radio, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); connect(edge_radio, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); connect(two_finger_radio, SIGNAL(clicked(/*bool*/)), this, SLOT(setRadioButtonRowStatus(/*bool*/))); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(touchpadwidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(touchpadwidget_notify_bool(QString, bool))); // connect(sessionproxy, SIGNAL(int_value_notify(QString, int)), this, SLOT(touchpadwidget_notify_int(QString, int))); } void TouchpadWidget::touchpadwidget_notify_string(QString key, QString value) { if (key == "scroll-method") { if(value == "disabled") { disable_radio->setChecked(true); edge_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(value == "edge-scrolling") { edge_radio->setChecked(true); disable_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(value == "two-finger-scrolling") { two_finger_radio->setChecked(true); disable_radio->setChecked(false); edge_radio->setChecked(false); } } else if (key == "scrollbar-mode") { if(value == "overlay-auto") { features_radio->setChecked(true); standard_radio->setChecked(false); } else if(value == "normal") { standard_radio->setChecked(true); features_radio->setChecked(false); } } } void TouchpadWidget::touchpadwidget_notify_bool(QString key, bool value) { if (key == "touchpad-enabled") { touchpad_switcher->switchedOn = value; } else if (key == "horiz-scroll-enabled") { horizontal_scrolling_switcher->switchedOn = value; } } void TouchpadWidget::touchpadwidget_notify_int(QString key, int value) { if (key == "scroll-method") { if(value == 0) { disable_radio->setChecked(true); edge_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(value == 1) { edge_radio->setChecked(true); disable_radio->setChecked(false); two_finger_radio->setChecked(false); } else if(value == 2) { two_finger_radio->setChecked(true); disable_radio->setChecked(false); edge_radio->setChecked(false); } } } void TouchpadWidget::setTouchpad() { emit resetTouchpad(touchpad_switcher->switchedOn); // sessionproxy->set_touchpad_enable_qt(touchpad_switcher->switchedOn); } void TouchpadWidget::setHorizontalScrolling() { emit resetHorizontalScrolling(horizontal_scrolling_switcher->switchedOn); // sessionproxy->set_touchscrolling_use_horizontal_qt(horizontal_scrolling_switcher->switchedOn); } void TouchpadWidget::setRadioButtonRowStatus(/*bool status*/) { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 QRadioButton* pbtn = qobject_cast(obj); QString obj_name = pbtn->objectName(); if(obj_name == "features_radio") { emit setScrollbarOverlayOrLegacyMode(true); // sessionproxy->set_scrollbars_mode_overlay_qt(); } else if(obj_name == "standard_radio") { emit setScrollbarOverlayOrLegacyMode(false); // sessionproxy->set_scrollbars_mode_legacy_qt(); } else if(obj_name == "disable_radio") { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") emit setMateTouchscrollingMode(0); // sessionproxy->set_mate_touchscrolling_mode_qt(0); else { emit setUnityTouchscrollingMode(0); // sessionproxy->set_touchscrolling_mode_disabled_qt(); } } else if(obj_name == "edge_radio") { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") emit setMateTouchscrollingMode(1); // sessionproxy->set_mate_touchscrolling_mode_qt(1); else { emit setUnityTouchscrollingMode(1); // sessionproxy->set_touchscrolling_mode_edge_qt(); } } else if(obj_name == "two_finger_radio") { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") emit setMateTouchscrollingMode(2); // sessionproxy->set_mate_touchscrolling_mode_qt(2); else { emit setUnityTouchscrollingMode(2); // sessionproxy->set_touchscrolling_mode_twofinger_qt(); } } } youker-assistant/setting/windowwidget.cpp0000664000175000017500000004233113260315532017724 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "windowwidget.h" #include #include #include #include #include WindowWidget::WindowWidget(QWidget *parent, QString cur_desktop) : SettingModulePage(parent),desktop(cur_desktop) { icon_label = new QLabel(); wheel_label = new QLabel(); double_click_label = new QLabel(); middle_click_label = new QLabel(); right_click_label = new QLabel(); icon_switcher = new KylinSwitcher(); wheel_combo = new QComboBox(); double_click_combo = new QComboBox(); middle_click_combo = new QComboBox(); right_click_combo = new QComboBox(); position_label = new QLabel(); left_radio = new QRadioButton(); right_radio = new QRadioButton(); left_radio->setFocusPolicy(Qt::NoFocus); left_radio->setObjectName("leftradio"); right_radio->setFocusPolicy(Qt::NoFocus); right_radio->setObjectName("rightradio"); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { icon_label->hide(); icon_switcher->hide(); } else { position_label->hide(); left_radio->hide(); right_radio->hide(); } position_label->setFixedWidth(220); icon_label->setFixedWidth(220); wheel_label->setFixedWidth(220); double_click_label->setFixedWidth(220); middle_click_label->setFixedWidth(220); right_click_label->setFixedWidth(220); QHBoxLayout *layout0 = new QHBoxLayout(); layout0->setSpacing(10); layout0->addWidget(position_label); layout0->addWidget(left_radio); layout0->addWidget(right_radio); layout0->addStretch(); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(icon_label); layout1->addWidget(icon_switcher); layout1->addStretch(); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(wheel_label); layout2->addWidget(wheel_combo); layout2->addStretch(); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(double_click_label); layout3->addWidget(double_click_combo); layout3->addStretch(); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(middle_click_label); layout4->addWidget(middle_click_combo); layout4->addStretch(); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(right_click_label); layout5->addWidget(right_click_combo); layout5->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout0); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addLayout(layout5); layout->addStretch(); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 0, 0); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } WindowWidget::~WindowWidget() { if (icon_label != NULL) { delete icon_label; icon_label = NULL; } if (wheel_label != NULL) { delete wheel_label; wheel_label = NULL; } if (double_click_label != NULL) { delete double_click_label; double_click_label = NULL; } if (middle_click_label != NULL) { delete middle_click_label; middle_click_label = NULL; } if (right_click_label != NULL) { delete right_click_label; right_click_label = NULL; } if (icon_switcher != NULL) { delete icon_switcher; icon_switcher = NULL; } if (wheel_combo != NULL) { delete wheel_combo; wheel_combo = NULL; } if (double_click_combo != NULL) { delete double_click_combo; double_click_combo = NULL; } if (middle_click_combo != NULL) { delete middle_click_combo; middle_click_combo = NULL; } if (right_click_combo != NULL) { delete right_click_combo; right_click_combo = NULL; } if (position_label != NULL) { delete position_label; position_label = NULL; } if (left_radio != NULL) { delete left_radio; left_radio = NULL; } if (right_radio != NULL) { delete right_radio; right_radio = NULL; } } QString WindowWidget::settingModuleName() { return "WindowPage"; } void WindowWidget::setLanguage() { // title_label->setText(tr("Window")); // description_label->setText(tr("Window Manager settings.")); // back_btn->setText(tr("Back")); position_label->setText(tr("Arrangement of buttons on the titlebar") + ":");//标题栏按钮布局 icon_label->setText(tr("Menu with icons") + ":"); wheel_label->setText(tr("Titlebar mouse wheel action") + ":"); double_click_label->setText(tr("Titlebar double-click action") + ":"); middle_click_label->setText(tr("Titlebar middle-click action") + ":"); right_click_label->setText(tr("Titlebar right-click action") + ":"); left_radio->setText(tr("Left")); right_radio->setText(tr("Right")); } void WindowWidget::initSettingData() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit this->requesetWindowButtonAlign(); // QString current_value = sessionproxy->get_window_button_align_qt(); // if(current_value == "left") { // left_radio->setChecked(true); // right_radio->setChecked(false); // } // else if(current_value == "right") { // right_radio->setChecked(true); // left_radio->setChecked(false); // } } else { emit this->requesetMenusHaveIcons(); // icon_switcher->switchedOn = sessionproxy->get_menus_have_icons_qt(); } emit this->requesetWindowTitileTags(); // QString current_wheel_type = sessionproxy->get_current_titlebar_wheel_qt(); // //FT arm has no org.compiz.gwd.mouse-wheel-action, so is empty // if (current_wheel_type.isEmpty()) // { // wheel_label->hide(); // wheel_combo->hide(); // } // m_wheellist = sessionproxy->get_titlebar_wheel_qt(); // wheel_combo->clear(); // wheel_combo->clearEditText(); // wheel_combo->addItems(m_wheellist); // QList::Iterator it1 = m_wheellist.begin(), itend1 = m_wheellist.end(); // int initIndex1 = 0; // for(;it1 != itend1; it1++,initIndex1++) // { // if(*it1 == current_wheel_type) // break; // } // wheel_combo->setCurrentIndex(initIndex1); // QString current_double_type = sessionproxy->get_current_titlebar_double_qt(); // m_titlebarOptions = sessionproxy->get_titlebar_options_qt(); // double_click_combo->clear(); // double_click_combo->clearEditText(); // double_click_combo->addItems(m_titlebarOptions); // QList::Iterator it2 = m_titlebarOptions.begin(), itend2 = m_titlebarOptions.end(); // int initIndex2 = 0; // for(;it2 != itend2; it2++,initIndex2++) // { // if(*it2 == current_double_type) // break; // } // double_click_combo->setCurrentIndex(initIndex2); // QString current_middle_type = sessionproxy->get_current_titlebar_middle_qt(); //// QStringList middlelist = sessionproxy->get_titlebar_middle_qt(); // middle_click_combo->clear(); // middle_click_combo->clearEditText(); // middle_click_combo->addItems(m_titlebarOptions); // QList::Iterator it3 = m_titlebarOptions.begin(), itend3 = m_titlebarOptions.end(); // int initIndex3 = 0; // for(;it3 != itend3; it3++,initIndex3++) // { // if(*it3 == current_middle_type) // break; // } // middle_click_combo->setCurrentIndex(initIndex3); // QString current_right_type = sessionproxy->get_current_titlebar_right_qt(); //// QStringList rightlist = sessionproxy->get_titlebar_right_qt(); // right_click_combo->clear(); // right_click_combo->clearEditText(); // right_click_combo->addItems(m_titlebarOptions); // QList::Iterator it4 = m_titlebarOptions.begin(), itend4 = m_titlebarOptions.end(); // int initIndex4 = 0; // for(;it4 != itend4; it4++,initIndex4++) // { // if(*it4 == current_right_type) // break; // } // right_click_combo->setCurrentIndex(initIndex4); this->initConnect(); } void WindowWidget::onSendWindowButtonAlign(const QString ¤t_value) { if(current_value == "left") { left_radio->setChecked(true); right_radio->setChecked(false); } else if(current_value == "right") { right_radio->setChecked(true); left_radio->setChecked(false); } } void WindowWidget::onSendMenusHaveIcons(bool menuHaveIcons) { icon_switcher->switchedOn = menuHaveIcons; } void WindowWidget::onSendWindowTitileTags(const QString ¤t_wheel_type, const QStringList &wheellist, const QStringList &titlebarOptions, const QString ¤t_double_type, const QString ¤t_middle_type, const QString ¤t_right_type) { //FT arm has no org.compiz.gwd.mouse-wheel-action, so is empty if (current_wheel_type.isEmpty()) { wheel_label->hide(); wheel_combo->hide(); } m_wheellist.clear(); m_wheellist = wheellist; wheel_combo->clear(); wheel_combo->clearEditText(); wheel_combo->addItems(m_wheellist); QList::Iterator it1 = m_wheellist.begin(), itend1 = m_wheellist.end(); int initIndex1 = 0; for(;it1 != itend1; it1++,initIndex1++) { if(*it1 == current_wheel_type) break; } wheel_combo->setCurrentIndex(initIndex1); m_titlebarOptions.clear(); m_titlebarOptions = titlebarOptions; double_click_combo->clear(); double_click_combo->clearEditText(); double_click_combo->addItems(m_titlebarOptions); QList::Iterator it2 = m_titlebarOptions.begin(), itend2 = m_titlebarOptions.end(); int initIndex2 = 0; for(;it2 != itend2; it2++,initIndex2++) { if(*it2 == current_double_type) break; } double_click_combo->setCurrentIndex(initIndex2); middle_click_combo->clear(); middle_click_combo->clearEditText(); middle_click_combo->addItems(m_titlebarOptions); QList::Iterator it3 = m_titlebarOptions.begin(), itend3 = m_titlebarOptions.end(); int initIndex3 = 0; for(;it3 != itend3; it3++,initIndex3++) { if(*it3 == current_middle_type) break; } middle_click_combo->setCurrentIndex(initIndex3); right_click_combo->clear(); right_click_combo->clearEditText(); right_click_combo->addItems(m_titlebarOptions); QList::Iterator it4 = m_titlebarOptions.begin(), itend4 = m_titlebarOptions.end(); int initIndex4 = 0; for(;it4 != itend4; it4++,initIndex4++) { if(*it4 == current_right_type) break; } right_click_combo->setCurrentIndex(initIndex4); } void WindowWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(left_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(right_radio, SIGNAL(clicked()), this, SLOT(setRadioButtonRowStatus())); connect(icon_switcher, SIGNAL(clicked()), this, SLOT(setMenuIcon())); connect(wheel_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setMouseWheel(QString))); connect(double_click_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setMouseDoubleClick(QString))); connect(middle_click_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setMouseMiddleClick(QString))); connect(right_click_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setMouseRightClick(QString))); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(windowwidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(bool_value_notify(QString, bool)), this, SLOT(windowwidget_notify_bool(QString, bool))); } void WindowWidget::windowwidget_notify_string(QString key, QString value) { if (key == "button-layout") { if (value == "close,maximize,minimize:menu" || value == "close,minimize,maximize:menu" || value == "close,minimize,maximize:" || value == "close,maximize,minimize:") { left_radio->setChecked(true); right_radio->setChecked(false); } else if (value == "menu:minimize,maximize,close" || value == "menu:maximize,minimize,close" || value == ":minimize,maximize,close" || value == ":maximize,minimize,close") { right_radio->setChecked(true); left_radio->setChecked(false); } } else if (key == "mouse-wheel-action") { QList::Iterator it = m_wheellist.begin(), itend = m_wheellist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; wheel_combo->setCurrentIndex(index); } else wheel_combo->setCurrentIndex(-1); } else if (key == "action-double-click-titlebar") { QList::Iterator it = m_titlebarOptions.begin(), itend = m_titlebarOptions.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; double_click_combo->setCurrentIndex(index); } else double_click_combo->setCurrentIndex(-1); } else if (key == "action-middle-click-titlebar") { QList::Iterator it = m_titlebarOptions.begin(), itend = m_titlebarOptions.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; middle_click_combo->setCurrentIndex(index); } else middle_click_combo->setCurrentIndex(-1); } else if (key == "action-right-click-titlebar") { QList::Iterator it = m_titlebarOptions.begin(), itend = m_titlebarOptions.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; right_click_combo->setCurrentIndex(index); } else right_click_combo->setCurrentIndex(-1); } } void WindowWidget::windowwidget_notify_bool(QString key, bool value) { if (key == "menus-have-icons") { icon_switcher->switchedOn = value; } } void WindowWidget::setMenuIcon() { emit this->resetMenusHaveIcon(icon_switcher->switchedOn); // sessionproxy->set_menus_have_icons_qt(icon_switcher->switchedOn); } void WindowWidget::setMouseWheel(QString selected) { emit this->resetTitlebarWheel(selected); // sessionproxy->set_titlebar_wheel_qt(selected); } void WindowWidget::setMouseDoubleClick(QString selected) { emit this->resetTitlebarDoubleClick(selected); // sessionproxy->set_titlebar_double_qt(selected); } void WindowWidget::setMouseMiddleClick(QString selected) { emit this->resetMouseMiddleClick(selected); // sessionproxy->set_titlebar_middle_qt(selected); } void WindowWidget::setMouseRightClick(QString selected) { emit this->resetMouseRightClick(selected); // sessionproxy->set_titlebar_right_qt(selected); } void WindowWidget::setRadioButtonRowStatus() { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 QRadioButton* pbtn = qobject_cast(obj); QString obj_name = pbtn->objectName(); if(obj_name == "leftradio") { emit this->resetWindowButtonLeftOrRightAlign(true); // sessionproxy->set_window_button_align_left_qt(); } else if(obj_name == "rightradio") { emit this->resetWindowButtonLeftOrRightAlign(false); // sessionproxy->set_window_button_align_right_qt(); } } youker-assistant/setting/fontwidget.cpp0000664000175000017500000006054313260317316017372 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "fontwidget.h" #include #include "../component/kylinfontdialog.h" #include "../src/mainwindow.h" FontWidget::FontWidget(QWidget *parent, MainWindow *window, QString cur_desktop, QString skin) : SettingModulePage(parent), parentWindow(window), desktop(cur_desktop), cur_skin(skin) { default_font_label = new QLabel(); desktop_font_label = new QLabel(); monospace_font_label = new QLabel(); document_font_label = new QLabel(); titlebar_font_label = new QLabel(); scaling_label = new QLabel(); hinting_label = new QLabel(); antialiasing_label = new QLabel(); default_font_btn = new QPushButton(); desktop_font_btn = new QPushButton(); monospace_font_btn = new QPushButton(); document_font_btn = new QPushButton(); titlebar_font_btn = new QPushButton(); scaling_slider = new QDoubleSpinBox(); scaling_slider->setButtonSymbols(QAbstractSpinBox::PlusMinus); scaling_slider->setSingleStep(0.1); scaling_slider->setMinimum(0.5); scaling_slider->setMaximum(3.0); hinting_combo = new QComboBox(); antialiasing_combo = new QComboBox(); restore_default_font_btn = new QPushButton(); restore_desktop_font_btn = new QPushButton(); restore_monospace_font_btn = new QPushButton(); restore_document_font_btn = new QPushButton(); restore_titlebar_font_btn = new QPushButton(); restore_default_font_btn->setFixedSize(91, 25); restore_desktop_font_btn->setFixedSize(91, 25); restore_monospace_font_btn->setFixedSize(91, 25); restore_document_font_btn->setFixedSize(91, 25); restore_titlebar_font_btn->setFixedSize(91, 25); restore_default_font_btn->setObjectName("blackButton"); restore_desktop_font_btn->setObjectName("blackButton"); restore_monospace_font_btn->setObjectName("blackButton"); restore_document_font_btn->setObjectName("blackButton"); restore_titlebar_font_btn->setObjectName("blackButton"); restore_default_font_btn->setFocusPolicy(Qt::NoFocus); restore_desktop_font_btn->setFocusPolicy(Qt::NoFocus); restore_monospace_font_btn->setFocusPolicy(Qt::NoFocus); restore_document_font_btn->setFocusPolicy(Qt::NoFocus); restore_titlebar_font_btn->setFocusPolicy(Qt::NoFocus); default_font_btn->setObjectName("transparentButton"); desktop_font_btn->setObjectName("transparentButton"); monospace_font_btn->setObjectName("transparentButton"); document_font_btn->setObjectName("transparentButton"); titlebar_font_btn->setObjectName("transparentButton"); default_font_btn->setFocusPolicy(Qt::NoFocus); desktop_font_btn->setFocusPolicy(Qt::NoFocus); monospace_font_btn->setFocusPolicy(Qt::NoFocus); document_font_btn->setFocusPolicy(Qt::NoFocus); titlebar_font_btn->setFocusPolicy(Qt::NoFocus); default_font_btn->setToolTip(tr("Click here to change font")); desktop_font_btn->setToolTip(tr("Click here to change font")); monospace_font_btn->setToolTip(tr("Click here to change font")); document_font_btn->setToolTip(tr("Click here to change font")); titlebar_font_btn->setToolTip(tr("Click here to change font")); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { scaling_label->hide(); scaling_slider->hide(); } default_font_label->setFixedWidth(150); desktop_font_label->setFixedWidth(150); monospace_font_label->setFixedWidth(150); document_font_label->setFixedWidth(150); titlebar_font_label->setFixedWidth(150); scaling_label->setFixedWidth(150); hinting_label->setFixedWidth(150); antialiasing_label->setFixedWidth(150); QHBoxLayout *layout1 = new QHBoxLayout(); layout1->setSpacing(10); layout1->addWidget(default_font_label); layout1->addWidget(default_font_btn); layout1->addStretch(); layout1->addWidget(restore_default_font_btn); layout1->setContentsMargins(0, 0, 200, 0); QHBoxLayout *layout2 = new QHBoxLayout(); layout2->setSpacing(10); layout2->addWidget(desktop_font_label); layout2->addWidget(desktop_font_btn); layout2->addStretch(); layout2->addWidget(restore_desktop_font_btn); layout2->setContentsMargins(0, 0, 200, 0); QHBoxLayout *layout3 = new QHBoxLayout(); layout3->setSpacing(10); layout3->addWidget(monospace_font_label); layout3->addWidget(monospace_font_btn); layout3->addStretch(); layout3->addWidget(restore_monospace_font_btn); layout3->setContentsMargins(0, 0, 200, 0); QHBoxLayout *layout4 = new QHBoxLayout(); layout4->setSpacing(10); layout4->addWidget(document_font_label); layout4->addWidget(document_font_btn); layout4->addStretch(); layout4->addWidget(restore_document_font_btn); layout4->setContentsMargins(0, 0, 200, 0); QHBoxLayout *layout5 = new QHBoxLayout(); layout5->setSpacing(10); layout5->addWidget(titlebar_font_label); layout5->addWidget(titlebar_font_btn); layout5->addStretch(); layout5->addWidget(restore_titlebar_font_btn); layout5->setContentsMargins(0, 0, 200, 0); QHBoxLayout *layout6 = new QHBoxLayout(); layout6->setSpacing(10); layout6->addWidget(scaling_label); layout6->addWidget(scaling_slider); layout6->addStretch(); QHBoxLayout *layout7 = new QHBoxLayout(); layout7->setSpacing(10); layout7->addWidget(hinting_label); layout7->addWidget(hinting_combo); layout7->addStretch(); QHBoxLayout *layout8 = new QHBoxLayout(); layout8->setSpacing(10); layout8->addWidget(antialiasing_label); layout8->addWidget(antialiasing_combo); layout8->addStretch(); QVBoxLayout *layout = new QVBoxLayout(); layout->addLayout(layout1); layout->addLayout(layout2); layout->addLayout(layout3); layout->addLayout(layout4); layout->addLayout(layout5); layout->addLayout(layout6); layout->addLayout(layout7); layout->addLayout(layout8); layout->addStretch(); // bottom_widget->setLayout(layout); setLayout(layout); layout->setSpacing(10); layout->setContentsMargins(20, 20, 20, 0); // splitter->addWidget(top_widget); // splitter->addWidget(bottom_widget); // QHBoxLayout *main_layout = new QHBoxLayout; // main_layout->addStretch(); // main_layout->addWidget(splitter); // main_layout->setSpacing(0); // main_layout->setContentsMargins(0, 0, 0, 0); // setLayout(main_layout); // this->initSettingData(); this->setLanguage(); } FontWidget::~FontWidget() { if (default_font_label != NULL) { delete default_font_label; default_font_label = NULL; } if (desktop_font_label != NULL) { delete desktop_font_label; desktop_font_label = NULL; } if (monospace_font_label != NULL) { delete monospace_font_label; monospace_font_label = NULL; } if (document_font_label != NULL) { delete document_font_label; document_font_label = NULL; } if (titlebar_font_label != NULL) { delete titlebar_font_label; titlebar_font_label = NULL; } if (scaling_label != NULL) { delete scaling_label; scaling_label = NULL; } if (hinting_label != NULL) { delete hinting_label; hinting_label = NULL; } if (antialiasing_label != NULL) { delete antialiasing_label; antialiasing_label = NULL; } if (default_font_btn != NULL) { delete default_font_btn; default_font_btn = NULL; } if (desktop_font_btn != NULL) { delete desktop_font_btn; desktop_font_btn = NULL; } if (monospace_font_btn != NULL) { delete monospace_font_btn; monospace_font_btn = NULL; } if (document_font_btn != NULL) { delete document_font_btn; document_font_btn = NULL; } if (titlebar_font_btn != NULL) { delete titlebar_font_btn; titlebar_font_btn = NULL; } if (scaling_slider != NULL) { delete scaling_slider; scaling_slider = NULL; } if (hinting_combo != NULL) { delete hinting_combo; hinting_combo = NULL; } if (antialiasing_combo != NULL) { delete antialiasing_combo; antialiasing_combo = NULL; } if (restore_default_font_btn != NULL) { delete restore_default_font_btn; restore_default_font_btn = NULL; } if (restore_desktop_font_btn != NULL) { delete restore_desktop_font_btn; restore_desktop_font_btn = NULL; } if (restore_monospace_font_btn != NULL) { delete restore_monospace_font_btn; restore_monospace_font_btn = NULL; } if (restore_document_font_btn != NULL) { delete restore_document_font_btn; restore_document_font_btn = NULL; } if (restore_titlebar_font_btn != NULL) { delete restore_titlebar_font_btn; restore_titlebar_font_btn = NULL; } } QString FontWidget::settingModuleName() { return "FontPage"; } void FontWidget::setLanguage() { // title_label->setText(tr("Default font settings")); // description_label->setText(tr("According to personal preferences to set the system default font, click the 'Restore' button, can be restored to the state before the font settings.")); // back_btn->setText(tr("Back")); default_font_label->setText(tr("Default Font") + ":"); desktop_font_label->setText(tr("Desktop Font") + ":"); monospace_font_label->setText(tr("Monospace Font") + ":"); document_font_label->setText(tr("Document Font") + ":"); titlebar_font_label->setText(tr("Titlebar Font") + ":"); scaling_label->setText(tr("Global Font Scaling") + ":"); hinting_label->setText(tr("Hinting") + ":"); antialiasing_label->setText(tr("Antialiasing") + ":"); restore_default_font_btn->setText(tr("Restore")); restore_desktop_font_btn->setText(tr("Restore")); restore_monospace_font_btn->setText(tr("Restore")); restore_document_font_btn->setText(tr("Restore")); restore_titlebar_font_btn->setText(tr("Restore")); } void FontWidget::initSettingData() { emit requestFontData(); /*current_font = sessionproxy->get_font_qt(); desktop_font = sessionproxy->get_desktop_font_qt(); if(desktop_font.isEmpty()) { // sessionproxy->set_desktop_font_qt_default(); if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") sessionproxy->set_desktop_font_qt("Sans 10"); else sessionproxy->set_desktop_font_qt("Ubuntu 11"); } desktop_font = sessionproxy->get_desktop_font_qt(); monospace_font = sessionproxy->get_monospace_font_qt(); document_font = sessionproxy->get_document_font_qt(); titlebar_font = sessionproxy->get_window_title_font_qt(); default_font_btn->setText(current_font); desktop_font_btn->setText(desktop_font); monospace_font_btn->setText(monospace_font); document_font_btn->setText(document_font); titlebar_font_btn->setText(titlebar_font); if (this->desktop != "mate" || this->desktop == "MATE") { scaling_slider->setValue(sessionproxy->get_font_zoom_qt()); } QString current_smooth = sessionproxy->get_smooth_style_qt(); m_smoothlist = sessionproxy->get_smooth_style_list_qt(); hinting_combo->clear(); hinting_combo->clearEditText(); hinting_combo->addItems(m_smoothlist); QList::Iterator it = m_smoothlist.begin(), itend = m_smoothlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == current_smooth) break; } hinting_combo->setCurrentIndex(initIndex); QString current_antialiasing = sessionproxy->get_antialiasing_style_qt(); m_antialiasinglist = sessionproxy->get_antialiasing_style_list_qt(); antialiasing_combo->clear(); antialiasing_combo->clearEditText(); antialiasing_combo->addItems(m_antialiasinglist); QList::Iterator ite = m_antialiasinglist.begin(), iteend = m_antialiasinglist.end(); int index = 0; for(;ite != iteend; ite++,index++) { if(*ite == current_antialiasing) break; } antialiasing_combo->setCurrentIndex(index);*/ this->initConnect(); } void FontWidget::onSendFontValue(const QString &curFont) { default_font_btn->setText(curFont); } void FontWidget::onSendDesktopFontValue(const QString &curFont) { desktop_font_btn->setText(curFont); } void FontWidget::onSendMonospaceFontValue(const QString &curFont) { monospace_font_btn->setText(curFont); } void FontWidget::onSendDocumentFontValue(const QString &curFont) { document_font_btn->setText(curFont); } void FontWidget::onSendTitlebarFontValue(const QString &curFont) { titlebar_font_btn->setText(curFont); } void FontWidget::onSendFontSmoothAndAntialiasingValue(double fontZoom, const QString ¤t_smooth, const QStringList &smoothlist, const QString ¤t_antialiasing, const QStringList &antialiasinglist) { if (this->desktop != "mate" || this->desktop == "MATE") { scaling_slider->setValue(fontZoom); } m_smoothlist.clear(); m_smoothlist = smoothlist; hinting_combo->clear(); hinting_combo->clearEditText(); hinting_combo->addItems(m_smoothlist); QList::Iterator it = m_smoothlist.begin(), itend = m_smoothlist.end(); int initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == current_smooth) break; } hinting_combo->setCurrentIndex(initIndex); m_antialiasinglist.clear(); m_antialiasinglist = antialiasinglist; antialiasing_combo->clear(); antialiasing_combo->clearEditText(); antialiasing_combo->addItems(m_antialiasinglist); QList::Iterator ite = m_antialiasinglist.begin(), iteend = m_antialiasinglist.end(); int index = 0; for(;ite != iteend; ite++,index++) { if(*ite == current_antialiasing) break; } antialiasing_combo->setCurrentIndex(index); } void FontWidget::initConnect() { // connect(back_btn, SIGNAL(clicked()), this, SIGNAL(showSettingMainWidget())); connect(default_font_btn, SIGNAL(clicked()), this, SLOT(setDefaultFont())); connect(desktop_font_btn, SIGNAL(clicked()), this, SLOT(setDesktopFont())); connect(monospace_font_btn, SIGNAL(clicked()), this, SLOT(setMonospaceFont())); connect(document_font_btn, SIGNAL(clicked()), this, SLOT(setDocumentFont())); connect(titlebar_font_btn, SIGNAL(clicked()), this, SLOT(setTitlebarFont())); connect(scaling_slider, SIGNAL(valueChanged(double)), this, SLOT(setScalingValue(double))); connect(hinting_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setFontHinting(QString))); connect(antialiasing_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setFontAntialiasing(QString))); connect(restore_default_font_btn, SIGNAL(clicked()), this, SLOT(restore_default_font())); connect(restore_desktop_font_btn, SIGNAL(clicked()), this, SLOT(restore_desktop_font())); connect(restore_monospace_font_btn, SIGNAL(clicked()), this, SLOT(restore_monospace_font())); connect(restore_document_font_btn, SIGNAL(clicked()), this, SLOT(restore_document_font())); connect(restore_titlebar_font_btn, SIGNAL(clicked()), this, SLOT(restore_titlebar_font())); // connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(fontwidget_notify_string(QString, QString))); // connect(sessionproxy, SIGNAL(double_value_notify(QString, double)), this, SLOT(fontwidget_notify_double(QString, double))); } void FontWidget::fontwidget_notify_string(QString key, QString value) { if (key == "font-name") { default_font_btn->setText(value); } else if (key == "font") { desktop_font_btn->setText(value); } else if (key == "monospace-font-name") { monospace_font_btn->setText(value); } else if (key == "document-font-name") { document_font_btn->setText(value); } else if (key == "titlebar-font") { titlebar_font_btn->setText(value); } else if (key == "hinting") { QList::Iterator it = m_smoothlist.begin(), itend = m_smoothlist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; hinting_combo->setCurrentIndex(index); } else hinting_combo->setCurrentIndex(-1); } else if (key == "antialiasing") { QList::Iterator it = m_antialiasinglist.begin(), itend = m_antialiasinglist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if (exist) { exist = false; antialiasing_combo->setCurrentIndex(index); } else antialiasing_combo->setCurrentIndex(-1); } } void FontWidget::fontwidget_notify_double(QString key, double value) { if (key == "text-scaling-factor") { scaling_slider->setValue(value); } } void FontWidget::setDefaultFont() { // KylinFontDialog *fontDialog = new KylinFontDialog(mSettings, flag, current_font, 0); KylinFontDialog *fontDialog = new KylinFontDialog(current_font/*, this->cur_skin, 0*/); connect(fontDialog, SIGNAL(rebackCurrentFont(QString)), this, SLOT(resetDefaultFont(QString))); fontDialog->exec(); } void FontWidget::resetDefaultFont(QString cur_font) { this->current_font = cur_font; emit setDefaultFontByName(cur_font); // sessionproxy->set_font_qt(cur_font); default_font_btn->setText(cur_font); } void FontWidget::setDesktopFont() { KylinFontDialog *fontDialog = new KylinFontDialog(desktop_font/*, this->cur_skin, 0*/); connect(fontDialog, SIGNAL(rebackCurrentFont(QString)), this, SLOT(resetDesktopFont(QString))); fontDialog->exec(); } void FontWidget::resetDesktopFont(QString cur_font) { this->desktop_font = cur_font; emit setDesktopFontByName(cur_font); // sessionproxy->set_desktop_font_qt(cur_font); desktop_font_btn->setText(cur_font); } void FontWidget::resetCurrentSkin(QString skin) { this->cur_skin = skin; } void FontWidget::setMonospaceFont() { KylinFontDialog *fontDialog = new KylinFontDialog(monospace_font/*, this->cur_skin, 0*/); connect(fontDialog, SIGNAL(rebackCurrentFont(QString)), this, SLOT(resetMonospaceFont(QString))); fontDialog->exec(); } void FontWidget::resetMonospaceFont(QString cur_font) { this->monospace_font = cur_font; emit setMonospaceFontByName(cur_font); // sessionproxy->set_monospace_font_qt(cur_font); monospace_font_btn->setText(cur_font); } void FontWidget::setDocumentFont() { KylinFontDialog *fontDialog = new KylinFontDialog(document_font/*, this->cur_skin, 0*/); connect(fontDialog, SIGNAL(rebackCurrentFont(QString)), this, SLOT(resetDocumentFont(QString))); fontDialog->exec(); } void FontWidget::resetDocumentFont(QString cur_font) { this->document_font = cur_font; emit setDocumentFontByName(cur_font); // sessionproxy->set_document_font_qt(cur_font); document_font_btn->setText(cur_font); } void FontWidget::setTitlebarFont() { KylinFontDialog *fontDialog = new KylinFontDialog(titlebar_font/*, this->cur_skin, 0*/); connect(fontDialog, SIGNAL(rebackCurrentFont(QString)), this, SLOT(resetTitlebarFont(QString))); fontDialog->exec(); } void FontWidget::resetTitlebarFont(QString cur_font) { this->titlebar_font = cur_font; emit setTitlebarFontByName(cur_font); // sessionproxy->set_window_title_font_qt(cur_font); titlebar_font_btn->setText(cur_font); } void FontWidget::setScalingValue(double value) { emit resetFontZoomScalingValue(value); // sessionproxy->set_font_zoom_qt(value); } void FontWidget::setFontHinting(QString selected) { emit resetFontHinting(selected); // sessionproxy->set_smooth_style_qt(selected); } void FontWidget::setFontAntialiasing(QString selected) { emit resetFontAntialiasing(selected); // sessionproxy->set_antialiasing_style_qt(selected); } void FontWidget::restore_default_font() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit restoreDefaultFont(true); // sessionproxy->set_default_font_string_qt("org.mate.interface", "font-name", "string"); // default_font_btn->setText(sessionproxy->get_default_font_string_qt("org.mate.interface", "font-name")); } else { emit restoreDefaultFont(false); // sessionproxy->set_default_font_string_qt("org.gnome.desktop.interface", "font-name", "string"); // default_font_btn->setText(sessionproxy->get_default_font_string_qt("org.gnome.desktop.interface", "font-name")); } } void FontWidget::restore_desktop_font() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit restoreDesktopDefaultFont(true); // sessionproxy->set_default_font_string_qt("org.ukui.peony.desktop", "font", "string"); // desktop_font_btn->setText(sessionproxy->get_default_font_string_qt("org.ukui.peony.desktop", "font")); } else { emit restoreDesktopDefaultFont(false); // sessionproxy->set_default_font_string_qt("org.gnome.nautilus.desktop", "font", "string"); // desktop_font_btn->setText(sessionproxy->get_default_font_string_qt("org.gnome.nautilus.desktop", "font")); } } void FontWidget::restore_monospace_font() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit restoreMonospaceDefaultFont(true); // sessionproxy->set_default_font_string_qt("org.mate.interface", "monospace-font-name", "string"); // monospace_font_btn->setText(sessionproxy->get_default_font_string_qt("org.mate.interface", "monospace-font-name")); } else { emit restoreMonospaceDefaultFont(false); // sessionproxy->set_default_font_string_qt("org.gnome.desktop.interface", "monospace-font-name", "string"); // monospace_font_btn->setText(sessionproxy->get_default_font_string_qt("org.gnome.desktop.interface", "monospace-font-name")); } } void FontWidget::restore_document_font() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit restoreDocumentDefaultFont(true); // sessionproxy->set_default_font_string_qt("org.mate.interface", "document-font-name", "string"); // document_font_btn->setText(sessionproxy->get_default_font_string_qt("org.mate.interface", "document-font-name")); } else { emit restoreDocumentDefaultFont(false); // sessionproxy->set_default_font_string_qt("org.gnome.desktop.interface", "document-font-name", "string"); // document_font_btn->setText(sessionproxy->get_default_font_string_qt("org.gnome.desktop.interface", "document-font-name")); } } void FontWidget::restore_titlebar_font() { if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { emit restoreTitlebarDefaultFont(true); // sessionproxy->set_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font", "string"); // titlebar_font_btn->setText(sessionproxy->get_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font")); } else { emit restoreTitlebarDefaultFont(false); // sessionproxy->set_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font", "string"); // titlebar_font_btn->setText(sessionproxy->get_default_font_string_qt("org.gnome.desktop.wm.preferences", "titlebar-font")); } } youker-assistant/setting/themewidget-org.cpp0000664000175000017500000001620613260315532020306 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 "themewidget.h" #include #include #include #include #include #include "../dbusproxy/youkersessiondbus.h" ThemeWidget::ThemeWidget(QWidget *parent, SessionDispatcher *proxy) : QWidget(parent), sessionproxy(proxy) { //创建QListWidget部件 list_widget = new QListWidget(this); list_widget->setFocusPolicy(Qt::NoFocus); //设置QListWidget中的单元项的图片大小 list_widget->setIconSize(QSize(106, 106)); list_widget->setResizeMode(QListView::Adjust); //设置QListWidget的显示模式 list_widget->setViewMode(QListView::IconMode); //设置QListWidget中的单元项不可被拖动 list_widget->setMovement(QListView::Static); //设置QListWidget中的单元项的间距 list_widget->setSpacing(26); // QPalette palette1; // palette1.setBrush(QPalette::Normal, QPalette::Highlight, Qt::black); // palette1.setBrush(QPalette::Inactive, QPalette::Highlight, Qt::black); // list_widget->setPalette(palette1); dataOK = false; current_index = 0; initIndex = 0; using_label = new QLabel(list_widget); using_label->setFixedSize(20, 20); using_label->setAutoFillBackground(true); QPalette palette; // palette.setBrush(using_label->backgroundRole(), QBrush(QPixmap("://res/using.png"))); palette.setBrush(QPalette::Background, QBrush(QPixmap("://res/checkbox-press.png"))); using_label->setPalette(palette); using_label->show(); // using_label->move(26, 26); // QHBoxLayout *layout = new QHBoxLayout(); // layout->addWidget(list_widget); // setLayout(layout); QGridLayout *layout = new QGridLayout(); layout->addWidget(list_widget); setLayout(layout); } bool ThemeWidget::getStatus() { return this->dataOK; } void ThemeWidget::initData() { QString current_theme = sessionproxy->get_theme_qt(); /*QStringList */syslist = sessionproxy->get_themes_qt(); QList::Iterator it = syslist.begin(), itend = syslist.end(); initIndex = 0; for(;it != itend; it++,initIndex++) { if(*it == current_theme) break; } for(int i = 0; isetSizeHint(QSize(130,130)); // pItem->setFlags(Qt::ItemIsSelectable); // pItem->setBackgroundColor(QColor(0, 0, 255, 127)); // pItem->setTextColor(QColor(0, 0, 255, 127));//0629 list_widget->insertItem(i, pItem); // QListWidgetItem *pItem = new QListWidgetItem(QIcon(pixmap.scaled(QSize(106,106))), tr("%1").arg(syslist[i]), list_widget); // QWidget *wContainer = new QWidget(list_widget); //// wContainer->setStyleSheet("QWidget{background:transparent url(://res/menu-big-hover.png);}"); // wContainer->resize(130, 130); // QLabel *label = new QLabel(); // label->setStyleSheet("QLabel{background-image:url('://res/menu-big-hover.png')}"); // QHBoxLayout *hLayout = new QHBoxLayout(wContainer); // hLayout->addWidget(label); // list_widget->setItemWidget(pItem,wContainer); } //set using logo QListWidgetItem *cur_item = list_widget->item(initIndex); this->initCurrentTheme(cur_item); dataOK = true; this->initConnect(); } ThemeWidget::~ThemeWidget() { } void ThemeWidget::initConnect() { connect(list_widget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(onItemClicked(QListWidgetItem*))); connect(sessionproxy, SIGNAL(string_value_notify(QString, QString)), this, SLOT(themewidget_notify_string(QString, QString))); } void ThemeWidget::themewidget_notify_string(QString key, QString value) { if (key == "gtk-theme") { QList::Iterator it = syslist.begin(), itend = syslist.end(); int index = -1; bool exist = false; for(;it != itend; it++) { ++index; if(*it == value) { exist = true; break; } } if(exist) { exist = false; QListWidgetItem *cur_item = list_widget->item(index); this->initCurrentTheme(cur_item); } } } void ThemeWidget::initCurrentTheme(QListWidgetItem *init_item) { int nRowIndex = list_widget->row(init_item); QRect rect = list_widget->visualItemRect(init_item); // QPoint p = rect.topLeft(); // using_label->move(p.x(), p.y()); QPoint p = rect.bottomRight(); using_label->move(p.x()-20, p.y()-40); // using_label->move(p.x(), p.y()); //reset current item status QListWidgetItem *pre_item = list_widget->item(current_index); // pre_item->setTextColor(QColor(0, 0, 255, 127));//0629 pre_item->setTextColor(QColor("4f4f4f")); current_index = nRowIndex; init_item->setTextColor(QColor("4f4f4f")); } void ThemeWidget::onItemClicked(QListWidgetItem *selected_item) { if(!selected_item) { return; } sessionproxy->set_theme_qt(selected_item->text()); int nRowIndex = list_widget->row(selected_item); QRect rect = list_widget->visualItemRect(selected_item); // QPoint p = rect.topLeft(); QPoint p = rect.bottomRight(); using_label->move(p.x()-20, p.y()-40); // p.setX(p.x() + 58); // p.setY(p.y() + 29); // using_label->move(p.x(), p.y()); //reset current item status QListWidgetItem *pre_item = list_widget->item(current_index); // pre_item->setTextColor(QColor(0, 0, 255, 127)); pre_item->setTextColor(QColor("4f4f4f")); pre_item->setBackground(Qt::white); current_index = nRowIndex; // item->setBackgroundColor(QColor(0, 0, 255, 127)); selected_item->setTextColor(QColor("4f4f4f")); // selected_item->setSizeHint(QSize(130,130)); } void ThemeWidget::paintEvent(QPaintEvent *) { //kobe: if the scrollbar move, the using_label should move the the select item QListWidgetItem *select_item = list_widget->item(current_index); QRect rect = list_widget->visualItemRect(select_item); // QPoint p = rect.topLeft(); // using_label->move(p.x(), p.y()); QPoint p = rect.bottomRight(); using_label->move(p.x()-20, p.y()-40); } youker-assistant/setting/touchpadwidget.h0000664000175000017500000000471413260315532017674 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 TOUCHPADWIDGET_H #define TOUCHPADWIDGET_H #include #include "../component/kylinswitcher.h" #include "settingmodulelpage.h" class QLabel; class QPushButton; class QRadioButton; class TouchpadWidget : public SettingModulePage { Q_OBJECT public: explicit TouchpadWidget(QWidget *parent = 0, QString cur_desktop = ""); ~TouchpadWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void setRadioButtonRowStatus(/*bool status*/); void setTouchpad(); void setHorizontalScrolling(); void touchpadwidget_notify_string(QString key, QString value); void touchpadwidget_notify_bool(QString key, bool value); void touchpadwidget_notify_int(QString key, int value); void onSendTouchPadValue(bool touchpadEnable, bool touchscrollingHorizontal, const QString &mode_value, int scroll_int_value, const QString &scroll_string_value); signals: void requestMateOrUnityTouchpadData(bool isMate); void resetTouchpad(bool b); void resetHorizontalScrolling(bool b); void setScrollbarOverlayOrLegacyMode(bool b); void setMateTouchscrollingMode(int flag); void setUnityTouchscrollingMode(int flag); private: QLabel *touchpad_label; QLabel *horizontal_scrolling_label; QLabel *scrollbar_type_label; QLabel *scrolling_mode_label; KylinSwitcher *touchpad_switcher; KylinSwitcher *horizontal_scrolling_switcher; QRadioButton *features_radio; QRadioButton *standard_radio; QRadioButton *disable_radio; QRadioButton *edge_radio; QRadioButton *two_finger_radio; QString desktop; QString release; }; #endif // TOUCHPADWIDGET_H youker-assistant/setting/themewidget-org.h0000664000175000017500000000310113260315532017741 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 THEMEWIDGET_H #define THEMEWIDGET_H #include class SessionDispatcher; class QLabel; class QPushButton; class QListWidget; class QListWidgetItem; class ThemeWidget : public QWidget { Q_OBJECT public: explicit ThemeWidget(QWidget *parent = 0, SessionDispatcher *proxy = 0); ~ThemeWidget(); void initConnect(); void initCurrentTheme(QListWidgetItem *init_item); void initData(); bool getStatus(); protected: void paintEvent(QPaintEvent *); public slots: void onItemClicked(QListWidgetItem *selected_item); void themewidget_notify_string(QString key, QString value); private: QListWidget *list_widget; int current_index; QLabel *using_label; SessionDispatcher *sessionproxy; bool dataOK; int initIndex; QStringList syslist; }; #endif // THEMEWIDGET_H youker-assistant/setting/energywidget.h0000664000175000017500000001065413260315532017356 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 ENERGYWIDGET_H #define ENERGYWIDGET_H #include #include "../component/kylinswitcher.h" #include #include #include class QLabel; class QComboBox; class QDoubleSpinBox; class QSlider; class QRadioButton; class QVBoxLayout; #include "settingmodulelpage.h" class EnergyWidget : public SettingModulePage { Q_OBJECT public: explicit EnergyWidget(QStringList cpulist, QString cpu, QString cur_desktop, bool has_battery = false, QWidget *parent = 0); ~EnergyWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void setScreenGammaValue(double value); void setBrightnessValue(int value); // void setIdleDelay(QString value); void setIdleDelay(int index); void setLockEnabled(); // void setLockDelay(QString value); void setLockDelay(int index); void onCpuRadioButtonClicked(); void setRadioButtonRowStatus(); void setSleepTimeoutBattery(int index); void setSleepTimeoutAC(int index); void setSleepTimeoutDisplayBattery(int index); void setSleepTimeoutDisplayAC(int index); void onSendIdleAndGammaData(double gamma, const QStringList &aclist, int brightnessValue, const QString &sleepTimeoutDisplayBattery, const QString &sleepTimeoutFisplayAC, const QString &idle_delay, const QStringList &idledelaylist); void onSendLockAndSleepData(bool lockEnabled, const QString &lock_delay, const QStringList &lockdelaylist, const QString &critical_low, const QString &laptop_battery, const QString &laptop_ac, const QString &sleepTimeoutBattery, const QStringList &batterylist, const QString &sleepTimeoutAc); signals: void requestPowerAndBatteryData(); void resetScreenGammaValue(double value); void resetBrightnessValue(int value); void resetIdleDelay(int index, int curValue); void resetLockEnabled(bool b); void resetLockDelay(int index, int curValue); void setCurrentCriticalLow(const QString &value); void setCurrentLidBattery(const QString &value); void setCurrentLidAC(const QString &value); void resetSleepTimeoutBattery(int index, int value); void resetSleepTimeoutAC(int index, int value); void resetSleepTimeoutDisplayBattery(int index, int value); void resetSleepTimeoutDisplayAC(int index, int value); void setCurrentCpuMode(const QString &mode); private: QString desktop; QString current_idle_delay; QString current_lock_delay; QString sleep_timeout_battery; QString sleep_timeout_ac; QString sleep_timeout_display_battery; QString sleep_timeout_display_ac; QLabel *gamma_label; QDoubleSpinBox *gamma_slider; QLabel *brightness_label; QLabel *brightness_value_label; QSlider *brightness_slider; QLabel *idle_delay_label; QComboBox *idle_delay_combo; QLabel *lock_enabled_label; KylinSwitcher *lock_enabled_switch; QLabel *lock_delay_label; QComboBox *lock_delay_combo; QLabel *critical_low_label; QRadioButton *suspend_low_radio; QRadioButton *shutdown_radio; QLabel *laptop_lid_battery_label; QRadioButton *suspend_lid_battery_radio; QRadioButton *nothing_battery_radio; QLabel *laptop_lid_ac_label; QRadioButton *suspend_lid_ac_radio; QRadioButton *nothing_ac_radio; QLabel *sleep_battery_label; QComboBox *sleep_battery_combo; QLabel *sleep_ac_label; QComboBox *sleep_ac_combo; QLabel *sleep_battery_display_label; QComboBox *sleep_battery_display_combo; QLabel *sleep_ac_display_label; QComboBox *sleep_ac_display_combo; QStringList m_aclist; QVBoxLayout *m_layout = nullptr; }; #endif // ENERGYWIDGET_H youker-assistant/setting/filemanagerwidget.h0000664000175000017500000000532413260315532020335 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 FILEMANAGERWIDGET_H #define FILEMANAGERWIDGET_H #include #include "../component/kylinswitcher.h" class QLabel; class QPushButton; class QSlider; #include "settingmodulelpage.h" class FileManagerWidget : public SettingModulePage { Q_OBJECT public: explicit FileManagerWidget(QWidget *parent = 0); ~FileManagerWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void setLocation(); void setMountMedia(); void setOpenFolder(); void setAutorunProgram(); void setIconSizeValue(int value); void setCacheTimeValue(int value); void setCacheSizeValue(int value); void nautiluswidget_notify_bool(QString key, bool value); void nautiluswidget_notify_int(QString key, int value); void onSendFileManagerData(bool locationReplacePathbar, bool autoMountMedia, bool autoOpenFolder, bool promptAutorunPrograms, int thumbnailIconSize, int thumbnailCacheTime, int thumbnailCacheSize); signals: void requestFileManagerData(); void resetLocationReplacePathbar(bool b); void resetAutoMountMedia(bool b); void resetAutoOpenFolder(bool b); void resetPromptAutorunPrograms(bool b); void resetThumbnailIconSize(int value); void resetThumbnailCacheTime(int value); void resetThumbnailCacheSize(int value); private: QLabel *location_label; QLabel *mount_media_label; QLabel *open_folder_label; QLabel *autorun_program_label; QLabel *icon_size_label; QLabel *size_value_label; QLabel *cache_time_label; QLabel *time_value_label; QLabel *cache_size_label; QLabel *cache_value_label; KylinSwitcher *location_switcher; KylinSwitcher *mount_media_switcher; KylinSwitcher *open_folder_switcher; KylinSwitcher *autorun_program_switcher; QSlider *icon_size_slider; QSlider *cache_time_slider; QSlider *cache_size_slider; }; #endif // FILEMANAGERWIDGET_H youker-assistant/setting/soundwidget.h0000664000175000017500000000425313260315532017213 0ustar fengfeng/* * Copyright (C) 2013 ~ 2015 National University of Defense Technology(NUDT) & Kylin Ltd. * * Authors: * Kobe Lee xiangli@ubuntukylin.com/kobe24_lixiang@126.com * * 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; version 3. * * 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 SOUNDWIDGET_H #define SOUNDWIDGET_H #include #include "../component/kylinswitcher.h" #include "settingmodulelpage.h" class QLabel; class QPushButton; class QComboBox; class SoundWidget : public SettingModulePage { Q_OBJECT public: explicit SoundWidget(QWidget *parent = 0, QString cur_desktop = ""); ~SoundWidget(); void setLanguage(); void initConnect(); void initSettingData() Q_DECL_OVERRIDE; QString settingModuleName() Q_DECL_OVERRIDE; public slots: void setVoiceTheme(QString selectTheme); void setLoginTipVoice(); void setEventVoice(); void setInputFeedbackVoice(); void voicewidget_notify_string(QString key, QString value); void voicewidget_notify_bool(QString key, bool value); void onSendSoundList(const QString ¤tSound, const QStringList &soundList); void onSendEnableSoundValue(bool login_music, bool sound_event, bool input_sound); signals: void requestSoundData(); void resetVoiceTheme(QString selectTheme); void resetLoginTipVoice(bool b); void resetEventVoice(bool b); void resetInputFeedbackVoice(bool b); private: QString desktop; QStringList m_soundlist; QLabel *theme_label; QLabel *tip_label; QLabel *event_label; QLabel *feedback_label; QComboBox *theme_combo; KylinSwitcher *tip_switcher; KylinSwitcher *event_switcher; KylinSwitcher *feedback_switcher; }; #endif // SOUNDWIDGET_H